diff --git a/CHANGES.md b/CHANGES.md index 3eb6417bd..8c7a61ada 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -126,6 +126,12 @@ To be released. `-t`/`--traverse` option, allowing users to traverse multiple collections in a single command. [[#408], [#449] by Jiwon Kwon] + - Added `fedify test-init` command to test `fedify init` command. This + command create test server with various combinations of options and test + the server using `fedify lookup` command. This command is for + contributors who make integration with various frameworks. [[#461] by + Chanhaeng Lee] + [#374]: https://github.com/fedify-dev/fedify/issues/374 [#397]: https://github.com/fedify-dev/fedify/issues/397 [#408]: https://github.com/fedify-dev/fedify/issues/408 @@ -134,6 +140,7 @@ To be released. [#456]: https://github.com/fedify-dev/fedify/issues/456 [#457]: https://github.com/fedify-dev/fedify/pull/457 [#458]: https://github.com/fedify-dev/fedify/pull/458 +[#461]: https://github.com/fedify-dev/fedify/issues/461 ### @fedify/relay diff --git a/deno.lock b/deno.lock index 3f74f2ef3..bf56ca83c 100644 --- a/deno.lock +++ b/deno.lock @@ -8,17 +8,18 @@ "jsr:@david/which@~0.4.1": "0.4.1", "jsr:@es-toolkit/es-toolkit@^1.39.5": "1.39.10", "jsr:@hongminhee/localtunnel@0.3": "0.3.0", - "jsr:@hono/hono@^4.7.1": "4.9.10", - "jsr:@hono/hono@^4.8.3": "4.9.10", - "jsr:@logtape/file@^1.1.1": "1.1.1", - "jsr:@logtape/logtape@^1.0.4": "1.1.1", - "jsr:@logtape/logtape@^1.1.1": "1.1.1", + "jsr:@hono/hono@^4.7.1": "4.10.2", + "jsr:@hono/hono@^4.8.3": "4.10.2", + "jsr:@logtape/file@^1.1.1": "1.1.2", + "jsr:@logtape/logtape@^1.0.4": "1.1.2", + "jsr:@logtape/logtape@^1.1.1": "1.1.2", + "jsr:@logtape/logtape@^1.1.2": "1.1.2", "jsr:@optique/core@~0.6.1": "0.6.1", "jsr:@optique/run@~0.6.1": "0.6.1", "jsr:@std/assert@0.224": "0.224.0", "jsr:@std/assert@0.226": "0.226.0", - "jsr:@std/assert@^1.0.13": "1.0.15", - "jsr:@std/async@^1.0.13": "1.0.14", + "jsr:@std/assert@^1.0.13": "1.0.14", + "jsr:@std/async@^1.0.13": "1.0.13", "jsr:@std/bytes@^1.0.5": "1.0.6", "jsr:@std/fmt@0.224": "0.224.0", "jsr:@std/fmt@1": "1.0.8", @@ -26,38 +27,37 @@ "jsr:@std/fs@1": "1.0.19", "jsr:@std/fs@^1.0.3": "1.0.19", "jsr:@std/internal@0.224": "0.224.0", - "jsr:@std/internal@1": "1.0.12", - "jsr:@std/internal@^1.0.10": "1.0.12", - "jsr:@std/internal@^1.0.12": "1.0.12", - "jsr:@std/internal@^1.0.9": "1.0.12", + "jsr:@std/internal@1": "1.0.10", + "jsr:@std/internal@^1.0.10": "1.0.10", + "jsr:@std/internal@^1.0.9": "1.0.10", "jsr:@std/io@0.225": "0.225.2", "jsr:@std/path@0.224": "0.224.0", "jsr:@std/path@1": "1.1.2", "jsr:@std/path@^1.0.6": "1.1.2", "jsr:@std/path@^1.1.1": "1.1.2", "jsr:@std/testing@0.224": "0.224.0", - "jsr:@std/yaml@^1.0.8": "1.0.9", + "jsr:@std/yaml@^1.0.8": "1.0.8", "npm:@alinea/suite@~0.6.3": "0.6.3", "npm:@cfworker/json-schema@^4.1.1": "4.1.1", - "npm:@cloudflare/workers-types@^4.20250529.0": "4.20251011.0", - "npm:@fxts/core@^1.15.0": "1.20.0", + "npm:@cloudflare/workers-types@^4.20250529.0": "4.20251014.0", + "npm:@fxts/core@^1.15.0": "1.19.0", "npm:@hongminhee/localtunnel@0.3": "0.3.0", - "npm:@inquirer/prompts@^7.8.4": "7.10.1_@types+node@22.19.1", + "npm:@inquirer/prompts@^7.8.4": "7.9.0_@types+node@22.19.0", "npm:@jimp/core@^1.6.0": "1.6.0", "npm:@jimp/wasm-webp@^1.6.0": "1.6.0", "npm:@js-temporal/polyfill@~0.5.1": "0.5.1", "npm:@multiformats/base-x@^4.0.1": "4.0.1", - "npm:@nestjs/common@^11.0.1": "11.1.6_reflect-metadata@0.2.2_rxjs@7.8.2", + "npm:@nestjs/common@^11.0.1": "11.1.8_reflect-metadata@0.2.2_rxjs@7.8.2", "npm:@opentelemetry/api@^1.9.0": "1.9.0", "npm:@opentelemetry/semantic-conventions@^1.27.0": "1.37.0", "npm:@optique/core@~0.6.1": "0.6.2", "npm:@optique/run@~0.6.1": "0.6.2", "npm:@poppanator/http-constants@^1.1.1": "1.1.1", - "npm:@sveltejs/kit@2": "2.46.5_@opentelemetry+api@1.9.0_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.39.12___acorn@8.15.0__vite@7.1.9___@types+node@22.19.1___tsx@4.20.6___yaml@2.8.1___picomatch@4.0.3__@types+node@22.19.1__tsx@4.20.6__yaml@2.8.1_svelte@5.39.12__acorn@8.15.0_vite@7.1.9__@types+node@22.19.1__tsx@4.20.6__yaml@2.8.1__picomatch@4.0.3_acorn@8.15.0_@types+node@22.19.1_tsx@4.20.6_yaml@2.8.1", - "npm:@types/amqplib@*": "0.10.7", - "npm:@types/amqplib@~0.10.7": "0.10.7", - "npm:@types/node@^22.16.0": "22.19.1", - "npm:@types/node@^24.2.1": "24.7.2", + "npm:@sveltejs/kit@2": "2.48.4_@opentelemetry+api@1.9.0_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.43.2___acorn@8.15.0__vite@7.1.12___@types+node@22.19.0___tsx@4.20.6___yaml@2.8.1___picomatch@4.0.3__@types+node@22.19.0__tsx@4.20.6__yaml@2.8.1_svelte@5.43.2__acorn@8.15.0_vite@7.1.12__@types+node@22.19.0__tsx@4.20.6__yaml@2.8.1__picomatch@4.0.3_acorn@8.15.0_@types+node@22.19.0_tsx@4.20.6_yaml@2.8.1", + "npm:@types/amqplib@*": "0.10.8", + "npm:@types/amqplib@~0.10.7": "0.10.8", + "npm:@types/node@^22.16.0": "22.19.0", + "npm:@types/node@^24.2.1": "24.10.0", "npm:amqplib@~0.10.8": "0.10.9", "npm:asn1js@^3.0.5": "3.0.6", "npm:asn1js@^3.0.6": "3.0.6", @@ -67,43 +67,43 @@ "npm:cli-table3@~0.6.5": "0.6.5", "npm:enquirer@^2.4.1": "2.4.1", "npm:env-paths@3": "3.0.0", - "npm:es-toolkit@^1.30.0": "1.39.10", - "npm:es-toolkit@^1.31.0": "1.39.10", - "npm:es-toolkit@^1.39.10": "1.39.10", - "npm:es-toolkit@^1.39.5": "1.39.10", + "npm:es-toolkit@^1.30.0": "1.41.0", + "npm:es-toolkit@^1.31.0": "1.41.0", + "npm:es-toolkit@^1.39.10": "1.41.0", + "npm:es-toolkit@^1.39.5": "1.41.0", "npm:express@4": "4.21.2", "npm:fast-check@^3.22.0": "3.23.2", "npm:fastify-plugin@^5.0.1": "5.1.0", "npm:fastify@^5.2.0": "5.6.1", - "npm:fetch-mock@^12.5.2": "12.5.4", - "npm:fetch-mock@^12.5.4": "12.5.4", + "npm:fetch-mock@^12.5.2": "12.6.0", + "npm:fetch-mock@^12.5.4": "12.6.0", "npm:h3@^1.15.0": "1.15.4", - "npm:hono@^4.8.3": "4.9.10", + "npm:hono@^4.8.3": "4.10.4", "npm:icojs@~0.19.5": "0.19.5", "npm:inquirer-toggle@^1.0.1": "1.0.1", - "npm:inquirer@^12.9.4": "12.10.0_@types+node@22.19.1", - "npm:ioredis@^5.6.1": "5.8.1", + "npm:inquirer@^12.9.4": "12.10.0_@types+node@22.19.0", + "npm:ioredis@^5.6.1": "5.8.2", "npm:jimp@^1.6.0": "1.6.0", "npm:json-canon@^1.0.1": "1.0.1", "npm:json-preserve-indent@^1.1.3": "1.1.3", "npm:jsonld@9": "9.0.0", - "npm:koa@2": "2.16.2", - "npm:miniflare@^4.20250523.0": "4.20251008.0", + "npm:koa@2": "2.16.3", + "npm:miniflare@^4.20250523.0": "4.20251011.1", "npm:multicodec@^3.2.1": "3.2.1", "npm:ora@^8.2.0": "8.2.0", - "npm:pkijs@^3.2.4": "3.2.5", - "npm:pkijs@^3.2.5": "3.2.5", + "npm:pkijs@^3.2.4": "3.3.2", + "npm:pkijs@^3.2.5": "3.3.2", "npm:postgres@^3.4.7": "3.4.7", "npm:preact@10.19.6": "10.19.6", "npm:shiki@^1.6.4": "1.29.2", "npm:srvx@~0.8.7": "0.8.16", "npm:structured-field-values@^2.0.4": "2.0.4", - "npm:tsdown@~0.12.9": "0.12.9_rolldown@1.0.0-beta.43", + "npm:tsdown@~0.12.9": "0.12.9_rolldown@1.0.0-beta.45", "npm:tsx@^4.19.4": "4.20.6", "npm:uri-template-router@1": "1.0.0", "npm:url-template@^3.1.1": "3.1.1", "npm:urlpattern-polyfill@^10.1.0": "10.1.0", - "npm:wrangler@^4.17.0": "4.42.2_@cloudflare+workers-types@4.20251011.0_unenv@2.0.0-rc.21_workerd@1.20251008.0", + "npm:wrangler@^4.17.0": "4.45.3_@cloudflare+workers-types@4.20251014.0_unenv@2.0.0-rc.21_workerd@1.20251011.0", "npm:yaml@^2.8.1": "2.8.1" }, "jsr": { @@ -144,17 +144,17 @@ "jsr:@logtape/logtape@^1.0.4" ] }, - "@hono/hono@4.9.10": { - "integrity": "b416cf3bf42e33353e37ea13df409b08bd9a67fabc5fca630f76924fbadb01e5" + "@hono/hono@4.10.2": { + "integrity": "9cdb32df3b1f8eba43b197035a90e0c3c543ddf99f75cebfa31a2414bc5633f8" }, - "@logtape/file@1.1.1": { - "integrity": "3653e800bd1eb5a728a8409191b42644541bca2aec4101911e9fb8439f1f2536", + "@logtape/file@1.1.2": { + "integrity": "27b4fdb442676ce5254533855622efb1daaad5dfb4859aaa24eb84f5eb196364", "dependencies": [ - "jsr:@logtape/logtape@^1.1.1" + "jsr:@logtape/logtape@^1.1.2" ] }, - "@logtape/logtape@1.1.1": { - "integrity": "65ebc4ae58238f7404d96b52112293279b1d256c578621a750e793c36e34c3d2" + "@logtape/logtape@1.1.2": { + "integrity": "df86a456db8f8a67bea00ce0f8acfc717caf9c3c1ee0c12939d6877796fdd1e6" }, "@optique/core@0.6.1": { "integrity": "87fe16d06724b8d83c114c7c734780426c34ff865627cda9ee21cd18ada198af" @@ -178,14 +178,14 @@ "jsr:@std/internal@1" ] }, - "@std/assert@1.0.15": { - "integrity": "d64018e951dbdfab9777335ecdb000c0b4e3df036984083be219ce5941e4703b", + "@std/assert@1.0.14": { + "integrity": "68d0d4a43b365abc927f45a9b85c639ea18a9fab96ad92281e493e4ed84abaa4", "dependencies": [ - "jsr:@std/internal@^1.0.12" + "jsr:@std/internal@^1.0.10" ] }, - "@std/async@1.0.14": { - "integrity": "62e954a418652c704d37563a3e54a37d4cf0268a9dcaeac1660cc652880b5326" + "@std/async@1.0.13": { + "integrity": "1d76ca5d324aef249908f7f7fe0d39aaf53198e5420604a59ab5c035adc97c96" }, "@std/bytes@1.0.6": { "integrity": "f6ac6adbd8ccd99314045f5703e23af0a68d7f7e58364b47d2c7f408aeb5820a" @@ -215,8 +215,8 @@ "jsr:@std/fmt@0.224" ] }, - "@std/internal@1.0.12": { - "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" + "@std/internal@1.0.10": { + "integrity": "e3be62ce42cab0e177c27698e5d9800122f67b766a0bea6ca4867886cbde8cf7" }, "@std/io@0.225.2": { "integrity": "3c740cd4ee4c082e6cfc86458f47e2ab7cb353dc6234d5e9b1f91a2de5f4d6c7", @@ -242,16 +242,16 @@ "jsr:@std/path@0.224" ] }, - "@std/yaml@1.0.9": { - "integrity": "6bad3dc766dd85b4b37eabcba81b6aa4eac7a392792ae29abcfb0f90602d55bb" + "@std/yaml@1.0.8": { + "integrity": "90b8aab62995e929fa0ea5f4151c287275b63e321ac375c35ff7406ca60c169d" } }, "npm": { "@alinea/suite@0.6.3": { "integrity": "sha512-4oGhbwAGq3rQeuuq9ylmybMkIT1mAl6e+DiiTLwwmwNzHFQiVihishgOpkIGrs0fGVSD4T8jOLyNTuQ30RtVuQ==" }, - "@babel/generator@7.28.3": { - "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "@babel/generator@7.28.5": { + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "dependencies": [ "@babel/parser", "@babel/types", @@ -263,18 +263,18 @@ "@babel/helper-string-parser@7.27.1": { "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" }, - "@babel/helper-validator-identifier@7.27.1": { - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==" + "@babel/helper-validator-identifier@7.28.5": { + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==" }, - "@babel/parser@7.28.4": { - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "@babel/parser@7.28.5": { + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dependencies": [ "@babel/types" ], "bin": true }, - "@babel/types@7.28.4": { - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "@babel/types@7.28.5": { + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dependencies": [ "@babel/helper-string-parser", "@babel/helper-validator-identifier" @@ -295,8 +295,8 @@ "mime@3.0.0" ] }, - "@cloudflare/unenv-preset@2.7.7_unenv@2.0.0-rc.21_workerd@1.20251008.0": { - "integrity": "sha512-HtZuh166y0Olbj9bqqySckz0Rw9uHjggJeoGbDx5x+sgezBXlxO6tQSig2RZw5tgObF8mWI8zaPvQMkQZtAODw==", + "@cloudflare/unenv-preset@2.7.8_unenv@2.0.0-rc.21_workerd@1.20251011.0": { + "integrity": "sha512-Ky929MfHh+qPhwCapYrRPwPVHtA2Ioex/DbGZyskGyNRDe9Ru3WThYZivyNVaPy5ergQSgMs9OKrM9Ajtz9F6w==", "dependencies": [ "unenv", "workerd" @@ -305,33 +305,33 @@ "workerd" ] }, - "@cloudflare/workerd-darwin-64@1.20251008.0": { - "integrity": "sha512-yph0H+8mMOK5Z9oDwjb8rI96oTVt4no5lZ43aorcbzsWG9VUIaXSXlBBoB3von6p4YCRW+J3n36fBM9XZ6TLaA==", + "@cloudflare/workerd-darwin-64@1.20251011.0": { + "integrity": "sha512-0DirVP+Z82RtZLlK2B+VhLOkk+ShBqDYO/jhcRw4oVlp0TOvk3cOVZChrt3+y3NV8Y/PYgTEywzLKFSziK4wCg==", "os": ["darwin"], "cpu": ["x64"] }, - "@cloudflare/workerd-darwin-arm64@1.20251008.0": { - "integrity": "sha512-Yc4lMGSbM4AEtYRpyDpmk77MsHb6X2BSwJgMgGsLVPmckM7ZHivZkJChfcNQjZ/MGR6nkhYc4iF6TcVS+UMEVw==", + "@cloudflare/workerd-darwin-arm64@1.20251011.0": { + "integrity": "sha512-1WuFBGwZd15p4xssGN/48OE2oqokIuc51YvHvyNivyV8IYnAs3G9bJNGWth1X7iMDPe4g44pZrKhRnISS2+5dA==", "os": ["darwin"], "cpu": ["arm64"] }, - "@cloudflare/workerd-linux-64@1.20251008.0": { - "integrity": "sha512-AjoQnylw4/5G6SmfhZRsli7EuIK7ZMhmbxtU0jkpciTlVV8H01OsFOgS1d8zaTXMfkWamEfMouy8oH/L7B9YcQ==", + "@cloudflare/workerd-linux-64@1.20251011.0": { + "integrity": "sha512-BccMiBzFlWZyFghIw2szanmYJrJGBGHomw2y/GV6pYXChFzMGZkeCEMfmCyJj29xczZXxcZmUVJxNy4eJxO8QA==", "os": ["linux"], "cpu": ["x64"] }, - "@cloudflare/workerd-linux-arm64@1.20251008.0": { - "integrity": "sha512-hRy9yyvzVq1HsqHZUmFkAr0C8JGjAD/PeeVEGCKL3jln3M9sNCKIrbDXiL+efe+EwajJNNlDxpO+s30uVWVaRg==", + "@cloudflare/workerd-linux-arm64@1.20251011.0": { + "integrity": "sha512-79o/216lsbAbKEVDZYXR24ivEIE2ysDL9jvo0rDTkViLWju9dAp3CpyetglpJatbSi3uWBPKZBEOqN68zIjVsQ==", "os": ["linux"], "cpu": ["arm64"] }, - "@cloudflare/workerd-windows-64@1.20251008.0": { - "integrity": "sha512-Gm0RR+ehfNMsScn2pUcn3N9PDUpy7FyvV9ecHEyclKttvztyFOcmsF14bxEaSVv7iM4TxWEBn1rclmYHxDM4ow==", + "@cloudflare/workerd-windows-64@1.20251011.0": { + "integrity": "sha512-RIXUQRchFdqEvaUqn1cXZXSKjpqMaSaVAkI5jNZ8XzAw/bw2bcdOVUtakrflgxDprltjFb0PTNtuss1FKtH9Jg==", "os": ["win32"], "cpu": ["x64"] }, - "@cloudflare/workers-types@4.20251011.0": { - "integrity": "sha512-gQpih+pbq3sP4uXltUeCSbPgZxTNp2gQd8639SaIbQMwgA6oJNHLhIART1fWy6DQACngiRzDVULA2x0ohmkGTQ==" + "@cloudflare/workers-types@4.20251014.0": { + "integrity": "sha512-tEW98J/kOa0TdylIUOrLKRdwkUw0rvvYVlo+Ce0mqRH3c8kSoxLzUH9gfCvwLe0M89z1RkzFovSKAW2Nwtyn3w==" }, "@colors/colors@1.5.0": { "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" @@ -349,15 +349,15 @@ "undici@6.22.0" ] }, - "@emnapi/core@1.5.0": { - "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", + "@emnapi/core@1.6.0": { + "integrity": "sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==", "dependencies": [ "@emnapi/wasi-threads", "tslib" ] }, - "@emnapi/runtime@1.5.0": { - "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", + "@emnapi/runtime@1.6.0": { + "integrity": "sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==", "dependencies": [ "tslib" ] @@ -493,8 +493,8 @@ "os": ["win32"], "cpu": ["x64"] }, - "@fastify/ajv-compiler@4.0.3_ajv@8.17.1": { - "integrity": "sha512-BlVD6YGUTDEl0b5B8TDrvl7JkFNc6LOSybeMB+/bIDA0xaJlBUTeBaGLgjvaviLRNAcBMIXDCHaxOJ8LdlzEKw==", + "@fastify/ajv-compiler@4.0.5_ajv@8.17.1": { + "integrity": "sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==", "dependencies": [ "ajv", "ajv-formats", @@ -526,8 +526,8 @@ "ipaddr.js@2.2.0" ] }, - "@fxts/core@1.20.0": { - "integrity": "sha512-f6NNS0pu7K72sYKf85GKnkTNGpQsWUNJ3VH8qMTofiRWAksa491Yvne8v0extMjBnI3+aPs4m3OKITgvVyZbeg==", + "@fxts/core@1.19.0": { + "integrity": "sha512-8vWBhYGwn258i5TalQin0uzmAJI9qgq8nXjf1PLd8DHjlcs5bfqyZVT1FHqnBVyAH3ojjfLQ2Zb2+oisG2aTcQ==", "dependencies": [ "tslib" ] @@ -659,41 +659,41 @@ "os": ["win32"], "cpu": ["x64"] }, - "@inquirer/ansi@1.0.2": { - "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==" + "@inquirer/ansi@1.0.1": { + "integrity": "sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==" }, - "@inquirer/checkbox@4.3.2_@types+node@22.19.1": { - "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", + "@inquirer/checkbox@4.3.0_@types+node@22.19.0": { + "integrity": "sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==", "dependencies": [ "@inquirer/ansi", - "@inquirer/core@10.3.2_@types+node@22.19.1", + "@inquirer/core@10.3.0_@types+node@22.19.0", "@inquirer/figures", - "@inquirer/type@3.0.10_@types+node@22.19.1", - "@types/node@22.19.1", + "@inquirer/type@3.0.9_@types+node@22.19.0", + "@types/node@22.19.0", "yoctocolors-cjs" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, - "@inquirer/confirm@5.1.21_@types+node@22.19.1": { - "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", + "@inquirer/confirm@5.1.19_@types+node@22.19.0": { + "integrity": "sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@22.19.1", - "@inquirer/type@3.0.10_@types+node@22.19.1", - "@types/node@22.19.1" + "@inquirer/core@10.3.0_@types+node@22.19.0", + "@inquirer/type@3.0.9_@types+node@22.19.0", + "@types/node@22.19.0" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, - "@inquirer/core@10.3.2_@types+node@22.19.1": { - "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "@inquirer/core@10.3.0_@types+node@22.19.0": { + "integrity": "sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==", "dependencies": [ "@inquirer/ansi", "@inquirer/figures", - "@inquirer/type@3.0.10_@types+node@22.19.1", - "@types/node@22.19.1", + "@inquirer/type@3.0.9_@types+node@22.19.0", + "@types/node@22.19.0", "cli-width", "mute-stream@2.0.0", "signal-exit", @@ -701,7 +701,7 @@ "yoctocolors-cjs" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, "@inquirer/core@8.2.4": { @@ -710,7 +710,7 @@ "@inquirer/figures", "@inquirer/type@1.5.5", "@types/mute-stream", - "@types/node@20.19.25", + "@types/node@20.19.24", "@types/wrap-ansi", "ansi-escapes", "cli-spinners", @@ -722,80 +722,80 @@ "wrap-ansi@6.2.0" ] }, - "@inquirer/editor@4.2.23_@types+node@22.19.1": { - "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", + "@inquirer/editor@4.2.21_@types+node@22.19.0": { + "integrity": "sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@22.19.1", + "@inquirer/core@10.3.0_@types+node@22.19.0", "@inquirer/external-editor", - "@inquirer/type@3.0.10_@types+node@22.19.1", - "@types/node@22.19.1" + "@inquirer/type@3.0.9_@types+node@22.19.0", + "@types/node@22.19.0" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, - "@inquirer/expand@4.0.23_@types+node@22.19.1": { - "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "@inquirer/expand@4.0.21_@types+node@22.19.0": { + "integrity": "sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@22.19.1", - "@inquirer/type@3.0.10_@types+node@22.19.1", - "@types/node@22.19.1", + "@inquirer/core@10.3.0_@types+node@22.19.0", + "@inquirer/type@3.0.9_@types+node@22.19.0", + "@types/node@22.19.0", "yoctocolors-cjs" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, - "@inquirer/external-editor@1.0.3_@types+node@22.19.1": { - "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "@inquirer/external-editor@1.0.2_@types+node@22.19.0": { + "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", "dependencies": [ - "@types/node@22.19.1", + "@types/node@22.19.0", "chardet", "iconv-lite@0.7.0" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, - "@inquirer/figures@1.0.15": { - "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==" + "@inquirer/figures@1.0.14": { + "integrity": "sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==" }, - "@inquirer/input@4.3.1_@types+node@22.19.1": { - "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "@inquirer/input@4.2.5_@types+node@22.19.0": { + "integrity": "sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@22.19.1", - "@inquirer/type@3.0.10_@types+node@22.19.1", - "@types/node@22.19.1" + "@inquirer/core@10.3.0_@types+node@22.19.0", + "@inquirer/type@3.0.9_@types+node@22.19.0", + "@types/node@22.19.0" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, - "@inquirer/number@3.0.23_@types+node@22.19.1": { - "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "@inquirer/number@3.0.21_@types+node@22.19.0": { + "integrity": "sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@22.19.1", - "@inquirer/type@3.0.10_@types+node@22.19.1", - "@types/node@22.19.1" + "@inquirer/core@10.3.0_@types+node@22.19.0", + "@inquirer/type@3.0.9_@types+node@22.19.0", + "@types/node@22.19.0" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, - "@inquirer/password@4.0.23_@types+node@22.19.1": { - "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "@inquirer/password@4.0.21_@types+node@22.19.0": { + "integrity": "sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==", "dependencies": [ "@inquirer/ansi", - "@inquirer/core@10.3.2_@types+node@22.19.1", - "@inquirer/type@3.0.10_@types+node@22.19.1", - "@types/node@22.19.1" + "@inquirer/core@10.3.0_@types+node@22.19.0", + "@inquirer/type@3.0.9_@types+node@22.19.0", + "@types/node@22.19.0" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, - "@inquirer/prompts@7.10.1_@types+node@22.19.1": { - "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", + "@inquirer/prompts@7.9.0_@types+node@22.19.0": { + "integrity": "sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==", "dependencies": [ "@inquirer/checkbox", "@inquirer/confirm", @@ -807,49 +807,49 @@ "@inquirer/rawlist", "@inquirer/search", "@inquirer/select", - "@types/node@22.19.1" + "@types/node@22.19.0" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, - "@inquirer/rawlist@4.1.11_@types+node@22.19.1": { - "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "@inquirer/rawlist@4.1.9_@types+node@22.19.0": { + "integrity": "sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@22.19.1", - "@inquirer/type@3.0.10_@types+node@22.19.1", - "@types/node@22.19.1", + "@inquirer/core@10.3.0_@types+node@22.19.0", + "@inquirer/type@3.0.9_@types+node@22.19.0", + "@types/node@22.19.0", "yoctocolors-cjs" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, - "@inquirer/search@3.2.2_@types+node@22.19.1": { - "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "@inquirer/search@3.2.0_@types+node@22.19.0": { + "integrity": "sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@22.19.1", + "@inquirer/core@10.3.0_@types+node@22.19.0", "@inquirer/figures", - "@inquirer/type@3.0.10_@types+node@22.19.1", - "@types/node@22.19.1", + "@inquirer/type@3.0.9_@types+node@22.19.0", + "@types/node@22.19.0", "yoctocolors-cjs" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, - "@inquirer/select@4.4.2_@types+node@22.19.1": { - "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "@inquirer/select@4.4.0_@types+node@22.19.0": { + "integrity": "sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==", "dependencies": [ "@inquirer/ansi", - "@inquirer/core@10.3.2_@types+node@22.19.1", + "@inquirer/core@10.3.0_@types+node@22.19.0", "@inquirer/figures", - "@inquirer/type@3.0.10_@types+node@22.19.1", - "@types/node@22.19.1", + "@inquirer/type@3.0.9_@types+node@22.19.0", + "@types/node@22.19.0", "yoctocolors-cjs" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, "@inquirer/type@1.5.5": { @@ -858,13 +858,13 @@ "mute-stream@1.0.0" ] }, - "@inquirer/type@3.0.10_@types+node@22.19.1": { - "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "@inquirer/type@3.0.9_@types+node@22.19.0": { + "integrity": "sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==", "dependencies": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, "@ioredis/commands@1.4.0": { @@ -1200,8 +1200,8 @@ "wasm-feature-detect" ] }, - "@logtape/logtape@1.1.1": { - "integrity": "sha512-/zpMuB2BZnL3LnBsy6PfFJp/4qP/60U9hE5j6eFwk25wBVtLpd7/bF3B1j7cnMD37R02fFyDyyHEmRSOz6+Qfg==" + "@logtape/logtape@1.1.2": { + "integrity": "sha512-4QXa/5cwt3+cx01C1xm8iqvEXxNZMDTTbT5AFGZnwPkn2WDAyA6UP2khWBZ7FctMnvQqW3fnJ96kgBJ4ahorHw==" }, "@lukeed/csprng@1.1.0": { "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==" @@ -1217,8 +1217,8 @@ "@tybys/wasm-util" ] }, - "@nestjs/common@11.1.6_reflect-metadata@0.2.2_rxjs@7.8.2": { - "integrity": "sha512-krKwLLcFmeuKDqngG2N/RuZHCs2ycsKcxWIDgcm7i1lf3sQ0iG03ci+DsP/r3FcT/eJDFsIHnKtNta2LIi7PzQ==", + "@nestjs/common@11.1.8_reflect-metadata@0.2.2_rxjs@7.8.2": { + "integrity": "sha512-bbsOqwld/GdBfiRNc4nnjyWWENDEicq4SH+R5AuYatvf++vf1x5JIsHB1i1KtfZMD3eRte0D4K9WXuAYil6XAg==", "dependencies": [ "file-type@21.0.0", "iterare", @@ -1229,8 +1229,8 @@ "uid" ] }, - "@noble/hashes@1.8.0": { - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==" + "@noble/hashes@1.4.0": { + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==" }, "@opentelemetry/api@1.9.0": { "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==" @@ -1247,8 +1247,11 @@ "@optique/core" ] }, - "@oxc-project/types@0.94.0": { - "integrity": "sha512-+UgQT/4o59cZfH6Cp7G0hwmqEQ0wE+AdIwhikdwnhWI9Dp8CgSY081+Q3O67/wq3VJu8mgUEB93J9EHHn70fOw==" + "@oxc-project/types@0.95.0": { + "integrity": "sha512-vACy7vhpMPhjEJhULNxrdR0D943TkA/MigMpJCHmBHvMXxRStRi/dPtTlfQ3uDwWSzRpT8z+7ImjZVf8JWBocQ==" + }, + "@pinojs/redact@0.4.0": { + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==" }, "@polka/url@1.0.0-next.29": { "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==" @@ -1279,188 +1282,188 @@ "quansync" ] }, - "@rolldown/binding-android-arm64@1.0.0-beta.43": { - "integrity": "sha512-TP8bcPOb1s6UmY5syhXrDn9k0XkYcw+XaoylTN4cJxf0JOVS2j682I3aTcpfT51hOFGr2bRwNKN9RZ19XxeQbA==", + "@rolldown/binding-android-arm64@1.0.0-beta.45": { + "integrity": "sha512-bfgKYhFiXJALeA/riil908+2vlyWGdwa7Ju5S+JgWZYdR4jtiPOGdM6WLfso1dojCh+4ZWeiTwPeV9IKQEX+4g==", "os": ["android"], "cpu": ["arm64"] }, - "@rolldown/binding-darwin-arm64@1.0.0-beta.43": { - "integrity": "sha512-kuVWnZsE4vEjMF/10SbSUyzucIW2zmdsqFghYMqy+fsjXnRHg0luTU6qWF8IqJf4Cbpm9NEZRnjIEPpAbdiSNQ==", + "@rolldown/binding-darwin-arm64@1.0.0-beta.45": { + "integrity": "sha512-xjCv4CRVsSnnIxTuyH1RDJl5OEQ1c9JYOwfDAHddjJDxCw46ZX9q80+xq7Eok7KC4bRSZudMJllkvOKv0T9SeA==", "os": ["darwin"], "cpu": ["arm64"] }, - "@rolldown/binding-darwin-x64@1.0.0-beta.43": { - "integrity": "sha512-u9Ps4sh6lcmJ3vgLtyEg/x4jlhI64U0mM93Ew+tlfFdLDe7yKyA+Fe80cpr2n1mNCeZXrvTSbZluKpXQ0GxLjw==", + "@rolldown/binding-darwin-x64@1.0.0-beta.45": { + "integrity": "sha512-ddcO9TD3D/CLUa/l8GO8LHzBOaZqWg5ClMy3jICoxwCuoz47h9dtqPsIeTiB6yR501LQTeDsjA4lIFd7u3Ljfw==", "os": ["darwin"], "cpu": ["x64"] }, - "@rolldown/binding-freebsd-x64@1.0.0-beta.43": { - "integrity": "sha512-h9lUtVtXgfbk/tnicMpbFfZ3DJvk5Zn2IvmlC1/e0+nUfwoc/TFqpfrRRqcNBXk/e+xiWMSKv6b0MF8N+Rtvlg==", + "@rolldown/binding-freebsd-x64@1.0.0-beta.45": { + "integrity": "sha512-MBTWdrzW9w+UMYDUvnEuh0pQvLENkl2Sis15fHTfHVW7ClbGuez+RWopZudIDEGkpZXdeI4CkRXk+vdIIebrmg==", "os": ["freebsd"], "cpu": ["x64"] }, - "@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.43": { - "integrity": "sha512-IX2C6bA6wM2rX/RvD75ko+ix9yxPKjKGGq7pOhB8wGI4Z4fqX5B1nDHga/qMDmAdCAR1m9ymzxkmqhm/AFYf7A==", + "@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.45": { + "integrity": "sha512-4YgoCFiki1HR6oSg+GxxfzfnVCesQxLF1LEnw9uXS/MpBmuog0EOO2rYfy69rWP4tFZL9IWp6KEfGZLrZ7aUog==", "os": ["linux"], "cpu": ["arm"] }, - "@rolldown/binding-linux-arm64-gnu@1.0.0-beta.43": { - "integrity": "sha512-mcjd57vEj+CEQbZAzUiaxNzNgwwgOpFtZBWcINm8DNscvkXl5b/s622Z1dqGNWSdrZmdjdC6LWMvu8iHM6v9sQ==", + "@rolldown/binding-linux-arm64-gnu@1.0.0-beta.45": { + "integrity": "sha512-LE1gjAwQRrbCOorJJ7LFr10s5vqYf5a00V5Ea9wXcT2+56n5YosJkcp8eQ12FxRBv2YX8dsdQJb+ZTtYJwb6XQ==", "os": ["linux"], "cpu": ["arm64"] }, - "@rolldown/binding-linux-arm64-musl@1.0.0-beta.43": { - "integrity": "sha512-Pa8QMwlkrztTo/1mVjZmPIQ44tCSci10TBqxzVBvXVA5CFh5EpiEi99fPSll2dHG2uT4dCOMeC6fIhyDdb0zXA==", + "@rolldown/binding-linux-arm64-musl@1.0.0-beta.45": { + "integrity": "sha512-tdy8ThO/fPp40B81v0YK3QC+KODOmzJzSUOO37DinQxzlTJ026gqUSOM8tzlVixRbQJltgVDCTYF8HNPRErQTA==", "os": ["linux"], "cpu": ["arm64"] }, - "@rolldown/binding-linux-x64-gnu@1.0.0-beta.43": { - "integrity": "sha512-BgynXKMjeaX4AfWLARhOKDetBOOghnSiVRjAHVvhiAaDXgdQN8e65mSmXRiVoVtD3cHXx/cfU8Gw0p0K+qYKVQ==", + "@rolldown/binding-linux-x64-gnu@1.0.0-beta.45": { + "integrity": "sha512-lS082ROBWdmOyVY/0YB3JmsiClaWoxvC+dA8/rbhyB9VLkvVEaihLEOr4CYmrMse151C4+S6hCw6oa1iewox7g==", "os": ["linux"], "cpu": ["x64"] }, - "@rolldown/binding-linux-x64-musl@1.0.0-beta.43": { - "integrity": "sha512-VIsoPlOB/tDSAw9CySckBYysoIBqLeps1/umNSYUD8pMtalJyzMTneAVI1HrUdf4ceFmQ5vARoLIXSsPwVFxNg==", + "@rolldown/binding-linux-x64-musl@1.0.0-beta.45": { + "integrity": "sha512-Hi73aYY0cBkr1/SvNQqH8Cd+rSV6S9RB5izCv0ySBcRnd/Wfn5plguUoGYwBnhHgFbh6cPw9m2dUVBR6BG1gxA==", "os": ["linux"], "cpu": ["x64"] }, - "@rolldown/binding-openharmony-arm64@1.0.0-beta.43": { - "integrity": "sha512-YDXTxVJG67PqTQMKyjVJSddoPbSWJ4yRz/E3xzTLHqNrTDGY0UuhG8EMr8zsYnfH/0cPFJ3wjQd/hJWHuR6nkA==", + "@rolldown/binding-openharmony-arm64@1.0.0-beta.45": { + "integrity": "sha512-fljEqbO7RHHogNDxYtTzr+GNjlfOx21RUyGmF+NrkebZ8emYYiIqzPxsaMZuRx0rgZmVmliOzEp86/CQFDKhJQ==", "os": ["openharmony"], "cpu": ["arm64"] }, - "@rolldown/binding-wasm32-wasi@1.0.0-beta.43": { - "integrity": "sha512-3M+2DmorXvDuAIGYQ9Z93Oy1G9ETkejLwdXXb1uRTgKN9pMcu7N+KG2zDrJwqyxeeLIFE22AZGtSJm3PJbNu9Q==", + "@rolldown/binding-wasm32-wasi@1.0.0-beta.45": { + "integrity": "sha512-ZJDB7lkuZE9XUnWQSYrBObZxczut+8FZ5pdanm8nNS1DAo8zsrPuvGwn+U3fwU98WaiFsNrA4XHngesCGr8tEQ==", "dependencies": [ "@napi-rs/wasm-runtime" ], "cpu": ["wasm32"] }, - "@rolldown/binding-win32-arm64-msvc@1.0.0-beta.43": { - "integrity": "sha512-/B1j1pJs33y9ywtslOMxryUPHq8zIGu/OGEc2gyed0slimJ8fX2uR/SaJVhB4+NEgCFIeYDR4CX6jynAkeRuCA==", + "@rolldown/binding-win32-arm64-msvc@1.0.0-beta.45": { + "integrity": "sha512-zyzAjItHPUmxg6Z8SyRhLdXlJn3/D9KL5b9mObUrBHhWS/GwRH4665xCiFqeuktAhhWutqfc+rOV2LjK4VYQGQ==", "os": ["win32"], "cpu": ["arm64"] }, - "@rolldown/binding-win32-ia32-msvc@1.0.0-beta.43": { - "integrity": "sha512-29oG1swCz7hNP+CQYrsM4EtylsKwuYzM8ljqbqC5TsQwmKat7P8ouDpImsqg/GZxFSXcPP9ezQm0Q0wQwGM3JA==", + "@rolldown/binding-win32-ia32-msvc@1.0.0-beta.45": { + "integrity": "sha512-wODcGzlfxqS6D7BR0srkJk3drPwXYLu7jPHN27ce2c4PUnVVmJnp9mJzUQGT4LpmHmmVdMZ+P6hKvyTGBzc1CA==", "os": ["win32"], "cpu": ["ia32"] }, - "@rolldown/binding-win32-x64-msvc@1.0.0-beta.43": { - "integrity": "sha512-eWBV1Ef3gfGNehxVGCyXs7wLayRIgCmyItuCZwYYXW5bsk4EvR4n2GP5m3ohjnx7wdiY3nLmwQfH2Knb5gbNZw==", + "@rolldown/binding-win32-x64-msvc@1.0.0-beta.45": { + "integrity": "sha512-wiU40G1nQo9rtfvF9jLbl79lUgjfaD/LTyUEw2Wg/gdF5OhjzpKMVugZQngO+RNdwYaNj+Fs+kWBWfp4VXPMHA==", "os": ["win32"], "cpu": ["x64"] }, - "@rolldown/pluginutils@1.0.0-beta.43": { - "integrity": "sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==" + "@rolldown/pluginutils@1.0.0-beta.45": { + "integrity": "sha512-Le9ulGCrD8ggInzWw/k2J8QcbPz7eGIOWqfJ2L+1R0Opm7n6J37s2hiDWlh6LJN0Lk9L5sUzMvRHKW7UxBZsQA==" }, - "@rollup/rollup-android-arm-eabi@4.52.4": { - "integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==", + "@rollup/rollup-android-arm-eabi@4.52.5": { + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", "os": ["android"], "cpu": ["arm"] }, - "@rollup/rollup-android-arm64@4.52.4": { - "integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==", + "@rollup/rollup-android-arm64@4.52.5": { + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", "os": ["android"], "cpu": ["arm64"] }, - "@rollup/rollup-darwin-arm64@4.52.4": { - "integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==", + "@rollup/rollup-darwin-arm64@4.52.5": { + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", "os": ["darwin"], "cpu": ["arm64"] }, - "@rollup/rollup-darwin-x64@4.52.4": { - "integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==", + "@rollup/rollup-darwin-x64@4.52.5": { + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", "os": ["darwin"], "cpu": ["x64"] }, - "@rollup/rollup-freebsd-arm64@4.52.4": { - "integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==", + "@rollup/rollup-freebsd-arm64@4.52.5": { + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", "os": ["freebsd"], "cpu": ["arm64"] }, - "@rollup/rollup-freebsd-x64@4.52.4": { - "integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==", + "@rollup/rollup-freebsd-x64@4.52.5": { + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", "os": ["freebsd"], "cpu": ["x64"] }, - "@rollup/rollup-linux-arm-gnueabihf@4.52.4": { - "integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==", + "@rollup/rollup-linux-arm-gnueabihf@4.52.5": { + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", "os": ["linux"], "cpu": ["arm"] }, - "@rollup/rollup-linux-arm-musleabihf@4.52.4": { - "integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==", + "@rollup/rollup-linux-arm-musleabihf@4.52.5": { + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", "os": ["linux"], "cpu": ["arm"] }, - "@rollup/rollup-linux-arm64-gnu@4.52.4": { - "integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==", + "@rollup/rollup-linux-arm64-gnu@4.52.5": { + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", "os": ["linux"], "cpu": ["arm64"] }, - "@rollup/rollup-linux-arm64-musl@4.52.4": { - "integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==", + "@rollup/rollup-linux-arm64-musl@4.52.5": { + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", "os": ["linux"], "cpu": ["arm64"] }, - "@rollup/rollup-linux-loong64-gnu@4.52.4": { - "integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==", + "@rollup/rollup-linux-loong64-gnu@4.52.5": { + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", "os": ["linux"], "cpu": ["loong64"] }, - "@rollup/rollup-linux-ppc64-gnu@4.52.4": { - "integrity": "sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==", + "@rollup/rollup-linux-ppc64-gnu@4.52.5": { + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", "os": ["linux"], "cpu": ["ppc64"] }, - "@rollup/rollup-linux-riscv64-gnu@4.52.4": { - "integrity": "sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==", + "@rollup/rollup-linux-riscv64-gnu@4.52.5": { + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", "os": ["linux"], "cpu": ["riscv64"] }, - "@rollup/rollup-linux-riscv64-musl@4.52.4": { - "integrity": "sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==", + "@rollup/rollup-linux-riscv64-musl@4.52.5": { + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", "os": ["linux"], "cpu": ["riscv64"] }, - "@rollup/rollup-linux-s390x-gnu@4.52.4": { - "integrity": "sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==", + "@rollup/rollup-linux-s390x-gnu@4.52.5": { + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", "os": ["linux"], "cpu": ["s390x"] }, - "@rollup/rollup-linux-x64-gnu@4.52.4": { - "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", + "@rollup/rollup-linux-x64-gnu@4.52.5": { + "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", "os": ["linux"], "cpu": ["x64"] }, - "@rollup/rollup-linux-x64-musl@4.52.4": { - "integrity": "sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==", + "@rollup/rollup-linux-x64-musl@4.52.5": { + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", "os": ["linux"], "cpu": ["x64"] }, - "@rollup/rollup-openharmony-arm64@4.52.4": { - "integrity": "sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==", + "@rollup/rollup-openharmony-arm64@4.52.5": { + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", "os": ["openharmony"], "cpu": ["arm64"] }, - "@rollup/rollup-win32-arm64-msvc@4.52.4": { - "integrity": "sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==", + "@rollup/rollup-win32-arm64-msvc@4.52.5": { + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", "os": ["win32"], "cpu": ["arm64"] }, - "@rollup/rollup-win32-ia32-msvc@4.52.4": { - "integrity": "sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==", + "@rollup/rollup-win32-ia32-msvc@4.52.5": { + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", "os": ["win32"], "cpu": ["ia32"] }, - "@rollup/rollup-win32-x64-gnu@4.52.4": { - "integrity": "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==", + "@rollup/rollup-win32-x64-gnu@4.52.5": { + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", "os": ["win32"], "cpu": ["x64"] }, - "@rollup/rollup-win32-x64-msvc@4.52.4": { - "integrity": "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==", + "@rollup/rollup-win32-x64-msvc@4.52.5": { + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", "os": ["win32"], "cpu": ["x64"] }, @@ -1518,8 +1521,8 @@ "@sindresorhus/is@7.1.0": { "integrity": "sha512-7F/yz2IphV39hiS2zB4QYVkivrptHHh0K8qJJd9HhuWSdvf8AN7NpebW3CcDZDBQsUPMoDKWsY2WWgW7bqOcfA==" }, - "@speed-highlight/core@1.2.7": { - "integrity": "sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==" + "@speed-highlight/core@1.2.8": { + "integrity": "sha512-IGytNtnUnPIobIbOq5Y6LIlqiHNX+vnToQIS7lj6L5819C+rA8TXRDkkG8vePsiBOGcoW9R6i+dp2YBUKdB09Q==" }, "@standard-schema/spec@1.0.0": { "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==" @@ -1530,8 +1533,8 @@ "acorn@8.15.0" ] }, - "@sveltejs/kit@2.46.5_@opentelemetry+api@1.9.0_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.39.12___acorn@8.15.0__vite@7.1.9___@types+node@22.19.1___tsx@4.20.6___yaml@2.8.1___picomatch@4.0.3__@types+node@22.19.1__tsx@4.20.6__yaml@2.8.1_svelte@5.39.12__acorn@8.15.0_vite@7.1.9__@types+node@22.19.1__tsx@4.20.6__yaml@2.8.1__picomatch@4.0.3_acorn@8.15.0_@types+node@22.19.1_tsx@4.20.6_yaml@2.8.1": { - "integrity": "sha512-7TSvMrCdmig5TMyYDW876C5FljhA0wlGixtvASCiqUqtLfmyEEpaysXjC7GhR5mWcGRrCGF+L2Bl1eEaW1wTCA==", + "@sveltejs/kit@2.48.4_@opentelemetry+api@1.9.0_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.43.2___acorn@8.15.0__vite@7.1.12___@types+node@22.19.0___tsx@4.20.6___yaml@2.8.1___picomatch@4.0.3__@types+node@22.19.0__tsx@4.20.6__yaml@2.8.1_svelte@5.43.2__acorn@8.15.0_vite@7.1.12__@types+node@22.19.0__tsx@4.20.6__yaml@2.8.1__picomatch@4.0.3_acorn@8.15.0_@types+node@22.19.0_tsx@4.20.6_yaml@2.8.1": { + "integrity": "sha512-TGFX1pZUt9qqY20Cv5NyYvy0iLWHf2jXi8s+eCGsig7jQMdwZWKUFMR6TbvFNhfDSUpc1sH/Y5EHv20g3HHA3g==", "dependencies": [ "@opentelemetry/api", "@standard-schema/spec", @@ -1556,7 +1559,7 @@ ], "bin": true }, - "@sveltejs/vite-plugin-svelte-inspector@5.0.1_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.39.12___acorn@8.15.0__vite@7.1.9___@types+node@22.19.1___tsx@4.20.6___yaml@2.8.1___picomatch@4.0.3__@types+node@22.19.1__tsx@4.20.6__yaml@2.8.1_svelte@5.39.12__acorn@8.15.0_vite@7.1.9__@types+node@22.19.1__tsx@4.20.6__yaml@2.8.1__picomatch@4.0.3_@types+node@22.19.1_tsx@4.20.6_yaml@2.8.1": { + "@sveltejs/vite-plugin-svelte-inspector@5.0.1_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.43.2___acorn@8.15.0__vite@7.1.12___@types+node@22.19.0___tsx@4.20.6___yaml@2.8.1___picomatch@4.0.3__@types+node@22.19.0__tsx@4.20.6__yaml@2.8.1_svelte@5.43.2__acorn@8.15.0_vite@7.1.12__@types+node@22.19.0__tsx@4.20.6__yaml@2.8.1__picomatch@4.0.3_@types+node@22.19.0_tsx@4.20.6_yaml@2.8.1": { "integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==", "dependencies": [ "@sveltejs/vite-plugin-svelte", @@ -1565,7 +1568,7 @@ "vite" ] }, - "@sveltejs/vite-plugin-svelte@6.2.1_svelte@5.39.12__acorn@8.15.0_vite@7.1.9__@types+node@22.19.1__tsx@4.20.6__yaml@2.8.1__picomatch@4.0.3_@types+node@22.19.1_tsx@4.20.6_yaml@2.8.1": { + "@sveltejs/vite-plugin-svelte@6.2.1_svelte@5.43.2__acorn@8.15.0_vite@7.1.12__@types+node@22.19.0__tsx@4.20.6__yaml@2.8.1__picomatch@4.0.3_@types+node@22.19.0_tsx@4.20.6_yaml@2.8.1": { "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==", "dependencies": [ "@sveltejs/vite-plugin-svelte-inspector", @@ -1594,10 +1597,10 @@ "tslib" ] }, - "@types/amqplib@0.10.7": { - "integrity": "sha512-IVj3avf9AQd2nXCx0PGk/OYq7VmHiyNxWFSb5HhU9ATh+i+gHWvVcljFTcTWQ/dyHJCTrzCixde+r/asL2ErDA==", + "@types/amqplib@0.10.8": { + "integrity": "sha512-vtDp8Pk1wsE/AuQ8/Rgtm6KUZYqcnTgNvEHwzCkX8rL7AGsC6zqAfKAAJhUZXFhM/Pp++tbnUHiam/8vVpPztA==", "dependencies": [ - "@types/node@24.2.0" + "@types/node@22.15.15" ] }, "@types/cookie@0.6.0": { @@ -1624,34 +1627,34 @@ "@types/mute-stream@0.0.4": { "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", "dependencies": [ - "@types/node@24.2.0" + "@types/node@22.15.15" ] }, "@types/node@16.9.1": { "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==" }, - "@types/node@20.19.25": { - "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==", + "@types/node@20.19.24": { + "integrity": "sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==", "dependencies": [ "undici-types@6.21.0" ] }, - "@types/node@22.19.1": { - "integrity": "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==", + "@types/node@22.15.15": { + "integrity": "sha512-R5muMcZob3/Jjchn5LcO8jdKwSCbzqmPB6ruBxMcf9kbxtniZHP327s6C37iOfuw8mbKK3cAQa7sEl7afLrQ8A==", "dependencies": [ "undici-types@6.21.0" ] }, - "@types/node@24.2.0": { - "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", + "@types/node@22.19.0": { + "integrity": "sha512-xpr/lmLPQEj+TUnHmR+Ab91/glhJvsqcjB+yY0Ix9GO70H6Lb4FHH5GeqdOE5btAx7eIMwuHkp4H2MSkLcqWbA==", "dependencies": [ - "undici-types@7.10.0" + "undici-types@6.21.0" ] }, - "@types/node@24.7.2": { - "integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==", + "@types/node@24.10.0": { + "integrity": "sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==", "dependencies": [ - "undici-types@7.14.0" + "undici-types@7.16.0" ] }, "@types/unist@3.0.3": { @@ -2069,8 +2072,8 @@ "detect-libc@2.1.2": { "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==" }, - "devalue@5.3.2": { - "integrity": "sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==" + "devalue@5.4.2": { + "integrity": "sha512-MwPZTKEPK2k8Qgfmqrd48ZKVvzSQjgW0lXLxiIBA8dQjtf/6mw6pggHNLcyDKyf+fI6eXxlQwPsfaCMTU5U+Bw==" }, "devlop@1.1.0": { "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", @@ -2138,8 +2141,8 @@ "es-errors" ] }, - "es-toolkit@1.39.10": { - "integrity": "sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==" + "es-toolkit@1.41.0": { + "integrity": "sha512-bDd3oRmbVgqZCJS6WmeQieOrzpl3URcWBUVDXxOELlUW2FuW+0glPOz1n0KnRie+PdyvUZcXz2sOn00c6pPRIA==" }, "esbuild@0.25.4": { "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", @@ -2182,8 +2185,8 @@ "esm-env@1.2.2": { "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==" }, - "esrap@2.1.0": { - "integrity": "sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==", + "esrap@2.1.2": { + "integrity": "sha512-DgvlIQeowRNyvLPWW4PT7Gu13WznY288Du086E751mwwbsgr29ytBiYeLzAGIo0qk3Ujob0SDk8TiSaM5WQzNg==", "dependencies": [ "@jridgewell/sourcemap-codec" ] @@ -2312,8 +2315,8 @@ "picomatch" ] }, - "fetch-mock@12.5.4": { - "integrity": "sha512-zeECXue5losbXbbnHYzLDl0ZKLnuyRmLZ3auSJISoCnKiOGXNJA6nRiRa4qxI9pyQqeTgHL5d0Ryz+3CUliLOw==", + "fetch-mock@12.6.0": { + "integrity": "sha512-oAy0OqAvjAvduqCeWveBix7LLuDbARPqZZ8ERYtBcCURA3gy7EALA3XWq0tCNxsSg+RmmJqyaeeZlOCV9abv6w==", "dependencies": [ "@types/glob-to-regexp", "dequal", @@ -2422,8 +2425,8 @@ "is-stream" ] }, - "get-tsconfig@4.12.0": { - "integrity": "sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==", + "get-tsconfig@4.13.0": { + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", "dependencies": [ "resolve-pkg-maps" ] @@ -2498,8 +2501,8 @@ "highlight.js@10.7.3": { "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==" }, - "hono@4.9.10": { - "integrity": "sha512-AlI15ijFyKTXR7eHo7QK7OR4RoKIedZvBuRjO8iy4zrxvlY5oFCdiRG/V/lFJHCNXJ0k72ATgnyzx8Yqa5arug==" + "hono@4.10.4": { + "integrity": "sha512-YG/fo7zlU3KwrBL5vDpWKisLYiM+nVstBQqfr7gCPbSYURnNEP9BDxEMz8KfsDR9JX0lJWDRNc6nXX31v7ZEyg==" }, "hookable@5.5.3": { "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" @@ -2575,24 +2578,24 @@ "@inquirer/core@8.2.4" ] }, - "inquirer@12.10.0_@types+node@22.19.1": { + "inquirer@12.10.0_@types+node@22.19.0": { "integrity": "sha512-K/epfEnDBZj2Q3NMDcgXWZye3nhSPeoJnOh8lcKWrldw54UEZfS4EmAMsAsmVbl7qKi+vjAsy39Sz4fbgRMewg==", "dependencies": [ "@inquirer/ansi", - "@inquirer/core@10.3.2_@types+node@22.19.1", + "@inquirer/core@10.3.0_@types+node@22.19.0", "@inquirer/prompts", - "@inquirer/type@3.0.10_@types+node@22.19.1", - "@types/node@22.19.1", + "@inquirer/type@3.0.9_@types+node@22.19.0", + "@types/node@22.19.0", "mute-stream@2.0.0", "run-async", "rxjs" ], "optionalPeers": [ - "@types/node@22.19.1" + "@types/node@22.19.0" ] }, - "ioredis@5.8.1": { - "integrity": "sha512-Qho8TgIamqEPdgiMadJwzRMW3TudIg6vpg4YONokGDudy4eqRIJtDbVX72pfLBcWxvbn3qm/40TyGUObdW4tLQ==", + "ioredis@5.8.2": { + "integrity": "sha512-C6uC+kleiIMmjViJINWk80sOQw5lEzse1ZmvD+S/s8p8CWapftSaC+kocGTx6xrbrJ4WmYQGC08ffHLr6ToR6Q==", "dependencies": [ "@ioredis/commands", "cluster-key-slot", @@ -2760,8 +2763,8 @@ "koa-compose" ] }, - "koa@2.16.2": { - "integrity": "sha512-+CCssgnrWKx9aI3OeZwroa/ckG4JICxvIFnSiOUyl2Uv+UTI+xIw0FfFrWS7cQFpoePpr9o8csss7KzsTzNL8Q==", + "koa@2.16.3": { + "integrity": "sha512-zPPuIt+ku1iCpFBRwseMcPYQ1cJL8l60rSmKeOuGfOXyE6YnTBmf2aEFNL2HQGrD0cPcLO/t+v9RTgC+fwEh/g==", "dependencies": [ "accepts", "cache-content-type", @@ -2799,8 +2802,8 @@ "set-cookie-parser" ] }, - "load-esm@1.0.2": { - "integrity": "sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==" + "load-esm@1.0.3": { + "integrity": "sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==" }, "locate-character@3.0.0": { "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" @@ -2827,8 +2830,8 @@ "yallist" ] }, - "magic-string@0.30.19": { - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "magic-string@0.30.21": { + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dependencies": [ "@jridgewell/sourcemap-codec" ] @@ -2903,8 +2906,8 @@ "mimic-function@5.0.1": { "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==" }, - "miniflare@4.20251008.0": { - "integrity": "sha512-sKCNYNzXG6l8qg0Oo7y8WcDKcpbgw0qwZsxNpdZilFTR4EavRow2TlcwuPSVN99jqAjhz0M4VXvTdSGdtJ2VfQ==", + "miniflare@4.20251011.1": { + "integrity": "sha512-Qbw1Z8HTYM1adWl6FAtzhrj34/6dPRDPwdYOx21dkae8a/EaxbMzRIPbb4HKVGMVvtqbK1FaRCgDLVLolNzGHg==", "dependencies": [ "@cspotcode/source-map-support", "acorn@8.14.0", @@ -3087,9 +3090,10 @@ "pino-std-serializers@7.0.0": { "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==" }, - "pino@9.13.1": { - "integrity": "sha512-Szuj+ViDTjKPQYiKumGmEn3frdl+ZPSdosHyt9SnUevFosOkMY2b7ipxlEctNKPmMD/VibeBI+ZcZCJK+4DPuw==", + "pino@9.14.0": { + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", "dependencies": [ + "@pinojs/redact", "atomic-sleep", "on-exit-leak-free", "pino-abstract-transport", @@ -3098,7 +3102,6 @@ "quick-format-unescaped", "real-require", "safe-stable-stringify", - "slow-redact", "sonic-boom", "thread-stream" ], @@ -3118,8 +3121,8 @@ ], "bin": true }, - "pkijs@3.2.5": { - "integrity": "sha512-WX0la7n7CbnguuaIQoT4Fc0IJckPDOUldzOwlZ0nwpOcySS+Six/tXBdc0RX17J5o1To0SAr3xDJjDLsOfDFQA==", + "pkijs@3.3.2": { + "integrity": "sha512-sdhKKgWHsSMmVKp9GtvK4c5WJcfofEXakibwtwKpl0D/dq4kiamSEmuDka0rosWCxV9nOzw8f6F+Zf0M+Frpbg==", "dependencies": [ "@noble/hashes", "asn1js", @@ -3180,8 +3183,8 @@ "tslib" ] }, - "pvutils@1.1.3": { - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==" + "pvutils@1.1.5": { + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==" }, "qs@6.13.0": { "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", @@ -3303,7 +3306,7 @@ "rfdc@1.4.1": { "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" }, - "rolldown-plugin-dts@0.13.14_rolldown@1.0.0-beta.43": { + "rolldown-plugin-dts@0.13.14_rolldown@1.0.0-beta.45": { "integrity": "sha512-wjNhHZz9dlN6PTIXyizB6u/mAg1wEFMW9yw7imEVe3CxHSRnNHVyycIX0yDEOVJfDNISLPbkCIPEpFpizy5+PQ==", "dependencies": [ "@babel/generator", @@ -3317,12 +3320,11 @@ "rolldown" ] }, - "rolldown@1.0.0-beta.43": { - "integrity": "sha512-6RcqyRx0tY1MlRLnjXPp/849Rl/CPFhzpGGwNPEPjKwqBMqPq/Rbbkxasa8s0x+IkUk46ty4jazb5skZ/Vgdhw==", + "rolldown@1.0.0-beta.45": { + "integrity": "sha512-iMmuD72XXLf26Tqrv1cryNYLX6NNPLhZ3AmNkSf8+xda0H+yijjGJ+wVT9UdBUHOpKzq9RjKtQKRCWoEKQQBZQ==", "dependencies": [ "@oxc-project/types", - "@rolldown/pluginutils", - "ansis" + "@rolldown/pluginutils" ], "optionalDependencies": [ "@rolldown/binding-android-arm64", @@ -3342,8 +3344,8 @@ ], "bin": true }, - "rollup@4.52.4": { - "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", + "rollup@4.52.5": { + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", "dependencies": [ "@types/estree" ], @@ -3449,8 +3451,8 @@ "send" ] }, - "set-cookie-parser@2.7.1": { - "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==" + "set-cookie-parser@2.7.2": { + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==" }, "setimmediate@1.0.5": { "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" @@ -3557,9 +3559,6 @@ "totalist" ] }, - "slow-redact@0.3.2": { - "integrity": "sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw==" - }, "sonic-boom@4.2.0": { "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", "dependencies": [ @@ -3667,8 +3666,8 @@ "has-flag" ] }, - "svelte@5.39.12_acorn@8.15.0": { - "integrity": "sha512-CEzwxFuEycokU8K8CE/OuwVbmei+ivu2HvBGYIdASfMa1hCRSNr4RRkzNSvbAvu6h+BOig2CsZTAEY+WKvwZpA==", + "svelte@5.43.2_acorn@8.15.0": { + "integrity": "sha512-ro1umEzX8rT5JpCmlf0PPv7ncD8MdVob9e18bhwqTKNoLjS8kDvhVpaoYVPc+qMwDAOfcwJtyY7ZFSDbOaNPgA==", "dependencies": [ "@jridgewell/remapping", "@jridgewell/sourcemap-codec", @@ -3753,7 +3752,7 @@ "trim-lines@3.0.1": { "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==" }, - "tsdown@0.12.9_rolldown@1.0.0-beta.43": { + "tsdown@0.12.9_rolldown@1.0.0-beta.45": { "integrity": "sha512-MfrXm9PIlT3saovtWKf/gCJJ/NQCdE0SiREkdNC+9Qy6UHhdeDPxnkFaBD7xttVUmgp0yUHtGirpoLB+OVLuLA==", "dependencies": [ "ansis", @@ -3832,11 +3831,8 @@ "undici-types@6.21.0": { "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" }, - "undici-types@7.10.0": { - "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==" - }, - "undici-types@7.14.0": { - "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==" + "undici-types@7.16.0": { + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==" }, "undici@6.22.0": { "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==" @@ -3854,8 +3850,8 @@ "ufo" ] }, - "unist-util-is@6.0.0": { - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "unist-util-is@6.0.1": { + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "dependencies": [ "@types/unist" ] @@ -3872,8 +3868,8 @@ "@types/unist" ] }, - "unist-util-visit-parents@6.0.1": { - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "unist-util-visit-parents@6.0.2": { + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "dependencies": [ "@types/unist", "unist-util-is" @@ -3935,10 +3931,10 @@ "vfile-message" ] }, - "vite@7.1.9_@types+node@22.19.1_tsx@4.20.6_yaml@2.8.1_picomatch@4.0.3": { - "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==", + "vite@7.1.12_@types+node@22.19.0_tsx@4.20.6_yaml@2.8.1_picomatch@4.0.3": { + "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", "dependencies": [ - "@types/node@22.19.1", + "@types/node@22.19.0", "esbuild", "fdir", "picomatch", @@ -3952,13 +3948,13 @@ "fsevents" ], "optionalPeers": [ - "@types/node@22.19.1", + "@types/node@22.19.0", "tsx", "yaml" ], "bin": true }, - "vitefu@1.1.1_vite@7.1.9__@types+node@22.19.1__tsx@4.20.6__yaml@2.8.1__picomatch@4.0.3_@types+node@22.19.1_tsx@4.20.6_yaml@2.8.1": { + "vitefu@1.1.1_vite@7.1.12__@types+node@22.19.0__tsx@4.20.6__yaml@2.8.1__picomatch@4.0.3_@types+node@22.19.0_tsx@4.20.6_yaml@2.8.1": { "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", "dependencies": [ "vite" @@ -3983,8 +3979,8 @@ "webidl-conversions" ] }, - "workerd@1.20251008.0": { - "integrity": "sha512-HwaJmXO3M1r4S8x2ea2vy8Rw/y/38HRQuK/gNDRQ7w9cJXn6xSl1sIIqKCffULSUjul3wV3I3Nd/GfbmsRReEA==", + "workerd@1.20251011.0": { + "integrity": "sha512-Dq35TLPEJAw7BuYQMkN3p9rge34zWMU2Gnd4DSJFeVqld4+DAO2aPG7+We2dNIAyM97S8Y9BmHulbQ00E0HC7Q==", "optionalDependencies": [ "@cloudflare/workerd-darwin-64", "@cloudflare/workerd-darwin-arm64", @@ -3995,8 +3991,8 @@ "scripts": true, "bin": true }, - "wrangler@4.42.2_@cloudflare+workers-types@4.20251011.0_unenv@2.0.0-rc.21_workerd@1.20251008.0": { - "integrity": "sha512-1iTnbjB4F12KSP1zbfxQL495xarS+vdrZnulQP2SEcAxDTUGn7N9zk1O2WtFOc+Fhcgl+9/sdz/4AL9pF34Pwg==", + "wrangler@4.45.3_@cloudflare+workers-types@4.20251014.0_unenv@2.0.0-rc.21_workerd@1.20251011.0": { + "integrity": "sha512-0ddEA9t4HeBgSVTVTcqtBHl7Z5CorWZ8tGgTQCP5XuL+9E1TJRwS6t/zzG51Ruwjb17SZYCaLchoM8V629S8cw==", "dependencies": [ "@cloudflare/kv-asset-handler", "@cloudflare/unenv-preset", @@ -4109,249 +4105,6 @@ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==" } }, - "redirects": { - "https://esm.sh/@types/babel__helper-validator-identifier@~7.15.2/index.d.ts": "https://esm.sh/@types/babel__helper-validator-identifier@7.15.2/index.d.ts" - }, - "remote": { - "https://deno.land/std@0.216.0/assert/_constants.ts": "a271e8ef5a573f1df8e822a6eb9d09df064ad66a4390f21b3e31f820a38e0975", - "https://deno.land/std@0.216.0/assert/_diff.ts": "dcc63d94ca289aec80644030cf88ccbf7acaa6fbd7b0f22add93616b36593840", - "https://deno.land/std@0.216.0/assert/_format.ts": "0ba808961bf678437fb486b56405b6fefad2cf87b5809667c781ddee8c32aff4", - "https://deno.land/std@0.216.0/assert/assert.ts": "bec068b2fccdd434c138a555b19a2c2393b71dfaada02b7d568a01541e67cdc5", - "https://deno.land/std@0.216.0/assert/assert_almost_equals.ts": "8b96b7385cc117668b0720115eb6ee73d04c9bcb2f5d2344d674918c9113688f", - "https://deno.land/std@0.216.0/assert/assert_array_includes.ts": "1688d76317fd45b7e93ef9e2765f112fdf2b7c9821016cdfb380b9445374aed1", - "https://deno.land/std@0.216.0/assert/assert_equals.ts": "4497c56fe7d2993b0d447926702802fc0becb44e319079e8eca39b482ee01b4e", - "https://deno.land/std@0.216.0/assert/assert_exists.ts": "24a7bf965e634f909242cd09fbaf38bde6b791128ece08e33ab08586a7cc55c9", - "https://deno.land/std@0.216.0/assert/assert_false.ts": "6f382568e5128c0f855e5f7dbda8624c1ed9af4fcc33ef4a9afeeedcdce99769", - "https://deno.land/std@0.216.0/assert/assert_greater.ts": "4945cf5729f1a38874d7e589e0fe5cc5cd5abe5573ca2ddca9d3791aa891856c", - "https://deno.land/std@0.216.0/assert/assert_greater_or_equal.ts": "573ed8823283b8d94b7443eb69a849a3c369a8eb9666b2d1db50c33763a5d219", - "https://deno.land/std@0.216.0/assert/assert_instance_of.ts": "72dc1faff1e248692d873c89382fa1579dd7b53b56d52f37f9874a75b11ba444", - "https://deno.land/std@0.216.0/assert/assert_is_error.ts": "6596f2b5ba89ba2fe9b074f75e9318cda97a2381e59d476812e30077fbdb6ed2", - "https://deno.land/std@0.216.0/assert/assert_less.ts": "2b4b3fe7910f65f7be52212f19c3977ecb8ba5b2d6d0a296c83cde42920bb005", - "https://deno.land/std@0.216.0/assert/assert_less_or_equal.ts": "b93d212fe669fbde959e35b3437ac9a4468f2e6b77377e7b6ea2cfdd825d38a0", - "https://deno.land/std@0.216.0/assert/assert_match.ts": "ec2d9680ed3e7b9746ec57ec923a17eef6d476202f339ad91d22277d7f1d16e1", - "https://deno.land/std@0.216.0/assert/assert_not_equals.ts": "ac86413ab70ffb14fdfc41740ba579a983fe355ba0ce4a9ab685e6b8e7f6a250", - "https://deno.land/std@0.216.0/assert/assert_not_instance_of.ts": "8f720d92d83775c40b2542a8d76c60c2d4aeddaf8713c8d11df8984af2604931", - "https://deno.land/std@0.216.0/assert/assert_not_match.ts": "b4b7c77f146963e2b673c1ce4846473703409eb93f5ab0eb60f6e6f8aeffe39f", - "https://deno.land/std@0.216.0/assert/assert_not_strict_equals.ts": "da0b8ab60a45d5a9371088378e5313f624799470c3b54c76e8b8abeec40a77be", - "https://deno.land/std@0.216.0/assert/assert_object_match.ts": "e85e5eef62a56ce364c3afdd27978ccab979288a3e772e6855c270a7b118fa49", - "https://deno.land/std@0.216.0/assert/assert_rejects.ts": "e9e0c8d9c3e164c7ac962c37b3be50577c5a2010db107ed272c4c1afb1269f54", - "https://deno.land/std@0.216.0/assert/assert_strict_equals.ts": "0425a98f70badccb151644c902384c12771a93e65f8ff610244b8147b03a2366", - "https://deno.land/std@0.216.0/assert/assert_string_includes.ts": "dfb072a890167146f8e5bdd6fde887ce4657098e9f71f12716ef37f35fb6f4a7", - "https://deno.land/std@0.216.0/assert/assert_throws.ts": "edddd86b39606c342164b49ad88dd39a26e72a26655e07545d172f164b617fa7", - "https://deno.land/std@0.216.0/assert/assertion_error.ts": "9f689a101ee586c4ce92f52fa7ddd362e86434ffdf1f848e45987dc7689976b8", - "https://deno.land/std@0.216.0/assert/equal.ts": "fae5e8a52a11d3ac694bbe1a53e13a7969e3f60791262312e91a3e741ae519e2", - "https://deno.land/std@0.216.0/assert/fail.ts": "f310e51992bac8e54f5fd8e44d098638434b2edb802383690e0d7a9be1979f1c", - "https://deno.land/std@0.216.0/assert/mod.ts": "325df8c0683ad83a873b9691aa66b812d6275fc9fec0b2d180ac68a2c5efed3b", - "https://deno.land/std@0.216.0/assert/unimplemented.ts": "47ca67d1c6dc53abd0bd729b71a31e0825fc452dbcd4fde4ca06789d5644e7fd", - "https://deno.land/std@0.216.0/assert/unreachable.ts": "38cfecb95d8b06906022d2f9474794fca4161a994f83354fd079cac9032b5145", - "https://deno.land/std@0.216.0/async/delay.ts": "8e1d18fe8b28ff95885e2bc54eccec1713f57f756053576d8228e6ca110793ad", - "https://deno.land/std@0.216.0/datetime/constants.ts": "5c198b3b47fbcc4d913e61dcae1c37e053937affc2c9a6a5ad7e5473bab3e4a6", - "https://deno.land/std@0.216.0/encoding/_util.ts": "beacef316c1255da9bc8e95afb1fa56ed69baef919c88dc06ae6cb7a6103d376", - "https://deno.land/std@0.216.0/encoding/hex.ts": "4d47d3b25103cf81a2ed38f54b394d39a77b63338e1eaa04b70c614cb45ec2e6", - "https://deno.land/std@0.216.0/flags/mod.ts": "9f13f3a49c54618277ac49195af934f1c7d235731bcf80fd33b8b234e6839ce9", - "https://deno.land/std@0.216.0/fmt/colors.ts": "d239d84620b921ea520125d778947881f62c50e78deef2657073840b8af9559a", - "https://deno.land/std@0.216.0/fs/_create_walk_entry.ts": "5d9d2aaec05bcf09a06748b1684224d33eba7a4de24cf4cf5599991ca6b5b412", - "https://deno.land/std@0.216.0/fs/_get_file_info_type.ts": "da7bec18a7661dba360a1db475b826b18977582ce6fc9b25f3d4ee0403fe8cbd", - "https://deno.land/std@0.216.0/fs/_is_same_path.ts": "709c95868345fea051c58b9e96af95cff94e6ae98dfcff2b66dee0c212c4221f", - "https://deno.land/std@0.216.0/fs/_is_subdir.ts": "c68b309d46cc8568ed83c000f608a61bbdba0943b7524e7a30f9e450cf67eecd", - "https://deno.land/std@0.216.0/fs/_to_path_string.ts": "29bfc9c6c112254961d75cbf6ba814d6de5349767818eb93090cecfa9665591e", - "https://deno.land/std@0.216.0/fs/copy.ts": "dc0f68c4b6c3b090bfdb909387e309f6169b746bd713927c9507c9ef545d71f6", - "https://deno.land/std@0.216.0/fs/empty_dir.ts": "4f01e6d56e2aa8d90ad60f20bc25601f516b00f6c3044cdf6863a058791d91aa", - "https://deno.land/std@0.216.0/fs/ensure_dir.ts": "dffff68de0d10799b5aa9e39dec4e327e12bbd29e762292193684542648c4aeb", - "https://deno.land/std@0.216.0/fs/ensure_file.ts": "ac5cfde94786b0284d2c8e9f7f9425269bea1b2140612b4aea1f20b508870f59", - "https://deno.land/std@0.216.0/fs/ensure_link.ts": "d42af2edefeaa9817873ec6e46dc5d209ac4d744f8c69c5ecc2dffade78465b6", - "https://deno.land/std@0.216.0/fs/ensure_symlink.ts": "aee3f1655700f60090b4a3037f5b6c07ab37c36807cccad746ce89987719e6d2", - "https://deno.land/std@0.216.0/fs/eol.ts": "c9807291f78361d49fd986a9be04654610c615c5e2ec63d748976197d30ff206", - "https://deno.land/std@0.216.0/fs/exists.ts": "d2757ef764eaf5c6c5af7228e8447db2de42ab084a2dae540097f905723d83f5", - "https://deno.land/std@0.216.0/fs/expand_glob.ts": "a1ce02b05ed7b96985b0665067c9f1018f3f2ade7ee0fb0d629231050260b158", - "https://deno.land/std@0.216.0/fs/mod.ts": "107f5afa4424c2d3ce2f7e9266173198da30302c69af662c720115fe504dc5ee", - "https://deno.land/std@0.216.0/fs/move.ts": "39e0d7ccb88a566d20b949712020e766b15ef1ec19159573d11f949bd677909c", - "https://deno.land/std@0.216.0/fs/walk.ts": "78e1d01a9f75715614bf8d6e58bd77d9fafb1222c41194e607cd3849d7a0e771", - "https://deno.land/std@0.216.0/http/server.ts": "6dce295abc169d0956ae00432441331b3425afad4d79e8b3475739be2f04d614", - "https://deno.land/std@0.216.0/http/status.ts": "ed61b4882af2514a81aefd3245e8df4c47b9a8e54929a903577643d2d1ebf514", - "https://deno.land/std@0.216.0/json/common.ts": "33f1a4f39a45e2f9f357823fd0b5cf88b63fb4784b8c9a28f8120f70a20b23e9", - "https://deno.land/std@0.216.0/jsonc/mod.ts": "82722888823e1af5a8f7918bf810ea581f68081064d529218533acad6cb7c2bc", - "https://deno.land/std@0.216.0/jsonc/parse.ts": "747a0753289fdbfcb9cb86b709b56348c98abc107fbb0a7f350b87af4425a76a", - "https://deno.land/std@0.216.0/media_types/_db.ts": "1d695d9fe1c785e523d6de7191b33f33ecc7866db77358a4f966221cca56e2f9", - "https://deno.land/std@0.216.0/media_types/_util.ts": "afd54920a8a81add64248897898d3f30ca414a8803fe0c4e6d2893a3f6bd32b0", - "https://deno.land/std@0.216.0/media_types/content_type.ts": "ed3f2e1f243b418ad3f441edc95fd92efbadb0f9bde36219c7564c67f9639513", - "https://deno.land/std@0.216.0/media_types/format_media_type.ts": "ffef4718afa2489530cb94021bb865a466eb02037609f7e82899c017959d288a", - "https://deno.land/std@0.216.0/media_types/get_charset.ts": "bce5c0343c14590516cbfa1a3e80891d9a7a53bc9b4a9010061cc4f879e18f6c", - "https://deno.land/std@0.216.0/media_types/parse_media_type.ts": "487f000a38c230ccbac25420a50f600862e06796d0eee19d19631b9e84ee9654", - "https://deno.land/std@0.216.0/media_types/type_by_extension.ts": "bf4e3f5d6b58b624d5daa01cbb8b1e86d9939940a77e7c26e796a075b60ec73b", - "https://deno.land/std@0.216.0/media_types/vendor/mime-db.v1.52.0.ts": "0218d2c7d900e8cd6fa4a866e0c387712af4af9a1bae55d6b2546c73d273a1e6", - "https://deno.land/std@0.216.0/path/_common/assert_path.ts": "2ca275f36ac1788b2acb60fb2b79cb06027198bc2ba6fb7e163efaedde98c297", - "https://deno.land/std@0.216.0/path/_common/basename.ts": "569744855bc8445f3a56087fd2aed56bdad39da971a8d92b138c9913aecc5fa2", - "https://deno.land/std@0.216.0/path/_common/common.ts": "6157c7ec1f4db2b4a9a187efd6ce76dcaf1e61cfd49f87e40d4ea102818df031", - "https://deno.land/std@0.216.0/path/_common/constants.ts": "dc5f8057159f4b48cd304eb3027e42f1148cf4df1fb4240774d3492b5d12ac0c", - "https://deno.land/std@0.216.0/path/_common/dirname.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", - "https://deno.land/std@0.216.0/path/_common/format.ts": "92500e91ea5de21c97f5fe91e178bae62af524b72d5fcd246d6d60ae4bcada8b", - "https://deno.land/std@0.216.0/path/_common/from_file_url.ts": "d672bdeebc11bf80e99bf266f886c70963107bdd31134c4e249eef51133ceccf", - "https://deno.land/std@0.216.0/path/_common/glob_to_reg_exp.ts": "2007aa87bed6eb2c8ae8381adcc3125027543d9ec347713c1ad2c68427330770", - "https://deno.land/std@0.216.0/path/_common/normalize.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", - "https://deno.land/std@0.216.0/path/_common/normalize_string.ts": "dfdf657a1b1a7db7999f7c575ee7e6b0551d9c20f19486c6c3f5ff428384c965", - "https://deno.land/std@0.216.0/path/_common/relative.ts": "faa2753d9b32320ed4ada0733261e3357c186e5705678d9dd08b97527deae607", - "https://deno.land/std@0.216.0/path/_common/strip_trailing_separators.ts": "7024a93447efcdcfeaa9339a98fa63ef9d53de363f1fbe9858970f1bba02655a", - "https://deno.land/std@0.216.0/path/_common/to_file_url.ts": "7f76adbc83ece1bba173e6e98a27c647712cab773d3f8cbe0398b74afc817883", - "https://deno.land/std@0.216.0/path/_interface.ts": "a1419fcf45c0ceb8acdccc94394e3e94f99e18cfd32d509aab514c8841799600", - "https://deno.land/std@0.216.0/path/_os.ts": "8fb9b90fb6b753bd8c77cfd8a33c2ff6c5f5bc185f50de8ca4ac6a05710b2c15", - "https://deno.land/std@0.216.0/path/basename.ts": "5d341aadb7ada266e2280561692c165771d071c98746fcb66da928870cd47668", - "https://deno.land/std@0.216.0/path/common.ts": "03e52e22882402c986fe97ca3b5bb4263c2aa811c515ce84584b23bac4cc2643", - "https://deno.land/std@0.216.0/path/constants.ts": "0c206169ca104938ede9da48ac952de288f23343304a1c3cb6ec7625e7325f36", - "https://deno.land/std@0.216.0/path/dirname.ts": "85bd955bf31d62c9aafdd7ff561c4b5fb587d11a9a5a45e2b01aedffa4238a7c", - "https://deno.land/std@0.216.0/path/extname.ts": "593303db8ae8c865cbd9ceec6e55d4b9ac5410c1e276bfd3131916591b954441", - "https://deno.land/std@0.216.0/path/format.ts": "98fad25f1af7b96a48efb5b67378fcc8ed77be895df8b9c733b86411632162af", - "https://deno.land/std@0.216.0/path/from_file_url.ts": "911833ae4fd10a1c84f6271f36151ab785955849117dc48c6e43b929504ee069", - "https://deno.land/std@0.216.0/path/glob_to_regexp.ts": "5e51f78a0248c75464bf1d49173de3ec2c032880a530578e56b3fed2a57e69d3", - "https://deno.land/std@0.216.0/path/is_absolute.ts": "4791afc8bfd0c87f0526eaa616b0d16e7b3ab6a65b62942e50eac68de4ef67d7", - "https://deno.land/std@0.216.0/path/is_glob.ts": "a65f6195d3058c3050ab905705891b412ff942a292bcbaa1a807a74439a14141", - "https://deno.land/std@0.216.0/path/join.ts": "ae2ec5ca44c7e84a235fd532e4a0116bfb1f2368b394db1c4fb75e3c0f26a33a", - "https://deno.land/std@0.216.0/path/join_globs.ts": "5b3bf248b93247194f94fa6947b612ab9d3abd571ca8386cf7789038545e54a0", - "https://deno.land/std@0.216.0/path/mod.ts": "6f856db94f6a72fc2cf69e0a85eb523aee6a3cd274470717e96f4bee0c9fe329", - "https://deno.land/std@0.216.0/path/normalize.ts": "4155743ccceeed319b350c1e62e931600272fad8ad00c417b91df093867a8352", - "https://deno.land/std@0.216.0/path/normalize_glob.ts": "cc89a77a7d3b1d01053b9dcd59462b75482b11e9068ae6c754b5cf5d794b374f", - "https://deno.land/std@0.216.0/path/parse.ts": "65e8e285f1a63b714e19ef24b68f56e76934c3df0b6e65fd440d3991f4f8aefb", - "https://deno.land/std@0.216.0/path/posix/_util.ts": "1e3937da30f080bfc99fe45d7ed23c47dd8585c5e473b2d771380d3a6937cf9d", - "https://deno.land/std@0.216.0/path/posix/basename.ts": "39ee27a29f1f35935d3603ccf01d53f3d6e0c5d4d0f84421e65bd1afeff42843", - "https://deno.land/std@0.216.0/path/posix/common.ts": "26f60ccc8b2cac3e1613000c23ac5a7d392715d479e5be413473a37903a2b5d4", - "https://deno.land/std@0.216.0/path/posix/constants.ts": "93481efb98cdffa4c719c22a0182b994e5a6aed3047e1962f6c2c75b7592bef1", - "https://deno.land/std@0.216.0/path/posix/dirname.ts": "6535d2bdd566118963537b9dda8867ba9e2a361015540dc91f5afbb65c0cce8b", - "https://deno.land/std@0.216.0/path/posix/extname.ts": "8d36ae0082063c5e1191639699e6f77d3acf501600a3d87b74943f0ae5327427", - "https://deno.land/std@0.216.0/path/posix/format.ts": "185e9ee2091a42dd39e2a3b8e4925370ee8407572cee1ae52838aed96310c5c1", - "https://deno.land/std@0.216.0/path/posix/from_file_url.ts": "951aee3a2c46fd0ed488899d024c6352b59154c70552e90885ed0c2ab699bc40", - "https://deno.land/std@0.216.0/path/posix/glob_to_regexp.ts": "54d3ff40f309e3732ab6e5b19d7111d2d415248bcd35b67a99defcbc1972e697", - "https://deno.land/std@0.216.0/path/posix/is_absolute.ts": "cebe561ad0ae294f0ce0365a1879dcfca8abd872821519b4fcc8d8967f888ede", - "https://deno.land/std@0.216.0/path/posix/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", - "https://deno.land/std@0.216.0/path/posix/join.ts": "aef88d5fa3650f7516730865dbb951594d1a955b785e2450dbee93b8e32694f3", - "https://deno.land/std@0.216.0/path/posix/join_globs.ts": "f6e2619c196b82d8fd67ba2cf680e5b44461f38bdfeec26d7b3f55bd92a85988", - "https://deno.land/std@0.216.0/path/posix/mod.ts": "2301fc1c54a28b349e20656f68a85f75befa0ee9b6cd75bfac3da5aca9c3f604", - "https://deno.land/std@0.216.0/path/posix/normalize.ts": "baeb49816a8299f90a0237d214cef46f00ba3e95c0d2ceb74205a6a584b58a91", - "https://deno.land/std@0.216.0/path/posix/normalize_glob.ts": "41b477068deb832df7f51d6e2b3c0bc274d20919e20c5240d785ba535572d3d0", - "https://deno.land/std@0.216.0/path/posix/parse.ts": "d5bac4eb21262ab168eead7e2196cb862940c84cee572eafedd12a0d34adc8fb", - "https://deno.land/std@0.216.0/path/posix/relative.ts": "3907d6eda41f0ff723d336125a1ad4349112cd4d48f693859980314d5b9da31c", - "https://deno.land/std@0.216.0/path/posix/resolve.ts": "bac20d9921beebbbb2b73706683b518b1d0c1b1da514140cee409e90d6b2913a", - "https://deno.land/std@0.216.0/path/posix/to_file_url.ts": "7aa752ba66a35049e0e4a4be5a0a31ac6b645257d2e031142abb1854de250aaf", - "https://deno.land/std@0.216.0/path/posix/to_namespaced_path.ts": "28b216b3c76f892a4dca9734ff1cc0045d135532bfd9c435ae4858bfa5a2ebf0", - "https://deno.land/std@0.216.0/path/relative.ts": "ab739d727180ed8727e34ed71d976912461d98e2b76de3d3de834c1066667add", - "https://deno.land/std@0.216.0/path/resolve.ts": "a6f977bdb4272e79d8d0ed4333e3d71367cc3926acf15ac271f1d059c8494d8d", - "https://deno.land/std@0.216.0/path/to_file_url.ts": "88f049b769bce411e2d2db5bd9e6fd9a185a5fbd6b9f5ad8f52bef517c4ece1b", - "https://deno.land/std@0.216.0/path/to_namespaced_path.ts": "b706a4103b104cfadc09600a5f838c2ba94dbcdb642344557122dda444526e40", - "https://deno.land/std@0.216.0/path/windows/_util.ts": "d5f47363e5293fced22c984550d5e70e98e266cc3f31769e1710511803d04808", - "https://deno.land/std@0.216.0/path/windows/basename.ts": "e2dbf31d1d6385bfab1ce38c333aa290b6d7ae9e0ecb8234a654e583cf22f8fe", - "https://deno.land/std@0.216.0/path/windows/common.ts": "26f60ccc8b2cac3e1613000c23ac5a7d392715d479e5be413473a37903a2b5d4", - "https://deno.land/std@0.216.0/path/windows/constants.ts": "5afaac0a1f67b68b0a380a4ef391bf59feb55856aa8c60dfc01bd3b6abb813f5", - "https://deno.land/std@0.216.0/path/windows/dirname.ts": "33e421be5a5558a1346a48e74c330b8e560be7424ed7684ea03c12c21b627bc9", - "https://deno.land/std@0.216.0/path/windows/extname.ts": "165a61b00d781257fda1e9606a48c78b06815385e7d703232548dbfc95346bef", - "https://deno.land/std@0.216.0/path/windows/format.ts": "bbb5ecf379305b472b1082cd2fdc010e44a0020030414974d6029be9ad52aeb6", - "https://deno.land/std@0.216.0/path/windows/from_file_url.ts": "ced2d587b6dff18f963f269d745c4a599cf82b0c4007356bd957cb4cb52efc01", - "https://deno.land/std@0.216.0/path/windows/glob_to_regexp.ts": "6dcd1242bd8907aa9660cbdd7c93446e6927b201112b0cba37ca5d80f81be51b", - "https://deno.land/std@0.216.0/path/windows/is_absolute.ts": "4a8f6853f8598cf91a835f41abed42112cebab09478b072e4beb00ec81f8ca8a", - "https://deno.land/std@0.216.0/path/windows/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", - "https://deno.land/std@0.216.0/path/windows/join.ts": "e0b3356615c1a75c56ebb6a7311157911659e11fd533d80d724800126b761ac3", - "https://deno.land/std@0.216.0/path/windows/join_globs.ts": "f6e2619c196b82d8fd67ba2cf680e5b44461f38bdfeec26d7b3f55bd92a85988", - "https://deno.land/std@0.216.0/path/windows/mod.ts": "2301fc1c54a28b349e20656f68a85f75befa0ee9b6cd75bfac3da5aca9c3f604", - "https://deno.land/std@0.216.0/path/windows/normalize.ts": "78126170ab917f0ca355a9af9e65ad6bfa5be14d574c5fb09bb1920f52577780", - "https://deno.land/std@0.216.0/path/windows/normalize_glob.ts": "c57c186b0785ba5320a85e573c264f42c46eb1d0a4a78611f4791a7083baaa17", - "https://deno.land/std@0.216.0/path/windows/parse.ts": "b9239edd892a06a06625c1b58425e199f018ce5649ace024d144495c984da734", - "https://deno.land/std@0.216.0/path/windows/relative.ts": "3e1abc7977ee6cc0db2730d1f9cb38be87b0ce4806759d271a70e4997fc638d7", - "https://deno.land/std@0.216.0/path/windows/resolve.ts": "75b2e3e1238d840782cee3d8864d82bfaa593c7af8b22f19c6422cf82f330ab3", - "https://deno.land/std@0.216.0/path/windows/to_file_url.ts": "1cd63fd35ec8d1370feaa4752eccc4cc05ea5362a878be8dc7db733650995484", - "https://deno.land/std@0.216.0/path/windows/to_namespaced_path.ts": "4ffa4fb6fae321448d5fe810b3ca741d84df4d7897e61ee29be961a6aac89a4c", - "https://deno.land/std@0.216.0/regexp/escape.ts": "57303d6c9c6aa058d9a79a3c70113c545391639a87e9a18428220c1bad407549", - "https://deno.land/std@0.216.0/semver/_comparator_format.ts": "b5a56b999670c0b3a3e8ad437ca0fafbfce0e973bba6769979d7665e318e8b6c", - "https://deno.land/std@0.216.0/semver/_comparator_intersects.ts": "65b744d76b3be4ed91afd149754f530681032890d32fd65d02faf8ef96491cb7", - "https://deno.land/std@0.216.0/semver/_comparator_max.ts": "c3a97d5b43b9104afa3687780500ef79b69ae5107cee2359004f80ea48969c7d", - "https://deno.land/std@0.216.0/semver/_comparator_min.ts": "080a9939b177d64904e1772da02dc4673f9cd1b3c9ae1a5c534cfdf4bb3ee9af", - "https://deno.land/std@0.216.0/semver/_constants.ts": "90879e4ea94a34c49c8ecea3d9c06e13e61ecb7caca80c8f289139440ca9835a", - "https://deno.land/std@0.216.0/semver/_is_comparator.ts": "d032762a6993b7cd3e4243cbeded0eeab70773dff960d4e92af8770550eea7b6", - "https://deno.land/std@0.216.0/semver/_parse_comparator.ts": "2dfa7f08da84038f8e2c50d629a329b2870a096791fd1f299a00de3bb547c34a", - "https://deno.land/std@0.216.0/semver/_shared.ts": "8d44684775cde4a64bd6bdb99b51f3bc59ed65f10af78ca136cc2eab3f6716f1", - "https://deno.land/std@0.216.0/semver/can_parse.ts": "d4a26f74be078f3ab10293b07bf022021a2f362b3e21b58422c214e7268110b2", - "https://deno.land/std@0.216.0/semver/compare.ts": "e8871844a35cc8fe16e883c16e5237e06a93aa4830ae10d06501abe63586fc57", - "https://deno.land/std@0.216.0/semver/constants.ts": "04c8625428552e967c85c59e80766441418839f7a94c50c652c6a9d83b0f3ef1", - "https://deno.land/std@0.216.0/semver/difference.ts": "be4f01b7745406408a16b708185a48c1c652cc87e0244b12a5ca75c5585db668", - "https://deno.land/std@0.216.0/semver/equals.ts": "8b9b18260c9a55feee9d3f9250fba345be922380f2e8f8009e455c394ce5e81d", - "https://deno.land/std@0.216.0/semver/format.ts": "26d3a357ac5abd73dee0fe7dbbac6107fbdce0a844370c7b1bcb673c92e46bf6", - "https://deno.land/std@0.216.0/semver/format_range.ts": "ee96cc1f3002cfb62b821477f1a90374e6c021ec13045c34a0620021b1d862af", - "https://deno.land/std@0.216.0/semver/greater_or_equal.ts": "89c26f68070896944676eb9704cbb617febc6ed693720282741d6859c3d1fe80", - "https://deno.land/std@0.216.0/semver/greater_than.ts": "d8c4a227cd28ea80a1de9c80215d7f3f95786fe1b196f0cb5ec91d6567adad27", - "https://deno.land/std@0.216.0/semver/gtr.ts": "1101ecf6f427de9ba6348860f312c15b55f9301f97d2e34bd9e57957184574e9", - "https://deno.land/std@0.216.0/semver/increment.ts": "427a043be71d6481e45c1a3939b955e800924d70779cb297b872d9cbf9f0e46d", - "https://deno.land/std@0.216.0/semver/is_range.ts": "4cea4096436ea02555d38cc758effd978ca77d8ae63d8db15f2910b1ff04aec2", - "https://deno.land/std@0.216.0/semver/is_semver.ts": "57914027d6141e593eb04418aaabbfd6f4562a1c53c6c33a1743fa50ada8d849", - "https://deno.land/std@0.216.0/semver/less_or_equal.ts": "7dbf8190f37f3281048c30cf11e072a7af18685534ae88d295baa170b485bd90", - "https://deno.land/std@0.216.0/semver/less_than.ts": "b0c7902c54cecadcc7c1c80afc2f6a0f1bf0b3f53c8d2bfd11f01a3a414cccfe", - "https://deno.land/std@0.216.0/semver/ltr.ts": "4c147830444c9020eccc17cd8d4d9aced5b0f6cfb3c8b99fb9cdcca8fe90356f", - "https://deno.land/std@0.216.0/semver/max_satisfying.ts": "03e5182a7424c308ddbb410e4b927da0dabc4e07d4b5a72f7e9b26fb18a02152", - "https://deno.land/std@0.216.0/semver/min_satisfying.ts": "b6fadc9af17278289481c416e1eb135614f88063f4fc2b7b72b43eb3baa2f08f", - "https://deno.land/std@0.216.0/semver/mod.ts": "6fcb9531909763993c70e1278b898cc9dd1373d6f4cbcdc41be4fc629e9e2052", - "https://deno.land/std@0.216.0/semver/not_equals.ts": "17147a6f68b9d14f4643c1e2150378ccf6954710309f9618f75b411752a8e13d", - "https://deno.land/std@0.216.0/semver/parse.ts": "2ba215c9aa3c71be753570724cfad75cc81972f0026dc81836ea3d1986112066", - "https://deno.land/std@0.216.0/semver/parse_range.ts": "7ce841031e14af27c9abcc10878efe60135de59c935e311d671a91ffc48bbc46", - "https://deno.land/std@0.216.0/semver/range_intersects.ts": "28de545143652cffa447e859ad087d75e74c009762df0ebc2f03cca2eed9831d", - "https://deno.land/std@0.216.0/semver/range_max.ts": "b994695e885045518e1655a2c519d726003c7381b3e64be2090663378a6bfe20", - "https://deno.land/std@0.216.0/semver/range_min.ts": "269ace0521e055fe10ef8c3d342ddf2cf3eb9c53a8efb2eecac198085cc789c3", - "https://deno.land/std@0.216.0/semver/reverse_sort.ts": "98316b5c960cb0608df949d563328c7696d6b4f76ccea22a08974d27c1969893", - "https://deno.land/std@0.216.0/semver/test_range.ts": "6262307357a8b413dc34546c8401392ed2bc7a5e4ddd999195a56a0fe4fc1d4a", - "https://deno.land/std@0.216.0/semver/try_parse.ts": "a2639ec588c374331d5f655bfbdf8d5a2f2cc704c8b56ac94cd077944de150c7", - "https://deno.land/std@0.216.0/semver/try_parse_range.ts": "239e0d711c5745da8c4dcda3c0797b4b5a83bfe494a51d3a0f005472cdc7b016", - "https://deno.land/std@0.216.0/semver/types.ts": "8ed52c8cfc59e249a0dbab597d8c31bcf10405dcbe9714585055ea02252ae0d0", - "https://deno.land/std@0.216.0/testing/snapshot.ts": "35ca1c8e8bfb98d7b7e794f1b7be8d992483fcff572540e41396f22a5bddb944", - "https://deno.land/x/esbuild@v0.20.2/mod.js": "67c608ee283233f5d0faa322b887356857c547a8e6a00981f798b2cd38e02436", - "https://deno.land/x/esbuild@v0.20.2/wasm.js": "5a887c1e38ad1056af11c58d45b6084d33bd33a62afa480d805801739370eed0", - "https://deno.land/x/fresh@1.7.3/dev.ts": "720dd3a64b62b852db7b6ae471c246c5c605cf4a3091c4cbc802790f36d43e4c", - "https://deno.land/x/fresh@1.7.3/runtime.ts": "49f4f70c24d14c5d5e112a671ef0314e438e5cd83eacb4f75c6db2fbdc22b540", - "https://deno.land/x/fresh@1.7.3/server.ts": "d5817615a3ac822d422627f2cd6f850a31e11f7e73b328a79807f722e6519bac", - "https://deno.land/x/fresh@1.7.3/src/build/aot_snapshot.ts": "4ac6330e5325dd9411fa2a46e97bb289f910fde4be82dc349d3e2b4bb1a7c07d", - "https://deno.land/x/fresh@1.7.3/src/build/deps.ts": "03f73580f7e1ccf2027cb45357bfb82c73c3971876680ea8b44666bcbcd1a9f0", - "https://deno.land/x/fresh@1.7.3/src/build/esbuild.ts": "fdad9cc58f0ead0f954faad4a3c6b07da312acbe3306da742ba083ddb666d4b3", - "https://deno.land/x/fresh@1.7.3/src/build/mod.ts": "b9d1695a86746ac3a1c52f0e07e723faa2310d1dfd109b9a2eebab6727c4702b", - "https://deno.land/x/fresh@1.7.3/src/constants.ts": "4795d194b6c6b95f0e876c0a997fbaf57f94cfe253442c5819f95410870b79b3", - "https://deno.land/x/fresh@1.7.3/src/dev/build.ts": "9aaf84a781ee4d11d73ec549425f273fe8339812fdd8f726e1ec1ba61bdf0e9d", - "https://deno.land/x/fresh@1.7.3/src/dev/deps.ts": "93af624becfb2d8497e3d7ef0cf5ef48df61495dc5951b5f922c6a129a9fb75c", - "https://deno.land/x/fresh@1.7.3/src/dev/dev_command.ts": "3e3dcc80180faf8868d44d892ddfa8c5ad06033e4d94c0934302e157db1de63d", - "https://deno.land/x/fresh@1.7.3/src/dev/error.ts": "21a38d240c00279662e6adde41367f1da0ae7e2836d993f818ea94aabab53e7b", - "https://deno.land/x/fresh@1.7.3/src/dev/manifest.ts": "18911c84ee422799faf7dff2eeed75c7c9670ee26a01d0a33ab3b2aba1ba0381", - "https://deno.land/x/fresh@1.7.3/src/dev/mod.ts": "d44f3063d157bce53ba534d37b7ff8f262c379ab75229bc63d06c47c67b6b7e6", - "https://deno.land/x/fresh@1.7.3/src/dev/update_check.ts": "0b8e4659b49e3a951c684b7faf66be7428948c3e7d492d37397f9a485874515a", - "https://deno.land/x/fresh@1.7.3/src/runtime/Partial.tsx": "92e16fa7edf37dc8e254024a5410ea2c8986804a6ddf911af4d30209dff80a22", - "https://deno.land/x/fresh@1.7.3/src/runtime/active_url.ts": "c718797b11189c7e2c86569355d55056148907121e958e00f71c56593aecc329", - "https://deno.land/x/fresh@1.7.3/src/runtime/build_id.ts": "8376e70e42ce456dfa6932c638409d2ef1bca4833b4ceba0bf74510080a7f976", - "https://deno.land/x/fresh@1.7.3/src/runtime/csp.ts": "9ee900e9b0b786057b1009da5976298c202d1b86d1f1e4d2510bde5f06530ac9", - "https://deno.land/x/fresh@1.7.3/src/runtime/deserializer.ts": "1b83e75fa61c48b074ea121f33647d1ed15c68fa2f2a11b0a7f7a12cd38af627", - "https://deno.land/x/fresh@1.7.3/src/runtime/head.ts": "0f9932874497ab6e57ed1ba01d549e843523df4a5d36ef97460e7a43e3132fdc", - "https://deno.land/x/fresh@1.7.3/src/runtime/utils.ts": "4f40630c308e8ea7d53860687905caf1a2f2a46ad8692f24e905a8e996b584c3", - "https://deno.land/x/fresh@1.7.3/src/server/boot.ts": "3a574c4baa6120f6770f419af6d8d6d5ae32c8e1bdddf2bb14cb258ba18ac62f", - "https://deno.land/x/fresh@1.7.3/src/server/build_id.ts": "82d9cb985de6b1e38c3108e5a00667b16e80eedc145d73835d6b44349ebe6389", - "https://deno.land/x/fresh@1.7.3/src/server/code_frame.ts": "fac505f138fbd1bb260030122b87aeb2f5b5e54018e3066e105c669c686cc373", - "https://deno.land/x/fresh@1.7.3/src/server/compose.ts": "490aa1a7d540cc02bd4a184bea03eb2370aa34d93fe5a6ae1f31e2086eef4e76", - "https://deno.land/x/fresh@1.7.3/src/server/config.ts": "a5d0545d18c68d01770a4eb321d2fc85081ad7992ae63b1497f0b92ee122410a", - "https://deno.land/x/fresh@1.7.3/src/server/constants.ts": "e75a7f7b14185b6f85747613591348313200fe8e218cb473b1da9db941ee68d1", - "https://deno.land/x/fresh@1.7.3/src/server/context.ts": "1211da93ab80bf148892f0322df795e07212ea33ba361a2053e22cae3b5b54b3", - "https://deno.land/x/fresh@1.7.3/src/server/default_error_page.tsx": "094ad8d52d31f99172a606d0a0d8236604a1f9bb6d1f928d0d466d55b36dae70", - "https://deno.land/x/fresh@1.7.3/src/server/defines.ts": "f518ff10e499d4543bb9231f55026f26be2507eaccb072aafab93c8cc0bc3adc", - "https://deno.land/x/fresh@1.7.3/src/server/deps.ts": "efa2ddf6a21457839e42b6a69eca0c12a22a0bf3a6dd140b58abfe54e66328e8", - "https://deno.land/x/fresh@1.7.3/src/server/error_overlay.tsx": "e6ab4cef0ea812a1e1f32ee9116c61f64db8466d46e228acbb953215f4517d9c", - "https://deno.land/x/fresh@1.7.3/src/server/fs_extract.ts": "4dda675f03f0397310e4e6d4a57f3bf907db8a61a1a65423e67855daf5b9b36e", - "https://deno.land/x/fresh@1.7.3/src/server/htmlescape.ts": "834ac7d0caa9fc38dffd9b8613fb47aeecd4f22d5d70c51d4b20a310c085835c", - "https://deno.land/x/fresh@1.7.3/src/server/init_safe_deps.ts": "8c74d8708986d156126355b0935a1915069bfdc389ccabd3d2d72d1c9e04025c", - "https://deno.land/x/fresh@1.7.3/src/server/mod.ts": "6cee56e234f6bc19f62f3b6c0d287dc7b9632fcbfb8f56dde1d81423532d65c4", - "https://deno.land/x/fresh@1.7.3/src/server/render.ts": "b89387eb20c91969ace2de27b6c462f4e42c040d37b68440fe374e5cea9ea794", - "https://deno.land/x/fresh@1.7.3/src/server/rendering/fresh_tags.tsx": "5f1238e465d9ad94aebdf5e3701f2b9da3c944d8c5cc4dc8005ff1418b164989", - "https://deno.land/x/fresh@1.7.3/src/server/rendering/preact_hooks.ts": "db1a1ad7e4fbdac19b0758789ba7700531c214d531e1d03264b81a73beab05b5", - "https://deno.land/x/fresh@1.7.3/src/server/rendering/state.ts": "5e0c3a60964596cc28c1804545eae323cbc92eec9ce8cb0932d5168a6d1f33e9", - "https://deno.land/x/fresh@1.7.3/src/server/rendering/template.tsx": "bd1bc8edb054caac22043117f254927e8413e04cd1897009a2214ab374a1be19", - "https://deno.land/x/fresh@1.7.3/src/server/router.ts": "d051f24ff5578772703cb7af2bc4516da08c73c769839d7a1e9a3c82e8dfe0e8", - "https://deno.land/x/fresh@1.7.3/src/server/serializer.ts": "f0cffb863bbdbac6ed53fefe181e415d6aefc2101f2dc92a562b364088809e44", - "https://deno.land/x/fresh@1.7.3/src/server/tailwind_aot_error_page.tsx": "7265b66dc76a2e54b40774bbeb3cc7d4deb2eac537e08712e90e9c7b9399e53a", - "https://deno.land/x/fresh@1.7.3/src/server/types.ts": "cf4943a6d3e7df100aed20f243c0464cebb6af657749f742bd2c13e78c40dff2", - "https://deno.land/x/fresh@1.7.3/src/types.ts": "05169e3389979d8283de0ec1db3a765324ffd730b6af29ffe02752f341ae7d35", - "https://deno.land/x/fresh@1.7.3/versions.json": "953bb3cfa81ef8048733f47431f6683447aec211dd149a341a7d7244cf72d2cd", - "https://deno.land/x/ts_morph@21.0.1/common/mod.ts": "01985d2ee7da8d1caee318a9d07664774fbee4e31602bc2bb6bb62c3489555ed", - "https://deno.land/x/ts_morph@21.0.1/mod.ts": "adba9b82f24865d15d2c78ef6074b9a7457011719056c9928c800f130a617c93", - "https://esm.sh/*preact-render-to-string@6.3.1": "37f046906d7cc1ce35828a029a05a4eed6c8eefc4b646a301939757dfbf8ab18", - "https://esm.sh/@babel/helper-validator-identifier@7.22.20": "3b0b7d94b8ac689175ecb7e72183b07c6a771cc7680a7c9916091add73bd7f88" - }, "workspace": { "dependencies": [ "jsr:@david/dax@~0.43.2", @@ -4537,6 +4290,7 @@ }, "packages/vocab-runtime": { "dependencies": [ + "npm:@multiformats/base-x@^4.0.1", "npm:asn1js@^3.0.6", "npm:byte-encodings@^1.0.11", "npm:fetch-mock@^12.5.4", diff --git a/docs/cli.md b/docs/cli.md index 77edfde43..9796e8c5f 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -120,10 +120,8 @@ fedify init my-fedify-project The above command will start the interactive prompt to initialize a new Fedify project. It will ask you a few questions to set up the project: - - JavaScript runtime: [Deno], [Bun], or [Node.js] - - Package manager (if Node.js): [npm], [pnpm], or [Yarn] - - Web framework: Bare-bones, [Fresh] (if Deno), [Hono], [Express] (unless - Deno), or [Nitro] (unless Deno) + - Package manager: [Deno], [Bun], [npm], [pnpm], or [Yarn] + - Web framework: [Hono], [Express], [Nitro], or [Next.js] - key–value store: In-memory, [Redis], [PostgreSQL], or [Deno KV] (if Deno) - Message queue: In-memory, [Redis], [PostgreSQL], [AMQP] (e.g., [RabbitMQ]), or [Deno KV] (if Deno) @@ -138,6 +136,7 @@ interactive prompts: [Hono]: https://hono.dev/ [Express]: https://expressjs.com/ [Nitro]: https://nitro.unjs.io/ +[Next.js]: https://nextjs.org/ [Redis]: https://redis.io/ [PostgreSQL]: https://www.postgresql.org/ [AMQP]: https://www.amqp.org/ @@ -225,6 +224,81 @@ This option works with all other initialization options, allowing you to preview different configurations before making a decision. +`fedify test-init`: Testing ActivityPub initialization +------------------------------------------------------ + +*This command is available since Fedify 2.0.0.* + +> [!WARNING] +> `bun`, `yarn` runtime and `Next.js` web framework are not supported in this +> command yet. + +> [!NOTE] +> You need to install and run [Redis server], [PostgreSQL server], and AMQP +> server (e.g., [RabbitMQ server])locally to test those integrations. + + +The `fedify test-init` command is used to test the `fedify init` command. +It creates a temporary Fedify project with various combinations of options and +tests the server using `lookup` command. This command is for contributors who +make integration with various frameworks. + +~~~~ sh +fedify test-init +~~~~ + +The above command will start testing the `fedify init` command with various +combinations of options and configurations. It will create temporary +directories for each test case, initialize a Fedify project with the specified +options, start the server, and run the `fedify lookup` command to verify that +the server is functioning correctly. + +If you want to test a specific combination of options, you can specify them +with `fedify init` options. For example, the below command tests the `fedify +init` command with Deno runtime and Hono web framework: + +~~~~ sh +fedify test-init -r deno -w hono +~~~~ + +If you do not specify some options, it will test all the available options for +those. So the above command will test all combinations of key–value stores and +message queues with Deno runtime and Hono web framework. + +You can also specify several options in a single category. For example, the +below command tests the `fedify init` command with both Redis and PostgreSQL as +key–value stores: + +~~~~ sh +fedify test-init -k redis -k postgres +~~~~ + + +[Redis server]: https://redis.io/docs/latest/operate/oss_and_stack/install/archive/install-redis/ +[PostgreSQL server]: https://www.postgresql.org/download/ +[RabbitMQ server]: https://www.rabbitmq.com/docs/download + +### `-h`/`--hyd-run`: Create temporary project and `lookup` an object + +If you want to test except `--dry-run` option, you can use the `-h`/`--hyd-run` option. This will create a temporary project and run the `lookup` command on it. + +~~~~ sh +fedify test-init -h +~~~~ + +### `-d`/`--dry-run`: Preview without creating files + +If you want to test dry-run only, you can use the `-d`/`--dry-run` option. +This will save outputs and errors to text files instead of creating a +temporary project. + +~~~~ sh +fedify test-init -d +~~~~ + +If you did not specify `-h` or `-d` option, it will run both options by +default. + `fedify lookup`: Looking up an ActivityPub object ------------------------------------------------- diff --git a/packages/cli/src/init/action/configs.ts b/packages/cli/src/init/action/configs.ts index cf92af7e1..36c98b70d 100644 --- a/packages/cli/src/init/action/configs.ts +++ b/packages/cli/src/init/action/configs.ts @@ -1,4 +1,16 @@ -import { join as joinPath } from "node:path"; +import { + concat, + filter, + keys, + map, + pick, + pipe, + toArray, +} from "@fxts/core/index.js"; +import { uniq } from "es-toolkit"; +import { realpathSync } from "node:fs"; +import { join as joinPath, relative } from "node:path"; +import { merge } from "../../utils.ts"; import biome from "../json/biome.json" with { type: "json" }; import vscodeSettingsForDeno from "../json/vscode-settings-for-deno.json" with { type: "json", @@ -7,6 +19,8 @@ import vscodeSettings from "../json/vscode-settings.json" with { type: "json", }; import type { InitCommandData } from "../types.ts"; +import { PACKAGES_PATH } from "./const.ts"; +import { getDependencies, getDevDependencies, joinDepsReg } from "./deps.ts"; /** * Loads Deno configuration object with compiler options, unstable features, and tasks. @@ -16,20 +30,47 @@ import type { InitCommandData } from "../types.ts"; * @returns Configuration object with path and Deno-specific settings */ export const loadDenoConfig = ( - { kv, mq, initializer, dir }: InitCommandData, + data: InitCommandData, ) => ({ - path: joinPath(dir, "deno.json"), + path: "deno.json", data: { - compilerOptions: initializer.compilerOptions, + ...pick(["compilerOptions", "tasks"], data.initializer), + unstable: getUnstable(data), + nodeModulesDir: "auto", + imports: joinDepsReg("deno")(getDependencies(data)), + ...(data.testMode ? { links: getLinks(data) } : {}), }, - unstable: [ - "temporal", - ...kv.denoUnstable ?? [], - ...mq.denoUnstable ?? [], - ], - tasks: initializer.tasks, }); +const getUnstable = >({ + kv: { denoUnstable: kv = [] }, + mq: { denoUnstable: mq = [] }, +}: T) => + pipe( + ["temporal"], + concat(kv), + concat(mq), + toArray, + uniq, + ); + +const getLinks = < + T extends Pick, +>({ kv, mq, initializer, dir }: T) => + pipe( + { "@fedify/fedify": "" }, + merge(initializer.dependencies), + merge(kv.dependencies), + merge(mq.dependencies), + keys, + filter((dep) => dep.includes("@fedify/")), + map((dep) => dep.replace("@fedify/", "")), + map((dep) => joinPath(PACKAGES_PATH, dep)), + map((absolutePath) => realpathSync(absolutePath)), + map((realAbsolutePath) => relative(realpathSync(dir), realAbsolutePath)), + toArray, + ); + /** * Loads TypeScript configuration object for Node.js/Bun projects. * Uses compiler options from the framework initializer. @@ -51,11 +92,15 @@ export const loadTsConfig = ({ initializer, dir }: InitCommandData) => ({ * @param param0 - Destructured initialization data containing initializer and directory * @returns Configuration object with path and package.json settings */ -export const loadPackageJson = ({ initializer, dir }: InitCommandData) => ({ - path: joinPath(dir, "package.json"), +export const loadPackageJson = ( + data: InitCommandData, +) => ({ + path: "package.json", data: { type: "module", - scripts: initializer.tasks, + scripts: data.initializer.tasks, + dependencies: getDependencies(data), + devDependencies: getDevDependencies(data), }, }); diff --git a/packages/cli/src/init/action/const.ts b/packages/cli/src/init/action/const.ts new file mode 100644 index 000000000..c1ac4820f --- /dev/null +++ b/packages/cli/src/init/action/const.ts @@ -0,0 +1,9 @@ +import { join as joinPath } from "node:path"; + +export const PACKAGES_PATH = joinPath( + import.meta.dirname!, // action + "..", // init + "..", // src + "..", // cli + "..", // packages +); diff --git a/packages/cli/src/init/action/deps.ts b/packages/cli/src/init/action/deps.ts index b8284fb1b..1ebe53e7e 100644 --- a/packages/cli/src/init/action/deps.ts +++ b/packages/cli/src/init/action/deps.ts @@ -1,7 +1,18 @@ -import { entries, map, pipe, toArray } from "@fxts/core"; -import { merge } from "../../utils.ts"; +import { + always, + entries, + filter, + fromEntries, + map, + pipe, + when, +} from "@fxts/core"; +import { join as joinPath } from "node:path"; +import { merge, replace } from "../../utils.ts"; import { PACKAGE_VERSION } from "../lib.ts"; import type { InitCommandData, PackageManager } from "../types.ts"; +import { PACKAGES_PATH } from "./const.ts"; +import { isDeno } from "./utils.ts"; type Deps = Record; @@ -9,11 +20,15 @@ type Deps = Record; * Gathers all dependencies required for the project based on the initializer, * key-value store, and message queue configurations. * - * @param data - Web Framework initializer, key-value store and message queue descriptions + * @param data - Web Framework initializer, key-value store and + * message queue descriptions * @returns A record of dependencies with their versions */ export const getDependencies = ( - { initializer, kv, mq }: InitCommandData, + { initializer, kv, mq, testMode, packageManager }: Pick< + InitCommandData, + "initializer" | "kv" | "mq" | "packageManager" | "testMode" + >, ): Deps => pipe( { @@ -23,16 +38,54 @@ export const getDependencies = ( merge(initializer.dependencies), merge(kv.dependencies), merge(mq.dependencies), + when( + always(testMode), + isDeno({ packageManager }) ? removeFedifyDeps : addLocalFedifyDeps, + ), + normalizePackageNames(packageManager), ); -/** Gathers all devDependencies required for the project based on the initializer, - * key-value store, and message queue configurations, including Biome for linting/formatting. +const removeFedifyDeps = (deps: Deps): Deps => + pipe( + deps, + entries, + filter(([name]) => !name.includes("@fedify")), + fromEntries, + ); + +const addLocalFedifyDeps = (deps: Deps): Deps => + pipe( + deps, + entries, + map(when( + ([name]) => name.includes("@fedify/"), + ( + [name, _version], + ): [string, string] => [name, convertFedifyToLocal(name)], + )), + fromEntries, + ); + +const convertFedifyToLocal = (name: string): string => + pipe( + name, + replace("@fedify/", ""), + (pkg) => joinPath(PACKAGES_PATH, pkg), + ); + +/** Gathers all devDependencies required for the project based on the + * initializer, key-value store, and message queue configurations, + * including Biome for linting/formatting. * - * @param data - Web Framework initializer, key-value store and message queue descriptions + * @param data - Web Framework initializer, key-value store + * and message queue descriptions * @returns A record of devDependencies with their versions */ export const getDevDependencies = ( - { initializer, kv, mq }: InitCommandData, + { initializer, kv, mq, packageManager }: Pick< + InitCommandData, + "initializer" | "kv" | "mq" | "packageManager" + >, ): Deps => pipe( { @@ -41,14 +94,16 @@ export const getDevDependencies = ( merge(initializer.devDependencies), merge(kv.devDependencies), merge(mq.devDependencies), + normalizePackageNames(packageManager), ); /** - * Generates the command-line arguments needed to add dependencies or devDependencies - * using the specified package manager. + * Generates the command-line arguments needed to add dependencies + * or devDependencies using the specified package manager. * If it is devDependencies, the '-D' flag is included. * - * @param param0 - Object containing the package manager and a boolean indicating if dev dependencies are to be added + * @param param0 - Object containing the package manager and a boolean + * indicating if dev dependencies are to be added * @yields The command-line arguments as strings */ export function* getAddDepsArgs< @@ -60,34 +115,47 @@ export function* getAddDepsArgs< } /** - * Joins package names with their versions for installation commands. - * For Deno, it prefixes packages with 'jsr:' unless they already start with 'npm:'. + * Joins package names with their versions for installation dependencies. + * For Deno, it prefixes packages with 'jsr:' + * unless they already start with 'npm:' or 'jsr:'. * * @param data - Package manager and dependencies to be joined with versions - * @returns `${registry}:${package}@${version}`[] for deno or `${package}@${version}`[] for others + * @returns \{ name: `${registry}:${package}@${version}` } for deno */ -export const joinDepsVer = < - T extends { packageManager: PackageManager; dependencies: Deps }, ->({ packageManager: pm, dependencies }: T): string[] => +export const joinDepsReg = (pm: PackageManager) => // +(dependencies: Deps): Deps => pipe( dependencies, entries, - map(([name, version]) => - `${getPackageName(pm, name)}@${getPackageVersion(pm, version)}` - ), - toArray, + map(([name, version]): [string, string] => [ + name.substring(4), + `${name}@${getPackageVersion(pm, version)}`, + ]), + fromEntries, ); -const getPackageName = (pm: PackageManager, name: string) => - pm !== "deno" - ? name - : name.startsWith("npm:") - ? name.substring(4) - : !name.startsWith("npm:") - ? `jsr:${name}` - : name; - const getPackageVersion = (pm: PackageManager, version: string) => pm !== "deno" && version.includes("+") ? version.substring(0, version.indexOf("+")) : version; + +const normalizePackageNames = (pm: PackageManager) => (deps: Deps): Deps => + pipe( + deps, + entries, + map(([name, version]): [string, string] => [ + getPackageName(pm, name), + version, + ]), + fromEntries, + ); + +const getPackageName = (pm: PackageManager, name: string) => + pm !== "deno" + ? name.startsWith("npm:") + ? name.replace("npm:", "") // not deno, have npm: prefix, remove it + : name // not deno, no prefix, keep it + : name.startsWith("npm:") + ? name // deno, have npm: prefix, keep it + : `jsr:${name}` // deno, no prefix, add jsr: prefix +; diff --git a/packages/cli/src/init/action/install.ts b/packages/cli/src/init/action/install.ts index 56e457c93..8d5a69d56 100644 --- a/packages/cli/src/init/action/install.ts +++ b/packages/cli/src/init/action/install.ts @@ -1,59 +1,24 @@ -import { always, concat, pipe, tap, toArray, unless, when } from "@fxts/core"; -import { notEmpty, runSubCommand, set } from "../../utils.ts"; +import { apply, pipe } from "@fxts/core"; +import { CommandError, runSubCommand } from "../../utils.ts"; import type { InitCommandData } from "../types.ts"; -import { - getAddDepsArgs, - getDependencies, - getDevDependencies, - joinDepsVer, -} from "./deps.ts"; -import { noticeErrorWhileAddDeps } from "./notice.ts"; -import { isDeno } from "./utils.ts"; const installDependencies = (data: InitCommandData) => pipe( data, - tap(installDeps), - unless(isDeno, tap(installDevDeps)), - ); + ({ packageManager, dir }) => + [[packageManager, "install"], { cwd: dir }] as // + Parameters, + apply(runSubCommand), + ).catch((e) => { + if (e instanceof CommandError) { + console.error( + `Failed to install dependencies using ${data.packageManager}.`, + ); + console.error("Command:", e.commandLine); + if (e.stderr) console.error("Error:", e.stderr); + throw e; + } + throw e; + }); export default installDependencies; - -type Deps = Record; - -const installDeps = (data: InitCommandData) => - pipe( - data, - set("dependencies", getDependencies), - getAddDepsCommand, - when(notEmpty, runAddDeps(data)), - ); - -const installDevDeps = (data: InitCommandData) => - pipe( - data, - set("dependencies", getDevDependencies), - set("dev", always(true)), - getAddDepsCommand, - when(notEmpty, runAddDeps(data)), - ); - -const getAddDepsCommand = < - T extends InitCommandData & { - dependencies: Deps; - dev?: boolean; - }, ->(data: T) => - pipe( - data, - joinDepsVer, - when(notEmpty, concat(getAddDepsArgs(data))), - toArray, - ); - -const runAddDeps = - ({ dir }: T) => (command: string[]) => - runSubCommand(command, { - cwd: dir, - stdio: "inherit", - }).catch(noticeErrorWhileAddDeps(command)); diff --git a/packages/cli/src/init/action/notice.ts b/packages/cli/src/init/action/notice.ts index 2ff4cebfa..ad2d12cef 100644 --- a/packages/cli/src/init/action/notice.ts +++ b/packages/cli/src/init/action/notice.ts @@ -1,14 +1,14 @@ -import { message, text } from "@optique/core"; -import { print, printError } from "@optique/run"; +import { text } from "@optique/core"; import { flow } from "es-toolkit"; -import { colors, type RequiredNotNull } from "../../utils.ts"; +import { + colors, + printErrorMessage, + printMessage, + type RequiredNotNull, +} from "../../utils.ts"; import type { InitCommand } from "../command.ts"; import type { InitCommandData } from "../types.ts"; -type PrintMessage = (...args: Parameters) => void; -const printMessage: PrintMessage = flow(message, print); -const printErrorMessage: PrintMessage = flow(message, printError); - export function drawDinosaur() { const d = flow(colors.bgBlue, colors.black); const f = colors.blue; @@ -84,15 +84,14 @@ export const noticeEnvKeyValue = ([key, value]: [string, string]) => { printMessage`${text(` ${key}='${value}'`)}`; }; -export function noticeHowToRun( +export const noticeHowToRun = ( { initializer: { instruction, federationFile } }: InitCommandData, -) { - print(message` +) => + printMessage` ${instruction} -Start by editing the ${federationFile} file to define your federation! -`); -} +Start by editing the ${text(federationFile)} file to define your federation! +`; export function noticeErrorWhileAddDeps(command: string[]) { return (error: unknown) => { diff --git a/packages/cli/src/init/action/patch.ts b/packages/cli/src/init/action/patch.ts index 4ddb4cbe7..9365efa1f 100644 --- a/packages/cli/src/init/action/patch.ts +++ b/packages/cli/src/init/action/patch.ts @@ -1,7 +1,7 @@ -import { apply, entries, forEach, pipe, pipeLazy, tap } from "@fxts/core"; +import { always, apply, entries, map, pipe, pipeLazy, tap } from "@fxts/core"; import { toMerged } from "es-toolkit"; import { readFile } from "node:fs/promises"; -import { formatJson, merge, set } from "../../utils.ts"; +import { formatJson, merge, replaceAll, set } from "../../utils.ts"; import { createFile, throwUnlessNotExists } from "../lib.ts"; import type { InitCommandData } from "../types.ts"; import { @@ -23,7 +23,8 @@ import { joinDir, stringifyEnvs } from "./utils.ts"; * Handles both dry-run mode (recommending files) and actual file creation. * Orchestrates the entire file generation and writing process. * - * @param data - The initialization command data containing project configuration + * @param data - The initialization command data containing project + * configuration * @returns A processed data object with files and JSONs ready for creation */ export const patchFiles = (data: InitCommandData) => @@ -44,8 +45,9 @@ export const recommendPatchFiles = (data: InitCommandData) => /** * Generates text-based files (TypeScript, environment files) for the project. - * Creates federation configuration, logging setup, environment variables, and framework-specific files - * by processing templates and combining them with project-specific data. + * Creates federation configuration, logging setup, environment variables, and + * framework-specific files by processing templates and combining them with + * project-specific data. * * @param data - The initialization command data * @returns A record of file paths to their string content @@ -53,7 +55,7 @@ export const recommendPatchFiles = (data: InitCommandData) => const getFiles = < T extends InitCommandData, >(data: T) => ({ - [data.initializer.federationFile.toString()]: loadFederation({ + [data.initializer.federationFile]: loadFederation({ imports: getImports(data), ...data, }), @@ -64,8 +66,9 @@ const getFiles = < /** * Generates JSON configuration files based on the package manager type. - * Creates different sets of configuration files for Deno vs Node.js/Bun environments, - * including compiler configs, package manifests, and development tool configurations. + * Creates different sets of configuration files for Deno vs other environments, + * including compiler configs, package manifests, and development + * tool configurations. * * @param data - The initialization command data * @returns A record of file paths to their JSON object content @@ -80,7 +83,9 @@ const getJsons = < [devToolConfigs["vscExtDeno"].path]: devToolConfigs["vscExtDeno"].data, } : { - "tsconfig.json": loadTsConfig(data).data, + ...(data.initializer.compilerOptions + ? { "tsconfig.json": loadTsConfig(data).data } + : {}), "package.json": loadPackageJson(data).data, [devToolConfigs["biome"].path]: devToolConfigs["biome"].data, [devToolConfigs["vscSet"].path]: devToolConfigs["vscSet"].data, @@ -88,9 +93,10 @@ const getJsons = < }; /** - * Handles dry-run mode by recommending files to be created without actually creating them. - * Displays what files would be created and shows their content for user review. - * This allows users to preview the initialization process before committing to it. + * Handles dry-run mode by recommending files to be created without actually + * creating them. + * Displays what files would be created and shows their content for user review, + * so users can preview the initialization process before committing to it. * * @param data - The initialization command data with files and JSONs prepared * @returns The processed data with recommendations displayed @@ -106,7 +112,7 @@ const recommendFiles = (data: InitCommandWithFiles) => ); /** - * Actually creates files on the filesystem during normal (non-dry-run) execution. + * Actually creates files on the filesystem during normal execution. * Merges text files and JSON files together and writes them to disk. * This performs the actual file system operations to initialize the project. * @@ -126,8 +132,8 @@ interface InitCommandWithFiles extends InitCommandData { } /** - * Higher-order function that processes all files with a given processing function. - * Takes a processing function (either display or create) and applies it to all files + * Processes all files with a given processing function. + * Takes a processor (either display or create) and applies it to all files * in the target directory, handling path resolution and content patching. * * @param process - Function to process each file (either display or create) @@ -140,19 +146,20 @@ const processAllFiles = ( pipe( files, entries, - forEach( + map( pipeLazy( joinDir(dir), apply(patchContent), apply(process), ), ), + Array.fromAsync, ); /** - * Patches file content by either merging JSON objects or appending text content. - * Handles existing files by reading their current content and intelligently combining - * it with new content based on the content type (JSON vs text). + * Patches file content by either merging JSON or appending text content. + * Handles existing files by reading their current content and intelligently + * combining it with new content based on the content type (JSON vs text). * * @param path - The file path to patch * @param content - The new content (either string or object) @@ -173,13 +180,32 @@ async function patchContent( * Merges new JSON data with existing JSON content and formats the result. * Parses existing JSON content (if any) and deep merges it with new data, * then formats the result for consistent output. + * Supports JSONC (JSON with Comments) by removing comments before parsing. * * @param prev - The previous JSON content as string * @param data - The new data object to merge * @returns Formatted JSON string with merged content */ const mergeJson = (prev: string, data: object): string => - pipe(prev ? JSON.parse(prev) : {}, merge(data), formatJson); + pipe( + prev ? JSON.parse(removeJsonComments(prev)) : {}, + merge(data), + formatJson, + ); + +/** + * Removes single-line (//) and multi-line (/* *\/) comments from JSON string. + * This allows parsing JSONC (JSON with Comments) files. + * + * @param jsonString - The JSON string potentially containing comments + * @returns JSON string with comments removed + */ +const removeJsonComments = (jsonString: string): string => + pipe( + jsonString, + replaceAll(/\/\/.*$/gm, ""), + replaceAll(/\/\*[\s\S]*?\*\//g, ""), + ); /** * Appends new text content to existing text content line by line. @@ -202,11 +228,6 @@ const appendText = (prev: string, data: string) => * @returns The file content as string, or empty string if file doesn't exist * @throws Error if file access fails for reasons other than file not existing */ -async function readFileIfExists(path: string): Promise { - try { - return await readFile(path, "utf8"); - } catch (e) { - throwUnlessNotExists(e); - return ""; - } -} +const readFileIfExists = (path: string): Promise => + readFile(path, "utf8") + .catch(pipeLazy(tap(throwUnlessNotExists), always(""))); diff --git a/packages/cli/src/init/action/precommand.ts b/packages/cli/src/init/action/precommand.ts index 2b0faac8a..af6527e90 100644 --- a/packages/cli/src/init/action/precommand.ts +++ b/packages/cli/src/init/action/precommand.ts @@ -1,4 +1,4 @@ -import { exit, runSubCommand } from "../../utils.ts"; +import { CommandError, exit, runSubCommand } from "../../utils.ts"; import type { InitCommandData } from "../types.ts"; /** @@ -15,7 +15,14 @@ const runPrecommand = ({ cwd: dir, stdio: "inherit", }).catch((e) => { - console.error("Failed to run the precommand:", e); + if (e instanceof CommandError) { + console.error("Failed to run the precommand."); + console.error("Command:", e.commandLine); + if (e.stderr) console.error("Error:", e.stderr); + if (e.stdout) console.error("Output:", e.stdout); + } else { + console.error("Failed to run the precommand:", e); + } exit(1); }); diff --git a/packages/cli/src/init/action/set.ts b/packages/cli/src/init/action/set.ts index 4f753d732..8987d2f68 100644 --- a/packages/cli/src/init/action/set.ts +++ b/packages/cli/src/init/action/set.ts @@ -11,7 +11,6 @@ import type { KvStoreDescription, MessageQueue, MessageQueueDescription, - PackageManager, } from "../types.ts"; import webFrameworks from "../webframeworks.ts"; @@ -45,20 +44,8 @@ const setProjectName = set( ); const setInitializer = set("initializer", < - T extends { - webFramework: keyof typeof webFrameworks; - projectName: string; - packageManager: PackageManager; - }, ->({ - webFramework, - projectName, - packageManager, -}: T) => - webFrameworks[webFramework].init( - projectName, - packageManager, - )); + T extends InitCommandOptions & { projectName: string }, +>(data: T) => webFrameworks[data.webFramework].init(data)); const setKv = set("kv", < T extends { kvStore: KvStore }, diff --git a/packages/cli/src/init/action/templates.ts b/packages/cli/src/init/action/templates.ts index 7a9dfade3..a74890146 100644 --- a/packages/cli/src/init/action/templates.ts +++ b/packages/cli/src/init/action/templates.ts @@ -81,6 +81,7 @@ export const getAlias = (imports: Record) => join(", "), ); +const ENV_REG_EXP = /process\.env\.(\w+)/g; /** * Converts Node.js environment variable access to Deno-compatible syntax when needed. * Transforms `process.env.VAR_NAME` to `Deno.env.get("VAR_NAME")` for Deno projects. @@ -90,6 +91,6 @@ export const getAlias = (imports: Record) => * @returns The converted object string with appropriate environment variable access syntax */ export const convertEnv = (obj: string, pm: PackageManager) => - pm === "deno" && /process\.env\.(\w+)/.test(obj) - ? obj.replaceAll(/process\.env\.(\w+)/, (_, g1) => `Deno.env.get("${g1}")`) + pm === "deno" && ENV_REG_EXP.test(obj) + ? obj.replaceAll(ENV_REG_EXP, (_, g1) => `Deno.env.get("${g1}")`) : obj; diff --git a/packages/cli/src/init/action/utils.ts b/packages/cli/src/init/action/utils.ts index fd338a6fa..3e0b14017 100644 --- a/packages/cli/src/init/action/utils.ts +++ b/packages/cli/src/init/action/utils.ts @@ -6,7 +6,7 @@ export const isDry = ({ dryRun }: InitCommandData) => dryRun; export const hasCommand = (data: InitCommandData) => !!data.initializer.command; export const isDeno = ( - { packageManager }: InitCommandData, + { packageManager }: Pick, ) => packageManager === "deno"; export const joinDir = diff --git a/packages/cli/src/init/ask/kv.ts b/packages/cli/src/init/ask/kv.ts index a39199244..33f0ebdce 100644 --- a/packages/cli/src/init/ask/kv.ts +++ b/packages/cli/src/init/ask/kv.ts @@ -1,6 +1,8 @@ +import { pipe, tap, throwError, unless, when } from "@fxts/core/index.js"; import { select } from "@inquirer/prompts"; +import { printErrorMessage } from "../../utils.ts"; import { KV_STORE } from "../const.ts"; -import { kvStores } from "../lib.ts"; +import { isTest, kvStores } from "../lib.ts"; import type { KvStore, PackageManager } from "../types.ts"; /** @@ -11,29 +13,70 @@ import type { KvStore, PackageManager } from "../types.ts"; * @returns A promise resolving to options with a guaranteed kvStore */ const fillKvStore: // - ( - options: T, - ) => Promise = async (options) => // - ({ - ...options, - kvStore: options.kvStore ?? await askKvStore(options.packageManager), - }); + < + T extends { + kvStore?: KvStore; + packageManager: PackageManager; + testMode: boolean; + }, + >(options: T) => Promise> // + = (options) => + pipe( + options, + when(isKvStoreEmpty, askKvStore) as < + T extends { kvStore?: KvStore; packageManager: PackageManager }, + >(options: T) => KvDefined, + unless( + isKvSupportsPm, + (opt: KvDefined) => + pipe( + opt, + when(isTest, throwError(unmatchedWhileTesting)), + tap(noticeUnmatched), + fillKvStore, + ), + ), + ) as Promise>; export default fillKvStore; -const askKvStore = (pm: PackageManager) => - select({ +type KvDefined = Omit & { kvStore: KvStore }; + +const isKvStoreEmpty = ( + options: T, +): options is T & { kvStore: undefined } => !options.kvStore; + +const askKvStore = async < + T extends { packageManager: PackageManager }, +>(data: T): Promise & { kvStore: KvStore }> => ({ + ...data, + kvStore: await select({ message: "Choose the key-value store to use", - choices: KV_STORE.map(choiceKvStore(pm)), - }); - -const choiceKvStore = (pm: PackageManager) => (value: KvStore) => ({ - name: isKvSupportsPm(value, pm) - ? value - : `${value} (not supported with ${pm})`, - value, - disabled: !isKvSupportsPm(value, pm), + choices: KV_STORE.map(choiceKvStore(data.packageManager)), + }), +}); + +const unmatchedWhileTesting = < + T extends { kvStore: KvStore; packageManager: PackageManager }, +>({ kvStore: kv, packageManager: pm }: T) => + new Error( + `Key-value store '${kv}' is not compatible with package manager '${pm}'`, + ); + +const noticeUnmatched = < + T extends { kvStore: KvStore; packageManager: PackageManager }, +>({ kvStore: kv, packageManager: pm }: T) => + printErrorMessage`Error: Key-value store '${kv}' is not compatible with package manager '${pm}'`; + +const choiceKvStore = (pm: PackageManager) => (kv: KvStore) => ({ + name: isKvSupportsPm({ kvStore: kv, packageManager: pm }) + ? kv + : `${kv} (not supported with ${pm})`, + value: kv, + disabled: !isKvSupportsPm({ kvStore: kv, packageManager: pm }), }); -const isKvSupportsPm = (kv: KvStore, pm: PackageManager) => - kvStores[kv].packageManagers.includes(pm); +const isKvSupportsPm = < + T extends { kvStore: KvStore; packageManager: PackageManager }, +>({ kvStore, packageManager }: T) => + kvStores[kvStore].packageManagers.includes(packageManager); diff --git a/packages/cli/src/init/ask/mq.ts b/packages/cli/src/init/ask/mq.ts index 517752785..27c906da3 100644 --- a/packages/cli/src/init/ask/mq.ts +++ b/packages/cli/src/init/ask/mq.ts @@ -1,6 +1,8 @@ +import { pipe, tap, throwError, unless, when } from "@fxts/core/index.js"; import { select } from "@inquirer/prompts"; +import { printErrorMessage } from "../../utils.ts"; import { MESSAGE_QUEUE } from "../const.ts"; -import { messageQueues } from "../lib.ts"; +import { isTest, messageQueues } from "../lib.ts"; import type { MessageQueue, PackageManager } from "../types.ts"; /** @@ -11,27 +13,74 @@ import type { MessageQueue, PackageManager } from "../types.ts"; * @returns A promise resolving to options with a guaranteed messageQueue */ const fillMessageQueue: // - // - (options: T) => Promise = // - async (options) => ({ - ...options, - messageQueue: options.messageQueue ?? - await askMessageQueue(options.packageManager), - }); + < + T extends { + messageQueue?: MessageQueue; + packageManager: PackageManager; + testMode: boolean; + }, + >(options: T) => Promise> // + = (options) => + pipe( + options, + when(isMessageQueueEmpty, askMessageQueue) as < + T extends { messageQueue?: MessageQueue; packageManager: PackageManager }, + >(options: T) => MqDefined, + unless( + isMqSupportsPm, + (opt: MqDefined) => + pipe( + opt, + when(isTest, throwError(unmatchedWhileTesting)), + tap(noticeUnmatched), + fillMessageQueue, + ), + ), + ) as Promise>; export default fillMessageQueue; -const askMessageQueue = (pm: PackageManager) => - select({ +type MqDefined = Omit & { messageQueue: MessageQueue }; + +const isMessageQueueEmpty = ( + options: T, +): options is T & { messageQueue: undefined } => !options.messageQueue; + +const askMessageQueue = async < + T extends { packageManager: PackageManager }, +>( + data: T, +): Promise & { messageQueue: MessageQueue }> => ({ + ...data, + messageQueue: await select({ message: "Choose the message queue to use", - choices: MESSAGE_QUEUE.map(choiceMessageQueue(pm)), - }); -const choiceMessageQueue = (pm: PackageManager) => (value: MessageQueue) => ({ - name: isMqSupportsPm(value, pm) - ? value - : `${value} (not supported with ${pm})`, - value, - disabled: !isMqSupportsPm(value, pm), + choices: MESSAGE_QUEUE.map(choiceMessageQueue(data.packageManager)), + }), }); -const isMqSupportsPm = (mq: MessageQueue, pm: PackageManager) => - messageQueues[mq].packageManagers.includes(pm); + +const unmatchedWhileTesting = < + T extends { messageQueue: MessageQueue; packageManager: PackageManager }, +>({ messageQueue: mq, packageManager: pm }: T) => + new Error( + `Message queue '${mq}' is not compatible with package manager '${pm}'`, + ); + +const noticeUnmatched = < + T extends { messageQueue: MessageQueue; packageManager: PackageManager }, +>({ messageQueue: mq, packageManager: pm }: T) => { + printErrorMessage`Error: Message queue '${mq}' is not compatible with package manager '${pm}'`; +}; + +const choiceMessageQueue = + (packageManager: PackageManager) => (messageQueue: MessageQueue) => ({ + name: isMqSupportsPm({ messageQueue, packageManager }) + ? messageQueue + : `${messageQueue} (not supported with ${packageManager})`, + value: messageQueue, + disabled: !isMqSupportsPm({ messageQueue, packageManager }), + }); + +const isMqSupportsPm = < + T extends { messageQueue: MessageQueue; packageManager: PackageManager }, +>({ messageQueue, packageManager }: T) => + messageQueues[messageQueue].packageManagers.includes(packageManager); diff --git a/packages/cli/src/init/command.ts b/packages/cli/src/init/command.ts index 8f2e5b9a5..f31ae898b 100644 --- a/packages/cli/src/init/command.ts +++ b/packages/cli/src/init/command.ts @@ -4,20 +4,23 @@ import { command, constant, type InferValue, + merge, message, + multiple, object, option, optional, optionNames, + or, } from "@optique/core"; import { path } from "@optique/run"; +import { debugOption } from "../globals.ts"; import { KV_STORE, MESSAGE_QUEUE, PACKAGE_MANAGER, WEB_FRAMEWORK, } from "./const.ts"; -import { debugOption } from "../globals.ts"; const webFramework = optional(option( "-w", @@ -53,6 +56,12 @@ const messageQueue = optional(option( description: message`The message queue to use for background tasks.`, }, )); +const testMode = option( + "--test-mode", + { + description: message`The test mode to use for testing purposes.`, + }, +); export const initCommand = command( "init", @@ -66,10 +75,11 @@ export const initCommand = command( packageManager, kvStore, messageQueue, - dryRun: option("-d", "--dry-run", { + dryRun: option("--dry-run", { description: message`Perform a trial run with no changes made.`, }), debugOption, + testMode, }), { brief: message`Initialize a new Fedify project directory.`, @@ -86,3 +96,40 @@ Unless you specify all options (${optionNames(["-w", "--web-framework"])}, ${ ); export type InitCommand = InferValue; + +const noHydRun = object({ + noHydRun: option("--no-hyd-run", { + description: message`Log outputs without creating files.`, + }), +}); +const noDryRun = object({ + noDryRun: option("--no-dry-run", { + description: message`Test with files creations and installations.`, + }), +}); +export const testInitCommand = command( + "test-init", + merge( + object("Initialization options", { + command: constant("test-init"), + webFramework: multiple(webFramework), + packageManager: multiple(packageManager), + kvStore: multiple(kvStore), + messageQueue: multiple(messageQueue), + debugOption, + }), + optional(or(noHydRun, noDryRun)), + ), + { + brief: message`Test an initializing command .`, + description: message`Test an initializing command on temporary directories. + +Unless you specify all options (${optionNames(["-w", "--web-framework"])}, ${ + optionNames(["-p", "--package-manager"]) + }, ${optionNames(["-k", "--kv-store"])}, and ${ + optionNames(["-m", "--message-queue"]) + }), it will test all combinations of the options.`, + }, +); + +export type TestInitCommand = InferValue; diff --git a/packages/cli/src/init/lib.ts b/packages/cli/src/init/lib.ts index c0c9abfd3..a9c785f68 100644 --- a/packages/cli/src/init/lib.ts +++ b/packages/cli/src/init/lib.ts @@ -110,7 +110,8 @@ export const readTemplate: (templatePath: string) => string = ( export const getInstruction: ( packageManager: PackageManager, -) => Message = (pm) => + port: number, +) => Message = (pm, port) => message` To start the server, run the following command: @@ -118,11 +119,11 @@ To start the server, run the following command: Then, try look up an actor from your server: - ${commandLine("fedify lookup http://localhost:8000/users/john")} + ${commandLine(`fedify lookup http://localhost:${port}/users/john`)} `; -const getDevCommand = (pm: PackageManager) => +export const getDevCommand = (pm: PackageManager) => pm === "deno" ? "deno task dev" : pm === "bun" ? "bun dev" : `${pm} run dev`; async function isCommandAvailable( @@ -172,20 +173,23 @@ export const isDirectoryEmpty = async ( } }; +/** + * Converts a package manager to its corresponding runtime. + * @param pm - The package manager (deno, bun, npm, yarn, pnpm) + * @returns The runtime name (deno, bun, or node) + */ +export const packageManagerToRuntime = ( + pm: PackageManager, +): "deno" | "bun" | "node" => + pm === "deno" ? "deno" : pm === "bun" ? "bun" : "node"; + export const getNextInitCommand = ( pm: PackageManager, -): string[] => [ - ...createNextAppCommand(pm), - ".", - "--ts", - "--app", - "--biome", - "--skip-install", -]; +): string[] => [...createNextAppCommand(pm), ".", "--yes"]; const createNextAppCommand = (pm: PackageManager): string[] => pm === "deno" - ? ["deno", "run", "-A", "npm:create-next-app@latest"] + ? ["deno", "-Ar", "npm:create-next-app@latest"] : pm === "bun" ? ["bun", "create", "next-app"] : pm === "npm" @@ -199,6 +203,10 @@ export const getNitroInitCommand = ( pm === "deno" ? "npm:giget@latest" : "giget@latest", "nitro", ".", + "&&", + "rm", + "nitro.config.ts", // Remove default nitro config file + // This file will be created from template ]; const createNitroAppCommand = (pm: PackageManager): string[] => @@ -209,3 +217,7 @@ const createNitroAppCommand = (pm: PackageManager): string[] => : pm === "npm" ? ["npx"] : [pm, "dlx"]; + +export const isTest: < + T extends { testMode: boolean }, +>({ testMode }: T) => boolean = ({ testMode }) => testMode; diff --git a/packages/cli/src/init/mod.ts b/packages/cli/src/init/mod.ts index a7d28e3bb..ec200713e 100644 --- a/packages/cli/src/init/mod.ts +++ b/packages/cli/src/init/mod.ts @@ -1,2 +1,3 @@ export { default as runInit } from "./action/mod.ts"; -export { initCommand } from "./command.ts"; +export { initCommand, testInitCommand } from "./command.ts"; +export { default as runTestInit } from "./test/action.ts"; diff --git a/packages/cli/src/init/templates/nitro/.env.test.tpl b/packages/cli/src/init/templates/nitro/.env.test.tpl new file mode 100644 index 000000000..80834719d --- /dev/null +++ b/packages/cli/src/init/templates/nitro/.env.test.tpl @@ -0,0 +1 @@ +HOST=127.0.0.1 diff --git a/packages/cli/src/init/templates/nitro/nitro.config.ts.tpl b/packages/cli/src/init/templates/nitro/nitro.config.ts.tpl index bf72d9197..942c9d5a9 100644 --- a/packages/cli/src/init/templates/nitro/nitro.config.ts.tpl +++ b/packages/cli/src/init/templates/nitro/nitro.config.ts.tpl @@ -1,5 +1,14 @@ -// https://nitro.unjs.io/config +import { defineNitroConfig } from "nitropack/config" + +// https://nitro.build/config export default defineNitroConfig({ + errorHandler: "~/error", + esbuild: { + options: { + target: "esnext", + }, + }, + compatibilityDate: "latest", srcDir: "server", - errorHandler: "~/error" -}); \ No newline at end of file + imports: false +}); diff --git a/packages/cli/src/init/test/action.ts b/packages/cli/src/init/test/action.ts new file mode 100644 index 000000000..1babf9421 --- /dev/null +++ b/packages/cli/src/init/test/action.ts @@ -0,0 +1,28 @@ +import { pipe, tap, when } from "@fxts/core"; +import { set } from "../../utils.ts"; +import type { TestInitCommand } from "../command.ts"; +import { fillEmptyOptions } from "./fill.ts"; +import runTests from "./run.ts"; +import { + emptyTestDir, + genRunId, + genTestDirPrefix, + logTestDir, +} from "./utils.ts"; + +const runTestInit = (options: TestInitCommand) => + pipe( + options, + set("runId", genRunId), + set("testDirPrefix", genTestDirPrefix), + tap(emptyTestDir), + fillEmptyOptions, + tap(logTestDir), + tap(when(isDryRun, runTests(true))), + tap(when(isHydRun, runTests(false))), + ); + +const isDryRun = ({ dryRun }: T) => dryRun; +const isHydRun = ({ hydRun }: T) => hydRun; + +export default runTestInit; diff --git a/packages/cli/src/init/test/create.ts b/packages/cli/src/init/test/create.ts new file mode 100644 index 000000000..958850e3c --- /dev/null +++ b/packages/cli/src/init/test/create.ts @@ -0,0 +1,137 @@ +import { filter, isEmpty, pipe, toArray } from "@fxts/core"; +import { values } from "@optique/core"; +import { appendFile, mkdir } from "node:fs/promises"; +import { join, sep } from "node:path"; +import process from "node:process"; +import { + CommandError, + type GeneratedType, + printErrorMessage, + printMessage, + product, + runSubCommand, +} from "../../utils.ts"; +import packageManagers from "../json/pm.json" with { type: "json" }; +import { kvStores, messageQueues } from "../lib.ts"; +import type { + KvStore, + MessageQueue, + PackageManager, + WebFramework, +} from "../types.ts"; +import webFrameworks from "../webframeworks.ts"; +import type { InitTestData, MultipleOption } from "./types.ts"; + +const BANNED_PMS: PackageManager[] = ["bun", "yarn"]; + +const createTestApp = (testDirPrefix: string, dry: boolean) => +async ( + options: GeneratedType>, +): Promise => { + const testDir = join(testDirPrefix, ...options); + const vals = values(testDir.split(sep).slice(-4)); + try { + const result = await runSubCommand( + toArray(genInitCommand(testDir, dry, options)), + { + cwd: join(import.meta.dirname!, "../../.."), + stdio: ["ignore", "pipe", "pipe"], + }, + ); + + await saveOutputs(testDir, result); + printMessage` Pass: ${vals}`; + return testDir; + } catch (error) { + if (error instanceof CommandError) { + await saveOutputs(testDir, { + stdout: error.stdout, + stderr: error.stderr, + }); + } else { + const errorMessage = error instanceof Error + ? error.message + : String(error); + await saveOutputs(testDir, { stdout: "", stderr: errorMessage }); + } + printMessage` Fail: ${vals}`; + return ""; + } +}; + +export default createTestApp; + +function* genInitCommand( + testDir: string, + dry: boolean, + [webFramework, packageManager, kvStore, messageQueue]: // + GeneratedType>, +) { + yield "deno"; + yield "run"; + yield "-A"; + yield "src/mod.ts"; + yield "init"; + yield testDir; + yield "-w"; + yield webFramework; + yield "-p"; + yield packageManager; + yield "-k"; + yield kvStore; + yield "-m"; + yield messageQueue; + yield "--test-mode"; + if (dry) yield "-d"; +} + +export const generateTestCases = >( + { webFramework, packageManager, kvStore, messageQueue }: T, +) => { + const pms = filterPackageManager(packageManager); + exitIfCasesEmpty([webFramework, pms, kvStore, messageQueue]); + + return product(webFramework, pms, kvStore, messageQueue); +}; + +const filterPackageManager = (pm: PackageManager[]) => + pipe( + pm, + filter( + (pm) => + BANNED_PMS.includes(pm) + ? printErrorMessage`${packageManagers[pm]["label"]} is not \ +supported in test mode yet because ${packageManagers[pm]["label"]} don't \ +support local file dependencies properly.` + : true, + ), + toArray, + ); + +const exitIfCasesEmpty = (cases: string[][]): never | void => { + if (cases.some(isEmpty)) { + printErrorMessage`No test cases to run. Exiting.`; + process.exit(1); + } +}; + +const saveOutputs = async ( + dirPath: string, + { stdout, stderr }: { stdout: string; stderr: string }, +): Promise => { + await mkdir(dirPath, { recursive: true }); + if (stdout) await appendFile(join(dirPath, "out.txt"), stdout + "\n", "utf8"); + if (stderr) await appendFile(join(dirPath, "err.txt"), stderr + "\n", "utf8"); +}; + +export function filterOptions( + options: GeneratedType>, +): boolean { + const [wf, pm, kv, mq] = options as // + [WebFramework, PackageManager, KvStore, MessageQueue]; + return [ + webFrameworks[wf].packageManagers, + kvStores[kv].packageManagers, + messageQueues[mq].packageManagers, + ].every((pms) => pms.includes(pm)); +} diff --git a/packages/cli/src/init/test/fill.ts b/packages/cli/src/init/test/fill.ts new file mode 100644 index 000000000..bfc88e5c9 --- /dev/null +++ b/packages/cli/src/init/test/fill.ts @@ -0,0 +1,67 @@ +import { isEmpty, omit, pipe } from "@fxts/core"; +import type { TestInitCommand } from "../command.ts"; +import { + KV_STORE, + MESSAGE_QUEUE, + PACKAGE_MANAGER, + WEB_FRAMEWORK, +} from "../const.ts"; +import type { + DefineAllOptions, + DefineOption, + MultipleOption, +} from "./types.ts"; + +export const fillEmptyOptions = ( + options: T, +): DefineAllOptions => + pipe( + options, + fillWebFramework, + fillPackageManager, + fillKVStore, + fillMessageQueue, + fillRunMode, + ) as DefineAllOptions; + +const fillOption = < + K extends MultipleOption, + AllValues = TestInitCommand[K] extends readonly (infer U)[] ? (U & string)[] + : never, +>( + key: K, + allValues: AllValues, +) => +( + options: T, +): T extends Awaited> | DefineOption + ? DefineOption + : DefineOption => + ({ + ...options, + [key]: (isEmpty(options[key]) + ? allValues + : (options[key].filter((i) => + (allValues as readonly unknown[]).includes(i) + ) as T[K])), + }) as T extends Awaited> | DefineOption + ? DefineOption + : DefineOption; + +const fillWebFramework = fillOption("webFramework", WEB_FRAMEWORK); +const fillPackageManager = fillOption("packageManager", PACKAGE_MANAGER); +const fillKVStore = fillOption("kvStore", KV_STORE); +const fillMessageQueue = fillOption("messageQueue", MESSAGE_QUEUE); + +const fillRunMode = ( + options: T, +): DefineAllOptions => + pipe( + options, + (options) => ("noHydRun" in options + ? ({ ...omit(["noHydRun"], options), hydRun: !options.noHydRun }) + : ({ ...options, hydRun: true })), + (options) => ("noDryRun" in options + ? ({ ...omit(["noDryRun"], options), dryRun: !options.noDryRun }) + : ({ ...options, dryRun: true })), + ) as DefineAllOptions; diff --git a/packages/cli/src/init/test/lookup.ts b/packages/cli/src/init/test/lookup.ts new file mode 100644 index 000000000..821c3ab49 --- /dev/null +++ b/packages/cli/src/init/test/lookup.ts @@ -0,0 +1,254 @@ +import { isEmpty } from "@fxts/core/index.js"; +import { values } from "@optique/core"; +import type { ChildProcessByStdio } from "node:child_process"; +import { spawn } from "node:child_process"; +import { createWriteStream } from "node:fs"; +import { join, sep } from "node:path"; +import process from "node:process"; +import type Stream from "node:stream"; +import { printErrorMessage, printMessage, runSubCommand } from "../../utils.ts"; +import { getDevCommand } from "../lib.ts"; +import type { + KvStore, + MessageQueue, + PackageManager, + WebFramework, +} from "../types.ts"; +import webFrameworks from "../webframeworks.ts"; + +const HANDLE = "john"; +const STARTUP_TIMEOUT = 30000; // 30 seconds +const CWD = process.cwd(); +const BANNED_WFS: WebFramework[] = ["next"]; + +/** + * Run servers for all generated apps and test them with the lookup command. + * + * @param dirs - Array of paths to generated app directories + */ +export default async function runServerAndLookupUser( + dirs: string[], +): Promise { + const valid = dirs.filter(Boolean); + if (valid.length === 0) { + printErrorMessage`\nNo directories to lookup test.`; + return; + } + const filtered = filterWebFrameworks(valid); + + printMessage`\nLookup Test start for ${String(filtered.length)} app(s)!`; + + const results = await Array.fromAsync(filtered, testApp); + + const successCount = results.filter(Boolean).length; + const failCount = results.length - successCount; + + printMessage`Lookup Test Results: + Total: ${String(results.length)} + Passed: ${String(successCount)} + Failed: ${String(failCount)}\n\n`; +} + +function filterWebFrameworks( + dirs: string[], +): string[] { + const wfs = new Set( + dirs.map((dir) => dir.split(sep).slice(-4, -3)[0] as WebFramework), + ); + const hasBanned = BANNED_WFS.filter((wf) => wfs.has(wf)); + if (isEmpty(hasBanned)) { + return dirs; + } + const bannedLabels = hasBanned.map((wf) => webFrameworks[wf]["label"]); + printErrorMessage`\n${ + values(bannedLabels) + } is not supported in lookup test yet.`; + return dirs.filter((dir) => + !BANNED_WFS.includes(dir.split(sep).slice(-4, -3)[0] as WebFramework) + ); +} + +/** + * Run the dev server and test with lookup command. + */ +async function testApp(dir: string): Promise { + const [wf, pm, kv, mq] = dir.split(sep).slice(-4) as // + [WebFramework, PackageManager, KvStore, MessageQueue]; + + printMessage` Testing ${values([wf, pm, kv, mq])}...`; + + const result = await serverClosure( + dir, + getDevCommand(pm), + sendLookup, + ); + + printMessage` Lookup ${result ? "successful" : "failed"} for ${ + values([wf, pm, kv, mq]) + }!`; + if (!result) { + printMessage` Check out these files for more details: + ${join(dir, "out.txt")} and + ${join(dir, "err.txt")}\n`; + } + printMessage`\n`; + + return result; +} + +const sendLookup = async (port: number) => { + const serverUrl = `http://localhost:${port}`; + const lookupTarget = `${serverUrl}/users/${HANDLE}`; + // Wait for server to be ready + printMessage` Waiting for server to start at ${serverUrl}...`; + + const isReady = await waitForServer(serverUrl, STARTUP_TIMEOUT); + + if (!isReady) { + printErrorMessage`Server did not start within \ +${String(STARTUP_TIMEOUT)}ms`; + return false; + } + + printMessage` Server is ready. Running lookup command...`; + + // Run lookup command from original directory + try { + await runSubCommand( + ["deno", "task", "cli", "lookup", lookupTarget], + { cwd: CWD }, + ); + + return true; + } catch (error) { + if (error instanceof Error) { + printErrorMessage`${error.message}`; + } + } + return false; +}; + +/** + * Wait for the server to be ready by checking if it responds to requests. + */ +async function waitForServer(url: string, timeout: number): Promise { + const startTime = Date.now(); + + while (Date.now() - startTime < timeout) { + try { + const response = await fetch(url, { signal: AbortSignal.timeout(1000) }); + if (response.ok) { + return true; + } + } catch { + // Server not ready yet, continue waiting + } + + // Wait 500ms before next attempt + await new Promise((resolve) => setTimeout(resolve, 500)); + } + + return false; +} + +async function serverClosure( + dir: string, + cmd: string, + callback: (port: number) => Promise, +): Promise> { + // Start the dev server using Node.js spawn + const devCommand = cmd.split(" "); + const serverProcess = spawn(devCommand[0], devCommand.slice(1), { + cwd: dir, + stdio: ["ignore", "pipe", "pipe"], + detached: true, // Create a new process group + }); + + // Append stdout and stderr to files + const stdout = createWriteStream(join(dir, "out.txt"), { flags: "a" }); + const stderr = createWriteStream(join(dir, "err.txt"), { flags: "a" }); + + serverProcess.stdout?.pipe(stdout); + serverProcess.stderr?.pipe(stderr); + + try { + const port = await determinePort(serverProcess); + return await callback(port); + } finally { + try { + process.kill(-serverProcess.pid!, "SIGKILL"); + } catch { + serverProcess.kill("SIGKILL"); + + // Close file streams + stdout.end(); + stderr.end(); + } + } +} + +function determinePort( + server: ChildProcessByStdio, +): Promise { + return new Promise((resolve, reject) => { + const timeout = setTimeout(() => { + reject( + new Error("Timeout: Could not determine port from server output"), + ); + }, STARTUP_TIMEOUT); + + let stdoutData = ""; + let stderrData = ""; + + // Common patterns for port detection + const portPatterns = [ + /listening on.*:(\d+)/i, + /server.*:(\d+)/i, + /port\s*:?\s*(\d+)/i, + /https?:\/\/localhost:(\d+)/i, + /https?:\/\/0\.0\.0\.0:(\d+)/i, + /https?:\/\/127\.0\.0\.1:(\d+)/i, + /https?:\/\/[^:]+:(\d+)/i, + ]; + + const checkForPort = (data: string) => { + for (const pattern of portPatterns) { + const match = data.match(pattern); + if (match && match[1]) { + const port = Number.parseInt(match[1], 10); + if (port > 0 && port < 65536) { + clearTimeout(timeout); + return port; + } + } + } + return null; + }; + + server.stdout.on("data", (chunk) => { + stdoutData += chunk.toString(); + const port = checkForPort(stdoutData); + if (port) resolve(port); + }); + + server.stderr.on("data", (chunk) => { + stderrData += chunk.toString(); + const port = checkForPort(stderrData); + if (port) resolve(port); + }); + + server.on("error", (err) => { + clearTimeout(timeout); + reject(err); + }); + + server.on("exit", (code) => { + clearTimeout(timeout); + reject( + new Error( + `Server exited with code ${code} before port could be determined`, + ), + ); + }); + }); +} diff --git a/packages/cli/src/init/test/run.ts b/packages/cli/src/init/test/run.ts new file mode 100644 index 000000000..a1cd0a1f5 --- /dev/null +++ b/packages/cli/src/init/test/run.ts @@ -0,0 +1,39 @@ +import { always, filter, map, pipe, tap, unless } from "@fxts/core"; +import { optionNames } from "@optique/core"; +import { join } from "node:path"; +import { printMessage } from "../../utils.ts"; +import createTestApp, { filterOptions, generateTestCases } from "./create.ts"; +import runServerAndLookupUser from "./lookup.ts"; +import type { InitTestData } from "./types.ts"; + +const runTests = + (dry: boolean) => + ({ testDirPrefix, dryRun, hydRun, ...options }: T) => + pipe( + options, + printStartMessage(dry), + generateTestCases, + filter(filterOptions), + map(createTestApp(join(testDirPrefix, getMid(dryRun, hydRun, dry)), dry)), + Array.fromAsync, + unless(always(dry), runServerAndLookupUser), + ); +export default runTests; + +const printStartMessage: (dry: boolean) => (t: T) => T = (dry: boolean) => + tap( + () => + printMessage`\n +Init ${dry ? "Dry" : "Hyd"} Test start! +Options: ${ + optionNames([ + "Web Framework", + "Package Manager", + "KV Store", + "Message Queue", + ]) + }`, + ); + +const getMid = (dryRun: boolean, hydRun: boolean, dry: boolean) => + dryRun === hydRun ? dry ? "dry" : "hyd" : ""; diff --git a/packages/cli/src/init/test/types.ts b/packages/cli/src/init/test/types.ts new file mode 100644 index 000000000..4bba63a9f --- /dev/null +++ b/packages/cli/src/init/test/types.ts @@ -0,0 +1,27 @@ +import type { TestInitCommand } from "../command.ts"; + +export interface InitTestData extends DefineAllOptions { + runId: string; + testDirPrefix: string; +} + +export type MultipleOption = + | "webFramework" + | "packageManager" + | "kvStore" + | "messageQueue"; + +export type DefineOption = + & Omit + & { + [Key in MultipleOption]: Key extends K ? TestInitCommand[Key] & string[] + : T[Key]; + }; + +type NoRunMode = "noHydRun" | "noDryRun"; +type RunMode = "hydRun" | "dryRun"; + +export type DefineAllOptions = + & Omit + & { [K in MultipleOption]: (TestInitCommand[K][number] & string)[] } + & { [R in RunMode]: boolean }; diff --git a/packages/cli/src/init/test/utils.ts b/packages/cli/src/init/test/utils.ts new file mode 100644 index 000000000..c27a61317 --- /dev/null +++ b/packages/cli/src/init/test/utils.ts @@ -0,0 +1,21 @@ +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { printMessage } from "../../utils.ts"; + +export const genRunId = () => + `${Date.now()}-${Math.random().toString(36).slice(2)}`; + +export const genTestDirPrefix = ({ runId }: T) => + join(tmpdir(), "fedify-init", runId); + +export const emptyTestDir = < + T extends { testDirPrefix: string }, +>({ testDirPrefix }: T) => + Deno.remove(testDirPrefix, { recursive: true }).catch(() => {}); + +export const logTestDir = < + T extends { runId: string; testDirPrefix: string }, +>({ runId, testDirPrefix }: T) => + printMessage`Test run completed. +Run ID: ${runId} +Path: ${testDirPrefix}`; diff --git a/packages/cli/src/init/types.ts b/packages/cli/src/init/types.ts index 1dc91933c..ac0caa69c 100644 --- a/packages/cli/src/init/types.ts +++ b/packages/cli/src/init/types.ts @@ -36,7 +36,7 @@ export interface WebFrameworkInitializer { command?: string[]; dependencies?: object; devDependencies?: object; - federationFile: Message; + federationFile: string; loggingFile: string; files?: Record; compilerOptions?: Record; @@ -47,9 +47,9 @@ export interface WebFrameworkInitializer { export interface WebFrameworkDescription { label: string; packageManagers: readonly PackageManager[]; + defaultPort: number; init( - projectName: string, - pm: PackageManager, + data: InitCommandOptions & { projectName: string }, ): WebFrameworkInitializer; } diff --git a/packages/cli/src/init/webframeworks.ts b/packages/cli/src/init/webframeworks.ts index a752880b3..d29ab616c 100644 --- a/packages/cli/src/init/webframeworks.ts +++ b/packages/cli/src/init/webframeworks.ts @@ -1,5 +1,4 @@ import { pipe } from "@fxts/core"; -import { message } from "@optique/core"; import { replace } from "../utils.ts"; import { PACKAGE_MANAGER } from "./const.ts"; import { @@ -7,6 +6,7 @@ import { getNextInitCommand, getNitroInitCommand, PACKAGE_VERSION, + packageManagerToRuntime, readTemplate, } from "./lib.ts"; import type { WebFrameworks } from "./types.ts"; @@ -15,36 +15,41 @@ const webFrameworks: WebFrameworks = { hono: { label: "Hono", packageManagers: PACKAGE_MANAGER, - init: (projectName, pm) => ({ + init: ({ projectName, packageManager: pm }) => ({ dependencies: pm === "deno" ? { "@std/dotenv": "^0.225.2", "@hono/hono": "^4.5.0", "@hongminhee/x-forwarded-fetch": "^0.2.0", + "@fedify/hono": PACKAGE_VERSION, } : pm === "bun" - ? { hono: "^4.5.0", "x-forwarded-fetch": "^0.2.0" } + ? { + hono: "^4.5.0", + "x-forwarded-fetch": "^0.2.0", + "@fedify/hono": PACKAGE_VERSION, + } : { "@dotenvx/dotenvx": "^1.14.1", hono: "^4.5.0", "@hono/node-server": "^1.12.0", tsx: "^4.17.0", "x-forwarded-fetch": "^0.2.0", + "@fedify/hono": PACKAGE_VERSION, }, devDependencies: pm === "bun" ? { "@types/bun": "^1.1.6" } : {}, - federationFile: message`src/federation.ts`, + federationFile: "src/federation.ts", loggingFile: "src/logging.ts", files: { "src/app.tsx": pipe( "hono/app.tsx", readTemplate, - replace( - /\/\* hono \*\//, - pm === "deno" ? "@hono/hono" : "hono", - ), - ) - .replace(/\/\* logger \*\//, projectName), - "src/index.ts": readTemplate(`hono/index/${pm}.ts`), + replace(/\/\* hono \*\//, pm === "deno" ? "@hono/hono" : "hono"), + replace(/\/\* logger \*\//, projectName), + ), + "src/index.ts": readTemplate( + `hono/index/${packageManagerToRuntime(pm)}.ts`, + ), }, compilerOptions: pm === "deno" ? undefined : { "lib": ["ESNext", "DOM"], @@ -70,15 +75,16 @@ const webFrameworks: WebFrameworks = { ? "bun run ./src/index.ts" : "dotenvx run -- node --import tsx ./src/index.ts", }, - instruction: getInstruction(pm), + instruction: getInstruction(pm, 8000), }), + defaultPort: 8000, }, express: { label: "Express", - packageManagers: ["bun", "npm", "yarn", "pnpm"] as const, - init: (projectName, pm) => ({ + packageManagers: PACKAGE_MANAGER, + init: ({ projectName, packageManager: pm }) => ({ dependencies: { - express: "^4.19.2", + "npm:express": "^4.19.2", "@fedify/express": PACKAGE_VERSION, ...(pm !== "deno" && pm !== "bun" ? { "@dotenvx/dotenvx": "^1.14.1", tsx: "^4.17.0" } @@ -88,7 +94,7 @@ const webFrameworks: WebFrameworks = { "@types/express": "^4.17.21", ...(pm === "bun" ? { "@types/bun": "^1.1.6" } : {}), }, - federationFile: message`src/federation.ts`, + federationFile: "src/federation.ts", loggingFile: "src/logging.ts", files: { "src/app.ts": readTemplate("express/app.ts") @@ -108,21 +114,26 @@ const webFrameworks: WebFrameworks = { tasks: { "dev": pm === "bun" ? "bun run --hot ./src/index.ts" + : pm === "deno" + ? "deno run --allow-net --allow-env --allow-sys --watch ./src/index.ts" : "dotenvx run -- tsx watch ./src/index.ts", "prod": pm === "bun" ? "bun run ./src/index.ts" + : pm === "deno" + ? "deno run --allow-net --allow-env --allow-sys ./src/index.ts" : "dotenvx run -- node --import tsx ./src/index.ts", }, - instruction: getInstruction(pm), + instruction: getInstruction(pm, 8000), }), + defaultPort: 8000, }, nitro: { label: "Nitro", packageManagers: PACKAGE_MANAGER, - init: (_, pm) => ({ + init: ({ packageManager: pm, testMode }) => ({ command: getNitroInitCommand(pm), dependencies: { "@fedify/h3": PACKAGE_VERSION }, - federationFile: message`server/federation.ts`, + federationFile: "server/federation.ts", loggingFile: "server/logging.ts", files: { "server/middleware/federation.ts": readTemplate( @@ -130,23 +141,28 @@ const webFrameworks: WebFrameworks = { ), "server/error.ts": readTemplate("nitro/server/error.ts"), "nitro.config.ts": readTemplate("nitro/nitro.config.ts"), + ...( + testMode ? { ".env": readTemplate("nitro/.env.test") } : {} + ), }, - instruction: getInstruction(pm), + instruction: getInstruction(pm, 3000), }), + defaultPort: 3000, }, next: { label: "Next.js", packageManagers: PACKAGE_MANAGER, - init: (_, pm) => ({ + init: ({ packageManager: pm }) => ({ label: "Next.js", command: getNextInitCommand(pm), dependencies: { "@fedify/next": PACKAGE_VERSION }, devDependencies: { "@types/node": "^20.11.2" }, - federationFile: message`federation/index.ts`, + federationFile: "federation/index.ts", loggingFile: "logging.ts", files: { "middleware.ts": readTemplate("next/middleware.ts") }, - instruction: getInstruction(pm), + instruction: getInstruction(pm, 3000), }), + defaultPort: 3000, }, } as const; export default webFrameworks; diff --git a/packages/cli/src/mod.ts b/packages/cli/src/mod.ts index 176581214..719b1836d 100644 --- a/packages/cli/src/mod.ts +++ b/packages/cli/src/mod.ts @@ -6,7 +6,12 @@ import { runGenerateVocab, } from "./generate-vocab/mod.ts"; import { inboxCommand, runInbox } from "./inbox.tsx"; -import { initCommand, runInit } from "./init/mod.ts"; +import { + initCommand, + runInit, + runTestInit, + testInitCommand, +} from "./init/mod.ts"; import { lookupCommand, runLookup } from "./lookup.ts"; import { nodeInfoCommand, runNodeInfo } from "./nodeinfo.ts"; import { runTunnel, tunnelCommand } from "./tunnel.ts"; @@ -20,6 +25,7 @@ const command = or( nodeInfoCommand, tunnelCommand, generateVocabCommand, + testInitCommand, ); async function main() { @@ -48,6 +54,9 @@ async function main() { if (result.command === "generate-vocab") { await runGenerateVocab(result); } + if (result.command === "test-init") { + await runTestInit(result); + } } await main(); diff --git a/packages/cli/src/utils.ts b/packages/cli/src/utils.ts index 5394f0662..240109328 100644 --- a/packages/cli/src/utils.ts +++ b/packages/cli/src/utils.ts @@ -1,7 +1,9 @@ import { isObject } from "@fxts/core"; +import { message } from "@optique/core"; +import { print, printError } from "@optique/run"; import { Chalk } from "chalk"; import { highlight } from "cli-highlight"; -import { toMerged } from "es-toolkit"; +import { flow, toMerged } from "es-toolkit"; import { spawn } from "node:child_process"; import { writeFile } from "node:fs/promises"; import process from "node:process"; @@ -59,18 +61,68 @@ export const isNotFoundError = (e: unknown): e is { code: "ENOENT" } => "code" in e && e.code === "ENOENT"; -export const runSubCommand = [2]>( +export class CommandError extends Error { + public commandLine: string; + constructor( + message: string, + public stdout: string, + public stderr: string, + public code: number, + public command: string[], + ) { + super(message); + this.name = "CommandError"; + this.commandLine = command.join(" "); + } +} + +export const runSubCommand = async [2]>( command: string[], options: Opt, ): Promise<{ stdout: string; stderr: string; -}> => - new Promise((resolve, reject) => { - const child = spawn(command[0], command.slice(1), options); +}> => { + const commands = // split by "&&" + command.reduce((acc, cur) => { + if (cur === "&&") { + acc.push([]); + } else { + if (acc.length === 0) acc.push([]); + acc[acc.length - 1].push(cur); + } + return acc; + }, []); + + const results = { stdout: "", stderr: "" }; + + for (const cmd of commands) { + try { + const result = await runSingularCommand(cmd, options); + results.stdout += (results.stdout ? "\n" : "") + result.stdout; + results.stderr += (results.stderr ? "\n" : "") + result.stderr; + } catch (e) { + if (e instanceof CommandError) { + results.stdout += (results.stdout ? "\n" : "") + e.stdout; + results.stderr += (results.stderr ? "\n" : "") + e.stderr; + } + throw e; + } + } + return results; +}; +const runSingularCommand = ( + command: string[], + options: Parameters[2], +) => + new Promise<{ + stdout: string; + stderr: string; + }>((resolve, reject) => { let stdout = ""; let stderr = ""; + const child = spawn(command[0], command.slice(1), options); child.stdout?.on("data", (data) => { stdout += data.toString(); @@ -79,11 +131,23 @@ export const runSubCommand = [2]>( stderr += data.toString(); }); - child.on("close", () => { - resolve({ - stdout: stdout.trim(), - stderr: stderr.trim(), - }); + child.on("close", (code) => { + if (code === 0) { + resolve({ + stdout: stdout.trim(), + stderr: stderr.trim(), + }); + } else { + reject( + new CommandError( + `Command exited with code ${code ?? "unknown"}`, + stdout.trim(), + stderr.trim(), + code ?? -1, + command, + ), + ); + } }); child.on("error", (error) => { @@ -103,6 +167,12 @@ export const replace = ( ) => (text: string): string => text.replace(pattern, replacement as string); +export const replaceAll = ( + pattern: string | RegExp, + replacement: string | ((substring: string, ...args: unknown[]) => string), +) => +(text: string): string => text.replaceAll(pattern, replacement as string); + export const getOsType = () => process.platform; export async function writeTextFile( @@ -134,3 +204,51 @@ export const notEmptyObj = | object>( ): obj is Exclude> => Object.keys(obj).length > 0; export const exit = (code: number) => process.exit(code); + +/** + * Generic type to represent the types of the items in iterables. + */ +export type ItersItems[]> = T extends [] ? [] + : T extends [infer Head, ...infer Tail] + ? Head extends Iterable + ? Tail extends Iterable[] ? [Item, ...ItersItems] + : [Item] + : never + : never; + +/** + * ```haskell + * product::[[a], [b], ...] -> [[a, b, ...]] + * ``` + * + * Cartesian product of the input iterables. + * Inspired by Python's `itertools.product`. + * + * @param {...Iterable} iters - The input iterables to compute the Cartesian product. + * @returns {Generator>} A generator that yields arrays containing one element from each iterable. + * + * @example + * ```ts + * const iter1 = [1, 2]; + * const iter2 = ['a', 'b']; + * const iter3 = [true, false]; + * const productIter = product(iter1, iter2, iter3); + * console.log(Array.from(productIter)); // Output: [[1, 'a', true], [1, 'a', false], [ + */ +export function* product[]>( + ...[head, ...tail]: T +): Generator> { + if (!head) yield [] as ItersItems; + else { + for (const x of head) { + for (const xs of product(...tail)) yield [x, ...xs] as ItersItems; + } + } +} + +export type GeneratedType = T extends + Generator ? R : never; + +type PrintMessage = (...args: Parameters) => void; +export const printMessage: PrintMessage = flow(message, print); +export const printErrorMessage: PrintMessage = flow(message, printError); diff --git a/packages/fedify/package.json b/packages/fedify/package.json index 905150d52..b7f13c30b 100644 --- a/packages/fedify/package.json +++ b/packages/fedify/package.json @@ -142,8 +142,6 @@ "@fedify/vocab-tools": "workspace:^", "@std/assert": "jsr:^0.226.0", "@std/path": "catalog:", - "@std/url": "jsr:1.0.0-rc.3", - "@std/yaml": "jsr:^1.0.6", "@types/node": "^24.2.1", "fast-check": "^3.22.0", "fetch-mock": "catalog:", diff --git a/packages/vocab-runtime/deno.json b/packages/vocab-runtime/deno.json index fad8f9043..f1b13ac00 100644 --- a/packages/vocab-runtime/deno.json +++ b/packages/vocab-runtime/deno.json @@ -12,6 +12,7 @@ "url": "https://hongminhee.org/" }, "imports": { + "@multiformats/base-x": "npm:@multiformats/base-x@^4.0.1", "asn1js": "npm:asn1js@^3.0.6", "byte-encodings": "npm:byte-encodings@^1.0.11", "fetch-mock": "npm:fetch-mock@^12.5.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cc69f0fc3..fbb73a057 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,7 +11,7 @@ catalogs: version: 4.20250529.0 '@fxts/core': specifier: ^1.15.0 - version: 1.20.0 + version: 1.15.0 '@js-temporal/polyfill': specifier: ^0.5.1 version: 0.5.1 @@ -32,7 +32,7 @@ catalogs: version: 1.0.13 '@std/path': specifier: jsr:^1.0.6 - version: 1.1.0 + version: 1.1.2 '@sveltejs/kit': specifier: ^2.0.0 version: 2.36.2 @@ -41,7 +41,7 @@ catalogs: version: 0.10.7 '@types/bun': specifier: ^1.2.23 - version: 1.3.3 + version: 1.2.23 '@types/express': specifier: ^4.0.0 version: 4.17.23 @@ -50,7 +50,7 @@ catalogs: version: 2.15.0 '@types/node': specifier: ^22.17.0 - version: 22.19.1 + version: 22.18.8 amqplib: specifier: ^0.10.8 version: 0.10.8 @@ -74,7 +74,7 @@ catalogs: version: 5.1.0 fetch-mock: specifier: ^12.5.4 - version: 12.6.0 + version: 12.5.4 h3: specifier: ^1.15.0 version: 1.15.3 @@ -215,7 +215,7 @@ importers: version: 2.15.0 '@types/node': specifier: 'catalog:' - version: 22.19.1 + version: 22.18.8 amqplib: specifier: 'catalog:' version: 0.10.8 @@ -269,16 +269,16 @@ importers: version: 5.9.3 vitepress: specifier: ^1.6.3 - version: 1.6.3(patch_hash=56bd737eca4c1ba581d00bedd4fe307f6e48f782af59933eac54bb7d43206b99)(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3) + version: 1.6.3(patch_hash=56bd737eca4c1ba581d00bedd4fe307f6e48f782af59933eac54bb7d43206b99)(@algolia/client-search@5.29.0)(@types/node@22.18.8)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3) vitepress-plugin-group-icons: specifier: ^1.3.5 - version: 1.6.1(markdown-it@14.1.0)(vite@7.1.3(@types/node@22.19.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.1)) + version: 1.6.1(markdown-it@14.1.0)(vite@5.4.19(@types/node@22.18.8)(lightningcss@1.30.1)) vitepress-plugin-llms: specifier: ^1.1.0 version: 1.6.0 vitepress-plugin-mermaid: specifier: ^2.0.17 - version: 2.0.17(mermaid@11.7.0)(vitepress@1.6.3(patch_hash=56bd737eca4c1ba581d00bedd4fe307f6e48f782af59933eac54bb7d43206b99)(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3)) + version: 2.0.17(mermaid@11.7.0)(vitepress@1.6.3(patch_hash=56bd737eca4c1ba581d00bedd4fe307f6e48f782af59933eac54bb7d43206b99)(@algolia/client-search@5.29.0)(@types/node@22.18.8)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3)) x-forwarded-fetch: specifier: ^0.2.0 version: 0.2.0 @@ -354,7 +354,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 22.19.1 + version: 22.18.8 tsx: specifier: ^4.19.0 version: 4.20.3 @@ -459,7 +459,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 22.19.1 + version: 22.18.8 '@types/react': specifier: ^18 version: 18.3.23 @@ -508,7 +508,7 @@ importers: version: 4.1.11 '@types/node': specifier: 'catalog:' - version: 22.19.1 + version: 22.18.8 '@types/react': specifier: ^19 version: 19.1.8 @@ -661,13 +661,13 @@ importers: version: link:../vocab-tools '@fxts/core': specifier: 'catalog:' - version: 1.20.0 + version: 1.15.0 '@hongminhee/localtunnel': specifier: ^0.3.0 version: 0.3.0 '@inquirer/prompts': specifier: ^7.8.4 - version: 7.10.1(@types/node@22.19.1) + version: 7.8.6(@types/node@22.18.8) '@jimp/core': specifier: ^1.6.0 version: 1.6.0 @@ -685,10 +685,10 @@ importers: version: 1.1.1 '@optique/core': specifier: ^0.6.1 - version: 0.6.2 + version: 0.6.1 '@optique/run': specifier: ^0.6.1 - version: 0.6.2 + version: 0.6.1 '@poppanator/http-constants': specifier: ^1.1.1 version: 1.1.1 @@ -715,7 +715,7 @@ importers: version: 1.39.10 fetch-mock: specifier: 'catalog:' - version: 12.6.0 + version: 12.5.4 hono: specifier: ^4.8.3 version: 4.8.3 @@ -724,7 +724,7 @@ importers: version: 0.19.5(@jimp/custom@0.22.12) inquirer: specifier: ^12.9.4 - version: 12.11.1(@types/node@22.19.1) + version: 12.9.6(@types/node@22.18.8) inquirer-toggle: specifier: ^1.0.1 version: 1.0.1 @@ -739,14 +739,14 @@ importers: version: 1.29.2 srvx: specifier: ^0.8.7 - version: 0.8.16 + version: 0.8.7 devDependencies: '@types/bun': specifier: 'catalog:' - version: 1.3.3 + version: 1.2.23(@types/react@19.1.8) '@types/node': specifier: 'catalog:' - version: 22.19.1 + version: 22.18.8 tsdown: specifier: 'catalog:' version: 0.12.9(typescript@5.9.3) @@ -787,7 +787,7 @@ importers: version: 4.17.23 '@types/node': specifier: 'catalog:' - version: 22.19.1 + version: 22.18.8 tsdown: specifier: 'catalog:' version: 0.12.9(typescript@5.9.3) @@ -809,7 +809,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 22.19.1 + version: 22.18.8 tsdown: specifier: 'catalog:' version: 0.12.9(typescript@5.9.3) @@ -879,13 +879,7 @@ importers: version: '@jsr/std__assert@0.226.0' '@std/path': specifier: 'catalog:' - version: '@jsr/std__path@1.1.0' - '@std/url': - specifier: jsr:1.0.0-rc.3 - version: '@jsr/std__url@1.0.0-rc.3' - '@std/yaml': - specifier: jsr:^1.0.6 - version: '@jsr/std__yaml@1.0.8' + version: '@jsr/std__path@1.1.2' '@types/node': specifier: ^24.2.1 version: 24.3.0 @@ -894,7 +888,7 @@ importers: version: 3.23.2 fetch-mock: specifier: 'catalog:' - version: 12.6.0 + version: 12.5.4 miniflare: specifier: ^4.20250523.0 version: 4.20250617.4 @@ -957,7 +951,7 @@ importers: version: 2.15.0 '@types/node': specifier: 'catalog:' - version: 22.19.1 + version: 22.18.8 tsdown: specifier: 'catalog:' version: 0.12.9(typescript@5.9.3) @@ -982,7 +976,7 @@ importers: version: 4.17.23 '@types/node': specifier: 'catalog:' - version: 22.19.1 + version: 22.18.8 tsdown: specifier: 'catalog:' version: 0.12.9(typescript@5.9.3) @@ -1051,7 +1045,7 @@ importers: version: '@jsr/std__async@1.0.13' '@types/node': specifier: 'catalog:' - version: 22.19.1 + version: 22.18.8 tsdown: specifier: 'catalog:' version: 0.12.9(typescript@5.9.3) @@ -1167,7 +1161,7 @@ importers: version: 24.3.0 fetch-mock: specifier: 'catalog:' - version: 12.6.0 + version: 12.5.4 tsdown: specifier: 'catalog:' version: 0.12.9(typescript@5.9.3) @@ -1185,14 +1179,14 @@ importers: version: 1.0.11 es-toolkit: specifier: ^1.39.10 - version: 1.42.0 + version: 1.39.10 yaml: specifier: ^2.8.1 version: 2.8.1 devDependencies: '@types/node': specifier: 'catalog:' - version: 22.19.1 + version: 22.18.8 tsdown: specifier: 'catalog:' version: 0.12.9(typescript@5.9.3) @@ -1318,8 +1312,8 @@ packages: '@braintree/sanitize-url@7.1.1': resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==} - '@canvas/image-data@1.1.0': - resolution: {integrity: sha512-QdObRRjRbcXGmM1tmJ+MrHcaz1MftF2+W7YI+MsphnsCrmtyfS0d5qJbk0MeSbUeyM/jCb0hmnkXPsy026L7dA==} + '@canvas/image-data@1.0.0': + resolution: {integrity: sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw==} '@cfworker/json-schema@4.1.1': resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} @@ -1986,8 +1980,8 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@fxts/core@1.20.0': - resolution: {integrity: sha512-f6NNS0pu7K72sYKf85GKnkTNGpQsWUNJ3VH8qMTofiRWAksa491Yvne8v0extMjBnI3+aPs4m3OKITgvVyZbeg==} + '@fxts/core@1.15.0': + resolution: {integrity: sha512-qkY9lKrLyEZ54wg0jZfpQ/5Zy69o4/npVJjipykdRHOIbPBsRptisgwEGh+C4KZVViQ6zUhf1cc/fOsfNp3oGw==} '@grpc/grpc-js@1.13.4': resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} @@ -2279,12 +2273,12 @@ packages: cpu: [x64] os: [win32] - '@inquirer/ansi@1.0.2': - resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} + '@inquirer/ansi@1.0.0': + resolution: {integrity: sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==} engines: {node: '>=18'} - '@inquirer/checkbox@4.3.2': - resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==} + '@inquirer/checkbox@4.2.4': + resolution: {integrity: sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2292,8 +2286,8 @@ packages: '@types/node': optional: true - '@inquirer/confirm@5.1.21': - resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} + '@inquirer/confirm@5.1.18': + resolution: {integrity: sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2301,8 +2295,8 @@ packages: '@types/node': optional: true - '@inquirer/core@10.3.2': - resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} + '@inquirer/core@10.2.2': + resolution: {integrity: sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2314,8 +2308,8 @@ packages: resolution: {integrity: sha512-7vsXSfxtrrbwMTirfaKwPcjqJy7pzeuF/bP62yo1NQrRJ5HjmMlrhZml/Ljm9ODc1RnbhJlTeSnCkjtFddKjwA==} engines: {node: '>=18'} - '@inquirer/editor@4.2.23': - resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==} + '@inquirer/editor@4.2.20': + resolution: {integrity: sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2323,8 +2317,8 @@ packages: '@types/node': optional: true - '@inquirer/expand@4.0.23': - resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==} + '@inquirer/expand@4.0.20': + resolution: {integrity: sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2332,8 +2326,8 @@ packages: '@types/node': optional: true - '@inquirer/external-editor@1.0.3': - resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + '@inquirer/external-editor@1.0.2': + resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2341,12 +2335,12 @@ packages: '@types/node': optional: true - '@inquirer/figures@1.0.15': - resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + '@inquirer/figures@1.0.13': + resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} engines: {node: '>=18'} - '@inquirer/input@4.3.1': - resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==} + '@inquirer/input@4.2.4': + resolution: {integrity: sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2354,8 +2348,8 @@ packages: '@types/node': optional: true - '@inquirer/number@3.0.23': - resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==} + '@inquirer/number@3.0.20': + resolution: {integrity: sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2363,8 +2357,8 @@ packages: '@types/node': optional: true - '@inquirer/password@4.0.23': - resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==} + '@inquirer/password@4.0.20': + resolution: {integrity: sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2372,8 +2366,8 @@ packages: '@types/node': optional: true - '@inquirer/prompts@7.10.1': - resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==} + '@inquirer/prompts@7.8.6': + resolution: {integrity: sha512-68JhkiojicX9SBUD8FE/pSKbOKtwoyaVj1kwqLfvjlVXZvOy3iaSWX4dCLsZyYx/5Ur07Fq+yuDNOen+5ce6ig==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2381,8 +2375,8 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@4.1.11': - resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==} + '@inquirer/rawlist@4.1.8': + resolution: {integrity: sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2390,8 +2384,8 @@ packages: '@types/node': optional: true - '@inquirer/search@3.2.2': - resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==} + '@inquirer/search@3.1.3': + resolution: {integrity: sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2399,8 +2393,8 @@ packages: '@types/node': optional: true - '@inquirer/select@4.4.2': - resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==} + '@inquirer/select@4.3.4': + resolution: {integrity: sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2412,8 +2406,8 @@ packages: resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} engines: {node: '>=18'} - '@inquirer/type@3.0.10': - resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} + '@inquirer/type@3.0.8': + resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2608,17 +2602,14 @@ packages: '@jsr/std__async@1.0.13': resolution: {integrity: sha512-GEApyNtzauJ0kEZ/GxebSkdEN0t29qJtkw+WEvzYTwkL6fHX8cq3YWzRjCqHu+4jMl+rpHiwyr/lfitNInntzA==, tarball: https://npm.jsr.io/~/11/@jsr/std__async/1.0.13.tgz} + '@jsr/std__internal@1.0.10': + resolution: {integrity: sha512-fmD6yKep/sMnB2yPQU/REZG7Z4N9SZwcUBNnceo4QkXk67l3JEfxHoROQ/YHeVSOmq6x55Ra6nuMjz2ib3nj3g==, tarball: https://npm.jsr.io/~/11/@jsr/std__internal/1.0.10.tgz} + '@jsr/std__internal@1.0.8': resolution: {integrity: sha512-C0HSkIOA4gZPhLT2YXBXYF51YTpWXWHYUgzs3PhRCVbeVpbJ3Iomghu/ylIG+SsIDGDwxUkSCvfOOveRNS/mKg==, tarball: https://npm.jsr.io/~/11/@jsr/std__internal/1.0.8.tgz} - '@jsr/std__path@1.1.0': - resolution: {integrity: sha512-rnxGg/nJGfDbJO+xIJ9YEzLD7dCzjr3NHShf4dbnlt44WEYNwMjg+TcDO6F2NPHBnn/6iUFwbnNzysrZvyD1Og==, tarball: https://npm.jsr.io/~/11/@jsr/std__path/1.1.0.tgz} - - '@jsr/std__url@1.0.0-rc.3': - resolution: {integrity: sha512-LdgttuY43p/yqvnwN6U5OZsnG4uTpu+xH4mzuH2qrHW6Jn1L+ToRL7WlCHSK2cp4of3Oit8QIwGyx1k1ay1LJQ==, tarball: https://npm.jsr.io/~/11/@jsr/std__url/1.0.0-rc.3.tgz} - - '@jsr/std__yaml@1.0.8': - resolution: {integrity: sha512-iLe84pvIEtG7EFKxP5fIQn7CFQle7gzkb6KSPqf9zkyR2NVViSJjK8xbXg82SUEFSmpdY18qCGpVEnTG3oRMVg==, tarball: https://npm.jsr.io/~/11/@jsr/std__yaml/1.0.8.tgz} + '@jsr/std__path@1.1.2': + resolution: {integrity: sha512-5hkOR1s5M7am02Bn9KS+SNMNwUSivz7t7/w2HBhFIfO7Eh8+mWilaZ+1tdanV9aaSHr4c99Zo4Da+cCSuzUOdA==, tarball: https://npm.jsr.io/~/11/@jsr/std__path/1.1.2.tgz} '@logtape/file@1.1.1': resolution: {integrity: sha512-WZb1VfAR/7dbJqv0IseGZ7SzBzzoBDoZipIADIQj+X1/cXKuwdbdILQshKwttHMQuOOE5LxWibaCo/WHfHiaOQ==} @@ -3189,12 +3180,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 - '@optique/core@0.6.2': - resolution: {integrity: sha512-HTxIHJ8xLOSZotiU6Zc5BCJv+SJ8DMYmuiQM+7tjF7RolJn/pdZNe7M78G3+DgXL9lIf82l8aGcilmgVYRQnGQ==} + '@optique/core@0.6.1': + resolution: {integrity: sha512-e3J5zCL9aBAheZkLgYUoeAt1wKSkFbSn0+h0kB4VYabOGUnesVuSxZe00BY4jLnXr36HqaSf6ZTJi8bxbLH0Zg==} engines: {bun: '>=1.2.0', deno: '>=2.3.0', node: '>=20.0.0'} - '@optique/run@0.6.2': - resolution: {integrity: sha512-ERksB5bHozwEUVlTPToIc8UjZZBOgLeBhFZYh2lgldUbNDt7LItzgcErsPq5au5i5IBmmyCti4+2A3x+MRI4Xw==} + '@optique/run@0.6.1': + resolution: {integrity: sha512-P3E5ZAAwhAg8RYp2M4MPtwUr1wdZD7/IxHGKwW+Ie8eFbmfXnfvrygyqh5At0mQXVxbzKYlVrfl1vdoKVoxD7Q==} engines: {bun: '>=1.2.0', deno: '>=2.3.0', node: '>=20.0.0'} '@oxc-project/runtime@0.75.0': @@ -3758,8 +3749,8 @@ packages: '@types/bun@1.2.17': resolution: {integrity: sha512-l/BYs/JYt+cXA/0+wUhulYJB6a6p//GTPiJ7nV+QHa8iiId4HZmnu/3J/SowP5g0rTiERY2kfGKXEK5Ehltx4Q==} - '@types/bun@1.3.3': - resolution: {integrity: sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g==} + '@types/bun@1.2.23': + resolution: {integrity: sha512-le8ueOY5b6VKYf19xT3McVbXqLqmxzPXHsQT/q9JHgikJ2X22wyTW3g3ohz2ZMnp7dod6aduIiq8A14Xyimm0A==} '@types/connect@3.4.36': resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} @@ -3941,8 +3932,8 @@ packages: '@types/node@22.16.0': resolution: {integrity: sha512-B2egV9wALML1JCpv3VQoQ+yesQKAmNMBIAY7OteVrikcOcAkWm+dGL6qpeCktPjAv6N1JLnhbNiqS35UpFyBsQ==} - '@types/node@22.19.1': - resolution: {integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==} + '@types/node@22.18.8': + resolution: {integrity: sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==} '@types/node@24.3.0': resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} @@ -4640,8 +4631,10 @@ packages: peerDependencies: '@types/react': ^19 - bun-types@1.3.3: - resolution: {integrity: sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ==} + bun-types@1.2.23: + resolution: {integrity: sha512-R9f0hKAZXgFU3mlrA0YpE/fiDvwV0FT9rORApt2aQVWSuJDzZOyB5QLc0N/4HF57CS8IXJ6+L5E4W1bW6NS2Aw==} + peerDependencies: + '@types/react': ^19 busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} @@ -4722,8 +4715,8 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - chardet@2.1.1: - resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + chardet@2.1.0: + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} chevrotain-allstar@0.3.1: resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==} @@ -4840,6 +4833,9 @@ packages: cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + cookie-es@2.0.0: + resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} + cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -5218,8 +5214,8 @@ packages: emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} - emoji-regex@10.6.0: - resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + emoji-regex@10.5.0: + resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -5297,9 +5293,6 @@ packages: es-toolkit@1.39.5: resolution: {integrity: sha512-z9V0qU4lx1TBXDNFWfAASWk6RNU6c6+TJBKE+FLIg8u0XJ6Yw58Hi0yX8ftEouj6p1QARRlXLFfHbIli93BdQQ==} - es-toolkit@1.42.0: - resolution: {integrity: sha512-SLHIyY7VfDJBM8clz4+T2oquwTQxEzu263AyhVK4jREOAwJ+8eebaa4wM3nlvnAqhDrMm2EsA6hWHaQsMPQ1nA==} - esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -5609,8 +5602,8 @@ packages: picomatch: optional: true - fetch-mock@12.6.0: - resolution: {integrity: sha512-oAy0OqAvjAvduqCeWveBix7LLuDbARPqZZ8ERYtBcCURA3gy7EALA3XWq0tCNxsSg+RmmJqyaeeZlOCV9abv6w==} + fetch-mock@12.5.4: + resolution: {integrity: sha512-zeECXue5losbXbbnHYzLDl0ZKLnuyRmLZ3auSJISoCnKiOGXNJA6nRiRa4qxI9pyQqeTgHL5d0Ryz+3CUliLOw==} engines: {node: '>=18.11.0'} fflate@0.8.2: @@ -5720,8 +5713,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} get-intrinsic@1.3.0: @@ -5925,8 +5918,8 @@ packages: inquirer-toggle@1.0.1: resolution: {integrity: sha512-0cReq29SpyO4JnoVmGBZJPoBv8sBzsGXw3MDjNxilOzhAFxIvC8mOFj34bCMtlFYKfkBKNYVLmmnP/qmrVuVMg==} - inquirer@12.11.1: - resolution: {integrity: sha512-9VF7mrY+3OmsAfjH3yKz/pLbJ5z22E23hENKw3/LNSaA/sAt3v49bDRY+Ygct1xwuKT+U+cBfTzjCPySna69Qw==} + inquirer@12.9.6: + resolution: {integrity: sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -7512,8 +7505,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sax@1.4.3: - resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} scheduler@0.25.0-rc-7771d3a7-20240827: resolution: {integrity: sha512-n4nHmAoerbIOSrH24w0+fcdCUwQ4Npm7yXfsrn09FL01OWIaxpuo4P0rj3qPyLFgsJDbn18sWvLVB/e/KPnR+A==} @@ -7657,8 +7650,8 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - srvx@0.8.16: - resolution: {integrity: sha512-hmcGW4CgroeSmzgF1Ihwgl+Ths0JqAJ7HwjP2X7e3JzY7u4IydLMcdnlqGQiQGUswz+PO9oh/KtCpOISIvs9QQ==} + srvx@0.8.7: + resolution: {integrity: sha512-g3+15LlwVOGL2QpoTPZlvRjg+9a5Tx/69CatXjFP6txvhIaW2FmGyzJfb8yft5wyfGddvJmP/Yx+e/uNDMRSLQ==} engines: {node: '>=20.16.0'} hasBin: true @@ -8432,6 +8425,11 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} + hasBin: true + yaml@2.8.1: resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} engines: {node: '>= 14.6'} @@ -8629,7 +8627,7 @@ snapshots: '@braintree/sanitize-url@7.1.1': {} - '@canvas/image-data@1.1.0': {} + '@canvas/image-data@1.0.0': {} '@cfworker/json-schema@4.1.1': {} @@ -9079,7 +9077,7 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@fxts/core@1.20.0': + '@fxts/core@1.15.0': dependencies: tslib: 2.8.1 @@ -9314,41 +9312,41 @@ snapshots: '@img/sharp-win32-x64@0.34.3': optional: true - '@inquirer/ansi@1.0.2': {} + '@inquirer/ansi@1.0.0': {} - '@inquirer/checkbox@4.3.2(@types/node@22.19.1)': + '@inquirer/checkbox@4.2.4(@types/node@22.18.8)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@22.18.8) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@22.18.8) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 - '@inquirer/confirm@5.1.21(@types/node@22.19.1)': + '@inquirer/confirm@5.1.18(@types/node@22.18.8)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.2.2(@types/node@22.18.8) + '@inquirer/type': 3.0.8(@types/node@22.18.8) optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 - '@inquirer/core@10.3.2(@types/node@22.19.1)': + '@inquirer/core@10.2.2(@types/node@22.18.8)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/ansi': 1.0.0 + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@22.18.8) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 '@inquirer/core@8.2.4': dependencies: - '@inquirer/figures': 1.0.15 + '@inquirer/figures': 1.0.13 '@inquirer/type': 1.5.5 '@types/mute-stream': 0.0.4 '@types/node': 20.19.11 @@ -9362,102 +9360,102 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - '@inquirer/editor@4.2.23(@types/node@22.19.1)': + '@inquirer/editor@4.2.20(@types/node@22.18.8)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/external-editor': 1.0.3(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.2.2(@types/node@22.18.8) + '@inquirer/external-editor': 1.0.2(@types/node@22.18.8) + '@inquirer/type': 3.0.8(@types/node@22.18.8) optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 - '@inquirer/expand@4.0.23(@types/node@22.19.1)': + '@inquirer/expand@4.0.20(@types/node@22.18.8)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.2.2(@types/node@22.18.8) + '@inquirer/type': 3.0.8(@types/node@22.18.8) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 - '@inquirer/external-editor@1.0.3(@types/node@22.19.1)': + '@inquirer/external-editor@1.0.2(@types/node@22.18.8)': dependencies: - chardet: 2.1.1 + chardet: 2.1.0 iconv-lite: 0.7.0 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 - '@inquirer/figures@1.0.15': {} + '@inquirer/figures@1.0.13': {} - '@inquirer/input@4.3.1(@types/node@22.19.1)': + '@inquirer/input@4.2.4(@types/node@22.18.8)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.2.2(@types/node@22.18.8) + '@inquirer/type': 3.0.8(@types/node@22.18.8) optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 - '@inquirer/number@3.0.23(@types/node@22.19.1)': + '@inquirer/number@3.0.20(@types/node@22.18.8)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.2.2(@types/node@22.18.8) + '@inquirer/type': 3.0.8(@types/node@22.18.8) optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 - '@inquirer/password@4.0.23(@types/node@22.19.1)': + '@inquirer/password@4.0.20(@types/node@22.18.8)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@22.18.8) + '@inquirer/type': 3.0.8(@types/node@22.18.8) optionalDependencies: - '@types/node': 22.19.1 - - '@inquirer/prompts@7.10.1(@types/node@22.19.1)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@22.19.1) - '@inquirer/confirm': 5.1.21(@types/node@22.19.1) - '@inquirer/editor': 4.2.23(@types/node@22.19.1) - '@inquirer/expand': 4.0.23(@types/node@22.19.1) - '@inquirer/input': 4.3.1(@types/node@22.19.1) - '@inquirer/number': 3.0.23(@types/node@22.19.1) - '@inquirer/password': 4.0.23(@types/node@22.19.1) - '@inquirer/rawlist': 4.1.11(@types/node@22.19.1) - '@inquirer/search': 3.2.2(@types/node@22.19.1) - '@inquirer/select': 4.4.2(@types/node@22.19.1) + '@types/node': 22.18.8 + + '@inquirer/prompts@7.8.6(@types/node@22.18.8)': + dependencies: + '@inquirer/checkbox': 4.2.4(@types/node@22.18.8) + '@inquirer/confirm': 5.1.18(@types/node@22.18.8) + '@inquirer/editor': 4.2.20(@types/node@22.18.8) + '@inquirer/expand': 4.0.20(@types/node@22.18.8) + '@inquirer/input': 4.2.4(@types/node@22.18.8) + '@inquirer/number': 3.0.20(@types/node@22.18.8) + '@inquirer/password': 4.0.20(@types/node@22.18.8) + '@inquirer/rawlist': 4.1.8(@types/node@22.18.8) + '@inquirer/search': 3.1.3(@types/node@22.18.8) + '@inquirer/select': 4.3.4(@types/node@22.18.8) optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 - '@inquirer/rawlist@4.1.11(@types/node@22.19.1)': + '@inquirer/rawlist@4.1.8(@types/node@22.18.8)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.2.2(@types/node@22.18.8) + '@inquirer/type': 3.0.8(@types/node@22.18.8) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 - '@inquirer/search@3.2.2(@types/node@22.19.1)': + '@inquirer/search@3.1.3(@types/node@22.18.8)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.2.2(@types/node@22.18.8) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@22.18.8) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 - '@inquirer/select@4.4.2(@types/node@22.19.1)': + '@inquirer/select@4.3.4(@types/node@22.18.8)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@22.18.8) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@22.18.8) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 '@inquirer/type@1.5.5': dependencies: mute-stream: 1.0.0 - '@inquirer/type@3.0.10(@types/node@22.19.1)': + '@inquirer/type@3.0.8(@types/node@22.18.8)': optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 '@ioredis/commands@1.2.0': {} @@ -9743,19 +9741,17 @@ snapshots: '@jsr/std__assert@1.0.13': dependencies: - '@jsr/std__internal': 1.0.8 + '@jsr/std__internal': 1.0.10 '@jsr/std__async@1.0.13': {} - '@jsr/std__internal@1.0.8': {} + '@jsr/std__internal@1.0.10': {} - '@jsr/std__path@1.1.0': {} + '@jsr/std__internal@1.0.8': {} - '@jsr/std__url@1.0.0-rc.3': + '@jsr/std__path@1.1.2': dependencies: - '@jsr/std__path': 1.1.0 - - '@jsr/std__yaml@1.0.8': {} + '@jsr/std__internal': 1.0.10 '@logtape/file@1.1.1(@logtape/logtape@1.1.1)': dependencies: @@ -10392,11 +10388,11 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@optique/core@0.6.2': {} + '@optique/core@0.6.1': {} - '@optique/run@0.6.2': + '@optique/run@0.6.1': dependencies: - '@optique/core': 0.6.2 + '@optique/core': 0.6.1 '@oxc-project/runtime@0.75.0': {} @@ -10941,32 +10937,34 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 22.19.1 + '@types/node': 24.3.0 '@types/amqplib@0.10.7': dependencies: - '@types/node': 22.19.1 + '@types/node': 24.3.0 '@types/better-sqlite3@7.6.13': dependencies: - '@types/node': 22.19.1 + '@types/node': 24.3.0 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.36 - '@types/node': 22.19.1 + '@types/node': 24.3.0 '@types/bun@1.2.17': dependencies: bun-types: 1.2.17 - '@types/bun@1.3.3': + '@types/bun@1.2.23(@types/react@19.1.8)': dependencies: - bun-types: 1.3.3 + bun-types: 1.2.23(@types/react@19.1.8) + transitivePeerDependencies: + - '@types/react' '@types/connect@3.4.36': dependencies: - '@types/node': 22.19.1 + '@types/node': 24.3.0 '@types/content-disposition@0.5.9': {} @@ -10977,7 +10975,7 @@ snapshots: '@types/connect': 3.4.36 '@types/express': 4.17.23 '@types/keygrip': 1.0.6 - '@types/node': 22.19.1 + '@types/node': 24.3.0 '@types/d3-array@3.2.1': {} @@ -11104,7 +11102,7 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.19.1 + '@types/node': 24.3.0 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.5 @@ -11147,7 +11145,7 @@ snapshots: '@types/http-errors': 2.0.5 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.8 - '@types/node': 22.19.1 + '@types/node': 24.3.0 '@types/linkify-it@5.0.0': {} @@ -11168,11 +11166,11 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 22.19.1 + '@types/node': 24.3.0 '@types/mysql@2.15.26': dependencies: - '@types/node': 22.19.1 + '@types/node': 24.3.0 '@types/node@16.9.1': {} @@ -11184,7 +11182,7 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@22.19.1': + '@types/node@22.18.8': dependencies: undici-types: 6.21.0 @@ -11198,7 +11196,7 @@ snapshots: '@types/pg@8.6.1': dependencies: - '@types/node': 22.19.1 + '@types/node': 24.3.0 pg-protocol: 1.10.3 pg-types: 2.2.0 @@ -11228,19 +11226,19 @@ snapshots: '@types/send@0.17.5': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.19.1 + '@types/node': 24.3.0 '@types/serve-static@1.15.8': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.1 + '@types/node': 24.3.0 '@types/send': 0.17.5 '@types/shimmer@1.2.0': {} '@types/tedious@4.0.14': dependencies: - '@types/node': 22.19.1 + '@types/node': 24.3.0 '@types/trusted-types@2.0.7': optional: true @@ -11671,9 +11669,9 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@22.19.1)(lightningcss@1.30.1))(vue@3.5.17(typescript@5.9.3))': + '@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@22.18.8)(lightningcss@1.30.1))(vue@3.5.17(typescript@5.9.3))': dependencies: - vite: 5.4.19(@types/node@22.19.1)(lightningcss@1.30.1) + vite: 5.4.19(@types/node@22.18.8)(lightningcss@1.30.1) vue: 3.5.17(typescript@5.9.3) '@volar/language-core@2.4.15': @@ -12069,16 +12067,17 @@ snapshots: bun-types@1.2.17: dependencies: - '@types/node': 22.19.1 + '@types/node': 24.3.0 bun-types@1.2.19(@types/react@19.1.8): dependencies: '@types/node': 24.3.0 '@types/react': 19.1.8 - bun-types@1.3.3: + bun-types@1.2.23(@types/react@19.1.8): dependencies: - '@types/node': 22.19.1 + '@types/node': 24.3.0 + '@types/react': 19.1.8 busboy@1.6.0: dependencies: @@ -12139,7 +12138,7 @@ snapshots: character-entities@2.0.2: {} - chardet@2.1.1: {} + chardet@2.1.0: {} chevrotain-allstar@0.3.1(chevrotain@11.0.3): dependencies: @@ -12256,6 +12255,8 @@ snapshots: cookie-es@1.2.2: {} + cookie-es@2.0.0: {} + cookie-signature@1.0.6: {} cookie@0.6.0: {} @@ -12521,12 +12522,12 @@ snapshots: decode-bmp@0.2.1: dependencies: - '@canvas/image-data': 1.1.0 + '@canvas/image-data': 1.0.0 to-data-view: 1.1.0 decode-ico@0.4.1: dependencies: - '@canvas/image-data': 1.1.0 + '@canvas/image-data': 1.0.0 decode-bmp: 0.2.1 to-data-view: 1.1.0 @@ -12627,7 +12628,7 @@ snapshots: emoji-regex-xs@1.0.0: {} - emoji-regex@10.6.0: {} + emoji-regex@10.5.0: {} emoji-regex@8.0.0: {} @@ -12763,8 +12764,6 @@ snapshots: es-toolkit@1.39.5: {} - es-toolkit@1.42.0: {} - esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -13451,7 +13450,7 @@ snapshots: optionalDependencies: picomatch: 4.0.3 - fetch-mock@12.6.0: + fetch-mock@12.5.4: dependencies: '@types/glob-to-regexp': 0.4.4 dequal: 2.0.3 @@ -13577,7 +13576,7 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.4.0: {} + get-east-asian-width@1.3.0: {} get-intrinsic@1.3.0: dependencies: @@ -13830,17 +13829,17 @@ snapshots: dependencies: '@inquirer/core': 8.2.4 - inquirer@12.11.1(@types/node@22.19.1): + inquirer@12.9.6(@types/node@22.18.8): dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/prompts': 7.10.1(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@22.18.8) + '@inquirer/prompts': 7.8.6(@types/node@22.18.8) + '@inquirer/type': 3.0.8(@types/node@22.18.8) mute-stream: 2.0.0 run-async: 4.0.6 rxjs: 7.8.2 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 internal-slot@1.1.0: dependencies: @@ -15157,7 +15156,7 @@ snapshots: postcss-load-config@4.0.2(postcss@8.5.6): dependencies: lilconfig: 3.1.3 - yaml: 2.8.1 + yaml: 2.8.0 optionalDependencies: postcss: 8.5.6 @@ -15255,7 +15254,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.19.1 + '@types/node': 24.3.0 long: 5.3.2 proxy-addr@2.0.7: @@ -15588,7 +15587,7 @@ snapshots: safer-buffer@2.1.2: {} - sax@1.4.3: {} + sax@1.4.1: {} scheduler@0.25.0-rc-7771d3a7-20240827: {} @@ -15810,7 +15809,9 @@ snapshots: sprintf-js@1.0.3: {} - srvx@0.8.16: {} + srvx@0.8.7: + dependencies: + cookie-es: 2.0.0 stable-hash@0.0.5: {} @@ -15850,8 +15851,8 @@ snapshots: string-width@7.2.0: dependencies: - emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 + emoji-regex: 10.5.0 + get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 string.prototype.includes@2.0.1: @@ -16421,32 +16422,16 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite@5.4.19(@types/node@22.19.1)(lightningcss@1.30.1): + vite@5.4.19(@types/node@22.18.8)(lightningcss@1.30.1): dependencies: esbuild: 0.21.5 postcss: 8.5.6 rollup: 4.44.1 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.18.8 fsevents: 2.3.3 lightningcss: 1.30.1 - vite@7.1.3(@types/node@22.19.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.1): - dependencies: - esbuild: 0.25.5 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.44.1 - tinyglobby: 0.2.14 - optionalDependencies: - '@types/node': 22.19.1 - fsevents: 2.3.3 - jiti: 2.5.1 - lightningcss: 1.30.1 - tsx: 4.20.3 - yaml: 2.8.1 - vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.1): dependencies: esbuild: 0.25.5 @@ -16467,13 +16452,13 @@ snapshots: optionalDependencies: vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.1) - vitepress-plugin-group-icons@1.6.1(markdown-it@14.1.0)(vite@7.1.3(@types/node@22.19.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.1)): + vitepress-plugin-group-icons@1.6.1(markdown-it@14.1.0)(vite@5.4.19(@types/node@22.18.8)(lightningcss@1.30.1)): dependencies: '@iconify-json/logos': 1.2.4 '@iconify-json/vscode-icons': 1.2.23 '@iconify/utils': 2.3.0 markdown-it: 14.1.0 - vite: 7.1.3(@types/node@22.19.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.1) + vite: 5.4.19(@types/node@22.18.8)(lightningcss@1.30.1) transitivePeerDependencies: - supports-color @@ -16496,14 +16481,14 @@ snapshots: - '@75lb/nature' - supports-color - vitepress-plugin-mermaid@2.0.17(mermaid@11.7.0)(vitepress@1.6.3(patch_hash=56bd737eca4c1ba581d00bedd4fe307f6e48f782af59933eac54bb7d43206b99)(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3)): + vitepress-plugin-mermaid@2.0.17(mermaid@11.7.0)(vitepress@1.6.3(patch_hash=56bd737eca4c1ba581d00bedd4fe307f6e48f782af59933eac54bb7d43206b99)(@algolia/client-search@5.29.0)(@types/node@22.18.8)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3)): dependencies: mermaid: 11.7.0 - vitepress: 1.6.3(patch_hash=56bd737eca4c1ba581d00bedd4fe307f6e48f782af59933eac54bb7d43206b99)(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3) + vitepress: 1.6.3(patch_hash=56bd737eca4c1ba581d00bedd4fe307f6e48f782af59933eac54bb7d43206b99)(@algolia/client-search@5.29.0)(@types/node@22.18.8)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3) optionalDependencies: '@mermaid-js/mermaid-mindmap': 9.3.0 - vitepress@1.6.3(patch_hash=56bd737eca4c1ba581d00bedd4fe307f6e48f782af59933eac54bb7d43206b99)(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3): + vitepress@1.6.3(patch_hash=56bd737eca4c1ba581d00bedd4fe307f6e48f782af59933eac54bb7d43206b99)(@algolia/client-search@5.29.0)(@types/node@22.18.8)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3): dependencies: '@docsearch/css': 3.8.2 '@docsearch/js': 3.8.2(@algolia/client-search@5.29.0)(@types/react@18.3.23)(search-insights@2.17.3) @@ -16512,7 +16497,7 @@ snapshots: '@shikijs/transformers': 2.5.0 '@shikijs/types': 2.5.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.4(vite@5.4.19(@types/node@22.19.1)(lightningcss@1.30.1))(vue@3.5.17(typescript@5.9.3)) + '@vitejs/plugin-vue': 5.2.4(vite@5.4.19(@types/node@22.18.8)(lightningcss@1.30.1))(vue@3.5.17(typescript@5.9.3)) '@vue/devtools-api': 7.7.7 '@vue/shared': 3.5.17 '@vueuse/core': 12.8.2(typescript@5.9.3) @@ -16521,7 +16506,7 @@ snapshots: mark.js: 8.11.1 minisearch: 7.1.2 shiki: 2.5.0 - vite: 5.4.19(@types/node@22.19.1)(lightningcss@1.30.1) + vite: 5.4.19(@types/node@22.18.8)(lightningcss@1.30.1) vue: 3.5.17(typescript@5.9.3) optionalDependencies: postcss: 8.5.6 @@ -16697,7 +16682,7 @@ snapshots: xml2js@0.5.0: dependencies: - sax: 1.4.3 + sax: 1.4.1 xmlbuilder: 11.0.1 xmlbuilder@11.0.1: {} @@ -16712,6 +16697,8 @@ snapshots: yaml@1.10.2: {} + yaml@2.8.0: {} + yaml@2.8.1: {} yargs-parser@20.2.9: {}