{"_id":"@chasemoskal/snapstate","_rev":"15-5beb7b896c8f74dbfa43796918455c28","name":"@chasemoskal/snapstate","dist-tags":{"latest":"0.0.9"},"versions":{"0.0.0-dev.1":{"name":"@chasemoskal/snapstate","version":"0.0.0-dev.1","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/snapstate.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/snapstate.test.js"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"dependencies":{"mongodb":"^4.3.1"},"types":"./x/snapstate.d.ts","gitHead":"2b81660a21b13119d48be99c6258dfb4aa51f50f","_id":"@chasemoskal/snapstate@0.0.0-dev.1","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-ze+CJ14RKWmiwHiu+q09XXiKa2G3INY+A/JJEozY6zWMs/NVAwy0bK7WezCy0wFI1s/NTlnt7eaMafwGRd/Zcg==","shasum":"978112ca99ce5188e39fd772f98a40650fb84e41","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.0-dev.1.tgz","fileCount":67,"unpackedSize":58012,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+J4xCRA9TVsSAnZWagAAwIsP/jdXIyJNTVaAXwRZUwsa\nYB4+hxNuYodJY7M/pnLzZcrZTUO53JcivqJ9OJaXnRZ9ZVi9zjCNcY0ALmb0\nBpVW1SXPKjudgNsm1n8UYL2EaPGilWkjBZxn3n+P+jwVvU1EqEMAP28PKtjc\nM9yby9XFDVxglLJs48zmUNgjnEWoQhVJmDuNzrQqSCaVulMYiTBU5Yn9njJM\nc+rldGwe+KctH2NJ37GY4UXwZz2sWSIgYd7AHn/s+yqED37sFBBo+U9kB899\njjJaQgFN/bJ8SUOrE29tU0uE/1cp0l4EfSQmNObwEF3mTZ/i6xiLWiXLA6Hd\nBFyV/3AySLjYH6FQkGTtso6G8yKufmgxT3obhoAV1wWKtYInQ8YXko1DjfQD\n3c2rugvQ7YWV35ZxncH4sZ2esaJeEolnT1TYFN0DTHfKzfPVhk+8gFwoHi//\njF1Ko2uCvAI42WX647fHUmE69C/ZWwNA33HGcpEffaIru8MXQqcly0IRWfx3\n5PqsPIPg0dzbvh6eac+8kC6ecuUCkDRv7moXhYvcTRCAJzz6qEXrw+z9ahxv\nRFKxXUVs5bMeDD0t1BaBmE9EORoLmprMzPeBTG7wnLfB7gW4fSaJVOaswT5Q\nhfevoNMP/PMRGMXwRBdrob9jN8f7kzYzVOHV3z3WKrtRcTyI+Y3KfqBSBR9T\nvWi2\r\n=GPY2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9yyve8++mBysdnL0WGX94C613TJmX2WudfGQ30NnK0AIhAJqNTqZOQvu7MEvjIJ7U4MIymiBWyNtqdEf87JfcYyHg"}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.0-dev.1_1643683377264_0.357718352537044"},"_hasShrinkwrap":false},"0.0.0-dev.2":{"name":"@chasemoskal/snapstate","version":"0.0.0-dev.2","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/snapstate.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/snapstate.test.js"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"dependencies":{"mongodb":"^4.3.1"},"types":"./x/snapstate.d.ts","gitHead":"f60f6cfd229573059166616bcd0a80e3b819fac3","_id":"@chasemoskal/snapstate@0.0.0-dev.2","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-AJeYAFHUdB+XWBCNI5CvrAWfz2SGebcsDqUn28C4aFi07LCYSE86/ubeH75EUb4u578vaH3s0bzP5YY9k5uzwQ==","shasum":"53e3a0d22e541bad7c93e8b937647b1044f498d8","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.0-dev.2.tgz","fileCount":67,"unpackedSize":58276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+KD9CRA9TVsSAnZWagAAhfMP/1LgqYZVhVtH7bggy3g6\nktOj4bWzxonLcQvx2dF8sIy0de/pcSCOz/SmYI59jYhiACGvftd1OmbhZ71p\nlfsVhqNZwuTNM6o0YvO+INVAmXSuqJ3/6PWPmTty87K4rzU4fprpRlJLa/9e\nK8Os4+Ntq9U0OjC/ZiKyg499N8y24RUOh4wRbyL0ZjyAMYDSULlCs+CJxsJ0\n3lcacodpVGHTG4cI3doGMzqm924klJ2+a3LWaOzGlN+R59q/Zlw6Bf2NyMyq\nAeUIMHQSjJ1mo5z+HMmNLDJSNhCEwBeL62knbrg3x7U4BJa9JV1jzpLOShKg\nDmxRi6y7nU+awOTtP0eDQ23XEhm2/KhqfXABP+XxKShqPjJ0N1kIRSsiJzX6\n1NknHw7mmm0ms9NJS6ChS9BnmsPkvokyR41m4H1GE3WUIiirXzeVyYzV8sme\nkRfulYMIJsW2LkGOE6ZGpHQekHASvt9fptY21goOHRqBoMBuuZBjsw7U+QEA\nqCQ9r7kdmT5Qur6rqlez6uPI1nBsq2W4EcX5LpsAZYeDdYj3RWC3jbDNrwXB\nZcZBJg7DCQBQIU5TOzMvG6bT014F0aAITlc1CKv5xROvzlzm8Z8aVYURxrDH\ngPEC54YoGyF6R80DKhgUipdXxAQAjKaLGFK3s84SI7Hff+eQjgXn+WSDfTI2\nWwli\r\n=XXhw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA/QTQCoC4daskVUHBzPp8Ci+Hu0apnQYgk5N3YEl6W6AiEAtcFAS+1SGJr1kr7AzB8gLCMBMPBnIhJOp4emcxMAckc="}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.0-dev.2_1643684093130_0.8239464807576293"},"_hasShrinkwrap":false},"0.0.0-dev.4":{"name":"@chasemoskal/snapstate","version":"0.0.0-dev.4","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/tests.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/tests.test.js"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"dependencies":{"mongodb":"^4.3.1"},"types":"./x/snapstate.d.ts","gitHead":"b57926f1bbe416e1c60286eed139412ed654e696","_id":"@chasemoskal/snapstate@0.0.0-dev.4","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-ebRqvx9N/B+fopwEGJ7TQ+qXOymxnlL5rNrraI2e1tDAue7QPyqOXuFn0hdOHtrIkHTsJQZ2ogkMtTR5I5ZZMw==","shasum":"ab2e452f4cc9b46ada5c5126749520019a3875cc","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.0-dev.4.tgz","fileCount":55,"unpackedSize":95960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+ispCRA9TVsSAnZWagAAgHAQAJRynIBHKRvqT6bFTeKg\nvyspxSTsYwHBPRgR6095809Z26x5ydZVFE8sU+E1bMBz1LX57GfamSMSJ193\n2iaUF3FJfL2dYdNI59+wExjxOSc72B7bWGUpKx8QwSpozg9dnLCvL1th92Fb\n5JlJNtgiY4CKHUfMf02d/XOPRVugFdCkvXNjYRFLOfF+jBHb4zwcrzjQBhu7\nNwjXa8YIGbShtZbLXv/b5MJhzLX7CWLaZG/xzcNctZtBjBsqahQCdnsFN9YP\n6RE/V008wXbY0U+GwHxtleOV3nz1/Q3Kr7OWIWbyCpcDnCrmPixQ8sYqPv1y\nXMmtarz904gcqla1umT3op8p6oYawAN3VQurQK2vH/zeNv2nXel6g6TGCpio\n2dby8H1QJ3qbPr9ioYTN3sW35aHMkd2+Lr3RhbemKSDooJGJ822ny5dWVxoX\nfpqXoGF4H2pTc8tuSUayYBSGGeL80J98Bc+dYG7BrG0rL9Tcrqy2UCgEZ6l7\nOTV+Ktl7gqHiHglxFDw919/Zbr2oOKKH1LXQSeNZL13ZPPG3bAFvxxthfVu7\nBfvOSABaUeD2YSFCbZbaUIMFcx0zZWXO0ZiGTfIx5SAKQiRjYtOzUoJ0HjVi\nt21l6r8q60inFTxExXA9nOiXm4uFeuIP8G3+ckcr4sT3BFg/lsyXa5Ek1O27\nFaHg\r\n=vOas\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFkblZOspVK/zQSPvheFM9qMdBtjj0U+XXvc7XrGWvtpAiBGv1IT5VrhJhUzW30DAc6WQsdQ6ftda+2VRnArN/CTUg=="}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.0-dev.4_1643785000991_0.6499478441234476"},"_hasShrinkwrap":false},"0.0.0-dev.5":{"name":"@chasemoskal/snapstate","version":"0.0.0-dev.5","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/tests.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/tests.test.js"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"dependencies":{"mongodb":"^4.3.1"},"types":"./x/snapstate.d.ts","gitHead":"8755ae50085ed6dc8a6160a835ffcc6e3315d700","_id":"@chasemoskal/snapstate@0.0.0-dev.5","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-sy4scqZnzCvyvy+FuWP4cKucgrGzFnDWppwnnM/i5Yd2MwoQJ6cXzXkfcf0a5848LFe0nVzaFuvgYTX3uq6MHQ==","shasum":"eb8b8fc333a66fae84dba2f1344e84b0ed9e55f1","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.0-dev.5.tgz","fileCount":55,"unpackedSize":97999,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+mRyCRA9TVsSAnZWagAAD88QAJrUK91DGfO6k+tBfiCl\nA3uzBhBF8D88o5+s8HPXRUqCaheblfZZrMOgqH/WEfjeel3icObV8b4AaS1q\nmYvhLriuwkgaUy2/4tpWld94RAaF7YWR8rec+5CTjNsh+/GZll0gq3BBfdJ/\nvgINGFXuAfqXyGshL4SYgUbMimTSfPxuc6wRpXumG9B8Vx7oPaSbDYz8ReFI\nV/3dpEKE/4lkh2KyhPKIQ51vxMOaFnrGzvcgIitrnLVSs7etMSPwQw4jj6dI\nKcJAYIBsBKGsw5Id8CiKelwWUxPIRXwt5/m17qHm4T3jQJXyuIPMaAJ+5jEy\npcbHMlXLDRCs//xhARQ/Fvgbn/GIbq9lkV4Y5BTnduBeyPwC2q60Rq5C4ZQY\n9qyo7PKyCUsGvGV8zAHKXlkRO9rhOjQglNip+zJrtGsqI43tPn0NVIFq75x8\nvck4PyAYGOf7HxzVp4FsavK3oOb3Vo47LDC7Qu23oVQzPcjnT1ubVjSBYrwA\n21KPHAApGO3ZibEueU0hpB5kSFZ3myzkkYlE6/P7U5L5NSGyuA44xdGKEta2\n0LYMx8GHGrcw0pP4THDowriG1N6Pyp05PfP+uYkGOonnAQNFgxdXnYQPnjwo\nU5ljfFZ09/4wzK6ooOwydlK314NtL1VOuu5wyAF2Xcmftj1s7jCDnGXo7eRG\nzDiK\r\n=09GF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRNK1lOF7pAsBkWGRw0wkRVYURKwb3GZQX63ZXiUleTQIgIoxDcTM/7YeA6acaSRM8kEormWTmj+NF1IVfjGuIgd8="}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.0-dev.5_1643799666076_0.23727716806288135"},"_hasShrinkwrap":false},"0.0.0-dev.6":{"name":"@chasemoskal/snapstate","version":"0.0.0-dev.6","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/tests.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/tests.test.js"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"dependencies":{"mongodb":"^4.3.1"},"types":"./x/snapstate.d.ts","gitHead":"32bc0dfdcaf41ea2b046af7fc2b4dbb88a8cda20","_id":"@chasemoskal/snapstate@0.0.0-dev.6","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-AsgX+dBXtJuv4zrRfM+qAHn8qIgU1sWXnRst8PzO2N83swnw/YeSnEpOQlmjDA4bbZcxhjixlcJqu+WBJamt+g==","shasum":"b7e0eaeb7e85b355245c81d513997dc8c181d8d7","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.0-dev.6.tgz","fileCount":59,"unpackedSize":110330,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+6ZsCRA9TVsSAnZWagAAciUP/AgbCvjn2ivjrL+G1udw\n7WCPNcR6Or5uY1XN0e2SbewEBFDeA+tKqwcPNhJcdtwS2zuUL55EpKh9Scq2\n1njVxGShEkP0PjIOSZKQaKqoT+v/+ZbTNHps551zgmoUmNqwzKhtnMrVPO2v\nbdWI5tWldLTYhFNYEB5xf7W5w1S+x/gX5xe/JmfsxaWthEqWZdg9cWvgr7xB\nIG0JHkE3NS6nds6UcAG9f9G64xMJnq3ex/i6k7uS9JavLy8qWxEsODG4Rrj8\nMnFej4b/avgJW8jbUV5q7EJfyflRRydCyCT5BaBZSAsVwwPGEcEq3NRi00ny\n3zKlNLMrNOGVOQKkSmwhvO04SgvCNQqqU9jWgK6ysJmhXVbPx5GcY1ZjM3KM\nPsNht15KGzudk54/VtIjeKRhA9oLaumVZNUf2D3sui7jO51AhHrKMiQeSD9B\nrBjKUHQKgJ4n/Ab+ygh45vu21vVnTW7DCPKZa8XDsbyZar1tzwUSHB0xfvFE\nptbMDrf9Ym1iojz0zctZfJY3y7yyl2hjeN1qmYyh6JlgRZJiO9kjksyqXgfY\nHMfpWvBPH7ZiFKPN+X6/aszKHITfp9W0oDVsIErKDxxdrdzKRKm5wr5ciXtY\nll+3mSXiNZalE9pVeYiyUAqhg7ncj3piLhsmTvOe3AbULD8n9+R0kKywM4bT\npJOW\r\n=3Ky7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF3WxHD17Sgg00K6JBRBD/ksbCIJ4Tr5CClo6wWVbRGdAiA05G5RcoEtXxMHd8+rXOtVT/FtPyu+N9VfDARM82ydCA=="}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.0-dev.6_1643882092029_0.7471121694249838"},"_hasShrinkwrap":false},"0.0.0":{"name":"@chasemoskal/snapstate","version":"0.0.0","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/tests.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/tests.test.js"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"dependencies":{"mongodb":"^4.3.1"},"types":"./x/snapstate.d.ts","gitHead":"83ec18ed447b25552ea1b114ff6a076a63d95fc7","_id":"@chasemoskal/snapstate@0.0.0","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-VCKbL9/QWreofc1SvouYPqId+hoQ7CJYcfo/tR4MGRvdVPafPMc4V6dPm1Xf4ohss3LpQiSyviqqDybYAxAYKg==","shasum":"49e5defa2ef3bb681c276bc77a22ed6c1f7080bc","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.0.tgz","fileCount":59,"unpackedSize":110560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/21yCRA9TVsSAnZWagAA6u4P/0ReQO+x2421e/Z9dnmf\nCLj/pTNDAb7PXnUnMz7Z2PoBtAJZOHUjGiNzo+BCsubhp2U5gqNSy+6cw6hl\nE9OdYHTmjVrHEestOKwB23LgTT+eoJR8sqBE7/L3lylbtts0505eTXslWBrK\neBCsXZm/Mk2aDE1R06i4cv6mHbJE3nEDKlu49x10H17bCNprCUY3zZspUMeg\n/l+fI2breEvq/aSRoBNY+iCM93lp1BEzIicn7Da6bslmgBVFqoCzlwkc353L\nEOqo+R5kjRLac/9t2o3F96uEvj3nVZdBJWwHpx2KiWOUuRhBCFS0wu2Ns7Yk\nCKBEq+eHVbIzpglMJjHhzs+MVpFT3trGWIqjo6uyv0YyU//ZvGpILZrVHr3w\na9JEFTBpxnJlVtqZHO3uqrRx6mZzjAht2SpAi4nkPJTWkf95ttpXlO6P8seM\nRbteAODlHgCzIE+IjEGdj9EJ5QUhLTZuPkXf/tKMwD8OhrTa/4HlFspBB60k\n1x4NZRP9phxCFQS778dKY5uworAU4s14bi6qNzpAzdl1Buma1ASvI/fvNbEZ\n2veMShyoUGZfgKwt+i2YhV91TIKUYS5nYc+pNyuaNXnFsQ+1ymLqEZEwmAGo\nVne2mMk5GYOrhAEE4IE65+fxcTJrLUWJeqRwbGxdMZlnY4jcyRAK8mve8ufP\nxTLw\r\n=zBCf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFU6fTUxdPI+iaCSXYmXQvCnhOlArPlH9WQL104T/Gw1AiEArnBuznfQX2Sepea+8NzYzrgeWqNluyrJ6cnvM/ZrahA="}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.0_1644129650688_0.3158005152034342"},"_hasShrinkwrap":false},"0.0.1":{"name":"@chasemoskal/snapstate","version":"0.0.1","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/tests.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/tests.test.js"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"dependencies":{"mongodb":"^4.3.1"},"types":"./x/snapstate.d.ts","gitHead":"dfcdb3760bb8e0c355ee8ce263b0de5130d72b39","_id":"@chasemoskal/snapstate@0.0.1","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-TbMDRFEsvps+tzp6CpVOGVp7FbTLbTIH+lZ14jpjL306Uc0lOWu7ee8phNfkU8W8W1dgHYIvFvNcQd39EyyDOQ==","shasum":"100f78d678066133df89f60c303a34c97d53eada","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.1.tgz","fileCount":63,"unpackedSize":114035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/3PdCRA9TVsSAnZWagAA718P/02WD8QDx8DxKPiH+wIq\nbidyCnDG0JQvSpCW/QScidZQapY83vu1bU/wzPPdc92TuWckb1jrzumUnC4F\n16irC5mpy6/NRDbDP7w6O379+z2N3A6TR7D3m5eNCJVNrE2/1zsmhNUKhHJR\nfxKKD5+4+FBqFGhR77A6p9GaH16qz/4YYfMh1JkDkFrrfDvU8bKFYk5NLKn7\nBTt7/arvD62TKyDElS5kKDzlAuDC6FxH0Lj9i64c8jo2y1V9ZhhKfugZYefa\nd5S86SJsAj53Mm4zC441pdYRASnKpcRYMABrtjM8edsYU0EKRBwKgAmMhHFk\nC4+gRBBSTxdc/OS8jqz9SxojOUWcxidet+tQeG5OPTCuT+0QM1eqrHDZ3Ox3\nSDeYeadorJb8Pfxb8USO1M1TSCtythdqON32Hldkl9vQLysa4X3QICTqMCj8\n+zK76GMjVWDqNuHa0vvT09qgabRERnY9ZX9HiUt9MmK6FgUWiKpjGN2i+yOE\nqEJYZlx/YIUpKhE0GjqUZUOXkdMEDvU99FRQ4f/xUriTqWrlpb5AElpgQmob\noRnsCH53bWYTwcJD/kE1AHQFUcX7f66YUQcYWVf6NN4BXf/sJHCbo41s8Rcq\nITO5BvbIKqhQq4GbyhVcA8qd7d8IsbjQwdO/JyJPIawpjU3499B3OLHIqGCc\nYW+9\r\n=AeSP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyw/xX561vDPh+kX/irIadZxjt5FoVbsJAr6jA3k5kQwIgQT8zOqu+sctMLKh+AS0ARfh3RI7F9ZIoopvjErDrX9k="}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.1_1644131293796_0.22761899599660573"},"_hasShrinkwrap":false},"0.0.2":{"name":"@chasemoskal/snapstate","version":"0.0.2","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/tests.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/tests.test.js"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"dependencies":{"mongodb":"^4.3.1"},"types":"./x/snapstate.d.ts","gitHead":"2158aaff601d22dfbc0f377e5f528366077dbd26","_id":"@chasemoskal/snapstate@0.0.2","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-zzWocXALUY+dWRVBjd4lsrnQocl+C1zW2hi70YiIEJ4OPauyicUMWG5qdmPEJO2AKyTdWBS7ekS9s2JCiEWamg==","shasum":"4f5bff2ceb0a8b9429a30f448763a0eb06ccfa52","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.2.tgz","fileCount":63,"unpackedSize":114671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/46nCRA9TVsSAnZWagAA7ykQAJeQ8i2ukPmHm0vgdxsA\nGKTdY9fH3UCBrdRuB0wFuUcSngxG+Gm1HF0EoX41kMuA+CGPpFTw52f0URj6\nLvZCJBLc07WhjVY2/3vUR6fVFL116gJQ3AkLHQJFLTLIvr10TF3lXE81NBfu\ntYQNSZyxpGOfq5QLVN1zwlBPf1xHtBXOazMyKl1duipfKzojhjVuV7Ng+Gu0\nNfx2t/YHuXwqYPHnjCcc8YbosjcfocYc4ycv0RfsvEcKNthjQNXmnwVEx/WC\nB3LO4zBx5eOB/Dt4Q8uR1Qg57H81F0ed7fnzZuOKG4Ul/Hn7kMe+X1et2032\nahdBWSXgJUPBQGMsJqBvWGD+nZmOlFx7oVWBxg0SaErM9mUZL3EIDN3StCgu\nbCTHRhPeQRqx79jOKtMghs7xGX24IfkdZhwMKxKXICbZm2ylpFSUp1VLg18R\nUyrmj7r55xVDznX4iByOVhZhvCYGDtDd2Ao34iEDrJ9IyY6QBhRYR0yGSs2t\nRxvxhHwSaVuNb/mPNfaZzAwl+KGxutAgcQ8IcD6sDbeMxmVyAZOnVO83vt+n\nbC9Myum0iMkLC6m0Ty5IBZab+zlYKsuG3NzozE7GaWUUZHJW5rn6ApsEKhoM\ndQvwQTPOJwP3LmdpxIhrq9XQGzWNBzc6Vz8AA512TsE9HE+gYwYMCTFY9QLQ\nCkDX\r\n=Rsth\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAvSieEcKL1X2+BhZ/KEq9HnA+yaaeAWKARwABSgdPtdAiA28zvJDBITovllpEW/CGfsYJ2CZH7F9Rpbanllc9Cj4w=="}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.2_1644138151459_0.2747874079238508"},"_hasShrinkwrap":false},"0.0.3":{"name":"@chasemoskal/snapstate","version":"0.0.3","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/tests.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/tests.test.js"},"dependencies":{"mongodb":"^4.3.1"},"devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","types":"./x/snapstate.d.ts","gitHead":"4216f403830c7d02e7cfeb9a27891cb1cf1db24e","_id":"@chasemoskal/snapstate@0.0.3","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-6zv6M4R5DbxDOt03ZvUbS5+6JeA/v8XQV9KveT6L7x4bTk8Xgl5D31RxKAxPtbVcQ2Gv8X6Ts7qp1XrnHdjNQw==","shasum":"45f915cc374452178944d208bb228960b79d7c23","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.3.tgz","fileCount":63,"unpackedSize":114674,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/5NICRA9TVsSAnZWagAAmpAP/jYUsfm+00Pw78N+wl+N\nKK77lEWCHfKRAyQN8oUoFm2txXZG6CZiE+YYjO8ZlIzsYighnGnjPK4FxoWc\nTYLu+QA8ncT6tAo7IdbmG2Ym/eE+3IGJGDLITn8Fjhqqj8S+SYb2pZPIyOBp\n8IY+R1X1EzpOsmImbUeWJAcr5bQf6fHJdAFv5q4UHTRiidmP8808Veh6zXlW\n+xn9X2S1N5RLeFcqcpkWm3YYiB1MVKUu1dLjNKfImh0EHlrWrzWm5bxWrwaP\nJklLwWx5fWXkhw92o9cgWlIKjnGen0DQ96bZZ/06+wItzSrzE8p1feuz7Ab7\n21EuVZn/k7KNLJgWffe6ReKYxSqEAzjuQQQNAFAGdKzBtc9c7fRzTeaf2mxQ\n/PROQU6XrOkCRTXi35fa6U4cFiDwPQXNai8uIze9fSBfwRD44BUN2XY/4cBR\n/dlCkEjt6mrIc8m/MS+V4cUv55/Tr+M+EcpwSOY7vMAm513248dvSLNBBTFO\n1TsG3HjcINvek3OeVSErRcnLSlwM4jzjkOciEWSebUnjsWqPWH0o5ojnoiUh\n4JcsQi3E36RSLpXMmdwn/UrY/ahy4O2aZem7vIehY5NRwEEpDAKPBalILR0/\nKn4QbRyDespV/UGDGMXzbqU5pJnUDsuDCsOk3BR8QgckzbXQli46VT99wBul\nbmO/\r\n=aptF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGGOoswcMtkec+IdFmQGDP0DJbhKmkNhSx1dWvhAMQ3gIgAoMBx9Fy2KSAqX40aeWdjXNnat6hAgYIOu8heN3LkLE="}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.3_1644139335876_0.712359803202719"},"_hasShrinkwrap":false},"0.0.4":{"name":"@chasemoskal/snapstate","version":"0.0.4","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/tests.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/tests.test.js"},"devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","types":"./x/snapstate.d.ts","gitHead":"f3d6cb23fc90f2f5bf15f7d47aad71eaa54a7bbe","_id":"@chasemoskal/snapstate@0.0.4","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-XSpm+k7DOgsAYRwDNXf9HdtJAG9YA+VVtmatQAic4yfWbJdCnxE7BPywhtaLuMA7SuDBDAZoNp+WjEkBcu6a5g==","shasum":"28acce4df1d0eb4ae845e436032e781a07142a7f","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.4.tgz","fileCount":63,"unpackedSize":114925,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/5q1CRA9TVsSAnZWagAACfEP/1ianfdGitjsyiA5j2Yb\nT77kPv5ofKq25/Uu4zxIMfb9GxARL6uFQUvpscl4Qrk/37QJklVO3RlknUvA\nNHgC4ZiLeZ8+egxHJDLfYYNQfn+lkDaBnnz4EPPLBDkdox4o03vpL2rm3L3N\nDI27GvMlCh59Mbw18JAkHxSBmC1G+9VRjFTHcpLLWoY8bhtEESQNSzJ7JWfG\nRjXHN6utNGhoIERIYouo30pf4+LhAw89U3+w+j4s3ebxCUhTvUM0RjcYvmAk\nb2Dn9j4PbqZA2ogWh9Wt4reAvHh+qPR8mB8xs8Cns+HNXr7Azjyw6F+ayb/A\nxJHEIwQkdyOkKCmzPStkSa6WsNGVEvoWBP2ZjvOr0txeVMPblgs061tqefwT\n0x7WMExPcZeBiogzyi+aT8AuSGxwbYO0DIc+2/S2rXEzO7BaZtURa7ZD3Xhh\ndhnBXDFqM8IstMDZSyyg9y5psabnbMBwfbnB8gk/dPKBr464ER5awyLRqk7Q\nrzpjK+Y+IeyWoglidrU3mRInc1ptorfZtUeAUsh/B8MJqFMTSltpRoB4YNjw\nURjOhOw+HqasdwiWXNdp9A+tkp6X78t8a/ysvDaFVHVdZ1wx6UHodXjzXMPn\nIC7EZEMXW7Ka7w5PR6SXYQTHp+RTBew//s5pY7hW2jVIqai/pgpvb6hQLCQ5\nBpKZ\r\n=ZiMh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjrtPcIQQ6wLOpccJBVqSI9XuxVsucoYe6XhSKXSSz0AIhAJQcdSezuO0uPktm7sEbMYDRkFhVsjU5dVrmoIkaaBuu"}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.4_1644141237540_0.3502184708282554"},"_hasShrinkwrap":false},"0.0.5":{"name":"@chasemoskal/snapstate","version":"0.0.5","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/tests.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/tests.test.js"},"devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","types":"./x/snapstate.d.ts","gitHead":"9e425bca7d917c465482f8d2f3f22b25d15cd604","_id":"@chasemoskal/snapstate@0.0.5","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-X8sZ5znb2FkULXwjdi7jhJksewxq1BFbkv8QID+Idx8rV6+oTYQNbZN8SDZDXTXYI8x+Py1lWgX5nf09n8nZVQ==","shasum":"c30911b68d520286a2094a212d10e1426217a198","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.5.tgz","fileCount":63,"unpackedSize":115751,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/8XICRA9TVsSAnZWagAA+hkP/2tx56elMIH5D0WQe5D0\ny9umeXnh93V+fijlPdPNrlmKl1FWGIRRPmu/vt1S4Jit/G7QG3VhuNqpQDbd\nsB9oxz4xzhooSmX5AMnV0CWSGKcyNec4MZ8riDErbtieqo5IHWPl6De9o5/E\nQQRcIn2ovyxg8j3jv+neYXB9DumI8r4s/v0fC6RSusEJjWquEYyOnIR7qQIP\nKjyu9TNzLZCtPiZgrEA5DdeL1Fe1Dwo07GN+BWg+F4H6rPAOtB+Ev6GscNCB\nr32uNd1X29ShlgnZ/BFgOwgGD/BRTf97AZmnDIVsqKl0WowyzhLrmg9R3XXu\nEl5Uzo0rsw6Y+O+SenM7ufpTtnsyc7VfUM4/eMIIx/MKPOZumMT3l9s+1oPE\nzusBaDvh34qFKUnu0XW5Ejw42QlmOdlmdaSWFg0pm5HJEfPbdwScGQUzuGGO\nV0RUVL+zR2c4/xlROVvp1krYfE8z2RNeP0+e/f25KbNFcwlLXbzT8cvkByyT\nDqfOX3X6udZLpFXNMCeNaPIH2GdPi94SbaHjASpwnx9ftwi8gwV4KacVtZuk\nvqea8JtB144qeiqjmAUCPieYCPvyPoqYH2b+4k0+/mnjqZfX7rAxTswXlpIN\nf82YlTqZDvbgg5FHkHGtpZU2tHGJwdIZOOC5c5liuSJJQuXF+W4UaZmuUPxy\nxOKw\r\n=PDq3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDn4CLP/reHJWs0AAeidByvGdXdpJerf7pJYWTK19j2pAiBgtYwXkzXQYVPbHPdATAR11IQg6WBt2du7nS7SD1kqkw=="}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.5_1644152264426_0.4626515151799253"},"_hasShrinkwrap":false},"0.0.6":{"name":"@chasemoskal/snapstate","version":"0.0.6","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/tests.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/tests.test.js"},"devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","types":"./x/snapstate.d.ts","gitHead":"9e2f379faf729588b41017d59e1f125a63dbdd7e","_id":"@chasemoskal/snapstate@0.0.6","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-rezPHerojtrmTuC/y8haD9mKU0mN5WI3YZc/V4dj+xu+wYnEWforfgP3NcEyclJHIneK63oo1I8mh+ieXseUEA==","shasum":"8fe59fbde6b8dc01e02c5cf56818a19def289259","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.6.tgz","fileCount":63,"unpackedSize":124162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/+AKCRA9TVsSAnZWagAA29YQAIKmUz/rob0dEiuUikog\nHEbSDsOApvloaueKgtfnBk1pYtLaPxKOrUGVd1E7FfeaFewlMv73t0NH6peL\n5eIhjur8duKMt4/R6scJhf+mUwLBQtdDXKMi+RoypzlcMzjeiT4cZD13hBb6\nizr6302SeQ+DioG/X5T/VyNXmHXPvis71cJtrZ+Xbkis4JSBRq0vbF+Gjmfy\nwclC6o88KMPnvwx78GXZsgp86RwttHi3BOzTMW5amoKiEbztzYJ51RJAqFYd\n6YAkwnc8DsjziskJYjK69gAXJ51efvxuz9/ZNd/l/g8vFeGHRIIT716j/IF8\ngS4f6G7J/rQoQWFZF/YXHWACJsPnCCSz3QfI1KzxG2uL2XDOMVe0aZiSw3QA\nhBV0zZcoJ3NM1fCvujd7/ec0eOW8nCD+xX2S/q/iS6lzefqWZ0qAkhzzRujl\nvEZDeu7L/pCT7i2BIDCOYY2QGXXy5JIv4KJarZhNl68nrwBNuUqPeBqvDfat\nlZZQ8suHvqWwWKD/0Z6x/k3WxEx9+1doV4BWvsjqGE6VaAxsVKsnl7nyqJ0l\nEaFey12ZzDG+abZEH0Q9EIYVY/qhAnpMbFi1NgI59nDvnVTANXXxKYX7cSgC\nL3Yr5dEMY73cpjiQkT2jx+T0SmtIZWlbY1hk/1ulYNOU8uEJpARSH9Gq5Bvg\n3n+z\r\n=71y4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFULJWyDoPf3xuaAEXowOhAtYVCA8kWMSLhoCFHBaPUKAiEArycDfzwOv6Xhua0TWD1EXAYGRizkplA6XkEYOaJRloU="}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.6_1644158986427_0.29214957405411335"},"_hasShrinkwrap":false},"0.0.7":{"name":"@chasemoskal/snapstate","version":"0.0.7","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/tests.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/tests.test.js"},"devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","types":"./x/snapstate.d.ts","gitHead":"5803f3c96ca912a55deddc7b657485f8ca06a250","_id":"@chasemoskal/snapstate@0.0.7","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-UGwF54iA/jhYOn2h0hcwPzSKG+mSgVMp1c+a4ZjOh+Jv2lDfHCyAJfwhe9yRGvelE6YAyainASZxr0GBMuWfag==","shasum":"e0ca7e1ee03a911bb44bbccaeffb490fc4bd5355","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.7.tgz","fileCount":63,"unpackedSize":126415,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/+fmCRA9TVsSAnZWagAAHQQP/2NrzhIoKXFKPOp/I5RK\n/Mql1c22WvCwk2649FgoQSpqukPrrBwCOxpFX2Ry240YqbVyZjqosTUvooP4\nxkzMfnPhBtq9GuUBo0yIuvh7/c1CRVa2TGFnlsjak6fbR02bn8DdJpSmLcPy\nSzhb0VbYmv1Dr5K7WfFObIg5WjjMpMQ3RdCvUZhRnBk6QvbfzgEhIl72b73f\nSUsl6v8XdMCRHD7poXQ685rYocPXoAY3S/0St3RqDQbcV+lL04o3yMNyZVw0\no5PYz/ci6447WhMNEqutrhzyM5N4sE+D5Ep/Nv+VJQ7jEyxNZqbnr9XWbPXA\nId7/FKsof7TgJw80YissxIQy08cjXgq3FVhSD0dxGqaFp8Oyend0ncjoepLW\n5STZTNHckV/AylE/p6FQPbNEPGavW1GOzqUxISaEiimXhOIou+cNvMAmO8Xw\nsSiRGtm1EwUODovsj6RXxKhQnRrK/vzlxm3J0314hFAov2s45crYVDExiiPG\naswHhYdJDTBuMLTgMpeYhz/U4K2ALm/QfBk0iUPRHQNrgHjQ1dAWjajinxd7\nCYwfTDonx5L2kbNeHRVXK1pVIFgmyueStjpTMuBG2DKb+0DXS7RqRXLLUpy/\nvVmgBJUScOWLXKA6IQ+Yh5zdhVZM7o9cbvMRSGalc2pT4vb+82hVWPj14gAA\ncgJL\r\n=tRcd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZ+W7pgkoDE/7SYAieV25U77CVbISWx8hJLxcnx3/QTwIgJMGDJlCPSkzpugHZCcoPnvH2K228nnavPe6tILnFgls="}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.7_1644160997995_0.19502154534809546"},"_hasShrinkwrap":false},"0.0.8":{"name":"@chasemoskal/snapstate","version":"0.0.8","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/tests.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/tests.test.js"},"devDependencies":{"cynic":"0.1.0-dev.16","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.5.4"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","types":"./x/snapstate.d.ts","gitHead":"98931d3eb8a5c68d988e5566c2a5f8b2fa24b773","_id":"@chasemoskal/snapstate@0.0.8","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-+UaRbummKTZQEUqK7YvxhyRLj9FuO2kEf8NED5osqQHMERLuOJ17Hw/LiSPid0voY3O3cbtaS8NFEjMyazeRuQ==","shasum":"ef438947276cd9a175a1eda86968ca7c6ce2f428","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.8.tgz","fileCount":67,"unpackedSize":127244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiA7FHCRA9TVsSAnZWagAATdUP/3gl633wfMgZyN13DBeD\nHO/ENpoKrZffU7rcysOCcL+OdIBxnbFOPGZ4JT3Ponu2HKqHQAePrclytbxf\nVv2lZEkVaEFzkW0jqqEtXeREVXG186lzV1BKkHEs6hqBliVYFymo/cNf5yDG\nqTQ918D8aDekd3idwVI+JPe2dB8Hrt7MVbpjv8X2iuI0zsl2XRBouoEVJ5Un\nipwADef+L02RbOMXMa2oe+Kn9Fi+Vtbe8G9XIuk/FIiYlEkmUqO7tsuwAJGf\nUJOv9lEAgsVS2PooZI9hJGrpbs9/3ED1gCzfv1o3Lgw6ausaukUmBHL3kx6i\npJzbNuGVTqPf8+I0lPCoQNcBccvHPqXjw6MvP/5JRo71+RfaC3OdMF6pLPBa\nVXNmH8A9nOccuBNwPptkb+vseOaH3gmZc651Ce1tiSE7aRyBfo5KHTu4U2JY\nheRZu1txIyag0Ay080LewpfWTqH61vu3P0wm4osj7X87dWrK8SONXOn1Dd2+\nVlH9VpulOQtjKXgFb4EukGyhHZyhrJ0/yMq43Jcl6XXYE9gcC6iRhrBWxW/L\nj4n6WKcTeY4UpBEfqB0jzJTLX8HSqu+uqLRdSdva65C9t6R4GUtuttV4A8CQ\nCeLqwyu2SrpqaTFLj6IT/g9wQ6kSgxnbzPzhIs+bLB6cIy7/+dm0ga+MDuG6\n5zEa\r\n=3yB6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDYuWI2gPly4myt0b2QJSh5PGaD0Ass+vslF/6h6VNARAiEA0Wdbjz3svERRHnVY0s1PxFaLvVpzbkSAY8K6Oy9o0wE="}]},"_npmUser":{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"lordbrimshaw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.8_1644409159370_0.1899184887275125"},"_hasShrinkwrap":false},"0.0.9":{"name":"@chasemoskal/snapstate","version":"0.0.9","description":"tiny robust state management","license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"type":"module","main":"x/snapstate.js","scripts":{"build":"run-s clean compile test","clean":"rimraf x && mkdirp x","compile":"tsc","watch":"npm run compile -s -- --watch","test":"cynic node x/tests.test.js","test-debug":"node inspect node_modules/cynic/dist/cli.js node x/tests.test.js"},"devDependencies":{"cynic":"^0.2.0","mkdirp":"^1.0.4","npm-run-all":"^4.1.5","rimraf":"^3.0.2","typescript":"^4.9.4"},"keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"homepage":"https://github.com/chase-moskal/snapstate#readme","types":"./x/snapstate.d.ts","gitHead":"d5d866d6c5935e9af59faa41d49516586773424f","_id":"@chasemoskal/snapstate@0.0.9","_nodeVersion":"17.9.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-qN7sGqGivMJdSdrQC3y3RzlMLVjCO1Tb13+2NfpWmhG8E+KZMR+gzlITEBE0s32PKvsFe0Lwu++2POvODAsgaQ==","shasum":"0bee99020e4a4fcf2777681f12943a5e7f1e5872","tarball":"https://registry.npmjs.org/@chasemoskal/snapstate/-/snapstate-0.0.9.tgz","fileCount":67,"unpackedSize":127180,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHbWoxh4k0YEgCMxGkLrvG6iMzLBcB8duTLyx0Bw30l5AiAiRN+YmJq79Ems5YS1sMwc+78gDKyBK9GMUgAZGvpA4g=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvPnuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmry4w//csde6Uih558PoRyoCA2Awk+yUi1s+bcJr+cIF+AVuc3uwz8q\r\nYlexcfKZjbJFOLcwQXIDc1hFSsjO32brI06QduSOBejfrD/Eh3IXEnPfhXao\r\nPxiamCa0hjGJmh7KzwKK7FX13iwMqMTfQb/VjHdM4TbWX+V0pMtctQ1uQFvK\r\nPxQpY5fav3mctGn2EG1DRo1Y7kmJWwMNRx/r2SP+8fQ69677PMuMa9b6a6h/\r\nSbBPfwOANRFlvjOoWej98nj8Nnof+iYkZTj/fVll+RKNpDd+YEg1ZlGTscpd\r\nq/JFPCsF2ZKBtKw51ZtQv9cBjJYaXKXe2PiKCPuOvHNrdPknM+WCb728J+7P\r\nov3dlrnWYE8AFU8zEKYcOYeYcRl/Goo4PTiupj0XWiU/q2hVoPXU6Pzo1CDr\r\nGvU1S8OfZ2hOyZZfGnkwnCrkYfGgGK/exli7PhFJy6dGU5KogLHRVS2gBsHW\r\nMEHEaD0pYDkLmls9CP5QggDnsGrOWPc7xfqMDY5gxpcMAGW8TKwqNfGy0B5N\r\nGsTObqvOj3Lx7WtQBIeCFfUqKWvwS7VktQpFShiyRrSQACY8wGnNwMpX2pO/\r\nCvEL/7cmgkK3JL8vMvsAbEsoIa8rvfLI6ZN7zRSAiP1T7szk9574kLeVfT16\r\ncuuWsnKWK8P36xJd4YEv6yWEcewBEKVTg50=\r\n=bCAR\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/snapstate_0.0.9_1673329134444_0.49615895715005354"},"_hasShrinkwrap":false}},"time":{"created":"2022-02-01T02:42:57.196Z","0.0.0-dev.1":"2022-02-01T02:42:57.388Z","modified":"2023-01-10T05:38:54.750Z","0.0.0-dev.2":"2022-02-01T02:54:53.290Z","0.0.0-dev.4":"2022-02-02T06:56:41.152Z","0.0.0-dev.5":"2022-02-02T11:01:06.210Z","0.0.0-dev.6":"2022-02-03T09:54:52.200Z","0.0.0":"2022-02-06T06:40:50.894Z","0.0.1":"2022-02-06T07:08:13.953Z","0.0.2":"2022-02-06T09:02:31.598Z","0.0.3":"2022-02-06T09:22:16.007Z","0.0.4":"2022-02-06T09:53:57.672Z","0.0.5":"2022-02-06T12:57:44.583Z","0.0.6":"2022-02-06T14:49:46.557Z","0.0.7":"2022-02-06T15:23:18.421Z","0.0.8":"2022-02-09T12:19:19.512Z","0.0.9":"2023-01-10T05:38:54.671Z"},"maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"description":"tiny robust state management","homepage":"https://github.com/chase-moskal/snapstate#readme","keywords":["state","state-management"],"repository":{"type":"git","url":"git+https://github.com/chase-moskal/snapstate.git"},"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"bugs":{"url":"https://github.com/chase-moskal/snapstate/issues"},"license":"MIT","readme":"\n<br/>\n\n# 🔮 snapstate\n\n*tiny robust state management*\n\n📦 **`npm install @chasemoskal/snapstate`**\n\n👁️ watch for changes to properties  \n🕵️ track only the properties you are reading, automatically  \n♻️ keeps you safe from circular updates  \n⛹️ updates are debounced, avoiding duplicate updates  \n🌳 carve large state trees into substates  \n🧬 implemented with recursive es proxies  \n🔬 typescript-native types, es modules  \n💖 free and open source, just for you  \n\nsnapstate is designed to be a modern replacement for mobx. mobx was amazing, but has grown comically large at like 50 KB. mobx is also *global,* among other complications that we don't prefer.\n\nsnapstate is 1.5 KB, minified and gzipped.\n\n<br/>\n\n## 🕵️ tracking changes to properties\n\n- first, let's create some state.\n  ```js\n  import {snapstate} from \"@chasemoskal/snapstate\"\n\n  const snap = snapstate({\n    count: 0,\n    coolmode: \"enabled\",\n    also: {\n      nesting: {\n        isAllowed: true,\n      },\n    },\n  })\n  ```\n- `snap.track` allows us to track changes to the state\n  ```js\n  snap.track(state => {\n    console.log(state.count)\n     //               ☝️\n     // snapstate detects this property read,\n     // and will run our track callback\n     // whenever this property changes\n  })\n   // 0 —— runs once initially\n\n  snap.state.count += 1\n   // 1 —— automatically runs the relevant tracker functions\n\n  snap.state.coolmode = \"super\"\n   // *nothing happens*\n   // our track callback doesn't care about this property :)\n  ```\n- if you prefer driving stick-shift, we can make a manual track and even avoid the initial run.\n  ```js\n  snap.track(\n\n    // observer: listen specifically to \"count\"\n    ({count}) => ({count}),\n\n    // reaction: responding to changes\n    ({count}) => console.log(`count changed: ${count}`),\n  )\n\n  snap.state.count += 1\n   // 1\n  ```\n- of course, we can stop tracking things when we want.\n  ```js\n  const untrack = snap.track(({count}) => console.log(count))\n   // 0\n\n  snap.state.count += 1\n   // 1\n\n  untrack()\n  snap.state.count += 1\n   // *nothing happens*\n  ```\n\n<br/>\n\n## 💾 control which parts of your app can write to state\n\nthis is a pillar of good state management.\n\nif every part of our app can write to the state, all willy-nilly, it quickly becomes a convoluted mess that is hard to debug.\n\n- `snap.readable` is just like `snap.state`, except that it's read-only.\n  ```js\n  const snap = snapstate({count: 0})\n\n  snap.state.count += 1\n   // this is allowed\n\n  snap.readable.count += 1\n   // SnapstateReadonlyError —— no way, bucko!\n  ```\n- we can pass the `readable` around to the parts of our application that should only have read-access to the state (like our components).\n- but components will also need access to `track`, `subscribe`, and the rest of it —\n- so snapstate has a handy `restricted` function, which makes a read-only version of a snapstate.\n  ```js\n  import {snapstate, restricted} from \"@chasemoskal/snapstate\"\n  const snap = snapstate({count: 0})\n\n  myFrontendComponents({\n    snap: restricted(snap),\n  })\n  ```\n- it's easy to formalize actions with snapstate.\n  ```js\n  const snap = snapstate({count: 0})\n\n  // only our actions have write-access to state\n  const actions = {\n    increment() {\n      snap.state.count += 1\n    },\n  }\n\n  myFrontendComponents({\n\n    // components only have read-only access to the state\n    snap: restricted(snap),\n\n    // components can call our formalized actions to change the state\n    actions,\n  })\n  ```\n- note: `snap.state` and `snap.writable` are aliases for each other.\n\n<br/>\n\n## 👁️ subscribe to *any* change in the whole state tree\n\n- subscriptions will execute whenever any state is changed in the tree.\n  ```js\n  snap.subscribe(state => {\n    console.log(\"something has changed\")\n  })\n  ```\n- of course you can unsubscribe, too.\n  ```js\n  const unsubscribe = snap.subscribe(state => {\n    console.log(\"something has changed\")\n  })\n\n  unsubscribe()\n  ```\n\n<br/>\n\n## ✋ untrack and unsubscribe all\n\n- delete all trackers\n  ```js\n  snap.untrackAll()\n  ```\n- delete all subscriptions\n  ```js\n  snap.unsubscribeAll()\n  ```\n\n<br/>\n\n## ⛹️ debouncing and waiting\n\n- tracking and subscription callbacks are debounced.  \n  this prevents consecutive changes from firing more callbacks than necessary.\n  ```js\n  const snap = snapstate({count: 0})\n  snap.track(({count}) => console.log(count))\n  snap.state.count += 1\n  snap.state.count += 1\n  snap.state.count += 1\n   // 1 —— only runs once\n  ```\n- but be advised — this might mean you have to wait before seeing the effects of your callbacks\n  ```js\n  const snap = snapstate({count: 0})\n\n  let called = false\n  snap.subscribe(() => called = true)\n\n  snap.state.count += 1\n  console.log(called)\n   // false —— *what the heck!?*\n\n  await snap.wait()\n   // true —— oh! i just had to wait, for the debouncer!\n  ```\n\n<br/>\n\n## ♻️ circular-safety\n\n- you are prevented from writing to state while reacting to it.\n  ```js\n  const snap = snapstate({count: 0})\n\n  snap.track(state => {\n    state.count += 1\n     // SnapstateReadonlyError —— not a chance, buster!\n\n     // \"state\" is actually \"snap.readable\" in this context,\n     // (same with subscribe)\n  })\n  ```\n- you might think you're clever, and could outsmart snapstate. *you'd be wrong!*\n  ```js\n  snap.track(({count}) => {\n    // here's you being clever, thinking you can access the *outer* snap.state\n    snap.state.count += 1\n     // SnapstateCircularError —— dead in your tracks!\n  })\n  ```\n- as we've established, you can't make circular references in `track` callbacks.\n- you also can't make circles with track reactions.\n  ```js\n  snap.track(\n    ({count}) => ({count}),\n    () => {\n      snap.state.count += 1\n    },\n  )\n  snap.state.count += 1\n  await snap.wait()\n   // SnapstateCircularError —— thwarted again, buddy!\n  ```\n- and you can't make circles in subscriptions, either.\n  ```js\n  snap.subscribe(() => snap.state.count += 1)\n  snap.state.count += 1\n  await snap.wait()\n   // SnapstateCircularError —— just give up\n  ```\n- you can catch these async errors on the `snap.wait()` promise.\n\n<br/>\n\n## ✂️ substate: carve your state into subsections\n\n- it's awkward to pass your whole application state to every little part of your app.\n- so you can snip off chunks, to pass along to the components that need it.\n  ```js\n  import {snapstate, substate} from \"@chasemoskal/snapstate\"\n\n  const snap = snapstate({\n    outerCount: 1,\n    coolgroup: {\n      innerCount: 2,\n    }\n  })\n\n  const coolgroup = substate(snap, tree => tree.coolgroup)\n\n  // note: coolgroup has no access to \"outerCount\"\n  console.log(coolgroup.state.innerCount)\n   // 2\n\n  coolgroup.track(state => console.log(state.innerCount))\n  coolgroup.state.innerCount += 1\n  await coolgroup.wait()\n   // 3\n  ```\n- a substate's `subscribe` function only listens to its subsection of the state.\n- a substate's `untrackAll` function only applies to tracking called on the subsection.\n- a substate's `unsubscribeAll` function only applies to subscriptions called on the subsection.\n- substates can also be `restricted`.\n  ```js\n  const restrictedCoolgroup = restricted(coolgroup)\n  restrictedCoolgroup.state.innerCount += 1\n   // SnapstateReadonlyError\n  ```\n\n<br/>\n\n## 👨‍⚖️ super-strict typescript readonly\n\n- introducing `snap.readonly`. it's `snap.readable`'s strict and demanding mother-in-law.\n- `readonly` literally *is* `readable`, but with more strict typescript typing.\n- you see, typescript is *extremely strict* about its typescript \"readonly\" properties.  \n  so much so, that it's very painful to use typescript \"readonly\" structures throughout your app.\n- for this reason, snapstate provides `snap.readable` by default, which will throw errors only at runtime when you're being naughty attempting to write properties there — but the typescript compiler doesn't complain with `readable`.\n- if your shirt is fully tucked-in, you can use `snap.readonly` to produce compile-time typescript errors.\n- anywhere you find a `readable` (for example in track and subscribe callbacks), you could set its type to `Read<typeof readable>` to make typescript super strict about it.\n\n<br/>\n\n## 📜 beware of arrays, maps, and other fancy objects\n\n- snapstate only tracks changes when properties are set on plain objects.\n- what this means, is that methods like `array.push` aren't visible to snapstate.\n  ```js\n  const snap = snapstate({myArray: []})\n\n  // bad -- updates will not respond.\n  snap.state.myArray.push(\"hello\")\n  ```\n- to update an array, we must wholly replace it:\n  ```js\n  // good -- updates will respond.\n  snap.state.myArray = [...snap.state.myArray, \"hello\"]\n  ```\n- this also means that the properties on any class instances won't be tracked.\n  ```js\n  const snap = snapstate({\n    date: new Date(), // properties within this aren't tracked\n    myCoolObject: new MyCoolObject(), // properties within this aren't tracked\n  })\n  ```\n- this is an entirely survivable state of affairs, but we may eventually do the work to implement special handling for arrays, maps, sets, and other common objects. *(contributions welcome!)*\n\n<br/>\n\n## 🧬 using proxies in your state, if you must\n\n- snapstate doesn't like proxies in the state, so it destroys them on-sight (by making object copies).\n- this is to prevent circularity issues, since snapstate's readables are made of proxies.\n- if you'd like to *specifically allow* a particular proxy, you can convince snapstate to allow it into the state tree, by having your proxy return `true` when `symbolToAllowProxyIntoState` is accessed.\n- snapstate will check for this symbol whenever it ingests objects into the state.\n- here's an example:\n  ```js\n  import {snapstate, symbolToAllowProxyIntoState} from \"@chasemoskal/snapstate\"\n\n  const snap = snapstate({\n    proxy: new Proxy({}, {\n      get(t, property) {\n        if (property === symbolToAllowProxyIntoState)\n          return true\n        else if (property === \"hello\")\n          return \"world!\"\n      },\n    })\n  })\n\n  console.log(snap.state.proxy.hello)\n   // \"world!\"\n  ```\n\n<br/>\n\n## 💖 made with open source love\n\nmit licensed.\n\nplease consider contributing by opening issues or pull requests.\n\n&nbsp; // chase\n","readmeFilename":"readme.md"}