{"_id":"async-ref","_rev":"6-c1828133ff276b3a7ff0adaf871de4c4","name":"async-ref","dist-tags":{"latest":"0.1.6"},"versions":{"0.1.0":{"name":"async-ref","description":"Async ref objects for React","version":"0.1.0","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"Gabe Scholz"},"license":"MIT","keywords":["react","ref","useRef","async","promise","await"],"devDependencies":{"@testing-library/react":"^13.0.0","@types/jest":"^27.4.1","@types/react":"^18.0.1","jest":"^27.5.1","react":"^18.0.0","react-dom":"^18.0.0","ts-jest":"^27.1.4","tsup":"^5.12.4","typescript":"^4.6.3"},"scripts":{"test":"jest","build":"tsup","prepublishOnly":"jest && tsup"},"gitHead":"10b1551e247b89ddea498a39c6ab1b3a7d3223df","_id":"async-ref@0.1.0","_nodeVersion":"16.11.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-N6aDKJRRJ4F+UGZpASHcd9a68wnYBmdv2E0MwV4dONT+0Uy5x6XTYdCnWGaG1sEwzVJu4vjhd2Y0bKbUtpDA4Q==","shasum":"a7dc1ad00a7b43948cd1e43c28b4703d57674be7","tarball":"https://registry.npmjs.org/async-ref/-/async-ref-0.1.0.tgz","fileCount":9,"unpackedSize":25429,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCFKRNZaWZyHQh9K5HKV7MsEkbA2bxdLXwvaXfkMzIGiAIhAOa3nYSOjxmoiDHYt3mAQjE5s8E8fbNnJMuka13bQ001"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiV8EfACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo/YxAAmL84v63z4KM+axcomujDBe0/x6JA172cLFpl6XufVVSv4/ik\r\njTjmfgyST/iQTFgRdj6QCb8hEK2jfvT55jtJMfSYCyl73/StGHa6lT2mL9db\r\nUxASH3AY7AT6MwkWjIm0ryRzmtb5jSsDz3ZWJ2+ub1PwSF/AaoVFHguP/ct6\r\naiAE/5xraQzx9L59m3XfbWClfBof9L16BJ2OHv+tNFs8Cr7to526TQZyz8dj\r\n4tuSV2f2/zsEqe9xpi5cmkjhLSm2qGCV7GEiVYUH0f43ZkMvVjREVVy9wlOl\r\nJ1B5bdF6GjvROFOaSfRMBUcxdkhidv0EwucwF6kltQqGN/uKcrEJ1P3iJgQk\r\n6uNPZbUKHRNb3Mcv03ldjPU/mgZu3UMZuoxQdiPk1CD9SNsawOlz2mJFCmW0\r\nHQGm7vi1USmbnsrr9REPejIuL55+lf5hgmS8nHRe/nhO6BSENWk8favHbdD6\r\ng/9LfvOot+Lxe4s0FbAqEsT9BqVFwUBD7+W0unmKlsWXZ3zULsXPQJP15zxV\r\nCv5T8tON4hMmr4Wll6kzZuV6dOk9FohGuqrmZqCmIAucQ2F2M+o9bd3pt3dU\r\n0lyHFM70IaGnadQVyVJIsktguyonzONb2aMcJh2zXgn3n+0+NzZtSqwjXEnd\r\n5cqC9Qnkm5INGvA6q/KozjXxK9+/GI/r/d4=\r\n=5OeN\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"garbles","email":"scholz.gabe@gmail.com"},"directories":{},"maintainers":[{"name":"garbles","email":"scholz.gabe@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-ref_0.1.0_1649918239117_0.19187481771453707"},"_hasShrinkwrap":false},"0.1.1":{"name":"async-ref","description":"Async ref objects for React. A tiny bridge between React.useSyncExternalStore and React.Suspense.","version":"0.1.1","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"Gabe Scholz","email":"github@gabe.pizza"},"license":"MIT","homepage":"https://github.com/garbles/async-ref","keywords":["react","suspense","ref","useRef","async","promise","await"],"devDependencies":{"@testing-library/react":"^13.0.0","@types/jest":"^27.4.1","@types/react":"^18.0.1","jest":"^27.5.1","react":"^18.0.0","react-dom":"^18.0.0","ts-jest":"^27.1.4","tsup":"^5.12.4","typescript":"^4.6.3"},"scripts":{"test":"jest","build":"tsup","prepublishOnly":"jest && tsup"},"gitHead":"f6763b028760684eb10bc03e878d8843f6fc2491","_id":"async-ref@0.1.1","_nodeVersion":"16.11.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-FU5vq8mb3wADXnSHpSKvrNZLbQVQvKjTTx1J03p4XtSFCMX9ydeoRykc+DcEY6i3pilY1SobTRlxTotkoZBLMA==","shasum":"b959c175aa786dd73ee4514bb511e66f60323f9b","tarball":"https://registry.npmjs.org/async-ref/-/async-ref-0.1.1.tgz","fileCount":9,"unpackedSize":25589,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEGm0NILinNFzQ78NQNabXiCMwu+QoLX4pVyki0ANBSgAiEA5oYewoexMidPS7JezMeRAFw+4j6XeLLiwZUkAbzlUd8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiV8HtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr8Sg//RTIUw/hJtY6BR39WfansDLHsBkM0BOMRgvB8k+Hfh2qvKzoA\r\ntXkbRfll0cMMlDG7CbkRRny4pFS1K1lsLvyMy0aFF0dJSmV302gSzy8r29Xi\r\nliID3AS3saM1ZmPpuyYAt22xlB6zvNEspskzzwbH6KSdnkzxJtQxH9t1IZi0\r\n7dbV0A7TIWF45cUNN2MNRh4tQhgMX0WqglvmH1FAS8iqylVj/PHUCHYp52mq\r\nBGuMg+6nT+WQ4ULAwAlaM+uiqnMKLaTiBHH31Y4toD9VN1pzcNvRKWwbqkJi\r\nJtXUqNc/1ffsyl6f0mr3+oTwvQba5YUaBVzx2eskOugGh6ig2voXiU5YpRAO\r\njJVOehxDcWH/C0qZKYPAYuxMOyON0oQaeBeN6rbVM16Q/l9M3hJxDuKPRcx+\r\nXkp+62IoLnbWEYosiAWBWQyRFt1gj443ao170ZcJAv9pXmxnhLU4X9Z6FM8a\r\n67sEhfQNJnn+6fx0UFPQcHGWYTRykFEuTBvdBswkP8BPD2F+w61BaTC7mIiE\r\nICqkZQVrbE6Lk4b+RqpYIvTbe1G86FDkNr6NuAUshyZ9GWrEB4dvlr5i/Dbe\r\nTk9AuXReufekhh9Z6shKAwFfuOdcbMOpztihxhJeDX4hW6jGXwvpXG+SwKM9\r\nLiUI6GrLmnoGc1oRSWRe2mnr+HmdP7uc9zw=\r\n=9KU/\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"garbles","email":"scholz.gabe@gmail.com"},"directories":{},"maintainers":[{"name":"garbles","email":"scholz.gabe@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-ref_0.1.1_1649918445508_0.22091161059872366"},"_hasShrinkwrap":false},"0.1.2":{"name":"async-ref","description":"Async ref objects for React. A tiny bridge between React.useSyncExternalStore and React.Suspense.","version":"0.1.2","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"Gabe Scholz","email":"github@gabe.pizza"},"license":"MIT","homepage":"https://github.com/garbles/async-ref","keywords":["react","suspense","ref","useRef","async","promise","await"],"devDependencies":{"@testing-library/react":"^13.0.0","@types/jest":"^27.4.1","@types/react":"^18.0.1","jest":"^27.5.1","react":"^18.0.0","react-dom":"^18.0.0","ts-jest":"^27.1.4","tsup":"^5.12.4","typescript":"^4.6.3"},"scripts":{"test":"jest","build":"tsup","prepublishOnly":"jest && tsup"},"gitHead":"0cb087dcc80d5e0bd948b4a10a6982b29e95d772","_id":"async-ref@0.1.2","_nodeVersion":"16.11.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-jCoyvbpw/ezIfsAloCMt1YXgkBuWGNrDuV/+GDrIROtLKgDnOCR2moSc1gs+CEwcJXzsyknRIJ6dPlmcRzKfVg==","shasum":"9ed5a88754ba24fe537f67ebc77c7b1c3d2309df","tarball":"https://registry.npmjs.org/async-ref/-/async-ref-0.1.2.tgz","fileCount":9,"unpackedSize":25745,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDjJq77UDZjCEjCMcx+3euucNKYvqWhyiJVc3RnG9RHOAiAdbwT8pKjwD+Hv2Vxh8/XO67PKmAeiL9E4uVOWI3DyBw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiV8Y8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrkMRAAoCmz4MW4hNFvhiMa95SSn5keXCmgclhj+do2R4Ld8CaiVxOh\r\nwOkYCI0XDrgQ8fDoMqU+bju70H3N5jVihY9NmPFKvLuoAwEQQ+ZxDjGhJbEd\r\nRJLHn0CruiqsP7BIgqxCf37oO1LyRLLpnH+HZkv79LDnz2SZhh9/icymJpTG\r\nRpIZAcVqBHnYJse0YYQ+dWFrVr5prqylHMw+ijTEWpzKvyw8R3XE4kCuYsvd\r\nJ40fkNra9cEUZzNDrA1fD1a+713s8fzJJUJSzdXEhtfIBeGf2edaEysB5p7U\r\nYxG84L+Cmca3U/6DbJLL+9050DvD1F3et/Aoo2e0TcbphXO/R+uSwHQSuoNv\r\niNEPHUblAhQY5UY/iXIi1aM42I47NGCZlZkxDmZgXp/TlYj+w2aHS4/REmM6\r\nAX+XhLmf7Lt+9oT/CKEroOfkUdYXAU1IwWNYS0rCeNhiPImvdC9EtiiJAswf\r\npaP8K1LazAd4FjRiNZNN6uVR/Du7YduuLgVos/SwPupjOWFVMUxs7+HcNCez\r\nGRRCGd86y3iybHesA9DhycsAly9tNVNu8LA8hmrA8a9ONsqFnN71pvO3E4Yr\r\nVN6n4JtsJS8b9SWatFEVFqU1/PfId/ScXby6SKN5jbgcvshoTfcywLuvrXn8\r\nOn5mapUkmtN3abDDV0AX2/nEMZE2gFC3EOY=\r\n=mF5Z\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"garbles","email":"scholz.gabe@gmail.com"},"directories":{},"maintainers":[{"name":"garbles","email":"scholz.gabe@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-ref_0.1.2_1649919548360_0.3431630685995182"},"_hasShrinkwrap":false},"0.1.3":{"name":"async-ref","description":"Async ref objects for React. A tiny bridge between React.useSyncExternalStore and React.Suspense.","version":"0.1.3","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"Gabe Scholz","email":"github@gabe.pizza"},"license":"MIT","homepage":"https://github.com/garbles/async-ref","keywords":["react","suspense","ref","useRef","async","promise","await"],"devDependencies":{"@testing-library/react":"^13.0.0","@types/jest":"^27.4.1","@types/react":"^18.0.1","jest":"^27.5.1","react":"^18.0.0","react-dom":"^18.0.0","ts-jest":"^27.1.4","tsup":"^5.12.4","typescript":"^4.6.3"},"scripts":{"test":"jest","build":"tsup","prepublishOnly":"jest && tsc && tsup"},"gitHead":"c87de300772c59faf64c3d7f1f1897c7247adee3","_id":"async-ref@0.1.3","_nodeVersion":"16.11.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-bkInpsvB+tx9Nm/DNmBo2zk38z98GpElGnk0Y/UjBPwFtwiCnlS7O0zn0nSXfQQ5bblm0VlXBZiOwDEVIbm6Pg==","shasum":"a02dc48ed21dda8f5b64d51699f362e2518aefc3","tarball":"https://registry.npmjs.org/async-ref/-/async-ref-0.1.3.tgz","fileCount":9,"unpackedSize":25763,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXcep8l5z7+j/KB0gmpXzg2iCYldc4ofjmI9PG8Ynw1gIhAKga/rznuFY1H8qVCrWRUpOM1Kqcjj1tQjrtXU9mn5vR"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiV8dZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmquwA//bXuoyR703SMmSzKyKgopWduaOBrAUxu/UgOjo3AAYupM62Vw\r\nuAcuM3IPZjDH2/9gqHZjzOxeXf/FXK6zj11Xpv7tpXuwIfXZaJpV7+EEHuMf\r\nvEXq5J5ze9Y2E4MFtb0iF7in+Zmb17FJ8ebE79g7G+uTpGuBwUwnnRBjMIqm\r\ngwi3JC1K3xpyVBAk6w3FL22mv+E2zjHsk4efG20ot3eIAGhjhqGPlEjmBDr3\r\nG5yBIIHddWlBOSNbplueSPuZ1Y4KicyHKqPz7PSUSRStjNvcbFgikT7vKhji\r\nDJRegWAyG2LAwxgpSDAJTiUmXR/UHH/1wh5nWFNekAArcE4b82vP/dHqAtuL\r\nHl9WJaPmMWgGUcc77A4j4RN3Vv1gwrLibgX8JNgf6EStNgVF9x3uCwAydBJy\r\n3uXsWgIHiZMppq55jJsu9wSUJXOK0iHmkzL10Dj1ivzhqGLFFC23C8TZqI4U\r\nS4r52WHuu2LGw959TtTOy/CV5rhSa0Qy3vt0SzDAmsQo21lWtBc4WkYUFRbT\r\nY3rvoXt59bGepZQaQc2TSIZNsWZ9Wd0RlMw0RREKOBMewM9ikPvUBdsWQuYi\r\nDUWQ3SPaTTeXUeU0Stz9hkaDFsclNdUX7kK/XMxWMve5O7VZjIIAmWQO3ucY\r\nMlbBduBi7ak88QWwxvw2QsvnR+VkQJyGiWE=\r\n=ULvf\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"garbles","email":"scholz.gabe@gmail.com"},"directories":{},"maintainers":[{"name":"garbles","email":"scholz.gabe@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-ref_0.1.3_1649919833051_0.9198122304593042"},"_hasShrinkwrap":false},"0.1.4":{"name":"async-ref","description":"Async ref objects for React. A tiny bridge between React.useSyncExternalStore and React.Suspense.","version":"0.1.4","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"Gabe Scholz","email":"github@gabe.pizza"},"license":"MIT","homepage":"https://github.com/garbles/async-ref","keywords":["react","suspense","ref","useRef","async","promise","await"],"devDependencies":{"@testing-library/react":"^13.0.0","@types/jest":"^27.4.1","@types/react":"^18.0.1","jest":"^27.5.1","react":"^18.0.0","react-dom":"^18.0.0","ts-jest":"^27.1.4","tsup":"^5.12.4","typescript":"^4.6.3"},"scripts":{"test":"jest","build":"tsup","prepublishOnly":"jest && tsc && tsup"},"gitHead":"3625bb822394635346fa7c2d0c6dfe732c4c45f2","_id":"async-ref@0.1.4","_nodeVersion":"16.11.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-723WFx7BhTZXCMytdEzeQUHmnH/ukv6SBJVFV3WJkzq99Nq8UBuQhaoOXeJs3+37ALQg6NWva4BCL9AmTrj8Kg==","shasum":"704a044df672bc8ca642de7bbd47b2150955117f","tarball":"https://registry.npmjs.org/async-ref/-/async-ref-0.1.4.tgz","fileCount":9,"unpackedSize":27977,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB7pUkFCJ5ZQx3x8bEkfh1vhjNgExG9b+Mbhwdc6mN5uAiEA6L3OCMhwfTaXWTs81DBKBY9Dh96eHouFhyVqlux62Jc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiV8zyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpw9w/+JHONAdmGcSuJTjmgezzjow1vSFU3q9jtBRuGPXCDUSO3+BaS\r\nTQHZ3rC8l0CeWzNmudTsGC+U0OMSY20Br4CwhFxmHq5zzy19HgzbqUAKXZR5\r\ndycocmF+6F/r0E+yJpFFIYBTZIvGOfWGXtzHK2NTOBaieZjjUG6W46OsvrHF\r\nAPUOAsHp2iolOpILt3a1MyWJVA72ik6+UzaMzg520CING9xlLcvjDsy2HvMe\r\n28wOWSEwVPoQti0nvu7FKncWGD/mvpXaIHlcKtYj1pwshiAXJqD7iniZt68I\r\n07G98+2DtzvYJRx1Wg0xAl6ibopTi42fdVoBk0TQukSU90ZmovUgZynW32SC\r\nYuxspbeQtg19uy0yjP3x2OOvBgEawZfq59szfuFuowv3P5BQmLsatZIX2jXS\r\nzh0yLYW7r3bd8m9yuldWGovbSUA8L3tpjdTc/FQGELmUnYaAP4SrnbBYwl/S\r\nE0sB9l+UzNFmp71bFf4j0+HNNepfxdsxY3Mp2m8O5pZD6OFyvdIlmQ2vI9Ag\r\nybxHIpXJiWWvYm6gVSTwxpugl/R/08dnSu4dZ33V4MidaOuNhYBxyZGEmy2L\r\nOfEu2f3yiSgZZPDygPKOsXE4PIR7gVO5vSGKkNyfK/XOexDI2Qh6I5zajUU8\r\n4nGwXdXjPl5BzB0ifVHF/hksiRbSIuUsExM=\r\n=RQPc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"garbles","email":"scholz.gabe@gmail.com"},"directories":{},"maintainers":[{"name":"garbles","email":"scholz.gabe@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-ref_0.1.4_1649921265928_0.8782209840855035"},"_hasShrinkwrap":false},"0.1.5":{"name":"async-ref","description":"Async ref objects for React. A tiny bridge between React.useSyncExternalStore and React.Suspense.","version":"0.1.5","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"Gabe Scholz","email":"github@gabe.pizza"},"license":"MIT","homepage":"https://github.com/garbles/async-ref","keywords":["react","suspense","ref","useRef","async","promise","await"],"devDependencies":{"@testing-library/react":"^13.0.0","@types/jest":"^27.4.1","@types/react":"^18.0.1","jest":"^27.5.1","react":"^18.0.0","react-dom":"^18.0.0","ts-jest":"^27.1.4","tsup":"^5.12.4","typescript":"^4.6.3"},"scripts":{"test":"jest","build":"tsup","prepublishOnly":"jest && tsc && tsup"},"gitHead":"cbb7740ea72f522f1d7e44f9c1750d9c1555d5eb","_id":"async-ref@0.1.5","_nodeVersion":"16.11.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-PMvV9HUyv6YbR7NRbinITF9FwlLiBVINzN7oidCxEDDRHTcZy0cEFCQ+JJmT+byHpPlzW8/gbG1W4MfhZxAyMQ==","shasum":"89d22ee133c931bce61dfc02f0447c0526b79d41","tarball":"https://registry.npmjs.org/async-ref/-/async-ref-0.1.5.tgz","fileCount":9,"unpackedSize":27997,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFJwprOTzndUF871A8yBCQCTBYee8SJs2c4x/+deDvjlAiAdEuuSW5IZLUr678H9kT04BWfXUPxre/SoIEGTNrTldA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiV83KACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp4Qw//Vw3we1KodAiJ+FC/FY4gwN1n318ZxBVtVFnFmxRfw0HPaJ1l\r\nLo/44TxIFJ0TUPdcPER8dSjfWcJEC4iQAGLSKtXZ3gJwUAqPcXMveEM7ATu0\r\n0c6G43fsXH7j9Kc4upmEbw030qGrF+96CxnibdCjjXUMzGdur4tGA3uIYpIx\r\n3lE9C8MTjOoY824I0LAYqEJqxZWACBr8+diHPIelQxAaXPVowJljSpZhscBM\r\nv63Gz3/lEGTUJv8Ah63Zi9218Ynbs30vulMAFME7MM5caePC2Ra0ZD+K7fvA\r\nizPNym/DgPxOmXhH+HO/G0tmylMMu91KWZqqt0itDJO4V2WOJcf27dtdDm6N\r\nhpxBavKzYqeoH4X/VO/T4oETKx9M/B6C8LM6BT05BmL9r+IaFNszA0FSbxbz\r\nowSCm2t4lHcViB5ybStBwKIJOHO9udYeVO4V0T6VFVyqCEH0iAFbF90p1R9n\r\nMZNQaTj5dwFT1P0UI1MXUH45zI3oqx2dNBeEos5ixrmdduEkeBNKfDNriIHV\r\nMNl0C1KDXx8z1pSlVXJ8tDKUoTWgYXfDfMolM27LUBp4AY3lcaHTQ9GXrJqj\r\ndMMDWhBIqGfpgoiw4ruKdblY/YtxPJRR6TP9zAX1UfdMxhFCf3rK9KeMQ00m\r\nmPBRIqh5h/Ql+GpwKZ0EN6GBSFGzm8vCE0Q=\r\n=5ENu\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"garbles","email":"scholz.gabe@gmail.com"},"directories":{},"maintainers":[{"name":"garbles","email":"scholz.gabe@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-ref_0.1.5_1649921481899_0.3729788680254975"},"_hasShrinkwrap":false},"0.1.6":{"name":"async-ref","description":"Async ref objects for React. A tiny bridge between React.useSyncExternalStore and React.Suspense.","version":"0.1.6","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"Gabe Scholz","email":"github@gabe.pizza"},"license":"MIT","homepage":"https://github.com/garbles/async-ref","keywords":["react","suspense","ref","useRef","async","promise","await"],"devDependencies":{"@testing-library/react":"^13.0.0","@types/jest":"^27.4.1","@types/react":"^18.0.1","jest":"^27.5.1","react":"^18.0.0","react-dom":"^18.0.0","ts-jest":"^27.1.4","tsup":"^5.12.4","typescript":"^4.6.3"},"scripts":{"test":"jest","build":"tsup","prepublishOnly":"jest && tsc && tsup"},"gitHead":"83fac5ec556c1cb1ad22adec02977ec2b2f86900","_id":"async-ref@0.1.6","_nodeVersion":"16.11.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-gIvfC7ahv452pM+nwnxZJd/vhUh8UFMrd1DCvIvWjoy9WrRmYroXTTDxwg91oiD+4CqQKrg+11uCxZrzat4UvQ==","shasum":"babc3b57e87ccf93be11635c9a64169f50a5ebe9","tarball":"https://registry.npmjs.org/async-ref/-/async-ref-0.1.6.tgz","fileCount":9,"unpackedSize":28062,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG+Rt+KDO9L1meKFP9+PvUM6IRtokC+FGwogzdulN9FcAiByJCWGgD6c9xDpaP9hXrO8dhOMWsO613eFb3EdCKq17A=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiV88sACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoJvQ//XHM0v/jPg4Q8onQ9lKSlEeY5T1yX6o+dxoO5z44+dEk4x75I\r\nE8ek8bpFIyY/aB7B+Qpnn/KSWx5d3T4BhlFe4HfnL8Wc7N4CIFRRzwZGwgAY\r\nBirM8doZO2Zb1hEqGI213uM0zhx0qNvtt5aQh2DHKLgfRcllZoz7HWLxxX8F\r\ngc9tW0j/Ap/TI1DShqsbObEX8V9HI9Ct5wfzqIBZ+8N20O23KRSjmUMsSupT\r\nolIiRTofh0ylbvZ82x1r2tun08nSLySMKWzwiH34o8PCRXdrK3vGQfCklA4M\r\naCUdld8kAkEldTD+YK7qj6xKigXJ4295RUqbAFuPEqc1z0/S9OndOvckeYvO\r\nG76C+oB3p3oOq3IdCkfyU00+yYAGEdLYCdyxqAVKSGOb9mbw8QZYCT1upN/k\r\n54khuvTW9i2UtyS4FtZDawe+B5kDyQbFdnXEdUJNygPKVtNZTI8cxi9vkZd3\r\nomaDaL7PAWAknsh4f9hWmELt8Q7VicBMYSCcbHbZCWnB+qJZtB6PhDyt7pb/\r\nXNVwPloRaF3o0OmkVSspf1X36Tp7Kb2yUnC0akkFFLje/UmhdrbJdHwmwSQR\r\nvr4YJ786bbG6qw0nxNkcQoelLiI8c5ZhQ4PhkeOwWWFyYbMDqOekiMRovifW\r\n2EqRCENVXa1vdBMoSC9+YHdE7vCbinzD7EI=\r\n=0eYo\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"garbles","email":"scholz.gabe@gmail.com"},"directories":{},"maintainers":[{"name":"garbles","email":"scholz.gabe@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-ref_0.1.6_1649921836122_0.0504136412616194"},"_hasShrinkwrap":false}},"time":{"created":"2022-04-14T06:37:19.117Z","0.1.0":"2022-04-14T06:37:19.239Z","modified":"2022-04-14T07:37:16.377Z","0.1.1":"2022-04-14T06:40:45.655Z","0.1.2":"2022-04-14T06:59:08.528Z","0.1.3":"2022-04-14T07:03:53.230Z","0.1.4":"2022-04-14T07:27:46.071Z","0.1.5":"2022-04-14T07:31:22.046Z","0.1.6":"2022-04-14T07:37:16.289Z"},"maintainers":[{"name":"garbles","email":"scholz.gabe@gmail.com"}],"description":"Async ref objects for React. A tiny bridge between React.useSyncExternalStore and React.Suspense.","keywords":["react","suspense","ref","useRef","async","promise","await"],"author":{"name":"Gabe Scholz","email":"github@gabe.pizza"},"license":"MIT","readme":"# A tiny bridge between React.useSyncExternalStore and React Suspense\n\nThis library allows you to create asynchronous ref objects (`AsyncMutableRefObject<T>`). Similar to the sync ref objects you'd get back from `useRef<T>()`, except if the current value of the ref (`ref.current`) is not set, it will throw a `Promise` instead of returning nothing.\n\n`React.Suspense` works by catching promises—thrown as part of rendering a component—and waiting for them to resolve before re-rendering again. Assigning a value to `ref.current` will trigger the suspense boundary to re-render. (You can read more about how Suspense works in [the React docs](https://17.reactjs.org/docs/concurrent-mode-suspense.html).)\n\nBecause `ref.current` will either return a value `T` or _throw_ a promise, the only thing it can return is a `T` and therefore implements the `MutableRefObject<T>` interface. That is,\n\n```ts\ntype MutableRefObject<T> = {\n  current: T;\n};\n\nclass AsyncMutableRefObject<T> implements MutableRefObject<T> {\n  // ...\n}\n```\n\n[React v18 introduces the experimental hook](https://github.com/reactwg/react-18/discussions/86) `useSyncExternalStore` which provides a convenient way to hook into synchronous external data sources.\n\n```ts\ndeclare function useSyncExternalStore<Snapshot>(\n  subscribe: (onStoreChange: () => void) => () => void,\n  getSnapshot: () => Snapshot,\n  getServerSnapshot?: () => Snapshot\n): Snapshot;\n```\n\n`AsyncMutableRefObject<T>` makes it easy for a typed _asynchronous_ external data source to work with React Suspense in a typed _synchornous_ way because we can implement `getSnapshot` to just always return the result of `ref.current`.\n\n## Example\n\nA sample implementation of what you might do is the following where we define a data source that implements `getSnapshot` and `subscribe` functions.\n\n```ts\ntype Subscriber = () => void;\n\nclass AsyncDataStore<T> {\n  subscribers = new Set<Subscriber>();\n\n  ref = createAsyncRef<T>(() => this.notify());\n\n  getSnapshot = (): T => {\n    return this.ref.current;\n  };\n\n  subscribe = (sub: Subscriber): Subscriber => {\n    this.subscribers.add(sub);\n    return () => this.subscribers.delete(sub);\n  };\n\n  notify() {\n    this.subscribers.forEach((sub) => sub());\n  }\n\n  doSomething() {\n    fetch(/*...*/)\n      .then((res) => res.json())\n      .then((data) => {\n        // setting the current value will notify all subscribers.\n        ref.current = data;\n      });\n  }\n}\n```\n\nAs long as `getSnapshot()` is called from within the React-render cycle, the `Promise` it (might) throw will be caught by Suspense.\n\n```ts\nconst store = new AsyncDataStore<User>();\n\n// ...\n\nconst user = React.useSyncExternalStore(store.subscribe, store.getSnapshot);\n// => throws Promise from the ref,\n//    which is caught by a Suspense boundary\n//    that waits for it to resolve.\n\n// ...\n\nstore.doSomething();\n// => after some time, the current value is set.\n\n// ...\n\nconst user = React.useSyncExternalStore(store.subscribe, store.getSnapshot);\n// => returns a User\n```\n\n## Use\n\n`async-ref` exports a single function `createAsyncRef<T>()` which accepts an optional notifier function and returns an `AsyncMutableRefObject<T>`.\n\n```ts\ndeclare function createAsyncRef<T>(notifier?: () => void): AsyncMutableRefObject<T>;\n```\n\n```ts\nimport { createAsyncRef } from \"async-ref\";\n\nconst ref = createAsyncRef<User>();\n\nconst currentValue: User = ref.current;\n// => throws a Promise\n\nref.current = { id: \"12345\", name: \"Gabe\" /* etc */ };\n\nconst currentValue: User = ref.current;\n// => returns { id: '12345', name: 'Gabe', /* etc */ }\n```\n\nJust like a `MutableRefObject`, the current value can be set any number of times.\n\n```ts\nimport { createAsyncRef } from \"async-ref\";\n\nconst ref = createAsyncRef<number>();\n\nref.current = 12;\nref.current = 400;\n\nconst currentValue = ref.current;\n// => 400\n```\n\nAlternatively, `AsyncMutableRefObject<T>` exposes `resolve`/`reject` functions for a more familiar Promise-type feel.\n\n```ts\nimport { createAsyncRef } from \"async-ref\";\n\nconst ref = createAsyncRef<number>();\n\nref.reject(new Error(\"uh oh!\"));\n\nref.current;\n// => throws an Error(\"uh oh!\")\n```\n\nIf you provide a notifier function, it will be called every time the state of the ref changes.\n\n```ts\nimport { createAsyncRef } from \"async-ref\";\n\nconst listener = jest.fn();\n\nconst ref = createAsyncRef<number>(listener);\n\nref.current = 12;\nref.current = 400;\n\nexpect(listener).toHaveBeenCallTimes(2);\n```\n\nIf you want to prevent the ref from changing its state, you can freeze it.\n\n```ts\nconst ref = createAsyncRef<number>(listener);\n\nref.current = 12;\nref.freeze();\n\nref.current = 400;\n\nexpect(ref.current).toEqual(12);\n```\n\n## Safely getting the value without Suspense\n\n`AsyncMutableRefObject<T>` also implements `PromiseLike<T>` which means that you can dereference the current value by awaiting on it. (If a current value is already set, it will immediately resolve.) This is safer than calling `ref.current` because it will wait for a current value to be set before resolving the promise, but of course does not work inside of a React component because it is asynchronous.\n\n```ts\nimport { createAsyncRef } from \"async-ref\";\n\nconst ref = createAsyncRef<User>(listener);\n\n// ...\n\nconst user = await ref;\n```\n\n## Installing\n\n```\nyarn add async-ref\n```\n","readmeFilename":"README.md","homepage":"https://github.com/garbles/async-ref"}