{"_id":"statery","_rev":"34-b6a121a215e53d166448a065a65644de","name":"statery","dist-tags":{"latest":"0.7.1","next":"0.6.0-next.3","canary":"0.0.0-canary-20230726060214"},"versions":{"0.0.1":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"version":"0.0.1","main":"index.js","license":"MIT","scripts":{"build":"rollup -c","test":"jest"},"devDependencies":{"@rollup/plugin-typescript":"^8.1.0","@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"gitHead":"f912bbb3375d3ac2d2c57079286edb1280ca246b","_id":"statery@0.0.1","_nodeVersion":"14.11.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-r4rPQhCBk6tez1jDgFIH39xR3zSJbfksm/5TZ2CJv5f/cTB+FbywyfrdRSuY5aYOvqWExZrkn5SE95AaNTztyQ==","shasum":"d47206425eb877ec5116706bbe2dc5564637bc29","tarball":"https://registry.npmjs.org/statery/-/statery-0.0.1.tgz","fileCount":11,"unpackedSize":5806,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2f2oCRA9TVsSAnZWagAAV44P/3a1/qoYPDzOnrRTlnGc\nRDqBJ3hxuP892x6ATH3EPea/eEtXcbA40cFhmQRcZEsKBkjI+cdH7XLKQlAp\ne6MNICbB0qeAf2eRsWIf7dMBxfcCRw7mj5yZi0LRrNPDXXx2pTg1U1ozxNOi\nWHWeMTI54BWEpIhLfj6AuldN5ka0FzWZlswKOMmL2mJYX2pHkpZrOQhipuhi\nXv3/g0sIoUyVPh+3lpNu1OO7YKwhIC+RsHWM1lfyfECD/j+Gm+5lznt/gTGx\nj0zUdJA1bn0RfaO8kLoMtkKILiABgDIE4k+s5EjP1kPe9QchGqe+da43zkv5\nhDGZf6sPofW9SLm32gn6Dh2rQaVgohKrfOhc5D/jin+0Kv+i8BeVI9mit5uy\nZNW7IlAmdtF1pTJZN9XIFeoI53rujeHmmZgW3LunsmEEYqVmXzqapvo9Ogb/\nFOMnGSigHlikmqyyyLjQ6NdztKs7F+XPv03jAjUmg7QI2sB8s4VAjn6U2guy\nlRdyDF8mkH7pH0JxOAvtItKgs/FC+DNyYtu7IKHPwzNVHOHC21rcQe83PI2h\nhMcO0L/9/iHap+ljkkocZJSwPTj4Wun4dRIiA7UwPFIuZjh3gp+KvOgSYnJU\ny+skDWtMPgHH8VKzL0WucXEDVsxXFqS2s1pLy5sCRj+uyd0imQq2+ZCNAMM/\n/U39\r\n=Syv5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFq1g0SQBnJCS0SAeDzN3qGlPvJnqr2B9VSJJWIhBxp7AiBePAukTbpj5DalqoDo+Xzls+u9xAhauet3OVDfv6suXw=="}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.0.1_1608121767570_0.4554893188511082"},"_hasShrinkwrap":false},"0.0.2":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"version":"0.0.2","main":"dist/index.js","license":"MIT","scripts":{"build":"rollup -c","test":"jest"},"devDependencies":{"@rollup/plugin-typescript":"^8.1.0","@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"gitHead":"3e7f02a398f42ecf4356e01ba68b2292532181b6","_id":"statery@0.0.2","_nodeVersion":"14.11.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7lWI4WJCKZO6DQLFOgB44lx1qcUbsV+Qhjdd/3PFfxpVDm89Q6z4MjI5NyGowd21ZtbdXVFcl1RMlT+fDlOOHA==","shasum":"364acaa1b704600db4871bf9213afae41710ecc2","tarball":"https://registry.npmjs.org/statery/-/statery-0.0.2.tgz","fileCount":12,"unpackedSize":7088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2gNECRA9TVsSAnZWagAAgSoQAIwygK1XKC1aI83C/wa8\n1AXe3znQ8J1SsYsTDy7yMvZfoYCPF09JApe9X9mab0TsaGo8+XY4nVj2j9Si\nQBzjsmfr7EvFHxjln9OHLWueX7xgGZz7HOJCkcsdxWzNBuYpq9QvkF/eOhrH\nh3nTnmXtVsOXjhkPegvn/X3FsNjJyU/henHp2K/iS6q7Vv2iKtUhdmtHWCO/\n0KdEkDeE16cjRR1xxaLbQUPHPc9pf0B/K9Hk/qUW9Zb8u1KxJVdpCbepcmqo\nHhp9eTykXp8q2i+cJnNpUUrhziR3Of72v7pT4FJHvwOZ1ZFOdPjY08bX6aV0\nZgNXLscwQC/VRYqrAv7kqpXMS6yQ4k1C/kS5FVNY4DSb+b3SpeIC0dnL5Sj5\n+gRQ1bmoWC9ivamn+sku74tnJr22zI/85C4Dzmgtf99/8ezS4qwMCHU4cfM3\nzrGyImVffcv8qwTVfa76SwocFNi2eHjVfsqX1ELO/oEm5YbLaW/wYS44WPFB\n16X6Z1y6sqU81Bi1e+QlgjQWVCU2w373+fX7lyR6GyNAgbmwpkmLPiKDyfxJ\n90P7zDfOW7FLMlE4vDMfpJnhJ/0hBKgXXlTcKd8sGcP7g+O/b63oTBRNUxgw\ntQJ2DsU4/x9bbB527cGrJrgY1LkJTeBV1PJS/T7SjrSBQakjHCmRc88i+cly\nSY6d\r\n=rTMR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICXdqUdcEgUUGqljSHr7Fkk+Su5jndjckYPlIWzr3pjvAiAreZd12D0vl3VjMsnkumXcUBOrQ0AQSvbIzpnlxLvvkw=="}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.0.2_1608123203580_0.7366975903824884"},"_hasShrinkwrap":false},"0.0.3":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"version":"0.0.3","main":"dist/index.js","module":"dist/index.esm.js","license":"MIT","scripts":{"clean":"rimraf dist","build":"rollup -c","test":"jest"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"gitHead":"b44a3531ce342546d2d93420380a2ff15d0e3509","description":"Assumptions:","_id":"statery@0.0.3","_nodeVersion":"14.11.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-V06EPBJgLG4V9FAhsZsZ8Efq30pvMDoU2BuW9Pgk6puu2M4N98qa0ETxtsu2YQwg1CR2hJnrF2mZk7rZZ0UPAA==","shasum":"bdfcb6d9a126cdccf3f57770ccd808b50b5335e9","tarball":"https://registry.npmjs.org/statery/-/statery-0.0.3.tgz","fileCount":20,"unpackedSize":10047,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2gglCRA9TVsSAnZWagAAnyYP/joXDxvN8pBFWr0/zMz/\nS+n50IBnykejEhhVq5cyR7xWsXrZWxgw8PQcVmJES52KbsaG1yWIL0w5Jta1\n5uzs9Luit8ra+/wkLjcLuTCMz3Bblw9xCXB+4jgI/fTnO9QjMD+1OV46RxZE\no3bPc871bmnzqbudocH9r/D1e2Kp4vlOlEJMZ9iTOnqKcHTL/EDlcD6ctsZm\nxsokan9Quks79dSjoOqsDkYWUUu993K70fYccW/oyH92tyc02ws5Stb34v3a\nqdV7uGRCB+vUz4e6ssYyZWhkZNdzt5jwPKEtY4T3VWxpUVnxrp0bUFkBN/My\no93GNA4nsKagmRfX5IwGXssrNh/qMnfzLxQ1cmUkd+OgfmDiGXKbZvAtFq0y\nVz0Vri0dNgMHr9VMW8LgRV6UJjI3XthrXxbljShAhg50T3a/cA2RrpayiJTm\nJaQEhjQLLe/Bc0o4njNclIk+DeqM+tiPmw1IMQTM81gTu++SEQbZ9GynU74Z\nubwATM9xFjPlW90MbJ3xImyeQiChkYretNHhPrKTCiKQynlvvXEmZt3PhbVF\nGNB52fxVYveeUYTdzSm03W91qQ5YZBV5PcGkfVy2ZS+ezVqTalEYNrSHaryV\nci8jnNXnGH3BBHadDA5sqbHi6cAbl9ITkAQyOPcUUtC3Mjwxmc0T1iQQpp+m\nFdco\r\n=64Nc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUncZCUOV0cxQoQuv2un3zBk6Syy0PKEIr1TGweFoASQIgF9/M4IEwffEH62VfgxKHndVYlF9xjLYsrgP7dtF4qrY="}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.0.3_1608124453346_0.1827367953835779"},"_hasShrinkwrap":false},"0.0.4":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"version":"0.0.4","main":"dist/index.js","module":"dist/index.esm.js","license":"MIT","scripts":{"clean":"rimraf dist","build":"rollup -c","test":"jest"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"_id":"statery@0.0.4","dist":{"shasum":"113cc5fc0967ac2bbf70ab85feb92372ebfa5963","integrity":"sha512-jL94tFXmKz1GC1tfsIc5mgyHd0iAIsl0NhOO1vcNWDzXzodNv1zv6a9XBT7azXUNM0H47ka2tlA7cLzHQqzgaw==","tarball":"https://registry.npmjs.org/statery/-/statery-0.0.4.tgz","fileCount":17,"unpackedSize":7709,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2giOCRA9TVsSAnZWagAA+aYP/RIskYeGP/juAQBG4EO/\neSiR5Z1cOLb/4H/69+qoLghz/5fIOhevAtR63Fr9nNysuFGAqVKhxIKxw6EV\nn8Ct/W9B4qAOW+Qpe81jcCg+EvisoJusOZzNnJFAy/Ea3BksAHwabssHsllP\nFjavZEh3A2LrrH1zYCRfK7wHnUF1MMm/YtmoEMK99dYPeUX/MFdufGplikFw\nM2t2y3V5EixrXFehNrJzehqXq8jjYQW6tMr3vYgZt3PiYHzMhT3l89CsqBW6\njpg5rUGaXEz6ZboQR0BeXTh3q4dyFo9T1BrAOHGe112pcb7H0tc25+eATDIK\nk1YUxjg8slMZ+hMCm4q4yUcUWsCl/20GGssR20CDYDlYEBpAVSyEofr/9cps\n6MfZ2I4VSydSNoMKePjIW3YeOy/vshimiY/rNq2SlGYPAPOpZzSZJqgnkYcK\nvkBblb5aMum0NnXjWzd8KP+utWPbAbB1C9iO8utoemqtMXzuXWLchTVAw4hM\nRd4J1/auuyHzT1Yy/yClXL3wiXW3osshS9yPoWidLGRLKQ0C+zDfx8/wwo4O\nz42DMN997lug4IVsA+SMUcULKaSCqEjnOQVBQjvgDAaGW2MsYQLb0mQNC12O\n3FCaavZpJwf9OwVJTJFyamPCKK4DCWRAEcde0Zh9eoxOo8s+YZb7oWJdSrmj\n+j/Y\r\n=z8VF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDm48SDnTv3CnNT83tOkTlNe09RPnJVDXYJ3sB344o9lAIgcuBJT7wozLvI2HyhzSIo9qABFdcWRK/3ebRul09I/Gg="}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.0.4_1608124557935_0.880329308463838"},"_hasShrinkwrap":false},"0.0.5":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"version":"0.0.5","main":"dist/index.js","module":"dist/index.esm.js","license":"MIT","scripts":{"clean":"rimraf dist","build":"rollup -c","test":"jest"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"_id":"statery@0.0.5","dist":{"shasum":"d256ed0328f041d1a208c365dcce9aa9beb7b1e1","integrity":"sha512-+BVYsMyUtmPqIzjXZhlxs5Uh1eLCcZ/BotTwocMauflIV1Xs9vMtXSFKf4z3rU3qzXtgDrmD0U6dX0XDF++X+g==","tarball":"https://registry.npmjs.org/statery/-/statery-0.0.5.tgz","fileCount":17,"unpackedSize":7709,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2gimCRA9TVsSAnZWagAAqbsP/3sSD4IGYbzPOFGhPWkm\nnwke5Bq73vHGe6BRlnpmeY7EdDfA40S4oPykhnCMBt0dxkjHqU+ZhX2ZpPNP\nOwVlsKAsLyqOaFGZoMZ+NBwaWtXogAXYgte+ddWoGfuVDkoK963mzhOrbSJq\njowl29BtwunduNS3mGprKP8SkR7rxU7szUTlnUlkjCXER4PKehxAX4I+avWa\np+4XggzUQQ0q5jNlVtususuKpFisf4RbPHVQy52PL2XO9q3WQK/yISbP5wTy\ne4eVG1RJ/dWfESihjPONrZinj6/EMaHTyI+et4lfCOH1vZfR6s5bhuqMggii\n+pGnrF3uy7/fk4yCP3/7vlPGPt9TKk0PrALR42j+FPHAEOlSrSGg6Fd7tykt\n6mUiwtE9okbBeR+hVTR9mXFUo5W++RXpt9d6feRAykkOORSSWXohZMcrRnWp\nYpEEuLzBIxcfiPBaLKqr2s/57yCADdkyp1LOWCeIH5vKgEUpOjeel7kRPECd\nwrkkmj/iAiTdjvXy4jegSDo7zq8KdEIDOkpzcsREgH37D5Vr4qDr5KZvI23X\n9dfY8qQZD3KfyfzVMjWyHgHUQXXxWYTfZPN3ZiPKCyw4nHdO+DNk0yKTi4Id\nUFr31uOoO+IzkF/JWkxI6lrJEF/qkOIvF1MU6ZH7nrR18jVPwODUHpmfn0Ul\n2+pd\r\n=AXHX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCp1i5gTM2+qUl9Hq+49pXyLcsU8s72hvUrwyF6aFwEMAIhAPmNLXSFEJnBXH7lw2wfzbLj8/JbdQCQii9vl/XSBVS0"}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.0.5_1608124581814_0.8109556860343128"},"_hasShrinkwrap":false},"0.0.6":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"version":"0.0.6","main":"dist/index.js","module":"dist/index.esm.js","license":"MIT","scripts":{"clean":"rimraf dist","build":"rollup -c","test":"jest"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"description":"An extremely simple and just as experimental state management library for React. Yes, another one. Honestly, even I don't know why this even exists. I had an idea and just _had_ to try it, and yet another NPM package was born.","_id":"statery@0.0.6","dist":{"shasum":"eb65a215208de97c4b9d37fdf267ba45c46370de","integrity":"sha512-rQh5kNPwY/orJgNrJ0sBRGf9WKPvsyjAbLrTz6evn7JPwT3ptFMa2Ie6w4GXwCATZgwdbbyCk7OBwXu3YWGz5g==","tarball":"https://registry.npmjs.org/statery/-/statery-0.0.6.tgz","fileCount":17,"unpackedSize":7912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2gpSCRA9TVsSAnZWagAAieoP/Rl/lPzKsCDZXcwD+PfC\nGfM0UHhYqyC3mfcI88OOupHCrEd81sC+3qIbcFq6fTZgxHETGlSiDvEYKElp\nEW+t1y7huAF1QPvtBdq3lE1EESqcuCuqjeD47bto4BtVyKK0Z0NPFtf4Nd6K\nphX6qvRORcN8kfsBmyD4NfQ6v8o88qlrgdkgl/1KSZMCaWHOyZahnIaNbHdU\n6CLm9rrUuPrHIQHlesBeCD41X0E6gY8vL4R1lKk+Ot3WiEIaYqukh+0rCCec\neE8SdDFqzIWNrs5m/ZAhLEJv19K7f9XhBa4ZFqpCtP59JaJiw+PlmlPB4Var\nEBg4ELRGSn2xeAtObIEfxe7EmDxYGxx7gGX087jJT1wqOgLh7qp1aIJa+gZM\nUgMBITak8qi+prFvbpAg4bKNT9UvuEx5MEphhSdG58C2TtPNLh5COl0m5LpU\nfsDVaVMtHr4m7MwmPw/dFwt23Rl1NoaFApTNA8uH7qLIS9GVdqS5n7PRbHdO\nsvULWo7JKWUnzqC8fTNVaST9DclwYwL9ku2UDTqoDEIPABidqZ95K4PgNvm6\ntKGbkn0llPa5v0WavJ+ILugQ4BMDIFWC4bvXdcYnaljVAV9vTl5MYweV2Znf\n4cSpxRfirD2YP0c71GTdYZ0UcYw1ZOXCJR238DLpqAEhl2QCezcYbf3l1n3i\nG6+1\r\n=CooF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFQpN05DofJJ/Ijkw76aEy63mpUEQ5IYgeOKCVgBkMOlAiEApwC8CzLd+5m0PZvXTt7YmPMfThbWm57IjKive8FhpgA="}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.0.6_1608125010513_0.2177393258186464"},"_hasShrinkwrap":false},"0.0.7":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"version":"0.0.7","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","build":"yarn clean && rollup -c && tree dist","test":"jest"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"description":"An extremely simple and just as experimental state management library for React. Yes, another one. Honestly, even I don't know why this even exists. I had an idea and just _had_ to try it, and yet another NPM package was born.","_id":"statery@0.0.7","dist":{"shasum":"94bfda9e5dca4f33be5402b93ab04cb78bec953e","integrity":"sha512-4uDfdxMCcEinldKbyCLL5nVQd2Db936WlzYgUWDPslLFKISINicC7hRGN7h0a7fUEUMgP2UJ3IJdmirAFtJK0A==","tarball":"https://registry.npmjs.org/statery/-/statery-0.0.7.tgz","fileCount":17,"unpackedSize":8283,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2gt6CRA9TVsSAnZWagAA3fAP/AsuEDOAqC1HpNBsEBkO\nrDVNo+MX4oNNwtqzGBG1cEvHPddaXsqt2V/+X7ZNtCeqZ9xlijwLaBy2K/Ak\nslrRQ2F7xu+oE3LFeTn/Xv2gcSn4IQ5PinFyFSxc6PcvyuoF8DU8PhzMgdV+\naDoxcGUQfjossNzIaDk35mAmdPPnk6yhwgZn+bM8mjdLIUBVfQqGitl9ROwi\nmSfKE5heOgOHLcWSams2iXDF2o4ldoxYmbMTkGV9PDBYEfv4fBSfT+jrzGP2\nsum5mMmOc+wR+s0o63NzDyJbPXWA+vpYaZtTTOl1z+U4Qmm2ku0LH6tf+nCw\nIvrXkC38cZoz4NBE2Zmdk79enjY2go8Tm9mobM7Dgf3wyIXz/T3SbnYxm5EH\nxWPdzZWCDBmsR6HS31CP19qZ91efswqo4IVSsKCgJRyGHuKn8lNJ668oWbVr\n5fGOmyGljFn4PwRU7XROEICFikx7nqE62cjeEqTYx4fHDiTHWWJKz7LdUFwp\n0bWGjLgW1thxWv0BooKxj8VMnWN1FsF3nX8GFWvJc6A80mQstu8ktc0l2xx3\nsbpptrC+WGEh5mOglgW4ELF2nE8D6VMv5IWfBo1ZffUvqVhsJgdbuPoJyX2O\nXvVaDuaiLrJS+RDUT0vSkbIolM42MlIM6n3uMHXZTOIeTa8OIgBabmRE7RtO\nMPHM\r\n=8bnz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICcJoD45sH8Tv2STX5g+ogqTnn1hRUmcQ+LYKnFE8GaaAiEAkwNqXOfP3D+gT4SaBA6gPHSFRv5vGpPHyTieUqZQOCw="}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.0.7_1608125306003_0.2610093355102483"},"_hasShrinkwrap":false},"0.0.8":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"version":"0.0.8","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","build":"yarn clean && rollup -c && tree dist","test":"jest"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"description":"An extremely simple and just as experimental state management library for React. Yes, another one. Honestly, even I don't know why this even exists. I had an idea and just _had_ to try it, and yet another NPM package was born.","_id":"statery@0.0.8","dist":{"shasum":"e9e7d06e96e3001c687ef6b577b5a93e837b7484","integrity":"sha512-70PUuchfthmft7o06WZWQxocCpvgxrpXvNRuUUicYhwD4bNmGlGBXcLqiuZGdFJ+zNGCYAJEoUErgOyo6VbjXg==","tarball":"https://registry.npmjs.org/statery/-/statery-0.0.8.tgz","fileCount":26,"unpackedSize":176730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2iJZCRA9TVsSAnZWagAAxMEP/3OG8kuZJTC+chgKeLZk\nVRkocztHIG7hkH9NgK9ijuHDsXPLShXiCnXVzm8+/sJG5DV3Tbp2cR9/mm0t\nU4CQ9bWLA3aQlEzisstWZuguWyvW0znq+UOVip/hUTYMZbM5yT5r/+UUMaRA\nzIK6fktSSQU4rnYjwRpOZCZwuX6M5F/54C2Cp85gOj5xlrsntqDjUS7GD+xe\nWFDVqmCHsNbZ6qYuSMc+8KkrV3HFD/9D/JstW++i3NqefDcc8G33IKO5XBoX\n11zIZP/75IBHc3Z4M1hfxP7fwdV3sfSMUdkWleQORVzSysvRByaSWd4gCzxV\ntApN+tERWjhn4932ZPd39oGA9GEPUEAe7p8pEHIbYfu0/vUHXKmTWeBDSAZ7\nu3kpYu0DUX9xsnJiSVCdiU1UCAd08erVwEQ9uW2ax324V2lai2JBsZ9teUYd\n+VNKGcGjHm9bOicCuyOExwgcFR5iO6cCwo9KVKVoQchpC0YGQSQymjF782YL\nSY8sTbabckDEsN45nDEoy4ULiBbQ0eWB3yi3En4tzGO0H9RU0qwX/RF5MnT4\nkUH7dLhEL63jYk60JPrR15RdSCMODeQejD21gtsv2FDntU2aIl2qlp+4Td7T\nRaHK3eubstfHoeTlLyarKJ5jdmZmp/KhW4kFqpvRAUAA2tXwyhf3c8hI56hY\nv7jq\r\n=i9WI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDs7oLEGwVyXiG0/EOkOGI/+JoST2q0hnj7/miKtJyVaQIhAII24Oedm/oNhergBiFFRaVF9LHMTDyNU9f9Ld7Q6At5"}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.0.8_1608131160630_0.5546003119310183"},"_hasShrinkwrap":false},"0.1.0":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"version":"0.1.0","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","build":"yarn clean && rollup -c && tree dist","test":"jest"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"description":"An extremely simple and just as experimental state management library for React. Yes, another one. Honestly, even I don't know why this even exists. I had an idea and just _had_ to try it, and yet another NPM package was born.","_id":"statery@0.1.0","dist":{"shasum":"2cae22864259d668dde75c18cb67a49a1f52551a","integrity":"sha512-kV0FV/vytwwcPLWh197WvSL6ocPON5oJFHgkAWvy7SZ8ldHybT4iq6Jikpa50QWOKoQooZcQlZf+8lDVvDdYxg==","tarball":"https://registry.npmjs.org/statery/-/statery-0.1.0.tgz","fileCount":26,"unpackedSize":176730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2iKrCRA9TVsSAnZWagAAAgAP/0J0PdY++awk5CzaSJbR\nSsGskdoGA1GbV/guVcxWNboQ4RpeAyAuNK+dVXKqtHFiKhw8q5RsJU43Rcky\noyMC8vxoOLpR1inyaElL1RiG32clfti+yke7xeuuYdF5OJ7/uLRIokAW8AJ8\na0GCShji30gaBENDzoRHTntxS7V3zDL7+Fos4Ct6V+hwtjeYMKgDqK3fEEtq\njUjhbJEEeHUvS33iz10vdJXSeiTIgSIIx7JwK/3VxTi/7Wuz6O8AxWse9GHs\nI1h1fVMjUdNtTbmshD10mdy6OIpeIlZFzKr3uv+6waYidNSt1WDcBmyO0VM3\n+Xd2jA8V5OEgN21whlTJrGjLS7LrpT4wTubWrJI3duJ9jg289wesN0APz2bw\nkzxnK4ItKb+kXjiKAMEQS/ehq6OCtuIGTKwY3FVn3/0SnsJhcw2YfHdshkiN\njnbwd8ROQsuzg/uqSm4wfn9tWgvJaDa9sZ4vuROSqIIusQ2xP9Qismxk0kX7\nXlrRQMoebi91ruIeNvh7gaMzpWFasv67YADI8jszRCNPNGSHycyk1L8504eH\nsUIuwn3VM/Nnfr/mowiO3K+T9eeO9gOmikPFCh7rr02OiuupA7a0X2HXNANB\nR1MzYcxqnom68RIBNqGTMaBApVO2/gnfAcNat3ziTNczh/bnzu1SaLO1lcTE\nvArB\r\n=8aYe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICE6SDV+KExKqA6XAEPJk4LrwKRVJvcUYSwG7FkW1lP4AiAIn7af15V6pLgguaD020kdEOjs5s+zLaBTM2JtgGrW/w=="}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.1.0_1608131243262_0.47392806819021316"},"_hasShrinkwrap":false},"0.2.0":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"version":"0.2.0","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","build":"yarn clean && rollup -c && tree dist","test":"jest"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"description":"An extremely simple and just as experimental state management library for React. Yes, _another one_. Honestly, even I don't know why this exists. I had an idea and just _had_ to try it, and yet another NPM package was born.","_id":"statery@0.2.0","dist":{"shasum":"12f33bf1b2706b119c4789a94fb2e84245e1ad59","integrity":"sha512-K7MGr3II9riFhkIEtDHyC1Qb7auNhWOheUsfuyMNDCvYWkDUWfiUf73IJYM8uOyQoi/q4CAJNYSLcaKC2xOA/g==","tarball":"https://registry.npmjs.org/statery/-/statery-0.2.0.tgz","fileCount":26,"unpackedSize":181164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2jNLCRA9TVsSAnZWagAA00YP/AkNllfJBELAebgTt+Nd\nhQ838DU/CREbjX2+BBnVkCi1Aec+6kH9m4IiXZsIV1bLw75sthmNtLQE9O5H\ngAczeUW9YztOR1YrjdBtSsYlozce36UFZD8poTGajXxrPc6r8JnWw/J156f2\nDNv3Rr8PB0zPPKw1FHqBqKsb1k7CIu7MDB57zw841Yl6jp8yYs51Rpw9ocG5\nG00XTwnyZqivX4umQQ6MfjnuEkr82J5S9yxDWO6Mbox3PU4bI+NI5BI0inL5\n/U0lp+2mU+woRMr1+ChgbrOYOyIv++rGIwvZ/vMlMDTj1ZLaQz1sRmZthMEI\nNy/Tv7PcawOJF3t389j9XOu8KpCghXcQSahASMM2TooM5aYUuRzWNVHHiJ/6\nYHmVXSVOjmS/AnpE7Irlf9U+yi41zvy2cOntcV3Q7J2PmqnK7LyQ+pWqy5q0\n04z/DJaKAdoQBPIAs33YUjgBziChCzgvMrXJ4WcgdwdyNE5sY6G6/1in6oRi\nFophCeMq//0rL1yfjmMi7i5V53Z75B7galGZ9+cy8dKFbQfS8rG+CPI5ldjJ\nyQkhxImj6OQyad01z/4RDVWFnHqfVr4sFvwXD4d48sDHQAeyvG6Ra1RzDW+N\nWCIfrUXqvUrIeH8yFI8pne/G+YvyL6NQiHuh7aEtUMWkFO3RMFOVugJte4gc\nIkKr\r\n=/bik\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJuDBe6vsBeEYYQBYM+GMU4Op+UtlA/Bsf1mp6+D75+gIhALpVQ2YQKdF7E3VkhJgw/TO0MRl81diOMh+89P6cFlkf"}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.2.0_1608135499230_0.5251445486028206"},"_hasShrinkwrap":false},"0.3.0":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"version":"0.3.0","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","build":"yarn clean && rollup -c && tree dist","test":"jest"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"description":"An extremely simple and just as experimental state management library for React. Yes, _another one_. Honestly, even I don't know why this exists. I had an idea and just _had_ to try it, and yet another NPM package was born.","_id":"statery@0.3.0","dist":{"shasum":"89408a69fb12a3564a55b79a06b419c26cf559d3","integrity":"sha512-e+C+qgQCiLS+qOp1YMGv/S/SxqnVdbB30DfdnoZCwFcnExbsiWfmu0gjJ2eIzelq0qZnsxKrOy9Tm2bOzdIajw==","tarball":"https://registry.npmjs.org/statery/-/statery-0.3.0.tgz","fileCount":26,"unpackedSize":185289,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2l95CRA9TVsSAnZWagAAl+0QAIUPBjR9f0fsT4tRw89Z\n9jLIci9IISXtaCUT0A3/vPul1vnDXxMM7m7q3Q8CdsSb0yFhJuv5q+zBQNL4\n0NgHNMcQ+jVxJND8hGiSDlTxCd2inheCvQ1/VH+r7MnKXgdVH2tyRT6eLyNj\nO+ZnrwfTIX1HD+4KlkOA9UhoXPIqSkZ2PXj281jmwBd5tQDQYiH4azgtL/4z\nos5ChMW8nVGwR263r+bEv07S3o5ziiAiAeTND9b2kTI1uheJK1kHXvAjGqPP\niRWcytSr1Z0o3mKr9Y2j4k862HWRIGb1e2w+BBQMvPTlD+1Y0zl3XrMXS/Nk\nDFYKHPfEbhbyL+LkHJCWlRlvJ8ohtUmZBB78XZEcqATD6znhY6twTLG4rpu4\nvyKWd4m5Geg1HePF1+/aNGbOcxOtmNkPgUDWUDOujH4G/G6Tu1qemdseE2ex\nsYpWULYWpHMgrD6crtuV+DtB/P0ttXToTZw/t/P497LZZYkpZkRwkgRpDhHn\n3TdiXDq5/Uh420oPppZ+wXDtE4wrJ3d/6W9aM4jK5auwS4qSM/u92y17n5KA\nmIUOVC7/SeWYhK4PvIjUiH9s2z2aN5qkhpNR2GCR8ol4yRdcLzHSd4c6TPw/\nsNAqsm4FfFu83O2VfUWwqYvqmW0yiPy9j8LsXjCyqa0QRnL51tlwb+q+WbEb\n94nU\r\n=9xdT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKFy9Mdc6DivnZncGUjwrZakvE82fb5qym1RfbQyWRBgIgUHL/7e/6tFnPGryfefJSJEiKp0OPMCxuT55PlGzdXf4="}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.3.0_1608146809009_0.9368786606256854"},"_hasShrinkwrap":false},"0.4.0-0":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","version":"0.4.0-0","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","build":"yarn clean && rollup -c && tree dist","test":"jest"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"_id":"statery@0.4.0-0","dist":{"shasum":"c99978456d7a580723aa44c2db13a1999e0a2247","integrity":"sha512-8Y8FS49ApSpSzJs46pOykZZGnvq6BaDpeoQNEVH0HagSwQi7qEaeypzvA76LN2+86hTRitx5hXY7IwG08g4jCg==","tarball":"https://registry.npmjs.org/statery/-/statery-0.4.0-0.tgz","fileCount":21,"unpackedSize":200286,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf23oTCRA9TVsSAnZWagAAfWgQAIo5dPqhT6+mle7sopmG\n3L9i7l4DtLZ4jx3HlyUkXLPyC31K9M3O4big+ZT2gQBoVmzHeL4DPtZ4iGzJ\nn16spHTFv3WmbH2dF6O9eIab4DrL++DS2iOxrUsGcro8H3dZutpyVpOgGJ5M\npJypZeGPnbvcT0ub9ow3YqEXDHPDUoq47QnWZz+605zbbghh0KoG52o45gcK\nD/6xHFAA1MxP/UvG5p4Bcmyw5RIXvJjy5CycYQVDvjV3LZnOT8uS1njdE6hq\nG4h3M/qraK6KEeg5YTzBsYQOCaMkQ6GaCGgmO6ai400d8A9sYqd/25968qgU\nGHJqcnttRSM/+iGNQe2CydvaeXdEhT0YaLIxjIGpTwW9JtMfuPcnFJyd4lRE\nL2RQZpSwXQrOfQhetzs5aS5scJwT7KdwJNXLKBJGc+/LBJk+0Dp30T6ftUva\n/b+yfTy01HoxY2siHh953hz8vUrcXQTVi62YdaWDBVcNkhcwRjHKCDTooHJV\nCnCCLBVZtMAIYYBFYy9iM4gdrjtT6Ao36TaFgTUWR3aS+JQQFZLKqTyHgCpZ\nxWriYy+T6v8/jQpm6A9M9TZYemnwrILwzkGiGVacdVl6yrVfHp2u5FlCamP2\ncKjfBvPuIi4M5SSriDCWwwr6CBaFxsW9c/tvy8q2ZXjMlD7SZoLJOWvCHAlr\n6/rz\r\n=o/Ps\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCobGUEzG4tCjZSYUB7hy/iXe3vFLJZlD1Mgw+5mORMbQIgatfvuNR2Jy+WWy05SNePgJCh7xq8D2rierjxCtVLHYU="}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.4.0-0_1608219154819_0.10101558915211917"},"_hasShrinkwrap":false},"0.4.0":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"version":"0.4.0","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","dev":"yarn clean && rollup -c -w","build":"yarn clean && rollup -c","test":"jest"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"_id":"statery@0.4.0","dist":{"shasum":"be98f9d8b2979d340d97fc9c63ba40c1128dae2a","integrity":"sha512-5GqsZ2F5UFkHei/gVKzZZA0OCqEQfPzaVCPseua+nx7VSmEeujCOgHvb0kFL0HP+P+h0XNbGmyNUEKqYTaTl+w==","tarball":"https://registry.npmjs.org/statery/-/statery-0.4.0.tgz","fileCount":26,"unpackedSize":196902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf25/sCRA9TVsSAnZWagAAUxgP/3CTfh0QWwZplZKL9Gvr\ntf0bPrwbuTYs0gGt8wd7uvWGvNeYji8yUYV+e6KlvB6fZAOApWqOJ/RRpOtD\nMxlHjVzrtMl7zBCR9zABLNzANzIqJ8xGTHtWLThVdyapp7Bb4T+fVynj84kK\nKKYo/R7TNW09RFurlgC5etfGBIRRNa+JUVhYmSZwSe1Y7YbwaqzK459mD28T\nGghbSIrMaP1m+NEh09rByYYyH4IkC5jOV17HW+KOS2hPDJvK7dcUJbEBEW4Y\nWkYMkLksC7w5hzMqq4Sc6W34ZH8bi98JfqmMadMEF7WFMjlUJticn6ZKLbUH\nyLw5FnJmagIHAvc2lqdWD7dI8LJT47MKSxoFqXHA9CRgll9moDyyMPyGKIQO\nHXtWu2UgIm9ZqHr+9OYstkivH53W56bCzFYIfFHBCDTHuFqwtkA+l0zrYCXv\nk7C+xy98zs63Fwp5zYcC6193j3FYX4rk9FyS/ykhVIBtSOv7rn3K25rrwaSz\n3qzeVr0OFuJhEPxsuIbV/GHWQTHiV3WNI3gFJUOZrEU4fbz+oBu+eLxUbAS+\npyKvzYZj5AYSm5lbD1z9kgIC5equwYWlZ94QbyuBEgPDeRfFpUtZRkRKhf4n\nPoARf6wvUafb1k/HKK4SnYXWfJlYKz/1WMJOBUZu5moQ5iIqTuPsePPIaGLJ\nIleC\r\n=nnIx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdK+Gtcc5W2ZeJ3qHWPqAhkKEsb6YWdfycuLEXAhHnOQIhAOPxkKqczXXjjiF0Z4owa+1KMeyt2q9p0iDsh3L/truY"}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.4.0_1608228844166_0.23468026893922467"},"_hasShrinkwrap":false},"0.5.1":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"version":"0.5.1","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","dev":"yarn clean && rollup -c -w","build":"yarn clean && rollup -c","test":"jest"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"_id":"statery@0.5.1","dist":{"shasum":"182c18338ff89d5f9c86df952e60a0764af186b9","integrity":"sha512-OpWtOW+KBN43XiumD9GaksjL0iTmnn/dhQRGdz6l+ujCN0VmMMia5CdI5IwLkUVKW8kbjKq0CNPlAfxbNsk1xg==","tarball":"https://registry.npmjs.org/statery/-/statery-0.5.1.tgz","fileCount":25,"unpackedSize":199737,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3KDRCRA9TVsSAnZWagAAsDQP/2AEuYBwiJ4Aw7lpL+fl\nIikwqZMlbgXgCNdICUx4irVHf5V+LAw3SyYVyPsYrCaG0VuYJQHvqFkJZjiK\ndok+EqcBEu7VDg56IPM+TNrSCov9VybmzNOuFtq8h5ykEHtduKHdb7iv9Mk2\n358BvpS2EyPvNhB1Z5+63A2xgYGudjhlydeQGS3KorRKOHo2QsnLWtM3qh8f\nGpIYtcQj0HWTDChWys9Ft3rjbuYl6vjxmSUwEpRBJHPTTK1swinY6t8XpeGP\nas6TsAq7+SPIpkgAukFqla5MlbLpax2bBKO8YPCUxqYLsF0v0NvnfN9G7uny\ntoLzPp5CIy62ndpS8ZLA8eOdnTns0OOogBEGcJuYbHHlZ2QW45EpKIV5LXaN\nx9BV0Y9Be6kl4CLiLFL2GyTZqvGiYAyyQ/Rah4l2BjS56dcaMMkP7dQpzlth\nIA0u1vpgKYzaM9OQo4L0e+ud5vGboWgVQzKwTOWkKlG7jWIJbzUVMCax158I\nCVh9jtY+jWPa5ZQF0z2AOD6t77SV594waNMUpFIdf9oYhW4wo60Mq2Oq68sj\nwK50lCJ+rQcLYUBVzXkQX+pWXHV/MsZ3vIDCtqb5rtpWTovDRi5Dn4oswwxj\nwdQm9wI7lhQy0JOW3F3yDIpsGQyEGvWxZzLiuXoeJNwJ7cSNx7ps8G65hQrX\nmSwx\r\n=24T8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+zXZN3vxYaz9Cd5EF144z2DakvgEia1PaLnwCxU6imgIhAIF+ecaEhvAZ+XzdvgufGrCWkz0gSsMUW2JHToUX/Lf5"}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.5.1_1608294608779_0.6481652110334191"},"_hasShrinkwrap":false},"0.5.2":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"version":"0.5.2","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","dev":"yarn clean && rollup -c -w","build":"yarn clean && rollup -c","test":"jest"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"_id":"statery@0.5.2","dist":{"shasum":"93a3de3e98f642d5c628159eff422f43d3d898c3","integrity":"sha512-BuF4VM8iRrsQnojJzPr7vPj9Aevt/bxQcTjT6kn3Jym6vRiWjpH6AqsoiSfqPM5tsl8hwuASexPvTFV3dqWUPw==","tarball":"https://registry.npmjs.org/statery/-/statery-0.5.2.tgz","fileCount":25,"unpackedSize":201816,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4g/2CRA9TVsSAnZWagAAzmkQAIPkDAeLq05cIO0bhoGk\nc0Vph1IQEsm4RDz33VYzm5spWeS41/DLThT+qtwYhnsJ0Xv91oyRwfyrGhYH\njaiMnM0VDN1GKILySGN39t+glkGH82w+jLZcMM0kvAQUHRkugvF+jE1783yQ\nUknwybVHPOFtTW8LkWAsIroYO7NtTmdr7smemX9+zvvcQLCD6t/Krrar871Q\nWKXDIXbym2807g2ds2oDw3chv6gayqX1yM81escUNfTkXaNqVJjnXdVVXnhB\n+VKJ4TkN0p4TsSk/XrCTfQwOQASiY0lrfV92npnZTOH7skyj6Dr1hJC7klKt\nvioTJFn7EmBKw2vAUoLscfTQdvP2lgp5jKB2G1EDV3dkOczhtr8Wykm/AXbe\nKGc930Dd6Mg+Ck5MmXGrlyD/q9HjloLCMW0YUqfPS4Cb5PoYxaWMa94C+399\njzkLQlffwcmz5OfJbCx6WDWfF00j4N3iJjRCSc43dXxINHJFagSmblXZ/PaS\nbgvW6HgTsrZ60Y6w2dSBr8z1YIk9HrKGFZPeku9LaUp5+zTNE+TncX2avvip\neb3fBiUrq4dIZYOcr/Fw1sHHzEL2EkrDHoP+qFAU4IEv2JagsJT/HvGzANAG\nEVvNjh7yKh7xURs2dHIZiJTK2o4gGrd9yA6NAYETrfL3G7Avn2WMek1VJUyL\nTnTO\r\n=WmLw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXyVKHamgk80nKR5ruVbaVSvXJ2wVWJqK1OFJzK7AsoAIgZsVpy59IR37RPuGappkQAJQrykRHASwW68B/NjdLG0Y="}]},"_npmUser":{"name":"hmans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hmans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.5.2_1608650741508_0.7206409232057873"},"_hasShrinkwrap":false},"0.5.4":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.5.4","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","dev":"yarn clean && rollup -c -w","build":"yarn clean && rollup -c","test":"jest","docs":"typedoc src/index.ts"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript2":"^0.29.0","ts-jest":"^26.4.4","tslib":"^2.0.3","typedoc":"^0.20.1","typescript":"^4.1.3"},"peerDependencies":{"react":">=16.8"},"licenseText":"Copyright (c) 2020 Hendrik Mans\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","_id":"statery@0.5.4","dist":{"shasum":"a48fcb68e2e99aa769a65c638094ea8ac774fc44","integrity":"sha512-AqOOGAVqz7kFBeA+EHzrj9rlv7jW3Sy0fqnxz4BImXqslU5cyv6b8ds8FCumGaUDdTWN5tdxmBLhuX+4jrZMzw==","tarball":"https://registry.npmjs.org/statery/-/statery-0.5.4.tgz","fileCount":41,"unpackedSize":550085,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVeFRCRA9TVsSAnZWagAA0JAP/3s8h32c4xGelp0SglHT\n3F69jHCubX2Z5LhnOU/Spmav/Tb3grphvRLFGMLiClOkxxSMNZ+e+oxCGV7G\nHRhP00LxkCSLRNN/Al/AqMY/7Ww4gX6CVUNvvBPkFu231QTaCYAH3hSJhv8m\nFV9SJJQEBs85VpYQjFtbPeJo99WNi/yO8xnVS/HhEEySEQ5OoLr0lFrH9i5x\nIcmWz3B1pZtRJEZNNne56NJjM1sdz3oMvrCzmqQVAOYemuh4KujoZS14QkBr\nuEtaD24c2aCiI3NL7L1sHJz0B22keFlyxESDNzj8WCz5yVZc5j36ass8EftG\nw+1fnIpFTOZ4hemjOrhnyfBkZ8+pnI1lkgQUlbU0KrG0EcT/H3M4CWwJKLzK\nEZ0KHjw8IpHJ665xAtbUoretRRha0NsPw8Xp/SYqszni2O2LCbOblTg9cOFF\nxu2k6i0nLu/s8TlicvHIdshNx8jjGt0JRKq8/xhd/QcTGpjuMmxGwPmer/A6\nKFBnOT6KklwPDjT8W/U7x4EBdQy2WDkZ8Em/NewsdmHihR4bo1OlfeTLfvWO\n/n/N3W3B5CDP2ZsW5MnySfnnrGeYvqgg0Fsn23m2nqBx/z+8/dN6KegZlQF7\nDUcvl9Z+zySXRH1pbu7QjADoK3NnoghmkDZqPkV++OAk6C/c3kgzx6S0sau0\nfLSO\r\n=1TEr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG6mn3M72Mwc5RReeoa1Y1ebElrXNHzhmNffWGpg4k7CAiEAzsGaRnAccIics4Rx1wlx74LBWCpQIRt/umszdIniie8="}]},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.5.4_1616240976985_0.01894393818316109"},"_hasShrinkwrap":false},"0.6.0-0":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.6.0-0","src":"src/index.ts","main":"dist/index.js","module":"dist/index.modern.js","unpkg":"dist/index.umd.js","exports":{".":"./dist/index.modern.js","./react":"./dist/react.modern.js","./preact":"./dist/preact.modern.js"},"typesVersions":{"*":{"react":["dist/react"],"preact":["dist/preact"]}},"types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","dev":"microbundle watch src/*.ts --external react,preact","build":"microbundle build src/*.ts --external react,preact","test":"jest","docs":"typedoc src/index.ts","prepublishOnly":"yarn test && yarn build"},"devDependencies":{"@testing-library/react":"^11.2.2","@types/jest":"^26.0.19","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","jest":"^26.6.3","microbundle":"^0.13.0","preact":"^10.5.13","react":"^17.0.1","react-dom":"^17.0.1","rimraf":"^3.0.2","ts-jest":"^26.4.4","tslib":"^2.0.3","typedoc":"^0.20.1","typescript":"^4.1.3"},"readmeFilename":"README.md","readme":"[![Version](https://img.shields.io/npm/v/statery)](https://www.npmjs.com/package/statery)\n[![CI](https://github.com/hmans/statery/workflows/CI/badge.svg)](https://github.com/hmans/statery/actions?query=workflow%3ACI)\n[![Downloads](https://img.shields.io/npm/dt/statery.svg)](https://www.npmjs.com/package/statery)\n[![Bundle Size](https://img.shields.io/bundlephobia/min/statery?label=bundle%20size)](https://bundlephobia.com/result?p=statery)\n\n```\n                                          💥           ⭐️            💥      ✨\n                             ✨                                ✨\n  ███████╗████████╗ █████╗ ████████╗███████╗██████╗ ██╗   ██╗██╗   ✨\n  ██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔════╝██╔══██╗╚██╗ ██╔╝██║\n  ███████╗   ██║   ███████║   ██║   █████╗  ██████╔╝ ╚████╔╝ ██║     ⭐️    ✨\n  ╚════██║   ██║   ██╔══██║   ██║   ██╔══╝  ██╔══██╗  ╚██╔╝  ╚═╝\n  ███████║   ██║   ██║  ██║   ██║   ███████╗██║  ██║   ██║   ██╗     ✨  💥\n  ╚══════╝   ╚═╝   ╚═╝  ╚═╝   ╚═╝   ╚══════╝╚═╝  ╚═╝   ╚═╝   ╚═╝        ✨\n                                         ✨                 ✨   ⭐️\n  SURPRISE-FREE STATE MANAGEMENT!                💥\n                                                              ✨\n```\n\n### Features 🎉\n\n- Simple, **noise- and surprise-free API**. Check out the [demo]!\n- **Extremely compact**, both in bundle size as well as API surface (2 exported functions!)\n- Fully **tested**, fully **typed**!\n- **Designed for React** (with functional components and hooks), but can also be used **without it**.\n\n### Non-Features 🧤\n\n- Doesn't use **React Context** (but you can easily use it to provide a context-specific store!)\n- Provides a simple `set` function for updating a store and not much else (have you checked out the [demo] yet?) If you want to use **reducers** or libraries like [Immer], these can easily sit on top of your Statery store.\n- Currently no support for (or concept of) **middlewares**, but this may change in the future.\n- While the `useStore` hook makes use of **proxies**, the store contents themselves are never wrapped in proxy objects. (If you're looking for a fully proxy-based solution, I recommend [Valtio].)\n- **React Class Components** are not supported (but PRs welcome!)\n\n## SUMMARY\n\n```ts\nimport * as React from \"react\"\nimport { makeStore, useStore } from \"statery\"\n\n/* Make a store */\nconst store = makeStore({ counter: 0 })\n\n/* Write some code that updates it */\nconst increment = () =>\n  store.set((state) => ({\n    counter: state.counter + 1\n  }))\n\nconst Counter = () => {\n  /* Fetch data from the store (and automatically re-render\n     when it changes!) */\n  const { counter } = useStore(store)\n\n  return (\n    <div>\n      <p>Counter: {counter}</p>\n      <button onClick={increment}>Increment</button>\n    </div>\n  )\n}\n```\n\n## BASIC USAGE\n\n### Adding it to your Project\n\n```\nnpm install statery\n```\n\nor\n\n```\nyarn add statery\n```\n\n### Creating a Store\n\nStatery stores wrap around plain old JavaScript objects that are free to contain any kind of data:\n\n```ts\nimport { makeStore } from \"statery\"\n\nconst store = makeStore({\n  player: {\n    id: 1,\n    name: \"John Doe\",\n    email: \"john@doe.com\"\n  },\n  gold: 100,\n  wood: 0,\n  houses: 0\n})\n```\n\n### Updating the Store\n\nUpdate the store contents using its `set` function:\n\n```tsx\nconst collectWood = () =>\n  store.set((state) => ({\n    wood: state.wood + 1\n  }))\n\nconst buildHouse = () =>\n  store.set((state) => ({\n    wood: state.wood - 10,\n    houses: state.houses + 1\n  }))\n\nconst Buttons = () => {\n  return (\n    <p>\n      <button onClick={collectWood}>Collect Wood</button>\n      <button onClick={buildHouse}>Build House</button>\n    </p>\n  )\n}\n```\n\nUpdates will be shallow-merged with the current state, meaning that top-level properties will be replaced, and properties you don't update will not be touched.\n\n### Reading from a Store (with React)\n\nWithin a React component, use the `useStore` hook to read data from the store:\n\n```tsx\nimport { useStore } from \"statery\"\n\nconst Wood = () => {\n  const { wood } = useStore(store)\n\n  return <p>Wood: {wood}</p>\n}\n```\n\nWhen any of the data your components access changes in the store, they will automatically re-render.\n\n### Reading from a Store (without React)\n\nA Statery store provides access to its current state through its `state` property:\n\n```ts\nconst store = makeStore({ count: 0 })\nconsole.log(store.state.count)\n```\n\nYou can also imperatively [subscribe to updates](#subscribing-to-updates-imperatively).\n\n## ADVANCED USAGE\n\n### Deriving Values from a Store\n\nJust like mutations, functions that derive values from the store's state can be written as standalone functions:\n\n```tsx\nconst canBuyHouse = ({ wood, gold }) => wood >= 5 && gold >= 5\n```\n\nThese will work from within plain imperative JavaScript code...\n\n```tsx\nif (canBuyHouse(store.state)) {\n  console.log(\"Let's buy a house!\")\n}\n```\n\n...mutation code...\n\n```tsx\nconst buyHouse = () =>\n  store.set((state) =>\n    canBuyHouse(state)\n      ? {\n          wood: state.wood - 5,\n          gold: state.gold - 5,\n          houses: state.houses + 1\n        }\n      : {}\n  )\n```\n\n...as well as React components, which will automatically be rerendered if any of the underlying data changes:\n\n```tsx\nconst BuyHouseButton = () => {\n  const proxy = useStore(store)\n\n  return (\n    <button onClick={buyHouse} disabled={!canBuyHouse(proxy)}>\n      Buy House (5g, 5w)\n    </button>\n  )\n}\n```\n\n### Subscribing to updates (imperatively)\n\nUse a store's `subscribe` function to register a callback that will be executed every time the store is changed.\nThe callback will receive both an object containing of the changes, as well as the store's current state.\n\n```ts\nconst store = makeStore({ count: 0 })\n\nconst listener = (changes, state) => {\n  console.log(\"Applying changes:\", changes)\n}\n\nstore.subscribe(console.log)\nstore.set((state) => ({ count: state.count + 1 }))\nstore.unsubscribe(console.log)\n```\n\n### Async updates\n\nYour Statery store doesn't know or care about asynchronicity -- simply call `set` whenever your data is ready:\n\n```ts\nconst fetchPosts = async () => {\n  const posts = await loadPosts()\n  store.set({ posts })\n}\n```\n\n### TypeScript support\n\nStatery is written in TypeScript, and its stores are fully typed. `useStore` knows about the structure of your store, and if you're about to update a store with a property that it doesn't know about, TypeScript will warn you.\n\nIf the state structure `makeStore` infers from its initial state argument is not what you want, you can explicitly pass a store type to `makeStore`:\n\n```tsx\nconst store = makeStore<{ name?: string }>({})\nstore.set({ name: \"Statery\" }) // ✅  All good\nstore.set({ foo: 123 }) // 😭  TypeScript warning\n```\n\n## NOTES\n\n### Stuff that probably needs work\n\n- [ ] No support for middleware yet. Haven't decided on an API that is adequately simple.\n- [ ] I have yet to try how Statery behaves in React's upcoming Concurrent Mode. It does work fine within React's StrictMode, though, so chances are it'll be okay.\n- [ ] Probably other bits and pieces I haven't even encountered yet.\n\n### Prior Art & Credits\n\nStatery was born after spending a lot of time with the excellent state management libraries provided by the [Poimandres](https://github.com/pmndrs) collective, [Zustand] and [Valtio]. Statery started out as an almost-clone of Zustand, but with the aim of providing an even simpler API. The `useStore` hook API was inspired by Valtio's very nice `useProxy`.\n\nStatery is written and maintained by Hendrik Mans. [Get in touch on Twitter](https://twitter.com/hmans)!\n\n[demo]: https://codesandbox.io/s/statery-clicker-game-hjxk3?file=/src/App.tsx\n[zustand]: https://github.com/pmndrs/zustand\n[valtio]: https://github.com/pmndrs/valtio\n[immer]: https://github.com/immerjs/immer\n","licenseText":"Copyright (c) 2020 Hendrik Mans\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","_id":"statery@0.6.0-0","dist":{"shasum":"3fc37819977a8bf1cc2f607af5c897eee7d3e11e","integrity":"sha512-AVtl86PdI2tOq64Ea6CNy2YmyTHqGyMXotePhkJDlhZzLf8mT7tEsUd2HndhpH1Xkk1JYxvsWDL0qC2iQkScaQ==","tarball":"https://registry.npmjs.org/statery/-/statery-0.6.0-0.tgz","fileCount":64,"unpackedSize":1032062,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVf1aCRA9TVsSAnZWagAAmFMQAJjHB55ZLAn0QgkyUJJ/\ng07O4oa5LD3wdCAXT8+EOt2mQc0USAGBd2gKocA1E0hi0wCyjb0nknlCxhV1\n3icexWnPc01JdiOJhsfp5COtxpNxzY3hqarNGeS9n2qt+bWw+0LPGB5Dq0d4\nOa003XBKs0Kw7+5UL8sfcHJxCtFtozd/CY9dBwA1FNhw0D8V57SFcGijzMlf\nNJCJaiiRX/SEk3rlxvEO1j6d0eh6xVHo6xSrAwJ/SGkIzY2VpfT0b7syCAXM\ndmMnsScWOMCGrWNPZsWl/IslsxWDa2Gy2IenF8WuGxBE8r3ZGnSNT7pkczkb\nW0yb5LGlGrxaGJXBaFZWjxYqpSRTHLuaGGdimEQEycwgj0I6jIMYHMpAUuUu\nMue/u5MIDfL5E4N6oCZDPRLN/TJCDGdHaud0k64APVCulpgeZpTqzGy6SAQn\nDNiIF/LR9SKXu1QzvUp2kxRwH6RNrvc+rvgV/5p+EREIWA25hh6MLR80fB1E\nw2FebCAjXFXwRFYEqNGsJhyqakLgjFo6Oh3d1TnOEv2E67ULAU2lHPsEf5+I\nJxZ7LTsfqpeIvdJdWaICnY/yGyy+qQn0hhwPIvdSHJ51W2WhdiuvW2hI0Qxo\nzEA52ZCYDBLiqhcK2KaKq0T7z9JxcTLNbVfnPmTg9omzVsgec+IGdxYCnRqj\nPpeP\r\n=Rw8c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuMx9Ty8UM9cxqeAvIwxqD094eKZ60SQcgjwzDnOxkAAIhAM400dD2j3HaGYVXoXkX3bPnPQiY1EYpzxTmSibeMaDf"}]},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.6.0-0_1616248153864_0.24595844095250619"},"_hasShrinkwrap":false},"0.6.0-next.0":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.6.0-next.0","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","dev":"yarn clean && rollup -c -w","build":"yarn clean && rollup -c","test":"jest","docs":"typedoc src/index.ts","release":"yarn build && yarn test && yarn changeset publish"},"devDependencies":{"@changesets/cli":"^2.24.1","@testing-library/react":"^13.3.0","@types/jest":"^28.1.6","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","jest":"^28.1.3","jest-environment-jsdom":"^28.1.3","react":"^18.1.0","react-dom":"^18.1.0","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript2":"^0.32.1","ts-jest":"^28.0.7","tslib":"^2.0.3","typedoc":"^0.23.9","typescript":"^4.1.3"},"peerDependencies":{"react":">=18.0"},"readme":"[![Version](https://img.shields.io/npm/v/statery)](https://www.npmjs.com/package/statery)\n[![CI](https://github.com/hmans/statery/workflows/CI/badge.svg)](https://github.com/hmans/statery/actions?query=workflow%3ACI)\n[![Downloads](https://img.shields.io/npm/dt/statery.svg)](https://www.npmjs.com/package/statery)\n[![Bundle Size](https://img.shields.io/bundlephobia/min/statery?label=bundle%20size)](https://bundlephobia.com/result?p=statery)\n\n```\n                                          💥           ⭐️            💥      ✨\n                             ✨                                ✨\n  ███████╗████████╗ █████╗ ████████╗███████╗██████╗ ██╗   ██╗██╗   ✨\n  ██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔════╝██╔══██╗╚██╗ ██╔╝██║\n  ███████╗   ██║   ███████║   ██║   █████╗  ██████╔╝ ╚████╔╝ ██║     ⭐️    ✨\n  ╚════██║   ██║   ██╔══██║   ██║   ██╔══╝  ██╔══██╗  ╚██╔╝  ╚═╝\n  ███████║   ██║   ██║  ██║   ██║   ███████╗██║  ██║   ██║   ██╗     ✨  💥\n  ╚══════╝   ╚═╝   ╚═╝  ╚═╝   ╚═╝   ╚══════╝╚═╝  ╚═╝   ╚═╝   ╚═╝        ✨\n                                         ✨                 ✨   ⭐️\n  SURPRISE-FREE STATE MANAGEMENT!                💥\n                                                              ✨\n```\n\n### Features 🎉\n\n- Simple, **noise- and surprise-free API**. Check out the [demo]!\n- **Extremely compact**, both in bundle size as well as API surface (2 exported functions!)\n- Fully **tested**, fully **typed**!\n- **Designed for React** (with functional components and hooks), but can also be used **without it**.\n\n### Non-Features 🧤\n\n- Doesn't use **React Context** (but you can easily use it to provide a context-specific store!)\n- Provides a simple `set` function for updating a store and not much else (have you checked out the [demo] yet?) If you want to use **reducers** or libraries like [Immer], these can easily sit on top of your Statery store.\n- Currently no support for (or concept of) **middlewares**, but this may change in the future.\n- While the `useStore` hook makes use of **proxies**, the store contents themselves are never wrapped in proxy objects. (If you're looking for a fully proxy-based solution, I recommend [Valtio].)\n- **React Class Components** are not supported (but PRs welcome!)\n\n## SUMMARY\n\n```ts\nimport * as React from \"react\"\nimport { makeStore, useStore } from \"statery\"\n\n/* Make a store */\nconst store = makeStore({ counter: 0 })\n\n/* Write some code that updates it */\nconst increment = () =>\n  store.set((state) => ({\n    counter: state.counter + 1\n  }))\n\nconst Counter = () => {\n  /* Fetch data from the store (and automatically re-render\n     when it changes!) */\n  const { counter } = useStore(store)\n\n  return (\n    <div>\n      <p>Counter: {counter}</p>\n      <button onClick={increment}>Increment</button>\n    </div>\n  )\n}\n```\n\n## BASIC USAGE\n\n### Adding it to your Project\n\n```\nnpm install statery\n```\n\nor\n\n```\nyarn add statery\n```\n\n### Creating a Store\n\nStatery stores wrap around plain old JavaScript objects that are free to contain any kind of data:\n\n```ts\nimport { makeStore } from \"statery\"\n\nconst store = makeStore({\n  player: {\n    id: 1,\n    name: \"John Doe\",\n    email: \"john@doe.com\"\n  },\n  gold: 100,\n  wood: 0,\n  houses: 0\n})\n```\n\n### Updating the Store\n\nUpdate the store contents using its `set` function:\n\n```tsx\nconst collectWood = () =>\n  store.set((state) => ({\n    wood: state.wood + 1\n  }))\n\nconst buildHouse = () =>\n  store.set((state) => ({\n    wood: state.wood - 10,\n    houses: state.houses + 1\n  }))\n\nconst Buttons = () => {\n  return (\n    <p>\n      <button onClick={collectWood}>Collect Wood</button>\n      <button onClick={buildHouse}>Build House</button>\n    </p>\n  )\n}\n```\n\nUpdates will be shallow-merged with the current state, meaning that top-level properties will be replaced, and properties you don't update will not be touched.\n\n### Reading from a Store (with React)\n\nWithin a React component, use the `useStore` hook to read data from the store:\n\n```tsx\nimport { useStore } from \"statery\"\n\nconst Wood = () => {\n  const { wood } = useStore(store)\n\n  return <p>Wood: {wood}</p>\n}\n```\n\nWhen any of the data your components access changes in the store, they will automatically re-render.\n\n### Reading from a Store (without React)\n\nA Statery store provides access to its current state through its `state` property:\n\n```ts\nconst store = makeStore({ count: 0 })\nconsole.log(store.state.count)\n```\n\nYou can also imperatively [subscribe to updates](#subscribing-to-updates-imperatively).\n\n## ADVANCED USAGE\n\n### Deriving Values from a Store\n\nJust like mutations, functions that derive values from the store's state can be written as standalone functions:\n\n```tsx\nconst canBuyHouse = ({ wood, gold }) => wood >= 5 && gold >= 5\n```\n\nThese will work from within plain imperative JavaScript code...\n\n```tsx\nif (canBuyHouse(store.state)) {\n  console.log(\"Let's buy a house!\")\n}\n```\n\n...mutation code...\n\n```tsx\nconst buyHouse = () =>\n  store.set((state) =>\n    canBuyHouse(state)\n      ? {\n          wood: state.wood - 5,\n          gold: state.gold - 5,\n          houses: state.houses + 1\n        }\n      : {}\n  )\n```\n\n...as well as React components, which will automatically be rerendered if any of the underlying data changes:\n\n```tsx\nconst BuyHouseButton = () => {\n  const proxy = useStore(store)\n\n  return (\n    <button onClick={buyHouse} disabled={!canBuyHouse(proxy)}>\n      Buy House (5g, 5w)\n    </button>\n  )\n}\n```\n\n### Subscribing to updates (imperatively)\n\nUse a store's `subscribe` function to register a callback that will be executed every time the store is changed.\nThe callback will receive both an object containing of the changes, as well as the store's current state.\n\n```ts\nconst store = makeStore({ count: 0 })\n\nconst listener = (changes, state) => {\n  console.log(\"Applying changes:\", changes)\n}\n\nstore.subscribe(console.log)\nstore.set((state) => ({ count: state.count + 1 }))\nstore.unsubscribe(console.log)\n```\n\n### Async updates\n\nYour Statery store doesn't know or care about asynchronicity -- simply call `set` whenever your data is ready:\n\n```ts\nconst fetchPosts = async () => {\n  const posts = await loadPosts()\n  store.set({ posts })\n}\n```\n\n### TypeScript support\n\nStatery is written in TypeScript, and its stores are fully typed. `useStore` knows about the structure of your store, and if you're about to update a store with a property that it doesn't know about, TypeScript will warn you.\n\nIf the state structure `makeStore` infers from its initial state argument is not what you want, you can explicitly pass a store type to `makeStore`:\n\n```tsx\nconst store = makeStore<{ name?: string }>({})\nstore.set({ name: \"Statery\" }) // ✅  All good\nstore.set({ foo: 123 }) // 😭  TypeScript warning\n```\n\n## NOTES\n\n### Stuff that probably needs work\n\n- [ ] No support for middleware yet. Haven't decided on an API that is adequately simple.\n- [ ] I have yet to try how Statery behaves in React's upcoming Concurrent Mode. It does work fine within React's StrictMode, though, so chances are it'll be okay.\n- [ ] Probably other bits and pieces I haven't even encountered yet.\n\n### Prior Art & Credits\n\nStatery was born after spending a lot of time with the excellent state management libraries provided by the [Poimandres](https://github.com/pmndrs) collective, [Zustand] and [Valtio]. Statery started out as an almost-clone of Zustand, but with the aim of providing an even simpler API. The `useStore` hook API was inspired by Valtio's very nice `useProxy`.\n\nStatery is written and maintained by Hendrik Mans. [Get in touch on Twitter](https://twitter.com/hmans)!\n\n[demo]: https://codesandbox.io/s/statery-clicker-game-hjxk3?file=/src/App.tsx\n[zustand]: https://github.com/pmndrs/zustand\n[valtio]: https://github.com/pmndrs/valtio\n[immer]: https://github.com/immerjs/immer\n","readmeFilename":"README.md","gitHead":"96a49227965d1dc896852b11224f148d98ef103c","_id":"statery@0.6.0-next.0","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-/pv5E7VbowqEOORDD/4nXTj4CRxE33pWFxhHZKGzJqoPYAsXe3zaIAWDFTjqHBkErCBjfmxVSk42csY5KY90Zg==","shasum":"687cc678752427aab78e0cf62e1aa7ccd8ed8b63","tarball":"https://registry.npmjs.org/statery/-/statery-0.6.0-next.0.tgz","fileCount":27,"unpackedSize":228656,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgFMZ6GYc87goeArxzRk2RNR5vzGJBLcG5D5mG/adLzQIgD8vmnFhgUxtPtAbOIjqwz8BWFVN5AGE1zl7+frxAutY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi3/X3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrQnw/8DUdWYTtiK6QGJZIt21JcHGTMMDH7VEBtZi4svdur7lwfNdWg\r\nT/cV2J6dmptR2oVGSZM8dzlJJ8lHBzItPoGZJY5vznYPRozM099hZs4GwRhE\r\n/Cm4Nu+N4GegLzYKq6AjqbrokYyU4RxxwF+6uLuoyMVzYVj36Z/tVSMh2GuR\r\nI3zcVL/rcJ7D22sM0ztEaBK6wyVDDgzYf3cMBoe+boPUhT2+7T0YXHGJO6rZ\r\n13AcYPYCVuaT1q9hr1dcPWYdmuOE6d6OcXwU75xjn0pFdFEu5knxKfW0jGtl\r\n1KmJICPtikbtaEe0CzIs6RQM76uN8MFFMUeHs/Aa3SFCaP6ElG931jkv7em0\r\n3Z9VzgR5mgqdnSLyvMB+p/pT31CAfsQYAIBtvvdncpbJV1hDyPzqxWWw7AoW\r\nD/9VGGKwzIY3qCFZz5wnYJck/l0HpHZyLm+53kGNcxeGLvVbNhro+tej+1kH\r\nRPE327pZfKHulnYf9n1kmSy8C59zTuxsAc9uR8MnjT+vg6BX1NDtZ6ZDNGAl\r\nUtIW+ZZ+qDPaAN60rQ0OCVOjvUQHTE/sK8RS3AK99e2+mTESMxx0WVtgbidB\r\nIrqggNMSPC+yZMcbmoIDpkIUBdyhtnLVCkK5pVZzffA6ZxQdqZCHjaj2afAO\r\njm7yGbJK9i1CIm+QupXs5e5cNlOq9JFYzeo=\r\n=jbWZ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.6.0-next.0_1658844662854_0.9158261572209989"},"_hasShrinkwrap":false},"0.6.0-next.1":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.6.0-next.1","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","dev":"yarn clean && rollup -c -w","build":"yarn clean && rollup -c","test":"jest","docs":"typedoc src/index.ts","release":"yarn build && yarn test && yarn changeset publish"},"devDependencies":{"@changesets/cli":"^2.24.1","@testing-library/react":"^13.3.0","@types/jest":"^28.1.6","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","jest":"^28.1.3","jest-environment-jsdom":"^28.1.3","react":"^18.1.0","react-dom":"^18.1.0","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript2":"^0.32.1","ts-jest":"^28.0.7","tslib":"^2.0.3","typedoc":"^0.23.9","typescript":"^4.1.3"},"peerDependencies":{"react":">=18.0"},"readme":"[![Version](https://img.shields.io/npm/v/statery)](https://www.npmjs.com/package/statery)\n[![CI](https://github.com/hmans/statery/workflows/CI/badge.svg)](https://github.com/hmans/statery/actions?query=workflow%3ACI)\n[![Downloads](https://img.shields.io/npm/dt/statery.svg)](https://www.npmjs.com/package/statery)\n[![Bundle Size](https://img.shields.io/bundlephobia/min/statery?label=bundle%20size)](https://bundlephobia.com/result?p=statery)\n\n```\n                                          💥           ⭐️            💥      ✨\n                             ✨                                ✨\n  ███████╗████████╗ █████╗ ████████╗███████╗██████╗ ██╗   ██╗██╗   ✨\n  ██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔════╝██╔══██╗╚██╗ ██╔╝██║\n  ███████╗   ██║   ███████║   ██║   █████╗  ██████╔╝ ╚████╔╝ ██║     ⭐️    ✨\n  ╚════██║   ██║   ██╔══██║   ██║   ██╔══╝  ██╔══██╗  ╚██╔╝  ╚═╝\n  ███████║   ██║   ██║  ██║   ██║   ███████╗██║  ██║   ██║   ██╗     ✨  💥\n  ╚══════╝   ╚═╝   ╚═╝  ╚═╝   ╚═╝   ╚══════╝╚═╝  ╚═╝   ╚═╝   ╚═╝        ✨\n                                         ✨                 ✨   ⭐️\n  SURPRISE-FREE STATE MANAGEMENT!                💥\n                                                              ✨\n```\n\n### Features 🎉\n\n- Simple, **noise- and surprise-free API**. Check out the [demo]!\n- **Extremely compact**, both in bundle size as well as API surface (2 exported functions!)\n- Fully **tested**, fully **typed**!\n- **Designed for React** (with functional components and hooks), but can also be used **without it**.\n\n### Non-Features 🧤\n\n- Doesn't use **React Context** (but you can easily use it to provide a context-specific store!)\n- Provides a simple `set` function for updating a store and not much else (have you checked out the [demo] yet?) If you want to use **reducers** or libraries like [Immer], these can easily sit on top of your Statery store.\n- Currently no support for (or concept of) **middlewares**, but this may change in the future.\n- While the `useStore` hook makes use of **proxies**, the store contents themselves are never wrapped in proxy objects. (If you're looking for a fully proxy-based solution, I recommend [Valtio].)\n- **React Class Components** are not supported (but PRs welcome!)\n\n## SUMMARY\n\n```tsx\nimport { makeStore, useStore } from \"statery\"\n\n/* Make a store */\nconst store = makeStore({ counter: 0 })\n\n/* Write some code that updates it */\nconst increment = () =>\n  store.set((state) => ({\n    counter: state.counter + 1\n  }))\n\nconst Counter = () => {\n  /* Fetch data from the store (and automatically re-render\n     when it changes!) */\n  const { counter } = useStore(store)\n\n  return (\n    <div>\n      <p>Counter: {counter}</p>\n      <button onClick={increment}>Increment</button>\n    </div>\n  )\n}\n```\n\n## BASIC USAGE\n\n### Adding it to your Project\n\n```\nnpm install statery\n```\n\nor\n\n```\nyarn add statery\n```\n\n### Creating a Store\n\nStatery stores wrap around plain old JavaScript objects that are free to contain any kind of data:\n\n```ts\nimport { makeStore } from \"statery\"\n\nconst store = makeStore({\n  player: {\n    id: 1,\n    name: \"John Doe\",\n    email: \"john@doe.com\"\n  },\n  gold: 100,\n  wood: 0,\n  houses: 0\n})\n```\n\n### Updating the Store\n\nUpdate the store contents using its `set` function:\n\n```tsx\nconst collectWood = () =>\n  store.set((state) => ({\n    wood: state.wood + 1\n  }))\n\nconst buildHouse = () =>\n  store.set((state) => ({\n    wood: state.wood - 10,\n    houses: state.houses + 1\n  }))\n\nconst Buttons = () => {\n  return (\n    <p>\n      <button onClick={collectWood}>Collect Wood</button>\n      <button onClick={buildHouse}>Build House</button>\n    </p>\n  )\n}\n```\n\nUpdates will be shallow-merged with the current state, meaning that top-level properties will be replaced, and properties you don't update will not be touched.\n\n### Reading from a Store (with React)\n\nWithin a React component, use the `useStore` hook to read data from the store:\n\n```tsx\nimport { useStore } from \"statery\"\n\nconst Wood = () => {\n  const { wood } = useStore(store)\n\n  return <p>Wood: {wood}</p>\n}\n```\n\nWhen any of the data your components access changes in the store, they will automatically re-render.\n\n### Reading from a Store (without React)\n\nA Statery store provides access to its current state through its `state` property:\n\n```ts\nconst store = makeStore({ count: 0 })\nconsole.log(store.state.count)\n```\n\nYou can also imperatively [subscribe to updates](#subscribing-to-updates-imperatively).\n\n## ADVANCED USAGE\n\n### Deriving Values from a Store\n\nJust like mutations, functions that derive values from the store's state can be written as standalone functions:\n\n```tsx\nconst canBuyHouse = ({ wood, gold }) => wood >= 5 && gold >= 5\n```\n\nThese will work from within plain imperative JavaScript code...\n\n```tsx\nif (canBuyHouse(store.state)) {\n  console.log(\"Let's buy a house!\")\n}\n```\n\n...mutation code...\n\n```tsx\nconst buyHouse = () =>\n  store.set((state) =>\n    canBuyHouse(state)\n      ? {\n          wood: state.wood - 5,\n          gold: state.gold - 5,\n          houses: state.houses + 1\n        }\n      : {}\n  )\n```\n\n...as well as React components, which will automatically be rerendered if any of the underlying data changes:\n\n```tsx\nconst BuyHouseButton = () => {\n  const proxy = useStore(store)\n\n  return (\n    <button onClick={buyHouse} disabled={!canBuyHouse(proxy)}>\n      Buy House (5g, 5w)\n    </button>\n  )\n}\n```\n\n### Forcing a store update\n\nWhen the store is updated, Statery will check which of the properties within the update object are actually different objects (or scalar values) from the previous state, and will only notify listeners to those properties.\n\nIn some cases, you may want to force a store update even though the property has not changed to a new object. For these situations, the `set` function allows you to pass a second argument; if this is set to `true`, Statery will ignore the equality check and notify all listeners to the properties included in the update.\n\nExample:\n\n```tsx\nconst store = makeStore({\n  rotation: new THREE.Vector3()\n})\n\nexport const randomizeRotation = () =>\n  store.set(\n    (state) => ({\n      rotation: state.rotation.randomRotation()\n    }),\n    true\n  )\n```\n\n### Subscribing to updates (imperatively)\n\nUse a store's `subscribe` function to register a callback that will be executed every time the store is changed.\nThe callback will receive both an object containing of the changes, as well as the store's current state.\n\n```ts\nconst store = makeStore({ count: 0 })\n\nconst listener = (changes, state) => {\n  console.log(\"Applying changes:\", changes)\n}\n\nstore.subscribe(console.log)\nstore.set((state) => ({ count: state.count + 1 }))\nstore.unsubscribe(console.log)\n```\n\n### Async updates\n\nYour Statery store doesn't know or care about asynchronicity -- simply call `set` whenever your data is ready:\n\n```ts\nconst fetchPosts = async () => {\n  const posts = await loadPosts()\n  store.set({ posts })\n}\n```\n\n### TypeScript support\n\nStatery is written in TypeScript, and its stores are fully typed. `useStore` knows about the structure of your store, and if you're about to update a store with a property that it doesn't know about, TypeScript will warn you.\n\nIf the state structure `makeStore` infers from its initial state argument is not what you want, you can explicitly pass a store type to `makeStore`:\n\n```tsx\nconst store = makeStore<{ name?: string }>({})\nstore.set({ name: \"Statery\" }) // ✅  All good\nstore.set({ foo: 123 }) // 😭  TypeScript warning\n```\n\n## NOTES\n\n### Stuff that probably needs work\n\n- [ ] No support for middleware yet. Haven't decided on an API that is adequately simple.\n\n### Prior Art & Credits\n\nStatery was born after spending a lot of time with the excellent state management libraries provided by the [Poimandres](https://github.com/pmndrs) collective, [Zustand] and [Valtio]. Statery started out as an almost-clone of Zustand, but with the aim of providing an even simpler API. The `useStore` hook API was inspired by Valtio's very nice `useProxy`.\n\nStatery is written and maintained by Hendrik Mans. [Get in touch on Twitter](https://twitter.com/hmans)!\n\n[demo]: https://codesandbox.io/s/statery-clicker-game-hjxk3?file=/src/App.tsx\n[zustand]: https://github.com/pmndrs/zustand\n[valtio]: https://github.com/pmndrs/valtio\n[immer]: https://github.com/immerjs/immer\n","readmeFilename":"README.md","gitHead":"4ffc7fcf96670faea96f87efa78b596662e9d272","_id":"statery@0.6.0-next.1","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-MzIHxYdw+TxoSMHh5mP3r5Wv8lJsJZmLziA8+qqqacD6RNXSXQbrlb4+BbgqTXu1whBw2X480uVh1VirICOsbg==","shasum":"11b97aaa6895fa7b60622e0ae672af435f45b7de","tarball":"https://registry.npmjs.org/statery/-/statery-0.6.0-next.1.tgz","fileCount":29,"unpackedSize":230688,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDx18Em781AJVRju0WEkHFU9jYBJ2P6s44CBXiS6Ubv6wIhAPmozoRaHIzx13yyetvpGbkY/9nOzPIf4jtEJqlIYSvm"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi4BOKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpmVhAAmPSNgNbkWBhCZ+G/KMXUJseCQ4PWlrZuMs5FfJZgJUoKtPbf\r\nmeYcPWiL4VgOx2r6aYmsDkQ0TUn3cesJRMyjQsKh360ujshWxmsjDyYy+j1o\r\nENQ1IBzVkguXyqydVxXfIwwAbKVXAjGk74qiglU2rMSjVpZcTUkJXdGncH42\r\n9mDK+bZXgLyLGtIT0+iIYcL6dxnMwWhuS5L8WIHSpRJQy+v5FTmqxo4dbd9s\r\nWpucW0kn714PGhsxUYlYsF59bU9GVD45rKqq3xLtwMpKN9FCDKNyd9cI2bh7\r\ncMq/Trn3TomYQEg5gO7poNOlgGTDpPhoOVakR3OBbD7kqr5PLwBoT1phqpjY\r\n3v73ZxGwzGyTSp2m+shrBoEPqFF7o+MJUy1OAmQBYOwfh4aNTD/7HmXm1Rp2\r\niDTwYO04Z3Xwqllgh2eTR+VwMmMXrLw0TwBTMeESQgfte5JB3GLSkShzQku6\r\n/QtFSEjiogeM8nPjF+Lg2N9BIipeJtkZecwOX+aiVjGDopNW5VvRJL4EIyxo\r\nCK2ZxQJUKdXFcFbtq83Jm1jqLgbkwUitGNoYXIblHN6f6p+Z+Uk3U8nfdgJ8\r\nGQB8YweVMd82iCEljnkrJSim1yViuf2yCsGZ/MWGWjVJKqxNXTJj59PpnC0c\r\nKRFTpKqfQiyFAoUJr50wyWwj7AdSUaym/0E=\r\n=QD/9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.6.0-next.1_1658852234240_0.15936472779501987"},"_hasShrinkwrap":false},"0.0.0-canary-20220820183424":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.0.0-canary-20220820183424","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","dev":"yarn clean && rollup -c -w","build":"yarn clean && rollup -c","test":"jest","docs":"typedoc src/index.ts","release":"yarn build && yarn test && yarn changeset publish"},"devDependencies":{"@changesets/cli":"^2.24.1","@testing-library/react":"^13.3.0","@types/jest":"^28.1.6","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","jest":"^28.1.3","jest-environment-jsdom":"^28.1.3","react":"^18.1.0","react-dom":"^18.1.0","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript2":"^0.32.1","ts-jest":"^28.0.7","tslib":"^2.0.3","typedoc":"^0.23.9","typescript":"^4.1.3"},"peerDependencies":{"react":">=18.0"},"readme":"[![Version](https://img.shields.io/npm/v/statery)](https://www.npmjs.com/package/statery)\n[![CI](https://github.com/hmans/statery/workflows/CI/badge.svg)](https://github.com/hmans/statery/actions?query=workflow%3ACI)\n[![Downloads](https://img.shields.io/npm/dt/statery.svg)](https://www.npmjs.com/package/statery)\n[![Bundle Size](https://img.shields.io/bundlephobia/min/statery?label=bundle%20size)](https://bundlephobia.com/result?p=statery)\n\n```\n                                          💥           ⭐️            💥      ✨\n                             ✨                                ✨\n  ███████╗████████╗ █████╗ ████████╗███████╗██████╗ ██╗   ██╗██╗   ✨\n  ██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔════╝██╔══██╗╚██╗ ██╔╝██║\n  ███████╗   ██║   ███████║   ██║   █████╗  ██████╔╝ ╚████╔╝ ██║     ⭐️    ✨\n  ╚════██║   ██║   ██╔══██║   ██║   ██╔══╝  ██╔══██╗  ╚██╔╝  ╚═╝\n  ███████║   ██║   ██║  ██║   ██║   ███████╗██║  ██║   ██║   ██╗     ✨  💥\n  ╚══════╝   ╚═╝   ╚═╝  ╚═╝   ╚═╝   ╚══════╝╚═╝  ╚═╝   ╚═╝   ╚═╝        ✨\n                                         ✨                 ✨   ⭐️\n  SURPRISE-FREE STATE MANAGEMENT!                💥\n                                                              ✨\n```\n\n### Features 🎉\n\n- Simple, **noise- and surprise-free API**. Check out the [demo]!\n- **Extremely compact**, both in bundle size as well as API surface (2 exported functions!)\n- Fully **tested**, fully **typed**!\n- **Designed for React** (with functional components and hooks), but can also be used **without it**.\n\n### Non-Features 🧤\n\n- Doesn't use **React Context** (but you can easily use it to provide a context-specific store!)\n- Provides a simple `set` function for updating a store and not much else (have you checked out the [demo] yet?) If you want to use **reducers** or libraries like [Immer], these can easily sit on top of your Statery store.\n- Currently no support for (or concept of) **middlewares**, but this may change in the future.\n- While the `useStore` hook makes use of **proxies**, the store contents themselves are never wrapped in proxy objects. (If you're looking for a fully proxy-based solution, I recommend [Valtio].)\n- **React Class Components** are not supported (but PRs welcome!)\n\n## SUMMARY\n\n```tsx\nimport { makeStore, useStore } from \"statery\"\n\n/* Make a store */\nconst store = makeStore({ counter: 0 })\n\n/* Write some code that updates it */\nconst increment = () =>\n  store.set((state) => ({\n    counter: state.counter + 1\n  }))\n\nconst Counter = () => {\n  /* Fetch data from the store (and automatically re-render\n     when it changes!) */\n  const { counter } = useStore(store)\n\n  return (\n    <div>\n      <p>Counter: {counter}</p>\n      <button onClick={increment}>Increment</button>\n    </div>\n  )\n}\n```\n\n## BASIC USAGE\n\n### Adding it to your Project\n\n```\nnpm install statery\n```\n\nor\n\n```\nyarn add statery\n```\n\n### Creating a Store\n\nStatery stores wrap around plain old JavaScript objects that are free to contain any kind of data:\n\n```ts\nimport { makeStore } from \"statery\"\n\nconst store = makeStore({\n  player: {\n    id: 1,\n    name: \"John Doe\",\n    email: \"john@doe.com\"\n  },\n  gold: 100,\n  wood: 0,\n  houses: 0\n})\n```\n\n### Updating the Store\n\nUpdate the store contents using its `set` function:\n\n```tsx\nconst collectWood = () =>\n  store.set((state) => ({\n    wood: state.wood + 1\n  }))\n\nconst buildHouse = () =>\n  store.set((state) => ({\n    wood: state.wood - 10,\n    houses: state.houses + 1\n  }))\n\nconst Buttons = () => {\n  return (\n    <p>\n      <button onClick={collectWood}>Collect Wood</button>\n      <button onClick={buildHouse}>Build House</button>\n    </p>\n  )\n}\n```\n\nUpdates will be shallow-merged with the current state, meaning that top-level properties will be replaced, and properties you don't update will not be touched.\n\n### Reading from a Store (with React)\n\nWithin a React component, use the `useStore` hook to read data from the store:\n\n```tsx\nimport { useStore } from \"statery\"\n\nconst Wood = () => {\n  const { wood } = useStore(store)\n\n  return <p>Wood: {wood}</p>\n}\n```\n\nWhen any of the data your components access changes in the store, they will automatically re-render.\n\n### Reading from a Store (without React)\n\nA Statery store provides access to its current state through its `state` property:\n\n```ts\nconst store = makeStore({ count: 0 })\nconsole.log(store.state.count)\n```\n\nYou can also imperatively [subscribe to updates](#subscribing-to-updates-imperatively).\n\n## ADVANCED USAGE\n\n### Deriving Values from a Store\n\nJust like mutations, functions that derive values from the store's state can be written as standalone functions:\n\n```tsx\nconst canBuyHouse = ({ wood, gold }) => wood >= 5 && gold >= 5\n```\n\nThese will work from within plain imperative JavaScript code...\n\n```tsx\nif (canBuyHouse(store.state)) {\n  console.log(\"Let's buy a house!\")\n}\n```\n\n...mutation code...\n\n```tsx\nconst buyHouse = () =>\n  store.set((state) =>\n    canBuyHouse(state)\n      ? {\n          wood: state.wood - 5,\n          gold: state.gold - 5,\n          houses: state.houses + 1\n        }\n      : {}\n  )\n```\n\n...as well as React components, which will automatically be rerendered if any of the underlying data changes:\n\n```tsx\nconst BuyHouseButton = () => {\n  const proxy = useStore(store)\n\n  return (\n    <button onClick={buyHouse} disabled={!canBuyHouse(proxy)}>\n      Buy House (5g, 5w)\n    </button>\n  )\n}\n```\n\n### Forcing a store update\n\nWhen the store is updated, Statery will check which of the properties within the update object are actually different objects (or scalar values) from the previous state, and will only notify listeners to those properties.\n\nIn some cases, you may want to force a store update even though the property has not changed to a new object. For these situations, the `set` function allows you to pass a second argument; if this is set to `true`, Statery will ignore the equality check and notify all listeners to the properties included in the update.\n\nExample:\n\n```tsx\nconst store = makeStore({\n  rotation: new THREE.Vector3()\n})\n\nexport const randomizeRotation = () =>\n  store.set(\n    (state) => ({\n      rotation: state.rotation.randomRotation()\n    }),\n    true\n  )\n```\n\n### Subscribing to updates (imperatively)\n\nUse a store's `subscribe` function to register a callback that will be executed every time the store is changed.\nThe callback will receive both an object containing of the changes, as well as the store's current state.\n\n```ts\nconst store = makeStore({ count: 0 })\n\nconst listener = (changes, state) => {\n  console.log(\"Applying changes:\", changes)\n}\n\nstore.subscribe(console.log)\nstore.set((state) => ({ count: state.count + 1 }))\nstore.unsubscribe(console.log)\n```\n\n### Async updates\n\nYour Statery store doesn't know or care about asynchronicity -- simply call `set` whenever your data is ready:\n\n```ts\nconst fetchPosts = async () => {\n  const posts = await loadPosts()\n  store.set({ posts })\n}\n```\n\n### TypeScript support\n\nStatery is written in TypeScript, and its stores are fully typed. `useStore` knows about the structure of your store, and if you're about to update a store with a property that it doesn't know about, TypeScript will warn you.\n\nIf the state structure `makeStore` infers from its initial state argument is not what you want, you can explicitly pass a store type to `makeStore`:\n\n```tsx\nconst store = makeStore<{ name?: string }>({})\nstore.set({ name: \"Statery\" }) // ✅  All good\nstore.set({ foo: 123 }) // 😭  TypeScript warning\n```\n\n## NOTES\n\n### Stuff that probably needs work\n\n- [ ] No support for middleware yet. Haven't decided on an API that is adequately simple.\n\n### Prior Art & Credits\n\nStatery was born after spending a lot of time with the excellent state management libraries provided by the [Poimandres](https://github.com/pmndrs) collective, [Zustand] and [Valtio]. Statery started out as an almost-clone of Zustand, but with the aim of providing an even simpler API. The `useStore` hook API was inspired by Valtio's very nice `useProxy`.\n\nStatery is written and maintained by Hendrik Mans. [Get in touch on Twitter](https://twitter.com/hmans)!\n\n[demo]: https://codesandbox.io/s/statery-clicker-game-hjxk3?file=/src/App.tsx\n[zustand]: https://github.com/pmndrs/zustand\n[valtio]: https://github.com/pmndrs/valtio\n[immer]: https://github.com/immerjs/immer\n","readmeFilename":"README.md","gitHead":"1b1e34ef1f37d792fe479ba7c5f14236fb6d984f","_id":"statery@0.0.0-canary-20220820183424","_nodeVersion":"18.7.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-32/eMCsVQ+bmKbWTb/seG2u4pGBNSEr8btmltmE+Mv17mI1IqOdUdBow0DM00rK32MgcmCcXRDTWjj+/FM3Mnw==","shasum":"c18bb11b7a3bd6bb5ab907dec24f25d0ea2245b8","tarball":"https://registry.npmjs.org/statery/-/statery-0.0.0-canary-20220820183424.tgz","fileCount":2275,"unpackedSize":19576195,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCz2cjbmxHrds75ypGrfIGfZftePUvC2EIkRw4fUcxEiQIgJm88pkAbwOewUWOBg1TDATcuYBpDj0Ezef/3kKWDXFg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjASloACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpA+A//Yz7U8INCF3Zc9LhkFf0wOAxnCX1KhbOAn/r5LQKn8Vm5BISY\r\nyA7G1cwkfhGBQqjT07rmjzTx/V9vaxjemBVH1BoTjYFBJ9hVAXPZuZVuGSrI\r\nBNpBAd3i9CyTI1M1uEa1yKCRgpFCwdEQSigIxCPJ36zcQlZqI73h6YB2wR+e\r\n1pOaUassoAcuSjVwpSUVNp/ZRiioh9h1SYgvcTyqTiJJqLAPefxZ7Na6iTX3\r\nVGMyzELbSJYobcNfCod8rHtWtnKPUYhMiwXiP/+uKnEVOnLPmEdT9xlx93cf\r\n098BZvPglo4fK6vC7v6XKEgAI0yjetuEGe1xscamxHF3ak8obZNpdm9tAKgt\r\n/4Hyj03TNT9Ssia/GJPUQgAqUD+swVkMq5D7Bh5qX0xStwRiU/rI3KaKN7Zr\r\n7ogZ5qudu/anXAH/TX3aXDICkGIwS3Rd+3kJo08xwCvC35/y7n9kpRudZuCM\r\nMpLC/d8bbv32AhNpySOPY0eIQrAZcS5Dk26pizBBX0/nuX4+CcnC3I+33K6l\r\nUVNOQp1ok1bQT3SapeZBP9pSlykEzK7M4M0a+Uqw7QkwaerJffPfzqgfQImC\r\njmGwhVyu60bJoKTH5fpE14mbYi9Dds6iJCcwBVh3Lughz4dZaJb5U58Csrrg\r\nKBhGrzoO+czBP7xoNphKYXP9qUVy3fAnSYQ=\r\n=98V6\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.0.0-canary-20220820183424_1661020520704_0.37608343057556315"},"_hasShrinkwrap":false},"0.6.0-next.2":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.6.0-next.2","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","license":"MIT","scripts":{"clean":"rimraf dist","dev":"yarn clean && rollup -c -w","build":"yarn clean && rollup -c","test":"jest","docs":"typedoc src/index.ts","release":"yarn build && yarn test && yarn changeset publish"},"devDependencies":{"@changesets/cli":"^2.24.1","@testing-library/react":"^13.3.0","@types/jest":"^28.1.6","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","jest":"^28.1.3","jest-environment-jsdom":"^28.1.3","react":"^18.1.0","react-dom":"^18.1.0","rimraf":"^3.0.2","rollup":"^2.35.1","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript2":"^0.32.1","ts-jest":"^28.0.7","tslib":"^2.0.3","typedoc":"^0.23.9","typescript":"^4.1.3"},"peerDependencies":{"react":">=18.0"},"readme":"[![Version](https://img.shields.io/npm/v/statery)](https://www.npmjs.com/package/statery)\n[![CI](https://github.com/hmans/statery/workflows/CI/badge.svg)](https://github.com/hmans/statery/actions?query=workflow%3ACI)\n[![Downloads](https://img.shields.io/npm/dt/statery.svg)](https://www.npmjs.com/package/statery)\n[![Bundle Size](https://img.shields.io/bundlephobia/min/statery?label=bundle%20size)](https://bundlephobia.com/result?p=statery)\n\n```\n                                          💥           ⭐️            💥      ✨\n                             ✨                                ✨\n  ███████╗████████╗ █████╗ ████████╗███████╗██████╗ ██╗   ██╗██╗   ✨\n  ██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔════╝██╔══██╗╚██╗ ██╔╝██║\n  ███████╗   ██║   ███████║   ██║   █████╗  ██████╔╝ ╚████╔╝ ██║     ⭐️    ✨\n  ╚════██║   ██║   ██╔══██║   ██║   ██╔══╝  ██╔══██╗  ╚██╔╝  ╚═╝\n  ███████║   ██║   ██║  ██║   ██║   ███████╗██║  ██║   ██║   ██╗     ✨  💥\n  ╚══════╝   ╚═╝   ╚═╝  ╚═╝   ╚═╝   ╚══════╝╚═╝  ╚═╝   ╚═╝   ╚═╝        ✨\n                                         ✨                 ✨   ⭐️\n  SURPRISE-FREE STATE MANAGEMENT!                💥\n                                                              ✨\n```\n\n### Features 🎉\n\n- Simple, **noise- and surprise-free API**. Check out the [demo]!\n- **Extremely compact**, both in bundle size as well as API surface (2 exported functions!)\n- Fully **tested**, fully **typed**!\n- **Designed for React** (with functional components and hooks), but can also be used **without it**.\n\n### Non-Features 🧤\n\n- Doesn't use **React Context** (but you can easily use it to provide a context-specific store!)\n- Provides a simple `set` function for updating a store and not much else (have you checked out the [demo] yet?) If you want to use **reducers** or libraries like [Immer], these can easily sit on top of your Statery store.\n- Currently no support for (or concept of) **middlewares**, but this may change in the future.\n- While the `useStore` hook makes use of **proxies**, the store contents themselves are never wrapped in proxy objects. (If you're looking for a fully proxy-based solution, I recommend [Valtio].)\n- **React Class Components** are not supported (but PRs welcome!)\n\n## SUMMARY\n\n```tsx\nimport { makeStore, useStore } from \"statery\"\n\n/* Make a store */\nconst store = makeStore({ counter: 0 })\n\n/* Write some code that updates it */\nconst increment = () =>\n  store.set((state) => ({\n    counter: state.counter + 1\n  }))\n\nconst Counter = () => {\n  /* Fetch data from the store (and automatically re-render\n     when it changes!) */\n  const { counter } = useStore(store)\n\n  return (\n    <div>\n      <p>Counter: {counter}</p>\n      <button onClick={increment}>Increment</button>\n    </div>\n  )\n}\n```\n\n## BASIC USAGE\n\n### Adding it to your Project\n\n```\nnpm install statery\n```\n\nor\n\n```\nyarn add statery\n```\n\n### Creating a Store\n\nStatery stores wrap around plain old JavaScript objects that are free to contain any kind of data:\n\n```ts\nimport { makeStore } from \"statery\"\n\nconst store = makeStore({\n  player: {\n    id: 1,\n    name: \"John Doe\",\n    email: \"john@doe.com\"\n  },\n  gold: 100,\n  wood: 0,\n  houses: 0\n})\n```\n\n### Updating the Store\n\nUpdate the store contents using its `set` function:\n\n```tsx\nconst collectWood = () =>\n  store.set((state) => ({\n    wood: state.wood + 1\n  }))\n\nconst buildHouse = () =>\n  store.set((state) => ({\n    wood: state.wood - 10,\n    houses: state.houses + 1\n  }))\n\nconst Buttons = () => {\n  return (\n    <p>\n      <button onClick={collectWood}>Collect Wood</button>\n      <button onClick={buildHouse}>Build House</button>\n    </p>\n  )\n}\n```\n\nUpdates will be shallow-merged with the current state, meaning that top-level properties will be replaced, and properties you don't update will not be touched.\n\n### Reading from a Store (with React)\n\nWithin a React component, use the `useStore` hook to read data from the store:\n\n```tsx\nimport { useStore } from \"statery\"\n\nconst Wood = () => {\n  const { wood } = useStore(store)\n\n  return <p>Wood: {wood}</p>\n}\n```\n\nWhen any of the data your components access changes in the store, they will automatically re-render.\n\n### Reading from a Store (without React)\n\nA Statery store provides access to its current state through its `state` property:\n\n```ts\nconst store = makeStore({ count: 0 })\nconsole.log(store.state.count)\n```\n\nYou can also imperatively [subscribe to updates](#subscribing-to-updates-imperatively).\n\n## ADVANCED USAGE\n\n### Deriving Values from a Store\n\nJust like mutations, functions that derive values from the store's state can be written as standalone functions:\n\n```tsx\nconst canBuyHouse = ({ wood, gold }) => wood >= 5 && gold >= 5\n```\n\nThese will work from within plain imperative JavaScript code...\n\n```tsx\nif (canBuyHouse(store.state)) {\n  console.log(\"Let's buy a house!\")\n}\n```\n\n...mutation code...\n\n```tsx\nconst buyHouse = () =>\n  store.set((state) =>\n    canBuyHouse(state)\n      ? {\n          wood: state.wood - 5,\n          gold: state.gold - 5,\n          houses: state.houses + 1\n        }\n      : {}\n  )\n```\n\n...as well as React components, which will automatically be rerendered if any of the underlying data changes:\n\n```tsx\nconst BuyHouseButton = () => {\n  const proxy = useStore(store)\n\n  return (\n    <button onClick={buyHouse} disabled={!canBuyHouse(proxy)}>\n      Buy House (5g, 5w)\n    </button>\n  )\n}\n```\n\n### Forcing a store update\n\nWhen the store is updated, Statery will check which of the properties within the update object are actually different objects (or scalar values) from the previous state, and will only notify listeners to those properties.\n\nIn some cases, you may want to force a store update even though the property has not changed to a new object. For these situations, the `set` function allows you to pass a second argument; if this is set to `true`, Statery will ignore the equality check and notify all listeners to the properties included in the update.\n\nExample:\n\n```tsx\nconst store = makeStore({\n  rotation: new THREE.Vector3()\n})\n\nexport const randomizeRotation = () =>\n  store.set(\n    (state) => ({\n      rotation: state.rotation.randomRotation()\n    }),\n    true\n  )\n```\n\n### Subscribing to updates (imperatively)\n\nUse a store's `subscribe` function to register a callback that will be executed every time the store is changed.\nThe callback will receive both an object containing of the changes, as well as the store's current state.\n\n```ts\nconst store = makeStore({ count: 0 })\n\nconst listener = (changes, state) => {\n  console.log(\"Applying changes:\", changes)\n}\n\nstore.subscribe(console.log)\nstore.set((state) => ({ count: state.count + 1 }))\nstore.unsubscribe(console.log)\n```\n\n### Async updates\n\nYour Statery store doesn't know or care about asynchronicity -- simply call `set` whenever your data is ready:\n\n```ts\nconst fetchPosts = async () => {\n  const posts = await loadPosts()\n  store.set({ posts })\n}\n```\n\n### TypeScript support\n\nStatery is written in TypeScript, and its stores are fully typed. `useStore` knows about the structure of your store, and if you're about to update a store with a property that it doesn't know about, TypeScript will warn you.\n\nIf the state structure `makeStore` infers from its initial state argument is not what you want, you can explicitly pass a store type to `makeStore`:\n\n```tsx\nconst store = makeStore<{ name?: string }>({})\nstore.set({ name: \"Statery\" }) // ✅  All good\nstore.set({ foo: 123 }) // 😭  TypeScript warning\n```\n\n## NOTES\n\n### Stuff that probably needs work\n\n- [ ] No support for middleware yet. Haven't decided on an API that is adequately simple.\n\n### Prior Art & Credits\n\nStatery was born after spending a lot of time with the excellent state management libraries provided by the [Poimandres](https://github.com/pmndrs) collective, [Zustand] and [Valtio]. Statery started out as an almost-clone of Zustand, but with the aim of providing an even simpler API. The `useStore` hook API was inspired by Valtio's very nice `useProxy`.\n\nStatery is written and maintained by Hendrik Mans. [Get in touch on Twitter](https://twitter.com/hmans)!\n\n[demo]: https://codesandbox.io/s/statery-clicker-game-hjxk3?file=/src/App.tsx\n[zustand]: https://github.com/pmndrs/zustand\n[valtio]: https://github.com/pmndrs/valtio\n[immer]: https://github.com/immerjs/immer\n","readmeFilename":"README.md","gitHead":"987c656ae069d35d55658cc279e39d03915896f5","_id":"statery@0.6.0-next.2","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-R52hnY8TWIOh2EQf5/uXAUHHEXiK2JgFQQ0NCQZeyCscmkrwrqmVYpau62xd7ZOhsAlwNd7CTrUX6tKvi1tDgQ==","shasum":"487460ae2fff44c3e4ab90d9e31a6ea375409097","tarball":"https://registry.npmjs.org/statery/-/statery-0.6.0-next.2.tgz","fileCount":30,"unpackedSize":232419,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCQCrPBSOjkqr1Q3oQhIG/N0c+ipfeIOBgCwUvjWK5NgIhAMJ1/6GobmkN992iHZoo8YqxgOvvNy8669Vi6z+QnHIH"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjATjwACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoyng/+P4GvN6IOKCgOU9VCulcFNa+fqQjtmEMpd8JOIObfnZSU+LCb\r\ncYKT3/0hhNO6+NZZaGwf54/4kEXpbAPQ835ghk8YZPbxkwTwiN2OcfwP0Zq9\r\nXV5cUWA03pml0o3+0nGHqaaKV9kbzi/1tcG1P3JW8MkOyB8ofjc5iTTPvgIA\r\ndzLuJV8GifulNblpwJmp/mC+tcqcZ4s90sNVGoprT2QPSOCXe3WKpgApXr9c\r\nyvP42ldhtNDbeKV0ekcVCbosf02BKWvRJA7kNf8nLIAT7mYgUs14VZb1Mf8N\r\nZHok8MLgI+iti5fyPkVS01XKB333ASBNPooMZ1Lf1nwT7ko/feb4cG9Nceby\r\nrWOT9hLmhw8s0JZVT3xoM/Sm5eaJtitndsMjk/n5hMMFxnotIMCl5TtWVVvn\r\nTPZLAIDssdtsNkiazQdGnmJrsAyBiYBoQ4L3JVoliSiJJprx2AeBNUdvz6Vx\r\nxIvWv81ZRMI7uRmd6/pFE7E3HNoU5mLTQAT+jDjUes0gIMDQ12AyJagfmcAj\r\nSiPfIE/Fo5402Juwak5ME1ls7x/hgZjEHyjsfoUTC4QZbdkIHQfctsJ5wGB3\r\ncMQGN/iypvzVRGlHeQv/xwOMI1l//LAO9WEFdcEuf6TPnVitpprQ+1/HXGyo\r\nMYMLdmZbIaeO1UxCu2dwma4CV/fwfyFMu6I=\r\n=ZyBx\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.6.0-next.2_1661024496602_0.5784947513782417"},"_hasShrinkwrap":false},"0.6.0-next.3":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.6.0-next.3","main":"dist/statery.cjs.js","module":"dist/statery.esm.js","types":"dist/statery.cjs.js","license":"MIT","babel":{"presets":["@babel/preset-env","@babel/preset-react",["@babel/preset-typescript",{"isTSX":true,"allExtensions":true}]]},"devDependencies":{"@babel/core":"^7.19.0","@babel/preset-env":"^7.19.0","@babel/preset-react":"^7.18.6","@babel/preset-typescript":"^7.18.6","@changesets/cli":"^2.24.1","@preconstruct/cli":"^2.2.1","@testing-library/react":"^13.3.0","@types/jest":"^28.1.6","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","jest":"^28.1.3","jest-environment-jsdom":"^28.1.3","react":"^18.1.0","react-dom":"^18.1.0","rimraf":"^3.0.2","ts-jest":"^28.0.7","tslib":"^2.0.3","typedoc":"^0.23.9","typescript":"^4.1.3"},"peerDependencies":{"react":">=18.0"},"scripts":{"clean":"rimraf dist","dev":"preconstruct dev","build":"preconstruct build","test":"jest","docs":"typedoc src/index.ts","ci":"preconstruct validate && pnpm build && pnpm test","ci:version":"changeset version && pnpm install --no-frozen-lockfile","ci:release":"pnpm ci && pnpm changeset publish"},"readme":"[![Version](https://img.shields.io/npm/v/statery)](https://www.npmjs.com/package/statery)\n[![CI](https://github.com/hmans/statery/workflows/CI/badge.svg)](https://github.com/hmans/statery/actions?query=workflow%3ACI)\n[![Downloads](https://img.shields.io/npm/dt/statery.svg)](https://www.npmjs.com/package/statery)\n[![Bundle Size](https://img.shields.io/bundlephobia/min/statery?label=bundle%20size)](https://bundlephobia.com/result?p=statery)\n\n```\n                                          💥           ⭐️            💥      ✨\n                             ✨                                ✨\n  ███████╗████████╗ █████╗ ████████╗███████╗██████╗ ██╗   ██╗██╗   ✨\n  ██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔════╝██╔══██╗╚██╗ ██╔╝██║\n  ███████╗   ██║   ███████║   ██║   █████╗  ██████╔╝ ╚████╔╝ ██║     ⭐️    ✨\n  ╚════██║   ██║   ██╔══██║   ██║   ██╔══╝  ██╔══██╗  ╚██╔╝  ╚═╝\n  ███████║   ██║   ██║  ██║   ██║   ███████╗██║  ██║   ██║   ██╗     ✨  💥\n  ╚══════╝   ╚═╝   ╚═╝  ╚═╝   ╚═╝   ╚══════╝╚═╝  ╚═╝   ╚═╝   ╚═╝        ✨\n                                         ✨                 ✨   ⭐️\n  SURPRISE-FREE STATE MANAGEMENT!                💥\n                                                              ✨\n```\n\n### Features 🎉\n\n- Simple, **noise- and surprise-free API**. Check out the [demo]!\n- **Extremely compact**, both in bundle size as well as API surface (2 exported functions!)\n- Fully **tested**, fully **typed**!\n- **Designed for React** (with functional components and hooks), but can also be used **without it**.\n\n### Non-Features 🧤\n\n- Doesn't use **React Context** (but you can easily use it to provide a context-specific store!)\n- Provides a simple `set` function for updating a store and not much else (have you checked out the [demo] yet?) If you want to use **reducers** or libraries like [Immer], these can easily sit on top of your Statery store.\n- Currently no support for (or concept of) **middlewares**, but this may change in the future.\n- While the `useStore` hook makes use of **proxies**, the store contents themselves are never wrapped in proxy objects. (If you're looking for a fully proxy-based solution, I recommend [Valtio].)\n- **React Class Components** are not supported (but PRs welcome!)\n\n## SUMMARY\n\n```tsx\nimport { makeStore, useStore } from \"statery\"\n\n/* Make a store */\nconst store = makeStore({ counter: 0 })\n\n/* Write some code that updates it */\nconst increment = () =>\n  store.set((state) => ({\n    counter: state.counter + 1\n  }))\n\nconst Counter = () => {\n  /* Fetch data from the store (and automatically re-render\n     when it changes!) */\n  const { counter } = useStore(store)\n\n  return (\n    <div>\n      <p>Counter: {counter}</p>\n      <button onClick={increment}>Increment</button>\n    </div>\n  )\n}\n```\n\n## BASIC USAGE\n\n### Adding it to your Project\n\n```\nnpm install statery\n```\n\nor\n\n```\nyarn add statery\n```\n\n### Creating a Store\n\nStatery stores wrap around plain old JavaScript objects that are free to contain any kind of data:\n\n```ts\nimport { makeStore } from \"statery\"\n\nconst store = makeStore({\n  player: {\n    id: 1,\n    name: \"John Doe\",\n    email: \"john@doe.com\"\n  },\n  gold: 100,\n  wood: 0,\n  houses: 0\n})\n```\n\n### Updating the Store\n\nUpdate the store contents using its `set` function:\n\n```tsx\nconst collectWood = () =>\n  store.set((state) => ({\n    wood: state.wood + 1\n  }))\n\nconst buildHouse = () =>\n  store.set((state) => ({\n    wood: state.wood - 10,\n    houses: state.houses + 1\n  }))\n\nconst Buttons = () => {\n  return (\n    <p>\n      <button onClick={collectWood}>Collect Wood</button>\n      <button onClick={buildHouse}>Build House</button>\n    </p>\n  )\n}\n```\n\nUpdates will be shallow-merged with the current state, meaning that top-level properties will be replaced, and properties you don't update will not be touched.\n\n### Reading from a Store (with React)\n\nWithin a React component, use the `useStore` hook to read data from the store:\n\n```tsx\nimport { useStore } from \"statery\"\n\nconst Wood = () => {\n  const { wood } = useStore(store)\n\n  return <p>Wood: {wood}</p>\n}\n```\n\nWhen any of the data your components access changes in the store, they will automatically re-render.\n\n### Reading from a Store (without React)\n\nA Statery store provides access to its current state through its `state` property:\n\n```ts\nconst store = makeStore({ count: 0 })\nconsole.log(store.state.count)\n```\n\nYou can also imperatively [subscribe to updates](#subscribing-to-updates-imperatively).\n\n## ADVANCED USAGE\n\n### Deriving Values from a Store\n\nJust like mutations, functions that derive values from the store's state can be written as standalone functions:\n\n```tsx\nconst canBuyHouse = ({ wood, gold }) => wood >= 5 && gold >= 5\n```\n\nThese will work from within plain imperative JavaScript code...\n\n```tsx\nif (canBuyHouse(store.state)) {\n  console.log(\"Let's buy a house!\")\n}\n```\n\n...mutation code...\n\n```tsx\nconst buyHouse = () =>\n  store.set((state) =>\n    canBuyHouse(state)\n      ? {\n          wood: state.wood - 5,\n          gold: state.gold - 5,\n          houses: state.houses + 1\n        }\n      : {}\n  )\n```\n\n...as well as React components, which will automatically be rerendered if any of the underlying data changes:\n\n```tsx\nconst BuyHouseButton = () => {\n  const proxy = useStore(store)\n\n  return (\n    <button onClick={buyHouse} disabled={!canBuyHouse(proxy)}>\n      Buy House (5g, 5w)\n    </button>\n  )\n}\n```\n\n### Forcing a store update\n\nWhen the store is updated, Statery will check which of the properties within the update object are actually different objects (or scalar values) from the previous state, and will only notify listeners to those properties.\n\nIn some cases, you may want to force a store update even though the property has not changed to a new object. For these situations, the `set` function allows you to pass a second argument; if this is set to `true`, Statery will ignore the equality check and notify all listeners to the properties included in the update.\n\nExample:\n\n```tsx\nconst store = makeStore({\n  rotation: new THREE.Vector3()\n})\n\nexport const randomizeRotation = () =>\n  store.set(\n    (state) => ({\n      rotation: state.rotation.randomRotation()\n    }),\n    true\n  )\n```\n\n### Subscribing to updates (imperatively)\n\nUse a store's `subscribe` function to register a callback that will be executed every time the store is changed.\nThe callback will receive both an object containing of the changes, as well as the store's current state.\n\n```ts\nconst store = makeStore({ count: 0 })\n\nconst listener = (changes, state) => {\n  console.log(\"Applying changes:\", changes)\n}\n\nstore.subscribe(console.log)\nstore.set((state) => ({ count: state.count + 1 }))\nstore.unsubscribe(console.log)\n```\n\n### Async updates\n\nYour Statery store doesn't know or care about asynchronicity -- simply call `set` whenever your data is ready:\n\n```ts\nconst fetchPosts = async () => {\n  const posts = await loadPosts()\n  store.set({ posts })\n}\n```\n\n### TypeScript support\n\nStatery is written in TypeScript, and its stores are fully typed. `useStore` knows about the structure of your store, and if you're about to update a store with a property that it doesn't know about, TypeScript will warn you.\n\nIf the state structure `makeStore` infers from its initial state argument is not what you want, you can explicitly pass a store type to `makeStore`:\n\n```tsx\nconst store = makeStore<{ name?: string }>({})\nstore.set({ name: \"Statery\" }) // ✅  All good\nstore.set({ foo: 123 }) // 😭  TypeScript warning\n```\n\n## NOTES\n\n### Stuff that probably needs work\n\n- [ ] No support for middleware yet. Haven't decided on an API that is adequately simple.\n\n### Prior Art & Credits\n\nStatery was born after spending a lot of time with the excellent state management libraries provided by the [Poimandres](https://github.com/pmndrs) collective, [Zustand] and [Valtio]. Statery started out as an almost-clone of Zustand, but with the aim of providing an even simpler API. The `useStore` hook API was inspired by Valtio's very nice `useProxy`.\n\nStatery is written and maintained by Hendrik Mans. [Get in touch on Twitter](https://twitter.com/hmans)!\n\n[demo]: https://codesandbox.io/s/statery-clicker-game-hjxk3?file=/src/App.tsx\n[zustand]: https://github.com/pmndrs/zustand\n[valtio]: https://github.com/pmndrs/valtio\n[immer]: https://github.com/immerjs/immer\n","readmeFilename":"README.md","gitHead":"8b2580410d047ad7031b7fcd9e3d9c04bab8ecd5","_id":"statery@0.6.0-next.3","_integrity":"sha512-ryFCmW+8wb31UL/O2HynXt3bggB8vyiBYHSD0Hmaatb8EESnwlp+I8BtiQLMsiN4sorhJx21jRtu8J7VBtGr1A==","_resolved":"/tmp/4d04d5bd00366c22e063b3280f495b5d/statery-0.6.0-next.3.tgz","_from":"file:statery-0.6.0-next.3.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-ryFCmW+8wb31UL/O2HynXt3bggB8vyiBYHSD0Hmaatb8EESnwlp+I8BtiQLMsiN4sorhJx21jRtu8J7VBtGr1A==","shasum":"b0da39cd11d0dac8afd5ea60e8974ea7a4c6a7f8","tarball":"https://registry.npmjs.org/statery/-/statery-0.6.0-next.3.tgz","fileCount":378,"unpackedSize":6195825,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE8mk4rvc5MeuVZ9APzzkT1h+AOVE8leJG8ZbSgs9hidAiEA09GBJGtRNcyfh0DOfmoRc8Nyrb4SUHhDZ9sYB/16tP0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjG3hpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpcsRAAiRyVvtApJ3e3HraKsyM+cIexcVqifuHVMa7zSLwDelP+P0ez\r\nW/8nS2wVZl24fPDxZmcxpoUSo9yJpdn3muL0EPK5vzKBJ7uocdpG6JiXm5rL\r\nQClIUhoL535FfmQPW5IVI+ZOIveA6OQyUgoj7I/txt+urtSBadT93RwKemyl\r\nR8nQXFwFJ1p1E9Hbk0TPJtYP+CBQPwrMFG80GUE1HE78WkMiOg3tJTJfWI/O\r\nAya7gy0k1s4fhhdXBqyoVh1x7V0amWLRi9JI2SPGKFZeoMTzl7KMHHJxVd4t\r\ndWdK9tnaZOI8jDGDaik6vKvIPclhGVtPyIg7Q0IiAar+s/zI7xLCCBo65YFX\r\n4V7BYYm8QtagyMU8TfJZBpKGoFo4mp4p+Y1DtK+36V1GRLUkjNRyrSJKz7a4\r\ncImyAsCrpmcwZtFpCOWadXwWoqMsnquScsgGy5T248fTPBuFgMI23w3lmxFX\r\nJMG2HPGt4j2wBiQv51unkNCFDZ4AgMuUhkH5kmMltCCH94lwW98O50vnGXsX\r\nJthH91Nht92ZB+AL0FDrjr5Z4mvO/OITNrKsoW/+/YIIwKO4QhqEbt9zrluq\r\nzAqO/d+yVIiG+dKvqMiGw2k5ffC7kGIiUEO3Zd7ZSKWNc3aGKZ83Zi/plwOf\r\nFJy1gu1QCyzo8+AFDzdFkVVe2AtYfyJmzm4=\r\n=6B3R\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.6.0-next.3_1662744681123_0.2614968281791701"},"_hasShrinkwrap":false},"0.6.0":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.6.0","main":"dist/statery.cjs.js","module":"dist/statery.esm.js","types":"dist/statery.cjs.js","license":"MIT","babel":{"comments":false,"presets":["@babel/preset-env","@babel/preset-react",["@babel/preset-typescript",{"isTSX":true,"allExtensions":true}]]},"devDependencies":{"@babel/core":"^7.19.0","@babel/preset-env":"^7.19.0","@babel/preset-react":"^7.18.6","@babel/preset-typescript":"^7.18.6","@changesets/cli":"^2.24.1","@preconstruct/cli":"^2.2.1","@testing-library/react":"^13.3.0","@types/jest":"^28.1.6","@types/react":"^18.0.19","@types/react-dom":"^18.0.0","jest":"^28.1.3","jest-environment-jsdom":"^28.1.3","react":"^18.1.0","react-dom":"^18.1.0","rimraf":"^3.0.2","ts-jest":"^28.0.7","tslib":"^2.0.3","typedoc":"^0.23.9","typescript":"^4.1.3"},"peerDependencies":{"react":">=18.0"},"scripts":{"clean":"rimraf dist","dev":"preconstruct dev","build":"preconstruct build","test":"jest","docs":"typedoc src/index.ts","ci":"preconstruct validate && pnpm build && pnpm test","ci:version":"changeset version && pnpm install --no-frozen-lockfile","ci:release":"pnpm ci && pnpm changeset publish"},"_id":"statery@0.6.0","_integrity":"sha512-5JrgU+Jrc1YI/UFIl9XwJ38Brvu613jo5JnUVsDjQo3dM/XVBtZdjJxPYMHQXNEZqDmwvL8B0iGzzDz7u7Zx0Q==","_resolved":"/tmp/90d36fa6f805696c759acf7c7bc5486a/statery-0.6.0.tgz","_from":"file:statery-0.6.0.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-5JrgU+Jrc1YI/UFIl9XwJ38Brvu613jo5JnUVsDjQo3dM/XVBtZdjJxPYMHQXNEZqDmwvL8B0iGzzDz7u7Zx0Q==","shasum":"d08e8db234ec9346c8b498599a51304b0cfd0760","tarball":"https://registry.npmjs.org/statery/-/statery-0.6.0.tgz","fileCount":9,"unpackedSize":37459,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCf5ZuDgWyoz/5cnoewIMrcSHaNQ8DGlZiYB/wwXi2AFQIhAJ8Crbf+UUjyVZobgCRfyI8UJPlJwJ66iXYhcfauf6ev"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjIIJHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoSNRAAhFWpmpkrt/iun0qAk+aUrOhy9O0T7XSbIQapyZyT10W8UKrb\r\npuBUi326A6lF5D7B6IpNZwu9mvqGD7OQ+d5yGmOJRchqvS/c98bm1Tf/gQw0\r\nOQBO7IwCTv5bo3Qu21OZkFHG6+QJfYe4GUGHjN9gh+0sPFyalp30FTvxVmz6\r\noObAfvrPGLUqMi76bLNeYRxS83DpNegFZoEkqh2ZjAsYcnQ42w/aerat3lg0\r\n7ym6XgA5jkeddmNMUFkczFS5oaFLz0aGYLahEV3G/1yC++VOOV4KXutUiQMT\r\nX3N/0GMXc/6UGuZp4xhSXIpZqrM3HSkOe+f7eTCbDDH2VP1IqQG8lEzanDNE\r\n1mET3+XqUZGWjHc2nyp34lt4+R5rEw7jqnm0mf7FulRNdLhVp6yf2vKE37XG\r\nCB1/pXgDVE/MoIzUpSl5z/xjrrBvTEp8haClGGgVXum+sJTjl5QriMPyzMgW\r\numZ2EAIXwG5LAuZ0rG2qaoLbqcrVJSS4xJkPlvrgrtmno9h3v4tXyB3CldFF\r\ngi98pnFF92q+uQcpPjmbhtV3T7STYtwoLZHI96V7mvRRqFP4S5GdV2GVQEV1\r\nfxU04rN/RKi9Y7CfY/LVqWelG7bEf/iF90B0lew0+iEMDbBFl9cNBn//2fGS\r\nbioSBn8b1hdn939wdGRHGVH4yXMyZS3UwtA=\r\n=xHPd\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.6.0_1663074887149_0.5865814161454264"},"_hasShrinkwrap":false},"0.6.1":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.6.1","main":"dist/statery.cjs.js","module":"dist/statery.esm.js","types":"dist/statery.cjs.js","license":"MIT","babel":{"comments":false,"presets":["@babel/preset-env","@babel/preset-react",["@babel/preset-typescript",{"isTSX":true,"allExtensions":true}]]},"devDependencies":{"@babel/core":"^7.19.0","@babel/preset-env":"^7.19.0","@babel/preset-react":"^7.18.6","@babel/preset-typescript":"^7.18.6","@changesets/cli":"^2.24.1","@preconstruct/cli":"^2.2.1","@testing-library/react":"^13.3.0","@types/jest":"^28.1.6","@types/react":"^18.0.19","@types/react-dom":"^18.0.0","jest":"^28.1.3","jest-environment-jsdom":"^28.1.3","react":"^18.1.0","react-dom":"^18.1.0","rimraf":"^3.0.2","ts-jest":"^28.0.7","tslib":"^2.0.3","typedoc":"^0.23.9","typescript":"^4.1.3"},"peerDependencies":{"react":">=18.0"},"scripts":{"clean":"rimraf dist","dev":"preconstruct dev","build":"preconstruct build","test":"jest","docs":"typedoc src/index.ts","ci":"preconstruct validate && pnpm build && pnpm test","ci:version":"changeset version && pnpm install --no-frozen-lockfile","ci:release":"pnpm ci && pnpm changeset publish"},"_id":"statery@0.6.1","_integrity":"sha512-aeMcn95qlZk7MsK3ZYzL4i/KgN+BKa1zGnNyothqQgyktg9DiUZvERVsxgP7Ah0xBKqjLXiRQ9mmRoak0d+vsg==","_resolved":"/tmp/a47d7cc48b257868e29190d086543fb6/statery-0.6.1.tgz","_from":"file:statery-0.6.1.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-aeMcn95qlZk7MsK3ZYzL4i/KgN+BKa1zGnNyothqQgyktg9DiUZvERVsxgP7Ah0xBKqjLXiRQ9mmRoak0d+vsg==","shasum":"6ca8bb8cd704a3ed7c0e82f747084bdeb9767e19","tarball":"https://registry.npmjs.org/statery/-/statery-0.6.1.tgz","fileCount":9,"unpackedSize":37285,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEToFAiqjMGEY4XGbiVKBbR4tXJ1gwiHD0cE8PGGxdZSAiEA+vEr9F2XIlzI13ESRLLbyIozVco4K0eGl29m0rDtOuA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjJMRrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoFpw/6Ao+1hJedaiFjk94NolTU+52AqiwPli3H3qajzfXMpatReD1L\r\naAA5R3mltfuH4/xK72PkgR3GA4KDQm+bHsroVjv8bWsinTnWrMnA//LzYb5d\r\nbOaX8RxoJBsvOQZK/Abu1zdFvNlD7sfUXLSLYJdNpJlGFkVRM2zIwm91EIfT\r\n7VaKhIuqxGxs6gMjVqUeEZihzmNQrOTVtDb4y7REDkCqwpYv9RJYaDYfICFo\r\n9onqHnqjQOQqfnQVVzAtRnmc8qHAWqCGfM8AROsm3lERcYJ9FizlYJ1sXmLL\r\nbxTB72pjz4cCNGifqjuO4figwzQZOPWuZyl5QXcKa0zFpjiZIbBdoXflg3BA\r\nhW6IT4JoyPJ8w99p44g/FVjC7EZ/nhgdQvy5eO3MjiKFqa+OmYxKQxwJQzji\r\nJQZ9VlI9eFhBOqIc698ttxjJuMsyf8XEmXKkghvFZznHOaSE/XX2yY3cheK2\r\n/5dD3EBsHky36jq8RnuL9VQr4IGywGdpr8qxt6O+7LeYXUSob7mlWnpGVDb6\r\np5et+bplGX90xch2ZBjNMmJQvC7A2AkdlrgpilblMIhpH8t0rQyJf4pG9ybc\r\npzkOrWqMei86+XoJniBcjpyM41vPBemJcnPHSIylswvapKqPk66EhrTudZGz\r\nL8WCJbWZR3bjSgJafArWqu1uTw1zKqMLaWw=\r\n=gAjh\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.6.1_1663353963186_0.28374347077758055"},"_hasShrinkwrap":false},"0.6.2":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.6.2","main":"dist/statery.cjs.js","module":"dist/statery.esm.js","types":"dist/statery.cjs.js","license":"MIT","babel":{"comments":false,"presets":["@babel/preset-env","@babel/preset-react",["@babel/preset-typescript",{"isTSX":true,"allExtensions":true}]]},"devDependencies":{"@babel/core":"^7.19.0","@babel/preset-env":"^7.19.0","@babel/preset-react":"^7.18.6","@babel/preset-typescript":"^7.18.6","@changesets/cli":"^2.24.1","@preconstruct/cli":"^2.2.1","@testing-library/react":"^13.3.0","@types/jest":"^28.1.6","@types/react":"^18.0.19","@types/react-dom":"^18.0.0","jest":"^28.1.3","jest-environment-jsdom":"^28.1.3","react":"^18.1.0","react-dom":"^18.1.0","rimraf":"^3.0.2","ts-jest":"^28.0.7","tslib":"^2.0.3","typedoc":"^0.23.9","typescript":"^4.1.3"},"peerDependencies":{"react":">=18.0"},"scripts":{"clean":"rimraf dist","dev":"preconstruct dev","build":"preconstruct build","test":"jest","docs":"typedoc src/index.ts","ci":"preconstruct validate && pnpm build && pnpm test","ci:version":"changeset version && pnpm install --no-frozen-lockfile","ci:release":"pnpm ci && pnpm changeset publish"},"_id":"statery@0.6.2","_integrity":"sha512-mO5ZMjDTZOpIMDM/wry8SDQ6pDyQaJTnBsDC2DvEfMfG44SCldw8sDuqMOjc2gLtFShuG0TZ6Ysbithzzq5T8g==","_resolved":"/tmp/a37d41df6c741018a2119d00bf9e9977/statery-0.6.2.tgz","_from":"file:statery-0.6.2.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-mO5ZMjDTZOpIMDM/wry8SDQ6pDyQaJTnBsDC2DvEfMfG44SCldw8sDuqMOjc2gLtFShuG0TZ6Ysbithzzq5T8g==","shasum":"ca44096b15c85f7c8314cf59a08fff48fb096f94","tarball":"https://registry.npmjs.org/statery/-/statery-0.6.2.tgz","fileCount":9,"unpackedSize":37534,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGhCgh6+4uVeFLkfIAsjkZdWMgiyInWpsw60LE5rGNmgIhAPR4k9qx9w0YjObXUxhfLGhsJWUbdypDlsYw1kUyGU+F"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjJWNJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrrPQ//ehqMAK5Rno8c6VPZ+3a5l+FrWlGsnGx8Tb0S2ktFaEvg6mL1\r\nW0Tga8xSMDk4WJchZ+L+p30Ksn/EkF3PkEXcHgWcD8s4tyraNXJThhEsodAC\r\n392QjxxoZrEYlRF5g8wfZ+jp4505J6a9DfWCUQ4wE6ED4jIgzk6xbyQHMLEZ\r\n6oOcyrou67wWTVykDkXJbLN0yJo4KZN1WUym0E2W5Zm3EMlevZLLF7/psUCk\r\nIU/xbfrBgRahhjD7nMtabgANQo41IsUT1N16KO9NC6g0/7fSuZJsJ+Sfz9FS\r\nerOCeTilh0FQvMDcnLYVgmqzNw2bpduyM6vbE1XMNkKzb7B//zjti79d6HA4\r\nnp7iHVVsEb4ljsk/h8jGnvLmf4bDXIGVoUrNEUpfbWDqW7X1VYE0iuD4lDcd\r\nXZ+W3VQevN7Ee+YjT3eRQGzgMoAkVXG1PhYHBRJONcB8XI3pjsqNRSLitmS/\r\nss5pGoXO99swMmbiJzPCS69gnGKzNJCtb0MPJZxfWwo4ctC7X0zSfEH6y3IH\r\nYupN6K7FJyGokr2E+bDQ/ZLvy5DmJ6+myiQLKY/RzZXGOB9JltDUR9pp37qI\r\nRw3yMt/tgb40vAk20WVpGsy54OA617B4UvmyrnOZKJ3E+a9Y07aUpolPUl8V\r\nLM1T62uoSnlHLiDiTff3dOlXg+pwd7tvKxE=\r\n=VtsK\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.6.2_1663394633453_0.8983388675659953"},"_hasShrinkwrap":false},"0.6.3":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.6.3","main":"dist/statery.cjs.js","module":"dist/statery.esm.js","types":"dist/statery.cjs.js","license":"MIT","babel":{"comments":false,"presets":["@babel/preset-env","@babel/preset-react",["@babel/preset-typescript",{"isTSX":true,"allExtensions":true}]]},"devDependencies":{"@babel/core":"^7.19.0","@babel/preset-env":"^7.19.0","@babel/preset-react":"^7.18.6","@babel/preset-typescript":"^7.18.6","@changesets/cli":"^2.24.1","@preconstruct/cli":"^2.2.1","@testing-library/react":"^13.3.0","@types/jest":"^28.1.6","@types/react":"^18.0.19","@types/react-dom":"^18.0.0","jest":"^28.1.3","jest-environment-jsdom":"^28.1.3","react":"^18.1.0","react-dom":"^18.1.0","rimraf":"^3.0.2","ts-jest":"^28.0.7","tslib":"^2.0.3","typedoc":"^0.23.9","typescript":"^4.1.3"},"peerDependencies":{"react":">=18.0"},"scripts":{"clean":"rimraf dist","dev":"preconstruct dev","build":"preconstruct build","test":"jest","docs":"typedoc src/index.ts","ci":"preconstruct validate && pnpm build && pnpm test","ci:version":"changeset version && pnpm install --no-frozen-lockfile","ci:release":"pnpm ci && pnpm changeset publish"},"_id":"statery@0.6.3","_integrity":"sha512-l4lrLF79kslh+tAnJXu8C5/N4VjPDqdR3KibPpCoFoNOj9H/U4+YaTcUN++CKMg9dz95uGypuVXeE5bzRFK4tQ==","_resolved":"/tmp/96822ce4ad2d83d9f4ee2b367d36bc1b/statery-0.6.3.tgz","_from":"file:statery-0.6.3.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-l4lrLF79kslh+tAnJXu8C5/N4VjPDqdR3KibPpCoFoNOj9H/U4+YaTcUN++CKMg9dz95uGypuVXeE5bzRFK4tQ==","shasum":"b0cd615c0de324e641f06013298b5438e354ed59","tarball":"https://registry.npmjs.org/statery/-/statery-0.6.3.tgz","fileCount":9,"unpackedSize":37884,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIELkbxKlE9xFNZx9XhTOQdKmUuXA7QWZWgiqyJnBSuh3AiEAvdnl7jaQMaS16FDTLjXxrBi7uCdQ9t6jCW9yspOAr7o="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjSkXdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpC7w//eiDsLoDbQp48ldUzcc6cWq4V3tpEJ+npxSV426eJXeq87g5N\r\nYhAAoPdkJ9f/aPtIhZlQhRnTLRA+TVcQasnZ4UyU4r29JwSW2R9V/veZMJMM\r\nPD3BnaCoH+xG/2gm1w6IzLnsp+67uFVBrjk5kS8hqkWcepx2itvuyfdvhHBG\r\noVPQO5buxdhQzj987BHV9XuuymwpSSSdH3ZfSrlnqDthyZ6RJD1A8sadjkYk\r\nZWh7P4rJmNgd4kRaTznimFm2SZwpUH2Jj+T+gmV210ypkcIZMjf0rYo6Cm/h\r\nG+bMVgGo5B/9B9iPtpMo3SKY6TYST3GjmDmY7kqbTtCSNj6byqxh4iCerRb5\r\nTyPgjar03c2e0vB5JGvyohV2jzNqqriv465cid5kPwEhTU6d1rSLhbY8B30K\r\n76YtuxbCNziiRfXZe7wF8298tiIZe6O/gKOOgApP3K7p4P9b5B0UhCb+g7Gf\r\nk5XqxOI8TWcIv5wjGu00CT5WHRs+OKYAEDsLat1nAEE4RB4v7txPt5Tx0fNk\r\n9Y1cPp4Qp2dzrB9bq2m+Cmr2VQocehCH54Br4BOZqFPZeGyuk1hmAVU3eUuz\r\nhIcevdixSb+FxZfv+Kn7n59yiuuwABjhOhj4BDwqc+f5ELWlfCSgD8OqCBAw\r\nHNShRO7BMm8GPuHKYbUc61NPCBzXHxfGGC8=\r\n=4E5s\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.6.3_1665811933185_0.5700867772193634"},"_hasShrinkwrap":false},"0.0.0-canary-20230726060214":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hendrik.mans.de"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.0.0-canary-20230726060214","main":"dist/statery.cjs.js","module":"dist/statery.esm.js","types":"dist/statery.cjs.js","license":"MIT","babel":{"comments":false,"presets":["@babel/preset-env","@babel/preset-react",["@babel/preset-typescript",{"isTSX":true,"allExtensions":true}]]},"devDependencies":{"@babel/core":"^7.19.0","@babel/preset-env":"^7.19.0","@babel/preset-react":"^7.18.6","@babel/preset-typescript":"^7.18.6","@changesets/cli":"^2.24.1","@preconstruct/cli":"^2.2.1","@testing-library/react":"^13.3.0","@types/jest":"^28.1.6","@types/react":"^18.0.19","@types/react-dom":"^18.0.0","jest":"^28.1.3","jest-environment-jsdom":"^28.1.3","react":"^18.1.0","react-dom":"^18.1.0","rimraf":"^3.0.2","ts-jest":"^28.0.7","tslib":"^2.0.3","typedoc":"^0.23.9","typescript":"^4.1.3"},"peerDependencies":{"react":">=18.0"},"scripts":{"clean":"rimraf dist","dev":"preconstruct dev","build":"preconstruct build","test":"jest","docs":"typedoc src/index.ts","ci":"preconstruct validate && pnpm build && pnpm test","ci:version":"changeset version && pnpm install --no-frozen-lockfile","ci:release":"pnpm ci && pnpm changeset publish"},"readme":"```\n                                          💥           ⭐️            💥      ✨\n                             ✨                                ✨\n  ███████╗████████╗ █████╗ ████████╗███████╗██████╗ ██╗   ██╗██╗   ✨\n  ██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔════╝██╔══██╗╚██╗ ██╔╝██║\n  ███████╗   ██║   ███████║   ██║   █████╗  ██████╔╝ ╚████╔╝ ██║     ⭐️    ✨\n  ╚════██║   ██║   ██╔══██║   ██║   ██╔══╝  ██╔══██╗  ╚██╔╝  ╚═╝\n  ███████║   ██║   ██║  ██║   ██║   ███████╗██║  ██║   ██║   ██╗     ✨  💥\n  ╚══════╝   ╚═╝   ╚═╝  ╚═╝   ╚═╝   ╚══════╝╚═╝  ╚═╝   ╚═╝   ╚═╝        ✨\n                                         ✨                 ✨   ⭐️\n  SURPRISE-FREE STATE MANAGEMENT!                💥\n                                                              ✨\n```\n\n[![Version](https://img.shields.io/npm/v/statery?style=for-the-badge)](https://www.npmjs.com/package/statery)\n[![CI](https://img.shields.io/github/workflow/status/hmans/statery/CI?style=for-the-badge)](https://github.com/hmans/statery/actions?query=workflow%3ACI)\n[![Downloads](https://img.shields.io/npm/dt/statery.svg?style=for-the-badge)](https://www.npmjs.com/package/statery)\n[![Bundle Size](https://img.shields.io/bundlephobia/min/statery?label=bundle%20size&style=for-the-badge)](https://bundlephobia.com/result?p=statery)\n\n### Features 🎉\n\n- Simple, **noise- and surprise-free API**. Check out the [demo]!\n- **Extremely compact**, both in bundle size as well as API surface (2 exported functions!)\n- Fully **tested**, fully **typed**!\n- **Designed for React** (with functional components and hooks), but can also be used **without it**.\n\n### Non-Features 🧤\n\n- Doesn't use **React Context** (but you can easily use it to provide a context-specific store!)\n- Provides a simple `set` function for updating a store and not much else (have you checked out the [demo] yet?) If you want to use **reducers** or libraries like [Immer], these can easily sit on top of your Statery store.\n- Currently no support for (or concept of) **middlewares**, but this may change in the future.\n- While the `useStore` hook makes use of **proxies**, the store contents themselves are never wrapped in proxy objects. (If you're looking for a fully proxy-based solution, I recommend [Valtio].)\n- **React Class Components** are not supported (but PRs welcome!)\n\n### Comparison to Zustand\n\n[Zustand](https://github.com/pmndrs/zustand) is a lovely minimal state management library for React, and Statery may feel very similar to it. Here are the key differences:\n\n- In Zustand, **data and the functions that modify it are all stored in the same object**. I believe this to be architecturally unwise (the README even warns the user not to accidentally overwrite their store's API.) Furthermore, this leads to Zustand [not being able to infer the type](https://github.com/pmndrs/zustand/blob/main/docs/guides/typescript.md) of the state data from the `create` function's first argument, forcing you to provide it explicitly (including the API, because it's part of the state... and so on.)\n\n  Statery doesn't share these problems; **stores _only_ contain data**. The store's type is inferred from the initial state passed into `makeStore`. You can either modify the state directly through `set`, or – the recommended approach – export an API for your store as a set of functions (see the examples in this document or the [demo] for what this looks like.)\n\n- When accessing data using Zustand's `useStore` hook, **it expects you to provide a selector function** that returns the data you want. Statery's `useStore` instead uses a **transparent proxy** that automatically registers all state properties you acceess. **You don't have to do anything special** to use this, and you never have to worry about causing re-renders for updated data your component isn't actually interested in.\n\n- Not that it matters much with packages this tiny, but Statery is _even smaller_ than Zustand (at roughly 50% the size.)\n\n## SUMMARY\n\n```tsx\nimport { value makeStore, value useStore } from \"statery\"\n\nconst store = makeStore({ counter: 0 })\n\nconst increment = () =>\n  store.set((state) => ({\n    counter: state.counter + 1\n  }))\n\nconst Counter = () => {\n  const { counter } = useStore(store)\n\n  return (\n    <div>\n      <p>Counter: {counter}</p>\n      <button onClick={increment}>Increment</button>\n    </div>\n  )\n}\n```\n\n## BASIC USAGE\n\n### Adding it to your Project\n\n```\nnpm add statery\nyarn add statery\npnpm add statery\n```\n\n### Creating a Store\n\nStatery stores wrap around plain old JavaScript objects that are free to contain any kind of data:\n\n```ts\nimport { value makeStore } from \"statery\"\n\nconst store = makeStore({\n  player: {\n    id: 1,\n    name: \"John Doe\",\n    email: \"john@doe.com\"\n  },\n  gold: 100,\n  wood: 0,\n  houses: 0\n})\n```\n\n### Updating the Store\n\nUpdate the store contents using its `set` function:\n\n```tsx\nconst collectWood = () =>\n  store.set((state) => ({\n    wood: state.wood + 1\n  }))\n\nconst buildHouse = () =>\n  store.set((state) => ({\n    wood: state.wood - 10,\n    houses: state.houses + 1\n  }))\n\nconst Buttons = () => {\n  return (\n    <p>\n      <button onClick={collectWood}>Collect Wood</button>\n      <button onClick={buildHouse}>Build House</button>\n    </p>\n  )\n}\n```\n\nUpdates will be shallow-merged with the current state, meaning that top-level properties will be replaced, and properties you don't update will not be touched.\n\n### Reading from a Store (with React)\n\nWithin a React component, use the `useStore` hook to read data from the store:\n\n```tsx\nimport { value useStore } from \"statery\"\n\nconst Wood = () => {\n  const { wood } = useStore(store)\n\n  return <p>Wood: {wood}</p>\n}\n```\n\nWhen any of the data your components access changes in the store, they will automatically re-render.\n\n### Reading from a Store (without React)\n\nA Statery store provides access to its current state through its `state` property:\n\n```ts\nconst store = makeStore({ count: 0 })\nconsole.log(store.state.count)\n```\n\nYou can also imperatively [subscribe to updates](#subscribing-to-updates-imperatively).\n\n## ADVANCED USAGE\n\n### Deriving Values from a Store\n\nJust like mutations, functions that derive values from the store's state can be written as standalone functions:\n\n```tsx\nconst canBuyHouse = ({ wood, gold }) => wood >= 5 && gold >= 5\n```\n\nThese will work from within plain imperative JavaScript code...\n\n```tsx\nif (canBuyHouse(store.state)) {\n  console.log(\"Let's buy a house!\")\n}\n```\n\n...mutation code...\n\n```tsx\nconst buyHouse = () =>\n  store.set((state) =>\n    canBuyHouse(state)\n      ? {\n          wood: state.wood - 5,\n          gold: state.gold - 5,\n          houses: state.houses + 1\n        }\n      : {}\n  )\n```\n\n...as well as React components, which will automatically be rerendered if any of the underlying data changes:\n\n```tsx\nconst BuyHouseButton = () => {\n  const proxy = useStore(store)\n\n  return (\n    <button onClick={buyHouse} disabled={!canBuyHouse(proxy)}>\n      Buy House (5g, 5w)\n    </button>\n  )\n}\n```\n\n### Forcing a store update\n\nWhen the store is updated, Statery will check which of the properties within the update object are actually different objects (or scalar values) from the previous state, and will only notify listeners to those properties.\n\nIn some cases, you may want to force a store update even though the property has not changed to a new object. For these situations, the `set` function allows you to pass a second argument; if this is set to `true`, Statery will ignore the equality check and notify all listeners to the properties included in the update.\n\nExample:\n\n```tsx\nconst store = makeStore({\n  rotation: new THREE.Vector3()\n})\n\nexport const randomizeRotation = () =>\n  store.set(\n    (state) => ({\n      rotation: state.rotation.randomRotation()\n    }),\n    true\n  )\n```\n\n### Subscribing to updates (imperatively)\n\nUse a store's `subscribe` function to register a callback that will be executed every time the store is changed.\nThe callback will receive both an object containing of the changes, as well as the store's current state.\n\n```ts\nconst store = makeStore({ count: 0 })\n\nconst listener = (changes, state) => {\n  console.log(\"Applying changes:\", changes)\n}\n\nstore.subscribe(console.log)\nstore.set((state) => ({ count: state.count + 1 }))\nstore.unsubscribe(console.log)\n```\n\n### Async updates\n\nYour Statery store doesn't know or care about asynchronicity -- simply call `set` whenever your data is ready:\n\n```ts\nconst fetchPosts = async () => {\n  const posts = await loadPosts()\n  store.set({ posts })\n}\n```\n\n### TypeScript support\n\nStatery is written in TypeScript, and its stores are fully typed. `useStore` knows about the structure of your store, and if you're about to update a store with a property that it doesn't know about, TypeScript will warn you.\n\nIf the state structure `makeStore` infers from its initial state argument is not what you want, you can explicitly pass a store type to `makeStore`:\n\n```tsx\nconst store = makeStore<{ name?: string }>({})\nstore.set({ name: \"Statery\" })\nstore.set({ foo: 123 })\n```\n\n## NOTES\n\n### Stuff that probably needs work\n\n- [ ] No support for middleware yet. Haven't decided on an API that is adequately simple.\n\n### Prior Art & Credits\n\nStatery was born after spending a lot of time with the excellent state management libraries provided by the [Poimandres](https://github.com/pmndrs) collective, [Zustand] and [Valtio]. Statery started out as an almost-clone of Zustand, but with the aim of providing an even simpler API. The `useStore` hook API was inspired by Valtio's very nice `useProxy`.\n\nStatery is written and maintained by Hendrik Mans. [Get in touch on Twitter](https://twitter.com/hmans)!\n\n[demo]: https://codesandbox.io/s/statery-clicker-game-hjxk3?file=/src/App.tsx\n[zustand]: https://github.com/pmndrs/zustand\n[valtio]: https://github.com/pmndrs/valtio\n[immer]: https://github.com/immerjs/immer\n","readmeFilename":"README.md","_id":"statery@0.0.0-canary-20230726060214","_integrity":"sha512-0zUhE3SRYn2DHgElbuRev+wEJKIRVwXoH2gBV6lPttp0Ri+Kk8LRse00aGQ7ApZD+aemNXS02ydZHXxoO4tezA==","_resolved":"/private/var/folders/q0/yr9cgrlx4nj_87sv6bdwh02h0000gn/T/0891fe79a3bdd9f6ab7a1b3dcf664311/statery-0.0.0-canary-20230726060214.tgz","_from":"file:statery-0.0.0-canary-20230726060214.tgz","_nodeVersion":"20.4.0","_npmVersion":"9.7.2","dist":{"integrity":"sha512-0zUhE3SRYn2DHgElbuRev+wEJKIRVwXoH2gBV6lPttp0Ri+Kk8LRse00aGQ7ApZD+aemNXS02ydZHXxoO4tezA==","shasum":"870f4d52e907b75234846b1725ecc5f0e72fd283","tarball":"https://registry.npmjs.org/statery/-/statery-0.0.0-canary-20230726060214.tgz","fileCount":9,"unpackedSize":34403,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF4Wx8cSjcQ+NL5up7PGJjfJ9d+dEhEXINUloJx4/2bHAiAxpmRHDEUdEupCst+Ofr59M4Mjf/BB4ltBG+5pdUeTzw=="}]},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.0.0-canary-20230726060214_1690351360872_0.6520178280938871"},"_hasShrinkwrap":false},"0.7.0":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hmans.dev"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.7.0","main":"dist/statery.cjs.js","module":"dist/statery.esm.js","types":"dist/statery.cjs.d.ts","license":"MIT","babel":{"comments":false,"presets":["@babel/preset-env","@babel/preset-react","@babel/preset-typescript"]},"devDependencies":{"@babel/core":"^7.22.9","@babel/preset-env":"^7.22.9","@babel/preset-react":"^7.22.5","@babel/preset-typescript":"^7.22.5","@changesets/cli":"^2.26.2","@preconstruct/cli":"^2.8.1","@testing-library/react":"^14.0.0","@types/jest":"^29.5.3","@types/react":"^18.2.18","@types/react-dom":"^18.2.7","jest":"^29.6.2","jest-environment-jsdom":"^29.6.2","react":"^18.1.0","react-dom":"^18.1.0","rimraf":"^5.0.1","ts-jest":"^29.1.1","tslib":"^2.6.1","typescript":"^5.1.6"},"peerDependencies":{"react":">=18.0"},"peerDependenciesMeta":{"react":{"optional":true}},"scripts":{"clean":"rimraf dist","dev":"preconstruct dev","build":"preconstruct build","test":"jest","ci:test":"preconstruct validate && pnpm build && pnpm test","ci:version":"changeset version && pnpm install --no-frozen-lockfile","ci:release":"pnpm ci:test && pnpm changeset publish"},"_id":"statery@0.7.0","_integrity":"sha512-eB8Y2LNXOPcwavRgPLNpdTrYql8cOJF2cg6Q9JgIA3/vBa+0yJEUOBQcM5ayxCoptzmgr5/fBl4TKZa1yFOqRw==","_resolved":"/tmp/c8ddaeb9a22734944721e2d24134e83a/statery-0.7.0.tgz","_from":"file:statery-0.7.0.tgz","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-eB8Y2LNXOPcwavRgPLNpdTrYql8cOJF2cg6Q9JgIA3/vBa+0yJEUOBQcM5ayxCoptzmgr5/fBl4TKZa1yFOqRw==","shasum":"9d60da0a873290f472f78a0ae240c1b5b6896b9a","tarball":"https://registry.npmjs.org/statery/-/statery-0.7.0.tgz","fileCount":10,"unpackedSize":34034,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGJ0wKoxfKYzg2hI+D1FVW9uFKnrgSn9bi7aQlvYsEzLAiEA2eCLZhTN3Oz382eHqTIRznqx36u919KryMGA5VuZ9oY="}]},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.7.0_1690872467256_0.9044688543456241"},"_hasShrinkwrap":false},"0.7.1":{"name":"statery","author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hmans.dev"},"description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"],"sideEffects":false,"version":"0.7.1","main":"dist/statery.cjs.js","module":"dist/statery.esm.js","types":"dist/statery.cjs.d.ts","license":"MIT","babel":{"comments":false,"presets":["@babel/preset-env","@babel/preset-react","@babel/preset-typescript"]},"devDependencies":{"@babel/core":"^7.22.9","@babel/preset-env":"^7.22.9","@babel/preset-react":"^7.22.5","@babel/preset-typescript":"^7.22.5","@changesets/cli":"^2.26.2","@preconstruct/cli":"^2.8.1","@testing-library/react":"^14.0.0","@types/jest":"^29.5.3","@types/react":"^18.2.18","@types/react-dom":"^18.2.7","jest":"^29.6.2","jest-environment-jsdom":"^29.6.2","react":"^18.1.0","react-dom":"^18.1.0","rimraf":"^5.0.1","ts-jest":"^29.1.1","tslib":"^2.6.1","typescript":"^5.1.6"},"peerDependencies":{"react":">=18.0"},"peerDependenciesMeta":{"react":{"optional":true}},"scripts":{"clean":"rimraf dist","dev":"preconstruct dev","build":"preconstruct build","test:client":"jest --testPathIgnorePatterns=.server.test","test:server":"jest --testPathPattern=.server.test --env=node","test":"pnpm test:client && pnpm test:server","ci:test":"preconstruct validate && pnpm build && pnpm test","ci:version":"changeset version && pnpm install --no-frozen-lockfile","ci:release":"pnpm ci:test && pnpm changeset publish"},"_id":"statery@0.7.1","_integrity":"sha512-lx51dik6NMZc5Sc5QSqdkN/yrSjog3S6DKyToyxlq2Gs2pt9FNbBLv5EoY49uH/vWCBp6qXKmHfsalE2QDuxfg==","_resolved":"/tmp/3c01594eef911869f0d6adc8441dbf85/statery-0.7.1.tgz","_from":"file:statery-0.7.1.tgz","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-lx51dik6NMZc5Sc5QSqdkN/yrSjog3S6DKyToyxlq2Gs2pt9FNbBLv5EoY49uH/vWCBp6qXKmHfsalE2QDuxfg==","shasum":"54d0b5f0903897e097fdce57841e9c3f955679dd","tarball":"https://registry.npmjs.org/statery/-/statery-0.7.1.tgz","fileCount":10,"unpackedSize":34239,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBZ4g+XnVV43hhjycvxmyEaLaGs5aBhblwIAWOYW69wYAiAhDGMaFufG6z6Y6Zg6pS1s2A7282lerQRF5dJcL2yovw=="}]},"_npmUser":{"name":"hendrik.mans","email":"hendrik@mans.de"},"directories":{},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/statery_0.7.1_1693417344660_0.2265687177958129"},"_hasShrinkwrap":false}},"time":{"created":"2020-12-16T12:29:27.570Z","0.0.1":"2020-12-16T12:29:27.721Z","modified":"2023-08-30T17:42:25.013Z","0.0.2":"2020-12-16T12:53:23.726Z","0.0.3":"2020-12-16T13:14:13.489Z","0.0.4":"2020-12-16T13:15:58.144Z","0.0.5":"2020-12-16T13:16:21.980Z","0.0.6":"2020-12-16T13:23:30.645Z","0.0.7":"2020-12-16T13:28:26.134Z","0.0.8":"2020-12-16T15:06:00.805Z","0.1.0":"2020-12-16T15:07:23.446Z","0.2.0":"2020-12-16T16:18:19.410Z","0.3.0":"2020-12-16T19:26:49.138Z","0.4.0-0":"2020-12-17T15:32:34.977Z","0.4.0":"2020-12-17T18:14:04.369Z","0.5.0":"2020-12-18T12:29:49.276Z","0.5.1":"2020-12-18T12:30:08.898Z","0.5.2":"2020-12-22T15:25:41.731Z","0.5.3":"2021-03-20T11:46:48.770Z","0.5.4":"2021-03-20T11:49:37.252Z","0.6.0-0":"2021-03-20T13:49:14.053Z","0.6.0-next.0":"2022-07-26T14:11:02.991Z","0.6.0-next.1":"2022-07-26T16:17:14.409Z","0.0.0-canary-20220820183424":"2022-08-20T18:35:20.953Z","0.6.0-next.2":"2022-08-20T19:41:36.777Z","0.6.0-next.3":"2022-09-09T17:31:21.464Z","0.6.0":"2022-09-13T13:14:47.351Z","0.6.1":"2022-09-16T18:46:03.348Z","0.6.2":"2022-09-17T06:03:53.621Z","0.6.3":"2022-10-15T05:32:13.448Z","0.0.0-canary-20230726060214":"2023-07-26T06:02:41.017Z","0.7.0":"2023-08-01T06:47:47.402Z","0.7.1":"2023-08-30T17:42:24.835Z"},"maintainers":[{"name":"hendrik.mans","email":"hendrik@mans.de"}],"author":{"name":"Hendrik Mans","email":"hendrik@mans.de","url":"https://hmans.dev"},"license":"MIT","readme":"```\n                                          💥           ⭐️            💥      ✨\n                             ✨                                ✨\n  ███████╗████████╗ █████╗ ████████╗███████╗██████╗ ██╗   ██╗██╗   ✨\n  ██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔════╝██╔══██╗╚██╗ ██╔╝██║\n  ███████╗   ██║   ███████║   ██║   █████╗  ██████╔╝ ╚████╔╝ ██║     ⭐️    ✨\n  ╚════██║   ██║   ██╔══██║   ██║   ██╔══╝  ██╔══██╗  ╚██╔╝  ╚═╝\n  ███████║   ██║   ██║  ██║   ██║   ███████╗██║  ██║   ██║   ██╗     ✨  💥\n  ╚══════╝   ╚═╝   ╚═╝  ╚═╝   ╚═╝   ╚══════╝╚═╝  ╚═╝   ╚═╝   ╚═╝        ✨\n                                         ✨                 ✨   ⭐️\n  SURPRISE-FREE STATE MANAGEMENT!                💥\n                                                              ✨\n```\n\n[![Version](https://img.shields.io/npm/v/statery?style=for-the-badge)](https://www.npmjs.com/package/statery)\n![CI](https://img.shields.io/github/actions/workflow/status/hmans/statery/tests.yml?style=for-the-badge)\n[![Downloads](https://img.shields.io/npm/dt/statery.svg?style=for-the-badge)](https://www.npmjs.com/package/statery)\n[![Bundle Size](https://img.shields.io/bundlephobia/min/statery?label=bundle%20size&style=for-the-badge)](https://bundlephobia.com/result?p=statery)\n\n### Features 🎉\n\n- Simple, **noise- and surprise-free API**. Check out the [demo]!\n- **Extremely compact**, both in bundle size as well as API surface (2 exported functions!)\n- Fully **tested**, fully **typed**!\n- **Designed for React** (with functional components and hooks), but can also be used **without it**, or with other frameworks (but you may need to bring your own glue.)\n\n### Non-Features 🧤\n\n- Doesn't use **React Context** (but you can easily use it to provide a context-specific store!)\n- Provides a simple `set` function for updating a store and not much else (have you checked out the [demo] yet?) If you want to use **reducers** or libraries like [Immer], these can easily sit on top of your Statery store.\n- Currently no support for (or concept of) **middlewares**, but this may change in the future.\n- While the `useStore` hook makes use of **proxies**, the store contents themselves are never wrapped in proxy objects. (If you're looking for a fully proxy-based solution, I recommend [Valtio].)\n- **React Class Components** are not supported (but PRs welcome!)\n\n## SUMMARY\n\n```tsx\nimport { makeStore, useStore } from \"statery\"\n\nconst store = makeStore({ counter: 0 })\n\nconst increment = () =>\n  store.set((state) => ({\n    counter: state.counter + 1\n  }))\n\nconst Counter = () => {\n  const { counter } = useStore(store)\n\n  return (\n    <div>\n      <p>Counter: {counter}</p>\n      <button onClick={increment}>Increment</button>\n    </div>\n  )\n}\n```\n\nFor a more fully-featured example, please check out the [demo].\n\n## BASIC USAGE\n\n### Adding it to your Project\n\n```\nnpm add statery\nyarn add statery\npnpm add statery\n```\n\n### Creating a Store\n\nStatery stores wrap around plain old JavaScript objects that are free to contain any kind of data:\n\n```ts\nimport { value makeStore } from \"statery\"\n\nconst store = makeStore({\n  player: {\n    id: 1,\n    name: \"John Doe\",\n    email: \"john@doe.com\"\n  },\n  gold: 100,\n  wood: 0,\n  houses: 0\n})\n```\n\nIf you're using TypeScript, the type of the store state will be inferred from the initial state; but you may also pass a type argument to `makeStore` to explicitly set the type of the store:\n\n```ts\nconst store = makeStore<{ count: number }>({ count: 0 })\n```\n\n### Updating the Store\n\nThe store object's `set` function will update the store's state and notify any listeners who have subscribed to changes:\n\n```tsx\nconst collectWood = () =>\n  store.set((state) => ({\n    wood: state.wood + 1\n  }))\n\nconst buildHouse = () =>\n  store.set((state) => ({\n    wood: state.wood - 10,\n    houses: state.houses + 1\n  }))\n\nconst Buttons = () => {\n  return (\n    <p>\n      <button onClick={collectWood}>Collect Wood</button>\n      <button onClick={buildHouse}>Build House</button>\n    </p>\n  )\n}\n```\n\nUpdates will be shallow-merged with the current state, meaning that top-level properties will be replaced, and properties you don't update will not be touched.\n\n### Reading from a Store (with React)\n\nWithin a React component, use the `useStore` hook to read data from the store:\n\n```tsx\nimport { value useStore } from \"statery\"\n\nconst Wood = () => {\n  const { wood } = useStore(store)\n\n  return <p>Wood: {wood}</p>\n}\n```\n\nWhen any of the store's properties that your component accesses are updated, they will automatically re-render, automatically receiving the new state.\n\n### Reading from a Store (without React)\n\nA Statery store provides access to its current state through its `state` property:\n\n```ts\nconst store = makeStore({ count: 0 })\nconsole.log(store.state.count)\n```\n\nYou can also imperatively [subscribe to updates](#subscribing-to-updates-imperatively).\n\n## ADVANCED USAGE\n\n### Deriving Values from a Store\n\nJust like mutations, functions that derive values from the store's state can be written as standalone functions:\n\n```tsx\nconst canBuyHouse = ({ wood, gold }) => wood >= 5 && gold >= 5\n```\n\nThese will work from within plain imperative JavaScript code...\n\n```tsx\nif (canBuyHouse(store.state)) {\n  console.log(\"Let's buy a house!\")\n}\n```\n\n...mutation code...\n\n```tsx\nconst buyHouse = () =>\n  store.set((state) =>\n    canBuyHouse(state)\n      ? {\n          wood: state.wood - 5,\n          gold: state.gold - 5,\n          houses: state.houses + 1\n        }\n      : {}\n  )\n```\n\n...as well as React components, which will automatically be re-rendered if any of the underlying data changes:\n\n```tsx\nconst BuyHouseButton = () => {\n  const store = useStore(store)\n\n  return (\n    <button onClick={buyHouse} disabled={!canBuyHouse(store)}>\n      Buy House (5g, 5w)\n    </button>\n  )\n}\n```\n\n### Forcing a store update\n\nWhen the store is updated, Statery will check which of the properties within the update object are actually different objects (or scalar values) from the previous state, and will only notify listeners to those properties.\n\nIn some cases, you may want to force a store update even though the property has not changed to a new object. For these situations, the `set` function allows you to pass a second argument; if this is set to `true`, Statery will ignore the equality check and notify all listeners to the properties included in the update.\n\nExample:\n\n```tsx\nconst store = makeStore({\n  rotation: new THREE.Vector3()\n})\n\nexport const randomizeRotation = () =>\n  store.set(\n    (state) => ({\n      rotation: state.rotation.randomRotation()\n    }),\n    true\n  )\n```\n\n### Subscribing to updates (imperatively)\n\nUse a store's `subscribe` function to register a callback that will be executed every time the store is changed.\nThe callback will receive both an object containing of the changes, as well as the store's current state.\n\n```ts\nconst store = makeStore({ count: 0 })\n\nconst listener = (changes, state) => {\n  console.log(\"Applying changes:\", changes)\n}\n\nstore.subscribe(console.log)\nstore.set((state) => ({ count: state.count + 1 }))\nstore.unsubscribe(console.log)\n```\n\n## NOTES\n\n### Stuff that probably needs work\n\n- [ ] No support for middleware yet. Haven't decided on an API that is adequately simple.\n\n### Prior Art & Credits\n\nStatery was born after spending a lot of time with the excellent state management libraries provided by the [Poimandres](https://github.com/pmndrs) collective, [Zustand] and [Valtio]. Statery started out as an almost-clone of Zustand, but with the aim of providing an even simpler API. The `useStore` hook API was inspired by Valtio's very nice `useProxy`.\n\nStatery is written and maintained by [Hendrik Mans](https://www.hmans.dev/).\n\n[demo]: https://codesandbox.io/s/statery-clicker-game-hjxk3?file=/src/App.tsx\n[zustand]: https://github.com/pmndrs/zustand\n[valtio]: https://github.com/pmndrs/valtio\n[immer]: https://github.com/immerjs/immer\n","readmeFilename":"README.md","description":"A happy little state management library for React and friends.","homepage":"https://github.com/hmans/statery","keywords":["react","state","state-management","hooks"]}