git.iko.soy/rowtype-yoga/purescript-yoga-fetch-om
on main help sign in
Replace JS test server with PureScript yoga-fastify-om server
commit5ad183e0b5b2be741c90e2f7c348a1b957b267df authorMark <mark.eibes@gmail.com> dateMon 9 Feb 2026, 19:12 (8 months ago) parent0a003a5
7 files changed+1053−47
bun.lock+87 package.json+1 spago.lock+900−13 spago.yaml+17−4 test/TestServer.purs+38 test/setup.js+10−3 test/test-server.js−27
bun.lock+87
@@ -4,6 +4,7 @@
44 "": {
55 "name": "purescript-yoga-fetch-om",
66 "devDependencies": {
7+ "fastify": "^5.7.4",
78 "jsdom": "^28.0.0",
89 "purescript": "^0.15.15",
910 "spago": "0.93.42",
@@ -80,6 +81,18 @@
8081
8182 "@exodus/bytes": ["@exodus/bytes@1.11.0", "", { "peerDependencies": { "@noble/hashes": "^1.8.0 || ^2.0.0" }, "optionalPeers": ["@noble/hashes"] }, "sha512-wO3vd8nsEHdumsXrjGO/v4p6irbg7hy9kvIeR6i2AwylZSk4HJdWgL0FNaVquW1+AweJcdvU1IEpuIWk/WaPnA=="],
8283
84+ "@fastify/ajv-compiler": ["@fastify/ajv-compiler@4.0.5", "", { "dependencies": { "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "fast-uri": "^3.0.0" } }, "sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A=="],
85+
86+ "@fastify/error": ["@fastify/error@4.2.0", "", {}, "sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ=="],
87+
88+ "@fastify/fast-json-stringify-compiler": ["@fastify/fast-json-stringify-compiler@5.0.3", "", { "dependencies": { "fast-json-stringify": "^6.0.0" } }, "sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ=="],
89+
90+ "@fastify/forwarded": ["@fastify/forwarded@3.0.1", "", {}, "sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw=="],
91+
92+ "@fastify/merge-json-schemas": ["@fastify/merge-json-schemas@0.2.1", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A=="],
93+
94+ "@fastify/proxy-addr": ["@fastify/proxy-addr@5.1.0", "", { "dependencies": { "@fastify/forwarded": "^3.0.0", "ipaddr.js": "^2.1.0" } }, "sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw=="],
95+
8396 "@gar/promisify": ["@gar/promisify@1.1.3", "", {}, "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="],
8497
8598 "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="],
@@ -98,6 +111,8 @@
98111
99112 "@npmcli/move-file": ["@npmcli/move-file@2.0.1", "", { "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" } }, "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ=="],
100113
114+ "@pinojs/redact": ["@pinojs/redact@0.4.0", "", {}, "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg=="],
115+
101116 "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="],
102117
103118 "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.57.1", "", { "os": "android", "cpu": "arm" }, "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg=="],
@@ -168,12 +183,18 @@
168183
169184 "@vitest/utils": ["@vitest/utils@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ=="],
170185
186+ "abstract-logging": ["abstract-logging@2.0.1", "", {}, "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA=="],
187+
171188 "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="],
172189
173190 "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="],
174191
175192 "aggregate-error": ["aggregate-error@3.1.0", "", { "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="],
176193
194+ "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="],
195+
196+ "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="],
197+
177198 "ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="],
178199
179200 "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
@@ -190,6 +211,10 @@
190211
191212 "astral-regex": ["astral-regex@2.0.0", "", {}, "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="],
192213
214+ "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="],
215+
216+ "avvio": ["avvio@9.1.0", "", { "dependencies": { "@fastify/error": "^4.0.0", "fastq": "^1.17.1" } }, "sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw=="],
217+
193218 "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
194219
195220 "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="],
@@ -244,6 +269,8 @@
244269
245270 "concat-stream": ["concat-stream@1.6.2", "", { "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw=="],
246271
272+ "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="],
273+
247274 "copy-concurrently": ["copy-concurrently@1.0.5", "", { "dependencies": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", "iferr": "^0.1.5", "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.0" } }, "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A=="],
248275
249276 "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="],
@@ -276,6 +303,8 @@
276303
277304 "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="],
278305
306+ "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="],
307+
279308 "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
280309
281310 "duplexify": ["duplexify@3.7.1", "", { "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" } }, "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g=="],
@@ -308,6 +337,18 @@
308337
309338 "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="],
310339
340+ "fast-decode-uri-component": ["fast-decode-uri-component@1.0.1", "", {}, "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg=="],
341+
342+ "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="],
343+
344+ "fast-json-stringify": ["fast-json-stringify@6.3.0", "", { "dependencies": { "@fastify/merge-json-schemas": "^0.2.0", "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "fast-uri": "^3.0.0", "json-schema-ref-resolver": "^3.0.0", "rfdc": "^1.2.0" } }, "sha512-oRCntNDY/329HJPlmdNLIdogNtt6Vyjb1WuT01Soss3slIdyUp8kAcDU3saQTOquEK8KFVfwIIF7FebxUAu+yA=="],
345+
346+ "fast-querystring": ["fast-querystring@1.1.2", "", { "dependencies": { "fast-decode-uri-component": "^1.0.1" } }, "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg=="],
347+
348+ "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="],
349+
350+ "fastify": ["fastify@5.7.4", "", { "dependencies": { "@fastify/ajv-compiler": "^4.0.5", "@fastify/error": "^4.0.0", "@fastify/fast-json-stringify-compiler": "^5.0.0", "@fastify/proxy-addr": "^5.0.0", "abstract-logging": "^2.0.1", "avvio": "^9.0.0", "fast-json-stringify": "^6.0.0", "find-my-way": "^9.0.0", "light-my-request": "^6.0.0", "pino": "^10.1.0", "process-warning": "^5.0.0", "rfdc": "^1.3.1", "secure-json-parse": "^4.0.0", "semver": "^7.6.0", "toad-cache": "^3.7.0" } }, "sha512-e6l5NsRdaEP8rdD8VR0ErJASeyaRbzXYpmkrpr2SuvuMq6Si3lvsaVy5C+7gLanEkvjpMDzBXWE5HPeb/hgTxA=="],
351+
311352 "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="],
312353
313354 "figgy-pudding": ["figgy-pudding@3.5.2", "", {}, "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw=="],
@@ -318,6 +359,8 @@
318359
319360 "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
320361
362+ "find-my-way": ["find-my-way@9.4.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", "safe-regex2": "^5.0.0" } }, "sha512-5Ye4vHsypZRYtS01ob/iwHzGRUDELlsoCftI/OZFhcLs1M0tkGPcXldE80TAZC5yYuJMBPJQQ43UHlqbJWiX2w=="],
363+
321364 "flush-write-stream": ["flush-write-stream@1.1.1", "", { "dependencies": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" } }, "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w=="],
322365
323366 "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="],
@@ -378,6 +421,8 @@
378421
379422 "ip-address": ["ip-address@10.1.0", "", {}, "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q=="],
380423
424+ "ipaddr.js": ["ipaddr.js@2.3.0", "", {}, "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg=="],
425+
381426 "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="],
382427
383428 "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
@@ -404,8 +449,14 @@
404449
405450 "jsdom": ["jsdom@28.0.0", "", { "dependencies": { "@acemir/cssom": "^0.9.31", "@asamuzakjp/dom-selector": "^6.7.6", "@exodus/bytes": "^1.11.0", "cssstyle": "^5.3.7", "data-urls": "^7.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", "parse5": "^8.0.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.0", "undici": "^7.20.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^8.0.1", "whatwg-mimetype": "^5.0.0", "whatwg-url": "^16.0.0", "xml-name-validator": "^5.0.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-KDYJgZ6T2TKdU8yBfYueq5EPG/EylMsBvCaenWMJb2OXmjgczzwveRCoJ+Hgj1lXPDyasvrgneSn4GBuR1hYyA=="],
406451
452+ "json-schema-ref-resolver": ["json-schema-ref-resolver@3.0.0", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A=="],
453+
454+ "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
455+
407456 "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="],
408457
458+ "light-my-request": ["light-my-request@6.6.0", "", { "dependencies": { "cookie": "^1.0.1", "process-warning": "^4.0.0", "set-cookie-parser": "^2.6.0" } }, "sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A=="],
459+
409460 "linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="],
410461
411462 "log-symbols": ["log-symbols@3.0.0", "", { "dependencies": { "chalk": "^2.4.2" } }, "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ=="],
@@ -474,6 +525,8 @@
474525
475526 "npm-run-path": ["npm-run-path@3.1.0", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg=="],
476527
528+ "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="],
529+
477530 "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
478531
479532 "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="],
@@ -504,12 +557,20 @@
504557
505558 "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="],
506559
560+ "pino": ["pino@10.3.1", "", { "dependencies": { "@pinojs/redact": "^0.4.0", "atomic-sleep": "^1.0.0", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^3.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^4.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg=="],
561+
562+ "pino-abstract-transport": ["pino-abstract-transport@3.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg=="],
563+
564+ "pino-std-serializers": ["pino-std-serializers@7.1.0", "", {}, "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="],
565+
507566 "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="],
508567
509568 "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="],
510569
511570 "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="],
512571
572+ "process-warning": ["process-warning@5.0.0", "", {}, "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="],
573+
513574 "promise-inflight": ["promise-inflight@1.0.1", "", {}, "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="],
514575
515576 "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="],
@@ -528,20 +589,28 @@
528589
529590 "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
530591
592+ "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="],
593+
531594 "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="],
532595
533596 "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="],
534597
535598 "readline-sync": ["readline-sync@1.4.10", "", {}, "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw=="],
536599
600+ "real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="],
601+
537602 "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="],
538603
539604 "restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="],
540605
606+ "ret": ["ret@0.5.0", "", {}, "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw=="],
607+
541608 "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="],
542609
543610 "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
544611
612+ "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="],
613+
545614 "rimraf": ["rimraf@2.7.1", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "./bin.js" } }, "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w=="],
546615
547616 "rollup": ["rollup@4.57.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.57.1", "@rollup/rollup-android-arm64": "4.57.1", "@rollup/rollup-darwin-arm64": "4.57.1", "@rollup/rollup-darwin-x64": "4.57.1", "@rollup/rollup-freebsd-arm64": "4.57.1", "@rollup/rollup-freebsd-x64": "4.57.1", "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", "@rollup/rollup-linux-arm-musleabihf": "4.57.1", "@rollup/rollup-linux-arm64-gnu": "4.57.1", "@rollup/rollup-linux-arm64-musl": "4.57.1", "@rollup/rollup-linux-loong64-gnu": "4.57.1", "@rollup/rollup-linux-loong64-musl": "4.57.1", "@rollup/rollup-linux-ppc64-gnu": "4.57.1", "@rollup/rollup-linux-ppc64-musl": "4.57.1", "@rollup/rollup-linux-riscv64-gnu": "4.57.1", "@rollup/rollup-linux-riscv64-musl": "4.57.1", "@rollup/rollup-linux-s390x-gnu": "4.57.1", "@rollup/rollup-linux-x64-gnu": "4.57.1", "@rollup/rollup-linux-x64-musl": "4.57.1", "@rollup/rollup-openbsd-x64": "4.57.1", "@rollup/rollup-openharmony-arm64": "4.57.1", "@rollup/rollup-win32-arm64-msvc": "4.57.1", "@rollup/rollup-win32-ia32-msvc": "4.57.1", "@rollup/rollup-win32-x64-gnu": "4.57.1", "@rollup/rollup-win32-x64-msvc": "4.57.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A=="],
@@ -554,12 +623,20 @@
554623
555624 "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
556625
626+ "safe-regex2": ["safe-regex2@5.0.0", "", { "dependencies": { "ret": "~0.5.0" } }, "sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw=="],
627+
628+ "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="],
629+
557630 "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
558631
559632 "saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="],
560633
634+ "secure-json-parse": ["secure-json-parse@4.1.0", "", {}, "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA=="],
635+
561636 "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
562637
638+ "set-cookie-parser": ["set-cookie-parser@2.7.2", "", {}, "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw=="],
639+
563640 "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
564641
565642 "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
@@ -580,6 +657,8 @@
580657
581658 "socks-proxy-agent": ["socks-proxy-agent@7.0.0", "", { "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", "socks": "^2.6.2" } }, "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww=="],
582659
660+ "sonic-boom": ["sonic-boom@4.2.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww=="],
661+
583662 "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
584663
585664 "spago": ["spago@0.93.42", "", { "dependencies": { "@nodelib/fs.walk": "^2.0.0", "better-sqlite3": "^11.0.0", "env-paths": "^3.0.0", "fs-extra": "^11.2.0", "fuse.js": "^7.0.0", "glob": "^10.4.1", "markdown-it": "^14.1.0", "micromatch": "^4.0.7", "open": "^10.1.0", "picomatch": "^4.0.2", "punycode": "^2.3.1", "readline-sync": "^1.4.10", "semver": "^7.6.2", "spdx-expression-parse": "^4.0.0", "ssh2": "^1.15.0", "supports-color": "^9.4.0", "tar": "^7.2.0", "tmp": "^0.2.3", "xhr2": "^0.2.1", "yaml": "^2.4.5" }, "bin": { "spago": "bin/bundle.js" } }, "sha512-R8/CCfR3jtbN3NFZOso+sBTKsaGDu96j8X55JA8CDx12GyB3f64wpwbIXKJ8Y+E4UMjYWhTB2vkP+kqf4R5Y5w=="],
@@ -590,6 +669,8 @@
590669
591670 "spdx-license-ids": ["spdx-license-ids@3.0.22", "", {}, "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ=="],
592671
672+ "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="],
673+
593674 "ssh2": ["ssh2@1.17.0", "", { "dependencies": { "asn1": "^0.2.6", "bcrypt-pbkdf": "^1.0.2" }, "optionalDependencies": { "cpu-features": "~0.0.10", "nan": "^2.23.0" } }, "sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ=="],
594675
595676 "ssri": ["ssri@6.0.2", "", { "dependencies": { "figgy-pudding": "^3.5.1" } }, "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q=="],
@@ -626,6 +707,8 @@
626707
627708 "tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="],
628709
710+ "thread-stream": ["thread-stream@4.0.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA=="],
711+
629712 "through2": ["through2@2.0.5", "", { "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ=="],
630713
631714 "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="],
@@ -646,6 +729,8 @@
646729
647730 "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
648731
732+ "toad-cache": ["toad-cache@3.7.0", "", {}, "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw=="],
733+
649734 "tough-cookie": ["tough-cookie@6.0.0", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w=="],
650735
651736 "tr46": ["tr46@6.0.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw=="],
@@ -738,6 +823,8 @@
738823
739824 "fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
740825
826+ "light-my-request/process-warning": ["process-warning@4.0.1", "", {}, "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q=="],
827+
741828 "make-fetch-happen/cacache": ["cacache@16.1.3", "", { "dependencies": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", "ssri": "^9.0.0", "tar": "^6.1.11", "unique-filename": "^2.0.0" } }, "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ=="],
742829
743830 "make-fetch-happen/http-proxy-agent": ["http-proxy-agent@5.0.0", "", { "dependencies": { "@tootallnate/once": "2", "agent-base": "6", "debug": "4" } }, "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w=="],
package.json+1
@@ -24,6 +24,7 @@
2424 "author": "",
2525 "license": "MIT",
2626 "devDependencies": {
27+ "fastify": "^5.7.4",
2728 "jsdom": "^28.0.0",
2829 "purescript": "^0.15.15",
2930 "spago": "0.93.42",
spago.lock+900−13
@@ -6,7 +6,7 @@
66 "core": {
77 "dependencies": [
88 {
9− "aff": ">=8.0.0 <9.0.0"
9+ "aff": ">=7.0.0 <9.0.0"
1010 },
1111 {
1212 "arrays": ">=7.3.0 <8.0.0"
@@ -63,7 +63,7 @@
6363 "yoga-json": ">=5.2.0 <6.0.0"
6464 },
6565 {
66− "yoga-om": ">=0.1.0 <0.2.0"
66+ "yoga-om": ">=1.2.2 <2.0.0"
6767 }
6868 ]
6969 },
@@ -73,13 +73,619 @@
7373 "console": ">=6.0.0 <7.0.0"
7474 },
7575 {
76− "vitest": ">=1.0.0 <2.0.0"
76+ "refs": ">=6.0.0 <7.0.0"
77+ },
78+ {
79+ "vitest": ">=1.0.0 <3.0.0"
80+ },
81+ {
82+ "yoga-fastify-om": ">=0.1.0 <0.2.0"
7783 }
7884 ]
7985 }
8086 }
8187 },
82− "extra_packages": {}
88+ "package_set": {
89+ "address": {
90+ "registry": "73.0.0"
91+ },
92+ "compiler": ">=0.15.15 <0.16.0",
93+ "content": {
94+ "abc-parser": "2.1.0",
95+ "ace": "9.1.0",
96+ "address-rfc2821": "0.1.1",
97+ "aff": "8.0.0",
98+ "aff-bus": "6.0.0",
99+ "aff-coroutines": "9.0.0",
100+ "aff-promise": "4.0.0",
101+ "aff-retry": "2.0.0",
102+ "affjax": "13.0.0",
103+ "affjax-node": "1.0.0",
104+ "affjax-web": "1.0.0",
105+ "ansi": "7.0.0",
106+ "apexcharts": "0.5.0",
107+ "applicative-phases": "1.0.0",
108+ "argonaut": "9.0.0",
109+ "argonaut-aeson-generic": "0.4.1",
110+ "argonaut-codecs": "9.1.0",
111+ "argonaut-core": "7.0.0",
112+ "argonaut-generic": "8.0.0",
113+ "argonaut-traversals": "10.0.0",
114+ "argparse-basic": "2.0.0",
115+ "array-builder": "0.1.2",
116+ "array-search": "0.6.0",
117+ "arraybuffer": "13.2.0",
118+ "arraybuffer-builder": "3.1.0",
119+ "arraybuffer-types": "3.0.2",
120+ "arrays": "7.3.0",
121+ "arrays-extra": "0.6.1",
122+ "arrays-zipper": "2.0.1",
123+ "ask": "1.0.0",
124+ "assert": "6.0.0",
125+ "assert-multiple": "0.4.0",
126+ "avar": "5.0.1",
127+ "axon": "0.0.3",
128+ "b64": "0.0.8",
129+ "barbies": "1.0.1",
130+ "barlow-lens": "0.9.0",
131+ "benchlib": "0.0.4",
132+ "bifunctors": "6.1.0",
133+ "bigints": "7.0.1",
134+ "blessed": "1.0.0",
135+ "bolson": "0.3.9",
136+ "bookhound": "0.1.7",
137+ "bower-json": "3.0.0",
138+ "call-by-name": "4.0.1",
139+ "canvas": "6.0.0",
140+ "canvas-action": "9.0.0",
141+ "cartesian": "1.0.6",
142+ "catenable-lists": "7.0.0",
143+ "cbor-stream": "1.3.0",
144+ "chameleon": "1.0.0",
145+ "chameleon-halogen": "1.0.3",
146+ "chameleon-react-basic": "1.1.0",
147+ "chameleon-styled": "2.5.0",
148+ "chameleon-transformers": "1.0.0",
149+ "channel": "1.0.0",
150+ "checked-exceptions": "3.1.1",
151+ "choku": "1.0.2",
152+ "classless": "0.1.1",
153+ "classless-arbitrary": "0.1.1",
154+ "classless-decode-json": "0.1.1",
155+ "classless-encode-json": "0.1.3",
156+ "classnames": "2.0.0",
157+ "codec": "6.1.0",
158+ "codec-argonaut": "10.0.0",
159+ "codec-json": "2.0.0",
160+ "colors": "7.0.1",
161+ "concur-core": "0.5.0",
162+ "concur-react": "0.5.0",
163+ "concurrent-queues": "3.0.0",
164+ "console": "6.1.0",
165+ "const": "6.0.0",
166+ "contravariant": "6.0.0",
167+ "control": "6.0.0",
168+ "convertable-options": "1.0.0",
169+ "coroutines": "7.0.0",
170+ "css": "6.0.0",
171+ "css-class-name-extractor": "0.0.4",
172+ "css-frameworks": "1.1.0",
173+ "csv-stream": "2.3.0",
174+ "data-mvc": "0.0.2",
175+ "datetime": "6.1.0",
176+ "datetime-parsing": "0.2.0",
177+ "debounce": "0.1.0",
178+ "debug": "6.0.2",
179+ "decimals": "7.1.0",
180+ "default-values": "1.0.1",
181+ "deku": "0.9.23",
182+ "deno": "0.0.5",
183+ "dissect": "1.0.0",
184+ "distributive": "6.0.0",
185+ "dodo-printer": "2.2.3",
186+ "dom-filereader": "7.0.0",
187+ "dom-indexed": "13.0.0",
188+ "dom-simple": "0.4.0",
189+ "dotenv": "4.0.3",
190+ "droplet": "0.6.0",
191+ "dts": "1.0.0",
192+ "dual-numbers": "1.0.3",
193+ "dynamic-buffer": "3.0.1",
194+ "echarts-simple": "0.0.1",
195+ "effect": "4.0.0",
196+ "either": "6.1.0",
197+ "elmish": "0.13.0",
198+ "elmish-enzyme": "0.1.1",
199+ "elmish-hooks": "0.11.0",
200+ "elmish-html": "0.10.0",
201+ "elmish-testing-library": "0.3.2",
202+ "elmish-time-machine": "0.4.2",
203+ "email-validate": "7.0.0",
204+ "encoding": "0.0.9",
205+ "enums": "6.0.1",
206+ "env-names": "0.4.0",
207+ "environment": "2.0.0",
208+ "error": "2.0.0",
209+ "eta-conversion": "0.3.2",
210+ "exceptions": "6.1.0",
211+ "exists": "6.0.0",
212+ "exitcodes": "4.0.0",
213+ "expect-inferred": "3.0.0",
214+ "express": "0.9.1",
215+ "ezfetch": "1.1.1",
216+ "fahrtwind": "2.0.0",
217+ "fakerjs": "0.0.1",
218+ "fallback": "0.1.0",
219+ "fast-vect": "1.2.0",
220+ "fetch": "4.1.0",
221+ "fetch-argonaut": "1.0.1",
222+ "fetch-core": "5.1.0",
223+ "fetch-yoga-json": "1.1.0",
224+ "ffi-simple": "0.5.1",
225+ "fft": "0.3.0",
226+ "fft-js": "0.1.0",
227+ "filterable": "5.0.0",
228+ "fix-functor": "0.1.0",
229+ "fixed-points": "7.0.0",
230+ "fixed-precision": "5.0.0",
231+ "flame": "1.6.0",
232+ "float32": "2.0.0",
233+ "fmt": "0.2.1",
234+ "foldable-traversable": "6.0.0",
235+ "foldable-traversable-extra": "0.0.6",
236+ "foreign": "7.0.0",
237+ "foreign-object": "4.1.0",
238+ "foreign-readwrite": "3.4.0",
239+ "forgetmenot": "0.1.0",
240+ "fork": "6.0.0",
241+ "form-urlencoded": "7.0.0",
242+ "formatters": "7.0.0",
243+ "framer-motion": "2.0.1",
244+ "free": "7.1.0",
245+ "freeap": "7.0.0",
246+ "freer-free": "0.0.1",
247+ "freet": "7.0.0",
248+ "functions": "6.0.0",
249+ "functor1": "3.0.0",
250+ "functors": "5.0.0",
251+ "fuzzy": "0.4.0",
252+ "gen": "4.0.0",
253+ "generate-values": "1.0.1",
254+ "generic-router": "0.0.1",
255+ "geojson": "0.0.5",
256+ "geometria": "2.2.0",
257+ "gesso": "1.0.1",
258+ "gojs": "0.1.1",
259+ "golem-fetch": "0.1.0",
260+ "grain": "3.0.0",
261+ "grain-router": "3.0.0",
262+ "grain-virtualized": "3.0.0",
263+ "graphql-client": "10.1.1",
264+ "graphs": "8.1.0",
265+ "group": "4.1.1",
266+ "halogen": "7.0.0",
267+ "halogen-bootstrap5": "5.3.2",
268+ "halogen-canvas": "1.0.0",
269+ "halogen-css": "10.0.0",
270+ "halogen-declarative-canvas": "0.0.8",
271+ "halogen-echarts-simple": "0.0.4",
272+ "halogen-formless": "4.0.3",
273+ "halogen-helix": "1.1.0",
274+ "halogen-hooks": "0.6.3",
275+ "halogen-hooks-extra": "0.9.0",
276+ "halogen-infinite-scroll": "1.1.0",
277+ "halogen-store": "0.5.4",
278+ "halogen-storybook": "2.0.0",
279+ "halogen-subscriptions": "2.0.0",
280+ "halogen-svg-elems": "8.0.0",
281+ "halogen-typewriter": "1.0.4",
282+ "halogen-use-trigger-hooks": "1.0.0",
283+ "halogen-vdom": "8.0.0",
284+ "halogen-vdom-string-renderer": "0.5.0",
285+ "halogen-xterm": "2.0.0",
286+ "heckin": "2.0.1",
287+ "heterogeneous": "0.7.0",
288+ "homogeneous": "0.4.0",
289+ "http-methods": "6.0.0",
290+ "httpurple": "4.0.0",
291+ "huffman": "0.4.0",
292+ "humdrum": "0.0.1",
293+ "hylograph-canvas": "0.1.0",
294+ "hylograph-d3-kernel": "0.1.0",
295+ "hylograph-graph": "0.1.0",
296+ "hylograph-layout": "0.1.0",
297+ "hylograph-music": "0.1.0",
298+ "hylograph-optics": "0.1.0",
299+ "hylograph-selection": "0.1.1",
300+ "hylograph-simulation": "0.1.0",
301+ "hylograph-simulation-core": "0.1.0",
302+ "hylograph-simulation-halogen": "0.1.0",
303+ "hylograph-transitions": "0.1.0",
304+ "hylograph-wasm-kernel": "0.1.0",
305+ "hyrule": "2.3.8",
306+ "identity": "6.0.0",
307+ "identy": "4.0.1",
308+ "indexed-db": "1.0.0",
309+ "indexed-monad": "3.0.0",
310+ "ink": "0.0.1",
311+ "int64": "3.0.0",
312+ "integers": "6.0.0",
313+ "interpolate": "5.0.2",
314+ "intersection-observer": "1.0.1",
315+ "invariant": "6.0.0",
316+ "jarilo": "1.0.1",
317+ "jelly": "0.10.0",
318+ "jelly-router": "0.3.0",
319+ "jelly-signal": "0.4.0",
320+ "jest": "1.0.0",
321+ "js-abort-controller": "1.0.0",
322+ "js-bigints": "2.2.1",
323+ "js-date": "8.0.0",
324+ "js-fetch": "0.2.1",
325+ "js-fileio": "3.0.0",
326+ "js-intl": "1.1.4",
327+ "js-iterators": "0.1.1",
328+ "js-maps": "0.1.2",
329+ "js-promise": "1.0.0",
330+ "js-promise-aff": "1.0.0",
331+ "js-timers": "6.1.0",
332+ "js-uri": "3.1.0",
333+ "jsdom": "1.0.0",
334+ "json": "1.1.0",
335+ "json-codecs": "5.0.0",
336+ "justifill": "0.5.0",
337+ "jwt": "0.0.9",
338+ "labeled-data": "0.2.0",
339+ "language-cst-parser": "0.14.1",
340+ "lazy": "6.0.0",
341+ "lazy-joe": "1.0.0",
342+ "lcg": "4.0.0",
343+ "leibniz": "5.0.0",
344+ "leveldb": "1.0.1",
345+ "liminal": "1.0.1",
346+ "linalg": "6.0.0",
347+ "lists": "7.0.0",
348+ "literals": "1.0.2",
349+ "logging": "3.0.0",
350+ "logging-journald": "0.4.0",
351+ "lumi-components": "18.0.0",
352+ "machines": "7.0.0",
353+ "maps-eager": "0.5.0",
354+ "marionette": "1.0.0",
355+ "marionette-react-basic-hooks": "0.1.1",
356+ "marked": "0.1.0",
357+ "matrices": "5.0.1",
358+ "matryoshka": "1.0.0",
359+ "maybe": "6.0.0",
360+ "media-types": "6.0.0",
361+ "meowclient": "1.0.0",
362+ "midi": "4.0.0",
363+ "milkis": "9.0.0",
364+ "mimetype": "0.0.1",
365+ "minibench": "4.0.1",
366+ "mmorph": "7.0.0",
367+ "monad-control": "5.0.0",
368+ "monad-logger": "1.3.1",
369+ "monad-loops": "0.5.0",
370+ "monad-unlift": "1.0.1",
371+ "monoid-extras": "0.0.1",
372+ "monoidal": "0.16.0",
373+ "morello": "0.4.0",
374+ "mote": "3.0.0",
375+ "motsunabe": "2.0.0",
376+ "mvc": "0.0.1",
377+ "mysql": "6.0.1",
378+ "n3": "0.1.0",
379+ "nano-id": "1.1.0",
380+ "nanoid": "0.1.0",
381+ "naturals": "3.0.0",
382+ "nested-functor": "0.2.1",
383+ "newtype": "5.0.0",
384+ "nextjs": "0.1.1",
385+ "nextui": "0.2.0",
386+ "node-buffer": "9.0.0",
387+ "node-child-process": "11.1.0",
388+ "node-event-emitter": "3.0.0",
389+ "node-execa": "5.0.0",
390+ "node-fs": "9.2.0",
391+ "node-glob-basic": "2.0.0",
392+ "node-http": "9.1.0",
393+ "node-http2": "1.1.1",
394+ "node-human-signals": "1.0.0",
395+ "node-net": "5.1.0",
396+ "node-os": "5.1.0",
397+ "node-path": "5.0.1",
398+ "node-process": "11.2.0",
399+ "node-readline": "8.1.1",
400+ "node-sqlite3": "8.0.0",
401+ "node-stream-pipes": "2.1.6",
402+ "node-streams": "9.0.1",
403+ "node-tls": "0.3.1",
404+ "node-url": "7.0.1",
405+ "node-workerbees": "0.3.1",
406+ "node-zlib": "0.4.0",
407+ "nonempty": "7.0.0",
408+ "now": "6.0.0",
409+ "npm-package-json": "2.0.0",
410+ "nullable": "6.0.0",
411+ "numberfield": "0.2.2",
412+ "numbers": "9.0.1",
413+ "oak": "3.1.1",
414+ "oak-debug": "1.2.2",
415+ "object-maps": "0.3.0",
416+ "ocarina": "1.5.4",
417+ "oooooooooorrrrrrrmm-lib": "0.0.1",
418+ "open-colors-scales-and-schemes": "1.0.0",
419+ "open-drawing": "6.0.4",
420+ "open-folds": "6.4.0",
421+ "open-foreign-generic": "11.0.3",
422+ "open-memoize": "6.2.0",
423+ "open-mkdirp-aff": "1.2.0",
424+ "open-pairing": "6.2.0",
425+ "open-smolder": "12.0.2",
426+ "options": "7.0.0",
427+ "optparse": "5.0.1",
428+ "ordered-collections": "3.2.0",
429+ "ordered-set": "0.4.0",
430+ "orders": "6.0.0",
431+ "org-doc": "0.1.0",
432+ "owoify": "1.2.0",
433+ "pairs": "9.0.1",
434+ "parallel": "7.0.0",
435+ "parsing": "11.0.0",
436+ "parsing-dataview": "3.2.4",
437+ "partial": "4.0.0",
438+ "pathy": "9.0.0",
439+ "pha": "0.13.0",
440+ "phaser": "0.7.0",
441+ "phylio": "1.1.2",
442+ "pipes": "8.0.0",
443+ "pirates-charm": "0.0.1",
444+ "play": "1.0.0",
445+ "pmock": "0.9.0",
446+ "point-free": "1.0.0",
447+ "pointed-list": "0.5.1",
448+ "polymorphic-vectors": "4.0.0",
449+ "posix-types": "6.0.0",
450+ "postgresql": "2.0.21",
451+ "precise": "6.0.0",
452+ "precise-datetime": "7.0.0",
453+ "prelude": "6.0.2",
454+ "prettier-printer": "3.0.0",
455+ "printf": "0.1.0",
456+ "priority-queue": "0.1.2",
457+ "profunctor": "6.0.1",
458+ "profunctor-lenses": "8.0.0",
459+ "protobuf": "4.4.0",
460+ "psa-utils": "8.0.0",
461+ "psci-support": "6.0.0",
462+ "punycode": "1.0.0",
463+ "pursfmt": "0.17.0",
464+ "qualified-do": "2.2.0",
465+ "quantities": "12.2.0",
466+ "quickcheck": "8.0.1",
467+ "quickcheck-combinators": "0.1.3",
468+ "quickcheck-laws": "7.0.0",
469+ "quickcheck-utf8": "0.0.0",
470+ "random": "6.0.0",
471+ "rationals": "6.0.0",
472+ "rdf": "0.1.0",
473+ "react": "11.0.0",
474+ "react-aria": "0.2.0",
475+ "react-basic": "17.0.0",
476+ "react-basic-classic": "3.0.0",
477+ "react-basic-dnd": "10.1.0",
478+ "react-basic-dom": "7.0.0",
479+ "react-basic-dom-beta": "0.1.1",
480+ "react-basic-emotion": "7.1.0",
481+ "react-basic-hooks": "9.0.0",
482+ "react-basic-storybook": "2.0.0",
483+ "react-dom": "8.0.0",
484+ "react-halo": "3.0.0",
485+ "react-icons": "1.1.5",
486+ "react-markdown": "0.1.0",
487+ "react-testing-library": "4.0.1",
488+ "react-virtuoso": "1.0.0",
489+ "reactix": "0.6.1",
490+ "read": "1.0.1",
491+ "recharts": "1.1.0",
492+ "record": "4.0.0",
493+ "record-extra": "5.0.1",
494+ "record-extra-srghma": "0.2.8",
495+ "record-ptional-fields": "0.1.2",
496+ "record-studio": "1.0.4",
497+ "refs": "6.0.0",
498+ "remotedata": "5.0.1",
499+ "repr": "0.5.0",
500+ "resize-arrays": "0.0.1",
501+ "resize-observer": "1.0.0",
502+ "resource": "2.0.1",
503+ "resourcet": "1.0.0",
504+ "result": "1.0.3",
505+ "return": "0.2.0",
506+ "ring-modules": "5.0.1",
507+ "rito": "0.3.4",
508+ "roman": "0.4.0",
509+ "rough-notation": "1.0.2",
510+ "routing": "11.0.0",
511+ "routing-duplex": "0.7.0",
512+ "run": "5.0.0",
513+ "safe-coerce": "2.0.0",
514+ "safely": "4.0.1",
515+ "school-of-music": "1.3.0",
516+ "selection-foldable": "0.2.0",
517+ "selective-functors": "1.0.1",
518+ "semirings": "7.0.0",
519+ "shuffle": "2.0.0",
520+ "signal": "13.0.0",
521+ "simple-emitter": "3.0.1",
522+ "simple-i18n": "2.0.1",
523+ "simple-json": "9.0.0",
524+ "simple-json-generics": "0.2.1",
525+ "simple-ulid": "3.0.0",
526+ "sized-matrices": "1.0.0",
527+ "sized-vectors": "5.0.2",
528+ "slug": "3.2.0",
529+ "small-ffi": "4.0.1",
530+ "soundfonts": "4.1.0",
531+ "sparse-matrices": "2.0.1",
532+ "sparse-polynomials": "3.0.1",
533+ "spec": "8.1.1",
534+ "spec-discovery": "8.4.0",
535+ "spec-mocha": "5.1.1",
536+ "spec-node": "0.0.3",
537+ "spec-quickcheck": "5.0.2",
538+ "spec-reporter-xunit": "0.7.1",
539+ "splitmix": "2.1.0",
540+ "ssrs": "1.0.0",
541+ "st": "6.2.0",
542+ "statistics": "0.3.2",
543+ "strictlypositiveint": "1.0.1",
544+ "string-parsers": "8.0.0",
545+ "strings": "6.0.1",
546+ "strings-extra": "4.0.0",
547+ "stringutils": "0.0.12",
548+ "structured-logging": "1.0.0",
549+ "substitute": "0.2.3",
550+ "supply": "0.2.0",
551+ "svg-parser": "3.0.0",
552+ "systemd-journald": "0.3.0",
553+ "tagged": "4.0.2",
554+ "tailrec": "6.1.0",
555+ "tanstack-query": "2.0.0",
556+ "tecton": "0.2.1",
557+ "tecton-halogen": "0.2.0",
558+ "test-unit": "17.0.0",
559+ "text-formatting": "0.1.0",
560+ "thermite": "6.3.1",
561+ "thermite-dom": "0.3.1",
562+ "these": "6.0.0",
563+ "threading": "0.0.3",
564+ "tidy": "0.11.1",
565+ "tidy-codegen": "4.0.1",
566+ "tldr": "0.0.0",
567+ "toestand": "0.9.0",
568+ "transformation-matrix": "1.0.1",
569+ "transformers": "6.1.0",
570+ "transit": "1.0.0",
571+ "tree-rose": "4.0.2",
572+ "trivial-unfold": "0.5.0",
573+ "ts-bridge": "4.0.0",
574+ "tuples": "7.0.0",
575+ "two-or-more": "1.0.0",
576+ "type-equality": "4.0.1",
577+ "typedenv": "2.0.1",
578+ "typelevel": "6.0.0",
579+ "typelevel-lists": "2.1.0",
580+ "typelevel-peano": "1.0.1",
581+ "typelevel-prelude": "7.0.0",
582+ "typelevel-regex": "0.0.3",
583+ "typelevel-rows": "0.1.0",
584+ "typisch": "0.4.0",
585+ "uint": "7.0.0",
586+ "ulid": "3.0.1",
587+ "uncurried-transformers": "1.1.0",
588+ "undefined": "2.0.0",
589+ "undefined-is-not-a-problem": "1.1.0",
590+ "unfoldable": "6.0.0",
591+ "unicode": "6.0.0",
592+ "unique": "0.6.1",
593+ "unlift": "1.0.1",
594+ "unordered-collections": "3.1.0",
595+ "unsafe-coerce": "6.0.0",
596+ "unsafe-reference": "5.0.0",
597+ "untagged-to-tagged": "0.1.4",
598+ "untagged-union": "1.0.0",
599+ "uri": "9.0.0",
600+ "url-immutable": "1.0.0",
601+ "url-regex-safe": "0.1.1",
602+ "uuid": "9.0.0",
603+ "uuidv4": "1.0.0",
604+ "validation": "6.0.0",
605+ "variant": "8.0.0",
606+ "variant-encodings": "2.0.0",
607+ "variant-gen": "1.0.0",
608+ "vectorfield": "1.0.1",
609+ "vectors": "2.1.0",
610+ "versions": "7.0.0",
611+ "visx": "0.0.2",
612+ "vitest": "2.0.0",
613+ "web-clipboard": "6.0.0",
614+ "web-cssom": "2.0.0",
615+ "web-cssom-view": "0.1.0",
616+ "web-dom": "6.0.0",
617+ "web-dom-parser": "8.0.0",
618+ "web-dom-xpath": "3.0.0",
619+ "web-encoding": "3.0.0",
620+ "web-events": "4.0.0",
621+ "web-fetch": "4.0.1",
622+ "web-file": "4.0.0",
623+ "web-geometry": "0.1.0",
624+ "web-html": "4.1.1",
625+ "web-pointerevents": "2.0.0",
626+ "web-proletarian": "1.0.0",
627+ "web-promise": "3.2.0",
628+ "web-resize-observer": "2.1.0",
629+ "web-router": "1.0.0",
630+ "web-socket": "4.0.0",
631+ "web-storage": "5.0.0",
632+ "web-streams": "4.0.0",
633+ "web-touchevents": "4.0.0",
634+ "web-uievents": "5.0.0",
635+ "web-url": "2.0.0",
636+ "web-workers": "1.1.0",
637+ "web-xhr": "5.0.1",
638+ "webb-aff-list": "0.0.2",
639+ "webb-array": "0.0.2",
640+ "webb-channel": "0.0.3",
641+ "webb-commandline": "0.0.3",
642+ "webb-directory": "0.0.7",
643+ "webb-file": "0.0.1",
644+ "webb-map": "0.0.1",
645+ "webb-monad": "0.0.2",
646+ "webb-mutex": "0.0.7",
647+ "webb-parsing": "0.0.5",
648+ "webb-random": "0.0.1",
649+ "webb-refer": "0.0.3",
650+ "webb-set": "0.0.1",
651+ "webb-slot": "0.0.1",
652+ "webb-stateful": "0.0.3",
653+ "webb-string": "0.0.1",
654+ "webb-test": "0.0.1",
655+ "webb-thread": "0.0.2",
656+ "webb-writer": "0.0.3",
657+ "webextension-polyfill": "0.1.0",
658+ "webgpu": "0.0.1",
659+ "which": "2.0.0",
660+ "whine-core": "0.0.33",
661+ "xterm": "1.0.0",
662+ "yaml-next": "3.1.1",
663+ "yoga-fetch": "1.0.1",
664+ "yoga-json": "5.1.0",
665+ "yoga-om": "0.1.0",
666+ "yoga-postgres": "6.0.0",
667+ "yoga-react-dom": "1.0.1",
668+ "yoga-redis": "0.1.0",
669+ "yoga-sql-types": "0.1.0",
670+ "yoga-subtlecrypto": "0.1.0",
671+ "yoga-test-docker": "0.1.0",
672+ "yoga-tree": "1.0.0",
673+ "yoga-tree-svg": "0.1.0",
674+ "yoga-tree-utils": "1.0.0",
675+ "z3": "0.0.2",
676+ "zipperarray": "2.0.0"
677+ }
678+ },
679+ "extra_packages": {
680+ "yoga-fastify": "0.2.3",
681+ "yoga-fastify-om": "0.1.0",
682+ "yoga-http-api": "0.1.4",
683+ "yoga-json": "5.2.0",
684+ "yoga-om": "1.2.2",
685+ "yoga-om-layer": "1.0.6",
686+ "yoga-om-strom": "0.2.0",
687+ "yoga-options": "0.1.0"
688+ }
83689 },
84690 "packages": {
85691 "aff": {
@@ -103,6 +709,16 @@
103709 "unsafe-coerce"
104710 ]
105711 },
712+ "ansi": {
713+ "type": "registry",
714+ "version": "7.0.0",
715+ "integrity": "sha256-tOUaXJFzPSfBVAqLI8hc+Tz2M1rg16cXqyHaK/3SmFg=",
716+ "dependencies": [
717+ "foldable-traversable",
718+ "lists",
719+ "prelude"
720+ ]
721+ },
106722 "arraybuffer-types": {
107723 "type": "registry",
108724 "version": "3.0.2",
@@ -354,6 +970,16 @@
354970 "unsafe-coerce"
355971 ]
356972 },
973+ "fork": {
974+ "type": "registry",
975+ "version": "6.0.0",
976+ "integrity": "sha256-0keBVeZZg1eCZEy/En1CohVW829gQUqKtqBNIRa93/A=",
977+ "dependencies": [
978+ "aff",
979+ "prelude",
980+ "transformers"
981+ ]
982+ },
357983 "free": {
358984 "type": "registry",
359985 "version": "7.1.0",
@@ -555,6 +1181,16 @@
5551181 "transformers"
5561182 ]
5571183 },
1184+ "js-uri": {
1185+ "type": "registry",
1186+ "version": "3.1.0",
1187+ "integrity": "sha256-7waHOctAfqhhw540FNJ7C/YsDMQW9TmA+SpHhduH6Uw=",
1188+ "dependencies": [
1189+ "functions",
1190+ "maybe",
1191+ "prelude"
1192+ ]
1193+ },
5581194 "lazy": {
5591195 "type": "registry",
5601196 "version": "6.0.0",
@@ -619,6 +1255,23 @@
6191255 "prelude"
6201256 ]
6211257 },
1258+ "mmorph": {
1259+ "type": "registry",
1260+ "version": "7.0.0",
1261+ "integrity": "sha256-Cfltaq+tfYjuSoSBN/b8cSQZbvZTqIRs6ebQewbIkGs=",
1262+ "dependencies": [
1263+ "bifunctors",
1264+ "either",
1265+ "free",
1266+ "functors",
1267+ "identity",
1268+ "maybe",
1269+ "newtype",
1270+ "prelude",
1271+ "transformers",
1272+ "tuples"
1273+ ]
1274+ },
6221275 "newtype": {
6231276 "type": "registry",
6241277 "version": "5.0.0",
@@ -628,6 +1281,22 @@
6281281 "safe-coerce"
6291282 ]
6301283 },
1284+ "node-buffer": {
1285+ "type": "registry",
1286+ "version": "9.0.0",
1287+ "integrity": "sha256-RdQjilmEHqsT4fwpCr8Mavw8KTafYrS3ZM6zeAAVAl8=",
1288+ "dependencies": [
1289+ "arraybuffer-types",
1290+ "effect",
1291+ "functions",
1292+ "maybe",
1293+ "nullable",
1294+ "partial",
1295+ "prelude",
1296+ "st",
1297+ "unsafe-coerce"
1298+ ]
1299+ },
6311300 "nonempty": {
6321301 "type": "registry",
6331302 "version": "7.0.0",
@@ -641,6 +1310,16 @@
6411310 "unfoldable"
6421311 ]
6431312 },
1313+ "now": {
1314+ "type": "registry",
1315+ "version": "6.0.0",
1316+ "integrity": "sha256-mTyG4s8tps3XIf0jjV/lME2/QlwMzrQly2wqfSSUM3o=",
1317+ "dependencies": [
1318+ "datetime",
1319+ "effect",
1320+ "prelude"
1321+ ]
1322+ },
6441323 "nullable": {
6451324 "type": "registry",
6461325 "version": "6.0.0",
@@ -715,6 +1394,27 @@
7151394 "integrity": "sha256-mdrlJBAgFMh79hNRW39uv7c+BwnnaOrAMmdh7+VhEhs=",
7161395 "dependencies": []
7171396 },
1397+ "pipes": {
1398+ "type": "registry",
1399+ "version": "8.0.0",
1400+ "integrity": "sha256-dtUNpG8BGVr7pu6mQZyAnUAftUHgNS7f0QH3Kw5UTpQ=",
1401+ "dependencies": [
1402+ "aff",
1403+ "control",
1404+ "effect",
1405+ "either",
1406+ "foldable-traversable",
1407+ "identity",
1408+ "lists",
1409+ "maybe",
1410+ "mmorph",
1411+ "newtype",
1412+ "prelude",
1413+ "tailrec",
1414+ "transformers",
1415+ "tuples"
1416+ ]
1417+ },
7181418 "prelude": {
7191419 "type": "registry",
7201420 "version": "6.0.2",
@@ -768,6 +1468,27 @@
7681468 "prelude"
7691469 ]
7701470 },
1471+ "routing-duplex": {
1472+ "type": "registry",
1473+ "version": "0.7.0",
1474+ "integrity": "sha256-rQw9yC01qE/LS134zucIhLD6GFcVUzHX5HyzwosdGXM=",
1475+ "dependencies": [
1476+ "arrays",
1477+ "control",
1478+ "either",
1479+ "foldable-traversable",
1480+ "integers",
1481+ "js-uri",
1482+ "lazy",
1483+ "maybe",
1484+ "newtype",
1485+ "prelude",
1486+ "profunctor",
1487+ "record",
1488+ "strings",
1489+ "tuples"
1490+ ]
1491+ },
7711492 "safe-coerce": {
7721493 "type": "registry",
7731494 "version": "2.0.0",
@@ -776,6 +1497,40 @@
7761497 "unsafe-coerce"
7771498 ]
7781499 },
1500+ "spec": {
1501+ "type": "registry",
1502+ "version": "8.1.1",
1503+ "integrity": "sha256-b6qjDb7lUJGLV+WEoywLu6BCXC4zGpfbN43mTL+vBeI=",
1504+ "dependencies": [
1505+ "aff",
1506+ "ansi",
1507+ "arrays",
1508+ "avar",
1509+ "bifunctors",
1510+ "control",
1511+ "datetime",
1512+ "effect",
1513+ "either",
1514+ "exceptions",
1515+ "foldable-traversable",
1516+ "fork",
1517+ "identity",
1518+ "integers",
1519+ "lists",
1520+ "maybe",
1521+ "newtype",
1522+ "now",
1523+ "ordered-collections",
1524+ "parallel",
1525+ "pipes",
1526+ "prelude",
1527+ "refs",
1528+ "strings",
1529+ "tailrec",
1530+ "transformers",
1531+ "tuples"
1532+ ]
1533+ },
7791534 "st": {
7801535 "type": "registry",
7811536 "version": "6.2.0",
@@ -890,6 +1645,22 @@
8901645 "tuples"
8911646 ]
8921647 },
1648+ "undefined-is-not-a-problem": {
1649+ "type": "registry",
1650+ "version": "1.1.0",
1651+ "integrity": "sha256-0YkVzpcKi40T43go7/f8uLVIYgir6lGzOytL6LPfiog=",
1652+ "dependencies": [
1653+ "effect",
1654+ "either",
1655+ "foreign",
1656+ "maybe",
1657+ "newtype",
1658+ "prelude",
1659+ "tuples",
1660+ "type-equality",
1661+ "unsafe-coerce"
1662+ ]
1663+ },
8931664 "unfoldable": {
8941665 "type": "registry",
8951666 "version": "6.0.0",
@@ -942,11 +1713,12 @@
9421713 },
9431714 "vitest": {
9441715 "type": "registry",
945− "version": "1.0.0",
946− "integrity": "sha256-grMOE1y+Ld5u8NZQ5OL32Rk+MzYt0DQI3Wi4L8b9hm8=",
1716+ "version": "2.0.0",
1717+ "integrity": "sha256-GkH1eyMaDyDUSC7kRSJrrD6k397m/SKQcKauVRmZzRI=",
9471718 "dependencies": [
9481719 "aff",
9491720 "effect",
1721+ "either",
9501722 "exceptions",
9511723 "js-promise",
9521724 "js-promise-aff",
@@ -1063,10 +1835,68 @@
10631835 "tuples"
10641836 ]
10651837 },
1066− "yoga-http-api": {
1838+ "yoga-fastify": {
1839+ "type": "registry",
1840+ "version": "0.2.3",
1841+ "integrity": "sha256-150ocqfhYCc38HeChWbJXie0wn2bjKpORkZFQCRxICo=",
1842+ "dependencies": [
1843+ "aff",
1844+ "arrays",
1845+ "bifunctors",
1846+ "effect",
1847+ "either",
1848+ "foldable-traversable",
1849+ "foreign",
1850+ "foreign-object",
1851+ "js-promise",
1852+ "js-promise-aff",
1853+ "maybe",
1854+ "newtype",
1855+ "nullable",
1856+ "prelude",
1857+ "record",
1858+ "strings",
1859+ "unsafe-coerce",
1860+ "variant",
1861+ "yoga-http-api",
1862+ "yoga-json"
1863+ ]
1864+ },
1865+ "yoga-fastify-om": {
10671866 "type": "registry",
10681867 "version": "0.1.0",
1069− "integrity": "sha256-Afkd2lCW98V0hAj68sGJwCsqHI5FgYI+IeNBa7mENWY=",
1868+ "integrity": "sha256-cgkNDv2BP29DRpw/kY2p7vXhVUofDBZ7lkm1LHsE1Kg=",
1869+ "dependencies": [
1870+ "aff",
1871+ "console",
1872+ "effect",
1873+ "either",
1874+ "exceptions",
1875+ "foldable-traversable",
1876+ "foreign",
1877+ "foreign-object",
1878+ "integers",
1879+ "maybe",
1880+ "node-buffer",
1881+ "prelude",
1882+ "record",
1883+ "refs",
1884+ "routing-duplex",
1885+ "transformers",
1886+ "unsafe-coerce",
1887+ "variant",
1888+ "yoga-fastify",
1889+ "yoga-http-api",
1890+ "yoga-json",
1891+ "yoga-om",
1892+ "yoga-om-layer",
1893+ "yoga-om-strom"
1894+ ]
1895+ },
1896+ "yoga-http-api": {
1897+ "type": "registry",
1898+ "version": "0.1.4",
1899+ "integrity": "sha256-kFnDMt0KGsi+84RKgmLQEr9HB+XHOgCeLMsFatCeCiY=",
10701900 "dependencies": [
10711901 "aff",
10721902 "arrays",
@@ -1076,17 +1906,17 @@
10761906 "foreign-object",
10771907 "identity",
10781908 "integers",
1079− "literals",
10801909 "maybe",
10811910 "newtype",
10821911 "prelude",
10831912 "record",
10841913 "strings",
10851914 "tuples",
1915+ "undefined-is-not-a-problem",
10861916 "unsafe-coerce",
1087− "untagged-union",
10881917 "variant",
1089− "yoga-json"
1918+ "yoga-json",
1919+ "yoga-options"
10901920 ]
10911921 },
10921922 "yoga-json": {
@@ -1130,8 +1960,8 @@
11301960 },
11311961 "yoga-om": {
11321962 "type": "registry",
1133− "version": "0.1.0",
1134− "integrity": "sha256-0EGWo/UOVLzZ14DPtdv0C+bTvNO49wNgtTBIXI6QHqU=",
1963+ "version": "1.2.2",
1964+ "integrity": "sha256-uDV3/o8mUOTIgSEQFqIATPyladzL8BcjURvfS901hgI=",
11351965 "dependencies": [
11361966 "aff",
11371967 "avar",
@@ -1157,6 +1987,63 @@
11571987 "variant"
11581988 ]
11591989 },
1990+ "yoga-om-layer": {
1991+ "type": "registry",
1992+ "version": "1.0.6",
1993+ "integrity": "sha256-RrCaTvkiMwCFarWKbu0Dkq+yFz4hDM7x18gZok2OxV4=",
1994+ "dependencies": [
1995+ "aff",
1996+ "newtype",
1997+ "prelude",
1998+ "record",
1999+ "record-studio",
2000+ "type-equality",
2001+ "unsafe-coerce",
2002+ "yoga-om"
2003+ ]
2004+ },
2005+ "yoga-om-strom": {
2006+ "type": "registry",
2007+ "version": "0.2.0",
2008+ "integrity": "sha256-WMrhLQ71RFObD4Vv/X5qef+uIkJ4zgCv/K8l986g1wE=",
2009+ "dependencies": [
2010+ "aff",
2011+ "arrays",
2012+ "avar",
2013+ "catenable-lists",
2014+ "console",
2015+ "control",
2016+ "datetime",
2017+ "effect",
2018+ "either",
2019+ "exceptions",
2020+ "foldable-traversable",
2021+ "integers",
2022+ "lists",
2023+ "maybe",
2024+ "now",
2025+ "prelude",
2026+ "refs",
2027+ "spec",
2028+ "st",
2029+ "tailrec",
2030+ "transformers",
2031+ "tuples",
2032+ "variant",
2033+ "yoga-om"
2034+ ]
2035+ },
2036+ "yoga-options": {
2037+ "type": "registry",
2038+ "version": "0.1.0",
2039+ "integrity": "sha256-8u9uwmxqwNX7bmA7U+hQ60ZnZxLzvlyYTVNXSIWeXv4=",
2040+ "dependencies": [
2041+ "identity",
2042+ "literals",
2043+ "unsafe-coerce",
2044+ "untagged-union"
2045+ ]
2046+ },
11602047 "yoga-tree": {
11612048 "type": "registry",
11622049 "version": "1.0.0",
spago.yaml+17−4
@@ -1,4 +1,15 @@
1−workspace: {}
1+workspace:
2+ packageSet:
3+ registry: 73.0.0
4+ extraPackages:
5+ yoga-fastify-om: "0.1.0"
6+ yoga-fastify: "0.2.3"
7+ yoga-http-api: "0.1.4"
8+ yoga-om: "1.2.2"
9+ yoga-om-layer: "1.0.6"
10+ yoga-om-strom: "0.2.0"
11+ yoga-options: "0.1.0"
12+ yoga-json: "5.2.0"
213
314package:
415 name: yoga-fetch-om
@@ -15,7 +26,7 @@ package:
1526 exclude:
1627 - .github
1728 dependencies:
18− - aff: ">=8.0.0 <9.0.0"
29+ - aff: ">=7.0.0 <9.0.0"
1930 - arrays: ">=7.3.0 <8.0.0"
2031 - effect: ">=4.0.0 <5.0.0"
2132 - either: ">=6.1.0 <7.0.0"
@@ -34,9 +45,11 @@ package:
3445 - variant: ">=8.0.0 <9.0.0"
3546 - yoga-http-api: ">=0.1.0 <0.2.0"
3647 - yoga-json: ">=5.2.0 <6.0.0"
37− - yoga-om: ">=0.1.0 <0.2.0"
48+ - yoga-om: ">=1.2.2 <2.0.0"
3849 test:
3950 main: Test.Main
4051 dependencies:
41− - vitest: ">=1.0.0 <2.0.0"
52+ - vitest: ">=1.0.0 <3.0.0"
4253 - console: ">=6.0.0 <7.0.0"
54+ - yoga-fastify-om: ">=0.1.0 <0.2.0"
55+ - refs: ">=6.0.0 <7.0.0"
test/TestServer.pursnew file+38
@@ -0,0 +1,38 @@
1+module TestServer where
2+
3+import Prelude
4+
5+import Data.Int as Int
6+import Data.Maybe (fromMaybe)
7+import Effect (Effect)
8+import Effect.Aff.Class (liftAff)
9+import Effect.Class (liftEffect)
10+import Foreign (unsafeToForeign)
11+import Foreign.Object as FObject
12+import Promise (Promise)
13+import Promise.Aff (fromAff)
14+import Yoga.Fastify.Fastify as F
15+import Yoga.Fastify.Fastify (Fastify, Port(..), Host(..), RouteURL(..), StatusCode(..))
16+import Yoga.Fastify.Om (createOmFastify, getOm, requestParams)
17+
18+mkServer :: Effect Fastify
19+mkServer = do
20+ fastify <- F.fastify {}
21+ omApp <- createOmFastify {} fastify
22+ getOm (RouteURL "/users/:id") handleGetUser omApp
23+ pure fastify
24+ where
25+ handleGetUser reply = do
26+ params <- requestParams
27+ let idStr = fromMaybe "0" (FObject.lookup "id" params)
28+ let id = fromMaybe 0 (Int.fromString idStr)
29+ let body = unsafeToForeign { id, name: "User " <> idStr }
30+ void $ F.status (StatusCode 200) reply # liftEffect
31+ void $ F.header "content-type" "application/json" reply # liftEffect
32+ F.sendJson body reply # liftAff
33+
34+listenServer :: Fastify -> Effect (Promise String)
35+listenServer fastify = fromAff $ F.listen { port: Port 44931, host: Host "0.0.0.0" } fastify
36+
37+closeServer :: Fastify -> Effect (Promise Unit)
38+closeServer fastify = fromAff $ F.close fastify
test/setup.js+10−3
@@ -1,9 +1,16 @@
1−import { listen, close } from "./test-server.js";
1+import {
2+ mkServer,
3+ listenServer,
4+ closeServer,
5+} from "../output/TestServer/index.js";
6+
7+let fastify;
28
39export async function setup() {
4− await listen();
10+ fastify = mkServer();
11+ await listenServer(fastify)();
512}
613
714export async function teardown() {
8− await close();
15+ await closeServer(fastify)();
916}
test/test-server.jsdeleted−27
@@ -1,27 +0,0 @@
1−import { createServer } from "node:http";
2−
3−const server = createServer((req, res) => {
4− const url = new URL(req.url, "http://localhost:44931");
5− const match = url.pathname.match(/^\/users\/(\d+)$/);
6− if (match && req.method === "GET") {
7− res.writeHead(200, { "Content-Type": "application/json" });
8− res.end(
9− JSON.stringify({ id: parseInt(match[1]), name: "User " + match[1] }),
10− );
11− return;
12− }
13− res.writeHead(404);
14− res.end("Not Found");
15−});
16−
17−export function listen() {
18− return new Promise((resolve) => {
19− server.listen(44931, () => resolve());
20− });
21−}
22−
23−export function close() {
24− return new Promise((resolve) => {
25− server.close(() => resolve());
26− });
27−}