{"_id":"framebuffer-worker","_rev":"32-7587bea903453f44439cc123d3b3a728","name":"framebuffer-worker","dist-tags":{"latest":"1.1.0-beta.1"},"versions":{"1.0.0-beta.8":{"name":"framebuffer-worker","version":"1.0.0-beta.8","description":"Draw on a Canvas from a Web Worker","browser":"./lib/index.js","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"}},"type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepublishOnly":"./build_wasm.sh && tsc"},"repository":{"type":"git","url":"git+https://github.com/cedeber/framebuffer-worker.git"},"keywords":["worker","canvas","framebuffer"],"author":{"name":"Cédric Eberhardt","email":"hello+code@cedeber.fr"},"license":"Unlicense","bugs":{"url":"https://github.com/cedeber/framebuffer-worker/issues"},"homepage":"https://github.com/cedeber/framebuffer-worker#readme","devDependencies":{"typescript":"^4.7.4"},"gitHead":"cb7dfba61b79826af30d9d58990ac521b08456b5","_id":"framebuffer-worker@1.0.0-beta.8","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-nnmHv8SX3MVzX5ILq6h4ja1Q06CQqgq3qHTuvRtgAV1mwYb7yjgKPyzsmAiTeskWW6yZ2lLC2DSGoAaHTd2DSg==","shasum":"7acbcbb22bab8cb687f9163d16a7a9bb08457f6b","tarball":"https://registry.npmjs.org/framebuffer-worker/-/framebuffer-worker-1.0.0-beta.8.tgz","fileCount":16,"unpackedSize":70067,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID03NT05dLKg03vCGOc/dgrwVp8kt9aDsEc8o2rfB6AoAiEA+dYlu9kOY0gxIYN+L5x8VpU52haI2uCAjPXxS7skoSs="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi83RpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrTcw//TBKs2PQ1PFt6zz1SMBe8BemmjsS8hqdBV5kZcSZ8XArI6nTL\r\n3CEAXtJSSTePCXBUx4AITNArXKyg+fDSbwxIPQ8KnfUJ0FXFEv2yQU5/5UzL\r\nV++e8E99/ohWqDcAhBhPtK9sEOWgYTFYYIWeoXturNpEwAezL2HHO3DdCwMj\r\nEybcNGpEXtFty6sML9z25iAWCg4FccFHWbS4Fl1D/63ihBSamZgnn+YkTq+M\r\n9YSoER996PW/1Y3RTTjMKp3p+J/qf6qyx5HDLkPS1BNonc8HFGDOqo7hZfEm\r\na1yul0G6rBtLVUb+aARoMP0aW75rPgf3k2NB5Vs19690JWSDyn5B1FhYgzPh\r\nNZkK7w7BpEnfc7IRlthZr8me+4IOjZIQynYTOcbkcOw9t5EKJ8Q07U1gK5wi\r\njKsTueMewdLJc0HZxYW+7UN8HG1bOfiLoMRiZHCP+mRoXzFVxdVq5L+w0S1w\r\n8XjWH/ciISObEzDdpv9NnL4RTUAT+lqhCN4OzNQD5e5jkM2U6o+jxBpPNNEo\r\n5telBo+dG3ZcwPEpYkHCjDIHpVML5jrbT1WzaWX2y8AHmA5kYWtuorZG9yiA\r\nSNPuuQie8H2YV9wl63ub+K71i79jN10rIY1DzDDBgdiPkw4sqXY0hp8Y9+zC\r\nW+efKfVNG94xUQvcP5w+cF7QRytO4jj9nfE=\r\n=N9Ut\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"},"directories":{},"maintainers":[{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/framebuffer-worker_1.0.0-beta.8_1660122217358_0.5618466532933881"},"_hasShrinkwrap":false},"1.0.0-beta.9":{"name":"framebuffer-worker","version":"1.0.0-beta.9","description":"Draw on a Canvas from a Web Worker","browser":"./lib/index.js","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"}},"type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepublishOnly":"./build_wasm.sh && tsc"},"repository":{"type":"git","url":"git+https://github.com/cedeber/framebuffer-worker.git"},"keywords":["worker","canvas","framebuffer"],"author":{"name":"Cédric Eberhardt","email":"hello+code@cedeber.fr"},"license":"Unlicense","bugs":{"url":"https://github.com/cedeber/framebuffer-worker/issues"},"homepage":"https://github.com/cedeber/framebuffer-worker#readme","devDependencies":{"typescript":"^4.7.4"},"gitHead":"e8e180a6c56393ae4d2d58dd8f8ad3b101b7fed6","_id":"framebuffer-worker@1.0.0-beta.9","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-7t1XmgsWGY8bztwJWWPmzi2/VSlYbrjFUg1PRlo32BMy0dNIXpzQZAxkPSIslye2/H54uXiJnkhnQaU6wDNSVw==","shasum":"e3c44fe697ec630fd5428318b84a77875e112ec3","tarball":"https://registry.npmjs.org/framebuffer-worker/-/framebuffer-worker-1.0.0-beta.9.tgz","fileCount":16,"unpackedSize":109874,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDNIRn1RQHRepDc/NwH53lIegd0K/X3XU9KwpXYTcpeXAiBcd+0ICyPIqLpoKtCY+O2Rht1/GvDvfnbaDGMppSFfEA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi86sFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqeCQ//ciJut6N6riqXSVOls+sBAWsvrNTLBF5G5KZ3yR3UJE7BuByE\r\nYSX/f1gZQi6Xn53g66Zx1yz++RQaRz8rkNCck7gMak4XKTMQG6qLxN8wsAdC\r\n6nbaHGlY8iDZ/aCCHgFS8CkvU6qisHyOkOAcYGtBCt0WEibM62MqYCZreHLW\r\nFaUSX2aDnotOeUwI72ocrFg8yBE0ma7u6nOoISNWA/1HVFhbYjax5Vxfgheo\r\n/2U3+e/XTAlN1VWnPvD0Z9ciiP9vSIBG7DDdmWgTMa0DFc/GbVZ8yBAY97wi\r\nf/JqyzP61Sy0/MIp+QTA+oYMfl6wqMwEqeQ3FwpdRUyFdiEjT72pHAoyTMjl\r\nwL+5m858s3PZ8aJ0IQdRQBvAwGqfEPglsCnVorENU8Ka96GtgKXZGWYJZsQa\r\nwT6tr2/7ib9UKBlQ9t58daB37aGUg3Kx6C5RssMTUYpYxSOpgRpIZtmuIoYl\r\nKatVvU2wOywiIwurKYwdHlxPUFfjPTpl6Yh1D4zWDaecVhlBqKpN42wANfrL\r\niO0Q22UOdccX30mEM1EeDKaxyIwxYsaq7piMICUOZ50nofYgHWUK+h8fWxJz\r\ndC718c+1BHafDBx//eEybrfP/6HM+W6+DrT3yOOticZIaX/kVDj+FiB32n0Z\r\neu8SyPU8yBYGyLt5hWJDvTqCa7cKijAcego=\r\n=0KcX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"},"directories":{},"maintainers":[{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/framebuffer-worker_1.0.0-beta.9_1660136197315_0.8737099017565164"},"_hasShrinkwrap":false},"1.0.0-beta.10":{"name":"framebuffer-worker","version":"1.0.0-beta.10","description":"Draw on a Canvas from a Web Worker","browser":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepublishOnly":"./build_wasm.sh && vite build"},"repository":{"type":"git","url":"git+https://github.com/cedeber/framebuffer-worker.git"},"keywords":["worker","canvas","framebuffer"],"author":{"name":"Cédric Eberhardt","email":"hello+code@cedeber.fr"},"license":"Unlicense","bugs":{"url":"https://github.com/cedeber/framebuffer-worker/issues"},"homepage":"https://github.com/cedeber/framebuffer-worker#readme","devDependencies":{"typescript":"^4.7.4","vite":"^3.0.7","vite-plugin-dts":"^1.4.1"},"gitHead":"29a70ab4203d649c353d81d438eb8a4df8678336","_id":"framebuffer-worker@1.0.0-beta.10","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-JEsP3lpYlWMC3BZvVvtFS2mRpXB4mA7EX/RQBeqBQJ1cO40hATgDLuObLmoCSXs8IxEW8kARHhEtjjmRPTIcJA==","shasum":"b4c0a10e22c1a60ad34f5c562c99a4fad59f9b08","tarball":"https://registry.npmjs.org/framebuffer-worker/-/framebuffer-worker-1.0.0-beta.10.tgz","fileCount":9,"unpackedSize":121031,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICdOZmGvdDm2HVGcznJPwSatmnD8jM+MiuQoWsTzLFS5AiA07mNe0fUliPTW+tKJ0vABH0k5FIecQ35lhcXczBShoQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi93XyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmriWA//UcQM2H+KQ8BSX3WsEEiX8QjqvQIt6Tq/989toeRh1VY/Tu+F\r\n0VoWrN01kAvkKeIl3uUo/SykRCt80uB00I5ZOB77c5V45hotENgtaRTm0yks\r\ne4FIzrEF4ucbKQ6BO/NVX1kx0CGjTmISigthwff0Wng4bZTDsYFc0vbY0Lf6\r\nCas9AOzA5WRsvgngMjEM31xjzuxfD+JZ2Y5a3wqxYGo7C04PAj5vEgxESzZj\r\nXY3cwkcMlKwBBdltVGJn3Wd4L1yaHQuDMgLvo18X+uJY6IoapfM1gClIai5v\r\nLHv1dK0FyX5WL+er77dbmU4MI9pt5iSezd7JttHM9JptIO6Dcjc7MAsjSfvD\r\nQ4p41xBA3TSsOz2iGQnIOEetBHSXM79T6jo/mINx8L9WISOQYLnml1dq6QBZ\r\nKWmHtpGQwnzUU+uwdRIt0mRpWMj9oWXNRNZ7sDdUU+L4NS6H/P47EBOYI2zj\r\nDGVz0gNpoyqNakn1+izENZmbCSmj3wduLKyE9eUTw2Dl8jiOS0+J2g025Ljz\r\n0UBtmI0LekM97f5vKH/2+wFgB9nIOxnrXjQKR184NIRUBQjtvqktuvGvTJyq\r\nPZuNkpyGf9quKkizzSvM1irXnhJOqkH3S992iMlovsDxqF9mvbRWu5equyDG\r\nNHtEM8jedH6bGjAOx1pmRCcSuOAP9Wqx2Ts=\r\n=6SE/\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"},"directories":{},"maintainers":[{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/framebuffer-worker_1.0.0-beta.10_1660384754094_0.968057686538867"},"_hasShrinkwrap":false},"1.0.0-beta.13":{"name":"framebuffer-worker","version":"1.0.0-beta.13","description":"Draw on a Canvas from a Web Worker","browser":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1","dev":"watchexec -e rs,ts just dev","prepublishOnly":"just release","postpublish":"just clean"},"repository":{"type":"git","url":"git+https://github.com/cedeber/framebuffer-worker.git"},"keywords":["worker","canvas","framebuffer"],"author":{"name":"Cédric Eberhardt","email":"hello+code@cedeber.fr"},"license":"Unlicense","bugs":{"url":"https://github.com/cedeber/framebuffer-worker/issues"},"homepage":"https://github.com/cedeber/framebuffer-worker#readme","devDependencies":{"esbuild":"^0.15.5","just-install":"^1.0.8","typescript":"^4.7.4"},"gitHead":"759928f713a1caa9185a8e79452151198c26130f","_id":"framebuffer-worker@1.0.0-beta.13","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-6qP7YFPtGX5ORhOeH+us6ziOeShtlMvRy2bcjtbsz5Yc62iz1ZoT67443y0oQyeDQb8V9TWhlV0RZHaeQN97xA==","shasum":"d8150089180781c38ceb8aa23062b5f8c3814ff8","tarball":"https://registry.npmjs.org/framebuffer-worker/-/framebuffer-worker-1.0.0-beta.13.tgz","fileCount":10,"unpackedSize":92517,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrGCAkAmIPnc5mlwPN3sKrP7oEvQVzcfxx5jjr9FWRKwIgX6tprkBz8OT9YzUlkcsQyamRxffRPmTqRu0QiFc6fEc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/j88ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqujQ/6A/lZr9p6cNQ4hjerNJElkYsCiCrm78HDzJFCtM9f4CdujfBr\r\nY+rgIkcUWPY9y3RmMU2vEqYSCgcEUj7dnkJBYyxeGBn2CDpDI56deCGWPVBX\r\ngu4s4miJhQtgw7S9PTAZfF/YGZ5Ue4fuLurBGpx+rfNpfUx5gM8S+WPNTVmI\r\n49PRIfrtQWbJ85N/f1fLngvBpSSdQ/W1ZkTN5hhfDCe3kkjTLWy8y1le7Wuj\r\n0UDZY4SrM/DSB9+DnpPCqLsXzwKxj3V+zZbHbRYBNpiuhYiIloBU2mehJXdf\r\n2CMVJa/nckwasuxF7kmsc+7mcnIYKF/ynWMn43uB/PmEzKKxx1B0SUhZKikt\r\nuYL7inzEnxRKTLZvW+oq76ApDyBlXMVQIvxv2pslYFtY7NMNQerF4rR1w7sa\r\ne1TJEiO7KxaXOcLXP2SiZKNVm4M4oVDKIOXkAQFvRwTPi1R/fCx0wRU9OCVp\r\npsw+1snoKfrXmm2+6xPDBL2dbf+5Y00rP5YfqK6zUnIWj7TcQYixB/WVH7Iz\r\nmN7LmyfqEJBkgHYPEyQafBEwtp/idq0svX76uzFv5xiDRIKR3odKjVnod/8Z\r\nV+RE+4jbM8gjb4+yzmlyaX1m6BU3NTtScglu3ZYJl3bIRb5shstcRIkZG1XC\r\nAqL9LwctMaTGz8pKETFJnEQH24xEU0QT5wg=\r\n=FOF9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"},"directories":{},"maintainers":[{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/framebuffer-worker_1.0.0-beta.13_1660829500562_0.6419289950902802"},"_hasShrinkwrap":false},"1.0.0-beta.15":{"name":"framebuffer-worker","version":"1.0.0-beta.15","description":"Draw on a Canvas from a Web Worker","browser":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1","dev":"watchexec -e rs,ts just dev","prepublishOnly":"just release","postpublish":"just clean"},"repository":{"type":"git","url":"git+https://github.com/cedeber/framebuffer-worker.git"},"keywords":["worker","canvas","framebuffer"],"author":{"name":"Cédric Eberhardt","email":"hello+code@cedeber.fr"},"license":"Unlicense","bugs":{"url":"https://github.com/cedeber/framebuffer-worker/issues"},"homepage":"https://github.com/cedeber/framebuffer-worker#readme","devDependencies":{"cpy-cli":"^4.1.0","esbuild":"^0.15.5","just-install":"^1.0.8","rimraf":"^3.0.2","typescript":"^4.7.4","wasm-pack":"^0.10.3"},"gitHead":"d89642b4a717a1ed9f0e74ef62dda23d9716b82d","_id":"framebuffer-worker@1.0.0-beta.15","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-ETQwAhAadXvfcj2cXLU28Gslj6DGikPvR8hlEs2ld7gx47xiNI2tUYoO+91hEFt5rsVWexCl/ffxJGJtdDtj8w==","shasum":"ae3229b9e3d3603a8817c5343290fa29aeae3b96","tarball":"https://registry.npmjs.org/framebuffer-worker/-/framebuffer-worker-1.0.0-beta.15.tgz","fileCount":10,"unpackedSize":155784,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyWT00njBK5IRJAWsIZ1s/oTxSJx/95HhsEoQBM5kfhAIgaf36SPUSq12iMrNHwCLl0X+Wz8Qex/MetDCBj65+5u8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/4C8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmppQQ//f3lO4REPSNdO6Zb0RMhnmD4m618JDsBC/5MAauF9dGr8PZ5L\r\nOCRcoXPvyc6xXkSy/qGjLVGs3tezcjIzUCZMAP+CGMIkw6kcd7graU41u9Cz\r\nt1geAfdTJASXIRPCHMPrzAOd/5uRiQLesMTijM/eqIXIK2qA4uQYrcwHrGwc\r\nt8sfuEzgW73KWrYM5m17d9kszt5ZT7o/wRb5tcCMfmg7bxVJ6u+6FVBM6Ny2\r\nPTN3K6QkToCva6r0BWWALdEV60yws8EmeDRTyegK/ymj6/QipiV1Ijixpaus\r\n9o84Ly/JSQqIF0ck2fZuUUFnLAEMf+8uzU/DubgOmSc3+womc6Sa7htzO76o\r\nMrja+jmxebsALU0+NXMabiy2H/qB9AfaMr8EhM+/uhBjzJ8zBt5++tf3+cyQ\r\nxAlwvM/zmtsYkv1URLhEMWw7t3UxhfWKt1kpI8c5GpSkYWm7f6ejEiDyIgPv\r\naQB0i1yIQQfSWbpZ6XahrPMVO9QGIq0AgkDK7W3dOU2Jq21fi1Q24oSAg8uM\r\nQXH4g4COcG3u1BGCK4FJfWTFIdoGbUyfgiuwvQDDXCZi4Wog5h4qAlTMmGwD\r\n35sLZL+yjGg4ndP71sPrcURLsUlBnyTWGuOYW5Pk3VDymolNmnEFGgqarXh4\r\nPhuT1mkph3eYCim2aXZvEvLCsyXiHQugMTc=\r\n=Kr0d\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"},"directories":{},"maintainers":[{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/framebuffer-worker_1.0.0-beta.15_1660911803761_0.007810280622417398"},"_hasShrinkwrap":false},"1.0.0-rc.1":{"name":"framebuffer-worker","version":"1.0.0-rc.1","description":"Draw on a Canvas from a Web Worker","browser":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1","dev":"watchexec -e rs,ts just dev","prepublishOnly":"just release","postpublish":"just clean"},"repository":{"type":"git","url":"git+https://github.com/cedeber/framebuffer-worker.git"},"keywords":["worker","canvas","framebuffer"],"author":{"name":"Cédric Eberhardt","email":"hello+code@cedeber.fr"},"license":"Unlicense","bugs":{"url":"https://github.com/cedeber/framebuffer-worker/issues"},"homepage":"https://github.com/cedeber/framebuffer-worker#readme","devDependencies":{"cpy-cli":"^4.1.0","esbuild":"^0.15.5","just-install":"^1.0.8","rimraf":"^3.0.2","typescript":"^4.7.4","wasm-pack":"^0.10.3"},"gitHead":"6dd9cbe81be18d8360de9531909b029e92715591","_id":"framebuffer-worker@1.0.0-rc.1","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-UdlC7XuSBkgIG90NOsr5KvlWD3XD9a4Qu6pTnrlp4i/GGNQTg4zLJ6p6m8g2RJ5Z4PAKuFtbD3sb/FWQyJKsEA==","shasum":"0438d67cde0307c1b20c36e7af887a7411bd70e6","tarball":"https://registry.npmjs.org/framebuffer-worker/-/framebuffer-worker-1.0.0-rc.1.tgz","fileCount":9,"unpackedSize":198848,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID66B9pQy8gkJOyBaPx4FKnuhnwTpWeU5eS7QBivpUk6AiBPngBIosr9SPs+yMEWOylKlFkutIwubffkPOWw4119RQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBVcJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqKYhAAongD7NGu0Hu8L7Tglm6Cl4Sq33J55ph2YWnbqCWMRbtNcba3\r\nTaPbw8MbV/6RNHcjVVMC7WKEtIRG82NoUNjgNgcs/p0E1UUQiD4PLdivYKDJ\r\nFBRH2Y763UafqYfuBGLKgLfKC05LqF/sT8wEMfiUoOrDYfAQgO36zRUz+5Tq\r\nmyqDfR3lrWm5iuroZkVtzqcx26tEU3VchjfRTSoB8j29plfmJA3Jv98hmP0n\r\neXWqwdscAaYP5rsj5ldL3jxYngvd11CWjJyJiqjBhT20Yzs+VKzVANYn91N/\r\npyFVNZ42xwfFbJ/9+7LlwZOtXqnL4W7krnOzl666Uf/gwXuilmgkSiV2V09I\r\nWciL5boKSHSSYhtG/A4n+brrzLHJU/zrpI7FRhVh5uJaIktOuIvJ3R9qn/bm\r\ny9CjVMGl1wDD3HWCpT2uDMce9cLZpqMnSJxe2oo3OffGZrMyPCCJTGkB9YN3\r\na/ecZ29UR1wWi4Xi6dXHijVeMiMTLMFXwgnCrf7VIOXuCsBfs45Sy2qGsLmH\r\n+epylQzFpjilKcp7ijHEKTtojau2ZkGgN8QTalxtTfScUIunM3mKWaSWVg+l\r\njrfA1mL5tBUjCOgSbVfo/QkaftCBTYqEl0JZ3SA+gBUB1hibm6afXk1fRYoa\r\nltTIA1HEa9FnZ5YlQqnw3BlNkhLiFo7z0Us=\r\n=5OGM\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"},"directories":{},"maintainers":[{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/framebuffer-worker_1.0.0-rc.1_1661294345278_0.29817384605802766"},"_hasShrinkwrap":false},"1.0.0-rc.2":{"name":"framebuffer-worker","version":"1.0.0-rc.2","description":"Draw on a Canvas from a Web Worker","browser":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1","dev":"watchexec -e rs,ts just dev","prepublishOnly":"just release","postpublish":"just clean"},"repository":{"type":"git","url":"git+https://github.com/cedeber/framebuffer-worker.git"},"keywords":["worker","canvas","framebuffer","rust","webassembly"],"author":{"name":"Cédric Eberhardt","email":"hello+code@cedeber.fr"},"license":"Unlicense","bugs":{"url":"https://github.com/cedeber/framebuffer-worker/issues"},"homepage":"https://github.com/cedeber/framebuffer-worker#readme","devDependencies":{"esbuild":"^0.15.5","typescript":"^4.7.4"},"gitHead":"23c500fdace702acf141d25971521354adb37a75","_id":"framebuffer-worker@1.0.0-rc.2","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-esOqLjxyvuN7RNQIY9IOkr9W91Ur7IOxSSCCeQUsPOMc+JLKhh9Dn+owvJ1m8kCj+BUVKnUJvpXrbfPQj/RJkQ==","shasum":"700abd6378cdda6f8dd708fccd025d921d79eefb","tarball":"https://registry.npmjs.org/framebuffer-worker/-/framebuffer-worker-1.0.0-rc.2.tgz","fileCount":9,"unpackedSize":198777,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGgf5JitHElF6lD555mUpVI/tom9H5CQV00FmeMrHLPNAiEAqJK1h9qQbZy6YgmTLT8dGIdX5R8LDcfxajAHrVhJ73c="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGO+wACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqq/A/9E/ChohzKnyCMWkZfXGyzIJHtl/yG/xiWhc9ptvCD54QRpCuH\r\n2odtqPhi0WtEDzPMDZkq7UeP4PbpOA1Jwl5AbO6Csj66Wuw75WNqNigRt90S\r\nckO6oARoFvkeG2L62ADH07sEcH3zGBt5YXh+DwdgkB18shqHK675WATMdEJL\r\n7h9IOlvNAI8K4KvkRNao387PHvxrT1RSeWsH83tG5NOV+RyELLwOQgTiY+s1\r\nKBfx0q++CAB4MOV9KOwO7JuunVXKQP9PJ4gcENVl/fV1xrRzqPjWjc2cftxF\r\n85yaYZSnb27Ssw47zuzbb/i768poX5twRT7o/ANYvnOcsM2O68HB43UaFcid\r\nV8XXi++BdyYPUggs/z6LX6xP4PUoawRgw34UMMwmJRxnrMMeibrR0oS59tSE\r\nDNyIkJ7msi0bUjXmarjMk7Or5tVGMSKKzHh/ltod4spz/ceCRu2QJwXhrN/3\r\nX3YC0eFoqtELBQPxRsxoZ+DKhpb4xy/idGMpWHO4AGwsvhYG2n3cNTRcwAqh\r\ncgRNGNb27cqXFhUjqRIKp59NRqERDsqV7WnUoZcb0Bi6z/2qwWyJb15AI2Ia\r\n+dTh0QC/lZodyrlLxdbhze17VgHzBAp51Tt1oGF0AafJARGnZxN2gn+btz2P\r\n3/kFg2V05851QhIQjQn0i/SIxGHxPejSSQ8=\r\n=jOd5\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"},"directories":{},"maintainers":[{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/framebuffer-worker_1.0.0-rc.2_1662578607963_0.4432493803996811"},"_hasShrinkwrap":false},"1.0.0-rc.3":{"name":"framebuffer-worker","version":"1.0.0-rc.3","description":"Draw on a Canvas from a Web Worker","browser":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1","dev":"watchexec -e rs,ts just dev","prepublishOnly":"just release","postpublish":"just clean"},"repository":{"type":"git","url":"git+https://github.com/cedeber/framebuffer-worker.git"},"keywords":["worker","canvas","framebuffer","rust","webassembly"],"author":{"name":"Cédric Eberhardt","email":"hello+code@cedeber.fr"},"license":"Unlicense","bugs":{"url":"https://github.com/cedeber/framebuffer-worker/issues"},"homepage":"https://github.com/cedeber/framebuffer-worker#readme","devDependencies":{"esbuild":"^0.15.5","typescript":"^4.7.4"},"gitHead":"3904325d5472bb87e7fce8d3470c683365bcca4c","_id":"framebuffer-worker@1.0.0-rc.3","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-F0WPFb0yDJRF8xdYkdyohRRvbnAbeBJuCG2KVHmP5G0GKu89t0vM+/VHa8r9hBg3GdrDts1eO0IeBXpCVziTmQ==","shasum":"43e14418a6365e3eb84e8aaff4dda168b1ac445e","tarball":"https://registry.npmjs.org/framebuffer-worker/-/framebuffer-worker-1.0.0-rc.3.tgz","fileCount":9,"unpackedSize":205252,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCK5gx/IxnXoNTLLJBJu7ANRoLJPfIlFOUqMUn4VxpiwgIhAOcW8fSeJlg75kjl5ec1k9+vJZLigq1FOx5ww1Jh04rG"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjJNdUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmohIA/9EYk2PAEBEZ3S3UDSJrz7xHwb5zCkG2+1VfMmccnJVU55p8d2\r\nDUe684txweHkqJ9ZgrQC/AHbNI9GQYOYYg+Ojb873q1Jo0d8zL+d0Sf0jfwm\r\n+qlUjuagnRDBOP3+B0wW2ihVFFP+0ENOfqM/PXyf/hhPjnxNYcY88xapq/gM\r\nd9+C+UQQxw14DFfrr0uo9xaPlwRCknyQOi0wDA5sh+bjjeY8FjNO1sTi5Ka0\r\niLp2ZnQw8yZix4T8ZvhzcAO+9nJBiDJ/EIuIycbCM5iA29HfVqyLiBpxAmGL\r\nGdk6a24p8eKoC2aACcuPYfJH2TCcFtqu6pJskhmxD0UY/cc8OYX+0n97GBNm\r\nOc6kSkoKGz6Apn0AxWDT2gxsO57x6S0qLZaZEvwMxFk+Kwv5E/bDBKYfE3Va\r\nYdI0cguN1uOxMB+MPgXX7BeriIn7hfCm7HwvXawzYwD+ZAjxZXdcuDVLUsPr\r\n8U3gKHWbmWEPc5bzjAwpY7anDmMtyKv/8BVzGgWgmkAm/n5QX1JVfOZ6G3r9\r\nYOykCw94HSsy8XJvYafakjHMOEWWSprV5V++xZBqNmBoo2e5OtL8+u955N7v\r\nCGFcqDgbD8nK5usFMwgksTA21wbOS7empQ7JMrepMOtS8PD23dmo38ITLLFL\r\ncLv5C9oI9C/6RKCd/PCvv9ozNCh4cXBxbQc=\r\n=LQjm\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"},"directories":{},"maintainers":[{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/framebuffer-worker_1.0.0-rc.3_1663358804206_0.8814518413079979"},"_hasShrinkwrap":false},"1.1.0-beta.1":{"name":"framebuffer-worker","version":"1.1.0-beta.1","description":"Draw on a Canvas from a Web Worker","browser":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1","dev":"watchexec -e rs,ts just dev","prepublishOnly":"just release","postpublish":"just clean"},"repository":{"type":"git","url":"git+https://github.com/cedeber/framebuffer-worker.git"},"keywords":["worker","canvas","framebuffer","rust","webassembly"],"author":{"name":"Cédric Eberhardt","email":"hello+code@cedeber.fr"},"license":"Unlicense","bugs":{"url":"https://github.com/cedeber/framebuffer-worker/issues"},"homepage":"https://github.com/cedeber/framebuffer-worker#readme","devDependencies":{"esbuild":"^0.15.5","typescript":"^4.7.4"},"gitHead":"e0e575626dd3444f701368b744238e2fa0d15bfc","_id":"framebuffer-worker@1.1.0-beta.1","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-NJpxLwLXt2vRdvXtpxBW3377zVh7ubOOiplMfn/v6Nxi07OsySSee1DDvYyvr7Bs0u6x5CZCfBOBg0p6DvITgA==","shasum":"422a791a5d554c291c2358da804de070255f9e27","tarball":"https://registry.npmjs.org/framebuffer-worker/-/framebuffer-worker-1.1.0-beta.1.tgz","fileCount":9,"unpackedSize":222749,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDe7CpxGq8DxPpeBbFoCSQJ1XSrMnFHk+2q7Y5MAlEarAIhAOJNB+Z8DtYvTSqRlICbt5fZEFYcOHIUOXAY4FCxsE1p"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjNMXiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr2DA//U+EEJ+C1Vt39f+kXIeDbToViTxr2jmHX+0ZMqev74cLy7zOI\r\ngdBj2cz34wQSHSC+L0UXvjQqBlEOqNKtoZKLbtHlLt1ov9gUEjRUn1+yfPxJ\r\nn53sszSKtJJlKXAi3KBO0XThAcnnaPj805PCfS+nUq7CFfwrjj2YDMqBFgb+\r\nsT6rhPpSdozBX0fRG/zz7uYOzC5nAhAiuR1jqjMWw6lSD+ZEKnO5Yac8+5vn\r\nnIpm7/OgsTwqDUsAODlTSJbaFIt7vqb6r6NW9IH6WX3/DviQ9Cgl3DzcDubz\r\nMk8TafSsCkKJxlnIGr3MXn6tZF9301cZU/CwIcxxw2PK2BhUQfY8p3Tavaao\r\nnqhm4YvX3QM4G5JiP3MD1/R3SKIugj1bQ1WEJWZG7jKBplhGd4vRmO9fTZrK\r\n6pyaqcvv7IMlb6Kod3mBcrIqpJFAslqtjNSc1IUq/TygjYDEp/YvppNUo6gX\r\nzzrPOIT5v/0CflTLi3NBuZZb8KYfQOb9NU7Lpkz3+josiZFmUfDVN5OflgX4\r\nDFkf3+6fZgaIm/YFeol2qUvOIU5lIc2L8/2LC+d/N8PXt8pPQS7YcivSUk3x\r\ns0yzWtyERlyHZOIajFb0UF+kbglt+vl84G/+Uei83ZrwJwTNv1nKvK+pj0wa\r\nBUHO6qByuax8CNEdplhaM7ocAEKEaDYj2k0=\r\n=gUKe\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"},"directories":{},"maintainers":[{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/framebuffer-worker_1.1.0-beta.1_1664402914761_0.8005294667171918"},"_hasShrinkwrap":false}},"time":{"created":"2022-07-29T14:43:33.171Z","1.0.0-beta.1":"2022-07-29T14:43:33.345Z","modified":"2022-09-28T22:08:35.017Z","1.0.0-beta.2":"2022-07-31T12:12:51.413Z","1.0.0-beta.3":"2022-08-04T20:06:36.069Z","1.0.0-beta.4":"2022-08-04T22:29:58.124Z","1.0.0-beta.5":"2022-08-05T06:03:28.336Z","1.0.0-beta.6":"2022-08-05T17:25:15.936Z","1.0.0-beta.7":"2022-08-05T17:39:15.092Z","1.0.0-beta.8":"2022-08-10T09:03:37.547Z","1.0.0-beta.9":"2022-08-10T12:56:37.502Z","1.0.0-beta.10":"2022-08-13T09:59:14.277Z","1.0.0-beta.11":"2022-08-18T12:41:21.094Z","1.0.0-beta.12":"2022-08-18T12:52:46.725Z","1.0.0-beta.13":"2022-08-18T13:31:40.776Z","1.0.0-beta.14":"2022-08-19T12:11:34.998Z","1.0.0-beta.15":"2022-08-19T12:23:24.020Z","1.0.0-rc.1":"2022-08-23T22:39:05.464Z","1.0.0-rc.2":"2022-09-07T19:23:28.122Z","1.0.0-rc.3":"2022-09-16T20:06:44.501Z","1.1.0-beta.1":"2022-09-28T22:08:34.911Z"},"maintainers":[{"name":"cedriceberhardt","email":"hello+code@cedeber.fr"}],"description":"Draw on a Canvas from a Web Worker","homepage":"https://github.com/cedeber/framebuffer-worker#readme","keywords":["worker","canvas","framebuffer","rust","webassembly"],"repository":{"type":"git","url":"git+https://github.com/cedeber/framebuffer-worker.git"},"author":{"name":"Cédric Eberhardt","email":"hello+code@cedeber.fr"},"bugs":{"url":"https://github.com/cedeber/framebuffer-worker/issues"},"license":"Unlicense","readme":"# Framebuffer Worker\n\nDraw on a Canvas from a Web Worker.\n\nThis is definitely not optimized for real-time application, although possible. The main goal is to render a\nvisualization of millions of data which usually take some seconds to render.\n\nBy doing it off-the-main-thread, in a Worker, it will never block the UI.\n\n[![demo](https://img.shields.io/badge/demo-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https://framebuffer-worker.dev.cedeber.fr)\n[![npm](https://img.shields.io/npm/v/framebuffer-worker?logo=npm&style=for-the-badge&color=success)](https://www.npmjs.com/package/framebuffer-worker)\n\n## How does it work?\n\nAs the [`OffscreenCanvas`](https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas) API is still experimental,\nwe draw directly in\na [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer)\n.\nThe drawing is done via `WebAssembly` thanks to\nthe [`embedded_graphics`](https://docs.rs/embedded-graphics/latest/embedded_graphics/index.html) Rust crate, which is\ninstantiated in a `Web Worker`.\nThat's why everything is _asynchronous_.\n\n## Example\n\n```javascript\nimport { init, asyncThrottle, Style, Color, Point } from \"framebuffer-worker\";\n\nconst canvas = document.getElementById(\"canvas\");\nconst layer = await init(canvas);\n\nlayer().then(async ({ clear, render, line }) => {\n  await clear();\n  await line({\n    startPoint: new Point(0, 0),\n    endPoint: new Point(canvas.width, canvas.height),\n    style: new Style(undefined, new Color(127, 127, 127), 1),\n  });\n  await render();\n});\n\nlayer().then(async ({ clear, render, line }) => {\n  const cb = async (event) => {\n    const x = event.offsetX;\n    const y = event.offsetY;\n\n    await clear();\n\n    await Promise.all([\n      line({\n        startPoint: new Point(x, 0),\n        endPoint: new Point(x, canvas.height),\n        style: new Style(undefined, new Color(65, 105, 225), 1),\n      }),\n      line({\n        startPoint: new Point(0, y),\n        endPoint: new Point(canvas.width, y),\n        style: new Style(undefined, new Color(65, 105, 225), 1),\n      }),\n    ]);\n\n    await render();\n  };\n\n  canvas.addEventListener(\"pointermove\", asyncThrottle(cb, 16));\n});\n```\n\nYou can [play with it on StackBlitz](https://stackblitz.com/edit/framebuffer-worker?file=src/main.ts&view=editor).\nOpen the preview in a new tab because the vite config changes the headers. See bellow.\n\n## Basics\n\n### Layers\n\nEvery time you create a new layer, it will instantiate a new Worker. Every layer has to be _rendered individually_,\nthough.\nSo the time that every layer will take to render, will never affect the other layers rendering speed.\nAt every render the layers are merged together, in the order of creation at the moment, so that you do not have to sync\nbetween layers yourself.\n\nCurrently, the rendering is not optimized if you have multiple real-time layers, because every render call its\nown `requestAnimationFrame` and merge layers together.\nOpacity is not supported at the moment.\n\n```javascript\nconst canvas = document.getElementById(\"canvas\");\nconst layer = await init(canvas);\n\nlayer().then(async ({ clear, render, line, circle, rectangle }) => {\n  // -- snip --\n});\n\n// OR\n\nconst { clear, render, line, circle, rectangle } = await layer();\n```\n\n### Clear\n\nCalling `await clear();` will simply fill the `SharedArrayBuffer` with `OxO`.\nIt is way faster than \"drawing\" all pixels one by one with a specific color.\nColors are defined as `(red, green, blue, alpha)`. So here it will be a transparent black.\n\n### Render\n\nCall `await render();` every time you want the pixels to appear on the screen.\nIt will merge all layers together, by the order of creation. Last layer on top.\n\nAlthough at every drawings (`clear`, `line`, ...), the buffer is modified, we keep a copy of the previous one to draw\nit, until you call `render`.\n\n## Primitives\n\n### Line\n\n```javascript\nawait line({\n  startPoint: new Point(0, 0),\n  endPoint: new Point(canvas.width, canvas.height),\n  // no fillColor for the line\n  style: new Style(undefined, new Color(255, 105, 180), 1),\n});\n```\n\n### Circle\n\n```javascript\nawait circle({\n  topLeftPoint: new Point(10, 20),\n  diameter: 20,\n  style: new Style(new Color(176, 230, 156), new Color(255, 105, 180), 2),\n});\n```\n\n### Rectangle\n\n```javascript\nawait rectangle({\n  topLeftPoint: new Point(50, 100),\n  size: new Size(100, 40),\n  style: new Style(new Color(176, 230, 156), new Color(255, 105, 180), 1),\n  radius: 3, //optional\n});\n```\n\n### Rounded Rectangle\n\n```javascript\nawait rounded_rectangle({\n  topLeftPoint: new Point(50, 100),\n  size: new Size(300, 40),\n  style: new Style(new Color(255, 255, 255), new Color(255, 10, 18), 1),\n  corners: new Corners(new Size(3, 6), new Size(9, 12), new Size(10, 10), new Size(4, 4)),\n});\n```\n\n### Ellipse\n\n```javascript\nawait ellipse({\n  topLeftPoint: new Point(10, 20),\n  size: new Size(300, 40),\n  style: new Style(new Color(176, 230, 156), new Color(255, 105, 180), 2),\n});\n```\n\n### Arc\n\n```javascript\nawait arc({\n  topLeftPoint: new Point(100, 240),\n  diameter: 130,\n  angleStart: new Angle(0),\n  angleSweep: new Angle(72),\n  // no fillColor for the polyline\n  style: new Style(undefined, new Color(127, 127, 127), 5),\n});\n```\n\n### Sector\n\n```javascript\nawait sector({\n  topLeftPoint: new Point(80, 260),\n  diameter: 130,\n  angleStart: new Angle(35),\n  angleSweep: new Angle(300),\n  style: new Style(new Color(253, 216, 53)),\n});\n```\n\n### Triangle\n\n```javascript\nawait triangle({\n  vertex1: new Point(10, 64),\n  vertex2: new Point(50, 64),\n  vertex3: new Point(60, 44),\n  style: new Style(new Color(48, 120, 214)),\n});\n```\n\n### Polyline\n\n```javascript\nawait polyline({\n  points: [\n    new Point(10, 64),\n    new Point(50, 64),\n    new Point(60, 44),\n    new Point(70, 64),\n    new Point(80, 64),\n    new Point(90, 74),\n    new Point(100, 10),\n    new Point(110, 84),\n    new Point(120, 64),\n    new Point(300, 64),\n  ],\n  // no fillColor for the polyline\n  style: new Style(undefined, new Color(176, 230, 156), 3),\n});\n```\n\n### Text\n\nOnly a single monospaced font is available: [ProFont](https://tobiasjung.name/profont/).\nThere is no italic nor bold version. But the bigger the font, the bolder.\n\nOnly few sizes are available: 7, 9, 10, 12, 14, 18, and 24 pixels. You can see the rendering on\nthe [GitHub page](https://github.com/wezm/profont).\n\nThe `textStyle` argument is _optional_. The default alignment is `left` and the default baseline is `alphabetic`.\n\n```javascript\nawait text({\n  position: new Point(20, 20),\n  label: `Hello, world!`,\n  size: 9,\n  textColor: new Color(33, 33, 33),\n  textStyle: new TextStyle(Alignment.Center, Baseline.Middle), // optional\n});\n```\n\n## Interactivity\n\nYou can, since v1.1, add some interactivity. Each primitive returns a bounding box, a rectangle, which allow you to check the intersection with the pointer.\n\n```javascript\nconst canvas = document.getElementById(\"canvas\");\nconst layer = await init(canvas);\n\nlet otherLayerApi;\n\nlayer().then(async ({ clear, render, circle }) => {\n  let cursor;\n  let boundingBoxes = new Map();\n  let hoverBounding;\n\n  await clear();\n  for (let i = 0; i < 900; i++) {\n    let id = `circle-${i}`;\n    const diameter = 10;\n    const perLine = Math.floor(canvas.width / (diameter + 2)) - 1;\n    await circle({\n      topLeftPoint: new Point(\n        (diameter + 2) * (i % perLine) + 5,\n        5 + (diameter + 2) * Math.floor(i / perLine),\n      ),\n      diameter,\n      style: new Style(new Color(176, 230, 156), new Color(255, 105, 180), 1),\n    }).then((bounding) => {\n      if (bounding) boundingBoxes.set(id, bounding);\n    });\n  }\n  await render();\n\n  canvas.addEventListener(\n    \"pointermove\",\n    asyncThrottle(async (event) => {\n      hoverBounding = undefined;\n      cursor = new Point(event.offsetX, event.offsetY);\n\n      for (const bounding of boundingBoxes.values()) {\n        if (bounding.intersect(cursor)) {\n          hoverBounding = bounding.as_js();\n        }\n      }\n\n      await otherLayerApi?.clear();\n\n      if (hoverBounding) {\n        await otherLayerApi?.rectangle({\n          topLeftPoint: new Point(hoverBounding.top_left.x, hoverBounding.top_left.y),\n          size: new Size(hoverBounding.size.width, hoverBounding.size.height),\n          style: new Style(undefined, new Color(100, 180, 255), 2),\n        });\n      }\n\n      await otherLayerApi?.render();\n    }, 16),\n  );\n});\n\nlayer().then(async (api) => {\n  otherLayerApi = api;\n});\n```\n\n## Server configuration\n\n### SharedArrayBuffer support\n\nYou need to set two HTTP Headers:\n\n| Header                       | Value        |\n| ---------------------------- | ------------ |\n| Cross-Origin-Opener-Policy   | same-origin  |\n| Cross-Origin-Embedder-Policy | require-corp |\n\n### Vite\n\nYou need to exclude the `framebuffer-worker` module from the dependency pre-bundling as this module is an ES module\nand use `import.meta.url` internally to load the worker and wasm files.\n\nYou also need to set the _mandatory headers_ to support `SharedArrayBuffer`.\n\n```javascript\nimport { defineConfig } from \"vite\";\n\nexport default defineConfig({\n  optimizeDeps: {\n    exclude: [\"framebuffer-worker\"],\n  },\n  server: {\n    headers: {\n      \"Cross-Origin-Embedder-Policy\": \"require-corp\",\n      \"Cross-Origin-Opener-Policy\": \"same-origin\",\n    },\n  },\n});\n```\n","readmeFilename":"README.md"}