{"_id":"react-entities","_rev":"43-b23cd90a254a319fedd1be5bc735c3ed","name":"react-entities","dist-tags":{"latest":"1.3.0","next":"1.3.1-alpha.0"},"versions":{"0.1.0":{"name":"react-entities","version":"0.1.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.7.0"},"dependencies":{"prop-types":"^15.6.2"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","@babel/runtime":"^7.5.5","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.7.0","react-dom":"^16.7.0","react-test-renderer":"^16.7.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"f0a0e56f377308197e7e0e5c824517da0025b083","_id":"react-entities@0.1.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"dist":{"integrity":"sha512-crdZLpD9igSkTItVaGKuyPzhXncdHYvZ5uwR4k12j10BNF2Ls0lFrXrMmxroWV7pz5WYae0Wd9iEOYsw0R8XCA==","shasum":"a76b51e7d83247a818fb91a9ea320e33c2b0269f","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.1.0.tgz","fileCount":14,"unpackedSize":9524,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOd5iCRA9TVsSAnZWagAAYtIP/3P98gkrj5EaLI6nyZr3\nTIFd6JSgZFqkKKJXSjfAPmkUoDSYvjD3nV5EoSKW4UzKdFJ0nYohIhLFof6D\n9b/1XLHbnkmKN3t8aCxIvz4GdNKJxzI3x//mJzaPGXmZZnGyNDq2sSJkxIBL\nyzuVXFhulYZLw6pdnW8iHZWhdWj568GPiRTEffk2I3ICDxc6BU4ecRyCD/SG\nBb3XCe9+Lor3L1qDG4K8AKqwpbq8lXvwLG2IxPw2DNylK4/jwgPG6C0SRAa8\n6gvdUyAQHa/yMeIk1KgdN2zDFKE0K9LZennhBaxGJfgMScinSbwA6gCj3VLl\n7zmV8+vhWfFMePRlIp/pVZmb/w8AnKttOAcCYmIr5v6PnRsMtLsntHcmZyz+\nzyRd3FGpkIJk+lTPD3Xg+zYxNxffnwdZMMnSybLoJsg4xoLa/8ry53GXhso7\nkFM6Ua33ma1LJ2tSJn5qP3+GXpsM0T3wjw22Gb7vVOhJTcuMX6q+p4ugq0tT\n+KsMqlsQaZG8fnE7gXGdZgcILhJ3dfV+n8mGm2GQjPiVfD067x+0OPeFPTGS\nF+qr9qGfCS9FNu2z6Cg6nhP6rl8WSMu+/5LuBP/Ma9yHzKfCDczSRI0aIVAN\nouYeXUqztWwvgu7Aagk7VxFmCcponhvl5/rUWBfG6dqenviN7AyssXctnErm\nM7y6\r\n=AlVy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnnkPsNZiPGKLwh/W0QIEmofkCUI+rUGIiMpsAF42QvwIgHtVfeJNFtcJ+/LKmnbQKcAoEoXY4qdzqsMh3TK3nidc="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.1.0_1564073569837_0.2019947680372105"},"_hasShrinkwrap":false},"0.1.1":{"name":"react-entities","version":"0.1.1","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.7.0"},"dependencies":{"@babel/runtime":"^7.5.5","prop-types":"^15.6.2"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.7.0","react-dom":"^16.7.0","react-test-renderer":"^16.7.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"f0a0e56f377308197e7e0e5c824517da0025b083","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.1.1","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"dist":{"integrity":"sha512-O9htmYmfuQh7v9V4rZ0XW+h5ZL3tf1O3STkFIN7t/n7kQUv5BUKJl9pXuYkzkquYcCy+fr+df8kEFVbcXEfVBQ==","shasum":"e5c74d1eb591cf8c77206aa9fb89654c746e2067","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.1.1.tgz","fileCount":14,"unpackedSize":9576,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOeTaCRA9TVsSAnZWagAA63cP/juFEQtb4z5N/qBnCgwJ\n/amWCLTAW0L+Kopssj1deH/j6cWdcNXpjEHtFufQj67eUyVBa8ltNnrRtA8W\nFzPTtBhlr/tDBKMwQpfafJM88oSQrj5gFl/sph8485ldTu9w6mZC9eJ1tQsh\n1SilLbOu2BuJzl3uRlibgptbv4/E1jlf2Tz6hZPnLDLVp8rM8gd1jm2p+hmW\n9kNs/nKw8MBqBZoJOfosxSjU2o/9uZcFeL988yh7AnwsU9wsmhjKQGhusaln\n5HY6Zucf9bGUbyamTCviHK0ZE53GRAXWXnPt/tYwoTYcmktTXLN/S756ozhW\n14lvis2NKMVMg0HwbhdwlCeAteABZ8eXciAc5svBNLuNr+F8wPuP7P+miO9M\n1qv+kSqeWTcjafEkiKH35I5hKR+4Hqjwz2zT3yMvyEEC/NqQWYlq3/fhwwnO\nrFNb+heC/BcjZKrGyHiSqo534EUCZB3CuxY4AaIHJSSts+iLJ1bbD9MU+9P8\nAh7jyrPJqYpY7yWaLZyZTnNS7brip/3Ihj1nzOVZpYoGAHHsuiOaphtQQiVM\nDwtrzePWbab4CjG5tpoPa8NcxvBks2QWPbw3idp9jY0oUKenT6ihcT6H9Jmd\nFT6M3/hu7YqLNDJ5fMwBrUlSFQTj6LI7l380MQTv/Z9tZO1nPf7zBO28svpq\nNWlK\r\n=gMTX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4XC4s25X/Kc/5UUO7UePtzzpu5/mMKLOUPRWGjOPfCAIhAM2mEcLcrnrVx/cV3U8O5el3uSLhGEYdPyDrXlnH27qi"}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.1.1_1564075226019_0.5014652264231461"},"_hasShrinkwrap":false},"0.1.2":{"name":"react-entities","version":"0.1.2","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.7.0"},"dependencies":{"@babel/runtime":"^7.5.5","prop-types":"^15.6.2"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.7.0","react-dom":"^16.7.0","react-test-renderer":"^16.7.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"c1360ad9692b83126ced12b4bf32cd8e50291eeb","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.1.2","_nodeVersion":"10.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-3iRcFo+YPYWHE20p3Zr1sru1ke6igs0UlTCbBrbvOpzTSruaD5T3M3vGC/4QCdy+hhcN8ty4SOwEP84OntbXWQ==","shasum":"d26220a16e1d4dd94f038bf8ba64ef4330139fbf","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.1.2.tgz","fileCount":14,"unpackedSize":10040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQVhACRA9TVsSAnZWagAAwvwQAIhKPCbewWqjdRGsGtFx\nohPRlgS66Q5+y1S81OBJGUQsxSnlnQE2MaE1uciSTjusquAG3mYcwPna5IEw\nHEtfnnGZ+nVQ+DpWkT3+oTLbuRZIC53hcBENqL/I3pJNbptfh68MjRONMLNj\n2mE+p4xmD9vfGsRBR32ueTNIPG1VK3a58bt2xAa/jU/nzDTxmOcP/Isb+f/z\nCWT7KvH+rYL7AkHa2EoObkOX0FywQWVrPgJ6Vk88Vx9GNOh7tzVPSxQ/qu4Z\nrrlLQuU+baFjQz5SOwlHHy6KpR5QxTMt4b7GJm5vh0RKBuCt+kH8xc7gBILG\nG8+91P8AQdqnJHniVgpJSnDcwjElGPTTfbKa8DJGUrq653Lek8TQgVrAawZA\n6rT1c1jknQ8nOK3hNDJrWp2cCstgUqKaVF8oBZd0DuKRPpRSVpLMwJ5VFznK\nKPgoAPHs5D5oHYrFB0m0Fz9ZUkasW65L+i2OtazBB1V1fUPUZ8TQ5Wq7Utp0\nJv9wJmWINeYnYq9YPg0aoGEDkJhdAfNmXn7HWwzSGEjCw7CfYhlBAhDbQbW7\nX9R3f1Sv4gJlHjXYZglyksWN86bVH8r9Yv4GBGoTenI+ABo52xSeAFEZvVND\no9zyJvjWjz1fJ9ZR/bpnO9eTTPf4gU98tZZLK8vzp5ySwc+fBrkM9UtajIPL\ny4aj\r\n=9D6+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNvYYAQ5vzhb07GZ3N/d0q6jIiX/kMo+VQbJq6FFrL+gIgY8G31FGAOCFiJbF01tQFl6yBGqB9FsaVkiVgTyJgXNo="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.1.2_1564563519628_0.9846638481563339"},"_hasShrinkwrap":false},"0.1.3":{"name":"react-entities","version":"0.1.3","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.7.0"},"dependencies":{"@babel/runtime":"^7.5.5","prop-types":"^15.6.2"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.7.0","react-dom":"^16.7.0","react-test-renderer":"^16.7.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"c93d180d7a24c5a65ae29c3850a7d7e981d5c44b","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.1.3","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"dist":{"integrity":"sha512-6xCZVEhdJtsjtqphjAiIxKxtoCOcGlXYQGZVj/rgJVFkt/oyB4H3knwUljfmju6AADEFaoSChY1D8IxCiqEnbw==","shasum":"7bc8da5d68a42fba8545dd969b293a9ab0d1a5dc","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.1.3.tgz","fileCount":15,"unpackedSize":15519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRb2OCRA9TVsSAnZWagAAbBIQAIsALiRG/hwwP64N5hmw\nu/R6+F7nBlkvfObE4sPqiAL8wpKFjLUiy11BBa1VMNzK/3Ln63FPypehxuMN\naeHKv1qUvmlMr1wCofDCnJN0z7jwJNHF9JApWHVKQoIml9zK+eCoX4jquU2A\nrfDsVx3uMzQ5+MX9j4szVK/u4lbYgJeNEY4mnZuYetLXRC78za2RemcgQiEG\neNwe0/Y5Yv2b3P0XF+Q3ze7ENqQzyBXUkSX9JrWA63N09BSqctZhb7l69TT/\nrRuWXIac6oB7/vASxwaCLj2c/DePXEBda02pUe6qJXtE/MFLAtoHEd/X2Nwi\nyMbDh6B6XShPtzhrLquGOr4K2oySUus+OJFVeoRxdqGQafwLvuK9uz4c7Y2o\n2f/fp3pUW5URgKXvgLDFm+DjZT94kLL409xIeVBvdJHXEmieTacBOlZ1TAUJ\nN2UOENzI403ksW7MjgA+5KTU3kSFE5ss+46pO67g/xhT3bvxqrIoGLnrV4bc\n65hf5YYfzPgJ23XXRks/1gbqXKn1uQ4GSHCrZDdv3gIua5faSibx9cT4tiXI\nzzYjsDpyxs7zaopvJT/J+nr/Debvx0T+twksp+ByWYRdUUbPfY3KpTVVcO3H\nJ/yYCQn3G4iAzOuzh032Tc4n1laqrECNtHbNBDVSXIHqjXl4djNhNfRVq7J6\nS9Pb\r\n=pKR8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFxr8nhdU5/BJFpb7slRNdGvaDlJSQpw+lPLS9ca7AY7AiEAmABU4gnmM2G+ln9L+mM6pcjYL6FroSkSOnS7y12HnDE="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.1.3_1564851597442_0.591057823207287"},"_hasShrinkwrap":false},"0.1.4":{"name":"react-entities","version":"0.1.4","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.7.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.7.0","react-dom":"^16.7.0","react-test-renderer":"^16.7.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"3f4e7904577db3f44b639f9587b400028b006fc4","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.1.4","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"dist":{"integrity":"sha512-67QuCEDKowe9wQW0bDf0Hw0vzRMjrm4LmYgQEfwA9TTpWfR6a/KoXPBVzl7K+9zwrV9Sd3oHTcQ8lqOSj33HYg==","shasum":"b131575d38ab1dc2e0487d3c28d8033fe6716941","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.1.4.tgz","fileCount":15,"unpackedSize":15553,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRe0mCRA9TVsSAnZWagAAuGIP/13BCBgYwAl1+B2fkob7\n5wwWmrLOwvrVxiul8p4j3hRE36cvXRV2FiNBvAzUdmDHugbS1AzDkAz/uVnW\nstyo1W6BVXzBGU9nrAJP5bRovO2lM05x97/Y2FsvfHWchNgVkPYctG2yFCrc\nnVK0OadnoBtOSA8R8Lm5LNthfK5+BQIqkCj0Nc4iw1GaiP81t5OE8riKsh9I\n55goSGmhKs0m8/EbrYurMC4a2hkSaFpurLR/gkp+1bKvbVRPjicF99CIpK5s\nqrr5xnQQMsv4ANU9fXVKqdtto9yiL52bBcJkBEUS/eXrsZWMzmRxvC68/GlR\ncBOtcRTqK3qD8Who1qqPvGwiOTCEJq+3XYRsWOKSejVXduurmGIiJvIYtcAd\ngCNzDEfE9bFB5WlLI97Ep6jnaQXU+sCnyYGZNeVOac8uWka9au1wNie3j3yt\nEuCoAIkAInlcPuT55ecFM7K8n3VF7v3iofp5l5JHQZx4KKpfJsp/Dv9KnEPQ\nBBmZU3UmSDccfeB6W4Z4NC7IqykAVoRoAH6TlMohW4gpuR3NFcJulVGfSU/G\nXNp+BT3XrsMUgDMtrGj21scjUSmT7XVdVu+qDhGvpaLDnnbNoSESzJMXVAQK\nxCsbw5gN5U8e1WGd8lZz72YGHu6v19ldrUl2LYPevLSH3T9kJN2S/XO676Hk\nlrsi\r\n=Akxf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFoTFLAkLhLMgvX0esjt1RWuqgOIkA86EGrA5wn00Y37AiBK/6aEtAj10cvIIM9uqrGb4gGc9hrOb23ZMxAg/4axhA=="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.1.4_1564863781892_0.07738980662712769"},"_hasShrinkwrap":false},"0.1.5":{"name":"react-entities","version":"0.1.5","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.7.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.7.0","react-dom":"^16.7.0","react-test-renderer":"^16.7.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"3f4e7904577db3f44b639f9587b400028b006fc4","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.1.5","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"dist":{"integrity":"sha512-Pw5zXvWiy6FcgnbWDLIwhp5BDLnrOlYM7RZeXtcGKPmz00FuFrBUK3NoCKihH1jHv24y5AhN+QOsEfSTOK9cSw==","shasum":"f18174343a1964f1de4cb87b805a2b73756c90bf","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.1.5.tgz","fileCount":15,"unpackedSize":15568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRgDWCRA9TVsSAnZWagAACiAQAJaz+8jandyy0dTK4pCN\n0atcy6/iBAEWKpFxmYOr77drUPl/TBQoyjacfy0wVj736OR81WKZ4dawm/53\nt2YCoLavuV/aSKVEnkfiEqNM0y5MAkLCoPcsZF3yf+WsenPa/Gn1OIlP08qQ\nBn+8xUUEDj7ylQC5hYkiX+tE82uCNpSi8YPYOdFaAY6sTj2cL6Om1mhunZUT\nZjvvd/AYwMFF0oXtWmise6k37FcqLpWeXVbYVBFVIGsiQR8z7k7pJk9n2tr0\nDCCwB1HzV13m47XvF7KZcMKRI4BXDwCl80F94D/Y7cva7ri/t0nLXeIw6mUs\nTU9W0PWBN8j73IPP2/3iuJqSwf9bYWbMul/nQ8MBgO2PVhgG5QhJnId0bb6w\nWIe99s6i/P2UdhCiY324xcTRfk/KGdmGGgd4qxusB+fI77PaZqeO1gmzDTZj\n4StHYMCiOZ91gL1egIxafeU76jLEuOen0SM1mKaqIV7lvfglwNS8G2EXgmsZ\nG9P8puzh/busRa5ekGBciAvYOOZIjF58ufIhULpuqusyV9VflSqHGU4OthxF\nRk6eHJhxdxOj2mMbaRHZbygrI608tPW1l0M7eMuYHaofALO8Hb9kPIi16oY6\nrfamhAAeV2DeENiYig4Pqzc/tZEow/oLGqxQZkNSe2Qy6ubA+zSXOnB+XtsT\npTMP\r\n=LbeK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFDoRBenPWPzxqg3N/1RneY05BQtwrD8Q1wKRAsLI/NYAiBE8qu2gv0r3qYKjJ2UnfM18oEMWhIY5YY6atpL6LaJ4Q=="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.1.5_1564868822087_0.2742027304648835"},"_hasShrinkwrap":false},"0.1.6":{"name":"react-entities","version":"0.1.6","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.7.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.7.0","react-dom":"^16.7.0","react-test-renderer":"^16.7.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"35a3aff47ca1fabd5b89ccc8cde44a13027e1f20","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.1.6","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"dist":{"integrity":"sha512-VI+f2gyWJ0k7hhgvaN7B7OrTISJMli/xeh9MDSBbB6wcUkzk3U8biBTAOrIxy+4rKwSan1Dt8+ihw+k4da+3iw==","shasum":"059791e350ecadfe5fdfaf46f48acc2bc01c178e","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.1.6.tgz","fileCount":15,"unpackedSize":15869,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRhVOCRA9TVsSAnZWagAApEEQAIG8K5gKNKMHGYdDgbYe\nbtQaD75jtE227Jhm08v4eNXA4MSm92qqoxKZwkJvjoVtGDcXKjLJpFFeMox8\ndr3VChyUUckcgIytkyuR7nFVXxu2twdoJJp0eqyuwX+WwVHIvKO9EhN9/7yr\nvEe3VPAjvPReNUQG3X2UfNI6N6Q2A4nzxAdff/ygH/rV8P7pWxE6lwYRWFHd\nXbqO0uMBwqwh4cqGgB+kLWTn+QE10D11lUHNlNxs6WErGw2utYjwZXZhApMB\nS+Rkic/ni6DVDg/8WIwxSNVWpGH56DvbyBdrQw8IUgYVWqgptMbErwtTSGkL\nl2oa5fGypIwF0QP9C7iYo72e/yJCGgYY1LxCuCOee3ixMCslvFhi/OoyihyB\nrVoGah4idGyx58Ew2Jfrz6jBGAMbU6nguwU7txuvUQuYkDWB8udP4XprfbN4\nVCmSRQ59vfmYi2jp8pV7ZYj3Fo8P8vOFJHXpo7vgxw3/dmte7+3OJ3g7RT4R\n4SXr6ArSJBo1TC/m/359l4xleo/2ryjxUKVuekRbT8XHotguydTmkxZbKhEh\ngTBG+SWCOCsSqWne9jgq/wIvA0l/xvsGAYAtaDyrlKnmE5glo9GwwVbSMHOC\nIP0JlP1Rg2Bzmh7ituIubfFxvb+3ht84FCCSWT2y0OXQo/BrFh6nGro9dotA\nul4x\r\n=mER8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDEBq8BqjP4szZ4pnCCd5iddOjq0cWPSiifL9aHirGOowIhAMKO9fyKiONTNnmE6zWIrKqyknnCR7zn4t2RCTbqemKk"}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.1.6_1564874061472_0.8844269149037705"},"_hasShrinkwrap":false},"0.1.7":{"name":"react-entities","version":"0.1.7","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.7.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.7.0","react-dom":"^16.7.0","react-test-renderer":"^16.7.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"61cd155e6539d6a9eb4262738c0646c4799c606d","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.1.7","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"dist":{"integrity":"sha512-6dceWdyiK8NoGvhsy3UAzoZjac1Jvg90w0hpe+WoEJHQwpeED/8y8kPyLu7Led9piAa0BkguWFe1+svsOPKn2w==","shasum":"f617139ff25cf6469869fd890fed79f2f7dd57cd","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.1.7.tgz","fileCount":15,"unpackedSize":15890,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRhikCRA9TVsSAnZWagAAWo8QAKLS4P51Tx8PHlXkc8Xp\nFwT9dEZHa9pelAGy+3qcqGXLGTq4uQCBqY3AOOfwlaMRxlPuwRivW8ZzAHYK\nmoAgnzEiOWXySuXwnr6Lr4mGZa31g0rQ7jEm44Jac07BeB09CGYKrSzWp1fn\nbNTdBRIdRrbcnTYq3bC05l4jytyIjxduJHGN312B2icvsGcH7uCFM13+EcWP\nwYni9hPmpCDU7Smt04YeUwjiNMJG2yhh7OiXNOaezsuBKnmInfzx4rYU5sDb\ntihYDqjpQUgpl3SGvzAGQCUBuvJ/bSd/eF7A7QwCPREJxnTBPmGEKr/EIA09\n0Xj2Eq2zNiGAuOa3Kp2w9CgBXhq8u9fwM9LBtMNqeqmjlqlWx5uQCL8l9hXi\nXu0tz8+r0+0J/0xRhqssjupwtKbfjpwa5nnBpilFC6CZcoZzR3oS1pSp8Hhd\noXZs3Je3tlKZ5UViNN6t/V+TQzFsjHXBFlhMcJSmQef7xbYBtMntU0RsHT3j\nTpoFSTd2/qVhu4eOWygIO5JB22DMlodTL05Jb0+KWQCxa26ETSGqezvndo49\n+XS6zNNOeC2EozOJR62t6l0TyAjthonMFxdiRqhcX7+jgpWvUoBgq7fuFa4F\nsyCCgzJaXmZQ6CSNQX5qTSG3kcTfWmp/AeP6qMbBpBsq5pSpJ16RAHxfDlxE\nyxD2\r\n=Faua\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCU2mIYlQrCxQwq8uHsQtdW+MF/nh3AvvkobB95VagSBwIhAODCZQDvRvMqYFc41kF+hxnuvRwUiAzjf9ISOzwWJ7bx"}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.1.7_1564874916256_0.2760482650380838"},"_hasShrinkwrap":false},"0.1.8":{"name":"react-entities","version":"0.1.8","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.7.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.7.0","react-dom":"^16.7.0","react-test-renderer":"^16.7.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"93a21cc6fde1956f8faea13b2acb05bb8b3ff853","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.1.8","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"dist":{"integrity":"sha512-iKcLR9OctAltmx4VH+tiyXAcvucEaTG9QiFhR8zN7ImAN/JPyGUJKkBIWwHxeX5845oYTNnYUrJUheiWjr1tqw==","shasum":"8252ffd3a5b692a1c957b75d94d6832edcba95e4","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.1.8.tgz","fileCount":18,"unpackedSize":18598,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRxF/CRA9TVsSAnZWagAAj9EP/3eBzi/S11AZfKJYv/Pp\nxkXBsL/LOed3PmZ6cMEqzjd876Wj2Mvafup6/BA4njeyXPj4MW/rKPK5K/ek\n4qeZkZjSJXXtBpr9DAws9ShMmKTbbHu9ZVDpMtMkq5qhU8hibHlDaka6Klwt\npXZujhht2mcspd0MnvnNzGDtENtSvNkiwYrLh19SHFFcHoTgKcMCx9iGjiM2\ngvAGxpg5pB+v5UagR8pXTR2458E0wlk1ZKFYPXsJYwW74DiaNbvjrzz7t34Q\nRn2GXIt7+fQbWTqtbfZVGzoQlavip7nw/PXCOuat+coOk8vqdxXQINOnyvpR\nMhptCXXAuIKAk8Q8Qv91jMSnqgAiYDGoZ6oDGZGmDVPz9y+knDL0hVHNHEzW\nvg1WM0jNHjZ8z5MSOex1mgatrI25EE7uIUCsYjmDSQmgH1dJaWE1N/FGasjU\nZ0AZ2WcoB4sQfyoUb1X5xpz2oPMoixmhC2AALKS2G/3dz5q/nz+REOGLCumf\nYgBDxPWAZ/3VLFA2E8fiKMevCgtAwUamNp2XDDtIrdXd40qKgyjmmdoRECjl\nfY91hlRRhQVEbAKP1UxNjOl6VR/sVTFeUTS2nnG36PsodLc1hRlhi82hJcxl\nJVq3h0IGmel4fMLb780Ip6HtkUUwiJyOxUmsMt9dVIILDXcH/Mm2fMsQ6r92\nFn2z\r\n=tAwN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFpegdV4lFc4AiBqtB2WRZNEdU476ZXLYb8zJO1H7wO4AiBiWxCmj5CB5+xjqKFaMuzXbhpFCH0KjQHts29crUbL6w=="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.1.8_1564938623292_0.06882495362834629"},"_hasShrinkwrap":false},"0.2.0":{"name":"react-entities","version":"0.2.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.7.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.7.0","react-dom":"^16.7.0","react-test-renderer":"^16.7.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"2f1067fb3ba0605c7418e52c5183576a8a0911fe","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.2.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"dist":{"integrity":"sha512-fqbl8mKYVESkUl97hzs5huwdKgHK3rMY8omtKWM9HZU2bqhRX+Fkpwz6PV1nu/6ewoxOvYq9qcp5e67EL3sjAA==","shasum":"71c15531ad26dea16ccfbe5a94c5983a21b842b3","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.2.0.tgz","fileCount":18,"unpackedSize":19398,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRz+mCRA9TVsSAnZWagAAndwP/3G8FtodsY5QkNQfSCJx\n3BVgCgOWqAqSQQnD9ld1r+OQo73qcAbtF8YmnQGN5+Ci8kL6aNsXvcrxOW4t\n7PbzgY9BetdKYKrIk2IeJZjKL6buZxKNmb0a6/68qfQDQv0LLB9qLfXcaXUm\nTNJRMK9zdAXu0i+eQOVpEHyDLn/1Y7GV3YRxlcpWWo/NZ6FoeNsRViSOOeQ8\nwP+eFbah9rvAo/xz/aeXvlZtyK4Soq2k7DCOuNGHTFICH+PafV4+6G1UGvFC\nzTHy2E/4hqfe93D0lrH7P9UKhAmwbGPh7NrLCu1HCCD7eVi/mk547qqjrGoj\nZQFy0t5pLyTOKXngZ5u7D4elpeTnS2dhzxLv3ellkILbclWqiJhqcRjsIZd8\n+luOHyROzSxQd2Hqh6ysd0iO0/rJacL58JBUQaDOUz3xx07hYOlRMaa67T7b\nVJwPuugPhEIuzD7Xc+BSmSV+fYhzlV/Kjb4ENnhxH8tIbgZ0JE8bLKFwQ5r9\njGcoMo+Nui71bAdUHTyTAKyZNJoyvyYjc65YTcSBNQ7tjQIg1caJJziQRa16\n9LnXXegsnPtfxGozcxAac87h2awSg7DKsJYrDLXKVwu47uCdeYLzukk1DPr0\n3pNYhbnAI/UKYVNAl2SZ9Pv703D+6PVdu6hJx1QVYiqKTRF7r0j7hAfSOuHv\nyxCW\r\n=AWhc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFd46fslUTz5kr0Gd/o/eZXGGluzmnUDciSFoLWwVwR/AiAWN05AhvUNPUuQfPa8UZ7zGI9ilwcd9gV5Pw6QV8WG8A=="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.2.0_1564950438060_0.03122673904226292"},"_hasShrinkwrap":false},"0.2.1":{"name":"react-entities","version":"0.2.1","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.7.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.7.0","react-dom":"^16.7.0","react-test-renderer":"^16.7.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"3ae602a4ebf88c13aa5a6a26c5f93bdb75d4b998","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.2.1","_nodeVersion":"10.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Lfph421Dx3qtGWxLmGiKJipwatGC28gksj1rzzvTu8uXCLqr/LR3i3Iy480axDbVSn+i1ST6wFWaolyc2Cd9FA==","shasum":"310e474da1e9ce219f3966a0d5063e57a9a9412a","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.2.1.tgz","fileCount":18,"unpackedSize":19167,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSQ5YCRA9TVsSAnZWagAAu4MP/0WNnDwh0Tne42f+azCF\nkZeOU1mxVtJq1j5KymNjhIcNwXVhKI8VOKXRwGJP5ka7WAZDmrIXiaBbYh/z\npMvTLYXWszsScRJ/hSUIV7als+NOfWXZFqDlxYwL0S5R32udKHAxCvdmUoOD\n7kteUiCAJINFmsJ0fE4iPBlYxNoOKVuffhJfnpvKf/vR5zlna7tH7ButTUIv\n/froRkjAY12NkVsYWCNJ2dIxji8pC3nH/6TXXXOHH6zyzTgt677AQT4wDVM3\nWuXJlwDJR+r5OSmZlVxSlicuo1SV0A/sRKLr3zDbYGz6VSm+41YtOOms1rgf\nFNnCFJ+X3vnJv2qi7Giy6FvLpKl2JHSscd4kz5/KTkPqgCiZIpYDq+s6qKEn\nnM3sQQuMmkbumla/byRhFJ3oANG9VRK/iO61qPH6o6M8R8YBpLqXVRlTsbMX\nWRZcFNlI1RbTGexA5V+KZLtXpH7FIirzEFonfjZEBahOTnqmGQ6oIIy4fJ5P\nG7q8+TJoX1DPFPnn8SZq7LB/kjMmSn9olCc4g0dfhItwFx68whF+QkX31Qnv\npn4CRmrc3c0n/FiRKsxo83Gdee6Mt49N6uLgw2SQH9MPSpm/wSzenkHFvDMm\nTrRneZ8ST5jcK7wXbRsQGzime7GbjDtSeL/9JYybMzejcXvxFbfbXscqBv07\nexcn\r\n=DGdT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAFi90yDZXViyJNocbGNkqv18np9cWzXXtUQhGpmagQLAiEAsHcd0wf73ecBykpafHtrlClPwiowVL4LUvdlgkUEo1I="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.2.1_1565068887723_0.08321088665994503"},"_hasShrinkwrap":false},"0.3.0":{"name":"react-entities","version":"0.3.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.7.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.7.0","react-dom":"^16.7.0","react-test-renderer":"^16.7.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"0dec8cc1f3e0352ca3a100f46fecd4ecd1375c9c","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.3.0","_nodeVersion":"10.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-GTo3fnK3jfom3u811QLHNVgPi/l5cTVrnJR1d9SBOzscGeIfhn8hXqOWaQMG/DIzFcVw0qQCUJ5FoSXKXG2mVg==","shasum":"91eb8b2e27e61dac3432ac9de599ad24fbb8b540","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.3.0.tgz","fileCount":18,"unpackedSize":19012,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSn1jCRA9TVsSAnZWagAAOLsP/29Z/XivZ4wsAuwJ8xV7\nu7aDz7HC92It6SzElDdahHjrcacvczaZR+94ZVdwxQyTYOPY4vDVzb7vNZwa\nC9khkIiJu1j716ih25fTWOvrGwLBzqVm+8uf7eX+Fwk0082t5fxyMkHRaD6c\njoj91MDF1jihhMXzxHZhLyleBn/lyYkF0QBZMwUUQQdYPUmJIayaBfz225mp\nGO0XMhBN0KpumgnCJ4THTu+2896IWiWHHSlOWZGU1hWbch7tlrc0x2LExgM+\nQhJijCS7aYFZlfp2rDjY2IiqtNBN6THrm+Yuw//zLCN6pnnty8ycenq7dtpK\nyTihiqOMucIJIxK7bGNWfRN/l9fmskIExShvT6vn8DjNNQ0htcKmN7kwtvpN\n8/MI6a5Rz8Qj+6robCvRW4EfNUVz+1QhVAhaynXGGi/VwWtsj7pRpynJNmj9\n/Q44KJuuqOylanGi5LMh/QQWxndmDWTp/CPph/wEELPzmeQNBs/8uXX0W9ie\na8/VnvSZPXM+kKutB/zzSUU/0M7aYsEPf9GuOiw1j+bNrylvS8UojXNIIckp\n+lQW2qZ60kfuTRJwsuZI066nu35m90gkY2JT4TGPbdFOaKzrW4QvRLULJEWm\njXD6pmxRBkljuZaYiZQCL4AGmkhV6vpPMikIotunLVsZwhggFBoIezBUS2U0\nbXEd\r\n=K+JW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeBmrKwzSkOPaYV+gUZiemBcXjYNJHto4qjLCZlyTFWQIhANRkLwWiydu71X9vW2/yrv34nGWxqFU/CSzrDyx25pfW"}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.3.0_1565162851135_0.9847531676962886"},"_hasShrinkwrap":false},"0.3.1":{"name":"react-entities","version":"0.3.1","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.7.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.7.0","react-dom":"^16.7.0","react-test-renderer":"^16.7.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"a345834b102d630b0eb7b2b0a81103b1956a64fe","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.3.1","_nodeVersion":"10.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ruPJzA2Ui/RpPPe7QvZXTpIZDTuaurUnfXwOaxW2v0xIR0GqSQLp1rkBTbCsc9E4+g4MZnm4vkPJqiCQXJfxDA==","shasum":"d4d6aaa09ec795463755adc3e559f469f9255bde","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.3.1.tgz","fileCount":18,"unpackedSize":19002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSn3hCRA9TVsSAnZWagAAnmoQAI61jTOzrTyCeTOJziNV\nqUtPEoqWrEx1enof1FLPMOqprL+RZse+5pMo0o6OtXIxBTQhEctWopMObQyc\nOcrZXWAksQYjY421i0e7pIOqasoa4z4104zNQUX0fYly527RklbtDmA8yiUN\nvQKzX/WJr57SWSu7XQR58Q9zdg2OpzdVj4dwZ9FvAI3N4xOAiKva/8BzYPm/\n5W45V2gVsRhzZQqoVk4sdUvTN4xlRct990nbtHpouRKaaKgDfRjJGi31MY2O\njJAASJKdrCr5ub3OkR1NVJzDxQGdDX4yoIralFhQnrqPDmvkxSFxd7ge1TZA\n4+g5BygC+joz6kntpglVCNf33Vg4Y4Sod3yBSvdnFYupCzxHA1h+v4R4TlLH\nq665TaqqUYyqMM5TAhVzC83Ljwj3ad8U2QxOaSZTO29FcQNs4SEvK0Z87gKx\nWhEC4nK387ZLCQ6qC7VCZBrpNNA8P7rASQcA5Pzn9lmrXF9M0QNrPJGEx5MZ\nCdAzpg5BWqes7SiIP3CMZ5wOVKFJxNVYAqwNu/j/tEV7CDR3TViTN7PAaZn/\nqR1g5Up4zSSnqIyerE1BCUmpM9T2GpE6Ky6mQvyQuB9V0iqJAB37vb3xGNZA\nThERpxDGMaZKcw1R1qvZ03USaDm9YfQaq1mEPBfyUDrHTl4kwhisf/1tP7vq\nVp9V\r\n=201F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICnvUY04RMCoZbPVCF3/FxU6eN5pKFH2aduxtIRSTzLeAiEAz/dAwmcqYJmn9Rg+wC0sgQufSB/xDxz69Mtby68OZOY="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.3.1_1565162977330_0.4557738640962441"},"_hasShrinkwrap":false},"0.3.2":{"name":"react-entities","version":"0.3.2","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.8.0","react-dom":"^16.8.0","react-test-renderer":"^16.8.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"e617bf71bd60c37975519848525f1dc038767df2","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.3.2","_nodeVersion":"10.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-c1Wi5ZPSS0zduAD/mdWIysrWwy4SIbkpnFGtBH85IUcRh6gTTRxsgq14NLrf7QNmCDQMzEnbJTqvXOWk5LkLGw==","shasum":"2e9d5e1f1afbb0e19e44a68f342787572f500d34","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.3.2.tgz","fileCount":18,"unpackedSize":19012,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdS/MGCRA9TVsSAnZWagAANKoP/jyeyTjV4DvpWQ+K34Ia\nX7Z8ls4gTO9CpHgFM8S/z2dDJ3/FX9XveqFZ4x9JoEP5Q2tNjg0mGziFDQZq\nJ91DeJyqpnyyd2AmfFJYS75nUFdoN+048Q9C98DVLPnDfENX6utYN+KzlHKJ\nTd6zr0U2d3S/aFUiWzhtb1YZ1/fp3xGI+cxaQ75UC+AvyzCAy6W9kpBcmdvo\nUm/Wnj+Woq5uy/T9mYU2Tzina2nB9AWwSaL3sJYm//YiWJKMBl4xVz6Or89o\n04DOJW4ZNs2pWjd4dfVE6An6z14nnrcV7o1VeUKBFHyOq/qMzKqnsfhUxT6M\nHC1rPDf1brhIyDbX2bEGgjU31oEhvXq0Njv0vO0J60vm5JhpxtrBEUSFr9/Z\nS4jb4kIhMjNyXVV9Lyx5BcmWPFw2t2yVOgrZeKNLt5bHyZgD0IR85587xnk8\nmwX23IfBmtLeUyo6uZZEp6ERc3J+CaM+AWiLUoxczvutV1M2s9LqsuX5JA+b\nNX6lmxKZ1eQCmVy3sTSuYH77qYAGo768yC7QpCG0IHnSmGFBe8NwxBqy90US\njPqX+k9seUFxDnEG06M/QlC2CCddoERq7PueZn8rAuW8cpxwTANR/wnJ45Fv\nTBzHoZ5DGeJvDquryGS59tfUdK0O7jBVDAwtrphm5aC5JBMRn8LS7Ilvr91L\nlhHg\r\n=sthf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDj0Cxhde/TT+UGZVlE45gDc2sK29WSfQz4OYzV9SK7SAiEAgenYEkQRRqXEc9KW8txUam+0QRwkRhvw/8hHHEuunSY="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.3.2_1565258501646_0.17206963265221753"},"_hasShrinkwrap":false},"0.3.3":{"name":"react-entities","version":"0.3.3","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.8.0","react-dom":"^16.8.0","react-test-renderer":"^16.8.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"c7365fca36693346aba2a24cdb0e15445f96210e","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.3.3","_nodeVersion":"10.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-sDPyfX2J7iAp6+178fZO5aLLoIpObF1HGKy9mnOCdqK0bvrgrBVVOUC19B43e7S5MEAsgWb2OT60jy87vco4Sw==","shasum":"e7909a878334e8c66c3aab7cc9a6c65fb34376cb","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.3.3.tgz","fileCount":18,"unpackedSize":19041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTXvaCRA9TVsSAnZWagAAmOUP/i+9YiOEHJvNfYkDOUzz\nPmQi3gRUfnU4BXJcBTwdVeLsmTuuPmHEKYU5pfTp4s00DC7LjToUtwsWf03B\nsD3hBKW7zlmp3CEorT8oAHBxEupMqu21BIFouUH+L+sEkqYnXcIZ/ciaR36d\n1e2asvQTQfdO0HlCvjFeL5GxLauNlMJYPp9mdoTdjOGxIBkzvZBUwz5ov/IF\n/Eg4lUd6ZWaKy0E4kH2MoVxkFB2H6o98f56viTcwKq9DwjaSbUiTjqLHbVwG\nopMKEciWVwyVL3RUgDfD1KX/Zi/nwdolsyMSDnjCmrpr/3YvMPzA/SWbzIOf\nHdb9Ab+8Hg/7zUk8xOsiNSn18tqpWDccInewFb0GJ/aZIUSbTjF6EblYht6I\noilEorimf+wv4NAlvJ5F38kdqMkos+sumcew/Xwrq0A5bLOfT4LELMEbCgsW\n+wYKc3JAHE/kYaese4fUHE8UmLICP5i2sM0NG9y0ka3pxSyVsYml6tR0niP9\nshTrcFZR6djDEuUNLR8XYAls4aHywfgygCZFinWRmfoec50NgyS/gVO3wy1F\n4yoiDLA+E62z9vjgUYt7c3PQ94xyGDRgdq7Alp9vawVOy0s2euYnAJe5k2fb\nyDybNIfgn8vXXDMfEJooAg0eTOahpEPv8FrP30dlnmOtm9v5PWOCVxVpUTAF\ndEbK\r\n=tMDc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDT1XdqQw52C89hiluaH9BgAiRo9PWN1zZ4Deg+Vh1WuAIgehGMaxMcrC4cH2NFkLqJye+zoac4yJy0eQcrTMZ8vaU="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.3.3_1565359065301_0.2715944668894963"},"_hasShrinkwrap":false},"0.3.4":{"name":"react-entities","version":"0.3.4","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.8.0","react-dom":"^16.8.0","react-test-renderer":"^16.8.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"a737ce2835a328e6c17f02b1468e7e96a1ef12c8","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.3.4","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"dist":{"integrity":"sha512-PtAqdB3pONeZl8KHMQNdMfmdtUSN2jxiP/ZctlH2vFMfSIs2ezuBska4AI60SXobDpXsel5hqn2/pd57wq+PeQ==","shasum":"66a31aedcdf7911c1d8c566033fd2dd481e948fd","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.3.4.tgz","fileCount":19,"unpackedSize":19850,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTZMhCRA9TVsSAnZWagAAzDEP/Rj47Sya/nktdFT+Nf6x\n/XoSPS0TuJCj/5DrU2X1WIEsG/4fUCael+I9h0BnfKitWWmKsB676/UA0zC9\nxTFEeIvGNxjhaXLXK+HF6fidAm6W/JQ1iQWormXU6fI0r1hE+lnAVcvvKOJP\nwq42WgNHg5D83fGCck5CHfH/hLPtHMXWDpGXFKKUzZUjuJHcXTdGfM1zWTRi\nBYiQt6o5Q21wph6sr64VWdfpMmWHYAmjNaIDrAM1oxf96JE+Pk+7WEifmuCX\n88tJE+xgZSbwX/5sEndtjU22507ZcpT5oy2ErHCzQoXWEoTRq92j8FnL9Iqx\nEV6XXCw9ozTUdcJUMtNv5/fpseHO1jTvIPrrFUqH78fIx4c3h3Txo8aGg9yz\nn3BtmMPxR55WVYpCRMCG2fE66b1J1HPEcJQKbTZGsjUGO4grg0tXaD+RgXCY\ni4EcpDGhzX4LhYdS50J2jzDxosqzH2MosvHwqYxULgV9yOx6sQFf2Dz/NfIO\nP73imhBDlTBAbcXlt4dKICZ9GkwvXk4rDXwTMJUroNENNM0SyuBClOWg6j41\nW7mRI78uhfp0ZhR+UNy8HEpOgDV9OhHmwhqYCrGdVU3Z42suk/DV/qgu73il\niWcuBwb8+Oe9kTEnggpiNYv28aU9/GEApil4ssyo0oqfH7vyjq1+img112Jd\n7fab\r\n=+Qfk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGaHO1iT+sHJfqAuVKkBgFk0yYKWtGPUeF6obnvAiXhHAiEAycb1dvfCi1FR647zumVktCMWNmlNDXuuIOxaKCLorgI="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.3.4_1565365025015_0.465423722684134"},"_hasShrinkwrap":false},"0.3.5":{"name":"react-entities","version":"0.3.5","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.8.0","react-dom":"^16.8.0","react-test-renderer":"^16.8.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"d5a617d01da262ad8cc9628b0b0b434cef6ebc69","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.3.5","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"dist":{"integrity":"sha512-gXCJXYzGGfoZawxd1jASZfnkc5f9sto0I+liyPO1APnmKfwswlqV8gYVDx1C43Tk2xMkmv93zAVfML3JyvLGsA==","shasum":"2141742fec2b51253689176b97e493aeb5bce59c","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.3.5.tgz","fileCount":19,"unpackedSize":19873,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdVBkoCRA9TVsSAnZWagAAVM4P/1/8Hyln/L19M7acT8+L\njcWwnQo4pq5+0YPg5dFcHleyTVKmyoeCw6ayGUY5vAwlYKiS3825uCM8wfUR\nhsg6PGc4D321BkUquFTj+zjYoqVG9jQZZkHFaG6IGwez3OYayVmAkUZpMxPy\nC2Txdxq3U05vR79lnGb4OYr35lKX4pj8bIK4ZD/lTW1iKOPSqmUY8RXVHc0T\n+O7MV4lW36aW/sDtfxzagAkHmRzchj4FRltj2CSt9nG6qCzI5eu0hXK1amzP\nt0ErhCSjF4lh9b4p5jXOnvlp7AEU1KrmiV1xLSW6Z5qoAeA1ipjGy/+AWIac\nLxPpdn2llfuKyOpLzupe4Cb4W3t/vwV58DLlTsyoONeqPMrcxrs1aEIyTDqE\nuwHIi4IlhsXipK/aisVUp7NPdjmH+81sMr/24wQdohgMD1lyw6tPSWdy8JrZ\nxwrc6Qy94wFUqEtg33c4f82XKxkWsLkPV91Y53oiso3P5JV+naU/ojcqoXV+\nUFnH9EkiewM5WF9TAUqtYWgqJxzRp93muAqeZymStNEEuL4ckzvOsWEhZT+2\n+vsPgDfbwsBqRRCZw+/ulUy31ZZkquDN44wxQxPqi/i1UhMdFR0gAXNFQi38\n1nwoj6lW5hPflUfXhjZ8cwoEc0eNCNEc1kBwpXcc8yastYplryb/4iVTw1nH\naxUr\r\n=rvun\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICa5NabCcgD3N/ilXTQ91/A5onThzj1gC1ZlnIGtmJaCAiBYGS75kUKqar9JxNDNLLpLg+3SCwFhx2HbIdVnz++MZA=="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.3.5_1565792551323_0.624430966797612"},"_hasShrinkwrap":false},"0.3.6":{"name":"react-entities","version":"0.3.6","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.8.0","react-dom":"^16.8.0","react-test-renderer":"^16.8.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"4c0269fe2d98599e8ff6871bf3f0fb7011d4b667","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.3.6","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"dist":{"integrity":"sha512-b/LDjlUQiwdAMXlS4Pm4e2zXfZL51OfenNZSkyoRiiUP3KfikXKg2sJ9hGN8PSHzvHpt+SjSY6JtbibvoIjfJw==","shasum":"a7a146f0c20b79a60afca5b50ee0b348c052364e","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.3.6.tgz","fileCount":19,"unpackedSize":19622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYBfICRA9TVsSAnZWagAAZB0QAII9Lgj/Z4Duh4zKhsSf\nBxvovIuAYKd8aRMY9+1B3vDAmjado57X/BnUZKslZuicpYSHUrxVX0qGCdGK\ngDxoS66QAxfqheoPAVBZGUkViO4rh0w1eDjF/36Nb2Qp825VmvTcIHNOcaNo\nCFQvdIWYsCXT+LX9mqV1A1d241AzjGBnwzHL4oVsHB9Zeg7LcA+SBh3O+Pfr\n6v/QPdiBMSfSHnhidIHxmUhyiwRG8ctexJDm/VFlX57wfr2sfEfTFy5LqUp1\ntIFkK8MMj2Y0db7/a3f4fExSdSl4RYSy7JvK7DgjEsn0yA8lhNwbVdD8D3wQ\nsT998YjK1yq60V8y/JcPCmFN3LdYapwjliu3cTsSTy+u4sVb/gwpRG/32Ho9\nlQrA/cnjauDC9P4L29+9tY1pJa9Rsfy6vHlzQdtUIySNiy3dl7+GKhdcSmFI\nvPNLcdu/S6Fk19htJnMzHOn86Q0o4Q/5JXUn44r1LsdTL0lElieDPaKuxy8l\nSaAnv0PIv23wu2RzTbFIzpfDh33KD2+fK4YWtZDZFgPK1azQ1Jg3QQyq8KiR\nG8RYwQjdQp/MuDFPaMcVl/3U17mCaD9nPIejaiwW0S8rCuwxYvo1jSD3alZj\ngwH8BCAf6CA3FG7jAqLYiM1UNFYT4YbBZmIOaMh64gjiXkm2ZdfIr4mTCIL1\nMVXf\r\n=maWY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGSVTY0Oq4PDhZ1cDVlm9hLGLycI9kO6aAqxUUl23cxGAiEApU4Kwbt6P9fRRINRUG52V193JjZ4apHMQJBx4paPolc="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.3.6_1566578632133_0.45804521203028425"},"_hasShrinkwrap":false},"0.4.0":{"name":"react-entities","version":"0.4.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.8.0","react-dom":"^16.8.0","react-test-renderer":"^16.8.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"d07bf4dbec446224d54372db922b1ac9a63675df","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.4.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"dist":{"integrity":"sha512-zr/LoQujvtBKktkA2OgPQnQIpExCYLzrKjBTC/9xCAiFRNis+V2eICdDTdu+zbT56P4tcD7HSuylINKdJ5ijOg==","shasum":"99662e748a4c9416b14449ce3d622511e81e7261","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.4.0.tgz","fileCount":19,"unpackedSize":20783,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZVReCRA9TVsSAnZWagAAtqIP/0ylY3NtDS4IPKOUNxM1\nKxY7bQrs+drCn3MapdAaykucSp8kDbwubfMcQNcjkIjWJhjDzYI3UipzJM9b\nOTSo98RM3FB9Eh+s1cK6MO5VvM3piq0I+9qqTvGdT7dD9HUFckWaPGvtbdLH\nU2/jr8XMrt2q5FJIZNUfrkFGnaWHaTMjN1WarkKLMYsLvPJ0B8a1tZazkAdY\nuI7DjCJlIuWLNoMW9EQoSTpWLpn8Nf7ROHB+Yx2Kd4o3F/Kt+Wqqzwfb/YFi\ntIJ8hNdIFzBXtBFte5KfOIXkl5OuTjwwGQHTqDK8WSE3csph6/AZ4OHWN2gd\n3aEtEUHj9/SbS2b2c6FPqpGVRTXxFfsyzoFUXPju2JAMnhSa3FGmXIIAR4Y3\nxYr21yN5+HqQTh6YlpBQdsI2gtlfgNlHi7pyUESTOF/YyO5BtJi/UeyhGtgn\nAIxTSpiULKw0pU6ARHbMeptsTXyMDoM9ZGnTcEH1jsvFh8Qxoc3ynknQRZF7\nlnfAB3VEvT1+Jmsao5/GWeJoD9Txw+djZsBgAqyT7AaQotSI86SDIUuCm+4Z\nP+yvqdwtHjFGNJQsubuzKON+uvNBiIxFskKeY84vhwGaKKiMrfuwogE0yQIT\nv1PBQLbH7z55A4Kkwq5zQ5OhE7ihVJbyfSLiBSLiS5CId/Zl21uqJS35re+m\nYmN9\r\n=Vjak\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEmd49rRY2eRBQ/iXi0xU46jDV9bbZ3VeFbkT727kOUXAiAynKxadTPXhYoHCXbLzF9tQqcLJosc8700q3hOE3frMQ=="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.4.0_1566921821488_0.163611748092362"},"_hasShrinkwrap":false},"0.5.0":{"name":"react-entities","version":"0.5.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.8.0","react-dom":"^16.8.0","react-test-renderer":"^16.8.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"2a603f665730bd7f1bbb94baed6d546c56170fca","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.5.0","_nodeVersion":"10.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-mBLltv1eJIfk7Einf66EtPNfS+A3d8M0GkCzHf6S3+X/QH2NMOowkz2q/AZZzW9FQ8tK7k5QQ5bE48ZdkE3UJQ==","shasum":"5977c8f8048f12f3b76af9878468ae439763a491","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.5.0.tgz","fileCount":19,"unpackedSize":20762,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdru1YCRA9TVsSAnZWagAAq8kQAKPbgZ7YoIEpftj0yyGJ\n5V5lg/gp8RpBfLXKpEF4Z6K8EZ5KeEu3NtXWnXrUyCLWfFYBX2JlK4BVMHSD\nQHD0QhTDiV/GjeaGLMM0D9YSCCdRM8kCcOIDR0hFsW9PE0QOlCKmxdAFx7+6\nOS7FQKeNcHqzJnf9oxFZ8Tb81wQtziz45we3wB/zW521DJlQnftzOB4uahSp\nfbVfTi2mB1XZpBpCWTN+CZdwwOULAxhnOBTJQFwOWs6gxUZSbDT7mEqRI2ES\nOO9O5lBxbZC19IaCuHqC/eJ/iDGEgM7HKZxkqKPVqazTST8rh7b+N1nm6AMg\nF8ySQse0LpeJ5K2l9pkKdvqvlj274EprzfKp+q8G9H3czVjD+m6Sx6ECLyhQ\n6nzDBmQVc0jwjox5/TliUDIYpMyqLbXCmLfVwlfm6nLLSDsX/5PTsESqL8RV\nTbfEogy3NQupjXsz2ts0sWf65/0QTjc6SLhx8mGjawnBal8Lu+IJbJ2agJ1E\nZYmsPUf4s5M5HAjJn6+umf6/IY/MDC31KHogexM0nxvkmdNT7JQbxiiXoP0U\nXQN+jdO3mcxlIcBOOS2ZHf2jQ5OFbUSo/PNlGZnuxe1jOd5cHdLuzlpEXe57\nrt7Mue/99XCcquUeV20zljSR8yye8SnGXWrHBpNq4d6vR67yXB4pg9vyQRGq\n8jXG\r\n=HV3M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFipPvJlXeOSXC4WGOOcTZWAIjHyxWYBJE3HnkfzMiQhAiAKrYIOyWLIiEzDWevaOF41HnkReYoIiSTk1d1V1O40PQ=="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.5.0_1571745111510_0.004850957965999436"},"_hasShrinkwrap":false},"0.5.1":{"name":"react-entities","version":"0.5.1","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.5.5"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.0","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","babel-jest":"^24.0.0","cross-env":"^5.2.0","enzyme":"^3.8.0","enzyme-adapter-react-16":"^1.8.0","jest":"^24.0.0","react":"^16.8.0","react-dom":"^16.8.0","react-test-renderer":"^16.8.0","rimraf":"^2.6.2","sinon":"^7.2.3"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"0721156995efb3da0c172476d9709d6013bcbea6","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.5.1","_nodeVersion":"10.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-brhHG6BSsW6JHHZH9JHNxi53bErb1dWTcLwmaZAW2c2Nv5NjRDgZmDU986SO33N0zOwxJvAIei3q8qvlJZO3Kg==","shasum":"aacf0f3872f77807735da94817a07bc294d8970e","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.5.1.tgz","fileCount":19,"unpackedSize":22456,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsYn+CRA9TVsSAnZWagAA+t4P/ihS7yfX4Kbj25M9SlYc\nCrvVJ5GUW9NedQTyUyPFr+Gb/F7Bvs0Lmst7qCjzRSSscCT9/3hK/+xmQSM7\nOLhEnn3wC3+KAx879DXceKxQFUDtX0ppLqYSoaj7gpcYb8C8vNjhARQ/NLOq\nbb1MYHALvhD4dhodoVHMDsnCFkpjmxlaxzj9zAJSUyV535aj0C/3JEqlA49s\nsJL9wf3LqW9MWSmDjZvUFrzvkkTo6UO5OvT+eC6A/4ytFFnYIpWMGKIuFogH\njzzkp97Es/QAdtjpnrJ7B6010dnaiCpj1N6CTr8uRLB8ocaBAEcLTfHAUrrP\nTjXWg1Rtf9wegITXMcSMAtn0ThYKtDEP/T2E93IjxD2mrr61FP9EjOiUKE+l\n9X8j6+eaEDawmhjB4mBke52r5AeUmFZS+hipZ+aN+Dq6UC8VaQAzUXeX4nLW\nSzMOxnuDG+CDEMV7EOAOV5WidfDN4c62c1DN0zT7crDkYPVChaAWl7+Lchgw\n+M3Wt0qHfM0yHqC7vsjcHBMeMPuzllQj4QGHqUWUDyXAIcswANMm1rGaSrRD\nzaQ8ol+xY39+lvumJmuGqklRH5YF1orsJZ8Yz0S4/7m06ibDeXxghog0gfMs\nwn71mP44TY8lM6F8GTZstzDwfIKPE+w+zY6HvTbg7pY5QeYFHjpvSiu0qyV/\n7STp\r\n=LxnP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkFWjZQBMzQoMojFeCYI0s0htAissU3bvMCuFrQQToOQIhALA4t4FUBWuqLBrYOB+44PMj53dMdVIiiRaC01oQPaGc"}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.5.1_1571916285607_0.1010417500559857"},"_hasShrinkwrap":false},"0.6.0":{"name":"react-entities","version":"0.6.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"cfab36555f69b4881e5cec30fe402d5a32897e5f","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.6.0","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ezfHKLgA3lQeqbcMHQ9qCyv60rOeppZkLFyNe40ijVwbIyEp+sCWE6U9jIFXSJrapYnL+PJkP9r1KYVsGx13Rw==","shasum":"48a8d2dbef16247cd07787637be7bd65ce5ee538","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.6.0.tgz","fileCount":19,"unpackedSize":23148,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJek3kpCRA9TVsSAnZWagAAZn4QAJBfpc6S59s+sOfazCDB\ncvsPzTmQtZUmaQGj6pPM458cjJdr0c5K+zqnG/pnLq0+yIIw62ferz8pwuZY\nZ6B5MkXB1GTq6OSSmPaHLpegMcWKiCFMk5sLqgEboC3a2fTDsIiWMuD4B21J\nX5YlrA7sjwqCgvWrgA8HNm+gO2XdOAX7mKbDdM5dWZCDwBe4vNffIj69ILDb\n9ZC0MW6LdbYKE7Ywxet2PJMycdNceGnR4z1SpTwUCW7DfjDJuIpYOtyMD3aQ\nEtj7TgGRjmtq1NZ6qhKC+QISNMebmybt79X1lLHNbTWpSwXwx8YcBbRb28Kv\n+B+eeLMSSfSsVYxPww3SplikaBTXO4kG30anWwxQ5+40b7cJG2sOe8DClzSN\n/aL71pgnbwGtFhP9Etcl89VWPUrF+wKM4Cbu4Kujv+utppI+joHLOJ0JGFI0\n/vy6WlIBlEK8k7HWc7jYuCHYrxm+rAQJaIWmpHGb6Qp0ddDqQjXx72dD1CZu\nB8rgLhFjbvQfhqbMa7supRYZRUiPbClTv/Ty4Bukr2pObwP5RxydJ5ceRP/H\nQjvwjRrTyXDj6rlraFvkR3T1lcGTZbFCh2cJqxI+wA1vCBEIuk4NY8bK8ujj\nofU6m8QY1kTor+iw/ZG7kd7j0aNGe/fXWMmcyqDab8ZJAlC472aGeRvHjZGo\nKw+g\r\n=XRby\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVRIONv0YEXPX2hlxplzSt1yAwlFipFslFeTqCNZxsOAIgURgB4KiBNPi5QmLlnqFmo3MiU99j+mYtVXwE2l/pTNw="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.6.0_1586723113143_0.9984852865653451"},"_hasShrinkwrap":false},"0.6.1":{"name":"react-entities","version":"0.6.1","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"0c22927f96cc09bdf7f3616dc9c2cbdd032641a6","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.6.1","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-CCw4jWc7yyGojyf0TQpYNEZnaayMyCYZZ1k4Mqd4uOs9u/+5Ss4qjNEUi/hsgN0IgJrdmba1lK0VJxhqcHjOQg==","shasum":"9bad66ecbfbebfdb57d868ea98d2b3fe84112f45","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.6.1.tgz","fileCount":19,"unpackedSize":23160,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJek312CRA9TVsSAnZWagAAwM0QAKF7OkKauqrBy04nsNe0\nwrcfPZoz5sVnHx/7KUnSwL2TjUJOivu23CJuPL4Iv2XvAjb0OPxhKWecweOE\noOIiPm6prwUBOFSC8AT2ry7eYrt6xshfcnPJYyp2fMRb9zQJ97HS5HsiDufb\n7mJJ0D7P/jujtWOuXslSqbs9j/8MNQFR1vA6XdMtDAD0CHKfD2k0p4Ihrzyt\nBktadx/GmXa5Wvv68LFccypbLW+PxXXrrf8GYEJkm9gms03xxsGUaq4mlgaP\nPgxO54L+IB0zqkLdWo0Z6kRk3dMEwV4dc6juhpzLWb83M4WOoCTg9nM3bOeF\nK/b4M4PNqbLGKwQMxT/mK6Bq6snshTVTVVe0tkllemwcPYgQ7NoWG5OV5P7V\n6hMRZ+aI1kHMzIMiR6rXsvMJwujFebrAStbF2lf3rRw4X2pmhKJv3xU8iLWm\n9YxtJ1r/m77Su1x31GqhBCR/bazSfQyVO5CQMfYt8TqTwxtCZXb0TBjzxy1c\nxuXI3/RKq4YVD8wuoTydto3xqi5juuzbQiY3JC/RmKZ6q23MNhsQfY7M2Rop\nXzBDfmJx2nopv1BbM85KzW2pQ/LJhMdnL2ibmdNacRthGkOxRAdRI02dnOuD\nPbyW+XiAhn4szICYORuV+xtfb+4M5VKAGc+e06jxxsyB+0PUNpCTj6tsaOtr\nOL3h\r\n=NYGH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLy6zwOcTWU4Qjt4eqnwVW+GJRMsXJhaBT6o9gXvl/6AIgXHCvW6a5I11gIKb8wjSjSmmg/41OEUb1ja3j4gK/5JU="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.6.1_1586724214118_0.6362408949480949"},"_hasShrinkwrap":false},"0.7.0":{"name":"react-entities","version":"0.7.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"fe3367d4a7ae3ba1a66211592bfa1014b51ecfbb","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.7.0","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-CKeuJ62NAna2XMtHFUWLTnTc8fbJJ/4+EV5UuiyM1zTlja6BGHYaBYisdkdQwVvVsciddOlp2778e3h4i+tkSQ==","shasum":"a33e2818a444062474a0a787ce9b76841f792c25","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.7.0.tgz","fileCount":19,"unpackedSize":24901,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexSDmCRA9TVsSAnZWagAAKzcP/jy9nbLYDPYQwUZykNCH\n2zCikoJJdnPWI+ofutU2XhaqzbYtkBWEE15xddUSBqYhjJdp1WedoKKZ2S7e\nDUWX5rdTiiMK1NzL/7yR8gsVQzYFd+lvKoQb9Pi7EBz/0qTHIpBd//8Pwa6s\nTqMsxVtQ8+xtvIZtiatIDfoYfq/+njWybqHMEPssdowzeij5PrHtHT0TCwpc\nJDRs/14K70RCpd2GU9srRpGvp4aidFqUbvVuhTVujIbcqbftNtfvr5KbqBJS\nlppnNX81VBtiiKH5TSON0MI8qdHxNAb2NZ88y47/nm8eQR1KBRVHcKOBQINJ\n6gAnFwI25Lz2GJtS2eEn5Fkiea7Hb7ioJNQcL2SpgEbMULWcsz9oOXr221gj\nVGlw76TGzG13WplEGZwP2QhgKFu9cplUG9jzqkrQhUZYZlUV6fHnKlQWxsP2\nSnxOwxmR9okQMewUt/Iernr7V8X2INM9tCesdWOu8dgTCZx+VUUrl2KnW6rQ\n0vg+fOqx2zfSi5WzHmoUnI+V5gbAJckjCI0PPECAhTg6fRGk59JGqFbQfOvH\nhW5dZ+rZo/j/IoYtUFVggPyPmKuJJNdzZLExQOR39dpegv2p4stjhkLg5Ypq\nxDbOgHxfhVyWlEhBwuZjgeFpqNkbEwaEUSkS4YedKDLExrpNvVbuM1ZJ7yVg\nfN2U\r\n=P67b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICJkO0PiOWHkgbMgZnCgaaNO3XJKTZ8enSmO4N9n3i7RAiEA/qFXTa93FggaD57TiJWfjEZnsWUenNYuUb9eTD5rywI="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.7.0_1589977317805_0.5902415385318869"},"_hasShrinkwrap":false},"0.8.0":{"name":"react-entities","version":"0.8.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"30623db6029d4b44a5d4473015084cab1d2b1df1","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.8.0","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-wQ3tMgR8Nz7twbS4Rzsgz03rwd+UChjdLojbQalPZ2RdLIk9xTpUVOmYPPdZlC1yDq0Ri1LEHX5BnJblwV0iBw==","shasum":"c029c4f26c7261a24780c919e2851167600ba074","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.8.0.tgz","fileCount":19,"unpackedSize":23884,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeyRXFCRA9TVsSAnZWagAAnfoP/0Slks8pMLTv1y2vMsET\n+zNvwdN1cR66fme+VOa5MuGCs+7KD6aGAN37yX8jdDQgCr5xqGfOi0hT4CPu\nhvUgNiC4L9PVtF7yBsRJX4YADjfRrMvvNBhkWs+IGBy9smT1esMfWj+fTdOb\nJ0h8+4AFhQcccre9Gy3u9VaC60dm5nf/k0aFOfD15szjXbxWBJs9vsXlgnxq\nYGHBfPtv6mP3I10QXQBboUfzqoeVOZl0w5EkMwt9teR+HMV/TNX2lj7mvkeq\nG7k8+13ivTDrA28KuChjcUCdtt7rIlDQw0d5n9HWo5rLGmYYN6hj0pUCsrOH\nYVjeHndXfyFBXDDwk191k9Q/sDDjN7JHyqsgkKX1iciPMxPmfXAM463JQao4\nGkX8iJ6P0MSqT5Dmlm7VUy2cvovgaLlscWk2lSTZCmClPWWj09ZOlQXVt5dg\n4MGNuDQ4tc3FT92mdAcgs4HizqHTbcGxrBMBIXisZPUsefas+AxvdsJlvVgg\niVB5g6HB8CIqBiXkAgqSRIxx1WpSpJUY/Dxu7IwbV5pZba/aBho4odTnQ/pQ\ny/dqZDsyef0jGHf+lDbUczLoTil/AISArPD8fXm4higiC17nYJ4mYqo6Ujxh\n+vJIwIMIc8FTbZABFry+N2Ah8jpp2Dmj8udTbCAvY/yxO1mga35PuPTfAGmZ\nuI6P\r\n=8dgK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD83mES15QQWDrbwme4cdEQ9cbku3ueOHNKKDJoHGVtrgIhALqX5zao2Jx4pSTbevHz3hep8eWtmWXjLW/jP9u0f4Ib"}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.8.0_1590236612543_0.3476403138936568"},"_hasShrinkwrap":false},"0.9.0":{"name":"react-entities","version":"0.9.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"496248b467e215cadb33e696f0257668d58986d0","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.9.0","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-pYXJOkR5j7KoiASWV3Yrmufk1K4LPIYPAozFbrH/evBT+581hUjD9ZPPCGph6EV2AIN7YLxaOA+LzjZA2dKU/A==","shasum":"d626d6b9b71842979077d258334f6760ba0c5878","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.9.0.tgz","fileCount":19,"unpackedSize":23939,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezCLNCRA9TVsSAnZWagAAqW0P/jRYAG4tkHz85Qih9vFf\ng4fFznZWfRNdwtc+hs0Nic9He85NxnCoe2ePNQTAOUR1YpmE4pmNnFAUwuAf\nJfDEnAw5pj39L0gPluz0QWXunUNdDqUh0K+weAnqYqM30Ju4aTZcmkosJY5E\npXRWxcktYkKKDZtAc03zr6PM5YCOplryLZhyNTJjGKROsTiF7RHkAku0r+0N\nW29RAoqNXm29NujQmVovMDVCxJGSjELNAGRFNnrbnlRMmp7w516dj+tnsrY5\nk5cqpbNt3rFLTq7u0jbX9cor04D7TMjMRiCDJVfOT2khDf3LzgijxBsALujn\nPhWw65Qs/don6dP5uTQ8kUl69rnn0cGtjulhQCrXUYrwqnNXGWPeRKWtVhum\nJ2gdm5EQs7RaXPYlurqzalPdmzUIMScoWmcMog2GfuipzQhTuD1RBxtqHK4F\nbbgg31tAmlOY6hX8PyDXlm8ag+c0Mz5xeFnwz/uaSOwldCVPpGuytntXi/ok\nxdmlEajtfeUlvNjfUP22gkIL8pjIhS5i3ygk+qaPkmgJg5o6a2Rdn6fsE1uw\n6KxdkBdi58G4bmw2MGs57Ha717CP11FPaJEG+A5EOM/xzaW9iaIJ2F2Zpe0R\nUNfgNIDoofvoOuJgjCY/T7aDH7rUmMGOLkvRnmEBg63OHZQsGV6ehV1GlbqV\nDc59\r\n=I2zk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHfZRQ3iqkGGu0TJmIr+JkjPC8tp8opm+BLgI3hQw8ebAiEA+oXYFvXycNYuMVE6wmdrjnaNOLvBYvn9ZjtkiDP7i88="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.9.0_1590436557133_0.25615390159033224"},"_hasShrinkwrap":false},"0.9.1":{"name":"react-entities","version":"0.9.1","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"0b90428e60b84f0722097fd9d4c57b7d06967690","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@0.9.1","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-qwLCGU1G4pMJCtoWKaPPdFzVk4Fuwe+GsB79BDkVIIAdCtr18pDT81MTXI9TRP7JtzC+Dh3dY7Y0oiCoqj06YQ==","shasum":"4a90bbd2ad38717b94fdebba980daf0abe89a043","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-0.9.1.tgz","fileCount":19,"unpackedSize":23987,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJez3uLCRA9TVsSAnZWagAA/0MP/ibXPlTUIiUPX7cBYxWG\nLgaav68dhTD+rQTnAiXfBISlRgoj59dsHBeubdYkf80lvD055FlN4X18zSO5\ny38xx+8E6Rr7I/PqxoiPBKsPzvrkvUEjdXrunGfR+V2PCAJmTC9tfvrZ7K2N\ndfOYcx8MldtcTs5gGDD3cOvhz9GG4pwvccUEGow8Ujp6AS+bSAP96mqCCMBI\nrRW7Gl/UBInum8zKDBCL4Yyjtif9XQl2WirPAHMbIgk5HFhLiFNsSzHZQRZI\nHdaDoKDYuDVAilGvgW5yaZ/JqIv+DOpaUDfPmQyCIOnJ2ViMRQCn7ct1Uo2f\nmJDgThKnQeihVqp1dE7KkrfJGvp7MFGXNtEngZd7nD5agaLlL/9AQjqJKl7U\nHWFy9w5Tc5meT9yG58k5yfpfElfJaLbmY7E3O0D+k0v5R8czvH9AZBPt1pQH\nsr84xAdlasl32/vbO7P9MOfuC7lVrpgZLtxfK5N23R54rrNVWWpOgnbROUpa\ngOqbdEcPBe0lNtZMP6cgXBmSFhLyp8Hfp8jdnvGKCekGeizHvd2VYLu3ECAd\nRcnlN0wuqjShCTA/S/eVwLyDu9YQ/L29wvoB2g4W9KRYqCK8hxAKe3WsN1Mn\nr3yxAMttVkmUjTAdhdGTvKKplteSIq5NWtQ3eHBbnAxNDWyXN+d8K2VeHEI7\nxEhK\r\n=EWOr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHtTeq+kvSkoE4iiF72tJpcTsops1Bbjdv5tXg6Rd/UZAiBiHrtocV+/LfHaBRx9+/1CsUQ+MydcJ8p8Djdci3kghA=="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_0.9.1_1590655882822_0.2403169205163418"},"_hasShrinkwrap":false},"1.0.0":{"name":"react-entities","version":"1.0.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"07c6f8688eb09bdcd83259375cc64b52fc6044af","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@1.0.0","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-eHXZRvh8oAQu5NVJbfs3IMWuRipLCkxBxlJWwHst2aQBzrgvAmOD5VpkeJpxATRjFByMUfd3ObMBZKSGjOPRIg==","shasum":"44abd8915b6bf4fdff40253c5da7d3664041f6a5","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.0.0.tgz","fileCount":20,"unpackedSize":25675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0lrJCRA9TVsSAnZWagAAUagP/1O+zzZP78vjdLZGO4VO\nnrGmLOyg4C7fzoYoRf1T9EQfF76EA5MZl+R2B18qPidqdgIyWktBZMmIkDF0\nkjXgueoevcVIFkq84PpfrHbriR7XG+SORymqCvj3M7FUb14OiklJdNCCXCfe\n5ec83PCuyy+Ol2xrIUPqwPZ6BMVP85mSD8WcXhID/vvOtMl7e6EasUF7gpct\n7FTN8qtYaCqB8OAdAXQxB6FNkUy/RaTzbfAwM4lLUb56DO9BvyNOdFS2cJKR\nn1e2dmQ1NKssazI9iOQaFKKwwoZh4HSZspoKejddbBdMw4qCHnUvUOGYtUAP\nQNudY+6RdsDqXPy2YpmoquPR+Unsw1Jkgm2TtxWdhPo79kudFCikTW1XsS4I\njk9gItozQkZ/shXfNPmJtjdI8ZsW3A3cR/gqoJQPgbzZvQA5ZAfMF6AIMPfk\nO7+5FqMV4VLEcpyGpnmoG01/Ba2OP4wr3bvB5KFtKNUxzzGn6wAV21K2hcnX\nn6IL/54mHvUQERqA7Y8PSsZHVeNj4xSpzUdCqv32vpW3KDgL3GObcT+xH0sK\nBs3xH+9xzL6LEzocbeGRIBcbrKgWhEXF5KM6QQnhI9wCkZhnmg1KSpaDTjhB\naTP9Z3NGWZeoj7L3TatAOPpTqvb7SRkklSJWXwgWz0aPNQPKHoTvXZiYV/li\nDyo6\r\n=t0YQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPMuplO7BHUsVriDXbZY8RDrzN7OIrT2LqPv0jjvyYmAIgF4snN30t4rs57VCCfLJlMQ2jlwgRNbE+niuTZVt2NUo="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.0.0_1590844105167_0.21563988561453118"},"_hasShrinkwrap":false},"1.0.1":{"name":"react-entities","version":"1.0.1","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info","test:cov-local":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"f13696ec306ca741dd6cc3ef1a88c65e98916487","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@1.0.1","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-7V2O6WelVlwWaY7TIeXAilDI6LjkdbzPgkOBfJal+j4ewsQvpY7xc/uEZhEKx1EiuqK9EGHciBkURla7p9aOzw==","shasum":"44acb650eaae7dc8b396cec497a569a36fd6ee83","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.0.1.tgz","fileCount":23,"unpackedSize":30885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2FT6CRA9TVsSAnZWagAA3ucQAJwJWIPRguLANOjAhdNA\nduHZtTp3+YKKCAspb818oOxf8ROhby087H+wuqzXO5B09oLWHdnAUPMh3lBq\nyftSzuAZxiMQJ6/Y+38eDzGHEpMPBYX9okPH691GbYMUUroPHCsSwjahO5kC\nitVWLNy9h3rLwjUCB20XTGLsDK3ZP5XYTDPpmW5R2bf+D6YZBnY7aDH9cjFm\nH/M49pjxyQJzKEq1lPVoHcIwrq4jNwjy+VbPBhPmuktggmQstfTsiCvkk62L\nI/PNUJ9uvILQKE51OlBGQ9tn/OoZj44OFjVCU+zElztsayzXBVdvmMHr6LBN\nVBHNYed0oxhlbqYgXJnI82nKOrSXS9Ap+ASqQibLoHzPjeDaa3EWz0JR4a69\nt5j2rnldavrGAyY1D138jgy5raOtkit2fmMVcdwWmROrryX/+b1Oj4bMRPfl\nrle/tHwjXoo6g64vWojbB30WNhNr8v09O51BKwReDMzaBpXOcj1JO/9e9RTo\nNTzeF+zOAyLF7tElHGusOtxZFdsw3zhqLi40yJ6xjTYfRCkErUShVCPm/hrM\nQ8uhVcYb+q60MM6HIrrTv5zWutoDbslRiEPCAPE/Pce+ZLNWpghWsGJzJMEf\nOnIKtACbueC9WWP31eYxefQlMRULyCmGwt1XePGdlzWMSmxPDXtA9rlvE3VV\ngS7q\r\n=w5lM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGKmb2MO9F+lDU65mUUk5oQfsXoizR9VYEh/zLepYtSaAiEAweE8hRrEW0gQkYbcKP7joPz9FkMMrqmFlgIT8VlfmZo="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.0.1_1591235834021_0.36616947786451814"},"_hasShrinkwrap":false},"1.0.2":{"name":"react-entities","version":"1.0.2","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info","test:cov-local":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"c96d051eee889595f2228dbbf0422addc30cf0f2","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@1.0.2","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-9NIXBr4VRfQTFMYYVQd2cAyxu7/a13G8E6RSfBB7N4FijirlQKCoTdYB43nvFuaNup8gMtUkxaouIGLzroYAOA==","shasum":"507f78364580b9ec5e935a3cb2b9d0b9fd9544a1","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.0.2.tgz","fileCount":23,"unpackedSize":31285,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3nr/CRA9TVsSAnZWagAAN7YP/A2IG5XQJj0o6/3Ci8Qn\nuQV6JaqxZ75uvDG+kswvyzQL/DkM2tiVXNWaZZupnidiZSPUwgllbX+w+A5G\niOQXZnWx2jhDQXKguqAldYw5llCAV3tT+OfM3dk4FZbTZuRIEk/op4gH6xlL\n1U2vo/VwKtP5lr+Hp1meXZ/HATu/HmhHKmuPSPcoz7h7y6eLYnpS/kz5ETU/\nS1N4+1zrQpv0BLnWQJiM35x7CB4/XjGzBkvqdheVBs3M/xsdlTQbIaUCiGHU\nb4Iat0BzRF/nMHZygNAPeNRdmTs/zsmqNeuTxAwxsAtldieOm2sY+wwhYv11\nUVLxb4/LOQgmY2M2FHB94pgrMvduOCMNFNpahJAEeBuWpMLG5suUquXoZklw\nqV6Epalfh5HSoENAIK9nMHsec5mwW0VwoqxsD42FWSkJlLUx2nMV96bd2kz3\nV7QDqsBP0rpl5AiFj0uzznMmsjd5SpFgWtY4y7bNx19qSRzHq6mndMHZZLFo\n3z1QWZYDqF2IcgxBlU9rspJHa64ooNWuC8mmc78GiC32X40Ov1ONtkjMLcSD\n2Y97+GsoSnrepoeLVHfSwURHg3cK1zzbVWSkKIYjkpmfFdBE+HxyjX21qcUh\n9sAog2AlIBwMDW4feb2G8YsnNPQ12jI/zJbKBARBVYbdzpV9zzDyYZ5aacAw\nFxtW\r\n=lW/E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB0Sid3Z97rWczJ8Yl2MpW9S4YnU6zrmwpgYJUN9KbyvAiEA9OjkxrPui9CYS61vvGwylz1TSHj+tIsQezORyJCP6js="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.0.2_1591638782829_0.38809367316071164"},"_hasShrinkwrap":false},"1.0.3":{"name":"react-entities","version":"1.0.3","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info","test:cov-local":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"17cb879586c6a15d95dae8549ccd804f2affb41f","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@1.0.3","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-zGSUgEQNNimHLY/T6bIUrraJn6GPBWWKz1WGIssFwrdZg0ZvdE8wsn2nnpmZTx4ePmO2HyAZTTISWScmGI6H2g==","shasum":"2929c13cf7f9c343c9c312257d6f60a68b35cd32","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.0.3.tgz","fileCount":23,"unpackedSize":31445,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGVuqCRA9TVsSAnZWagAAy9QP/21iCICvZe+SvMU6K/bg\nChxyDqAzWlB7Vw57Af+AmZDA4RFdQCxWez9fLp1bgOMrbhYrsFG5RMi7YpJ4\nBrO8VDZuL1PrX3rKfox16Sbc0fEEtfGO+et4tdGvsyYo7SlKlv4wZ+QMvFm6\nfT7wHVDfOixmA0i9wVTIsr1pDchS8QpLqGK8SuPPJ4bMii475RBQLI0Vb5cC\nW/7Uo20YwPjKB+2PjEL44ke+KI61SYF6jEC/pVmfdxqEp5glvcHc0FxRRavE\njICNzMxPLcRyZvWIoTsskWqedczqfWk4q8bjarZYQIXauI78gx2ep840J15c\ngZEry2jc0NgeyQucTmODBA6j57uK3H6R0LjCfYh5AdHxaJO3pHrNd/e+PKVT\nBiefuH9W7Shpr+zyoJma7BK6Ognrhi3C9aFdlZM8i2jPAq368+JSYLcgTB2T\nGYctS2MBNH597xKhl4jn3BLOJc2kMye95mGBs4CT3LuNiOKujTEKWVKidJPu\nDT5XVWqoWdYrZL9U+TLwWcJEuXcNarNM8Qu/hQqOkht39BlNAc6rYVD6JnIX\nU1E+i2YnPYpZ7Dr+UtnTL05gnJ4PQUwfr57RK2weMEU9QqOi3R7prYHifkO4\nUzqY5FEZtM7SrpUhuOtBuO+FliyOBFpcO+e4EVGH2teSAz/d0wNK9QpWGadw\n+c7O\r\n=WadA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICoVfW/3vMwUxgjPhkiha5qOTuqOnx+wlvcdRam3izvXAiAeWKDUepEWBDQ8QLefbfdOEq3EQ/aEsxErGDMIue0lVg=="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.0.3_1595497385496_0.1899674528951234"},"_hasShrinkwrap":false},"1.1.0":{"name":"react-entities","version":"1.1.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info","test:cov-local":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"206c0164d1cbe783a0f2536888aa7908fffb98d8","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@1.1.0","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-x0E7XVolnMgOzsqlEelwH75PDzHRP3mvn3cj6l+V6FXH5y6mXFv737Z9w2PFhKUNAEsWDW94t+S8xjAhAeDqVw==","shasum":"707c7247446766144d1efc68e707a75977c2b1ed","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.1.0.tgz","fileCount":23,"unpackedSize":33138,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRqq7CRA9TVsSAnZWagAA2J8P/RTWi4/V3IXa8JjvPzL6\nCVzN6QOL/kCDV4RXMKCjHXSXOKeI46WuWYjr5w7KoA6ZkcyZOOYS2B7v65nT\nomcHxmMTYf+ysyWjdjT2to7nYtznBWV4DT22ia35l7sk3stnba0sB9H4Tixh\nifMS2ZNzGIPhcSUvaZVYAO322S47VFxPQwXAW/dI1HrmJhA1BbJzU8dehgjD\nt9nzgQSivRu0hSvBEw5AcZDp/Oo+IOBI7RYvkzWNyegp+KuJS9Wqs5rqqb1d\n0QpU94TIP8Ej2AE8gX5wuFh6KWhx8tUHYMDMb2uHneb3f04W0a/zAsyT7dPN\ncttkd4CEcGam1IBj3HrFudHXjxfQF6sTKxIpzSUy55G+wypSWlvhqA54TxtM\nps2FK2fM9qpIkz4y0XFNC/oF9E8U8mEevATCjSWCrq8QHJWt0iomPLH6H91a\nN/wy7y1q5eygEYGxDHATfESi5OFhLJ/1jmk+vXV9f3emzzCtTqiPcqcZMqbP\nb3VwCVa/7rQi5iMsAAIbdN0wjz5mfVEL2t06nymGSO+3+nggKMSJsuQ1cYLK\ns8W4MojBcWEiMxfza5gNdSZvFjYrr2mphCYtyT1xUbRdNd8CZcBNBppp1A5z\nvughPkew6zdO3cYl6y/AyeDg8rkL6qaAhB2hQsF3Y8S+vmPl3UYcnWtVsYxu\n5PUs\r\n=fEGr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHk7ySv5yFv6sxEUv8oGj6gcM4hsLvNwnSvYScqL2zAPAiA/UCQp0Odm87rHRP49M6CUYZ2GhvGL0Gf6pSIy62jnsQ=="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.1.0_1598466746425_0.09327722689398366"},"_hasShrinkwrap":false},"1.2.0":{"name":"react-entities","version":"1.2.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info","test:cov-local":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"59eff10216960820de80798d47184fb2ba7788b3","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@1.2.0","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-sXcboYeUlwp1SUdG0twK/e5v8QQ0xvfrF3jyP/75HH+ru7RYZocdfNqS+TXy+sRTP74VVvmbMBOwpz/cV8dOIA==","shasum":"758072966d11ac86a3d1a034a82a9c1be25555cf","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.2.0.tgz","fileCount":23,"unpackedSize":35914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfef7TCRA9TVsSAnZWagAAinQP/23XtQDbWMucNkxJpALX\nEA7F1SqiIJTz2h1yVm9CqhLdAxzvK/L8agEeCzNMasKBIyxK2EdFnwUal9gM\n117+N+KL51eZupEY01bIrvKmmnkLbpUh9KrHy7TBkJYk1q2gG3VR7ob2WrTF\nZoTM8g0aEXwqKsN6fFehZhtJXMyLP14ZXvtMIJGtBZr9qJ+Mvk1AH91SRMIM\nf6RC+jsgiTegnAM9OHOgM90CKyfRMD7i9jefB5hBAAL/4cIY4n7jsEjCFyKY\nzNNxb6TLI6SeBZUwnZuiWxK3s2RIkjB+lnxE29qLjIrshxsK6NKoOxt8Kzqz\nCIB1eV5dB9557Tnt1Jqk7strN5waRTnJExxTgTwfiRUWJGk2v6f7cnYVJHWW\n0gJ3sdlpZEeg8unZiAW8IjFRL9cnG9Qwskw+S+uNr8U/99zADTWyb06qw/OC\nhyq99pSvd3XBf8MNyLKkcLgYGAe6cgsbkqMnX/8VjF9RDWHxWl2FYXtDdwzD\nqncl01oyalQkzUHYG7aBgWPku2wwbMqfFt87+Mez5Wxy9CVXYOoQcwa/kqFa\nXsLXoYrlc+Eb55zo0Uuf20Ibr+1QMQkM+oO3TsXTCbbwkSrfHTsekMH82yXP\njZ/S+7krV/MPwPBZRQmfO2BTWTH58CH/yi1xsW9vB/YA71YrziS/XJvPtCc+\nnD+P\r\n=9Cxu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCr8Pe5ICvpl+uolgM6PIxV0z+ZOje8W5FLpPtJ1YUOBQIgOZQqdgatBAGG8La1aHKjB82lghn4IL3l5HcBm682RYA="}]},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.2.0_1601830611067_0.8741708897087308"},"_hasShrinkwrap":false},"1.2.1":{"name":"react-entities","version":"1.2.1","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info","test:cov-local":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"52b792b8e32f2afe8db207cb0992a807b967f4cc","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@1.2.1","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-+y/i5KymJ7H9UwrWT0NLQv6NzzNawNddkhzH7jelsAPvoM1TdvzsNIosug2KrSTqKKeGtQqkDyLrg9xj3DNKLw==","shasum":"2c26d3fc1e51bc1ac63d6d7dfc954e0471c88deb","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.2.1.tgz","fileCount":23,"unpackedSize":36188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx1FLCRA9TVsSAnZWagAA7z4P/2MDT1uF0Md5NwZym7JQ\ntqBFkiMLtuxeGWOmIYnPUpPG8yErbInAogGJVj8PzaN2SyIG7e4L7iOVUJn+\naUj/MxrOYDtECGnSg0Z2boZiASDiEdOcfsqiWfJDvqE6SVm0epZQ84GH4x8d\nFOrN54JIJC4lZqP74QPp/5xTJ00WZsKLm5DXd9w21f3WOMqfks10t89tdZxN\nS2sBzFuap7cVaDQ+XmX2pUcSWH0q47E/bt2REYTD1RU90vtKSxOatq6eGSN4\nWevQs7RtxGxzuK/dQWXh8Jqk2hnQJ1wrCCwO2wWuUna2VBXZYyWBbn4btGOJ\n7kw2Iz15DnPfnDrrfzF4qdUIDwzblMjvWezcoZsLLrwYt0BY5So42mBZHMUG\nNT17yGjYxZCDq3l/JR5WDMJrvh0bfNl1yAm+Q6S1ONDGuvW8uCS33Tle+ovE\ndL8F/eB61KvnWi/FvmhuwqHZnM2G1rZmZY+EEn+JxMrAIXTdhcZl/aNsLgHm\nHyYZ9xdA7tw6/CQcfNksfn8/1n90psUqH/u2ou2xvZTcSDqSwkmkdWUPuIUg\nlBO8PHs40nKT5uRWuabz6QTNoYw9m+FunxI/c+DCIzNVmDKYWBvsV6821P/6\nVrhge3ekUjq13+wiBnWB/snlQAN+hObjJ7BypW/pUf6+ax1CV0aMjPHdrAvk\nhmWV\r\n=Xgx+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHWofCjiopLM+gWKIELA45Uf5b9Eq17JH6z0z4XyQGGhAiEAyONzIX4w5z+PqHOz8BYI4GU0tQ0X/6MFIGLY2gsB8dU="}]},"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.2.1_1606897995449_0.9231474342305517"},"_hasShrinkwrap":false},"1.2.2":{"name":"react-entities","version":"1.2.2","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","redux","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info","test:cov-local":"npm test -- --coverage"},"peerDependencies":{"react":"^16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","jest":"^24.9.0","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"gitHead":"5f6deb085b40d68e54cd27bc7f983f91ea72e937","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@1.2.2","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-jpZVebmUUAZ4J0Vxxt/vPeoWVa45KKrdB6JJzE0bRFxQY33wlzUPmSVbsqQeSpVVlPf5Cov9kW5yG1NFu4j7eg==","shasum":"37b48b07690f88383be88aac2ed3dcedbb980c42","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.2.2.tgz","fileCount":23,"unpackedSize":36269,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfy7q/CRA9TVsSAnZWagAAKRYP/jCUrIH5D/X4C8QJD3Oy\nHk2ldtLX5kWo9z0iXN+LW6/qJfywbWpcsKI3To9X2uru1Jp0Tv9tRU1i/OA3\nYVkycfMyvd8MJ7gVERjjDo3GKnaF5jW0tqAIqR1z+lzYmrh5J0/jkO2/cPCX\nb1vnfcrLN/KjeRLMxzOsThF1lfzZUe0tOomq+lLWLtLHdIWnWA5Z231IwCNB\noCgBp4m62HE6bThoV/q2HUedOsGjitD/BAl5ZBfp+v8xFGJZDTsK7S+O09Rg\nU6SsB8W/nlz1b8Er/eUtYDNHCJfOcsMVAj67bRrk6jx+bXzLAC+kLbJS+Hga\nds2Z4hHCOE40C91h/EmEZh+Lu9xzHo7VqkmyT+v1UR2mRULSEPRpxTlyFaFc\nWdBsDpBv0UVm2ZT3RjIaLpeGSKBxyjjGQeA15SJz5q+8evJCJaQbqVLTW7hg\nxuSS6Dg1A5eCe8CVS79QzvwTEnMHXvaJ6lXWhCcsmZCMYkJgPqYWaf30g4Nr\nQPO91ERx//KAt6sU2SRBrweUergphfbNk1WhuKjN61BwFU1NqbagtoCkIqjx\nwVxrjITJlLT5jDoe27I6awG0QT8goSmU/nFUlrG+Yche5T8mUhiCK7GjdDav\n5d08zPuBqaKgEFe2eXzep/zvsjitOOCVGdaJrztH5I96Bs0/FH+qo2sUSw7m\nHQM2\r\n=PhyX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJClpWwQ89mmqt4MGvhXxq8v2DNvGmXjftaLjMfxhFJwIgF+0gFkIadbDkxJCaNBnh0jb++ExSq0gj/PUiBWTijiI="}]},"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.2.2_1607187134966_0.7009216020843632"},"_hasShrinkwrap":false},"1.3.0-beta.0":{"name":"react-entities","version":"1.3.0-beta.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info","test:cov-local":"npm test -- --coverage"},"peerDependencies":{"react":">=16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@typescript-eslint/eslint-plugin":"^4.10.0","@typescript-eslint/parser":"^4.10.0","babel-eslint":"^10.1.0","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","eslint":"^7.16.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","jest":"^24.9.0","react":">=16.8.0","react-dom":">=16.8.0","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"eslintConfig":{"extends":"react-app"},"readme":"# React Entities\n\n[![npm](https://img.shields.io/npm/v/react-entities)](https://www.npmjs.com/package/react-entities)\n[![build](https://img.shields.io/travis/arnelenero/react-entities)](https://travis-ci.org/github/arnelenero/react-entities)\n[![coverage](https://img.shields.io/coveralls/github/arnelenero/react-entities)](https://coveralls.io/github/arnelenero/react-entities)\n[![license](https://img.shields.io/github/license/arnelenero/react-entities)](https://opensource.org/licenses/MIT)\n\nReact Entities is an ultra-lightweight library that provides the simplest global state management for React apps. It takes advantage of React Hooks.\n\nHere are some benefits of using React Entities:\n- No complex boilerplate code required\n- No steep learning curve\n- No need for things like reducers, dispatch, middleware, observables\n- Just use functions to implement actions\n- No Context API, just straightforward hook\n- No explicit container (i.e. \"store\") or providers\n- Easy unit testing of app state and actions\n- Made specifically for React, and built on React Hooks \n- Works up to 5x faster than useContext + useReducer solution\n- It's tiny, only about 1 KB (minified + gzipped)\n\nIf you know React Hooks, you'll be coding React Entities in no time at all.\n\n\n## Setup\n\nTo install:\n```\nnpm install react-entities\n```\n\n\n## Getting Started\n\nThere is just one simple concept that you need to know to get started with React Entities--what exactly is an entity.\n\nAn _entity_ is a logical, single-concern chunk of data whose _state_ can be bound to any number of components in the app. In this sense it is \"global\" or \"shared\" within the context of the entire app. Once bound to a component, an entity's state acts like local state, i.e. it causes the component to update on every change.\n\nApart from state, each entity would also have _actions_, which are just regular functions that make changes to the entity's state. In fact, you can think of an entity just like a regular Javascript object that has a single property (the state) and one or several methods (actions).\n\n\n## Creating Entities\n\nA typical entity definition would be a regular module that exports an `initialState` object as well as several action functions. Here is a simple example:\n\n**entities/counter.js**\n```javascript\n  export const initialState = {\n    value: 0\n  };\n\n  export const increment = counter => by => {\n    counter.setState({ value: counter.state.value + by });\n  };\n\n  export const decrement = counter => by => {\n    counter.setState({ value: counter.state.value - by });\n  };\n```\n\n### Defining the initial state\n\nIt is recommended that you define the `initialState` of an entity to properly set default values. This should always be an object. Since it is optional, it defaults to an empty object `{}`.\n\n### Defining the actions\n\nIn the example above, `increment` and `decrement` are both actions. It is important to note that actions are defined using higher-order functions, with the top level function passing down the entity reference.\n\nWithin the actual action function, you can use the `state` property of the entity to reference its current state. To make any changes to its state, you should use its `setState()`. **Do not** directly mutate the `state` object.\n\nThe function `setState()` has the following familiar signature:\n```\nentity.setState( changes )\n```\nwhere `changes` is an object whose properties are __shallowly merged__ with the current state, thus overriding the old values. \n\n\n## Creating Entity Hooks\n\nTo enable us to bind our entities to components, we'll need Hooks. To create one such hook, we use the `makeEntity` function.\n\n```javascript\nmakeEntity( entityDefinition )\n```\nThis function creates an entity based on the provided definition, then returns an _entity hook_. The argument `entityDefinition` is imported from our entity module, as in this example:\n\n**entities/index.js**\n```javascript\nimport { makeEntity } from 'react-entities';\nimport * as counter from './counter';\n\nexport const useCounter = makeEntity(counter);\n```\n\n\n## Using Entity Hooks in Components\n\nAn entity hook returns an array containing two items: the entity state object, and an object containing all the entity's actions. This allows the component to both reference the entity's current state, and invoke its actions within callbacks and effects.\n\nHere is an example usage:\n\n**CounterView.js**\n```javascript\nimport React from 'react';\n\nimport { useCounter } from './entities';\n\nexport const CounterView = () => {\n  const [counter, { increment, decrement }] = useCounter();\n\n  return (\n    <>\n      <div>{counter.value}</div>\n      <button onClick={() => increment(1)}>Increment</button>\n      <button onClick={() => decrement(1)}>Decrement</button>\n    </>\n  );\n};\n```\n\nAs you can see in the above example, it is typical to use the object-spread operator to extract only the relevant actions from the entity, instead of the entire actions object.\n\n\n## Recipes\n\nWith the very straightforward, largely unopinionated approach that React Entities brings to managing app state, you have full flexibility to implement things the way you want. It works seamlessly with whatever code architecture you choose for your React app. \n\nHere we provide some suggested patterns that you may consider for specific scenarios.\n\n[Async fetch operations within actions](#async-fetch-operations-within-actions)  \n[Binding only relevant data to components](#binding-only-relevant-data-to-components)  \n[Injecting dependencies into entities](#injecting-dependencies-into-entities)  \n[Separating \"pure\" state changes from actions](#separating-pure-state-changes-from-actions)  \n[Referencing initial state inside actions](#referencing-initial-state-inside-actions)  \n[Action calling other actions](#action-calling-other-actions)  \n[Unit testing of entities](#unit-testing-of-entities)  \n[Teardown of entities during app testing](#teardown-of-entities-during-app-testing)  \n\n### Async fetch operations within actions\n\nIn some cases components require data that has to be fetched from the server. For this we would need an async operation that sends the fetch request and waits for server response.\n\nTypical actions immediately make state changes then terminate. But because actions are just functions, they can contain any operations, including async ones. This affords us the flexibility of implementing data fetches inside actions.\n\nHere is an example:\n\n**entities/settings.js**\n```javascript\nimport { fetchConfig } from './configService';\n\nexport const initialState = {\n  loading: false,\n  config: null\n};\n\nexport const loadConfig = settings => async () => {\n  settings.setState({ loading: true });\n\n  const res = await fetchConfig();\n  settings.setState({ loading: false, config: res });\n};\n```\n\n### Binding only relevant data to components\n\nBy default, using an entity hook binds the entire state of the entity to your component. Changes made to any part of this state, even those that are not relevant to the component, would re-render your component.\n\nTo circumvent this, you can pass a _selector_ function to the hook, as in this example:\n\n**MainView.js**\n```javascript\nconst MainView = () => {\n  const [config, { loadConfig }] = useSettings(state => state.config);\n\n  return ( \n    . . .\n  );\n};\n```\n\nWhenever the entity state is updated, the selector function is invoked to provide your component the relevant data derived from the entity state. If the result of the selector call is equal to the previous result, the component will not re-render.\n\nThe equality check used to compare the current vs. previous selector result is, by default, strict/reference equality, i.e. `===`. You can specify a different equality function if needed. The library provides `shallowEqual` for cases when your selector returns an object with top-level properties derived from the entity state, as in the example below:\n\n**MainView.js**\n```javascript\nimport { shallowEqual } from 'react-entities';\n\nconst MainView = () => {\n  const [settings, settingsActions] = useSettings(state => {\n    return {\n      theme: state.config.theme,\n      featureFlags: state.config.featureFlags\n    }\n  }, shallowEqual);\n\n  return ( \n    . . .\n  );\n};\n```\n\nIn case you only require access to actions and not the entity state at all, you can use the selector `() => null` to ensure the entity never causes a re-render. This null selector is also provided by the library as `selectNone` and is the preferred form, to avoid recreating the function on each render.\n\n**Page.js**\n```javascript\nimport { selectNone } from 'react-entities';\n\nconst Page = () => {\n  const { loadConfig } = useSettings(selectNone)[1];\n\n  return ( \n    . . .\n  );\n};\n```\n\n### Injecting dependencies into entities\n\nSometimes you would need to mock the API calls, for example, when unit testing your entities. In scenarios like these, you can take advantage of dependency injection. The `makeEntity` function accepts an optional second argument which is passed onto your entity.\n\n**entities/index.js**\n```javascript\nimport { makeEntity } from 'react-entities';\nimport * as settings from './settings';\nimport * as configMock from './configMock';\n\nexport const useSettings = makeEntity(settings, configMock);\n```\n\nThis second argument is passed automatically as extra argument to your action composer function.\n\n**entities/settings.js**\n```javascript\nexport const initialState = {\n  loading: false,\n  config: null\n};\n\nexport const loadConfig = (settings, service) => async () => {\n  settings.setState({ loading: true });\n\n  const res = await service.fetchConfig();\n  settings.setState({ loading: false, config: res });\n};\n```\n\nIn the example above, the `service` would be the `configMock` passed through `makeEntity`.\n\nBeyond this example, you can inject any type of dependency into your entity, e.g. a keyed list of services, as long as all actions of that entity know how to handle it. \n\nUnit testing is not the only use-case for dependency injection. It can also be used in multi-tenant web apps, or really any other cases that require different behaviors depending on the scenario.\n\n### Separating \"pure\" state changes from actions\n\nUsing _pure functions_ for managing state updates has its benefits. Since actions in React Entities can do pretty much whatever you want it to do, in some cases it would make sense, in fact ideal, to separate \"pure\" state changes from side effects.\n\nTo make this possible, `setState()` can accept an _updater function_ with the following signature:\n```\nupdaterFn(state, arg?) => changes\n```\nwhere `state` is the current state of the entity and the optional `arg` can be any argument. This function returns the changes that will be __shallowly merged__ with the current state by `setState()`.\n\nThe `setState()` call will then have to take the form: `setState(updaterFn, updaterArg)`.\n\nIn the example below, you can see that this implementation pattern gives us the benefits of pure functions: readability, predictability and reusability among others.\n\n```javascript\nexport const signIn = (auth, service) => async (email, password, onError) => {\n  auth.setState(updatePendingFlag, true);\n\n  try {\n    await service.signIn(email, password);\n    auth.setState(updateAuth, authInfo);\n  } catch (err) {\n    auth.setState(updatePendingFlag, false);\n    onError(err);\n  }\n};\n\n/*** State Updates ***/\n\nconst updateAuth = (state, { userId, email, role }) => {\n  return { userId, email, role, isAuthPending: false };\n};\n\nconst updatePendingFlag = (state, pending) => {\n  return { isAuthPending: pending };\n};\n```\n\n**Note**: Since the entity reference that is passed onto actions always contains the up-to-date `state`, the updater functions do NOT necessarily have to be lazy-evaluated. In the above example, for instance, the `auth.setState(updatePendingFlag, true)` is just syntactic sugar for the equivalent `auth.setState(updatePendingFlag(auth.state, true))`.\n\n### Referencing initial state inside actions\n\nThe entity's `initialState` property is accessible from within actions as in the following example:\n\n```javascript\nexport const reset = counter => () => {\n  counter.setState({ value: counter.initialState.value });\n};\n```\n\n### Action calling other actions\n\nThe `actions` list is included in the entity reference that is passed onto actions, which allows them to call other actions, as in this example:\n\n```javascript\nexport const loadAndApplyTheme = (ui, service) => async () => {\n  const res = await service.fetchTheme();\n\n  ui.actions.switchTheme(res);\n};\n\nexport const switchTheme = ui => theme => {\n  ui.setState({ theme });\n}\n```\n\n### Unit testing of entities\n\nWhen we unit test our entities, ideally we would want it to be isolated from the React components that use them. For this purpose, we cannot use `makeEntity` because it returns an entity hook. Instead, we can use the drop-in replacement called `createEntity`, which follows exactly the same syntax but returns a direct reference to the entity instead.\n\n**counter.test.js**\n```javascript\nimport { createEntity } from 'react-entities';\nimport * as _counter from './counter';\n\nlet counter = null;\nbeforeAll(() => {\n  counter = createEntity(_counter);\n});\n\nbeforeEach(() => {\n  counter.reset();\n});\n\ndescribe('counter', () => {\n  describe('increment', () => {\n    it('increments the value of the counter', () => {\n      counter.actions.increment(1);\n      expect(counter.state.value).toBe(1);\n    });\n  });\n});\n```\n\nIn the sample Jest unit test above, `createEntity` gives us the `counter` entity object. This way, we are able to trigger an action by accessing `counter.actions`, and then inspect the current state of the entity via `counter.state`. It also provides `counter.reset()` that allows us to reset the entity to its `initialState` before each test case is executed.\n\n### Teardown of entities during app testing\n\nAll the entities are stored at the module level, outside of the React component tree. For the app itself, this is not a problem. However, in testing the app, you would typically setup and teardown the App component multiple times, and therefore entities must be reset to initial state each time.\n\nFor this purpose you can use the `useEntityBoundary` hook. It resets all entities each time the host component unmounts. Use this hook in a top-level component, typically the `App`.\n\nHere is an example usage:\n\n**App.js**\n```javascript\nimport { useEntityBoundary } from 'react-entities';\n\nconst App = () => {\n  useEntityBoundary();\n\n  return ( \n    . . .\n  );\n};\n```\n","readmeFilename":"README.md","gitHead":"70ee3d6479a3c7dc484ff741d484ba3a2bb00056","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@1.3.0-beta.0","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-kz/k+3fZo9c7TUO+mmwlH9TbXkyTcRKk0ijW1jRshNWt/LqXB6uhf/KNzJ98/y8g6ov2tsd4eX4d1whi9vCHHA==","shasum":"94fade6cb423195ef161ba9a781e1da87519fda1","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.3.0-beta.0.tgz","fileCount":35,"unpackedSize":42348,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgM6tcCRA9TVsSAnZWagAAbiQQAIub4BFrlYWJsNhcF8LK\nkNuGEabYG6LBaywmtz9tqPk1xpkZaMiBXgT5308ErTtpUhMCxc2MvU4kGcxx\nAR5subjZp1JXnYzwttbpbTg3EzWmz09ZKE21dhdz5FwG9kUKFABS1Kgfxa0n\n1Oylwmj5gnuP2QQdQmdXBzMvl0vBMR2tount9DllCIaK9S3w+uXYx6CcYoYR\n4CCnLMSo6rFPcuuHJEpeSaSmcJsUq1bttac2lf/KuqM1zhR09yWlnklnAG1j\nMRP9jHdXbIr+d2nOLxBA+7EAje/PXVeA1UAsdxf3KGr44oPsqZ7lXwn5CgWg\nmJcCc5sEtRDii4qLjXOE7CsjyrE0Ou3Rz9bjYjfzLIdRyAmzAEYVHBG7iPs8\nd7r2oxvWEzKvrcBG4aZPENYoqREiVYFlSs98yWe4icN3CGiie9F/g/MYbGhY\nj5HsSyGivrcXlXLVOv53keAFiUuFOi8p9amEveeU1TOVQGv2sB9FHmTAiTdb\nURrhdLwRkmDWo5U0lgFRfwWvLzvcTSvPe8utZHU9rGDi5L4t3ugRjDbmhuxn\nBotJPei7DOvfZnPFbHpfHNXgpqYw/vu+ES+0rCUAJF+eyJe6kmOrNH5sx95V\n9YR3NPNamlIWJlrgagucXmX+KxUmtfsZbjgzzuaPR04t6mnfBS8UuOWSxxtT\nfzUM\r\n=SMsE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLVkUsR3QHt+swkMnCsQAMby0Klocq13quuS1rtAUBzAIgPqqUg/XCUYv999HPMLkWh435nkyM291iCPeN0+6z5ko="}]},"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.3.0-beta.0_1613998939951_0.23876810656523828"},"_hasShrinkwrap":false},"1.3.0-beta.1":{"name":"react-entities","version":"1.3.0-beta.1","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info","test:cov-local":"npm test -- --coverage"},"peerDependencies":{"react":">=16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@typescript-eslint/eslint-plugin":"^4.10.0","@typescript-eslint/parser":"^4.10.0","babel-eslint":"^10.1.0","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","eslint":"^7.16.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","jest":"^24.9.0","react":">=16.8.0","react-dom":">=16.8.0","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"eslintConfig":{"extends":"react-app"},"gitHead":"a35f6c7b1e11281fc3b261e1376e1ef04dfdeb12","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@1.3.0-beta.1","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-qepPeL9kq+VKkJ+Kx/b4qJuma+AFcSrWVRHb+UAb+nwKmCDJDihDK7U9xKiQYYzPRpIoBssoIUJo5FSZCD/GVA==","shasum":"e2b511d6470252ff5b050bb266b74129cc10c29b","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.3.0-beta.1.tgz","fileCount":35,"unpackedSize":44217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgN8QDCRA9TVsSAnZWagAAZ8wP/0Da4D3QQ7vs1v9ji/1W\nVQtixgnXhJAr0uJcGhi3JrSbVWalbHtTAe9Fv8GLaRlUVwsMc/8/kxlNdxNT\nUU/Qds/JdoslgWdoiHNSe2T/pMxEWycno5kHTlzG3E9msaycAOWBNXiswmZH\nUM/vA4FCL+wmNzofPaZ0UtWQLmieoyi3mLJdvXlbke+od0Tw1gpCIgN2WZt/\n40h+agweS86jQAMKuXjOXQFMtSTIOqwcFrlOvCgOdE8Q7kIcP6mkBYjZkaME\ngyqDZ9rDnpZChO9zdPfRTDiv/uAkc+DLB3LK6KX5kUGmcdhtCOu1qsfbKLZI\nB2kyg19oTk3hg1kXAlLSqUcCFWXWFCturjib649nPoLoAdRLTblEIzwdwVG9\naFwAWnJAeFQK+09xraUH/GV6oiOQ4UWIzhwrCjnD6h4XajSl8Vap8jlEKBos\no+UPmdfk3ZXWy52k/vLM4XwLk7OVbXNc9gnv/sTmkQ80RbwBL2wB60FR1Us8\nXIknfcvClY5QyWW+wno0gCTj0E0S8Wjf7gdh6nrt9isXdfpz+OL6UsVz3zvQ\nqYrQt4NlBCuMoj7EfIYpZ3CCISep7sdn771kLCgYNJvA10jPtXybRUK6vizM\nVABwkDUW+Zd8EWnrJetEkOvTGa0jRgtBlMEslzYN1H2vrIX6/Ixa1cKce2/d\n1UAx\r\n=ncoS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCU4c6GZG4q2yzOnzrGcZx0ChOTXgqJm+w67RhooG1lTgIgd6WRqw2au2LO6aJZ8uNwg1mHRC/fBVE0CIX0o6dGGj0="}]},"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.3.0-beta.1_1614267395293_0.5360952321886512"},"_hasShrinkwrap":false},"1.3.0-rc.0":{"name":"react-entities","version":"1.3.0-rc.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info","test:cov-local":"npm test -- --coverage"},"peerDependencies":{"react":">=16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@typescript-eslint/eslint-plugin":"^4.10.0","@typescript-eslint/parser":"^4.10.0","babel-eslint":"^10.1.0","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","eslint":"^7.16.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","jest":"^24.9.0","react":">=16.8.0","react-dom":">=16.8.0","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"eslintConfig":{"extends":"react-app"},"readme":"# React Entities\n\n[![npm](https://img.shields.io/npm/v/react-entities)](https://www.npmjs.com/package/react-entities)\n[![build](https://img.shields.io/travis/arnelenero/react-entities)](https://travis-ci.org/github/arnelenero/react-entities)\n[![coverage](https://img.shields.io/coveralls/github/arnelenero/react-entities)](https://coveralls.io/github/arnelenero/react-entities)\n[![license](https://img.shields.io/github/license/arnelenero/react-entities)](https://opensource.org/licenses/MIT)\n\nReact Entities is an ultra-lightweight library that provides the simplest global state management for React apps. It takes advantage of React Hooks.\n\nHere are some benefits of using React Entities:\n- No complex boilerplate code required\n- No steep learning curve\n- No need for things like reducers, dispatch, middleware, observables\n- Just use functions to implement actions\n- No Context API, just straightforward hook\n- No explicit container (i.e. \"store\") or providers\n- Easy unit testing of app state and actions\n- Made specifically for React, and built on React Hooks \n- Works up to 5x faster than useContext + useReducer solution\n- It's tiny, only about 1 KB (minified + gzipped)\n\nIf you know React Hooks, you'll be coding React Entities in no time at all.\n\n\n## Setup\n\nTo install:\n```\nnpm install react-entities\n```\n\n\n## Getting Started\n\nThere is just one simple concept that you need to know to get started with React Entities--what exactly is an entity.\n\nAn _entity_ is a logical, single-concern chunk of data whose _state_ can be bound to any number of components in the app. In this sense it is \"global\" or \"shared\" within the context of the entire app. Once bound to a component, an entity's state acts like local state, i.e. it causes the component to update on every change.\n\nApart from state, each entity would also have _actions_, which are just regular functions that make changes to the entity's state. In fact, you can think of an entity just like a regular Javascript object that has a single property (the state) and one or several methods (actions).\n\n\n## Creating Entities\n\nA typical entity definition would be a regular module that exports an `initialState` object as well as several action functions. Here is a simple example:\n\n**entities/counter.js**\n```javascript\n  export const initialState = {\n    value: 0\n  };\n\n  export const increment = counter => by => {\n    counter.setState({ value: counter.state.value + by });\n  };\n\n  export const decrement = counter => by => {\n    counter.setState({ value: counter.state.value - by });\n  };\n```\n\n### Defining the initial state\n\nIt is recommended that you define the `initialState` of an entity to properly set default values. This should always be an object. Since it is optional, it defaults to an empty object `{}`.\n\n### Defining the actions\n\nIn the example above, `increment` and `decrement` are both actions. It is important to note that actions are defined using higher-order functions, with the top level function passing down the entity reference.\n\nWithin the actual action function, you can use the `state` property of the entity to reference its current state. To make any changes to its state, you should use its `setState()`. **Do not** directly mutate the `state` object.\n\nThe function `setState()` has the following familiar signature:\n```\nentity.setState( changes )\n```\nwhere `changes` is an object whose properties are __shallowly merged__ with the current state, thus overriding the old values. \n\n\n## Creating Entity Hooks\n\nTo enable us to bind our entities to components, we'll need Hooks. To create one such hook, we use the `makeEntity` function.\n\n```javascript\nmakeEntity( entityDefinition )\n```\nThis function creates an entity based on the provided definition, then returns an _entity hook_. The argument `entityDefinition` is imported from our entity module, as in this example:\n\n**entities/index.js**\n```javascript\nimport { makeEntity } from 'react-entities';\nimport * as counter from './counter';\n\nexport const useCounter = makeEntity(counter);\n```\n\n\n## Using Entity Hooks in Components\n\nAn entity hook returns an array containing two items: the entity state object, and an object containing all the entity's actions. This allows the component to both reference the entity's current state, and invoke its actions within callbacks and effects.\n\nHere is an example usage:\n\n**CounterView.js**\n```javascript\nimport React from 'react';\n\nimport { useCounter } from './entities';\n\nexport const CounterView = () => {\n  const [counter, { increment, decrement }] = useCounter();\n\n  return (\n    <>\n      <div>{counter.value}</div>\n      <button onClick={() => increment(1)}>Increment</button>\n      <button onClick={() => decrement(1)}>Decrement</button>\n    </>\n  );\n};\n```\n\nAs you can see in the above example, it is typical to use the object-spread operator to extract only the relevant actions from the entity, instead of the entire actions object.\n\n\n## Recipes\n\nWith the very straightforward, largely unopinionated approach that React Entities brings to managing app state, you have full flexibility to implement things the way you want. It works seamlessly with whatever code architecture you choose for your React app. \n\nHere we provide some suggested patterns that you may consider for specific scenarios.\n\n[Async fetch operations within actions](#async-fetch-operations-within-actions)  \n[Binding only relevant data to components](#binding-only-relevant-data-to-components)  \n[Injecting dependencies into entities](#injecting-dependencies-into-entities)  \n[Separating \"pure\" state changes from actions](#separating-pure-state-changes-from-actions)  \n[Referencing initial state inside actions](#referencing-initial-state-inside-actions)  \n[Action calling other actions](#action-calling-other-actions)  \n[Unit testing of entities](#unit-testing-of-entities)  \n[Teardown of entities during app testing](#teardown-of-entities-during-app-testing)  \n\n### Async fetch operations within actions\n\nIn some cases components require data that has to be fetched from the server. For this we would need an async operation that sends the fetch request and waits for server response.\n\nTypical actions immediately make state changes then terminate. But because actions are just functions, they can contain any operations, including async ones. This affords us the flexibility of implementing data fetches inside actions.\n\nHere is an example:\n\n**entities/settings.js**\n```javascript\nimport { fetchConfig } from './configService';\n\nexport const initialState = {\n  loading: false,\n  config: null\n};\n\nexport const loadConfig = settings => async () => {\n  settings.setState({ loading: true });\n\n  const res = await fetchConfig();\n  settings.setState({ loading: false, config: res });\n};\n```\n\n### Binding only relevant data to components\n\nBy default, using an entity hook binds the entire state of the entity to your component. Changes made to any part of this state, even those that are not relevant to the component, would re-render your component.\n\nTo circumvent this, you can pass a _selector_ function to the hook, as in this example:\n\n**MainView.js**\n```javascript\nconst MainView = () => {\n  const [config, { loadConfig }] = useSettings(state => state.config);\n\n  return ( \n    . . .\n  );\n};\n```\n\nWhenever the entity state is updated, the selector function is invoked to provide your component the relevant data derived from the entity state. If the result of the selector call is equal to the previous result, the component will not re-render.\n\nThe equality check used to compare the current vs. previous selector result is, by default, strict/reference equality, i.e. `===`. You can specify a different equality function if needed. The library provides `shallowEqual` for cases when your selector returns an object with top-level properties derived from the entity state, as in the example below:\n\n**MainView.js**\n```javascript\nimport { shallowEqual } from 'react-entities';\n\nconst MainView = () => {\n  const [settings, settingsActions] = useSettings(state => {\n    return {\n      theme: state.config.theme,\n      featureFlags: state.config.featureFlags\n    }\n  }, shallowEqual);\n\n  return ( \n    . . .\n  );\n};\n```\n\nIn case you only require access to actions and not the entity state at all, you can use the selector `() => null` to ensure the entity never causes a re-render. This null selector is also provided by the library as `selectNone` and is the preferred form, to avoid recreating the function on each render.\n\n**Page.js**\n```javascript\nimport { selectNone } from 'react-entities';\n\nconst Page = () => {\n  const { loadConfig } = useSettings(selectNone)[1];\n\n  return ( \n    . . .\n  );\n};\n```\n\n### Injecting dependencies into entities\n\nSometimes you would need to mock the API calls, for example, when unit testing your entities. In scenarios like these, you can take advantage of dependency injection. The `makeEntity` function accepts an optional second argument which is passed onto your entity.\n\n**entities/index.js**\n```javascript\nimport { makeEntity } from 'react-entities';\nimport * as settings from './settings';\nimport * as configMock from './configMock';\n\nexport const useSettings = makeEntity(settings, configMock);\n```\n\nThis second argument is passed automatically as extra argument to your action composer function.\n\n**entities/settings.js**\n```javascript\nexport const initialState = {\n  loading: false,\n  config: null\n};\n\nexport const loadConfig = (settings, service) => async () => {\n  settings.setState({ loading: true });\n\n  const res = await service.fetchConfig();\n  settings.setState({ loading: false, config: res });\n};\n```\n\nIn the example above, the `service` would be the `configMock` passed through `makeEntity`.\n\nBeyond this example, you can inject any type of dependency into your entity, e.g. a keyed list of services, as long as all actions of that entity know how to handle it. \n\nUnit testing is not the only use-case for dependency injection. It can also be used in multi-tenant web apps, or really any other cases that require different behaviors depending on the scenario.\n\n### Separating \"pure\" state changes from actions\n\nUsing _pure functions_ for managing state updates has its benefits. Since actions in React Entities can do pretty much whatever you want it to do, in some cases it would make sense, in fact ideal, to separate \"pure\" state changes from side effects.\n\nTo make this possible, `setState()` can accept an _updater function_ with the following signature:\n```\nupdaterFn(state, ...args) => changes\n```\nwhere `state` is the current state of the entity and the optional `args` can be any number of arguments. This function returns the changes that will be __shallowly merged__ with the current state by `setState()`.\n\nThe `setState()` call will then have to take the form: `setState(updaterFn, updaterArg)`.\n\nIn the example below, you can see that this implementation pattern gives us the benefits of pure functions: readability, predictability and reusability among others.\n\n```javascript\nexport const signIn = (auth, service) => async (email, password, onError) => {\n  auth.setState(updatePendingFlag, true);\n\n  try {\n    await service.signIn(email, password);\n    auth.setState(updateAuth, authInfo);\n  } catch (err) {\n    auth.setState(updatePendingFlag, false);\n    onError(err);\n  }\n};\n\n/*** State Updates ***/\n\nconst updateAuth = (state, { userId, email, role }) => {\n  return { userId, email, role, isAuthPending: false };\n};\n\nconst updatePendingFlag = (state, pending) => {\n  return { isAuthPending: pending };\n};\n```\n\n**Note**: Since the entity reference that is passed onto actions always contains the up-to-date `state`, the updater functions do NOT necessarily have to be lazy-evaluated. In the above example, for instance, the `auth.setState(updatePendingFlag, true)` is just syntactic sugar for the equivalent `auth.setState(updatePendingFlag(auth.state, true))`.\n\n### Referencing initial state inside actions\n\nThe entity's `initialState` property is accessible from within actions as in the following example:\n\n```javascript\nexport const reset = counter => () => {\n  counter.setState({ value: counter.initialState.value });\n};\n```\n\n### Action calling other actions\n\nThe `actions` list is included in the entity reference that is passed onto actions, which allows them to call other actions, as in this example:\n\n```javascript\nexport const loadAndApplyTheme = (ui, service) => async () => {\n  const res = await service.fetchTheme();\n\n  ui.actions.switchTheme(res);\n};\n\nexport const switchTheme = ui => theme => {\n  ui.setState({ theme });\n}\n```\n__Why not reference `switchTheme` directly?__ Remember that the action definition here is a composer function, whereas the final composed action that we invoke at runtime is just a normal function.\n\n\n### Unit testing of entities\n\nWhen we unit test our entities, ideally we would want it to be isolated from the React components that use them. For this purpose, we cannot use `makeEntity` because it returns an entity hook. Instead, we can use the drop-in replacement called `createEntity`, which follows exactly the same syntax but returns a direct reference to the entity instead.\n\n**counter.test.js**\n```javascript\nimport { createEntity } from 'react-entities';\nimport * as _counter from './counter';\n\nlet counter = null;\nbeforeAll(() => {\n  counter = createEntity(_counter);\n});\n\nbeforeEach(() => {\n  counter.reset();\n});\n\ndescribe('counter', () => {\n  describe('increment', () => {\n    it('increments the value of the counter', () => {\n      counter.actions.increment(1);\n      expect(counter.state.value).toBe(1);\n    });\n  });\n});\n```\n\nIn the sample Jest unit test above, `createEntity` gives us the `counter` entity object. This way, we are able to trigger an action by accessing `counter.actions`, and then inspect the current state of the entity via `counter.state`. It also provides `counter.reset()` that allows us to reset the entity to its `initialState` before each test case is executed.\n\n### Teardown of entities during app testing\n\nAll the entities are stored at the module level, outside of the React component tree. For the app itself, this is not a problem. However, in testing the app, you would typically setup and teardown the App component multiple times, and therefore entities must be reset to initial state each time.\n\nFor this purpose you can use the `useEntityBoundary` hook. It resets all entities each time the host component unmounts. Use this hook in a top-level component, typically the `App`.\n\nHere is an example usage:\n\n**App.js**\n```javascript\nimport { useEntityBoundary } from 'react-entities';\n\nconst App = () => {\n  useEntityBoundary();\n\n  return ( \n    . . .\n  );\n};\n```\n","readmeFilename":"README.md","gitHead":"e6e16cdf69ccf2d38a12aa7eaa8c5ba8c270e5eb","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@1.3.0-rc.0","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-NA82L1BxCtVFR0z7Hds0FO0qTQopjnfs+X2u2NHyk0Ho/8gjWEdA/UcEOLCmbV7z6BkQf1SeUSPITrfXNYxafw==","shasum":"53f0945a66d8a2ae551ba0ec44946117b6ee5f08","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.3.0-rc.0.tgz","fileCount":36,"unpackedSize":49317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgO+EuCRA9TVsSAnZWagAAg/oP/3K3dCorNIQXMMFRMHTl\nhfGaaI3X/vKPZRF4VSXXIrWDc96+pouOc2G/fbkapwdylktXalIOUTsZ0Bng\ntKMJwDdQklJHTJNW1jfyinnP3rqBwOOtM7f/8FabymYMQjvLpX536MsAB8t2\nMfCEXW+1X/BkTo2xTQV2PmvCufpivXw2p8U/oHBpEj4PkFlqfRxnpq8iX8Bp\niVjwDUdX2jksvWFZvXYjvkCrHKidwpR4PjFcIU66eIR7MKs+E+SlvlLq9Zo+\nxSBIdqVP5JrNhbUTZzK+vFkJ4hnX3WG1Et4VZ2tyqAAVJ1TzWZadMnv9Tk+P\nXSUiHc390wQH456fRNPB+r6uFNhkTj752giC93vG7n0gzdyiLnga8CMffV+8\nWCuzjRWEiAqYTjVNnCjrgcYM7rRZgFgj/4JnM55KzJSTQATv6zaSGd+QmEa3\nRhDlB8glMFwyXenQxI6JntKCALJwtjuWsQMB2sJsvwhi7RYa3/ylv4tHjGiI\nmnRAb+x9cPaWAPWOGNw0GxT3eCCMjx6OnIcJRcPCyVNKn7O3k2IIr35h1a4x\nmQ+WD5MK+fkHu+8A0KGZEBTDpvTJrI5HwwaKsqvBiorxDW3fSP2dbN4+46Dr\nIiYnmT/P7znsLJKD3g9Nnx2F50rgWyEYRORborPLD5PUGvuuVjMxNXg1dgrv\nyz+5\r\n=XAJ8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHg87MCEtMq64C8MIb+3IyUXsQl0aiHlU7mPEFV7tB/VAiEAxH/6+IsdQQyf9+63UgARQR7plpFzUcnAgKWv+rXSynI="}]},"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.3.0-rc.0_1614537006054_0.29104299562118974"},"_hasShrinkwrap":false},"1.3.0-rc.1":{"name":"react-entities","version":"1.3.0-rc.1","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info","test:cov-local":"npm test -- --coverage"},"peerDependencies":{"react":">=16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@typescript-eslint/eslint-plugin":"^4.10.0","@typescript-eslint/parser":"^4.10.0","babel-eslint":"^10.1.0","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","eslint":"^7.16.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","jest":"^24.9.0","react":">=16.8.0","react-dom":">=16.8.0","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"eslintConfig":{"extends":"react-app"},"gitHead":"19fa233e3c87f86ae49fa6373d8961cf0f2ea5c3","readme":"# React Entities\n\n[![npm](https://img.shields.io/npm/v/react-entities)](https://www.npmjs.com/package/react-entities)\n[![build](https://img.shields.io/travis/arnelenero/react-entities)](https://travis-ci.org/github/arnelenero/react-entities)\n[![coverage](https://img.shields.io/coveralls/github/arnelenero/react-entities)](https://coveralls.io/github/arnelenero/react-entities)\n[![license](https://img.shields.io/github/license/arnelenero/react-entities)](https://opensource.org/licenses/MIT)\n\nReact Entities is an ultra-lightweight library that provides the simplest state management for React apps. It takes advantage of React Hooks.\n\n## Why React Entities?\n\nHere are some of the benefits of using React Entities:\n- No complicated constructs or boilerplate \n- No steep learning curve\n- Uses plain functions to implement state changes\n- Largely unopinionated and flexible syntax\n- Full TypeScript support\n- Made specifically for React, and built on React Hooks \n- Production-grade, well-documented, actively supported\n- It's tiny, only about 1 KB (minified + gzipped)\n\n\n## Setup\n\nTo install:\n```\nnpm install react-entities\n```\n\n\n## What is an Entity?\n\nAn _entity_ is a single-concern data object whose _state_ can be bound to any number of components in the app as a \"shared\" state. Once bound to a component, an entity's state acts like local state, i.e. it causes the component to update on every change.\n\nApart from state, each entity would also have _actions_, which are just normal functions that make changes to the entity's state.\n\n\n## Creating an Entity\n\nA typical entity definition would be a regular module that exports an initial state and several action functions. Here's a simple example:\n\n**entities/counter.js**\n```js\nexport const initialState = {\n  value: 0\n};\n\nexport const increment = counter => by => {\n  counter.setState({ value: counter.state.value + by });\n};\n\nexport const decrement = counter => by => {\n  counter.setState({ value: counter.state.value - by });\n};\n```\n\n<details>\n  <summary>TypeScript version</summary><br/>\n\n**entities/counter.ts**\n```ts\nimport { Entity } from 'react-entities';\n\n/** Types **/\n\nexport interface Counter {  // 👈\n  value: number;\n};\n\nexport interface CounterActions {\n  increment: (by: number) => void;\n  decrement: (by: number) => void;\n};\n\nexport type CounterEntity = Entity<Counter, CounterActions>;  // 👈\n\n/** Implementation **/\n\n//                           👇\nexport const initialState: Counter = {\n  value: 0\n};\n//                                      👇\nexport const increment = (counter: CounterEntity) => (by: number) => {\n  counter.setState({ value: counter.state.value + by });\n};\n//                                      👇\nexport const decrement = (counter: CounterEntity) => (by: number) => {\n  counter.setState({ value: counter.state.value - by });\n};\n```\n\n</details>\n\n### Defining the initial state\n\nThe `initialState` defines the default state of the entity. This should always be an object. Since it's optional, it defaults to `{}`.\n\n### Defining actions\n\nIn the example above, `increment` and `decrement` are both actions. Although actions are ultimately just normal functions, notice that they are defined using _higher-order functions_, or _composers_. This enables passing an entity reference to the action in its definition.\n\nThis is the basic form of an action definition:\n```js\n(entity) => (...arguments) => {}\n```\n\nWithin the action function, we can use the `state` property of the entity to refer to its current state. To make any changes to its state, we can use its `setState()` function. **Do not** directly mutate the `state` object.\n\nThe function `setState()` has the following familiar form:\n```js\nentity.setState(updates)\n```\nwhere `updates` is an object whose properties are __shallowly merged__ with the current state, thus overriding the old values. \n\n\n## Adding an Entity to a Scope\n\nBefore we can access an entity in our components, we need to attach it to a _scope_. The `<EntityScope>` component propagates entities down its entire component subtree.\n\n**App.js**\n```jsx\nimport { EntityScope } from 'react-entities';\nimport * as counter from './entities/counter';\n\nconst App = () => {\n  <Header />\n\n  <EntityScope entities={{ counter }}>\n    <CounterView />\n  </EntityScope>\n\n  <Footer />\n}\n```\n(TypeScript version is the same)\n\nIn the example above, `<CounterView>` and all its descendant components have access to the `counter` entity, while `<Header>` and `<Footer>`, and everything else outside the scope, do not.\n\nWe can attach any number of entities to a single `<EntityScope>`. The `entities` prop is an object that maps each entity to an ID that can be used to access the entity in components within the scope. In our example above, the entity becomes accessible using the entity ID `'counter'`.\n\n\n## Using an Entity in Components\n\nThe `useEntity` hook allows us to bind an entity to a component. It takes an entity ID, finds the matching entity within the scope, and returns a pair of values: the entity state and an object containing actions. \n\n```js\nuseEntity(entityId) => [state, actions]\n```\n\nHere is an example usage:\n\n**CounterView.js**\n```jsx\nimport { useEntity } from 'react-entities';\n\nexport const CounterView = () => {\n  const [counter, { increment, decrement }] = useEntity('counter');\n\n  return (\n    <>\n      <div>{counter.value}</div>\n      <button onClick={() => increment(1)}>Increment</button>\n      <button onClick={() => decrement(1)}>Decrement</button>\n    </>\n  );\n};\n```\n\n<details>\n  <summary>TypeScript version</summary><br/>\n\n**CounterView.tsx**\n```tsx\nimport { useEntity } from 'react-entities';\nimport { Counter, CounterActions } from './entities/counter';\n\nexport const CounterView = () => {\n  const [counter, { increment, decrement }] = \n    useEntity<Counter, CounterActions>('counter');\n    //           👆           👆 \n  return (\n    <>\n      <div>{counter.value}</div>\n      <button onClick={() => increment(1)}>Increment</button>\n      <button onClick={() => decrement(1)}>Decrement</button>\n    </>\n  );\n};\n```\n\n</details>\n\n\n## Recipes\n\nWith the very straightforward, largely unopinionated approach that React Entities brings to managing app state, you have full flexibility to implement things the way you want. It works seamlessly with whatever code architecture you choose for your React app. \n\nHere we provide some suggested patterns that you may consider for specific scenarios.\n\n### Binding only relevant data to a component\n\nBy default, the `useEntity` hook binds the entire state of the entity to our component. Changes made to any part of this state, even those that are not relevant to the component, would cause a re-render.\n\nTo circumvent this, we can pass a _selector_ function to the hook, as in this example:\n\n**MainView.js**\n```jsx\nimport { useEntity } from 'react-entities';\n\nconst MainView = () => {\n  const [config, { loadConfig }] = useEntity('settings', state => state.config);\n  //                                                           👆\n  return ( \n    //  . . .\n  );\n};\n```\n\n<details>\n  <summary>TypeScript version</summary><br/>\n\n**MainView.tsx**\n```tsx\nimport { useEntity } from 'react-entities';\nimport { Settings, Config, SettingsActions } from './entities/settings';\n\nconst MainView = () => {\n  const [config, { loadConfig }] = \n    useEntity<Config, SettingsActions>('settings', (state: Settings) => state.config);\n    //                                                               👆\n  return ( \n    //  . . .\n  );\n```\n\n</details>\n\nWhenever the entity state is updated, the selector function is invoked to provide our component only the relevant data derived from the state. If the result of the selector is equal to the previous result, the component will not re-render.\n\nThe equality check used to compare the current vs. previous selector result is, by default, strict/reference equality, i.e. `===`. We can specify a different equality function if needed. The library provides `shallowEqual` for cases when the selector returns an object with top-level properties derived from the entity state, as in the example below:\n\n**MainView.js**\n```jsx\nimport { useEntity, shallowEqual } from 'react-entities';\n\nconst MainView = () => {\n  const [settings, settingsActions] = useEntity('settings', state => {\n    return {\n      theme: state.theme,\n      enableCountdown: state.featureFlags.countdown\n    }\n  }, shallowEqual);\n  //      👆\n  return ( \n    //  . . .\n  );\n};\n```\n\n<details>\n  <summary>TypeScript version</summary><br/>\n\n**MainView.tsx**\n```tsx\nimport { useEntity } from 'react-entities';\nimport { Settings, Theme, SettingsActions } from './entities/settings';\n\ninterface MainConfig {\n  theme: Theme;\n  enableCountdown: boolean;\n}\n\nconst MainView = () => {\n  const [config, { loadConfig }] = \n    useEntity<MainConfig, SettingsActions>('settings', (state: Settings) => {\n      return {\n        theme: state.theme,\n        enableCountdown: state.featureFlags.countdown\n      }\n    }, shallowEqual);\n    //      👆\n  return ( \n    //  . . .\n  );\n```\n\n</details>\n\nIn case you only require access to actions and not the entity state at all, you can use the selector `selectNone`. This selector always returns `null`.\n\n**Page.js**\n```jsx\nimport { useEntity, selectNone } from 'react-entities';\n\nconst Page = () => {\n  const [, { loadConfig }] = useEntity('settings', selectNone);\n  //                                                    👆\n  return ( \n    //  . . .\n  );\n};\n```\n\n<details>\n  <summary>TypeScript version</summary><br/>\n\n**Page.tsx**\n```tsx\nimport { useEntity, selectNone } from 'react-entities';\nimport { SettingsActions } from './entities/settings';\n\nconst Page = () => {\n  const [, { loadConfig }] = \n    useEntity<null, SettingsActions>('settings', selectNone);\n    //         👆                                     👆\n  return ( \n    //  . . .\n  );\n```\n\n</details>\n\n### Async actions\n\nA typical action makes state changes then immediately terminates. However, since actions are just plain functions, they can contain any operations, including async ones. This gives us the flexibility of implementing things like async data fetches inside actions.\n\nHere is an example using `async/await` for async action:\n\n**entities/settings.js**\n```js\nimport { fetchConfig } from './configService';\n\nexport const initialState = {\n  loading: false,\n  config: null\n};\n//                                      👇\nexport const loadConfig = settings => async () => {\n  settings.setState({ loading: true });\n\n  const res = await fetchConfig();\n  settings.setState({ loading: false, config: res });\n};\n```\n\n<details>\n  <summary>TypeScript version</summary><br/>\n\n**entities/settings.ts**\n```ts\nimport { Entity } from 'react-entities';\nimport { fetchConfig, Config } from './configService';\n\n/** Types **/\n\nexport interface Settings {\n  loading: boolean;\n  config: Config;\n};\n\nexport interface SettingsActions {\n  //                    👇\n  loadConfig: () => Promise<void>;\n};\n\nexport type SettingsEntity = Entity<Settings, SettingsActions>;\n\n/** Implementation **/\n\nexport const initialState: Settings = {\n  loading: false,\n  config: null\n};\n//                                                        👇\nexport const loadConfig = (settings: SettingsEntity) => async () => {\n  settings.setState({ loading: true });\n\n  const res = await fetchConfig();\n  settings.setState({ loading: false, config: res });\n};                                   \n```\n\n</details>\n\n### Calling other actions from an action\n\nAn `actions` object is included in the entity reference that is passed onto actions, which allows them to call other actions, as in this example:\n\n```js\nexport const loadAndApplyTheme = ui => async () => {\n  const res = await fetchTheme();\n  //    👇\n  ui.actions.switchTheme(res);\n};\n\nexport const switchTheme = ui => theme => {\n  ui.setState({ theme });\n}\n```\n__Why not call `switchTheme` directly?__ Remember that the action definition here is a composer function, whereas the final composed action that we invoke at runtime is just a normal function.\n\n### Injecting dependencies into an entity\n\nWe can separate reusable code like API calls, common business logic and utilities from our entity code. Instead of importing these _services_ directly into an entity, we can use _dependency injection_ to reduce coupling.\n\nThis is achieved by pairing the entity with its dependencies as a tuple in the `entities` prop of the `<EntityScope>`.\n\n**App.js**\n```jsx\nimport { EntityScope } from 'react-entities';\nimport * as counter from './entities/counter';\nimport * as settings from './entities/settings';\nimport * as configService from './services/configService'; \n\nconst App = () => {\n  <EntityScope entities={{ \n    counter,\n    settings: [settings, configService]  // 👈 \n  }}>\n    <CounterView />\n  </EntityScope>\n}\n```\n(TypeScript version is the same)\n\nThis second argument is passed automatically as extra argument to our action composer function.\n\n**entities/settings.js**\n```js\nexport const initialState = {\n  loading: false,\n  config: null\n};\n//                                      👇\nexport const loadConfig = (settings, service) => async () => {\n  settings.setState({ loading: true });\n\n  const res = await service.fetchConfig();\n  settings.setState({ loading: false, config: res });\n};\n```\n\nIn the example above, the `service` would be the `configService` passed via the entity scope.\n\n### Multiple and nested entity scopes\n\nIt is simplest to have a single entity scope for all our entities at the top-level component. However, we can have any number of entity scopes, at different levels in our component tree. With nested scopes, entities in the outer scopes are passed down to the inner scopes.\n\nIf you attach the same entity to multiple scopes, each scope will propagate a __separate instance__ of the entity, even if you use the same entity ID across these scopes. When used in a component, that ID then refers to the instance at the nearest scope up the hierarchy.\n\n```jsx\nimport { EntityScope } from 'react-entities';\nimport * as counter from './entities/counter';\nimport * as settings from './entities/settings';\n\nconst App = () => {\n  <EntityScope entities={{ counter, settings }}>\n    <CounterView />\n\n    <EntityScope entities={{ counter }}>\n      <SubCounterView />\n    </EntityScope>\n  </EntityScope>\n}\n```\n(TypeScript version is the same)\n\nIn our example above, `settings` is accessible to both `<CounterView>` and `<SubCounterView>`, while each of those components will \"see\" a different `counter`.\n\nThe example is just illustrative, but in practice, multiple scopes are most useful if we do code-splitting. A lazy loaded module can have its own scope for entities that are needed only by that feature.\n\n### Separating \"pure\" state changes from actions\n\nUsing _pure functions_ for updating state has its benefits. Since an entity action can be pretty much any function, it does not automatically prevent _side effects_.\n\nTo allow us to separate \"pure\" state updates, `setState()` can accept an _updater function_ with the following form:\n```js\nupdaterFn(state, ...args) => changes\n```\nwhere `state` is the current state and the optional `args` can be any number of arguments. This function returns the changes that will be __shallowly merged__ with the current state by `setState()`.\n\nThe `setState()` call inside actions will then have to be in this form: \n```js\nsetState(updaterFn, ...updaterArgs)\n```\n\nIn the example below, we can see that this pattern gives us the benefits of pure functions: readability, predictability and reusability among others.\n\n```js\nexport const signIn = (auth, service) => async (email, password) => {\n  auth.setState(updatePendingFlag, true);\n\n  const { userId, role } = await service.signIn(email, password);\n  auth.setState(updateAuth, userId, role);\n};\n\n/*** State Updaters ***/\n\nconst updateAuth = (state, userId, role) => {\n  return { userId, role, isAuthPending: false };\n};\n\nconst updatePendingFlag = (state, pending) => {\n  return { isAuthPending: pending };\n};\n```\n\nPure state updaters can also be nested to encourage modularity, like in this example:\n\n```js\nconst updateAuth = (state, userId, role) => {\n  return { \n    userId, \n    role, \n    ...updatePendingFlag(state, false)  // 👈\n  };\n};\n\nconst updatePendingFlag = (state, pending) => {\n  return { isAuthPending: pending };\n};\n```\n\n### Unit testing of entities\n\nWhen we unit test our entities, ideally we would isolate them from the components that use them. For this purpose, we can use the `createEntity` function. It creates an instance of the entity and returns a direct reference to it.\n\n**counter.test.js**\n```js\nimport { createEntity } from 'react-entities';\nimport * as _counter from './counter';\n\nlet counter = null;\nbeforeAll(() => {\n  counter = createEntity(_counter);  // 👈\n});\n\nbeforeEach(() => {\n  //        👇\n  counter.reset();\n});\n\ndescribe('counter', () => {\n  describe('increment', () => {\n    it('increments the value of the counter', () => {\n      //        👇\n      counter.actions.increment(1);\n      expect(counter.state.value).toBe(1);\n      //               👆\n    });\n  });\n});\n```\n\nIn the example Jest unit test above, `createEntity` gives us the `counter` instance. This way, we are able to trigger an action in `counter.actions`, and then inspect the current state via `counter.state`. It also provides `counter.reset()` to allow us to reset the entity to its `initialState` before each test case is executed.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@1.3.0-rc.1","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-sOUhJExfQDgyxgDZEjrVgdhk3wjdIqMtZpHFdNsQWATr2gdFOcwoDkgsaMpXERkL7rRAZPybZbrfoWlqkrTaUQ==","shasum":"fccb9c919f0e46a174892f7d28ab7655dfd43ad1","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.3.0-rc.1.tgz","fileCount":36,"unpackedSize":61330,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQMQ4CRA9TVsSAnZWagAAsEcQAJxt+VRrVBF3QNwRguhv\nh5bbelezqgWHOQ2itMtUifLHyHlXkFybJFSq3MyI0uXjN1FUpfV+Eb3riE7v\ntqXqghwqVKUWgorVUFWaeEARDkpxe+8Ldi1isxfY5o2MjDC11u/dQ/sctO5t\nmaSstP/5U/7wzPus+zlUlz04E1Y9REd1ZMc+18/GIdk8PikLRwgaIp7b8jPk\njj0hDBV+ZmDQ+NBwwkVD7TZVjuS8yqVnYF3I3kyEvbbJOn45kaDRa0oueB+E\n1/PmcfvF2rWD5eagt6+8DU4PbW7sHkqTo5h6Lgrhdsqf7xWOA/2lTQKmmhFe\nj3o+8I0sF3yDOrLcQfw0eZznv5F9RCNTwvvNJrSaEnseXtVTMdzQ4bQv7KXq\nqshTDjhtty1Rna+5nKfPrqNEVUZuZDs0ogL5zzYW4yq8VQAX/Wln5AKN59SK\nREhT1WdweZtBMHIDZ4yLaqWTL4US3XM6eWbmVyRR95mMIZIsWWbBn490W/gy\nvCUPbidLwYWbf34MRUAaGg1iuYUt0r+V9L1P0lRmzTmxQfv0CPwR+L+TUliV\nAaxuXaHC7huBu1Yqs9/9z4qIISRHfllwukxbJ7sTVPndG6iAKDVcYeSkakL4\n3zLBwWQQdEez6eFzaatG/hhrAf7tGsCsx4xXKNe4TrHjn6/BG/SsidSn6gd6\ndCrH\r\n=Te5I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDUgJjiPZXorvuFJRPTgYkIqC0DQA6CsieoGDF/UZCnbAiBd7vTfBcLm/OKhczAF6H8DEI2eARBJrHTn7WP8h2JNdw=="}]},"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.3.0-rc.1_1614857271888_0.6094783202650387"},"_hasShrinkwrap":false},"1.3.0":{"name":"react-entities","version":"1.3.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"babel src --out-dir es","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info","test:cov-local":"npm test -- --coverage"},"peerDependencies":{"react":">=16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@typescript-eslint/eslint-plugin":"^4.10.0","@typescript-eslint/parser":"^4.10.0","babel-eslint":"^10.1.0","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","eslint":"^7.16.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","jest":"^24.9.0","react":">=16.8.0","react-dom":">=16.8.0","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"testRegex":"(/test/.*\\.spec\\.js)$","setupFilesAfterEnv":["<rootDir>/test/_setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"eslintConfig":{"extends":"react-app"},"gitHead":"9f098110a54d02daa2c77d20c040912886378000","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"homepage":"https://github.com/arnelenero/react-entities#readme","_id":"react-entities@1.3.0","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-2IV6Es95ij4AzmDehdulnzC+3q03OyRlANK6GCbY0qmuI1s59xI1Z1NI1Lk/irOdGu6XFdoCikrv9zez4sJKgA==","shasum":"5e1d2b15aac3f42d080c8a2b485d231c8aa3ae77","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.3.0.tgz","fileCount":35,"unpackedSize":47007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQQtqCRA9TVsSAnZWagAAJ5UP/1hwIgE6RGEs/YSHEaDB\nv1IRksrsYlCnWNabRNRE7dXd+wqzSqU5hcopi6aWTGNAckrz6Kl2SugqeCtN\ntjGIZB6MSzPqRYYaHFeSh+JLkgUOob/EtWp9kdLW5F2bo9tYHS27J7Uiqgjk\n1m9TzwZg9sO1R31wNpCQceccm58rJ7TLhO789sj0GM0SB43TaxarB7UpVOqM\nEFMcG3vWNxvStl0T/IqKCnBE191Cy6FaknnhpJhXCkwt+HFWsyUA0zFQYkzl\nS8Urhr7fV+m8eHhMHZ9HV18kGZRQpex/eEuYwij8gzW6RIsigCxwin74gv6S\nFhPS0U/luoakJM8qdGZkR3kDksUlfhQiDLx4Xbg/Bsmhm0gCsOqljig8OLGK\n6Jb0MbLeUMX8iDQ7f7v2truBW2ubPhTwTaf4+ZR1NowZthSZ82LXYjn69YV2\nl8KbQN2rI+mJ5vDvO7jBbYAlWqUydQbuBAWy1CE5eda14nAphK+SAVtkwM9D\nRjd+aCIiisL4oc6NyrvFykTQk+MhvjUmo9VDxn47zPP1u0wIEfgiR9v0NVIg\nZLViORUCVhGdhqq8YELWI8XG3xM1takd7aU7322IkiL4d9HvkncWh97/2Vcx\nTTjqkDd1p4n4eb6pVzC82C3BTMgZBnOMn1+kpSUr9yy4m0bzWOJnoQfVjifk\n1hMp\r\n=aUMj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH0Z9rh2MHH0MKD9Q9Ag0XW5BqC5cMuPdqUjiFEPW4ghAiAn4Wt6yOvzb2w4GfwJeamnhpY7JATtGTSFVKzS1XQe/Q=="}]},"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.3.0_1614875497638_0.10901233053459292"},"_hasShrinkwrap":false},"1.3.1-alpha.0":{"name":"react-entities","version":"1.3.1-alpha.0","description":"React Entities - the simplest app state management for React","keywords":["react","state","library","functional","hooks"],"repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","homepage":"https://arnelenero.github.io/react-entities/","main":"lib/index.js","module":"es/index.js","typings":"./index.d.ts","scripts":{"build:lib":"cross-env BABEL_ENV=commonjs babel src --out-dir lib --ignore **/__tests__","build:es":"babel src --out-dir es --ignore **/__tests__","build":"npm run build:lib && npm run build:es","clean":"rimraf lib es","prepare":"npm run clean && npm test","pretest":"npm run build","test":"jest","test:cov":"npm test -- --coverage && coveralls < coverage/lcov.info","test:cov-local":"npm test -- --coverage"},"peerDependencies":{"react":">=16.8.0"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.5","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@typescript-eslint/eslint-plugin":"^4.10.0","@typescript-eslint/parser":"^4.10.0","babel-eslint":"^10.1.0","babel-jest":"^24.9.0","coveralls":"^3.1.0","cross-env":"^5.2.1","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","eslint":"^7.16.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","jest":"^24.9.0","react":">=16.8.0","react-dom":">=16.8.0","react-test-renderer":"^16.13.1","rimraf":"^2.7.1","sinon":"^7.5.0"},"jest":{"setupFilesAfterEnv":["<rootDir>/test-setup.js"],"collectCoverageFrom":["src/**/*.js","!src/**/index.js","!src/index.js"]},"eslintConfig":{"extends":"react-app"},"gitHead":"abb13a0f00ca74628a3869b14e76949e1c0f469d","readme":"# <img src=\"./doc/logo.png\" alt=\"React Entities\" width=\"200\"/>\n\n[![npm](https://img.shields.io/npm/v/react-entities)](https://www.npmjs.com/package/react-entities)\n[![build](https://img.shields.io/travis/arnelenero/react-entities)](https://travis-ci.org/github/arnelenero/react-entities)\n[![coverage](https://img.shields.io/coveralls/github/arnelenero/react-entities)](https://coveralls.io/github/arnelenero/react-entities)\n[![license](https://img.shields.io/github/license/arnelenero/react-entities)](https://opensource.org/licenses/MIT)\n\nReact Entities is an ultra-lightweight library that provides the simplest state management for React apps. It takes advantage of React Hooks.\n\n## Why React Entities?\n\nHere are some of the benefits of using React Entities:\n- No complicated constructs or boilerplate \n- No steep learning curve\n- Uses plain functions to implement state changes\n- Largely unopinionated and flexible syntax\n- Full TypeScript support\n- Made specifically for React, and built on React Hooks \n- Production-grade, well-documented, actively supported\n- It's tiny, only about 1 KB (minified + gzipped)\n\n\n## Setup\n\nTo install:\n```\nnpm install react-entities\n```\n\n\n## TLDR: Easy as 1-2-3\n\n__Step 1:__ Create an entity (shared state)\n\n```js\n/** counter.js **/\n\nexport const initialState = {\n  value: 0\n};\n\nexport const increment = counter => by => {\n  counter.setState({ value: counter.state.value + by });\n};\n\nexport const decrement = counter => by => {\n  counter.setState({ value: counter.state.value - by });\n};\n```\n\n__Step 2:__ Add the entity to a scope\n\n```jsx\nimport { EntityScope } from 'react-entities';\nimport * as counter from './entities/counter';  // 👈\nimport * as settings from './entities/settings';\n\nconst App = () => {\n  <EntityScope entities={ { \n    counter,  // 👈 \n    settings\n  } }>\n    <CounterView />\n  </EntityScope>\n}\n```\n\n__Step 3:__ Use the entity in components\n\n```jsx\nimport { useEntity } from 'react-entities';\n\nexport const CounterView = () => {\n  const [counter, { increment, decrement }] = useEntity('counter');\n\n  return (\n    <>\n      <div>{counter.value}</div>\n      <button onClick={() => increment(1)}>Increment</button>\n      <button onClick={() => decrement(1)}>Decrement</button>\n    </>\n  );\n};\n```\n\nIt's that simple! \n\n\n## What is an Entity?\n\nAn _entity_ is a single-concern data object whose _state_ can be bound to any number of components in the app as a \"shared\" state. Once bound to a component, an entity's state acts like local state, i.e. it causes the component to update on every change.\n\nApart from state, each entity would also have _actions_, which are just normal functions that make changes to the entity's state.\n\n\n## Creating an Entity\n\nA typical entity definition would be a regular module that exports an initial state and several action functions. Here's a simple example:\n\n**entities/counter.js**\n```js\nexport const initialState = {\n  value: 0\n};\n\nexport const increment = counter => by => {\n  counter.setState({ value: counter.state.value + by });\n};\n\nexport const decrement = counter => by => {\n  counter.setState({ value: counter.state.value - by });\n};\n```\n\n<details>\n  <summary>TypeScript version</summary><br/>\n\n**entities/counter.ts**\n```ts\nimport { Entity } from 'react-entities';\n\n/** Types **/\n\nexport interface Counter {  // 👈\n  value: number;\n};\n\nexport interface CounterActions {\n  increment: (by: number) => void;\n  decrement: (by: number) => void;\n};\n\nexport type CounterEntity = Entity<Counter, CounterActions>;  // 👈\n\n/** Implementation **/\n\n//                           👇\nexport const initialState: Counter = {\n  value: 0\n};\n//                                      👇\nexport const increment = (counter: CounterEntity) => (by: number) => {\n  counter.setState({ value: counter.state.value + by });\n};\n//                                      👇\nexport const decrement = (counter: CounterEntity) => (by: number) => {\n  counter.setState({ value: counter.state.value - by });\n};\n```\n\n</details>\n\n### Defining the initial state\n\nThe `initialState` defines the default state of the entity. This should always be an object. Since it's optional, it defaults to `{}`.\n\n### Defining actions\n\nIn the example above, `increment` and `decrement` are both actions. Although actions are ultimately just normal functions, notice that they are defined using _higher-order functions_, or _composers_. This enables passing an entity reference to the action in its definition.\n\nThis is the basic form of an action definition:\n```js\n(entity) => (...arguments) => {}\n```\n\nWithin the action function, we can use the `state` property of the entity to refer to its current state. To make any changes to its state, we can use its `setState()` function. **Do not** directly mutate the `state` object.\n\nThe function `setState()` has the following familiar form:\n```js\nentity.setState(updates)\n```\nwhere `updates` is an object whose properties are __shallowly merged__ with the current state, thus overriding the old values. \n\n\n## Adding an Entity to a Scope\n\nBefore we can access an entity in our components, we just need to attach it to a _scope_. The `<EntityScope>` component propagates entities down its entire component subtree.\n\n**App.js**\n```jsx\nimport { EntityScope } from 'react-entities';\nimport * as counter from './entities/counter';  // 👈\nimport * as settings from './entities/settings';\n\nconst App = () => {\n  <Header />\n\n  <EntityScope entities={ { \n    counter,  // 👈 This is just shorthand for `counter: counter`\n    settings\n  } }>\n    <CounterView />\n  </EntityScope>\n\n  <Footer />\n}\n```\n(TypeScript version is the same)\n\nIn the example above, `<CounterView>` and all its descendant components have access to the `counter` entity, while `<Header>` and `<Footer>`, and everything else outside the scope, do not.\n\nWe can attach any number of entities to a single `<EntityScope>`. The `entities` prop is an object that maps each entity to an ID that can be used to access the entity in components within the scope. In our example above, the entity becomes accessible using the entity ID `'counter'`.\n\n\n## Using an Entity in Components\n\nThe `useEntity` hook allows us to bind an entity to a component. It takes an entity ID, finds the matching entity within the scope, and returns a pair of values: the entity state and an object containing actions. \n\n```js\nuseEntity(entityId) => [state, actions]\n```\n\nHere is an example usage:\n\n**CounterView.js**\n```jsx\nimport { useEntity } from 'react-entities';\n\nexport const CounterView = () => {\n  const [counter, { increment, decrement }] = useEntity('counter');\n\n  return (\n    <>\n      <div>{counter.value}</div>\n      <button onClick={() => increment(1)}>Increment</button>\n      <button onClick={() => decrement(1)}>Decrement</button>\n    </>\n  );\n};\n```\n\n<details>\n  <summary>TypeScript version</summary><br/>\n\n**CounterView.tsx**\n```tsx\nimport { useEntity } from 'react-entities';\nimport { Counter, CounterActions } from './entities/counter';\n\nexport const CounterView = () => {\n  const [counter, { increment, decrement }] = \n    useEntity<Counter, CounterActions>('counter');\n    //           👆           👆 \n  return (\n    <>\n      <div>{counter.value}</div>\n      <button onClick={() => increment(1)}>Increment</button>\n      <button onClick={() => decrement(1)}>Decrement</button>\n    </>\n  );\n};\n```\n\n</details>\n\n\n## Recipes\n\nWith the very straightforward, largely unopinionated approach that React Entities brings to managing app state, you have full flexibility to implement things the way you want. It works seamlessly with whatever code architecture you choose for your React app. \n\nHere we provide some suggested patterns that you may consider for specific scenarios.\n\n[Binding only relevant data to a component](#binding-only-relevant-data-to-a-component)  \n[Async actions](#async-actions)  \n[Calling other actions from an action](#calling-other-actions-from-an-action)  \n[Injecting dependencies into an entity](#injecting-dependencies-into-an-entity)  \n[Multiple and nested entity scopes](#multiple-and-nested-entity-scopes)  \n[Separating \"pure\" state changes from actions](#separating-pure-state-changes-from-actions)  \n[Unit testing of entities](#unit-testing-of-entities)  \n\n### Binding only relevant data to a component\n\nBy default, the `useEntity` hook binds the entire state of the entity to our component. Changes made to any part of this state, even those that are not relevant to the component, would cause a re-render.\n\nTo circumvent this, we can pass a _selector_ function to the hook, as in this example:\n\n**MainView.js**\n```jsx\nimport { useEntity } from 'react-entities';\n\nconst MainView = () => {\n  const [config, { loadConfig }] = useEntity('settings', state => state.config);\n  //                                                           👆\n  return ( \n    //  . . .\n  );\n};\n```\n\n<details>\n  <summary>TypeScript version</summary><br/>\n\n**MainView.tsx**\n```tsx\nimport { useEntity } from 'react-entities';\nimport { Settings, Config, SettingsActions } from './entities/settings';\n\nconst MainView = () => {\n  const [config, { loadConfig }] = \n    useEntity<Config, SettingsActions>('settings', (state: Settings) => state.config);\n    //                                                               👆\n  return ( \n    //  . . .\n  );\n```\n\n</details>\n\nWhenever the entity state is updated, the selector function is invoked to provide our component only the relevant data derived from the state. If the result of the selector is equal to the previous result, the component will not re-render.\n\nThe equality check used to compare the current vs. previous selector result is, by default, strict/reference equality, i.e. `===`. We can specify a different equality function if needed. The library provides `shallowEqual` for cases when the selector returns an object with top-level properties derived from the entity state, as in the example below:\n\n**MainView.js**\n```jsx\nimport { useEntity, shallowEqual } from 'react-entities';\n\nconst MainView = () => {\n  const [settings, settingsActions] = useEntity('settings', state => {\n    return {\n      theme: state.theme,\n      enableCountdown: state.featureFlags.countdown\n    }\n  }, shallowEqual);\n  //      👆\n  return ( \n    //  . . .\n  );\n};\n```\n\n<details>\n  <summary>TypeScript version</summary><br/>\n\n**MainView.tsx**\n```tsx\nimport { useEntity } from 'react-entities';\nimport { Settings, Theme, SettingsActions } from './entities/settings';\n\ninterface MainConfig {\n  theme: Theme;\n  enableCountdown: boolean;\n}\n\nconst MainView = () => {\n  const [config, { loadConfig }] = \n    useEntity<MainConfig, SettingsActions>('settings', (state: Settings) => {\n      return {\n        theme: state.theme,\n        enableCountdown: state.featureFlags.countdown\n      }\n    }, shallowEqual);\n    //      👆\n  return ( \n    //  . . .\n  );\n```\n\n</details>\n\nIn case you only require access to actions and not the entity state at all, you can use the selector `selectNone`. This selector always returns `null`.\n\n**Page.js**\n```jsx\nimport { useEntity, selectNone } from 'react-entities';\n\nconst Page = () => {\n  const [, { loadConfig }] = useEntity('settings', selectNone);\n  //                                                    👆\n  return ( \n    //  . . .\n  );\n};\n```\n\n<details>\n  <summary>TypeScript version</summary><br/>\n\n**Page.tsx**\n```tsx\nimport { useEntity, selectNone } from 'react-entities';\nimport { SettingsActions } from './entities/settings';\n\nconst Page = () => {\n  const [, { loadConfig }] = \n    useEntity<null, SettingsActions>('settings', selectNone);\n    //         👆                                     👆\n  return ( \n    //  . . .\n  );\n```\n\n</details><br />\n\n[⬆️ Recipes](#recipes)\n\n### Async actions\n\nA typical action makes state changes then immediately terminates. However, since actions are just plain functions, they can contain any operations, including async ones. This gives us the flexibility of implementing things like async data fetches inside actions.\n\nHere is an example using `async/await` for async action:\n\n**entities/settings.js**\n```js\nimport { fetchConfig } from './configService';\n\nexport const initialState = {\n  loading: false,\n  config: null\n};\n//                                      👇\nexport const loadConfig = settings => async () => {\n  settings.setState({ loading: true });\n\n  const res = await fetchConfig();\n  settings.setState({ loading: false, config: res });\n};\n```\n\n<details>\n  <summary>TypeScript version</summary><br/>\n\n**entities/settings.ts**\n```ts\nimport { Entity } from 'react-entities';\nimport { fetchConfig, Config } from './configService';\n\n/** Types **/\n\nexport interface Settings {\n  loading: boolean;\n  config: Config;\n};\n\nexport interface SettingsActions {\n  //                    👇\n  loadConfig: () => Promise<void>;\n};\n\nexport type SettingsEntity = Entity<Settings, SettingsActions>;\n\n/** Implementation **/\n\nexport const initialState: Settings = {\n  loading: false,\n  config: null\n};\n//                                                        👇\nexport const loadConfig = (settings: SettingsEntity) => async () => {\n  settings.setState({ loading: true });\n\n  const res = await fetchConfig();\n  settings.setState({ loading: false, config: res });\n};                                   \n```\n\n</details><br />\n\n[⬆️ Recipes](#recipes)\n\n### Calling other actions from an action\n\nAn `actions` object is included in the entity reference that is passed onto actions, which allows them to call other actions, as in this example:\n\n```js\nexport const loadAndApplyTheme = ui => async () => {\n  const res = await fetchTheme();\n  //    👇\n  ui.actions.switchTheme(res);\n};\n\nexport const switchTheme = ui => theme => {\n  ui.setState({ theme });\n}\n```\n__Why not call `switchTheme` directly?__ Remember that the action definition here is a composer function, whereas the final composed action that we invoke at runtime is just a normal function.\n\n[⬆️ Recipes](#recipes)\n\n### Injecting dependencies into an entity\n\nWe can separate reusable code like API calls, common business logic and utilities from our entity code. Instead of importing these _services_ directly into an entity, we can use _dependency injection_ to reduce coupling.\n\nThis is achieved by pairing the entity with its dependencies as a tuple in the `entities` prop of the `<EntityScope>`.\n\n**App.js**\n```jsx\nimport { EntityScope } from 'react-entities';\nimport * as counter from './entities/counter';\nimport * as settings from './entities/settings';\nimport * as configService from './services/configService'; \n\nconst App = () => {\n  <EntityScope entities={ { \n    counter,\n    settings: [settings, configService]  // 👈 \n  } }>\n    <CounterView />\n  </EntityScope>\n}\n```\n(TypeScript version is the same)\n\nThis second argument is passed automatically as extra argument to our action composer function.\n\n**entities/settings.js**\n```js\nexport const initialState = {\n  loading: false,\n  config: null\n};\n//                                      👇\nexport const loadConfig = (settings, service) => async () => {\n  settings.setState({ loading: true });\n\n  const res = await service.fetchConfig();\n  settings.setState({ loading: false, config: res });\n};\n```\n\nIn the example above, the `service` would be the `configService` passed via the entity scope.\n\n[⬆️ Recipes](#recipes)\n\n### Multiple and nested entity scopes\n\nIt is simplest to have a single entity scope for all our entities at the top-level component. However, we can have any number of entity scopes, at different levels in our component tree. With nested scopes, entities in the outer scopes are passed down to the inner scopes.\n\nIf you attach the same entity to multiple scopes, each scope will propagate a __separate instance__ of the entity, even if you use the same entity ID across these scopes. When used in a component, that ID then refers to the instance at the nearest scope up the hierarchy.\n\n\n```jsx\nimport { EntityScope } from 'react-entities';\nimport * as counter from './entities/counter';\nimport * as settings from './entities/settings';\n\nconst App = () => {\n  <EntityScope entities={ { counter, settings } }>\n    <CounterView />\n\n    <EntityScope entities={ { counter } }>\n      <SubCounterView />\n    </EntityScope>\n  </EntityScope>\n}\n```\n\n(TypeScript version is the same)\n\nIn our example above, `settings` is accessible to both `<CounterView>` and `<SubCounterView>`, while each of those components will \"see\" a different `counter`.\n\nThe example is just illustrative, but in practice, multiple scopes are most useful if we do code-splitting. A lazy loaded module can have its own scope for entities that are needed only by that feature.\n\n[⬆️ Recipes](#recipes)\n\n### Separating \"pure\" state changes from actions\n\nUsing _pure functions_ for updating state has its benefits. Since an entity action can be pretty much any function, it does not automatically prevent _side effects_.\n\nTo allow us to separate \"pure\" state updates, `setState()` can accept an _updater function_ with the following form:\n```js\nupdaterFn(state, ...args) => changes\n```\nwhere `state` is the current state and the optional `args` can be any number of arguments. This function returns the changes that will be __shallowly merged__ with the current state by `setState()`.\n\nThe `setState()` call inside actions will then have to be in this form: \n```js\nsetState(updaterFn, ...updaterArgs)\n```\n\nIn the example below, we can see that this pattern gives us the benefits of pure functions: readability, predictability and reusability among others.\n\n```js\nexport const signIn = (auth, service) => async (email, password) => {\n  auth.setState(updatePendingFlag, true);\n\n  const { userId, role } = await service.signIn(email, password);\n  auth.setState(updateAuth, userId, role);\n};\n\n/*** State Updaters ***/\n\nconst updateAuth = (state, userId, role) => {\n  return { userId, role, isAuthPending: false };\n};\n\nconst updatePendingFlag = (state, pending) => {\n  return { isAuthPending: pending };\n};\n```\n\nPure state updaters can also be nested to encourage modularity, like in this example:\n\n```js\nconst updateAuth = (state, userId, role) => {\n  return { \n    userId, \n    role, \n    ...updatePendingFlag(state, false)  // 👈\n  };\n};\n\nconst updatePendingFlag = (state, pending) => {\n  return { isAuthPending: pending };\n};\n```\n\n[⬆️ Recipes](#recipes)\n\n### Unit testing of entities\n\nWhen we unit test our entities, ideally we would isolate them from the components that use them. For this purpose, we can use the `createEntity` function. It creates an instance of the entity and returns a direct reference to it.\n\n**counter.test.js**\n```js\nimport { createEntity } from 'react-entities';\nimport * as _counter from './counter';\n\nlet counter = null;\nbeforeAll(() => {\n  counter = createEntity(_counter);  // 👈\n});\n\nbeforeEach(() => {\n  //        👇\n  counter.reset();\n});\n\ndescribe('counter', () => {\n  describe('increment', () => {\n    it('increments the value of the counter', () => {\n      //        👇\n      counter.actions.increment(1);\n      expect(counter.state.value).toBe(1);\n      //               👆\n    });\n  });\n});\n```\n\nIn the example Jest unit test above, `createEntity` gives us the `counter` instance. This way, we are able to trigger an action in `counter.actions`, and then inspect the current state via `counter.state`. It also provides `counter.reset()` to allow us to reset the entity to its `initialState` before each test case is executed.\n\n[⬆️ Recipes](#recipes)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/arnelenero/react-entities/issues"},"_id":"react-entities@1.3.1-alpha.0","_nodeVersion":"10.15.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-0qXHk4dOdbaVikCXjwnlZQozVGfxtyjYodji2RetwD7wecNNTDmXRz1tPefBdfLJvMAjDFFZan1zTOo8ITZoeg==","shasum":"cad791e034fc6a9dff63da83e2d8ff428878f8e2","tarball":"https://registry.npmjs.org/react-entities/-/react-entities-1.3.1-alpha.0.tgz","fileCount":25,"unpackedSize":42767,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQ1wCCRA9TVsSAnZWagAA1IYP+wc2gDskTMSSRu0lfthf\njaT+MitJgQYx1I8+Bd+siLirJbwUiHe8mVYpnIDjHcucAElZosRa9CbQFnK7\nwrlY0//asxIMUthoLH53Ys27AZaNAHk/kpetBmR/KIQlspAZnt82BaPk7Xts\ngJW2tzOrFEPQ2KpeH/H3qzJH9/B2kaHursD5bSTuZCXiSS5THo6zqVyAeIW7\nYlh5vCAjC0svji2GaRDogzr/kwd/0uSaoHlFdgFm9kbNnWMzqNd6CQHeAm4w\nArL55WNUFVVPh4Llv4Chcj1lbDf2XSGnOzWS+UJFkGsvtTJCZY+7FRnBjWfr\n/2cyB8LJQgKq06BygO91iqwWpcst20F9mLDm1hOXThWMFg0cwBXS2KjcL68c\nDtFw/nqjNnhpU7U9vilXVEk2seeezWZtvS5Epz/tWg9KR2BWFVgQ+R1MUlfI\no6fmzFEfnvUHNFHiKpZshyvTsFBcLL+SIiVCOrmwYoAhYiDFW+bKTIOTept5\ntO7aGvDuGaH5eCB2G9kmo7Vs5arZQdmc+hkrz3H5dIrv4HB7CzuYGtb2niTW\n563XVf6pP9e04mi/4/3NNIWebiABoHzh/e6vG63NTc+viml89ZCg1HT/w+QY\nwBgFEKJZhfz1IuviCWpT2EsUBP1hSkpwquVfEazbwELTty296x2bCl0RjMIR\nocTN\r\n=gg/K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBwlHW1UlCvvjo5Klde8Ss+/czQZQtVg08U6fIo1H52lAiEAh/mf49mY8xJUPJlGcugEpvATzi6nuDPTYF1kgBa9UE4="}]},"_npmUser":{"name":"arnel.enero","email":"aenero@gmail.com"},"directories":{},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-entities_1.3.1-alpha.0_1615027201233_0.3313023511640849"},"_hasShrinkwrap":false}},"time":{"created":"2019-07-25T16:52:49.835Z","0.1.0":"2019-07-25T16:52:50.102Z","modified":"2022-05-14T10:21:45.407Z","0.1.1":"2019-07-25T17:20:26.184Z","0.1.2":"2019-07-31T08:58:39.748Z","0.1.3":"2019-08-03T16:59:57.561Z","0.1.4":"2019-08-03T20:23:02.028Z","0.1.5":"2019-08-03T21:47:02.203Z","0.1.6":"2019-08-03T23:14:22.047Z","0.1.7":"2019-08-03T23:28:36.487Z","0.1.8":"2019-08-04T17:10:23.402Z","0.2.0":"2019-08-04T20:27:18.230Z","0.2.1":"2019-08-06T05:21:27.852Z","0.3.0":"2019-08-07T07:27:31.269Z","0.3.1":"2019-08-07T07:29:37.463Z","0.3.2":"2019-08-08T10:01:41.775Z","0.3.3":"2019-08-09T13:57:45.527Z","0.3.4":"2019-08-09T15:37:05.138Z","0.3.5":"2019-08-14T14:22:31.505Z","0.3.6":"2019-08-23T16:43:52.255Z","0.4.0":"2019-08-27T16:03:41.633Z","0.5.0":"2019-10-22T11:51:51.641Z","0.5.1":"2019-10-24T11:24:45.698Z","0.6.0":"2020-04-12T20:25:13.324Z","0.6.1":"2020-04-12T20:43:34.215Z","0.7.0":"2020-05-20T12:21:57.919Z","0.8.0":"2020-05-23T12:23:32.847Z","0.9.0":"2020-05-25T19:55:57.496Z","0.9.1":"2020-05-28T08:51:22.961Z","1.0.0":"2020-05-30T13:08:25.283Z","1.0.1":"2020-06-04T01:57:14.138Z","1.0.2":"2020-06-08T17:53:02.935Z","1.0.3":"2020-07-23T09:43:05.645Z","1.1.0":"2020-08-26T18:32:26.596Z","1.2.0":"2020-10-04T16:56:51.293Z","1.2.1":"2020-12-02T08:33:15.566Z","1.2.2":"2020-12-05T16:52:15.160Z","1.3.0-beta.0":"2021-02-22T13:02:20.094Z","1.3.0-beta.1":"2021-02-25T15:36:35.406Z","1.3.0-rc.0":"2021-02-28T18:30:06.210Z","1.3.0-rc.1":"2021-03-04T11:27:52.050Z","1.3.0":"2021-03-04T16:31:37.807Z","1.3.1-alpha.0":"2021-03-06T10:40:01.352Z"},"maintainers":[{"name":"arnel.enero","email":"aenero@gmail.com"}],"description":"React Entities - the simplest app state management for React","keywords":["react","state","library","functional","hooks"],"author":{"name":"Arnel Enero","email":"aenero@gmail.com"},"license":"MIT","readme":"","readmeFilename":"","homepage":"https://github.com/arnelenero/react-entities#readme","repository":{"type":"git","url":"git+https://github.com/arnelenero/react-entities.git"},"bugs":{"url":"https://github.com/arnelenero/react-entities/issues"}}