{"_id":"@redux-ts-starter-kit/slice","_rev":"54-e7c28109d5526489c73c7d9dc15d502f","name":"@redux-ts-starter-kit/slice","dist-tags":{"latest":"3.0.7-alpha.0","alpha":"2.0.0-alpha.6"},"versions":{"0.0.2-alpha.3":{"name":"@redux-ts-starter-kit/slice","version":"0.0.2-alpha.3","main":"./lib/index.js","types":"./lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/robodux.git"},"bugs":{"url":"https://github.com/Dudeonyx/robodux/issues"},"homepage":"https://github.com/Dudeonyx/robodux#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && yarn prettier && yarn test && yarn tsc -b","clean":"rimraf lib","test":"yarn tsc --noEmit && yarn run jest","prepublish":"yarn build","alpha":"yarn publish --tag alpha","precommit":"lint-staged","prettier":"prettier --write src/*.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"latest","ts-jest":"^23.10.5","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"lint-staged":{"*.{js}":["prettier --write","git add"]},"gitHead":"677677b696d6309614053618410abeee5ddf9592","_id":"@redux-ts-starter-kit/slice@0.0.2-alpha.3","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.4/node@v10.13.0+x64 (win32)","dist":{"integrity":"sha512-QdlIaic8fieqkrFUgZNchAosPAcW9W5TfclU0NTb2K7/YvrpO1SvDKdm+veKxoEZxpIaxq3uX7u0GdmwspxqLA==","shasum":"23cc1b92058617268e9ec063fc56573295817bc3","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.0.2-alpha.3.tgz","fileCount":42,"unpackedSize":52589,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcLy/FCRA9TVsSAnZWagAAlX8P/2h8q6FxtAW/Y7jhw3L8\nHxAmOdm5GLgncwtELDSIYcb5ogBuQVdq0GFXj5u3kMsugw2gXJ6XTzVBFtzO\nDI1+MtwWnXx5jpQmsMFFf5MfWeR4Tw9vBciSnDfSgJjkunGLjxq355FsnReP\n7/na2XF3R/XLc2Gz7WBoAB7ETSMvV0XBmThCzvj4jYS8azLLljJpnw+AZib1\njYmALwMua33GnzHhLVzUB3soi3TFdhw/960allVvuzUZdsGUjIOdMVA003pr\nmdhxV+LWPAlWdKA6COtR8tjoMI8nrGZ0hmNXPrL+PRwFZt1x/w13E5ODtPQ0\ngiIs2P9MZXrE+0wzRJOZlI/lEQp1t0nKe/PuNEyRvC3JAuYBHuVRrKA/wI4X\nd6HZu1BApo4GRCysp0rLvkKE4WWVThyZc5vFxtLZZgwE7oCBdUedGZvNGx7S\nSMo+X0NgSMeL26xS9P/I1yeNqs2EN86LMDd8cxdWHy9psoNiEmM9j2/7GFbv\n6vxaBp+5FXifIAvgakjdmezKf9P8J7CiUT8yA2A9fzglLY1mWUcvv93P7TPR\nmdt3/Kq+Gzgn2J5Autmv9WRiz5W/IbvqTtGzI5vgbVsIJsnWzyBk3YzteNm0\nxjATNsxQ8zxLpkUbE+rBHvYOYE593qmOZ3kpmVpH8jI5SvnNCEf0nHOef82C\nVWQU\r\n=M7Fe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHknpH9uXwTo9BOxu+faYgOIR0m6mQNDdypIvd05rgVZAiA24KtKrweOAJHYqKYT+tXMmdb0d5I1idJqZXPwNaHL8g=="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.0.2-alpha.3_1546596292683_0.479225098780236"},"_hasShrinkwrap":false},"0.0.2-alpha.4":{"name":"@redux-ts-starter-kit/slice","version":"0.0.2-alpha.4","main":"./lib/index.js","types":"./lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/robodux.git"},"bugs":{"url":"https://github.com/Dudeonyx/robodux/issues"},"homepage":"https://github.com/Dudeonyx/robodux#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && yarn prettier && yarn test && yarn tsc -b","clean":"rimraf lib","test":"yarn tsc --noEmit && yarn run jest","prepublish":"yarn build","alpha":"yarn publish --tag alpha","precommit":"lint-staged","prettier":"prettier --write src/*.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"latest","ts-jest":"^23.10.5","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"lint-staged":{"*.{js}":["prettier --write","git add"]},"gitHead":"34ff3ab8b5cafb90507b5638c916e1ca72acb9c6","_id":"@redux-ts-starter-kit/slice@0.0.2-alpha.4","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.4/node@v10.13.0+x64 (win32)","dist":{"integrity":"sha512-t67YjJII75xHa5oFOzpOgdvSTH/uLE0OPfcoD9XilD3QYsqpigy8hjRxTIGl/+9hJRVBGi65PDGP7NxXIY+Mog==","shasum":"acede556368fb3dc2f802abd49031072908c6d7a","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.0.2-alpha.4.tgz","fileCount":37,"unpackedSize":42322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcLzOVCRA9TVsSAnZWagAAdOsQAJ1iq3BP3C9hWic3ut/E\nwIcsD2v26BOzrbTHeAjkkZbZ/QtlDrDDRNXQ2EfbKyIs2wFhlV07mgfA8htR\n/XU6m4UhdJxER1AOxVt2l5F2xWHpp2ESw3Cd1tvts2uzg8iEreJn6IKflhSs\nxlSm4beDyHpFgzB7TM0OnObJ4e7j3U0bhfWQhW7RpEyB3xgDJ86ks78diSQU\neJU0RfrbUUf195duxYj12KdNZVOz7KbEjQtZRnIC6cE4u6SJTr7BlRuH0ig1\nqShda8Ua7Z3rfIpK/QmIGFjwDX7ZW1nh8bnHFaDCOrQr+QSrIt9kOYLZr7c2\n6r/k/Gk5mN8SMfufD5cHszJcc8m8FgSje1ETmYALPcHxa69fQS3KF23TG/bT\nHyaF+t/kYCPEDb4kKgZ8NnooiyTifoHKcVFtTYwUTnvqDA5GTJ1ZLdl4Taoj\nG0XxPNDng27pmNyWcAKGMIJ94McndyYkxliREDwrbdL/GttpiyjVaLemFlKN\nXOLcoO94gllrc3i2Tf9zWuW5IqIiSKcYTgAViZSvON5Ef3DYaVmGjLnnCDat\nHMdomyH8qun3FCudppsGgSBkuH4IDZXdOXWJ21tlJ8zkNtExYaRKmzzob0yh\n5uE59UWRgeaBkIFIMyLKzAMfGVTmB9K5uK3rlhjtiXt/D95X64qeMUiVaSef\nOtTO\r\n=jW2z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBv/Uhf8pIq8G+z2h+FNeEs94s70zF+2FQ0vWxsXvHxGAiEAsQ0nFb/y6T0CQF2Al4lr3YWpnmvfHhs907ckJDznaB8="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.0.2-alpha.4_1546597269075_0.2881909028816174"},"_hasShrinkwrap":false},"0.1.0-alpha.1":{"name":"@redux-ts-starter-kit/slice","version":"0.1.0-alpha.1","main":"./lib/index.js","types":"./lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/robodux.git"},"bugs":{"url":"https://github.com/Dudeonyx/robodux/issues"},"homepage":"https://github.com/Dudeonyx/robodux#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && yarn prettier && yarn test && yarn tsc -b","clean":"rimraf lib","test":"yarn tsc --noEmit && yarn run jest","prepublish":"yarn build","alpha":"yarn publish --tag alpha","precommit":"lint-staged","prettier":"prettier --write src/*.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"latest","ts-jest":"^23.10.5","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"lint-staged":{"*.{js}":["prettier --write","git add"]},"gitHead":"a9252f2f4152836a9b9e70ee71067dca313d59cc","_id":"@redux-ts-starter-kit/slice@0.1.0-alpha.1","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.4/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-zVDj9IfF8CYjYgvsBJF2GG4iMjk1F5qB9G+Ft65NmtigbrtNHi27SXPPRNcmR6tfNvJ+gWbMe0RLzGJeo2uIMA==","shasum":"3842168e4b8d28aab128a475efdb8b7090b82482","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.0-alpha.1.tgz","fileCount":28,"unpackedSize":32039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcL1QNCRA9TVsSAnZWagAAQbEP/jf+1FMnkRpeW+LIu7/a\nkQmJQlDtXdG1WAZtcqNpRpSI1TKnf08s8ZJnrE40a44U+TCZD7ePvzUuOQtF\n9qOCUYCGKl6lQd3pghzxhXoNGE+KBBhqRgWUANbt7snUBNL0nhmUOBdeT+Cx\nZTHN67SMtlxZDdB3+2qjXN8bZyzJkguef90aUsQ8p+F2XUftFYnAWsX8Cvvj\nDkRAeBBFyy9NjClKlH8KSKqvYygstLfsOOVT7F4YwSOobpLPcDjcE+VAlf5o\ncPN43BbvwaGb49/fy8Bysoylp8J1Xqxh19eL9k0AkhLIrEQzsftakpNHIcQo\nsicYzxBPCG5qFQDUTTuBZxspZ6pCHrxjn3GsU75DV4K1VG4UZBu1PLP8ZsJ8\nBl1Z2wJFOdE01sWMp/UtmpVvDsyJRZCOA/HC9+ES/GL11LscQ6qVpynLciej\nvLmrB/f2Pjjh6TsY7o7uxAF43Ttxzs98MICfCKCOYB+qWfqqFGVLIMDebItt\nBvxUyFWL36U8QZ9a61KoemRBSq/NOnppmo5xWp6c92MNfbGTxDM5OcJ5cvoX\nNClPXmB7JqeeEYEII3NYJd5bF/xUbic1zq2zwwp/t4ntx6bJnVfKN9Cn9+Ok\nUDQBSR283dwIJ8KpP0GRzU9tmQI3Dn7WVMgXqBKiG32gUGOG5K7Itf5wCOwY\nIHET\r\n=v7Sv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQClyLhqFZrLDOzgJwzUq4rvyO1W3hoKXex6DswgYEG0+wIhANUEJOYErKjLqCYRdI/4HF4U+KRR6sXSvJxh6/o9Ezc2"}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.0-alpha.1_1546605580663_0.7015564835930284"},"_hasShrinkwrap":false},"0.1.0-alpha.3":{"name":"@redux-ts-starter-kit/slice","version":"0.1.0-alpha.3","main":"./lib/index.js","types":"./lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/robodux.git"},"bugs":{"url":"https://github.com/Dudeonyx/robodux/issues"},"homepage":"https://github.com/Dudeonyx/robodux#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && yarn prettier && yarn test && yarn tsc -b","clean":"rimraf lib","test":"yarn tsc --noEmit && yarn run jest","prepublish":"yarn build","alpha":"yarn publish --tag alpha","precommit":"lint-staged","prettier":"prettier --write src/*.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"latest","ts-jest":"^23.10.5","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"lint-staged":{"*.{js}":["prettier --write","git add"]},"gitHead":"696f89633eb8a55e13fe46ae9338a8d8d107314b","_id":"@redux-ts-starter-kit/slice@0.1.0-alpha.3","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.4/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-lW6jur0vu60ztXKtbBRV+xSFor65WlGxAEknaANIXTcOL8pOqFA2jYl1aD2Jt23q9x9aMobBPYwU8iZsRDrFHA==","shasum":"adc9019346ce29856ca26099c2a88c02a581928f","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.0-alpha.3.tgz","fileCount":28,"unpackedSize":32039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcL1ukCRA9TVsSAnZWagAAKSsP/irwComU70DgaW+/0fr7\n+ox2cDRmx7PFlPwkRpdBSz250AZlnTw2L1lYfid3s6QhoGWIp3QwT21CmrXJ\nPMaUdaQBghMRpuLgswyvEYuUeSpKQYhFlqG3AKMJ7twzx57EKZ8Nt17c/uki\nrVjj8qpmJvdDda3FU5WcKxl5z1rJ5OcHGjSdG8Fg/TUo10mqRwK/OAGOAAlM\nlbdtWY0DEk5eZO/8oH4yUkrMoiUG/H8MyWG2MpDk8uEJM+TJRJrSQNZ5+0ip\nr8fz+/OrxDTdxTo8V2ChZ59FEOgTBW2DCG/zUgXTd8tAufVx5vyTl2s4w5m3\nVcwPXXuZjABB/KKsa6Mj7XlYLdJ+i1UkttujIka+f8XubuJF8j+SP96In56s\nsOY3G7eJjHEkjwvCnDmY3m+WYMRdcbXRyUFJluqBXorPIvpujxe2A/Jviaj9\nzsk8+wviNbJTC+ERkE8DtVMKXZuQbDSTRQ12UhO69VQckok29Y2tx3zEhPtw\nOlaY4MOc5eYnuBSlRf4ODfishOAvjBKp1SZKS5SuDhuuQIvrSWspp7XJ8YKm\nYZjArmMZWyx5sG97m7zi2QOpsieRPjqDrklHyiyok6I+rN3/dPKm3AFVnqRT\nxsvbFC8A8fsWtJpgFMM59p8QodJJIbK3stacv9hesxIF9aP+R3Ox0hA0xBJJ\nT+mo\r\n=YBT+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHgwXdEwTbViuclmEpBpAvWHLMWi9FH+uhSApqsf6vHMAiAsWivxG9WUEM3qqPkepqFHuLjzit+vhyGEOKos31Ckqw=="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.0-alpha.3_1546607523697_0.8012507228542411"},"_hasShrinkwrap":false},"0.2.0-alpha.0":{"name":"@redux-ts-starter-kit/slice","version":"0.2.0-alpha.0","main":"./lib/index.cjs.js","module":"./lib/index.esm.js","types":"./lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && yarn prettier && rollup -c","clean":"rimraf lib","test":"yarn tsc --noEmit && yarn run jest","prepare":"yarn build","alpha":"yarn publish --tag alpha","precommit":"lint-staged","prettier":"prettier --write src/*.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-replace":"^2.1.0","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","tslib":"^1.9.3","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"lint-staged":{"*.{js}":["prettier --write","git add"]},"gitHead":"ed6c70d84f5e5420da32716bea6a3c484159f1f8","_id":"@redux-ts-starter-kit/slice@0.2.0-alpha.0","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.4/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-00h5zui5UkXn7ma0pHemVtpxS1Z2ubgN8atTtrAK1NEl8GcYG/OP9J7erp5IfgtB1lRvTns5T9RKwKpFAWWcAg==","shasum":"3207670f1854f45e665d56e7e1845d0f41687323","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.2.0-alpha.0.tgz","fileCount":18,"unpackedSize":30922,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcL40LCRA9TVsSAnZWagAAtOIP/i4stZWZqajfrTueFTim\nCFjRw3R+QhDBuKRX6heMwvA663L4iCGFJEml2G/4xGBXov5FrCisVwy9cq7G\n+yqNEK3nsUrIGx2vYIbC/RKI9UcButFjuiqtdMgQEqMnW0TPy/IFCT2sVl0f\nlie2bKc5/gzbTFmxs2ENs4vDPBiq8lFb/xkih1CxsDHqGMkfrtN1Xj7xwPE6\nybPz2QG+asaG01s06NbLy2YcICYF73QkW/awS2nLnlNcFTBNWkKWScGEFm1H\nNjyBosj2YUI46j3xcrhh39pENvK1CDQURYL43/Qh7Izv1HjNG5wJvQTZ9eRn\n/OcavkshFR9XuA2ccahCvOk/25U7pPX1LtbXdIfAkuaWaqw4m2LpNGgj+RKk\niPGzfed8JC4l71VX/oxcpOCUrXa9yBf0jiJOTcW9Hn2Z6n40uv3ElT4gzXz8\n5S0pCSqPXshdvDRDmT0bWfpJ0/Felxdk5NAW9HfOgpjnMyhxerjo9axncfES\nxcCtLborUuUgJI7va/SbE3qQhO4+RRxMlJ1T2gj4QTkJ6ujcN2PutD3t/p25\n36nNwlMJhrVgoWUU7hNSwMI+0RuMEQUUiEEUM4tBcUsYW/SZDkjP/f3Nw420\nHy6+lF9LDhS44JhZuiSni/hUFAOCJn0Jtx9BdrETuCWd6OE2rsGm3EY9ZlrR\nYn7K\r\n=J8Ik\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYmMzY60pTmYHGWe0oXSl3AYacCp9eOKMIl72MJ2hm/QIgX0HsklwMx4F2vKsSxQPqdl0GHe4WOgXvF8qS3Rst0HU="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.2.0-alpha.0_1546620170950_0.26333475016095176"},"_hasShrinkwrap":false},"1.0.1-alpha.0":{"name":"@redux-ts-starter-kit/slice","version":"1.0.1-alpha.0","main":"./lib/index.cjs.js","module":"./lib/index.esm.js","types":"./lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && yarn prettier && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn tsc --noEmit && yarn run jest","prepare":"yarn build","alpha":"yarn publish --tag alpha","precommit":"lint-staged","prettier":"prettier --write src/**/*.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-replace":"^2.1.0","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","tslib":"^1.9.3","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"lint-staged":{"*.{js}":["prettier --write","git add"]},"gitHead":"91884c205879082df893c4d9fea8f34903613a3b","_id":"@redux-ts-starter-kit/slice@1.0.1-alpha.0","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.4/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-VfZclMP8n+N7G4e3rcHnM8/RinLJeChywPzjZTEpxTXrm/2HjXHRTHEbZALkOykJywUdcA4a1jOGcWFarcMRBQ==","shasum":"230479efb5bb6508ce251c6943f30a25d0e0eed3","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-1.0.1-alpha.0.tgz","fileCount":18,"unpackedSize":36864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcL+/iCRA9TVsSAnZWagAAGXQP/11FYmiwqvB/C8VPN9m9\nHAsiKNBfVUQIfQD4PrEC1jFO//r0c5iVgqbsimXl2dArK/8JYO8zU80sSuZH\nwu9mWdus6o//8NYMMQQRc0M/bT0hMviE1sT2YvJHPVbvb8ruQqzn+eVne3Va\n4VsvjKGirXQ8fKox5iZTcCDXqI7rei69UkEWzwzGBug+2qOjlppbZ1wPdNPL\nS5vLMewHVc54afLrc1IxZYvnuPc/mehfyZFm1S1sJGP5uhqllSHLI1QRfmKw\npgQM4I1/Cfsh9fCsE2QSPEZGB0qr8qOvsteGPIgoVPyLfC6LVBc81zcxRBWG\nheIqq5r8IVRBjDWl/0o4l2FOcjUG9qvjP495WfNgo00PorCOrukVylbg4va6\nfwImSVpThyrYrF44esiK/3JlOrztIy18mVM2Bwp9pNEDDKWVZyUoIkMiOO3U\n+bvZTEXik0J5GOPOODqy2g66kZKit4pkSRj+O5bEttuB+beiTSTLuQ6t5GLt\niEFhhtLUHIxyBBJYYqAJurULPlAAb4xfF/5A2qi0YZSgBw6ph98UezxwK3FT\nhYgC0HsjNOuPN68uNvA18V5n8hkPg+UeNPSw5bv1dWu7Ix0LYY/xQVMQk19v\nrS6TTjYATatTnYPq6z+EXJNFUQOv8e5+SuH65RSpTGa4QBj1Aix1TTua5dpf\nRG3N\r\n=IgJ+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGZRjZj43pnXPfj49+tCdEBaXmlQB/vQLRY4LFQDuom/AiEAir6OT20Z61tCYI80w1npy+d8fjUMFopWOkF3olF0B/c="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_1.0.1-alpha.0_1546645473167_0.541285827826447"},"_hasShrinkwrap":false},"1.0.1-alpha.1":{"name":"@redux-ts-starter-kit/slice","version":"1.0.1-alpha.1","main":"./lib/index.cjs.js","module":"./lib/index.esm.js","types":"./lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && yarn prettier && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn tsc --noEmit && yarn run jest","prepare":"yarn build","alpha":"yarn publish --tag alpha","precommit":"lint-staged","prettier":"prettier --write src/**/*.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-replace":"^2.1.0","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","tslib":"^1.9.3","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"lint-staged":{"*.{js}":["prettier --write","git add"]},"gitHead":"e91b226bcff1cd1a5a4f86f988cd6c861f1930be","_id":"@redux-ts-starter-kit/slice@1.0.1-alpha.1","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.4/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-6Rwmtpb3YOtKqVLQ+LgytOFkmHOeQlvjCrTi6AakXvgLXb2HMWB8KoDXwmYn6ijH1+d06w3P2DOsjc1QyK5R9A==","shasum":"893aa1a0330e6facf247e281617f63eaaed47693","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-1.0.1-alpha.1.tgz","fileCount":18,"unpackedSize":36864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcL/JKCRA9TVsSAnZWagAAi2oQAJ6NtedpmHtX+H1pCUjo\nlq1J5scizuji664P8UVR78kAwBMSW3FQZoWthbY70Dm4kZLAYusYbdGDUY+S\noZpUJxGloWfrveAFD/upBTp6KwmTl7NGF6d3S0o2XQYGB5qqxkiVuIEHdqgw\n2lFJcVk8osB6VDiedmhcpFiVhe9v6YWHeUGe4cX4ity3YxwfwCe5Dcb8OFJy\npA8yjdMyCVd9wdsU+el/OUliyQDv92BZCbixEp0vtlv5POa4MYn43koAO4nq\nY0SwFneBTGatRvii81JqmVLQCrK7h//YxrD9+ltOuEEw+x+iCtVxQkfs/jCS\n4Wk80ooZAngJqDbWGYP93Jh1mvN+HxNigVmyLJ1ucWxgglDKaO+/s/543S25\nVviSi+4LrzBZv+qWMW8Qh/m8XZ1z/rFwT6DWM6d7G0p1GI4zwQ7DJVvNTPR1\ncNe5wow1cZwm5PZXXYY8bW1wpEvbYfKwuwzX7AjFbXW81SUhYDETux7g4it3\nZ/LTe9GX4mjKvdgGqnGAQFF8uZPxzsp0UAZ2L4a3uDaw77hDRxGCQXg250Yt\n0pv0bEIwA1nDu3bIXyS7dvZazvHnaA9yAT+Rh3Hx2F0JEQQiUQeK1pk3rO1d\nfAlKYOiJYf0bWreCGhX/4oPeyjLsM3+AFK+Jtljk4h80HkpQuZhYuVOC7Zqy\n0kCH\r\n=klUJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFIQzlOUNUx2TKNqYzaYeR18jMDUh93v/HCpvU5ju5igIhAL0TwIwK3PeqPsf7khv20dbl/3POfDJNOLPyO/IvZIAw"}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_1.0.1-alpha.1_1546646089318_0.6490100347610894"},"_hasShrinkwrap":false},"1.0.2-alpha.0":{"name":"@redux-ts-starter-kit/slice","version":"1.0.2-alpha.0","main":"./lib/index.cjs.js","module":"./lib/index.esm.js","types":"./lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && yarn prettier && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-replace":"^2.1.0","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","tslib":"^1.9.3","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"2113c0c2cc18b49d84f22a801a77dc50ac49e3c7","_id":"@redux-ts-starter-kit/slice@1.0.2-alpha.0","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.4/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-+UKI0SLfxRp6+q+FrMPxMqokBNFNksCtEkbEUP57hMEbhhz0SsE1/OsEFViet5r7//Qw9Qe4yTOuNyfsZps+Zw==","shasum":"c45b75a6ed003d1d90cb5a2d4cf7ce73f298d50b","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-1.0.2-alpha.0.tgz","fileCount":18,"unpackedSize":40062,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMJGHCRA9TVsSAnZWagAA3T0QAIIPyok6T+5Pkc81DyJw\n1kQmnknvttrUWqVaiUs5jAlF1YVFKLhWqy1XREOPvE1h+Aym7sNXQisMv5Fc\nHFz/X1noUVZYgjnLak+Jnz3OQx6OopCkPXxEh0LBfuq+BaPy6/pNNg6KK3cA\niguJAXAewN6skQjSEEgB3Llmu8pnoBtxocFw6nSvFfxFvjtBUG/Oe7ZMm3JR\n/+jgV92YtA7gUl9PShy7b7JXn2FPF7LfSAYiSWSzyHYKClddUZ48NrU7ZxCD\nIzNc0qO26/pjkDbikAq06sjCGx9UAVoJCnOZ+JBDyRI1NiWfA6sHr5hKQCv2\nIjnAr23mGUUAgfY+i0l9MWCZKVJppHZ2kkcR/37vmMXwtJw7EsxsxNPbt9W1\nsfcGU2ddBgNABzx4qt7lx8V+0BSp8BFS6T2+RVo6cxySJUiDqCD6tJQoDMpz\nQl4LhbIHvuYuuFOWACtGxs1J+BrD15cPQeoDs89RLAWmQ6chnxVJYPMckwPw\nxVX0aGGkShw4cAwQ/s52vowELrttp+T+DNk/nu4lYbBhF8Muu191mdLVP6ad\nOKs8c73GuAJ7j+G00A25p083sFKLkTlh6bmDNeJImzTDO3aq8HIX8QrA3RwD\n+d04yaJim5hK01je+cTbsdhgf7PTnEHW0VIt/UiM3D567YON5EG/uUePB2cL\nw2uC\r\n=PR55\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaXyze98dgjzL24jcNFtasUEiOk70Y5bdP2qP0pbjhvgIgAT+2TONMlimvgpKbZaMgaMulMKKW2wfGQLK2zYGXP4Q="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_1.0.2-alpha.0_1546686855147_0.4335972151039056"},"_hasShrinkwrap":false},"1.0.2-alpha.1":{"name":"@redux-ts-starter-kit/slice","version":"1.0.2-alpha.1","main":"./lib/index.cjs.js","module":"./lib/index.esm.js","types":"./lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && yarn prettier && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-replace":"^2.1.0","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"28456747e8e67557878efe682bd07d7e79634f52","_id":"@redux-ts-starter-kit/slice@1.0.2-alpha.1","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.4/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-We7WCjUBsu4mNi45JRgCAZHOcghzYVqexobOuYrN8Zi7qUlVHono17CJT9ot4ZslXeN2VQwyJpsGpw8FLFFcfw==","shasum":"897f1b9e22c5e9e2a367bac99c448eb6325353da","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-1.0.2-alpha.1.tgz","fileCount":18,"unpackedSize":40209,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMJgUCRA9TVsSAnZWagAAe5IQAIIC3X/SLwbKKERI5IVr\nT8r4c/x3e3QtKU0qe1REGSzu+Jynqj3i+IaM5h687FaJXj5/O5k0zD6fUIaL\nOV3J55LipZQZp1nWybJeFlvAndU6ZA01ZZoIqNqE7HRNzh2CCrAiZpyPGpFM\n2DQW1lqEUKwf1jso+ATsC/XjvKa8cno5yUNx8CLWVZWSpqxr6bME1ThMLrul\n5fWyJGpcKdirT9dtCyRfxCYJVk1aheFpWnii35KsKV/Q58HiQuIjJvtVg+Lp\nadp1oEheBkc7VYNwr7hITeNDUQBdr+0UwTUDGXU6juNHXGb4IcTcMnUyDXDA\n5HIVtzUGciOPjhMG/8K3W4RYpxXzSY6/Xbj+aMu6Lae+kl0eBB3VPMFqnmp0\n81hobLzON+D0Vyng1F6DvVsgBN9iNZAL67vwzenhtr689rPE9sNqRetnNTlb\nGbdTr5vTif1nzlue3Xz0lnlXIrIsVISIK8sukgpYsfrRXT+2fXG5W0rdk/4i\nFHpzgI1Nk/TJu0X1vY9w31TUT5R1TGUZ2UhYyXu5d5Vw3Ni1p1wC+7KoZJRP\nUX8G9i7Cmp5sMoQw6QEMTRVKfg++Pxo/cPsU3RbuBUL4gpJkpS1nt7uQaULi\nL7CQVZobDkZjmDOrlGZEpdBRuW5jpNjQWvGU38wIBaDAAyk6/NDS/21ubeup\npyUV\r\n=PEbT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEMaC7AXNuTmjretmDbVr1nnTgO0xBK9svI5lgA9FhvnAiBw7S+UFFN/KWUq8AQBiWvzR467Xj+dcrk6075v5+eZ2g=="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_1.0.2-alpha.1_1546688531894_0.5732473498244941"},"_hasShrinkwrap":false},"1.0.2-alpha.2":{"name":"@redux-ts-starter-kit/slice","version":"1.0.2-alpha.2","main":"./lib/index.cjs.js","module":"./lib/index.esm.js","types":"./lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn test && yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-replace":"^2.1.0","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"cd8e4b6e68ab69a906daf78d5d965528ece5ed98","_id":"@redux-ts-starter-kit/slice@1.0.2-alpha.2","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.4/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-2lM3P1BYjePcNbVykZnVNrcFNHzN6qUAIC449X2w0Qmo02phn4cGiPidxeE86pfJFMNGqgY4zywSkpPAcNGEiw==","shasum":"edd831349fd5c489717e40aad458db542ea4e755","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-1.0.2-alpha.2.tgz","fileCount":18,"unpackedSize":40205,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMKSTCRA9TVsSAnZWagAAbzsP/iCIA3VPsk6FeDkf7Enh\nA/mhlLNYy/r/+/ptba3K7nsnpyBwb6l9ZNa9MpEtaHIEdF/2i+6Mlkgj2rdp\nnTcASgtpwMNBgD4ItsZ8dAtdqWqvYYgtLLtccJ/z7BlhBTJ+j0PeytWzf0aA\niMoY6eCp7D5tNlyNOjEON1Ia0JdHEf9LfMs4y7HyHbM3lWnqML+IgbBt4tEz\n6mj/fXuz8TpD2n1+Y6mcXK0gCJWfg1UAwsJp46uOGCpFfSsZhdngcX71mmk6\nRGvMWHTd7kszbIJ1Fds6GUFDPVny60bIiZX6qUU1b8aUZ0TFZQ45mYrlQTDE\nlC/kofZvvNvdP9LREAzeA8C8gDwb5ztEm+13D5FjB90UxVcgZpYjImnE02lv\ncJgciaDctY/wO0m8zddsfC2A3uXI1+pvLiA8PA7VCOOZNhVp/g9XpUJi/rgp\nrr/sbSIwLq1ri+3x9EBerxuBpdu0aLvWVEeeI4qPxFPtTWOTplkjgSFz2I19\niwM7TuAqeXW4oOIBcQq62U+3UbyxQx3ihzDGpZk5mdXEZhs68qoMZVLZ23Em\nDnU8MUvpzzRb6rPC9soRhfeFOv0cbcFWEp3pRdEvUlg5zUzlWp8rLcvvUmf7\naVrZzcVE+BonRDdaJhoiqKwJa3SpulR5wgGknTAKtINKuN1ItfinOZfjJi5h\nlROo\r\n=a9te\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH19U61iLcXwqbCT1URR1xqLITxEOry07n8zAMG9pP/rAiA6IJe3gxCkrvB4A6SPAoLD2FBcV57Be/2uafb7jw+1tQ=="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_1.0.2-alpha.2_1546691730299_0.6155057238488619"},"_hasShrinkwrap":false},"0.0.1":{"name":"@redux-ts-starter-kit/slice","version":"0.0.1","main":"./lib/index.cjs.js","module":"./lib/index.esm.js","types":"./lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn test && yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-replace":"^2.1.0","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"249cbbb1643bb3abf5495b5e964b83c9c756de27","_id":"@redux-ts-starter-kit/slice@0.0.1","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.4/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-q3fcL3MA3rb1zaVS8ofiv5v7r/SYnxy4tgP1KCLx9GkinWcY5rNHyoyV/XkNdYOTAk2+py1zMg6nUYYGUTDypw==","shasum":"0ece6c77f0fd59dd4465ea2d56e7df2ebd6808d2","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.0.1.tgz","fileCount":18,"unpackedSize":40197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMKcACRA9TVsSAnZWagAAT9YP/i0C/Ok/7V0DUFCg/rmY\nK1CzUjPGHcgDfMnBD7m8jIsAKkrocM07iRdL+EBVU01/Lr8fKdInpJx/O8RL\nrJRgzlA3fvA3urJvneK8L3EeKBM0yc5cLKlAvWlD60QQ+VdAtWSZv//N0unX\nSkqRpmafQT5HULB8B4tlZzntmRoG7AGBSkOSYtHFGFs/Q7U6RGzVXe+pfZcQ\nRz2wI1x/uQN5W+MXH5IJyQbdN8UBcVypAbYOvmaA4/BNHDaHPUHMThQYSE3T\naBGC/jETdwWex1j803xDUmr91X2pCr8TFoKAloQPe2xtCurcjO4dV1V61APl\nc9A1row8jSP5Ey4dxlTrbEenYxpm42C5PkONyPRiwNQnPtSzPy5gRq5WPLzH\nHc2NMtJrYp33ITE5TzX50FohLAo8ozsyoGf4VxuN/gH89kLP/8VLF5v8WEAI\nuk45iuaH5pz1vZWR0xxDGttyfkUgG2DlABI4ZE3s9P0MC5awa5MeGsGYd9rn\nykR13tm5ERJ8GbcUGOeNP/3OGZGM14xXLHshcV4hA4GZFsERu1KrZJnEOj9w\nxFFrpXGZ2UHaYMvL8EH1RLVxAirgaXQUtwWijj+zlqtxwOX7zTx2RaJs16TR\nCFhEhwgvmGym+E+BRTW/rInaHIh631shx4QNEiWgfAgMhL6zx2F3qdoEVRAZ\nOz1L\r\n=moo+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCT1wio2peiHkCqubkkPFv4URwmCGKlH2mB2WG60dZgJwIgN+4JETvOasd0+xc0V53UzTCEfnFYmjYr1wphhxeo1bM="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.0.1_1546692351691_0.3906457713178706"},"_hasShrinkwrap":false},"0.1.0":{"name":"@redux-ts-starter-kit/slice","version":"0.1.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn test && yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"7fe04fc71fc4d762ee5cb5ce46f453a81ea91722","_id":"@redux-ts-starter-kit/slice@0.1.0","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-7QhUIBGkHEKKXaRKmTUZXKzU6c0k0gywKl9w0hHk7UtnPUWz0inQWFE5u6evBxEqnp36Usnt6fXzIafgZQg0xQ==","shasum":"e14322519a70939b77c85f78609de3adb0db4880","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.0.tgz","fileCount":20,"unpackedSize":59173,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMNVHCRA9TVsSAnZWagAAgOYP/1AdNsa6Dc2WwD7aQ054\noblc/NO1LlmOV2VarBklktO1ciPdw5XgKgq6YQ/iVu3XMr4am83o4pZjVJkV\n7XU4iHJYbE7CxRU7D6aehg3+HR0I/jE8iZp1yFBwzMx+Y3XlooD9uakDegK8\n/3B3jhbnJn7mCRVBU/n0vZDbBHjcA0QsKZ8aBwQb/LM4+dCwTMomfoInSnvf\nh9b4fqlnCXXUiR3IoL3OIo1N7z4+gyPmDdFvHj9cjzIYT1Q7+5wzscnVAtuo\nzWV4ikfUGExwqMGaqkuRJqYzhjvKaGxLNUTtujtjqulN5No2HXI88NNGpJCk\nIWr1di3wYOrJox+heu/Fq8+kdJ86jvk1PthJ4rMONgHcvMZIuCGwg+A9If2D\n2MCm1cewi8LxJ5FqniiKP9TiyWQFOTQLRmKJW0f/P6VnVh+e9UsILbHteWPM\n5u1yQ/i4CHzDELKGHd8yc6cQwGGJrwv1slSHTBirKpfDDBLuTRy8GLQgJ7zi\nBS3gDVv/f92P6tikrkeSQ13hK+NzAivAKx87bdD45+xrZB62+YprsNo44GnA\naNoneGkY3EKf1HknrEXy9dwlzS9e4RcaFUyQ2zAeWY8nKpUTPTWNeS8ODSpj\n9gYyz3Y1x+mLhHTAviURf6hVbV1PJJZLiYFYkrB0Rncg/Kw2EV3wmMLMzty7\nGDcn\r\n=v4b+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDx0L1nMma20i3pZ1SpKwjZIi9RsZsoWTBCZuEC/cfbWAiASPgOS2+q8gqKU65aVci59UENnANP7Rhx+rF5bW+HFjw=="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.0_1546704198948_0.42191904630271426"},"_hasShrinkwrap":false},"0.1.1":{"name":"@redux-ts-starter-kit/slice","version":"0.1.1","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn test && yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"e5feecdcd998e781acbf3f9a8bfacffce771217f","_id":"@redux-ts-starter-kit/slice@0.1.1","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-VrW/CkLlhF5BrUacZ6dcM3wj4V5z/3TOIdLma2mF/6UlDS41N0eMoPWyoVy1cSDJ/1B9wZziule3TD5gHkDESA==","shasum":"8f869a406dac8da1ae104b1d3e758a621374f7e6","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.1.tgz","fileCount":20,"unpackedSize":59198,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMQZXCRA9TVsSAnZWagAALcQP/RhMgG1Ycf3oVyCITVD5\nX3pLtI7+1V3v5D0y4q+fbMHbwEAGV5DHqhJ0NWKADhEYojIV9RjKjzWfaKcM\n4sySjMl8OjEwEbuz8QrZfUlqY67y+hoxr5Ii3QisKN8WZftdJTZysfDuIXWg\neVMtzwXVeqxaXeFlM0CKCGX4Ql8MA/9Wun9GBGGB5wa4RpAdH/fDO+sybc4p\n2Cx8TiI4yqk28Cw2MNSpaFSUy3Fou+5mIkwKC5bKACPiPjZla78KF2F8tFy6\nJnVB4ohcLPOeIvz8DyqX5Xm2f71u0JEKxZme51jsMpp3eAQFPRFlP7bqxycA\nkzgRdy2o/kapLdPgyPxwuH+TXQ2eID6UcDrW5dT9dkTxvZNXB7du+6N6jQZm\nrdeg0AdBkZwQW7RwkBGrUT+El9chhAhZ10lHQJ4n7gKA6E3BFE1/yjI3Tbv9\n8K12nvpWh7CN+3o5qRhwfmcNsCxFfFZF9CZfvBBHaKm8a+4f80udUl1JjOK2\nRp1x6dPhckzRS2wnJOmlqJLHBGSGlxEZe6FjfGsBy4XsEydhuLfw7X4f0HG2\n+CwRcG9dEJdtBdf/a1OVooTR44nQ5JGvjPtBVu+yQ3WlPWq8waIAbO9w32m6\nJtWxGp+fhXU5b2ZUl+tVJvgc+OjvxMunRLfcn0egZOhjlIfoNOO0GqDk9rv9\n88N5\r\n=qSB4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEVBfAdWlHHUEqYoi+0r1EglwwLgonnYTGlY79ZBn1kEAiEAvpkiW2ectdjCJA31qOMOTyNO1RR5YS7us+ovo0Z+Zp0="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.1_1546716758701_0.901337450515161"},"_hasShrinkwrap":false},"0.1.2":{"name":"@redux-ts-starter-kit/slice","version":"0.1.2","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn test && yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"865b4d04a98a79dce481028356616952aa377134","_id":"@redux-ts-starter-kit/slice@0.1.2","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-uk7WDn6SdPClmgFacFlfnepWRbY+kZPTAbGO4zf9yJATns96QknoOT7ve788qXtjwfUY/IAg6iRzucwP19bizw==","shasum":"678fff465bde897ae8929d950d7fd3e96345e392","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.2.tgz","fileCount":20,"unpackedSize":59483,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMRayCRA9TVsSAnZWagAAMAYP/3mRQuidV2tPHPI3a7D6\nzzWH30YOiPuabQea87J8nHcuUEL8D4wJkx5pHyxuykBnVwF3oyDf0Dokfck8\n47dfHENLcKurHxR5NVOrpO6jU6nIPgUEBtCfFXB1o7df3JPlaJJMlybasTQu\n9Wg+2Euo55H0XTL0Ejf0580oiFquFDtvqYFwA8BDH2hRBfEqL14bJnaxnKuu\nM71xiNg8DzGs+dOqKrfCab2QWP/pzH29f4dZcBi5vixugorMOF3dxo4nQ2bk\nSuOn4ZnGc5xb6bBg8Ajdu/wX0Rx1GwV8MzDfbeQN2yY4GD/SwbX6oNb0YRr7\n3h3HYgUFW/TMcQPJrjZLMzJok8ci6ZRaqOVFTyHQ7j8sFjQep/mvndZO3QbY\ndOEkYYW04kM0tzTGE4iMp1g8LE5zyXNT/Qoe14sjlqXHaEpOzNGD9LcXyMYs\noY0SdC0xViSl2BGS74Pv0g/UyRHSKWjlFahjE7gj01Uv2B3lsemqtA5i7Jn9\nNzEUQ/l27MA2eCT6YjjTH2ttBlm8shK46hfeDIUXZLoTWHnPG9xEc4jdxHep\nFJ5qHC9FTu4KPU3eHdBd0CWVzyCQKoZHfskxJfvZqqOrah60F21+IVx+cKLt\nrhrNWOgi8j5wqyFNWri0kIdnrgZqFIgLirRXjZ6wHEWutY17C4ExodTM95oy\nwgZ2\r\n=OXho\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdvXyRu6KKa614teiK4Lcr4Nm1PVHSdHXeAs5asV7U+wIgcHqBNe9UipI7hU6LkBZnOASNvW9KqSIfSDbtUW/MxIM="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.2_1546720946079_0.0758414782557435"},"_hasShrinkwrap":false},"0.1.4":{"name":"@redux-ts-starter-kit/slice","version":"0.1.4","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn test && yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"cb13d2bdb66d999b96980b39f53054c991ca9b71","_id":"@redux-ts-starter-kit/slice@0.1.4","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-tamrjVekO4C8ZdKzIbU9KyIGx1e/sq2tFXe81B2HHSYOc7C/mx5xJHW6WlEz0QhzqTup+ChS0hGxTZp7QZzbwA==","shasum":"b76f5dde490be0fdf29a61ab2ee512c3efef3b55","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.4.tgz","fileCount":20,"unpackedSize":62013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMTSVCRA9TVsSAnZWagAA4FYP/RZ8bjyQzUkQYMDdvKhn\nMroU10pEip4X0HmQRmqMviFc4xWs2gs59qr2ewY7gKbyoIhFeR2jSpJ7ttzf\ndlv0j1IZVwofbrJFwD1lsNe9nI4EXWEp7vrBfJVVi1qMGDYNE52k37l4P2EO\nhgSYMEIXi3bgPjrUSbD1sUbMLrKvKm2maR19o/WnN8vZm6tMsUdK0t7o5R2u\nafbqPJk5ZoQKHM/8kxoE8qDDG7pVPmC06TNsJbP0MZqwzNh35sqgdnEJkf2X\n/qyBXCK8K1QdAbyU3iqWFBd+WOi5SWxl4ltAWfGOl2z4Q4+hlI3WgkQgMYKd\nmfdiJi0+hKCB09yD3IgpEWyHfuvzraKdd1pynR7ZldsVT4WHaZqZOm7CGFJA\najrBnjyqVP4XBTool0Q49cUa6z62gB7oIR0JbD0eMJ1r0/t9l/1xhR8rPzny\nEBfRBjjYI62wrQlFN/8Lr5nmlcL/t1167xTu9RiKx7zzDmGlCQMADLRC6cQ+\nT3RhxJH62/U2g40vOkC/Uu3ZehY3wkHjVCaOyskQd0RBM8VTVOamE+icy4EL\nbVZwcFOR1/UQtUSFmZsTQ1PY9wiVbLl11uGltPPw6fM6oml4SQZ5cjldCCI9\nv2V0lPhpBCfjxvbiZ2CMqK263oVehRBnMhwzia5ROqrA/GlBMe+nAkV9n7eH\n0ZcN\r\n=e1nI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBgkc4zPF1knTlDiI2IU1yCkFPoeoiYS8fvTTRAz0/JAIhAO/SiZuxKkwY6XlhWgxRH7BSIhAFr9yaiWdgjjPm4Yt+"}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.4_1546728596964_0.03343927585273354"},"_hasShrinkwrap":false},"0.1.5":{"name":"@redux-ts-starter-kit/slice","version":"0.1.5","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn test && yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"0d7a53b7a6006014ce2ed2548e396c8a2b337475","_id":"@redux-ts-starter-kit/slice@0.1.5","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-O5hyyeYkfAo/gwOVQBlclttpE2qgwA2osJGHzdvGqHd/Qos8gJP8fLinhcaHFQCICZU6/ZDsFh4zcJpeUIQS7w==","shasum":"4fb29e8391815401ed4e23d072bc95f6e8bc545c","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.5.tgz","fileCount":20,"unpackedSize":62381,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMTzQCRA9TVsSAnZWagAADBQQAJbLI/3G6rDX3fYg4tBL\nuBTnMHhhkpYlA3ZG2KVcXeMlVRX/NE0B/Y1J/r8V1qtsai7gxRmKVHyX4EhN\nPpTW/3MhCfDaS9hLhcRl4MHKVxUbOQA70dIRYuDLJ63fnAZGYtsAOG+RrlzA\nVih1LhDadyZL1q85FBQzeE5Z8BqzsOKNsd4HpGDmUebJnMTzuhB4/fblzXCR\nFgdwVIGNsoQRZj1czCg0Sql1BAMTp7VnVxyxndGjIudXsPkQkOuMsXA59KKO\nmYncsGFS80h+VBNNWxXbVIhMUImBvWtueIfRM301wdP5HTe5eJKsYeHr8BoB\nqQjN4xago3YOdTolErWVCFrh675kjNOBkM/djbdzT4oRy+nEDVr9Y3a4ToyN\ncgGcu+tDS18H4/QaUoiO+PX2U3LpR4L7Nwlxljh7Qkjobhl6RZCSwm/el1Xe\nHeA3O+epCXxfXojpOAT++Ef5v6vDXOLW40nXQ9v54UD+RutBd2MLVCGsFOA3\nohE5KGCNEP6vGHgxNna6a12kjFeNY0u26uBrvESYnNxdhsUZYyTEManx5JRi\nrB9JSkZQtqbaz8bXFir4mta2fzjXIClhoe8zIYemjhV8LuwZK3zhPORhCXq5\n2/Ww5o+/NMmed0mHbxpYiggRqXAbPp+PniVjzbefi56+l/WgEfGlokG+Sk1i\njP23\r\n=JQxt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBKLQP2t4YVvqthZh1NhKZUZsrsJVnzYwW6FgGs68nepAiAJp0D2aJvdaq75A/v0lAfHlRJAVsJgyyXhgi/yqksUow=="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.5_1546730703597_0.6130005511162153"},"_hasShrinkwrap":false},"0.1.6":{"name":"@redux-ts-starter-kit/slice","version":"0.1.6","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn test && yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"d20cec6aea1e7441e6197636b04f3e56b028c2a1","_id":"@redux-ts-starter-kit/slice@0.1.6","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-/Y3FK+NtnjoeEsjZEU6nEx2nwDrCOtxWO3lM6MiFF+6OGoG3nSZ0cQ+1b1yVeYzvZ8EdFNh3qQgYDwIucemNsw==","shasum":"e7be660d8f628131144def681ebb24f794b1da79","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.6.tgz","fileCount":20,"unpackedSize":63436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMT8yCRA9TVsSAnZWagAAtpAQAIlM1JzkSS4jRd7v3vmd\nRIdMwNccAwMm5HN3YK0DgQVUuzS2HcDKpupZtWOYltlyy0SFRi77n+iC/q5Q\ny2yqBr5+U9QDwvlA4Bg/riXZwIw2qwFRy1d5r0u5XEf0TVJsiUV0xKTvO0lm\nUYRUKVlDxNmv4VImYP9lyx34jnh7xu4SUzfvc3WYdC+DNIM0pRTyqbPjFHBN\n8SlddPDWQ2lB1KQyGO7Tf8DjNNcIs65h+g/P8C/J9e/7zbWwQFIGQAGhjn8p\nSPG73MR+o9JDQ6DhjvHhKLalJk8+Tkqk98SWnWocIHcDd+p90yJvPu45mIx0\nW0o6ju7WOca/LgsuaD36MFQwHxB2lsm0NbiX30P66pFEIQ2IfICZje4UbJVN\nDlgbXoNZOwBQXPK8vX6DXF0NTr6WEy0utyKIKviSZD+f17RO+PEZHwtqkwpi\nD8VUFY5Yw7EKE3bF/a22tPAyriwb8Bdud23bn9aNoutGNpPP+K7kzJ7KFgmw\nEOf/opBRyXj2q8Az2ZRdQ9XyzcHkZ/g1uQOPMCQsD3LMb1o32tZHfO/uv78U\nml9nKnbAn8geyhJLdK5J0dlhgf+1BFa7D1Kpxbs5L4rjsM31NTzL6hiL/tJz\nF68AcTMcWjMDE8wkUsGGa+WrSRHis1/ti/JJBhQE9etAjyRpMmI8izSK+vPY\nCwBa\r\n=+X1k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDx17iYIJuuVL5KSwXUkfUcEyJkPgDzd4fQ9UEwHeLaQIhAPa5lJhCqzGjPkfYCEBF58ZrKUfdxriDfGP8hIUtIRCV"}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.6_1546731314092_0.9321918655170829"},"_hasShrinkwrap":false},"0.1.7":{"name":"@redux-ts-starter-kit/slice","version":"0.1.7","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn test && yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"e8edfb7df9b65aaff0a9732a6f50e305f5a18aa5","_id":"@redux-ts-starter-kit/slice@0.1.7","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-tf83ahc2FvB/nMbUb9CKIvtu6qwOSSrIrEkQmeDXrFrjPdCX9yY1RhLwxsLhik541SZehL+T+ha5mFqBI7PB6Q==","shasum":"51a4656de7cc6e8c068119dbac456b81778bc884","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.7.tgz","fileCount":20,"unpackedSize":64752,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMVqgCRA9TVsSAnZWagAABp0P/AyAmjEQQw+IdcbIA19l\nyIZlijNdTwDfUZki4XkvpdmPVk7ibwaoCKdHxgcRNDn07xLubwPOWS/E/hZN\niM0Bg71iTR4HiDkDn3FW1gEfjW1abgVWNkXDvtH/eihBBnavbdXci2V3Su+j\n2wU8PC3XQ+1yaUaBeg+8SR0SgaRtu0bPAwrbtEKhZ8FKOBINbE9t6GJ8S2cF\nokalsoSLjHHl2xzvNoNUWprbrLpFMxW9miMa/aSTPdM8nu3O9qYfqIlAYnAg\nnPEJaBTjbZjs47+v5uBXBo/nkohSzVf9RnY2DdQSR0CH+mMhiKRRDjr0qo6Z\nlbm8YxARcWIMlc+DYhtbHkjz4BBLEh1knLP01nee1uExgoa47fLONuIpTN8S\n2cvlDFCEfGwb/60M12LXbrrJH2nPMVsYVPkCTA/NZ87xVbYXdhhcJ6ErZ/bx\n9X8o4zgMv12gtc4UN+52rAsGe+1yiritU1E55NSGJBnacoYefRy550gRbkGC\nAnxH1JKqlHyOD9503ahhptyoTV2t/Fx1YjmYcxDMai+3JeM3vIN1LnvAUTWt\nsCeV6vDwbj2BrRegDWVQDqrWZC8gnkeuOsMi6VWWTu7Nt+YjDUPg5RT4jnZr\nfMNVW62qnqa0zjA8jcUr57rkIT7sWT96VcbUIwi2jE1qwCtiSS3e6DXbHM3w\nxSGz\r\n=FYNl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCaNbZYdFSJkfxfqKG0ep6fSfzTkX/MtdoA6fkZkKQWCQIhAJU/IM7eSEzvRC/rJlW//lXKMn5zmctDtPombNOzjdSR"}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.7_1546738335701_0.0928402885534656"},"_hasShrinkwrap":false},"0.1.8":{"name":"@redux-ts-starter-kit/slice","version":"0.1.8","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn test && yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"f0c2fe71cc1cd2bd2c574c562af658c2ec223ede","_id":"@redux-ts-starter-kit/slice@0.1.8","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-b1GJWfoum+WSN/DPYgj+pEDAikB/GeGf+VsIwhjZVkGUTxFEjhyU7KUhOiQLExCaOG7641h3u5lnPcjPi4WHiQ==","shasum":"b53f2d0c0a3fcb9a52d6af0fceb8d9e4168a09e3","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.8.tgz","fileCount":22,"unpackedSize":65268,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMd7eCRA9TVsSAnZWagAAfnMP/RAl3p5hXks0iQZNZfuk\nkzUkk0yNGg2CFqfC8Sel+xGaubs25NSp2AHS1Ti12PTaax/wHi+saCp4WdLZ\nJIyFMD1FdyVqTR4fPXz7irLnUxFdsjYdGILAnrtfpt3i+KYx4vmWKBal/j7M\nJX2xUQAKOBpUeK+3M7kfrwYTTDPO6C+dGE2dYraPkQZHJsXWRC57LvaRNPNU\n0c334pI7F0zKRNKxCQqnj8MaDlFn7FYELBmBVXGE67Clib+p3iryqGMjmxC4\nNQNt/KiyujDYCOYZ1p0rxxDrTQI4rq6qvcSsz2pLwEcD/gKBhKU9JAa4Sjdn\n5CDciCDjUfMYpZkwITfKM8oMOeZn6YMgkYlMsLBbHSXFHB8fKvStma88MFxE\n0j3FmCnxyVQHXfwK1ed9ia9W9sg9k/PaR71SD42M3BXts/UsNLMeG6WXhI1Q\nXwMbVxY0a6W0IPklQ+8Veu1yT0vRUZ19LB1kIT9kOXo6T9R7VRtuokmPERLJ\nwH7mj780CSbpYvpiqVKkDh643BeUX0Ls/hORr8kJIzmp8otkRl+xHKab+oMY\nj6ZnCo8VFQqRaKBGU/lNqGF0KwXBEZ46WT4wZzK175WgFEqtm5k5pIW8wHxk\nIGPjNGCE38DWrjCNolq+a92+ack8eJmjC26647/jkuyBejRzXSvc2kHiHvsk\nW+xy\r\n=CkAM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE6s64868GCszzUoORN+UeoJefMzoXCP/1ObQq7Xi1M1AiB3xvpyflJA8dhn6e96GdSDfM1ppiMNhFlv91iv8yDyTg=="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.8_1546772189176_0.6758071685817262"},"_hasShrinkwrap":false},"0.1.9":{"name":"@redux-ts-starter-kit/slice","version":"0.1.9","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn test && yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"95a385c34f5e95979c693dbb987415299d2129a2","_id":"@redux-ts-starter-kit/slice@0.1.9","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-DwsdR8hDlH/2glb0pi4grKWwWGRIA58bgxjHaGlW6c7vVRIVSISKguyxWqvPbfIrWYzxX6PsuISZ0juHw2/sCg==","shasum":"8a4e752c1569f83958aa54aa036c2e7988846f3e","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.9.tgz","fileCount":22,"unpackedSize":64695,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMgCWCRA9TVsSAnZWagAAtTMP/ROtHxg34OS3g03FMUPl\nMeyEtuSCyZNRFd0aXLC9eChPbYK8FLU92Ri3RqwadsTfP3Hkf4yAmkJEXFKr\nOuY/lhb5hkfXAJY9z6PfAdjQ/DgVyHtmKLCz/TPN4veUm6fEshacqZlnvk7b\nOu2AdNuwXpJqE6vy/h43zMQVNgjJ6nupw6MN4v1OtmBsMRLOOomF/mRN0ZY+\n82YhHnSCzVN1UXS1SY6Dr2aofDSlb99BIex5qAL5MUxD5pujPOXjEckLX+z5\nkAV8w5YwgGEt42gSfMi+z+89DjH9mDxlfBwgEbgEPWRaSbL+GERYb1t4yeBx\nJlGRhzWuVVlfP2qV84VL4YR3VI/ptERR9clXzOC4cB0CkhW+sUMWm/KGgAo3\nzPnjx71Bl5ozK6+/VCEiGJQSZIB+54fO8UvqpxM5DhsN9jSR0eOHPyBhr46u\nppisnySbVRVGEPfSTtj/lqhhyS1N1sGpn87WA5rsSSHYXTtyIlIPwWA5dlpy\nf38WdyvFLolic7JFyf3Y+LkrtSMM8jnWMPoMcx/oldIb71Xx6LZrBwHeHm2Z\nhZstzh5ZfQYtTZn75py7S5TGhb9LJMFmFh9zgKQAzQdqwXXaJh0UyqCp2pgb\nX3rAMgKXLS8AJkGGXLEUSfsvT21zMUg2eLPT7E+EgcVlkKIcytW2KyA2F0fE\nODme\r\n=UWp6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGs85q/k1eUNN0NFceeceWwLFiVE9rp4/2QO9n0vlAOhAiApyCSjyrS7aOEEIpfCRrCqya7VD15SodHWij9eLzmk3g=="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.9_1546780821551_0.5490878183533419"},"_hasShrinkwrap":false},"0.1.11":{"name":"@redux-ts-starter-kit/slice","version":"0.1.11","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn test && yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"1327657678ae58401e2c44dfa66d58e706d4424b","_id":"@redux-ts-starter-kit/slice@0.1.11","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-do/y1w6gu95y2uNUKo9iPzWOnEofG272MOgFs6E7o1ksorMllJgKM+K3eDpWu4on7oEnk5uwH4BuWXddIfEhCw==","shasum":"437c664a94d33a89ce1dd65974950fdd70c67aa9","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.11.tgz","fileCount":15,"unpackedSize":58737,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMg2xCRA9TVsSAnZWagAApBAP/2CIDasxPSGEwce6R4Hh\njs0PKc5CNnFymwvp6ZYpESNBZkbtnRnTUWaNlfbi/s3E51rR1xevM+m4BJ0c\n7CMmRDoA9MucSQ/HgPoppeDmwEUYfOQzg3iF6lILZKdcSjQhSpVjprJnD7Q1\nFbzdHu04lhICxeFo0aoa2ksxsyROBwd5bHhE9wpyyP/Nf/sGkrnUZ2xbtXQb\nlb1BCzP+tRFMW4VMEkF03r9m+w8PBQ3oRND5TsTxsSLXGRpg/lMGGUH1cHG7\npJaPmlXaUdhslnFRKnewCsa7sI5U0swK/aMMNO4CM89sDdsoPa4GxhbVUV5S\ncz1eKFCFLt3qHN/KMtDUBaRWLAtmjbIEEJKVShApJeicOgvCVr2ChABLebrp\nUtzH3gZkCjJSNBmR+1KqE92qYiMH9YrKFXwNGpSKOVKPpq0PtAChPZWLt34l\n0eJF4j1j6e4TroHU8rnEHEOp//kGM7LIoUlBCrXZrnd0gEadf6PSUeAmEHhm\nz1Qy6pCqdi8mQZLsJbzJZhRYBWXdv5H0WmMjLxPQBdafgxJacoJSfboNKdaR\nmNV/9PPdBZOfLv5o7ysO1FnJNJtk7O2om4yv4b6JCRJPOzJMJfwvseruF83a\nG+PP1/ABY1s3xbSN22edS9eERa/hxrOfa7Rstd9G62phJF+vP1a+r0HlWnnN\n4xXS\r\n=0591\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmx6N0Q7syG4Nc3ExoVhAT2vsyTRwe0QPJ5IelHXX6wAIgM3dvqns6TIP/7du6NoPASm6Vqvi1TbReOaSY6zYil7I="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.11_1546784176611_0.33308957833862984"},"_hasShrinkwrap":false},"0.1.12":{"name":"@redux-ts-starter-kit/slice","version":"0.1.12","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","test":"yarn run jest","prepublish":"yarn test && yarn build","alpha":"yarn publish --tag alpha","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"49a527f4f0446c763d4bf0012474db35df31b69c","_id":"@redux-ts-starter-kit/slice@0.1.12","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-hzrlZaMu7NfhixpmlNMJpQuDZKaZF5mDrnwB+lXUlkZD9jAOp3707TnCTDu2ilG/Oy+D4Sd8PdxCgg0Ai48+hA==","shasum":"a040edae5c4094f0f8b0dd275276ba99dcd1fc21","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.12.tgz","fileCount":15,"unpackedSize":59502,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcM6eSCRA9TVsSAnZWagAA1JsQAJr6ENEQshfQHN/s0p9l\ngnD4jMY287x1WufLF/Stw1uUsn7ZbG6AtAkJjv1EzkYwJFgSkMoUMiEUrf3E\nQnPbvY9kdp7DEUDWPqYG210yq/cjZATlUNodX+wDfKFhSeHLN9ThMAZWC9eY\nE1mBLzXzEs/+HeJWDAzxEbwLuAgtdXPfscOCSpHqR9lbriU3Dq9mN0cCP8gq\niJasYhTfzOKv/T/gBJVZSVAEP18DMLf0XQDkJwkvROV14FpAtW59V6b50jz0\ne5GZRTKI5SJH70yrY5gkbZSfnkfKQterNN9XDbn/8UbnPpAU29O9O9LpbmbE\nUIIxQKTcyvXDBqzsVAdjPpj08AWj1VFso17gcRj9Vxt6UvEBnoZAd8lysgF7\nSzDvBqldVCVKUTF1eH98TdVX6mdyVhub59G/5r9GhQuQHAzbaRxk62qYVJ5m\nHESpE4wRRHie3F5s60Cj1w8+K6rtCmqz1BmfTDLe/+HZL6bQ2M0sM2LoiRCc\nN/RUqo8CCmQQgnrGbSgZDp2J7HbPVH3UASpzW10iF8o9aaO7tqDj+NVV+Cbq\nuF9X6Yp16ic3wNF1hGvxCyDvTaN2k1SbHaJQdgOH+8OR+Wo0hVtENZ/wMqNh\nTZPakUoOQknqq+skg2/PMlXnRZvuY82wBTvvB5oXSWGdFuQelyD1C/0lA79Y\nsyy/\r\n=zB+t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLh1x1kfD1tdkK3bNCwNFbvafLZPVIxnxvwvC3tO24QwIgdLO6ITXLdbTyiVxyCHTQ4/OGJlX0kbf+IJExvtI0Tos="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.12_1546889105620_0.19721606755031829"},"_hasShrinkwrap":false},"0.1.13":{"name":"@redux-ts-starter-kit/slice","version":"0.1.13","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","typecheck:tests":"yarn run tsc -p ./src/tests --noEmit","test":"yarn run typecheck:tests && yarn run jest","prepublish":"yarn build","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"d5e147ff8106aa0f4d20c074cdfa2f85cae9d1f5","_id":"@redux-ts-starter-kit/slice@0.1.13","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-44v1FtfykaH3m6VidtrAiLOu4uLCO5jk7tafjzIAH+WHJv90J63DgN1IdD7sTGi1SecwAYAyCJegghQ/XGk4QA==","shasum":"6d531fc9000840578fa5fedf06f0c18216df649e","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.1.13.tgz","fileCount":15,"unpackedSize":59539,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcM7KzCRA9TVsSAnZWagAAtyYQAIBQ1+g3Eqiy/PvRlkgZ\nJXUwxSoQbcKEfwseGnImOvqQ2WXwLzPqUgIKHsdicw70paQUqQUWewe+uGqL\nJKb3hDJXveYLIb3CLq59ofXjIZpXGoZ2Ye4G/DWxDjlLjtYuma6HhLfO7hAY\nHdzFJWYBnykRhhQPbdTzV+ivdMMnf8Sk7xjbDpSQ7+mt/UT8cPNxQfVjdBy7\nY6XAy6hhxdv03KWa92gddC7qoK/NhVSv0axgjqi0WE2yYKId79A1MucL9pCV\nR6TfblZZIrYNEGsDgL3W68C4KLaONCZCpr18M4SGvfV1yknH3lstsC+FwRhC\nnaClrCO1PvMsfB98wCzzur6/wnsrsVs9N17nMDgdSbFrSWmjTbcs7BoPFIjo\n8+dmiVgB8XE+Q9VIYI/OamThePJtznV0xE5p/wKkLjbjQzwOHBykFvqHicDd\nP1fAk3xo1th5QYy39hZw6XTnsLIB4ij2kFIoUXo2hXwTYZBM/yvPe8JkkL7R\nt+CdBVbc/Ogniu4Loc8WRxqwCj0HW17a3jvQjJLD3Vr9dBb1VrIoJyRm75I6\nTiB+k6q6Bkpfv0IfCM2slEzSV+vlwUCHQYsIpimqd/tblO3e1Wh3wX1A6v4d\nk+3vSwynMhkzQ0LyAiCUtdMe03ySZr0WFnKu4OXEu9wgM9g0ZEB0PNQSRflJ\ny0N3\r\n=moBR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC1nw3VTlI5UI6MhbjI+qIJM2PrkZd43/wsfKqJ28RRIAiEAm+G1qPm9KwnWmqyth0txAezSnlaqggRX7S0vMs2s7ro="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.1.13_1546891954086_0.2893485787962191"},"_hasShrinkwrap":false},"0.2.0":{"name":"@redux-ts-starter-kit/slice","version":"0.2.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","typecheck:tests":"yarn run tsc -p ./src/tests --noEmit","test":"yarn run typecheck:tests && yarn run jest","prepublish":"yarn build","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"dde4aa43ee05617f005cfa9da92a671e6563e47f","_id":"@redux-ts-starter-kit/slice@0.2.0","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-/JkY3Nm8m1iErDralBtECPNg+IPnM85NWSHRR+dzWkXAZwpUVpnG8NDThlY5jNBYZLnRHfp4z6MFpvMeuqcJuA==","shasum":"949e9fb7ed30d47485603250ef3d74310a2b504e","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.2.0.tgz","fileCount":15,"unpackedSize":67280,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcOjA/CRA9TVsSAnZWagAAniMP/jgKyP0NQ8rkOYHGRUg3\nvBBMdfa+rsTRwivwMmZgu3dQH9ULqB2dCjTpyQfxqJ8xMmXlkxYVu5mdMxYm\ncE6/ZVQl2BDiD5uxidxpzEELf7fSPp4oXKmDPy6jsPHdQneu37l3wiB3lj2E\n47DJKYLITbnOnj7+7mHId+SHClE3Ds5TVQkpmxCl+BcnG8691t/ktQhTq3aj\n36GsnhRFF37aE9ZDxkBu60+KWt5WDA56IQ4hwmROwdq4BoTwRMh+9oLftuu3\n+HyvXXXeWRtVsAgIVI6RlGIJM3ryk/86KaBkLniU4y5D48QPPgEMb3wWqTlI\nBvl3NbXvFOMzTpsx0EJPVDGdFU+g6fhJ/VwssrqL7Bh3LuhlAuacnrTx3yg0\nuUFhCUNyZpAoVEeCspBQwhCnbkb0LR/xMZ60EhPgSdE6Py9B9Zd06eGsmyny\noNnJ25DizygCdW5GsfY2tbvxRZByCS9KIp5r1arV2XI+TCp2m48Kq2YvSmJw\nM2kvB5pMuNzL551coG1X7bH538TpOX1QAVnzOzyiQAT058B9h9Dr9q2ty3RR\ngXd5jM27ngUO5y7JSzEBEg5Tum4+fDZB0ZjvmMeud986TlvQZKvsBGUVgf0U\nzkSMKg3OTMf1SJacF3yDgoIVIDpu3d68S2mn9l0vacBwSyAn5O2FgetRCuM8\n5Mdi\r\n=p68M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3cMQmMyoaKFda6Tck94JOOvuGAmoXiqh3Pdkqx43vjgIhALstrgHFfMC77r4IUwUrPHUIEmxlMMvMSA62h0eeMKGI"}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.2.0_1547317311033_0.15054678917927733"},"_hasShrinkwrap":false},"0.3.0-alpha.0":{"name":"@redux-ts-starter-kit/slice","version":"0.3.0-alpha.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","typecheck:tests":"yarn run tsc -p ./src/tests --noEmit","test":"yarn run typecheck:tests && yarn run jest","prepublish":"yarn build","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"ef7dd9244ef552466f15d51bf24f925a9e8d545b","_id":"@redux-ts-starter-kit/slice@0.3.0-alpha.0","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-zoe/qZ8mg4vNDCAirvPH8xwvygx7ngkxQM0kIEwkuRrXst/ltIaB0D66QaOylxzdMIWveHmtbE/lB6L4crwUbg==","shasum":"960f821e731234f7aa7393a28b56df2998f3176a","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.3.0-alpha.0.tgz","fileCount":15,"unpackedSize":67264,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcOpjLCRA9TVsSAnZWagAAbioP/Rf17GTyEj4kYEHF0yFT\nlvVY4A9RUcD5phHeAcGEMbRceTCNXloet2LT4UYyLp66QuRcbEA57jBQJpCv\nVrgQPe74pddmKV9CZWVInpf7sSDtMZF8daAhPjAhVOqKvdiQ480nTmfvHpAc\nhCsU6eE4qmo9KslBvVmrXQqPN1tHnlyYabHhatJB01k9bPahrds47cd34LJ7\nM3YOlq/iYA2kee5rouViZ0ZQizELJ5SHIE8Bw1oGzYqML3ulH/4oYohaGJNw\nvVqCV3UyVKIPc2K8gChDgbext/yNMiYvCphVlsIDuYnRNWyXdYU0jkxCi+UW\nyJwEZwG3i9kkGJJrnnX+GcE+8zxeLIdV63ZE2i4SWLpmctCVmHoO5FXezbKq\nnIiLLMQQHHc8U9TuD3V2UnLpAVOpmztALEv9tYFYCQ6TxDRZZZwv6wDudDCz\n80XOzcftwiRs+0Xhj0pegzGx9GMt2T6jzuUSXSXNU38BPeDObT+ViTmACwrW\n2R2GoVAkmjdT1XS5jh6V4vto0YV9Q6kPpZ3JoUW88sl8waxvuIm2bnOUk1o/\noftiJwWhJi3JUCXrTCubYOhrIHgEnUurfuWt53zH08WMRLIBIaZQdRDITDsq\njdqyINb5qBip/0Yhk5kfWGWCbegwO8gYpXrntDr946kuwyOuLOKbQWxhI11r\n/lF0\r\n=OncA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCc40vvTeM9IJO3doJDmcdPNVt6IW2HlO8D8tdn9o5QuAIgJsj/PX1FkgXLxi0kMRR3bvJEKesfLxp4WF0qUG9gLPE="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.3.0-alpha.0_1547344074364_0.3168013236916103"},"_hasShrinkwrap":false},"0.3.0-alpha.1":{"name":"@redux-ts-starter-kit/slice","version":"0.3.0-alpha.1","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","typecheck:tests":"yarn run tsc -p ./src/tests --noEmit","test":"yarn run typecheck:tests && yarn run jest","prepublish":"yarn build","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"cf6b633fcb0346d7e4716235b4f442d350aecca5","_id":"@redux-ts-starter-kit/slice@0.3.0-alpha.1","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-eHCKtClnmAvwdt+bFjUYtIBXGrL5Twm9FSfqChzh+T+Fgq2uKfJz7VAsWjnumVWX/nUFi3hzyafAXWVwAIlngA==","shasum":"9bf93b72537de8e21d12d7e4932220b94ca6707a","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.3.0-alpha.1.tgz","fileCount":15,"unpackedSize":67264,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcOp85CRA9TVsSAnZWagAAKVkP/jyNSetd4snop206Utp1\nDmPJivFUqE37tsnF7hcoWMNkpTa91yPjhotai7turvJke2UNNl7gKQWt4BVO\nYhbzFtVV6lng/JXM5V2/OtqX8h3gof4M52j7BSbzk9OBREzxPlZDXyq/c1be\nn8CrTcqEDhhR7ZVyY0VTpzixdMqQtwAcmp47QmviEbzJS5Co8MRNcICh17LY\nX3TWdbpmcY/GVL8nj//lyCyMn8aBB6x1fLvAx5LBvBaaO+jaix3A3PSJxSsx\nWGMgqqflGSZZXV04FApFnrIZv3tgfCd421KgxxUQZgi8S/BvgFtvhxaqGG0c\nmt4liUTJ4bLlYth5mrTN4ekJ42jmt/6fcgh6NnfXgJQ8XLc76HP6NhDrJHfw\n87Wkncfb5N7uUwgfoLHWhHed1jqccHtqtKyAXE4rJaCt7ZRmeS2JLF4FeVUm\nkJzJyvuM6yigLffQMlSgdwq/tMxL/voW1AwAIalFMlM0nhS6j66q2la641vT\nriJZZakqgRVGeK8L3yDeoaQXFiCfT8q+iU70wCF88e7BD6IX7c0Sv+9G1pqt\ndvOB1HhAi9xMsU2w9wG4aAJNHklISIZkOcfXzWDWbP/9UMOznZXLDcpSvsjZ\nYT21Flxx1TQ1HqKDqez9j9jQQX/r/LQcfOZmWwPxe1whWv8gDQEBdlQ/+crc\nXuJ4\r\n=2XOJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID7gHg7+J7KpZ5+RXgyLmBCAnm9Abz+YA4l1Mik1bLRtAiBu+6rcyKn1H7oG3znJEFFZdSxDGnQQMpKfeoXgBFOsLA=="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.3.0-alpha.1_1547345720801_0.09897799796624929"},"_hasShrinkwrap":false},"0.2.1":{"name":"@redux-ts-starter-kit/slice","version":"0.2.1","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.es.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","typecheck:tests":"yarn run tsc -p ./src/tests --noEmit","test":"yarn run typecheck:tests && yarn run jest","prepublish":"yarn build","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"485659c191862b7f409cc3819018884d29dba3e1","_id":"@redux-ts-starter-kit/slice@0.2.1","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-X06NBD181fJ7rUNyjLdQZ4/qCipmyvawXGqsEjZ2LQQsioRiJQCne02uX4tCN5hSG10f1JqmZRaQ1Ok2KjwVCw==","shasum":"5a06e5ed3647f326ba3496b69507a8445063cfb1","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-0.2.1.tgz","fileCount":15,"unpackedSize":67280,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcOqBeCRA9TVsSAnZWagAAUX4P+wZ9Pj3SJIcJx1Pf5RT1\n6TTvu+DISNGBXrcz9PnQan0dBcwQ0ZSo3yVRQjrzwxDjVoJI7p1z8025qNJ/\nLHoydQ58wucvEZ2Sglm2JOVNWlRYE3hQmSwch6/AC2+aDw4GGV6eJ3s6SKjw\n4TRr73Pccy/jOTN/SIGwFJFiLVxR7mcCtKq2S6+xKROL5KKu1XJ8GWIMrAOB\n390v86B6ILfUyCX5SIvDcseYaH1LHU4BoLneUPl7ehQtIZUl4gQ4nohwE2CO\nuIh4ATJePfBzIiytDazsfiY4zF2nrR32LjxRXhMuNTZsQ8Xy0DXE8Qb1dqqF\n/ZlMJOSf5vw+YZbqFJZngyi3w3r0SqeKVXgjAA8nB0dxVpmAqUlyJ4SnGvDD\nZ4FmQzwKXafABwS5F3cWMWUEwU2z8YDTP5Suh9JtQobt1gk31Ev8EL8QtcNF\nN/bg7KEeOevg/ygwDpT6oxWmUdEMACg5RSI/Y4n1pzqm8MmTStTtIoVn5v8y\nQLWqcWiKE+4sD5c+DmUn0CmQlzCQj8J7r9XuD0fIj+/+5pczoLPVfMLbL2ut\nocbqsSPVl5X9EltKC9GIeGNeIq6NP5f5vShdJZyYoWVxtZMx7LI9mmpOGvdk\nFwFz/8Cm9RObLxaxEFGOUjxsmHp5dRjtuGx2jdo8g71JNxiPShFPCZw/vXSj\nd80w\r\n=EtH8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWTKIf5NIAZTuoL9GXXYlLPUiBxtjkXN7Sic4wgkaqSAIhAOnAysSRkOIfsWAVp85VQuVqOWz8cAtt6wN8XLRsnqv/"}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_0.2.1_1547346013511_0.9344474393914641"},"_hasShrinkwrap":false},"1.1.0-alpha.0":{"name":"@redux-ts-starter-kit/slice","version":"1.1.0-alpha.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","typecheck:tests":"yarn run tsc -p ./src/tests --noEmit","test":"yarn run typecheck:tests && yarn run jest","prepublish":"yarn build","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","@types/redux-thunk":"^2.1.0","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","cpx":"^1.5.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"4255f9cd27515fe756901887ba38b2bd3879a7d0","readme":"# @redux-ts-starter-kit/slice [![Build Status](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit.svg?branch=master)](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit)\r\n\r\n## A simple set of tools to make using Redux easier\r\n\r\n_A typescript friendlier fork of [robodux](https://github.com/neurosnap/robodux)_\r\n\r\n`npm install @redux-ts-starter-kit/slice`\r\n\r\n_This command installs `@redux-ts-starter-kit/slice` alongside `immer` as a direct dependency_\r\n\r\n### Note\r\n\r\nThis package only includes tools for simplifying the creation of slice reducers, it does not ship with `redux` or any of the tools to automate the generation of a redux store with enhancers and middleware.\r\n\r\nIf you require such tools see [@redux-ts-starter-kit/core](https://github.com/Dudeonyx/redux-ts-starter-kit/tree/master/packages/core) which includes this package under the hood.\r\n\r\n### Purpose\r\n\r\nOne of the biggest complaints developers have with redux is the amount of boilerplate and new concepts they have to learn to use it. `@redux-ts-starter-kit/slice` attempts to simplify the boilerplate by automatically configuring actions, reducers, and selectors. The way it works is `@redux-ts-starter-kit/slice` will take a list of functions that correspond to how state should be updated and then create action types, action creators, and basic selectors for the developer to use. This library tries to not make too many assumptions about how developers use redux. It does not do anything magical, simply automates the repetitive tasks with redux.\r\n\r\nUnder the hood every reducer created by `@redux-ts-starter-kit/slice` leverages immer to update the store, which means reducers are allowed to mutate the state directly.\r\n\r\n## Features\r\n\r\n- typescript support\r\n- Automatically creates actions, reducer, and selector(s) based on `slice`\r\n- Reducers leverage `immer` which makes updating state easy\r\n- When stringifying action creators they return the action type\r\n- Helper functions for manually creating actions and reducers\r\n- Reducers do not receive entire action object, only payload\r\n- Advanced type inferrence, minimizing the need to create one-off interfaces. _Note: supplying interfaces is largely not required but highly recommended_\r\n\r\n## Why not X\r\n\r\nThis library was heavily inspired by [autodux](https://github.com/ericelliott/autodux), [robodux](https://github.com/neurosnap/robodux) and [redux-starter-kit](https://github.com/markerikson/redux-starter-kit).\r\n\r\nNote: This started as fork of robodux that was supposed to merged in a PR, but the number of changes I ended up making were numerous and breaking.\r\n\r\n- creating reducers with `immer`\r\n- no external dependencies besides `immer`\r\n- create action helper\r\n- create reducer helper\r\n\r\n## Example\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { combineReducers, createStore} from 'redux';\r\n\r\n\r\ninterface State { // interface representing the entire state tree\r\n  user: User;\r\n  counter: number;\r\n}\r\n// Actions interface where the keys are the action names and the values represent the payload types\r\ninterface CounterActions {\r\n  increment: never;    // <- never indicates that no payload is expected\r\n  incrementBy: number;\r\n  decrement: never;\r\n  decrementBy: number;\r\n  multiply: number;\r\n}\r\n\r\n// You can destructure, rename and export the reducer, action creators and selectors\r\n\r\n      // number is the state slice/initial state type\r\nconst counter = createSlice<CounterActions, number,  State>({\r\n  slice: 'counter', // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: 0,\r\n  cases: {\r\n    increment: state => state + 1,\r\n    incrementBy: (state,payload) => state + payload, // payload is type number\r\n    decrement: state => state - 1,\r\n    decrementBy: (state,payload) => state - payload,\r\n    multiply: (state, payload) => state * payload,\r\n  },\r\n});\r\n\r\ninterface User {   // state slice/initial state interface\r\n  name: string;\r\n}\r\n\r\ninterface UserActions {  // Actions interface\r\n  setUserName: string;\r\n}\r\n\r\nconst user = createSlice<UserActions, User, State>({\r\n  slice: 'user',    // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: { name: '' },\r\n  cases: {\r\n    setUserName: (state, payload) => {\r\n      state.name = payload; // mutate the state all you want with immer\r\n    },\r\n  }\r\n})\r\n\r\nconst rootReducer = combineReducers<State>({\r\n  counter: counter.reducer,\r\n  user: user.reducer,\r\n})\r\n\r\nconst store = createStore(rootReducer);\r\n\r\nstore.dispatch(counter.actions.increment());\r\n// New State -> { counter: 1, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.incrementBy(10));\r\n// New State -> { counter: 11, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.multiply(3));\r\n// New State -> { counter: 33, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrement());\r\n// New State -> { counter: 32, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrementBy(8));\r\n// New State -> { counter: 26, user: { name: '' } }\r\n\r\nconsole.log(`${counter.actions.decrement}`);\r\n// -> counter/DECREMENT\r\n\r\nstore.dispatch(user.actions.setUserName('eric'));\r\n// New State -> { counter: 6, user: { name: 'eric' } }\r\n\r\nconst state = store.getState();\r\nconsole.log(counter.selectors.getSlice(state));\r\n// -> 6\r\nconsole.log(user.selectors.getSlice(state));\r\n// -> { name: 'eric' }\r\n\r\nconsole.log(user.selectors.name(state));\r\n// -> 'eric'\r\n```\r\n\r\n## createSlice API\r\n\r\nA function that accepts an initial state, an object full of reducer functions, and optionally a \"slice name\", and automatically generates action creators, action types, and selectors that correspond to the reducers and state.\r\n\r\nThe reducers will be wrapped in the `createReducer()` utility, and so they can safely \"mutate\" the state they are given.\r\n\r\n**IMPORTANT: For proper typing support please use `const` if initialising `slice` outside `createSlice`**\r\n\r\n```typescript\r\nfunction createSlice<Actions, SliceState, State>({\r\n    // A object of function that will be used as cases for the returned reducer,\r\n    // is used to generate action creators that trigger the corresponding case\r\n    cases: Object<string, Function>,\r\n    // The initial Slice State, same as normal reducer\r\n    initialState: any,\r\n    // The key indicating this slice in the combined state.\r\n    slice?: string,\r\n})\r\n```\r\n\r\n### General Usage\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  interface FormActions {\r\n    setName: string;\r\n    setSurname: string;\r\n    setMiddlename: string;\r\n    resetForm: never;  // no payload expected\r\n  }\r\n\r\n  const formInitialState: FormState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: state => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\nOR leveraging it's type inferrence if you're feeling lazy. Not recommended.\r\n\r\n```typescript\r\n  import { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  const formInitialState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name: string) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname: string) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename: string) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: (state, _: never) => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\n### Type parameters\r\n\r\n`createSlice` accepts three generics: `Actions`, `SliceState`, `State`. None of which are required and can mostly be inferred from the arguments given.\r\n\r\n`Actions` helps improve autocompelete and typing for the `actions` object returned from `createSlice`.\r\nSupply an interface where the keys are the action names and the values are the payload types, which should be `never` if the action takes no payload.\r\n\r\n`SliceState` is the state shape of the particular slice created with `createSlice`. If there is no\r\nslice passed to the state, then this will assume that this is the entire state shape.\r\n\r\n`State` is the entire state shape for when a slice is used with `createSlice`. This helps type the selectors we return.\r\n\r\n### Arguments\r\n\r\n`createSlice` accepts a single argument object with the following fields:\r\n\r\n#### slice\r\n\r\n*not required*\r\nThe name of the slice of state the reducer is expected to manage, should be left out completely or be '' if the reducer is going to be the root reducer.\r\nShould be a string or number.\r\n\r\nNote: if a combined State interface is provided, the slice is type checked to ensure that it is a key in the State.\r\n\r\n#### initialState\r\n\r\n*required*\r\nThe state that the reducer is initialized with, same usage as standard reducer.\r\n\r\n#### cases\r\n\r\n*required*\r\nAn object containing all the actions the reducer can perform on its state slice. Each function is equivalent to a standard switch case statement in a standard reducer.\r\nEach function can mutate the state directly as it uses `immer` behind the scenes to make it immutable.\r\nEach function is used to make an action creator of the same name.\r\n\r\nIf an Actions interface is not supplied, you can type cast the payload arguments directly and it will infer an Actions interface from it.\r\n\r\nNote:\r\n\r\n* Do not type cast the state argument, its type is automatically inferred from the initialState field if not interface is given\r\n\r\n* The returned action creators accept only a single argument as payload, i.e a case in the form `(state,payload1,payload2)=>{}` is invalid. If you need to pass multple arguments use an object or array to pass them.\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\nconst hiSlice = createSlice({\r\n    slice: 'hi',\r\n    initialState: hiInitialState,\r\n    cases: {\r\n      // state type is automatically inferred as typeof hiInitialState\r\n      setGreeting: (state, payload: string) => {\r\n        state.greeting = payload;\r\n      },\r\n      setWaves: (state, payload: number) => {\r\n        state.waves = payload;\r\n      },\r\n      resetHi: (state, payload: never) => hiInitialState\r\n    },\r\n  });\r\n\r\n  // Gives the following action creators\r\n\r\n  console.log(hiSlice.actions.setGreeting('hello'))\r\n  ->> {type: 'hi/SET_GREETING', payload: 'hello' }\r\n\r\n  console.log(hiSlice.actions.setWaves(5))\r\n  ->> {type: 'hi/SET_WAVES', payload: 5 }\r\n\r\n  console.log(hiSlice.actions.resetHi())\r\n  ->> {type: 'hi/RESET_HI', payload: undefined }\r\n\r\n  // again note that you can destructure the returned actions object\r\n\r\n```\r\n\r\n### Return value\r\n\r\ncreateSlice return an object with the following fields\r\n\r\n#### reducer\r\n\r\nA reducer function, works exactly the same as a standard reducer\r\n\r\n#### actions\r\n\r\nAn object of action creators with the same name as the corresponding case.\r\nYou can see this in action in the hiSlice example above, it's actions object has the following type signature\r\n\r\n```typescript\r\n\r\n  {\r\n    setGreeting: (payload: string) => ({type: 'hi/SET_GREETING', payload: string})\r\n\r\n    setWaves: (payload: number) => ({type: 'hi/SET_GREETING', payload: number})\r\n\r\n    resetHi: ()=> ({type: 'hi/RESET_HI', payload: undefined})\r\n  }\r\n\r\n```\r\n\r\n#### selectors\r\n\r\nAn object containing the generated selector(s), always includes a selector called getSlice that selects it's slice state from the state, if the initial state is an object additional selectors are generated with the same names as the corresponding initial state keys\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { SliceState, Actions, State } from './types';\r\n\r\nconst formSlice = createSlice<SliceState, Actions, State>({\r\n      cases: {\r\n        setName: (state, name) => { state.name = name},\r\n        setSurname: (state, surname) => { state.surName = surname},\r\n        setMiddlename: (state, middlename) => { state.Middlename = middlename}\r\n      },\r\n      slice: 'form',\r\n      initialState: {\r\n        name: '',\r\n        surname: '',\r\n        middlename: '',\r\n      },\r\n    })\r\n\r\n     const state = {\r\n      counter: 5,\r\n      random: 'random',\r\n      auth: {\r\n        idToken: \"a random token\",\r\n        userId: \"a user id\"\r\n      }\r\n      form: {\r\n        name: \"John\",\r\n        surname: \"Doe\",\r\n        middlename: \"Wayne\"\r\n      }\r\n    };\r\n\r\n console.log(formSlice.selectors.getSlice(state))\r\n ->> {\r\n    name: \"John\",\r\n    surname: \"Doe\",\r\n    middlename: \"Wayne\"\r\n  }\r\n\r\n console.log(formSlice.selectors.name(state))\r\n->> 'John'\r\n\r\n console.log(formSlice.selectors.middlename(state))\r\n->> 'Wayne'\r\n\r\n console.log(formSlice.selectors.surname(state))\r\n->> 'Doe'\r\n\r\n```\r\n\r\n## Other Exports\r\n\r\n### createAction\r\n\r\nThis is the helper function that `createSlice` uses to create an action. It is also useful to use\r\nwhen not using createSlice because when stringifying the function it will return the action type.\r\nThis allows developers to not have to worry about passing around action types, instead they simply\r\npass around action creators for reducers, sagas, etc.\r\n\r\n```typescript\r\nimport { createAction } from '@redux-ts-starter-kit/slice';\r\n\r\nconst increment = createAction('INCREMENT');\r\nconsole.log(increment);\r\n ->> 'INCREMENT'\r\nconsole.log(increment(2));\r\n->> { type: 'INCREMENT', payload: 2 };\r\n\r\nconst storeDetails = createAction('STORE_DETAILS');\r\nconsole.log(storeDetails);\r\n->> 'STORE_DETAILS'\r\nconsole.log(storeDetails({ name: 'John', surname: 'Doe' }));\r\n ->> { type: 'INCREMENT', payload: {name: 'John', surname: 'Doe'} };\r\n```\r\n\r\n### createReducer\r\n\r\nThis is the helper function that `createSlice` uses to create a reducer. This function maps action types\r\nto reducer functions. It will return a reducer.\r\n\r\n```typescript\r\nimport { createReducer } from '@redux-ts-starter-kit/slice';\r\n\r\nconst counter = createReducer({\r\n  initialState: 0,\r\n  cases: {\r\n    INCREMENT: (state) => state + 1,\r\n    DECREMENT: (state) => state - 1,\r\n    MULTIPLY: (state, payload) => state * payload,\r\n  }\r\n});\r\n\r\nconsole.log(counter(2, { type: 'MULTIPLY': payload: 5 }));\r\n// -> 10\r\n```","readmeFilename":"README.md","_id":"@redux-ts-starter-kit/slice@1.1.0-alpha.0","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","dist":{"integrity":"sha512-WUYiudb3CH9GWmEyDBsrkNvDAY92kZfeAKoWy9Y8JiO6mZBkMA6lJpb/y38Db+Gez942XlCG9azYWC147bXZjg==","shasum":"f4c307e67de8f3507048b9971cda1d17fa271071","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-1.1.0-alpha.0.tgz","fileCount":15,"unpackedSize":67431,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcO7OJCRA9TVsSAnZWagAA+MgP/jMU0T6pI/0DiQfm+Q06\nWjWyI175a8R/yD8/ICZw5vk+fWKpzUTssd0Yh4J1VY6TNT/56oXTPhaCA+q4\nGISt2ZdiBrbvgciH/JWE+uihC/bt2sKAV4dUEcpiDNc2lNnwr3YGDvjr3Iku\nWGrAyADNbhdBR+mc/Dd90HO/Gao+Mfnj7EQedboB5nQNd3WanYWs51uGBKd2\npYzA3uZgQigO0Et9uAp6M+ocFx0mina7qPXDPjVINq0beuimi9kU+zNLGmkD\nQIHpHf8pMULmNkd/Rej2XOz7L0GMHfo/5egZ3g/903t8lNcdLg7kjxQPntYB\n61U8ro0uUwqs/98zTSZdUoEH+cGDA7ZNih/3TDJvpxgqwYkqKG2QHw/kI7GY\nvowYSkKIau9jG3pn1KnBDUqZfC9vMErnNc5bjO+FDbbvaeWLi/9nOQQal6pM\nxAWe7jON46CiYUMF4MSuhOeQuMzoFa8bkhdSzWIQfLKKbrrDvprvBq8bb4Ah\n3h3mpyMxw64a5376WWWspbWelq7BLQgu17F7fuu2n0W9iGnQMh+lK0jjbkHc\npr1dW5veW0Fq/T5z0JmxaLyp6DeEuTtDQj56+zkNfBCrHmik0F8umDYUtrPY\nqDzZxN9sT9J3jVf7Ea3cDWr18hOwDg3gNEFXBpJVlhnEE4oHMiTIHj2daRlH\nM8E4\r\n=NVt+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHly/l3RUchxW4k24OMar3auDJToNbBeQywojJ2YhJ3qAiEAhuhtwSVwihYNV7WPcn8hztLl7quaur0kHJhuKQZQ3GI="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_1.1.0-alpha.0_1547416456499_0.5336360852583597"},"_hasShrinkwrap":false},"1.1.0-alpha.2":{"name":"@redux-ts-starter-kit/slice","version":"1.1.0-alpha.2","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn clean && rollup -c","clean":"rimraf lib .rpt2_cache","typecheck:tests":"yarn run tsc -p ./src/tests --noEmit","test":"yarn run typecheck:tests && yarn run jest","prepublish":"yarn build","prettier":"prettier --write src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","@types/redux-thunk":"^2.1.0","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","cpx":"^1.5.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.ts":["prettier --write","git add"]},"gitHead":"472118e575328928e7ab510650180d1c2c4fcfa0","readme":"# @redux-ts-starter-kit/slice [![Build Status](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit.svg?branch=master)](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit)\r\n\r\n## A simple set of tools to make using Redux easier\r\n\r\n_A typescript friendlier fork of [robodux](https://github.com/neurosnap/robodux)_\r\n\r\n`npm install @redux-ts-starter-kit/slice`\r\n\r\n_This command installs `@redux-ts-starter-kit/slice` alongside `immer` as a direct dependency_\r\n\r\n### Note\r\n\r\nThis package only includes tools for simplifying the creation of slice reducers, it does not ship with `redux` or any of the tools to automate the generation of a redux store with enhancers and middleware.\r\n\r\nIf you require such tools see [@redux-ts-starter-kit/core](https://github.com/Dudeonyx/redux-ts-starter-kit/tree/master/packages/core) which includes this package under the hood.\r\n\r\n### Purpose\r\n\r\nOne of the biggest complaints developers have with redux is the amount of boilerplate and new concepts they have to learn to use it. `@redux-ts-starter-kit/slice` attempts to simplify the boilerplate by automatically configuring actions, reducers, and selectors. The way it works is `@redux-ts-starter-kit/slice` will take a list of functions that correspond to how state should be updated and then create action types, action creators, and basic selectors for the developer to use. This library tries to not make too many assumptions about how developers use redux. It does not do anything magical, simply automates the repetitive tasks with redux.\r\n\r\nUnder the hood every reducer created by `@redux-ts-starter-kit/slice` leverages immer to update the store, which means reducers are allowed to mutate the state directly.\r\n\r\n## Features\r\n\r\n- typescript support\r\n- Automatically creates actions, reducer, and selector(s) based on `slice`\r\n- Reducers leverage `immer` which makes updating state easy\r\n- When stringifying action creators they return the action type\r\n- Helper functions for manually creating actions and reducers\r\n- Reducers do not receive entire action object, only payload\r\n- Advanced type inferrence, minimizing the need to create one-off interfaces. _Note: supplying interfaces is largely not required but highly recommended_\r\n\r\n## Why not X\r\n\r\nThis library was heavily inspired by [autodux](https://github.com/ericelliott/autodux), [robodux](https://github.com/neurosnap/robodux) and [redux-starter-kit](https://github.com/markerikson/redux-starter-kit).\r\n\r\nNote: This started as fork of robodux that was supposed to merged in a PR, but the number of changes I ended up making were numerous and breaking.\r\n\r\n- creating reducers with `immer`\r\n- no external dependencies besides `immer`\r\n- create action helper\r\n- create reducer helper\r\n\r\n## Example\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { combineReducers, createStore} from 'redux';\r\n\r\n\r\ninterface State { // interface representing the entire state tree\r\n  user: User;\r\n  counter: number;\r\n}\r\n// Actions interface where the keys are the action names and the values represent the payload types\r\ninterface CounterActions {\r\n  increment: never;    // <- never indicates that no payload is expected\r\n  incrementBy: number;\r\n  decrement: never;\r\n  decrementBy: number;\r\n  multiply: number;\r\n}\r\n\r\n// You can destructure, rename and export the reducer, action creators and selectors\r\n\r\n      // number is the state slice/initial state type\r\nconst counter = createSlice<CounterActions, number,  State>({\r\n  slice: 'counter', // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: 0,\r\n  cases: {\r\n    increment: state => state + 1,\r\n    incrementBy: (state,payload) => state + payload, // payload is type number\r\n    decrement: state => state - 1,\r\n    decrementBy: (state,payload) => state - payload,\r\n    multiply: (state, payload) => state * payload,\r\n  },\r\n});\r\n\r\ninterface User {   // state slice/initial state interface\r\n  name: string;\r\n}\r\n\r\ninterface UserActions {  // Actions interface\r\n  setUserName: string;\r\n}\r\n\r\nconst user = createSlice<UserActions, User, State>({\r\n  slice: 'user',    // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: { name: '' },\r\n  cases: {\r\n    setUserName: (state, payload) => {\r\n      state.name = payload; // mutate the state all you want with immer\r\n    },\r\n  }\r\n})\r\n\r\nconst rootReducer = combineReducers<State>({\r\n  counter: counter.reducer,\r\n  user: user.reducer,\r\n})\r\n\r\nconst store = createStore(rootReducer);\r\n\r\nstore.dispatch(counter.actions.increment());\r\n// New State -> { counter: 1, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.incrementBy(10));\r\n// New State -> { counter: 11, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.multiply(3));\r\n// New State -> { counter: 33, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrement());\r\n// New State -> { counter: 32, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrementBy(8));\r\n// New State -> { counter: 26, user: { name: '' } }\r\n\r\nconsole.log(`${counter.actions.decrement}`);\r\n// -> counter/DECREMENT\r\n\r\nstore.dispatch(user.actions.setUserName('eric'));\r\n// New State -> { counter: 6, user: { name: 'eric' } }\r\n\r\nconst state = store.getState();\r\nconsole.log(counter.selectors.getSlice(state));\r\n// -> 6\r\nconsole.log(user.selectors.getSlice(state));\r\n// -> { name: 'eric' }\r\n\r\nconsole.log(user.selectors.name(state));\r\n// -> 'eric'\r\n```\r\n\r\n## createSlice API\r\n\r\nA function that accepts an initial state, an object full of reducer functions, and optionally a \"slice name\", and automatically generates action creators, action types, and selectors that correspond to the reducers and state.\r\n\r\nThe reducers will be wrapped in the `createReducer()` utility, and so they can safely \"mutate\" the state they are given.\r\n\r\n**IMPORTANT: For proper typing support please use `const` if initialising `slice` outside `createSlice`**\r\n\r\n```typescript\r\nfunction createSlice<Actions, SliceState, State>({\r\n    // A object of function that will be used as cases for the returned reducer,\r\n    // is used to generate action creators that trigger the corresponding case\r\n    cases: Object<string, Function>,\r\n    // The initial Slice State, same as normal reducer\r\n    initialState: any,\r\n    // The key indicating this slice in the combined state.\r\n    slice?: string,\r\n})\r\n```\r\n\r\n### General Usage\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  interface FormActions {\r\n    setName: string;\r\n    setSurname: string;\r\n    setMiddlename: string;\r\n    resetForm: never;  // no payload expected\r\n  }\r\n\r\n  const formInitialState: FormState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: state => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\nOR leveraging it's type inferrence if you're feeling lazy. Not recommended.\r\n\r\n```typescript\r\n  import { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  const formInitialState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name: string) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname: string) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename: string) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: (state, _: never) => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\n### Type parameters\r\n\r\n`createSlice` accepts three generics: `Actions`, `SliceState`, `State`. None of which are required and can mostly be inferred from the arguments given.\r\n\r\n`Actions` helps improve autocompelete and typing for the `actions` object returned from `createSlice`.\r\nSupply an interface where the keys are the action names and the values are the payload types, which should be `never` if the action takes no payload.\r\n\r\n`SliceState` is the state shape of the particular slice created with `createSlice`. If there is no\r\nslice passed to the state, then this will assume that this is the entire state shape.\r\n\r\n`State` is the entire state shape for when a slice is used with `createSlice`. This helps type the selectors we return.\r\n\r\n### Arguments\r\n\r\n`createSlice` accepts a single argument object with the following fields:\r\n\r\n#### slice\r\n\r\n*not required*\r\nThe name of the slice of state the reducer is expected to manage, should be left out completely or be '' if the reducer is going to be the root reducer.\r\nShould be a string or number.\r\n\r\nNote: if a combined State interface is provided, the slice is type checked to ensure that it is a key in the State.\r\n\r\n#### initialState\r\n\r\n*required*\r\nThe state that the reducer is initialized with, same usage as standard reducer.\r\n\r\n#### cases\r\n\r\n*required*\r\nAn object containing all the actions the reducer can perform on its state slice. Each function is equivalent to a standard switch case statement in a standard reducer.\r\nEach function can mutate the state directly as it uses `immer` behind the scenes to make it immutable.\r\nEach function is used to make an action creator of the same name.\r\n\r\nIf an Actions interface is not supplied, you can type cast the payload arguments directly and it will infer an Actions interface from it.\r\n\r\nNote:\r\n\r\n* Do not type cast the state argument, its type is automatically inferred from the initialState field if not interface is given\r\n\r\n* The returned action creators accept only a single argument as payload, i.e a case in the form `(state,payload1,payload2)=>{}` is invalid. If you need to pass multple arguments use an object or array to pass them.\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\nconst hiSlice = createSlice({\r\n    slice: 'hi',\r\n    initialState: hiInitialState,\r\n    cases: {\r\n      // state type is automatically inferred as typeof hiInitialState\r\n      setGreeting: (state, payload: string) => {\r\n        state.greeting = payload;\r\n      },\r\n      setWaves: (state, payload: number) => {\r\n        state.waves = payload;\r\n      },\r\n      resetHi: (state, payload: never) => hiInitialState\r\n    },\r\n  });\r\n\r\n  // Gives the following action creators\r\n\r\n  console.log(hiSlice.actions.setGreeting('hello'))\r\n  ->> {type: 'hi/SET_GREETING', payload: 'hello' }\r\n\r\n  console.log(hiSlice.actions.setWaves(5))\r\n  ->> {type: 'hi/SET_WAVES', payload: 5 }\r\n\r\n  console.log(hiSlice.actions.resetHi())\r\n  ->> {type: 'hi/RESET_HI', payload: undefined }\r\n\r\n  // again note that you can destructure the returned actions object\r\n\r\n```\r\n\r\n### Return value\r\n\r\ncreateSlice return an object with the following fields\r\n\r\n#### reducer\r\n\r\nA reducer function, works exactly the same as a standard reducer\r\n\r\n#### actions\r\n\r\nAn object of action creators with the same name as the corresponding case.\r\nYou can see this in action in the hiSlice example above, it's actions object has the following type signature\r\n\r\n```typescript\r\n\r\n  {\r\n    setGreeting: (payload: string) => ({type: 'hi/SET_GREETING', payload: string})\r\n\r\n    setWaves: (payload: number) => ({type: 'hi/SET_GREETING', payload: number})\r\n\r\n    resetHi: ()=> ({type: 'hi/RESET_HI', payload: undefined})\r\n  }\r\n\r\n```\r\n\r\n#### selectors\r\n\r\nAn object containing the generated selector(s), always includes a selector called getSlice that selects it's slice state from the state, if the initial state is an object additional selectors are generated with the same names as the corresponding initial state keys\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { SliceState, Actions, State } from './types';\r\n\r\nconst formSlice = createSlice<SliceState, Actions, State>({\r\n      cases: {\r\n        setName: (state, name) => { state.name = name},\r\n        setSurname: (state, surname) => { state.surName = surname},\r\n        setMiddlename: (state, middlename) => { state.Middlename = middlename}\r\n      },\r\n      slice: 'form',\r\n      initialState: {\r\n        name: '',\r\n        surname: '',\r\n        middlename: '',\r\n      },\r\n    })\r\n\r\n     const state = {\r\n      counter: 5,\r\n      random: 'random',\r\n      auth: {\r\n        idToken: \"a random token\",\r\n        userId: \"a user id\"\r\n      }\r\n      form: {\r\n        name: \"John\",\r\n        surname: \"Doe\",\r\n        middlename: \"Wayne\"\r\n      }\r\n    };\r\n\r\n console.log(formSlice.selectors.getSlice(state))\r\n ->> {\r\n    name: \"John\",\r\n    surname: \"Doe\",\r\n    middlename: \"Wayne\"\r\n  }\r\n\r\n console.log(formSlice.selectors.name(state))\r\n->> 'John'\r\n\r\n console.log(formSlice.selectors.middlename(state))\r\n->> 'Wayne'\r\n\r\n console.log(formSlice.selectors.surname(state))\r\n->> 'Doe'\r\n\r\n```\r\n\r\n## Other Exports\r\n\r\n### createAction\r\n\r\nThis is the helper function that `createSlice` uses to create an action. It is also useful to use\r\nwhen not using createSlice because when stringifying the function it will return the action type.\r\nThis allows developers to not have to worry about passing around action types, instead they simply\r\npass around action creators for reducers, sagas, etc.\r\n\r\n```typescript\r\nimport { createAction } from '@redux-ts-starter-kit/slice';\r\n\r\nconst increment = createAction('INCREMENT');\r\nconsole.log(increment);\r\n ->> 'INCREMENT'\r\nconsole.log(increment(2));\r\n->> { type: 'INCREMENT', payload: 2 };\r\n\r\nconst storeDetails = createAction('STORE_DETAILS');\r\nconsole.log(storeDetails);\r\n->> 'STORE_DETAILS'\r\nconsole.log(storeDetails({ name: 'John', surname: 'Doe' }));\r\n ->> { type: 'INCREMENT', payload: {name: 'John', surname: 'Doe'} };\r\n```\r\n\r\n### createReducer\r\n\r\nThis is the helper function that `createSlice` uses to create a reducer. This function maps action types\r\nto reducer functions. It will return a reducer.\r\n\r\n```typescript\r\nimport { createReducer } from '@redux-ts-starter-kit/slice';\r\n\r\nconst counter = createReducer({\r\n  initialState: 0,\r\n  cases: {\r\n    INCREMENT: (state) => state + 1,\r\n    DECREMENT: (state) => state - 1,\r\n    MULTIPLY: (state, payload) => state * payload,\r\n  }\r\n});\r\n\r\nconsole.log(counter(2, { type: 'MULTIPLY': payload: 5 }));\r\n// -> 10\r\n```","readmeFilename":"README.md","_id":"@redux-ts-starter-kit/slice@1.1.0-alpha.2","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.8.5/node@v10.13.0+x64 (win32)","dist":{"integrity":"sha512-BqAuEnKAnvP9dPaZP3+nUQKuN4NXsydTMsR25XSGMNzbQYqt+7mhxJBvW15+U/ipAvufxfSbaV0fvY3zlmAVbg==","shasum":"8be958bcee3ee8dfb3f548eca422941b7e6ce3a1","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-1.1.0-alpha.2.tgz","fileCount":15,"unpackedSize":71654,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcO7zGCRA9TVsSAnZWagAAtj0P/0+S61+PCUfsvAByf3z4\nUt0Rd8fAa2W7vXxOS7Eu57bsUVmZYGe+QcxNVUkRIRwqBAqIUWQSj0MYmeoE\nnPRGNreHiSN+Star9lyZ2HfuMIogV2zq2sV+P1kcmNcutfKeR7ZflIkm3afY\nAqpXXsn3SPESFEcy5o8yAD35cJn57wi/xr1+wVAp6+PEVZ/7uu2tZSaICxmf\nt6DjIaBooLnwxSl/TNZYLMxTYGp5yMKl6zESUCR9CjceXQdh6y5IdkGJjwbF\nRuP0tXR2SwLar+MvWqPxuw8WWe9al+VOENzG5HNkO/OU419TSewAhZ8yRj6i\n00BqV3/BfJFeumJJ5drkctnWQjucH6ecINDh0co7+VjW8MtyisnlADLapAo5\nixcqObqBtn9bjW3Oj0ApUseHOv06DWq7scygc44p3bFs/4MVgeOeBlyHbDcU\nN7Avz6jPWKhOGOdxgRmpcdFnkYNFMQ70SRB5qOfiJMaTKS95QPC44rSG6+O3\nHKRCwhkDco1cTifkqtL68f6QnjT4Bhw9c+ufc6tFstW8kQTelNNIL6/C7ZiU\n4gGgZdelRi8c5UBvzAVseMV6HyXlSTjyO+zT4n5iJ8s1LWfwWq3sjS0i2Q65\nb6DCKt8yxMKNJEmiRBOoZvZEFBcMFaPj+7MZFkoEw+0RiwKJtmTXwptwmuB5\nmrHQ\r\n=65G1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFIBn2D0ZYKuwfIu+V3v4Yvu5QsB7N6NhZWxtDEcjRZYAiBU5+xSsuSPexPBTbDstI+VVmzwPjqLDpMeMcKbJsShSg=="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_1.1.0-alpha.2_1547418821580_0.1549477234309491"},"_hasShrinkwrap":false},"1.0.0":{"name":"@redux-ts-starter-kit/slice","version":"1.0.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"rollup -c","build:declaration":"tsc -p tsconfig.build.json","clean":"rimraf lib .rpt2_cache","test:types":"typings-checker -p ./src/examples/tsconfig.json ./src/examples/types.ts","lint":"prettier-tslint fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","cpx":"^1.5.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","prettier-tslint":"^0.4.2","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2"},"dependencies":{"immer":"^1.9.3","typings-checker":"^2.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"prettier":{"arrowParens":"always","singleQuote":true,"printWidth":80,"trailingComma":"all"},"lint-staged":{"*.{ts}":["prettier-tslint fix","git add"]},"gitHead":"48a8d1e37c455d569b74ef6d2c43b9dd518ed969","_id":"@redux-ts-starter-kit/slice@1.0.0","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.10.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-WXMbkfvE3JLVSVXI3BC+9MSR6NFsG+Hma09JWBOG5Nk1TQpNjy5c9p5AsMcsMJ4t4JJ2GGk/4/hDS/JlG8xCPQ==","shasum":"62eeab23bc1e4394edb5f64ed855a7437ccdf0eb","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-1.0.0.tgz","fileCount":16,"unpackedSize":76981,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcQk3kCRA9TVsSAnZWagAABwwQAISurnRErOJ/1958f7hr\nU2BDUB52Zylf20a3OlhJjZPxgeJw17J1HVOGfIDiti/hivxggCTNeRbyd07F\nZMJbi6qizUyuZpKlUQrDptD0J+fMa4LpF57XJEXUK2eWnXv0uL/DviFKWiqI\nycKF1zcKmlM0P+OnCHABeAVi6TiUSPn83zDTt2DIaRY7YB2Z3vh9aLxAVmys\nHqm9e82wTpJDQADXRB4si4VKZL+jmelot08knAYLNvh8zUnDpFGuyRnpdC0R\n5kDWyJglnboiU+O7PW3Z4qcyBXW7I8xidIq7lnZV2Qx9GYBrER75ei6ESWPh\nu7fe5InoO1eLQUiRmtotvusthskpU8O7m6sH6AaDmLn5A0sEXThthUyvTnYd\nDiixIb6me8x1dnAOl0e6QgA8SduHrf2N2sc+Z2Fmswlnx3h1T/t7uNUn7/ia\nRyEqJNKBPgUAnSD3Z9C2vjEXQf0MxhDUZg4DVO1Nv3o+UimYuMWgC2d7oX6w\nXxBSLakzu9E6A1526ebCLcnlTkCE5sChIahOFqTT/WXrQU+RT6lMOney8zFs\n85eSBxf680i+yHWpiKqFCX1vlYrrhBeGPhFeEp9++0gxXUQSVGSwq4pouwaw\nX4w/z5I5yZw98o0LI8fG2jlW2kFjyypggA7jH4qb3EfgxBSDRyDP9gaHx4gS\nx/5F\r\n=60Zv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDc0gKiXvIECoQosi1ZYwiEmF6GnPK993IsFzGIHUkIwQIhANpQB1BiHLi1Uy3il6nkMFGUSTKLXh4q4iJhHeArnd15"}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_1.0.0_1547849187975_0.6766904925427286"},"_hasShrinkwrap":false},"1.0.1":{"name":"@redux-ts-starter-kit/slice","version":"1.0.1","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"rollup -c","build:declaration":"tsc -p tsconfig.build.json","clean":"rimraf lib .rpt2_cache","test:types":"typings-checker -p ./src/examples/tsconfig.json ./src/examples/types.ts","lint":"prettier-tslint fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","cpx":"^1.5.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","prettier-tslint":"^0.4.2","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2","typings-checker":"^2.0.0"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"prettier":{"arrowParens":"always","singleQuote":true,"printWidth":80,"trailingComma":"all"},"lint-staged":{"*.{ts}":["prettier-tslint fix","git add"]},"gitHead":"4125d6d7f0c011d1590376188f3747e1a3e8f793","_id":"@redux-ts-starter-kit/slice@1.0.1","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.10.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-c8j3uBw8cF/T82qDOrkzMHhxsrUA530hXitX2VozDq1cK3KYGoXIMaAS4TqUH7uGKLMUdvJDW/XMNr/w/jt3bQ==","shasum":"575aea14f6a0365b1232c849b8dedd69e6260a2c","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-1.0.1.tgz","fileCount":16,"unpackedSize":77042,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcQlTgCRA9TVsSAnZWagAAxCgP/1EQrAAkl04TTMq0dyI4\nIjxJojtTlKEMNpefGA1I195RWL7rzj9Yk2XrZqB/sdiqDHpoXWzezn0av3RD\n38jnB46jiCD4W/iXk+plD5iJErM8PBBkoNWxLqfrw54pwNQwWPbnhz0Gc2Pb\n9dFLN3YTE8NzWS+6PTwQX6OIDvbLB3gwAnfB03t0QymP5ctxFpRfg7Yp+gMR\n4P4GAqSpycORJiGlXH1mxdOSDt02OxWsyvfrWqW627jvN+rB5urj4eIg4EXR\nqBmFeRjg/y6JVo8uaJHIYPfBHje4OVmBmiy0C8phBRDEohblH367DRhcLb4z\nRhItIYTTKowFnOwySTJRgbCqVolpHGvmJAbGoWFKkoJ0Fnx4ZRBXcOLn6hYM\nLtF9PDap76eSOYxT3gqLG+w6+F8syvxmdfLN5EW3sq6+xOQMJEOxRTqXxo9o\nJJtMGzlUA7BRyXMZxAtRQJ63xxx7997dcuP8EdM+UiZ9WKzgTLfSYeh3oVmr\n07wwuEFpPJcseN/B3M75b5KXlSgD7N0po5ZTAoXmDhVzMCqqesbiKohDubSR\nCHow1bio/8BJRgO99pOS0GvgxgZURfUlhsq4ttWbQE47ZqxaRCiR+OSiirgz\nW3LAqlLgZKZbXiM5rF+dvCIxK+ebNOc2JtoM5Iv6qxBXBqFZDGnDlTd5/G5P\nKv8T\r\n=CVeI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICP6n8jWSwEgxu+AEqbCqstbq40tr5LiQgFUigzCnH6ZAiBxAybxps1mxFESfQqFLfbypxARjl4k8FWxQ4p3T3IcEA=="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_1.0.1_1547850976094_0.7638366384231825"},"_hasShrinkwrap":false},"2.0.0-alpha.1":{"name":"@redux-ts-starter-kit/slice","version":"2.0.0-alpha.1","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"rollup -c","build:declaration":"tsc -p tsconfig.build.json","clean":"rimraf lib .rpt2_cache","test:types":"typings-checker -p ./src/examples/tsconfig.json ./src/examples/types.ts","lint":"prettier-tslint fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","cpx":"^1.5.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","prettier-tslint":"^0.4.2","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2","typings-checker":"^2.0.0"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"prettier":{"arrowParens":"always","singleQuote":true,"printWidth":80,"trailingComma":"all"},"lint-staged":{"*.{ts}":["prettier-tslint fix","git add"]},"gitHead":"9073cc276c3ca59cd9593c6d1ea95d1ee1ad861e","readme":"# @redux-ts-starter-kit/slice [![Build Status](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit.svg?branch=master)](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit)\r\n\r\n## A simple set of tools to make using Redux easier\r\n\r\n_A typescript friendlier fork of [robodux](https://github.com/neurosnap/robodux)_\r\n\r\n`npm install @redux-ts-starter-kit/slice`\r\n\r\n_This command installs `@redux-ts-starter-kit/slice` alongside `immer` as a direct dependency_\r\n\r\n### Note\r\n\r\nThis package only includes tools for simplifying the creation of slice reducers, it does not ship with `redux` or any of the tools to automate the generation of a redux store with enhancers and middleware.\r\n\r\nIf you require such tools see [@redux-ts-starter-kit/core](https://github.com/Dudeonyx/redux-ts-starter-kit/tree/master/packages/core) which includes this package under the hood.\r\n\r\n### Purpose\r\n\r\nOne of the biggest complaints developers have with redux is the amount of boilerplate and new concepts they have to learn to use it. `@redux-ts-starter-kit/slice` attempts to simplify the boilerplate by automatically configuring actions, reducers, and selectors. The way it works is `@redux-ts-starter-kit/slice` will take a list of functions that correspond to how state should be updated and then create action types, action creators, and basic selectors for the developer to use. This library tries to not make too many assumptions about how developers use redux. It does not do anything magical, simply automates the repetitive tasks with redux.\r\n\r\nUnder the hood every reducer created by `@redux-ts-starter-kit/slice` leverages immer to update the store, which means reducers are allowed to mutate the state directly.\r\n\r\n## Features\r\n\r\n- typescript support\r\n- Automatically creates actions, reducer, and selector(s) based on `slice`\r\n- Reducers leverage `immer` which makes updating state easy\r\n- When stringifying action creators they return the action type\r\n- Helper functions for manually creating actions and reducers\r\n- Reducers do not receive entire action object, only payload\r\n- Advanced type inferrence, minimizing the need to create one-off interfaces. _Note: supplying interfaces is largely not required but highly recommended_\r\n\r\n## Why not X\r\n\r\nThis library was heavily inspired by [autodux](https://github.com/ericelliott/autodux), [robodux](https://github.com/neurosnap/robodux) and [redux-starter-kit](https://github.com/markerikson/redux-starter-kit).\r\n\r\nNote: This started as fork of robodux that was supposed to merged in a PR, but the number of changes I ended up making were numerous and breaking.\r\n\r\n- creating reducers with `immer`\r\n- no external dependencies besides `immer`\r\n- create action helper\r\n- create reducer helper\r\n\r\n## Example\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { combineReducers, createStore} from 'redux';\r\n\r\n\r\ninterface State { // interface representing the entire state tree\r\n  user: User;\r\n  counter: number;\r\n}\r\n// Actions interface where the keys are the action names and the values represent the payload types\r\ninterface CounterActions {\r\n  increment: never;    // <- never indicates that no payload is expected\r\n  incrementBy: number;\r\n  decrement: never;\r\n  decrementBy: number;\r\n  multiply: number;\r\n}\r\n\r\n// You can destructure, rename and export the reducer, action creators and selectors\r\n\r\n      // number is the state slice/initial state type\r\nconst counter = createSlice<CounterActions, number,  State>({\r\n  slice: 'counter', // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: 0,\r\n  cases: {\r\n    increment: state => state + 1,\r\n    incrementBy: (state,payload) => state + payload, // payload is type number\r\n    decrement: state => state - 1,\r\n    decrementBy: (state,payload) => state - payload,\r\n    multiply: (state, payload) => state * payload,\r\n  },\r\n});\r\n\r\ninterface User {   // state slice/initial state interface\r\n  name: string;\r\n}\r\n\r\ninterface UserActions {  // Actions interface\r\n  setUserName: string;\r\n}\r\n\r\nconst user = createSlice<UserActions, User, State>({\r\n  slice: 'user',    // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: { name: '' },\r\n  cases: {\r\n    setUserName: (state, payload) => {\r\n      state.name = payload; // mutate the state all you want with immer\r\n    },\r\n  }\r\n})\r\n\r\nconst rootReducer = combineReducers<State>({\r\n  counter: counter.reducer,\r\n  user: user.reducer,\r\n})\r\n\r\nconst store = createStore(rootReducer);\r\n\r\nstore.dispatch(counter.actions.increment());\r\n// New State -> { counter: 1, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.incrementBy(10));\r\n// New State -> { counter: 11, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.multiply(3));\r\n// New State -> { counter: 33, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrement());\r\n// New State -> { counter: 32, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrementBy(8));\r\n// New State -> { counter: 26, user: { name: '' } }\r\n\r\nconsole.log(`${counter.actions.decrement}`);\r\n// -> counter/DECREMENT\r\n\r\nstore.dispatch(user.actions.setUserName('eric'));\r\n// New State -> { counter: 6, user: { name: 'eric' } }\r\n\r\nconst state = store.getState();\r\nconsole.log(counter.selectors.getSlice(state));\r\n// -> 6\r\nconsole.log(user.selectors.getSlice(state));\r\n// -> { name: 'eric' }\r\n\r\nconsole.log(user.selectors.name(state));\r\n// -> 'eric'\r\n```\r\n\r\n## createSlice API\r\n\r\nA function that accepts an initial state, an object full of reducer functions, and optionally a \"slice name\", and automatically generates action creators, action types, and selectors that correspond to the reducers and state.\r\n\r\nThe reducers will be wrapped in the `createReducer()` utility, and so they can safely \"mutate\" the state they are given.\r\n\r\n**IMPORTANT: For proper typing support please use `const` if initialising `slice` outside `createSlice`**\r\n\r\n```typescript\r\nfunction createSlice<Actions, SliceState, State>({\r\n    // A object of function that will be used as cases for the returned reducer,\r\n    // is used to generate action creators that trigger the corresponding case\r\n    cases: Object<string, Function>,\r\n    // The initial Slice State, same as normal reducer\r\n    initialState: any,\r\n    // The key indicating this slice in the combined state.\r\n    slice?: string,\r\n})\r\n```\r\n\r\n### General Usage\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  interface FormActions {\r\n    setName: string;\r\n    setSurname: string;\r\n    setMiddlename: string;\r\n    resetForm: never;  // no payload expected\r\n  }\r\n\r\n  const formInitialState: FormState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: state => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\nOR leveraging it's type inferrence if you're feeling lazy. Not recommended.\r\n\r\n```typescript\r\n  import { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  const formInitialState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name: string) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname: string) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename: string) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: (state, _: never) => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\n### Type parameters\r\n\r\n`createSlice` accepts three generics: `Actions`, `SliceState`, `State`. None of which are required and can mostly be inferred from the arguments given.\r\n\r\n`Actions` helps improve autocompelete and typing for the `actions` object returned from `createSlice`.\r\nSupply an interface where the keys are the action names and the values are the payload types, which should be `never` if the action takes no payload.\r\n\r\n`SliceState` is the state shape of the particular slice created with `createSlice`. If there is no\r\nslice passed to the state, then this will assume that this is the entire state shape.\r\n\r\n`State` is the entire state shape for when a slice is used with `createSlice`. This helps type the selectors we return.\r\n\r\n### Arguments\r\n\r\n`createSlice` accepts a single argument object with the following fields:\r\n\r\n#### slice\r\n\r\n*not required*\r\nThe name of the slice of state the reducer is expected to manage, should be left out completely or be '' if the reducer is going to be the root reducer.\r\nShould be a string or number.\r\n\r\nNote: if a combined State interface is provided, the slice is type checked to ensure that it is a key in the State.\r\n\r\n#### initialState\r\n\r\n*required*\r\nThe state that the reducer is initialized with, same usage as standard reducer.\r\n\r\n#### cases\r\n\r\n*required*\r\nAn object containing all the actions the reducer can perform on its state slice. Each function is equivalent to a standard switch case statement in a standard reducer.\r\nEach function can mutate the state directly as it uses `immer` behind the scenes to make it immutable.\r\nEach function is used to make an action creator of the same name.\r\n\r\nIf an Actions interface is not supplied, you can type cast the payload arguments directly and it will infer an Actions interface from it.\r\n\r\nNote:\r\n\r\n* Do not type cast the state argument, its type is automatically inferred from the initialState field if not interface is given\r\n\r\n* The returned action creators accept only a single argument as payload, i.e a case in the form `(state,payload1,payload2)=>{}` is invalid. If you need to pass multple arguments use an object or array to pass them.\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\nconst hiSlice = createSlice({\r\n    slice: 'hi',\r\n    initialState: hiInitialState,\r\n    cases: {\r\n      // state type is automatically inferred as typeof hiInitialState\r\n      setGreeting: (state, payload: string) => {\r\n        state.greeting = payload;\r\n      },\r\n      setWaves: (state, payload: number) => {\r\n        state.waves = payload;\r\n      },\r\n      resetHi: (state, payload: never) => hiInitialState\r\n    },\r\n  });\r\n\r\n  // Gives the following action creators\r\n\r\n  console.log(hiSlice.actions.setGreeting('hello'))\r\n  ->> {type: 'hi/SET_GREETING', payload: 'hello' }\r\n\r\n  console.log(hiSlice.actions.setWaves(5))\r\n  ->> {type: 'hi/SET_WAVES', payload: 5 }\r\n\r\n  console.log(hiSlice.actions.resetHi())\r\n  ->> {type: 'hi/RESET_HI', payload: undefined }\r\n\r\n  // again note that you can destructure the returned actions object\r\n\r\n```\r\n\r\n### Return value\r\n\r\ncreateSlice return an object with the following fields\r\n\r\n#### reducer\r\n\r\nA reducer function, works exactly the same as a standard reducer\r\n\r\n#### actions\r\n\r\nAn object of action creators with the same name as the corresponding case.\r\nYou can see this in action in the hiSlice example above, it's actions object has the following type signature\r\n\r\n```typescript\r\n\r\n  {\r\n    setGreeting: (payload: string) => ({type: 'hi/SET_GREETING', payload: string})\r\n\r\n    setWaves: (payload: number) => ({type: 'hi/SET_GREETING', payload: number})\r\n\r\n    resetHi: ()=> ({type: 'hi/RESET_HI', payload: undefined})\r\n  }\r\n\r\n```\r\n\r\n#### selectors\r\n\r\nAn object containing the generated selector(s), always includes a selector called getSlice that selects it's slice state from the state, if the initial state is an object additional selectors are generated with the same names as the corresponding initial state keys\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { SliceState, Actions, State } from './types';\r\n\r\nconst formSlice = createSlice<SliceState, Actions, State>({\r\n      cases: {\r\n        setName: (state, name) => { state.name = name},\r\n        setSurname: (state, surname) => { state.surName = surname},\r\n        setMiddlename: (state, middlename) => { state.Middlename = middlename}\r\n      },\r\n      slice: 'form',\r\n      initialState: {\r\n        name: '',\r\n        surname: '',\r\n        middlename: '',\r\n      },\r\n    })\r\n\r\n     const state = {\r\n      counter: 5,\r\n      random: 'random',\r\n      auth: {\r\n        idToken: \"a random token\",\r\n        userId: \"a user id\"\r\n      }\r\n      form: {\r\n        name: \"John\",\r\n        surname: \"Doe\",\r\n        middlename: \"Wayne\"\r\n      }\r\n    };\r\n\r\n console.log(formSlice.selectors.getSlice(state))\r\n ->> {\r\n    name: \"John\",\r\n    surname: \"Doe\",\r\n    middlename: \"Wayne\"\r\n  }\r\n\r\n console.log(formSlice.selectors.name(state))\r\n->> 'John'\r\n\r\n console.log(formSlice.selectors.middlename(state))\r\n->> 'Wayne'\r\n\r\n console.log(formSlice.selectors.surname(state))\r\n->> 'Doe'\r\n\r\n```\r\n\r\n## Other Exports\r\n\r\n### createAction\r\n\r\nThis is the helper function that `createSlice` uses to create an action. It is also useful to use\r\nwhen not using createSlice because when stringifying the function it will return the action type.\r\nThis allows developers to not have to worry about passing around action types, instead they simply\r\npass around action creators for reducers, sagas, etc.\r\n\r\n```typescript\r\nimport { createAction } from '@redux-ts-starter-kit/slice';\r\n\r\nconst increment = createAction('INCREMENT');\r\nconsole.log(increment);\r\n ->> 'INCREMENT'\r\nconsole.log(increment(2));\r\n->> { type: 'INCREMENT', payload: 2 };\r\n\r\nconst storeDetails = createAction('STORE_DETAILS');\r\nconsole.log(storeDetails);\r\n->> 'STORE_DETAILS'\r\nconsole.log(storeDetails({ name: 'John', surname: 'Doe' }));\r\n ->> { type: 'INCREMENT', payload: {name: 'John', surname: 'Doe'} };\r\n```\r\n\r\n### createReducer\r\n\r\nThis is the helper function that `createSlice` uses to create a reducer. This function maps action types\r\nto reducer functions. It will return a reducer.\r\n\r\n```typescript\r\nimport { createReducer } from '@redux-ts-starter-kit/slice';\r\n\r\nconst counter = createReducer({\r\n  initialState: 0,\r\n  cases: {\r\n    INCREMENT: (state) => state + 1,\r\n    DECREMENT: (state) => state - 1,\r\n    MULTIPLY: (state, payload) => state * payload,\r\n  }\r\n});\r\n\r\nconsole.log(counter(2, { type: 'MULTIPLY': payload: 5 }));\r\n// -> 10\r\n```","readmeFilename":"README.md","_id":"@redux-ts-starter-kit/slice@2.0.0-alpha.1","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.10.5/node@v10.13.0+x64 (win32)","dist":{"integrity":"sha512-gzXMBM7bWT+MHK8R25vHpaGyDdad262s89Bw7D6PPc0gYaNiPSifuIYUEsAiiPgOJhyhs/zK22lV3HfbvzJvIA==","shasum":"6c34470d4d32fa9c7baf550a16a1ac32c767afaa","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-2.0.0-alpha.1.tgz","fileCount":15,"unpackedSize":90425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXwo0CRA9TVsSAnZWagAArw4P/ioW2+dr6TWDUBRFr/XV\nU6zmAEQaqVAWHmdnsnXB/kiPVcUEKitEApgelII+AYyVvPiTqupFdgUSk6CN\ny+PiYdMICxvIRbUvJGGltOTLoKBDtsxqOgqv9EWrZGRQnUXR6fgz6eKfZeQW\nagAlygPjUH+0PWerC6+1udDylwbN8h/BnBo9gvShGksxdykp5WWH/LnNK5Ux\n9lV/327kCMcbbmeHIGTRge3mJrHFFUEKeuWdYOWIuKFX3qcZDCRe4KUCBskk\n+hgGb5OMv5+2fVfDajYxA4X4IphfGC1HSOtIWXF472uQs4/CPZYb5L8EZFuZ\nZtpnCA30ZuFjUTkZsOdKzAtzVfqtsom0FG10qCUpRLf+ddSxqStPmF+xYhc+\nuXJu9m/KoULI5uXoP4osiN6zNVFxu6v+UNgE+o7TxEIaqXUwhWvKeenzqdkJ\nkmr/fIe5rFIjkg9rXqa7WJ8YjGQKRwsYp3rJBiT5KBUIvKOK3QbLDCqt0Og5\nkyATTUU2dc3r25xWMYfC77Lu8RJ0f2cEF2MZQTuyRGHTuDqmkGga1bk8czQ1\n4NkIXoxALdG5+YluW4Nas44AOt8WrAEUGY9BdNQjiSFnnpXt1OD7NQhi5ea6\nJsF6aZ2GX/WGH0j7kyVGGn0kjIXkUHBT/dIwDT59BYCDL9Pm81G2WXO0xNNa\nqvno\r\n=SiEt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBgD74zTG1M8A9VfqzXzH/odbzWDkqb1P2Pavbt1+oyFAiBHQLapCfamqXARvf6EtE7ecoxobx/0aAW+L9G4231WeA=="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_2.0.0-alpha.1_1549732403454_0.0222514365619626"},"_hasShrinkwrap":false},"2.0.0-alpha.2":{"name":"@redux-ts-starter-kit/slice","version":"2.0.0-alpha.2","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"rollup -c","build:declaration":"tsc -p tsconfig.build.json","clean":"rimraf lib .rpt2_cache","test:types":"typings-checker -p ./src/examples/tsconfig.json ./src/examples/types.ts","lint":"prettier-tslint fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","cpx":"^1.5.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","prettier-tslint":"^0.4.2","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2","typings-checker":"^2.0.0"},"dependencies":{"immer":"^1.9.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"prettier":{"arrowParens":"always","singleQuote":true,"printWidth":80,"trailingComma":"all"},"lint-staged":{"*.{ts}":["prettier-tslint fix","git add"]},"gitHead":"5b49dc95cf946af743328edc8828269f1e13ae3b","readme":"# @redux-ts-starter-kit/slice [![Build Status](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit.svg?branch=master)](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit)\r\n\r\n## A simple set of tools to make using Redux easier\r\n\r\n_A typescript friendlier fork of [robodux](https://github.com/neurosnap/robodux)_\r\n\r\n`npm install @redux-ts-starter-kit/slice`\r\n\r\n_This command installs `@redux-ts-starter-kit/slice` alongside `immer` as a direct dependency_\r\n\r\n### Note\r\n\r\nThis package only includes tools for simplifying the creation of slice reducers, it does not ship with `redux` or any of the tools to automate the generation of a redux store with enhancers and middleware.\r\n\r\nIf you require such tools see [@redux-ts-starter-kit/core](https://github.com/Dudeonyx/redux-ts-starter-kit/tree/master/packages/core) which includes this package under the hood.\r\n\r\n### Purpose\r\n\r\nOne of the biggest complaints developers have with redux is the amount of boilerplate and new concepts they have to learn to use it. `@redux-ts-starter-kit/slice` attempts to simplify the boilerplate by automatically configuring actions, reducers, and selectors. The way it works is `@redux-ts-starter-kit/slice` will take a list of functions that correspond to how state should be updated and then create action types, action creators, and basic selectors for the developer to use. This library tries to not make too many assumptions about how developers use redux. It does not do anything magical, simply automates the repetitive tasks with redux.\r\n\r\nUnder the hood every reducer created by `@redux-ts-starter-kit/slice` leverages immer to update the store, which means reducers are allowed to mutate the state directly.\r\n\r\n## Features\r\n\r\n- typescript support\r\n- Automatically creates actions, reducer, and selector(s) based on `slice`\r\n- Reducers leverage `immer` which makes updating state easy\r\n- When stringifying action creators they return the action type\r\n- Helper functions for manually creating actions and reducers\r\n- Reducers do not receive entire action object, only payload\r\n- Advanced type inferrence, minimizing the need to create one-off interfaces. _Note: supplying interfaces is largely not required but highly recommended_\r\n\r\n## Why not X\r\n\r\nThis library was heavily inspired by [autodux](https://github.com/ericelliott/autodux), [robodux](https://github.com/neurosnap/robodux) and [redux-starter-kit](https://github.com/markerikson/redux-starter-kit).\r\n\r\nNote: This started as fork of robodux that was supposed to merged in a PR, but the number of changes I ended up making were numerous and breaking.\r\n\r\n- creating reducers with `immer`\r\n- no external dependencies besides `immer`\r\n- create action helper\r\n- create reducer helper\r\n\r\n## Example\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { combineReducers, createStore} from 'redux';\r\n\r\n\r\ninterface State { // interface representing the entire state tree\r\n  user: User;\r\n  counter: number;\r\n}\r\n// Actions interface where the keys are the action names and the values represent the payload types\r\ninterface CounterActions {\r\n  increment: never;    // <- never indicates that no payload is expected\r\n  incrementBy: number;\r\n  decrement: never;\r\n  decrementBy: number;\r\n  multiply: number;\r\n}\r\n\r\n// You can destructure, rename and export the reducer, action creators and selectors\r\n\r\n      // number is the state slice/initial state type\r\nconst counter = createSlice<CounterActions, number,  State>({\r\n  slice: 'counter', // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: 0,\r\n  cases: {\r\n    increment: state => state + 1,\r\n    incrementBy: (state,payload) => state + payload, // payload is type number\r\n    decrement: state => state - 1,\r\n    decrementBy: (state,payload) => state - payload,\r\n    multiply: (state, payload) => state * payload,\r\n  },\r\n});\r\n\r\ninterface User {   // state slice/initial state interface\r\n  name: string;\r\n}\r\n\r\ninterface UserActions {  // Actions interface\r\n  setUserName: string;\r\n}\r\n\r\nconst user = createSlice<UserActions, User, State>({\r\n  slice: 'user',    // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: { name: '' },\r\n  cases: {\r\n    setUserName: (state, payload) => {\r\n      state.name = payload; // mutate the state all you want with immer\r\n    },\r\n  }\r\n})\r\n\r\nconst rootReducer = combineReducers<State>({\r\n  counter: counter.reducer,\r\n  user: user.reducer,\r\n})\r\n\r\nconst store = createStore(rootReducer);\r\n\r\nstore.dispatch(counter.actions.increment());\r\n// New State -> { counter: 1, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.incrementBy(10));\r\n// New State -> { counter: 11, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.multiply(3));\r\n// New State -> { counter: 33, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrement());\r\n// New State -> { counter: 32, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrementBy(8));\r\n// New State -> { counter: 26, user: { name: '' } }\r\n\r\nconsole.log(`${counter.actions.decrement}`);\r\n// -> counter/DECREMENT\r\n\r\nstore.dispatch(user.actions.setUserName('eric'));\r\n// New State -> { counter: 6, user: { name: 'eric' } }\r\n\r\nconst state = store.getState();\r\nconsole.log(counter.selectors.getSlice(state));\r\n// -> 6\r\nconsole.log(user.selectors.getSlice(state));\r\n// -> { name: 'eric' }\r\n\r\nconsole.log(user.selectors.name(state));\r\n// -> 'eric'\r\n```\r\n\r\n## createSlice API\r\n\r\nA function that accepts an initial state, an object full of reducer functions, and optionally a \"slice name\", and automatically generates action creators, action types, and selectors that correspond to the reducers and state.\r\n\r\nThe reducers will be wrapped in the `createReducer()` utility, and so they can safely \"mutate\" the state they are given.\r\n\r\n**IMPORTANT: For proper typing support please use `const` if initialising `slice` outside `createSlice`**\r\n\r\n```typescript\r\nfunction createSlice<Actions, SliceState, State>({\r\n    // A object of function that will be used as cases for the returned reducer,\r\n    // is used to generate action creators that trigger the corresponding case\r\n    cases: Object<string, Function>,\r\n    // The initial Slice State, same as normal reducer\r\n    initialState: any,\r\n    // The key indicating this slice in the combined state.\r\n    slice?: string,\r\n})\r\n```\r\n\r\n### General Usage\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  interface FormActions {\r\n    setName: string;\r\n    setSurname: string;\r\n    setMiddlename: string;\r\n    resetForm: never;  // no payload expected\r\n  }\r\n\r\n  const formInitialState: FormState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: state => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\nOR leveraging it's type inferrence if you're feeling lazy. Not recommended.\r\n\r\n```typescript\r\n  import { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  const formInitialState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name: string) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname: string) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename: string) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: (state, _: never) => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\n### Type parameters\r\n\r\n`createSlice` accepts three generics: `Actions`, `SliceState`, `State`. None of which are required and can mostly be inferred from the arguments given.\r\n\r\n`Actions` helps improve autocompelete and typing for the `actions` object returned from `createSlice`.\r\nSupply an interface where the keys are the action names and the values are the payload types, which should be `never` if the action takes no payload.\r\n\r\n`SliceState` is the state shape of the particular slice created with `createSlice`. If there is no\r\nslice passed to the state, then this will assume that this is the entire state shape.\r\n\r\n`State` is the entire state shape for when a slice is used with `createSlice`. This helps type the selectors we return.\r\n\r\n### Arguments\r\n\r\n`createSlice` accepts a single argument object with the following fields:\r\n\r\n#### slice\r\n\r\n*not required*\r\nThe name of the slice of state the reducer is expected to manage, should be left out completely or be '' if the reducer is going to be the root reducer.\r\nShould be a string or number.\r\n\r\nNote: if a combined State interface is provided, the slice is type checked to ensure that it is a key in the State.\r\n\r\n#### initialState\r\n\r\n*required*\r\nThe state that the reducer is initialized with, same usage as standard reducer.\r\n\r\n#### cases\r\n\r\n*required*\r\nAn object containing all the actions the reducer can perform on its state slice. Each function is equivalent to a standard switch case statement in a standard reducer.\r\nEach function can mutate the state directly as it uses `immer` behind the scenes to make it immutable.\r\nEach function is used to make an action creator of the same name.\r\n\r\nIf an Actions interface is not supplied, you can type cast the payload arguments directly and it will infer an Actions interface from it.\r\n\r\nNote:\r\n\r\n* Do not type cast the state argument, its type is automatically inferred from the initialState field if not interface is given\r\n\r\n* The returned action creators accept only a single argument as payload, i.e a case in the form `(state,payload1,payload2)=>{}` is invalid. If you need to pass multple arguments use an object or array to pass them.\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\nconst hiSlice = createSlice({\r\n    slice: 'hi',\r\n    initialState: hiInitialState,\r\n    cases: {\r\n      // state type is automatically inferred as typeof hiInitialState\r\n      setGreeting: (state, payload: string) => {\r\n        state.greeting = payload;\r\n      },\r\n      setWaves: (state, payload: number) => {\r\n        state.waves = payload;\r\n      },\r\n      resetHi: (state, payload: never) => hiInitialState\r\n    },\r\n  });\r\n\r\n  // Gives the following action creators\r\n\r\n  console.log(hiSlice.actions.setGreeting('hello'))\r\n  ->> {type: 'hi/SET_GREETING', payload: 'hello' }\r\n\r\n  console.log(hiSlice.actions.setWaves(5))\r\n  ->> {type: 'hi/SET_WAVES', payload: 5 }\r\n\r\n  console.log(hiSlice.actions.resetHi())\r\n  ->> {type: 'hi/RESET_HI', payload: undefined }\r\n\r\n  // again note that you can destructure the returned actions object\r\n\r\n```\r\n\r\n### Return value\r\n\r\ncreateSlice return an object with the following fields\r\n\r\n#### reducer\r\n\r\nA reducer function, works exactly the same as a standard reducer\r\n\r\n#### actions\r\n\r\nAn object of action creators with the same name as the corresponding case.\r\nYou can see this in action in the hiSlice example above, it's actions object has the following type signature\r\n\r\n```typescript\r\n\r\n  {\r\n    setGreeting: (payload: string) => ({type: 'hi/SET_GREETING', payload: string})\r\n\r\n    setWaves: (payload: number) => ({type: 'hi/SET_GREETING', payload: number})\r\n\r\n    resetHi: ()=> ({type: 'hi/RESET_HI', payload: undefined})\r\n  }\r\n\r\n```\r\n\r\n#### selectors\r\n\r\nAn object containing the generated selector(s), always includes a selector called getSlice that selects it's slice state from the state, if the initial state is an object additional selectors are generated with the same names as the corresponding initial state keys\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { SliceState, Actions, State } from './types';\r\n\r\nconst formSlice = createSlice<SliceState, Actions, State>({\r\n      cases: {\r\n        setName: (state, name) => { state.name = name},\r\n        setSurname: (state, surname) => { state.surName = surname},\r\n        setMiddlename: (state, middlename) => { state.Middlename = middlename}\r\n      },\r\n      slice: 'form',\r\n      initialState: {\r\n        name: '',\r\n        surname: '',\r\n        middlename: '',\r\n      },\r\n    })\r\n\r\n     const state = {\r\n      counter: 5,\r\n      random: 'random',\r\n      auth: {\r\n        idToken: \"a random token\",\r\n        userId: \"a user id\"\r\n      }\r\n      form: {\r\n        name: \"John\",\r\n        surname: \"Doe\",\r\n        middlename: \"Wayne\"\r\n      }\r\n    };\r\n\r\n console.log(formSlice.selectors.getSlice(state))\r\n ->> {\r\n    name: \"John\",\r\n    surname: \"Doe\",\r\n    middlename: \"Wayne\"\r\n  }\r\n\r\n console.log(formSlice.selectors.name(state))\r\n->> 'John'\r\n\r\n console.log(formSlice.selectors.middlename(state))\r\n->> 'Wayne'\r\n\r\n console.log(formSlice.selectors.surname(state))\r\n->> 'Doe'\r\n\r\n```\r\n\r\n## Other Exports\r\n\r\n### createAction\r\n\r\nThis is the helper function that `createSlice` uses to create an action. It is also useful to use\r\nwhen not using createSlice because when stringifying the function it will return the action type.\r\nThis allows developers to not have to worry about passing around action types, instead they simply\r\npass around action creators for reducers, sagas, etc.\r\n\r\n```typescript\r\nimport { createAction } from '@redux-ts-starter-kit/slice';\r\n\r\nconst increment = createAction('INCREMENT');\r\nconsole.log(increment);\r\n ->> 'INCREMENT'\r\nconsole.log(increment(2));\r\n->> { type: 'INCREMENT', payload: 2 };\r\n\r\nconst storeDetails = createAction('STORE_DETAILS');\r\nconsole.log(storeDetails);\r\n->> 'STORE_DETAILS'\r\nconsole.log(storeDetails({ name: 'John', surname: 'Doe' }));\r\n ->> { type: 'INCREMENT', payload: {name: 'John', surname: 'Doe'} };\r\n```\r\n\r\n### createReducer\r\n\r\nThis is the helper function that `createSlice` uses to create a reducer. This function maps action types\r\nto reducer functions. It will return a reducer.\r\n\r\n```typescript\r\nimport { createReducer } from '@redux-ts-starter-kit/slice';\r\n\r\nconst counter = createReducer({\r\n  initialState: 0,\r\n  cases: {\r\n    INCREMENT: (state) => state + 1,\r\n    DECREMENT: (state) => state - 1,\r\n    MULTIPLY: (state, payload) => state * payload,\r\n  }\r\n});\r\n\r\nconsole.log(counter(2, { type: 'MULTIPLY': payload: 5 }));\r\n// -> 10\r\n```","readmeFilename":"README.md","_id":"@redux-ts-starter-kit/slice@2.0.0-alpha.2","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.10.5/node@v10.13.0+x64 (win32)","dist":{"integrity":"sha512-Z9r+76jbEEI5weRlBQhLdNcT483hoj9/tScCYbCcSvwc6plJ93Xb94BDKhCvUtNho3zontiQ/Lqp9WxG3nWLXw==","shasum":"6fcce9d427e716eac8acbde25f161d08e6ef4d52","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-2.0.0-alpha.2.tgz","fileCount":15,"unpackedSize":90808,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXxmWCRA9TVsSAnZWagAArt0P/iHl8VNLTU+GTNVTCOPR\nO4/h2qcH1g2CUK91IkHbwqfjOFpPqBvFechlsPkznLAvBhScfrCThiM4BOQr\nIWP3fB2GFQqEbVDtl0mqJF3UfnVARzaiO3nEenUobnxRUT441yE3jxOybiTd\nBlmyhMlsASYN88+vsm3zuMg8hzwyBxib5uKykkGoT7NSf9hgSekxOOckbbmx\nOr3V8SdTjANj9U/tlos8FXyGpwXEMcDtew7oq2FnQ0xt14++GqN6gd+bi4jj\n6VrIwAOaxca2CT5fHsRFuN1IiB4lwraHT3hwi+wEAjAfrcbwDTQWHeUXaEhp\nqEDuAj9I+ZQErrrLui0h/bvNACdFaDfvD8VNr/G1zphtJoGJf4Ea99OuHN0d\nx9b5ojKXEdEXjOcTFJqRcCREpqtRQ5nV+0zlg2X0qf+HxnVr4n7m9/8ubKGR\n/NLWsyebvnpNWqXjTtAjpkNGjHDptSivxHGEe1C1UO968bI6c1iLZmi1W6NO\nYrTBHqdeR2JpykMjZemzKG0PBndccfXYWSFJiWZC61XzZGGQ6gKdHZJuqWt8\nOizhgZyo70yzyai16CQ03M6hQKpgaDhuz1a6KfGWV/aBXWbaid74sYA1V82o\nHCcM+HzOUH0jXRafELVYCHnwsLxtxWUwobn290blDW3fQZNM1G3QTw9WFyFP\nj35D\r\n=9eVS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDg/jsUiQVvSSSOu+VzaSQGycTJGaaa/K5xVIacahKifAiEA5vZsukzcPZJE/sWmn5Lm/+rCyhtR4yToprdT2o9Tnqc="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_2.0.0-alpha.2_1549736341590_0.055574664686395714"},"_hasShrinkwrap":false},"2.0.0-alpha.3":{"name":"@redux-ts-starter-kit/slice","version":"2.0.0-alpha.3","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"rollup -c","build:declaration":"tsc -p tsconfig.build.json","clean":"rimraf lib .rpt2_cache","test:types":"typings-checker -p ./src/examples/tsconfig.json ./src/examples/types.ts","lint":"prettier-tslint fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","cpx":"^1.5.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","prettier-tslint":"^0.4.2","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2","typings-checker":"^2.0.0"},"dependencies":{"immer":"2.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"prettier":{"arrowParens":"always","singleQuote":true,"printWidth":80,"trailingComma":"all"},"lint-staged":{"*.{ts}":["prettier-tslint fix","git add"]},"gitHead":"8e1a129ac7b7afbe45b2c60a19be3a9220bbb22b","readme":"# @redux-ts-starter-kit/slice [![Build Status](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit.svg?branch=master)](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit)\r\n\r\n## A simple set of tools to make using Redux easier\r\n\r\n_A typescript friendlier fork of [robodux](https://github.com/neurosnap/robodux)_\r\n\r\n`npm install @redux-ts-starter-kit/slice`\r\n\r\n_This command installs `@redux-ts-starter-kit/slice` alongside `immer` as a direct dependency_\r\n\r\n### Note\r\n\r\nThis package only includes tools for simplifying the creation of slice reducers, it does not ship with `redux` or any of the tools to automate the generation of a redux store with enhancers and middleware.\r\n\r\nIf you require such tools see [@redux-ts-starter-kit/core](https://github.com/Dudeonyx/redux-ts-starter-kit/tree/master/packages/core) which includes this package under the hood.\r\n\r\n### Purpose\r\n\r\nOne of the biggest complaints developers have with redux is the amount of boilerplate and new concepts they have to learn to use it. `@redux-ts-starter-kit/slice` attempts to simplify the boilerplate by automatically configuring actions, reducers, and selectors. The way it works is `@redux-ts-starter-kit/slice` will take a list of functions that correspond to how state should be updated and then create action types, action creators, and basic selectors for the developer to use. This library tries to not make too many assumptions about how developers use redux. It does not do anything magical, simply automates the repetitive tasks with redux.\r\n\r\nUnder the hood every reducer created by `@redux-ts-starter-kit/slice` leverages immer to update the store, which means reducers are allowed to mutate the state directly.\r\n\r\n## Features\r\n\r\n- typescript support\r\n- Automatically creates actions, reducer, and selector(s) based on `slice`\r\n- Reducers leverage `immer` which makes updating state easy\r\n- When stringifying action creators they return the action type\r\n- Helper functions for manually creating actions and reducers\r\n- Reducers do not receive entire action object, only payload\r\n- Advanced type inferrence, minimizing the need to create one-off interfaces. _Note: supplying interfaces is largely not required but highly recommended_\r\n\r\n## Why not X\r\n\r\nThis library was heavily inspired by [autodux](https://github.com/ericelliott/autodux), [robodux](https://github.com/neurosnap/robodux) and [redux-starter-kit](https://github.com/markerikson/redux-starter-kit).\r\n\r\nNote: This started as fork of robodux that was supposed to merged in a PR, but the number of changes I ended up making were numerous and breaking.\r\n\r\n- creating reducers with `immer`\r\n- no external dependencies besides `immer`\r\n- create action helper\r\n- create reducer helper\r\n\r\n## Example\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { combineReducers, createStore} from 'redux';\r\n\r\n\r\ninterface State { // interface representing the entire state tree\r\n  user: User;\r\n  counter: number;\r\n}\r\n// Actions interface where the keys are the action names and the values represent the payload types\r\ninterface CounterActions {\r\n  increment: never;    // <- never indicates that no payload is expected\r\n  incrementBy: number;\r\n  decrement: never;\r\n  decrementBy: number;\r\n  multiply: number;\r\n}\r\n\r\n// You can destructure, rename and export the reducer, action creators and selectors\r\n\r\n      // number is the state slice/initial state type\r\nconst counter = createSlice<CounterActions, number,  State>({\r\n  slice: 'counter', // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: 0,\r\n  cases: {\r\n    increment: state => state + 1,\r\n    incrementBy: (state,payload) => state + payload, // payload is type number\r\n    decrement: state => state - 1,\r\n    decrementBy: (state,payload) => state - payload,\r\n    multiply: (state, payload) => state * payload,\r\n  },\r\n});\r\n\r\ninterface User {   // state slice/initial state interface\r\n  name: string;\r\n}\r\n\r\ninterface UserActions {  // Actions interface\r\n  setUserName: string;\r\n}\r\n\r\nconst user = createSlice<UserActions, User, State>({\r\n  slice: 'user',    // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: { name: '' },\r\n  cases: {\r\n    setUserName: (state, payload) => {\r\n      state.name = payload; // mutate the state all you want with immer\r\n    },\r\n  }\r\n})\r\n\r\nconst rootReducer = combineReducers<State>({\r\n  counter: counter.reducer,\r\n  user: user.reducer,\r\n})\r\n\r\nconst store = createStore(rootReducer);\r\n\r\nstore.dispatch(counter.actions.increment());\r\n// New State -> { counter: 1, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.incrementBy(10));\r\n// New State -> { counter: 11, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.multiply(3));\r\n// New State -> { counter: 33, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrement());\r\n// New State -> { counter: 32, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrementBy(8));\r\n// New State -> { counter: 26, user: { name: '' } }\r\n\r\nconsole.log(`${counter.actions.decrement}`);\r\n// -> counter/DECREMENT\r\n\r\nstore.dispatch(user.actions.setUserName('eric'));\r\n// New State -> { counter: 6, user: { name: 'eric' } }\r\n\r\nconst state = store.getState();\r\nconsole.log(counter.selectors.getSlice(state));\r\n// -> 6\r\nconsole.log(user.selectors.getSlice(state));\r\n// -> { name: 'eric' }\r\n\r\nconsole.log(user.selectors.name(state));\r\n// -> 'eric'\r\n```\r\n\r\n## createSlice API\r\n\r\nA function that accepts an initial state, an object full of reducer functions, and optionally a \"slice name\", and automatically generates action creators, action types, and selectors that correspond to the reducers and state.\r\n\r\nThe reducers will be wrapped in the `createReducer()` utility, and so they can safely \"mutate\" the state they are given.\r\n\r\n**IMPORTANT: For proper typing support please use `const` if initialising `slice` outside `createSlice`**\r\n\r\n```typescript\r\nfunction createSlice<Actions, SliceState, State>({\r\n    // A object of function that will be used as cases for the returned reducer,\r\n    // is used to generate action creators that trigger the corresponding case\r\n    cases: Object<string, Function>,\r\n    // The initial Slice State, same as normal reducer\r\n    initialState: any,\r\n    // The key indicating this slice in the combined state.\r\n    slice?: string,\r\n})\r\n```\r\n\r\n### General Usage\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  interface FormActions {\r\n    setName: string;\r\n    setSurname: string;\r\n    setMiddlename: string;\r\n    resetForm: never;  // no payload expected\r\n  }\r\n\r\n  const formInitialState: FormState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: state => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\nOR leveraging it's type inferrence if you're feeling lazy. Not recommended.\r\n\r\n```typescript\r\n  import { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  const formInitialState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name: string) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname: string) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename: string) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: (state, _: never) => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\n### Type parameters\r\n\r\n`createSlice` accepts three generics: `Actions`, `SliceState`, `State`. None of which are required and can mostly be inferred from the arguments given.\r\n\r\n`Actions` helps improve autocompelete and typing for the `actions` object returned from `createSlice`.\r\nSupply an interface where the keys are the action names and the values are the payload types, which should be `never` if the action takes no payload.\r\n\r\n`SliceState` is the state shape of the particular slice created with `createSlice`. If there is no\r\nslice passed to the state, then this will assume that this is the entire state shape.\r\n\r\n`State` is the entire state shape for when a slice is used with `createSlice`. This helps type the selectors we return.\r\n\r\n### Arguments\r\n\r\n`createSlice` accepts a single argument object with the following fields:\r\n\r\n#### slice\r\n\r\n*not required*\r\nThe name of the slice of state the reducer is expected to manage, should be left out completely or be '' if the reducer is going to be the root reducer.\r\nShould be a string or number.\r\n\r\nNote: if a combined State interface is provided, the slice is type checked to ensure that it is a key in the State.\r\n\r\n#### initialState\r\n\r\n*required*\r\nThe state that the reducer is initialized with, same usage as standard reducer.\r\n\r\n#### cases\r\n\r\n*required*\r\nAn object containing all the actions the reducer can perform on its state slice. Each function is equivalent to a standard switch case statement in a standard reducer.\r\nEach function can mutate the state directly as it uses `immer` behind the scenes to make it immutable.\r\nEach function is used to make an action creator of the same name.\r\n\r\nIf an Actions interface is not supplied, you can type cast the payload arguments directly and it will infer an Actions interface from it.\r\n\r\nNote:\r\n\r\n* Do not type cast the state argument, its type is automatically inferred from the initialState field if not interface is given\r\n\r\n* The returned action creators accept only a single argument as payload, i.e a case in the form `(state,payload1,payload2)=>{}` is invalid. If you need to pass multple arguments use an object or array to pass them.\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\nconst hiSlice = createSlice({\r\n    slice: 'hi',\r\n    initialState: hiInitialState,\r\n    cases: {\r\n      // state type is automatically inferred as typeof hiInitialState\r\n      setGreeting: (state, payload: string) => {\r\n        state.greeting = payload;\r\n      },\r\n      setWaves: (state, payload: number) => {\r\n        state.waves = payload;\r\n      },\r\n      resetHi: (state, payload: never) => hiInitialState\r\n    },\r\n  });\r\n\r\n  // Gives the following action creators\r\n\r\n  console.log(hiSlice.actions.setGreeting('hello'))\r\n  ->> {type: 'hi/SET_GREETING', payload: 'hello' }\r\n\r\n  console.log(hiSlice.actions.setWaves(5))\r\n  ->> {type: 'hi/SET_WAVES', payload: 5 }\r\n\r\n  console.log(hiSlice.actions.resetHi())\r\n  ->> {type: 'hi/RESET_HI', payload: undefined }\r\n\r\n  // again note that you can destructure the returned actions object\r\n\r\n```\r\n\r\n### Return value\r\n\r\ncreateSlice return an object with the following fields\r\n\r\n#### reducer\r\n\r\nA reducer function, works exactly the same as a standard reducer\r\n\r\n#### actions\r\n\r\nAn object of action creators with the same name as the corresponding case.\r\nYou can see this in action in the hiSlice example above, it's actions object has the following type signature\r\n\r\n```typescript\r\n\r\n  {\r\n    setGreeting: (payload: string) => ({type: 'hi/SET_GREETING', payload: string})\r\n\r\n    setWaves: (payload: number) => ({type: 'hi/SET_GREETING', payload: number})\r\n\r\n    resetHi: ()=> ({type: 'hi/RESET_HI', payload: undefined})\r\n  }\r\n\r\n```\r\n\r\n#### selectors\r\n\r\nAn object containing the generated selector(s), always includes a selector called getSlice that selects it's slice state from the state, if the initial state is an object additional selectors are generated with the same names as the corresponding initial state keys\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { SliceState, Actions, State } from './types';\r\n\r\nconst formSlice = createSlice<SliceState, Actions, State>({\r\n      cases: {\r\n        setName: (state, name) => { state.name = name},\r\n        setSurname: (state, surname) => { state.surName = surname},\r\n        setMiddlename: (state, middlename) => { state.Middlename = middlename}\r\n      },\r\n      slice: 'form',\r\n      initialState: {\r\n        name: '',\r\n        surname: '',\r\n        middlename: '',\r\n      },\r\n    })\r\n\r\n     const state = {\r\n      counter: 5,\r\n      random: 'random',\r\n      auth: {\r\n        idToken: \"a random token\",\r\n        userId: \"a user id\"\r\n      }\r\n      form: {\r\n        name: \"John\",\r\n        surname: \"Doe\",\r\n        middlename: \"Wayne\"\r\n      }\r\n    };\r\n\r\n console.log(formSlice.selectors.getSlice(state))\r\n ->> {\r\n    name: \"John\",\r\n    surname: \"Doe\",\r\n    middlename: \"Wayne\"\r\n  }\r\n\r\n console.log(formSlice.selectors.name(state))\r\n->> 'John'\r\n\r\n console.log(formSlice.selectors.middlename(state))\r\n->> 'Wayne'\r\n\r\n console.log(formSlice.selectors.surname(state))\r\n->> 'Doe'\r\n\r\n```\r\n\r\n## Other Exports\r\n\r\n### createAction\r\n\r\nThis is the helper function that `createSlice` uses to create an action. It is also useful to use\r\nwhen not using createSlice because when stringifying the function it will return the action type.\r\nThis allows developers to not have to worry about passing around action types, instead they simply\r\npass around action creators for reducers, sagas, etc.\r\n\r\n```typescript\r\nimport { createAction } from '@redux-ts-starter-kit/slice';\r\n\r\nconst increment = createAction('INCREMENT');\r\nconsole.log(increment);\r\n ->> 'INCREMENT'\r\nconsole.log(increment(2));\r\n->> { type: 'INCREMENT', payload: 2 };\r\n\r\nconst storeDetails = createAction('STORE_DETAILS');\r\nconsole.log(storeDetails);\r\n->> 'STORE_DETAILS'\r\nconsole.log(storeDetails({ name: 'John', surname: 'Doe' }));\r\n ->> { type: 'INCREMENT', payload: {name: 'John', surname: 'Doe'} };\r\n```\r\n\r\n### createReducer\r\n\r\nThis is the helper function that `createSlice` uses to create a reducer. This function maps action types\r\nto reducer functions. It will return a reducer.\r\n\r\n```typescript\r\nimport { createReducer } from '@redux-ts-starter-kit/slice';\r\n\r\nconst counter = createReducer({\r\n  initialState: 0,\r\n  cases: {\r\n    INCREMENT: (state) => state + 1,\r\n    DECREMENT: (state) => state - 1,\r\n    MULTIPLY: (state, payload) => state * payload,\r\n  }\r\n});\r\n\r\nconsole.log(counter(2, { type: 'MULTIPLY': payload: 5 }));\r\n// -> 10\r\n```","readmeFilename":"README.md","_id":"@redux-ts-starter-kit/slice@2.0.0-alpha.3","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.10.5/node@v10.13.0+x64 (win32)","dist":{"integrity":"sha512-skbg4h8eqjsF/g2VJdKvRil/Pk9jNE1q1rynjPt/rMYGoWNZf6XW5eKjFg07aXpDobkai6zI7CKDF/+ofoX2Kg==","shasum":"4d3dbae7b4582e68a0ff3d048c67940be2da218d","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-2.0.0-alpha.3.tgz","fileCount":15,"unpackedSize":90807,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYbHTCRA9TVsSAnZWagAA8LcP/3qXsbeI1pN0ZwiK7d9n\nV4jnYm4KIwXXe7B0s0kY4QmZ1Fe1ZrMl2/6ciIgUYjh8UJVC6kwb5JknEjLk\nrvx+TAI7bLHWg+7xFfUyLPDM2KTvofSih7l0ULmDTP7s4e0NEIn6gUmQ2M9o\nRT2EBjH6e2hdw+bTbbLKKhP4Lm8/z7Wwqf5bXgR1SrP3a+FjY0Xn6id2lIW4\nGS3920irOk1xonT18dqhpUmIk2mary1PRnjKHVbEL8u3anSgLpHVDfkkWd1E\ng75Jh/lfj3Am1lbM4miFD7d6D3g/z5ky/T9K3i/2wFPSaQIDCLi+vkcy0/gF\nj6WKJAzk/EgJwpQIVeCrx7XFX5zG/mtmiiGoSTVVuRuKXkdBVaI9ekh+4EBM\nDR2B2YkQ7pdErimh9T2GmhwkWEg37pmz1mZGtYYXu4JfD09kijdCwjaNdkDy\nsK/q+jR1alUXQDcVkwOeCAsX2pmLYoNvrsKOb2o+yC4d8MjL1a471byj9O0u\nx/wLXdbPmYlmW4EY3nvt8I7wIzbhmmbglonznWyMcci3+eNHJBYdwMaAvfQb\nBcxwrKuBdH7pcQiQRKm9vYkSCNdH4VVDBFj07pwLlZZr5SxPtRFfzrgq4H03\na3f63Zc33aMcx17rlCGaC76f6BvygN02u6pw6R0sMxxQD+PaVPuhESQOGlta\netDn\r\n=DvT1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3tXM/hQr1bhgP5LPDFlwfwHnTaxSqLWObqjlaaRfh0AIgTUG7bbWUFD90rvzVMXsNLHKlzJ2lb0m2u00O/ZXG020="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_2.0.0-alpha.3_1549906386852_0.44162852260455066"},"_hasShrinkwrap":false},"2.0.0-alpha.4":{"name":"@redux-ts-starter-kit/slice","version":"2.0.0-alpha.4","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"rollup -c","build:declaration":"tsc -p tsconfig.build.json","clean":"rimraf lib .rpt2_cache","test:types":"typings-checker -p ./src/examples/tsconfig.json ./src/examples/types.ts","lint":"prettier-tslint fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","cpx":"^1.5.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","prettier-tslint":"^0.4.2","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.2.2","typings-checker":"^2.0.0"},"dependencies":{"immer":"2.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"prettier":{"arrowParens":"always","singleQuote":true,"printWidth":80,"trailingComma":"all"},"lint-staged":{"*.{ts}":["prettier-tslint fix","git add"]},"gitHead":"efec371705d08068056832fd383fda88439b334e","readme":"# @redux-ts-starter-kit/slice [![Build Status](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit.svg?branch=master)](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit)\r\n\r\n## A simple set of tools to make using Redux easier\r\n\r\n_A typescript friendlier fork of [robodux](https://github.com/neurosnap/robodux)_\r\n\r\n`npm install @redux-ts-starter-kit/slice`\r\n\r\n_This command installs `@redux-ts-starter-kit/slice` alongside `immer` as a direct dependency_\r\n\r\n### Note\r\n\r\nThis package only includes tools for simplifying the creation of slice reducers, it does not ship with `redux` or any of the tools to automate the generation of a redux store with enhancers and middleware.\r\n\r\nIf you require such tools see [@redux-ts-starter-kit/core](https://github.com/Dudeonyx/redux-ts-starter-kit/tree/master/packages/core) which includes this package under the hood.\r\n\r\n### Purpose\r\n\r\nOne of the biggest complaints developers have with redux is the amount of boilerplate and new concepts they have to learn to use it. `@redux-ts-starter-kit/slice` attempts to simplify the boilerplate by automatically configuring actions, reducers, and selectors. The way it works is `@redux-ts-starter-kit/slice` will take a list of functions that correspond to how state should be updated and then create action types, action creators, and basic selectors for the developer to use. This library tries to not make too many assumptions about how developers use redux. It does not do anything magical, simply automates the repetitive tasks with redux.\r\n\r\nUnder the hood every reducer created by `@redux-ts-starter-kit/slice` leverages immer to update the store, which means reducers are allowed to mutate the state directly.\r\n\r\n## Features\r\n\r\n- typescript support\r\n- Automatically creates actions, reducer, and selector(s) based on `slice`\r\n- Reducers leverage `immer` which makes updating state easy\r\n- When stringifying action creators they return the action type\r\n- Helper functions for manually creating actions and reducers\r\n- Reducers do not receive entire action object, only payload\r\n- Advanced type inferrence, minimizing the need to create one-off interfaces. _Note: supplying interfaces is largely not required but highly recommended_\r\n\r\n## Why not X\r\n\r\nThis library was heavily inspired by [autodux](https://github.com/ericelliott/autodux), [robodux](https://github.com/neurosnap/robodux) and [redux-starter-kit](https://github.com/markerikson/redux-starter-kit).\r\n\r\nNote: This started as fork of robodux that was supposed to merged in a PR, but the number of changes I ended up making were numerous and breaking.\r\n\r\n- creating reducers with `immer`\r\n- no external dependencies besides `immer`\r\n- create action helper\r\n- create reducer helper\r\n\r\n## Example\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { combineReducers, createStore} from 'redux';\r\n\r\n\r\ninterface State { // interface representing the entire state tree\r\n  user: User;\r\n  counter: number;\r\n}\r\n// Actions interface where the keys are the action names and the values represent the payload types\r\ninterface CounterActions {\r\n  increment: never;    // <- never indicates that no payload is expected\r\n  incrementBy: number;\r\n  decrement: never;\r\n  decrementBy: number;\r\n  multiply: number;\r\n}\r\n\r\n// You can destructure, rename and export the reducer, action creators and selectors\r\n\r\n      // number is the state slice/initial state type\r\nconst counter = createSlice<CounterActions, number,  State>({\r\n  slice: 'counter', // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: 0,\r\n  cases: {\r\n    increment: state => state + 1,\r\n    incrementBy: (state,payload) => state + payload, // payload is type number\r\n    decrement: state => state - 1,\r\n    decrementBy: (state,payload) => state - payload,\r\n    multiply: (state, payload) => state * payload,\r\n  },\r\n});\r\n\r\ninterface User {   // state slice/initial state interface\r\n  name: string;\r\n}\r\n\r\ninterface UserActions {  // Actions interface\r\n  setUserName: string;\r\n}\r\n\r\nconst user = createSlice<UserActions, User, State>({\r\n  slice: 'user',    // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: { name: '' },\r\n  cases: {\r\n    setUserName: (state, payload) => {\r\n      state.name = payload; // mutate the state all you want with immer\r\n    },\r\n  }\r\n})\r\n\r\nconst rootReducer = combineReducers<State>({\r\n  counter: counter.reducer,\r\n  user: user.reducer,\r\n})\r\n\r\nconst store = createStore(rootReducer);\r\n\r\nstore.dispatch(counter.actions.increment());\r\n// New State -> { counter: 1, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.incrementBy(10));\r\n// New State -> { counter: 11, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.multiply(3));\r\n// New State -> { counter: 33, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrement());\r\n// New State -> { counter: 32, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrementBy(8));\r\n// New State -> { counter: 26, user: { name: '' } }\r\n\r\nconsole.log(`${counter.actions.decrement}`);\r\n// -> counter/DECREMENT\r\n\r\nstore.dispatch(user.actions.setUserName('eric'));\r\n// New State -> { counter: 6, user: { name: 'eric' } }\r\n\r\nconst state = store.getState();\r\nconsole.log(counter.selectors.getSlice(state));\r\n// -> 6\r\nconsole.log(user.selectors.getSlice(state));\r\n// -> { name: 'eric' }\r\n\r\nconsole.log(user.selectors.name(state));\r\n// -> 'eric'\r\n```\r\n\r\n## createSlice API\r\n\r\nA function that accepts an initial state, an object full of reducer functions, and optionally a \"slice name\", and automatically generates action creators, action types, and selectors that correspond to the reducers and state.\r\n\r\nThe reducers will be wrapped in the `createReducer()` utility, and so they can safely \"mutate\" the state they are given.\r\n\r\n**IMPORTANT: For proper typing support please use `const` if initialising `slice` outside `createSlice`**\r\n\r\n```typescript\r\nfunction createSlice<Actions, SliceState, State>({\r\n    // A object of function that will be used as cases for the returned reducer,\r\n    // is used to generate action creators that trigger the corresponding case\r\n    cases: Object<string, Function>,\r\n    // The initial Slice State, same as normal reducer\r\n    initialState: any,\r\n    // The key indicating this slice in the combined state.\r\n    slice?: string,\r\n})\r\n```\r\n\r\n### General Usage\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  interface FormActions {\r\n    setName: string;\r\n    setSurname: string;\r\n    setMiddlename: string;\r\n    resetForm: never;  // no payload expected\r\n  }\r\n\r\n  const formInitialState: FormState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: state => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\nOR leveraging it's type inferrence if you're feeling lazy. Not recommended.\r\n\r\n```typescript\r\n  import { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  const formInitialState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name: string) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname: string) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename: string) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: (state, _: never) => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\n### Type parameters\r\n\r\n`createSlice` accepts three generics: `Actions`, `SliceState`, `State`. None of which are required and can mostly be inferred from the arguments given.\r\n\r\n`Actions` helps improve autocompelete and typing for the `actions` object returned from `createSlice`.\r\nSupply an interface where the keys are the action names and the values are the payload types, which should be `never` if the action takes no payload.\r\n\r\n`SliceState` is the state shape of the particular slice created with `createSlice`. If there is no\r\nslice passed to the state, then this will assume that this is the entire state shape.\r\n\r\n`State` is the entire state shape for when a slice is used with `createSlice`. This helps type the selectors we return.\r\n\r\n### Arguments\r\n\r\n`createSlice` accepts a single argument object with the following fields:\r\n\r\n#### slice\r\n\r\n*not required*\r\nThe name of the slice of state the reducer is expected to manage, should be left out completely or be '' if the reducer is going to be the root reducer.\r\nShould be a string or number.\r\n\r\nNote: if a combined State interface is provided, the slice is type checked to ensure that it is a key in the State.\r\n\r\n#### initialState\r\n\r\n*required*\r\nThe state that the reducer is initialized with, same usage as standard reducer.\r\n\r\n#### cases\r\n\r\n*required*\r\nAn object containing all the actions the reducer can perform on its state slice. Each function is equivalent to a standard switch case statement in a standard reducer.\r\nEach function can mutate the state directly as it uses `immer` behind the scenes to make it immutable.\r\nEach function is used to make an action creator of the same name.\r\n\r\nIf an Actions interface is not supplied, you can type cast the payload arguments directly and it will infer an Actions interface from it.\r\n\r\nNote:\r\n\r\n* Do not type cast the state argument, its type is automatically inferred from the initialState field if not interface is given\r\n\r\n* The returned action creators accept only a single argument as payload, i.e a case in the form `(state,payload1,payload2)=>{}` is invalid. If you need to pass multple arguments use an object or array to pass them.\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\nconst hiSlice = createSlice({\r\n    slice: 'hi',\r\n    initialState: hiInitialState,\r\n    cases: {\r\n      // state type is automatically inferred as typeof hiInitialState\r\n      setGreeting: (state, payload: string) => {\r\n        state.greeting = payload;\r\n      },\r\n      setWaves: (state, payload: number) => {\r\n        state.waves = payload;\r\n      },\r\n      resetHi: (state, payload: never) => hiInitialState\r\n    },\r\n  });\r\n\r\n  // Gives the following action creators\r\n\r\n  console.log(hiSlice.actions.setGreeting('hello'))\r\n  ->> {type: 'hi/SET_GREETING', payload: 'hello' }\r\n\r\n  console.log(hiSlice.actions.setWaves(5))\r\n  ->> {type: 'hi/SET_WAVES', payload: 5 }\r\n\r\n  console.log(hiSlice.actions.resetHi())\r\n  ->> {type: 'hi/RESET_HI', payload: undefined }\r\n\r\n  // again note that you can destructure the returned actions object\r\n\r\n```\r\n\r\n### Return value\r\n\r\ncreateSlice return an object with the following fields\r\n\r\n#### reducer\r\n\r\nA reducer function, works exactly the same as a standard reducer\r\n\r\n#### actions\r\n\r\nAn object of action creators with the same name as the corresponding case.\r\nYou can see this in action in the hiSlice example above, it's actions object has the following type signature\r\n\r\n```typescript\r\n\r\n  {\r\n    setGreeting: (payload: string) => ({type: 'hi/SET_GREETING', payload: string})\r\n\r\n    setWaves: (payload: number) => ({type: 'hi/SET_GREETING', payload: number})\r\n\r\n    resetHi: ()=> ({type: 'hi/RESET_HI', payload: undefined})\r\n  }\r\n\r\n```\r\n\r\n#### selectors\r\n\r\nAn object containing the generated selector(s), always includes a selector called getSlice that selects it's slice state from the state, if the initial state is an object additional selectors are generated with the same names as the corresponding initial state keys\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { SliceState, Actions, State } from './types';\r\n\r\nconst formSlice = createSlice<SliceState, Actions, State>({\r\n      cases: {\r\n        setName: (state, name) => { state.name = name},\r\n        setSurname: (state, surname) => { state.surName = surname},\r\n        setMiddlename: (state, middlename) => { state.Middlename = middlename}\r\n      },\r\n      slice: 'form',\r\n      initialState: {\r\n        name: '',\r\n        surname: '',\r\n        middlename: '',\r\n      },\r\n    })\r\n\r\n     const state = {\r\n      counter: 5,\r\n      random: 'random',\r\n      auth: {\r\n        idToken: \"a random token\",\r\n        userId: \"a user id\"\r\n      }\r\n      form: {\r\n        name: \"John\",\r\n        surname: \"Doe\",\r\n        middlename: \"Wayne\"\r\n      }\r\n    };\r\n\r\n console.log(formSlice.selectors.getSlice(state))\r\n ->> {\r\n    name: \"John\",\r\n    surname: \"Doe\",\r\n    middlename: \"Wayne\"\r\n  }\r\n\r\n console.log(formSlice.selectors.name(state))\r\n->> 'John'\r\n\r\n console.log(formSlice.selectors.middlename(state))\r\n->> 'Wayne'\r\n\r\n console.log(formSlice.selectors.surname(state))\r\n->> 'Doe'\r\n\r\n```\r\n\r\n## Other Exports\r\n\r\n### createAction\r\n\r\nThis is the helper function that `createSlice` uses to create an action. It is also useful to use\r\nwhen not using createSlice because when stringifying the function it will return the action type.\r\nThis allows developers to not have to worry about passing around action types, instead they simply\r\npass around action creators for reducers, sagas, etc.\r\n\r\n```typescript\r\nimport { createAction } from '@redux-ts-starter-kit/slice';\r\n\r\nconst increment = createAction('INCREMENT');\r\nconsole.log(increment);\r\n ->> 'INCREMENT'\r\nconsole.log(increment(2));\r\n->> { type: 'INCREMENT', payload: 2 };\r\n\r\nconst storeDetails = createAction('STORE_DETAILS');\r\nconsole.log(storeDetails);\r\n->> 'STORE_DETAILS'\r\nconsole.log(storeDetails({ name: 'John', surname: 'Doe' }));\r\n ->> { type: 'INCREMENT', payload: {name: 'John', surname: 'Doe'} };\r\n```\r\n\r\n### createReducer\r\n\r\nThis is the helper function that `createSlice` uses to create a reducer. This function maps action types\r\nto reducer functions. It will return a reducer.\r\n\r\n```typescript\r\nimport { createReducer } from '@redux-ts-starter-kit/slice';\r\n\r\nconst counter = createReducer({\r\n  initialState: 0,\r\n  cases: {\r\n    INCREMENT: (state) => state + 1,\r\n    DECREMENT: (state) => state - 1,\r\n    MULTIPLY: (state, payload) => state * payload,\r\n  }\r\n});\r\n\r\nconsole.log(counter(2, { type: 'MULTIPLY': payload: 5 }));\r\n// -> 10\r\n```","readmeFilename":"README.md","_id":"@redux-ts-starter-kit/slice@2.0.0-alpha.4","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.10.5/node@v10.13.0+x64 (win32)","dist":{"integrity":"sha512-7qTZIVOIqHOEUEEXCr7hlaVX/FCeliYLhb7tEp+6cwBYQwyySS1KfGzL8W4FNzVF7AAiH1r9vdJE36N0UgvfiA==","shasum":"10c040cbe700165d7e5d3147446fc32e6641ef8c","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-2.0.0-alpha.4.tgz","fileCount":15,"unpackedSize":90331,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYbZ0CRA9TVsSAnZWagAAzPkQAJ8QQ+VgJm4nFUWEwWtG\nVbWeXVXd4is3gw2mPazoOmvCD7JvvrLOeCWNzLEQJPMhjxfUujiyzS8IoJB7\niRx604xXJEY6V1qeMS27M4M21evwT53XJrYsJLeWaTla+Ol06VU8te2jxmUo\nfyV8t7QAr1r7I8U+X0YlXtURoJn+NYELekQti5pyAAMr9+HAsGQzqV/60uEU\nxAwSyra0QUob3e52Iu/ZhT3P5bvyXvj8XJZfrE2+MqkP52+8FA2YiOfH8FQy\nixHySgTJ0vrE/Q6mjwcl6D918Uc/DWALXWwnoBPdT/e0aAQ+zp788vgbj7RZ\nrVoLDnKKhcsFK1WHRBKdJkik4Hetg+VZNk4z2IQNAT2jJEmPySnFIKlZJMfY\no5tZNJN4pQnkbJa24zfgarli8RKfPlTWY30/3yktet2mkplS6rutXM4R9tAt\njTftQT6E8xv3ep90ys4Cz9r+DPPvefXN6IxKcqndOS3K7A+/dxSuFSnvdKT8\n3Jeb3DcaIuRIQx64s5EJ47tbolOsi+5DU8sVpBy2+MLMvCL/K/JAsbyXxx6B\nQXqoJkhRyI0E4V3XuifET3M/KahdaI61jG9akJZh/ZQsMHsut7RKjmM0bKNI\nuqYEuY5J+J1jLIkCWIchvjo2T6X724h39fSJ/zLycrC1H1bfVUViK/dB6x7c\nWvWo\r\n=oZE+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxmWAf5i4jk9Z6hESKv4T8EwKJA8eR8fCGy2WohzBKLAIgX3tPYtwY9O7HeS5VnN0EeZ3zmjNmX+SHmVZYp9HEuMc="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_2.0.0-alpha.4_1549907571807_0.12986574903464176"},"_hasShrinkwrap":false},"2.0.0-alpha.6":{"name":"@redux-ts-starter-kit/slice","version":"2.0.0-alpha.6","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"rollup -c","build:declaration":"tsc -p tsconfig.build.json","clean":"rimraf lib .rpt2_cache","test:types":"typings-checker -p ./src/examples/tsconfig.json ./src/examples/types.ts","lint":"prettier-tslint fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","cpx":"^1.5.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","prettier-tslint":"^0.4.2","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"3.3.4000","typings-checker":"^2.0.0"},"dependencies":{"immer":"2.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"prettier":{"arrowParens":"always","singleQuote":true,"printWidth":80,"trailingComma":"all"},"lint-staged":{"*.{ts}":["prettier-tslint fix","git add"]},"gitHead":"eca6d00386d0ef8eff070503441b78e320646c5f","readme":"# @redux-ts-starter-kit/slice [![Build Status](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit.svg?branch=master)](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit)\r\n\r\n## A simple set of tools to make using Redux easier\r\n\r\n_A typescript friendlier fork of [robodux](https://github.com/neurosnap/robodux)_\r\n\r\n`npm install @redux-ts-starter-kit/slice`\r\n\r\n_This command installs `@redux-ts-starter-kit/slice` alongside `immer` as a direct dependency_\r\n\r\n### Note\r\n\r\nThis package only includes tools for simplifying the creation of slice reducers, it does not ship with `redux` or any of the tools to automate the generation of a redux store with enhancers and middleware.\r\n\r\nIf you require such tools see [@redux-ts-starter-kit/core](https://github.com/Dudeonyx/redux-ts-starter-kit/tree/master/packages/core) which includes this package under the hood.\r\n\r\n### Purpose\r\n\r\nOne of the biggest complaints developers have with redux is the amount of boilerplate and new concepts they have to learn to use it. `@redux-ts-starter-kit/slice` attempts to simplify the boilerplate by automatically configuring actions, reducers, and selectors. The way it works is `@redux-ts-starter-kit/slice` will take a list of functions that correspond to how state should be updated and then create action types, action creators, and basic selectors for the developer to use. This library tries to not make too many assumptions about how developers use redux. It does not do anything magical, simply automates the repetitive tasks with redux.\r\n\r\nUnder the hood every reducer created by `@redux-ts-starter-kit/slice` leverages immer to update the store, which means reducers are allowed to mutate the state directly.\r\n\r\n## Features\r\n\r\n- typescript support\r\n- Automatically creates actions, reducer, and selector(s) based on `slice`\r\n- Reducers leverage `immer` which makes updating state easy\r\n- When stringifying action creators they return the action type\r\n- Helper functions for manually creating actions and reducers\r\n- Reducers do not receive entire action object, only payload\r\n- Advanced type inferrence, minimizing the need to create one-off interfaces. _Note: supplying interfaces is largely not required but highly recommended_\r\n\r\n## Why not X\r\n\r\nThis library was heavily inspired by [autodux](https://github.com/ericelliott/autodux), [robodux](https://github.com/neurosnap/robodux) and [redux-starter-kit](https://github.com/markerikson/redux-starter-kit).\r\n\r\nNote: This started as fork of robodux that was supposed to merged in a PR, but the number of changes I ended up making were numerous and breaking.\r\n\r\n- creating reducers with `immer`\r\n- no external dependencies besides `immer`\r\n- create action helper\r\n- create reducer helper\r\n\r\n## Example\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { combineReducers, createStore} from 'redux';\r\n\r\n\r\ninterface State { // interface representing the entire state tree\r\n  user: User;\r\n  counter: number;\r\n}\r\n// Actions interface where the keys are the action names and the values represent the payload types\r\ninterface CounterActions {\r\n  increment: never;    // <- never indicates that no payload is expected\r\n  incrementBy: number;\r\n  decrement: never;\r\n  decrementBy: number;\r\n  multiply: number;\r\n}\r\n\r\n// You can destructure, rename and export the reducer, action creators and selectors\r\n\r\n      // number is the state slice/initial state type\r\nconst counter = createSlice<CounterActions, number,  State>({\r\n  slice: 'counter', // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: 0,\r\n  cases: {\r\n    increment: state => state + 1,\r\n    incrementBy: (state,payload) => state + payload, // payload is type number\r\n    decrement: state => state - 1,\r\n    decrementBy: (state,payload) => state - payload,\r\n    multiply: (state, payload) => state * payload,\r\n  },\r\n});\r\n\r\ninterface User {   // state slice/initial state interface\r\n  name: string;\r\n}\r\n\r\ninterface UserActions {  // Actions interface\r\n  setUserName: string;\r\n}\r\n\r\nconst user = createSlice<UserActions, User, State>({\r\n  slice: 'user',    // slice is optional could be blank '' if this will be the sole/root reducer\r\n  initialState: { name: '' },\r\n  cases: {\r\n    setUserName: (state, payload) => {\r\n      state.name = payload; // mutate the state all you want with immer\r\n    },\r\n  }\r\n})\r\n\r\nconst rootReducer = combineReducers<State>({\r\n  counter: counter.reducer,\r\n  user: user.reducer,\r\n})\r\n\r\nconst store = createStore(rootReducer);\r\n\r\nstore.dispatch(counter.actions.increment());\r\n// New State -> { counter: 1, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.incrementBy(10));\r\n// New State -> { counter: 11, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.multiply(3));\r\n// New State -> { counter: 33, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrement());\r\n// New State -> { counter: 32, user: { name: '' } }\r\n\r\nstore.dispatch(counter.actions.decrementBy(8));\r\n// New State -> { counter: 26, user: { name: '' } }\r\n\r\nconsole.log(`${counter.actions.decrement}`);\r\n// -> counter/DECREMENT\r\n\r\nstore.dispatch(user.actions.setUserName('eric'));\r\n// New State -> { counter: 6, user: { name: 'eric' } }\r\n\r\nconst state = store.getState();\r\nconsole.log(counter.selectors.getSlice(state));\r\n// -> 6\r\nconsole.log(user.selectors.getSlice(state));\r\n// -> { name: 'eric' }\r\n\r\nconsole.log(user.selectors.name(state));\r\n// -> 'eric'\r\n```\r\n\r\n## createSlice API\r\n\r\nA function that accepts an initial state, an object full of reducer functions, and optionally a \"slice name\", and automatically generates action creators, action types, and selectors that correspond to the reducers and state.\r\n\r\nThe reducers will be wrapped in the `createReducer()` utility, and so they can safely \"mutate\" the state they are given.\r\n\r\n**IMPORTANT: For proper typing support please use `const` if initialising `slice` outside `createSlice`**\r\n\r\n```typescript\r\nfunction createSlice<Actions, SliceState, State>({\r\n    // A object of function that will be used as cases for the returned reducer,\r\n    // is used to generate action creators that trigger the corresponding case\r\n    cases: Object<string, Function>,\r\n    // The initial Slice State, same as normal reducer\r\n    initialState: any,\r\n    // The key indicating this slice in the combined state.\r\n    slice?: string,\r\n})\r\n```\r\n\r\n### General Usage\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  interface FormActions {\r\n    setName: string;\r\n    setSurname: string;\r\n    setMiddlename: string;\r\n    resetForm: never;  // no payload expected\r\n  }\r\n\r\n  const formInitialState: FormState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: state => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\nOR leveraging it's type inferrence if you're feeling lazy. Not recommended.\r\n\r\n```typescript\r\n  import { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface IState {\r\n    form: FormState;\r\n    //.....\r\n  }\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n  const formInitialState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    cases: {\r\n      setName: (state, name: string) => {\r\n        state.name = name;\r\n      },\r\n      setSurname: (state, surname: string) => {\r\n        state.surname = surname;\r\n      },\r\n      setMiddlename: (state, middlename: string) => {\r\n        state.middlename = middlename;\r\n      },\r\n      resetForm: (state, _: never) => formInitialState\r\n    },\r\n    slice: \"form\",\r\n    initialState: formInitialState\r\n  });\r\n```\r\n\r\n### Type parameters\r\n\r\n`createSlice` accepts three generics: `Actions`, `SliceState`, `State`. None of which are required and can mostly be inferred from the arguments given.\r\n\r\n`Actions` helps improve autocompelete and typing for the `actions` object returned from `createSlice`.\r\nSupply an interface where the keys are the action names and the values are the payload types, which should be `never` if the action takes no payload.\r\n\r\n`SliceState` is the state shape of the particular slice created with `createSlice`. If there is no\r\nslice passed to the state, then this will assume that this is the entire state shape.\r\n\r\n`State` is the entire state shape for when a slice is used with `createSlice`. This helps type the selectors we return.\r\n\r\n### Arguments\r\n\r\n`createSlice` accepts a single argument object with the following fields:\r\n\r\n#### slice\r\n\r\n*not required*\r\nThe name of the slice of state the reducer is expected to manage, should be left out completely or be '' if the reducer is going to be the root reducer.\r\nShould be a string or number.\r\n\r\nNote: if a combined State interface is provided, the slice is type checked to ensure that it is a key in the State.\r\n\r\n#### initialState\r\n\r\n*required*\r\nThe state that the reducer is initialized with, same usage as standard reducer.\r\n\r\n#### cases\r\n\r\n*required*\r\nAn object containing all the actions the reducer can perform on its state slice. Each function is equivalent to a standard switch case statement in a standard reducer.\r\nEach function can mutate the state directly as it uses `immer` behind the scenes to make it immutable.\r\nEach function is used to make an action creator of the same name.\r\n\r\nIf an Actions interface is not supplied, you can type cast the payload arguments directly and it will infer an Actions interface from it.\r\n\r\nNote:\r\n\r\n* Do not type cast the state argument, its type is automatically inferred from the initialState field if not interface is given\r\n\r\n* The returned action creators accept only a single argument as payload, i.e a case in the form `(state,payload1,payload2)=>{}` is invalid. If you need to pass multple arguments use an object or array to pass them.\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\nconst hiSlice = createSlice({\r\n    slice: 'hi',\r\n    initialState: hiInitialState,\r\n    cases: {\r\n      // state type is automatically inferred as typeof hiInitialState\r\n      setGreeting: (state, payload: string) => {\r\n        state.greeting = payload;\r\n      },\r\n      setWaves: (state, payload: number) => {\r\n        state.waves = payload;\r\n      },\r\n      resetHi: (state, payload: never) => hiInitialState\r\n    },\r\n  });\r\n\r\n  // Gives the following action creators\r\n\r\n  console.log(hiSlice.actions.setGreeting('hello'))\r\n  ->> {type: 'hi/SET_GREETING', payload: 'hello' }\r\n\r\n  console.log(hiSlice.actions.setWaves(5))\r\n  ->> {type: 'hi/SET_WAVES', payload: 5 }\r\n\r\n  console.log(hiSlice.actions.resetHi())\r\n  ->> {type: 'hi/RESET_HI', payload: undefined }\r\n\r\n  // again note that you can destructure the returned actions object\r\n\r\n```\r\n\r\n### Return value\r\n\r\ncreateSlice return an object with the following fields\r\n\r\n#### reducer\r\n\r\nA reducer function, works exactly the same as a standard reducer\r\n\r\n#### actions\r\n\r\nAn object of action creators with the same name as the corresponding case.\r\nYou can see this in action in the hiSlice example above, it's actions object has the following type signature\r\n\r\n```typescript\r\n\r\n  {\r\n    setGreeting: (payload: string) => ({type: 'hi/SET_GREETING', payload: string})\r\n\r\n    setWaves: (payload: number) => ({type: 'hi/SET_GREETING', payload: number})\r\n\r\n    resetHi: ()=> ({type: 'hi/RESET_HI', payload: undefined})\r\n  }\r\n\r\n```\r\n\r\n#### selectors\r\n\r\nAn object containing the generated selector(s), always includes a selector called getSlice that selects it's slice state from the state, if the initial state is an object additional selectors are generated with the same names as the corresponding initial state keys\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { SliceState, Actions, State } from './types';\r\n\r\nconst formSlice = createSlice<SliceState, Actions, State>({\r\n      cases: {\r\n        setName: (state, name) => { state.name = name},\r\n        setSurname: (state, surname) => { state.surName = surname},\r\n        setMiddlename: (state, middlename) => { state.Middlename = middlename}\r\n      },\r\n      slice: 'form',\r\n      initialState: {\r\n        name: '',\r\n        surname: '',\r\n        middlename: '',\r\n      },\r\n    })\r\n\r\n     const state = {\r\n      counter: 5,\r\n      random: 'random',\r\n      auth: {\r\n        idToken: \"a random token\",\r\n        userId: \"a user id\"\r\n      }\r\n      form: {\r\n        name: \"John\",\r\n        surname: \"Doe\",\r\n        middlename: \"Wayne\"\r\n      }\r\n    };\r\n\r\n console.log(formSlice.selectors.getSlice(state))\r\n ->> {\r\n    name: \"John\",\r\n    surname: \"Doe\",\r\n    middlename: \"Wayne\"\r\n  }\r\n\r\n console.log(formSlice.selectors.name(state))\r\n->> 'John'\r\n\r\n console.log(formSlice.selectors.middlename(state))\r\n->> 'Wayne'\r\n\r\n console.log(formSlice.selectors.surname(state))\r\n->> 'Doe'\r\n\r\n```\r\n\r\n## Other Exports\r\n\r\n### createAction\r\n\r\nThis is the helper function that `createSlice` uses to create an action. It is also useful to use\r\nwhen not using createSlice because when stringifying the function it will return the action type.\r\nThis allows developers to not have to worry about passing around action types, instead they simply\r\npass around action creators for reducers, sagas, etc.\r\n\r\n```typescript\r\nimport { createAction } from '@redux-ts-starter-kit/slice';\r\n\r\nconst increment = createAction('INCREMENT');\r\nconsole.log(increment);\r\n ->> 'INCREMENT'\r\nconsole.log(increment(2));\r\n->> { type: 'INCREMENT', payload: 2 };\r\n\r\nconst storeDetails = createAction('STORE_DETAILS');\r\nconsole.log(storeDetails);\r\n->> 'STORE_DETAILS'\r\nconsole.log(storeDetails({ name: 'John', surname: 'Doe' }));\r\n ->> { type: 'INCREMENT', payload: {name: 'John', surname: 'Doe'} };\r\n```\r\n\r\n### createReducer\r\n\r\nThis is the helper function that `createSlice` uses to create a reducer. This function maps action types\r\nto reducer functions. It will return a reducer.\r\n\r\n```typescript\r\nimport { createReducer } from '@redux-ts-starter-kit/slice';\r\n\r\nconst counter = createReducer({\r\n  initialState: 0,\r\n  cases: {\r\n    INCREMENT: (state) => state + 1,\r\n    DECREMENT: (state) => state - 1,\r\n    MULTIPLY: (state, payload) => state * payload,\r\n  }\r\n});\r\n\r\nconsole.log(counter(2, { type: 'MULTIPLY': payload: 5 }));\r\n// -> 10\r\n```","readmeFilename":"README.md","_id":"@redux-ts-starter-kit/slice@2.0.0-alpha.6","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.10.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-R7xL8bxu4EntPb6Dj22dXD49gRKugvdGwRX05ddKBDGuixgUrzxnH6pwta7JHSSV+n7FduOk7ZDEP2GywIhm8A==","shasum":"76a3e8e9b62c1d302cb1b4275364633eb4a2e3d2","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-2.0.0-alpha.6.tgz","fileCount":17,"unpackedSize":131474,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctnpBCRA9TVsSAnZWagAANzMP/RBSCSDyOqIiKSxZLVvl\nX/6AoaCGXPp+tCf/9g1tQgSQs0M6pjemvhB1jfGI9fsV0DtCG5SZJpvW6YgX\njXmmwr1NKypexol8yzeiMfCvFmKMQhU5DEgCDMtigAi1aJeKNYou0bQZdlYU\ncPrpnNKVkgz402YR0Mz0VUOL0gFZIJhMdwpH2A3XD07B6jn95nklJEBeA+4s\nVGYeh3ouG8kyVrKrCcy+5ogMkbM0S7UB30N8a12+AWdA5/Ik8SMsVTWT2WJR\nvQVQXysXzrmvQxy/HUM4dYMbQMcFWQD1Fn8lfn0MOBXydmnh2JATr/UP0Obr\nZpoLPDQ+DF0nh26RFItPIpTJqYv7Q324vAkT5+w/WpK0BeEIuI2qBIN67rVz\n8NVE5pmSl1M8gGzqyFwBCy9D9jxOVtEH8oKwcUAkFS7bDEO/H9Yk8tvpHG64\nhkx4D3DCXKdRrOp9ZnZLK6cqqzhaZk4u1eUMoxf90BbAE1JLz+k5WuuScfYC\nPrbm3/6DTRKks7kiN5NEqDqg1jjr2ujKeWlDWOWc0TNDmzDpjOELbYP9VrET\nS65/u2mApYvLt10ftC3AWerTkLe6/G0Zgxf4cFgHqIZmTv1FDFUAIWrD9o+4\npjy5MiXH2JdCN0QnNbZtS+Xcy4Rvg3FzEXkpAcZXclkFmjHpC9FdW8YwE2Ku\n2lJg\r\n=jEyP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqwbPRmljZxPg6AbJ2IOVlcdb7g/P3B6L6704jYUbzwQIgflI/2dmGDtZx8RLwjit+s9MBHB/mFIq/fjHUyjwPUSQ="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_2.0.0-alpha.6_1555462720148_0.28105071288340544"},"_hasShrinkwrap":false},"2.0.0":{"name":"@redux-ts-starter-kit/slice","version":"2.0.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"rollup -c","build:declaration":"tsc -p tsconfig.build.json","clean":"rimraf lib .rpt2_cache","tsc:tests":"yarn run tsc -p ./src/tests --noEmit","test:types":"typings-checker -p ./src/examples/tsconfig.json ./src/examples/types.ts","lint":"prettier-tslint fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","cpx":"^1.5.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","prettier-tslint":"^0.4.2","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.21.0","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.4.5","typings-tester":"^0.3.2"},"dependencies":{"immer":"3.1.1","memoize-state":"^2.0.7"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"prettier":{"arrowParens":"always","singleQuote":true,"printWidth":80,"trailingComma":"all"},"lint-staged":{"*.{ts}":["prettier-tslint fix","git add"]},"gitHead":"2fa60ecde4c8e78d1dbcde22731f5ebfa9c1cc01","_id":"@redux-ts-starter-kit/slice@2.0.0","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.10.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-1MtlNAYKdTjH2+xsnBXuOLq+7tJ2h5pIGnfQTjWLrDOEDLmmBTZ0CoktOEV/rq0omiSlhnwJU71qz+7oJtQR9w==","shasum":"77e3095fc10c6e470ebd0343e42ff40bdbae4e2e","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-2.0.0.tgz","fileCount":15,"unpackedSize":130934,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc1qtSCRA9TVsSAnZWagAAdEQP/RM1Pw7aQQESw31ggnq9\nP0vBWuCtqhPVL+Qmm/sp0LjbtMPzX1n6UMQ08neDutMvqZO1qst7nKgqFlZz\nFg9Nget/ltEMQEjowtiyrpT/b7vqqJ9xk+sAgxNBAU1cAV0jVuD/0z/75BO4\nMoV07zUOLsBGVn79qoREg5mhIFlTpWzr0QUVz/k/V4VpsSqS9Tdch6yaj3Am\nG6QNIzfqOoa2xE2YNFJGdjpyWrQXnd/THMmh637rDDDtTcstzd8BTpmQ8MVL\nLNoajk8FClPZvU7fu5poO9R7Rwnu5Pl+oORjahLWozDj9duFUILB9UXcE7/i\n3YR/AUDLG58CpE3RnPWvd4Mx7Z9xCy5LGsilIYoU1/x8FEggk/OaS45slRm+\njhd55ySzF3E3IJ4DnLPYjeKW8hq8PD2gKWUQsVNsyrfXyJrQzayKLEX3uKXQ\nfIH8Iyns04wEcnzmr9arcd8EMgIDM4pZqzTv9uXyfcR0TN8ATficf7fqZUwT\niyWBFQJUi/PScqliY5fUp/Fxwoyux1PEKQmSxrNI+Ve253j4nXDxw1iZhN82\nBHhqfx26DR8GsBAKR+8V9ANBEuTUcMK/TQVmACete7GklCEmHZP2ZQJpKgRY\nXu9mlvsBLvK2YGv4lEAg7zYrX2RusPin+tEbOpdpBDWDTNFcSnWGc2TkISE0\nMqJN\r\n=UtjV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCN3vhFp6MnlLQqs4+lpGBIF1Hhmbwv6jL+id0AwVBI3gIhAJwdkC+KOonBMvVrYAzX9u6ev+J/9Ql5z3wIomDEqPek"}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_2.0.0_1557572433696_0.9693579924182505"},"_hasShrinkwrap":false},"2.0.1":{"name":"@redux-ts-starter-kit/slice","version":"2.0.1","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"rollup -c","build:declaration":"tsc -p tsconfig.build.json","clean":"rimraf lib .rpt2_cache","tsc:tests":"yarn run tsc -p ./src/tests --noEmit","test:types":"typings-checker -p ./src/examples/tsconfig.json ./src/examples/types.ts","lint":"prettier-tslint fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"devDependencies":{"@types/jest":"^23.3.11","@types/node":"^10.12.18","babel-core":"^6.0.0 || ^7.0.0-0","babel-jest":"^23.0.0 || ^24.0.0","cpx":"^1.5.0","husky":"^1.3.1","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"1.15.3","prettier-tslint":"^0.4.2","redux":"^4.0.1","redux-thunk":"^2.3.0","rimraf":"^2.6.3","rollup":"^1.0.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.0.3","rollup-plugin-replace":"^2.1.0","rollup-plugin-terser":"^4.0.1","rollup-plugin-typescript2":"^0.21.0","ts-jest":"^23.10.5","ts-node":"^7.0.1","tslib":"^1.9.3","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typescript":"^3.4.5","typings-tester":"^0.3.2"},"dependencies":{"immer":"3.1.1","memoize-state":"^2.0.7"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"prettier":{"arrowParens":"always","singleQuote":true,"printWidth":80,"trailingComma":"all"},"lint-staged":{"*.{ts}":["prettier-tslint fix","git add"]},"gitHead":"8a7df0ec03e2696cf423136fb546cbc4840f948c","_id":"@redux-ts-starter-kit/slice@2.0.1","_nodeVersion":"10.13.0","_npmVersion":"lerna/3.10.5/node@v10.13.0+x64 (win32)","_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"dist":{"integrity":"sha512-WpResg1QLxxWjW7UriagJczuJE2NfWJ9GVMM+xSW63jhrIi2KMCFkrga7QoSwnvGD/kFrsJ9p/fUQsGiyM6jjg==","shasum":"dbd498c06a7d4d5bc7e0789a6e5b9910dc363603","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-2.0.1.tgz","fileCount":15,"unpackedSize":130058,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2KaOCRA9TVsSAnZWagAAluwP/0sJb1AsFafUsGw/Lmy9\nKwt1rT5F8VAYzdH/62xPzOwgcFm7AUZzAbbp35rGZqVQ2t4Nq9uB1BoO0sKY\nGOwlBREMIdcb7N96uRAqas9fEh/LP+OE0u+rW+FF8H2is3R+MWTUu2mvOU5Z\nxpfS2W7o3sn3GS+aXt3zilETDgCy0M7L9336nEH6ZQxIE5FOT3J6vFARJT1j\nRq6k7VPOQwk/jluPlOh0xL7PskPu+1TFvh3mq9Ktv7pHlZBnZ0Bo3CPHlbqg\nIRo4/KTphzzHuwXNpUusISltA449jOJ/5FEpu7SCwwpKiipwD8ahPSWhNzkM\nkuo1s1aMLZLcZ0oGB47p7IcSjNNyv7dUewC94Zl/2Jp+rQp60IIcTqICak6i\nv5+lydJLQyXG9+8FKtQZgc8PV66icSdMMXO2ifxYDkVbyyyF1LipKD4Aps/U\n8PKEvDzfvyeavcljJa9IEMyZjrVqClSsqFBvu2LijEw9A4OOzN3m+iMrB8+3\nyPn79kyD1PaWKXRsFL0554tLFzl2grBMY9pEFd8VaT5tYY7DezP2zBCa8iqF\nesRKc1GHgn9SNScHHgdvjkMgXRF2koXZtvHpjpFDR4ZGtFLBSU9SSYRPsyP0\nkJ6SzuvVQwds/hR/n1aMXyNVfzzd38iMNy+hpMMlLHA72wPZdYqnPH+E2u+5\n2K/o\r\n=YTZM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBCYGtToTvvR+bTIw//bkZuj4qnvdEEUbGNNpY3mbRcgIgW0g+OIKhRoLYWzSFX/viyopvHVIlBodciAbc7ZzyZyA="}]},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_2.0.1_1557702285414_0.8915888616472978"},"_hasShrinkwrap":false},"3.0.0-alpha.0":{"name":"@redux-ts-starter-kit/slice","version":"3.0.0-alpha.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn rollup -c","build:declaration":"tsc -p tsconfig.build.json","clean":"rimraf lib .rpt2_cache","tsc:tests":"yarn run tsc -p ./src/tests","test:types":"yarn tsc:tests","lint":"prettier --write src/**/*.ts && eslint --fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"dependencies":{"immer":"^9.0.5","memoize-state":"^2.0.15","tsdef":"^0.0.14"},"devDependencies":{"@babel/core":"^7.14.6","@rollup/plugin-babel":"^5.3.0","@rollup/plugin-commonjs":"^19.0.1","@rollup/plugin-node-resolve":"^13.0.2","@rollup/plugin-replace":"^3.0.0","@rollup/plugin-typescript":"^8.2.3","@types/jest":"^23.3.11","@types/node":"^16.4.0","@typescript-eslint/eslint-plugin":"latest","@typescript-eslint/parser":"latest","@typescript-eslint/typescript-estree":"^4.28.3","babel-core":"^6.26.3","babel-jest":"^27.0.6","eslint":"^7.3.0","eslint-config-airbnb-base":"^14.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-app":"^6.2.2","husky":"^7.0.1","jest":"^27.0.6","lint-staged":"^11.0.1","prettier":"^2.3.2","prettier-eslint":"^12.0.0","prettier-eslint-cli":"^5.0.1","redux":"^4.1.0","redux-thunk":"^2.3.0","rimraf":"^3.0.2","rollup":"^2.53.2","rollup-plugin-terser":"^7.0.2","ts-jest":"^27.0.3","ts-node":"^10.1.0","tslib":"^2.3.0","typescript":"^4.3.0"},"gitHead":"66780a64011eb13e5bdacef97fc88146242873cd","_id":"@redux-ts-starter-kit/slice@3.0.0-alpha.0","_nodeVersion":"16.3.0","_npmVersion":"lerna/4.0.0/node@v16.3.0+x64 (win32)","dist":{"integrity":"sha512-4PI4FpR07yrNTdEUxzDOjG4Ku8FFoFaabnSArFozMDdC2VRS9kdYadMb9vnRo85/FIsujafls73grkodx4k40g==","shasum":"b6b8cfd71eca8da6913cbabbd7690bc1141ee79e","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-3.0.0-alpha.0.tgz","fileCount":14,"unpackedSize":85520,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/zvzCRA9TVsSAnZWagAAKhsP/j998vPxReelXPaLdMuc\ny66KCTOy/tE2JUDEU4sEouYGTLdKOwUnbLG9CT2M4QIbpAOo5FPMF9tnTwed\nlTjaXaMQkBAx6XjGDFb0mjn7bPJ8A1MJUYy2kZRj/W/olE/c91k7lI+dx5pE\nZtnjUuDi8JBOE5jA+Cicj8caIQmttI5YqenDU2waUssUk8iRhzPLlUo4BfuR\nvM1QPAG9QAAfzxCrTy34soo0eHdFF+aMFvEDO1uQEFYkCcmfkXDOikUOxAeM\nlTh4dLex0Rt+4Ts/DJERH/JjGUr7pKU9YYmg/CDLkcJZSCv/MoDmg63Rg+uy\nkjPhkotgvZ1vF7bjCj50pUrVrIWfdgbA4Oq92DStyf0cbJ493YKy/JL0n3zE\nWdnilD/84hZo9KvC2ctHnwHQ+zHw4435ttw4XwzAqI8SPMiJ41g4LM6ootYt\nrg/mT0SwPcNRVxODaa/aqHU8WQReIUTOSSPxC92xw7iwKplSEoIPxNwqkVa7\nvagm9uMRxx4Eg2HztjcguVy/UTii9ZZcW35Dqxc/yghOSTfdfmLeX+RLxpO0\nMk3IJzhylq/vSHytpm6DO6dV69DvQ71x6DnXVvlSt6CwX61OZ5z/DnWE2HUQ\nuzKkaxhkM7qV8qXl9ao5+5SUh36nWI7G0ZsXNgXgmxhD/lVoPwX0tmCJwT6N\nQiFM\r\n=FHMU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB7QKJ5DW52c02BCXjHC2EgnDsKaUUIQ0Chik9AL3t/KAiEArYbFzZuEn3aYrEkQla7BVc9t+5BEkmNAXBGcJo4CBWo="}]},"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_3.0.0-alpha.0_1627339763007_0.17713986146581262"},"_hasShrinkwrap":false},"3.0.1-alpha.0":{"name":"@redux-ts-starter-kit/slice","version":"3.0.1-alpha.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn rollup -c","clean":"rimraf lib .rpt2_cache","tsc:tests":"yarn run tsc -p ./src/tests","test:types":"yarn tsc:tests","lint":"prettier --write src/**/*.ts && eslint --fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"dependencies":{"immer":"^9.0.5","memoize-state":"^2.0.15","tsdef":"^0.0.14"},"devDependencies":{"@babel/core":"^7.14.6","@rollup/plugin-babel":"^5.3.0","@rollup/plugin-commonjs":"^19.0.1","@rollup/plugin-node-resolve":"^13.0.2","@rollup/plugin-replace":"^3.0.0","@rollup/plugin-typescript":"^8.2.3","@types/jest":"^23.3.11","@types/node":"^16.4.0","@typescript-eslint/eslint-plugin":"latest","@typescript-eslint/parser":"latest","@typescript-eslint/typescript-estree":"^4.28.3","babel-core":"^6.26.3","babel-jest":"^27.0.6","eslint":"^7.3.0","eslint-config-airbnb-base":"^14.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-app":"^6.2.2","husky":"^7.0.1","jest":"^27.0.6","lint-staged":"^11.0.1","prettier":"^2.3.2","prettier-eslint":"^12.0.0","prettier-eslint-cli":"^5.0.1","redux":"^4.1.0","redux-thunk":"^2.3.0","rimraf":"^3.0.2","rollup":"^2.53.2","rollup-plugin-terser":"^7.0.2","ts-jest":"^27.0.3","ts-node":"^10.1.0","tslib":"^2.3.0","typescript":"^4.3.0"},"gitHead":"beb38f9ea366c9af9eb31461534c205a27606fdb","_id":"@redux-ts-starter-kit/slice@3.0.1-alpha.0","_nodeVersion":"16.3.0","_npmVersion":"lerna/4.0.0/node@v16.3.0+x64 (win32)","dist":{"integrity":"sha512-yOtkoJmAak+K9x2S/hRtrCUzRG2/+NqvmfoeRfNYPdFp6qmCWQ8InlLjmSbKhCI5K/Blu1DoZFpFGjVb6GL+yw==","shasum":"6197b91e4c0d61a34a6093a235a063ec4fe1cc7f","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-3.0.1-alpha.0.tgz","fileCount":14,"unpackedSize":85465,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAH0PCRA9TVsSAnZWagAAeXIP/AoCOq/nXpZtQgcWrBVa\nqEcKTnyeJYM01cetnjAakLZpU1bd58YjVj9wIl3iaBkfGXyd1U5zRom6hhYj\nwltVuguQLlgQfF2aD5Wk1YaklQXBAwRzHXNfpBO1AmZqNM/oOFB/OsCAAxHI\nqYwn2kPLSd5gJaYwlrcOSMClzRPyjFBdLpEfrdefwTyB8iaCiyUoYMn2Eg4f\nSYstWNg+fTccPOgux3/kz9l5rZQNvZc5SJECH1Xx36x3U4v13IoWNGyAN4Jt\nk2EQeyRoOsF/uULjbOarZnJYvDPA4/N3woqX5Gb9jg8hNZz84+SF0ZReVXDS\nFKhWhtZ9NyspTKZ2+b14Ohju4EwnL55jYA01v0l+1Tl7BPRiK2w2FKUTN9mT\nKzeLLsIcehwOXUjHDvh8Iu+T/ZvmLTOXq5x2W2x8YWryr4/+8WRcyjNwUMPa\nWszZCrbz8H8nr9mydg1PBXynqNz6UjX/2k8Rcabn0SbMb9OaS4GkGr46zdVJ\ny+uZuUHBdjLaDRJqwhNsf135cyRcp17TmwB2CpLC7/Dzht+6vdvs2CoDrX+G\nTC1YArFaPRFH+ysInKysz3zb6hwvGIkKFQkSf1lgyXUnKboLvL0LN+ROPBm4\nnT8D4aykaEeZtu+VO7Pk+ip7BInmPtBD1HmOYpDI7iwbCJYKEUrZBhkedwkF\nu4Xm\r\n=gyw9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVYaO66BJynVQQ4yWkYN+QsSqTkgk4sLoMRVrgele26AIhANpP2I7q9ssbKbC5UiZxVuI2uX5/YOkDhYhMIBUEofsd"}]},"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_3.0.1-alpha.0_1627421966977_0.6694915078024875"},"_hasShrinkwrap":false},"3.0.2-alpha.0":{"name":"@redux-ts-starter-kit/slice","version":"3.0.2-alpha.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn rollup -c","clean":"rimraf lib .rpt2_cache","tsc:tests":"yarn run tsc -p ./src/tests","test:types":"yarn tsc:tests","lint":"prettier --write src/**/*.ts && eslint --fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"dependencies":{"immer":"^9.0.5","memoize-state":"^2.0.15"},"devDependencies":{"@babel/core":"^7.14.6","@rollup/plugin-babel":"^5.3.0","@rollup/plugin-commonjs":"^19.0.1","@rollup/plugin-node-resolve":"^13.0.2","@rollup/plugin-replace":"^3.0.0","@rollup/plugin-typescript":"^8.2.3","@types/jest":"^23.3.11","@types/node":"^16.4.0","@typescript-eslint/eslint-plugin":"latest","@typescript-eslint/parser":"latest","@typescript-eslint/typescript-estree":"^4.28.3","babel-core":"^6.26.3","babel-jest":"^27.0.6","eslint":"^7.3.0","eslint-config-airbnb-base":"^14.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-app":"^6.2.2","husky":"^7.0.1","jest":"^27.0.6","lint-staged":"^11.0.1","prettier":"^2.3.2","prettier-eslint":"^12.0.0","prettier-eslint-cli":"^5.0.1","redux":"^4.1.0","redux-thunk":"^2.3.0","rimraf":"^3.0.2","rollup":"^2.53.2","rollup-plugin-terser":"^7.0.2","ts-jest":"^27.0.3","ts-node":"^10.1.0","tslib":"^2.3.0","typescript":"^4.3.0"},"gitHead":"4bb5113c3f87eeadca249c44e5aa5459120ce5bd","_id":"@redux-ts-starter-kit/slice@3.0.2-alpha.0","_nodeVersion":"16.3.0","_npmVersion":"lerna/4.0.0/node@v16.3.0+x64 (win32)","dist":{"integrity":"sha512-CuIjVgcLdn7BVghkQHukf0d1P2XV1Iv8maMTpV0fxKG/MlDsMszTcKXr0YNcgJbkHaCfoTUVUm4x8Om7szVoig==","shasum":"55710fcc93d1ba2aa9a2afaa5bef7ec2ea4b71e2","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-3.0.2-alpha.0.tgz","fileCount":14,"unpackedSize":84942,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAIiaCRA9TVsSAnZWagAAUyUP/AgUnXALSIyVXrK7P4wu\nE2vbmWAvQbhK7KlGRcn+9TPm6ugYnXvAl6GH988FwLr6ArQgpSDJHGr/AJbT\nfLZgYVqgugLbolKLQznmKkIDhZUWfqTIwiESJ24Orxt9Eco9dVKBTsD2YNiH\nBt5puG36ZlCMOm/sJDGBQJcOBoB55ChN7yLJf8d4DIgPsLLvkE6TFwjbbgI4\n9XwZzmIUGhEvTjEVu03qi5IJA79jSNem3JkxaxSuvflR8SB88KTG8062zzri\n5Jbl0seYtcuQZ6x7shlyZbXDh5+32SusxGC+lvLSoN2o/P2Ro2exghpsgF8S\nnsxvAuCjP3YxTcBz72f3h0W5M0iz49hwinowCu2jghhVRzhtlcVA13ljBGZR\nF2rF3tdfRuZ7rM+2RQJEGfYbpBMSCM8y0P1YHJapVm0ZLddXjZkJnSELJF1a\n+0AQhSBpvcPKai+HyRkMpsqA8x+g5Q4mQISY9XpKAS4aEBgiwkQ0r/n+FCps\nykcsXGYhrPzamXyhN2tK6CwfCzcqBQlCKidD5Ysl0JVmabkwsgm3o0jCbM0V\n1TLJzeu8XqksdKJL3E1TBPlKDda53ksbt50gSBhtUvg8Gk8r+yIghg1X+EiE\ntnWlixNdCMWimJArsaFvZgon9FuVrBmUUAQ+6mFX/Kv9oAwC0L0+MWXHF+zX\nstDZ\r\n=fngl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzBK94itc8VGS0ZZvYc3qaKumQa52t02gCtHYgf6/XhQIgT/piJdcWM0qsYSBnQeZUTRMX6deNQ9ZN+5TKwKOaOJg="}]},"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_3.0.2-alpha.0_1627424922299_0.8685628949877022"},"_hasShrinkwrap":false},"3.0.3-alpha.0":{"name":"@redux-ts-starter-kit/slice","version":"3.0.3-alpha.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn rollup -c","clean":"rimraf lib .rpt2_cache","tsc:tests":"yarn run tsc -p ./src/tests","test:types":"yarn tsc:tests","lint":"prettier --write src/**/*.ts && eslint --fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"dependencies":{"immer":"^9.0.5","memoize-state":"^2.0.15"},"devDependencies":{"@babel/core":"^7.14.6","@rollup/plugin-babel":"^5.3.0","@rollup/plugin-commonjs":"^19.0.1","@rollup/plugin-node-resolve":"^13.0.2","@rollup/plugin-replace":"^3.0.0","@rollup/plugin-typescript":"^8.2.3","@types/jest":"^23.3.11","@types/node":"^16.4.0","@typescript-eslint/eslint-plugin":"latest","@typescript-eslint/parser":"latest","@typescript-eslint/typescript-estree":"^4.28.3","babel-core":"^6.26.3","babel-jest":"^27.0.6","eslint":"^7.3.0","eslint-config-airbnb-base":"^14.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-app":"^6.2.2","husky":"^7.0.1","jest":"^27.0.6","lint-staged":"^11.0.1","prettier":"^2.3.2","prettier-eslint":"^12.0.0","prettier-eslint-cli":"^5.0.1","redux":"^4.1.0","redux-thunk":"^2.3.0","rimraf":"^3.0.2","rollup":"^2.53.2","rollup-plugin-terser":"^7.0.2","ts-jest":"^27.0.3","ts-node":"^10.1.0","tslib":"^2.3.0","typescript":"^4.3.0"},"gitHead":"c511c1bd268c161fd72fc13b59a9d6d6c6dde5a2","_id":"@redux-ts-starter-kit/slice@3.0.3-alpha.0","_nodeVersion":"16.3.0","_npmVersion":"lerna/4.0.0/node@v16.3.0+x64 (win32)","dist":{"integrity":"sha512-SGVADM3nLIgC/vBLFFZz3QBAVkS6DiF2CDwN60AqJ8OSYUiqL9umTSESIJM5E7ZuE9oXKcsX4wsS/CDIFju1Hg==","shasum":"c68a98089873169955c110c1c0efb59ce34d337d","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-3.0.3-alpha.0.tgz","fileCount":14,"unpackedSize":84977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAdypCRA9TVsSAnZWagAAYoYQAJXif9MfpBEXqiYNIgk6\njUr+pYJUGB1zattKIdjgUaoKtJx8b4VDKoYTZ9g8LP6dk/RXYZ8kFVlgWB9f\n5V+dLmSnIo/oBVL2HhbGG4MjxW0qoP9xYV1GbYWnQLhU2Y2Lq1DwhpIvvboW\n4vgi6ma4rw35IXJXlW3Q+93e6C+mub/7O1wynAny52OTPgtSsYnLfkgTyb8/\n16UmSVdgwNtNt5BDo8xDAOZW1VLX624d5+NxN7cA1C8WgoPBWBwP51nNRcrT\nBYkmEGNnlW7reHmGSvDHMf3DCcMhrVjsj2XITHO9MNXtTI2a7E603+UqOMzG\n5HZeBjVLuwN3NOlHbCBjoX8aeuUJL39xhXm+RYYnxpG/6ZubUyxX7XPR4oEi\nvRxN7W0ysvxYC1v8CdB8cD26G7hTejHpOFFZiKWUQwHHuftz5DNRLJ+LBlfy\ndRaQUarsdOcK8K+EAzyZmDE4YHGvy/v34re99ivF43fghYMdEVN1+KxcaVh0\n8aX4VAlo1Z8dLUr/Ka/2OK+61b0WnVUB+ZHLiS2I4w/ZZUoSwn4Tlcal0/62\nfXNFhdYc9bzfI2iE/c3ptmgoZkkmEmP4GdON6t2LTDnhY7eSMxvCXaJAFq4R\nrIK11PmCmgBoUoQBjGBEFS5k3HLHinsTKm7bMrpH29DnNTjw13iYnKx9H9sK\nimWN\r\n=//Ts\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICSBavQhBKgFvzluV/NbQlDgZXaRLkCLwOYzBvP5DOCUAiEAnG6FvjBLIsIMb4OrSeRCiJgeIVuRUY1/QJg9MuYms2Y="}]},"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_3.0.3-alpha.0_1627511977700_0.7768135973018764"},"_hasShrinkwrap":false},"3.0.4-alpha.0":{"name":"@redux-ts-starter-kit/slice","version":"3.0.4-alpha.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn rollup -c","clean":"rimraf lib .rpt2_cache","tsc:tests":"yarn run tsc -p ./src/tests","test:types":"yarn tsc:tests","lint":"prettier --write src/**/*.ts && eslint --fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"dependencies":{"immer":"^9.0.5","memoize-state":"^2.0.15"},"devDependencies":{"@babel/core":"^7.14.6","@rollup/plugin-babel":"^5.3.0","@rollup/plugin-commonjs":"^19.0.1","@rollup/plugin-node-resolve":"^13.0.2","@rollup/plugin-replace":"^3.0.0","@rollup/plugin-typescript":"^8.2.3","@types/jest":"^23.3.11","@types/node":"^16.4.0","@typescript-eslint/eslint-plugin":"latest","@typescript-eslint/parser":"latest","@typescript-eslint/typescript-estree":"^4.28.3","babel-core":"^6.26.3","babel-jest":"^27.0.6","eslint":"^7.3.0","eslint-config-airbnb-base":"^14.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-app":"^6.2.2","husky":"^7.0.1","jest":"^27.0.6","lint-staged":"^11.0.1","prettier":"^2.3.2","prettier-eslint":"^12.0.0","prettier-eslint-cli":"^5.0.1","redux":"^4.1.0","redux-thunk":"^2.3.0","rimraf":"^3.0.2","rollup":"^2.53.2","rollup-plugin-terser":"^7.0.2","ts-jest":"^27.0.3","ts-node":"^10.1.0","tslib":"^2.3.0","typescript":"^4.3.0"},"gitHead":"d3c3b912ad5e63e91c30a802fb3e99be94453375","_id":"@redux-ts-starter-kit/slice@3.0.4-alpha.0","_nodeVersion":"16.3.0","_npmVersion":"lerna/4.0.0/node@v16.3.0+x64 (win32)","dist":{"integrity":"sha512-uYTN1OhJt8dQgbLfsMlJHbzOVrT4haNcjphklG5n5WjcQjBL6n8qrO//NHrhhyzMmpjlQf5bXXZbkvlnJ6+KKA==","shasum":"dca0a8e571b3ec45662d3d201f574e79e63d3099","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-3.0.4-alpha.0.tgz","fileCount":14,"unpackedSize":84964,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAenBCRA9TVsSAnZWagAA9tsP/269LIKvYCO1sF55aCOp\nk5vPxaWuh5FjgW2qFkbhpdfDlGpLQZ9ZCPZi+bBnC8pfKtqyUc2pIvd+9jA7\nKogYLSw/Vclwpt7/U6IcmxTkzQEt0f00UpvzJ4bH4zNOEijZ/vN2IJRoZ5LE\n7A/6gi4W+N2WvSYj/Jz0nhIFw3wMNzMlF4rYpdyOOyP7IbNQVmGQZZRbvrYT\nhGK5YyKM3qPQocRtAIo2/OQvHxqJI2nzU6esf1KhH5mBwf6KJaMpKVFrQslx\nXqOi1HZlCKRHdahenpqqxaJ4FEuK4XOxXArOOgxOcfhnWwM1j4uQeOgLrwfM\nr1jIJ+xQ61M6jWow32jQfjFiDcy+ZS/psG4iLkwVlJycHet0YxeOzNPm6EB9\n0F29793PfBrod3HOH2wt6GAEfKOLi4+beqwXnJTZ8Y6t6pcYV3NR3/KpOrDd\ngZo+ky+NNyezGtuTcsLppiFMsAZ/h9wo40tMpCdBxlhBjz4HC2v0QdhEltCa\ntbL47YXOgHAvYrpuXAN5YkZKXqOnCJ0CnH0VLjlglDjXCfzHq8gZ4bqM0UDc\nPhaDaNbj68KemMQo+TeWdW9p9ZkQaz2/kwgXaz2TaRaRegR/tfYnO4yl20xe\nTvoNETa2S5AhBGYt1TLnYxaJSXClKrWsN78oP6mCR9+Ptn4c6V8+23x21Kpi\nd//q\r\n=68HF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB5hqINBxNFz09lb5UeTu0KlV7DfC+rwZwxdiziR9vq2AiEAuACpQRlE1uFVdMR6K6n5qUVT28kBZ54/Gxsuv928rMQ="}]},"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_3.0.4-alpha.0_1627515329072_0.44602609571881313"},"_hasShrinkwrap":false},"3.0.5-alpha.0":{"name":"@redux-ts-starter-kit/slice","version":"3.0.5-alpha.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn rollup -c","clean":"rimraf lib .rpt2_cache","tsc:tests":"yarn run tsc -p ./src/tests","test:types":"yarn tsc:tests","lint":"prettier --write src/**/*.ts && eslint --fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"dependencies":{"immer":"^9.0.5","memoize-state":"^2.0.15"},"devDependencies":{"@babel/core":"^7.14.6","@rollup/plugin-babel":"^5.3.0","@rollup/plugin-commonjs":"^19.0.1","@rollup/plugin-node-resolve":"^13.0.2","@rollup/plugin-replace":"^3.0.0","@rollup/plugin-typescript":"^8.2.3","@types/jest":"^23.3.11","@types/node":"^16.4.0","@typescript-eslint/eslint-plugin":"latest","@typescript-eslint/parser":"latest","@typescript-eslint/typescript-estree":"^4.28.3","babel-core":"^6.26.3","babel-jest":"^27.0.6","eslint":"^7.3.0","eslint-config-airbnb-base":"^14.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-app":"^6.2.2","husky":"^7.0.1","jest":"^27.0.6","lint-staged":"^11.0.1","prettier":"^2.3.2","prettier-eslint":"^12.0.0","prettier-eslint-cli":"^5.0.1","redux":"^4.1.0","redux-thunk":"^2.3.0","rimraf":"^3.0.2","rollup":"^2.53.2","rollup-plugin-terser":"^7.0.2","ts-jest":"^27.0.3","ts-node":"^10.1.0","tslib":"^2.3.0","typescript":"^4.3.0"},"gitHead":"324fc23c4ea32e541877ad5249f73c0671ac6c08","_id":"@redux-ts-starter-kit/slice@3.0.5-alpha.0","_nodeVersion":"16.3.0","_npmVersion":"lerna/4.0.0/node@v16.3.0+x64 (win32)","dist":{"integrity":"sha512-ryh6PCmXrR4Z/mXZZ8SoO5G8XD3fd+HwhDKG7mIEL1lvGtmRcDBCxdr77DfZV1HNvNT4eiHILytFqctlvvvHEA==","shasum":"d14e583be3d5a58abe116a5f5bae08a92eb9ed1b","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-3.0.5-alpha.0.tgz","fileCount":14,"unpackedSize":85922,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBbExCRA9TVsSAnZWagAA4g8P/iWzvqjppYH49QUpDRKu\noxCZZgV2DZKotBA4vNVbcfdJiVgPjcgkz8v96cMsYPeLDV+nyiMGS5PkiuaK\ntWQL0KrBEfapzIzyP8FBZvhFWHRazMJfbam7vgXlDtVK6vxvKyAAxrsEj9GX\n5dBy75mzYCmcpeiaoEXd1TYFsVQhOd2DpO65kpXCW8zzDzT8Sx3l909rF62o\nlSrPKbQL6zYlkAR0N/DoTUm9hTdnZN8AV2TGeWuA4az08NAjwj8utvyvWdCe\nsD8pvDtjBX5rUzY+OfSnFuZtx2LLgQhGHgqMgMRoofiUVK3iHpzAOSO1/8pM\n2vI7S+HT0Ptb4u1v2SET1aqk53XBdTOEriTj1DTtPv7kWtIgzVv4OTLtB3L2\niBnvfSa4+kmF30VC84z4R6TUyV3CyBLeW+CzA0oMKXWZ4vORC2RDccWCNZ9i\nWbh9qPApjrkIxbdf5+uakoUN55pfTs/+b0vkNTlDg6OoZV9TyVOrNXP3Rw4A\nhbgqudGwYyF2YIbiMNtVSQKX5EBYDhdNeV+VV5YziTw5mv1x/oZvQmhocXHg\nJZTX9iummtJZmDWT2iJ6Be8tVMRk+8XuZpmS58HQkXyTJvI4PoUxMkvBMyXl\ngs8EAC6QYTodO/FPmjNnQ/4Ida1A3iib0ZUMheoQyLUzkfgIxtKpS3io0nEO\nELU1\r\n=Mhtd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBcYaSB0TCNsvR+LckQM84nKRk6e4cK+FWP+PHfn3SJeAiAvgyw5I4cJ7DXByr830rDrjBUhp2kUG+QaT3FwXWjoiw=="}]},"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_3.0.5-alpha.0_1627762993026_0.27381947247300586"},"_hasShrinkwrap":false},"3.0.6-alpha.0":{"name":"@redux-ts-starter-kit/slice","version":"3.0.6-alpha.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn rollup -c","clean":"rimraf lib .rpt2_cache","tsc:tests":"yarn run tsc -p ./src/tests","test:types":"yarn tsc:tests","lint":"prettier --write src/**/*.ts && eslint --fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"dependencies":{"immer":"^9.0.5","memoize-state":"^2.0.15","reselect":"^4.0.0"},"devDependencies":{"@babel/core":"^7.14.6","@rollup/plugin-babel":"^5.3.0","@rollup/plugin-commonjs":"^19.0.1","@rollup/plugin-node-resolve":"^13.0.2","@rollup/plugin-replace":"^3.0.0","@rollup/plugin-typescript":"^8.2.3","@types/jest":"^23.3.11","@types/node":"^16.4.0","@typescript-eslint/eslint-plugin":"latest","@typescript-eslint/parser":"latest","@typescript-eslint/typescript-estree":"^4.28.3","babel-core":"^6.26.3","babel-jest":"^27.0.6","eslint":"^7.3.0","eslint-config-airbnb-base":"^14.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-app":"^6.2.2","husky":"^7.0.1","jest":"^27.0.6","lint-staged":"^11.0.1","prettier":"^2.3.2","prettier-eslint":"^12.0.0","prettier-eslint-cli":"^5.0.1","redux":"^4.1.0","redux-thunk":"^2.3.0","rimraf":"^3.0.2","rollup":"^2.53.2","rollup-plugin-terser":"^7.0.2","ts-jest":"^27.0.3","ts-node":"^10.1.0","tslib":"^2.3.0","typescript":"^4.3.0"},"gitHead":"8fea4d8f1d1fbf3232389bfe58712ea12eca04ae","_id":"@redux-ts-starter-kit/slice@3.0.6-alpha.0","_nodeVersion":"16.3.0","_npmVersion":"lerna/4.0.0/node@v16.3.0+x64 (win32)","dist":{"integrity":"sha512-gdTPI85N0SveauSiZRc7GxXAKP/+SziSajN0aJ+6weI7fR3nYLvYBbQFC6Vlt3tZmc4711zFInnlGWu/02nUCg==","shasum":"29c8658ee775ee1488f7c28f6fe074b9c33a5ce2","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-3.0.6-alpha.0.tgz","fileCount":14,"unpackedSize":87099,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBbxVCRA9TVsSAnZWagAAiAYP/0MKDqEGp81CWnmbIl/q\n4VafO3sKEB2AykJgjOhyIpylh5z0SAzSjE7Du4FBKN55rZG9ILX9X11YQyQM\ndLHbqFum2wwXVwwYtFaX3N6mTIHwWUAG28AyTc3FAp6+IoRyVAoYGQ/wJUpH\npNwOeGRMV2C+4uTDjM4vR50RZ4tlrcNLm1D1KXRk208RNTklClbqXuFQnE7d\ngiZ93U1rvhL9petVoyumUpiZKQWxP8H5ePzEBjy5BjmWMUvnmrhUDB2BU8vU\nun24mfVpxhJy+i4pUiH1zHfTzRV/yJF8WhuttzBEj6GY7Lc6YGE0MHR9QYCQ\n2vguKjr55bsJ1fxYd+jngG/E5uqnLHGgEa5I6UiKUfEVPoE4DeUQxauWJ0UW\nIqYGGd0B8D7srvQAkXoQlEoPRdX47u+T2pXlmKDM/eFNqg3T7YD/7xavZO8J\nwON9m3XOrCBrVQdWrijQScfR/NPllQLtlDpXBLj/ypJ/mRoVJ3zJ+oBTMuSy\njlpnli90mL6mkMhnP/k5vxQDv1Gq4koVGkLAXVYc2TnLXTn16u5dxwoAciDl\nWRrGUpID/qM9oDWLM353BNGDoau1Lpemo/K6Xut50jqaHgOCXawlCcJD79eb\nsHnMY0i9ooPSA/b5/H3VAlvnXWdKb8FtosSupvLzuxSy94jrQBQaiCeH7DN3\njzSU\r\n=ItFR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoWwvzmeRuew9d7JLSiNB3iHnHaL9w4nkyjNqlW1sALQIhAOYoMHvlEDpbRjMnScMgvwMpQqQR2LRPtzQlIGnp+ZTQ"}]},"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_3.0.6-alpha.0_1627765845269_0.5855012910756716"},"_hasShrinkwrap":false},"3.0.7-alpha.0":{"name":"@redux-ts-starter-kit/slice","version":"3.0.7-alpha.0","main":"lib/redux-ts-starter-kit-slice.cjs.js","module":"lib/redux-ts-starter-kit-slice.esm.js","types":"lib/index.d.ts","license":"MIT","description":"reduce redux boilerplate","author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","publishConfig":{"access":"public"},"scripts":{"build":"yarn rollup -c","clean":"rimraf lib .rpt2_cache","tsc:tests":"yarn run tsc -p ./src/tests","test:types":"yarn tsc:tests","lint":"prettier --write src/**/*.ts && eslint --fix src/**/*.ts","example":"ts-node ./src/examples/types.ts"},"keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"dependencies":{"immer":"^9.0.5","memoize-state":"^2.0.15","reselect":"^4.0.0"},"devDependencies":{"@babel/core":"^7.14.6","@rollup/plugin-babel":"^5.3.0","@rollup/plugin-commonjs":"^19.0.1","@rollup/plugin-node-resolve":"^13.0.2","@rollup/plugin-replace":"^3.0.0","@rollup/plugin-typescript":"^8.2.3","@types/jest":"^23.3.11","@types/node":"^16.4.0","@typescript-eslint/eslint-plugin":"latest","@typescript-eslint/parser":"latest","@typescript-eslint/typescript-estree":"^4.28.3","babel-core":"^6.26.3","babel-jest":"^27.0.6","eslint":"^7.3.0","eslint-config-airbnb-base":"^14.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-app":"^6.2.2","husky":"^7.0.1","jest":"^27.0.6","lint-staged":"^11.0.1","prettier":"^2.3.2","prettier-eslint":"^12.0.0","prettier-eslint-cli":"^5.0.1","redux":"^4.1.0","redux-thunk":"^2.3.0","rimraf":"^3.0.2","rollup":"^2.53.2","rollup-plugin-terser":"^7.0.2","ts-jest":"^27.0.3","ts-node":"^10.1.0","tslib":"^2.3.0","typescript":"^4.3.0"},"gitHead":"6e7140b4cd6ff76e3b83cd8fa168a67ac6572131","_id":"@redux-ts-starter-kit/slice@3.0.7-alpha.0","_nodeVersion":"16.3.0","_npmVersion":"lerna/4.0.0/node@v16.3.0+x64 (win32)","dist":{"integrity":"sha512-xYGS9M/8E+bCSeCOgc+YG56HXmMHHs+DBBtd+SDqgqZv0boM/YikgiOVwv74LtAJasYsZNBaxNcbUd0/CLRiYg==","shasum":"e6d8c1fc7675e09a30ae5085bb8a7a8d96f1a334","tarball":"https://registry.npmjs.org/@redux-ts-starter-kit/slice/-/slice-3.0.7-alpha.0.tgz","fileCount":14,"unpackedSize":86335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBcvsCRA9TVsSAnZWagAA1qEP/3ONgBkGUvU+rvhZost6\n/8/pFeqFZP7e2aBoqlVC2lzq0huRvwd5aaKRhZim7wepJM4xCf06upU08y8o\nagWTTH+JbUqV4E2pygm5MDqS8JqLyjlo2IK8TpCnvBt8v5CNy2CvrYqPBS2U\n842CLQu68ITlR/ga8iZZABvkLdCBZh/QpJjL4uUkIVbucJJua6mNAW7oOd6Y\ndY9BclmiaCr0/KVVUEHkD/y/+AJNaWyEpauBZJVxVs+7+JymA8eqKj+g8yYW\nRxcDoSRyXSBFsnf66xO3NwYvXxIGmXY7ONO/oI3cQVeNQKIDy4SvOmLgOfom\neSNwgRbHTEB8gkwtJkmOQzcYNxGvLQVSFdMJaby3wENbgmz8rrtsQP7V5rBW\ndWVL+amtlutZcfHw90OncMgjaynG/rBJhAWUon04kKYLUXT+bJYdKpKcPddr\nRrWUfK8U83eVW6f/YPRNvtPLzH9N+u0iDlbNdCHU9XIL5TYThJaPtB1HtXrZ\nGsvmS6a/J0UADCzLn1Vjxh45s5bVCAd2PQOjK2SM1VI8BfSMp/vjm5Ig6B0s\nnqiv9bBJt+f+am9TYppo7uN3Y+KMHbRC1iSsQ8TPwqmcF8LeCWIJx4fL0Zqi\nsTInSzw0SF6RssV+chJsYpQc3E1NgCvswZz4CTeEws8qcWwVAl9xLhnouecK\ndR4D\r\n=dZQO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGJadOoO4EjZzvzUPq6Q3sTnFgyQQTlh47fSvRtHECEbAiBqXztaT6Tly7Qn9mnDJgNg6iC5oiox1ZQbHjs1bfS9aQ=="}]},"_npmUser":{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"},"directories":{},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slice_3.0.7-alpha.0_1627769836312_0.23888581992091962"},"_hasShrinkwrap":false}},"time":{"created":"2019-01-04T10:04:51.809Z","0.0.2-alpha.3":"2019-01-04T10:04:52.837Z","modified":"2022-04-06T19:00:27.847Z","0.0.2-alpha.4":"2019-01-04T10:21:09.353Z","0.1.0-alpha.1":"2019-01-04T12:39:40.816Z","0.1.0-alpha.3":"2019-01-04T13:12:03.804Z","0.2.0-alpha.0":"2019-01-04T16:42:51.088Z","1.0.1-alpha.0":"2019-01-04T23:44:33.343Z","1.0.1-alpha.1":"2019-01-04T23:54:49.587Z","1.0.2-alpha.0":"2019-01-05T11:14:15.290Z","1.0.2-alpha.1":"2019-01-05T11:42:11.996Z","1.0.2-alpha.2":"2019-01-05T12:35:30.423Z","0.0.1":"2019-01-05T12:45:51.782Z","0.1.0":"2019-01-05T16:03:19.085Z","0.1.1":"2019-01-05T19:32:38.894Z","0.1.2":"2019-01-05T20:42:26.197Z","0.1.4":"2019-01-05T22:49:57.088Z","0.1.5":"2019-01-05T23:25:03.699Z","0.1.6":"2019-01-05T23:35:14.242Z","0.1.7":"2019-01-06T01:32:15.902Z","0.1.8":"2019-01-06T10:56:29.312Z","0.1.9":"2019-01-06T13:20:21.666Z","0.1.11":"2019-01-06T14:16:16.699Z","0.1.12":"2019-01-07T19:25:05.722Z","0.1.13":"2019-01-07T20:12:34.291Z","0.2.0":"2019-01-12T18:21:51.170Z","0.3.0-alpha.0":"2019-01-13T01:47:54.518Z","0.3.0-alpha.1":"2019-01-13T02:15:20.925Z","0.2.1":"2019-01-13T02:20:13.738Z","1.1.0-alpha.0":"2019-01-13T21:54:16.751Z","1.1.0-alpha.1":"2019-01-13T22:07:49.124Z","1.1.0-alpha.2":"2019-01-13T22:33:41.675Z","1.1.0-alpha.3":"2019-01-18T21:30:48.331Z","1.1.1-alpha.0":"2019-01-18T21:47:58.909Z","1.0.0":"2019-01-18T22:06:28.179Z","1.0.1":"2019-01-18T22:36:16.183Z","2.0.0-alpha.1":"2019-02-09T17:13:23.557Z","2.0.0-alpha.2":"2019-02-09T18:19:01.702Z","2.0.0-alpha.3":"2019-02-11T17:33:07.014Z","2.0.0-alpha.4":"2019-02-11T17:52:51.946Z","2.0.0-alpha.6":"2019-04-17T00:58:40.286Z","2.0.0-alpha.7":"2019-05-10T22:41:53.199Z","2.0.0":"2019-05-11T11:00:33.856Z","2.0.1":"2019-05-12T23:04:45.633Z","3.0.0-alpha.0":"2021-07-26T22:49:23.135Z","3.0.1-alpha.0":"2021-07-27T21:39:27.107Z","3.0.2-alpha.0":"2021-07-27T22:28:42.481Z","3.0.3-alpha.0":"2021-07-28T22:39:37.862Z","3.0.4-alpha.0":"2021-07-28T23:35:29.229Z","3.0.5-alpha.0":"2021-07-31T20:23:13.233Z","3.0.6-alpha.0":"2021-07-31T21:10:45.445Z","3.0.7-alpha.0":"2021-07-31T22:17:16.470Z"},"maintainers":[{"name":"dudeonyx","email":"umeayo.o.h@gmail.com"}],"description":"reduce redux boilerplate","homepage":"https://github.com/Dudeonyx/redux-ts-starter-kit#readme","keywords":["react","redux","boilerplate","typescript","reducers","createSlice","react-redux","javascript"],"repository":{"type":"git","url":"git+https://github.com/Dudeonyx/redux-ts-starter-kit.git"},"author":{"name":"Umeayo Onyekachukwu","email":"umeayo.o.h@gmail.com"},"bugs":{"url":"https://github.com/Dudeonyx/redux-ts-starter-kit/issues"},"license":"MIT","readme":"# @redux-ts-starter-kit/slice [![Build Status](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit.svg?branch=master)](https://travis-ci.org/Dudeonyx/redux-ts-starter-kit)\r\n\r\n## A simple set of tools to make using Redux easier\r\n\r\n### Installation\r\n\r\n`npm install @redux-ts-starter-kit/slice`\r\n\r\n### Note\r\n\r\nThis package only includes tools for simplifying the creation of slice reducers, it does not ship with `redux` or any of the tools to automate the generation of a redux store with enhancers and middleware.\r\n\r\nIf you require such tools see [@redux-ts-starter-kit/core](https://github.com/Dudeonyx/redux-ts-starter-kit/tree/master/packages/core)\r\n\r\n### Purpose\r\n\r\nOne of the biggest complaints developers have with redux is the amount of boilerplate and new concepts they have to learn to use it. `@redux-ts-starter-kit/slice` attempts to simplify the boilerplate by automatically configuring actions, reducers, and selectors. The way it works is `@redux-ts-starter-kit/slice` will take a list of functions that correspond to how state should be updated and then create action types, action creators, and basic selectors for the developer to use. This library tries to not make too many assumptions about how developers use redux. It does not do anything magical, simply automates the repetitive tasks with redux.\r\n\r\nUnder the hood every reducer created by `@redux-ts-starter-kit/slice` leverages immer to update the store, which means reducers are allowed to mutate the state directly.\r\n\r\n## Features\r\n\r\n- First-class typescript support.\r\n- Automatically creates actions, reducer, and selector(s).\r\n- Reducers leverage `immer` which makes updating state easy.\r\n- When stringifying action creators they return the action type.\r\n- Helper functions for manually creating actions and reducers.\r\n- Reducers do not receive entire action object, only the payload which simplifies things.\r\n- Type inferrence and generation, minimizing the need to manually define types.\r\n- Create computed selectors that are automatically memoized using the wonderful [memoize-state](https://github.com/theKashey/memoize-state) lib.\r\n\r\n## Inspirations\r\n\r\nThis library was heavily inspired by [autodux](https://github.com/ericelliott/autodux), [robodux](https://github.com/neurosnap/robodux) and [redux-starter-kit](https://github.com/markerikson/redux-starter-kit).\r\n\r\n## Example\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { createStore, combineReducers } from 'redux';\r\n\r\nconst counterSlice = createSlice({\r\n  initialState: 0,\r\n  cases: {\r\n// the type of `state` param is automatically inferred from the initialState\r\n    increment: state => state + 1,\r\n    incrementBy: (state, payload: number) => state + payload,\r\n    decrement: state => state - 1,\r\n    decrementBy: (state,payload: number) => state - payload,\r\n    multiply: (state, payload: number) => state * payload,\r\n  },\r\n});\r\n\r\ninterface User {   // state slice/initial state interface\r\n  name: string;\r\n}\r\n\r\nconst initialUserState: User = {\r\n  name: '',\r\n}\r\n\r\nconst userSlice = createSlice({\r\n  initialState: initialUserState,\r\n  cases: {\r\n    setUserName: (state, payload: string) => {\r\n      state.name = payload;\r\n    },\r\n  }\r\n})\r\n\r\nconst rootReducer = combineReducers({\r\n    counter: counterSlice.reducer,\r\n    user: userSlice.reducer,\r\n  })\r\n\r\nconst store = createStore(rootReducer)\r\n// After creating the store the `mapSelectorsTo` util can be used to map the selectors to the correct path.\r\n\r\nconst counterSelectors = counterSlice.mapSelectorsTo('counter');\r\nconst userSelectors = userSlice.mapSelectorsTo('user');\r\n\r\nstore.dispatch(counterSlice.actions.increment());\r\n// New State -> { counter: 1, user: { name: '' } }\r\n\r\nstore.dispatch(counterSlice.actions.incrementBy(10));\r\n// New State -> { counter: 11, user: { name: '' } }\r\n\r\nstore.dispatch(counterSlice.actions.multiply(3));\r\n// New State -> { counter: 33, user: { name: '' } }\r\n\r\nstore.dispatch(counterSlice.actions.decrement());\r\n// New State -> { counter: 32, user: { name: '' } }\r\n\r\nstore.dispatch(counterSlice.actions.decrementBy(8));\r\n// New State -> { counter: 26, user: { name: '' } }\r\n\r\nconsole.log(`${counterSlice.actions.decrement}`);\r\n// -> 'decrement'\r\n\r\nstore.dispatch(userSlice.actions.setUserName('eric'));\r\n// New State -> { counter: 6, user: { name: 'eric' } }\r\n\r\nconst state = store.getState();\r\nconsole.log(counterSelectors.selectSlice(state));\r\n// -> 6\r\nconsole.log(userSelectors.selectSlice(state));\r\n// -> { name: 'eric' }\r\n\r\nconsole.log(userSelectors.name(state));\r\n// -> 'eric'\r\n```\r\n\r\n## createSlice API\r\n\r\nA function that accepts an initial state and an object whose methods are case reducers, and automatically generates action creators, action types, and selectors that correspond to the reducers and state.\r\n\r\nThe reducers will be wrapped in the `createReducer()` utility, and so they can safely \"mutate\" the state they are given.\r\n\r\n`createSlice` also accepts the following optional arguments:\r\n\r\n- typeOverrides\r\n- computed.\r\n\r\n```typescript\r\nfunction createSlice({\r\n    // A object of function that will be used as cases for the returned reducer,\r\n    // is used to generate action creators that trigger the corresponding case\r\n    cases: {\r\n      [name: string]: (state: S, payload: P) => S | void | undefined\r\n    },\r\n    // The initial Slice State, same as normal reducer\r\n    initialState: S,\r\n})\r\n```\r\n\r\n### General Usage\r\n\r\n```typescript\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\n\r\n  interface FormState {\r\n    name: string;\r\n    surname: string;\r\n    middlename: string;\r\n  }\r\n\r\n\r\n  const formInitialState: FormState = {\r\n    name: '',\r\n    surname: '',\r\n    middlename: ''\r\n  };\r\n\r\n  const formSlice = createSlice({\r\n    initialState: formInitialState,\r\n    cases: {\r\n      setName: (state, payload: string) => {\r\n        state.name = payload;\r\n      },\r\n      setSurname: (state, payload: string) => {\r\n        state.surname = payload;\r\n      },\r\n      setMiddlename: (state, payload: string) => {\r\n        state.middlename = payload;\r\n      },\r\n      resetForm: () => formInitialState\r\n    },\r\n  });\r\n```\r\n\r\n### Arguments\r\n\r\n`createSlice` accepts a single argument object with the following fields:\r\n\r\n#### `initialState` *required*\r\n\r\nThe state that the reducer is initialized with, same usage as standard reducer.\r\n\r\n#### `cases` *required*\r\n\r\nAn object whose methods represent the cases the generated reducer handles, can be thought of as the equivalent of `switch-case` statements in a standard reducer.\r\n\r\n- Each method is equivalent to a standard switch case statement in a standard reducer.\r\n- Each method receives the `state` as it's first argument followed by the action payload.\r\n- Each method can be thought of as a `caseReducer`.\r\n- Each method can mutate the state directly as it uses `immer` behind the scenes to make it immutable.\r\n- Each method is used to make an action creator of the same name.\r\n\r\n_note: the second argument does not have to be called `payload` even though it is in actuality the action payload. You can name it whatever you want_\r\n\r\n```ts\r\ntype Todo = { title: string, completed: boolean };\r\n\r\nconst todoSlice = createSlice({\r\n  initialState: [] as Todo[],\r\n  cases: {\r\n    addTodo: (state, title: string) => {\r\n      state.push({ title, completed: false })\r\n    },\r\n    deleteTodo: (state, index: number) => {\r\n      state.splice(index, 1);\r\n    },\r\n    setCompleted: (state, index: number) => {\r\n      state[index].completed = true;\r\n    },\r\n    deleteAllTodos: () => [],  // sets the state to an empty array\r\n  }\r\n})\r\n```\r\n\r\nNote:\r\n\r\n- No need to type cast the state argument, its type is automatically inferred from the initialState field.\r\n\r\n- The returned action creators accept only a single argument as payload, i.e a case in the form `(state,payload1,payload2)=>{}` is invalid. If you need to pass multple arguments use an object or array to pass them.\r\n\r\n#### `typeOverrides` *not required*\r\n\r\nType overrides allow the user to override the `type` which case reducers respond to, which by default is simply the name of the case reducer.\r\n\r\ni.e the `addTodo` case reducer in `cases: { addTodo: (state, payload) => {//...}, }` would by default respond to actions of type `'addTodo'` e.g. `{ type: 'addTodo', payload: 'Jog' }`.\r\n\r\nThis can be changed thanks to the `typeOverrides` option.\r\n\r\nFor example to change the type to `'ADD_A_TODO'` instead see the example below.\r\n\r\nIt should be noted that the action creators `createSlice` generates automatically account for typeOverrides\r\n\r\n ```ts\r\ntype Todo = { title: string, completed: boolean };\r\n\r\nconst todoSlice = createSlice({\r\n  initialState: [] as Todo[],\r\n  cases: {\r\n    addTodo: (state, title: string) => {\r\n      state.push({ title, completed: false })\r\n    },\r\n    deleteTodo: (state, index: number) => {\r\n      state.splice(index,1);\r\n    },\r\n    setCompleted: (state, index: number ) => {\r\n      state[index].completed = true;\r\n    },\r\n    deleteAllTodos: () => [],\r\n  },\r\n  typeOverrides: {\r\n    addTodo: 'ADD_A_TODO',\r\n  }\r\n})\r\n\r\nconsole.log(todoSlice.actions.addTodo('Jog in the morning!'))\r\n// `{ type: 'ADD_A_TODO', payload: 'Jog in the morning!'}`\r\n// the default type is overriden!\r\n\r\nconsole.log(todoSlice.actions.deleteTodo(1))\r\n// `{ type: 'deleteTodo', payload: 1 }`\r\n// the default type is untouched\r\n\r\n```\r\n\r\nThis feature is also useful for cases where you need to change the type due to some reason like clashes but you don't want to have to rename all your action creators and their imports.\r\n\r\n#### computed *not required*\r\n\r\nComputed selectors for the slice, will be memoized using `memoize-state` lib. These selectors will only be recomputed when one of the used `endpoints` of the state changes, see the github page [here](https://github.com/theKashey/memoize-state) for more details.\r\n\r\nThe computed selectors can be accessed with the `mapSelectorsTo` util alongside the regular selectors.\r\n\r\n_note: For typescript users only, if using `this` to access other selectors, ReturnType should be explicit to prevent `typescript` from mistaking the type as being circular and giving strange errors. Javascript users have nothing to worry about_\r\n\r\n```ts\r\ntype Todo = { title: string, completed: boolean };\r\n\r\nconst todoSlice = createSlice({\r\n  initialState: [] as Todo[],\r\n  computed: {\r\n    getCompletedTodos(state) {\r\n      return state.filter(todo => todo.completed)\r\n    },\r\n    getCompletedTodosLength(state): number {\r\n      return this.getCompletedTodos(state).length;\r\n    },\r\n  }\r\n  cases: {\r\n    addTodo: (state, title: string) => {\r\n      state.push({ title, completed: false })\r\n    },\r\n    deleteTodo: (state, index: number) => {\r\n      state.splice(index,1);\r\n    },\r\n    setCompleted: (state, index: number ) => {\r\n      state[index].completed = true;\r\n    },\r\n    deleteAllTodos: () => [],\r\n  },\r\n  typeOverrides: {\r\n    addTodo: 'ADD_A_TODO',\r\n  }\r\n})\r\n```\r\n\r\n### Return value\r\n\r\ncreateSlice return an object with the following fields\r\n\r\n#### reducer\r\n\r\nA reducer function, works exactly the same as a standard reducer\r\n\r\n#### actions\r\n\r\nAn object of action creators with the same name as the corresponding case.\r\nYou can see this in action in the todoSlice example above, it's actions object has the following type signature\r\n\r\n```typescript\r\n\r\n// type signature of `todoSlice.actions`\r\n{\r\n  addTodo: {\r\n    (payload: string): PayloadAction<string, 'ADD_A_TODO'>;\r\n    type: 'ADD_A_TODO';\r\n  };\r\n  deleteTodo: {\r\n    (payload: number): PayloadAction<number, 'deleteTodo'>;\r\n    type: 'deleteTodo';\r\n  };\r\n  setCompleted: {\r\n    (payload: number): PayloadAction<number, 'setCompleted'>;\r\n    type: 'setCompleted';\r\n  };\r\n  deleteAllTodos: {\r\n    (): PayloadAction<undefined, 'deleteAllTodos'>;\r\n    type: 'deleteAllTodos';\r\n  };\r\n}\r\n\r\n```\r\n\r\n#### mapSelectorsTo\r\n\r\nA utility function that receives a `path`(s) arg and generates selector(s) mapped to that path, always includes a selector called selectSlice that selects it's slice state from the redux state, if the initial state is an object additional selectors are generated with the same names as the corresponding initial state keys.\r\n\r\nIncludes computed selectors if present.\r\n\r\n_note: it can receive multiple path arguments in the event of a deeply nested state slice_\r\n\r\nE.g\r\n\r\n```ts\r\nimport { createSlice } from '@redux-ts-starter-kit/slice';\r\nimport { createStore, combineReducers } from 'redux';\r\n\r\n\r\nconst namesInitialState = {\r\n  firstName: '',\r\n  LastName: '',\r\n  middleName: '',\r\n};\r\n\r\nconst namesSlice = createSlice({\r\n  initialState: namesInitialState,\r\n  computed: {\r\n    getFullName: state =>\r\n      `${state.firstName} ${state.middleName} ${state.LastName}`,\r\n  }\r\n  cases: {\r\n    setFirstName: (state, payload: string) => {\r\n      state.firstName = payload;\r\n    },\r\n    setLastname: (state, payload: string) => {\r\n      state.lastName = payload;\r\n    },\r\n    setMiddlename: (state, payload: string) => {\r\n      state.middleName = payload;\r\n    },\r\n    resetForm: () => namesInitialState,\r\n  },\r\n});\r\n\r\nconst detailsReducer = combineReducer({\r\n  names: namesSlice.reducer,\r\n  other: //...,\r\n})\r\n\r\nconst rootReducer = combineReducers({\r\n  todos: //...,\r\n  counter: //...,\r\n  details: detailsReducer,\r\n});\r\n\r\nconst store = createStore(rootReducer);\r\n\r\nconst namesSelectors = formSlice.mapSelectorsTo('details', 'names');\r\n\r\n// later...\r\n\r\nconst sampleReduxState = {\r\n  todos: [\r\n    { title: 'Jog in the morning!', completed: false }\r\n  ],\r\n  counter: 15,\r\n  details: {\r\n    names: {\r\n      firstName: \"John\",\r\n      LastName: \"Doe\",\r\n      middleName: \"Wayne\",\r\n    },\r\n    others: {\r\n      age: 28,\r\n      profession: 'Programmer',\r\n      //...\r\n    },\r\n  },\r\n}\r\n\r\nconsole.log(namesSelectors.selectSlice(sampleReduxState));\r\n// {\r\n//   firstName: \"John\",\r\n//   LastName: \"Doe\",\r\n//   middleName: \"Wayne\",\r\n// }\r\n\r\n// note: the `firstName`, `middleName` and `lastName` selectors where automatically created based on the initialState given for the slice.\r\nconsole.log(namesSelectors.firstName(sampleReduxState));\r\n// \"John\"\r\n\r\nconsole.log(namesSelectors.middleName(sampleReduxState));\r\n// \"Wayne\"\r\n\r\nconsole.log(namesSelectors.lastName(sampleReduxState));\r\n// \"Doe\"\r\n\r\n// computed selectors are included.\r\nconsole.log(namesSelectors.fullName(sampleReduxState));\r\n// \"John Wayne Doe\"\r\n\r\n// sample useage in mapStateToProps\r\n\r\nconst mapStateToProps = (state: ReduxState) =>({\r\n  firstName: namesSelectors.firstName(state),\r\n  middleName: namesSelectors.middleName(state),\r\n  lastName: namesSelectors.lastName(state),\r\n  fullName: namesSelectors.fullName(state),\r\n})\r\n\r\nexport default connect(mapStateToProps)(NameComponent);\r\n```\r\n\r\n## Other Exports\r\n\r\n### createAction/createTypeSafeAction\r\n\r\nThis is the helper function that `createSlice` uses to create an action. It is also useful to use\r\nwhen not using createSlice because when stringifying the function it will return the action type.\r\nThis allows developers to not have to worry about passing around action types, instead they simply\r\npass around action creators for reducers, sagas, etc.\r\n\r\n```typescript\r\nimport { createAction } from '@redux-ts-starter-kit/slice';\r\n\r\nconst increment = createAction('INCREMENT');\r\n// or for typescript users who need strictly typed action creators\r\nconst increment = createTypeSafeAction('INCREMENT')<number>();\r\n\r\nconsole.log(increment);\r\n ->> 'INCREMENT'\r\nconsole.log(increment(2));\r\n->> { type: 'INCREMENT', payload: 2 };\r\n\r\nconst storeDetails = createAction('STORE_DETAILS');\r\n// or for ts users\r\nconst storeDetails = createTypeSafeAction('STORE_DETAILS')<{name: string; surname: string}>();\r\nconsole.log(storeDetails);\r\n->> 'STORE_DETAILS'\r\nconsole.log(storeDetails({ name: 'John', surname: 'Doe' }));\r\n ->> { type: 'STORE_DETAILS', payload: {name: 'John', surname: 'Doe'} };\r\n```\r\n\r\n### createReducer\r\n\r\nThis is the helper function that `createSlice` uses to create a reducer. This function maps action types\r\nto reducer functions. It will return a reducer.\r\n\r\n```typescript\r\nimport { createReducer, createAction } from '@redux-ts-starter-kit/slice';\r\n\r\nconst multiply = createTypeSafeAction('MULTIPLY')<number>()\r\n\r\nconst counter = createReducer({\r\n  initialState: 0,\r\n  cases: {\r\n    INCREMENT: (state) => state + 1,\r\n    DECREMENT: (state) => state - 1,\r\n    [multiply.type]: (state, payload) => state * payload,\r\n  }\r\n});\r\n\r\nconsole.log(counter(2, { type: 'MULTIPLY': payload: 5 }));\r\n// -> 10\r\n\r\n// OR\r\n\r\nconsole.log(counter(2, multiply(5)));\r\n// -> 10\r\n```","readmeFilename":"README.md"}