{"_id":"use-change","_rev":"40-40732dfccb86914877f0aef95e2bcee0","name":"use-change","dist-tags":{"latest":"1.2.4","beta":"1.0.4-beta.2"},"versions":{"0.0.0":{"name":"use-change","version":"0.0.0","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^5.1.0","@types/jasmine":"^3.6.7","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"^4.18.0","eslint":"^7.22.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.22.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^6.0.0","jasmine-ts":"^0.3.0","react":"^17.0.1","react-test-renderer":"^17.0.1","ts-node":"^8.10.2","typescript":"^4.2.3"},"peerDependencies":{"react":"*"},"gitHead":"52afce4d8847f178f6f3e929875470db5d4f03d1","_id":"use-change@0.0.0","_nodeVersion":"14.5.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-blywAx6uiwiHkXehjzVGsKSYhlJm25J4Aa2EISHE88MI1kMFSZQjQn60T5LS/ARrYCtzr0aDNJi9qy5HrI6WMQ==","shasum":"a608ecb884d697cc5259469a66b7286d0b2c424e","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.0.0.tgz","fileCount":27,"unpackedSize":36125,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgV0qNCRA9TVsSAnZWagAAgs8P/3xZrSo+2hlweDmB09G3\nrld02mvVd2GDGkvkFXtr9dsNo6B0N9CbhV9QsKESUBYxKs362wJ5eqaFzQn4\nBc/KcXEzCCIUx8q6Mfm0rdxnSrnhi+kFjM+Gn8Db1ehcnaEoJhpYROp9yndB\n89EhtwQRJP3yfMn0oS3cNFgnIWXyXY4K8wU8jiPg1wJET9W4J4Xl26oVqhrf\ne1HUH8qBiTKjpyNHf4Cy0EYDfqgQkJgcgbfLOUnFNuYGHabol04eTBePro+j\nytJ3XBHxCQfHIJtGy+7Cehslv9pYUoLVbuEk2Z8Uqroj0/vU8ny8V2LVWVTU\nP+I7QxS6P440GZaCNRb8ZPCmqKRYFx2WvtduJlNB8K84iZBy97WqzBhKMM14\nuvBAmY7OML1REOHRw6VU4yq1Z36LcE7KlsMthZghItYuQxuC/UxdIOcbj0M9\nsXWwj3ZX56AqVcLRtRPm3Yyaej9YCgD2JDCDWjWHTAs+06v9RsQ9EkQ6cngy\nNrKKY6puMsy7T6a9FO0OUR2s7UA3xwAaA8dnwSnTVY18XJ/+/PstX01sq8p0\nueoR/vgrosB/nLIgjPreBBGDRHqQ8Puj9TaNDlAOMRoDe4tC6eY5D3yg51j+\noVup032J0XsVYN47k/mGF2LiIJuFXd9NiHyITvTg7307pA0VfB3d93bT+I86\nJfPL\r\n=/pfT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrI/EbTC6qUJBJMjtEKeDR4zs0KD1BBMMNijjn7zx9nQIhALtaXfJL5fPAWXsT1zXtd9Hj2ZYqcrjn/P3oLjc3ZXFe"}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.0.0_1616333452831_0.6216225232926522"},"_hasShrinkwrap":false},"0.0.1":{"name":"use-change","version":"0.0.1","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^5.1.0","@types/jasmine":"^3.6.7","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"^4.18.0","eslint":"^7.22.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.22.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^6.0.0","jasmine-ts":"^0.3.0","react":"^17.0.1","react-test-renderer":"^17.0.1","ts-node":"^8.10.2","typescript":"^4.2.3"},"peerDependencies":{"react":"*"},"gitHead":"2f03425149bd9aeaa1e257f5d22ab97fbb315d42","_id":"use-change@0.0.1","_nodeVersion":"14.5.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-I8NBixz3RG5bRCr1DyFh5iItWdQRHyF8ePY++Jy+bc9e96a8opucioCj+tXd6U+t2l/MY0v9Pv31JzHSc/Pzhg==","shasum":"8db969414a4e1dda454f2dc39ba3e944b7ef451b","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.0.1.tgz","fileCount":27,"unpackedSize":36205,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgV0xOCRA9TVsSAnZWagAA7+MP/Rj7zRtnmYwal7UQe/Zi\n9D0nwpQEViLJ1m+gzd15eVgRSfJaDBFyFy5jsKQLePzalvM0G8ki807fb87+\nRyVl4EYlNfJEsRj2bniZukF3vT3V02BhYzTfZn/1BPTNkz7t5mych6XSsbba\n1i0buVzMj3/BUSHGUV9fpeMUccYfuB4tvOhff7tr5Evo0yBtA5EUFMvDQcAF\n40Zp+MWz5xm4B/0SM4X1tQluHR2MqdkEcwW0DMwOgE//jB+y7l/MGnG/IWJJ\nuB/4Em2OePEQ9DKxViPRJPIfGXl9UF9PYmOe8XzmcguCI9Gs8kaF1UPd6xj6\n/t8fm2sHHjicgqPfELOAd5lagSgJMSES58GLZ/VteVmYElkj4StxOOSyjRM/\nMG/KkrjyvYtcZiC1pO0Flhqkorlxdl3XJ6Nqjl+0DkANuh5bwI+HAqwptfYq\naUxqw+8zim9vAHq7p4UyLHZC6jICBxER2mI4IhwaXMMrSvskcmzKB7wdsLXH\nNepPnYQ99AYAITHUsI5UOoXXoabtAnWYhf9Rfe2eeyaPCgusqke/z022R0Z1\nmL77p7tRc1sAsrWmt5j1HtwVlzjm/XvIPQs11XpFVBxx76TghwTOK9pykoMn\nVWd0Sh+ou5VnAyht+kdz5dXJGLuw5i3uLhEOf5jJv0p8LaLzmAWmpAoBpwrG\nxyjb\r\n=y5HI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGpAsBE1yld2TaaC/wnInXCft89iqqS4yknc01I9rwahAiEAzF4vcrHx4+AMSYwtTGE5oOHXstN7EfX8AaAndTeCtog="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.0.1_1616333901657_0.698017198148851"},"_hasShrinkwrap":false},"0.0.2":{"name":"use-change","version":"0.0.2","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^5.1.0","@types/jasmine":"^3.6.7","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"^4.18.0","eslint":"^7.22.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.22.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^6.0.0","jasmine-ts":"^0.3.0","react":"^17.0.1","react-test-renderer":"^17.0.1","ts-node":"^8.10.2","typescript":"^4.2.3"},"peerDependencies":{"react":"*"},"gitHead":"c1bc87a7a5a24512974f25dc512f69f5ad8967d0","_id":"use-change@0.0.2","_nodeVersion":"14.5.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-l04LN6TR1eZ5qSg24jeo14+/cL3T3IFj6y6+pO48SgYK5WqOAcpxGpvQ3JTmqv93kSfKImafCdWdtlASXf5Vog==","shasum":"6d55a7c44c998a6fcbedcbd88fcbc9c451cea30c","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.0.2.tgz","fileCount":27,"unpackedSize":36205,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgV02pCRA9TVsSAnZWagAAfV4P/jb0rzJxJA1igZydXxa1\nX1AzuE/FNECKIiCqGSnGwZXkm2RUTHOZt5udH0DJma+k3qhBvUPd0D1p2hYX\nsuatD36M/ntUT0MFtEDklk4uasQpHjfrHImihJvRjowBxBWN6KPlUqJcYYnM\n18iYN4FWOTLxyv8lRDsHyFnp0a5nQsd7coCCa0AZkE/grBFhNlzXj081MoHu\nSkX2eqCBQsnWZY6EiJbm4sp3353O5PV9x/dKeP798CdQrkKPd9s/CKOYOyR6\nWWKlc8h9sZB5mIjzNKX3+WHOZrAxbCh9174IX9NepAho/JPXyTL9HluvqbvA\n8IplyaxDe5VrTRUZ6kedTHRu+Rbh4/kBrdBmmu82UHp7TCMmtFhoZSqEvQDw\nuEe+9mGYnqL6UUoqSpDOeHDTywOcw8mHsjvvsGwCAlSW06GDGTVU4TybtMav\nPsTtVdLMt1rKR2YQbZq+v4McaoXnbCjYNYat6iNBbuL8+DCvkdzRXpHHIxcR\nFfA7KtoDV/qS7nh3ZDYFWWAos6r0Za7xiR65j9mcvt4Tp35oCCMrRUdLLvBO\nFWND9USARLMVLCv6SwWEiBhSd2HOmCyiuvELvkosr05xODqRUwRzwb3rkw99\npAIo3txt5IdmKIwr4rP6DVgQZJCsVpM0XFS2GSu6aqswDo2Z7dgJIhG9OnNd\ncA9r\r\n=6PcM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXxIuszUvNo2ZBrufIzM+vY9EYwDa6ub9edWNI4M3W9wIgBhg4QTs7HjZTNqe+2DD4meqwaymi7T/xUbdjGRfxNYY="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.0.2_1616334249422_0.208018265100959"},"_hasShrinkwrap":false},"0.0.3":{"name":"use-change","version":"0.0.3","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^5.1.0","@types/jasmine":"^3.6.7","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"^4.18.0","eslint":"^7.22.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.22.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^6.0.0","jasmine-ts":"^0.3.0","react":"^17.0.1","react-test-renderer":"^17.0.1","ts-node":"^8.10.2","typescript":"^4.2.3"},"peerDependencies":{"react":"*"},"gitHead":"57a0deb04426349bec8f154775aad9a10ff6976d","_id":"use-change@0.0.3","_nodeVersion":"14.5.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KZn+jkZ3IAx6Kqd4SPwSRc3ZtSyh9KEjPfLVvCfvjYK85jVSjmCIwOYMck4x5yJ/+oLv9fIBphzyfoojSMOcCw==","shasum":"4da6522c8e301239f7722511429b6deb0f70f777","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.0.3.tgz","fileCount":28,"unpackedSize":83018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgV04ZCRA9TVsSAnZWagAA2dEP/1RvTxeAldYEsl5yrD5w\nRyc6rX9rwh/RiHD/Mtec8a+yGe91BZ1AAH2OC5ao2ZF5hBaHEv+sehCe4rac\neJvnWyI98AEERlHzkJ1wZHFs5/3YVJ/r7znX0hJsGYLayCv6cZRTYuUzX8L8\nle1EZbnnxf/seQAemqzOSrG9fVH2XzvmhDAovGhr7tWIHmkzQlzywHpQKwl+\nt4Ej03P6cb9/aojEicdGJ82I5KoutFk6t61WJskaCM0ObKcsNwXSTcr1tiWI\n5lugkjwrhI/Y4emtlJr4jnYYugZxYyiBT0olR6gcnhs4ACW94fOG0F6+zgW2\ntlwmOYnU4I4+PDg/7dnjZQUXA3FJwWW7QPRBfgj7ds2lTXgUKWonttMTaFxb\ni70hoz/gGj4XF1IHuJbk42NYx7GMn0qWY4U4woNJPAv/XDvpKVzjLTNXv7sr\narb4JYDe5BW40hevJR6dD26g42622K2u5Ucb1BPlIt+5bt++Xh2Txiam707C\nek+vELJ/n1x1qqwIfx3xpd6HIOkVYWw19pi9h5m5OhLPZX6Br7BY4i3uYP44\ntpIYsW7o62u8ADTZUiG73BAY4ACh4MkH1syRzrFrgYVcmKWiDmhWxiXagNiJ\nHA6bvkB26fkj6pGnyCRP5Kc6WSQbUMIE+OwIfxB51DPygAZ8PN66TnV7nXl+\nxwIP\r\n=dBOz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDYOJZrGzBvWaE6hIDXLxaI8b9G43nLMRlXU2flT/cBWAiEAzyw+mKCJPeuoxBCmYpyMs8/knIM8B265tzNafOYDOqY="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.0.3_1616334360904_0.7505589977407547"},"_hasShrinkwrap":false},"0.0.4":{"name":"use-change","version":"0.0.4","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^5.1.0","@types/jasmine":"^3.6.7","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"^4.18.0","eslint":"^7.22.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.22.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^6.0.0","jasmine-ts":"^0.3.0","react":"^17.0.1","react-test-renderer":"^17.0.1","ts-node":"^8.10.2","typescript":"^4.2.3"},"peerDependencies":{"react":"*"},"gitHead":"7408850bb27fc4a9c627ba6b58b92a12b83df8d0","_id":"use-change@0.0.4","_nodeVersion":"14.5.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6mw1FSQUHTcg1Z6gwpUPo10chrlTXG6qWaBYgIOuWZIyueL9UZKeYulFFCfuoRelAHBug+aNxXNWpa375N33fg==","shasum":"f4c88a053d178fea3a59b2b971a8b5e74123339f","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.0.4.tgz","fileCount":29,"unpackedSize":94432,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgV1ErCRA9TVsSAnZWagAAJ6AP/2kk0aWddPmgRBhb50V/\n96ZjD5Ja1ncEn0oVL7sOE+mGhVdl3XDZyYnpidG0T5VWtl4uWVT+PKzNCyMc\nudntzBUiBTtm2eGLiARotAIlGbULoKrM4hR49db7MYo7qfm1v1RDSwON07sP\n38fDNI64B+u3Ny7n7hbOCXYmOfi/8ON8N5DNO3g7/GPxQghzEPxn4jNQqXgL\nYVBdvEfF11kSkGcXsjrXWfP85wjmfz3ttwmH+o6IkYVJrUsjyAaZUHlq3nZN\nfjFCyUmzOCxLRoemcE3VlnImBU9P20FTRu8/ungluS4ol1QpWWTXyHuRZ84S\nTU8nsASyzwigxj6k8u3c+g3PrnWaayKz5ebYeG9NaQJ7ukcGhYABbPLAo9qP\nTRXYbA+Ot8EGUKoaNnPswa+NHxQW11QxyBjC2wboR2UpuwzYRtHxY9Vxta/f\n3cQNWJsB4B0ky2fOVtKh1D7KmOX9YhZbhkofhh+l3emoOLQXf1vRnlKybmjh\n3eWyMLX2JfY8IV3q7hG4eGgwpb9xdFTZdVKcNIE8hMcURtqSSqC5UJq+U2CU\nk/YC/3FGWOAT81I0v55PaQ7i2o8s3RWhVwonj0Ay9S+MHMaD2AVdIveA9UBR\nH3UaoeTcaX6+wzSsq1DL+Wr+HXW31cWvMPxTYxVP4CBxMF5peipGadMZ1ieD\nTpNa\r\n=UEey\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDNmcNVCzDUsZtk4IvTonXlw3BAkmir19OrYFazZ4zxhAiEAjxguv89oC6yKgfWkT1nx9NxEj32Okt/DfdgYx4NWquE="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.0.4_1616335146720_0.6258220752087029"},"_hasShrinkwrap":false},"0.0.5":{"name":"use-change","version":"0.0.5","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^5.1.0","@types/jasmine":"^3.6.7","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"^4.18.0","eslint":"^7.22.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.22.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^6.0.0","jasmine-ts":"^0.3.0","react":"^17.0.1","react-test-renderer":"^17.0.1","ts-node":"^8.10.2","typescript":"^4.2.3"},"peerDependencies":{"react":"*"},"gitHead":"f5b3918ec1accb0239c7de27fc4dfda4512b61d9","_id":"use-change@0.0.5","_nodeVersion":"14.5.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-EKLVVGUOXBn2/OVQiysur8dwjv5PcY4JbWWCQ+0aitLsy0OlktFNpowj+Vu9NaP+FSPz5t4wLskrAlCI/KZD4A==","shasum":"f4e09bc7f1a3ef9bc52e73d944061b11fee1ba06","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.0.5.tgz","fileCount":29,"unpackedSize":94670,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgV3K3CRA9TVsSAnZWagAACAgQAI1JfjtF6Fa5utqGomJ3\n+5/GzNkY4eqbosvuTFEuN4wmv+5OPeSU1WiAXcYzpbkaPsNSVX7JCF1Z+Uy4\nh9Zqy2z6N6mokvGemrg776fffOKFGKt64KwRWsHpc6qkZzxbzOhXIhK+9FwX\nkmq72RF2GbRmqWaFlU6Dr2GPBp7LsncSvhg6T0+/esSvwovmPjsvORNLSiU8\n/LCg6O/dSfJh0Mxh/KyLHGUz3FpTAvOAS6WFO+367C5rXiwyzoKhg23yVGmY\nJhYKT5fYYQHq70mHj49b/Lzgpj0i1NX0E2nlxq/kSJnKYSq79cE17e4wCQv5\nsdXaQllPyQyFrtuiujB2AVUxlpWfoWTRL2s+iy6G4vaRv4uB3N60WpUE7JIO\nLHYY5Rij3b4WwYsgLDHGT47wv283c+8UXMfB71c/O75adaIWF3YFeL5PVv1H\nG9bW+hsHChJuIFzhf+nqChYpuBNN+ORZzaj3Vw5GUjVB3I0o+qIiKbaR4iyO\nuzXYMsLMj1V/ElVmXa3A3eLrw8nNVxCw5HRS9OnEj5H+a5qlcXfjYs4F4SZh\npMD5p4amT/IB7h4F7JlH10uSkI8on3EU0F4XLz1NOQ5YdC5yXPL2/7KDbPLF\ny2jY2Nq8cw755cKGynuLVhdNWnrj3epuiiqK6+RabmoTicfU52OufvkTHmQI\n46hS\r\n=Xm6s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGgeO3eE9Bzs8nRRHBFP4UjzHKjdGCg4xULlxKXwcdJRAiBrTpUKLZxOibn/hDpCODig5h7LR4kb5P2MIcWI78C49Q=="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.0.5_1616343734993_0.2207287862015368"},"_hasShrinkwrap":false},"0.0.6":{"name":"use-change","version":"0.0.6","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^5.1.0","@types/jasmine":"^3.6.7","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"^4.18.0","eslint":"^7.22.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.22.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^6.0.0","jasmine-ts":"^0.3.0","react":"^17.0.1","react-test-renderer":"^17.0.1","ts-node":"^8.10.2","typescript":"^4.2.3"},"peerDependencies":{"react":"*"},"gitHead":"12a7e2d53f751db88e6b5159b1b433984faf94f2","_id":"use-change@0.0.6","_nodeVersion":"14.5.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7uvWIjxHiJtwBgpdTyeoVGp0IJQd7dIOhYOHCNPlv4xwpm414CUti3i72/DCqjXmFCXo0syCHyuMeaWIELJsiA==","shasum":"307dc687e1912c308878e4d335782400e73fdd83","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.0.6.tgz","fileCount":30,"unpackedSize":97158,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWzOICRA9TVsSAnZWagAAwNEP/RqQhvP6dzh17r0ro9Xu\nhCMUl4vLZmTXmZJ/5tnnZLNTDwOur6kmVBYALc34oi1RSpESZZPH1XMTfE1n\nM+DOrx1KkNuzXfqdKNjaxMPqpDQjNTefmfpH6YADbpRq66EEYUqis7J1Z6Wu\nhyZNp8WTq6eNwkGojCcelOt7d/W5EsGKYfda/qGAoZfq+vNmnKGBKe0zxB8t\nryMZuWNFcB0dbZiZqAoFDjcaQvokY0IgMAw2DhaOwBQxDihBi1Hk+GfCNTSY\nJ22JqHexIQh81YJUqjGYPXrTo8lZFFG8rxWYGVhPSe7nnVAwV8XZMG7LT64C\nQ3lNLtS6OFwwMABdgc66SRoh08UtqA+viDm/x/mpOYYwcE1s6UeryAxU4kTf\n/6BROFc0cwFU33vgMD4ebBahmu4vNtS5O7NemvhCM3l92eBFvjpChgWIwa1S\nEAjn5jxkA0rpv1+zWSIl5P0bc4i8uo8wuieY+h9b1pe2jg5DFKjYC66nG99t\nEbV1JoOOqJSojOzQEujDOdgJAi/lcoV65Sgi+fB0aRxjpqhh8C5emvK1L0ma\noyUSF1y/kOP0KQjykXnq2EJlT6J4XkAOe13nBHPfH5fY50Yfi/s4Kv9NqIzY\nBpMNmWu18G3mB69jmpg37TjjURmgNj3522D5pp0Mmr4xFkAsiu4QCdulbS4J\noJke\r\n=2SXE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2OW53WqOc82pWfI+bFw51GEp2xFlzcHIFqQaIWDrLzgIgJukvvQ4YJdNdXQmYLXf4XW83NlE6Ds6CIiWjscvyI0Q="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.0.6_1616589704231_0.3213435118741068"},"_hasShrinkwrap":false},"0.0.7":{"name":"use-change","version":"0.0.7","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^5.1.0","@types/jasmine":"^3.6.7","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"^4.18.0","eslint":"^7.22.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.22.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^6.0.0","jasmine-ts":"^0.3.0","react":"^17.0.1","react-test-renderer":"^17.0.1","ts-node":"^8.10.2","typescript":"^4.2.3"},"peerDependencies":{"react":"*"},"gitHead":"4ae33cc04284930dd520289f79c2539b2aca0ab4","_id":"use-change@0.0.7","_nodeVersion":"14.5.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qA9b5CP8Xk485k4UH34LjEvWLG3zAbA9yDvfoKLt5B7ViTfv7PKGL2RH687qz6FxxPJ3HpDdqfLHDcwXJO2L4g==","shasum":"8443a8a1749ea0465e5c9c95bd4646be6207c83e","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.0.7.tgz","fileCount":31,"unpackedSize":160435,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZJVFCRA9TVsSAnZWagAAkbsP/214jc75HQdNR97bt/WP\nVzM6kU6LP8P2Ej7OEH1k1M5sde+m6oyu7ea6sZJCBXboMQc9C1afpMeIXtTX\n5944DSFK03V3QLAqjjgB7NfAAZ69b1E4pGnW1Dhdkihu0lHbmvPMxEeGFFMT\nr9KbELSB8+PQdisUBH8fFlkGtMgKDmBnbjEs/Ma7NzsXh5Jo7wPLWsvEWYaz\nUVCOHblY0kmY8lIO2ZQ1plSIME0ZlHQspYiNMh/rcaO22vaGICCxBniAqLlJ\neB6WkIMPxSxKnecGOLyaNXxZtOyDbs+XusdPos0CLRgjSP2yRVktCFmDWZyh\nBBQOT57n/dj73yByuKdcjGsD/7dEzQyeLhTUhB0oN8gQkQTsPOsatpg+I5Qj\n7p2MTNnGEO21aw41QXGOjP2Lo50oaoEvrGeqyuXbWz0py41p67ZO1Nnn61sn\nGFbG2xNRfjtEloJg/HlEtKbeKNlSL3UasFtjugJV7lp2+TTim2wuNRzq9tig\n6Joz1Ip96Dw1f3T86VpHKqBdl2Nx3pGLs7FzDpOiWXtKw6oRa+7tN5eTh/B3\naUUWa6BaknUqCz9gii/hmtf4Q6FNGNVcAOlyyO9qo6XZOUjcvODHqabovLHz\n8J08EZBkc48dpEwpye0qxgCXMASpHsxUHX/6bHWQZm5B6f3ahqlZ/wsUpYSg\nd4Dh\r\n=M2nI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuLDBbGAbzzbn6F1CbF5vdbhkqCIQUPOzqIclX6WUTFwIgNaA6NVZvJ/5MJ7OJ0Ve3ltAqq0JU6aZwscH4sSAchCQ="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.0.7_1617204548786_0.9167851803893377"},"_hasShrinkwrap":false},"0.0.8":{"name":"use-change","version":"0.0.8","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^5.1.0","@types/jasmine":"^3.6.7","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"^4.18.0","eslint":"^7.22.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.22.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^6.0.0","jasmine-ts":"^0.3.0","react":"^17.0.1","react-test-renderer":"^17.0.1","ts-node":"^8.10.2","typescript":"^4.2.3"},"peerDependencies":{"react":"*"},"gitHead":"6ad7f7c723226a98757955701f66c91588edf17c","_id":"use-change@0.0.8","_nodeVersion":"14.5.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ZfCi+VHRKG0uCvVNIgJmbY7Lbixn9Jss04WPz8ysvRm5EirYe8bA6jNU3yQ27g1/gYR+eBMot3CUeRF7EgOMgQ==","shasum":"cfd7ecf39561b77ea9d349438b1fb873978ce69b","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.0.8.tgz","fileCount":31,"unpackedSize":160552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggvwICRA9TVsSAnZWagAAtUkP/jDgOAMS/qIVG8iW5G1i\nxRil1Ae0Fxf7SXO047T+Q2+LdR4zoGFpIsO74Vi/KRYbsopRu57XTWFt0WnL\n7nSFqZGCLFRMXwg3HFgy9XdAHNVQUbgP4d8SXmVyjjbhOcOY5YGN2z/WMEaV\nhR9EWnPsK24ETTddRhsmOh8LTep1HbQsUuyCswGXzQFQIfrII/w2eXEPTUNi\nB/5C1+CLf7VtsSSO7Jiwyvz3FkVN7bWAtQq4+W7W7OIdFLrSB0yf4/ZuLCjt\nJyY8cY0N+BrbRd2gMs3mhCHqeVt5HABIrz4GXkSuOPfaRmk1jQYUA1ohdr9S\n6eF7Ch73IkG7w2yLS5/9OH/fZCXibeUay1LebIMrwu4UcnWI2PyAHl5wStCT\nqiKW4LOErfe8LABUT++YuklqRLwEYc2tRtnUbcU3Enhg6O8k7ZWNzF6WzMo3\nRsz679GTunI83U2sHXZGBL5GAPJDgAW1hO4GuNHApFBeMVL+89Ne5GeAnlhi\n3XeaWnygqotljvLFvDqhgjehyhyhm92LiRV0I4QkQmzL3QUP4M5iN8K9mvzr\nvQeom4G1CBhrIopi74SNe/lyqBcMFimWc+uQOqyRO3q5ksKmwP83ptGYtV+c\nUFIwRA4UG4CKnUsHSC37N/axaa19Q+pTSQuCYDY0yu1BI37lBUC/9hewf0lA\nMFp5\r\n=c/Rz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+7fHSnq8hsHnqILSrWM+tHyovJ/jmU6SDjOfdJvwBIQIhAModMdo773Vo0g6rzss5CKErVkOLDFt1kgg191GH3GV2"}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.0.8_1619196935514_0.883815265493336"},"_hasShrinkwrap":false},"0.0.9":{"name":"use-change","version":"0.0.9","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u -x react-hook-form && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^5.1.2","@types/jasmine":"^3.6.10","@types/react":"^17.0.4","@typescript-eslint/eslint-plugin":"^4.22.0","eslint":"^7.25.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.23.2","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.3.3","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^9.1.1","typescript":"^4.2.4"},"peerDependencies":{"react":"*"},"gitHead":"733f9c99ae89649f0a55b7a029166fbb95f041db","_id":"use-change@0.0.9","_nodeVersion":"14.5.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-udfmW6NgyXmX72vdUnz+We2WTfm/h8909syQCvbSPQ5kDYykvNW7ZGDBhmMcISk7Rgo+g5gT72YisSZjZONepQ==","shasum":"06dbd226ffe871aa020ab66f3c814593bb633fc3","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.0.9.tgz","fileCount":31,"unpackedSize":161078,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgh7wQCRA9TVsSAnZWagAAWkoP/AzoRBoYPz43bIyNGK77\nQFd23xsTCGKEIZMQnZ0YFMc50xrzGhaSj6+a+XDIxg3KpRHxj7eTiVepdBl/\nujS3+mfpX4F1G4JrHHHtK3N9ta9MQ9WGD/N/xwd+Wt4q6KHCV0+5HjM7HKGs\nnvzUKQB4IpPuoOxSKrFGrSNK4+CYKS+w4bWOkhpSWNlTErQ2yCxpta/agIC0\nFIXHcr20KMU0HdKYYHaIYGD2hOex0atwDiZ7S/CfeXhkI7Ww/BbUYHaJZPK+\ncNb9/CizxMwopjjguaE3MBD/eONNYKWGwbH6pOpL1t8sCYKoR2aR3cMmdBw0\ncjcgOLOETDHO5zuWEE28xIIwZ8fEu2HgT44MyrqQz/jdpUd93fdrahX4lov9\nJA+PDJuxJqz1ru9WUapqk90/9ud5xtsHqhv3bjFvQP5wYMqQUiCR60C2dt4O\nvjn4snXvXeqmKCrhMH5BeKVP1M833AVSf6nj/lqU4sIyQgV0mN9D2edq9bv9\nGnAVzTDutdYAE3l/tEmTOd2Zun53RhHVRZ9WBTC/r6xX6RNMfV7GRpQMZRim\n+IsepP/SvBHOUC2eUNP5m4bsZX1JlLQvrj+f0HJFIpUWYYXPNULSFVw8a1oI\nJ1B7TXmVdFdGgppiU2L1r85iMGwzeP3whHirdx3C6n3/t33vLU4pdMvoFyet\nOfEk\r\n=ZffE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBTyS4mekUJwlOeI+n15qWg1EatnPDTZ8AtKX7+nByQAAiBCbEBgq9xvoHJrGy8b8OXW672CphfSCntsH73SyoxDKA=="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.0.9_1619508239933_0.35897469253306724"},"_hasShrinkwrap":false},"0.1.0":{"name":"use-change","version":"0.1.0","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","minor":"npm version minor && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^6.0.0","@types/jasmine":"^3.7.4","@types/react":"^17.0.6","@typescript-eslint/eslint-plugin":"^4.24.0","eslint":"^7.27.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.23.3","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.23.2","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.3.3","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^9.1.1","typescript":"^4.2.4"},"peerDependencies":{"react":"*"},"gitHead":"3d23958b073af4b545bf01d88540f0531196ef45","_id":"use-change@0.1.0","_nodeVersion":"14.5.0","_npmVersion":"7.13.0","dist":{"integrity":"sha512-OK/oJwia/lEaBJ00J+92HBo3pVgVM8ZKIJz7PWfANbjWxqwoSghUX3GGfLJ03PgriZEPj6NYF1nF+WdNNaiEUw==","shasum":"f66a9a30531e26e2ee65aaea5604d35f80c1c925","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.1.0.tgz","fileCount":31,"unpackedSize":161166,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqkPpCRA9TVsSAnZWagAAJLwP/0WcFJ0tGWFUIYjlqz3k\nNQ5eiLUugAwcnQlWwdaXMKU2vr55j/VvfEK7XgTYwYUEmX2F/VZHrOWdrWuX\n2yQaozIkLgC2csktkqrzHgk3uE6FEgpeWXMUtD435Lr19C5ctJG1MY3WRu6W\nL/XUdeUiOXRQd/F4ZGHXKLLn4tWjB1XbarOchQuviDogT7jYSvDKtBloZNNi\nd6Amu1qhq6QBiaJGwYKFVYeTEXC75ayToykH/yrUN0qf2yZyafEmxNQMiyEW\nAx6cAMSU7TNLUqe3lWR9AYwTPDu8zELx+LyAK2uMU8jlhhv6GHRxhtbNSF7h\nAAzyJpksN8N8a8hG+69R6ImucAalNVJZpWEXfac2f9uhQQAGerg7hW7+PHCw\nrn0mQZfRBFpUeE4fcduj+eaUIuH3/tH72PTJmVxz15SbXqm5UIDcnmlIh7fx\n8iK0t2u81OvTx5MG5xbXGb5e1BnuTnGQrJIpNE6+vNnzQw8ADTPnFqvYmItq\nuN/b832ueSbsTgg/2itjOYl63sPzbAEDHTyrfhyNZtl2PYWwr91J8sSKMr9v\nmj3rnJFeSFKEvztkoHDfasHF2p6LnLSVMnSgizBLOsOef944COon/Migx3YH\nR1oFveSC4B+8w/rpysudr93xuFjaIsGAwsb9B3xtqXwhJ5gShI+VE2vZV1ww\nSn5Y\r\n=6ok1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlBF8TuNz49hoREAKuEdtk3U8tOupmR1EpDXJHdtOGlAIhAO+0cUFyCcXCJ4CXxH0LYTLO++ou3xKZowH0NcDjWeTo"}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.1.0_1621771241284_0.6333282646214555"},"_hasShrinkwrap":false},"0.1.1":{"name":"use-change","version":"0.1.1","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","minor":"npm version minor && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.0","@types/jasmine":"^3.7.4","@types/react":"^17.0.6","@typescript-eslint/eslint-plugin":"^4.25.0","eslint":"^7.27.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.23.3","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.23.2","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.3.3","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.0.0","typescript":"^4.2.4"},"peerDependencies":{"react":"*"},"gitHead":"f29adf9222c72aa31708cb3077aa4030b1735817","_id":"use-change@0.1.1","_nodeVersion":"14.5.0","_npmVersion":"7.13.0","dist":{"integrity":"sha512-vGY1Ysrt/dNukY0H3gR1fWz4OA2eW+nMy9TFnC1HqOU0FsZ0Ihkle6bQwDDDH98s1Qf54MK8M0MlK+kYYWSQxg==","shasum":"51b36ed762c26a6481e3a97e6a040423f607ebdf","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.1.1.tgz","fileCount":31,"unpackedSize":164386,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrlxXCRA9TVsSAnZWagAAuGQP+gNEoyTuHU2bM8/+GqQQ\nKncV53fjE1lnQrrjQTSaGaPlQHbJREP9IeEgjCwNfyIhGd0kiyqdtza4/8ap\n3fpf/FQOQd+Wy9gsuNQk7NU1DkPjOfaVAVdESIoU+8iJV/Hdho658WuROxXF\n4jGO2Tt3GKwSxOS3EBewtsl4Q1MqHa3fSkuaotTvE9lbg2OhugH+PTnC99zt\nd1lT9h4jHDKIBKLS4aDeI0BmjuMWCiKFPBXKy/BgpGborR4FfmEP5Z4sgfxQ\n1tZfQaYXuBfydTnXOKxMaionwgjgo22XOcjJMOOT/mT/i0ZIKj1PrebhEFAN\ncyH02ckc0l+TmeHtTgEgFQj+NQUjFLT7l3oanXlp7cq9ZLzD6lCBsGWDEsYZ\n1Nxp1U+d2V9VEPCK/FqVZNxRx31znr1MXIP2vYK6H5TjeHDrVi721PhQewBh\ntgIEHVY2r5kzJpsWGEQG3VYuEVssokq/j4DoYaOq6L5dLDufwWD9b7a9Fzip\ndCL3NSJfCm7Z1aBzujzvG3kbyQyqLP2yZXm21GIEmN5isj9GeudfYjl33/BE\nEVnFOaa5Cm0/gAQMcywZTX1CoCifiEiUyXxYVyC4PjjQE0p0fVKS5TJugC2k\nJX3gNXzcVTMCr0vengFlBgJBsBZ+3ebKbUD2qCpha1+FJV/8EqGJINJSTF7i\ntHTn\r\n=44gq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4BWNQ9XJJ7lolBCZKU7TSW69PNMsOcQfF8vWujdSqGAIgJgbkWH16UOq36HbJZ1G951Lp1H5dplRBL+wnD3ArWa4="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.1.1_1622039638471_0.6367436352654137"},"_hasShrinkwrap":false},"0.1.3":{"name":"use-change","version":"0.1.3","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","minor":"npm version minor && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.0","@types/jasmine":"^3.7.4","@types/react":"^17.0.8","@typescript-eslint/eslint-plugin":"^4.25.0","eslint":"^7.27.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.23.3","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.23.2","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.3.3","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.0.0","typescript":"^4.2.4"},"peerDependencies":{"react":"*"},"gitHead":"a1e249f38b29926969abdf935ca5c538128a160b","_id":"use-change@0.1.3","_nodeVersion":"14.5.0","_npmVersion":"7.13.0","dist":{"integrity":"sha512-JWYUz0shln2jLdLnbnHgPkSXG13PgSglo5Cv8KrpZOHHOWVWGlqN94Sij+0fD30tjLKJ8yUPg5EONGQiTlyGHw==","shasum":"5a11c23c4544985155220a711ebce31dd809297f","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.1.3.tgz","fileCount":31,"unpackedSize":163827,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgy3U5CRA9TVsSAnZWagAA6w0P/iChXvxHBTWHeqMJ/2pv\nR1GZFJJQR726K+/o5SOjwNMljEqZRCDbOFYq42LUXNDSI/KRR4IOwdVjq8Xf\n2bfJ/18/n96a9lO7iwdN6q2kLG05Me+GwqyGVynSzXJVyvRH9yAk3trRHe6o\njZWjSI8aSKGtWYRyncFIb8Bu0nKYZyNWLyCfPWx+8qiKjkHvzS64qUzXOLJv\nHJCZsJZOh7+4B25R0Yz+Kv1elcURtl9x2+5puwvrEuFLhrgbHKBU2G9ERfh/\nXRWQBexZ8tU0tK+VTLQFVRvC+t+ldqRinBJ1lq2obeYvm7A/KNZ2aFkLUS6D\n02OyZULliin9LIq5zginlfrLFw1QkjCtL7MIs7GlgkH/YMbr0JQpKeyAR6FC\nyLwpwK/gRnymUao8FOSg1T+IrPAdFV0nhdgsZ+OmCLJk5YEylK2WO6/y16Y4\nq/APqvosE5X73MGA2KeNIwIUW3mmSNhkDPVI4iZC4NaO1XLl2qvDhiEUpYV/\nMOsmirYeENd8/tk1mCNjSzfOYBatTOeV3nlhjm86KSat79F/EW81CRn0S0Y6\nHo4VNL4a7RM09rYzbrz1xeRlVL4RoDaqUwE7b5PugjFLysdUPy5AvJtE5W8W\natLbX4AIoRJKAX96dk+e79v4hox/pjd13EwZtvMxVVsfWRmrR3/pIBub06eX\n/xkk\r\n=UXtg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF/mC4CaI3eU4k42cF5TijBGULKx1DJX/gH3Ajs35YZxAiEAy4/M2vOHaSI5oZRsXwVRYRSCb5Hv8WeA4fBZKQzDHaU="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.1.3_1623946552815_0.04378258032003601"},"_hasShrinkwrap":false},"0.2.0":{"name":"use-change","version":"0.2.0","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","minor":"npm version minor && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.0","@types/jasmine":"^3.7.4","@types/react":"^17.0.8","@typescript-eslint/eslint-plugin":"^4.25.0","eslint":"^7.27.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.23.3","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.23.2","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.3.3","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.0.0","typescript":"^4.2.4"},"peerDependencies":{"react":"*"},"gitHead":"c0f8611e6fa6cec04684c691ce50cd83bb2155d5","_id":"use-change@0.2.0","_nodeVersion":"14.5.0","_npmVersion":"7.13.0","dist":{"integrity":"sha512-5atAwcJzkyouHbttmC00WlFjBBtx40fXP8QkcrQSH4z1Z5KbrKPreQUpPnXlPBZWN8zPGpF3eUoi2BreJDPlrQ==","shasum":"8cecb0010c7ae62bf057f1a443db5f1c2b2304d8","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.2.0.tgz","fileCount":31,"unpackedSize":164402,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgy6xsCRA9TVsSAnZWagAAx3AP/jzJFvzPq4rsCVUaPY4R\nA0QGKuT3D48fNMHNiJXDldXMNcm60QGktBK2KUHXiLb4Ekzd5guSC8y2H5e5\n7GzshiuUjZgCEaDai2geQlnzVWRiuL97CoXkHS2tkhTIlYKUNfgMeCQXL3Fq\nFRYVClKrywtESTaVir9AkhQS9ggCkoTL0xMp1ptETaRV2sJ9rKmIRaNnt+Dn\nW1L7wm41EJvExA/21bhY71CdR+YMO/3bmaj1qRM7QJQ/w9qMStoEyCnIlDGY\ntbF2gHsc7/K2J9aEdpTBdI9Gx751/k6lWECdYGem3PhPYHcUcjUf7x99u9sL\ngyQfgINen7Q1ycurnQ6+/9qR6FKp4Dn1/2mpHBeDXeMiO8VccqGr3Pfd6Fql\nd8Ut0zMkdHP03sBHk0aq1mYEFTCXW8FHdNmZptyu8gYNK+x7wc2PijyF3EBg\nDdEWj7n8enyTiLGU9LA1r6A0IIL+mP9tPvIrhZ5dcRGLjWe5a+pAMp/zYE5C\nrDAc/6/00Aj4gSXWbj3pttY/fCGFw5/eQN3tv7KtFQ2Gctfe0QcBXbYVI9yh\ns+Tj8BiEPMEzH2p6XULT/GUw+d1OiBn2NeKHDcC9dO9LcfwMFJnOBEdIk8XA\nbOsCbSkHw846BmhShzCN6yjQvR0JBbf/wQwF4qmNRCCeR8DwUPftMN7fgADI\n1f33\r\n=NWae\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBMxUBW+Wf75qzI2pjc+usWQeEdccdCGrZtQEqSex8u5AiA0DsfKdAv1/KFX6sY7MqjWVE6MqW7EUeOfE+dsxlyrCw=="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.2.0_1623960683795_0.5878581451774121"},"_hasShrinkwrap":false},"0.2.1":{"name":"use-change","version":"0.2.1","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","minor":"npm version minor && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.0","@types/jasmine":"^3.7.4","@types/react":"^17.0.8","@typescript-eslint/eslint-plugin":"^4.25.0","eslint":"^7.27.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.23.3","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.23.2","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.3.3","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.0.0","typescript":"^4.2.4"},"peerDependencies":{"react":"*"},"gitHead":"5ce1c48d83d8c59b8a21e87f99c499bb1bb9cb2a","_id":"use-change@0.2.1","_nodeVersion":"14.5.0","_npmVersion":"7.13.0","dist":{"integrity":"sha512-vgQSO6MmHcXPVucIXIMugUplVNT8GSVEqTwEzKS2q7cpPksYdg/A0S7mxrpHXqyL/dxrhV1OLePQmh0GCsu+5Q==","shasum":"5f286ed68e063ffb594b86515f24b720175604cd","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.2.1.tgz","fileCount":31,"unpackedSize":164402,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgy6zzCRA9TVsSAnZWagAAafoP/ibneDby0t9GaQOVffkJ\nC+KELSGRqDcH/ic6LfyMYT/qhm8CmliP4ac0G5kSvJk9ArOQw+d1nEGUC0ZR\n3bsKEQFLPSrlgKyOdUGzcQtYZYuGdzp9ghUMP/Rci72A40fiPA+G5cREGiPZ\nlIoSKdVEDcUN3WiuoLfP9OGUHcGa0/x9ftwPTZzoDIQ8xUnvyQkJOrWiwx9g\nwFXc59i1ccwFIN6nCttt7UKkOtYX2M+VNKN/VmH2iNbMLKdtfH96nZDSxiYD\nz06BwqEVHrz/emeTB1CjrbYmym0t9POVZ81jTa1AD0FHC9MXfAISpqwlJzCI\nEVCNNcSyiUxcy9dsbROdVGfOQWYRIEuK0aIREVWgawB8CX290uZsPlkf+aLP\nyloG8dKGwUdvZ0EM4H2s3YolSTGKVIt3pQB9a0QeX5hlDDZyl66iZdg7HYNj\numDca0ciAidFmbssFGz5I7YHB5x6GEYBg2GAlszu5VAyYZ/s6VMPSy+zJise\nklp2rJRYrWOUIhT9/7/4CyuKWG4aPOT1yjDd2ZCu5ZRt5FtcKny/JIGbvV8m\n5yCf3thkiCw0TN8uosK6e+raVtYWgk/t4GW2xhGjHhYvSUIz2ddNX6jMvj58\nv9CV3UIfKhAzll5rREZdLJS2bV18+bHMNpda9GAFzKuIZzQotZH/ldz0R7oL\ntDdf\r\n=Yxf3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrA+F2WGsaISMsmB13Kv+BOG9ldxSpaFrrtlsv8fOPYQIgDsTpNwIjaz4dGF3aC5X6Tt79QnLAQsFJSs9sNmOYyRU="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.2.1_1623960818791_0.5296052741915431"},"_hasShrinkwrap":false},"0.2.2":{"name":"use-change","version":"0.2.2","description":"The useChange hook","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","minor":"npm version minor && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.0","@types/jasmine":"^3.7.4","@types/react":"^17.0.8","@typescript-eslint/eslint-plugin":"^4.25.0","eslint":"^7.27.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.23.3","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.23.2","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.7.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.3.3","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.0.0","typescript":"^4.2.4"},"peerDependencies":{"react":"*"},"gitHead":"69056618b246dcb19b7686fa69be971febafd3e6","_id":"use-change@0.2.2","_nodeVersion":"14.5.0","_npmVersion":"7.13.0","dist":{"integrity":"sha512-eVcM21yTuF0IxKkvLmw0xUSaAbCyc9Bp0mHC9AxfOwPU9oVPBy4O1fmRfI2/eRGCs8BWAZA77C+l7u9d4HeyNQ==","shasum":"1960a31f3a3beeaf14063d3dd2aec9677f51bbf2","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.2.2.tgz","fileCount":33,"unpackedSize":165578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgy63FCRA9TVsSAnZWagAAXREP/3AYljmu8RDFcI+zOUQB\nc/5QksLuSm8C/Cz0FDxzzVhb4Yp20enXhbsWo8qCvhmnL3la8x9tY5BFl3JO\nvx6ni3p14gE3jrRBk8/yV954lWYv5a6703ibpFQjoEdxpfSpQcxk2Qiq0NeC\nM+uWwtNJf+4GQo7pDavJLV8wQTnIWgc5IDxXXMm+qZc7E/kGCF5Pt/LYVebh\nsvcB7oTnKNS+RZs5RAzeJdVpB61Ub8wDKrH28sGh/+tDNXX7ls5Tx+pYbPDG\ntY/5ufkBxPG5SpawptoNYkTYmqbStmWSSkDRdycKn3qhRikzt0hvGMtZnIRh\nc8fc0gqJGihAhGzs8GASmvdPPeH5n4YtWlHUy1CGGE0UwK+qVsc/67dU44wS\n8LghfqF7t5qzxQhqZkyI4jQsrj93N+2TW+SVpFqci/TyJzOCtOYZqx/xyaB5\niuzAYyFTTXZMeP2tcP2f3J7rJgHKUkJGvBFlwJ+2aS901uSS1dLpUwtgVeN0\nr1c9bmfadJG8T4QzVqf0qyxHuz8UE2qW95xEdm4u9/VQAVWT1LSKnB+Q/+42\n46vpWVGJHbbc/CMxhsZTlf1eJj6ixwNh1ErHRjWJX4WMlMJW6z89PV1IUnNC\n5TCimz6V7xBMMhMB+049Q5rglJW3MNStgWYVVauycezLSQK5d0WQPHoA3IuZ\nUngM\r\n=keW1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIByisvGtHed7jDVA9qSYm77o6kKA6CIT6c1Ci5SpCdm0AiAHajTE+Kfwx8jax5u7fT4MXu+Qa70iVDX0HGOfRAyFfw=="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.2.2_1623961028639_0.14962638450201493"},"_hasShrinkwrap":false},"0.2.3":{"name":"use-change","version":"0.2.3","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","minor":"npm version minor && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.1","@types/jasmine":"^3.7.7","@types/react":"^17.0.13","@typescript-eslint/eslint-plugin":"^4.28.1","eslint":"^7.30.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.23.4","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.8.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.0.0","typescript":"^4.3.5"},"peerDependencies":{"react":"*"},"gitHead":"6dee3eea2a358c5a390c120ce41b3633a13bdc4a","_id":"use-change@0.2.3","_nodeVersion":"14.5.0","_npmVersion":"7.13.0","dist":{"integrity":"sha512-/jfetv0gtPrBRKaWT/yznE1VjMAqJTWuMA8mB5o7aFmhK6/6liTNXQ29s2/vHt9GqGgdFAYaiqowJKXIF3Ka1w==","shasum":"575d4bd8061805b210af105a528332311fff151e","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.2.3.tgz","fileCount":33,"unpackedSize":165715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg4EJpCRA9TVsSAnZWagAANLcQAKKLitUn6vX+TXyuYlLK\nSo5X/8+dFZr0Xc7yQQO4m4yBKIfN31d7/fEM2Gn+9Q64kWfoVwW/LA1GSCbw\nOPEij9BYuVaMqjuoN8o1lGlOXvmcJVHol+mCQGl9jbkvLEGsZYWYZ8k5z2Ws\njBO9EAZsbxkKCoDBVCYXbX/GF67Ka6g9QV7oepQouKxEQNOpTxynGNnwxamK\n0HYGv3gCyMoJ1oSbvytLut2fqiZJ7vXqwbFZ1Rn3Oywrdfu43aDFC03u+aGp\nWjibno3+8NW+JyP32nH8m1f0MgsW8/WQZSnnCZUmm3L+oPkEfF1yY+yPoZtN\nC/QtIPDItWvGjQr0v9LavO5QzSzM/4QnznLfQ9QxrNQf2k5fQnPSumI4K7sv\nrUork2SFnEwcdRDkswXcKTLtFwpVAbOO/AFJfOqcX1jpQz+nXDFyA4giF1Gn\nymZOj1EPT+zYArvDiWKFMaCJstmX9ZC6K0hnoa+AYKwAAeWmTs5ZQx7N+Z4j\nuUaE2O4SB4ho7aN4wHfHwun3hOYk2M+K3Mx0KdjiG018JKHxx7F06rAVsm0Z\nLL2yJsr3k215sgKDRxFnJvUdsYWbluqe3DAerfrc7Kmu2gEkjBLwo1O3U+MG\nSf4JwyQHrhy4KyKfAVY0Av9mt655pH7NvuFZowoAjlkLjJwHvf4PxVn9Fw13\nJCj5\r\n=ze6k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxu/q+gqEzFxkyu9slcmjpzxjyjwahVGVSHpgWbd3mVQIgLrHtsG3R5j8d5y5l7mpwHH1EvtjqO+Kv+Bt7Qt4obhw="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.2.3_1625309800882_0.5056418162197935"},"_hasShrinkwrap":false},"0.2.4":{"name":"use-change","version":"0.2.4","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","prepublish":"npm t && npm run build","postpublish":"node post-publish-test/post-publish.js","patch":"npm version patch && npm publish && git push && git push --tags","minor":"npm version minor && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.1","@types/jasmine":"^3.7.7","@types/react":"^17.0.13","@typescript-eslint/eslint-plugin":"^4.28.1","eslint":"^7.30.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.23.4","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.8.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.0.0","typescript":"^4.3.5"},"peerDependencies":{"react":"*"},"gitHead":"d1d091534a72e9641f574d8dfd830fb94b99462c","_id":"use-change@0.2.4","_nodeVersion":"14.5.0","_npmVersion":"7.13.0","dist":{"integrity":"sha512-JhhxhGlPd043DvUVjYe+lJY/dBF8r/10bW0EfgppCw9VRZE0RZniVTSis389qsvhiruQhJFblk+ZLQDodJtaDQ==","shasum":"36a4074375bc12c7f8880b236d50f18a5efae64d","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.2.4.tgz","fileCount":33,"unpackedSize":165715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg4sxLCRA9TVsSAnZWagAA/OIQAIXU0Z7UpiFqwU3yfoCk\nb4Fw6yLu3UE1iNw9LiJwLAIU4wA92YWocIYnwBb6SUEZkujivAnZm6JXLMnb\nTg/BoTKOvu2cVEX8dFlcnyxCHSxlTvM4Eiyt35an9iNbGsK2V10a5GlEOj4K\ngAk82QJO8Klvi99LJdAvC6KAnEamPD/azsEyZajpE71rwQoe7SrsNTGRcUKy\nyeW2WwMCzIbt5QtRVZK/Of8aCXo7X8wWe0BPA1ashiPwAGRm/uAB5dPvGtRU\nfZKD9qSZC2QIxzloU3SZt06YrvGCibl30iRxNemhYDHyHQCwvXVf0a3X81+P\nvh8829Xh77J6dFTKhsnn9fU9rk+cOvkmKVgnlBFQiaFbHC1UDWHqgs3Bo3eV\naIrlk+dfuYyMR2YJuuRqEcb6OHBTCa7tNaZm2/8Q0Cvxkj3O99i8rosXU6rP\noMZqPNkHeAP1B9aV09Sv1sVfXs2Sl5JiWyGIpCeTIFTmx/SUnWQsB2o3nnwN\nuN03BlmJ0cLiUFUkC3ILHVfZ7TAuztMtfhBRufFPC1HSz/WPToQa/CkqeBph\ntzFIClUPQnM+wfn7cQNf01wkNgfCLxg/J8CyfIIRzSa8v9hm436V6hFzpF44\nkCP4fZtyCvc/q376x7ZZ4MvRGcIhbsOoPtQUBD5ts68u/BB4zIcgV7c8QgtT\nACuA\r\n=GIzr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCs18IWuL/zHHOyElK8+QJl5MYeXGmjHiwYyn9VLIpdtAIgB48bdGubp9vzBnc6C5qhsi7sU9nDXidLrkuI0O3yptk="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.2.4_1625476170577_0.7452072293352079"},"_hasShrinkwrap":false},"0.2.5":{"name":"use-change","version":"0.2.5","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.1","@types/jasmine":"^3.7.7","@types/react":"^17.0.13","@typescript-eslint/eslint-plugin":"^4.28.1","eslint":"^7.30.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.23.4","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.8.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.0.0","typescript":"^4.3.5"},"peerDependencies":{"react":"*"},"gitHead":"bf3e65ffc4ab01e4b0e156b8aa3601684a09cf05","_id":"use-change@0.2.5","_nodeVersion":"14.5.0","_npmVersion":"7.13.0","dist":{"integrity":"sha512-sgtCaslOVYA48WxC2NSYHi44LIOGUT7ceRBbe4rDzi7/ohF0iR35nsYxSaOH3FO6R/04qRjYWZA2T6ky9lDbVw==","shasum":"e87fe4126afe3802f8790e95f87c181b52f4601c","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.2.5.tgz","fileCount":33,"unpackedSize":165673,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg4s9tCRA9TVsSAnZWagAABCsP/252E6yELmPuFFmcKJCO\nZ4LyTaJKzQgGyQHfYlD1vyIFNGly76EEhI8sUc5Q8s1w8SWEfSJ0qqT1/reP\n70sUc55OyvBSB0pH8SXrCWSmAyy1Bky9GeYjPSx1LK+hbN665x7J9wMUZ3/2\nDpu601Xt18JwNm4ye6sDfSM8RJpa7FTMO8A0CKmrnNhneNh5GEGamug7ULAh\nBRvn8Lo/OLhJ8K+peuhQ7VzaNjIcnOOw6C0F1poGqTtIBq3I1e2T/q/DxaYU\nxvsdMJaKhYvH7XYC9qSIg+V71G2Ds/0sChJS1oWx1puDHhMOchfPeVuxct9A\nGIECat+SH4bNZqv+voVi/ldU6MjUdpEO2LXTmdV1mdGwvwYOk1/1DXxHL4JC\niCFbtBFdcuBRTTvp5DjVOu1ahXKGfXO47UfeaGqFm2JolfYx7HWN+T8cjbWz\nKt45tjyu4itOj3gfv90vNdYZLWnIjvntpN1RvnUtCw7bOe6j0wdXbDRA2Oni\nRjW2dmRwrJIabXlQz+suJnfTR3in8a+6BrQlReP+Cx3XB8fQvEhEy+CeBj6d\nzYZd9WZlJ8nlh57mcdgYWOfzZV2fAh59/ect0oCcnvqPMbuwhph+dojP+FNB\n7j9SnrljSMDSOJ2wXqWjuA+Rs2R+58Wwbt+EC66srXOMRRj4fAlOtz6Sttsc\nGOFL\r\n=oKMZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICtAg1ME7tKednBYfpoQLkIKsfAZFWh8OlZzSXRt5LppAiBIgYBWl9OdqpXGpYX12mfVx+KtKPt+tYiYuN77pMcReg=="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.2.5_1625476973501_0.06509375358409075"},"_hasShrinkwrap":false},"0.2.6":{"name":"use-change","version":"0.2.6","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.1","@types/jasmine":"^3.7.7","@types/react":"^17.0.13","@typescript-eslint/eslint-plugin":"^4.28.1","eslint":"^7.30.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.23.4","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.8.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.0.0","typescript":"^4.3.5"},"peerDependencies":{"react":"*"},"gitHead":"506a0132c831e10f1630ae990c253ae3c3a7a5d0","_id":"use-change@0.2.6","_nodeVersion":"14.5.0","_npmVersion":"7.13.0","dist":{"integrity":"sha512-oeGNAOsWC0xOZB+ycbNojXAFXR/47FtYDt4hiUYD7O/aivnqhRbRiRDvLgg47NAw0N69gxU36cM9L1XlB6ihOA==","shasum":"ae129a5171e6c91bfbfde4ae5cb819efea03beba","tarball":"https://registry.npmjs.org/use-change/-/use-change-0.2.6.tgz","fileCount":33,"unpackedSize":165983,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg42RUCRA9TVsSAnZWagAA92QP/0QEoCAeIfI1W1YGonXK\nNZ09WKKkyLpoxGCWRmwjUcHuN34VlantK2arIrQJFD37/WDhAmGbHHl3DIvp\n98mOUTjFkO6ixviCuYE3aFFqHkhLr8bciDNqTAxMFYwqgogyzN94FQNyVB/F\nA+5OUewtsfLiul8glOsXubabDNTht0HkqnDMWqB+55CcdjUzMeqDRC8d8NAq\nRaVhQY5V6ZLoRQGPNWjG2S/YlhZlUt8Tem21jjwjbLrFz+tbwYK+eMTeruHb\nwNtgh3ozw9GDwe3CGApyMByB9vuPlKKM261UuIJKbKWwHtHuEwBTWFNm5CF/\nqJsWygrr0dUlm09ZA9cPKKrxmj1VCATDcrSOgkIVuJM3x7U+DQsVNzLx7d6G\njr4JEdHC9iRN8vd3p5uwexrXq3uC5wCknLoVc5TyjkjRBy+A4SXFUxE/bM/0\nM9nfgUrN6R5aG7nolOK5pQ+Ri79r5mvmH0FE1Tz/dt+NWlmfSmmwQzAzUtTv\n6Ah8JsU5p5idute9vKr3R35SYHQdwm0X7jDc+xG2FBfOBkEs0GEcnhtQRtV3\nPJ8Ll/iy9YMOq02ZmCKrRjr3bmIHr2e9OJjZQe6Z/SUtHcm+tTmlguFPAL7V\nZb6dFmPpGwcV9lSB6P2uDhdwvKqF2/Qzd7vZS7YYjp6RvYXPNlWsG0KieeIh\n2Lti\r\n=jfug\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZZzVp/lr0awMwpEF/z6zaVU9gijzLOkKTdSorPzDnBAIgHqSzmV5tWbx/Tix9jhh5bLplQgOgIaC4/YMMHZMGhEE="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_0.2.6_1625515091967_0.5228523586080265"},"_hasShrinkwrap":false},"1.0.0":{"name":"use-change","version":"1.0.0","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.1","@types/jasmine":"^3.7.7","@types/react":"^17.0.13","@typescript-eslint/eslint-plugin":"^4.28.1","eslint":"^7.30.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.23.4","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.8.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.0.0","typescript":"^4.3.5"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"07824fbd94b09244e56ad7486fad977e568178e5","_id":"use-change@1.0.0","_nodeVersion":"16.10.0","_npmVersion":"8.1.3","dist":{"integrity":"sha512-hJlQttZt+U70pmoisqQWf+FZc5vEgtKidAtKrvMOwnpQIE+spDowS66Vt0NLV5MkkqnvlMkBsEPfTVuyabPYCg==","shasum":"a6c185958e24108dedec168ee49a69d823a65d9d","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.0.0.tgz","fileCount":33,"unpackedSize":160622,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAE7U8O116GQdupdMf+H1r/QsTELdQRlPPi3ryFiXhnRAiEA7AVS0E1uFXX7t9Q1CkRvOJz3AX6SzDsuLOddZGObwvM="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.0.0_1636391771803_0.9653994397857935"},"_hasShrinkwrap":false},"1.0.1":{"name":"use-change","version":"1.0.1","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.1","@types/jasmine":"^3.7.7","@types/react":"^17.0.13","@typescript-eslint/eslint-plugin":"^4.28.1","eslint":"^7.30.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.23.4","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.24.0","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.8.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.0.0","typescript":"^4.3.5"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"e26a9cca72b18a4305886da40776156dde6d2c9f","_id":"use-change@1.0.1","_nodeVersion":"16.10.0","_npmVersion":"8.1.3","dist":{"integrity":"sha512-BiH9GfZvptwimgN9dTHkefXbBMOK1wF+I5NyMTrbl2JZVucf61XM4ZU/1DwKMtDb0PY9S802WsFei+6fcFrRmQ==","shasum":"5ba1e60215c5672a7ae08ab2f72d089db1614ac7","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.0.1.tgz","fileCount":33,"unpackedSize":160310,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzY93hnYp35oN1nisBWmwTzvLOiYEUxA7Pf5OS/cV7ywIgIvvzOYFMcNV+YgjytTZwgYMWyMs1p6fmyF1OFJ1hn14="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.0.1_1636394885546_0.08475700178519019"},"_hasShrinkwrap":false},"1.0.2":{"name":"use-change","version":"1.0.2","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.2","@types/jasmine":"^3.10.2","@types/react":"^17.0.34","@typescript-eslint/eslint-plugin":"^4.28.1","eslint":"^7.30.0","eslint-config-airbnb-typescript":"^12.3.1","eslint-plugin-import":"^2.25.2","eslint-plugin-jsx-a11y":"^6.4.1","eslint-plugin-react":"^7.26.1","eslint-plugin-react-hooks":"^4.2.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.4.0","typescript":"^4.4.4"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"f95ec81778b8e33e63661e8feee5dff683cefe15","_id":"use-change@1.0.2","_nodeVersion":"16.10.0","_npmVersion":"8.1.3","dist":{"integrity":"sha512-xZDxLZ/WYZakmPEKjhC4VzG8PBs5wKc/1J+lCRv9QIWGpur4tVI2Mzk4pbceTR/2MO8+A95bkLWaw+ghMVPXYg==","shasum":"7812abc2875d0fa9adc32cc76dab866fb4b68df0","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.0.2.tgz","fileCount":31,"unpackedSize":50824,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAtqFo87oJ8OfvOkUu1wKk7QjMQ4tAzZebq2NAJeXJYZAiEA64HWPF6xeb7O43z2XL3fFvyNdr1F8mZ6Mu9oxl3UEMg="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.0.2_1636539238339_0.7203946247745994"},"_hasShrinkwrap":false},"1.0.3":{"name":"use-change","version":"1.0.3","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.2","@types/jasmine":"^3.10.2","@types/react":"^17.0.37","@typescript-eslint/eslint-plugin":"^5.6.0","eslint":"^8.4.0","eslint-config-airbnb-typescript":"^16.1.0","eslint-plugin-import":"^2.25.3","eslint-plugin-jsx-a11y":"^6.5.1","eslint-plugin-react":"^7.27.1","eslint-plugin-react-hooks":"^4.3.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.4.0","typescript":"^4.5.2","eslint-config-airbnb":"^19.0.2"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"8df78f7c13eca1036ebf02c0e8d3352d1a1e21cb","_id":"use-change@1.0.3","_nodeVersion":"16.10.0","_npmVersion":"8.1.3","dist":{"integrity":"sha512-e0xltORpYxBo9k2t7vBbdDlIE/2rwlt/WNt2g8/PrUh5sw4bwUB5oQoC8YzkzmrN8QHBKd8qpxPNTcQv/78Z3A==","shasum":"3865ed6d78a64bde8eea750b428549d29c4150af","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.0.3.tgz","fileCount":31,"unpackedSize":51493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrnhjCRA9TVsSAnZWagAAvKcP/3Ffo4D5ElaWkceohV02\nuFSgxkpUio4haQNF0t2kgCM9KkqIWLsIFmTqF3W4R9E8iYUYjlT6XxprSWzF\npVM7qydUHgX/SOD0mLaFJZmEIWxFFaALHGbu/p/weQbZBq7l62fmyqo3HsMY\nJmKa+c7puM/OuJg15zoG7MKtqsQpdGsAzMGnaKETVNZ8XY3oRieq6l+dXnO9\neiVdu0ryfBtZaz3Q47yVFAlxbTvsE9cQwSJ/Pe3mMNEEK19faVWkufeBXLtK\npACYHOhPB8VIaEkc2Hp3w9qwClXp/xM6HXda17QvTvhMWx4nFzE6cDDE8GCs\nVr+MbAcVC2UAghIfJMmYT0wRN3r1ztoOgHrKMyfnUPF7LYEyzBGhkrYQsptq\nCMvLQQMBHWB6bnwQVmJWMKtjqWbDlS8KV+BKjXsLj2bEmGFpQDma6Z6CKa0T\nxJdpitk+WxmhpU+ip+/HxAv6N3UqBWyVrU42ef1xxEEh27ExmjJD9xFFYd+1\nohOhh1rta9EbLYL7vXvUoxum8cGVo//umOHAzEwVEDxWPB0qdELhWbHHFbXX\n7/ppBl8/vw0liTVnQUlCrhlIUiASlW3HpV06DwFRxErHtaAHQgxamEHO6TnN\nvMMlxdeRn4c/eQbVpBjYBd24JkSRWovYBgKBvBbdtVSJCDadKlgurr0KFeED\n/9Co\r\n=FXei\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAZ1ShHcxSRhsHzpMwqB8O5gxNC8Mgo/J4bj9SfaEGnVAiEAvVRBh4z1BPgCyZErvHnyOU9jrn4WGUtNpNcatJ46PdM="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.0.3_1638824035586_0.34767072812446354"},"_hasShrinkwrap":false},"1.0.4-beta.1":{"name":"use-change","version":"1.0.4-beta.1","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.2","@types/jasmine":"^3.10.2","@types/react":"^17.0.37","@typescript-eslint/eslint-plugin":"^5.6.0","@typescript-eslint/parser":"^5.6.0","eslint":"^8.4.0","eslint-config-airbnb":"^19.0.2","eslint-config-airbnb-typescript":"^16.1.0","eslint-plugin-import":"^2.25.3","eslint-plugin-jsx-a11y":"^6.5.1","eslint-plugin-react":"^7.27.1","eslint-plugin-react-hooks":"^4.3.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.4.0","typescript":"^4.5.2"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"223ed0838f0f4e5d577e1f0afbcc485d0f881e2e","readme":"## 🙌 use-change\n\n[![npm version](https://badge.fury.io/js/use-change.svg)](https://badge.fury.io/js/use-change) [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/) [![Build status](https://github.com/finom/use-change/actions/workflows/main.yml/badge.svg)](https://github.com/finom/use-change/actions)\n\n> The most minimalistic React state management library on the market with [zero dependencies](https://bundlephobia.com/package/use-change) and `React.useState`-like syntax\n\nWith this hook application state is defined as a nested object and the properties of the object are listened with [Object.defineProperty](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty). No reducers, actions, observers, middlewares. Just one hook and some secondary API that you can ignore if you don't need it.\n\nComponents that call `useChange` listen to only those properties that they actually need but never update if something else gets changed 🏎️.\n\nSee discussion and criticism [on Reddit](https://www.reddit.com/r/javascript/comments/qqsbo3/usechange_the_most_minimalistic_react_state/) 😅.\n\n## 📋 Table of Contents\n\n<!--ts-->\n* [Quick start](#-quick-start)\n* [Quick start using Provider and store as a class instance](#-quick-start-using-provider-and-store-as-a-class-instance)\n* [Designing the store](#-designing-the-store)\n* [Summary](#️-summary)\n* [API](#-api)\n    * [useChange](#usechange)\n    * [Provider](#provider)\n* [Secondary API](#-secondary-api)\n    * [useValue](#usevalue)\n    * [useSet](#useset)\n    * [useGet](#useget)\n    * [useSilent](#usesilent)\n    * [listenChange](#listenchange)\n    * [unlistenChange](#unlistenchange)\n    * [Context](#context)\n* [Persistent store](#️-persistent-store)\n\n<!-- Added by: finom, at: Mon Dec  6 22:28:10 EET 2021 -->\n\n<!--te-->\n\n![image](./assets/use-change.png)\n\n## ☕ Quick start\n\n1. Install the library by `npm i use-change` or `yarn add use-change`.\n2. Define an object of any shape. It's going to be your store.\n3. Add `useChange` to your component.\n\n```js\nimport React, { ReactElement } from 'react'\nimport useChange from 'use-change';\n\nconst store = { count: 0 };\n\nconst MyComponent = (): ReactElement => {\n  const [count, setCount] = useChange(store, 'count');\n  \n  return (\n    <>\n      <p>{count}</p>\n      <button onClick={() => setCount(count + 1)}>Increment</button>\n    </>\n  )\n}\n\nexport default MyComponent;\n```\n\n`store.count` is updated using `setCount` function from the tuple returned by `useChange` (just like using `React.useState`). It can also be updated just by direct modification of `count` property:\n\n```js\n// ...\n// you can do it from anywhere\nstore.count = 69; // nice\n```\n\nThe example shows how you can use the hook as a local data store for a component but `store` object can be exported and used by other components. This may be an anti-DRY pattern, that's why it's recommended to use `Provider` exported from `use-change`.\n\n## 💡 Quick start using Provider and store as a class instance\n\n1. Install the library by `npm i use-change` or `yarn add use-change`.\n2. Define an object of any shape. At this case this is a store class instance instead of an in-line object.\n3. Wrap your components by `Provider` exported by `use-change`.\n4. Add `useChange` to your components.\n\n```js\n// ./store.ts\n// export the store class to use it for type references\nexport class RootStore {\n  public count = 0;\n}\n\nexport default new RootStore(); // init the store instance\n```\n\n```js\n// ./App.tsx\nimport React, { ReactElement } from 'react';\nimport { Provider as UseChangeProvider } from 'use-change';\nimport MyComponent from './MyComponent';\nimport store from './store';\n\nconst App = (): ReactElement => (\n  <UseChangeProvider value={store}>\n    <MyComponent />\n  </UseChangeProvider>\n)\n\nexport default App;\n```\n\n```js\n// ./MyComponent.tsx\nimport React, { ReactElement } from 'react'\nimport useChange from 'use-change';\nimport { RootStore } from './store';\n\nconst MyComponent = (): ReactElement => {\n  // the first argument is a path to store object\n  // if store is nested the path could look like \n  // (store: RootStore) => store.foo.bar where \"bar\" is an object containing \"count\"\n  const [count, setCount] = useChange((store: RootStore) => store, 'count');\n  \n  return (\n    <>\n      <p>{count}</p>\n      <button onClick={() => setCount(count + 1)}>Increment</button>\n    </>\n  )\n}\n\nexport default MyComponent;\n```\n\n## 👷 Designing the store\n\nLet's make it a little bit detailed and add a few classess that may be responsible for different aspects of data. Those classes may consist of user info, fetched data, persistent data or anything else that you want to keep at its own place. But for simplicity let's create a few classess that also consist of counts.\n\n```js\n// ./store.ts\nclass StoreBranchA {\n  public aCount = 0;\n}\n\nclass StoreBranchB {\n  public bCount = 0;\n}\n\n// those classes can also be initialised at class constructor\nexport class RootStore {\n  public readonly storeBranchA = new StoreBranchA();\n  public readonly storeBranchB = new StoreBranchB();\n}\n\n// export store selectors or, in other words, paths to the objects\nexport const ROOT = (store: RootStore) => store;\nexport const PATH_A = ({ storeBranchA }: RootStore) => storeBranchA;\nexport const PATH_B = ({ storeBranchB }: RootStore) => storeBranchB;\n\nexport default new RootStore();\n```\n\nAt this example we're also exporting so-called \"store selectors\". The selectors are one-line arrow functions that provide paths to desired store objects. This makes the code look clean without providing things like `({ users }: RootStore) => users` every time, but instead we define a simple reusable constant. In case of users the constant can be called `USERS` and applied as the first `useChange` argument: `useChange(USERS, 'something')` (get `store.users.something` property). It's not required but recommended in order to make code look much nicer.\n\nAlso take a look at the `ROOT` store selector. It's going to be used to get and modify properties from the store itself like that: `useChange(ROOT, 'count')` to avoid usage of duplicating `(store: RootStore) => store` function.\n\nDon't worry, that's the only kind of constants that are going to be exported.\n\n```js\n// ./MyComponent.tsx\nimport React, { ReactElement } from 'react'\nimport useChange from 'use-change';\nimport { PATH_A, PATH_B } from './store';\n\nconst MyComponent = (): ReactElement => {\n  const [countA, setCountA] = useChange(PATH_A, 'countA');\n  const [countB, setCountB] = useChange(PATH_B, 'countB');\n  \n  return (\n    <>\n      <p>{countA}</p>\n      <button onClick={() => setCountA(countA + 1)}>Increment count A</button>\n      <p>{countB}</p>\n      <button onClick={() => setCountB(countB + 1)}>Increment count B</button>\n    </>\n  )\n}\n```\n\nAs you can see the component doesn't modify store object implicitly, therefore it's not possible to change it directly (via assignment operator) from components. You can try to do that though to see how component reacts on changes of a listened property.\n \n```js\n// ...\nimport store, { RootStore } from './store';\n\nsetInterval(() => {\n  store.storeBranchA.countA++;\n}, 1000);\n\nconst MyComponent = (): ReactElement => {\n// ...\n```\n\n\nThe component is going to be updated every second since it listens to the `store.storeBranchA.countA` property changes.\n\nThe property can also be manipulated manually inside class methods.\n\n```js\nclass RootStore {\n  public count = 0;\n\n  constructor() {\n    setInterval(() => {\n      this.incrementCount();\n    }, 1000);\n  }\n\n  public readonly incrementCount() {\n    this.count++;\n  }\n}\n```\n\n## ✔️ Summary\n\nCongrats! You basically passed the tutorial of how to use `use-change` hook! Thousand times simpler than Redux or MobX, right? Let's just mention a few last notes:\n\n**The hook supports two overloads**\n1. Explicit store use. At this case you pass the store object to `useChange` hook: `useChange<T>(object: T, key: string)`\n2. Implicit store use where the store object is passed as `Provider` value and the listenable property is located in a nested object from the store `useChange<T>(storeSelector: (store: T) => object, key: string)`, where `storeSelector` is a path to a store object as a tiny arrow function.\n\n**Store is mutable, state is immutable.** Think of store as of tree with trunk and branches that never change and on the branches there are leaves that can fall and grow any number of times. \n\n\nLet's take a look at a more abstract example. Just to make it simpler to understand, let's define a small interface instead of classes definition.\n\n```js\ninterface RootStore {\n  readonly me: {\n    isAuthenticated: boolean; \n    name: string;\n  }\n  \n  readonly shop: {\n    readonly cart: {\n      items: ShoppingCartItem[];\n    }\n    \n    deliveryAddress: string;\n  }\n}\n```\n\nIf application store is implemented by the interface, then:\n\n- `RootStore['me']`, `RootStore['shop']`, `RootStore['shop']['cart']` should not be changed since they're \"branches of the tree\". These properties are the **store** that can be returned by store selectors.\n- But `RootStore['me']['isAuthenticated']`, `RootStore['me']['name']`, `RootStore['shop']['cart']['items']`, `RootStore['shop']['deliveryAddress']`  can, since they're \"leaves of the tree\" that can be listened by components. These properties are the **state**.\n\nThis means that any listenable property needs to be overridden by a new value, but never mutated.\n\n```js\nconst [cartItems, setCartItems] = useChange(\n  ({ shop }: RootStore) => shop.cart, // select the \"tree branch\"\n  'items', // use shop.cart.items property\n);\n\n// ...\n\n// create a new array to be used as shop.cart.items value\nsetCartItems([\n  ...cartItems,\n  newItem,\n]);\n\n// or\nstore.shop.cart.items = [\n  ...cartItems,\n  newItem,\n];\n\n// but never mutate the array\n// cartItems.push(newItem); // wrong\n// store.shop.cart.items.push(newItem); // also wrong\n```\n\n\n## 🚀 API\n\n### `useChange`\n\n**Explicit store overload.** At this case you provide a store object directly as the first argument. It can be used for cases when you don't want to apply `Provider` and you need a local one-component store. Useful at forms to avoid usage of multiple `React.useState`.\n\nIn other cases it's recommended to use overload with store selector.\n\n`useChange<T, K>(object: T, key: K & keyof T & string) => [value: inferred, setter: (value: inferred) => inferred]`\n\n```js\ninterface RootStore {\n  foo: { \n    bar: { \n      key: string;\n    } \n  }\n}\n\nconst store: RootStore = { foo: { bar: { key: 'value' } } };\n// ...\nconst [value, setValue] = useChange(store.foo.bar, 'key'); // value is inferred as string\n```\n\n**Implicit store overload.** The recommended way to use `useChange` if it's used as a core data store library of an app you work on.\n\n`useChange<T, K, S>(getStore: (store: T) => S, key: K & keyof S & string): [value: inferred, setter: (value: inferred) => inferred]`\n\n```js\ninterface RootStore {\n  foo: { \n    bar: { \n      key: string;\n    } \n  }\n}\nconst store: RootStore = { foo: { bar: { key: 'value' } } };\n// ...\nconst [value, setValue] = useChange((store: RootStore) => store.foo.bar, 'key'); // value is inferred as string\n```\n\n### `Provider`\n\nThe use-change context provider.\n\n```js\nimport React, { ReactElement } from 'react';\nimport { Provider as UseChangeProvider } from 'use-change';\nimport MyComponent from './MyComponent';\n\nconst store = { count: 0 };\n\nconst App = (): ReactElement => (\n  <UseChangeProvider value={store}>\n    <MyComponent />\n  </UseChangeProvider>\n)\n\nexport default App;\n```\n\n## 🤖 Secondary API\n\nThe library also provides a few helpful hooks and functions that mostly duplicate features of `useChange` but may be useful working on something big.\n\n\n### `useValue`\n\nSupports 100% the same overload as `useChange` does and works the same way but instead of a `[value, setter]` tuple it returns just a `value` (zero-indexed element of the tuple). \n\n```ts\nconst value = useValue((store: RootStore) => store.foo.bar, 'key');\n\n// 100% equivalent of \nconst [value] = useChange((store: RootStore) => store.foo.bar, 'key');\n\n// or \nconst value = useChange((store: RootStore) => store.foo.bar, 'key')[0];\n```\n\n### `useSet`\n\nSupports 100% the same overload as `useChange` does but instead of a `[value, setter]` tuple it returns just a `setter` (element of index 1 of the tuple). The hook **doesn't trigger component re-render** when property value is changed.\n\n```ts\nconst setBarKey = useSet((store: RootStore) => store.foo.bar, 'key');\n\n// almost the same as the following, but doesn't trigger component re-render\nconst setBarKey = useChange((store: RootStore) => store.foo.bar, 'key')[1];\n```\n\n### `useGet`\n\nSupports 100% the same overload as `useChange` does but returns a function that returns store property value. The hook is useful when you need to get an actual property value (at `useEffect` or `useCallback`) but you don't want to make component to re-render. The hook **doesn't trigger component re-render** when property value is changed.\n\n```ts\n// a change of the 'key' property never re-renders the component even if field value is changed\nconst getFooBar = useGet((store: RootStore) => store.foo.bar, 'key'); \n\nuseEffect(() => {\n  const fooBar = getFooBar(); // returns store.foo.bar['key']\n  console.log(fooBar);\n});\n```\n\n\n### `useSilent`\n\nSupports 100% the same overload as `useChange` does but returns `value` and **doesn't trigger component re-render** when property value is changed. This is the \"silent twin\" of `useValue`.\n\n```ts\nconst value = useSilent((store: RootStore) => store.foo.bar, 'key');\n```\n\nIt's used for cases if you want to get something unchangeable. A good example is store methods: they don't need to get their property descriptor to be modified.\n\n```js\n// ./store.ts\nclass StoreBranch {\n  public count = 0;\n  \n  public readonly incrementCount = () => {\n    this.count++;\n  }\n}\n\nexport class RootStore {\n  public readonly storeBranch = new StoreBranch();\n}\n\nexport default new RootStore();\n```\n\n```ts\nconst incrementCount = useSilent((store: RootStore) => store.storeBranch, 'incrementCount');\n// ...\nincrementCount();\n```\n\n### `listenChange`\n\nAllows to listen to object property changes outside of components. The store object argument should be given explicitly since `Provider` doesn't work here anymore. The method returns a function that unsubscribes from a given event.\n\n`listenChange<T, K>(store: T, key: K & keyof T & string, listener: (value: inferred, previousValue: inferred) => void): () => void`\n\n```ts\nconst store = { count: 0; };\n\nconst unlisten = listenChange(store, 'count', (count) => console.log('the count is: ', count));\n\nsetInterval(() => {\n  store.count++;\n}, 1000);\n```\n\n\n\n### `unlistenChange`\n\nRemoves previously attached listener.\n\n`unlistenChange<T, K>(store: T, key: K & keyof T & string, listener: (value: inferred) => void): void`\n\n```ts\nconst store = { count: 0; };\n\nconst handler = (count) => console.log('the count is: ', count);\n\nlistenChange(store, 'count', handler);\n\n// ... \n\nunlistenChange(store, 'count', handler);\n```\n\n\n### `Context`\n\nReact context used for the store provider. You can use `Context` with `React.useContext` to receive store object without importing it. `Context.Provider` equals to the `Provider` documented above.\n\n```ts\nimport React, { useContext } from 'react';\nimport { Context as UseChangeContext } from 'use-change';\nimport { RootStore } from './store';\n\nconst MyComponent = () => {\n  const store = useContext<RootStore>(UseChangeContext);\n  // ...\n}\n```\n\n## 🏔️ Persistent store\n\nThere is no built-in feature to store data persistently but the elegancy of use-change design makes possible to create such things easily.\n\n```js\n// ./PersistentStore.ts\nimport { listenChange } from 'use-change';\n\n// the function returns localStorage value or default value if localStorage value doesn't exist\nfunction persistentValue<T>(key: keyof PersistentStore, defaultValue: T) {\n  const storageValue = localStorage.getItem(key);\n  return storageValue ? JSON.parse(storageValue) as T : defaultValue;\n}\n\n// define the part of root store that responsible for persistent store\nexport default class PersistentStore {\n  public age = persistentValue<number>('age', 18);\n\n  public firstName = persistentValue<string>('firstName', 'John');\n\n  public lastName = persistentValue<string>('lastName', 'Doe');\n\n  constructor() {\n    // enumerate over own property names (age, firstName, lastName)\n    // and define property change listener to update localStorage\n    Object.getOwnPropertyNames(this).forEach((key) => {\n      listenChange(this, key, (value) => {\n        localStorage.setItem(key, JSON.stringify(value));\n      });\n    });\n  }\n}\n```\n\nUse the class instance as part of your root store.\n\n```js\n// ./store.ts\nimport PersistentStore from './PersistentStore';\n\nexport class RootStore {\n  public readonly persistent = new PersistentStore();\n}\n\nexport default new RootStore();\n```\n\nThen use it as any other custom object.\n\n```js\n// the value will be written into localStorage\nstore.persistent.age = 20;\n```\n\n```js\n// or with a use-change hook\nimport useChange from 'use-change';\n\n// ...\nconst [age, setAge] = useChange(({ persistent }: RootStore) => persistent, 'age');\n// ...\n// the value will be written into localStorage\nsetAge(20);\n```\n","readmeFilename":"README.md","_id":"use-change@1.0.4-beta.1","_nodeVersion":"16.10.0","_npmVersion":"8.1.3","dist":{"integrity":"sha512-8bYMDy1/tMgZL+/EdjvdEL4uNddpdo80dxl8GhRWvmlE1In4Z3Yl30MDf4iHLkwUzqnwINbOARFd/SHaJVho5g==","shasum":"b2d3b3078f8dac64988a4e54ed9f14c71ab31f40","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.0.4-beta.1.tgz","fileCount":31,"unpackedSize":51204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhsalTCRA9TVsSAnZWagAAK6wP/3zO2EDj9ur9sANBTXNL\ntImmWmaGTlGYLLHGuPHWgiKro1jFzHPop+iZh8ZmBXB+MWSDy5x/RzdIFK96\n4xv8m6WJ+5xiZqofyJFGf4/YYelOCir1QejughKSaXS4UhKekk1slwSrnvVT\n09k42Vkb+hsqHE0qCokya0rQCMDB76vd1zRuSXovtY0mu+8nBVE2R3fz5ahO\nxPRg0UgmQStUo4ZpviJX/YrnHIxffoXuJKEH6dVU9EAIgZHFKYC+6vNfnjRX\n7Y5Gn0ZvwrF3AM0YknH8MLH6Cml9X2kkVeD18/TB1cql8Fd75GuGu1pqkPct\n6iIHKkaBJIvGWDBb2BMXwN4/gy9A+0BHSJotujTOPAdKaHuPbq/AT0Knjkiv\nL/se7t1pCcAqQYV6v/hCe2JBazAK8hrBUj7wdlXddloPtclSIXa4Qv6o5GvM\n9AxVNfBB2oMa5pMH8pcjjtoIO1tJk5aAQ2zrtbq8wRnzabwDn3I6WEEy8vg0\nYoekwRuDovotQjH244PBGHtpsFmC1OdrkOQlRaxGVeAuKC79TEpSQaWk3j8j\ni4SfMZCL/8Bq3sg8BXTSd1uMlZU/BQy9W5o/SIWwYyfbcv8F8gOCujw+Ccwi\nmqo8TYcXbL0S4eUoWIEw6wDjRnSWumgE1MahcLJyAeTo9gnJxDsKst3X90W2\nUv6Q\r\n=ss4O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJVMDwQzXvwW/kXxB660n63XVPF3gAqNqEOHgrades8wIgM2CTIpf1blM2hB+L5ZyBVCbc71DAnF3+Ifa2ol9RIAk="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.0.4-beta.1_1639033171371_0.08370923757803839"},"_hasShrinkwrap":false},"1.0.4-beta.2":{"name":"use-change","version":"1.0.4-beta.2","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.2","@types/jasmine":"^3.10.2","@types/react":"^17.0.37","@typescript-eslint/eslint-plugin":"^5.6.0","@typescript-eslint/parser":"^5.6.0","eslint":"^8.4.0","eslint-config-airbnb":"^19.0.2","eslint-config-airbnb-typescript":"^16.1.0","eslint-plugin-import":"^2.25.3","eslint-plugin-jsx-a11y":"^6.5.1","eslint-plugin-react":"^7.27.1","eslint-plugin-react-hooks":"^4.3.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.4.0","typescript":"^4.5.2"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","readme":"## 🙌 use-change\n\n[![npm version](https://badge.fury.io/js/use-change.svg)](https://badge.fury.io/js/use-change) [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/) [![Build status](https://github.com/finom/use-change/actions/workflows/main.yml/badge.svg)](https://github.com/finom/use-change/actions)\n\n> The most minimalistic React state management library on the market with [zero dependencies](https://bundlephobia.com/package/use-change) and `React.useState`-like syntax\n\nWith this hook application state is defined as a nested object and the properties of the object are listened with [Object.defineProperty](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty). No reducers, actions, observers, middlewares. Just one hook and some secondary API that you can ignore if you don't need it.\n\nComponents that call `useChange` listen to only those properties that they actually need but never update if something else gets changed 🏎️.\n\nSee discussion and criticism [on Reddit](https://www.reddit.com/r/javascript/comments/qqsbo3/usechange_the_most_minimalistic_react_state/) 😅.\n\n## 📋 Table of Contents\n\n<!--ts-->\n* [Quick start](#-quick-start)\n* [Quick start using Provider and store as a class instance](#-quick-start-using-provider-and-store-as-a-class-instance)\n* [Designing the store](#-designing-the-store)\n* [Summary](#️-summary)\n* [API](#-api)\n    * [useChange](#usechange)\n    * [Provider](#provider)\n* [Secondary API](#-secondary-api)\n    * [useValue](#usevalue)\n    * [useSet](#useset)\n    * [useGet](#useget)\n    * [useSilent](#usesilent)\n    * [listenChange](#listenchange)\n    * [unlistenChange](#unlistenchange)\n    * [Context](#context)\n* [Persistent store](#️-persistent-store)\n\n<!-- Added by: finom, at: Mon Dec  6 22:28:10 EET 2021 -->\n\n<!--te-->\n\n![image](./assets/use-change.png)\n\n## ☕ Quick start\n\n1. Install the library by `npm i use-change` or `yarn add use-change`.\n2. Define an object of any shape. It's going to be your store.\n3. Add `useChange` to your component.\n\n```js\nimport React, { ReactElement } from 'react'\nimport useChange from 'use-change';\n\nconst store = { count: 0 };\n\nconst MyComponent = (): ReactElement => {\n  const [count, setCount] = useChange(store, 'count');\n  \n  return (\n    <>\n      <p>{count}</p>\n      <button onClick={() => setCount(count + 1)}>Increment</button>\n    </>\n  )\n}\n\nexport default MyComponent;\n```\n\n`store.count` is updated using `setCount` function from the tuple returned by `useChange` (just like using `React.useState`). It can also be updated just by direct modification of `count` property:\n\n```js\n// ...\n// you can do it from anywhere\nstore.count = 69; // nice\n```\n\nThe example shows how you can use the hook as a local data store for a component but `store` object can be exported and used by other components. This may be an anti-DRY pattern, that's why it's recommended to use `Provider` exported from `use-change`.\n\n## 💡 Quick start using Provider and store as a class instance\n\n1. Install the library by `npm i use-change` or `yarn add use-change`.\n2. Define an object of any shape. At this case this is a store class instance instead of an in-line object.\n3. Wrap your components by `Provider` exported by `use-change`.\n4. Add `useChange` to your components.\n\n```js\n// ./store.ts\n// export the store class to use it for type references\nexport class RootStore {\n  public count = 0;\n}\n\nexport default new RootStore(); // init the store instance\n```\n\n```js\n// ./App.tsx\nimport React, { ReactElement } from 'react';\nimport { Provider as UseChangeProvider } from 'use-change';\nimport MyComponent from './MyComponent';\nimport store from './store';\n\nconst App = (): ReactElement => (\n  <UseChangeProvider value={store}>\n    <MyComponent />\n  </UseChangeProvider>\n)\n\nexport default App;\n```\n\n```js\n// ./MyComponent.tsx\nimport React, { ReactElement } from 'react'\nimport useChange from 'use-change';\nimport { RootStore } from './store';\n\nconst MyComponent = (): ReactElement => {\n  // the first argument is a path to store object\n  // if store is nested the path could look like \n  // (store: RootStore) => store.foo.bar where \"bar\" is an object containing \"count\"\n  const [count, setCount] = useChange((store: RootStore) => store, 'count');\n  \n  return (\n    <>\n      <p>{count}</p>\n      <button onClick={() => setCount(count + 1)}>Increment</button>\n    </>\n  )\n}\n\nexport default MyComponent;\n```\n\n## 👷 Designing the store\n\nLet's make it a little bit detailed and add a few classess that may be responsible for different aspects of data. Those classes may consist of user info, fetched data, persistent data or anything else that you want to keep at its own place. But for simplicity let's create a few classess that also consist of counts.\n\n```js\n// ./store.ts\nclass StoreBranchA {\n  public aCount = 0;\n}\n\nclass StoreBranchB {\n  public bCount = 0;\n}\n\n// those classes can also be initialised at class constructor\nexport class RootStore {\n  public readonly storeBranchA = new StoreBranchA();\n  public readonly storeBranchB = new StoreBranchB();\n}\n\n// export store selectors or, in other words, paths to the objects\nexport const ROOT = (store: RootStore) => store;\nexport const PATH_A = ({ storeBranchA }: RootStore) => storeBranchA;\nexport const PATH_B = ({ storeBranchB }: RootStore) => storeBranchB;\n\nexport default new RootStore();\n```\n\nAt this example we're also exporting so-called \"store selectors\". The selectors are one-line arrow functions that provide paths to desired store objects. This makes the code look clean without providing things like `({ users }: RootStore) => users` every time, but instead we define a simple reusable constant. In case of users the constant can be called `USERS` and applied as the first `useChange` argument: `useChange(USERS, 'something')` (get `store.users.something` property). It's not required but recommended in order to make code look much nicer.\n\nAlso take a look at the `ROOT` store selector. It's going to be used to get and modify properties from the store itself like that: `useChange(ROOT, 'count')` to avoid usage of duplicating `(store: RootStore) => store` function.\n\nDon't worry, that's the only kind of constants that are going to be exported.\n\n```js\n// ./MyComponent.tsx\nimport React, { ReactElement } from 'react'\nimport useChange from 'use-change';\nimport { PATH_A, PATH_B } from './store';\n\nconst MyComponent = (): ReactElement => {\n  const [countA, setCountA] = useChange(PATH_A, 'countA');\n  const [countB, setCountB] = useChange(PATH_B, 'countB');\n  \n  return (\n    <>\n      <p>{countA}</p>\n      <button onClick={() => setCountA(countA + 1)}>Increment count A</button>\n      <p>{countB}</p>\n      <button onClick={() => setCountB(countB + 1)}>Increment count B</button>\n    </>\n  )\n}\n```\n\nAs you can see the component doesn't modify store object implicitly, therefore it's not possible to change it directly (via assignment operator) from components. You can try to do that though to see how component reacts on changes of a listened property.\n \n```js\n// ...\nimport store, { RootStore } from './store';\n\nsetInterval(() => {\n  store.storeBranchA.countA++;\n}, 1000);\n\nconst MyComponent = (): ReactElement => {\n// ...\n```\n\n\nThe component is going to be updated every second since it listens to the `store.storeBranchA.countA` property changes.\n\nThe property can also be manipulated manually inside class methods.\n\n```js\nclass RootStore {\n  public count = 0;\n\n  constructor() {\n    setInterval(() => {\n      this.incrementCount();\n    }, 1000);\n  }\n\n  public readonly incrementCount() {\n    this.count++;\n  }\n}\n```\n\n## ✔️ Summary\n\nCongrats! You basically passed the tutorial of how to use `use-change` hook! Thousand times simpler than Redux or MobX, right? Let's just mention a few last notes:\n\n**The hook supports two overloads**\n1. Explicit store use. At this case you pass the store object to `useChange` hook: `useChange<T>(object: T, key: string)`\n2. Implicit store use where the store object is passed as `Provider` value and the listenable property is located in a nested object from the store `useChange<T>(storeSelector: (store: T) => object, key: string)`, where `storeSelector` is a path to a store object as a tiny arrow function.\n\n**Store is mutable, state is immutable.** Think of store as of tree with trunk and branches that never change and on the branches there are leaves that can fall and grow any number of times. \n\n\nLet's take a look at a more abstract example. Just to make it simpler to understand, let's define a small interface instead of classes definition.\n\n```js\ninterface RootStore {\n  readonly me: {\n    isAuthenticated: boolean; \n    name: string;\n  }\n  \n  readonly shop: {\n    readonly cart: {\n      items: ShoppingCartItem[];\n    }\n    \n    deliveryAddress: string;\n  }\n}\n```\n\nIf application store is implemented by the interface, then:\n\n- `RootStore['me']`, `RootStore['shop']`, `RootStore['shop']['cart']` should not be changed since they're \"branches of the tree\". These properties are the **store** that can be returned by store selectors.\n- But `RootStore['me']['isAuthenticated']`, `RootStore['me']['name']`, `RootStore['shop']['cart']['items']`, `RootStore['shop']['deliveryAddress']`  can, since they're \"leaves of the tree\" that can be listened by components. These properties are the **state**.\n\nThis means that any listenable property needs to be overridden by a new value, but never mutated.\n\n```js\nconst [cartItems, setCartItems] = useChange(\n  ({ shop }: RootStore) => shop.cart, // select the \"tree branch\"\n  'items', // use shop.cart.items property\n);\n\n// ...\n\n// create a new array to be used as shop.cart.items value\nsetCartItems([\n  ...cartItems,\n  newItem,\n]);\n\n// or\nstore.shop.cart.items = [\n  ...cartItems,\n  newItem,\n];\n\n// but never mutate the array\n// cartItems.push(newItem); // wrong\n// store.shop.cart.items.push(newItem); // also wrong\n```\n\n\n## 🚀 API\n\n### `useChange`\n\n**Explicit store overload.** At this case you provide a store object directly as the first argument. It can be used for cases when you don't want to apply `Provider` and you need a local one-component store. Useful at forms to avoid usage of multiple `React.useState`.\n\nIn other cases it's recommended to use overload with store selector.\n\n`useChange<T, K>(object: T, key: K & keyof T & string) => [value: inferred, setter: (value: inferred) => inferred]`\n\n```js\ninterface RootStore {\n  foo: { \n    bar: { \n      key: string;\n    } \n  }\n}\n\nconst store: RootStore = { foo: { bar: { key: 'value' } } };\n// ...\nconst [value, setValue] = useChange(store.foo.bar, 'key'); // value is inferred as string\n```\n\n**Implicit store overload.** The recommended way to use `useChange` if it's used as a core data store library of an app you work on.\n\n`useChange<T, K, S>(getStore: (store: T) => S, key: K & keyof S & string): [value: inferred, setter: (value: inferred) => inferred]`\n\n```js\ninterface RootStore {\n  foo: { \n    bar: { \n      key: string;\n    } \n  }\n}\nconst store: RootStore = { foo: { bar: { key: 'value' } } };\n// ...\nconst [value, setValue] = useChange((store: RootStore) => store.foo.bar, 'key'); // value is inferred as string\n```\n\n### `Provider`\n\nThe use-change context provider.\n\n```js\nimport React, { ReactElement } from 'react';\nimport { Provider as UseChangeProvider } from 'use-change';\nimport MyComponent from './MyComponent';\n\nconst store = { count: 0 };\n\nconst App = (): ReactElement => (\n  <UseChangeProvider value={store}>\n    <MyComponent />\n  </UseChangeProvider>\n)\n\nexport default App;\n```\n\n## 🤖 Secondary API\n\nThe library also provides a few helpful hooks and functions that mostly duplicate features of `useChange` but may be useful working on something big.\n\n\n### `useValue`\n\nSupports 100% the same overload as `useChange` does and works the same way but instead of a `[value, setter]` tuple it returns just a `value` (zero-indexed element of the tuple). \n\n```ts\nconst value = useValue((store: RootStore) => store.foo.bar, 'key');\n\n// 100% equivalent of \nconst [value] = useChange((store: RootStore) => store.foo.bar, 'key');\n\n// or \nconst value = useChange((store: RootStore) => store.foo.bar, 'key')[0];\n```\n\n### `useSet`\n\nSupports 100% the same overload as `useChange` does but instead of a `[value, setter]` tuple it returns just a `setter` (element of index 1 of the tuple). The hook **doesn't trigger component re-render** when property value is changed.\n\n```ts\nconst setBarKey = useSet((store: RootStore) => store.foo.bar, 'key');\n\n// almost the same as the following, but doesn't trigger component re-render\nconst setBarKey = useChange((store: RootStore) => store.foo.bar, 'key')[1];\n```\n\n### `useGet`\n\nSupports 100% the same overload as `useChange` does but returns a function that returns store property value. The hook is useful when you need to get an actual property value (at `useEffect` or `useCallback`) but you don't want to make component to re-render. The hook **doesn't trigger component re-render** when property value is changed.\n\n```ts\n// a change of the 'key' property never re-renders the component even if field value is changed\nconst getFooBar = useGet((store: RootStore) => store.foo.bar, 'key'); \n\nuseEffect(() => {\n  const fooBar = getFooBar(); // returns store.foo.bar['key']\n  console.log(fooBar);\n});\n```\n\n\n### `useSilent`\n\nSupports 100% the same overload as `useChange` does but returns `value` and **doesn't trigger component re-render** when property value is changed. This is the \"silent twin\" of `useValue`.\n\n```ts\nconst value = useSilent((store: RootStore) => store.foo.bar, 'key');\n```\n\nIt's used for cases if you want to get something unchangeable. A good example is store methods: they don't need to get their property descriptor to be modified.\n\n```js\n// ./store.ts\nclass StoreBranch {\n  public count = 0;\n  \n  public readonly incrementCount = () => {\n    this.count++;\n  }\n}\n\nexport class RootStore {\n  public readonly storeBranch = new StoreBranch();\n}\n\nexport default new RootStore();\n```\n\n```ts\nconst incrementCount = useSilent((store: RootStore) => store.storeBranch, 'incrementCount');\n// ...\nincrementCount();\n```\n\n### `listenChange`\n\nAllows to listen to object property changes outside of components. The store object argument should be given explicitly since `Provider` doesn't work here anymore. The method returns a function that unsubscribes from a given event.\n\n`listenChange<T, K>(store: T, key: K & keyof T & string, listener: (value: inferred, previousValue: inferred) => void): () => void`\n\n```ts\nconst store = { count: 0; };\n\nconst unlisten = listenChange(store, 'count', (count) => console.log('the count is: ', count));\n\nsetInterval(() => {\n  store.count++;\n}, 1000);\n```\n\n\n\n### `unlistenChange`\n\nRemoves previously attached listener.\n\n`unlistenChange<T, K>(store: T, key: K & keyof T & string, listener: (value: inferred) => void): void`\n\n```ts\nconst store = { count: 0; };\n\nconst handler = (count) => console.log('the count is: ', count);\n\nlistenChange(store, 'count', handler);\n\n// ... \n\nunlistenChange(store, 'count', handler);\n```\n\n\n### `Context`\n\nReact context used for the store provider. You can use `Context` with `React.useContext` to receive store object without importing it. `Context.Provider` equals to the `Provider` documented above.\n\n```ts\nimport React, { useContext } from 'react';\nimport { Context as UseChangeContext } from 'use-change';\nimport { RootStore } from './store';\n\nconst MyComponent = () => {\n  const store = useContext<RootStore>(UseChangeContext);\n  // ...\n}\n```\n\n## 🏔️ Persistent store\n\nThere is no built-in feature to store data persistently but the elegancy of use-change design makes possible to create such things easily.\n\n```js\n// ./PersistentStore.ts\nimport { listenChange } from 'use-change';\n\n// the function returns localStorage value or default value if localStorage value doesn't exist\nfunction persistentValue<T>(key: keyof PersistentStore, defaultValue: T) {\n  const storageValue = localStorage.getItem(key);\n  return storageValue ? JSON.parse(storageValue) as T : defaultValue;\n}\n\n// define the part of root store that responsible for persistent store\nexport default class PersistentStore {\n  public age = persistentValue<number>('age', 18);\n\n  public firstName = persistentValue<string>('firstName', 'John');\n\n  public lastName = persistentValue<string>('lastName', 'Doe');\n\n  constructor() {\n    // enumerate over own property names (age, firstName, lastName)\n    // and define property change listener to update localStorage\n    Object.getOwnPropertyNames(this).forEach((key) => {\n      listenChange(this, key, (value) => {\n        localStorage.setItem(key, JSON.stringify(value));\n      });\n    });\n  }\n}\n```\n\nUse the class instance as part of your root store.\n\n```js\n// ./store.ts\nimport PersistentStore from './PersistentStore';\n\nexport class RootStore {\n  public readonly persistent = new PersistentStore();\n}\n\nexport default new RootStore();\n```\n\nThen use it as any other custom object.\n\n```js\n// the value will be written into localStorage\nstore.persistent.age = 20;\n```\n\n```js\n// or with a use-change hook\nimport useChange from 'use-change';\n\n// ...\nconst [age, setAge] = useChange(({ persistent }: RootStore) => persistent, 'age');\n// ...\n// the value will be written into localStorage\nsetAge(20);\n```\n","readmeFilename":"README.md","gitHead":"e286515a8d1a11cb8ee8a969c29c5263aeae7ce0","_id":"use-change@1.0.4-beta.2","_nodeVersion":"16.10.0","_npmVersion":"8.1.3","dist":{"integrity":"sha512-Ok9hT3V3LYH7vsdVoPkazgOEdfDMyxCWS72sUY0u59eCo83iJMLARGtz7666DU/1w6zsjsHGJswjjLdz+1nqaw==","shasum":"d2e6300d7dcc41a0ec2957036edfbbce27466ebf","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.0.4-beta.2.tgz","fileCount":31,"unpackedSize":50466,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhtER2CRA9TVsSAnZWagAAo1EP/j1JseWdItyfHD578TKq\nQmAwHsWnR2POfpAiITxtOJuiJhsGFA07/ym0tpyfYBisI+S5NtlyGDsgj3ft\nqFLs/6Ee5MDn5FijnbSV+0kWzoXAvkWued8uf2ypCuxyANAp3RDO49VJ9g1J\nPOe7x9DfJjL3+OzcRt72o6wlz386dDOFTXMfF8Mj01XNhyGS77Ko7xcPNWCs\nriqY+MAllpe1EgM0nY/A+GbNCJH/ybDP7UPRlPlJ3rLk3gFD3asRl0Po9/Ku\ncek0vdbNF7AxWgm5+kTDub6Ffo2EX/KPkG/IliYO2vMprEFH59wXmnTaMToR\nBQ6dhJKFpDOwUQqSwnlFNtIYrUwjMGSmgf//0ceDjrdjeaOviliuXD5UujBQ\nDVZ1sNqsXUOqG7LOyleGdYIAgPqvmLiUTNpWOcJZnC9t6TqK5l2vWyXTHHAM\n01BCbaBwWkyHLC9lXlAupsCz/CvwcTEKOrWp+iT3Q4gjLpcf9n3tHuOJiSoF\nk0tQCL9JIuyPqS68ek2BN3WXgMF8FpjxQraKck290ItFkJlFbCqvwVFjW/Q3\nnJ9GGLK9JzOk0uQvX3FCqRgQH/vEPbZjxQd6K3jpXc6XT8lSpdox9d9aANvX\nfIYn5m0pQyJa0cXdQQyGs7rQLvUyjrQYXVcZe/ESv1mILo9r3s4hGJ84LFMc\nub+c\r\n=G32t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWBtZvLZPLJMWtZ19tkfL91pwJacl37PhqTUZKsvcwZAIhAK+nmAV0qqHibPQ+zaIFNI1XmHE9Vi991LMYOe6bWOj/"}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.0.4-beta.2_1639203958081_0.45169667530681523"},"_hasShrinkwrap":false},"1.0.4":{"name":"use-change","version":"1.0.4","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^7.0.2","@types/jasmine":"^3.10.2","@types/react":"^17.0.37","@typescript-eslint/eslint-plugin":"^5.6.0","@typescript-eslint/parser":"^5.6.0","eslint":"^8.4.0","eslint-config-airbnb":"^19.0.2","eslint-config-airbnb-typescript":"^16.1.0","eslint-plugin-import":"^2.25.3","eslint-plugin-jsx-a11y":"^6.5.1","eslint-plugin-react":"^7.27.1","eslint-plugin-react-hooks":"^4.3.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^17.0.1","react-test-renderer":"^17.0.2","ts-node":"^10.4.0","typescript":"^4.5.2"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"6c81c93059595f62f618dfc28cb597c76f9d2d33","_id":"use-change@1.0.4","_nodeVersion":"16.10.0","_npmVersion":"8.1.3","dist":{"integrity":"sha512-ZxTwlhzKKQ5/UjpG/lSlG2SVY2uNcFPqibj99YJyEdQxZb3SqH5KI89pfRqRgtbh4buPFHHul9KNBhEntb/pWA==","shasum":"4a3f7108b357e90103a7585a1cdf3d513e8e2e8c","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.0.4.tgz","fileCount":34,"unpackedSize":54154,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhtklZCRA9TVsSAnZWagAAonAP/1rV2XI0IpunsfjdlBfX\nHHkox/fQKd0Hp72sGpctr/oZg0AkqBu/VM0iQJSJLTKuU0hztRs4ua8NGA/Q\nyGP21oBBOcfpmi+XabRds1KserzdCwnZ2IePU1kLtrRV0C6wNh6Ezzkr2J6a\nRlgeM95dHh9LV2w3gcT+O3AL3XppRue6InLQYRZnR2Og6J9wVMNtnLtNEqTm\ntbTY5KoQcAzi0B+BRJO6APhELf12SHXNj5eg2q/6oIpkpyoAMPuR3UubhCHC\nWRsQ6aswP5fTZYE2buhPu7rrLthfXvoFVUaQLTN8wRvOEabQUM4SCaOBGdEt\nwU9vG/wirCWS/toPLJLR9KDGYZEAZU/EfN85eXloTe6zx3e48i+QGEC6M5Zl\nxQEAbtqzRVnMoh11uorBP+jz2OVemqUbviz8KiS75wMGGe7wx3/o19PwhgK2\nasxPgehj0GtKVG8+6D2yoXMspdvPHbixNBRs0oN93zXiKBkv8N+JmngPlHDP\nKP5o+AHqIYhToyUtcOvB8KrHroO5txCpgEAa7Ual/bJaO8eLkUOt9M0JcM8h\nSrxvPD67CBV1nagjyH3EG3sFGWv4djUtdfG55kB05EDFDkh+Pvn1JrOpFThS\nd9F5RskJJ54ZPwUbw/674JfPmVRX5bP2fOdOnuqOke8p3uzIskym3wk380Qr\nNBHO\r\n=Tm0O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYwstDrJw98UDicy51oNCUyK8flV/HGb6rS3lhApeVuQIhANzOcjz1Uw2bG5pJI1u0zhWb8JkQvi75g3C9hBMj/RPb"}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.0.4_1639336281794_0.33419542381642575"},"_hasShrinkwrap":false},"1.0.7":{"name":"use-change","version":"1.0.7","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^8.0.0","@types/jasmine":"^4.0.3","@types/react":"^18.0.12","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/parser":"^5.27.1","eslint":"^8.17.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.0.0","eslint-plugin-import":"^2.26.0","eslint-plugin-jsx-a11y":"^6.5.1","eslint-plugin-react":"^7.30.0","eslint-plugin-react-hooks":"^4.5.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^18.1.0","react-test-renderer":"^18.1.0","ts-node":"^10.8.1","typescript":"^4.7.3"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"0c3c2a3acc97a7092c66f152f6a839e0e434e204","_id":"use-change@1.0.7","_nodeVersion":"18.3.0","_npmVersion":"8.11.0","dist":{"integrity":"sha512-b4ivl/8IqiPF5PUGkqxULrGHxtYg720r/zGg9nh1D2DpMuBI99ix+PtnwPSzbuyXE6iYXjFehPJs2siwFDzgVQ==","shasum":"8e3a88ff8a0867b4335a4517488fbd99bce90e7d","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.0.7.tgz","fileCount":34,"unpackedSize":54439,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDQ7ICXLvnDCMlmnN/+hBo/E70xr8hL6jwR/wXiCeoqQAiEApXx0g32e/Xq/Yq8qoeejQFwFtgZkid9mhEzviEIMfoQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZpz3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpdEBAAggt9Yg0ovkie3a2LyGD5x+2ap+ETajRDgjjwgHzwMfNe85G9\r\n9aR3PNTkJZBpP+OscoPiXO0ihJMEiXHDBx0xMMnjB5OQrOswA7HhElbY1ExF\r\neVTpcOeiRMtuelx3aPdgZb2gnnqpv6YlVBNOS9Xx8LytRx/hv6KzkoSTDJmq\r\nhg8+U85SAvjkWpXIvHqW+1fSLr0mgHVcviPZrUG3JdPZZSD/QjbycUeyDwjy\r\nt1urRnmrWanoIX9Bl/oIM/ipU0wiZ4CPmZDJCRXmR0FAOMSZ/yFuDoKhtIqx\r\nFEe0htRdHR0sBfKhR87DZgFM0tGJs0TXNtir1x4Az902i29TooXILYfmIjcm\r\nLw8b+/6Y2kNcsSlo3S6/3sw0pq/SE23UZ6dntRBkwjW5scyaZ53cREKOCDP9\r\nkZEYJoAGXZI9V1dx0l1BcLdfGmH+MgEF335esUkpAlkh26lcAjW+3fXk6Dsg\r\nBCRxXDXANIM7UOo9guMJvfU8H6cpAVR4ZowvC7db2ShpStq2uuXSAz4VNxCb\r\nB+ehDNfCi8V6LzwxzaYriTwn/2z+9/o1gplVzjRABQdWm6LKg0Rd4C3CXhys\r\ntNnfDUd2Tc65L2lsVw5Fvq03O+RmCnRCHfMdGZQ7ZcChPwIe4O2SbXC57hG0\r\nkW22l7qR7U02O7or4HkB3vabIElWx+WaS2o=\r\n=rCMG\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.0.7_1667669238853_0.8243627192300442"},"_hasShrinkwrap":false},"1.0.8":{"name":"use-change","version":"1.0.8","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u -x jasmine --timeout 800000 && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^8.0.1","@types/jasmine":"^4.3.0","@types/react":"^18.0.25","@typescript-eslint/eslint-plugin":"^5.42.0","@typescript-eslint/parser":"^5.42.0","eslint":"^8.27.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.0.0","eslint-plugin-import":"^2.26.0","eslint-plugin-jsx-a11y":"^6.6.1","eslint-plugin-react":"^7.31.10","eslint-plugin-react-hooks":"^4.6.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^18.1.0","react-test-renderer":"^18.2.0","ts-node":"^10.9.1","typescript":"^4.8.4"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"c21b18c5fd8b89512c7f429784921ec3479ff2f2","_id":"use-change@1.0.8","_nodeVersion":"18.3.0","_npmVersion":"8.11.0","dist":{"integrity":"sha512-RQLEfYu383r5mG9sq8oqQV6WTtmgYeI9vWqgK78lDG6LHmFgU52kbo170dKdBAOO87VQBCkLFN0f++a7ELUCjA==","shasum":"781f34495c093134990c82f310b0bf657fcf9bf5","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.0.8.tgz","fileCount":34,"unpackedSize":54778,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH4bDVfLlvG/RFF/A6mtnIzfhOJc05UuUGyAFVwguC2mAiA15o4K42kK5zAwiUdVYtWG8tdjE2+hV3PfMkCqb60Vqw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZ8NVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrg+A//dNYpuWZQh+w9k4H4yjBwY/EJcEgO6NTQa+clTlthdCzHuvU9\r\nj2nsRsf7lKuYLKNkrH+PFH7C/1g+5HVWk7j7dD/ixoBd85qp6T+0N7LSxc1N\r\nrd6HxRMdeeNeZk0abrfgOo2gflvyESh+iABHYvBk4TXeV0i/pgnwze9F4Yxg\r\nEZRwz/AQrGyOlNNhENIk3lxdMnagP35N3CMBEcwUW9dBpfEjCR5rik5S3+dR\r\nitEOQfwPsrsmVDCkcS8ztpbhxHyR6sxwZwUun8SGqj0A5kCxqQDPC7oB/FHW\r\nqugguSMIhrSJat8fVqMhvRP52ypEqFSAcOUAEDxk8mMuobmp4K2tGQ98kS64\r\nC29lR3GFYNGSO9IlusL4wqIg6J7s7aC10Xbvmomfy6Z0KKhmxLp6HZrFyJmZ\r\nsLlC0NBOdBh5E94yIp2sWiZLhkLXU7Hev+THkbAYzULyDbxqaHeZaMuNvWSY\r\n9U6GFMIwu5PlTg+OnXRH+mkvDm+6V9kgZYFXmeA5x0uzGv3VvveEj7TAIONH\r\nQETsEXopNx/NfXX8gt6TDQ+mscDfjXVlKo+m+QIWKxa22VM3ixuGVG1aj0t6\r\nWKmDnerbjn1jF6g8IZ3ZzBjSNKiv5NCga3h47kshXs+PmgmoMchp6yaLdaq/\r\nXLhRyDTbcLimqFtr61KAT4pzpRdeWAC0FoE=\r\n=WDnv\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.0.8_1667744597408_0.9443728211528677"},"_hasShrinkwrap":false},"1.0.9":{"name":"use-change","version":"1.0.9","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u -x jasmine --timeout 800000 && npm i"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^8.0.1","@types/jasmine":"^4.3.0","@types/react":"^18.0.25","@typescript-eslint/eslint-plugin":"^5.42.0","@typescript-eslint/parser":"^5.42.0","eslint":"^8.27.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.0.0","eslint-plugin-import":"^2.26.0","eslint-plugin-jsx-a11y":"^6.6.1","eslint-plugin-react":"^7.31.10","eslint-plugin-react-hooks":"^4.6.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^18.1.0","react-test-renderer":"^18.2.0","ts-node":"^10.9.1","typescript":"^4.8.4"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"67704f26c0dd685b49f5e81b915371d98782dec5","_id":"use-change@1.0.9","_nodeVersion":"18.3.0","_npmVersion":"8.11.0","dist":{"integrity":"sha512-kkoWW+b3BnX2b//4dMDNqdc/HBVjElN6cI1vKD0azGVCUcygYwNAfe/s0gVBGes1vR7QoJL1ECOSVpO5WbIw1g==","shasum":"37e9c216c31693dae4936e9c31bab820d3e76528","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.0.9.tgz","fileCount":34,"unpackedSize":54778,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGwUrqhtsAFAEdFpgfm/NR95CA5UWlGLhj3uDFesm4LCAiEA51UxrYNxwgL+lOCylR6TDpNdR46uM+qKUHw9DUW0lrc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZ8QdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoouBAAjg5rWb5Eu6P94b4bUfq7tH4paWat3Gf/hEjjgfLNIogo7mRo\r\niNyVe9qc1yLXcM0jRnjRjM6TxPREflDr3Jd9I8NN/mR38yIRntXDmC9G0rOz\r\nrBpNyf7nIQB5h7dToD4xtlYNnfCotD/w9Q5jfGtLgpLYWE7BzPq0HPP+/0xb\r\nZoPlNai8kRjGYEAOdwHZg4StBlrQsBiq0YTOCO4d7ynPLOzJ9n45AKd5qsp2\r\nc9fzbrYeTmbowiuUy6E6TSeizyR4FisxcK9rsWDeBIgzhwcjajYqfL2I2aKZ\r\nrYA5PrwRgZf1iIx9lZTHsr6kHs9igjORemNztNJMqcqYeVEoh0aZget11O+O\r\nIjM6dRqj5EcBdHFh1uqhNleNkqjQKJ5WzTQi+o2woZOApymiIY3y2yzT4W+b\r\n82qz54yoQVxcNhU6ar+O/KhErw5Tom44RONVBvqolnxW3IUP55gBNIXC5QLu\r\nln5O86Z6HVBVtIyi7soGJ3e3oQSUG6WXT1Z2pQwt6kexwigUEEIgNAvQZz5c\r\nB+R5x+qDVtgNnShtr8mguQmZSSTkpy81GH7QwceNcG33aS+UI+D6G5f8P0zS\r\nckecsw3VmSTli5mzSnJqVlksTC79ePNeYaiDpWpwVApX1Dpcc1tLVBQlM55K\r\nIO3ujbmuXc1HNKv0qyNKySmjCQXTgi6LsM8=\r\n=AHJP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.0.9_1667744797684_0.6300769553317933"},"_hasShrinkwrap":false},"1.1.0":{"name":"use-change","version":"1.1.0","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u -x jasmine --timeout 800000 && yarn"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^8.0.1","@types/jasmine":"^4.3.1","@types/react":"^18.0.26","@typescript-eslint/eslint-plugin":"^5.47.1","@typescript-eslint/parser":"^5.47.1","eslint":"^8.30.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.0.0","eslint-plugin-import":"^2.26.0","eslint-plugin-jsx-a11y":"^6.6.1","eslint-plugin-react":"^7.31.11","eslint-plugin-react-hooks":"^4.6.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^18.2.0","react-test-renderer":"^18.2.0","ts-node":"^10.9.1","typescript":"^4.9.4"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"03502f8b9df98658eafb9ca384e4a9ee5356b64b","_id":"use-change@1.1.0","_nodeVersion":"19.3.0","_npmVersion":"9.2.0","dist":{"integrity":"sha512-WF5gRYed+vullLeacz6UZxofRNtK5jRFv8B10aotxxhlxAhHszvnydokUGE7gC/yLEiXsvTW20kdVPSmFGFTtg==","shasum":"633492b1b51d720886d200392f9ae35cd005a9a1","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.1.0.tgz","fileCount":32,"unpackedSize":54200,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0hSbMLvgYbBfJM3BxvxwkvumcgOUCoo0Ny+i/jADQVAIgDUmXoJ40SXnodf5JEYuQ5QtdCvnq3KgsV57AM7pDXQ8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjrEaVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpTDhAAodduVkaecGnP3Q2nObk59p6rw2FGwJTXOy3oNawSymLHpQwh\r\nAiynxV1c4vWNSFiejnruB5JaXywmdf72UVR/6nSDcBNsgWIlxg3mZUZz5xRj\r\nIcJtL8qRdW/5Hyok/Kk+CpnACcSSq6pbeyjJQE2hPghdkLbyfwrZ+UTk4SPB\r\nqQ33l7tT3+pYDog8Ba1aWLqJXDBt4T0iHFt3yh2xhBna8Z6qfwTCP1vbRt/S\r\nmlGc9+u5y0KpMRsyuaxAYO6BCOIujrLZcGtOyXiI2bvsl8p4R45de13xhObL\r\n2VZyY1ssXo/sZC56ZNOkqWnljxSi2p4BDeLt6rjldYsYGusxvA2f8DZcImUX\r\nMYsl/6deeIPycurTQ+ZG9DySyTIuEtx6PDDHoPlYKPVnuVzGAoeJSxur5zZz\r\nG7GN+pfwFYOs50ujm4q6DaxvbQChbpWMABjT4D8EiJJsjp5snlHyJquuAwCR\r\nNlZlTW3cLM6vjkrKMZiBTh+1AnBLWKBn2otQLrACVd+4D1Zd8Ml5uucFeXZq\r\nmAUnpDn0ZX0vajNPePejOAILNHCzooakS7kzqlebNZIkOzfxBJS3kq7n5hn5\r\nwxltW38/2t2pFHz7FKOpx6D90L5YPy/YjHfrRDBCv0GbhJA1gMR6f4yO0O48\r\nif1dYA6VzmeQuyZ77CCP7CY1J32dZkHuFJs=\r\n=/qV9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.1.0_1672234644995_0.2666099658273804"},"_hasShrinkwrap":false},"1.1.1":{"name":"use-change","version":"1.1.1","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u -x jasmine --timeout 800000 && yarn"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^8.0.1","@types/jasmine":"^4.3.1","@types/react":"^18.0.26","@typescript-eslint/eslint-plugin":"^5.47.1","@typescript-eslint/parser":"^5.47.1","eslint":"^8.30.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.0.0","eslint-plugin-import":"^2.26.0","eslint-plugin-jsx-a11y":"^6.6.1","eslint-plugin-react":"^7.31.11","eslint-plugin-react-hooks":"^4.6.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^18.2.0","react-test-renderer":"^18.2.0","ts-node":"^10.9.1","typescript":"^4.9.4"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"5b681c7e60ee9855b0fbf3f233f6e67ce0b4e203","_id":"use-change@1.1.1","_nodeVersion":"19.3.0","_npmVersion":"9.2.0","dist":{"integrity":"sha512-CvQPW9CJzJJYfW12AycXI+XqEUaEblPcurDoIxbNDHZ/YGqKa/U5xAtpF/EPNiYTmjJBne+qtsRSVKDEKv7dyQ==","shasum":"99d3b1fabd1b47c1275e5cdd4f9b331bf069861c","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.1.1.tgz","fileCount":32,"unpackedSize":54250,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsaWLmiMAan2NqMEpLzDP/U4lKhVTO7uDKxvWt3/F3UwIgPqAbQ4PuWEtTXwwF4E3W80+L8/SBcE+RR4HNATJ+jl8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjtDLVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoapg//YTvuwqJKk1Zwv9GMYhF9fVBcu6tA7zo2iSrEKRHrERtZ5Mch\r\n2gI2SBrScYFwTUYDSN8ikoP3o/IFPV94TZsldY48OQ3TDrsAU9w8z5f9pmL9\r\nbqJq82jj2vF23lxclGAQ46UcKZyBocUQqcTW9kLPN4k2G0hgFYSbe78/G9Gh\r\ncwekTs/4wX8AUHe3nuXsWZFPLit3s5Tc35niDGAcs8xyB5tBJsToBcYPrWGJ\r\n2kBqxWzQKzK06VzrOq/ZBAdpsxnVzu/UjkEXToAR74XwJXY/U/kT0mdkYzQk\r\n4wQllUclAha/d1oKjDHUodcwAr5MbnDxYuTb1pBxb3DVaZuGvZNoRZugdVGB\r\nXYufvNdqR2XHb80Bjmeq0U0Djka0jVg7W1WQwyOZ3eFtNtcgpEXRGzrxYq8J\r\nPJZoXtVivXfDcml+v57GV4xdf6xTk6WK1vVHGVk3Sjm/VKsYXHs01g0EjB6D\r\n3Tp/8atCANUmOwQpaiSbijnCdp7EOA7JXKIKkZFz4+aJ/+C4rGCtX34v1+mE\r\nuJQy2jCB9eDUHGcb/PbMm8GiTlFywvPWW/NSE0C/Vufm809EezB2jftRkSKv\r\n6qdjUm6TDc27h8FQ/6dhILkl89m4f8U2U/Qf0N+4QBIKzldguUunzorux3+P\r\nVloYA6zQdE73ATxF+tpBDrE3NUy7MILFAtU=\r\n=Oq/u\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.1.1_1672753877405_0.08188763778104757"},"_hasShrinkwrap":false},"1.1.2":{"name":"use-change","version":"1.1.2","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u -x jasmine --timeout 800000 && yarn"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrey Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^8.0.1","@types/jasmine":"^4.3.1","@types/react":"^18.0.26","@typescript-eslint/eslint-plugin":"^5.47.1","@typescript-eslint/parser":"^5.47.1","eslint":"^8.30.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.0.0","eslint-plugin-import":"^2.26.0","eslint-plugin-jsx-a11y":"^6.6.1","eslint-plugin-react":"^7.31.11","eslint-plugin-react-hooks":"^4.6.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^18.2.0","react-test-renderer":"^18.2.0","ts-node":"^10.9.1","typescript":"^4.9.4"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"171e14cbab228166f5d83e8a6440a308a7054fb1","_id":"use-change@1.1.2","_nodeVersion":"19.3.0","_npmVersion":"9.2.0","dist":{"integrity":"sha512-9cvyxZ6sol2E2cji/RVkVOTVeup8m2sBb9Et911S5ozZSdulplWfAbrK4TXu8S7XEvN1OTVHki5pjPFs7ZoIaA==","shasum":"5e61456ea117585cfd32fe3e5ade2dfbfcee5ecb","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.1.2.tgz","fileCount":32,"unpackedSize":54292,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCw1yWIi1kP3jQkj8QKMnswXGgmTHZs1TTjGERcR1nv2wIgQjMMVDCo94UE8SReWuyfbPHC7Wz0uCkPvg6haszwFtE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjtDucACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoaUA//XOIBmsyE5KmrG//3ZqKtbhaSGM57yrMq0ygMkuSDE/37yOJ+\r\n/OMzeSPyqv7HGahVK4kTOukpXWz/GvRiGJOkPcTfrkL8IxFvU49Iw1XrHBhc\r\niNe0peKBP66juWh6pmCGOw4LwgydTOqMnthMSMdbk65Yit5b3iYV6WMzujmJ\r\nPz4ogYHpZmKBNkub23Ct73ljaQQ4P4zFH/Vppru2DMJke0AOQ56Brtf5I3qH\r\no5jkdODAYO9zs9Suu175NVVjaCvleh+J+1s192GESBp0PBY5I2ORZCghExRB\r\nbGx+bO6b5W3tUHU5ZqPltEon0OUKiRoU0R0oshbnnVhOEG+4x5Z9T75XmfF0\r\nKLuSX3ufdbT2qqZcFkcKL6sr9/9wHDIaqHraLbq18miLKxZUSKFyyZZsi9Hz\r\nzx/FUiF30qxXZqoFd8jsqSgTWIwalfjHpPX439kLt74Mza+yi8yIUFyB/2im\r\nFWU4NyGDV1+pWXZTl88e3gGVoiExpO0n9toJ4Pdq7L4PudBxYtYBUx1/JP6M\r\nDtPWoZHOF6PMBIXgY7y/MW7LZInatNQgsM1YaS8YBC6HFlft/cJwSrsTqR8v\r\nnD5yN3PfmqNzaMEhqL0VExZglbHFdKlGbpJgfBFmjTrZi36R8mG4d9Z+SZr/\r\nQlMktRH8tijknhztSZowpSJqjPpGko0WmlU=\r\n=xc2R\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.1.2_1672756124190_0.9126704531735232"},"_hasShrinkwrap":false},"1.1.3":{"name":"use-change","version":"1.1.3","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u -x jasmine --timeout 800000 && yarn"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrii Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^8.0.1","@types/jasmine":"^4.3.2","@types/react":"^18.2.7","@typescript-eslint/eslint-plugin":"^5.59.7","@typescript-eslint/parser":"^5.59.7","eslint":"^8.41.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.0.0","eslint-plugin-import":"^2.27.5","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-react":"^7.32.2","eslint-plugin-react-hooks":"^4.6.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^18.2.0","react-test-renderer":"^18.2.0","ts-node":"^10.9.1","typescript":"^5.0.4"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"f4673fe7f8b5a442718deb5dc25d905d9da6c097","_id":"use-change@1.1.3","_nodeVersion":"19.7.0","_npmVersion":"9.5.0","dist":{"integrity":"sha512-gtE872E6A+5Jrr17aKhKXnf/8KZpQYNMhJEgsu0fAkJ/m6ony3+i7NxEs23NQG3iY2U43RYug8qwG8tb+E879w==","shasum":"d90ed20a15f27a61a67f8b5853e894264287248a","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.1.3.tgz","fileCount":32,"unpackedSize":54337,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8dVEZT2PNl5+eTh4rH0pjGxeburFx2e/hQ8yNQfEINwIgJQNohRZJcA1yJeQ2HPB3zWa1uf5b9AnM8E/smMy18VA="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.1.3_1685232874541_0.8706004948857391"},"_hasShrinkwrap":false},"1.1.4":{"name":"use-change","version":"1.1.4","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u -x jasmine --timeout 800000 && yarn"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrii Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^8.0.1","@types/jasmine":"^4.3.2","@types/react":"^18.2.7","@typescript-eslint/eslint-plugin":"^5.59.7","@typescript-eslint/parser":"^5.59.7","eslint":"^8.41.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.0.0","eslint-plugin-import":"^2.27.5","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-react":"^7.32.2","eslint-plugin-react-hooks":"^4.6.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^18.2.0","react-test-renderer":"^18.2.0","ts-node":"^10.9.1","typescript":"^5.0.4"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"ea5decdc4924ae01a21c10783c6a798290cd91e7","_id":"use-change@1.1.4","_nodeVersion":"19.7.0","_npmVersion":"9.5.0","dist":{"integrity":"sha512-XMlWmf+UBjqneWVG8ktWxTbN29LtZbNl0DnKbhG5vMzEARMhnpVUKEjps283zMBOhuxTXQz76eaJbwoBKN452w==","shasum":"ce5ce5ea723d1f24447b638f48296d9531de3a77","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.1.4.tgz","fileCount":32,"unpackedSize":54412,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAR3sBuyRuB7FbslHZhz9PTSDZ/yP8itWMigPEMxZiJPAiEAg8NIegWRgRSTM7SuirHbX0jIKZOPWxxnPBw6/ib6RC0="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.1.4_1685233401106_0.9201063842400137"},"_hasShrinkwrap":false},"1.2.0":{"name":"use-change","version":"1.2.0","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u -x jasmine --timeout 800000 && yarn"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrii Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^8.0.1","@types/jasmine":"^4.3.2","@types/react":"^18.2.7","@typescript-eslint/eslint-plugin":"^5.59.7","@typescript-eslint/parser":"^5.59.7","eslint":"^8.41.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.0.0","eslint-plugin-import":"^2.27.5","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-react":"^7.32.2","eslint-plugin-react-hooks":"^4.6.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^18.2.0","react-test-renderer":"^18.2.0","ts-node":"^10.9.1","typescript":"^5.0.4"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"9f0c2185e5a943f217de407fb4ee199c0f52461f","_id":"use-change@1.2.0","_nodeVersion":"19.7.0","_npmVersion":"9.5.0","dist":{"integrity":"sha512-9d2BAqgVcygV4vnVUUJPLMCgUt5N5dQRGiieLtzCH53sSb9Yp/rjkXHpsNj7zUO7wasDTu3W48TYTYrUsfoUWg==","shasum":"0090691b178026c1e6564b7e2854ecbc62778f23","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.2.0.tgz","fileCount":32,"unpackedSize":54976,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAF5YxbX9b1PFtWNxTXxWJzSd3dvwxbP1+qTvh6Z4m9WAiA/eN0xP9uXdq9PcD9qKDkVyXkdv+ddo4/RDFvWRdBPbg=="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.2.0_1685720175493_0.06733022767091068"},"_hasShrinkwrap":false},"1.2.1":{"name":"use-change","version":"1.2.1","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u -x jasmine --timeout 800000 && yarn"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrii Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^8.0.1","@types/jasmine":"^4.3.2","@types/react":"^18.2.8","@typescript-eslint/eslint-plugin":"^5.59.8","@typescript-eslint/parser":"^5.59.8","eslint":"^8.41.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.0.0","eslint-plugin-import":"^2.27.5","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-react":"^7.32.2","eslint-plugin-react-hooks":"^4.6.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^18.2.0","react-test-renderer":"^18.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"peerDependencies":{"react":"*"},"types":"./dist/index.d.ts","gitHead":"f8a79cdbb28737bb617b8d2fc5e8251f8657ae9e","_id":"use-change@1.2.1","_nodeVersion":"19.7.0","_npmVersion":"9.5.0","dist":{"integrity":"sha512-pjV5etH4pClWtkpaV7AuLe8RVeVLSV5T9f0C+WWCH4ro8YogngNtQzii0nd0huRlq04YTchYX0QYWAg/pFpBQg==","shasum":"e767b4738ad27e786af250527b54cf8545669b77","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.2.1.tgz","fileCount":34,"unpackedSize":56434,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCx53TCiHJkbeqoGubq+gUH+lFzCF/HuCD33hmaR/N7iwIgIfSOmb2q9qoeBwdfWqo+DJPb5Nkrh1taww6MlsnBk60="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.2.1_1686666683726_0.055231733800446436"},"_hasShrinkwrap":false},"1.2.2":{"name":"use-change","version":"1.2.2","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u -x jasmine --timeout 800000 && yarn"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrii Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^8.0.1","@types/jasmine":"^5.1.1","@types/react":"^18.2.29","@typescript-eslint/eslint-plugin":"^6.8.0","@typescript-eslint/parser":"^6.8.0","eslint":"^8.51.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.1.0","eslint-plugin-import":"^2.28.1","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-react":"^7.33.2","eslint-plugin-react-hooks":"^4.6.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^18.2.0","react-test-renderer":"^18.2.0","ts-node":"^10.9.1","typescript":"^5.2.2"},"peerDependencies":{"react":"*"},"_id":"use-change@1.2.2","gitHead":"702bead8281d775b275bca80c432c967bd97f30a","types":"./dist/index.d.ts","_nodeVersion":"20.6.1","_npmVersion":"9.8.1","dist":{"integrity":"sha512-YcPaF9o+MDAzLhAKfV3DA3hFX7xwfYVM69CVD5Dn3yUzo3Q57spQjwV6tjTBoT0mJ1eXQBFkzCE2F2nDu0KziA==","shasum":"84959c8c4db22b48506f8b893604184b036fb56d","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.2.2.tgz","fileCount":34,"unpackedSize":56441,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCV5tS7aYlNNG+EfP/hLOILSjrqgXR6jIpFyYvA1Id7IQIgQjVKUEgDa4ECdYwzfiw7ZDqh+6weHAhC3NHkFGAFsL4="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.2.2_1697725862811_0.7478948816865707"},"_hasShrinkwrap":false},"1.2.3":{"name":"use-change","version":"1.2.3","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u -x jasmine --timeout 800000 && yarn"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrii Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^8.0.1","@types/jasmine":"^5.1.1","@types/react":"^18.2.29","@typescript-eslint/eslint-plugin":"^6.8.0","@typescript-eslint/parser":"^6.8.0","eslint":"^8.51.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.1.0","eslint-plugin-import":"^2.28.1","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-react":"^7.33.2","eslint-plugin-react-hooks":"^4.6.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^18.2.0","react-test-renderer":"^18.2.0","ts-node":"^10.9.1","typescript":"^5.2.2"},"peerDependencies":{"react":"*"},"_id":"use-change@1.2.3","gitHead":"b572156dd539de7356a00e9915677f2453c860c6","types":"./dist/index.d.ts","_nodeVersion":"20.6.1","_npmVersion":"9.8.1","dist":{"integrity":"sha512-eB5PFRSZAvIPeU//q+Y524dGyyoj5oIT4RHAflaLTFNfOjuZ8iEs9e8Cd2N1bYHZHu+j6scZ88GU7GyeLImS0A==","shasum":"f82faf55cd7159290be98e42ee564ec692638f1e","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.2.3.tgz","fileCount":34,"unpackedSize":56441,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDAVmvFCzoyR3j0fa0ZUnPylls2Yr+uaAEozeKnxyXI3AiBEtrVytwIUMllGGFF3Ejil5nSgjkpOfPRBgR0I5aQ2fg=="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.2.3_1697728102204_0.17004831604795734"},"_hasShrinkwrap":false},"1.2.4":{"name":"use-change","version":"1.2.4","description":"Application-wide alternative for React.useState","main":"dist/index.js","scripts":{"test":"npm run unit && npm run lint && tsc --noemit","unit":"jasmine-ts --config=test/jasmine.json","build":"tsc","lint-pure":"eslint . --ext .ts,.tsx","lint":"npm run lint-pure -- --fix","postpublish":"node post-publish-test/post-publish.js","patch":"npm t && npm version patch && npm run build && npm publish && git push && git push --tags","minor":"npm t && npm version minor && npm run build && npm publish && git push && git push --tags","BREAKING-major":"npm t && npm version major && npm run build && npm publish && git push && git push --tags","toc":"./gh-md-toc --insert README.md && rm README.md.*","upgrade":"npx npm-check-updates -u -x jasmine --timeout 800000 && yarn"},"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"keywords":["hook","react","redux","mobx"],"author":{"name":"Andrii Gubanov"},"license":"MIT","bugs":{"url":"https://github.com/finom/use-change/issues"},"homepage":"https://github.com/finom/use-change#readme","devDependencies":{"@testing-library/react-hooks":"^8.0.1","@types/jasmine":"^5.1.1","@types/react":"^18.2.29","@typescript-eslint/eslint-plugin":"^6.8.0","@typescript-eslint/parser":"^6.8.0","eslint":"^8.51.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.1.0","eslint-plugin-import":"^2.28.1","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-react":"^7.33.2","eslint-plugin-react-hooks":"^4.6.0","jasmine":"^3.10.0","jasmine-spec-reporter":"^7.0.0","jasmine-ts":"^0.4.0","react":"^18.2.0","react-test-renderer":"^18.2.0","ts-node":"^10.9.1","typescript":"^5.2.2"},"peerDependencies":{"react":"*"},"_id":"use-change@1.2.4","gitHead":"6a2e5795ce9bad49351bf33f3e72bc89ba6bde45","types":"./dist/index.d.ts","_nodeVersion":"20.6.1","_npmVersion":"9.8.1","dist":{"integrity":"sha512-DhAUIa8b6ZrloLvkN+DAtHWPC3x47YWp+mWOSf0vRtv0HCRbffOIUfJVerHzR0VnJtzCNF3wYjSLU+KCEEKmqQ==","shasum":"015597c438230d65a2ca63004c5db8b9ac6347d5","tarball":"https://registry.npmjs.org/use-change/-/use-change-1.2.4.tgz","fileCount":35,"unpackedSize":56289,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE4ZePWucEpgJpRPO+hZUTgi9cef7zZpvcATvn6JZIY1AiEAtoEHRGb7lTXFPFgI2F8xniiCLD8Tqj2yJ0CMNYOf2UQ="}]},"_npmUser":{"name":"finom","email":"andrey.a.gubanov@gmail.com"},"directories":{},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-change_1.2.4_1697729034327_0.5011973043605371"},"_hasShrinkwrap":false}},"time":{"created":"2021-03-21T13:30:52.831Z","0.0.0":"2021-03-21T13:30:52.938Z","modified":"2023-10-19T15:23:54.845Z","0.0.1":"2021-03-21T13:38:21.815Z","0.0.2":"2021-03-21T13:44:09.624Z","0.0.3":"2021-03-21T13:46:01.039Z","0.0.4":"2021-03-21T13:59:06.973Z","0.0.5":"2021-03-21T16:22:15.244Z","0.0.6":"2021-03-24T12:41:44.394Z","0.0.7":"2021-03-31T15:29:08.984Z","0.0.8":"2021-04-23T16:55:35.629Z","0.0.9":"2021-04-27T07:24:00.066Z","0.1.0":"2021-05-23T12:00:41.417Z","0.1.1":"2021-05-26T14:33:58.617Z","0.1.3":"2021-06-17T16:15:52.983Z","0.2.0":"2021-06-17T20:11:23.957Z","0.2.1":"2021-06-17T20:13:38.900Z","0.2.2":"2021-06-17T20:17:08.855Z","0.2.3":"2021-07-03T10:56:41.077Z","0.2.4":"2021-07-05T09:09:30.733Z","0.2.5":"2021-07-05T09:22:53.610Z","0.2.6":"2021-07-05T19:58:12.124Z","1.0.0":"2021-11-08T17:16:11.936Z","1.0.1":"2021-11-08T18:08:05.712Z","1.0.2":"2021-11-10T10:13:58.501Z","1.0.3":"2021-12-06T20:53:55.773Z","1.0.4-beta.1":"2021-12-09T06:59:31.510Z","1.0.4-beta.2":"2021-12-11T06:25:58.260Z","1.0.4":"2021-12-12T19:11:21.943Z","1.0.7":"2022-11-05T17:27:19.031Z","1.0.8":"2022-11-06T14:23:17.546Z","1.0.9":"2022-11-06T14:26:37.861Z","1.1.0":"2022-12-28T13:37:25.199Z","1.1.1":"2023-01-03T13:51:17.668Z","1.1.2":"2023-01-03T14:28:44.958Z","1.1.3":"2023-05-28T00:14:34.694Z","1.1.4":"2023-05-28T00:23:21.301Z","1.2.0":"2023-06-02T15:36:15.655Z","1.2.1":"2023-06-13T14:31:23.886Z","1.2.2":"2023-10-19T14:31:03.065Z","1.2.3":"2023-10-19T15:08:22.397Z","1.2.4":"2023-10-19T15:23:54.646Z"},"maintainers":[{"name":"finom","email":"andrey.a.gubanov@gmail.com"}],"description":"Application-wide alternative for React.useState","homepage":"https://github.com/finom/use-change#readme","keywords":["hook","react","redux","mobx"],"repository":{"type":"git","url":"git+https://github.com/finom/use-change.git"},"author":{"name":"Andrii Gubanov"},"bugs":{"url":"https://github.com/finom/use-change/issues"},"license":"MIT","readme":"## use-change\n\n[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-)\n[![npm version](https://badge.fury.io/js/use-change.svg)](https://badge.fury.io/js/use-change) [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/) [![Build status](https://github.com/finom/use-change/actions/workflows/main.yml/badge.svg)](https://github.com/finom/use-change/actions)\n\n> The most minimalistic React state management library on the market with [zero dependencies](https://bundlephobia.com/package/use-change) and `React.useState`-like syntax\n\nWith this hook application state is defined as a nested object and the properties of the object are listened with [Object.defineProperty](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty). No reducers, actions, observers, middlewares. Just one hook and some secondary API that you can ignore if you don't need it.\n\nComponents that call `useChange` listen to only those properties that they actually need but never update if something else gets changed 🏎️.\n\nSee discussion and criticism [on Reddit](https://www.reddit.com/r/javascript/comments/qqsbo3/usechange_the_most_minimalistic_react_state/) 😅.\n\n## Table of Contents 📋\n\n<!--ts-->\n* [Quick start <g-emoji class=\"g-emoji\" alias=\"coffee\" fallback-src=\"https://github.githubassets.com/images/icons/emoji/unicode/2615.png\">☕</g-emoji>](#quick-start-)\n* [Quick start using Provider and store as a class instance <g-emoji class=\"g-emoji\" alias=\"bulb\" fallback-src=\"https://github.githubassets.com/images/icons/emoji/unicode/1f4a1.png\">💡</g-emoji>](#quick-start-using-provider-and-store-as-a-class-instance-)\n* [Designing the store <g-emoji class=\"g-emoji\" alias=\"construction_worker\" fallback-src=\"https://github.githubassets.com/images/icons/emoji/unicode/1f477.png\">👷</g-emoji>](#designing-the-store-)\n* [Summary <g-emoji class=\"g-emoji\" alias=\"student\" fallback-src=\"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f393.png\">🧑‍🎓</g-emoji>](#summary-)\n* [API <g-emoji class=\"g-emoji\" alias=\"rocket\" fallback-src=\"https://github.githubassets.com/images/icons/emoji/unicode/1f680.png\">🚀</g-emoji>](#api-)\n    * [useChange](#usechange)\n    * [Provider](#provider)\n* [Secondary API <g-emoji class=\"g-emoji\" alias=\"muscle\" fallback-src=\"https://github.githubassets.com/images/icons/emoji/unicode/1f4aa.png\">💪</g-emoji>](#secondary-api-)\n    * [useValue](#usevalue)\n    * [useSet](#useset)\n    * [useGet](#useget)\n    * [useSilent](#usesilent)\n    * [listenChange](#listenchange)\n    * [unlistenChange](#unlistenchange)\n    * [Context](#context)\n* [Persistent store <g-emoji class=\"g-emoji\" alias=\"mountain_snow\" fallback-src=\"https://github.githubassets.com/images/icons/emoji/unicode/1f3d4.png\">🏔️</g-emoji>](#persistent-store-️)\n* [Contributors <g-emoji class=\"g-emoji\" alias=\"sparkles\" fallback-src=\"https://github.githubassets.com/images/icons/emoji/unicode/2728.png\">✨</g-emoji>](#contributors-)\n\n<!-- Added by: finom, at: Sun Dec 12 21:08:36 EET 2021 -->\n\n<!--te-->\n\n## Quick start ☕\n\n1. Install the library by `npm i use-change` or `yarn add use-change`.\n2. Define an object of any shape. It's going to be your store.\n3. Add `useChange` to your component.\n\n```js\nimport React, { ReactElement } from 'react'\nimport useChange from 'use-change';\n\nconst store = { count: 0 };\n\nconst MyComponent = (): ReactElement => {\n  const [count, setCount] = useChange(store, 'count');\n  \n  return (\n    <>\n      <p>{count}</p>\n      <button onClick={() => setCount(count + 1)}>Increment</button>\n    </>\n  )\n}\n\nexport default MyComponent;\n```\n\n`store.count` is updated using `setCount` function from the tuple returned by `useChange` (just like using `React.useState`). It can also be updated just by direct modification of `count` property:\n\n```js\n// ...\n// you can do it from anywhere\nstore.count = 69; // nice\n```\n\nThe example shows how you can use the hook as a local data store for a component but `store` object can be exported and used by other components. This may be an anti-DRY pattern, that's why it's recommended to use `Provider` exported from `use-change`.\n\n## Quick start using Provider and store as a class instance 💡\n\n1. Install the library by `npm i use-change` or `yarn add use-change`.\n2. Define an object of any shape. At this case this is a store class instance instead of an in-line object.\n3. Wrap your components by `Provider` exported by `use-change`.\n4. Add `useChange` to your components.\n\n```js\n// ./store.ts\n// export the store class to use it for type references\nexport class RootStore {\n  public count = 0;\n}\n\nexport default new RootStore(); // init the store instance\n```\n\n```js\n// ./App.tsx\nimport React, { ReactElement } from 'react';\nimport { Provider as UseChangeProvider } from 'use-change';\nimport MyComponent from './MyComponent';\nimport store from './store';\n\nconst App = (): ReactElement => (\n  <UseChangeProvider value={store}>\n    <MyComponent />\n  </UseChangeProvider>\n)\n\nexport default App;\n```\n\n```js\n// ./MyComponent.tsx\nimport React, { ReactElement } from 'react'\nimport useChange from 'use-change';\nimport { RootStore } from './store';\n\nconst MyComponent = (): ReactElement => {\n  // the first argument is a path to store object\n  // if store is nested the path could look like \n  // (store: RootStore) => store.foo.bar where \"bar\" is an object containing \"count\"\n  const [count, setCount] = useChange((store: RootStore) => store, 'count');\n  \n  return (\n    <>\n      <p>{count}</p>\n      <button onClick={() => setCount(count + 1)}>Increment</button>\n    </>\n  )\n}\n\nexport default MyComponent;\n```\n\n## Designing the store 👷\n\nLet's make it a little bit detailed and add a few classess that may be responsible for different aspects of data. Those classes may consist of user info, fetched data, persistent data or anything else that you want to keep at its own place. But for simplicity let's create a few classess that also consist of counts.\n\n```js\n// ./store.ts\nclass StoreBranchA {\n  public aCount = 0;\n}\n\nclass StoreBranchB {\n  public bCount = 0;\n}\n\n// those classes can also be initialised at class constructor\nexport class RootStore {\n  public readonly storeBranchA = new StoreBranchA();\n  public readonly storeBranchB = new StoreBranchB();\n}\n\n// export store selectors or, in other words, paths to the objects\nexport const ROOT = (store: RootStore) => store;\nexport const PATH_A = ({ storeBranchA }: RootStore) => storeBranchA;\nexport const PATH_B = ({ storeBranchB }: RootStore) => storeBranchB;\n\nexport default new RootStore();\n```\n\nAt this example we're also exporting so-called \"store selectors\". The selectors are one-line arrow functions that provide paths to desired store objects. This makes the code look clean without providing things like `({ users }: RootStore) => users` every time, but instead we define a simple reusable constant. In case of users the constant can be called `USERS` and applied as the first `useChange` argument: `useChange(USERS, 'something')` (get `store.users.something` property). It's not required but recommended in order to make code look much nicer.\n\nAlso take a look at the `ROOT` store selector. It's going to be used to get and modify properties from the store itself like that: `useChange(ROOT, 'count')` to avoid usage of duplicating `(store: RootStore) => store` function.\n\nDon't worry, that's the only kind of constants that are going to be exported.\n\n```js\n// ./MyComponent.tsx\nimport React, { ReactElement } from 'react'\nimport useChange from 'use-change';\nimport { PATH_A, PATH_B } from './store';\n\nconst MyComponent = (): ReactElement => {\n  const [countA, setCountA] = useChange(PATH_A, 'countA');\n  const [countB, setCountB] = useChange(PATH_B, 'countB');\n  \n  return (\n    <>\n      <p>{countA}</p>\n      <button onClick={() => setCountA(countA + 1)}>Increment count A</button>\n      <p>{countB}</p>\n      <button onClick={() => setCountB(countB + 1)}>Increment count B</button>\n    </>\n  )\n}\n\nexport default MyComponent;\n```\n\nAs you can see the component doesn't modify store object implicitly, therefore it's not possible to change it directly (via assignment operator) from components. You can try to do that though to see how component reacts on changes of a listened property.\n \n```js\n// ...\nimport store, { RootStore } from './store';\n\nsetInterval(() => {\n  store.storeBranchA.countA++;\n}, 1000);\n\nconst MyComponent = (): ReactElement => {\n// ...\n```\n\n\nThe component is going to be updated every second since it listens to the `store.storeBranchA.countA` property changes.\n\nThe property can also be manipulated manually inside class methods.\n\n```js\nclass RootStore {\n  public count = 0;\n\n  constructor() {\n    setInterval(() => {\n      this.incrementCount();\n    }, 1000);\n  }\n\n  public readonly incrementCount() {\n    this.count++;\n  }\n}\n```\n\n## Summary 🧑‍🎓\n\nCongrats! You basically passed the tutorial of how to use `use-change` hook! Let's just mention a few last notes:\n\n**The hook supports two overloads**\n1. Explicit store use. At this case you pass the store object to `useChange` hook: `useChange<T>(object: T, key: string)`\n2. Implicit store use where the store object is passed as `Provider` value and the listenable property is located in a nested object from the store `useChange<T>(storeSelector: (store: T) => object, key: string)`, where `storeSelector` is a path to a store object as a tiny arrow function.\n\n**Store is mutable, state is immutable.** Think of store as of tree with trunk and branches that never change and on the branches there are leaves that can fall and grow any number of times.\n\nComponents and store fields are connected to each other at many-to-many relaton:\n\n![image](./assets/use-change.png)\n\nLet's take a look at a more abstract example. Just to make it simpler to understand, let's define a small interface instead of classes definition.\n\n```js\ninterface RootStore {\n  readonly me: {\n    isAuthenticated: boolean; \n    name: string;\n  }\n  \n  readonly shop: {\n    readonly cart: {\n      items: ShoppingCartItem[];\n    }\n    \n    deliveryAddress: string;\n  }\n}\n```\n\nIf application store is implemented by the interface, then:\n\n- `RootStore['me']`, `RootStore['shop']`, `RootStore['shop']['cart']` should not be changed since they're \"branches of the tree\". These properties are the **store** that can be returned by store selectors.\n- But `RootStore['me']['isAuthenticated']`, `RootStore['me']['name']`, `RootStore['shop']['cart']['items']`, `RootStore['shop']['deliveryAddress']`  can, since they're \"leaves of the tree\" that can be listened by components. These properties are the **state**.\n\nThis means that any listenable property needs to be overridden by a new value, but never mutated.\n\n```js\nconst [cartItems, setCartItems] = useChange(\n  ({ shop }: RootStore) => shop.cart, // select the \"tree branch\"\n  'items', // use shop.cart.items property\n);\n\n// ...\n\n// create a new array to be used as shop.cart.items value\nsetCartItems([\n  ...cartItems,\n  newItem,\n]);\n\n// or\nstore.shop.cart.items = [\n  ...cartItems,\n  newItem,\n];\n\n// but never mutate the array\n// cartItems.push(newItem); // wrong\n// store.shop.cart.items.push(newItem); // also wrong\n```\n\n\n## API 🚀\n\n### `useChange`\n\n**Explicit store overload.** At this case you provide a store object directly as the first argument. It can be used for cases when you don't want to apply `Provider` and you need a local one-component store. Useful at forms to avoid usage of multiple `React.useState`.\n\nIn other cases it's recommended to use overload with store selector.\n\n`useChange<T, K>(object: T, key: K & keyof T) => [value: inferred, setter: (value: inferred) => inferred]`\n\n```js\ninterface RootStore {\n  foo: { \n    bar: { \n      key: string;\n    } \n  }\n}\n\nconst store: RootStore = { foo: { bar: { key: 'value' } } };\n// ...\nconst [value, setValue] = useChange(store.foo.bar, 'key'); // value is inferred as string\n```\n\n**Implicit store overload.** The recommended way to use `useChange` if it's used as a core data store library of an app you work on.\n\n`useChange<T, K, S>(getStore: (store: T) => S, key: K & keyof S): [value: inferred, setter: (value: inferred) => inferred]`\n\n```js\ninterface RootStore {\n  foo: { \n    bar: { \n      key: string;\n    } \n  }\n}\nconst store: RootStore = { foo: { bar: { key: 'value' } } };\n// ...\nconst [value, setValue] = useChange((store: RootStore) => store.foo.bar, 'key'); // value is inferred as string\n```\n\n### `Provider`\n\nThe use-change context provider.\n\n```js\nimport React, { ReactElement } from 'react';\nimport { Provider as UseChangeProvider } from 'use-change';\nimport MyComponent from './MyComponent';\n\nconst store = { count: 0 };\n\nconst App = (): ReactElement => (\n  <UseChangeProvider value={store}>\n    <MyComponent />\n  </UseChangeProvider>\n)\n\nexport default App;\n```\n\n## Secondary API 💪\n\nThe library also provides a few helpful hooks and functions that mostly duplicate features of `useChange` but may be useful working on something big.\n\n\n### `useValue`\n\nSupports 100% the same overload as `useChange` does and works the same way but instead of a `[value, setter]` tuple it returns just a `value` (zero-indexed element of the tuple). \n\n```ts\nconst value = useValue((store: RootStore) => store.foo.bar, 'key');\n\n// 100% equivalent of \nconst [value] = useChange((store: RootStore) => store.foo.bar, 'key');\n\n// or \nconst value = useChange((store: RootStore) => store.foo.bar, 'key')[0];\n```\n\n### `useSet`\n\nSupports 100% the same overload as `useChange` does but instead of a `[value, setter]` tuple it returns just a `setter` (element of index 1 of the tuple). The hook **doesn't trigger component re-render** when property value is changed.\n\n```ts\nconst setBarKey = useSet((store: RootStore) => store.foo.bar, 'key');\n\n// almost the same as the following, but doesn't trigger component re-render\nconst setBarKey = useChange((store: RootStore) => store.foo.bar, 'key')[1];\n```\n\n### `useGet`\n\nSupports 100% the same overload as `useChange` does but returns a function that returns store property value. The hook is useful when you need to get an actual property value (at `useEffect` or `useCallback`) but you don't want to make component to re-render. The hook **doesn't trigger component re-render** when property value is changed.\n\n```ts\n// a change of the 'key' property never re-renders the component even if field value is changed\nconst getFooBarValue = useGet((store: RootStore) => store.foo.bar, 'key'); \n\nuseEffect(() => {\n  const fooBarValue = getFooBarValue(); // returns store.foo.bar['key']\n  console.log(fooBarValue);\n});\n```\n\n\n### `useSilent`\n\nSupports 100% the same overload as `useChange` does but returns `value` and **doesn't trigger component re-render** when property value is changed. This is the \"silent twin\" of `useValue`.\n\n```ts\nconst value = useSilent((store: RootStore) => store.foo.bar, 'key');\n```\n\nIt's used for cases if you want to get something unchangeable. A good example is store methods: they don't need to get their property descriptor to be modified.\n\n```js\n// ./store.ts\nclass StoreBranch {\n  public count = 0;\n  \n  public readonly incrementCount = () => {\n    this.count++;\n  }\n}\n\nexport class RootStore {\n  public readonly storeBranch = new StoreBranch();\n}\n\nexport default new RootStore();\n```\n\n```ts\nconst incrementCount = useSilent((store: RootStore) => store.storeBranch, 'incrementCount');\n// ...\nincrementCount();\n```\n\n### `listenChange`\n\nAllows to listen to object property changes outside of components. The store object argument should be given explicitly since `Provider` doesn't work here anymore. The method returns a function that unsubscribes from a given event.\n\n`listenChange<T, K>(store: T, key: K & keyof T, listener: (value: inferred, previousValue: inferred) => void): () => void`\n\n```ts\nconst store = { count: 0; };\n\nconst unlisten = listenChange(store, 'count', (count) => console.log('the count is: ', count));\n\nsetInterval(() => {\n  store.count++;\n}, 1000);\n```\n\n\n\n### `unlistenChange`\n\nRemoves previously attached listener.\n\n`unlistenChange<T, K>(store: T, key: K & keyof T, listener: (value: inferred) => void): void`\n\n```ts\nconst store = { count: 0; };\n\nconst handler = (count) => console.log('the count is: ', count);\n\nlistenChange(store, 'count', handler);\n\n// ... \n\nunlistenChange(store, 'count', handler);\n```\n\n\n### `Context`\n\nReact context used for the store provider. You can use `Context` with `React.useContext` to receive store object without importing it. `Context.Provider` equals to the `Provider` documented above.\n\n```ts\nimport React, { useContext } from 'react';\nimport { Context as UseChangeContext } from 'use-change';\nimport { RootStore } from './store';\n\nconst MyComponent = () => {\n  const store = useContext<RootStore>(UseChangeContext);\n  // ...\n}\n```\n\n## Persistent store 🏔️\n\nThere is no built-in feature to store data persistently but the elegancy of use-change design makes possible to create such things easily.\n\n```js\n// ./PersistentStore.ts\nimport { listenChange } from 'use-change';\n\n// the function returns localStorage value or default value if localStorage value doesn't exist\nfunction persistentValue<T>(key: keyof PersistentStore, defaultValue: T) {\n  const storageValue = localStorage.getItem(key);\n  return storageValue ? JSON.parse(storageValue) as T : defaultValue;\n}\n\n// define the part of root store that responsible for persistent store\nexport default class PersistentStore {\n  public age = persistentValue<number>('age', 18);\n\n  public firstName = persistentValue<string>('firstName', 'John');\n\n  public lastName = persistentValue<string>('lastName', 'Doe');\n\n  constructor() {\n    // enumerate over own property names (age, firstName, lastName)\n    // and define property change listener to update localStorage\n    Object.getOwnPropertyNames(this).forEach((key) => {\n      listenChange(this, key, (value) => {\n        localStorage.setItem(key, JSON.stringify(value));\n      });\n    });\n  }\n}\n```\n\nUse the class instance as part of your root store.\n\n```js\n// ./store.ts\nimport PersistentStore from './PersistentStore';\n\nexport class RootStore {\n  public readonly persistent = new PersistentStore();\n}\n\nexport default new RootStore();\n```\n\nThen use it as any other custom object.\n\n```js\n// the value will be written into localStorage\nstore.persistent.age = 20;\n```\n\n```js\n// or with a use-change hook\nimport useChange from 'use-change';\n\n// ...\nconst [age, setAge] = useChange(({ persistent }: RootStore) => persistent, 'age');\n// ...\n// the value will be written into localStorage\nsetAge(20);\n```\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://github.com/ivteplo\"><img src=\"https://avatars.githubusercontent.com/u/37793399?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Ivan Teplov</b></sub></a><br /><a href=\"https://github.com/finom/use-change/commits?author=ivteplo\" title=\"Documentation\">📖</a> <a href=\"https://github.com/finom/use-change/commits?author=ivteplo\" title=\"Tests\">⚠️</a> <a href=\"https://github.com/finom/use-change/commits?author=ivteplo\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md"}