{"_id":"k-redux-factory","_rev":"28-8aa1f7519725ce0976012ab6f445402e","name":"k-redux-factory","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","dist-tags":{"latest":"6.0.6","next":"6.0.0-rc5"},"versions":{"3.7.0":{"name":"k-redux-factory","version":"3.7.0","main":"index.js","helpers":"helpers.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/alakarteio/k-redux-factory.git"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"peerDependencies":{"lodash":"^4.17.4"},"devDependencies":{"babel-cli":"^6.24.1","babel-eslint":"^7.2.3","babel-jest":"^20.0.3","babel-plugin-external-helpers":"^6.22.0","babel-plugin-lodash":"^3.2.11","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-preset-es2015":"^6.24.1","babel-preset-es2015-rollup":"^3.0.0","coveralls":"^2.13.1","cross-env":"^5.0.1","eslint":"~3.19.0","eslint-config-airbnb":"^15.0.1","eslint-plugin-babel":"^4.1.1","eslint-plugin-import":"^2.3.0","eslint-plugin-jsx-a11y":"^5.0.3","eslint-plugin-react":"^7.1.0","jest":"^20.0.4","lodash":"^4.17.4","npm-run-all":"^4.0.2","rollup":"^0.43.0","rollup-plugin-babel":"^2.7.1","rollup-plugin-commonjs":"^8.0.2","rollup-plugin-uglify":"^2.0.1"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","build:core":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.js","build:helpers":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.helpers.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"babel":{"presets":[["es2015",{"modules":false}]],"plugins":["transform-object-rest-spread","lodash"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["es2015",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"]}},"dependencies":{},"gitHead":"af3b6664cf35a12c6140104f5c4a6f32c4070034","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/alakarteio/k-redux-factory#readme","_id":"k-redux-factory@3.7.0","_npmVersion":"5.4.2","_nodeVersion":"8.8.1","_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"dist":{"integrity":"sha512-sg7yhbxiO0idPeI9LT09N3Lm/5QQCX/Mv57QEO+TZ+q8JFMUU+ekgb5HfPVoXfwfj/nzBsE0uVXI5busjz894A==","shasum":"657b8428a4725151295b81abd7c46d2e75732153","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-3.7.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCL3Ji/3wO/Zi4nfktPtKGCTaGOb4i2T0MAy2wOv8mPEgIhAOh0Z9nCsIg8ARe5UVs0hNNJM1qAuD8kbmTAXZRXtJjH"}]},"maintainers":[{"name":"fabienjuif","email":"fabien.juif@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory-3.7.0.tgz_1510053614827_0.815724219661206"},"directories":{}},"4.0.0":{"name":"k-redux-factory","version":"4.0.0","main":"index.js","helpers":"helpers.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/alakarteio/k-redux-factory.git"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"peerDependencies":{"lodash":"^4.17.4"},"devDependencies":{"babel-cli":"^6.24.1","babel-eslint":"^7.2.3","babel-jest":"^20.0.3","babel-plugin-external-helpers":"^6.22.0","babel-plugin-lodash":"^3.2.11","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-preset-es2015":"^6.24.1","babel-preset-es2015-rollup":"^3.0.0","coveralls":"^2.13.1","cross-env":"^5.0.1","eslint":"~3.19.0","eslint-config-airbnb":"^15.0.1","eslint-plugin-babel":"^4.1.1","eslint-plugin-import":"^2.3.0","eslint-plugin-jsx-a11y":"^5.0.3","eslint-plugin-react":"^7.1.0","jest":"^20.0.4","lodash":"^4.17.4","npm-run-all":"^4.0.2","rollup":"^0.43.0","rollup-plugin-babel":"^2.7.1","rollup-plugin-commonjs":"^8.0.2","rollup-plugin-uglify":"^2.0.1"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","build:core":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.js","build:helpers":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.helpers.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"babel":{"presets":[["es2015",{"modules":false}]],"plugins":["transform-object-rest-spread","lodash"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["es2015",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"]}},"dependencies":{},"gitHead":"667bbdae7ed78798e0e7a6ae643a22f8c5613e69","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/alakarteio/k-redux-factory#readme","_id":"k-redux-factory@4.0.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"dist":{"integrity":"sha512-UYVRHaenei3a+aIoc+9kwgaI+/p7BPQ/V7KgsnJJbhRZt4pIOYE8dyV+9BlmfXQ5mtcDnvE1MuEPIIXylx60gA==","shasum":"949f72b4231dc95a829ede121ca1139c37c63961","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-4.0.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQ71/baXPjnn+oYaaPZinMzm1mYYrPzyLtQtsOn9osEAiEA1liRAdRGRGtcHrjWNOvOscAJtat5a2EmGuDln2H+jR4="}]},"maintainers":[{"name":"fabienjuif","email":"fabien.juif@gmail.com"},{"name":"guillaume.crespel","email":"guillaume.crespel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory-4.0.0.tgz_1511360322185_0.5977465871255845"},"directories":{}},"4.1.0":{"name":"k-redux-factory","version":"4.1.0","main":"index.js","helpers":"helpers.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/alakarteio/k-redux-factory.git"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"peerDependencies":{"lodash":"^4.17.4"},"devDependencies":{"babel-cli":"^6.24.1","babel-eslint":"^7.2.3","babel-jest":"^20.0.3","babel-plugin-external-helpers":"^6.22.0","babel-plugin-lodash":"^3.2.11","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-preset-es2015":"^6.24.1","babel-preset-es2015-rollup":"^3.0.0","coveralls":"^2.13.1","cross-env":"^5.0.1","eslint":"~3.19.0","eslint-config-airbnb":"^15.0.1","eslint-plugin-babel":"^4.1.1","eslint-plugin-import":"^2.3.0","eslint-plugin-jsx-a11y":"^5.0.3","eslint-plugin-react":"^7.1.0","jest":"^20.0.4","lodash":"^4.17.4","npm-run-all":"^4.0.2","rollup":"^0.43.0","rollup-plugin-babel":"^2.7.1","rollup-plugin-commonjs":"^8.0.2","rollup-plugin-uglify":"^2.0.1"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","build:core":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.js","build:helpers":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.helpers.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"babel":{"presets":[["es2015",{"modules":false}]],"plugins":["transform-object-rest-spread","lodash"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["es2015",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"]}},"dependencies":{},"gitHead":"81e285f58e1e6bad47305c783dad88820d0e4e20","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/alakarteio/k-redux-factory#readme","_id":"k-redux-factory@4.1.0","_shasum":"82f95c8777926ee4bcac70c3fd7ec98c25c700ae","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"guillaume.crespel","email":"guillaume.crespel@gmail.com"},"dist":{"shasum":"82f95c8777926ee4bcac70c3fd7ec98c25c700ae","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-4.1.0.tgz","integrity":"sha512-tW7yh3tV/yM+KCZ8u4r67Ebebj4xJtvoRfZ2/zMCGYppYoA+RZS74IgOqPSleA8x69keQixX7Dq5QZg/y0VNeA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyMIHKUxmPincnFJLk9cz7Ip+1HRMJc//EbeQsYebYRQIgfY7uuj0OB7ypMBxjjDbu7eZl2WOWzbrLKeQoVbmvu7k="}]},"maintainers":[{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"},{"email":"fabien.juif@gmail.com","name":"fabienjuif"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory-4.1.0.tgz_1516121866656_0.9721526713110507"},"directories":{}},"4.1.1":{"name":"k-redux-factory","version":"4.1.1","main":"index.js","helpers":"helpers.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/alakarteio/k-redux-factory.git"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"peerDependencies":{"lodash":"^4.17.4"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^2.13.1","cross-env":"^5.0.1","eslint":"~3.19.0","eslint-config-airbnb":"^15.0.1","eslint-plugin-babel":"^4.1.1","eslint-plugin-import":"^2.3.0","eslint-plugin-jsx-a11y":"^5.0.3","eslint-plugin-react":"^7.1.0","jest":"^20.0.4","lodash":"^4.17.4","npm-run-all":"^4.0.2","rollup":"^0.54.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^8.2.6","rollup-plugin-uglify":"^2.0.1"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","build:core":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.js","build:helpers":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.helpers.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"]}},"dependencies":{},"gitHead":"e93b91390cf571982717228800d01f88895ddfb9","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/alakarteio/k-redux-factory#readme","_id":"k-redux-factory@4.1.1","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"dist":{"integrity":"sha512-ZMrL2zqAHamSOlN2xp47gszAy7eedtC6murfnFqVqCvwXyBSywuQUnc51OUmJGwGNC6l1D4tfe+41BdspgoF1w==","shasum":"619becdc074cb1dbd8cbdf16fe97feb08426c992","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-4.1.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDswS0tuzJEMr4SwqqJHQPeJJTjTL943S6kjc23r4Pr2wIhAJUDFzKyY0sa7zg0fNHMYLZnoGtfaJtGNV7L5AuhIMG6"}]},"maintainers":[{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"},{"email":"fabien.juif@gmail.com","name":"fabienjuif"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory-4.1.1.tgz_1516282738146_0.7033144044689834"},"directories":{}},"4.1.2":{"name":"k-redux-factory","version":"4.1.2","main":"index.js","helpers":"helpers.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/alakarteio/k-redux-factory.git"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"peerDependencies":{"lodash":"^4.17.4"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^2.13.1","cross-env":"^5.0.1","eslint":"~3.19.0","eslint-config-airbnb":"^15.0.1","eslint-plugin-babel":"^4.1.1","eslint-plugin-import":"^2.3.0","eslint-plugin-jsx-a11y":"^5.0.3","eslint-plugin-react":"^7.1.0","jest":"^20.0.4","lodash":"^4.17.4","npm-run-all":"^4.0.2","rollup":"^0.54.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^8.2.6","rollup-plugin-uglify":"^2.0.1"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","build:core":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.js","build:helpers":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.helpers.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"]}},"dependencies":{},"gitHead":"1458760c45f40d75d097538a879043c8f0d205bc","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/alakarteio/k-redux-factory#readme","_id":"k-redux-factory@4.1.2","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"dist":{"integrity":"sha512-9lvnncmCm0iq1SMyAiNHkSfl1llqg1l1CSGSj47O4tlewnF5RC5mRUCiYBacQFRIxPwh7GHBLxuzYbZC7wKp+g==","shasum":"c05ceb998dd07624523fde414196111f157fd98f","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-4.1.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsIqNq93wRQoS/jzVcGu9tEHvWFAeJ5ItN7HkJw/V87wIgeb0eWBvbBp2w8G2+VFLZQo3Jz43hV4GGNHe80OWMHAg="}]},"maintainers":[{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"},{"email":"fabien.juif@gmail.com","name":"fabienjuif"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory-4.1.2.tgz_1516531123365_0.914305895101279"},"directories":{}},"4.2.0":{"name":"k-redux-factory","version":"4.2.0","main":"index.js","helpers":"helpers.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/alakarteio/k-redux-factory.git"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"peerDependencies":{"lodash":"^4.17.4"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^2.13.1","cross-env":"^5.0.1","eslint":"~3.19.0","eslint-config-airbnb":"^15.0.1","eslint-plugin-babel":"^4.1.1","eslint-plugin-import":"^2.3.0","eslint-plugin-jsx-a11y":"^5.0.3","eslint-plugin-react":"^7.1.0","jest":"^20.0.4","lodash":"^4.17.4","npm-run-all":"^4.0.2","rollup":"^0.54.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^8.2.6","rollup-plugin-uglify":"^2.0.1"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","build:core":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.js","build:helpers":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.helpers.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"]}},"dependencies":{},"gitHead":"0a4b8a081814b233100f18d735833f7baaf12ed4","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/alakarteio/k-redux-factory#readme","_id":"k-redux-factory@4.2.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"dist":{"integrity":"sha512-aDcEQ7aKx9M3f/8Io0fa4omolYVvL4xQVWl3tHZdj30EJiTl43byK+tykYja5vFfcJ0/tz+Kk1Sa98/rJfr19A==","shasum":"c3cac1af1e73090cce6d99124030e0356f0e729f","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-4.2.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCI6suRQhzoJRdsM/pfM8nNMcvV9YNr4lKbd8RwMDbsGwIgXCRUZU46SxsczUwlS/kvL2CR/NmHCjNDcR98xbp5R30="}]},"maintainers":[{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"},{"email":"fabien.juif@gmail.com","name":"fabienjuif"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory-4.2.0.tgz_1516791627148_0.10148956486955285"},"directories":{}},"4.3.0":{"name":"k-redux-factory","version":"4.3.0","main":"index.js","helpers":"helpers.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/alakarteio/k-redux-factory.git"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"peerDependencies":{"lodash":"^4.17.4"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^2.13.1","cross-env":"^5.0.1","eslint":"~3.19.0","eslint-config-airbnb":"^15.0.1","eslint-plugin-babel":"^4.1.1","eslint-plugin-import":"^2.3.0","eslint-plugin-jsx-a11y":"^5.0.3","eslint-plugin-react":"^7.1.0","jest":"^20.0.4","lodash":"^4.17.4","npm-run-all":"^4.0.2","rollup":"^0.54.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^8.2.6","rollup-plugin-uglify":"^2.0.1"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","build:core":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.js","build:helpers":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.helpers.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"]}},"dependencies":{},"gitHead":"0a4b8a081814b233100f18d735833f7baaf12ed4","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/alakarteio/k-redux-factory#readme","_id":"k-redux-factory@4.3.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"dist":{"integrity":"sha512-wneeLiUEpYDja7AE37F41+8Dp6BH10GlJodOubwSDtArN4A/RCKTO658JuvmARNttABydCCoMaE8H9yq6qMvbw==","shasum":"81185f08772acecc3d81cf10733f87a5f1901b1c","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-4.3.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIumLYVrg1NN676G0MOuxZm2967n9TY9qKh+D6JYWrbgIgczDs7snOLyeitQag5i+dVUpe+aurb65GiKaVmv5OPVc="}]},"maintainers":[{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"},{"email":"fabien.juif@gmail.com","name":"fabienjuif"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory-4.3.0.tgz_1516791760157_0.5622102052439004"},"directories":{}},"5.0.0":{"name":"k-redux-factory","version":"5.0.0","main":"index.js","helpers":"helpers.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/alakarteio/k-redux-factory.git"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"peerDependencies":{"lodash":"^4.17.4"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^2.13.1","cross-env":"^5.0.1","eslint":"~3.19.0","eslint-config-airbnb":"^15.0.1","eslint-plugin-babel":"^4.1.1","eslint-plugin-import":"^2.3.0","eslint-plugin-jsx-a11y":"^5.0.3","eslint-plugin-react":"^7.1.0","jest":"^20.0.4","lodash":"^4.17.4","npm-run-all":"^4.0.2","rollup":"^0.54.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^8.2.6","rollup-plugin-uglify":"^2.0.1"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","build:core":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.js","build:helpers":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.helpers.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"],"max-len":[2,{"code":200}]}},"dependencies":{},"gitHead":"55e6c601f3a4422a5798a04a62bd54cca0b79ba9","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/alakarteio/k-redux-factory#readme","_id":"k-redux-factory@5.0.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"dist":{"integrity":"sha512-wMWmND7LTXsYIfwbap9Mi2NnmPP3N2KSq3xrerDnclNiZ1w7Ibr8phQlN7+qs+g2Q6L/Tsxn7epmqf1cIctOEg==","shasum":"a9835346d99ee20720d6aab6655d1a51fb0df5df","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-5.0.0.tgz","fileCount":42,"unpackedSize":272684,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6i9Q5Ks0Ofe9t93z+Bon3vNmX4u3LAgX2KDxqnkA+jQIgDBEmdbefEgki/OBXuNgwpqJRsz6F/DjED/y01ugaPlQ="}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_5.0.0_1518008532378_0.339072719372991"},"_hasShrinkwrap":false},"5.0.1":{"name":"k-redux-factory","version":"5.0.1","main":"index.js","helpers":"helpers.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/alakarteio/k-redux-factory.git"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","build:core":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.js","build:helpers":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.helpers.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"peerDependencies":{"lodash":"^4.17.4"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-jest":"^22.2.2","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^3.0.0","cross-env":"^5.0.1","eslint":"~4.17.0","eslint-config-airbnb":"^16.1.0","eslint-plugin-babel":"^4.1.1","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-react":"^7.4.0","jest":"^22.2.2","lodash":"^4.17.4","npm-run-all":"^4.0.2","rollup":"^0.55.5","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^8.2.6","rollup-plugin-uglify":"^3.0.0"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"],"max-len":[2,{"code":200}]}},"dependencies":{},"gitHead":"6be09d87cb88b2c55ab8cd09a5bbc60e058cd4d6","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/alakarteio/k-redux-factory#readme","_id":"k-redux-factory@5.0.1","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"dist":{"integrity":"sha512-pPE1o4NmL0eKKqV5dvXBNxWE+JSiB5ar/fdK86i+4zX2gSzPiDV67tqFFX3p9TL3R1NYFkNEgUI+Bb8KK3j2EQ==","shasum":"1507e0e23570cffa38f358206eb4f83bdf531080","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-5.0.1.tgz","fileCount":42,"unpackedSize":293830,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDr0MuPnuuPofF9LPlCZMXZ4V0Xtiu4LcoWDhNNnawB/QIhAPwY1XnYWwhsKo6CrUG1QmP9x4fyjxjSbeOotOxGUegV"}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_5.0.1_1518259080582_0.3853533577745918"},"_hasShrinkwrap":false},"5.0.2":{"name":"k-redux-factory","version":"5.0.2","main":"index.js","helpers":"helpers.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/alakarteio/k-redux-factory.git"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","build:core":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.js","build:helpers":"cross-env NODE_ENV=build rollup -c ./misc/rollup.config.helpers.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"peerDependencies":{"lodash":"^4.17.4"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-jest":"^22.2.2","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^3.0.0","cross-env":"^5.0.1","eslint":"~4.19.0","eslint-config-airbnb":"^16.1.0","eslint-plugin-babel":"^4.1.1","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-react":"^7.4.0","jest":"^22.2.2","lodash":"^4.17.4","npm-run-all":"^4.0.2","rollup":"^0.57.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.1.0","rollup-plugin-uglify":"^3.0.0"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"],"max-len":[2,{"code":200}]}},"dependencies":{},"gitHead":"8a80535142231dfd701484da2f6ce89bcbd774d9","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/alakarteio/k-redux-factory#readme","_id":"k-redux-factory@5.0.2","_npmVersion":"5.6.0","_nodeVersion":"9.8.0","_npmUser":{"name":"guillaume.crespel","email":"guillaume.crespel@gmail.com"},"dist":{"integrity":"sha512-dLIXn0evtkbH+PXZL+fdeK2TWFULzVqymtuRjiX6slrJ6KzD+VbWEMbp7Q9Mw0aPm0DMDj7uI++99U3hybFzdg==","shasum":"79647d5fc40503d952370d8d35e64aaba7e62e5c","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-5.0.2.tgz","fileCount":42,"unpackedSize":299331,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIByB2ztTL4D7gvOD/90HqpkmvATtIu+ZXfAhHnsjkbTnAiBTfdwBriL4vS7CNbkKfDF5WBO522iDQQ9NwoT2X3f8iA=="}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_5.0.2_1522179036263_0.8502344897442986"},"_hasShrinkwrap":false},"6.0.0-rc1":{"name":"k-redux-factory","version":"6.0.0-rc1","main":"dist/index.js","module":"dist/index.es.js","license":"MIT","repository":{"type":"git","url":"https://github.com/alakarteio/k-redux-factory"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","cmd:build":"microbundle --external all --sourcemap false -f es,cjs -i ","build:core":"yarn cmd:build src/index.js","build:helper":"yarn cmd:build src/helpers.js -o helpers/index.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-jest":"^23.0.1","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^3.0.0","cross-env":"^5.0.1","eslint":"~4.19.0","eslint-config-airbnb":"^16.1.0","eslint-plugin-babel":"^5.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-react":"^7.4.0","jest":"^22.2.2","microbundle":"^0.4.4","npm-run-all":"^4.0.2"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"],"max-len":[2,{"code":200}]}},"dependencies":{},"readmeFilename":"README.md","readme":"# k-redux-factory\n\nFactory of Redux reducers and their associated actions and selectors.\n> Make your Redux code base tinier and simpler to maintain\n\n[![CircleCI](https://circleci.com/gh/alakarteio/k-redux-factory.svg?style=shield)](https://circleci.com/gh/alakarteio/k-redux-factory) [![Coverage Status](https://coveralls.io/repos/github/alakarteio/k-redux-factory/badge.svg?branch=master)](https://coveralls.io/github/alakarteio/k-redux-factory?branch=master) [![NPM Version](https://badge.fury.io/js/k-redux-factory.svg)](https://www.npmjs.com/package/k-redux-factory)\n[![Size](http://img.badgesize.io/alakarteio/k-redux-factory/master/dist/index.js.svg)]() [![Greenkeeper badge](https://badges.greenkeeper.io/alakarteio/k-redux-factory.svg)](https://greenkeeper.io/)\n\n## Contents\n - [Purpose](#purpose)\n - [Why ?](#why)\n - [Installation](#installation)\n - [Documentation](#api)\n - [API](./TYPES.md)\n\n## Purpose\n`k-redux-factory` creates generic reducers, actions and selectors in two lines.\n\n```es6\nimport { keyValue } from 'k-redux-factory'\nexport default keyValue({ path: 'api', name: 'todos' })\n```\nThat's it, you just exported the reducer function and now you can register it through combinerReducer in Redux.\n\nIn this example, we have a `todos` reducer, it has to be combined into `state.api.todos`.\n\nThe default `key` is `id`.\n\nYou can now use it to dispatch actions and select some datas from this reducer:\n```es6\nimport myReducer from './myReducer'\n\n// ...\n// add a todo\ndispatch(myReducer.add({ id: 1, title: 'Apply to some CFP', completed: false })\n\n// ...\n// select a todo\nmyReducer.get(1)(getState())\n```\n\nOne more thing, this lib handle state immutability for you !\n\nClick [right here to see the full API.](./TYPES.md)\n\n## Why\nWe like to write Redux code as simple as possible and use its middlewares to handle real world problems.\nFrom this point of view, our Redux code base is simpler : it's like a key/value store. But one drawback is the amount of duplicated code, each resource has its own reducers, actions and selectors.\n\nWe created this lightweight library, a factory of reducers, actions and selectors, to avoid inconsistency and painful maintainability from our growing Redux code base.\n\n## Installation\n - `yarn add k-redux-factory`\n - `npm i k-redux-factory`\n\n## Documentation\n - [factory](#factory)\n - [actions](#actions)\n - [selectors](#selectors)\n - [helpers](#helpers)\n\n### factory\nYou need to use the factory to get a new set of reducer/actions/selectors :\n```es6\n// modular factory\nimport factory from 'k-redux-factory'\n\n// or - prebuild simple factory\nimport { simple } from 'k-redux-factory'\n\n// or - prebuild simpleObject factory (DEPRECATED)\nimport { simpleObject } from 'k-redux-factory'\n\n// or - prebuild keyValue factory\nimport { keyValue } from 'k-redux-factory'\n```\n\nThere are multiple factories signatures, take you preferred between :\n - `factory(middlewares)(options)` : this is the root factory, with middlewares\n - `factory(options)` : this is the root factory, without middlewares\n - `simple(middlewares)(options)` : this is a `simple` factory with middlewares\n - `simple(options)` : this is a `simple` factory without middlewares\n - *DEPRECATED* `simpleObject(middlewares)(options)` : this is a `simpleObject` factory with middlewares\n - *DEPRECATED* `simpleObject(options)` : this is a `simpleObject` factory without middlewares\n - `keyValue(middlewares)(options)` : this is a `keyValue`  factory with middlewares\n - `keyValue(options)` : this is a `keyValue`  factory without middlewares\n\nParameters are :\n - **middlewares** (optional), contain an object with `pre` and `post` fields. Both are an array of middlewares to apply before and after the `core` middleware\n - **options** (mandatory), either a string representating the reducer `name`, either an object with these fields :\n   - **key** (exists only for the `keyValue` type -optional-), the field used to identify your objects (`id` is the default value)\n   - **path** (optional), where the reducer will be combined via `combineReducer`\n     - if empty, the reducer will be register at the root level of the redux state\n     - you can use dot notation, like `api.raw`: your reducer will be combined into `state.api.raw.<your_reducer>`\n   - **name** (mandatory), the reducer name (for instance: `todos`)\n     - it's used to generate actions types\n     - it's used to retrieve informations from selectors\n   - **prefix** (optional) is added to actions to avoid some collisions when there are two reducers with the same name in two distincts paths\n   - **type** (optional) can be `keyValue` or `simpleObject` (default is `keyValue`)\n   - **defaultData** (optional), set the default data value, used by `reset` action and for initialisation (default is an empty object `{}` for `simpleObject` and default hashmap model for `keyValue` - see [keyValue types section](./TYPES.md#state))\n\nExample:\n - this reducer will use `id` as key field\n - it's combined into `state.api.raw`\n - it's name is `todos`\n - have default data\n```es6\nimport factory from 'k-redux-factory'\n\nexport default factory({ path: 'api.raw', name: 'todos' })\n```\n\nData will be stored into `state.api.raw.todos`.\n\n### [Types](./TYPES.md)\nTypes are :\n  - `keyValue` : your state is a hashmap, useful to bind your API to Redux with the following redux state model :\n```es6\n{\n  data: { <key1>: <instance1>, <key2>: <instance2> },\n  array: [<instance1>, <instance2>],\n  keys: [<key1>, <key2>],\n  initialized: true,\n}\n```\n\n  - `simple` : your state is directly your `<instance>`. **This implies that you can not set undefined.**\n  - *DEPRECATED* `simpleObject` : your state is directly your `<instance>`. **This implies that you can not set undefined.**\n\nDefault type is `keyValue`.\n\n### reducer\nThe previous factory returns a function which is a reducer.\nYou just have to combine it like any other reducer :\n```es6\nimport { createStore, combineReducers, compose, applyMiddleware } from 'redux'\n\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// create your Redux store as usual\nconst store = createStore(\n  combineReducers({\n    // [other reducer]\n    api: combineReducers({\n      // [other reducer]\n      raw: combineReducers({\n        // import your reducer into api.raw\n        // since we configured this path\n        todos,\n      }),\n      // [other reducer]\n    }),\n    // [other reducer]\n  }),\n  /* your Redux middlewares */\n)\n\nexport default store\n```\n\n#### Exemple keyValue with default state\n```es6\nimport { keyValue } from 'k-redux-factory'\n\nconst defaultData = [\n  {\n    id: 1,\n    todo: 'write README.MD',\n  },\n  {\n    id: 2,\n    todo: 'watch rick and morty season three',\n  },\n]\n\nexport default keyValue({ defaultData })\n```\n\n```es6\n{\n  data: { 1: { id: 1, todo: 'write README.MD' }, 2: { id: 2, todo: 'watch rick and morty season three' }},\n  array: [{ id: 1, todo: 'write README.MD' }, { id: 2, todo: 'watch rick and morty season three' }],\n  keys: ['1', '2'],\n  initialized: true,\n}\n```\n\n### actions\nThe factory returns a function (this is the reducer) that also contains actions and selectors as fields.\nSome generic actions are available. By now, it's not possible to add custom ones.\n\nTo see them go to [TYPES.md](./TYPES.md).\n\nExample, we set todos to our typed `keyValue` reducer:\n```es6\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// dispatch can be given by one of your middleware (redux-thunk, redux-saga, etc)\n// or it can be given by react-redux for example (mapDispatchToProps)\ndispatch(\n  // set todos\n  todos.set([\n    {\n      id: '1', // we set 'id' as key in the factory\n      visible: true,\n      label: 'My first todo',\n    },\n    {\n      id: '2',\n      visible: false,\n      label: 'This todo is done',\n    },\n  ])\n)\n```\n\nYou can also retrieve action name like this : `todos.SET`\n\n### selectors\nThe factory returns a function (this is the reducer) that also contains actions and selectors as fields.\nSome generic selectors are available. By now, it's not possible to add custom ones.\n\nTo see them go to [TYPES.md](./TYPES.md).\n\nExample, we retrieve the todo with id `1`:\n```es6\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// state can be given by one of your middleware (redux-thunk, redux-saga, etc)\n// or it can be given by react-redux for example (mapStateToProps)\ntodos.get('1')(state)\n```\n### helpers\n\n| signature | description | comment |\n|---|---|---|\n|`mapAction(<mapper(action)>)`| create middleware and map only redux action | mapper(action) is mandatory |\n|`mapState(<regex>)(<mapper(state)>)`| create middleware and map the state of the corresponding redux actions type by the regex |\n|`reducer(<yourReducer(action, state)>)`| create a middleware from a standard redux reducer |\n|`mapPayload(<regex>)(<mapper(payload)>)`| create middleware and map the payload of the corresponding redux actions type by the regex |\n\n#### Example, we create a middleware but we modify only the action :\n```es6\nimport factory from 'k-redux-factory'\n// import your helpers\nimport { mapAction } from 'k-redux-factory/helpers'\n\n// define a function to map action\nconst mapper = action => ({ ...action, type: `SET_${action.type}` })\n// create your reducer and transform the type of action before core middleware\nexport default factory({ pre: [mapAction(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify only the state :\n```es6\nimport factory from 'k-redux-factory'\n// import your helpers\nimport { mapState } from 'k-redux-factory/helpers'\n\n// define a function to change state\nconst mapper = state => ({...state, todos: 'TODO_CHANGED'})\n// create your reducer and transform the state before core middleware\nexport default factory({ pre: [mapState(/SET>TODOS/)(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify action and state :\n```es6\nimport factory from 'k-redux-factory'\n// import your helpers\nimport { reducer } from 'k-redux-factory/helpers'\n\n// define a function to map state depending on the action\nconst mapper = (action, state) => {\n  switch (action.type) {\n    case 'SET_TODOS': return { todos: 'TODOS_CHANGED' }\n    case 'LOG_TODOS': console.log(state)\n    default: return state\n  }\n}\n// create your reducer and transform the action and state before core middleware\nexport default factory({ pre: [reducer(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify only the payload :\n```es6\nimport factory from 'k-redux-factory'\n// import your helpers\nimport { mapPayload } from 'k-redux-factory/helpers'\n\n// define a function to map payload\nconst mapper = payload => payload.map(p => ({ ...p, id: `ID_${p.id}` }))\n// create your reducer and transform the payload before core middleware\nexport default factory({ pre: [mapPayload(/SET>TODOS/)(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n# About ![alakarteio](http://alakarte.io/assets/img/logo.markdown.png)\n**alakarteio** is created by two passionate french developers.\n\nDo you want to contact them ? Go to their [website](http://alakarte.io)\n\n<table border=\"0\">\n <tr>\n  <td align=\"center\"><img src=\"https://avatars1.githubusercontent.com/u/26094222?s=460&v=4\" width=\"100\" /></td>\n  <td align=\"center\"><img src=\"https://avatars1.githubusercontent.com/u/17828231?s=460&v=4\" width=\"100\" /></td>\n </tr>\n <tr>\n  <td align=\"center\"><a href=\"https://github.com/guillaumecrespel\">Guillaume CRESPEL</a></td>\n  <td align=\"center\"><a href=\"https://github.com/fabienjuif\">Fabien JUIF</a></td>\n</table>\n","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","licenseText":"MIT License\n\nCopyright (c) 2017 Alakarte\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"k-redux-factory@6.0.0-rc1","dist":{"shasum":"a7bce6b44e800e9459ee303b9ea91580122982f0","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-6.0.0-rc1.tgz","fileCount":12,"unpackedSize":48403,"integrity":"sha512-ocfmAxh6Rni25LajYFsUjb2g4Z8olKEZlv3vpCcmI6inDWxVQG2bPOy0LWUtp8sSlT5CE2rssp/Fe1Z9OkHnFQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZpGWRzslbcJRgUoWbXoWGkLk8Ochby5wcH1ENjVlWMgIhAIQc5+hamuwKZISYdOLUWR+IMRAQne5MNqBenoFPhZx2"}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_6.0.0-rc1_1529338916430_0.6367703226411676"},"_hasShrinkwrap":false},"6.0.0-rc2":{"name":"k-redux-factory","version":"6.0.0-rc2","main":"dist/index.js","module":"dist/index.es.js","license":"MIT","repository":{"type":"git","url":"https://github.com/alakarteio/k-redux-factory"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","cmd:build":"microbundle --external all --sourcemap false -f es,cjs -i ","build:core":"yarn cmd:build src/index.js","build:helper":"yarn cmd:build src/helpers.js -o helpers/index.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-jest":"^23.0.1","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^3.0.0","cross-env":"^5.0.1","eslint":"~4.19.0","eslint-config-airbnb":"^16.1.0","eslint-plugin-babel":"^5.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-react":"^7.4.0","jest":"^22.2.2","microbundle":"^0.4.4","npm-run-all":"^4.0.2"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"],"max-len":[2,{"code":200}]}},"dependencies":{},"readmeFilename":"README.md","readme":"# k-redux-factory\n\nFactory of Redux reducers and their associated actions and selectors.\n> Make your Redux code base tinier and simpler to maintain\n\n[![CircleCI](https://circleci.com/gh/alakarteio/k-redux-factory.svg?style=shield)](https://circleci.com/gh/alakarteio/k-redux-factory) [![Coverage Status](https://coveralls.io/repos/github/alakarteio/k-redux-factory/badge.svg?branch=master)](https://coveralls.io/github/alakarteio/k-redux-factory?branch=master) [![NPM Version](https://badge.fury.io/js/k-redux-factory.svg)](https://www.npmjs.com/package/k-redux-factory)\n[![Size](http://img.badgesize.io/alakarteio/k-redux-factory/master/dist/index.js.svg)]() [![Greenkeeper badge](https://badges.greenkeeper.io/alakarteio/k-redux-factory.svg)](https://greenkeeper.io/)\n\n## Contents\n - [Purpose](#purpose)\n - [Why ?](#why)\n - [Installation](#installation)\n - [Documentation](#api)\n - [API](./TYPES.md)\n\n## Purpose\n`k-redux-factory` creates generic reducers, actions and selectors in two lines.\n\n```es6\nimport { keyValue } from 'k-redux-factory'\nexport default keyValue({ path: 'api', name: 'todos' })\n```\nThat's it, you just exported the reducer function and now you can register it through combinerReducer in Redux.\n\nIn this example, we have a `todos` reducer, it has to be combined into `state.api.todos`.\n\nThe default `key` is `id`.\n\nYou can now use it to dispatch actions and select some datas from this reducer:\n```es6\nimport myReducer from './myReducer'\n\n// ...\n// add a todo\ndispatch(myReducer.add({ id: 1, title: 'Apply to some CFP', completed: false })\n\n// ...\n// select a todo\nmyReducer.get(1)(getState())\n```\n\nOne more thing, this lib handle state immutability for you !\n\nClick [right here to see the full API.](./TYPES.md)\n\n## Why\nWe like to write Redux code as simple as possible and use its middlewares to handle real world problems.\nFrom this point of view, our Redux code base is simpler : it's like a key/value store. But one drawback is the amount of duplicated code, each resource has its own reducers, actions and selectors.\n\nWe created this lightweight library, a factory of reducers, actions and selectors, to avoid inconsistency and painful maintainability from our growing Redux code base.\n\n## Installation\n - `yarn add k-redux-factory`\n - `npm i k-redux-factory`\n\n## Documentation\n - [factory](#factory)\n - [actions](#actions)\n - [selectors](#selectors)\n - [helpers](#helpers)\n\n### factory\nYou need to use the factory to get a new set of reducer/actions/selectors :\n```es6\n// modular factory\nimport factory from 'k-redux-factory'\n\n// or - prebuild simple factory\nimport { simple } from 'k-redux-factory'\n\n// or - prebuild simpleObject factory (DEPRECATED)\nimport { simpleObject } from 'k-redux-factory'\n\n// or - prebuild keyValue factory\nimport { keyValue } from 'k-redux-factory'\n```\n\nThere are multiple factories signatures, take you preferred between :\n - `factory(middlewares)(options)` : this is the root factory, with middlewares\n - `factory(options)` : this is the root factory, without middlewares\n - `simple(middlewares)(options)` : this is a `simple` factory with middlewares\n - `simple(options)` : this is a `simple` factory without middlewares\n - *DEPRECATED* `simpleObject(middlewares)(options)` : this is a `simpleObject` factory with middlewares\n - *DEPRECATED* `simpleObject(options)` : this is a `simpleObject` factory without middlewares\n - `keyValue(middlewares)(options)` : this is a `keyValue`  factory with middlewares\n - `keyValue(options)` : this is a `keyValue`  factory without middlewares\n\nParameters are :\n - **middlewares** (optional), contain an object with `pre` and `post` fields. Both are an array of middlewares to apply before and after the `core` middleware\n - **options** (mandatory), either a string representating the reducer `name`, either an object with these fields :\n   - **key** (exists only for the `keyValue` type -optional-), the field used to identify your objects (`id` is the default value)\n   - **path** (optional), where the reducer will be combined via `combineReducer`\n     - if empty, the reducer will be register at the root level of the redux state\n     - you can use dot notation, like `api.raw`: your reducer will be combined into `state.api.raw.<your_reducer>`\n   - **name** (mandatory), the reducer name (for instance: `todos`)\n     - it's used to generate actions types\n     - it's used to retrieve informations from selectors\n   - **prefix** (optional) is added to actions to avoid some collisions when there are two reducers with the same name in two distincts paths\n   - **type** (optional) can be `keyValue` or `simpleObject` (default is `keyValue`)\n   - **defaultData** (optional), set the default data value, used by `reset` action and for initialisation (default is an empty object `{}` for `simpleObject` and default hashmap model for `keyValue` - see [keyValue types section](./TYPES.md#state))\n\nExample:\n - this reducer will use `id` as key field\n - it's combined into `state.api.raw`\n - it's name is `todos`\n - have default data\n```es6\nimport factory from 'k-redux-factory'\n\nexport default factory({ path: 'api.raw', name: 'todos' })\n```\n\nData will be stored into `state.api.raw.todos`.\n\n### [Types](./TYPES.md)\nTypes are :\n  - `keyValue` : your state is a hashmap, useful to bind your API to Redux with the following redux state model :\n```es6\n{\n  data: { <key1>: <instance1>, <key2>: <instance2> },\n  array: [<instance1>, <instance2>],\n  keys: [<key1>, <key2>],\n  initialized: true,\n}\n```\n\n  - `simple` : your state is directly your `<instance>`. **This implies that you can not set undefined.**\n  - *DEPRECATED* `simpleObject` : your state is directly your `<instance>`. **This implies that you can not set undefined.**\n\nDefault type is `keyValue`.\n\n### reducer\nThe previous factory returns a function which is a reducer.\nYou just have to combine it like any other reducer :\n```es6\nimport { createStore, combineReducers, compose, applyMiddleware } from 'redux'\n\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// create your Redux store as usual\nconst store = createStore(\n  combineReducers({\n    // [other reducer]\n    api: combineReducers({\n      // [other reducer]\n      raw: combineReducers({\n        // import your reducer into api.raw\n        // since we configured this path\n        todos,\n      }),\n      // [other reducer]\n    }),\n    // [other reducer]\n  }),\n  /* your Redux middlewares */\n)\n\nexport default store\n```\n\n#### Exemple keyValue with default state\n```es6\nimport { keyValue } from 'k-redux-factory'\n\nconst defaultData = [\n  {\n    id: 1,\n    todo: 'write README.MD',\n  },\n  {\n    id: 2,\n    todo: 'watch rick and morty season three',\n  },\n]\n\nexport default keyValue({ defaultData })\n```\n\n```es6\n{\n  data: { 1: { id: 1, todo: 'write README.MD' }, 2: { id: 2, todo: 'watch rick and morty season three' }},\n  array: [{ id: 1, todo: 'write README.MD' }, { id: 2, todo: 'watch rick and morty season three' }],\n  keys: ['1', '2'],\n  initialized: true,\n}\n```\n\n### actions\nThe factory returns a function (this is the reducer) that also contains actions and selectors as fields.\nSome generic actions are available. By now, it's not possible to add custom ones.\n\nTo see them go to [TYPES.md](./TYPES.md).\n\nExample, we set todos to our typed `keyValue` reducer:\n```es6\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// dispatch can be given by one of your middleware (redux-thunk, redux-saga, etc)\n// or it can be given by react-redux for example (mapDispatchToProps)\ndispatch(\n  // set todos\n  todos.set([\n    {\n      id: '1', // we set 'id' as key in the factory\n      visible: true,\n      label: 'My first todo',\n    },\n    {\n      id: '2',\n      visible: false,\n      label: 'This todo is done',\n    },\n  ])\n)\n```\n\nYou can also retrieve action name like this : `todos.SET`\n\n### selectors\nThe factory returns a function (this is the reducer) that also contains actions and selectors as fields.\nSome generic selectors are available. By now, it's not possible to add custom ones.\n\nTo see them go to [TYPES.md](./TYPES.md).\n\nExample, we retrieve the todo with id `1`:\n```es6\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// state can be given by one of your middleware (redux-thunk, redux-saga, etc)\n// or it can be given by react-redux for example (mapStateToProps)\ntodos.get('1')(state)\n```\n### helpers\n\n| signature | description | comment |\n|---|---|---|\n|`mapAction(<mapper(action)>)`| create middleware and map only redux action | mapper(action) is mandatory |\n|`mapState(<regex>)(<mapper(state)>)`| create middleware and map the state of the corresponding redux actions type by the regex |\n|`reducer(<yourReducer(action, state)>)`| create a middleware from a standard redux reducer |\n|`mapPayload(<regex>)(<mapper(payload)>)`| create middleware and map the payload of the corresponding redux actions type by the regex |\n\n#### Example, we create a middleware but we modify only the action :\n```es6\nimport factory from 'k-redux-factory'\n// import your helpers\nimport { mapAction } from 'k-redux-factory/helpers'\n\n// define a function to map action\nconst mapper = action => ({ ...action, type: `SET_${action.type}` })\n// create your reducer and transform the type of action before core middleware\nexport default factory({ pre: [mapAction(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify only the state :\n```es6\nimport factory from 'k-redux-factory'\n// import your helpers\nimport { mapState } from 'k-redux-factory/helpers'\n\n// define a function to change state\nconst mapper = state => ({...state, todos: 'TODO_CHANGED'})\n// create your reducer and transform the state before core middleware\nexport default factory({ pre: [mapState(/SET>TODOS/)(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify action and state :\n```es6\nimport factory from 'k-redux-factory'\n// import your helpers\nimport { reducer } from 'k-redux-factory/helpers'\n\n// define a function to map state depending on the action\nconst mapper = (action, state) => {\n  switch (action.type) {\n    case 'SET_TODOS': return { todos: 'TODOS_CHANGED' }\n    case 'LOG_TODOS': console.log(state)\n    default: return state\n  }\n}\n// create your reducer and transform the action and state before core middleware\nexport default factory({ pre: [reducer(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify only the payload :\n```es6\nimport factory from 'k-redux-factory'\n// import your helpers\nimport { mapPayload } from 'k-redux-factory/helpers'\n\n// define a function to map payload\nconst mapper = payload => payload.map(p => ({ ...p, id: `ID_${p.id}` }))\n// create your reducer and transform the payload before core middleware\nexport default factory({ pre: [mapPayload(/SET>TODOS/)(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n# About ![alakarteio](http://alakarte.io/assets/img/logo.markdown.png)\n**alakarteio** is created by two passionate french developers.\n\nDo you want to contact them ? Go to their [website](http://alakarte.io)\n\n<table border=\"0\">\n <tr>\n  <td align=\"center\"><img src=\"https://avatars1.githubusercontent.com/u/26094222?s=460&v=4\" width=\"100\" /></td>\n  <td align=\"center\"><img src=\"https://avatars1.githubusercontent.com/u/17828231?s=460&v=4\" width=\"100\" /></td>\n </tr>\n <tr>\n  <td align=\"center\"><a href=\"https://github.com/guillaumecrespel\">Guillaume CRESPEL</a></td>\n  <td align=\"center\"><a href=\"https://github.com/fabienjuif\">Fabien JUIF</a></td>\n</table>\n","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","licenseText":"MIT License\n\nCopyright (c) 2017 Alakarte\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"k-redux-factory@6.0.0-rc2","dist":{"shasum":"ad93a3d971da4ad38ee369f4c6191e082a2765fd","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-6.0.0-rc2.tgz","fileCount":12,"unpackedSize":48716,"integrity":"sha512-5s8yS7YkGUsKru4fIEgIkWPxhauZnL3X+b10e1IS37adcaTdO8kgVW7c4qUJxB/vCjMQI5yowi1vORwWCCoStw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC2ms93CtmWLitGgjxFVWy+Op/y8aJwnY6zLpQxPbQ84AiAri35YbYDt1KRr3uf4VGGvNdFZ11EAYuJwSLnB0kWUdg=="}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_6.0.0-rc2_1529420925716_0.04391384009996302"},"_hasShrinkwrap":false},"6.0.0-rc3":{"name":"k-redux-factory","version":"6.0.0-rc3","main":"dist/index.js","module":"dist/index.es.js","license":"MIT","repository":{"type":"git","url":"https://github.com/alakarteio/k-redux-factory"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","cmd:build":"microbundle --external all --sourcemap false -f es,cjs -i ","build:core":"yarn cmd:build src/index.js","build:helper":"yarn cmd:build src/helpers.js -o helpers/index.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-jest":"^23.0.1","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^3.0.0","cross-env":"^5.0.1","eslint":"~4.19.0","eslint-config-airbnb":"^16.1.0","eslint-plugin-babel":"^5.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-react":"^7.4.0","jest":"^22.2.2","microbundle":"^0.4.4","npm-run-all":"^4.0.2"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"],"max-len":[2,{"code":200}]}},"dependencies":{},"description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","licenseText":"MIT License\n\nCopyright (c) 2017 Alakarte\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"k-redux-factory@6.0.0-rc3","dist":{"shasum":"f85d2b6b0241767de9daddc3ba62bdeff1ceb085","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-6.0.0-rc3.tgz","fileCount":12,"unpackedSize":48756,"integrity":"sha512-YCjU7mlwI578FpQAFFZro3TjaH8coAATyp6zdzBbyqdVsribb6YTUshmjeYH/u6PIYexFTDiyI0+03nJZS6GFQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGy9Q+9hnjZbz5F1bb9SST6XUP8xsmEt3iWDxAf6lNNJAiEA+BnxcxZRU35N4DSJwNM0ETOLKXsYdP9BSysMihcG8ug="}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_6.0.0-rc3_1529488662957_0.21557908019632155"},"_hasShrinkwrap":false},"6.0.0-rc4":{"name":"k-redux-factory","version":"6.0.0-rc4","main":"dist/index.js","module":"dist/index.es.js","license":"MIT","repository":{"type":"git","url":"https://github.com/alakarteio/k-redux-factory"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","cmd:build":"microbundle --external all --sourcemap false -f es,cjs -i ","build:core":"yarn cmd:build src/index.js","build:helper":"yarn cmd:build src/helpers.js -o helpers/index.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-jest":"^23.0.1","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^3.0.0","cross-env":"^5.0.1","eslint":"~4.19.0","eslint-config-airbnb":"^16.1.0","eslint-plugin-babel":"^5.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-react":"^7.4.0","jest":"^22.2.2","microbundle":"^0.4.4","npm-run-all":"^4.0.2"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"],"max-len":[2,{"code":200}]}},"dependencies":{},"readmeFilename":"README.md","readme":"# k-redux-factory\n\nFactory of Redux reducers and their associated actions and selectors.\n> Make your Redux code base tinier and simpler to maintain\n\n[![CircleCI](https://circleci.com/gh/alakarteio/k-redux-factory.svg?style=shield)](https://circleci.com/gh/alakarteio/k-redux-factory) [![Coverage Status](https://coveralls.io/repos/github/alakarteio/k-redux-factory/badge.svg?branch=master)](https://coveralls.io/github/alakarteio/k-redux-factory?branch=master) [![NPM Version](https://badge.fury.io/js/k-redux-factory.svg)](https://www.npmjs.com/package/k-redux-factory)\n[![Size](http://img.badgesize.io/alakarteio/k-redux-factory/master/dist/index.js.svg)]() [![Greenkeeper badge](https://badges.greenkeeper.io/alakarteio/k-redux-factory.svg)](https://greenkeeper.io/)\n\n## Contents\n - [Purpose](#purpose)\n - [Why ?](#why)\n - [Installation](#installation)\n - [Documentation](#api)\n - [API](./TYPES.md)\n\n## Purpose\n`k-redux-factory` creates generic reducers, actions and selectors in two lines.\n\n```es6\nimport { keyValue } from 'k-redux-factory'\nexport default keyValue({ path: 'api', name: 'todos' })\n```\nThat's it, you just exported the reducer function and now you can register it through combinerReducer in Redux.\n\nIn this example, we have a `todos` reducer, it has to be combined into `state.api.todos`.\n\nThe default `key` is `id`.\n\nYou can now use it to dispatch actions and select some datas from this reducer:\n```es6\nimport myReducer from './myReducer'\n\n// ...\n// add a todo\ndispatch(myReducer.add({ id: 1, title: 'Apply to some CFP', completed: false })\n\n// ...\n// select a todo\nmyReducer.get(1)(getState())\n```\n\nOne more thing, this lib handle state immutability for you !\n\nClick [right here to see the full API.](./TYPES.md)\n\n## Why\nWe like to write Redux code as simple as possible and use its middlewares to handle real world problems.\nFrom this point of view, our Redux code base is simpler : it's like a key/value store. But one drawback is the amount of duplicated code, each resource has its own reducers, actions and selectors.\n\nWe created this lightweight library, a factory of reducers, actions and selectors, to avoid inconsistency and painful maintainability from our growing Redux code base.\n\n## Installation\n - `yarn add k-redux-factory`\n - `npm i k-redux-factory`\n\n## Documentation\n - [factory](#factory)\n - [actions](#actions)\n - [selectors](#selectors)\n - [helpers](#helpers)\n\n### factory\nYou need to use the factory to get a new set of reducer/actions/selectors :\n```es6\n// modular factory\nimport factory from 'k-redux-factory'\n\n// or - prebuild simple factory\nimport { simple } from 'k-redux-factory'\n\n// or - prebuild simpleObject factory (DEPRECATED)\nimport { simpleObject } from 'k-redux-factory'\n\n// or - prebuild keyValue factory\nimport { keyValue } from 'k-redux-factory'\n```\n\nThere are multiple factories signatures, take you preferred between :\n - `factory(middlewares)(options)` : this is the root factory, with middlewares\n - `factory(options)` : this is the root factory, without middlewares\n - `simple(middlewares)(options)` : this is a `simple` factory with middlewares\n - `simple(options)` : this is a `simple` factory without middlewares\n - *DEPRECATED* `simpleObject(middlewares)(options)` : this is a `simpleObject` factory with middlewares\n - *DEPRECATED* `simpleObject(options)` : this is a `simpleObject` factory without middlewares\n - `keyValue(middlewares)(options)` : this is a `keyValue`  factory with middlewares\n - `keyValue(options)` : this is a `keyValue`  factory without middlewares\n\nParameters are :\n - **middlewares** (optional), contain an object with `pre` and `post` fields. Both are an array of middlewares to apply before and after the `core` middleware\n - **options** (mandatory), either a string representating the reducer `name`, either an object with these fields :\n   - **key** (exists only for the `keyValue` type -optional-), the field used to identify your objects (`id` is the default value)\n   - **path** (optional), where the reducer will be combined via `combineReducer`\n     - if empty, the reducer will be register at the root level of the redux state\n     - you can use dot notation, like `api.raw`: your reducer will be combined into `state.api.raw.<your_reducer>`\n   - **name** (mandatory), the reducer name (for instance: `todos`)\n     - it's used to generate actions types\n     - it's used to retrieve informations from selectors\n   - **prefix** (optional) is added to actions to avoid some collisions when there are two reducers with the same name in two distincts paths\n   - **type** (optional) can be `keyValue` or `simpleObject` (default is `keyValue`)\n   - **defaultData** (optional), set the default data value, used by `reset` action and for initialisation (default is an empty object `{}` for `simpleObject` and default hashmap model for `keyValue` - see [keyValue types section](./TYPES.md#state))\n\nExample:\n - this reducer will use `id` as key field\n - it's combined into `state.api.raw`\n - it's name is `todos`\n - have default data\n```es6\nimport factory from 'k-redux-factory'\n\nexport default factory({ path: 'api.raw', name: 'todos' })\n```\n\nData will be stored into `state.api.raw.todos`.\n\n### [Types](./TYPES.md)\nTypes are :\n  - `keyValue` : your state is a hashmap, useful to bind your API to Redux with the following redux state model :\n```es6\n{\n  data: { <key1>: <instance1>, <key2>: <instance2> },\n  array: [<instance1>, <instance2>],\n  keys: [<key1>, <key2>],\n  initialized: true,\n}\n```\n\n  - `simple` : your state is directly your `<instance>`. **This implies that you can not set undefined.**\n  - *DEPRECATED* `simpleObject` : your state is directly your `<instance>`. **This implies that you can not set undefined.**\n\nDefault type is `keyValue`.\n\n### reducer\nThe previous factory returns a function which is a reducer.\nYou just have to combine it like any other reducer :\n```es6\nimport { createStore, combineReducers, compose, applyMiddleware } from 'redux'\n\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// create your Redux store as usual\nconst store = createStore(\n  combineReducers({\n    // [other reducer]\n    api: combineReducers({\n      // [other reducer]\n      raw: combineReducers({\n        // import your reducer into api.raw\n        // since we configured this path\n        todos,\n      }),\n      // [other reducer]\n    }),\n    // [other reducer]\n  }),\n  /* your Redux middlewares */\n)\n\nexport default store\n```\n\n#### Exemple keyValue with default state\n```es6\nimport { keyValue } from 'k-redux-factory'\n\nconst defaultData = [\n  {\n    id: 1,\n    todo: 'write README.MD',\n  },\n  {\n    id: 2,\n    todo: 'watch rick and morty season three',\n  },\n]\n\nexport default keyValue({ defaultData })\n```\n\n```es6\n{\n  data: { 1: { id: 1, todo: 'write README.MD' }, 2: { id: 2, todo: 'watch rick and morty season three' }},\n  array: [{ id: 1, todo: 'write README.MD' }, { id: 2, todo: 'watch rick and morty season three' }],\n  keys: ['1', '2'],\n  initialized: true,\n}\n```\n\n### actions\nThe factory returns a function (this is the reducer) that also contains actions and selectors as fields.\nSome generic actions are available. By now, it's not possible to add custom ones.\n\nTo see them go to [TYPES.md](./TYPES.md).\n\nExample, we set todos to our typed `keyValue` reducer:\n```es6\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// dispatch can be given by one of your middleware (redux-thunk, redux-saga, etc)\n// or it can be given by react-redux for example (mapDispatchToProps)\ndispatch(\n  // set todos\n  todos.set([\n    {\n      id: '1', // we set 'id' as key in the factory\n      visible: true,\n      label: 'My first todo',\n    },\n    {\n      id: '2',\n      visible: false,\n      label: 'This todo is done',\n    },\n  ])\n)\n```\n\nYou can also retrieve action name like this : `todos.SET`\n\n### selectors\nThe factory returns a function (this is the reducer) that also contains actions and selectors as fields.\nSome generic selectors are available. By now, it's not possible to add custom ones.\n\nTo see them go to [TYPES.md](./TYPES.md).\n\nExample, we retrieve the todo with id `1`:\n```es6\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// state can be given by one of your middleware (redux-thunk, redux-saga, etc)\n// or it can be given by react-redux for example (mapStateToProps)\ntodos.get('1')(state)\n```\n### helpers\n\n| signature | description | comment |\n|---|---|---|\n|`mapAction(<mapper(action)>)`| create middleware and map only redux action | mapper(action) is mandatory |\n|`mapState(<regex>)(<mapper(state)>)`| create middleware and map the state of the corresponding redux actions type by the regex |\n|`reducer(<yourReducer(action, state)>)`| create a middleware from a standard redux reducer |\n|`mapPayload(<regex>)(<mapper(payload)>)`| create middleware and map the payload of the corresponding redux actions type by the regex |\n\n#### Example, we create a middleware but we modify only the action :\n```es6\nimport factory from 'k-redux-factory'\n// import your helpers\nimport { mapAction } from 'k-redux-factory/helpers'\n\n// define a function to map action\nconst mapper = action => ({ ...action, type: `SET_${action.type}` })\n// create your reducer and transform the type of action before core middleware\nexport default factory({ pre: [mapAction(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify only the state :\n```es6\nimport factory from 'k-redux-factory'\n// import your helpers\nimport { mapState } from 'k-redux-factory/helpers'\n\n// define a function to change state\nconst mapper = state => ({...state, todos: 'TODO_CHANGED'})\n// create your reducer and transform the state before core middleware\nexport default factory({ pre: [mapState(/SET>TODOS/)(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify action and state :\n```es6\nimport factory from 'k-redux-factory'\n// import your helpers\nimport { reducer } from 'k-redux-factory/helpers'\n\n// define a function to map state depending on the action\nconst mapper = (action, state) => {\n  switch (action.type) {\n    case 'SET_TODOS': return { todos: 'TODOS_CHANGED' }\n    case 'LOG_TODOS': console.log(state)\n    default: return state\n  }\n}\n// create your reducer and transform the action and state before core middleware\nexport default factory({ pre: [reducer(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify only the payload :\n```es6\nimport factory from 'k-redux-factory'\n// import your helpers\nimport { mapPayload } from 'k-redux-factory/helpers'\n\n// define a function to map payload\nconst mapper = payload => payload.map(p => ({ ...p, id: `ID_${p.id}` }))\n// create your reducer and transform the payload before core middleware\nexport default factory({ pre: [mapPayload(/SET>TODOS/)(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n# About ![alakarteio](http://alakarte.io/assets/img/logo.markdown.png)\n**alakarteio** is created by two passionate french developers.\n\nDo you want to contact them ? Go to their [website](http://alakarte.io)\n\n<table border=\"0\">\n <tr>\n  <td align=\"center\"><img src=\"https://avatars1.githubusercontent.com/u/26094222?s=460&v=4\" width=\"100\" /></td>\n  <td align=\"center\"><img src=\"https://avatars1.githubusercontent.com/u/17828231?s=460&v=4\" width=\"100\" /></td>\n </tr>\n <tr>\n  <td align=\"center\"><a href=\"https://github.com/guillaumecrespel\">Guillaume CRESPEL</a></td>\n  <td align=\"center\"><a href=\"https://github.com/fabienjuif\">Fabien JUIF</a></td>\n</table>\n","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","licenseText":"MIT License\n\nCopyright (c) 2017 Alakarte\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"k-redux-factory@6.0.0-rc4","dist":{"shasum":"80e871db3a006f14771ecba9707905b83fbcf3a3","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-6.0.0-rc4.tgz","fileCount":12,"unpackedSize":48892,"integrity":"sha512-AXgD+6HK2AsWf6Oy0nCiFWfT4qKX2BPZiBc6vtddCMr54SOL/HokoP3ErPHfyPNXXIFRdzXrRJ5kJip7Ny1vHg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXIHIsv1hQRa1T5aDSQfNfKFl4bsWoxdVXRkPsNRDI1QIhAI0W3GkYAXDiIzEoaGKBBmvaxglUlKPiFqsB+BblLHs7"}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_6.0.0-rc4_1530704841527_0.055618204453027786"},"_hasShrinkwrap":false},"6.0.0-rc5":{"name":"k-redux-factory","version":"6.0.0-rc5","main":"dist/index.js","module":"dist/index.es.js","license":"MIT","repository":{"type":"git","url":"https://github.com/alakarteio/k-redux-factory"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","cmd:build":"microbundle --external all --sourcemap false -f es,cjs -i ","build:core":"yarn cmd:build src/index.js","build:helper":"yarn cmd:build src/helpers.js -o helpers/index.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-jest":"^23.0.1","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^3.0.0","cross-env":"^5.0.1","eslint":"~4.19.0","eslint-config-airbnb":"^16.1.0","eslint-plugin-babel":"^5.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-react":"^7.4.0","jest":"^22.2.2","microbundle":"^0.5.1","npm-run-all":"^4.0.2"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"semi":[2,"never"],"max-len":[2,{"code":200}]}},"dependencies":{},"readmeFilename":"README.md","readme":"# k-redux-factory\n\nFactory of Redux reducers and their associated actions and selectors.\n> Make your Redux code base tinier and simpler to maintain\n\n[![CircleCI](https://circleci.com/gh/alakarteio/k-redux-factory.svg?style=shield)](https://circleci.com/gh/alakarteio/k-redux-factory) [![Coverage Status](https://coveralls.io/repos/github/alakarteio/k-redux-factory/badge.svg?branch=master)](https://coveralls.io/github/alakarteio/k-redux-factory?branch=master) [![NPM Version](https://badge.fury.io/js/k-redux-factory.svg)](https://www.npmjs.com/package/k-redux-factory)\n[![Size](http://img.badgesize.io/alakarteio/k-redux-factory/master/dist/index.js.svg)]() [![Greenkeeper badge](https://badges.greenkeeper.io/alakarteio/k-redux-factory.svg)](https://greenkeeper.io/)\n\n## Migrating\nHey ! If you come from an early version of `k-redux-factory` and want to upgrade, [you can read this migration guide 💎](./MIGRATING.md)\n\n## Contents\n - [Purpose](#purpose)\n - [Why ?](#why)\n - [Installation](#installation)\n - [Documentation](#api)\n - [API](./TYPES.md)\n\n## Purpose\n`k-redux-factory` creates generic reducers, actions and selectors in two lines.\n\n```es6\nimport { keyValue } from 'k-redux-factory'\nexport default keyValue({ path: 'api', name: 'todos' })\n```\nThat's it, you just exported the reducer function and now you can register it through combinerReducer in Redux.\n\nIn this example, we have a `todos` reducer, it has to be combined into `state.api.todos`.\n\nThe default `key` is `id`.\n\nYou can now use it to dispatch actions and select some datas from this reducer:\n```es6\nimport myReducer from './myReducer'\n\n// ...\n// add a todo\ndispatch(myReducer.add({ id: 1, title: 'Apply to some CFP', completed: false })\n\n// ...\n// select a todo\nmyReducer.get(1)(getState())\n```\n\nOne more thing, this lib handle state immutability for you !\n\nClick [right here to see the full API.](./TYPES.md)\n\n## Why\nWe like to write Redux code as simple as possible and use its middlewares to handle real world problems.\nFrom this point of view, our Redux code base is simpler : it's like a key/value store. But one drawback is the amount of duplicated code, each resource has its own reducers, actions and selectors.\n\nWe created this lightweight library, a factory of reducers, actions and selectors, to avoid inconsistency and painful maintainability from our growing Redux code base.\n\n## Installation\n - `yarn add k-redux-factory`\n - `npm i k-redux-factory`\n\n## Documentation\n - [factory](#factory)\n - [actions](#actions)\n - [selectors](#selectors)\n - [helpers](#helpers)\n\n### factory\nYou need to use the factory to get a new set of reducer/actions/selectors :\n```es6\n// modular factory\nimport { factory } from 'k-redux-factory'\n\n// or - prebuild simple factory\nimport { simple } from 'k-redux-factory'\n\n// or - prebuild simpleObject factory (DEPRECATED)\nimport { simpleObject } from 'k-redux-factory'\n\n// or - prebuild keyValue factory\nimport { keyValue } from 'k-redux-factory'\n```\n\nThere are multiple factories signatures, take you preferred between :\n - `factory(middlewares)(options)` : this is the root factory, with middlewares\n - `factory(options)` : this is the root factory, without middlewares\n - `simple(middlewares)(options)` : this is a `simple` factory with middlewares\n - `simple(options)` : this is a `simple` factory without middlewares\n - *DEPRECATED* `simpleObject(middlewares)(options)` : this is a `simpleObject` factory with middlewares\n - *DEPRECATED* `simpleObject(options)` : this is a `simpleObject` factory without middlewares\n - `keyValue(middlewares)(options)` : this is a `keyValue`  factory with middlewares\n - `keyValue(options)` : this is a `keyValue`  factory without middlewares\n\nParameters are :\n - **middlewares** (optional), contain an object with `pre` and `post` fields. Both are an array of middlewares to apply before and after the `core` middleware\n - **options** (mandatory), either a string representating the reducer `name`, either an object with these fields :\n   - **key** (exists only for the `keyValue` type -optional-), the field used to identify your objects (`id` is the default value)\n   - **path** (optional), where the reducer will be combined via `combineReducer`\n     - if empty, the reducer will be register at the root level of the redux state\n     - you can use dot notation, like `api.raw`: your reducer will be combined into `state.api.raw.<your_reducer>`\n   - **name** (mandatory), the reducer name (for instance: `todos`)\n     - it's used to generate actions types\n     - it's used to retrieve informations from selectors\n   - **prefix** (optional) is added to actions to avoid some collisions when there are two reducers with the same name in two distincts paths\n   - **type** (optional) can be `keyValue` or `simple.<type>` (default is `keyValue`)\n   - **defaultData** (optional), set the default data value, used by `reset` action and for initialisation (default is an empty object `{}` for `simple.object` and default hashmap model for `keyValue` - see [keyValue types section](./TYPES.md#state))\n\nExample:\n - this reducer will use `id` as key field\n - it's combined into `state.api.raw`\n - it's name is `todos`\n - have default data\n```es6\nimport { factory } from 'k-redux-factory'\n\nexport default factory({ path: 'api.raw', name: 'todos' })\n```\n\nData will be stored into `state.api.raw.todos`.\n\n### [Types](./TYPES.md)\nTypes are :\n  - `keyValue` : your state is a hashmap, useful to bind your API to Redux with the following redux state model :\n```es6\n{\n  data: [\n    [<key1>, <instance1>],\n    [<key2>, <instance2>],\n  ],\n  initialized: true,\n}\n```\n\n  - `simple` : your state is directly your `<instance>`. **This implies that you can not set undefined.**\n  - *DEPRECATED* `simpleObject` : your state is directly your `<instance>`. **This implies that you can not set undefined.**\n\nDefault type is `keyValue`.\n\n### reducer\nThe previous factory returns a function which is a reducer.\nYou just have to combine it like any other reducer :\n```es6\nimport { createStore, combineReducers, compose, applyMiddleware } from 'redux'\n\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// create your Redux store as usual\nconst store = createStore(\n  combineReducers({\n    // [other reducer]\n    api: combineReducers({\n      // [other reducer]\n      raw: combineReducers({\n        // import your reducer into api.raw\n        // since we configured this path\n        todos,\n      }),\n      // [other reducer]\n    }),\n    // [other reducer]\n  }),\n  /* your Redux middlewares */\n)\n\nexport default store\n```\n\n#### Exemple keyValue with default state\n```es6\nimport { keyValue } from 'k-redux-factory'\n\nconst defaultData = [\n  {\n    id: 1,\n    todo: 'write README.MD',\n  },\n  {\n    id: 2,\n    todo: 'watch rick and morty season three',\n  },\n]\n\nexport default keyValue({ defaultData })\n```\n\n```es6\n{\n  data: [\n    [1, { id: 1, todo: 'write README.MD' }],\n    [2, { id: 2, todo: 'watch rick and morty season three' }],\n  ],\n  initialized: true,\n}\n```\n\n### actions\nThe factory returns a function (this is the reducer) that also contains actions and selectors as fields.\nSome generic actions are available. By now, it's not possible to add custom ones.\n\nTo see them go to [TYPES.md](./TYPES.md).\n\nExample, we set todos to our typed `keyValue` reducer:\n```es6\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// dispatch can be given by one of your middleware (redux-thunk, redux-saga, etc)\n// or it can be given by react-redux for example (mapDispatchToProps)\ndispatch(\n  // set todos\n  todos.set([\n    {\n      id: '1', // we set 'id' as key in the factory\n      visible: true,\n      label: 'My first todo',\n    },\n    {\n      id: '2',\n      visible: false,\n      label: 'This todo is done',\n    },\n  ])\n)\n```\n\nYou can also retrieve action name like this : `todos.SET`\n\n### selectors\nThe factory returns a function (this is the reducer) that also contains actions and selectors as fields.\nSome generic selectors are available. By now, it's not possible to add custom ones.\n\nTo see them go to [TYPES.md](./TYPES.md).\n\nExample, we retrieve the todo with id `1`:\n```es6\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// state can be given by one of your middleware (redux-thunk, redux-saga, etc)\n// or it can be given by react-redux for example (mapStateToProps)\ntodos.get('1')(state)\n```\n### helpers\n\n| signature | description | comment |\n|---|---|---|\n|`mapAction(<mapper(action)>)`| create middleware and map only redux action | mapper(action) is mandatory |\n|`mapState(<regex>)(<mapper(state)>)`| create middleware and map the state of the corresponding redux actions type by the regex |\n|`reducer(<yourReducer(action, state)>)`| create a middleware from a standard redux reducer |\n|`mapPayload(<regex>)(<mapper(payload)>)`| create middleware and map the payload of the corresponding redux actions type by the regex |\n\n#### Example, we create a middleware but we modify only the action :\n```es6\nimport { factory } from 'k-redux-factory'\n// import your helpers\nimport { mapAction } from 'k-redux-factory/helpers'\n\n// define a function to map action\nconst mapper = action => ({ ...action, type: `SET_${action.type}` })\n// create your reducer and transform the type of action before core middleware\nexport default factory({ pre: [mapAction(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify only the state :\n```es6\nimport { factory } from 'k-redux-factory'\n// import your helpers\nimport { mapState } from 'k-redux-factory/helpers'\n\n// define a function to change state\nconst mapper = state => ({...state, todos: 'TODO_CHANGED'})\n// create your reducer and transform the state before core middleware\nexport default factory({ pre: [mapState(/SET>TODOS/)(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify action and state :\n```es6\nimport { factory } from 'k-redux-factory'\n// import your helpers\nimport { reducer } from 'k-redux-factory/helpers'\n\n// define a function to map state depending on the action\nconst mapper = (action, state) => {\n  switch (action.type) {\n    case 'SET_TODOS': return { todos: 'TODOS_CHANGED' }\n    case 'LOG_TODOS': console.log(state)\n    default: return state\n  }\n}\n// create your reducer and transform the action and state before core middleware\nexport default factory({ pre: [reducer(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify only the payload :\n```es6\nimport { factory } from 'k-redux-factory'\n// import your helpers\nimport { mapPayload } from 'k-redux-factory/helpers'\n\n// define a function to map payload\nconst mapper = payload => payload.map(p => ({ ...p, id: `ID_${p.id}` }))\n// create your reducer and transform the payload before core middleware\nexport default factory({ pre: [mapPayload(/SET>TODOS/)(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n# About ![alakarteio](http://alakarte.io/assets/img/logo.markdown.png)\n**alakarteio** is created by two passionate french developers.\n\nDo you want to contact them ? Go to their [website](http://alakarte.io)\n\n<table border=\"0\">\n <tr>\n  <td align=\"center\"><img src=\"https://avatars1.githubusercontent.com/u/26094222?s=460&v=4\" width=\"100\" /></td>\n  <td align=\"center\"><img src=\"https://avatars1.githubusercontent.com/u/17828231?s=460&v=4\" width=\"100\" /></td>\n </tr>\n <tr>\n  <td align=\"center\"><a href=\"https://github.com/guillaumecrespel\">Guillaume CRESPEL</a></td>\n  <td align=\"center\"><a href=\"https://github.com/fabienjuif\">Fabien JUIF</a></td>\n</table>\n","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","licenseText":"MIT License\n\nCopyright (c) 2017 Alakarte\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"k-redux-factory@6.0.0-rc5","dist":{"shasum":"d6e9fdb7a5f7a526c6bf4a5c9b70eb796e112ddf","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-6.0.0-rc5.tgz","fileCount":13,"unpackedSize":46503,"integrity":"sha512-I4iBY+98iaw81R7e3cqPOGesIiQidDNN/0VfwsAveZNqxRdAxxJau6oSO9Bhn/8cLzSeeWPt6CzZCQzKSdMmTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGj2cfwPnoMU7qDUIgTxknoNkHOk7YUX01vnahurmXZzAiEAll65Sqdnirf97XX5A/9rOY1RiZeSn6dQE1OXke/brgM="}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_6.0.0-rc5_1531316970399_0.35703391063658074"},"_hasShrinkwrap":false},"6.0.0":{"name":"k-redux-factory","version":"6.0.0","main":"dist/index.js","module":"dist/index.es.js","license":"MIT","repository":{"type":"git","url":"https://github.com/alakarteio/k-redux-factory"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","cmd:build":"microbundle --external all --sourcemap false -f es,cjs -i ","build:core":"yarn cmd:build src/index.js","build:helper":"yarn cmd:build src/helpers.js -o helpers/index.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-jest":"^23.0.1","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^3.0.0","cross-env":"^5.0.1","eslint":"~5.0.0","eslint-config-airbnb":"^17.0.0","eslint-plugin-babel":"^5.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-react":"^7.4.0","jest":"^22.2.2","microbundle":"^0.6.0","npm-run-all":"^4.0.2"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"object-curly-newline":"off","semi":[2,"never"],"max-len":[2,{"code":200}]}},"dependencies":{},"description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","licenseText":"MIT License\n\nCopyright (c) 2017 Alakarte\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"k-redux-factory@6.0.0","dist":{"shasum":"76b7d2c56f3218763c9db08968c6e5afe39bf44d","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-6.0.0.tgz","fileCount":13,"unpackedSize":46545,"integrity":"sha512-3q6MADsqwzFV8yRB944yNcYJfaV2ZIHgJEidUFVnAW97DgR5ujfcVLN57pi0yrUM2Kyn46N5lR+cjfkifQ1HDQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaFereofEBKmyjtc0EQy51jrfKqo/RUV5LMBX1LDCS2AIgGt05xMWJhkmnNScErckJb4tKPs7W3TvoZypOeR5m2Mc="}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_6.0.0_1533113259811_0.19042115963843753"},"_hasShrinkwrap":false},"6.0.1":{"name":"k-redux-factory","version":"6.0.1","main":"dist/index.js","module":"dist/index.es.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/alakarteio/k-redux-factory.git"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --ext js,jsx src","lint":"npm-run-all --parallel lint:*","cmd:build":"microbundle --external all --sourcemap false -f es,cjs -i ","build:core":"yarn cmd:build src/index.js","build:helper":"yarn cmd:build src/helpers.js -o helpers/index.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"devDependencies":{"babel-cli":"^6.26.0","babel-core":"^6.26.0","babel-eslint":"^8.2.1","babel-jest":"^23.0.1","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","coveralls":"^3.0.0","cross-env":"^5.0.1","eslint":"~5.0.0","eslint-config-airbnb":"^17.0.0","eslint-plugin-babel":"^5.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-react":"^7.4.0","jest":"^22.2.2","microbundle":"^0.8.1","npm-run-all":"^4.0.2"},"babel":{"presets":[["env",{"modules":false}]],"plugins":["transform-object-rest-spread"],"env":{"build":{"plugins":["external-helpers"]},"test":{"presets":[["env",{"modules":false}]],"plugins":["transform-es2015-modules-commonjs","transform-object-rest-spread"]}}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"object-curly-newline":"off","semi":[2,"never"],"max-len":[2,{"code":200}]}},"gitHead":"e79fb1cf0f390604eab13df7777d2d400dd4afd0","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/alakarteio/k-redux-factory#readme","_id":"k-redux-factory@6.0.1","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"dist":{"integrity":"sha512-Om/ECYuQecXqdrWqLF0yDSoWALSvERZu/0edKT2rFSchWadNP/zK1NWU91bYy20WZ6A5JAxiSIxNsgpDMGFMXw==","shasum":"7e08b9ee3bccd6f920880f770864a6dd28235164","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-6.0.1.tgz","fileCount":12,"unpackedSize":534070,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcBQWSCRA9TVsSAnZWagAAzWcP/3uO/WzkMLgSdQcQZott\nTSb31pqqQvXZMXGx3eT8aMNFEDRM/E5eve5GL5sOwXJq49teDKDfi2kN+KxP\nMD9iJizroke5nhiYDb9YapmpFFqx940MTw10QOiSDGuWDYBPYetM6FxOYiAX\nEfzwjmG0GXfYC/C8sSDwR8tuSgA9yYKwFLTFPfhYSYCPG0v2rKdBXQpUCaRb\nlywTCmBxLPmxB5LDX05q/2a0ebr/zyTx3xJxCMzuM+rQuW3fK3aAdiogvqNI\nPvewcx0UjLpl35n2J1PC/3X7ssLXj4mExQeDql2H0UCI54WBOUdP7a0VB68g\n7XpHU63lvT3pnWhqiNRjq7Lz7+giju91ZiEvZej7sXslztgcD9KPVu5tOLCc\ne7U5+qw6OrbhHnG/qrnWQdejldCuoC3r5BcuZUFqDjEW36dLS4kliZMKlL3R\nxAlH0xenZZn/ZX61GROTYMTqsihpkDb8ZK/qtrwKwgFhOa+GrhJ5tKtAlPXN\nGx8/94tswwHzCKQBFatgbvPVX7sjuFMuoVw+kWRZXF91e1KVGWmQvb45o4BZ\n9RPV5r1/LhrjJzp39OScES2iHaMYtfdlxLacZnnV75LoQTo1aQHZhabxaEoI\ne4+mqeqAfENGze6Qg9zT9Qk09x3Z0zXfUg/gdBA7W4QRJA3ijrNP+RVQi/77\nuZQ8\r\n=iNui\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbf6Pds6MWkRHuxTSVVpZJ7GUgoP6FHHGUjPwXrGkoJAIhAPWySXOFgFIeo3E02hPWuBmPtjI/WgY+Oull9VaUHbeP"}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_6.0.1_1543832977962_0.6039505903259088"},"_hasShrinkwrap":false},"6.0.2":{"name":"k-redux-factory","version":"6.0.2","main":"dist/index.js","module":"dist/index.es.js","license":"MIT","repository":{"type":"git","url":"https://github.com/alakarteio/k-redux-factory"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --cache . --ext js,jsx --ignore-pattern dist/ --ignore-pattern coverage/ --ignore-pattern node_modules/ --ignore-pattern helpers/","lint":"npm-run-all --parallel lint:*","cmd:build":"microbundle --external all --sourcemap false -f es,cjs -i ","build:core":"yarn cmd:build src/index.js","build:helper":"yarn cmd:build src/helpers.js -o helpers/index.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"devDependencies":{"@babel/cli":"7.2.0","@babel/core":"7.2.0","@babel/plugin-external-helpers":"7.2.0","@babel/preset-env":"7.2.0","babel-core":"7.0.0-bridge.0","babel-eslint":"10.0.1","babel-jest":"23.6.0","babel-plugin-external-helpers":"6.22.0","coveralls":"3.0.2","cross-env":"5.2.0","eslint":"5.10.0","eslint-config-airbnb":"17.1.0","eslint-import-resolver-node":"0.3.2","eslint-plugin-babel":"5.3.0","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","jest":"23.6.0","jest-environment-jsdom":"23.4.0","microbundle":"0.8.3","npm-run-all":"4.1.5"},"jest":{"coveragePathIgnorePatterns":["/node_modules/","/dist/"],"transform":{"^.+\\.jsx?$":"babel-jest"}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"object-curly-newline":"off","semi":[2,"never"],"max-len":[2,{"code":200}]}},"description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","licenseText":"MIT License\n\nCopyright (c) 2017 Alakarte\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"k-redux-factory@6.0.2","dist":{"shasum":"fb580799b685bd21f0cdc81355d2b2173a0e8d24","integrity":"sha512-XPyVDZ38cEqXBtu6tJfYhOkw6tHvbSIkEZ3eVpdzRl4O9FJdomvXNBCOH/jQgL7DK7DjdVKVzNMTNN2TIQgpgQ==","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-6.0.2.tgz","fileCount":32,"unpackedSize":363226,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcDPiKCRA9TVsSAnZWagAAThcP/3YYEiYyd7SokQ74Fel8\nS5KW7RRL3hmhbp2WevYDM9YwRzw8G0pXnym0+b/le6DNIufLkgGPHI2B6qqe\n3dckANTcs9OKXXHvGVVzyO7zWOwq+K5VHbg6u7xmxUl4vJ+IuRzc3jMxmNK2\n6/cx3CawPtnFVy2KdleqAKIPO3QGfZO8eFiyncXLG+5/TZlQTQHW5oRBd1ka\no4SO10Htt+rZTbac75rs1wZrXd5mTvrlGhprqWw5SUfV85VGYd6Eh7gKpryw\nEMyQfWR3Rgt/uAmHLGVWjNK5o0CMULDJpBzgxR6iAnSyF685wt1hMdGndjMk\nseKsvytJ0HyqfeGaty9HtRYSJ5eDgH49vyMBVf/aMp5xPLPwI4pVVAfI3hB8\nHeEUDUfRbOJvuaDfmxuTGP6r/GBbAtFxxCdYWsWz8JkPzPJ2+TqTmgWms1wA\nPe78vo4up8Z0vxhcjUGYpfsTbCFT7ADycfPYx1U0ZG4RaPRk4ksgPnu7SbfS\nb/rt5vVUsoNYpnAemJIbfxyXHHTT1RetpArrTYsNCFiBAcViFHYzn2jYVbX7\nsw1d9ek2jrhXiH579sMDCtlS+Ukf434qEggZdW5R7eZ9fmn2bfHpmfmzb6sW\nyG/cU+6qd2EwhZRFsEKpjBpJDuEBpMuF1xXsYI+SVA5ijQpeTZuZgrDjwdhC\nDyan\r\n=bPNi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBc9Z+byW0T7wyRaSIIuzbIVR2I6kHYYB9HNrAFS2u88AiBYcrOYafxdYdKeTko9Zo1Ql409vIyLnSEsCoHxboFWvg=="}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_6.0.2_1544353929874_0.1929703818726538"},"_hasShrinkwrap":false},"6.0.3":{"name":"k-redux-factory","version":"6.0.3","main":"dist/index.js","module":"dist/index.es.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/alakarteio/k-redux-factory.git"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --cache . --ext js,jsx --ignore-pattern dist/ --ignore-pattern coverage/ --ignore-pattern node_modules/ --ignore-pattern helpers/","lint":"npm-run-all --parallel lint:*","cmd:build":"microbundle --external all --sourcemap false -f es,cjs -i ","build:core":"yarn cmd:build src/index.js","build:helper":"yarn cmd:build src/helpers.js -o helpers/index.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"devDependencies":{"@babel/cli":"7.2.3","@babel/core":"7.2.2","@babel/plugin-external-helpers":"7.2.0","@babel/preset-env":"7.3.1","babel-core":"7.0.0-bridge.0","babel-eslint":"10.0.1","babel-jest":"24.0.0","babel-plugin-external-helpers":"6.22.0","coveralls":"3.0.2","cross-env":"5.2.0","eslint":"5.12.1","eslint-config-airbnb":"17.1.0","eslint-import-resolver-node":"0.3.2","eslint-plugin-babel":"5.3.0","eslint-plugin-import":"2.16.0","eslint-plugin-jsx-a11y":"6.2.0","eslint-plugin-react":"7.12.4","jest":"24.0.0","jest-environment-jsdom":"24.0.0","microbundle":"0.9.0","npm-run-all":"4.1.5"},"jest":{"coveragePathIgnorePatterns":["/node_modules/","/dist/"],"transform":{"^.+\\.jsx?$":"babel-jest"}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"object-curly-newline":"off","semi":[2,"never"],"max-len":[2,{"code":200}]}},"gitHead":"118814883773a9f31ad2e5ebd3abc848ad06a10a","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/alakarteio/k-redux-factory#readme","_id":"k-redux-factory@6.0.3","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"dist":{"integrity":"sha512-fk/BaDPSeEYz/qacE59mw0G+ZJwVUtlDAsm5CLNNI0WncK02yB9UNT8KofabEPt4AV1ygqxDlx7fmmiPGpTE7Q==","shasum":"f074342f67ffa9a6cdfcc7a9222b40914a2d9e2e","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-6.0.3.tgz","fileCount":24,"unpackedSize":363969,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcVFBZCRA9TVsSAnZWagAA2SAP/0Ofa7sC80C4zn0gYCyL\nvGR+F1Xa3wp3mNXAfrXdnUVJewnd9csaiRwbWTr6PlIoozdJ591XWfUQaCJC\n8nKHzon1nWZQMWS+R9f3Vhs5w31aa5HFxgUgV1tvCiXB+WRCGNa/Sjb2JLYg\ni33aZ2rc1IRxdzNtLcqgVIC6pbjMS0fjsQZ6Hz7ORjujoIA5ukfhtQPh8Z0u\nGV4ujYbWZL4guVrulmO36+5H/3vW0o9RfgNfY7YYtjopvqLXaALs6cYJ/Fcd\n/tQG3pDOeVBbxX1E1EsqfB9KjbN5DipT0bi9su/FmjyEQyyzhtRjPQSo8/Oo\nAGKyqM//xA+0Jenqu/AML55chsrNn4g/YWxqzlvqfDG5E2AxlmnpWxKwSX++\n/L6uf9iPW+xkxK4jXzjZSIJO/5hXxbHmXHBHGeIbTSP8bIxtkKXIc6mcQ6Kb\n69CCwhMHy+Q9FmxFVdt1BLWkl6RaE0fB/kGK/1k9m9/bxIo2Erh+BhmoEwJ5\nYA041CKW5GrxWOCq8TKGbMN3qpoRXVwjOduOsJd1NRLYK/GvtBMq92kmKXyT\nX0amVVilzcJQ27XEa3c11Lqqd2lVCVtwgaVdBKcIs9CLWC1H1cj254F+vEJW\nCYodJ7C0XnZkkcQlu2lLeHI5nPjqaEgi0eEKeLr3Umho5ff4SBAI1h9qLPBV\nciCB\r\n=aEo/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBcDGUhT1T67oALbtt01MHZ46H306Aj8CfSiwOAIvDQkAiEAqqMVi3HGjaoH11hm9fQjON8yFrp27eGtWW2R++zI8s0="}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_6.0.3_1549029464814_0.16117317924632069"},"_hasShrinkwrap":false},"6.0.4":{"name":"k-redux-factory","version":"6.0.4","main":"dist/index.js","module":"dist/index.es.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/alakarteio/k-redux-factory.git"},"bugs":{"url":"https://github.com/alakarteio/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --cache . --ext js,jsx --ignore-pattern dist/ --ignore-pattern coverage/ --ignore-pattern node_modules/ --ignore-pattern helpers/","lint":"npm-run-all --parallel lint:*","cmd:build":"microbundle --external all --sourcemap false -f es,cjs -i ","build:core":"yarn cmd:build src/index.js","build:helper":"yarn cmd:build src/helpers.js -o helpers/index.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"devDependencies":{"@babel/cli":"7.2.3","@babel/core":"7.2.2","@babel/plugin-external-helpers":"7.2.0","@babel/preset-env":"7.3.1","babel-core":"7.0.0-bridge.0","babel-eslint":"10.0.1","babel-jest":"24.0.0","babel-plugin-external-helpers":"6.22.0","coveralls":"3.0.2","cross-env":"5.2.0","eslint":"5.12.1","eslint-config-airbnb":"17.1.0","eslint-import-resolver-node":"0.3.2","eslint-plugin-babel":"5.3.0","eslint-plugin-import":"2.16.0","eslint-plugin-jsx-a11y":"6.2.0","eslint-plugin-react":"7.12.4","jest":"24.0.0","jest-environment-jsdom":"24.0.0","microbundle":"0.9.0","npm-run-all":"4.1.5"},"jest":{"coveragePathIgnorePatterns":["/node_modules/","/dist/"],"transform":{"^.+\\.jsx?$":"babel-jest"}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"object-curly-newline":"off","semi":[2,"never"],"max-len":[2,{"code":200}]}},"gitHead":"0be55b6c1edad551cbd5cbfdefc075b0bfd007a5","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/alakarteio/k-redux-factory#readme","_id":"k-redux-factory@6.0.4","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"dist":{"integrity":"sha512-w7wv7c9y93RizgpHjBCblEOk38HHccJ7yxjYsXsSHb8V0R2ULHejJ+aJwkOhBkNopjB1aC88f0YVC6uRr5VREw==","shasum":"911b8b02efc8190a54bf341be29342f3960bd7d4","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-6.0.4.tgz","fileCount":9,"unpackedSize":46274,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcVFC/CRA9TVsSAnZWagAAGgEP/RTTBDzpEggKcQrRB+qA\nm7efl8LDhAbx8ZBNCyaYIJBIYoq5CUFdTL5t9DQizNFVcn050a3/PBCjmMjF\nPkUv17vk2Z3STBzpWu2QpawCSutXLTgsoCGq4hvqvqXS0DgkQYaBmhWYQ9uO\n3f+dmumusFp4Bvum0CWbt1u6nTEJR19KFpuJ7e9Wgu/IWb/Hp2hgSVMJC+du\nL7Ov0bDfZBDru5EgVWFFw6kVxtzQ0WjD0NnWG6eUTjVGJua2IDxZoi+V5pBa\noefioLxh7h47+ugQ9Bwunowum7dqKnnCkRt/28+OV2PKa/zEI3xCiuDrFD2H\nHWmnGEbKTjLRfzGeF7CVIU7EM2/TaPidjaULQQiQtldNEBOurqzUSpmgVEas\n3Gyiav8AAdaBmUcA6E2HIYbsJENplj6cMLsDH10eU3DX3IaIma447Lc/O8iw\n8/prCcUNHCMn54JQbOCDMaxpW/hBYsnmBqZ7UChKz1MInjP8GyT9e03oNHkC\nQ6p05YVYBNgwq6xkdXGgZfse8vxX4C29zaEptAUv7Dyg2J3M9/Vl+Yr6iLXV\n0RaEnifrI6q/m9VnxO55eV6zvP7uspr+JjOoggLjPzVI3mpqHPSqi56GVMke\nE2b7heEwUw92QOpyPhgTsl3UKB6+le34tykuKuWnSyZjMEXs1n8R9CdY35ZY\nytxc\r\n=SMKw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB/Aqb/QOwUo1WXsnLsNwweMnF2kVv+ag12tLJPhGB0GAiEAtz5DXYt6nmvPT1ae9PdQTE7HsnxEZo2vNg6N50FaIBY="}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_6.0.4_1549029566580_0.6430113454585704"},"_hasShrinkwrap":false},"6.0.5":{"name":"k-redux-factory","version":"6.0.5","main":"dist/index.js","module":"dist/index.es.js","license":"MIT","repository":{"type":"git","url":"https://github.com/unirakun/k-redux-factory"},"bugs":{"url":"https://github.com/unirakun/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --cache . --ext js,jsx --ignore-pattern dist/ --ignore-pattern coverage/ --ignore-pattern node_modules/ --ignore-pattern helpers/","lint":"npm-run-all --parallel lint:*","cmd:build":"microbundle --external all --sourcemap false -f es,cjs -i ","build:core":"yarn cmd:build src/index.js","build:helper":"yarn cmd:build src/helpers.js -o helpers/index.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"devDependencies":{"@babel/cli":"7.5.5","@babel/core":"7.5.5","@babel/plugin-external-helpers":"7.2.0","@babel/preset-env":"7.5.5","babel-core":"7.0.0-bridge.0","babel-eslint":"10.0.2","babel-jest":"24.8.0","babel-plugin-external-helpers":"6.22.0","coveralls":"3.0.6","cross-env":"5.2.0","eslint":"5.16.0","eslint-config-airbnb":"17.1.1","eslint-import-resolver-node":"0.3.2","eslint-plugin-babel":"5.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","jest":"24.8.0","jest-environment-jsdom":"24.8.0","microbundle":"0.11.0","npm-run-all":"4.1.5"},"keywords":["redux","reducers","selectors","factory","factories","helper"],"jest":{"coveragePathIgnorePatterns":["/node_modules/","/dist/"],"transform":{"^.+\\.jsx?$":"babel-jest"}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"object-curly-newline":"off","semi":[2,"never"],"max-len":[2,{"code":200}]}},"description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","licenseText":"MIT License\n\nCopyright (c) 2017 uni rakun\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"k-redux-factory@6.0.5","dist":{"shasum":"81da617618a2d85fa626eb8e91c0dbe5f16b2963","integrity":"sha512-e3EdNb3Ffdecxi/Uu2dqyibfIpHI49A3O7q0KmEk9wzxihCnNX2MPtLW4li0Xxj2lr3RUCjCaDYEv6EKEQWBRw==","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-6.0.5.tgz","fileCount":13,"unpackedSize":47339,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTqZiCRA9TVsSAnZWagAAU6UP/0auwKZES+xEs8g720py\ns3fAOjZBwMdPotBh1S+ysrt0ofnkZD8FrVGt973NSFcUZvl5/DtMzNcC2ZjN\ngJW70IU3XjFnt7V63NUNn+u9rLcEPggWgs+/VzB9WUYiRB5LHvt9rvrDc/yW\nCmrzqHMjHW8KuGv+Jze7G+BEfgaBM6AItyRxrFZQervo9gsC8VLubgtX0PGa\nj7biGZOG29NbM+Y2Ompo0YgDEe660Xck3lNWwtYogEVBc1Q9wQzuJnBF178Y\nG5wSd2vQev8t68X7A10JxSF8SWJtk9Mnus65AmxMsvMjpu/3XuE7vt9shQ50\nQLOFpI4Vl3Nf7OkQrnQ7j6nhf7CKnCfTGydqPMl1DZyBg83fx+WqxI+k0LUm\n3IOEoyXp00aRBFXJrdIgNejL0X8uc04Bj8+r4UVqeJFMgGiz/xasaj9Hq5JS\n3jk3Kai6luL01Ohdvqo2MbfgU9dkTWYu0LwbzB9dgzBoOcOsidHNbo96QcV7\nrk4PhF9FlPiU7AzQPinUuorDDE/lnRYJllvARYuZItZ8ABykw2HoK+8UOzw6\nHJloY+IImGfvrGFzqT/KKexXqbXz5kKWntrZJ2oObVv2oR6P8g5VWVdy+Rsq\n0RGNp/4VkcgKLK4Lo/6XmPjYlWvinF0h83ce3RGeCwkXWyJPb3HnhzFCMnd9\ndBcH\r\n=9GRb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCa7HwT6Ana/mpjFZG1mfVylz4pHsnKd4b9/eBoQvXYfgIgcZKAp1Qn7+/z/L+Mc/oae3I3wgx+hb3gmkN6BkpjpVw="}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_6.0.5_1565435489779_0.5774054842427159"},"_hasShrinkwrap":false},"6.0.6":{"name":"k-redux-factory","version":"6.0.6","main":"dist/index.js","module":"dist/index.es.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/unirakun/k-redux-factory.git"},"bugs":{"url":"https://github.com/unirakun/k-redux-factory/issues"},"scripts":{"lint:js":"eslint --cache . --ext js,jsx --ignore-pattern dist/ --ignore-pattern coverage/ --ignore-pattern node_modules/ --ignore-pattern helpers/","lint":"npm-run-all --parallel lint:*","cmd:build":"microbundle --external all --sourcemap false -f es,cjs -i ","build:core":"yarn cmd:build src/index.js","build:helper":"yarn cmd:build src/helpers.js -o helpers/index.js","build:copy-types":"node typing/copy.js","build":"npm-run-all --parallel build:*","test":"jest","coveralls":"jest --coverage --collectCoverageFrom=src/**/*.{js,jsx} && cat ./coverage/lcov.info | coveralls","ci":"npm-run-all --parallel coveralls lint"},"devDependencies":{"@babel/cli":"7.6.4","@babel/core":"7.6.4","@babel/plugin-external-helpers":"7.2.0","@babel/preset-env":"7.6.3","babel-core":"7.0.0-bridge.0","babel-eslint":"10.0.3","babel-jest":"24.9.0","babel-plugin-external-helpers":"6.22.0","coveralls":"3.0.7","cross-env":"6.0.3","eslint":"6.6.0","eslint-config-airbnb":"18.0.1","eslint-import-resolver-node":"0.3.2","eslint-plugin-babel":"5.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.16.0","jest":"24.9.0","jest-environment-jsdom":"24.9.0","microbundle":"0.11.0","npm-run-all":"4.1.5"},"types":"./dist/index.d.ts","keywords":["redux","reducers","selectors","factory","factories","helper"],"jest":{"coveragePathIgnorePatterns":["/node_modules/","/dist/"],"transform":{"^.+\\.jsx?$":"babel-jest"}},"eslintConfig":{"parser":"babel-eslint","extends":["airbnb"],"plugins":["babel"],"globals":{"fetch":false},"env":{"browser":true},"rules":{"object-curly-newline":"off","semi":["error","never"],"arrow-parens":["error","as-needed",{"requireForBlockBody":true}],"max-len":["error",{"code":200}]}},"gitHead":"edcb865a1230b57c9fbd271d92fc2ea69f644874","description":"Factory of Redux reducers and their associated actions and selectors. > Make your Redux code base tinier and simpler to maintain","homepage":"https://github.com/unirakun/k-redux-factory#readme","_id":"k-redux-factory@6.0.6","_nodeVersion":"12.2.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-TDRrqmtWfWnTGfv2wpRjlRMpObsbY6kGmaHiWdeR1UJI6vy6gpnlv3T3n0kasGUN8ZHh/jNj/JvW25F5uKJAew==","shasum":"65348bc3492ddac4a175130748ff6bf528651ac0","tarball":"https://registry.npmjs.org/k-redux-factory/-/k-redux-factory-6.0.6.tgz","fileCount":12,"unpackedSize":51191,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdwJ5fCRA9TVsSAnZWagAAgu4P/0TzsaZsGhBsm9qWbR/s\n7jF/V2dL+n3iMKu4b0VeHxBbBCd31Y6rZVaz8CtJji90367I5jcfOLZqp3hs\nZLwU/WZlRPvBhSb2NDfVUBRyUTU4jbCX1iRjGx0sqYFdhByuvwoph3Ksa/nv\nTZrdquLP+Uw7Du1lNjVXGFEyxkUHFp5myT1s4ceBsyakkmXA4RImHHAOaPfP\nbP5syFZvySAon2ykxy6DTsWTkpEP65AJXiu3gFfy7vzJsNYLZHhCXCBwQQn8\nBB+GTT5ryaUbMqRBGRvSB51DBT8m9GMhMo0jHDiZJ6qQ6D0T2wELbApLbccS\nm1t/kyR69xVuC+jqDx8jIU29qzdQapmWFx/bldOFtXzR4nf9PxzhMmLq9/aM\n31PJIV9Xm8NDtxXWYSvRtIMB5cQLFfiYQCEou1FiE0gLgBIu0nho4Ncto7VA\n1fW9DZ0aNNlXiZ3x4EQzuxBDvvfCIhZ/CCckofEgkJyl047vKT5KC3vht67N\nKBP1gxuWr10CU7Eha4nXYtIrDlBaEqJ+8dLodSCTUlqJuzRzCSgWhQIA9b3+\n8m7GdDen+g/MMCmwENeQU8m6BYqm1+qe5W/mKecUQ9hg9HH2sODgSXDOJlEC\n18zJd0UykfljJnfVt5aUNCPlDYVNqpdGcbz8RsgQotDhcbeOy243J2vlGvs4\nLjcI\r\n=rmdN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGU16PyBmRBwGrpLxkrafy7QGXUjPm7cLnS0gSGFm8y+AiBtN9oiIwykoov9thGWH+BMkQ1t4tO72GglTpMXP60DMw=="}]},"maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"_npmUser":{"name":"fabienjuif","email":"fabien.juif@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/k-redux-factory_6.0.6_1572904543114_0.4351716009110811"},"_hasShrinkwrap":false}},"readme":"# k-redux-factory\n\nFactory of Redux reducers and their associated actions and selectors.\n> Make your Redux code base tinier and simpler to maintain\n\n[![CircleCI](https://circleci.com/gh/unirakun/k-redux-factory.svg?style=shield)](https://circleci.com/gh/unirakun/k-redux-factory) [![Coverage Status](https://coveralls.io/repos/github/unirakun/k-redux-factory/badge.svg?branch=master)](https://coveralls.io/github/unirakun/k-redux-factory?branch=master) [![NPM Version](https://badge.fury.io/js/k-redux-factory.svg)](https://www.npmjs.com/package/k-redux-factory)\n[![npm bundle size](https://img.shields.io/bundlephobia/minzip/k-redux-factory)](https://bundlephobia.com/result?p=k-redux-factory@latest) [![Greenkeeper badge](https://badges.greenkeeper.io/unirakun/k-redux-factory.svg)](https://greenkeeper.io/)\n\n## Migrating\nHey ! If you come from an early version of `k-redux-factory` and want to upgrade, [you can read this migration guide 💎](./MIGRATING.md)\n\n## Contents\n - [Purpose](#purpose)\n - [Why ?](#why)\n - [Installation](#installation)\n - [Documentation](#documentation)\n - [API](./TYPES.md)\n\n## Purpose\n`k-redux-factory` creates generic reducers, actions and selectors in two lines.\n\n```es6\nimport { keyValue } from 'k-redux-factory'\nexport default keyValue({ path: 'api', name: 'todos' })\n```\nThat's it, you just exported the reducer function and now you can register it through combinerReducer in Redux.\n\nIn this example, we have a `todos` reducer, it has to be combined into `state.api.todos`.\n\nThe default `key` is `id`.\n\nYou can now use it to dispatch actions and select some datas from this reducer:\n```es6\nimport myReducer from './myReducer'\n\n// ...\n// add a todo\ndispatch(myReducer.add({ id: 1, title: 'Apply to some CFP', completed: false })\n\n// ...\n// select a todo\nmyReducer.get(1)(getState())\n```\n\nOne more thing, this lib handle state immutability for you !\n\nClick [right here to see the full API.](./TYPES.md)\n\n## Why\nWe like to write Redux code as simple as possible and use its middlewares to handle real world problems.\nFrom this point of view, our Redux code base is simpler : it's like a key/value store. But one drawback is the amount of duplicated code, each resource has its own reducers, actions and selectors.\n\nWe created this lightweight library, a factory of reducers, actions and selectors, to avoid inconsistency and painful maintainability from our growing Redux code base.\n\n## Installation\n - `yarn add k-redux-factory`\n - `npm i k-redux-factory`\n\n## Documentation\n - [factory](#factory)\n - [actions](#actions)\n - [selectors](#selectors)\n - [helpers](#helpers)\n\n### factory\nYou need to use the factory to get a new set of reducer/actions/selectors :\n```es6\n// modular factory\nimport { factory } from 'k-redux-factory'\n\n// or - prebuild simple factory\nimport { simple } from 'k-redux-factory'\n\n// or - prebuild simpleObject factory (DEPRECATED)\nimport { simpleObject } from 'k-redux-factory'\n\n// or - prebuild keyValue factory\nimport { keyValue } from 'k-redux-factory'\n```\n\nThere are multiple factories signatures, take you preferred between :\n - `factory(middlewares)(options)` : this is the root factory, with middlewares\n - `factory(options)` : this is the root factory, without middlewares\n - `simple(middlewares)(options)` : this is a `simple` factory with middlewares\n - `simple(options)` : this is a `simple` factory without middlewares\n - *DEPRECATED* `simpleObject(middlewares)(options)` : this is a `simpleObject` factory with middlewares\n - *DEPRECATED* `simpleObject(options)` : this is a `simpleObject` factory without middlewares\n - `keyValue(middlewares)(options)` : this is a `keyValue`  factory with middlewares\n - `keyValue(options)` : this is a `keyValue`  factory without middlewares\n\nParameters are :\n - **middlewares** (optional), contain an object with `pre` and `post` fields. Both are an array of middlewares to apply before and after the `core` middleware\n - **options** (mandatory), either a string representating the reducer `name`, either an object with these fields :\n   - **key** (exists only for the `keyValue` type -optional-), the field used to identify your objects (`id` is the default value)\n   - **path** (optional), where the reducer will be combined via `combineReducer`\n     - if empty, the reducer will be register at the root level of the redux state\n     - you can use dot notation, like `api.raw`: your reducer will be combined into `state.api.raw.<your_reducer>`\n   - **name** (mandatory), the reducer name (for instance: `todos`)\n     - it's used to generate actions types\n     - it's used to retrieve informations from selectors\n   - **prefix** (optional) is added to actions to avoid some collisions when there are two reducers with the same name in two distincts paths\n   - **type** (optional) can be `keyValue` or `simple.<type>` (default is `keyValue`)\n   - **defaultData** (optional), set the default data value, used by `reset` action and for initialisation (default is an empty object `{}` for `simple.object` and default hashmap model for `keyValue` - see [keyValue types section](./TYPES.md#state))\n\nExample:\n - this reducer will use `id` as key field\n - it's combined into `state.api.raw`\n - it's name is `todos`\n - have default data\n```es6\nimport { factory } from 'k-redux-factory'\n\nexport default factory({ path: 'api.raw', name: 'todos' })\n```\n\nData will be stored into `state.api.raw.todos`.\n\n### [Types](./TYPES.md)\nTypes are :\n  - `keyValue` : your state is a hashmap, useful to bind your API to Redux with the following redux state model :\n```es6\n{\n  data: [\n    [<key1>, <instance1>],\n    [<key2>, <instance2>],\n  ],\n  initialized: true,\n}\n```\n\n  - `simple` : your state is directly your `<instance>`. **This implies that you can not set undefined.**\n  - *DEPRECATED* `simpleObject` : your state is directly your `<instance>`. **This implies that you can not set undefined.**\n\nDefault type is `keyValue`.\n\n### reducer\nThe previous factory returns a function which is a reducer.\nYou just have to combine it like any other reducer :\n```es6\nimport { createStore, combineReducers, compose, applyMiddleware } from 'redux'\n\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// create your Redux store as usual\nconst store = createStore(\n  combineReducers({\n    // [other reducer]\n    api: combineReducers({\n      // [other reducer]\n      raw: combineReducers({\n        // import your reducer into api.raw\n        // since we configured this path\n        todos,\n      }),\n      // [other reducer]\n    }),\n    // [other reducer]\n  }),\n  /* your Redux middlewares */\n)\n\nexport default store\n```\n\n#### Exemple keyValue with default state\n```es6\nimport { keyValue } from 'k-redux-factory'\n\nconst defaultData = [\n  {\n    id: 1,\n    todo: 'write README.MD',\n  },\n  {\n    id: 2,\n    todo: 'watch rick and morty season three',\n  },\n]\n\nexport default keyValue({ defaultData })\n```\n\n```es6\n{\n  data: [\n    [1, { id: 1, todo: 'write README.MD' }],\n    [2, { id: 2, todo: 'watch rick and morty season three' }],\n  ],\n  initialized: true,\n}\n```\n\n### actions\nThe factory returns a function (this is the reducer) that also contains actions and selectors as fields.\nSome generic actions are available. By now, it's not possible to add custom ones.\n\nTo see them go to [TYPES.md](./TYPES.md).\n\nExample, we set todos to our typed `keyValue` reducer:\n```es6\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// dispatch can be given by one of your middleware (redux-thunk, redux-saga, etc)\n// or it can be given by react-redux for example (mapDispatchToProps)\ndispatch(\n  // set todos\n  todos.set([\n    {\n      id: '1', // we set 'id' as key in the factory\n      visible: true,\n      label: 'My first todo',\n    },\n    {\n      id: '2',\n      visible: false,\n      label: 'This todo is done',\n    },\n  ])\n)\n```\n\nYou can also retrieve action name like this : `todos.SET`\n\n### selectors\nThe factory returns a function (this is the reducer) that also contains actions and selectors as fields.\nSome generic selectors are available. By now, it's not possible to add custom ones.\n\nTo see them go to [TYPES.md](./TYPES.md).\n\nExample, we retrieve the todo with id `1`:\n```es6\n// import your reducer\n// (created by k-redux-factory)\nimport todos from './myTodosReducer'\n\n// state can be given by one of your middleware (redux-thunk, redux-saga, etc)\n// or it can be given by react-redux for example (mapStateToProps)\ntodos.get('1')(state)\n```\n### helpers\n\n| signature | description | comment |\n|---|---|---|\n|`mapAction(<mapper(action)>)`| create middleware and map only redux action | mapper(action) is mandatory |\n|`mapState(<regex>)(<mapper(state)>)`| create middleware and map the state of the corresponding redux actions type by the regex |\n|`reducer(<yourReducer(action, state)>)`| create a middleware from a standard redux reducer |\n|`mapPayload(<regex>)(<mapper(payload)>)`| create middleware and map the payload of the corresponding redux actions type by the regex |\n\n#### Example, we create a middleware but we modify only the action :\n```es6\nimport { factory } from 'k-redux-factory'\n// import your helpers\nimport { mapAction } from 'k-redux-factory/helpers'\n\n// define a function to map action\nconst mapper = action => ({ ...action, type: `SET_${action.type}` })\n// create your reducer and transform the type of action before core middleware\nexport default factory({ pre: [mapAction(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify only the state :\n```es6\nimport { factory } from 'k-redux-factory'\n// import your helpers\nimport { mapState } from 'k-redux-factory/helpers'\n\n// define a function to change state\nconst mapper = state => ({...state, todos: 'TODO_CHANGED'})\n// create your reducer and transform the state before core middleware\nexport default factory({ pre: [mapState(/SET>TODOS/)(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify action and state :\n```es6\nimport { factory } from 'k-redux-factory'\n// import your helpers\nimport { reducer } from 'k-redux-factory/helpers'\n\n// define a function to map state depending on the action\nconst mapper = (action, state) => {\n  switch (action.type) {\n    case 'SET_TODOS': return { todos: 'TODOS_CHANGED' }\n    case 'LOG_TODOS': console.log(state)\n    default: return state\n  }\n}\n// create your reducer and transform the action and state before core middleware\nexport default factory({ pre: [reducer(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n#### Example, we create a middleware but we modify only the payload :\n```es6\nimport { factory } from 'k-redux-factory'\n// import your helpers\nimport { mapPayload } from 'k-redux-factory/helpers'\n\n// define a function to map payload\nconst mapper = payload => payload.map(p => ({ ...p, id: `ID_${p.id}` }))\n// create your reducer and transform the payload before core middleware\nexport default factory({ pre: [mapPayload(/SET>TODOS/)(mapper)] })({ path: 'api.raw', name: 'todos' })\n```\n\n# About ![uni rakun](https://unirakun.fr)\n**uni rakun** is created by two passionate french developers.\n\nDo you want to contact them ? Go to their [website](https://unirakun.fr)\n\n<table border=\"0\">\n <tr>\n  <td align=\"center\"><img src=\"https://avatars1.githubusercontent.com/u/26094222?s=460&v=4\" width=\"100\" /></td>\n  <td align=\"center\"><img src=\"https://avatars1.githubusercontent.com/u/17828231?s=460&v=4\" width=\"100\" /></td>\n </tr>\n <tr>\n  <td align=\"center\"><a href=\"https://github.com/guillaumecrespel\">Guillaume CRESPEL</a></td>\n  <td align=\"center\"><a href=\"https://github.com/fabienjuif\">Fabien JUIF</a></td>\n</table>\n","maintainers":[{"email":"fabien.juif@gmail.com","name":"fabienjuif"},{"email":"guillaume.crespel@gmail.com","name":"guillaume.crespel"}],"time":{"modified":"2022-06-19T07:38:58.461Z","created":"2017-11-07T11:20:15.990Z","3.7.0":"2017-11-07T11:20:15.990Z","4.0.0":"2017-11-22T14:18:43.312Z","4.1.0":"2018-01-16T16:57:48.213Z","4.1.1":"2018-01-18T13:38:59.892Z","4.1.2":"2018-01-21T10:38:44.557Z","4.2.0":"2018-01-24T11:00:28.391Z","4.3.0":"2018-01-24T11:02:40.306Z","5.0.0":"2018-02-07T13:02:13.160Z","5.0.1":"2018-02-10T10:38:01.575Z","5.0.2":"2018-03-27T19:30:36.403Z","6.0.0-rc1":"2018-06-18T16:21:56.550Z","6.0.0-rc2":"2018-06-19T15:08:45.814Z","6.0.0-rc3":"2018-06-20T09:57:51.384Z","6.0.0-rc4":"2018-07-04T11:47:21.675Z","6.0.0-rc5":"2018-07-11T13:49:30.515Z","6.0.0":"2018-08-01T08:47:39.972Z","6.0.1":"2018-12-03T10:29:38.115Z","6.0.2":"2018-12-09T11:12:10.140Z","6.0.3":"2019-02-01T13:57:44.932Z","6.0.4":"2019-02-01T13:59:26.669Z","6.0.5":"2019-08-10T11:11:29.919Z","6.0.6":"2019-11-04T21:55:43.234Z"},"repository":{"type":"git","url":"git+https://github.com/unirakun/k-redux-factory.git"},"bugs":{"url":"https://github.com/unirakun/k-redux-factory/issues"},"license":"MIT","readmeFilename":"README.md","keywords":["redux","reducers","selectors","factory","factories","helper"],"homepage":"https://github.com/unirakun/k-redux-factory#readme"}