diff --git a/.eslintignore b/.eslintignore index 16c74be..fa1d9ea 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,5 +1,5 @@ # Build artifacts -dist/** +**/dist/** # JS files at the root of the project *.js diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7f378af..c591ddb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,6 +58,8 @@ jobs: - name: Install run: pnpm install + - run: pnpm exec playwright install chromium + - name: Build run: pnpm run build diff --git a/.idea/universal-handler.iml b/.idea/universal-handler.iml index 0a1efd5..64fef6f 100644 --- a/.idea/universal-handler.iml +++ b/.idea/universal-handler.iml @@ -10,6 +10,9 @@ + + + diff --git a/.npmrc b/.npmrc index e941d13..7da6d52 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ package-manager-strict=false +auto-install-peers=false diff --git a/README.md b/README.md deleted file mode 100644 index 1fe3d49..0000000 --- a/README.md +++ /dev/null @@ -1,97 +0,0 @@ -The goal of this repository is to flatten out the state of current JS (HTTP) servers(less) ecosystem, -and determine what would be the best course of action to create a unified way to represent Handlers and Middlewares (and their Context). - -The [playground](https://github.com/magne4000/universal-handler/tree/main/playground) contains code to test some patterns, represent Handlers and Middlewares, and adapters for all the major implementations. - -Some [packages](https://github.com/magne4000/universal-handler/tree/main/packages) are also being authored (WIP). -The goal of those packages will be to provide tool authors a mean to declare their Handlers and Middlewares once, targetting all supported servers. -Think of it as [unplugin](https://github.com/unjs/unplugin) but for Handlers and Middlewares. - -## Definitions -### Handler -A function that returns a response. Depending on the framework, a response can be anything from a [standard Response](https://workers.js.org/), a string, an object, a [ServerResponse](https://nodejs.org/api/http.html#class-httpserverresponse), etc. - -A standard, agnostic and future-proof way to represent a request would certainly be with the [Response interface](https://fetch.spec.whatwg.org/#request), even if it currently have [some limitations](https://github.com/whatwg/fetch/issues/1716). - -### Middleware -A function that modifies the Context or Response, and can return nothing. It can be called before and after a Handler. -[Hono as a great way to represent this](https://hono.dev/concepts/middleware). -Each framework as its own way to implement middlewares. - -### Context -Some data with the same lifespan as a Request. -Each framework as its own way to represent the Context, either by attaching it to their internal Request representation, or by having the Context itself containing the Request. - -## Current state of popular servers -### express -- Internal representation as superset of [IncomingMessage](https://nodejs.org/api/http.html#class-httpincomingmessage) and [ServerResponse](https://nodejs.org/api/http.html#class-httpserverresponse) -- Legacy, most used -- Robust ecosystem of middlewares -- 😞 Not following WhatWG/WinterCG -- Works on: - - node - - bun - - deno - - netlify (and probably others) with [serverless adapter](https://www.npmjs.com/package/serverless-http) - -### fastify -- Own internal representation as [Request](https://github.com/fastify/fastify/blob/main/docs/Reference/Request.md#request) and [Reply](https://github.com/fastify/fastify/blob/main/docs/Reference/Reply.md#reply) -- Compatible with express middlewares with [@fastify/express](https://github.com/fastify/fastify-express) - - Also has its own recommended middleware lib [@fastify/middie](https://github.com/fastify/middie) -- [Serverless compatible](https://github.com/fastify/fastify/blob/main/docs/Guides/Serverless.md), but like with express, actually tailored for stateful server usage -- 😞 Not following WhatWG/WinterCG -- Works on: - - node - - bun - - [serverless with adapter](https://github.com/fastify/fastify/blob/main/docs/Guides/Serverless.md) - -### h3 -- Internal representation as node [IncomingMessage](https://nodejs.org/api/http.html#class-httpincomingmessage) and [ServerResponse](https://nodejs.org/api/http.html#class-httpserverresponse) (with partial polyfill for unsuported environments thanks to [unenv](https://github.com/unjs/unenv)) -- Compatible with express middlewares with a [simple adapter](https://h3.unjs.io/examples/from-expressjs-to-h3#middleware) -- 😞 Not following WhatWG/WinterCG, but compatible with them -- Works on: - - node - - web - - plain - - bun - - deno - - cloudflare - - netlify - -### hatTip -- Internal representation as standard `Request` ([wrapped in context](https://github.com/hattipjs/hattip/blob/69237d181300b200a14114df2c3c115c44e0f3eb/packages/base/core/index.d.ts)) and standard `Response` -- 😊 Follows WhatWG/WinterCG -- Works on: - - bun - - cloudflare - - deno (including Deno Deploy) - - as an express middleware - - fastly - - lagon - - netlify - - node - - uWebSockets.js - - vercel - -### hono -- Internal representation as a [superset of `Request`](https://hono.dev/api/request#honorequest) and standard `Response` -- 😊 [Follows WhatWG/WinterCG](https://hono.dev/concepts/web-standard) -- Works on: - - cloudflare - - deno - - bun - - fastly - - vercel - - netlify - - aws lambda - - lambda@edge - - azure functions - - node - -### elysia -TBD - -## Useful resources -- [Hono vs. H3 vs. HatTip vs. Elysia](https://dev.to/this-is-learning/hono-vs-h3-vs-hattip-vs-elysia-modern-serverless-replacements-for-express-3a6n) -- https://github.com/hattipjs/hattip/discussions/45 -- https://workers.js.org/ diff --git a/README.md b/README.md new file mode 120000 index 0000000..c011f10 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +packages/universal-middleware/README.md \ No newline at end of file diff --git a/examples/tool/package.json b/examples/tool/package.json new file mode 100644 index 0000000..3629671 --- /dev/null +++ b/examples/tool/package.json @@ -0,0 +1,116 @@ +{ + "name": "@universal-middleware-examples/tool", + "version": "0.0.0", + "private": true, + "type": "module", + "files": [ + "dist" + ], + "exports": { + "./dummy-handler": { + "types": "./dist/dummy.d.ts", + "import": "./dist/dummy.js", + "default": "./dist/dummy.js" + }, + "./middlewares/context-middleware": { + "types": "./dist/middlewares/context.d.ts", + "import": "./dist/middlewares/context.js", + "default": "./dist/middlewares/context.js" + }, + "./middlewares/headers-middleware": { + "types": "./dist/middlewares/headers.d.ts", + "import": "./dist/middlewares/headers.js", + "default": "./dist/middlewares/headers.js" + }, + "./dummy-handler-hono": { + "types": "./dist/handlers/universal-hono-handler-handler.d.ts", + "import": "./dist/handlers/universal-hono-handler-handler.js", + "default": "./dist/handlers/universal-hono-handler-handler.js" + }, + "./dummy-handler-express": { + "types": "./dist/handlers/universal-express-handler-handler.d.ts", + "import": "./dist/handlers/universal-express-handler-handler.js", + "default": "./dist/handlers/universal-express-handler-handler.js" + }, + "./dummy-handler-hattip": { + "types": "./dist/handlers/universal-hattip-handler-handler.d.ts", + "import": "./dist/handlers/universal-hattip-handler-handler.js", + "default": "./dist/handlers/universal-hattip-handler-handler.js" + }, + "./middlewares/context-middleware-hono": { + "types": "./dist/middlewares/universal-hono-middleware-context.middleware.d.ts", + "import": "./dist/middlewares/universal-hono-middleware-context.middleware.js", + "default": "./dist/middlewares/universal-hono-middleware-context.middleware.js" + }, + "./middlewares/context-middleware-express": { + "types": "./dist/middlewares/universal-express-middleware-context.middleware.d.ts", + "import": "./dist/middlewares/universal-express-middleware-context.middleware.js", + "default": "./dist/middlewares/universal-express-middleware-context.middleware.js" + }, + "./middlewares/context-middleware-hattip": { + "types": "./dist/middlewares/universal-hattip-middleware-context.middleware.d.ts", + "import": "./dist/middlewares/universal-hattip-middleware-context.middleware.js", + "default": "./dist/middlewares/universal-hattip-middleware-context.middleware.js" + }, + "./middlewares/headers-middleware-hono": { + "types": "./dist/middlewares/universal-hono-middleware-headers.middleware.d.ts", + "import": "./dist/middlewares/universal-hono-middleware-headers.middleware.js", + "default": "./dist/middlewares/universal-hono-middleware-headers.middleware.js" + }, + "./middlewares/headers-middleware-express": { + "types": "./dist/middlewares/universal-express-middleware-headers.middleware.d.ts", + "import": "./dist/middlewares/universal-express-middleware-headers.middleware.js", + "default": "./dist/middlewares/universal-express-middleware-headers.middleware.js" + }, + "./middlewares/headers-middleware-hattip": { + "types": "./dist/middlewares/universal-hattip-middleware-headers.middleware.d.ts", + "import": "./dist/middlewares/universal-hattip-middleware-headers.middleware.js", + "default": "./dist/middlewares/universal-hattip-middleware-headers.middleware.js" + }, + "./dummy-handler-webroute": { + "types": "./dist/handlers/universal-webroute-handler-handler.d.ts", + "import": "./dist/handlers/universal-webroute-handler-handler.js", + "default": "./dist/handlers/universal-webroute-handler-handler.js" + }, + "./middlewares/context-middleware-webroute": { + "types": "./dist/middlewares/universal-webroute-middleware-context.middleware.d.ts", + "import": "./dist/middlewares/universal-webroute-middleware-context.middleware.js", + "default": "./dist/middlewares/universal-webroute-middleware-context.middleware.js" + }, + "./middlewares/headers-middleware-webroute": { + "types": "./dist/middlewares/universal-webroute-middleware-headers.middleware.d.ts", + "import": "./dist/middlewares/universal-webroute-middleware-headers.middleware.js", + "default": "./dist/middlewares/universal-webroute-middleware-headers.middleware.js" + } + }, + "author": "Joël Charles ", + "repository": "https://github.com/magne4000/universal-handler", + "license": "MIT", + "scripts": { + "build": "rimraf dist && tsup", + "prepack": "pnpm build", + "test:typecheck": "tsc -p tsconfig.json --noEmit" + }, + "devDependencies": { + "@hono/node-server": "^1.12.0", + "@swc/core": "^1.7.11", + "@types/node": "^20.14.10", + "rimraf": "^6.0.0", + "tsup": "^8.2.4", + "typescript": "^5.5.4", + "universal-middleware": "*" + }, + "optionalDependencies": { + "@universal-middleware/express": "^0", + "@universal-middleware/hattip": "^0", + "@universal-middleware/hono": "^0", + "@universal-middleware/webroute": "^0" + }, + "sideEffects": false, + "peerDependencies": { + "@universal-middleware/express": "^0", + "@universal-middleware/hattip": "^0", + "@universal-middleware/hono": "^0", + "@universal-middleware/webroute": "^0" + } +} \ No newline at end of file diff --git a/examples/tool/src/handlers/handler.ts b/examples/tool/src/handlers/handler.ts new file mode 100644 index 0000000..64e2b88 --- /dev/null +++ b/examples/tool/src/handlers/handler.ts @@ -0,0 +1,9 @@ +import type { Get, UniversalHandler } from "universal-middleware"; + +const handler: Get<[], UniversalHandler> = () => (_request, ctx) => { + return new Response("context: " + JSON.stringify(ctx), { + status: 200, + }); +}; + +export default handler; diff --git a/examples/tool/src/middlewares/context.middleware.ts b/examples/tool/src/middlewares/context.middleware.ts new file mode 100644 index 0000000..3b6368c --- /dev/null +++ b/examples/tool/src/middlewares/context.middleware.ts @@ -0,0 +1,11 @@ +import type { Get, UniversalMiddleware } from "universal-middleware"; + +const contextMiddleware = ((value) => (_request, ctx) => { + return { + ...ctx, + something: value, + }; + // Using `satisfies` to not lose return type +}) satisfies Get<[string], UniversalMiddleware>; + +export default contextMiddleware; diff --git a/examples/tool/src/middlewares/headers.middleware.ts b/examples/tool/src/middlewares/headers.middleware.ts new file mode 100644 index 0000000..44f9e79 --- /dev/null +++ b/examples/tool/src/middlewares/headers.middleware.ts @@ -0,0 +1,12 @@ +import type { Get, UniversalMiddleware } from "universal-middleware"; + +const headersMiddleware: Get<[], UniversalMiddleware<{ something?: string }>> = + () => (_request, ctx) => { + return (response) => { + response.headers.set("X-Custom-Header", ctx.something ?? "NONE"); + + return response; + }; + }; + +export default headersMiddleware; diff --git a/examples/tool/tsconfig.json b/examples/tool/tsconfig.json new file mode 100644 index 0000000..2c54119 --- /dev/null +++ b/examples/tool/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "verbatimModuleSyntax": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "module": "ESNext", + "noEmit": true, + "moduleResolution": "Bundler", + "target": "ES2022", + "lib": ["DOM", "DOM.Iterable", "ESNext"] + }, + "exclude": ["dist"] +} diff --git a/examples/tool/tsup.config.ts b/examples/tool/tsup.config.ts new file mode 100644 index 0000000..56e3ed5 --- /dev/null +++ b/examples/tool/tsup.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from "tsup"; +import universalMiddleware from "universal-middleware/esbuild"; + +export default defineConfig([ + { + entry: { + dummy: "./src/handlers/handler.ts", + "middlewares/context": "./src/middlewares/context.middleware.ts", + "middlewares/headers": "./src/middlewares/headers.middleware.ts", + }, + format: ["esm"], + platform: "neutral", + target: "es2022", + dts: true, + esbuildPlugins: [universalMiddleware()], + esbuildOptions(opts) { + opts.outbase = "src"; + }, + bundle: true, + }, +]); diff --git a/package.json b/package.json index 434dff9..0bc2c79 100644 --- a/package.json +++ b/package.json @@ -1,24 +1,28 @@ { - "name": "my-app", + "name": "universal-middlewware", + "private": true, "version": "0.0.1", "description": "", "type": "module", "scripts": { - "dev:express": "tsx ./playground/express-entry.ts", - "dev:h3": "tsx ./playground/h3-entry.ts", - "dev:hono": "vite --mode hono", - "dev:hattip": "hattip serve ./playground/hattip-entry.ts --client", + "play:express": "tsx ./playground/express-entry.ts", + "play:h3": "tsx ./playground/h3-entry.ts", + "play:hono": "vite --mode hono", + "play:hattip": "hattip serve ./playground/hattip-entry.ts --client", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", - "build": "pnpm run -r build", + "build:core": "pnpm run -r --filter \"@universal-middleware/*\" build", + "build:plugin": "pnpm run --filter \"universal-middleware\" build", + "build:examples": "pnpm run --filter \"@universal-middleware-examples/*\" build", + "build": "run-s build:core build:plugin build:examples", "test": "pnpm run -r --sequential test", "test:typecheck": "pnpm run -r test:typecheck" }, "keywords": [], "author": "", "devDependencies": { - "@hattip/compose": "^0.0.46", - "@hattip/vite": "^0.0.46", - "@hono/vite-dev-server": "^0.13.0", + "@hattip/compose": "^0.0.47", + "@hattip/vite": "^0.0.47", + "@hono/vite-dev-server": "^0.14.0", "@types/express": "^4.17.21", "@types/express-session": "^1.18.0", "@types/node": "^18.19.14", @@ -27,33 +31,42 @@ "@typescript-eslint/parser": "^7.15.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", - "express-rate-limit": "^7.3.1", + "express-rate-limit": "^7.4.0", "express-session": "^1.18.0", "microdiff": "^1.4.0", + "npm-run-all2": "^6.2.2", "on-change": "^5.0.1", + "playwright": "^1.46.1", "prettier": "^3.3.2", "proxy-deep": "^4.0.1", "rfdc": "^1.4.1", - "typescript": "^5.5.3" + "typescript": "^5.5.4" }, "dependencies": { - "@hattip/adapter-node": "^0.0.46", - "@hattip/core": "^0.0.46", - "@hattip/polyfills": "^0.0.46", - "@hattip/router": "^0.0.46", + "@hattip/adapter-node": "^0.0.47", + "@hattip/core": "^0.0.47", + "@hattip/polyfills": "^0.0.47", + "@hattip/router": "^0.0.47", "@hono/node-server": "^1.12.0", "express": "^4.19.2", "h3": "~1.12.0", "hattip": "^0.0.33", "helmet": "^7.1.0", - "hono": "^4.4.12", + "hono": "^4.5.6", "serve-static": "^1.15.0", - "tsx": "^4.16.2", - "vite": "^5.3.3" + "tsx": "^4.17.0", + "vite": "^5.4.1" }, "pnpm": { "overrides": { - "@universal-middleware/core": "link:./packages/core" + "@universal-middleware/core": "link:./packages/core", + "@universal-middleware/express": "link:./packages/adapter-express", + "@universal-middleware/hono": "link:./packages/adapter-hono", + "@universal-middleware/hattip": "link:./packages/adapter-hattip", + "@universal-middleware/webroute": "link:./packages/adapter-webroute", + "universal-middleware": "link:./packages/universal-middleware", + "@webroute/middleware": "^0.9.0", + "esbuild": "^0.23.1" } }, "packageManager": "pnpm@9.4.0" diff --git a/packages/adapter-express/deno.json b/packages/adapter-express/deno.json index 7f10135..a38c68a 100644 --- a/packages/adapter-express/deno.json +++ b/packages/adapter-express/deno.json @@ -1,8 +1,10 @@ { "imports": { "@universal-middleware/tests": "../tests/dist", + "@universal-middleware/core": "../core/dist", "mri": "npm:mri", "zx": "npm:zx", "wait-port": "npm:wait-port" - } + }, + "lock": false } diff --git a/packages/adapter-express/deno.lock b/packages/adapter-express/deno.lock deleted file mode 100644 index 2b2a292..0000000 --- a/packages/adapter-express/deno.lock +++ /dev/null @@ -1,2095 +0,0 @@ -{ - "version": "3", - "packages": { - "specifiers": { - "npm:@brillout/release-me@^0.3.9": "npm:@brillout/release-me@0.3.9", - "npm:@types/node@^20.14.10": "npm:@types/node@20.14.10", - "npm:@universal-middleware/core@^0.1.1": "npm:@universal-middleware/core@0.1.1", - "npm:express@^4.19.2": "npm:express@4.19.2", - "npm:helmet@^7.1.0": "npm:helmet@7.1.0", - "npm:mri": "npm:mri@1.2.0", - "npm:rimraf@^6.0.0": "npm:rimraf@6.0.1", - "npm:tsup@^8.1.0": "npm:tsup@8.1.0_typescript@5.5.3_esbuild@0.21.5", - "npm:tsx@^4.16.2": "npm:tsx@4.16.2", - "npm:typescript@^5.5.3": "npm:typescript@5.5.3", - "npm:vitest@^2.0.2": "npm:vitest@2.0.2_@types+node@20.14.10", - "npm:wait-port": "npm:wait-port@1.1.0", - "npm:zx": "npm:zx@8.1.4" - }, - "npm": { - "@ampproject/remapping@2.3.0": { - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dependencies": { - "@jridgewell/gen-mapping": "@jridgewell/gen-mapping@0.3.5", - "@jridgewell/trace-mapping": "@jridgewell/trace-mapping@0.3.25" - } - }, - "@babel/code-frame@7.24.7": { - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dependencies": { - "@babel/highlight": "@babel/highlight@7.24.7", - "picocolors": "picocolors@1.0.1" - } - }, - "@babel/helper-validator-identifier@7.24.7": { - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dependencies": {} - }, - "@babel/highlight@7.24.7": { - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dependencies": { - "@babel/helper-validator-identifier": "@babel/helper-validator-identifier@7.24.7", - "chalk": "chalk@2.4.2", - "js-tokens": "js-tokens@4.0.0", - "picocolors": "picocolors@1.0.1" - } - }, - "@brillout/picocolors@1.0.13": { - "integrity": "sha512-LblvMKItHbvkaIMI+Awsk1EEjmReE8E8Mgjtj3Pdn/qBvwQ6e+ts5uEqG6iTrK6JWndcxrQgSe664KfoteN6fA==", - "dependencies": {} - }, - "@brillout/release-me@0.3.9": { - "integrity": "sha512-7Q9YD+rnVF9hFmRFNSEePAejYSgZzWABJTA5sFrfD1utREt5K8aokoldvm/WES83SOMIkPO97c2kII9J4snc7Q==", - "dependencies": { - "@brillout/picocolors": "@brillout/picocolors@1.0.13", - "commander": "commander@11.1.0", - "conventional-changelog": "conventional-changelog@5.1.0", - "execa": "execa@5.1.1", - "semver": "semver@7.6.2" - } - }, - "@esbuild/aix-ppc64@0.21.5": { - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "dependencies": {} - }, - "@esbuild/android-arm64@0.21.5": { - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "dependencies": {} - }, - "@esbuild/android-arm@0.21.5": { - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "dependencies": {} - }, - "@esbuild/android-x64@0.21.5": { - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "dependencies": {} - }, - "@esbuild/darwin-arm64@0.21.5": { - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "dependencies": {} - }, - "@esbuild/darwin-x64@0.21.5": { - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "dependencies": {} - }, - "@esbuild/freebsd-arm64@0.21.5": { - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "dependencies": {} - }, - "@esbuild/freebsd-x64@0.21.5": { - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "dependencies": {} - }, - "@esbuild/linux-arm64@0.21.5": { - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "dependencies": {} - }, - "@esbuild/linux-arm@0.21.5": { - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "dependencies": {} - }, - "@esbuild/linux-ia32@0.21.5": { - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "dependencies": {} - }, - "@esbuild/linux-loong64@0.21.5": { - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "dependencies": {} - }, - "@esbuild/linux-mips64el@0.21.5": { - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "dependencies": {} - }, - "@esbuild/linux-ppc64@0.21.5": { - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "dependencies": {} - }, - "@esbuild/linux-riscv64@0.21.5": { - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "dependencies": {} - }, - "@esbuild/linux-s390x@0.21.5": { - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "dependencies": {} - }, - "@esbuild/linux-x64@0.21.5": { - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "dependencies": {} - }, - "@esbuild/netbsd-x64@0.21.5": { - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "dependencies": {} - }, - "@esbuild/openbsd-x64@0.21.5": { - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "dependencies": {} - }, - "@esbuild/sunos-x64@0.21.5": { - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "dependencies": {} - }, - "@esbuild/win32-arm64@0.21.5": { - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "dependencies": {} - }, - "@esbuild/win32-ia32@0.21.5": { - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "dependencies": {} - }, - "@esbuild/win32-x64@0.21.5": { - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "dependencies": {} - }, - "@hutson/parse-repository-url@5.0.0": { - "integrity": "sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==", - "dependencies": {} - }, - "@isaacs/cliui@8.0.2": { - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "string-width@5.1.2", - "string-width-cjs": "string-width@4.2.3", - "strip-ansi": "strip-ansi@7.1.0", - "strip-ansi-cjs": "strip-ansi@6.0.1", - "wrap-ansi": "wrap-ansi@8.1.0", - "wrap-ansi-cjs": "wrap-ansi@7.0.0" - } - }, - "@jridgewell/gen-mapping@0.3.5": { - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dependencies": { - "@jridgewell/set-array": "@jridgewell/set-array@1.2.1", - "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.5.0", - "@jridgewell/trace-mapping": "@jridgewell/trace-mapping@0.3.25" - } - }, - "@jridgewell/resolve-uri@3.1.2": { - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dependencies": {} - }, - "@jridgewell/set-array@1.2.1": { - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dependencies": {} - }, - "@jridgewell/sourcemap-codec@1.5.0": { - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dependencies": {} - }, - "@jridgewell/trace-mapping@0.3.25": { - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "@jridgewell/resolve-uri@3.1.2", - "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.5.0" - } - }, - "@nodelib/fs.scandir@2.1.5": { - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "@nodelib/fs.stat@2.0.5", - "run-parallel": "run-parallel@1.2.0" - } - }, - "@nodelib/fs.stat@2.0.5": { - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dependencies": {} - }, - "@nodelib/fs.walk@1.2.8": { - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "@nodelib/fs.scandir@2.1.5", - "fastq": "fastq@1.17.1" - } - }, - "@pkgjs/parseargs@0.11.0": { - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dependencies": {} - }, - "@rollup/rollup-android-arm-eabi@4.18.1": { - "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==", - "dependencies": {} - }, - "@rollup/rollup-android-arm64@4.18.1": { - "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==", - "dependencies": {} - }, - "@rollup/rollup-darwin-arm64@4.18.1": { - "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==", - "dependencies": {} - }, - "@rollup/rollup-darwin-x64@4.18.1": { - "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==", - "dependencies": {} - }, - "@rollup/rollup-linux-arm-gnueabihf@4.18.1": { - "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==", - "dependencies": {} - }, - "@rollup/rollup-linux-arm-musleabihf@4.18.1": { - "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==", - "dependencies": {} - }, - "@rollup/rollup-linux-arm64-gnu@4.18.1": { - "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==", - "dependencies": {} - }, - "@rollup/rollup-linux-arm64-musl@4.18.1": { - "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==", - "dependencies": {} - }, - "@rollup/rollup-linux-powerpc64le-gnu@4.18.1": { - "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==", - "dependencies": {} - }, - "@rollup/rollup-linux-riscv64-gnu@4.18.1": { - "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==", - "dependencies": {} - }, - "@rollup/rollup-linux-s390x-gnu@4.18.1": { - "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==", - "dependencies": {} - }, - "@rollup/rollup-linux-x64-gnu@4.18.1": { - "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==", - "dependencies": {} - }, - "@rollup/rollup-linux-x64-musl@4.18.1": { - "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==", - "dependencies": {} - }, - "@rollup/rollup-win32-arm64-msvc@4.18.1": { - "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==", - "dependencies": {} - }, - "@rollup/rollup-win32-ia32-msvc@4.18.1": { - "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==", - "dependencies": {} - }, - "@rollup/rollup-win32-x64-msvc@4.18.1": { - "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==", - "dependencies": {} - }, - "@types/estree@1.0.5": { - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dependencies": {} - }, - "@types/fs-extra@11.0.4": { - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", - "dependencies": { - "@types/jsonfile": "@types/jsonfile@6.1.4", - "@types/node": "@types/node@18.16.19" - } - }, - "@types/jsonfile@6.1.4": { - "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", - "dependencies": { - "@types/node": "@types/node@18.16.19" - } - }, - "@types/node@18.16.19": { - "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==", - "dependencies": {} - }, - "@types/node@20.14.10": { - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", - "dependencies": { - "undici-types": "undici-types@5.26.5" - } - }, - "@types/normalize-package-data@2.4.4": { - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dependencies": {} - }, - "@universal-middleware/core@0.1.1": { - "integrity": "sha512-1paKMQ/B/l5NL9j5vR3T7mvk3VqfP3aIuJj0XU5WvlrqZGjde1qFyjEDfw4RQtSkgloUobgttdhs4qzop9lS2g==", - "dependencies": {} - }, - "@vitest/expect@2.0.2": { - "integrity": "sha512-nKAvxBYqcDugYZ4nJvnm5OR8eDJdgWjk4XM9owQKUjzW70q0icGV2HVnQOyYsp906xJaBDUXw0+9EHw2T8e0mQ==", - "dependencies": { - "@vitest/spy": "@vitest/spy@2.0.2", - "@vitest/utils": "@vitest/utils@2.0.2", - "chai": "chai@5.1.1", - "tinyrainbow": "tinyrainbow@1.2.0" - } - }, - "@vitest/pretty-format@2.0.2": { - "integrity": "sha512-SBCyOXfGVvddRd9r2PwoVR0fonQjh9BMIcBMlSzbcNwFfGr6ZhOhvBzurjvi2F4ryut2HcqiFhNeDVGwru8tLg==", - "dependencies": { - "tinyrainbow": "tinyrainbow@1.2.0" - } - }, - "@vitest/runner@2.0.2": { - "integrity": "sha512-OCh437Vi8Wdbif1e0OvQcbfM3sW4s2lpmOjAE7qfLrpzJX2M7J1IQlNvEcb/fu6kaIB9n9n35wS0G2Q3en5kHg==", - "dependencies": { - "@vitest/utils": "@vitest/utils@2.0.2", - "pathe": "pathe@1.1.2" - } - }, - "@vitest/snapshot@2.0.2": { - "integrity": "sha512-Yc2ewhhZhx+0f9cSUdfzPRcsM6PhIb+S43wxE7OG0kTxqgqzo8tHkXFuFlndXeDMp09G3sY/X5OAo/RfYydf1g==", - "dependencies": { - "@vitest/pretty-format": "@vitest/pretty-format@2.0.2", - "magic-string": "magic-string@0.30.10", - "pathe": "pathe@1.1.2" - } - }, - "@vitest/spy@2.0.2": { - "integrity": "sha512-MgwJ4AZtCgqyp2d7WcQVE8aNG5vQ9zu9qMPYQHjsld/QVsrvg78beNrXdO4HYkP0lDahCO3P4F27aagIag+SGQ==", - "dependencies": { - "tinyspy": "tinyspy@3.0.0" - } - }, - "@vitest/utils@2.0.2": { - "integrity": "sha512-pxCY1v7kmOCWYWjzc0zfjGTA3Wmn8PKnlPvSrsA643P1NHl1fOyXj2Q9SaNlrlFE+ivCsxM80Ov3AR82RmHCWQ==", - "dependencies": { - "@vitest/pretty-format": "@vitest/pretty-format@2.0.2", - "estree-walker": "estree-walker@3.0.3", - "loupe": "loupe@3.1.1", - "tinyrainbow": "tinyrainbow@1.2.0" - } - }, - "JSONStream@1.3.5": { - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dependencies": { - "jsonparse": "jsonparse@1.3.1", - "through": "through@2.3.8" - } - }, - "accepts@1.3.8": { - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "mime-types@2.1.35", - "negotiator": "negotiator@0.6.3" - } - }, - "add-stream@1.0.0": { - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dependencies": {} - }, - "ansi-regex@5.0.1": { - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dependencies": {} - }, - "ansi-regex@6.0.1": { - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dependencies": {} - }, - "ansi-styles@3.2.1": { - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "color-convert@1.9.3" - } - }, - "ansi-styles@4.3.0": { - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "color-convert@2.0.1" - } - }, - "ansi-styles@6.2.1": { - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dependencies": {} - }, - "any-promise@1.3.0": { - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dependencies": {} - }, - "anymatch@3.1.3": { - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "normalize-path@3.0.0", - "picomatch": "picomatch@2.3.1" - } - }, - "array-flatten@1.1.1": { - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dependencies": {} - }, - "array-ify@1.0.0": { - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dependencies": {} - }, - "array-union@2.1.0": { - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dependencies": {} - }, - "assertion-error@2.0.1": { - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dependencies": {} - }, - "balanced-match@1.0.2": { - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dependencies": {} - }, - "binary-extensions@2.3.0": { - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dependencies": {} - }, - "body-parser@1.20.2": { - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "bytes@3.1.2", - "content-type": "content-type@1.0.5", - "debug": "debug@2.6.9", - "depd": "depd@2.0.0", - "destroy": "destroy@1.2.0", - "http-errors": "http-errors@2.0.0", - "iconv-lite": "iconv-lite@0.4.24", - "on-finished": "on-finished@2.4.1", - "qs": "qs@6.11.0", - "raw-body": "raw-body@2.5.2", - "type-is": "type-is@1.6.18", - "unpipe": "unpipe@1.0.0" - } - }, - "brace-expansion@2.0.1": { - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "balanced-match@1.0.2" - } - }, - "braces@3.0.3": { - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "fill-range@7.1.1" - } - }, - "bundle-require@4.2.1_esbuild@0.21.5": { - "integrity": "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==", - "dependencies": { - "esbuild": "esbuild@0.21.5", - "load-tsconfig": "load-tsconfig@0.2.5" - } - }, - "bytes@3.1.2": { - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dependencies": {} - }, - "cac@6.7.14": { - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dependencies": {} - }, - "call-bind@1.0.7": { - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "es-define-property@1.0.0", - "es-errors": "es-errors@1.3.0", - "function-bind": "function-bind@1.1.2", - "get-intrinsic": "get-intrinsic@1.2.4", - "set-function-length": "set-function-length@1.2.2" - } - }, - "chai@5.1.1": { - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", - "dependencies": { - "assertion-error": "assertion-error@2.0.1", - "check-error": "check-error@2.1.1", - "deep-eql": "deep-eql@5.0.2", - "loupe": "loupe@3.1.1", - "pathval": "pathval@2.0.0" - } - }, - "chalk@2.4.2": { - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "ansi-styles@3.2.1", - "escape-string-regexp": "escape-string-regexp@1.0.5", - "supports-color": "supports-color@5.5.0" - } - }, - "chalk@4.1.2": { - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "ansi-styles@4.3.0", - "supports-color": "supports-color@7.2.0" - } - }, - "check-error@2.1.1": { - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dependencies": {} - }, - "chokidar@3.6.0": { - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "anymatch@3.1.3", - "braces": "braces@3.0.3", - "fsevents": "fsevents@2.3.3", - "glob-parent": "glob-parent@5.1.2", - "is-binary-path": "is-binary-path@2.1.0", - "is-glob": "is-glob@4.0.3", - "normalize-path": "normalize-path@3.0.0", - "readdirp": "readdirp@3.6.0" - } - }, - "color-convert@1.9.3": { - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "color-name@1.1.3" - } - }, - "color-convert@2.0.1": { - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "color-name@1.1.4" - } - }, - "color-name@1.1.3": { - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dependencies": {} - }, - "color-name@1.1.4": { - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dependencies": {} - }, - "commander@11.1.0": { - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dependencies": {} - }, - "commander@4.1.1": { - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dependencies": {} - }, - "commander@9.5.0": { - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dependencies": {} - }, - "compare-func@2.0.0": { - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dependencies": { - "array-ify": "array-ify@1.0.0", - "dot-prop": "dot-prop@5.3.0" - } - }, - "content-disposition@0.5.4": { - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "safe-buffer@5.2.1" - } - }, - "content-type@1.0.5": { - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dependencies": {} - }, - "conventional-changelog-angular@7.0.0": { - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", - "dependencies": { - "compare-func": "compare-func@2.0.0" - } - }, - "conventional-changelog-atom@4.0.0": { - "integrity": "sha512-q2YtiN7rnT1TGwPTwjjBSIPIzDJCRE+XAUahWxnh+buKK99Kks4WLMHoexw38GXx9OUxAsrp44f9qXe5VEMYhw==", - "dependencies": {} - }, - "conventional-changelog-codemirror@4.0.0": { - "integrity": "sha512-hQSojc/5imn1GJK3A75m9hEZZhc3urojA5gMpnar4JHmgLnuM3CUIARPpEk86glEKr3c54Po3WV/vCaO/U8g3Q==", - "dependencies": {} - }, - "conventional-changelog-conventionalcommits@7.0.2": { - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", - "dependencies": { - "compare-func": "compare-func@2.0.0" - } - }, - "conventional-changelog-core@7.0.0": { - "integrity": "sha512-UYgaB1F/COt7VFjlYKVE/9tTzfU3VUq47r6iWf6lM5T7TlOxr0thI63ojQueRLIpVbrtHK4Ffw+yQGduw2Bhdg==", - "dependencies": { - "@hutson/parse-repository-url": "@hutson/parse-repository-url@5.0.0", - "add-stream": "add-stream@1.0.0", - "conventional-changelog-writer": "conventional-changelog-writer@7.0.1", - "conventional-commits-parser": "conventional-commits-parser@5.0.0", - "git-raw-commits": "git-raw-commits@4.0.0", - "git-semver-tags": "git-semver-tags@7.0.1", - "hosted-git-info": "hosted-git-info@7.0.2", - "normalize-package-data": "normalize-package-data@6.0.2", - "read-pkg": "read-pkg@8.1.0", - "read-pkg-up": "read-pkg-up@10.1.0" - } - }, - "conventional-changelog-ember@4.0.0": { - "integrity": "sha512-D0IMhwcJUg1Y8FSry6XAplEJcljkHVlvAZddhhsdbL1rbsqRsMfGx/PIkPYq0ru5aDgn+OxhQ5N5yR7P9mfsvA==", - "dependencies": {} - }, - "conventional-changelog-eslint@5.0.0": { - "integrity": "sha512-6JtLWqAQIeJLn/OzUlYmzd9fKeNSWmQVim9kql+v4GrZwLx807kAJl3IJVc3jTYfVKWLxhC3BGUxYiuVEcVjgA==", - "dependencies": {} - }, - "conventional-changelog-express@4.0.0": { - "integrity": "sha512-yWyy5c7raP9v7aTvPAWzqrztACNO9+FEI1FSYh7UP7YT1AkWgv5UspUeB5v3Ibv4/o60zj2o9GF2tqKQ99lIsw==", - "dependencies": {} - }, - "conventional-changelog-jquery@5.0.0": { - "integrity": "sha512-slLjlXLRNa/icMI3+uGLQbtrgEny3RgITeCxevJB+p05ExiTgHACP5p3XiMKzjBn80n+Rzr83XMYfRInEtCPPw==", - "dependencies": {} - }, - "conventional-changelog-jshint@4.0.0": { - "integrity": "sha512-LyXq1bbl0yG0Ai1SbLxIk8ZxUOe3AjnlwE6sVRQmMgetBk+4gY9EO3d00zlEt8Y8gwsITytDnPORl8al7InTjg==", - "dependencies": { - "compare-func": "compare-func@2.0.0" - } - }, - "conventional-changelog-preset-loader@4.1.0": { - "integrity": "sha512-HozQjJicZTuRhCRTq4rZbefaiCzRM2pr6u2NL3XhrmQm4RMnDXfESU6JKu/pnKwx5xtdkYfNCsbhN5exhiKGJA==", - "dependencies": {} - }, - "conventional-changelog-writer@7.0.1": { - "integrity": "sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==", - "dependencies": { - "conventional-commits-filter": "conventional-commits-filter@4.0.0", - "handlebars": "handlebars@4.7.8", - "json-stringify-safe": "json-stringify-safe@5.0.1", - "meow": "meow@12.1.1", - "semver": "semver@7.6.2", - "split2": "split2@4.2.0" - } - }, - "conventional-changelog@5.1.0": { - "integrity": "sha512-aWyE/P39wGYRPllcCEZDxTVEmhyLzTc9XA6z6rVfkuCD2UBnhV/sgSOKbQrEG5z9mEZJjnopjgQooTKxEg8mAg==", - "dependencies": { - "conventional-changelog-angular": "conventional-changelog-angular@7.0.0", - "conventional-changelog-atom": "conventional-changelog-atom@4.0.0", - "conventional-changelog-codemirror": "conventional-changelog-codemirror@4.0.0", - "conventional-changelog-conventionalcommits": "conventional-changelog-conventionalcommits@7.0.2", - "conventional-changelog-core": "conventional-changelog-core@7.0.0", - "conventional-changelog-ember": "conventional-changelog-ember@4.0.0", - "conventional-changelog-eslint": "conventional-changelog-eslint@5.0.0", - "conventional-changelog-express": "conventional-changelog-express@4.0.0", - "conventional-changelog-jquery": "conventional-changelog-jquery@5.0.0", - "conventional-changelog-jshint": "conventional-changelog-jshint@4.0.0", - "conventional-changelog-preset-loader": "conventional-changelog-preset-loader@4.1.0" - } - }, - "conventional-commits-filter@4.0.0": { - "integrity": "sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==", - "dependencies": {} - }, - "conventional-commits-parser@5.0.0": { - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", - "dependencies": { - "JSONStream": "JSONStream@1.3.5", - "is-text-path": "is-text-path@2.0.0", - "meow": "meow@12.1.1", - "split2": "split2@4.2.0" - } - }, - "cookie-signature@1.0.6": { - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dependencies": {} - }, - "cookie@0.6.0": { - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "dependencies": {} - }, - "cross-spawn@7.0.3": { - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "path-key@3.1.1", - "shebang-command": "shebang-command@2.0.0", - "which": "which@2.0.2" - } - }, - "dargs@8.1.0": { - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", - "dependencies": {} - }, - "debug@2.6.9": { - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "ms@2.0.0" - } - }, - "debug@4.3.5": { - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dependencies": { - "ms": "ms@2.1.2" - } - }, - "deep-eql@5.0.2": { - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dependencies": {} - }, - "define-data-property@1.1.4": { - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "es-define-property@1.0.0", - "es-errors": "es-errors@1.3.0", - "gopd": "gopd@1.0.1" - } - }, - "depd@2.0.0": { - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dependencies": {} - }, - "destroy@1.2.0": { - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dependencies": {} - }, - "dir-glob@3.0.1": { - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "path-type@4.0.0" - } - }, - "dot-prop@5.3.0": { - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "is-obj@2.0.0" - } - }, - "eastasianwidth@0.2.0": { - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dependencies": {} - }, - "ee-first@1.1.1": { - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dependencies": {} - }, - "emoji-regex@8.0.0": { - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dependencies": {} - }, - "emoji-regex@9.2.2": { - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dependencies": {} - }, - "encodeurl@1.0.2": { - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dependencies": {} - }, - "error-ex@1.3.2": { - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "is-arrayish@0.2.1" - } - }, - "es-define-property@1.0.0": { - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "get-intrinsic@1.2.4" - } - }, - "es-errors@1.3.0": { - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dependencies": {} - }, - "esbuild@0.21.5": { - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dependencies": { - "@esbuild/aix-ppc64": "@esbuild/aix-ppc64@0.21.5", - "@esbuild/android-arm": "@esbuild/android-arm@0.21.5", - "@esbuild/android-arm64": "@esbuild/android-arm64@0.21.5", - "@esbuild/android-x64": "@esbuild/android-x64@0.21.5", - "@esbuild/darwin-arm64": "@esbuild/darwin-arm64@0.21.5", - "@esbuild/darwin-x64": "@esbuild/darwin-x64@0.21.5", - "@esbuild/freebsd-arm64": "@esbuild/freebsd-arm64@0.21.5", - "@esbuild/freebsd-x64": "@esbuild/freebsd-x64@0.21.5", - "@esbuild/linux-arm": "@esbuild/linux-arm@0.21.5", - "@esbuild/linux-arm64": "@esbuild/linux-arm64@0.21.5", - "@esbuild/linux-ia32": "@esbuild/linux-ia32@0.21.5", - "@esbuild/linux-loong64": "@esbuild/linux-loong64@0.21.5", - "@esbuild/linux-mips64el": "@esbuild/linux-mips64el@0.21.5", - "@esbuild/linux-ppc64": "@esbuild/linux-ppc64@0.21.5", - "@esbuild/linux-riscv64": "@esbuild/linux-riscv64@0.21.5", - "@esbuild/linux-s390x": "@esbuild/linux-s390x@0.21.5", - "@esbuild/linux-x64": "@esbuild/linux-x64@0.21.5", - "@esbuild/netbsd-x64": "@esbuild/netbsd-x64@0.21.5", - "@esbuild/openbsd-x64": "@esbuild/openbsd-x64@0.21.5", - "@esbuild/sunos-x64": "@esbuild/sunos-x64@0.21.5", - "@esbuild/win32-arm64": "@esbuild/win32-arm64@0.21.5", - "@esbuild/win32-ia32": "@esbuild/win32-ia32@0.21.5", - "@esbuild/win32-x64": "@esbuild/win32-x64@0.21.5" - } - }, - "escape-html@1.0.3": { - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dependencies": {} - }, - "escape-string-regexp@1.0.5": { - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dependencies": {} - }, - "estree-walker@3.0.3": { - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "@types/estree@1.0.5" - } - }, - "etag@1.8.1": { - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dependencies": {} - }, - "execa@5.1.1": { - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "cross-spawn@7.0.3", - "get-stream": "get-stream@6.0.1", - "human-signals": "human-signals@2.1.0", - "is-stream": "is-stream@2.0.1", - "merge-stream": "merge-stream@2.0.0", - "npm-run-path": "npm-run-path@4.0.1", - "onetime": "onetime@5.1.2", - "signal-exit": "signal-exit@3.0.7", - "strip-final-newline": "strip-final-newline@2.0.0" - } - }, - "execa@8.0.1": { - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dependencies": { - "cross-spawn": "cross-spawn@7.0.3", - "get-stream": "get-stream@8.0.1", - "human-signals": "human-signals@5.0.0", - "is-stream": "is-stream@3.0.0", - "merge-stream": "merge-stream@2.0.0", - "npm-run-path": "npm-run-path@5.3.0", - "onetime": "onetime@6.0.0", - "signal-exit": "signal-exit@4.1.0", - "strip-final-newline": "strip-final-newline@3.0.0" - } - }, - "express@4.19.2": { - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dependencies": { - "accepts": "accepts@1.3.8", - "array-flatten": "array-flatten@1.1.1", - "body-parser": "body-parser@1.20.2", - "content-disposition": "content-disposition@0.5.4", - "content-type": "content-type@1.0.5", - "cookie": "cookie@0.6.0", - "cookie-signature": "cookie-signature@1.0.6", - "debug": "debug@2.6.9", - "depd": "depd@2.0.0", - "encodeurl": "encodeurl@1.0.2", - "escape-html": "escape-html@1.0.3", - "etag": "etag@1.8.1", - "finalhandler": "finalhandler@1.2.0", - "fresh": "fresh@0.5.2", - "http-errors": "http-errors@2.0.0", - "merge-descriptors": "merge-descriptors@1.0.1", - "methods": "methods@1.1.2", - "on-finished": "on-finished@2.4.1", - "parseurl": "parseurl@1.3.3", - "path-to-regexp": "path-to-regexp@0.1.7", - "proxy-addr": "proxy-addr@2.0.7", - "qs": "qs@6.11.0", - "range-parser": "range-parser@1.2.1", - "safe-buffer": "safe-buffer@5.2.1", - "send": "send@0.18.0", - "serve-static": "serve-static@1.15.0", - "setprototypeof": "setprototypeof@1.2.0", - "statuses": "statuses@2.0.1", - "type-is": "type-is@1.6.18", - "utils-merge": "utils-merge@1.0.1", - "vary": "vary@1.1.2" - } - }, - "fast-glob@3.3.2": { - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "@nodelib/fs.stat@2.0.5", - "@nodelib/fs.walk": "@nodelib/fs.walk@1.2.8", - "glob-parent": "glob-parent@5.1.2", - "merge2": "merge2@1.4.1", - "micromatch": "micromatch@4.0.7" - } - }, - "fastq@1.17.1": { - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "reusify@1.0.4" - } - }, - "fill-range@7.1.1": { - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "to-regex-range@5.0.1" - } - }, - "finalhandler@1.2.0": { - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "debug@2.6.9", - "encodeurl": "encodeurl@1.0.2", - "escape-html": "escape-html@1.0.3", - "on-finished": "on-finished@2.4.1", - "parseurl": "parseurl@1.3.3", - "statuses": "statuses@2.0.1", - "unpipe": "unpipe@1.0.0" - } - }, - "find-up@6.3.0": { - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dependencies": { - "locate-path": "locate-path@7.2.0", - "path-exists": "path-exists@5.0.0" - } - }, - "foreground-child@3.2.1": { - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dependencies": { - "cross-spawn": "cross-spawn@7.0.3", - "signal-exit": "signal-exit@4.1.0" - } - }, - "forwarded@0.2.0": { - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dependencies": {} - }, - "fresh@0.5.2": { - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dependencies": {} - }, - "fsevents@2.3.3": { - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dependencies": {} - }, - "function-bind@1.1.2": { - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dependencies": {} - }, - "get-func-name@2.0.2": { - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dependencies": {} - }, - "get-intrinsic@1.2.4": { - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "es-errors@1.3.0", - "function-bind": "function-bind@1.1.2", - "has-proto": "has-proto@1.0.3", - "has-symbols": "has-symbols@1.0.3", - "hasown": "hasown@2.0.2" - } - }, - "get-stream@6.0.1": { - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dependencies": {} - }, - "get-stream@8.0.1": { - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dependencies": {} - }, - "get-tsconfig@4.7.5": { - "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", - "dependencies": { - "resolve-pkg-maps": "resolve-pkg-maps@1.0.0" - } - }, - "git-raw-commits@4.0.0": { - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", - "dependencies": { - "dargs": "dargs@8.1.0", - "meow": "meow@12.1.1", - "split2": "split2@4.2.0" - } - }, - "git-semver-tags@7.0.1": { - "integrity": "sha512-NY0ZHjJzyyNXHTDZmj+GG7PyuAKtMsyWSwh07CR2hOZFa+/yoTsXci/nF2obzL8UDhakFNkD9gNdt/Ed+cxh2Q==", - "dependencies": { - "meow": "meow@12.1.1", - "semver": "semver@7.6.2" - } - }, - "glob-parent@5.1.2": { - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "is-glob@4.0.3" - } - }, - "glob@10.4.5": { - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dependencies": { - "foreground-child": "foreground-child@3.2.1", - "jackspeak": "jackspeak@3.4.3", - "minimatch": "minimatch@9.0.5", - "minipass": "minipass@7.1.2", - "package-json-from-dist": "package-json-from-dist@1.0.0", - "path-scurry": "path-scurry@1.11.1" - } - }, - "glob@11.0.0": { - "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", - "dependencies": { - "foreground-child": "foreground-child@3.2.1", - "jackspeak": "jackspeak@4.0.1", - "minimatch": "minimatch@10.0.1", - "minipass": "minipass@7.1.2", - "package-json-from-dist": "package-json-from-dist@1.0.0", - "path-scurry": "path-scurry@2.0.0" - } - }, - "globby@11.1.0": { - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "array-union@2.1.0", - "dir-glob": "dir-glob@3.0.1", - "fast-glob": "fast-glob@3.3.2", - "ignore": "ignore@5.3.1", - "merge2": "merge2@1.4.1", - "slash": "slash@3.0.0" - } - }, - "gopd@1.0.1": { - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "get-intrinsic@1.2.4" - } - }, - "handlebars@4.7.8": { - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dependencies": { - "minimist": "minimist@1.2.8", - "neo-async": "neo-async@2.6.2", - "source-map": "source-map@0.6.1", - "uglify-js": "uglify-js@3.18.0", - "wordwrap": "wordwrap@1.0.0" - } - }, - "has-flag@3.0.0": { - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dependencies": {} - }, - "has-flag@4.0.0": { - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dependencies": {} - }, - "has-property-descriptors@1.0.2": { - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "es-define-property@1.0.0" - } - }, - "has-proto@1.0.3": { - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dependencies": {} - }, - "has-symbols@1.0.3": { - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dependencies": {} - }, - "hasown@2.0.2": { - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "function-bind@1.1.2" - } - }, - "helmet@7.1.0": { - "integrity": "sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==", - "dependencies": {} - }, - "hosted-git-info@7.0.2": { - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dependencies": { - "lru-cache": "lru-cache@10.4.3" - } - }, - "http-errors@2.0.0": { - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "depd@2.0.0", - "inherits": "inherits@2.0.4", - "setprototypeof": "setprototypeof@1.2.0", - "statuses": "statuses@2.0.1", - "toidentifier": "toidentifier@1.0.1" - } - }, - "human-signals@2.1.0": { - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dependencies": {} - }, - "human-signals@5.0.0": { - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dependencies": {} - }, - "iconv-lite@0.4.24": { - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": "safer-buffer@2.1.2" - } - }, - "ignore@5.3.1": { - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dependencies": {} - }, - "inherits@2.0.4": { - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dependencies": {} - }, - "ipaddr.js@1.9.1": { - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dependencies": {} - }, - "is-arrayish@0.2.1": { - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dependencies": {} - }, - "is-binary-path@2.1.0": { - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "binary-extensions@2.3.0" - } - }, - "is-extglob@2.1.1": { - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dependencies": {} - }, - "is-fullwidth-code-point@3.0.0": { - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dependencies": {} - }, - "is-glob@4.0.3": { - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "is-extglob@2.1.1" - } - }, - "is-number@7.0.0": { - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dependencies": {} - }, - "is-obj@2.0.0": { - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dependencies": {} - }, - "is-stream@2.0.1": { - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dependencies": {} - }, - "is-stream@3.0.0": { - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dependencies": {} - }, - "is-text-path@2.0.0": { - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", - "dependencies": { - "text-extensions": "text-extensions@2.4.0" - } - }, - "isexe@2.0.0": { - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dependencies": {} - }, - "jackspeak@3.4.3": { - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dependencies": { - "@isaacs/cliui": "@isaacs/cliui@8.0.2", - "@pkgjs/parseargs": "@pkgjs/parseargs@0.11.0" - } - }, - "jackspeak@4.0.1": { - "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", - "dependencies": { - "@isaacs/cliui": "@isaacs/cliui@8.0.2", - "@pkgjs/parseargs": "@pkgjs/parseargs@0.11.0" - } - }, - "joycon@3.1.1": { - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "dependencies": {} - }, - "js-tokens@4.0.0": { - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dependencies": {} - }, - "json-parse-even-better-errors@3.0.2": { - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dependencies": {} - }, - "json-stringify-safe@5.0.1": { - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dependencies": {} - }, - "jsonparse@1.3.1": { - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dependencies": {} - }, - "lilconfig@3.1.2": { - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "dependencies": {} - }, - "lines-and-columns@1.2.4": { - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dependencies": {} - }, - "lines-and-columns@2.0.4": { - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", - "dependencies": {} - }, - "load-tsconfig@0.2.5": { - "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", - "dependencies": {} - }, - "locate-path@7.2.0": { - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dependencies": { - "p-locate": "p-locate@6.0.0" - } - }, - "lodash.sortby@4.7.0": { - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dependencies": {} - }, - "loupe@3.1.1": { - "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", - "dependencies": { - "get-func-name": "get-func-name@2.0.2" - } - }, - "lru-cache@10.4.3": { - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dependencies": {} - }, - "lru-cache@11.0.0": { - "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", - "dependencies": {} - }, - "magic-string@0.30.10": { - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", - "dependencies": { - "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.5.0" - } - }, - "media-typer@0.3.0": { - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dependencies": {} - }, - "meow@12.1.1": { - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dependencies": {} - }, - "merge-descriptors@1.0.1": { - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dependencies": {} - }, - "merge-stream@2.0.0": { - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dependencies": {} - }, - "merge2@1.4.1": { - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dependencies": {} - }, - "methods@1.1.2": { - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dependencies": {} - }, - "micromatch@4.0.7": { - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dependencies": { - "braces": "braces@3.0.3", - "picomatch": "picomatch@2.3.1" - } - }, - "mime-db@1.52.0": { - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dependencies": {} - }, - "mime-types@2.1.35": { - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "mime-db@1.52.0" - } - }, - "mime@1.6.0": { - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dependencies": {} - }, - "mimic-fn@2.1.0": { - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dependencies": {} - }, - "mimic-fn@4.0.0": { - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dependencies": {} - }, - "minimatch@10.0.1": { - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "dependencies": { - "brace-expansion": "brace-expansion@2.0.1" - } - }, - "minimatch@9.0.5": { - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "brace-expansion@2.0.1" - } - }, - "minimist@1.2.8": { - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dependencies": {} - }, - "minipass@7.1.2": { - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dependencies": {} - }, - "mri@1.2.0": { - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dependencies": {} - }, - "ms@2.0.0": { - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dependencies": {} - }, - "ms@2.1.2": { - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dependencies": {} - }, - "ms@2.1.3": { - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dependencies": {} - }, - "mz@2.7.0": { - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "any-promise@1.3.0", - "object-assign": "object-assign@4.1.1", - "thenify-all": "thenify-all@1.6.0" - } - }, - "nanoid@3.3.7": { - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dependencies": {} - }, - "negotiator@0.6.3": { - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dependencies": {} - }, - "neo-async@2.6.2": { - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dependencies": {} - }, - "normalize-package-data@6.0.2": { - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dependencies": { - "hosted-git-info": "hosted-git-info@7.0.2", - "semver": "semver@7.6.2", - "validate-npm-package-license": "validate-npm-package-license@3.0.4" - } - }, - "normalize-path@3.0.0": { - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dependencies": {} - }, - "npm-run-path@4.0.1": { - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "path-key@3.1.1" - } - }, - "npm-run-path@5.3.0": { - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dependencies": { - "path-key": "path-key@4.0.0" - } - }, - "object-assign@4.1.1": { - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dependencies": {} - }, - "object-inspect@1.13.2": { - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "dependencies": {} - }, - "on-finished@2.4.1": { - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "ee-first@1.1.1" - } - }, - "onetime@5.1.2": { - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "mimic-fn@2.1.0" - } - }, - "onetime@6.0.0": { - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "mimic-fn@4.0.0" - } - }, - "p-limit@4.0.0": { - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "yocto-queue@1.1.1" - } - }, - "p-locate@6.0.0": { - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dependencies": { - "p-limit": "p-limit@4.0.0" - } - }, - "package-json-from-dist@1.0.0": { - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dependencies": {} - }, - "parse-json@7.1.1": { - "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==", - "dependencies": { - "@babel/code-frame": "@babel/code-frame@7.24.7", - "error-ex": "error-ex@1.3.2", - "json-parse-even-better-errors": "json-parse-even-better-errors@3.0.2", - "lines-and-columns": "lines-and-columns@2.0.4", - "type-fest": "type-fest@3.13.1" - } - }, - "parseurl@1.3.3": { - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dependencies": {} - }, - "path-exists@5.0.0": { - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dependencies": {} - }, - "path-key@3.1.1": { - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dependencies": {} - }, - "path-key@4.0.0": { - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dependencies": {} - }, - "path-scurry@1.11.1": { - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dependencies": { - "lru-cache": "lru-cache@10.4.3", - "minipass": "minipass@7.1.2" - } - }, - "path-scurry@2.0.0": { - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dependencies": { - "lru-cache": "lru-cache@11.0.0", - "minipass": "minipass@7.1.2" - } - }, - "path-to-regexp@0.1.7": { - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dependencies": {} - }, - "path-type@4.0.0": { - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dependencies": {} - }, - "pathe@1.1.2": { - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dependencies": {} - }, - "pathval@2.0.0": { - "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", - "dependencies": {} - }, - "picocolors@1.0.1": { - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dependencies": {} - }, - "picomatch@2.3.1": { - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dependencies": {} - }, - "pirates@4.0.6": { - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dependencies": {} - }, - "postcss-load-config@4.0.2": { - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dependencies": { - "lilconfig": "lilconfig@3.1.2", - "yaml": "yaml@2.4.5" - } - }, - "postcss@8.4.39": { - "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", - "dependencies": { - "nanoid": "nanoid@3.3.7", - "picocolors": "picocolors@1.0.1", - "source-map-js": "source-map-js@1.2.0" - } - }, - "proxy-addr@2.0.7": { - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "forwarded@0.2.0", - "ipaddr.js": "ipaddr.js@1.9.1" - } - }, - "punycode@2.3.1": { - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dependencies": {} - }, - "qs@6.11.0": { - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "side-channel@1.0.6" - } - }, - "queue-microtask@1.2.3": { - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dependencies": {} - }, - "range-parser@1.2.1": { - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dependencies": {} - }, - "raw-body@2.5.2": { - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "bytes@3.1.2", - "http-errors": "http-errors@2.0.0", - "iconv-lite": "iconv-lite@0.4.24", - "unpipe": "unpipe@1.0.0" - } - }, - "read-pkg-up@10.1.0": { - "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", - "dependencies": { - "find-up": "find-up@6.3.0", - "read-pkg": "read-pkg@8.1.0", - "type-fest": "type-fest@4.21.0" - } - }, - "read-pkg@8.1.0": { - "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", - "dependencies": { - "@types/normalize-package-data": "@types/normalize-package-data@2.4.4", - "normalize-package-data": "normalize-package-data@6.0.2", - "parse-json": "parse-json@7.1.1", - "type-fest": "type-fest@4.21.0" - } - }, - "readdirp@3.6.0": { - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "picomatch@2.3.1" - } - }, - "resolve-from@5.0.0": { - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dependencies": {} - }, - "resolve-pkg-maps@1.0.0": { - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dependencies": {} - }, - "reusify@1.0.4": { - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dependencies": {} - }, - "rimraf@6.0.1": { - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", - "dependencies": { - "glob": "glob@11.0.0", - "package-json-from-dist": "package-json-from-dist@1.0.0" - } - }, - "rollup@4.18.1": { - "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==", - "dependencies": { - "@rollup/rollup-android-arm-eabi": "@rollup/rollup-android-arm-eabi@4.18.1", - "@rollup/rollup-android-arm64": "@rollup/rollup-android-arm64@4.18.1", - "@rollup/rollup-darwin-arm64": "@rollup/rollup-darwin-arm64@4.18.1", - "@rollup/rollup-darwin-x64": "@rollup/rollup-darwin-x64@4.18.1", - "@rollup/rollup-linux-arm-gnueabihf": "@rollup/rollup-linux-arm-gnueabihf@4.18.1", - "@rollup/rollup-linux-arm-musleabihf": "@rollup/rollup-linux-arm-musleabihf@4.18.1", - "@rollup/rollup-linux-arm64-gnu": "@rollup/rollup-linux-arm64-gnu@4.18.1", - "@rollup/rollup-linux-arm64-musl": "@rollup/rollup-linux-arm64-musl@4.18.1", - "@rollup/rollup-linux-powerpc64le-gnu": "@rollup/rollup-linux-powerpc64le-gnu@4.18.1", - "@rollup/rollup-linux-riscv64-gnu": "@rollup/rollup-linux-riscv64-gnu@4.18.1", - "@rollup/rollup-linux-s390x-gnu": "@rollup/rollup-linux-s390x-gnu@4.18.1", - "@rollup/rollup-linux-x64-gnu": "@rollup/rollup-linux-x64-gnu@4.18.1", - "@rollup/rollup-linux-x64-musl": "@rollup/rollup-linux-x64-musl@4.18.1", - "@rollup/rollup-win32-arm64-msvc": "@rollup/rollup-win32-arm64-msvc@4.18.1", - "@rollup/rollup-win32-ia32-msvc": "@rollup/rollup-win32-ia32-msvc@4.18.1", - "@rollup/rollup-win32-x64-msvc": "@rollup/rollup-win32-x64-msvc@4.18.1", - "@types/estree": "@types/estree@1.0.5", - "fsevents": "fsevents@2.3.3" - } - }, - "run-parallel@1.2.0": { - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dependencies": { - "queue-microtask": "queue-microtask@1.2.3" - } - }, - "safe-buffer@5.2.1": { - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dependencies": {} - }, - "safer-buffer@2.1.2": { - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dependencies": {} - }, - "semver@7.6.2": { - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dependencies": {} - }, - "send@0.18.0": { - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "debug@2.6.9", - "depd": "depd@2.0.0", - "destroy": "destroy@1.2.0", - "encodeurl": "encodeurl@1.0.2", - "escape-html": "escape-html@1.0.3", - "etag": "etag@1.8.1", - "fresh": "fresh@0.5.2", - "http-errors": "http-errors@2.0.0", - "mime": "mime@1.6.0", - "ms": "ms@2.1.3", - "on-finished": "on-finished@2.4.1", - "range-parser": "range-parser@1.2.1", - "statuses": "statuses@2.0.1" - } - }, - "serve-static@1.15.0": { - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "encodeurl@1.0.2", - "escape-html": "escape-html@1.0.3", - "parseurl": "parseurl@1.3.3", - "send": "send@0.18.0" - } - }, - "set-function-length@1.2.2": { - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "define-data-property@1.1.4", - "es-errors": "es-errors@1.3.0", - "function-bind": "function-bind@1.1.2", - "get-intrinsic": "get-intrinsic@1.2.4", - "gopd": "gopd@1.0.1", - "has-property-descriptors": "has-property-descriptors@1.0.2" - } - }, - "setprototypeof@1.2.0": { - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dependencies": {} - }, - "shebang-command@2.0.0": { - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "shebang-regex@3.0.0" - } - }, - "shebang-regex@3.0.0": { - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dependencies": {} - }, - "side-channel@1.0.6": { - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "es-errors": "es-errors@1.3.0", - "get-intrinsic": "get-intrinsic@1.2.4", - "object-inspect": "object-inspect@1.13.2" - } - }, - "siginfo@2.0.0": { - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dependencies": {} - }, - "signal-exit@3.0.7": { - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dependencies": {} - }, - "signal-exit@4.1.0": { - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dependencies": {} - }, - "slash@3.0.0": { - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dependencies": {} - }, - "source-map-js@1.2.0": { - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dependencies": {} - }, - "source-map@0.6.1": { - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dependencies": {} - }, - "source-map@0.8.0-beta.0": { - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dependencies": { - "whatwg-url": "whatwg-url@7.1.0" - } - }, - "spdx-correct@3.2.0": { - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dependencies": { - "spdx-expression-parse": "spdx-expression-parse@3.0.1", - "spdx-license-ids": "spdx-license-ids@3.0.18" - } - }, - "spdx-exceptions@2.5.0": { - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dependencies": {} - }, - "spdx-expression-parse@3.0.1": { - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "spdx-exceptions@2.5.0", - "spdx-license-ids": "spdx-license-ids@3.0.18" - } - }, - "spdx-license-ids@3.0.18": { - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", - "dependencies": {} - }, - "split2@4.2.0": { - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dependencies": {} - }, - "stackback@0.0.2": { - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dependencies": {} - }, - "statuses@2.0.1": { - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dependencies": {} - }, - "std-env@3.7.0": { - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", - "dependencies": {} - }, - "string-width@4.2.3": { - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "emoji-regex@8.0.0", - "is-fullwidth-code-point": "is-fullwidth-code-point@3.0.0", - "strip-ansi": "strip-ansi@6.0.1" - } - }, - "string-width@5.1.2": { - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "eastasianwidth@0.2.0", - "emoji-regex": "emoji-regex@9.2.2", - "strip-ansi": "strip-ansi@7.1.0" - } - }, - "strip-ansi@6.0.1": { - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "ansi-regex@5.0.1" - } - }, - "strip-ansi@7.1.0": { - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "ansi-regex@6.0.1" - } - }, - "strip-final-newline@2.0.0": { - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dependencies": {} - }, - "strip-final-newline@3.0.0": { - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dependencies": {} - }, - "sucrase@3.35.0": { - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dependencies": { - "@jridgewell/gen-mapping": "@jridgewell/gen-mapping@0.3.5", - "commander": "commander@4.1.1", - "glob": "glob@10.4.5", - "lines-and-columns": "lines-and-columns@1.2.4", - "mz": "mz@2.7.0", - "pirates": "pirates@4.0.6", - "ts-interface-checker": "ts-interface-checker@0.1.13" - } - }, - "supports-color@5.5.0": { - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "has-flag@3.0.0" - } - }, - "supports-color@7.2.0": { - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "has-flag@4.0.0" - } - }, - "text-extensions@2.4.0": { - "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", - "dependencies": {} - }, - "thenify-all@1.6.0": { - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": "thenify@3.3.1" - } - }, - "thenify@3.3.1": { - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "any-promise@1.3.0" - } - }, - "through@2.3.8": { - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dependencies": {} - }, - "tinybench@2.8.0": { - "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", - "dependencies": {} - }, - "tinypool@1.0.0": { - "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", - "dependencies": {} - }, - "tinyrainbow@1.2.0": { - "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", - "dependencies": {} - }, - "tinyspy@3.0.0": { - "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", - "dependencies": {} - }, - "to-regex-range@5.0.1": { - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "is-number@7.0.0" - } - }, - "toidentifier@1.0.1": { - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dependencies": {} - }, - "tr46@1.0.1": { - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dependencies": { - "punycode": "punycode@2.3.1" - } - }, - "tree-kill@1.2.2": { - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dependencies": {} - }, - "ts-interface-checker@0.1.13": { - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dependencies": {} - }, - "tsup@8.1.0_typescript@5.5.3_esbuild@0.21.5": { - "integrity": "sha512-UFdfCAXukax+U6KzeTNO2kAARHcWxmKsnvSPXUcfA1D+kU05XDccCrkffCQpFaWDsZfV0jMyTsxU39VfCp6EOg==", - "dependencies": { - "bundle-require": "bundle-require@4.2.1_esbuild@0.21.5", - "cac": "cac@6.7.14", - "chokidar": "chokidar@3.6.0", - "debug": "debug@4.3.5", - "esbuild": "esbuild@0.21.5", - "execa": "execa@5.1.1", - "globby": "globby@11.1.0", - "joycon": "joycon@3.1.1", - "postcss-load-config": "postcss-load-config@4.0.2", - "resolve-from": "resolve-from@5.0.0", - "rollup": "rollup@4.18.1", - "source-map": "source-map@0.8.0-beta.0", - "sucrase": "sucrase@3.35.0", - "tree-kill": "tree-kill@1.2.2", - "typescript": "typescript@5.5.3" - } - }, - "tsx@4.16.2": { - "integrity": "sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==", - "dependencies": { - "esbuild": "esbuild@0.21.5", - "fsevents": "fsevents@2.3.3", - "get-tsconfig": "get-tsconfig@4.7.5" - } - }, - "type-fest@3.13.1": { - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dependencies": {} - }, - "type-fest@4.21.0": { - "integrity": "sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==", - "dependencies": {} - }, - "type-is@1.6.18": { - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "media-typer@0.3.0", - "mime-types": "mime-types@2.1.35" - } - }, - "typescript@5.5.3": { - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", - "dependencies": {} - }, - "uglify-js@3.18.0": { - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", - "dependencies": {} - }, - "undici-types@5.26.5": { - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dependencies": {} - }, - "unpipe@1.0.0": { - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dependencies": {} - }, - "utils-merge@1.0.1": { - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dependencies": {} - }, - "validate-npm-package-license@3.0.4": { - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "spdx-correct@3.2.0", - "spdx-expression-parse": "spdx-expression-parse@3.0.1" - } - }, - "vary@1.1.2": { - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dependencies": {} - }, - "vite-node@2.0.2_@types+node@20.14.10": { - "integrity": "sha512-w4vkSz1Wo+NIQg8pjlEn0jQbcM/0D+xVaYjhw3cvarTanLLBh54oNiRbsT8PNK5GfuST0IlVXjsNRoNlqvY/fw==", - "dependencies": { - "cac": "cac@6.7.14", - "debug": "debug@4.3.5", - "pathe": "pathe@1.1.2", - "tinyrainbow": "tinyrainbow@1.2.0", - "vite": "vite@5.3.3_@types+node@20.14.10" - } - }, - "vite@5.3.3_@types+node@20.14.10": { - "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", - "dependencies": { - "@types/node": "@types/node@20.14.10", - "esbuild": "esbuild@0.21.5", - "fsevents": "fsevents@2.3.3", - "postcss": "postcss@8.4.39", - "rollup": "rollup@4.18.1" - } - }, - "vitest@2.0.2_@types+node@20.14.10": { - "integrity": "sha512-WlpZ9neRIjNBIOQwBYfBSr0+of5ZCbxT2TVGKW4Lv0c8+srCFIiRdsP7U009t8mMn821HQ4XKgkx5dVWpyoyLw==", - "dependencies": { - "@ampproject/remapping": "@ampproject/remapping@2.3.0", - "@types/node": "@types/node@20.14.10", - "@vitest/expect": "@vitest/expect@2.0.2", - "@vitest/pretty-format": "@vitest/pretty-format@2.0.2", - "@vitest/runner": "@vitest/runner@2.0.2", - "@vitest/snapshot": "@vitest/snapshot@2.0.2", - "@vitest/spy": "@vitest/spy@2.0.2", - "@vitest/utils": "@vitest/utils@2.0.2", - "chai": "chai@5.1.1", - "debug": "debug@4.3.5", - "execa": "execa@8.0.1", - "magic-string": "magic-string@0.30.10", - "pathe": "pathe@1.1.2", - "std-env": "std-env@3.7.0", - "tinybench": "tinybench@2.8.0", - "tinypool": "tinypool@1.0.0", - "tinyrainbow": "tinyrainbow@1.2.0", - "vite": "vite@5.3.3_@types+node@20.14.10", - "vite-node": "vite-node@2.0.2_@types+node@20.14.10", - "why-is-node-running": "why-is-node-running@2.3.0" - } - }, - "wait-port@1.1.0": { - "integrity": "sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==", - "dependencies": { - "chalk": "chalk@4.1.2", - "commander": "commander@9.5.0", - "debug": "debug@4.3.5" - } - }, - "webidl-conversions@4.0.2": { - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dependencies": {} - }, - "whatwg-url@7.1.0": { - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "lodash.sortby@4.7.0", - "tr46": "tr46@1.0.1", - "webidl-conversions": "webidl-conversions@4.0.2" - } - }, - "which@2.0.2": { - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "isexe@2.0.0" - } - }, - "why-is-node-running@2.3.0": { - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dependencies": { - "siginfo": "siginfo@2.0.0", - "stackback": "stackback@0.0.2" - } - }, - "wordwrap@1.0.0": { - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dependencies": {} - }, - "wrap-ansi@7.0.0": { - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "ansi-styles@4.3.0", - "string-width": "string-width@4.2.3", - "strip-ansi": "strip-ansi@6.0.1" - } - }, - "wrap-ansi@8.1.0": { - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "ansi-styles@6.2.1", - "string-width": "string-width@5.1.2", - "strip-ansi": "strip-ansi@7.1.0" - } - }, - "yaml@2.4.5": { - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", - "dependencies": {} - }, - "yocto-queue@1.1.1": { - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", - "dependencies": {} - }, - "zx@8.1.4": { - "integrity": "sha512-QFDYYpnzdpRiJ3dL2102Cw26FpXpWshW4QLTGxiYfIcwdAqg084jRCkK/kuP/NOSkxOjydRwNFG81qzA5r1a6w==", - "dependencies": { - "@types/fs-extra": "@types/fs-extra@11.0.4", - "@types/node": "@types/node@20.14.10" - } - } - } - }, - "remote": {}, - "workspace": { - "dependencies": [ - "npm:mri", - "npm:wait-port", - "npm:zx" - ], - "packageJson": { - "dependencies": [ - "npm:@brillout/release-me@^0.3.9", - "npm:@types/node@^20.14.10", - "npm:@universal-middleware/core@^0.1.1", - "npm:express@^4.19.2", - "npm:helmet@^7.1.0", - "npm:rimraf@^6.0.0", - "npm:tsup@^8.1.0", - "npm:tsx@^4.16.2", - "npm:typescript@^5.5.3", - "npm:vitest@^2.0.2" - ] - } - } -} diff --git a/packages/adapter-express/package.json b/packages/adapter-express/package.json index 8cba4b3..b0068e2 100644 --- a/packages/adapter-express/package.json +++ b/packages/adapter-express/package.json @@ -22,7 +22,7 @@ "test": "vitest run", "test:run-express:node": "tsx tests/entry-express.ts", "test:run-express:bun": "bun tests/entry-express.ts", - "test:run-express:deno": "deno run --unstable-sloppy-imports -A tests/entry-express.ts", + "test:run-express:deno": "deno run --unstable-byonm --unstable-sloppy-imports -A tests/entry-express.ts", "test:typecheck": "tsc -p tsconfig.json --noEmit", "release": "LANG=en_US release-me patch", "release:minor": "LANG=en_US release-me minor", @@ -32,15 +32,17 @@ "@universal-middleware/core": "^0.1.1" }, "devDependencies": { - "@brillout/release-me": "^0.3.9", + "@brillout/release-me": "^0.4.0", + "@swc/core": "^1.7.11", "@types/node": "^20.14.10", "@universal-middleware/tests": "workspace:*", "express": "^4.19.2", "helmet": "^7.1.0", "rimraf": "^6.0.0", - "tsup": "^8.1.0", - "tsx": "^4.16.2", - "typescript": "^5.5.3", - "vitest": "^2.0.2" - } + "tsup": "^8.2.4", + "tsx": "^4.17.0", + "typescript": "^5.5.4", + "vitest": "^2.0.5" + }, + "sideEffects": false } diff --git a/packages/adapter-express/src/common.ts b/packages/adapter-express/src/common.ts index 3360910..9b053b1 100644 --- a/packages/adapter-express/src/common.ts +++ b/packages/adapter-express/src/common.ts @@ -7,9 +7,11 @@ import { import { sendResponse, wrapResponse } from "./response.js"; import type { Awaitable, + Get, UniversalHandler, UniversalMiddleware, } from "@universal-middleware/core"; +import { getAdapterRuntime } from "@universal-middleware/core"; export const contextSymbol = Symbol("unContext"); export const requestSymbol = Symbol("unRequest"); @@ -41,12 +43,14 @@ export interface PossiblyEncryptedSocket extends Socket { * `IncomingMessage` possibly augmented by Express-specific * `ip` and `protocol` properties. */ -export interface DecoratedRequest extends Omit { +export interface DecoratedRequest< + C extends Universal.Context = Universal.Context, +> extends Omit { ip?: string; protocol?: string; socket?: PossiblyEncryptedSocket; rawBody?: Buffer | null; - [contextSymbol]?: Universal.Context; + [contextSymbol]?: C; [requestSymbol]?: Request; } @@ -56,12 +60,15 @@ export interface DecoratedServerResponse extends ServerResponse { } /** Connect/Express style request listener/middleware */ -export type NodeMiddleware = ( - req: DecoratedRequest, +export type NodeMiddleware = ( + req: DecoratedRequest, res: DecoratedServerResponse, next?: (err?: unknown) => void, ) => void; +export type NodeHandler = + NodeMiddleware; + /** Adapter options */ export interface NodeAdapterHandlerOptions extends NodeRequestAdapterOptions {} export interface NodeAdapterMiddlewareOptions @@ -71,88 +78,117 @@ export interface NodeAdapterMiddlewareOptions * Creates a request handler to be passed to http.createServer() or used as a * middleware in Connect-style frameworks like Express. */ -export function createHandler( - handler: UniversalHandler, +export function createHandler( + handlerFactory: Get, options: NodeAdapterHandlerOptions = {}, -): NodeMiddleware { +): Get { const requestAdapter = createRequestAdapter(options); - return async (req, res, next) => { - try { - req[contextSymbol] ??= {}; - const request = requestAdapter(req); - const response = await handler(request, req[contextSymbol]); - - await sendResponse(response, res); - } catch (error) { - if (next) { - next(error); - } else { - console.error(error); - - if (!res.headersSent) { - res.statusCode = 500; - } + return (...args) => { + const handler = handlerFactory(...args); + + return async (req, res, next) => { + try { + req[contextSymbol] ??= {}; + const request = requestAdapter(req); + const response = await handler( + request, + req[contextSymbol], + getAdapterRuntime("node", { + req: req as IncomingMessage, + res, + }), + ); - if (!res.writableEnded) { - res.end(); + await sendResponse(response, res); + } catch (error) { + if (next) { + next(error); + } else { + console.error(error); + + if (!res.headersSent) { + res.statusCode = 500; + } + + if (!res.writableEnded) { + res.end(); + } } } - } + }; }; } /** * Creates a middleware to be passed to Connect-style frameworks like Express */ -export function createMiddleware( - middleware: UniversalMiddleware, +export function createMiddleware< + T extends unknown[], + InContext extends Universal.Context, + OutContext extends Universal.Context, +>( + middlewareFactory: Get>, options: NodeAdapterMiddlewareOptions = {}, -): NodeMiddleware { +): Get> { const requestAdapter = createRequestAdapter(options); - return async (req, res, next) => { - try { - req[contextSymbol] ??= {}; - const request = requestAdapter(req); - const response = await middleware(request, req[contextSymbol]); - - if (!response) { - return next?.(); - } else if (typeof response === "function") { - if (res.headersSent) { - throw new Error( - "Universal Middleware called after headers have been sent. Please open an issue at https://github.com/magne4000/universal-handler", - ); + return (...args) => { + const middleware = middlewareFactory(...args); + + return async (req, res, next) => { + try { + req[contextSymbol] ??= {} as OutContext; + const request = requestAdapter(req); + const response = await middleware( + request, + getContext(req)!, + getAdapterRuntime("node", { + req: req as IncomingMessage, + res, + }), + ); + + if (!response) { + return next?.(); + } else if (typeof response === "function") { + if (res.headersSent) { + throw new Error( + "Universal Middleware called after headers have been sent. Please open an issue at https://github.com/magne4000/universal-handler", + ); + } + wrapResponse(res); + res[pendingMiddlewaresSymbol] ??= []; + // `wrapResponse` takes care of calling those middlewares right before sending the response + res[pendingMiddlewaresSymbol].push(response); + return next?.(); + } else if (response instanceof Response) { + await sendResponse(response, res); + } else { + req[contextSymbol] = response; + return next?.(); } - wrapResponse(res); - res[pendingMiddlewaresSymbol] ??= []; - // `wrapResponse` takes care of calling those middlewares right before sending the response - res[pendingMiddlewaresSymbol].push(response); - return next?.(); - } else { - await sendResponse(response, res); - } - } catch (error) { - if (next) { - next(error); - } else { - console.error(error); - - if (!res.headersSent) { - res.statusCode = 500; - } - - if (!res.writableEnded) { - res.end(); + } catch (error) { + if (next) { + next(error); + } else { + console.error(error); + + if (!res.headersSent) { + res.statusCode = 500; + } + + if (!res.writableEnded) { + res.end(); + } } } - } + }; }; } -export function getContext( - req: DecoratedRequest, -): Universal.Context | undefined { - return req[contextSymbol]; +export function getContext< + InContext extends Universal.Context = Universal.Context, +>(req: DecoratedRequest): InContext | undefined { + return req[contextSymbol] as InContext | undefined; } diff --git a/packages/adapter-express/src/index.ts b/packages/adapter-express/src/index.ts index 8c2b5ae..cacf267 100644 --- a/packages/adapter-express/src/index.ts +++ b/packages/adapter-express/src/index.ts @@ -1,14 +1,11 @@ -import type { DecoratedRequest, DecoratedServerResponse } from "./common.js"; - -export type { DecoratedRequest, DecoratedServerResponse }; - -/** Connect/Express style request listener/middleware */ -export type NodeMiddleware = ( - req: DecoratedRequest, - res: DecoratedServerResponse, - next?: () => void, -) => void; - -export { createHandler, createMiddleware, getContext } from "./common.js"; +export { + createHandler, + createMiddleware, + getContext, + type DecoratedRequest, + type DecoratedServerResponse, + type NodeMiddleware, + type NodeHandler, +} from "./common.js"; export { createRequestAdapter } from "./request.js"; export { sendResponse } from "./response.js"; diff --git a/packages/adapter-express/tests/entry-express.ts b/packages/adapter-express/tests/entry-express.ts index cda175c..65a4bde 100644 --- a/packages/adapter-express/tests/entry-express.ts +++ b/packages/adapter-express/tests/entry-express.ts @@ -2,15 +2,18 @@ import { createHandler, createMiddleware } from "../src/index.js"; import express from "express"; import helmet from "helmet"; import { args, handler, middlewares } from "@universal-middleware/tests"; +import type { Get, UniversalMiddleware } from "@universal-middleware/core"; const app = express(); app.use(helmet()); -middlewares.forEach((middleware) => app.use(createMiddleware(middleware))); +middlewares.forEach((middleware) => + app.use(createMiddleware(middleware as Get<[], UniversalMiddleware>)()), +); // universal handler -app.get("/", createHandler(handler)); +app.get("/", createHandler(handler)()); const port = args.port ? parseInt(args.port) : 3000; diff --git a/packages/adapter-hattip/deno.json b/packages/adapter-hattip/deno.json index 7f10135..a38c68a 100644 --- a/packages/adapter-hattip/deno.json +++ b/packages/adapter-hattip/deno.json @@ -1,8 +1,10 @@ { "imports": { "@universal-middleware/tests": "../tests/dist", + "@universal-middleware/core": "../core/dist", "mri": "npm:mri", "zx": "npm:zx", "wait-port": "npm:wait-port" - } + }, + "lock": false } diff --git a/packages/adapter-hattip/deno.lock b/packages/adapter-hattip/deno.lock deleted file mode 100644 index c94f74a..0000000 --- a/packages/adapter-hattip/deno.lock +++ /dev/null @@ -1,1868 +0,0 @@ -{ - "version": "3", - "packages": { - "specifiers": { - "npm:@brillout/release-me@^0.3.9": "npm:@brillout/release-me@0.3.9", - "npm:@hattip/adapter-bun@^0.0.46": "npm:@hattip/adapter-bun@0.0.46", - "npm:@hattip/adapter-deno@^0.0.46": "npm:@hattip/adapter-deno@0.0.46", - "npm:@hattip/adapter-node@^0.0.46": "npm:@hattip/adapter-node@0.0.46", - "npm:@hattip/compose@^0.0.46": "npm:@hattip/compose@0.0.46", - "npm:@hattip/core@^0.0.46": "npm:@hattip/core@0.0.46", - "npm:@hattip/cors@^0.0.46": "npm:@hattip/cors@0.0.46", - "npm:@hattip/router@^0.0.46": "npm:@hattip/router@0.0.46", - "npm:@types/node@^20.14.10": "npm:@types/node@20.14.10", - "npm:@universal-middleware/core@^0.1.1": "npm:@universal-middleware/core@0.1.1", - "npm:mri": "npm:mri@1.2.0", - "npm:rimraf@^6.0.0": "npm:rimraf@6.0.1", - "npm:tsup@^8.1.0": "npm:tsup@8.1.0_typescript@5.5.3_esbuild@0.21.5", - "npm:tsx@^4.16.2": "npm:tsx@4.16.2", - "npm:typescript@^5.5.3": "npm:typescript@5.5.3", - "npm:vitest@^2.0.2": "npm:vitest@2.0.2_@types+node@20.14.10", - "npm:wait-port": "npm:wait-port@1.1.0", - "npm:zx": "npm:zx@8.1.4" - }, - "npm": { - "@ampproject/remapping@2.3.0": { - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dependencies": { - "@jridgewell/gen-mapping": "@jridgewell/gen-mapping@0.3.5", - "@jridgewell/trace-mapping": "@jridgewell/trace-mapping@0.3.25" - } - }, - "@babel/code-frame@7.24.7": { - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dependencies": { - "@babel/highlight": "@babel/highlight@7.24.7", - "picocolors": "picocolors@1.0.1" - } - }, - "@babel/helper-validator-identifier@7.24.7": { - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dependencies": {} - }, - "@babel/highlight@7.24.7": { - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dependencies": { - "@babel/helper-validator-identifier": "@babel/helper-validator-identifier@7.24.7", - "chalk": "chalk@2.4.2", - "js-tokens": "js-tokens@4.0.0", - "picocolors": "picocolors@1.0.1" - } - }, - "@brillout/picocolors@1.0.13": { - "integrity": "sha512-LblvMKItHbvkaIMI+Awsk1EEjmReE8E8Mgjtj3Pdn/qBvwQ6e+ts5uEqG6iTrK6JWndcxrQgSe664KfoteN6fA==", - "dependencies": {} - }, - "@brillout/release-me@0.3.9": { - "integrity": "sha512-7Q9YD+rnVF9hFmRFNSEePAejYSgZzWABJTA5sFrfD1utREt5K8aokoldvm/WES83SOMIkPO97c2kII9J4snc7Q==", - "dependencies": { - "@brillout/picocolors": "@brillout/picocolors@1.0.13", - "commander": "commander@11.1.0", - "conventional-changelog": "conventional-changelog@5.1.0", - "execa": "execa@5.1.1", - "semver": "semver@7.6.2" - } - }, - "@esbuild/aix-ppc64@0.21.5": { - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "dependencies": {} - }, - "@esbuild/android-arm64@0.21.5": { - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "dependencies": {} - }, - "@esbuild/android-arm@0.21.5": { - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "dependencies": {} - }, - "@esbuild/android-x64@0.21.5": { - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "dependencies": {} - }, - "@esbuild/darwin-arm64@0.21.5": { - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "dependencies": {} - }, - "@esbuild/darwin-x64@0.21.5": { - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "dependencies": {} - }, - "@esbuild/freebsd-arm64@0.21.5": { - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "dependencies": {} - }, - "@esbuild/freebsd-x64@0.21.5": { - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "dependencies": {} - }, - "@esbuild/linux-arm64@0.21.5": { - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "dependencies": {} - }, - "@esbuild/linux-arm@0.21.5": { - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "dependencies": {} - }, - "@esbuild/linux-ia32@0.21.5": { - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "dependencies": {} - }, - "@esbuild/linux-loong64@0.21.5": { - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "dependencies": {} - }, - "@esbuild/linux-mips64el@0.21.5": { - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "dependencies": {} - }, - "@esbuild/linux-ppc64@0.21.5": { - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "dependencies": {} - }, - "@esbuild/linux-riscv64@0.21.5": { - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "dependencies": {} - }, - "@esbuild/linux-s390x@0.21.5": { - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "dependencies": {} - }, - "@esbuild/linux-x64@0.21.5": { - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "dependencies": {} - }, - "@esbuild/netbsd-x64@0.21.5": { - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "dependencies": {} - }, - "@esbuild/openbsd-x64@0.21.5": { - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "dependencies": {} - }, - "@esbuild/sunos-x64@0.21.5": { - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "dependencies": {} - }, - "@esbuild/win32-arm64@0.21.5": { - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "dependencies": {} - }, - "@esbuild/win32-ia32@0.21.5": { - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "dependencies": {} - }, - "@esbuild/win32-x64@0.21.5": { - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "dependencies": {} - }, - "@hattip/adapter-bun@0.0.46": { - "integrity": "sha512-7hlKJRO1DfaLHihmIloi9Gb9Qta1MxFCwOV3/rlqn39hd9L7LvJjLRxprVtfGTZcBFu8nJcG4A8H/i5hxqZsmA==", - "dependencies": { - "@hattip/core": "@hattip/core@0.0.46", - "bun-types": "bun-types@1.1.20" - } - }, - "@hattip/adapter-deno@0.0.46": { - "integrity": "sha512-7JL/H5l8jc/JtEa5vzh2KsL2HKu3gp2jzE8+3OGjzTxMs+aOp14dLbt6N4Uy32fHoGXME36I46WTCrM30gq9Dw==", - "dependencies": { - "@hattip/core": "@hattip/core@0.0.46" - } - }, - "@hattip/adapter-node@0.0.46": { - "integrity": "sha512-DvG2VH4/116T7x1ibzzeGcoGA940w4G0Gy7XjVOgE6ZXwAOunoXS2zfqTlSxFsdTegDnXpGxI50XVq6cdcwBKA==", - "dependencies": { - "@hattip/core": "@hattip/core@0.0.46", - "@hattip/polyfills": "@hattip/polyfills@0.0.46", - "@hattip/walk": "@hattip/walk@0.0.46" - } - }, - "@hattip/compose@0.0.46": { - "integrity": "sha512-CZRQ+6CnJWY5tslKGgRnS8kKaEBvkViIz9V49Obk4ieGXK0HlGMU9Cyflktx5Pcb5tVNwbrX0dTRiIDesJ1maA==", - "dependencies": { - "@hattip/core": "@hattip/core@0.0.46" - } - }, - "@hattip/core@0.0.46": { - "integrity": "sha512-6pk22hPi9qVc6jyROu89T2yV2IcORTJZUq5OdFDfWmu4ynMP4I2avC+hnCJj6o3vlN1Io7zBbdT5OIPxpBIX7A==", - "dependencies": {} - }, - "@hattip/cors@0.0.46": { - "integrity": "sha512-ldg+HNACfZ4Vud7V1+plmXB/csJIIECTB9O8b08KrLBY5y+L3CB049UIeCz8WVmKvVxjj+H4VZfF+JUoHoWQDQ==", - "dependencies": { - "@hattip/compose": "@hattip/compose@0.0.46", - "@hattip/core": "@hattip/core@0.0.46", - "@types/cookie": "@types/cookie@0.6.0", - "cookie": "cookie@0.6.0" - } - }, - "@hattip/headers@0.0.46": { - "integrity": "sha512-kk6hzTjTv0McRgt8bv8IwUOWsphrRQzaUvtXz4w60eQQCO6RHL/wzX6BEh+3eJQFVtmu6yFnh/O6NDnSxSPM7Q==", - "dependencies": { - "@hattip/core": "@hattip/core@0.0.46" - } - }, - "@hattip/polyfills@0.0.46": { - "integrity": "sha512-S+0lm8lDZrw5nT9QZwf9+3LukPL6z0kOgMFqW0xkCnJvzZ7NTmn/xc4SsOFD7bYZ4bH/Z4kdi5xw38hLyfMYOw==", - "dependencies": { - "@hattip/core": "@hattip/core@0.0.46", - "@whatwg-node/fetch": "@whatwg-node/fetch@0.9.18", - "node-fetch-native": "node-fetch-native@1.6.4" - } - }, - "@hattip/router@0.0.46": { - "integrity": "sha512-+cDVNElFOUqCf89aK2qJWck12U+i51JzW1q8KgEJCCCEbni2L6BIWjeJ+Cgxx80Mk27B+In3EdEOdX043qNGbA==", - "dependencies": { - "@hattip/compose": "@hattip/compose@0.0.46", - "@hattip/core": "@hattip/core@0.0.46" - } - }, - "@hattip/walk@0.0.46": { - "integrity": "sha512-LFzLLNgEpf8ulR/ni/5IuQ1c3rTEDj7f9LD6xnMvlIZsYklRDFY6BmfcJTGMICVG3g0tOQjsAL0xkPPPGAv8WQ==", - "dependencies": { - "@hattip/headers": "@hattip/headers@0.0.46", - "cac": "cac@6.7.14", - "mime-types": "mime-types@2.1.35" - } - }, - "@hutson/parse-repository-url@5.0.0": { - "integrity": "sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==", - "dependencies": {} - }, - "@isaacs/cliui@8.0.2": { - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "string-width@5.1.2", - "string-width-cjs": "string-width@4.2.3", - "strip-ansi": "strip-ansi@7.1.0", - "strip-ansi-cjs": "strip-ansi@6.0.1", - "wrap-ansi": "wrap-ansi@8.1.0", - "wrap-ansi-cjs": "wrap-ansi@7.0.0" - } - }, - "@jridgewell/gen-mapping@0.3.5": { - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dependencies": { - "@jridgewell/set-array": "@jridgewell/set-array@1.2.1", - "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.5.0", - "@jridgewell/trace-mapping": "@jridgewell/trace-mapping@0.3.25" - } - }, - "@jridgewell/resolve-uri@3.1.2": { - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dependencies": {} - }, - "@jridgewell/set-array@1.2.1": { - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dependencies": {} - }, - "@jridgewell/sourcemap-codec@1.5.0": { - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dependencies": {} - }, - "@jridgewell/trace-mapping@0.3.25": { - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "@jridgewell/resolve-uri@3.1.2", - "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.5.0" - } - }, - "@kamilkisiela/fast-url-parser@1.1.4": { - "integrity": "sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==", - "dependencies": {} - }, - "@nodelib/fs.scandir@2.1.5": { - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "@nodelib/fs.stat@2.0.5", - "run-parallel": "run-parallel@1.2.0" - } - }, - "@nodelib/fs.stat@2.0.5": { - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dependencies": {} - }, - "@nodelib/fs.walk@1.2.8": { - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "@nodelib/fs.scandir@2.1.5", - "fastq": "fastq@1.17.1" - } - }, - "@pkgjs/parseargs@0.11.0": { - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dependencies": {} - }, - "@rollup/rollup-android-arm-eabi@4.18.1": { - "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==", - "dependencies": {} - }, - "@rollup/rollup-android-arm64@4.18.1": { - "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==", - "dependencies": {} - }, - "@rollup/rollup-darwin-arm64@4.18.1": { - "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==", - "dependencies": {} - }, - "@rollup/rollup-darwin-x64@4.18.1": { - "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==", - "dependencies": {} - }, - "@rollup/rollup-linux-arm-gnueabihf@4.18.1": { - "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==", - "dependencies": {} - }, - "@rollup/rollup-linux-arm-musleabihf@4.18.1": { - "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==", - "dependencies": {} - }, - "@rollup/rollup-linux-arm64-gnu@4.18.1": { - "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==", - "dependencies": {} - }, - "@rollup/rollup-linux-arm64-musl@4.18.1": { - "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==", - "dependencies": {} - }, - "@rollup/rollup-linux-powerpc64le-gnu@4.18.1": { - "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==", - "dependencies": {} - }, - "@rollup/rollup-linux-riscv64-gnu@4.18.1": { - "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==", - "dependencies": {} - }, - "@rollup/rollup-linux-s390x-gnu@4.18.1": { - "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==", - "dependencies": {} - }, - "@rollup/rollup-linux-x64-gnu@4.18.1": { - "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==", - "dependencies": {} - }, - "@rollup/rollup-linux-x64-musl@4.18.1": { - "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==", - "dependencies": {} - }, - "@rollup/rollup-win32-arm64-msvc@4.18.1": { - "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==", - "dependencies": {} - }, - "@rollup/rollup-win32-ia32-msvc@4.18.1": { - "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==", - "dependencies": {} - }, - "@rollup/rollup-win32-x64-msvc@4.18.1": { - "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==", - "dependencies": {} - }, - "@types/cookie@0.6.0": { - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", - "dependencies": {} - }, - "@types/estree@1.0.5": { - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dependencies": {} - }, - "@types/fs-extra@11.0.4": { - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", - "dependencies": { - "@types/jsonfile": "@types/jsonfile@6.1.4", - "@types/node": "@types/node@18.16.19" - } - }, - "@types/jsonfile@6.1.4": { - "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", - "dependencies": { - "@types/node": "@types/node@18.16.19" - } - }, - "@types/node@18.16.19": { - "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==", - "dependencies": {} - }, - "@types/node@20.12.14": { - "integrity": "sha512-scnD59RpYD91xngrQQLGkE+6UrHUPzeKZWhhjBSa3HSkwjbQc38+q3RoIVEwxQGRw3M+j5hpNAM+lgV3cVormg==", - "dependencies": { - "undici-types": "undici-types@5.26.5" - } - }, - "@types/node@20.14.10": { - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", - "dependencies": { - "undici-types": "undici-types@5.26.5" - } - }, - "@types/normalize-package-data@2.4.4": { - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dependencies": {} - }, - "@types/ws@8.5.11": { - "integrity": "sha512-4+q7P5h3SpJxaBft0Dzpbr6lmMaqh0Jr2tbhJZ/luAwvD7ohSCniYkwz/pLxuT2h0EOa6QADgJj1Ko+TzRfZ+w==", - "dependencies": { - "@types/node": "@types/node@18.16.19" - } - }, - "@universal-middleware/core@0.1.1": { - "integrity": "sha512-1paKMQ/B/l5NL9j5vR3T7mvk3VqfP3aIuJj0XU5WvlrqZGjde1qFyjEDfw4RQtSkgloUobgttdhs4qzop9lS2g==", - "dependencies": {} - }, - "@vitest/expect@2.0.2": { - "integrity": "sha512-nKAvxBYqcDugYZ4nJvnm5OR8eDJdgWjk4XM9owQKUjzW70q0icGV2HVnQOyYsp906xJaBDUXw0+9EHw2T8e0mQ==", - "dependencies": { - "@vitest/spy": "@vitest/spy@2.0.2", - "@vitest/utils": "@vitest/utils@2.0.2", - "chai": "chai@5.1.1", - "tinyrainbow": "tinyrainbow@1.2.0" - } - }, - "@vitest/pretty-format@2.0.2": { - "integrity": "sha512-SBCyOXfGVvddRd9r2PwoVR0fonQjh9BMIcBMlSzbcNwFfGr6ZhOhvBzurjvi2F4ryut2HcqiFhNeDVGwru8tLg==", - "dependencies": { - "tinyrainbow": "tinyrainbow@1.2.0" - } - }, - "@vitest/runner@2.0.2": { - "integrity": "sha512-OCh437Vi8Wdbif1e0OvQcbfM3sW4s2lpmOjAE7qfLrpzJX2M7J1IQlNvEcb/fu6kaIB9n9n35wS0G2Q3en5kHg==", - "dependencies": { - "@vitest/utils": "@vitest/utils@2.0.2", - "pathe": "pathe@1.1.2" - } - }, - "@vitest/snapshot@2.0.2": { - "integrity": "sha512-Yc2ewhhZhx+0f9cSUdfzPRcsM6PhIb+S43wxE7OG0kTxqgqzo8tHkXFuFlndXeDMp09G3sY/X5OAo/RfYydf1g==", - "dependencies": { - "@vitest/pretty-format": "@vitest/pretty-format@2.0.2", - "magic-string": "magic-string@0.30.10", - "pathe": "pathe@1.1.2" - } - }, - "@vitest/spy@2.0.2": { - "integrity": "sha512-MgwJ4AZtCgqyp2d7WcQVE8aNG5vQ9zu9qMPYQHjsld/QVsrvg78beNrXdO4HYkP0lDahCO3P4F27aagIag+SGQ==", - "dependencies": { - "tinyspy": "tinyspy@3.0.0" - } - }, - "@vitest/utils@2.0.2": { - "integrity": "sha512-pxCY1v7kmOCWYWjzc0zfjGTA3Wmn8PKnlPvSrsA643P1NHl1fOyXj2Q9SaNlrlFE+ivCsxM80Ov3AR82RmHCWQ==", - "dependencies": { - "@vitest/pretty-format": "@vitest/pretty-format@2.0.2", - "estree-walker": "estree-walker@3.0.3", - "loupe": "loupe@3.1.1", - "tinyrainbow": "tinyrainbow@1.2.0" - } - }, - "@whatwg-node/events@0.1.1": { - "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", - "dependencies": {} - }, - "@whatwg-node/fetch@0.9.18": { - "integrity": "sha512-hqoz6StCW+AjV/3N+vg0s1ah82ptdVUb9nH2ttj3UbySOXUvytWw2yqy8c1cKzyRk6mDD00G47qS3fZI9/gMjg==", - "dependencies": { - "@whatwg-node/node-fetch": "@whatwg-node/node-fetch@0.5.11", - "urlpattern-polyfill": "urlpattern-polyfill@10.0.0" - } - }, - "@whatwg-node/node-fetch@0.5.11": { - "integrity": "sha512-LS8tSomZa3YHnntpWt3PP43iFEEl6YeIsvDakczHBKlay5LdkXFr8w7v8H6akpG5nRrzydyB0k1iE2eoL6aKIQ==", - "dependencies": { - "@kamilkisiela/fast-url-parser": "@kamilkisiela/fast-url-parser@1.1.4", - "@whatwg-node/events": "@whatwg-node/events@0.1.1", - "busboy": "busboy@1.6.0", - "fast-querystring": "fast-querystring@1.1.2", - "tslib": "tslib@2.6.3" - } - }, - "JSONStream@1.3.5": { - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dependencies": { - "jsonparse": "jsonparse@1.3.1", - "through": "through@2.3.8" - } - }, - "add-stream@1.0.0": { - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dependencies": {} - }, - "ansi-regex@5.0.1": { - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dependencies": {} - }, - "ansi-regex@6.0.1": { - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dependencies": {} - }, - "ansi-styles@3.2.1": { - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "color-convert@1.9.3" - } - }, - "ansi-styles@4.3.0": { - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "color-convert@2.0.1" - } - }, - "ansi-styles@6.2.1": { - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dependencies": {} - }, - "any-promise@1.3.0": { - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dependencies": {} - }, - "anymatch@3.1.3": { - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "normalize-path@3.0.0", - "picomatch": "picomatch@2.3.1" - } - }, - "array-ify@1.0.0": { - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dependencies": {} - }, - "array-union@2.1.0": { - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dependencies": {} - }, - "assertion-error@2.0.1": { - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dependencies": {} - }, - "balanced-match@1.0.2": { - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dependencies": {} - }, - "binary-extensions@2.3.0": { - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dependencies": {} - }, - "brace-expansion@2.0.1": { - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "balanced-match@1.0.2" - } - }, - "braces@3.0.3": { - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "fill-range@7.1.1" - } - }, - "bun-types@1.1.20": { - "integrity": "sha512-2u84HciDR3E7Uc0t0AEeXHmQAWe9uzRKTz120D3silIJOQlbGIMJMJiGaM8Yx7nEvMyfV0LfSdkEGnb77AN5AA==", - "dependencies": { - "@types/node": "@types/node@20.12.14", - "@types/ws": "@types/ws@8.5.11" - } - }, - "bundle-require@4.2.1_esbuild@0.21.5": { - "integrity": "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==", - "dependencies": { - "esbuild": "esbuild@0.21.5", - "load-tsconfig": "load-tsconfig@0.2.5" - } - }, - "busboy@1.6.0": { - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "streamsearch@1.1.0" - } - }, - "cac@6.7.14": { - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dependencies": {} - }, - "chai@5.1.1": { - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", - "dependencies": { - "assertion-error": "assertion-error@2.0.1", - "check-error": "check-error@2.1.1", - "deep-eql": "deep-eql@5.0.2", - "loupe": "loupe@3.1.1", - "pathval": "pathval@2.0.0" - } - }, - "chalk@2.4.2": { - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "ansi-styles@3.2.1", - "escape-string-regexp": "escape-string-regexp@1.0.5", - "supports-color": "supports-color@5.5.0" - } - }, - "chalk@4.1.2": { - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "ansi-styles@4.3.0", - "supports-color": "supports-color@7.2.0" - } - }, - "check-error@2.1.1": { - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dependencies": {} - }, - "chokidar@3.6.0": { - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "anymatch@3.1.3", - "braces": "braces@3.0.3", - "fsevents": "fsevents@2.3.3", - "glob-parent": "glob-parent@5.1.2", - "is-binary-path": "is-binary-path@2.1.0", - "is-glob": "is-glob@4.0.3", - "normalize-path": "normalize-path@3.0.0", - "readdirp": "readdirp@3.6.0" - } - }, - "color-convert@1.9.3": { - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "color-name@1.1.3" - } - }, - "color-convert@2.0.1": { - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "color-name@1.1.4" - } - }, - "color-name@1.1.3": { - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dependencies": {} - }, - "color-name@1.1.4": { - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dependencies": {} - }, - "commander@11.1.0": { - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dependencies": {} - }, - "commander@4.1.1": { - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dependencies": {} - }, - "commander@9.5.0": { - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dependencies": {} - }, - "compare-func@2.0.0": { - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dependencies": { - "array-ify": "array-ify@1.0.0", - "dot-prop": "dot-prop@5.3.0" - } - }, - "conventional-changelog-angular@7.0.0": { - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", - "dependencies": { - "compare-func": "compare-func@2.0.0" - } - }, - "conventional-changelog-atom@4.0.0": { - "integrity": "sha512-q2YtiN7rnT1TGwPTwjjBSIPIzDJCRE+XAUahWxnh+buKK99Kks4WLMHoexw38GXx9OUxAsrp44f9qXe5VEMYhw==", - "dependencies": {} - }, - "conventional-changelog-codemirror@4.0.0": { - "integrity": "sha512-hQSojc/5imn1GJK3A75m9hEZZhc3urojA5gMpnar4JHmgLnuM3CUIARPpEk86glEKr3c54Po3WV/vCaO/U8g3Q==", - "dependencies": {} - }, - "conventional-changelog-conventionalcommits@7.0.2": { - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", - "dependencies": { - "compare-func": "compare-func@2.0.0" - } - }, - "conventional-changelog-core@7.0.0": { - "integrity": "sha512-UYgaB1F/COt7VFjlYKVE/9tTzfU3VUq47r6iWf6lM5T7TlOxr0thI63ojQueRLIpVbrtHK4Ffw+yQGduw2Bhdg==", - "dependencies": { - "@hutson/parse-repository-url": "@hutson/parse-repository-url@5.0.0", - "add-stream": "add-stream@1.0.0", - "conventional-changelog-writer": "conventional-changelog-writer@7.0.1", - "conventional-commits-parser": "conventional-commits-parser@5.0.0", - "git-raw-commits": "git-raw-commits@4.0.0", - "git-semver-tags": "git-semver-tags@7.0.1", - "hosted-git-info": "hosted-git-info@7.0.2", - "normalize-package-data": "normalize-package-data@6.0.2", - "read-pkg": "read-pkg@8.1.0", - "read-pkg-up": "read-pkg-up@10.1.0" - } - }, - "conventional-changelog-ember@4.0.0": { - "integrity": "sha512-D0IMhwcJUg1Y8FSry6XAplEJcljkHVlvAZddhhsdbL1rbsqRsMfGx/PIkPYq0ru5aDgn+OxhQ5N5yR7P9mfsvA==", - "dependencies": {} - }, - "conventional-changelog-eslint@5.0.0": { - "integrity": "sha512-6JtLWqAQIeJLn/OzUlYmzd9fKeNSWmQVim9kql+v4GrZwLx807kAJl3IJVc3jTYfVKWLxhC3BGUxYiuVEcVjgA==", - "dependencies": {} - }, - "conventional-changelog-express@4.0.0": { - "integrity": "sha512-yWyy5c7raP9v7aTvPAWzqrztACNO9+FEI1FSYh7UP7YT1AkWgv5UspUeB5v3Ibv4/o60zj2o9GF2tqKQ99lIsw==", - "dependencies": {} - }, - "conventional-changelog-jquery@5.0.0": { - "integrity": "sha512-slLjlXLRNa/icMI3+uGLQbtrgEny3RgITeCxevJB+p05ExiTgHACP5p3XiMKzjBn80n+Rzr83XMYfRInEtCPPw==", - "dependencies": {} - }, - "conventional-changelog-jshint@4.0.0": { - "integrity": "sha512-LyXq1bbl0yG0Ai1SbLxIk8ZxUOe3AjnlwE6sVRQmMgetBk+4gY9EO3d00zlEt8Y8gwsITytDnPORl8al7InTjg==", - "dependencies": { - "compare-func": "compare-func@2.0.0" - } - }, - "conventional-changelog-preset-loader@4.1.0": { - "integrity": "sha512-HozQjJicZTuRhCRTq4rZbefaiCzRM2pr6u2NL3XhrmQm4RMnDXfESU6JKu/pnKwx5xtdkYfNCsbhN5exhiKGJA==", - "dependencies": {} - }, - "conventional-changelog-writer@7.0.1": { - "integrity": "sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==", - "dependencies": { - "conventional-commits-filter": "conventional-commits-filter@4.0.0", - "handlebars": "handlebars@4.7.8", - "json-stringify-safe": "json-stringify-safe@5.0.1", - "meow": "meow@12.1.1", - "semver": "semver@7.6.2", - "split2": "split2@4.2.0" - } - }, - "conventional-changelog@5.1.0": { - "integrity": "sha512-aWyE/P39wGYRPllcCEZDxTVEmhyLzTc9XA6z6rVfkuCD2UBnhV/sgSOKbQrEG5z9mEZJjnopjgQooTKxEg8mAg==", - "dependencies": { - "conventional-changelog-angular": "conventional-changelog-angular@7.0.0", - "conventional-changelog-atom": "conventional-changelog-atom@4.0.0", - "conventional-changelog-codemirror": "conventional-changelog-codemirror@4.0.0", - "conventional-changelog-conventionalcommits": "conventional-changelog-conventionalcommits@7.0.2", - "conventional-changelog-core": "conventional-changelog-core@7.0.0", - "conventional-changelog-ember": "conventional-changelog-ember@4.0.0", - "conventional-changelog-eslint": "conventional-changelog-eslint@5.0.0", - "conventional-changelog-express": "conventional-changelog-express@4.0.0", - "conventional-changelog-jquery": "conventional-changelog-jquery@5.0.0", - "conventional-changelog-jshint": "conventional-changelog-jshint@4.0.0", - "conventional-changelog-preset-loader": "conventional-changelog-preset-loader@4.1.0" - } - }, - "conventional-commits-filter@4.0.0": { - "integrity": "sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==", - "dependencies": {} - }, - "conventional-commits-parser@5.0.0": { - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", - "dependencies": { - "JSONStream": "JSONStream@1.3.5", - "is-text-path": "is-text-path@2.0.0", - "meow": "meow@12.1.1", - "split2": "split2@4.2.0" - } - }, - "cookie@0.6.0": { - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "dependencies": {} - }, - "cross-spawn@7.0.3": { - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "path-key@3.1.1", - "shebang-command": "shebang-command@2.0.0", - "which": "which@2.0.2" - } - }, - "dargs@8.1.0": { - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", - "dependencies": {} - }, - "debug@4.3.5": { - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dependencies": { - "ms": "ms@2.1.2" - } - }, - "deep-eql@5.0.2": { - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dependencies": {} - }, - "dir-glob@3.0.1": { - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "path-type@4.0.0" - } - }, - "dot-prop@5.3.0": { - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "is-obj@2.0.0" - } - }, - "eastasianwidth@0.2.0": { - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dependencies": {} - }, - "emoji-regex@8.0.0": { - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dependencies": {} - }, - "emoji-regex@9.2.2": { - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dependencies": {} - }, - "error-ex@1.3.2": { - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "is-arrayish@0.2.1" - } - }, - "esbuild@0.21.5": { - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dependencies": { - "@esbuild/aix-ppc64": "@esbuild/aix-ppc64@0.21.5", - "@esbuild/android-arm": "@esbuild/android-arm@0.21.5", - "@esbuild/android-arm64": "@esbuild/android-arm64@0.21.5", - "@esbuild/android-x64": "@esbuild/android-x64@0.21.5", - "@esbuild/darwin-arm64": "@esbuild/darwin-arm64@0.21.5", - "@esbuild/darwin-x64": "@esbuild/darwin-x64@0.21.5", - "@esbuild/freebsd-arm64": "@esbuild/freebsd-arm64@0.21.5", - "@esbuild/freebsd-x64": "@esbuild/freebsd-x64@0.21.5", - "@esbuild/linux-arm": "@esbuild/linux-arm@0.21.5", - "@esbuild/linux-arm64": "@esbuild/linux-arm64@0.21.5", - "@esbuild/linux-ia32": "@esbuild/linux-ia32@0.21.5", - "@esbuild/linux-loong64": "@esbuild/linux-loong64@0.21.5", - "@esbuild/linux-mips64el": "@esbuild/linux-mips64el@0.21.5", - "@esbuild/linux-ppc64": "@esbuild/linux-ppc64@0.21.5", - "@esbuild/linux-riscv64": "@esbuild/linux-riscv64@0.21.5", - "@esbuild/linux-s390x": "@esbuild/linux-s390x@0.21.5", - "@esbuild/linux-x64": "@esbuild/linux-x64@0.21.5", - "@esbuild/netbsd-x64": "@esbuild/netbsd-x64@0.21.5", - "@esbuild/openbsd-x64": "@esbuild/openbsd-x64@0.21.5", - "@esbuild/sunos-x64": "@esbuild/sunos-x64@0.21.5", - "@esbuild/win32-arm64": "@esbuild/win32-arm64@0.21.5", - "@esbuild/win32-ia32": "@esbuild/win32-ia32@0.21.5", - "@esbuild/win32-x64": "@esbuild/win32-x64@0.21.5" - } - }, - "escape-string-regexp@1.0.5": { - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dependencies": {} - }, - "estree-walker@3.0.3": { - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "@types/estree@1.0.5" - } - }, - "execa@5.1.1": { - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "cross-spawn@7.0.3", - "get-stream": "get-stream@6.0.1", - "human-signals": "human-signals@2.1.0", - "is-stream": "is-stream@2.0.1", - "merge-stream": "merge-stream@2.0.0", - "npm-run-path": "npm-run-path@4.0.1", - "onetime": "onetime@5.1.2", - "signal-exit": "signal-exit@3.0.7", - "strip-final-newline": "strip-final-newline@2.0.0" - } - }, - "execa@8.0.1": { - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dependencies": { - "cross-spawn": "cross-spawn@7.0.3", - "get-stream": "get-stream@8.0.1", - "human-signals": "human-signals@5.0.0", - "is-stream": "is-stream@3.0.0", - "merge-stream": "merge-stream@2.0.0", - "npm-run-path": "npm-run-path@5.3.0", - "onetime": "onetime@6.0.0", - "signal-exit": "signal-exit@4.1.0", - "strip-final-newline": "strip-final-newline@3.0.0" - } - }, - "fast-decode-uri-component@1.0.1": { - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", - "dependencies": {} - }, - "fast-glob@3.3.2": { - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "@nodelib/fs.stat@2.0.5", - "@nodelib/fs.walk": "@nodelib/fs.walk@1.2.8", - "glob-parent": "glob-parent@5.1.2", - "merge2": "merge2@1.4.1", - "micromatch": "micromatch@4.0.7" - } - }, - "fast-querystring@1.1.2": { - "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", - "dependencies": { - "fast-decode-uri-component": "fast-decode-uri-component@1.0.1" - } - }, - "fastq@1.17.1": { - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "reusify@1.0.4" - } - }, - "fill-range@7.1.1": { - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "to-regex-range@5.0.1" - } - }, - "find-up@6.3.0": { - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dependencies": { - "locate-path": "locate-path@7.2.0", - "path-exists": "path-exists@5.0.0" - } - }, - "foreground-child@3.2.1": { - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dependencies": { - "cross-spawn": "cross-spawn@7.0.3", - "signal-exit": "signal-exit@4.1.0" - } - }, - "fsevents@2.3.3": { - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dependencies": {} - }, - "get-func-name@2.0.2": { - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dependencies": {} - }, - "get-stream@6.0.1": { - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dependencies": {} - }, - "get-stream@8.0.1": { - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dependencies": {} - }, - "get-tsconfig@4.7.5": { - "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", - "dependencies": { - "resolve-pkg-maps": "resolve-pkg-maps@1.0.0" - } - }, - "git-raw-commits@4.0.0": { - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", - "dependencies": { - "dargs": "dargs@8.1.0", - "meow": "meow@12.1.1", - "split2": "split2@4.2.0" - } - }, - "git-semver-tags@7.0.1": { - "integrity": "sha512-NY0ZHjJzyyNXHTDZmj+GG7PyuAKtMsyWSwh07CR2hOZFa+/yoTsXci/nF2obzL8UDhakFNkD9gNdt/Ed+cxh2Q==", - "dependencies": { - "meow": "meow@12.1.1", - "semver": "semver@7.6.2" - } - }, - "glob-parent@5.1.2": { - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "is-glob@4.0.3" - } - }, - "glob@10.4.5": { - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dependencies": { - "foreground-child": "foreground-child@3.2.1", - "jackspeak": "jackspeak@3.4.3", - "minimatch": "minimatch@9.0.5", - "minipass": "minipass@7.1.2", - "package-json-from-dist": "package-json-from-dist@1.0.0", - "path-scurry": "path-scurry@1.11.1" - } - }, - "glob@11.0.0": { - "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", - "dependencies": { - "foreground-child": "foreground-child@3.2.1", - "jackspeak": "jackspeak@4.0.1", - "minimatch": "minimatch@10.0.1", - "minipass": "minipass@7.1.2", - "package-json-from-dist": "package-json-from-dist@1.0.0", - "path-scurry": "path-scurry@2.0.0" - } - }, - "globby@11.1.0": { - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "array-union@2.1.0", - "dir-glob": "dir-glob@3.0.1", - "fast-glob": "fast-glob@3.3.2", - "ignore": "ignore@5.3.1", - "merge2": "merge2@1.4.1", - "slash": "slash@3.0.0" - } - }, - "handlebars@4.7.8": { - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dependencies": { - "minimist": "minimist@1.2.8", - "neo-async": "neo-async@2.6.2", - "source-map": "source-map@0.6.1", - "uglify-js": "uglify-js@3.18.0", - "wordwrap": "wordwrap@1.0.0" - } - }, - "has-flag@3.0.0": { - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dependencies": {} - }, - "has-flag@4.0.0": { - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dependencies": {} - }, - "hosted-git-info@7.0.2": { - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dependencies": { - "lru-cache": "lru-cache@10.4.3" - } - }, - "human-signals@2.1.0": { - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dependencies": {} - }, - "human-signals@5.0.0": { - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dependencies": {} - }, - "ignore@5.3.1": { - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dependencies": {} - }, - "is-arrayish@0.2.1": { - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dependencies": {} - }, - "is-binary-path@2.1.0": { - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "binary-extensions@2.3.0" - } - }, - "is-extglob@2.1.1": { - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dependencies": {} - }, - "is-fullwidth-code-point@3.0.0": { - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dependencies": {} - }, - "is-glob@4.0.3": { - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "is-extglob@2.1.1" - } - }, - "is-number@7.0.0": { - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dependencies": {} - }, - "is-obj@2.0.0": { - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dependencies": {} - }, - "is-stream@2.0.1": { - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dependencies": {} - }, - "is-stream@3.0.0": { - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dependencies": {} - }, - "is-text-path@2.0.0": { - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", - "dependencies": { - "text-extensions": "text-extensions@2.4.0" - } - }, - "isexe@2.0.0": { - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dependencies": {} - }, - "jackspeak@3.4.3": { - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dependencies": { - "@isaacs/cliui": "@isaacs/cliui@8.0.2", - "@pkgjs/parseargs": "@pkgjs/parseargs@0.11.0" - } - }, - "jackspeak@4.0.1": { - "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", - "dependencies": { - "@isaacs/cliui": "@isaacs/cliui@8.0.2", - "@pkgjs/parseargs": "@pkgjs/parseargs@0.11.0" - } - }, - "joycon@3.1.1": { - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "dependencies": {} - }, - "js-tokens@4.0.0": { - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dependencies": {} - }, - "json-parse-even-better-errors@3.0.2": { - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dependencies": {} - }, - "json-stringify-safe@5.0.1": { - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dependencies": {} - }, - "jsonparse@1.3.1": { - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dependencies": {} - }, - "lilconfig@3.1.2": { - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "dependencies": {} - }, - "lines-and-columns@1.2.4": { - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dependencies": {} - }, - "lines-and-columns@2.0.4": { - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", - "dependencies": {} - }, - "load-tsconfig@0.2.5": { - "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", - "dependencies": {} - }, - "locate-path@7.2.0": { - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dependencies": { - "p-locate": "p-locate@6.0.0" - } - }, - "lodash.sortby@4.7.0": { - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dependencies": {} - }, - "loupe@3.1.1": { - "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", - "dependencies": { - "get-func-name": "get-func-name@2.0.2" - } - }, - "lru-cache@10.4.3": { - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dependencies": {} - }, - "lru-cache@11.0.0": { - "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", - "dependencies": {} - }, - "magic-string@0.30.10": { - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", - "dependencies": { - "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.5.0" - } - }, - "meow@12.1.1": { - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dependencies": {} - }, - "merge-stream@2.0.0": { - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dependencies": {} - }, - "merge2@1.4.1": { - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dependencies": {} - }, - "micromatch@4.0.7": { - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dependencies": { - "braces": "braces@3.0.3", - "picomatch": "picomatch@2.3.1" - } - }, - "mime-db@1.52.0": { - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dependencies": {} - }, - "mime-types@2.1.35": { - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "mime-db@1.52.0" - } - }, - "mimic-fn@2.1.0": { - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dependencies": {} - }, - "mimic-fn@4.0.0": { - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dependencies": {} - }, - "minimatch@10.0.1": { - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "dependencies": { - "brace-expansion": "brace-expansion@2.0.1" - } - }, - "minimatch@9.0.5": { - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "brace-expansion@2.0.1" - } - }, - "minimist@1.2.8": { - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dependencies": {} - }, - "minipass@7.1.2": { - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dependencies": {} - }, - "mri@1.2.0": { - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dependencies": {} - }, - "ms@2.1.2": { - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dependencies": {} - }, - "mz@2.7.0": { - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "any-promise@1.3.0", - "object-assign": "object-assign@4.1.1", - "thenify-all": "thenify-all@1.6.0" - } - }, - "nanoid@3.3.7": { - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dependencies": {} - }, - "neo-async@2.6.2": { - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dependencies": {} - }, - "node-fetch-native@1.6.4": { - "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", - "dependencies": {} - }, - "normalize-package-data@6.0.2": { - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dependencies": { - "hosted-git-info": "hosted-git-info@7.0.2", - "semver": "semver@7.6.2", - "validate-npm-package-license": "validate-npm-package-license@3.0.4" - } - }, - "normalize-path@3.0.0": { - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dependencies": {} - }, - "npm-run-path@4.0.1": { - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "path-key@3.1.1" - } - }, - "npm-run-path@5.3.0": { - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dependencies": { - "path-key": "path-key@4.0.0" - } - }, - "object-assign@4.1.1": { - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dependencies": {} - }, - "onetime@5.1.2": { - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "mimic-fn@2.1.0" - } - }, - "onetime@6.0.0": { - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "mimic-fn@4.0.0" - } - }, - "p-limit@4.0.0": { - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "yocto-queue@1.1.1" - } - }, - "p-locate@6.0.0": { - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dependencies": { - "p-limit": "p-limit@4.0.0" - } - }, - "package-json-from-dist@1.0.0": { - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dependencies": {} - }, - "parse-json@7.1.1": { - "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==", - "dependencies": { - "@babel/code-frame": "@babel/code-frame@7.24.7", - "error-ex": "error-ex@1.3.2", - "json-parse-even-better-errors": "json-parse-even-better-errors@3.0.2", - "lines-and-columns": "lines-and-columns@2.0.4", - "type-fest": "type-fest@3.13.1" - } - }, - "path-exists@5.0.0": { - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dependencies": {} - }, - "path-key@3.1.1": { - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dependencies": {} - }, - "path-key@4.0.0": { - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dependencies": {} - }, - "path-scurry@1.11.1": { - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dependencies": { - "lru-cache": "lru-cache@10.4.3", - "minipass": "minipass@7.1.2" - } - }, - "path-scurry@2.0.0": { - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dependencies": { - "lru-cache": "lru-cache@11.0.0", - "minipass": "minipass@7.1.2" - } - }, - "path-type@4.0.0": { - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dependencies": {} - }, - "pathe@1.1.2": { - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dependencies": {} - }, - "pathval@2.0.0": { - "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", - "dependencies": {} - }, - "picocolors@1.0.1": { - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dependencies": {} - }, - "picomatch@2.3.1": { - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dependencies": {} - }, - "pirates@4.0.6": { - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dependencies": {} - }, - "postcss-load-config@4.0.2": { - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dependencies": { - "lilconfig": "lilconfig@3.1.2", - "yaml": "yaml@2.4.5" - } - }, - "postcss@8.4.39": { - "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", - "dependencies": { - "nanoid": "nanoid@3.3.7", - "picocolors": "picocolors@1.0.1", - "source-map-js": "source-map-js@1.2.0" - } - }, - "punycode@2.3.1": { - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dependencies": {} - }, - "queue-microtask@1.2.3": { - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dependencies": {} - }, - "read-pkg-up@10.1.0": { - "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", - "dependencies": { - "find-up": "find-up@6.3.0", - "read-pkg": "read-pkg@8.1.0", - "type-fest": "type-fest@4.21.0" - } - }, - "read-pkg@8.1.0": { - "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", - "dependencies": { - "@types/normalize-package-data": "@types/normalize-package-data@2.4.4", - "normalize-package-data": "normalize-package-data@6.0.2", - "parse-json": "parse-json@7.1.1", - "type-fest": "type-fest@4.21.0" - } - }, - "readdirp@3.6.0": { - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "picomatch@2.3.1" - } - }, - "resolve-from@5.0.0": { - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dependencies": {} - }, - "resolve-pkg-maps@1.0.0": { - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dependencies": {} - }, - "reusify@1.0.4": { - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dependencies": {} - }, - "rimraf@6.0.1": { - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", - "dependencies": { - "glob": "glob@11.0.0", - "package-json-from-dist": "package-json-from-dist@1.0.0" - } - }, - "rollup@4.18.1": { - "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==", - "dependencies": { - "@rollup/rollup-android-arm-eabi": "@rollup/rollup-android-arm-eabi@4.18.1", - "@rollup/rollup-android-arm64": "@rollup/rollup-android-arm64@4.18.1", - "@rollup/rollup-darwin-arm64": "@rollup/rollup-darwin-arm64@4.18.1", - "@rollup/rollup-darwin-x64": "@rollup/rollup-darwin-x64@4.18.1", - "@rollup/rollup-linux-arm-gnueabihf": "@rollup/rollup-linux-arm-gnueabihf@4.18.1", - "@rollup/rollup-linux-arm-musleabihf": "@rollup/rollup-linux-arm-musleabihf@4.18.1", - "@rollup/rollup-linux-arm64-gnu": "@rollup/rollup-linux-arm64-gnu@4.18.1", - "@rollup/rollup-linux-arm64-musl": "@rollup/rollup-linux-arm64-musl@4.18.1", - "@rollup/rollup-linux-powerpc64le-gnu": "@rollup/rollup-linux-powerpc64le-gnu@4.18.1", - "@rollup/rollup-linux-riscv64-gnu": "@rollup/rollup-linux-riscv64-gnu@4.18.1", - "@rollup/rollup-linux-s390x-gnu": "@rollup/rollup-linux-s390x-gnu@4.18.1", - "@rollup/rollup-linux-x64-gnu": "@rollup/rollup-linux-x64-gnu@4.18.1", - "@rollup/rollup-linux-x64-musl": "@rollup/rollup-linux-x64-musl@4.18.1", - "@rollup/rollup-win32-arm64-msvc": "@rollup/rollup-win32-arm64-msvc@4.18.1", - "@rollup/rollup-win32-ia32-msvc": "@rollup/rollup-win32-ia32-msvc@4.18.1", - "@rollup/rollup-win32-x64-msvc": "@rollup/rollup-win32-x64-msvc@4.18.1", - "@types/estree": "@types/estree@1.0.5", - "fsevents": "fsevents@2.3.3" - } - }, - "run-parallel@1.2.0": { - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dependencies": { - "queue-microtask": "queue-microtask@1.2.3" - } - }, - "semver@7.6.2": { - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dependencies": {} - }, - "shebang-command@2.0.0": { - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "shebang-regex@3.0.0" - } - }, - "shebang-regex@3.0.0": { - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dependencies": {} - }, - "siginfo@2.0.0": { - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dependencies": {} - }, - "signal-exit@3.0.7": { - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dependencies": {} - }, - "signal-exit@4.1.0": { - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dependencies": {} - }, - "slash@3.0.0": { - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dependencies": {} - }, - "source-map-js@1.2.0": { - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dependencies": {} - }, - "source-map@0.6.1": { - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dependencies": {} - }, - "source-map@0.8.0-beta.0": { - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dependencies": { - "whatwg-url": "whatwg-url@7.1.0" - } - }, - "spdx-correct@3.2.0": { - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dependencies": { - "spdx-expression-parse": "spdx-expression-parse@3.0.1", - "spdx-license-ids": "spdx-license-ids@3.0.18" - } - }, - "spdx-exceptions@2.5.0": { - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dependencies": {} - }, - "spdx-expression-parse@3.0.1": { - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "spdx-exceptions@2.5.0", - "spdx-license-ids": "spdx-license-ids@3.0.18" - } - }, - "spdx-license-ids@3.0.18": { - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", - "dependencies": {} - }, - "split2@4.2.0": { - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dependencies": {} - }, - "stackback@0.0.2": { - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dependencies": {} - }, - "std-env@3.7.0": { - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", - "dependencies": {} - }, - "streamsearch@1.1.0": { - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dependencies": {} - }, - "string-width@4.2.3": { - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "emoji-regex@8.0.0", - "is-fullwidth-code-point": "is-fullwidth-code-point@3.0.0", - "strip-ansi": "strip-ansi@6.0.1" - } - }, - "string-width@5.1.2": { - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "eastasianwidth@0.2.0", - "emoji-regex": "emoji-regex@9.2.2", - "strip-ansi": "strip-ansi@7.1.0" - } - }, - "strip-ansi@6.0.1": { - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "ansi-regex@5.0.1" - } - }, - "strip-ansi@7.1.0": { - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "ansi-regex@6.0.1" - } - }, - "strip-final-newline@2.0.0": { - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dependencies": {} - }, - "strip-final-newline@3.0.0": { - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dependencies": {} - }, - "sucrase@3.35.0": { - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dependencies": { - "@jridgewell/gen-mapping": "@jridgewell/gen-mapping@0.3.5", - "commander": "commander@4.1.1", - "glob": "glob@10.4.5", - "lines-and-columns": "lines-and-columns@1.2.4", - "mz": "mz@2.7.0", - "pirates": "pirates@4.0.6", - "ts-interface-checker": "ts-interface-checker@0.1.13" - } - }, - "supports-color@5.5.0": { - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "has-flag@3.0.0" - } - }, - "supports-color@7.2.0": { - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "has-flag@4.0.0" - } - }, - "text-extensions@2.4.0": { - "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", - "dependencies": {} - }, - "thenify-all@1.6.0": { - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": "thenify@3.3.1" - } - }, - "thenify@3.3.1": { - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "any-promise@1.3.0" - } - }, - "through@2.3.8": { - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dependencies": {} - }, - "tinybench@2.8.0": { - "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", - "dependencies": {} - }, - "tinypool@1.0.0": { - "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", - "dependencies": {} - }, - "tinyrainbow@1.2.0": { - "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", - "dependencies": {} - }, - "tinyspy@3.0.0": { - "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", - "dependencies": {} - }, - "to-regex-range@5.0.1": { - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "is-number@7.0.0" - } - }, - "tr46@1.0.1": { - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dependencies": { - "punycode": "punycode@2.3.1" - } - }, - "tree-kill@1.2.2": { - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dependencies": {} - }, - "ts-interface-checker@0.1.13": { - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dependencies": {} - }, - "tslib@2.6.3": { - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dependencies": {} - }, - "tsup@8.1.0_typescript@5.5.3_esbuild@0.21.5": { - "integrity": "sha512-UFdfCAXukax+U6KzeTNO2kAARHcWxmKsnvSPXUcfA1D+kU05XDccCrkffCQpFaWDsZfV0jMyTsxU39VfCp6EOg==", - "dependencies": { - "bundle-require": "bundle-require@4.2.1_esbuild@0.21.5", - "cac": "cac@6.7.14", - "chokidar": "chokidar@3.6.0", - "debug": "debug@4.3.5", - "esbuild": "esbuild@0.21.5", - "execa": "execa@5.1.1", - "globby": "globby@11.1.0", - "joycon": "joycon@3.1.1", - "postcss-load-config": "postcss-load-config@4.0.2", - "resolve-from": "resolve-from@5.0.0", - "rollup": "rollup@4.18.1", - "source-map": "source-map@0.8.0-beta.0", - "sucrase": "sucrase@3.35.0", - "tree-kill": "tree-kill@1.2.2", - "typescript": "typescript@5.5.3" - } - }, - "tsx@4.16.2": { - "integrity": "sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==", - "dependencies": { - "esbuild": "esbuild@0.21.5", - "fsevents": "fsevents@2.3.3", - "get-tsconfig": "get-tsconfig@4.7.5" - } - }, - "type-fest@3.13.1": { - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dependencies": {} - }, - "type-fest@4.21.0": { - "integrity": "sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==", - "dependencies": {} - }, - "typescript@5.5.3": { - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", - "dependencies": {} - }, - "uglify-js@3.18.0": { - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", - "dependencies": {} - }, - "undici-types@5.26.5": { - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dependencies": {} - }, - "urlpattern-polyfill@10.0.0": { - "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", - "dependencies": {} - }, - "validate-npm-package-license@3.0.4": { - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "spdx-correct@3.2.0", - "spdx-expression-parse": "spdx-expression-parse@3.0.1" - } - }, - "vite-node@2.0.2_@types+node@20.14.10": { - "integrity": "sha512-w4vkSz1Wo+NIQg8pjlEn0jQbcM/0D+xVaYjhw3cvarTanLLBh54oNiRbsT8PNK5GfuST0IlVXjsNRoNlqvY/fw==", - "dependencies": { - "cac": "cac@6.7.14", - "debug": "debug@4.3.5", - "pathe": "pathe@1.1.2", - "tinyrainbow": "tinyrainbow@1.2.0", - "vite": "vite@5.3.3_@types+node@20.14.10" - } - }, - "vite@5.3.3_@types+node@20.14.10": { - "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", - "dependencies": { - "@types/node": "@types/node@20.14.10", - "esbuild": "esbuild@0.21.5", - "fsevents": "fsevents@2.3.3", - "postcss": "postcss@8.4.39", - "rollup": "rollup@4.18.1" - } - }, - "vitest@2.0.2_@types+node@20.14.10": { - "integrity": "sha512-WlpZ9neRIjNBIOQwBYfBSr0+of5ZCbxT2TVGKW4Lv0c8+srCFIiRdsP7U009t8mMn821HQ4XKgkx5dVWpyoyLw==", - "dependencies": { - "@ampproject/remapping": "@ampproject/remapping@2.3.0", - "@types/node": "@types/node@20.14.10", - "@vitest/expect": "@vitest/expect@2.0.2", - "@vitest/pretty-format": "@vitest/pretty-format@2.0.2", - "@vitest/runner": "@vitest/runner@2.0.2", - "@vitest/snapshot": "@vitest/snapshot@2.0.2", - "@vitest/spy": "@vitest/spy@2.0.2", - "@vitest/utils": "@vitest/utils@2.0.2", - "chai": "chai@5.1.1", - "debug": "debug@4.3.5", - "execa": "execa@8.0.1", - "magic-string": "magic-string@0.30.10", - "pathe": "pathe@1.1.2", - "std-env": "std-env@3.7.0", - "tinybench": "tinybench@2.8.0", - "tinypool": "tinypool@1.0.0", - "tinyrainbow": "tinyrainbow@1.2.0", - "vite": "vite@5.3.3_@types+node@20.14.10", - "vite-node": "vite-node@2.0.2_@types+node@20.14.10", - "why-is-node-running": "why-is-node-running@2.3.0" - } - }, - "wait-port@1.1.0": { - "integrity": "sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==", - "dependencies": { - "chalk": "chalk@4.1.2", - "commander": "commander@9.5.0", - "debug": "debug@4.3.5" - } - }, - "webidl-conversions@4.0.2": { - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dependencies": {} - }, - "whatwg-url@7.1.0": { - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "lodash.sortby@4.7.0", - "tr46": "tr46@1.0.1", - "webidl-conversions": "webidl-conversions@4.0.2" - } - }, - "which@2.0.2": { - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "isexe@2.0.0" - } - }, - "why-is-node-running@2.3.0": { - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dependencies": { - "siginfo": "siginfo@2.0.0", - "stackback": "stackback@0.0.2" - } - }, - "wordwrap@1.0.0": { - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dependencies": {} - }, - "wrap-ansi@7.0.0": { - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "ansi-styles@4.3.0", - "string-width": "string-width@4.2.3", - "strip-ansi": "strip-ansi@6.0.1" - } - }, - "wrap-ansi@8.1.0": { - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "ansi-styles@6.2.1", - "string-width": "string-width@5.1.2", - "strip-ansi": "strip-ansi@7.1.0" - } - }, - "yaml@2.4.5": { - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", - "dependencies": {} - }, - "yocto-queue@1.1.1": { - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", - "dependencies": {} - }, - "zx@8.1.4": { - "integrity": "sha512-QFDYYpnzdpRiJ3dL2102Cw26FpXpWshW4QLTGxiYfIcwdAqg084jRCkK/kuP/NOSkxOjydRwNFG81qzA5r1a6w==", - "dependencies": { - "@types/fs-extra": "@types/fs-extra@11.0.4", - "@types/node": "@types/node@20.14.10" - } - } - } - }, - "remote": {}, - "workspace": { - "dependencies": [ - "npm:mri", - "npm:wait-port", - "npm:zx" - ], - "packageJson": { - "dependencies": [ - "npm:@brillout/release-me@^0.3.9", - "npm:@hattip/adapter-bun@^0.0.46", - "npm:@hattip/adapter-deno@^0.0.46", - "npm:@hattip/adapter-node@^0.0.46", - "npm:@hattip/compose@^0.0.46", - "npm:@hattip/core@^0.0.46", - "npm:@hattip/cors@^0.0.46", - "npm:@hattip/router@^0.0.46", - "npm:@types/node@^20.14.10", - "npm:@universal-middleware/core@^0.1.1", - "npm:rimraf@^6.0.0", - "npm:tsup@^8.1.0", - "npm:tsx@^4.16.2", - "npm:typescript@^5.5.3", - "npm:vitest@^2.0.2" - ] - } - } -} diff --git a/packages/adapter-hattip/package.json b/packages/adapter-hattip/package.json index 375830d..2175592 100644 --- a/packages/adapter-hattip/package.json +++ b/packages/adapter-hattip/package.json @@ -19,7 +19,7 @@ "test": "vitest run", "test:run-hattip:node": "tsx tests/entry-hattip.ts", "test:run-hattip:bun": "bun tests/entry-hattip.ts", - "test:run-hattip:deno": "deno run --unstable-sloppy-imports -A tests/entry-hattip.ts", + "test:run-hattip:deno": "deno run --unstable-byonm --unstable-sloppy-imports -A tests/entry-hattip.ts", "test:typecheck": "tsc -p tsconfig.json --noEmit", "release": "LANG=en_US release-me patch", "release:minor": "LANG=en_US release-me minor", @@ -29,20 +29,22 @@ "@universal-middleware/core": "^0.1.1" }, "devDependencies": { - "@brillout/release-me": "^0.3.9", - "@hattip/adapter-bun": "^0.0.46", - "@hattip/adapter-deno": "^0.0.46", - "@hattip/adapter-node": "^0.0.46", - "@hattip/compose": "^0.0.46", - "@hattip/core": "^0.0.46", - "@hattip/cors": "^0.0.46", - "@hattip/router": "^0.0.46", + "@brillout/release-me": "^0.4.0", + "@hattip/adapter-bun": "^0.0.47", + "@hattip/adapter-deno": "^0.0.47", + "@hattip/adapter-node": "^0.0.47", + "@hattip/compose": "^0.0.47", + "@hattip/core": "^0.0.47", + "@hattip/cors": "^0.0.47", + "@hattip/router": "^0.0.47", + "@swc/core": "^1.7.11", "@types/node": "^20.14.10", "@universal-middleware/tests": "workspace:*", "rimraf": "^6.0.0", - "tsup": "^8.1.0", - "tsx": "^4.16.2", - "typescript": "^5.5.3", - "vitest": "^2.0.2" - } + "tsup": "^8.2.4", + "tsx": "^4.17.0", + "typescript": "^5.5.4", + "vitest": "^2.0.5" + }, + "sideEffects": false } diff --git a/packages/adapter-hattip/src/common.ts b/packages/adapter-hattip/src/common.ts index fe73c6b..f4b59cd 100644 --- a/packages/adapter-hattip/src/common.ts +++ b/packages/adapter-hattip/src/common.ts @@ -1,9 +1,11 @@ import type { AdapterRequestContext, HattipHandler } from "@hattip/core"; import type { RequestHandler } from "@hattip/compose"; import type { + Get, UniversalHandler, UniversalMiddleware, } from "@universal-middleware/core"; +import { getAdapterRuntime } from "@universal-middleware/core"; export const contextSymbol = Symbol("unContext"); @@ -13,37 +15,93 @@ declare module "@hattip/core" { } } +export type { HattipHandler }; +export type HattipMiddleware = RequestHandler; + /** * Creates a request handler to be passed to hattip */ -export function createHandler(handler: UniversalHandler): HattipHandler { - return (context) => { - context[contextSymbol] ??= {}; - return handler(context.request, context[contextSymbol]); +export function createHandler( + handlerFactory: Get, +): Get { + return (...args) => { + const handler = handlerFactory(...args); + + return (context) => { + const ctx = initContext(context); + return handler( + context.request, + ctx, + getAdapterRuntime( + "other", + {}, + { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + env: (context.platform as any)?.env, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ctx: (context.platform as any)?.context, + }, + ), + ); + }; }; } /** * Creates a middleware to be passed to @hattip/compose or @hattip/router */ -export function createMiddleware( - middleware: UniversalMiddleware, -): RequestHandler { - return async (context) => { - context[contextSymbol] ??= {}; - const response = await middleware(context.request, context[contextSymbol]); - - if (typeof response === "function") { - const res = await context.next(); - return response(res); - } else if (typeof response === "object" && "body" in response) { - return response; - } +export function createMiddleware< + T extends unknown[], + InContext extends Universal.Context, + OutContext extends Universal.Context, +>( + middlewareFactory: Get>, +): Get { + return (...args) => { + const middleware = middlewareFactory(...args); + + return async (context) => { + const ctx = initContext(context); + const response = await middleware( + context.request, + ctx, + getAdapterRuntime( + "other", + {}, + { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + env: (context.platform as any)?.env, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ctx: (context.platform as any)?.context, + }, + ), + ); + + if (typeof response === "function") { + const res = await context.next(); + return response(res); + } else if (response !== null && typeof response === "object") { + if (response instanceof Response) { + return response; + } + + // Update context + context[contextSymbol] = response; + } + }; }; } -export function getContext( - context: AdapterRequestContext, -): Universal.Context | undefined { - return context[contextSymbol]; +export function initContext< + InContext extends Universal.Context = Universal.Context, +>(context: AdapterRequestContext): InContext { + context[contextSymbol] ??= {}; + + return context[contextSymbol] as InContext; +} + +export function getContext< + InContext extends Universal.Context = Universal.Context, +>(context: AdapterRequestContext): InContext | undefined { + return context[contextSymbol] as InContext | undefined; } diff --git a/packages/adapter-hattip/src/index.ts b/packages/adapter-hattip/src/index.ts index 2f74b9c..e5a3fb9 100644 --- a/packages/adapter-hattip/src/index.ts +++ b/packages/adapter-hattip/src/index.ts @@ -1 +1,7 @@ -export { createHandler, createMiddleware, getContext } from "./common.js"; +export { + createHandler, + createMiddleware, + getContext, + type HattipHandler, + type HattipMiddleware, +} from "./common.js"; diff --git a/packages/adapter-hattip/tests/entry-hattip.ts b/packages/adapter-hattip/tests/entry-hattip.ts index a60b887..fcf94e7 100644 --- a/packages/adapter-hattip/tests/entry-hattip.ts +++ b/packages/adapter-hattip/tests/entry-hattip.ts @@ -8,16 +8,19 @@ import { middlewares, } from "@universal-middleware/tests"; import { createRouter } from "@hattip/router"; +import type { Get, UniversalMiddleware } from "@universal-middleware/core"; const app = createRouter(); // standard hattip middleware app.use(cors()); -middlewares.forEach((middleware) => app.use(createMiddleware(middleware))); +middlewares.forEach((middleware) => + app.use(createMiddleware(middleware as Get<[], UniversalMiddleware>)()), +); // universal handler -app.get("/", createHandler(handler)); +app.get("/", createHandler(handler)()); const hattipHandler = app.buildHandler(); @@ -45,7 +48,7 @@ if (deno) { const bunAdapter = await import("@hattip/adapter-bun"); bunHandler = bunAdapter.default(hattipHandler, { port, - }); + } as import("@hattip/adapter-bun").BunAdapterOptions); } // Bun diff --git a/packages/adapter-hono/deno.json b/packages/adapter-hono/deno.json index 7f10135..a38c68a 100644 --- a/packages/adapter-hono/deno.json +++ b/packages/adapter-hono/deno.json @@ -1,8 +1,10 @@ { "imports": { "@universal-middleware/tests": "../tests/dist", + "@universal-middleware/core": "../core/dist", "mri": "npm:mri", "zx": "npm:zx", "wait-port": "npm:wait-port" - } + }, + "lock": false } diff --git a/packages/adapter-hono/deno.lock b/packages/adapter-hono/deno.lock deleted file mode 100644 index 38ef4d1..0000000 --- a/packages/adapter-hono/deno.lock +++ /dev/null @@ -1,1697 +0,0 @@ -{ - "version": "3", - "packages": { - "specifiers": { - "npm:@brillout/release-me@^0.3.9": "npm:@brillout/release-me@0.3.9", - "npm:@types/node@^20.14.10": "npm:@types/node@20.14.10", - "npm:@universal-middleware/core@^0.1.1": "npm:@universal-middleware/core@0.1.1", - "npm:hono@^4.4.13": "npm:hono@4.4.13", - "npm:mri": "npm:mri@1.2.0", - "npm:rimraf@^6.0.0": "npm:rimraf@6.0.1", - "npm:tsup@^8.1.0": "npm:tsup@8.1.0_typescript@5.5.3_esbuild@0.21.5", - "npm:tsx@^4.16.2": "npm:tsx@4.16.2", - "npm:typescript@^5.5.3": "npm:typescript@5.5.3", - "npm:vitest@^2.0.2": "npm:vitest@2.0.2_@types+node@20.14.10", - "npm:wait-port": "npm:wait-port@1.1.0", - "npm:zx": "npm:zx@8.1.4" - }, - "npm": { - "@ampproject/remapping@2.3.0": { - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dependencies": { - "@jridgewell/gen-mapping": "@jridgewell/gen-mapping@0.3.5", - "@jridgewell/trace-mapping": "@jridgewell/trace-mapping@0.3.25" - } - }, - "@babel/code-frame@7.24.7": { - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dependencies": { - "@babel/highlight": "@babel/highlight@7.24.7", - "picocolors": "picocolors@1.0.1" - } - }, - "@babel/helper-validator-identifier@7.24.7": { - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dependencies": {} - }, - "@babel/highlight@7.24.7": { - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dependencies": { - "@babel/helper-validator-identifier": "@babel/helper-validator-identifier@7.24.7", - "chalk": "chalk@2.4.2", - "js-tokens": "js-tokens@4.0.0", - "picocolors": "picocolors@1.0.1" - } - }, - "@brillout/picocolors@1.0.13": { - "integrity": "sha512-LblvMKItHbvkaIMI+Awsk1EEjmReE8E8Mgjtj3Pdn/qBvwQ6e+ts5uEqG6iTrK6JWndcxrQgSe664KfoteN6fA==", - "dependencies": {} - }, - "@brillout/release-me@0.3.9": { - "integrity": "sha512-7Q9YD+rnVF9hFmRFNSEePAejYSgZzWABJTA5sFrfD1utREt5K8aokoldvm/WES83SOMIkPO97c2kII9J4snc7Q==", - "dependencies": { - "@brillout/picocolors": "@brillout/picocolors@1.0.13", - "commander": "commander@11.1.0", - "conventional-changelog": "conventional-changelog@5.1.0", - "execa": "execa@5.1.1", - "semver": "semver@7.6.2" - } - }, - "@esbuild/aix-ppc64@0.21.5": { - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "dependencies": {} - }, - "@esbuild/android-arm64@0.21.5": { - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "dependencies": {} - }, - "@esbuild/android-arm@0.21.5": { - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "dependencies": {} - }, - "@esbuild/android-x64@0.21.5": { - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "dependencies": {} - }, - "@esbuild/darwin-arm64@0.21.5": { - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "dependencies": {} - }, - "@esbuild/darwin-x64@0.21.5": { - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "dependencies": {} - }, - "@esbuild/freebsd-arm64@0.21.5": { - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "dependencies": {} - }, - "@esbuild/freebsd-x64@0.21.5": { - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "dependencies": {} - }, - "@esbuild/linux-arm64@0.21.5": { - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "dependencies": {} - }, - "@esbuild/linux-arm@0.21.5": { - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "dependencies": {} - }, - "@esbuild/linux-ia32@0.21.5": { - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "dependencies": {} - }, - "@esbuild/linux-loong64@0.21.5": { - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "dependencies": {} - }, - "@esbuild/linux-mips64el@0.21.5": { - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "dependencies": {} - }, - "@esbuild/linux-ppc64@0.21.5": { - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "dependencies": {} - }, - "@esbuild/linux-riscv64@0.21.5": { - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "dependencies": {} - }, - "@esbuild/linux-s390x@0.21.5": { - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "dependencies": {} - }, - "@esbuild/linux-x64@0.21.5": { - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "dependencies": {} - }, - "@esbuild/netbsd-x64@0.21.5": { - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "dependencies": {} - }, - "@esbuild/openbsd-x64@0.21.5": { - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "dependencies": {} - }, - "@esbuild/sunos-x64@0.21.5": { - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "dependencies": {} - }, - "@esbuild/win32-arm64@0.21.5": { - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "dependencies": {} - }, - "@esbuild/win32-ia32@0.21.5": { - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "dependencies": {} - }, - "@esbuild/win32-x64@0.21.5": { - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "dependencies": {} - }, - "@hutson/parse-repository-url@5.0.0": { - "integrity": "sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==", - "dependencies": {} - }, - "@isaacs/cliui@8.0.2": { - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "string-width@5.1.2", - "string-width-cjs": "string-width@4.2.3", - "strip-ansi": "strip-ansi@7.1.0", - "strip-ansi-cjs": "strip-ansi@6.0.1", - "wrap-ansi": "wrap-ansi@8.1.0", - "wrap-ansi-cjs": "wrap-ansi@7.0.0" - } - }, - "@jridgewell/gen-mapping@0.3.5": { - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dependencies": { - "@jridgewell/set-array": "@jridgewell/set-array@1.2.1", - "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.5.0", - "@jridgewell/trace-mapping": "@jridgewell/trace-mapping@0.3.25" - } - }, - "@jridgewell/resolve-uri@3.1.2": { - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dependencies": {} - }, - "@jridgewell/set-array@1.2.1": { - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dependencies": {} - }, - "@jridgewell/sourcemap-codec@1.5.0": { - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dependencies": {} - }, - "@jridgewell/trace-mapping@0.3.25": { - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "@jridgewell/resolve-uri@3.1.2", - "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.5.0" - } - }, - "@nodelib/fs.scandir@2.1.5": { - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "@nodelib/fs.stat@2.0.5", - "run-parallel": "run-parallel@1.2.0" - } - }, - "@nodelib/fs.stat@2.0.5": { - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dependencies": {} - }, - "@nodelib/fs.walk@1.2.8": { - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "@nodelib/fs.scandir@2.1.5", - "fastq": "fastq@1.17.1" - } - }, - "@pkgjs/parseargs@0.11.0": { - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dependencies": {} - }, - "@rollup/rollup-android-arm-eabi@4.18.1": { - "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==", - "dependencies": {} - }, - "@rollup/rollup-android-arm64@4.18.1": { - "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==", - "dependencies": {} - }, - "@rollup/rollup-darwin-arm64@4.18.1": { - "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==", - "dependencies": {} - }, - "@rollup/rollup-darwin-x64@4.18.1": { - "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==", - "dependencies": {} - }, - "@rollup/rollup-linux-arm-gnueabihf@4.18.1": { - "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==", - "dependencies": {} - }, - "@rollup/rollup-linux-arm-musleabihf@4.18.1": { - "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==", - "dependencies": {} - }, - "@rollup/rollup-linux-arm64-gnu@4.18.1": { - "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==", - "dependencies": {} - }, - "@rollup/rollup-linux-arm64-musl@4.18.1": { - "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==", - "dependencies": {} - }, - "@rollup/rollup-linux-powerpc64le-gnu@4.18.1": { - "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==", - "dependencies": {} - }, - "@rollup/rollup-linux-riscv64-gnu@4.18.1": { - "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==", - "dependencies": {} - }, - "@rollup/rollup-linux-s390x-gnu@4.18.1": { - "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==", - "dependencies": {} - }, - "@rollup/rollup-linux-x64-gnu@4.18.1": { - "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==", - "dependencies": {} - }, - "@rollup/rollup-linux-x64-musl@4.18.1": { - "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==", - "dependencies": {} - }, - "@rollup/rollup-win32-arm64-msvc@4.18.1": { - "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==", - "dependencies": {} - }, - "@rollup/rollup-win32-ia32-msvc@4.18.1": { - "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==", - "dependencies": {} - }, - "@rollup/rollup-win32-x64-msvc@4.18.1": { - "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==", - "dependencies": {} - }, - "@types/estree@1.0.5": { - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dependencies": {} - }, - "@types/fs-extra@11.0.4": { - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", - "dependencies": { - "@types/jsonfile": "@types/jsonfile@6.1.4", - "@types/node": "@types/node@18.16.19" - } - }, - "@types/jsonfile@6.1.4": { - "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", - "dependencies": { - "@types/node": "@types/node@18.16.19" - } - }, - "@types/node@18.16.19": { - "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==", - "dependencies": {} - }, - "@types/node@20.14.10": { - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", - "dependencies": { - "undici-types": "undici-types@5.26.5" - } - }, - "@types/normalize-package-data@2.4.4": { - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dependencies": {} - }, - "@universal-middleware/core@0.1.1": { - "integrity": "sha512-1paKMQ/B/l5NL9j5vR3T7mvk3VqfP3aIuJj0XU5WvlrqZGjde1qFyjEDfw4RQtSkgloUobgttdhs4qzop9lS2g==", - "dependencies": {} - }, - "@vitest/expect@2.0.2": { - "integrity": "sha512-nKAvxBYqcDugYZ4nJvnm5OR8eDJdgWjk4XM9owQKUjzW70q0icGV2HVnQOyYsp906xJaBDUXw0+9EHw2T8e0mQ==", - "dependencies": { - "@vitest/spy": "@vitest/spy@2.0.2", - "@vitest/utils": "@vitest/utils@2.0.2", - "chai": "chai@5.1.1", - "tinyrainbow": "tinyrainbow@1.2.0" - } - }, - "@vitest/pretty-format@2.0.2": { - "integrity": "sha512-SBCyOXfGVvddRd9r2PwoVR0fonQjh9BMIcBMlSzbcNwFfGr6ZhOhvBzurjvi2F4ryut2HcqiFhNeDVGwru8tLg==", - "dependencies": { - "tinyrainbow": "tinyrainbow@1.2.0" - } - }, - "@vitest/runner@2.0.2": { - "integrity": "sha512-OCh437Vi8Wdbif1e0OvQcbfM3sW4s2lpmOjAE7qfLrpzJX2M7J1IQlNvEcb/fu6kaIB9n9n35wS0G2Q3en5kHg==", - "dependencies": { - "@vitest/utils": "@vitest/utils@2.0.2", - "pathe": "pathe@1.1.2" - } - }, - "@vitest/snapshot@2.0.2": { - "integrity": "sha512-Yc2ewhhZhx+0f9cSUdfzPRcsM6PhIb+S43wxE7OG0kTxqgqzo8tHkXFuFlndXeDMp09G3sY/X5OAo/RfYydf1g==", - "dependencies": { - "@vitest/pretty-format": "@vitest/pretty-format@2.0.2", - "magic-string": "magic-string@0.30.10", - "pathe": "pathe@1.1.2" - } - }, - "@vitest/spy@2.0.2": { - "integrity": "sha512-MgwJ4AZtCgqyp2d7WcQVE8aNG5vQ9zu9qMPYQHjsld/QVsrvg78beNrXdO4HYkP0lDahCO3P4F27aagIag+SGQ==", - "dependencies": { - "tinyspy": "tinyspy@3.0.0" - } - }, - "@vitest/utils@2.0.2": { - "integrity": "sha512-pxCY1v7kmOCWYWjzc0zfjGTA3Wmn8PKnlPvSrsA643P1NHl1fOyXj2Q9SaNlrlFE+ivCsxM80Ov3AR82RmHCWQ==", - "dependencies": { - "@vitest/pretty-format": "@vitest/pretty-format@2.0.2", - "estree-walker": "estree-walker@3.0.3", - "loupe": "loupe@3.1.1", - "tinyrainbow": "tinyrainbow@1.2.0" - } - }, - "JSONStream@1.3.5": { - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dependencies": { - "jsonparse": "jsonparse@1.3.1", - "through": "through@2.3.8" - } - }, - "add-stream@1.0.0": { - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dependencies": {} - }, - "ansi-regex@5.0.1": { - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dependencies": {} - }, - "ansi-regex@6.0.1": { - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dependencies": {} - }, - "ansi-styles@3.2.1": { - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "color-convert@1.9.3" - } - }, - "ansi-styles@4.3.0": { - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "color-convert@2.0.1" - } - }, - "ansi-styles@6.2.1": { - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dependencies": {} - }, - "any-promise@1.3.0": { - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dependencies": {} - }, - "anymatch@3.1.3": { - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "normalize-path@3.0.0", - "picomatch": "picomatch@2.3.1" - } - }, - "array-ify@1.0.0": { - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dependencies": {} - }, - "array-union@2.1.0": { - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dependencies": {} - }, - "assertion-error@2.0.1": { - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dependencies": {} - }, - "balanced-match@1.0.2": { - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dependencies": {} - }, - "binary-extensions@2.3.0": { - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dependencies": {} - }, - "brace-expansion@2.0.1": { - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "balanced-match@1.0.2" - } - }, - "braces@3.0.3": { - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "fill-range@7.1.1" - } - }, - "bundle-require@4.2.1_esbuild@0.21.5": { - "integrity": "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==", - "dependencies": { - "esbuild": "esbuild@0.21.5", - "load-tsconfig": "load-tsconfig@0.2.5" - } - }, - "cac@6.7.14": { - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dependencies": {} - }, - "chai@5.1.1": { - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", - "dependencies": { - "assertion-error": "assertion-error@2.0.1", - "check-error": "check-error@2.1.1", - "deep-eql": "deep-eql@5.0.2", - "loupe": "loupe@3.1.1", - "pathval": "pathval@2.0.0" - } - }, - "chalk@2.4.2": { - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "ansi-styles@3.2.1", - "escape-string-regexp": "escape-string-regexp@1.0.5", - "supports-color": "supports-color@5.5.0" - } - }, - "chalk@4.1.2": { - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "ansi-styles@4.3.0", - "supports-color": "supports-color@7.2.0" - } - }, - "check-error@2.1.1": { - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dependencies": {} - }, - "chokidar@3.6.0": { - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "anymatch@3.1.3", - "braces": "braces@3.0.3", - "fsevents": "fsevents@2.3.3", - "glob-parent": "glob-parent@5.1.2", - "is-binary-path": "is-binary-path@2.1.0", - "is-glob": "is-glob@4.0.3", - "normalize-path": "normalize-path@3.0.0", - "readdirp": "readdirp@3.6.0" - } - }, - "color-convert@1.9.3": { - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "color-name@1.1.3" - } - }, - "color-convert@2.0.1": { - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "color-name@1.1.4" - } - }, - "color-name@1.1.3": { - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dependencies": {} - }, - "color-name@1.1.4": { - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dependencies": {} - }, - "commander@11.1.0": { - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dependencies": {} - }, - "commander@4.1.1": { - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dependencies": {} - }, - "commander@9.5.0": { - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dependencies": {} - }, - "compare-func@2.0.0": { - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dependencies": { - "array-ify": "array-ify@1.0.0", - "dot-prop": "dot-prop@5.3.0" - } - }, - "conventional-changelog-angular@7.0.0": { - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", - "dependencies": { - "compare-func": "compare-func@2.0.0" - } - }, - "conventional-changelog-atom@4.0.0": { - "integrity": "sha512-q2YtiN7rnT1TGwPTwjjBSIPIzDJCRE+XAUahWxnh+buKK99Kks4WLMHoexw38GXx9OUxAsrp44f9qXe5VEMYhw==", - "dependencies": {} - }, - "conventional-changelog-codemirror@4.0.0": { - "integrity": "sha512-hQSojc/5imn1GJK3A75m9hEZZhc3urojA5gMpnar4JHmgLnuM3CUIARPpEk86glEKr3c54Po3WV/vCaO/U8g3Q==", - "dependencies": {} - }, - "conventional-changelog-conventionalcommits@7.0.2": { - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", - "dependencies": { - "compare-func": "compare-func@2.0.0" - } - }, - "conventional-changelog-core@7.0.0": { - "integrity": "sha512-UYgaB1F/COt7VFjlYKVE/9tTzfU3VUq47r6iWf6lM5T7TlOxr0thI63ojQueRLIpVbrtHK4Ffw+yQGduw2Bhdg==", - "dependencies": { - "@hutson/parse-repository-url": "@hutson/parse-repository-url@5.0.0", - "add-stream": "add-stream@1.0.0", - "conventional-changelog-writer": "conventional-changelog-writer@7.0.1", - "conventional-commits-parser": "conventional-commits-parser@5.0.0", - "git-raw-commits": "git-raw-commits@4.0.0", - "git-semver-tags": "git-semver-tags@7.0.1", - "hosted-git-info": "hosted-git-info@7.0.2", - "normalize-package-data": "normalize-package-data@6.0.2", - "read-pkg": "read-pkg@8.1.0", - "read-pkg-up": "read-pkg-up@10.1.0" - } - }, - "conventional-changelog-ember@4.0.0": { - "integrity": "sha512-D0IMhwcJUg1Y8FSry6XAplEJcljkHVlvAZddhhsdbL1rbsqRsMfGx/PIkPYq0ru5aDgn+OxhQ5N5yR7P9mfsvA==", - "dependencies": {} - }, - "conventional-changelog-eslint@5.0.0": { - "integrity": "sha512-6JtLWqAQIeJLn/OzUlYmzd9fKeNSWmQVim9kql+v4GrZwLx807kAJl3IJVc3jTYfVKWLxhC3BGUxYiuVEcVjgA==", - "dependencies": {} - }, - "conventional-changelog-express@4.0.0": { - "integrity": "sha512-yWyy5c7raP9v7aTvPAWzqrztACNO9+FEI1FSYh7UP7YT1AkWgv5UspUeB5v3Ibv4/o60zj2o9GF2tqKQ99lIsw==", - "dependencies": {} - }, - "conventional-changelog-jquery@5.0.0": { - "integrity": "sha512-slLjlXLRNa/icMI3+uGLQbtrgEny3RgITeCxevJB+p05ExiTgHACP5p3XiMKzjBn80n+Rzr83XMYfRInEtCPPw==", - "dependencies": {} - }, - "conventional-changelog-jshint@4.0.0": { - "integrity": "sha512-LyXq1bbl0yG0Ai1SbLxIk8ZxUOe3AjnlwE6sVRQmMgetBk+4gY9EO3d00zlEt8Y8gwsITytDnPORl8al7InTjg==", - "dependencies": { - "compare-func": "compare-func@2.0.0" - } - }, - "conventional-changelog-preset-loader@4.1.0": { - "integrity": "sha512-HozQjJicZTuRhCRTq4rZbefaiCzRM2pr6u2NL3XhrmQm4RMnDXfESU6JKu/pnKwx5xtdkYfNCsbhN5exhiKGJA==", - "dependencies": {} - }, - "conventional-changelog-writer@7.0.1": { - "integrity": "sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==", - "dependencies": { - "conventional-commits-filter": "conventional-commits-filter@4.0.0", - "handlebars": "handlebars@4.7.8", - "json-stringify-safe": "json-stringify-safe@5.0.1", - "meow": "meow@12.1.1", - "semver": "semver@7.6.2", - "split2": "split2@4.2.0" - } - }, - "conventional-changelog@5.1.0": { - "integrity": "sha512-aWyE/P39wGYRPllcCEZDxTVEmhyLzTc9XA6z6rVfkuCD2UBnhV/sgSOKbQrEG5z9mEZJjnopjgQooTKxEg8mAg==", - "dependencies": { - "conventional-changelog-angular": "conventional-changelog-angular@7.0.0", - "conventional-changelog-atom": "conventional-changelog-atom@4.0.0", - "conventional-changelog-codemirror": "conventional-changelog-codemirror@4.0.0", - "conventional-changelog-conventionalcommits": "conventional-changelog-conventionalcommits@7.0.2", - "conventional-changelog-core": "conventional-changelog-core@7.0.0", - "conventional-changelog-ember": "conventional-changelog-ember@4.0.0", - "conventional-changelog-eslint": "conventional-changelog-eslint@5.0.0", - "conventional-changelog-express": "conventional-changelog-express@4.0.0", - "conventional-changelog-jquery": "conventional-changelog-jquery@5.0.0", - "conventional-changelog-jshint": "conventional-changelog-jshint@4.0.0", - "conventional-changelog-preset-loader": "conventional-changelog-preset-loader@4.1.0" - } - }, - "conventional-commits-filter@4.0.0": { - "integrity": "sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==", - "dependencies": {} - }, - "conventional-commits-parser@5.0.0": { - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", - "dependencies": { - "JSONStream": "JSONStream@1.3.5", - "is-text-path": "is-text-path@2.0.0", - "meow": "meow@12.1.1", - "split2": "split2@4.2.0" - } - }, - "cross-spawn@7.0.3": { - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "path-key@3.1.1", - "shebang-command": "shebang-command@2.0.0", - "which": "which@2.0.2" - } - }, - "dargs@8.1.0": { - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", - "dependencies": {} - }, - "debug@4.3.5": { - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dependencies": { - "ms": "ms@2.1.2" - } - }, - "deep-eql@5.0.2": { - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dependencies": {} - }, - "dir-glob@3.0.1": { - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "path-type@4.0.0" - } - }, - "dot-prop@5.3.0": { - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "is-obj@2.0.0" - } - }, - "eastasianwidth@0.2.0": { - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dependencies": {} - }, - "emoji-regex@8.0.0": { - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dependencies": {} - }, - "emoji-regex@9.2.2": { - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dependencies": {} - }, - "error-ex@1.3.2": { - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "is-arrayish@0.2.1" - } - }, - "esbuild@0.21.5": { - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dependencies": { - "@esbuild/aix-ppc64": "@esbuild/aix-ppc64@0.21.5", - "@esbuild/android-arm": "@esbuild/android-arm@0.21.5", - "@esbuild/android-arm64": "@esbuild/android-arm64@0.21.5", - "@esbuild/android-x64": "@esbuild/android-x64@0.21.5", - "@esbuild/darwin-arm64": "@esbuild/darwin-arm64@0.21.5", - "@esbuild/darwin-x64": "@esbuild/darwin-x64@0.21.5", - "@esbuild/freebsd-arm64": "@esbuild/freebsd-arm64@0.21.5", - "@esbuild/freebsd-x64": "@esbuild/freebsd-x64@0.21.5", - "@esbuild/linux-arm": "@esbuild/linux-arm@0.21.5", - "@esbuild/linux-arm64": "@esbuild/linux-arm64@0.21.5", - "@esbuild/linux-ia32": "@esbuild/linux-ia32@0.21.5", - "@esbuild/linux-loong64": "@esbuild/linux-loong64@0.21.5", - "@esbuild/linux-mips64el": "@esbuild/linux-mips64el@0.21.5", - "@esbuild/linux-ppc64": "@esbuild/linux-ppc64@0.21.5", - "@esbuild/linux-riscv64": "@esbuild/linux-riscv64@0.21.5", - "@esbuild/linux-s390x": "@esbuild/linux-s390x@0.21.5", - "@esbuild/linux-x64": "@esbuild/linux-x64@0.21.5", - "@esbuild/netbsd-x64": "@esbuild/netbsd-x64@0.21.5", - "@esbuild/openbsd-x64": "@esbuild/openbsd-x64@0.21.5", - "@esbuild/sunos-x64": "@esbuild/sunos-x64@0.21.5", - "@esbuild/win32-arm64": "@esbuild/win32-arm64@0.21.5", - "@esbuild/win32-ia32": "@esbuild/win32-ia32@0.21.5", - "@esbuild/win32-x64": "@esbuild/win32-x64@0.21.5" - } - }, - "escape-string-regexp@1.0.5": { - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dependencies": {} - }, - "estree-walker@3.0.3": { - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "@types/estree@1.0.5" - } - }, - "execa@5.1.1": { - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "cross-spawn@7.0.3", - "get-stream": "get-stream@6.0.1", - "human-signals": "human-signals@2.1.0", - "is-stream": "is-stream@2.0.1", - "merge-stream": "merge-stream@2.0.0", - "npm-run-path": "npm-run-path@4.0.1", - "onetime": "onetime@5.1.2", - "signal-exit": "signal-exit@3.0.7", - "strip-final-newline": "strip-final-newline@2.0.0" - } - }, - "execa@8.0.1": { - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dependencies": { - "cross-spawn": "cross-spawn@7.0.3", - "get-stream": "get-stream@8.0.1", - "human-signals": "human-signals@5.0.0", - "is-stream": "is-stream@3.0.0", - "merge-stream": "merge-stream@2.0.0", - "npm-run-path": "npm-run-path@5.3.0", - "onetime": "onetime@6.0.0", - "signal-exit": "signal-exit@4.1.0", - "strip-final-newline": "strip-final-newline@3.0.0" - } - }, - "fast-glob@3.3.2": { - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "@nodelib/fs.stat@2.0.5", - "@nodelib/fs.walk": "@nodelib/fs.walk@1.2.8", - "glob-parent": "glob-parent@5.1.2", - "merge2": "merge2@1.4.1", - "micromatch": "micromatch@4.0.7" - } - }, - "fastq@1.17.1": { - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "reusify@1.0.4" - } - }, - "fill-range@7.1.1": { - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "to-regex-range@5.0.1" - } - }, - "find-up@6.3.0": { - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dependencies": { - "locate-path": "locate-path@7.2.0", - "path-exists": "path-exists@5.0.0" - } - }, - "foreground-child@3.2.1": { - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dependencies": { - "cross-spawn": "cross-spawn@7.0.3", - "signal-exit": "signal-exit@4.1.0" - } - }, - "fsevents@2.3.3": { - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dependencies": {} - }, - "get-func-name@2.0.2": { - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dependencies": {} - }, - "get-stream@6.0.1": { - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dependencies": {} - }, - "get-stream@8.0.1": { - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dependencies": {} - }, - "get-tsconfig@4.7.5": { - "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", - "dependencies": { - "resolve-pkg-maps": "resolve-pkg-maps@1.0.0" - } - }, - "git-raw-commits@4.0.0": { - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", - "dependencies": { - "dargs": "dargs@8.1.0", - "meow": "meow@12.1.1", - "split2": "split2@4.2.0" - } - }, - "git-semver-tags@7.0.1": { - "integrity": "sha512-NY0ZHjJzyyNXHTDZmj+GG7PyuAKtMsyWSwh07CR2hOZFa+/yoTsXci/nF2obzL8UDhakFNkD9gNdt/Ed+cxh2Q==", - "dependencies": { - "meow": "meow@12.1.1", - "semver": "semver@7.6.2" - } - }, - "glob-parent@5.1.2": { - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "is-glob@4.0.3" - } - }, - "glob@10.4.5": { - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dependencies": { - "foreground-child": "foreground-child@3.2.1", - "jackspeak": "jackspeak@3.4.3", - "minimatch": "minimatch@9.0.5", - "minipass": "minipass@7.1.2", - "package-json-from-dist": "package-json-from-dist@1.0.0", - "path-scurry": "path-scurry@1.11.1" - } - }, - "glob@11.0.0": { - "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", - "dependencies": { - "foreground-child": "foreground-child@3.2.1", - "jackspeak": "jackspeak@4.0.1", - "minimatch": "minimatch@10.0.1", - "minipass": "minipass@7.1.2", - "package-json-from-dist": "package-json-from-dist@1.0.0", - "path-scurry": "path-scurry@2.0.0" - } - }, - "globby@11.1.0": { - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "array-union@2.1.0", - "dir-glob": "dir-glob@3.0.1", - "fast-glob": "fast-glob@3.3.2", - "ignore": "ignore@5.3.1", - "merge2": "merge2@1.4.1", - "slash": "slash@3.0.0" - } - }, - "handlebars@4.7.8": { - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dependencies": { - "minimist": "minimist@1.2.8", - "neo-async": "neo-async@2.6.2", - "source-map": "source-map@0.6.1", - "uglify-js": "uglify-js@3.18.0", - "wordwrap": "wordwrap@1.0.0" - } - }, - "has-flag@3.0.0": { - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dependencies": {} - }, - "has-flag@4.0.0": { - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dependencies": {} - }, - "hono@4.4.13": { - "integrity": "sha512-c6qqenclmQ6wpXzqiElMa2jt423PVCmgBreDfC5s2lPPpGk7d0lOymd8QTzFZyYC5mSSs6imiTMPip+gLwuW/g==", - "dependencies": {} - }, - "hosted-git-info@7.0.2": { - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dependencies": { - "lru-cache": "lru-cache@10.4.3" - } - }, - "human-signals@2.1.0": { - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dependencies": {} - }, - "human-signals@5.0.0": { - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dependencies": {} - }, - "ignore@5.3.1": { - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dependencies": {} - }, - "is-arrayish@0.2.1": { - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dependencies": {} - }, - "is-binary-path@2.1.0": { - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "binary-extensions@2.3.0" - } - }, - "is-extglob@2.1.1": { - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dependencies": {} - }, - "is-fullwidth-code-point@3.0.0": { - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dependencies": {} - }, - "is-glob@4.0.3": { - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "is-extglob@2.1.1" - } - }, - "is-number@7.0.0": { - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dependencies": {} - }, - "is-obj@2.0.0": { - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dependencies": {} - }, - "is-stream@2.0.1": { - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dependencies": {} - }, - "is-stream@3.0.0": { - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dependencies": {} - }, - "is-text-path@2.0.0": { - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", - "dependencies": { - "text-extensions": "text-extensions@2.4.0" - } - }, - "isexe@2.0.0": { - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dependencies": {} - }, - "jackspeak@3.4.3": { - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dependencies": { - "@isaacs/cliui": "@isaacs/cliui@8.0.2", - "@pkgjs/parseargs": "@pkgjs/parseargs@0.11.0" - } - }, - "jackspeak@4.0.1": { - "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", - "dependencies": { - "@isaacs/cliui": "@isaacs/cliui@8.0.2", - "@pkgjs/parseargs": "@pkgjs/parseargs@0.11.0" - } - }, - "joycon@3.1.1": { - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "dependencies": {} - }, - "js-tokens@4.0.0": { - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dependencies": {} - }, - "json-parse-even-better-errors@3.0.2": { - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dependencies": {} - }, - "json-stringify-safe@5.0.1": { - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dependencies": {} - }, - "jsonparse@1.3.1": { - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dependencies": {} - }, - "lilconfig@3.1.2": { - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "dependencies": {} - }, - "lines-and-columns@1.2.4": { - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dependencies": {} - }, - "lines-and-columns@2.0.4": { - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", - "dependencies": {} - }, - "load-tsconfig@0.2.5": { - "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", - "dependencies": {} - }, - "locate-path@7.2.0": { - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dependencies": { - "p-locate": "p-locate@6.0.0" - } - }, - "lodash.sortby@4.7.0": { - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dependencies": {} - }, - "loupe@3.1.1": { - "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", - "dependencies": { - "get-func-name": "get-func-name@2.0.2" - } - }, - "lru-cache@10.4.3": { - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dependencies": {} - }, - "lru-cache@11.0.0": { - "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", - "dependencies": {} - }, - "magic-string@0.30.10": { - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", - "dependencies": { - "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.5.0" - } - }, - "meow@12.1.1": { - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dependencies": {} - }, - "merge-stream@2.0.0": { - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dependencies": {} - }, - "merge2@1.4.1": { - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dependencies": {} - }, - "micromatch@4.0.7": { - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dependencies": { - "braces": "braces@3.0.3", - "picomatch": "picomatch@2.3.1" - } - }, - "mimic-fn@2.1.0": { - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dependencies": {} - }, - "mimic-fn@4.0.0": { - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dependencies": {} - }, - "minimatch@10.0.1": { - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "dependencies": { - "brace-expansion": "brace-expansion@2.0.1" - } - }, - "minimatch@9.0.5": { - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "brace-expansion@2.0.1" - } - }, - "minimist@1.2.8": { - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dependencies": {} - }, - "minipass@7.1.2": { - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dependencies": {} - }, - "mri@1.2.0": { - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dependencies": {} - }, - "ms@2.1.2": { - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dependencies": {} - }, - "mz@2.7.0": { - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "any-promise@1.3.0", - "object-assign": "object-assign@4.1.1", - "thenify-all": "thenify-all@1.6.0" - } - }, - "nanoid@3.3.7": { - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dependencies": {} - }, - "neo-async@2.6.2": { - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dependencies": {} - }, - "normalize-package-data@6.0.2": { - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dependencies": { - "hosted-git-info": "hosted-git-info@7.0.2", - "semver": "semver@7.6.2", - "validate-npm-package-license": "validate-npm-package-license@3.0.4" - } - }, - "normalize-path@3.0.0": { - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dependencies": {} - }, - "npm-run-path@4.0.1": { - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "path-key@3.1.1" - } - }, - "npm-run-path@5.3.0": { - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dependencies": { - "path-key": "path-key@4.0.0" - } - }, - "object-assign@4.1.1": { - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dependencies": {} - }, - "onetime@5.1.2": { - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "mimic-fn@2.1.0" - } - }, - "onetime@6.0.0": { - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "mimic-fn@4.0.0" - } - }, - "p-limit@4.0.0": { - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "yocto-queue@1.1.1" - } - }, - "p-locate@6.0.0": { - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dependencies": { - "p-limit": "p-limit@4.0.0" - } - }, - "package-json-from-dist@1.0.0": { - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dependencies": {} - }, - "parse-json@7.1.1": { - "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==", - "dependencies": { - "@babel/code-frame": "@babel/code-frame@7.24.7", - "error-ex": "error-ex@1.3.2", - "json-parse-even-better-errors": "json-parse-even-better-errors@3.0.2", - "lines-and-columns": "lines-and-columns@2.0.4", - "type-fest": "type-fest@3.13.1" - } - }, - "path-exists@5.0.0": { - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dependencies": {} - }, - "path-key@3.1.1": { - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dependencies": {} - }, - "path-key@4.0.0": { - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dependencies": {} - }, - "path-scurry@1.11.1": { - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dependencies": { - "lru-cache": "lru-cache@10.4.3", - "minipass": "minipass@7.1.2" - } - }, - "path-scurry@2.0.0": { - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dependencies": { - "lru-cache": "lru-cache@11.0.0", - "minipass": "minipass@7.1.2" - } - }, - "path-type@4.0.0": { - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dependencies": {} - }, - "pathe@1.1.2": { - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dependencies": {} - }, - "pathval@2.0.0": { - "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", - "dependencies": {} - }, - "picocolors@1.0.1": { - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dependencies": {} - }, - "picomatch@2.3.1": { - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dependencies": {} - }, - "pirates@4.0.6": { - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dependencies": {} - }, - "postcss-load-config@4.0.2": { - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dependencies": { - "lilconfig": "lilconfig@3.1.2", - "yaml": "yaml@2.4.5" - } - }, - "postcss@8.4.39": { - "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", - "dependencies": { - "nanoid": "nanoid@3.3.7", - "picocolors": "picocolors@1.0.1", - "source-map-js": "source-map-js@1.2.0" - } - }, - "punycode@2.3.1": { - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dependencies": {} - }, - "queue-microtask@1.2.3": { - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dependencies": {} - }, - "read-pkg-up@10.1.0": { - "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", - "dependencies": { - "find-up": "find-up@6.3.0", - "read-pkg": "read-pkg@8.1.0", - "type-fest": "type-fest@4.21.0" - } - }, - "read-pkg@8.1.0": { - "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", - "dependencies": { - "@types/normalize-package-data": "@types/normalize-package-data@2.4.4", - "normalize-package-data": "normalize-package-data@6.0.2", - "parse-json": "parse-json@7.1.1", - "type-fest": "type-fest@4.21.0" - } - }, - "readdirp@3.6.0": { - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "picomatch@2.3.1" - } - }, - "resolve-from@5.0.0": { - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dependencies": {} - }, - "resolve-pkg-maps@1.0.0": { - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dependencies": {} - }, - "reusify@1.0.4": { - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dependencies": {} - }, - "rimraf@6.0.1": { - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", - "dependencies": { - "glob": "glob@11.0.0", - "package-json-from-dist": "package-json-from-dist@1.0.0" - } - }, - "rollup@4.18.1": { - "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==", - "dependencies": { - "@rollup/rollup-android-arm-eabi": "@rollup/rollup-android-arm-eabi@4.18.1", - "@rollup/rollup-android-arm64": "@rollup/rollup-android-arm64@4.18.1", - "@rollup/rollup-darwin-arm64": "@rollup/rollup-darwin-arm64@4.18.1", - "@rollup/rollup-darwin-x64": "@rollup/rollup-darwin-x64@4.18.1", - "@rollup/rollup-linux-arm-gnueabihf": "@rollup/rollup-linux-arm-gnueabihf@4.18.1", - "@rollup/rollup-linux-arm-musleabihf": "@rollup/rollup-linux-arm-musleabihf@4.18.1", - "@rollup/rollup-linux-arm64-gnu": "@rollup/rollup-linux-arm64-gnu@4.18.1", - "@rollup/rollup-linux-arm64-musl": "@rollup/rollup-linux-arm64-musl@4.18.1", - "@rollup/rollup-linux-powerpc64le-gnu": "@rollup/rollup-linux-powerpc64le-gnu@4.18.1", - "@rollup/rollup-linux-riscv64-gnu": "@rollup/rollup-linux-riscv64-gnu@4.18.1", - "@rollup/rollup-linux-s390x-gnu": "@rollup/rollup-linux-s390x-gnu@4.18.1", - "@rollup/rollup-linux-x64-gnu": "@rollup/rollup-linux-x64-gnu@4.18.1", - "@rollup/rollup-linux-x64-musl": "@rollup/rollup-linux-x64-musl@4.18.1", - "@rollup/rollup-win32-arm64-msvc": "@rollup/rollup-win32-arm64-msvc@4.18.1", - "@rollup/rollup-win32-ia32-msvc": "@rollup/rollup-win32-ia32-msvc@4.18.1", - "@rollup/rollup-win32-x64-msvc": "@rollup/rollup-win32-x64-msvc@4.18.1", - "@types/estree": "@types/estree@1.0.5", - "fsevents": "fsevents@2.3.3" - } - }, - "run-parallel@1.2.0": { - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dependencies": { - "queue-microtask": "queue-microtask@1.2.3" - } - }, - "semver@7.6.2": { - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dependencies": {} - }, - "shebang-command@2.0.0": { - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "shebang-regex@3.0.0" - } - }, - "shebang-regex@3.0.0": { - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dependencies": {} - }, - "siginfo@2.0.0": { - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dependencies": {} - }, - "signal-exit@3.0.7": { - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dependencies": {} - }, - "signal-exit@4.1.0": { - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dependencies": {} - }, - "slash@3.0.0": { - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dependencies": {} - }, - "source-map-js@1.2.0": { - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dependencies": {} - }, - "source-map@0.6.1": { - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dependencies": {} - }, - "source-map@0.8.0-beta.0": { - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dependencies": { - "whatwg-url": "whatwg-url@7.1.0" - } - }, - "spdx-correct@3.2.0": { - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dependencies": { - "spdx-expression-parse": "spdx-expression-parse@3.0.1", - "spdx-license-ids": "spdx-license-ids@3.0.18" - } - }, - "spdx-exceptions@2.5.0": { - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dependencies": {} - }, - "spdx-expression-parse@3.0.1": { - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "spdx-exceptions@2.5.0", - "spdx-license-ids": "spdx-license-ids@3.0.18" - } - }, - "spdx-license-ids@3.0.18": { - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", - "dependencies": {} - }, - "split2@4.2.0": { - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dependencies": {} - }, - "stackback@0.0.2": { - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dependencies": {} - }, - "std-env@3.7.0": { - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", - "dependencies": {} - }, - "string-width@4.2.3": { - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "emoji-regex@8.0.0", - "is-fullwidth-code-point": "is-fullwidth-code-point@3.0.0", - "strip-ansi": "strip-ansi@6.0.1" - } - }, - "string-width@5.1.2": { - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "eastasianwidth@0.2.0", - "emoji-regex": "emoji-regex@9.2.2", - "strip-ansi": "strip-ansi@7.1.0" - } - }, - "strip-ansi@6.0.1": { - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "ansi-regex@5.0.1" - } - }, - "strip-ansi@7.1.0": { - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "ansi-regex@6.0.1" - } - }, - "strip-final-newline@2.0.0": { - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dependencies": {} - }, - "strip-final-newline@3.0.0": { - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dependencies": {} - }, - "sucrase@3.35.0": { - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dependencies": { - "@jridgewell/gen-mapping": "@jridgewell/gen-mapping@0.3.5", - "commander": "commander@4.1.1", - "glob": "glob@10.4.5", - "lines-and-columns": "lines-and-columns@1.2.4", - "mz": "mz@2.7.0", - "pirates": "pirates@4.0.6", - "ts-interface-checker": "ts-interface-checker@0.1.13" - } - }, - "supports-color@5.5.0": { - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "has-flag@3.0.0" - } - }, - "supports-color@7.2.0": { - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "has-flag@4.0.0" - } - }, - "text-extensions@2.4.0": { - "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", - "dependencies": {} - }, - "thenify-all@1.6.0": { - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": "thenify@3.3.1" - } - }, - "thenify@3.3.1": { - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "any-promise@1.3.0" - } - }, - "through@2.3.8": { - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dependencies": {} - }, - "tinybench@2.8.0": { - "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", - "dependencies": {} - }, - "tinypool@1.0.0": { - "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", - "dependencies": {} - }, - "tinyrainbow@1.2.0": { - "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", - "dependencies": {} - }, - "tinyspy@3.0.0": { - "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", - "dependencies": {} - }, - "to-regex-range@5.0.1": { - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "is-number@7.0.0" - } - }, - "tr46@1.0.1": { - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dependencies": { - "punycode": "punycode@2.3.1" - } - }, - "tree-kill@1.2.2": { - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dependencies": {} - }, - "ts-interface-checker@0.1.13": { - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dependencies": {} - }, - "tsup@8.1.0_typescript@5.5.3_esbuild@0.21.5": { - "integrity": "sha512-UFdfCAXukax+U6KzeTNO2kAARHcWxmKsnvSPXUcfA1D+kU05XDccCrkffCQpFaWDsZfV0jMyTsxU39VfCp6EOg==", - "dependencies": { - "bundle-require": "bundle-require@4.2.1_esbuild@0.21.5", - "cac": "cac@6.7.14", - "chokidar": "chokidar@3.6.0", - "debug": "debug@4.3.5", - "esbuild": "esbuild@0.21.5", - "execa": "execa@5.1.1", - "globby": "globby@11.1.0", - "joycon": "joycon@3.1.1", - "postcss-load-config": "postcss-load-config@4.0.2", - "resolve-from": "resolve-from@5.0.0", - "rollup": "rollup@4.18.1", - "source-map": "source-map@0.8.0-beta.0", - "sucrase": "sucrase@3.35.0", - "tree-kill": "tree-kill@1.2.2", - "typescript": "typescript@5.5.3" - } - }, - "tsx@4.16.2": { - "integrity": "sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==", - "dependencies": { - "esbuild": "esbuild@0.21.5", - "fsevents": "fsevents@2.3.3", - "get-tsconfig": "get-tsconfig@4.7.5" - } - }, - "type-fest@3.13.1": { - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dependencies": {} - }, - "type-fest@4.21.0": { - "integrity": "sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==", - "dependencies": {} - }, - "typescript@5.5.3": { - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", - "dependencies": {} - }, - "uglify-js@3.18.0": { - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", - "dependencies": {} - }, - "undici-types@5.26.5": { - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dependencies": {} - }, - "validate-npm-package-license@3.0.4": { - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "spdx-correct@3.2.0", - "spdx-expression-parse": "spdx-expression-parse@3.0.1" - } - }, - "vite-node@2.0.2_@types+node@20.14.10": { - "integrity": "sha512-w4vkSz1Wo+NIQg8pjlEn0jQbcM/0D+xVaYjhw3cvarTanLLBh54oNiRbsT8PNK5GfuST0IlVXjsNRoNlqvY/fw==", - "dependencies": { - "cac": "cac@6.7.14", - "debug": "debug@4.3.5", - "pathe": "pathe@1.1.2", - "tinyrainbow": "tinyrainbow@1.2.0", - "vite": "vite@5.3.3_@types+node@20.14.10" - } - }, - "vite@5.3.3_@types+node@20.14.10": { - "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", - "dependencies": { - "@types/node": "@types/node@20.14.10", - "esbuild": "esbuild@0.21.5", - "fsevents": "fsevents@2.3.3", - "postcss": "postcss@8.4.39", - "rollup": "rollup@4.18.1" - } - }, - "vitest@2.0.2_@types+node@20.14.10": { - "integrity": "sha512-WlpZ9neRIjNBIOQwBYfBSr0+of5ZCbxT2TVGKW4Lv0c8+srCFIiRdsP7U009t8mMn821HQ4XKgkx5dVWpyoyLw==", - "dependencies": { - "@ampproject/remapping": "@ampproject/remapping@2.3.0", - "@types/node": "@types/node@20.14.10", - "@vitest/expect": "@vitest/expect@2.0.2", - "@vitest/pretty-format": "@vitest/pretty-format@2.0.2", - "@vitest/runner": "@vitest/runner@2.0.2", - "@vitest/snapshot": "@vitest/snapshot@2.0.2", - "@vitest/spy": "@vitest/spy@2.0.2", - "@vitest/utils": "@vitest/utils@2.0.2", - "chai": "chai@5.1.1", - "debug": "debug@4.3.5", - "execa": "execa@8.0.1", - "magic-string": "magic-string@0.30.10", - "pathe": "pathe@1.1.2", - "std-env": "std-env@3.7.0", - "tinybench": "tinybench@2.8.0", - "tinypool": "tinypool@1.0.0", - "tinyrainbow": "tinyrainbow@1.2.0", - "vite": "vite@5.3.3_@types+node@20.14.10", - "vite-node": "vite-node@2.0.2_@types+node@20.14.10", - "why-is-node-running": "why-is-node-running@2.3.0" - } - }, - "wait-port@1.1.0": { - "integrity": "sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==", - "dependencies": { - "chalk": "chalk@4.1.2", - "commander": "commander@9.5.0", - "debug": "debug@4.3.5" - } - }, - "webidl-conversions@4.0.2": { - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dependencies": {} - }, - "whatwg-url@7.1.0": { - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "lodash.sortby@4.7.0", - "tr46": "tr46@1.0.1", - "webidl-conversions": "webidl-conversions@4.0.2" - } - }, - "which@2.0.2": { - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "isexe@2.0.0" - } - }, - "why-is-node-running@2.3.0": { - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dependencies": { - "siginfo": "siginfo@2.0.0", - "stackback": "stackback@0.0.2" - } - }, - "wordwrap@1.0.0": { - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dependencies": {} - }, - "wrap-ansi@7.0.0": { - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "ansi-styles@4.3.0", - "string-width": "string-width@4.2.3", - "strip-ansi": "strip-ansi@6.0.1" - } - }, - "wrap-ansi@8.1.0": { - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "ansi-styles@6.2.1", - "string-width": "string-width@5.1.2", - "strip-ansi": "strip-ansi@7.1.0" - } - }, - "yaml@2.4.5": { - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", - "dependencies": {} - }, - "yocto-queue@1.1.1": { - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", - "dependencies": {} - }, - "zx@8.1.4": { - "integrity": "sha512-QFDYYpnzdpRiJ3dL2102Cw26FpXpWshW4QLTGxiYfIcwdAqg084jRCkK/kuP/NOSkxOjydRwNFG81qzA5r1a6w==", - "dependencies": { - "@types/fs-extra": "@types/fs-extra@11.0.4", - "@types/node": "@types/node@20.14.10" - } - } - } - }, - "remote": {}, - "workspace": { - "dependencies": [ - "npm:mri", - "npm:wait-port", - "npm:zx" - ], - "packageJson": { - "dependencies": [ - "npm:@brillout/release-me@^0.3.9", - "npm:@types/node@^20.14.10", - "npm:@universal-middleware/core@^0.1.1", - "npm:hono@^4.4.13", - "npm:rimraf@^6.0.0", - "npm:tsup@^8.1.0", - "npm:tsx@^4.16.2", - "npm:typescript@^5.5.3", - "npm:vitest@^2.0.2" - ] - } - } -} diff --git a/packages/adapter-hono/package.json b/packages/adapter-hono/package.json index 080a25a..bca75c9 100644 --- a/packages/adapter-hono/package.json +++ b/packages/adapter-hono/package.json @@ -19,7 +19,7 @@ "test": "vitest run", "test:run-hono:node": "tsx tests/entry-hono.ts", "test:run-hono:bun": "bun tests/entry-hono.ts", - "test:run-hono:deno": "deno run --unstable-sloppy-imports -A tests/entry-hono.ts", + "test:run-hono:deno": "deno run --unstable-byonm --unstable-sloppy-imports -A tests/entry-hono.ts", "test:typecheck": "tsc -p tsconfig.json --noEmit", "release": "LANG=en_US release-me patch", "release:minor": "LANG=en_US release-me minor", @@ -29,14 +29,16 @@ "@universal-middleware/core": "^0.1.1" }, "devDependencies": { - "@brillout/release-me": "^0.3.9", + "@brillout/release-me": "^0.4.0", + "@swc/core": "^1.7.11", "@types/node": "^20.14.10", "@universal-middleware/tests": "workspace:*", - "hono": "^4.4.13", + "hono": "^4.5.6", "rimraf": "^6.0.0", - "tsup": "^8.1.0", - "tsx": "^4.16.2", - "typescript": "^5.5.3", - "vitest": "^2.0.2" - } + "tsup": "^8.2.4", + "tsx": "^4.17.0", + "typescript": "^5.5.4", + "vitest": "^2.0.5" + }, + "sideEffects": false } diff --git a/packages/adapter-hono/src/common.ts b/packages/adapter-hono/src/common.ts index 512afa6..baef990 100644 --- a/packages/adapter-hono/src/common.ts +++ b/packages/adapter-hono/src/common.ts @@ -1,52 +1,116 @@ -import type { Context as HonoContext, Handler, MiddlewareHandler } from "hono"; import type { + Context as HonoContext, + Env, + Handler, + MiddlewareHandler, +} from "hono"; +import type { + Get, UniversalHandler, UniversalMiddleware, } from "@universal-middleware/core"; +import { getAdapterRuntime } from "@universal-middleware/core"; + +interface UniversalEnv { + Bindings: Env["Bindings"]; + Variables: Env["Variables"] & Record; +} + +export type HonoHandler = Handler; +export type HonoMiddleware = MiddlewareHandler; export const contextSymbol = Symbol("unContext"); +function getExecutionCtx(honoContext: HonoContext) { + try { + return honoContext.executionCtx; + } catch { + return; + } +} + /** * Creates a request handler to be passed to app.all() or any other route function */ -export function createHandler(handler: UniversalHandler): Handler { - return (honoContext) => { - let context: Universal.Context = honoContext.get(contextSymbol); - if (typeof context !== "object") { - context = {}; - honoContext.set(contextSymbol, context); - } - return handler(honoContext.req.raw, context); +export function createHandler( + handlerFactory: Get, +): Get { + return (...args) => { + const handler = handlerFactory(...args); + + return (honoContext) => { + let context: Universal.Context = honoContext.get(contextSymbol); + if (typeof context !== "object") { + context = {}; + honoContext.set(contextSymbol, context); + } + return handler( + honoContext.req.raw, + context, + getAdapterRuntime( + "other", + {}, + { + env: honoContext.env, + ctx: getExecutionCtx(honoContext), + }, + ), + ); + }; }; } /** * Creates a middleware to be passed to app.use() or any route function */ -export function createMiddleware( - middleware: UniversalMiddleware, -): MiddlewareHandler { - return async (honoContext, next) => { - let context: Universal.Context = honoContext.get(contextSymbol); - if (typeof context !== "object") { - context = {}; - honoContext.set(contextSymbol, context); - } - const response = await middleware(honoContext.req.raw, context); - - if (typeof response === "function") { - await next(); - honoContext.res = await response(honoContext.res); - } else if (typeof response === "object" && "body" in response) { - return response; - } else { - return next(); - } +export function createMiddleware< + T extends unknown[], + InContext extends Universal.Context, + OutContext extends Universal.Context, +>( + middlewareFactory: Get>, +): Get { + return (...args) => { + const middleware = middlewareFactory(...args); + + return async (honoContext, next) => { + let context = honoContext.get(contextSymbol) as InContext; + if (typeof context !== "object") { + context = {} as InContext; + honoContext.set(contextSymbol, context); + } + const response = await middleware( + honoContext.req.raw, + context, + getAdapterRuntime( + "other", + {}, + { + env: honoContext.env, + ctx: getExecutionCtx(honoContext), + }, + ), + ); + + if (typeof response === "function") { + await next(); + honoContext.res = await response(honoContext.res); + } else if (response !== null && typeof response === "object") { + if (response instanceof Response) { + return response; + } + // Update context + honoContext.set(contextSymbol, response); + return next(); + } else { + return next(); + } + }; }; } export function getContext( - honoContext: HonoContext, + honoContext: HonoContext, ): Universal.Context | undefined { return honoContext.get(contextSymbol); } diff --git a/packages/adapter-hono/src/index.ts b/packages/adapter-hono/src/index.ts index 2f74b9c..328a98b 100644 --- a/packages/adapter-hono/src/index.ts +++ b/packages/adapter-hono/src/index.ts @@ -1 +1,7 @@ -export { createHandler, createMiddleware, getContext } from "./common.js"; +export { + createHandler, + createMiddleware, + getContext, + type HonoHandler, + type HonoMiddleware, +} from "./common.js"; diff --git a/packages/adapter-hono/tests/entry-hono.ts b/packages/adapter-hono/tests/entry-hono.ts index 69e9a88..9148e3c 100644 --- a/packages/adapter-hono/tests/entry-hono.ts +++ b/packages/adapter-hono/tests/entry-hono.ts @@ -8,16 +8,19 @@ import { handler, middlewares, } from "@universal-middleware/tests"; +import type { Get, UniversalMiddleware } from "@universal-middleware/core"; const app = new Hono(); // standard Hono middleware app.use(secureHeaders()); -middlewares.forEach((middleware) => app.use(createMiddleware(middleware))); +middlewares.forEach((middleware) => + app.use(createMiddleware(middleware as Get<[], UniversalMiddleware>)()), +); // universal handler -app.get("/", createHandler(handler)); +app.get("/", createHandler(handler)()); const port = args.port ? parseInt(args.port) : 3000; diff --git a/packages/adapter-webroute/CHANGELOG.md b/packages/adapter-webroute/CHANGELOG.md new file mode 100644 index 0000000..9566676 --- /dev/null +++ b/packages/adapter-webroute/CHANGELOG.md @@ -0,0 +1,11 @@ +# 0.1.0 (2024-08-18) + + +### Features + +* complete webroute support ([043298c](https://github.com/magne4000/universal-handler/commit/043298c8a3766159996ed4d02bad538a279a5617)) +* initial support for runtime parameter ([c1ac056](https://github.com/magne4000/universal-handler/commit/c1ac0566193b9492beb0ddcc135a7895319cc02c)) +* webroute adapter ([1cb1080](https://github.com/magne4000/universal-handler/commit/1cb1080c482b84c2890a6002f6b1166a0ac15005)) + + + diff --git a/packages/adapter-webroute/deno.json b/packages/adapter-webroute/deno.json new file mode 100644 index 0000000..81b93a2 --- /dev/null +++ b/packages/adapter-webroute/deno.json @@ -0,0 +1,11 @@ +{ + "imports": { + "@universal-middleware/tests": "../tests/dist", + "@universal-middleware/hono": "../adapter-hono/dist", + "@universal-middleware/core": "../core/dist", + "mri": "npm:mri", + "zx": "npm:zx", + "wait-port": "npm:wait-port" + }, + "lock": false +} diff --git a/packages/adapter-webroute/package.json b/packages/adapter-webroute/package.json new file mode 100644 index 0000000..8a9c63e --- /dev/null +++ b/packages/adapter-webroute/package.json @@ -0,0 +1,47 @@ +{ + "name": "@universal-middleware/webroute", + "version": "0.1.0", + "type": "module", + "description": "Webroute adapter for universal middlewares", + "files": [ + "dist" + ], + "exports": { + ".": "./dist/index.js" + }, + "author": "Joël Charles ", + "repository": "https://github.com/magne4000/universal-handler", + "license": "MIT", + "scripts": { + "build": "rimraf dist && tsup", + "dev": "tsup --watch", + "prepack": "pnpm build", + "test": "vitest run", + "test:run-webroute:node": "tsx tests/entry-webroute.ts", + "test:run-webroute:bun": "bun tests/entry-webroute.ts", + "test:run-webroute:deno": "deno run --unstable-byonm --unstable-sloppy-imports -A tests/entry-webroute.ts", + "test:typecheck": "tsc -p tsconfig.json --noEmit", + "release": "LANG=en_US release-me patch", + "release:minor": "LANG=en_US release-me minor", + "release:commit": "LANG=en_US release-me commit" + }, + "dependencies": { + "@universal-middleware/core": "^0.1.1" + }, + "devDependencies": { + "@brillout/release-me": "^0.4.0", + "@swc/core": "^1.7.11", + "@types/node": "^20.14.10", + "@universal-middleware/hono": "workspace:*", + "@universal-middleware/tests": "workspace:*", + "@webroute/middleware": "^0.9.0", + "@webroute/route": "^0.6.0", + "hono": "^4.5.6", + "rimraf": "^6.0.0", + "tsup": "^8.2.4", + "tsx": "^4.17.0", + "typescript": "^5.5.4", + "vitest": "^2.0.5" + }, + "sideEffects": false +} diff --git a/packages/adapter-webroute/readme.md b/packages/adapter-webroute/readme.md new file mode 100644 index 0000000..1673c73 --- /dev/null +++ b/packages/adapter-webroute/readme.md @@ -0,0 +1,3 @@ +# `@universal-middleware/webroute` + +[Universal Middleware](https://github.com/magne4000/universal-middleware) adapter for [Webroute](https://webroute.vercel.app). diff --git a/packages/adapter-webroute/src/common.ts b/packages/adapter-webroute/src/common.ts new file mode 100644 index 0000000..48fd554 --- /dev/null +++ b/packages/adapter-webroute/src/common.ts @@ -0,0 +1,110 @@ +import type { RequestCtx } from "@webroute/route"; +import type { + Get, + UniversalHandler, + UniversalMiddleware, +} from "@universal-middleware/core"; +import { getAdapterRuntime } from "@universal-middleware/core"; +import { type DataResult, type MiddlewareFn } from "@webroute/middleware"; + +export type WebrouteMiddleware< + InContext extends object = {}, + TResult extends DataResult | void = void, + TParams = unknown, + TQuery = unknown, + TBody = unknown, + THeaders = unknown, + TState extends InContext = InContext, + TProviders = unknown, +> = MiddlewareFn< + TResult, + [ctx: RequestCtx] +>; + +export type WebrouteHandler< + InContext extends object = {}, + TResult extends DataResult | void = void, + TParams = unknown, + TQuery = unknown, + TBody = unknown, + THeaders = unknown, + TState extends InContext = InContext, + TProviders = unknown, +> = WebrouteMiddleware< + InContext, + TResult, + TParams, + TQuery, + TBody, + THeaders, + TState, + TProviders +>; + +/** + * Creates a request handler to be passed to app.all() or any other route function + */ +export function createHandler< + T extends unknown[], + InContext extends Universal.Context, +>( + handlerFactory: Get, +): Get> { + return (...args) => { + const handler = handlerFactory(...args); + + return (request, ctx) => { + const context = initContext(ctx); + return handler(request, context, getAdapterRuntime("other", {})); + }; + }; +} + +type ExtractVoid = T extends U ? T : void; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type MiddlewareFactoryReturnType any> = + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ReturnType extends UniversalMiddleware + ? Awaited>> + : never; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type MiddlewareFactoryDataResult any> = + ExtractVoid, DataResult>; + +/** + * Creates a middleware to be passed to app.use() or any route function + */ +export function createMiddleware< + T extends unknown[], + InContext extends Universal.Context, + OutContext extends Universal.Context, +>( + middlewareFactory: Get>, +): Get< + T, + WebrouteMiddleware< + InContext, + MiddlewareFactoryDataResult + > +> { + return (...args) => { + const middleware = middlewareFactory(...args); + + return ((request, ctx) => { + const context = initContext(ctx); + return middleware(request, context, getAdapterRuntime("other", {})); + }) as WebrouteMiddleware< + InContext, + MiddlewareFactoryDataResult + >; + }; +} + +function initContext( + ctx: RequestCtx, +): Context { + ctx.state ??= {} as Context; + return ctx.state; +} diff --git a/packages/adapter-webroute/src/index.ts b/packages/adapter-webroute/src/index.ts new file mode 100644 index 0000000..12886f0 --- /dev/null +++ b/packages/adapter-webroute/src/index.ts @@ -0,0 +1,7 @@ +export { + createHandler, + createMiddleware, + type MiddlewareFactoryDataResult, + type WebrouteHandler, + type WebrouteMiddleware, +} from "./common.js"; diff --git a/packages/adapter-webroute/tests/entry-webroute.ts b/packages/adapter-webroute/tests/entry-webroute.ts new file mode 100644 index 0000000..3d292b3 --- /dev/null +++ b/packages/adapter-webroute/tests/entry-webroute.ts @@ -0,0 +1,95 @@ +import { createHandler, createMiddleware } from "../src/index.js"; +import { Hono, type MiddlewareHandler } from "hono"; +import { secureHeaders } from "hono/secure-headers"; +import { + args, + bun, + deno, + handler, + middlewares, +} from "@universal-middleware/tests"; +import { route } from "@webroute/route"; +import { createAdapter } from "@webroute/middleware"; + +const app = new Hono(); + +const m1 = middlewares[0]; +const m2 = middlewares[1]; +const m3 = middlewares[2]; + +const router = route() + // `createMiddleware(m1)()` or `m1()` are roughly equivalant (if not using the second parameter). + // The former allows better extraction of typings. + .use(m1()) + .use((_request, ctx) => { + console.log("something BEFORE", ctx.state.something); + }) + .use(createMiddleware(m2)()) + .use(createMiddleware(m3)()) + .use((_request, ctx) => { + console.log("something", ctx.state.something); + console.log("somethingElse", ctx.state.somethingElse); + }) + .handle(createHandler(handler)()); + +// standard Hono middleware +app.use(secureHeaders()); + +const toHono = createAdapter((c, next) => { + return { + async onData(data) { + c.set("state", { ...c.get("state"), ...data }); + next(); + }, + async onEmpty() { + next(); + }, + async onResponse(response) { + return response; + }, + async onResponseHandler(handler) { + await next(); + return handler(c.res); + }, + }; +}); + +// universal handler +app.use( + "*", + toHono((c) => { + return router(c.req.raw); + }), +); + +const port = args.port ? parseInt(args.port) : 3000; + +if (deno) { + // @ts-ignore + Deno.serve( + { + port, + onListen() { + console.log(`Server listening on http://localhost:${port}`); + }, + }, + app.fetch, + ); +} else if (!bun) { + const { serve } = await import("@hono/node-server"); + serve( + { + fetch: app.fetch, + port, + }, + () => { + console.log(`Server listening on http://localhost:${port}`); + }, + ); +} + +// Bun +export default { + port, + fetch: app.fetch, +}; diff --git a/packages/adapter-webroute/tests/webroute.spec.ts b/packages/adapter-webroute/tests/webroute.spec.ts new file mode 100644 index 0000000..5aac7c5 --- /dev/null +++ b/packages/adapter-webroute/tests/webroute.spec.ts @@ -0,0 +1,34 @@ +import { type Run, runTests } from "@universal-middleware/tests"; +import * as vitest from "vitest"; + +let port = 3300; + +const runs: Run[] = [ + // Waiting for fix https://github.com/sinclairnick/webroute/pull/40 + // { + // name: "adapter-webroute: node", + // command: "pnpm run test:run-webroute:node", + // port: port++, + // }, + // { + // name: "adapter-webroute: bun", + // command: "pnpm run test:run-webroute:bun", + // port: port++, + // }, + { + name: "adapter-webroute: deno", + command: "pnpm run test:run-webroute:deno", + port: port++, + }, +]; + +runTests(runs, { + vitest, + test(response) { + // added by hono/secure-headers + vitest + .expect(response.headers.has("cross-origin-opener-policy")) + .toBe(true); + vitest.expect(response.headers.has("x-xss-protection")).toBe(true); + }, +}); diff --git a/packages/adapter-webroute/tsconfig.json b/packages/adapter-webroute/tsconfig.json new file mode 100644 index 0000000..4082f16 --- /dev/null +++ b/packages/adapter-webroute/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/adapter-webroute/tsup.config.ts b/packages/adapter-webroute/tsup.config.ts new file mode 100644 index 0000000..3d7103f --- /dev/null +++ b/packages/adapter-webroute/tsup.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "tsup"; + +export default defineConfig([ + { + entry: ["./src/index.ts"], + format: ["esm"], + platform: "neutral", + target: "es2022", + dts: true, + clean: true, + }, +]); diff --git a/packages/adapter-webroute/vitest.config.ts b/packages/adapter-webroute/vitest.config.ts new file mode 100644 index 0000000..f06d95f --- /dev/null +++ b/packages/adapter-webroute/vitest.config.ts @@ -0,0 +1,4 @@ +/// +import { defineConfig } from "vite"; + +export default defineConfig({}); diff --git a/packages/core/package.json b/packages/core/package.json index fb9536d..5b0247a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -21,10 +21,13 @@ "release:commit": "LANG=en_US release-me commit" }, "devDependencies": { - "@brillout/release-me": "^0.3.9", + "@brillout/release-me": "^0.4.0", + "@swc/core": "^1.7.11", + "@types/bun": "^1.1.6", "@types/node": "^20.14.10", "rimraf": "^6.0.0", - "tsup": "^8.1.0", - "typescript": "^5.5.3" - } + "tsup": "^8.2.4", + "typescript": "^5.5.4" + }, + "sideEffects": false } diff --git a/packages/core/src/adapter.ts b/packages/core/src/adapter.ts new file mode 100644 index 0000000..9218fb0 --- /dev/null +++ b/packages/core/src/adapter.ts @@ -0,0 +1,23 @@ +import type { Adapter, Runtime } from "./types"; +import { getRuntime } from "./runtime"; + +export function getAdapter( + key: K, + args: Omit, "adapter">, +): Adapter { + return { + adapter: key, + ...args, + } as Adapter; +} + +export function getAdapterRuntime( + adapter: K, + adapterArgs: Omit, "adapter">, + runtimeArgs?: Omit, +) { + const a = getAdapter(adapter, adapterArgs); + const r = getRuntime(runtimeArgs); + + return { ...r, ...a }; +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 44e6f36..87cc43a 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,5 +1,3 @@ -export type { - Awaitable, - UniversalHandler, - UniversalMiddleware, -} from "./types.js"; +export type * from "./types.js"; +export * from "./runtime.js"; +export * from "./adapter.js"; diff --git a/packages/core/src/runtime.ts b/packages/core/src/runtime.ts new file mode 100644 index 0000000..0365957 --- /dev/null +++ b/packages/core/src/runtime.ts @@ -0,0 +1,69 @@ +// reference: https://github.com/honojs/hono/blob/8f1680238b1c0550049998586a414b5a1ae2012b/src/helper/adapter/index.ts +import type { Runtime } from "./types"; + +const knownUserAgents: Partial> = { + deno: "Deno", + bun: "Bun", + workerd: "Cloudflare-Workers", + node: "Node.js", +}; + +const _getRuntimeKey = (): Runtime["runtime"] => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const global = globalThis as any; + + // check if the current runtime supports navigator.userAgent + const userAgentSupported = + typeof navigator !== "undefined" && typeof navigator.userAgent === "string"; + + // if supported, check the user agent + if (userAgentSupported) { + for (const [runtimeKey, userAgent] of Object.entries(knownUserAgents)) { + if (checkUserAgentEquals(userAgent)) { + return runtimeKey as Runtime["runtime"]; + } + } + } + + // check if running on Edge Runtime + if (typeof global?.EdgeRuntime === "string") { + return "edge-light"; + } + + // check if running on Fastly + if (global?.fastly !== undefined) { + return "fastly"; + } + + // userAgent isn't supported before Node v21.1.0; so fallback to the old way + if (global?.process?.release?.name === "node") { + return "node"; + } + + // couldn't detect the runtime + return "other"; +}; + +// Cache runtimekey computation +let runtimeKey: Runtime["runtime"] | undefined = undefined; +export const getRuntimeKey = (): Runtime["runtime"] => { + if (runtimeKey === undefined) { + runtimeKey = _getRuntimeKey(); + } + return runtimeKey; +}; + +const checkUserAgentEquals = (platform: string): boolean => { + const userAgent = navigator.userAgent; + + return userAgent.startsWith(platform); +}; + +export function getRuntime(args?: Omit): Runtime { + const key = getRuntimeKey(); + + return { + runtime: key, + ...args, + } as Runtime; +} diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index cca0fcf..8fb1ee3 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -1,15 +1,113 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { IncomingMessage, ServerResponse } from "node:http"; +import type { Server as BunServer } from "bun"; + export type Awaitable = T | Promise; -export interface UniversalMiddleware { +// Runtimes + +export interface CloudflareWorkerdRuntime< + Env extends Record = Record, +> { + runtime: "workerd"; + + /** + * @see {@link https://developers.cloudflare.com/workers/runtime-apis/bindings/} + */ + env?: Env; + /** + * @see {@link https://developers.cloudflare.com/workers/runtime-apis/context/} + */ + ctx?: { + /** + * @see {@link https://developers.cloudflare.com/workers/runtime-apis/context/#waituntil} + */ + waitUntil?: (promise: Promise) => void; + /** + * @see {@link https://developers.cloudflare.com/workers/runtime-apis/context/#passthroughonexception} + */ + passThroughOnException?: () => void; + }; +} + +export interface DenoRuntime { + runtime: "deno"; +} + +export interface NodeRuntime { + runtime: "node"; +} + +export interface BunRuntime { + runtime: "bun"; + + server: BunServer; +} + +export interface VercelEdgeRuntime { + runtime: "edge-light"; +} + +export interface FastlyRuntime { + runtime: "fastly"; +} + +export interface OtherRuntime { + runtime: "other"; +} + +/** + * Inspired by Runtime Keys proposal + * @see {@link https://runtime-keys.proposal.wintercg.org/} + */ +export type Runtime = + | CloudflareWorkerdRuntime + | DenoRuntime + | NodeRuntime + | BunRuntime + | VercelEdgeRuntime + | FastlyRuntime + | OtherRuntime; + +// Adapters + +export interface NodeAdapter { + adapter: "node"; + + req: IncomingMessage; + res: ServerResponse; +} + +export interface OtherAdapter { + adapter: "other"; +} + +export type Adapter = NodeAdapter | OtherAdapter; +export type RuntimeAdapter = Runtime & Adapter; + +export interface UniversalMiddleware< + InContext extends Universal.Context = Universal.Context, + OutContext extends Universal.Context = Universal.Context, +> { ( request: Request, - context: Universal.Context, + context: InContext, + runtime: RuntimeAdapter, ): | Awaitable | Awaitable + | Awaitable | ((response: Response) => Awaitable); } -export interface UniversalHandler { - (request: Request, context: Universal.Context): Awaitable; +export interface UniversalHandler< + InContext extends Universal.Context = Universal.Context, +> { + ( + request: Request, + context: InContext, + runtime: RuntimeAdapter, + ): Awaitable; } + +export type Get = (...args: T) => U; diff --git a/packages/tests/package.json b/packages/tests/package.json index daf46ed..ec85d0a 100644 --- a/packages/tests/package.json +++ b/packages/tests/package.json @@ -24,12 +24,13 @@ "zx": "^8.1.4" }, "devDependencies": { + "@swc/core": "^1.7.11", "@types/node": "^20.14.10", "@universal-middleware/core": "workspace:*", "rimraf": "^6.0.0", - "tsup": "^8.1.0", - "typescript": "^5.5.3", - "vitest": "^2.0.2" + "tsup": "^8.2.4", + "typescript": "^5.5.4", + "vitest": "^2.0.5" }, "peerDependencies": { "vitest": "^2.0.2" diff --git a/packages/tests/src/index.ts b/packages/tests/src/index.ts index 95446c4..7475feb 100644 --- a/packages/tests/src/index.ts +++ b/packages/tests/src/index.ts @@ -1,7 +1,7 @@ import { kill } from "zx"; import { type ChildProcess, spawn } from "node:child_process"; import waitPort from "wait-port"; -import type { UniversalMiddleware } from "@universal-middleware/core"; +import type { Get, UniversalMiddleware } from "@universal-middleware/core"; import type { UniversalHandler } from "../../../playground/types"; import mri from "mri"; @@ -101,17 +101,19 @@ export function runTests(runs: Run[], options: Options) { }); } -export const middlewares: UniversalMiddleware[] = [ +export const middlewares = [ // universal middleware that updates the context synchronously - (_request, context) => { - context.something = { - a: 1, - c: 3, + () => () => { + return { + something: { + a: 1, + c: 3, + }, }; }, // universal middleware that update the response headers asynchronously - (_request, _context) => { - return async (response) => { + () => () => { + return async (response: Response) => { response.headers.set("x-test-value", "universal-middleware"); response.headers.delete("x-should-be-removed"); @@ -121,17 +123,21 @@ export const middlewares: UniversalMiddleware[] = [ }; }, // universal middleware that updates the context asynchronously - async (_request, context) => { + () => async (_request: Request, context: Universal.Context) => { await new Promise((resolve) => setTimeout(resolve, 100)); - context.somethingElse = { - b: 2, + return { + something: { + a: context.something?.a, + }, + somethingElse: { + b: 2, + }, }; - delete context.something!.c; }, -]; +] as const satisfies Get<[], UniversalMiddleware>[]; -export const handler: UniversalHandler = (_request, context) => { +export const handler: Get<[], UniversalHandler> = () => (_request, context) => { return new Response(JSON.stringify(context, null, 2), { headers: { "x-should-be-removed": "universal-middleware", diff --git a/packages/universal-middleware/README.md b/packages/universal-middleware/README.md new file mode 100644 index 0000000..d6af7bc --- /dev/null +++ b/packages/universal-middleware/README.md @@ -0,0 +1,274 @@ +# `universal-middleware` + +Write standard-based middlewares and handlers once, target all supported servers. + +Supports the following adapters: +- [Hono](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-hono) +- [Express](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-express) +- [Hattip](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-hattip) +- [Webroute](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-webroute) +- TODO: fastify +- TODO: h3 +- TODO: elysia + +## Who is this for? +The main goal of this package is for lib authors to be able to write server related logic once, +and target all supported servers. + +Example of possible middleware or handler that can benefit from this lib: +- middleware that modifies HTTP headers +- middleware that modifies some request related context, like an authentication middleware that creates a `user` property for logged-in users +- middleware that applies guard logic upon request, like checking for `Authentication` header before continuing +- handler written following web standard Request/Response + +## Code example + +In this example, we are writing a middleware that adds a `something` property onto the request Context. +Any subsequent middleware or handler will have access to this property. +```ts +// src/middlewares/context.middleware.ts +import type { Get, UniversalMiddleware } from "universal-middleware"; + +const contextMiddleware = ((value) => (request, ctx) => { + // Return the new Context, thus keeping complete type safety + // A less typesafe way to do the same thing would be to `ctx.something = value` and return nothing + return { + ...ctx, + something: value, + }; + // Using `satisfies` to not lose return type +}) satisfies Get<[string], UniversalMiddleware>; + +// export default is mandatory +export default contextMiddleware; +``` + +Here, the build process is handled by [tsup](https://tsup.egoist.dev/) (which mostly relies on [esbuild](https://esbuild.github.io/) under the hood). +It also supports [rollup](https://rollupjs.org/) (and by consequence [vite](https://vitejs.dev/)) +```ts +// tsup.config.ts +import { defineConfig } from "tsup"; +// Also available for rollup with "universal-middleware/rollup" +import universalMiddleware from "universal-middleware/esbuild"; + +export default defineConfig([ + { + entry: { + // all .middleware. or .handler. entry will be managed by `universal-middleware` + "middlewares/context": "./src/middlewares/context.middleware.ts", + }, + format: ["esm"], + platform: "neutral", + target: "es2022", + dts: true, + esbuildPlugins: [universalMiddleware({ + // Only generate files for selected servers. All enabled by default + servers?: ('hono' | 'express' | 'hattip' | 'webroute')[]; + // akin to esbuild `entryNames` for generated "exports" in package.json + serversExportNames?: string; + // akin to ebsuild `entryNames` for generated "exports" in package.json + entryExportNames?: string; + // Disables some warning + ignoreRecommendations?: boolean; + // No auto writing in package.json. All info available to do it manually in `buildEnd` + doNotEditPackageJson?: boolean; + // Generate typings. true by default + dts?: boolean; + // Hook called when bundle is generated + buildEnd?: (report: Report[]) => void | Promise; + })], + esbuildOptions(opts) { + opts.outbase = "src"; + }, + bundle: true, + }, +]); +``` + +Once the build is executed, all target files will be generated into your dist folder, +and your `package.json` will be updated with necessary `exports` config. +```json5 +// package.json +// --> Generates the following "exports" in package.json + +{ + "./middlewares/context-middleware": { + "types": "./dist/middlewares/context.d.ts", + "import": "./dist/middlewares/context.js", + "default": "./dist/middlewares/context.js" + }, + "./middlewares/context-middleware-hono": { + "types": "./dist/middlewares/universal-hono-middleware-context.middleware.d.ts", + "import": "./dist/middlewares/universal-hono-middleware-context.middleware.js", + "default": "./dist/middlewares/universal-hono-middleware-context.middleware.js" + }, + "./middlewares/context-middleware-express": { + "types": "./dist/middlewares/universal-express-middleware-context.middleware.d.ts", + "import": "./dist/middlewares/universal-express-middleware-context.middleware.js", + "default": "./dist/middlewares/universal-express-middleware-context.middleware.js" + }, + "./middlewares/context-middleware-hattip": { + "types": "./dist/middlewares/universal-hattip-middleware-context.middleware.d.ts", + "import": "./dist/middlewares/universal-hattip-middleware-context.middleware.js", + "default": "./dist/middlewares/universal-hattip-middleware-context.middleware.js" + } +} + +// --> Also generates "optionalDependencies" +{ + "@universal-middleware/express": "^0", + "@universal-middleware/hattip": "^0", + "@universal-middleware/webroute": "^0", + "@universal-middleware/hono": "^0" +} +``` + +### For users +Easy usage for supported servers: + +```ts +//hono-entry.ts +import { Hono } from "hono"; +// hattip users would use "some-lib/middlewares/context-middleware-hattip" +// express users would use "some-lib/middlewares/context-middleware-express" +// etc. +import contextMiddleware from "some-lib/middlewares/context-middleware-hono"; + +const app = new Hono(); + +app.use(contextMiddleware("something")); +app.get("/", () => return new Response('ok'))); + +export default app; +``` + +## Supported syntax +### Handler + +Universal Handler compatible with all supported servers. + +```ts +// src/handlers/index.handler.ts +import type { Get, UniversalHandler } from "universal-middleware"; + +const handler: Get<[string], UniversalHandler> = () => (request, ctx) => { + // A handler must ALWAYS return a Response + // Here, we return the Context to the user + return new Response(JSON.stringify(ctx)); +}; + +// export default is mandatory +export default handler; +``` + +### Middleware that updates the Context + +The Context contains data with the same lifespan as a Request. It can be used by middleware to pass any kind of data +to any subsequent middleware or handler. + +```ts +// src/middlewares/context.middleware.ts +import type { Get, UniversalMiddleware } from "universal-middleware"; + +const contextMiddleware = (() => (request, ctx) => { + // The new Context can either be returned, thus keeping complete type safety, or mutated + return { + ...ctx, + // subsequent middlewares and handlers will have access to this property + something: value, + }; + // Using `satisfies` to not lose return type +}) satisfies Get<[string], UniversalMiddleware>; + +// export default is mandatory +export default contextMiddleware; +``` + +#### Using the Context + +Each adapter have its own way to store the Context. +For instance, using Hono, you can either retrieve the Context as usual in other `universal-middleware` middlewares. +Or you can write a simple Hono handler, and retrieve the Context like this: +```ts +// Also exists for others servers, such as "@universal-middleware/express", "@universal-middleware/hattip", etc. +import { getContext } from "@universal-middleware/hono"; +import contextMiddleware from "@my-lib/middlewares/context-middleware-hono"; +import { Hono } from "hono"; + +const app = new Hono(); + +// Update Context +app.use(contextMiddleware("something")); +app.get("/", (honoContext) => { + // retrieve `universal-middleware` Context + const universalContext = getContext(honoContext); + // send it to the user + return new Response(JSON.stringify(universalContext)); +}); + +export default app; +``` + +### Middleware that updates the Response + +Those are usually used to modify the Response headers. + +```ts +// src/middlewares/headers.middleware.ts +import type { Get, UniversalMiddleware } from "universal-middleware"; + +const headersMiddleware = (() => (request, ctx) => { + // This is a Response Handler, and will be executed after a handler or a middleware have returned a Response + return (response) => { + // Add a new header, using previously set Context + response.headers.set("X-Custom-Header", ctx.something ?? "NONE"); + + return response; + } + // Using `satisfies` to not lose return type + // You can specify the type of the Context upon entry +}) satisfies Get<[string], UniversalMiddleware<{ something?: string }>>; + +// export default is mandatory +export default headersMiddleware; +``` + +### Middleware that return an early Response + +Those can be used to guard some routes + +```ts +// src/middlewares/guard.middleware.ts +import type { Get, UniversalMiddleware } from "universal-middleware"; + +const guardMiddleware = (() => (request, ctx) => { + if (!ctx.user) { + return new Response("Unauthorized", { + status: 401 + }); + } + // If a middleware returns nothing, next middleware is automatically executed + + // Using `satisfies` to not lose return type + // You can specify the type of the Context upon entry +}) satisfies Get<[string], UniversalMiddleware<{ user?: string }>>; + +// export default is mandatory +export default guardMiddleware; +``` + +## Adapters specifity +### Hono +TODO + +### Express +TODO + +### Hattip +TODO + +### Webroute +TODO + +## Access runtime specific API +TODO diff --git a/packages/universal-middleware/package.json b/packages/universal-middleware/package.json new file mode 100644 index 0000000..14fb4be --- /dev/null +++ b/packages/universal-middleware/package.json @@ -0,0 +1,96 @@ +{ + "name": "universal-middleware", + "type": "module", + "version": "0.1.0", + "description": "", + "license": "MIT", + "repository": "https://github.com/magne4000/universal-handler", + "bugs": { + "url": "https://github.com/magne4000/universal-handler/issues" + }, + "keywords": [ + "esbuild", + "vite", + "rollup", + "transform", + "universal-middleware" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "default": "./dist/index.js" + }, + "./vite": { + "types": "./dist/rollup.d.ts", + "import": "./dist/rollup.js", + "default": "./dist/rollup.js" + }, + "./rollup": { + "types": "./dist/rollup.d.ts", + "import": "./dist/rollup.js", + "default": "./dist/rollup.js" + }, + "./esbuild": { + "types": "./dist/esbuild.d.ts", + "import": "./dist/esbuild.js", + "default": "./dist/esbuild.js" + } + }, + "module": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "rimraf dist && tsup", + "prepack": "pnpm build", + "test:typecheck": "tsc -p tsconfig.json --noEmit", + "release": "LANG=en_US release-me patch", + "release:minor": "LANG=en_US release-me minor", + "release:commit": "LANG=en_US release-me commit", + "test": "vitest run" + }, + "dependencies": { + "@universal-middleware/core": "^0.1.1", + "@universal-middleware/express": "^0.1.1", + "@universal-middleware/hattip": "^0.1.0", + "@universal-middleware/hono": "^0.1.1", + "@universal-middleware/webroute": "^0.1.0", + "oxc-transform": "^0.24.3", + "package-up": "^5.0.0", + "unplugin": "^1.12.2" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-typescript": "^11.1.6", + "@swc/core": "^1.7.11", + "esbuild": "^0.23.1", + "rimraf": "^6.0.1", + "rollup": "^4.21.0", + "tsup": "^8.2.4", + "typescript": "^5.5.4", + "vite": "^5.4.1", + "vitest": "^2.0.5" + }, + "peerDependencies": { + "@rollup/plugin-node-resolve": "^15", + "esbuild": "*", + "rollup": "^4", + "vite": ">=5" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "@rollup/plugin-node-resolve": { + "optional": true + }, + "vite": { + "optional": true + }, + "esbuild": { + "optional": true + } + } +} diff --git a/packages/universal-middleware/src/esbuild.ts b/packages/universal-middleware/src/esbuild.ts new file mode 100644 index 0000000..695d735 --- /dev/null +++ b/packages/universal-middleware/src/esbuild.ts @@ -0,0 +1,4 @@ +import plugin from "./plugin.js"; +import { createEsbuildPlugin } from "unplugin"; + +export default createEsbuildPlugin(plugin); diff --git a/packages/universal-middleware/src/index.ts b/packages/universal-middleware/src/index.ts new file mode 100644 index 0000000..0526636 --- /dev/null +++ b/packages/universal-middleware/src/index.ts @@ -0,0 +1,8 @@ +import rollup from "./rollup.js"; +import esbuild from "./esbuild.js"; + +export { readAndEditPackageJson } from "./plugin.js"; + +export type * from "@universal-middleware/core"; + +export { rollup, esbuild }; diff --git a/packages/universal-middleware/src/plugin.ts b/packages/universal-middleware/src/plugin.ts new file mode 100644 index 0000000..6df5fe0 --- /dev/null +++ b/packages/universal-middleware/src/plugin.ts @@ -0,0 +1,650 @@ +import { dirname, join, parse, posix, resolve } from "node:path"; +import { type UnpluginFactory } from "unplugin"; +import { packageUp } from "package-up"; +import { mkdir, readFile, writeFile } from "node:fs/promises"; + +export interface Options { + servers?: (typeof defaultWrappers)[number][]; + serversExportNames?: string; + entryExportNames?: string; + ignoreRecommendations?: boolean; + doNotEditPackageJson?: boolean; + dts?: boolean; + buildEnd?: (report: Report[]) => void | Promise; +} + +export interface Report { + in: string; + out: string; + dts?: string; + type: "handler" | "middleware"; + exports: string; +} + +interface BundleInfo { + in: string; + out: string; + dts: string; + id: string; + dir: string; + name: string; + type: "handler" | "middleware"; + exports: string; +} + +const defaultWrappers = ["hono", "express", "hattip", "webroute"] as const; +const namespace = "virtual:universal-middleware"; +const externals = defaultWrappers.map((w) => `@universal-middleware/${w}`); +const versionRange = "^0"; + +function getVirtualInputs( + type: "handler" | "middleware", + handler: string, + wrappers: ReadonlyArray<(typeof defaultWrappers)[number]> = defaultWrappers, +) { + const parsed = parse(handler); + return wrappers.map((server) => ({ + server, + type, + handler, + get value() { + return `${namespace}:${this.server}:${this.type}:${this.handler}`; + }, + get key() { + return join( + parsed.dir, + `universal-${this.server}-${this.type}-${parsed.name}`, + ); + }, + })); +} + +function filterInput(input: string) { + if (input.match(/(^|\.|\/|\\\\)handler\.[cm]?[jt]sx?$/)) { + return "handler"; + } + if (input.match(/(^|\.|\/|\\\\)middleware\.[cm]?[jt]sx?$/)) { + return "middleware"; + } + return null; +} + +function normalizeInput( + input: + | undefined + | string + | string[] + | Record + | { in: string; out: string }[], + options?: Options, +) { + const keys = new Set(); + + function getTuple(key: string, value: string) { + if (keys.has(key)) { + throw new Error(`Conflict on entry ${key}: ${value}`); + } else { + keys.add(key); + } + return [key, value] as const; + } + + if (typeof input === "string") { + const filtered = filterInput(input); + if (filtered) { + const parsed = parse(input); + const tuple = getTuple(join(parsed.dir, parsed.name), input); + return { + [tuple[0]]: tuple[1], + }; + } + } else if (Array.isArray(input)) { + let i = 0; + const res = Object.fromEntries( + input.map((e) => { + if (typeof e === "string") { + if (filterInput(e)) { + i += 1; + } + const parsed = parse(e); + return getTuple(join(parsed.dir, parsed.name), e); + } + return getTuple(e.out, e.in); + }), + ); + + if (!options?.ignoreRecommendations && i >= 2) { + console.warn( + "Prefer using an object for esbuild `entryPoints` instead of an array", + ); + } + + return res; + } else if (input && typeof input === "object") { + return input; + } + return null; +} + +function appendVirtualInputs( + input: Record, + wrappers: ReadonlyArray<(typeof defaultWrappers)[number]> = defaultWrappers, +) { + Object.values(input).forEach((v) => { + const filtered = filterInput(v); + if (filtered) { + const virtualInputs = getVirtualInputs(filtered, v, wrappers); + virtualInputs.forEach((vinput) => { + input[vinput.key] = vinput.value; + }); + } + }); +} + +function applyOutbase(input: Record, outbase: string) { + if (!outbase) return input; + + const re = new RegExp( + `^(${outbase.replaceAll("\\\\", "/")}|${outbase.replaceAll("/", "\\\\")})/?`, + "gu", + ); + + return Object.keys(input).reduce( + (acc, key) => { + acc[key.replace(re, "")] = input[key]; + return acc; + }, + {} as Record, + ); +} + +function load(id: string, resolve?: (handler: string, type: string) => string) { + const [, , server, type, handler] = id.split(":"); + + const fn = type === "handler" ? "createHandler" : "createMiddleware"; + const code = `import { ${fn} } from "@universal-middleware/${server}"; +import ${type} from "${resolve ? resolve(handler, type) : handler}"; +export default ${fn}(${type}); +`; + return { code }; +} + +const typesByServer: Record< + (typeof defaultWrappers)[number], + { + middleware: string; + handler: string; + selfImports?: string[]; + outContext?: (type: string) => string; + genericParameters?: string; + } +> = { + hono: { + middleware: "HonoMiddleware", + handler: "HonoHandler", + }, + express: { + middleware: "NodeMiddleware", + handler: "NodeHandler", + }, + hattip: { + middleware: "HattipMiddleware", + handler: "HattipHandler", + }, + webroute: { + middleware: "WebrouteMiddleware", + handler: "WebrouteHandler", + selfImports: ["type MiddlewareFactoryDataResult"], + outContext: (type) => `MiddlewareFactoryDataResult`, + genericParameters: + "", + }, +}; + +function loadDts( + id: string, + resolve?: (handler: string, type: string) => string, +) { + const [, , server, type, handler] = id.split(":"); + + const fn = type === "handler" ? "createHandler" : "createMiddleware"; + const info = typesByServer[server as (typeof defaultWrappers)[number]]; + const t = info[type as "middleware" | "handler"]; + const selfImports = [fn, `type ${t}`, ...(info.selfImports ?? [])]; + const code = `import { type UniversalMiddleware } from 'universal-middleware'; +import { ${selfImports.join(", ")} } from "@universal-middleware/${server}"; +import ${type} from "${resolve ? resolve(handler, type) : handler}"; +type ExtractT = T extends (...args: infer X) => any ? X : never; +type ExtractInContext = T extends (...args: any[]) => UniversalMiddleware ? X : {}; +export type InContext = ExtractInContext; +export type OutContext = ${info.outContext?.(type) ?? "unknown"}; +export default ${fn}(${type}) as (...args: ExtractT) => ${t}${info.genericParameters ?? ""}; +`; + + return { code }; +} + +function findDuplicateReports(reports: Report[]): Map { + const exportCounts: Record = {}; + const duplicates = new Map(); + + // Count occurrences of each 'exports' value + reports.forEach((report) => { + exportCounts[report.exports] = (exportCounts[report.exports] || 0) + 1; + }); + + // Collect reports that have duplicates + reports.forEach((report) => { + if (exportCounts[report.exports] > 1) { + if (!duplicates.has(report.exports)) { + duplicates.set(report.exports, []); + } + duplicates.get(report.exports)!.push(report); + } + }); + + return duplicates; +} + +function formatDuplicatesForErrorMessage(duplicates: Map) { + let formattedMessage = "The following files have overlapping exports:\n"; + + duplicates.forEach((reports, exportValue) => { + formattedMessage += `exports: ${exportValue}\n`; + reports.forEach((report) => { + formattedMessage += ` in: ${report.in}, out: ${report.out}\n`; + }); + }); + + formattedMessage += + "Make sure you are using esbuild `entryPoints` object syntax or that `serversExportNames` option contains [dir]."; + + return formattedMessage; +} + +function genBundleInfo( + input: Record, + findDest: (path: string) => string, +): Record { + const entries = Object.entries(input); + + return Object.fromEntries( + entries.map(([k, v]) => { + const dest = findDest(v); + const parsed = parse(dest!); + return [ + v, + { + in: v, + out: dest!, + dts: dest!.replace(/\.js$/, ".d.ts"), + id: k, + dir: parsed.dir, + name: parsed.name, + type: filterInput(v)! as "handler" | "middleware", + exports: "", + }, + ]; + }), + ); +} + +function fixBundleExports( + bundle: Record, + options: { entryExportNames: string; serversExportNames: string }, +) { + Object.entries(bundle).forEach(([k, v]) => { + if (!k.startsWith(namespace)) { + v.exports = + "./" + + posix + .normalize( + options.entryExportNames + .replace("[dir]", v.dir) + .replace("[name]", v.name) + .replace("[type]", v.type), + ) + .replaceAll("\\", "/"); + } + }); + + Object.entries(bundle).forEach(([k, v]) => { + if (k.startsWith(namespace)) { + const [, , server, type, handler] = k.split(":"); + v.exports = + "./" + + posix + .normalize( + options.serversExportNames + .replace("[name]", bundle[handler].name) + .replace("[dir]", bundle[handler].dir) + .replace("[type]", type) + .replace("[server]", server), + ) + .replaceAll("\\", "/"); + } + }); + + return bundle; +} + +async function generateDts(content: string, outFile: string) { + const { isolatedDeclaration } = await import("oxc-transform"); + + const code = isolatedDeclaration("file.ts", content); + + await mkdir(dirname(outFile), { recursive: true }); + + await writeFile(outFile, code.sourceText); +} + +async function genDts(bundle: Record, options?: Options) { + if (options?.dts === false) return; + + for (const value of Object.values(bundle)) { + if (!value.in.startsWith(namespace)) continue; + + await generateDts( + loadDts(value.in, (handler) => + posix.relative(value.dts, bundle[handler].dts).replace(/^\.\./, "."), + ).code, + value.dts, + ); + } +} + +function genReport(bundle: Record, options?: Options) { + const reports = Object.values(bundle).reduce((acc, curr) => { + const report: Report = { + in: curr.in, + out: curr.out, + type: curr.type, + exports: curr.exports, + }; + + if (options?.dts !== false) { + report.dts = curr.dts; + } + + acc.push(report); + + return acc; + }, [] as Report[]); + + const duplicates = findDuplicateReports(reports); + + if (duplicates.size > 0) { + const message = formatDuplicatesForErrorMessage(duplicates); + throw new Error(message); + } + + return reports; +} + +export async function readAndEditPackageJson(reports: Report[]) { + const packageJsonPath = await packageUp(); + + if (!packageJsonPath) { + throw new Error("Cannot find package.json"); + } + + const packageJson = JSON.parse(await readFile(packageJsonPath, "utf8")); + + packageJson.optionalDependencies ??= {}; + for (const external of externals) { + packageJson.optionalDependencies[external] = versionRange; + } + + packageJson.exports ??= {}; + + for (const report of reports) { + // No CJS support + packageJson.exports[report.exports] = { + types: report.dts ? "./" + report.dts : undefined, + import: "./" + report.out, + default: "./" + report.out, + }; + } + + return { + path: packageJsonPath, + packageJson, + }; +} + +const universalMiddleware: UnpluginFactory = ( + options?: Options, +) => { + const serversExportNames = + options?.serversExportNames ?? "./[dir]/[name]-[type]-[server]"; + const entryExportNames = options?.entryExportNames ?? "./[dir]/[name]-[type]"; + + let normalizedInput: Record | null = null; + + return { + name: namespace, + enforce: "post", + rollup: { + resolveId(id) { + if (id.startsWith(namespace) || filterInput(id)) { + return id; + } + }, + + options(opts) { + normalizedInput = normalizeInput(opts.input, options); + if (normalizedInput) { + opts.input = normalizedInput; + appendVirtualInputs(opts.input, options?.servers); + + if (typeof opts.external === "function") { + const orig = opts.external; + opts.external = (id, parentId, isResolved) => { + if (externals.includes(id)) return true; + return orig(id, parentId, isResolved); + }; + } else if (Array.isArray(opts.external)) { + opts.external = [...opts.external, ...externals]; + } else if (opts.external) { + opts.external = [opts.external, ...externals]; + } else { + opts.external = [...externals]; + } + + return opts; + } + }, + async generateBundle(opts, bundle) { + if (!normalizedInput) return; + + const out = opts.dir ?? "dist"; + const outputs = Object.entries(bundle); + + let mapping = genBundleInfo(normalizedInput, (cleanV) => { + const found = outputs.find(([, value]) => { + if (value.type === "chunk" && value.isEntry) { + const cleanEntry = value.facadeModuleId!; + return ( + posix.relative(cleanEntry, cleanV) === "" || + posix.relative(cleanEntry, namespace + ":" + cleanV) === "" + ); + } + + return false; + })?.[0]; + + if (!found) { + throw new Error("Error occured while generating bundle info"); + } + + return found; + }); + + mapping = fixBundleExports(mapping, { + serversExportNames, + entryExportNames, + }); + + // Add dist folder to `out` and `dts` + Object.values(mapping).forEach((v) => { + v.out = join(out, v.out); + v.dts = join(out, v.dts); + }); + + await genDts(mapping, options); + + const report = genReport(mapping); + + if (!options?.doNotEditPackageJson) { + const { path, packageJson } = await readAndEditPackageJson(report); + await writeFile(path, JSON.stringify(packageJson, undefined, 2)); + } + + await options?.buildEnd?.(report); + }, + }, + + esbuild: { + setup(builder) { + if (builder.initialOptions.bundle !== true) { + throw new Error( + "`bundle` options must be `true` for universal-middleware to work properly", + ); + } + + if (!options?.ignoreRecommendations) { + if ( + builder.initialOptions.entryNames && + !builder.initialOptions.entryNames.includes("[hash]") && + !builder.initialOptions.entryNames.includes("[dir]") + ) { + console.warn( + "esbuild config specifies `entryNames` without [hash] or [dir]. This could lead to missing files", + ); + } + if (!builder.initialOptions.splitting) { + console.warn( + "enable esbuild `splitting` option to reduce bundle size", + ); + } + } + + builder.initialOptions.metafile = true; + + if (builder.initialOptions.bundle) { + builder.initialOptions.external = [ + ...(builder.initialOptions.external ?? []), + ...externals, + ]; + } + + const normalizedInput = normalizeInput( + builder.initialOptions.entryPoints, + ); + + if (!normalizedInput) return; + + const outbase = builder.initialOptions.outbase ?? ""; + const outdir = builder.initialOptions.outdir ?? "dist"; + + builder.initialOptions.entryPoints = normalizedInput; + appendVirtualInputs( + builder.initialOptions.entryPoints, + options?.servers, + ); + builder.initialOptions.entryPoints = applyOutbase( + builder.initialOptions.entryPoints, + outbase, + ); + + builder.onResolve( + { filter: /^virtual:universal-middleware/ }, + (args) => { + // console.log("onResolve:virtual", args); + return { + path: args.path, + namespace: namespace, + pluginData: { + resolveDir: args.resolveDir, + }, + }; + }, + ); + + builder.onResolve( + { filter: /(^|\.|\/|\\\\)(handler|middleware)\./ }, + (args) => { + // console.log("onResolve:?", args); + return { + path: resolve(args.path), + }; + }, + ); + + builder.onLoad({ filter: /.*/, namespace: namespace }, async (args) => { + // console.log("onLoad", args); + const { code } = load(args.path); + + return { + contents: code, + resolveDir: args.pluginData.resolveDir, + loader: "js", + }; + }); + + builder.onEnd(async (result) => { + const outputs = Object.entries(result.metafile!.outputs); + + let mapping = genBundleInfo(normalizedInput, (cleanV) => { + const found = outputs.find(([, value]) => { + if (value.entryPoint) { + const cleanEntry = value.entryPoint; + return ( + posix.relative(cleanEntry, cleanV) === "" || + posix.relative(cleanEntry, namespace + ":" + cleanV) === "" + ); + } + + return false; + })?.[0]; + + if (!found) { + throw new Error("Error occured while generating bundle info"); + } + + return found; + }); + + mapping = fixBundleExports(mapping, { + serversExportNames, + entryExportNames, + }); + + // Remove dist folder from `exports` + Object.values(mapping).forEach( + (v) => (v.exports = "./" + posix.relative(outdir, v.exports)), + ); + + await genDts(mapping, options); + + const report = genReport(mapping); + + if (!options?.doNotEditPackageJson) { + const { path, packageJson } = await readAndEditPackageJson(report); + await writeFile(path, JSON.stringify(packageJson, undefined, 2)); + } + + await options?.buildEnd?.(report); + }); + }, + }, + + loadInclude(id) { + return id.startsWith(namespace); + }, + + load, + }; +}; + +export default universalMiddleware; diff --git a/packages/universal-middleware/src/rollup.ts b/packages/universal-middleware/src/rollup.ts new file mode 100644 index 0000000..0db65e5 --- /dev/null +++ b/packages/universal-middleware/src/rollup.ts @@ -0,0 +1,4 @@ +import plugin from "./plugin.js"; +import { createRollupPlugin } from "unplugin"; + +export default createRollupPlugin(plugin); diff --git a/packages/universal-middleware/test/esbuild.test.ts b/packages/universal-middleware/test/esbuild.test.ts new file mode 100644 index 0000000..2670a60 --- /dev/null +++ b/packages/universal-middleware/test/esbuild.test.ts @@ -0,0 +1,412 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import { describe, expect, it } from "vitest"; +import { build, type BuildResult } from "esbuild"; +import plugin from "../src/esbuild"; +import { join } from "node:path"; + +const adapters = ["hono", "express", "hattip", "webroute"] as const; + +describe("esbuild", () => { + it("generates all server files (in/out input)", async () => { + const entry = "test/files/folder1/handler.ts"; + const result = await build({ + entryPoints: [{ out: "handler", in: entry }], + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + buildEnd(report) { + expect(report).toHaveLength(expectNbOutput(1)); + const exports = report.map((r) => r.exports); + + expect(exports).toContain("./handler-handler"); + + for (const adapter of adapters) { + expect(exports).toContain(`./handler-handler-${adapter}`); + } + }, + }), + ], + outdir: "dist", + write: false, + metafile: true, + bundle: true, + platform: "neutral", + format: "esm", + target: "es2022", + splitting: true, + }); + + expect(result.errors).toHaveLength(0); + expect( + result.outputFiles.filter( + (f) => !f.path.includes(join("dist", "chunk-")), + ), + ).toHaveLength(expectNbOutput(1)); + + expect(findOutput(result, entry)).toSatisfy((s: string) => + s.startsWith("dist/handler"), + ); + + testEsbuildOutput(result, "handler", entry); + }); + + it("generates all server files (object input)", async () => { + const entry1 = "test/files/folder1/handler.ts"; + const entry2 = "test/files/middleware.ts"; + const result = await build({ + entryPoints: { + "handlers/one": entry1, + middleware: entry2, + }, + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + buildEnd(report) { + expect(report).toHaveLength(expectNbOutput(2)); + const exports = report.map((r) => r.exports); + + expect(exports).toContain("./handlers/one-handler"); + expect(exports).toContain("./middleware-middleware"); + for (const adapter of adapters) { + expect(exports).toContain(`./handlers/one-handler-${adapter}`); + expect(exports).toContain(`./middleware-middleware-${adapter}`); + } + }, + }), + ], + outdir: "dist", + write: false, + metafile: true, + bundle: true, + platform: "neutral", + format: "esm", + target: "es2022", + splitting: true, + }); + + expect(result.errors).toHaveLength(0); + expect( + result.outputFiles.filter( + (f) => !f.path.includes(join("dist", "chunk-")), + ), + ).toHaveLength(expectNbOutput(2)); + + expect(findOutput(result, entry1)).toSatisfy((s: string) => + s.startsWith("dist/handlers/one"), + ); + expect(findOutput(result, entry2)).toSatisfy((s: string) => + s.startsWith("dist/middleware"), + ); + + testEsbuildOutput(result, "handler", entry1); + testEsbuildOutput(result, "middleware", entry2); + }); + + it("generates all server files (array input)", async () => { + const entry1 = "test/files/folder1/handler.ts"; + const entry2 = "test/files/middleware.ts"; + const result = await build({ + entryPoints: [entry1, entry2], + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + buildEnd(report) { + expect(report).toHaveLength(expectNbOutput(2)); + const exports = report.map((r) => r.exports); + + expect(exports).toContain("./test/files/folder1/handler-handler"); + expect(exports).toContain("./test/files/middleware-middleware"); + for (const adapter of adapters) { + expect(exports).toContain( + `./test/files/folder1/handler-handler-${adapter}`, + ); + expect(exports).toContain( + `./test/files/middleware-middleware-${adapter}`, + ); + } + }, + }), + ], + outdir: "dist", + write: false, + metafile: true, + bundle: true, + platform: "neutral", + format: "esm", + target: "es2022", + splitting: true, + }); + + expect(result.errors).toHaveLength(0); + expect( + result.outputFiles.filter( + (f) => !f.path.includes(join("dist", "chunk-")), + ), + ).toHaveLength(expectNbOutput(2)); + + expect(findOutput(result, entry1)).toSatisfy((s: string) => + s.startsWith("dist/test/files/folder1/handler"), + ); + expect(findOutput(result, entry2)).toSatisfy((s: string) => + s.startsWith("dist/test/files/middleware"), + ); + + testEsbuildOutput(result, "handler", entry1); + testEsbuildOutput(result, "middleware", entry2); + }); + + it("generates all server files (multiple handlers)", async () => { + const entry1 = "test/files/folder1/handler.ts"; + const entry2 = "test/files/folder2/handler.ts"; + const result = await build({ + entryPoints: [entry1, entry2], + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + buildEnd(report) { + expect(report).toHaveLength(expectNbOutput(2)); + const exports = report.map((r) => r.exports); + + expect(exports).toContain("./test/files/folder1/handler-handler"); + expect(exports).toContain("./test/files/folder2/handler-handler"); + for (const adapter of adapters) { + expect(exports).toContain( + `./test/files/folder1/handler-handler-${adapter}`, + ); + expect(exports).toContain( + `./test/files/folder2/handler-handler-${adapter}`, + ); + } + }, + }), + ], + outdir: "dist", + write: false, + metafile: true, + bundle: true, + platform: "neutral", + format: "esm", + target: "es2022", + splitting: true, + }); + + expect(result.errors).toHaveLength(0); + expect( + result.outputFiles.filter( + (f) => !f.path.includes(join("dist", "chunk-")), + ), + ).toHaveLength(expectNbOutput(2)); + + expect(findOutput(result, entry1)).toSatisfy((s: string) => + s.startsWith("dist/test/files/folder1/handler"), + ); + expect(findOutput(result, entry2)).toSatisfy((s: string) => + s.startsWith("dist/test/files/folder2/handler"), + ); + + testEsbuildOutput(result, "handler", entry1); + testEsbuildOutput(result, "handler", entry2); + }); + + it("respects outbase", async () => { + const entry1 = "test/files/folder1/handler.ts"; + const entry2 = "test/files/folder2/handler.ts"; + const result = await build({ + entryPoints: [entry1, entry2], + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + buildEnd(report) { + expect(report).toHaveLength(expectNbOutput(2)); + const exports = report.map((r) => r.exports); + + expect(exports).toContain("./folder1/handler-handler"); + expect(exports).toContain("./folder2/handler-handler"); + + for (const adapter of adapters) { + expect(exports).toContain(`./folder1/handler-handler-${adapter}`); + expect(exports).toContain(`./folder2/handler-handler-${adapter}`); + } + }, + }), + ], + outdir: "dist", + outbase: "test/files", + write: false, + metafile: true, + bundle: true, + platform: "neutral", + format: "esm", + target: "es2022", + splitting: true, + }); + + expect(result.errors).toHaveLength(0); + expect( + result.outputFiles.filter( + (f) => !f.path.includes(join("dist", "chunk-")), + ), + ).toHaveLength(expectNbOutput(2)); + + expect(findOutput(result, entry1)).toSatisfy((s: string) => + s.startsWith("dist/folder1/handler"), + ); + expect(findOutput(result, entry2)).toSatisfy((s: string) => + s.startsWith("dist/folder2/handler"), + ); + + testEsbuildOutput(result, "handler", entry1); + testEsbuildOutput(result, "handler", entry2); + }); + + it("generates selected server files", async () => { + const entry1 = "test/files/folder1/handler.ts"; + const entry2 = "test/files/folder2/handler.ts"; + const result = await build({ + entryPoints: [entry1, entry2], + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + servers: ["hono"], + buildEnd(report) { + expect(report).toHaveLength(4); + const exports = report.map((r) => r.exports); + + expect(exports).toContain("./test/files/folder1/handler-handler"); + expect(exports).toContain("./test/files/folder2/handler-handler"); + expect(exports).toContain( + "./test/files/folder1/handler-handler-hono", + ); + expect(exports).toContain( + "./test/files/folder2/handler-handler-hono", + ); + }, + }), + ], + outdir: "dist", + write: false, + metafile: true, + bundle: true, + platform: "neutral", + format: "esm", + target: "es2022", + splitting: true, + }); + + expect(result.errors).toHaveLength(0); + expect( + result.outputFiles.filter( + (f) => !f.path.includes(join("dist", "chunk-")), + ), + ).toHaveLength(4); + + expect(findOutput(result, entry1)).toSatisfy((s: string) => + s.startsWith("dist/test/files/folder1/handler"), + ); + expect(findOutput(result, entry2)).toSatisfy((s: string) => + s.startsWith("dist/test/files/folder2/handler"), + ); + }); + + it("fails when bundle is not true", async () => { + const entry1 = "test/files/folder1/handler.ts"; + const entry2 = "test/files/folder2/handler.ts"; + await expect( + build({ + entryPoints: [entry1, entry2], + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + }), + ], + outdir: "dist", + write: false, + metafile: true, + platform: "neutral", + format: "esm", + target: "es2022", + }), + ).rejects.toThrow("bundle"); + }); + + it("fails when exports overlap", async () => { + const entry1 = "test/files/folder1/handler.ts"; + const entry2 = "test/files/folder2/handler.ts"; + await expect( + build({ + entryPoints: [entry1, entry2], + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + serversExportNames: "[name]-[type]-[server]", + }), + ], + outdir: "dist", + bundle: true, + write: false, + metafile: true, + platform: "neutral", + format: "esm", + target: "es2022", + }), + ).rejects.toThrow("The following files have overlapping exports"); + }); +}); + +function findOutput( + result: BuildResult<{ metafile: true; write: false }>, + entry: string, +) { + return Object.entries(result.metafile.outputs).find( + ([, value]) => value.entryPoint === entry, + )?.[0]; +} + +function testEsbuildHandler( + result: BuildResult<{ metafile: true; write: false }>, + type: "handler" | "middleware", + server: string, + f: string, +) { + const output = findOutput( + result, + `virtual:universal-middleware:virtual:universal-middleware:${server}:${type}:${f}`, + ); + expect(output).toBeTruthy(); + + const file = result.outputFiles.find((f) => + f.path.includes(`universal-${server}-${type}`), + ); + if (type === "handler") { + expect(file?.text).toContain( + `import { createHandler } from "@universal-middleware/${server}"`, + ); + } else { + expect(file?.text).toContain( + `import { createMiddleware } from "@universal-middleware/${server}"`, + ); + } +} + +function testEsbuildOutput( + result: BuildResult<{ metafile: true; write: false }>, + type: "handler" | "middleware", + file: string, +) { + for (const adapter of adapters) { + testEsbuildHandler(result, type, adapter, file); + } +} + +function expectNbOutput(i: number) { + return i * (adapters.length + 1); +} diff --git a/packages/universal-middleware/test/files/dependency.ts b/packages/universal-middleware/test/files/dependency.ts new file mode 100644 index 0000000..210b03b --- /dev/null +++ b/packages/universal-middleware/test/files/dependency.ts @@ -0,0 +1 @@ +export default "DEPENDENCY"; diff --git a/packages/universal-middleware/test/files/folder1/handler.ts b/packages/universal-middleware/test/files/folder1/handler.ts new file mode 100644 index 0000000..1d03c1f --- /dev/null +++ b/packages/universal-middleware/test/files/folder1/handler.ts @@ -0,0 +1,3 @@ +import dependency from "../dependency.js"; + +export default dependency; diff --git a/packages/universal-middleware/test/files/folder2/handler.ts b/packages/universal-middleware/test/files/folder2/handler.ts new file mode 100644 index 0000000..1d03c1f --- /dev/null +++ b/packages/universal-middleware/test/files/folder2/handler.ts @@ -0,0 +1,3 @@ +import dependency from "../dependency.js"; + +export default dependency; diff --git a/packages/universal-middleware/test/files/middleware.ts b/packages/universal-middleware/test/files/middleware.ts new file mode 100644 index 0000000..ed50652 --- /dev/null +++ b/packages/universal-middleware/test/files/middleware.ts @@ -0,0 +1 @@ +export default "MIDDLEWARE"; diff --git a/packages/universal-middleware/test/rollup.test.ts b/packages/universal-middleware/test/rollup.test.ts new file mode 100644 index 0000000..6bec4fa --- /dev/null +++ b/packages/universal-middleware/test/rollup.test.ts @@ -0,0 +1,330 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import { describe, expect, it } from "vitest"; +import { type OutputChunk, rollup, type RollupOutput } from "rollup"; +import { nodeResolve } from "@rollup/plugin-node-resolve"; +import typescript from "@rollup/plugin-typescript"; +import plugin from "../src/rollup"; +import { join, parse } from "node:path"; + +const adapters = ["hono", "express", "hattip", "webroute"] as const; + +describe("rollup", () => { + it("generates all server files (string input)", async () => { + const entry = "test/files/folder1/handler.ts"; + const result = await rollup({ + input: entry, + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + buildEnd(report) { + expect(report).toHaveLength(expectNbOutput(1)); + const exports = report.map((r) => r.exports); + + expect(exports).toContain("./test/files/folder1/handler-handler"); + + for (const adapter of adapters) { + expect(exports).toContain( + `./test/files/folder1/handler-handler-${adapter}`, + ); + } + }, + }), + nodeResolve(), + typescript({ + sourceMap: false, + }), + ], + onwarn(warning) { + throw new Error(warning.message); + }, + }); + + const gen = await result.generate({}); + + expect( + gen.output.filter((f) => f.type === "chunk" && f.isEntry), + ).toHaveLength(expectNbOutput(1)); + + const handler = gen.output.find((f: any) => f.facadeModuleId === entry) as + | OutputChunk + | undefined; + expect(handler?.name).toEqual(join("test", "files", "folder1", "handler")); + + testRollupOutput(gen, "handler", entry); + }); + + it("generates all server files (object input)", async () => { + const entry1 = "test/files/folder1/handler.ts"; + const entry2 = "test/files/middleware.ts"; + const result = await rollup({ + input: { + h: entry1, + m: entry2, + }, + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + buildEnd(report) { + expect(report).toHaveLength(expectNbOutput(2)); + const exports = report.map((r) => r.exports); + + expect(exports).toContain("./h-handler"); + expect(exports).toContain("./m-middleware"); + for (const adapter of adapters) { + expect(exports).toContain(`./h-handler-${adapter}`); + expect(exports).toContain(`./m-middleware-${adapter}`); + } + }, + }), + nodeResolve(), + typescript({ + sourceMap: false, + }), + ], + onwarn(warning) { + throw new Error(warning.message); + }, + }); + + const gen = await result.generate({}); + + expect( + gen.output.filter((f) => f.type === "chunk" && f.isEntry), + ).toHaveLength(expectNbOutput(2)); + + const handler = gen.output.find((f: any) => f.facadeModuleId === entry1) as + | OutputChunk + | undefined; + expect(handler?.name).toEqual("h"); + + const middleware = gen.output.find( + (f: any) => f.facadeModuleId === entry2, + ) as OutputChunk | undefined; + expect(middleware?.name).toEqual("m"); + + testRollupOutput(gen, "handler", entry1); + testRollupOutput(gen, "middleware", entry2); + }); + + it("generates all server files (array input)", async () => { + const entry1 = "test/files/folder1/handler.ts"; + const entry2 = "test/files/middleware.ts"; + const result = await rollup({ + input: [entry1, entry2], + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + buildEnd(report) { + expect(report).toHaveLength(expectNbOutput(2)); + const exports = report.map((r) => r.exports); + + expect(exports).toContain("./test/files/folder1/handler-handler"); + expect(exports).toContain("./test/files/middleware-middleware"); + for (const adapter of adapters) { + expect(exports).toContain( + `./test/files/folder1/handler-handler-${adapter}`, + ); + expect(exports).toContain( + `./test/files/middleware-middleware-${adapter}`, + ); + } + }, + }), + nodeResolve(), + typescript({ + sourceMap: false, + }), + ], + onwarn(warning) { + throw new Error(warning.message); + }, + }); + + const gen = await result.generate({}); + + expect( + gen.output.filter((f) => f.type === "chunk" && f.isEntry), + ).toHaveLength(expectNbOutput(2)); + + const handler = gen.output.find((f: any) => f.facadeModuleId === entry1) as + | OutputChunk + | undefined; + expect(handler?.name).toEqual(join("test", "files", "folder1", "handler")); + + const middleware = gen.output.find( + (f: any) => f.facadeModuleId === entry2, + ) as OutputChunk | undefined; + expect(middleware?.name).toEqual(join("test", "files", "middleware")); + + testRollupOutput(gen, "handler", entry1); + testRollupOutput(gen, "middleware", entry2); + }); + + it("generates all server files (multiple handlers)", async () => { + const entry1 = "test/files/folder1/handler.ts"; + const entry2 = "test/files/folder2/handler.ts"; + const result = await rollup({ + input: [entry1, entry2], + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + buildEnd(report) { + expect(report).toHaveLength(expectNbOutput(2)); + const exports = report.map((r) => r.exports); + + expect(exports).toContain("./test/files/folder1/handler-handler"); + expect(exports).toContain("./test/files/folder2/handler-handler"); + for (const adapter of adapters) { + expect(exports).toContain( + `./test/files/folder1/handler-handler-${adapter}`, + ); + expect(exports).toContain( + `./test/files/folder2/handler-handler-${adapter}`, + ); + } + }, + }), + nodeResolve(), + typescript({ + sourceMap: false, + }), + ], + onwarn(warning) { + throw new Error(warning.message); + }, + }); + + const gen = await result.generate({}); + + expect( + gen.output.filter((f) => f.type === "chunk" && f.isEntry), + ).toHaveLength(expectNbOutput(2)); + + const handler1 = gen.output.find( + (f: any) => f.facadeModuleId === entry1, + ) as OutputChunk | undefined; + expect(handler1?.name).toEqual(join("test", "files", "folder1", "handler")); + + const handler2 = gen.output.find( + (f: any) => f.facadeModuleId === entry2, + ) as OutputChunk | undefined; + expect(handler2?.name).toEqual(join("test", "files", "folder2", "handler")); + + testRollupOutput(gen, "handler", entry1); + testRollupOutput(gen, "handler", entry2); + }); + + it("generates selected server files", async () => { + const entry1 = "test/files/folder1/handler.ts"; + const entry2 = "test/files/folder2/handler.ts"; + const result = await rollup({ + input: [entry1, entry2], + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + servers: ["hono"], + buildEnd(report) { + expect(report).toHaveLength(4); + const exports = report.map((r) => r.exports); + + expect(exports).toContain("./test/files/folder1/handler-handler"); + expect(exports).toContain("./test/files/folder2/handler-handler"); + expect(exports).toContain( + "./test/files/folder1/handler-handler-hono", + ); + expect(exports).toContain( + "./test/files/folder2/handler-handler-hono", + ); + }, + }), + nodeResolve(), + typescript({ + sourceMap: false, + }), + ], + onwarn(warning) { + throw new Error(warning.message); + }, + }); + + const gen = await result.generate({}); + + expect( + gen.output.filter((f) => f.type === "chunk" && f.isEntry), + ).toHaveLength(4); + + const handler1 = gen.output.find( + (f: any) => f.facadeModuleId === entry1, + ) as OutputChunk | undefined; + expect(handler1?.name).toEqual(join("test", "files", "folder1", "handler")); + + const handler2 = gen.output.find( + (f: any) => f.facadeModuleId === entry2, + ) as OutputChunk | undefined; + expect(handler2?.name).toEqual(join("test", "files", "folder2", "handler")); + }); + + it("fails when exports overlap", async () => { + const entry1 = "test/files/folder1/handler.ts"; + const entry2 = "test/files/folder2/handler.ts"; + + const result = await rollup({ + input: [entry1, entry2], + plugins: [ + plugin({ + doNotEditPackageJson: true, + dts: false, + serversExportNames: "[name]-[type]-[server]", + }), + nodeResolve(), + typescript({ + sourceMap: false, + }), + ], + onwarn(warning) { + throw new Error(warning.message); + }, + }); + + await expect(result.generate({})).rejects.toThrow( + "The following files have overlapping exports", + ); + }); +}); + +function testRollupHandler( + gen: RollupOutput, + type: "handler" | "middleware", + server: string, + f: string, +) { + const parsed = parse(f); + const res = gen.output.find( + (file: any) => + file.facadeModuleId === + `virtual:universal-middleware:${server}:${type}:${f}`, + ) as OutputChunk | undefined; + expect(res!.name.replaceAll("\\", "/")).toEqual( + `${parsed.dir}/universal-${server}-${type}-${parsed.name}`, + ); +} + +function testRollupOutput( + gen: RollupOutput, + type: "handler" | "middleware", + f: string, +) { + for (const adapter of adapters) { + testRollupHandler(gen, type, adapter, f); + } +} + +function expectNbOutput(i: number) { + return i * (adapters.length + 1); +} diff --git a/packages/universal-middleware/tsconfig.json b/packages/universal-middleware/tsconfig.json new file mode 100644 index 0000000..4082f16 --- /dev/null +++ b/packages/universal-middleware/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/universal-middleware/tsup.config.ts b/packages/universal-middleware/tsup.config.ts new file mode 100644 index 0000000..af7cfe5 --- /dev/null +++ b/packages/universal-middleware/tsup.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from "tsup"; + +export default defineConfig([ + { + entry: ["src/index.ts", "src/rollup.ts", "src/esbuild.ts"], + format: "esm", + dts: true, + splitting: true, + bundle: true, + }, +]); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b1837f8..21a7f71 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,28 +1,35 @@ lockfileVersion: '9.0' settings: - autoInstallPeers: true + autoInstallPeers: false excludeLinksFromLockfile: false overrides: '@universal-middleware/core': link:./packages/core + '@universal-middleware/express': link:./packages/adapter-express + '@universal-middleware/hono': link:./packages/adapter-hono + '@universal-middleware/hattip': link:./packages/adapter-hattip + '@universal-middleware/webroute': link:./packages/adapter-webroute + universal-middleware: link:./packages/universal-middleware + '@webroute/middleware': ^0.9.0 + esbuild: ^0.23.1 importers: .: dependencies: '@hattip/adapter-node': - specifier: ^0.0.46 - version: 0.0.46 + specifier: ^0.0.47 + version: 0.0.47 '@hattip/core': - specifier: ^0.0.46 - version: 0.0.46 + specifier: ^0.0.47 + version: 0.0.47 '@hattip/polyfills': - specifier: ^0.0.46 - version: 0.0.46 + specifier: ^0.0.47 + version: 0.0.47 '@hattip/router': - specifier: ^0.0.46 - version: 0.0.46 + specifier: ^0.0.47 + version: 0.0.47 '@hono/node-server': specifier: ^1.12.0 version: 1.12.0 @@ -39,27 +46,27 @@ importers: specifier: ^7.1.0 version: 7.1.0 hono: - specifier: ^4.4.12 - version: 4.4.12 + specifier: ^4.5.6 + version: 4.5.6 serve-static: specifier: ^1.15.0 version: 1.15.0 tsx: - specifier: ^4.16.2 - version: 4.16.2 + specifier: ^4.17.0 + version: 4.17.0 vite: - specifier: ^5.3.3 - version: 5.3.3(@types/node@18.19.39) + specifier: ^5.4.1 + version: 5.4.1(@types/node@18.19.44) devDependencies: '@hattip/compose': - specifier: ^0.0.46 - version: 0.0.46 + specifier: ^0.0.47 + version: 0.0.47 '@hattip/vite': - specifier: ^0.0.46 - version: 0.0.46(vite@5.3.3(@types/node@18.19.39)) + specifier: ^0.0.47 + version: 0.0.47(vite@5.4.1(@types/node@18.19.44)) '@hono/vite-dev-server': - specifier: ^0.13.0 - version: 0.13.0(hono@4.4.12) + specifier: ^0.14.0 + version: 0.14.0(hono@4.5.6) '@types/express': specifier: ^4.17.21 version: 4.17.21 @@ -68,16 +75,16 @@ importers: version: 1.18.0 '@types/node': specifier: ^18.19.14 - version: 18.19.39 + version: 18.19.44 '@types/serve-static': specifier: ^1.15.7 version: 1.15.7 '@typescript-eslint/eslint-plugin': specifier: ^7.15.0 - version: 7.15.0(@typescript-eslint/parser@7.15.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^7.15.0 - version: 7.15.0(eslint@8.57.0)(typescript@5.5.3) + version: 7.18.0(eslint@8.57.0)(typescript@5.5.4) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -85,20 +92,26 @@ importers: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) express-rate-limit: - specifier: ^7.3.1 - version: 7.3.1(express@4.19.2) + specifier: ^7.4.0 + version: 7.4.0(express@4.19.2) express-session: specifier: ^1.18.0 version: 1.18.0 microdiff: specifier: ^1.4.0 version: 1.4.0 + npm-run-all2: + specifier: ^6.2.2 + version: 6.2.2 on-change: specifier: ^5.0.1 version: 5.0.1 + playwright: + specifier: ^1.46.1 + version: 1.46.1 prettier: specifier: ^3.3.2 - version: 3.3.2 + version: 3.3.3 proxy-deep: specifier: ^4.0.1 version: 4.0.1 @@ -106,8 +119,45 @@ importers: specifier: ^1.4.1 version: 1.4.1 typescript: - specifier: ^5.5.3 - version: 5.5.3 + specifier: ^5.5.4 + version: 5.5.4 + + examples/tool: + optionalDependencies: + '@universal-middleware/express': + specifier: link:../../packages/adapter-express + version: link:../../packages/adapter-express + '@universal-middleware/hattip': + specifier: link:../../packages/adapter-hattip + version: link:../../packages/adapter-hattip + '@universal-middleware/hono': + specifier: link:../../packages/adapter-hono + version: link:../../packages/adapter-hono + '@universal-middleware/webroute': + specifier: link:../../packages/adapter-webroute + version: link:../../packages/adapter-webroute + devDependencies: + '@hono/node-server': + specifier: ^1.12.0 + version: 1.12.0 + '@swc/core': + specifier: ^1.7.11 + version: 1.7.11 + '@types/node': + specifier: ^20.14.10 + version: 20.16.0 + rimraf: + specifier: ^6.0.0 + version: 6.0.1 + tsup: + specifier: ^8.2.4 + version: 8.2.4(@swc/core@1.7.11)(postcss@8.4.41)(tsx@4.17.0)(typescript@5.5.4) + typescript: + specifier: ^5.5.4 + version: 5.5.4 + universal-middleware: + specifier: link:../../packages/universal-middleware + version: link:../../packages/universal-middleware packages/adapter-express: dependencies: @@ -116,11 +166,14 @@ importers: version: link:../core devDependencies: '@brillout/release-me': - specifier: ^0.3.9 - version: 0.3.9 + specifier: ^0.4.0 + version: 0.4.0 + '@swc/core': + specifier: ^1.7.11 + version: 1.7.11 '@types/node': specifier: ^20.14.10 - version: 20.14.10 + version: 20.16.0 '@universal-middleware/tests': specifier: workspace:* version: link:../tests @@ -132,19 +185,19 @@ importers: version: 7.1.0 rimraf: specifier: ^6.0.0 - version: 6.0.0 + version: 6.0.1 tsup: - specifier: ^8.1.0 - version: 8.1.0(postcss@8.4.39)(typescript@5.5.3) + specifier: ^8.2.4 + version: 8.2.4(@swc/core@1.7.11)(postcss@8.4.41)(tsx@4.17.0)(typescript@5.5.4) tsx: - specifier: ^4.16.2 - version: 4.16.2 + specifier: ^4.17.0 + version: 4.17.0 typescript: - specifier: ^5.5.3 - version: 5.5.3 + specifier: ^5.5.4 + version: 5.5.4 vitest: - specifier: ^2.0.2 - version: 2.0.2(@types/node@20.14.10) + specifier: ^2.0.5 + version: 2.0.5(@types/node@20.16.0) packages/adapter-hattip: dependencies: @@ -153,50 +206,53 @@ importers: version: link:../core devDependencies: '@brillout/release-me': - specifier: ^0.3.9 - version: 0.3.9 + specifier: ^0.4.0 + version: 0.4.0 '@hattip/adapter-bun': - specifier: ^0.0.46 - version: 0.0.46 + specifier: ^0.0.47 + version: 0.0.47 '@hattip/adapter-deno': - specifier: ^0.0.46 - version: 0.0.46 + specifier: ^0.0.47 + version: 0.0.47 '@hattip/adapter-node': - specifier: ^0.0.46 - version: 0.0.46 + specifier: ^0.0.47 + version: 0.0.47 '@hattip/compose': - specifier: ^0.0.46 - version: 0.0.46 + specifier: ^0.0.47 + version: 0.0.47 '@hattip/core': - specifier: ^0.0.46 - version: 0.0.46 + specifier: ^0.0.47 + version: 0.0.47 '@hattip/cors': - specifier: ^0.0.46 - version: 0.0.46 + specifier: ^0.0.47 + version: 0.0.47 '@hattip/router': - specifier: ^0.0.46 - version: 0.0.46 + specifier: ^0.0.47 + version: 0.0.47 + '@swc/core': + specifier: ^1.7.11 + version: 1.7.11 '@types/node': specifier: ^20.14.10 - version: 20.14.10 + version: 20.16.0 '@universal-middleware/tests': specifier: workspace:* version: link:../tests rimraf: specifier: ^6.0.0 - version: 6.0.0 + version: 6.0.1 tsup: - specifier: ^8.1.0 - version: 8.1.0(postcss@8.4.39)(typescript@5.5.3) + specifier: ^8.2.4 + version: 8.2.4(@swc/core@1.7.11)(postcss@8.4.41)(tsx@4.17.0)(typescript@5.5.4) tsx: - specifier: ^4.16.2 - version: 4.16.2 + specifier: ^4.17.0 + version: 4.17.0 typescript: - specifier: ^5.5.3 - version: 5.5.3 + specifier: ^5.5.4 + version: 5.5.4 vitest: - specifier: ^2.0.2 - version: 2.0.2(@types/node@20.14.10) + specifier: ^2.0.5 + version: 2.0.5(@types/node@20.16.0) packages/adapter-hono: dependencies: @@ -205,50 +261,105 @@ importers: version: link:../core devDependencies: '@brillout/release-me': - specifier: ^0.3.9 - version: 0.3.9 + specifier: ^0.4.0 + version: 0.4.0 + '@swc/core': + specifier: ^1.7.11 + version: 1.7.11 '@types/node': specifier: ^20.14.10 - version: 20.14.10 + version: 20.16.0 '@universal-middleware/tests': specifier: workspace:* version: link:../tests hono: - specifier: ^4.4.13 - version: 4.4.13 + specifier: ^4.5.6 + version: 4.5.6 rimraf: specifier: ^6.0.0 - version: 6.0.0 + version: 6.0.1 tsup: - specifier: ^8.1.0 - version: 8.1.0(postcss@8.4.39)(typescript@5.5.3) + specifier: ^8.2.4 + version: 8.2.4(@swc/core@1.7.11)(postcss@8.4.41)(tsx@4.17.0)(typescript@5.5.4) tsx: - specifier: ^4.16.2 - version: 4.16.2 + specifier: ^4.17.0 + version: 4.17.0 typescript: - specifier: ^5.5.3 - version: 5.5.3 + specifier: ^5.5.4 + version: 5.5.4 vitest: - specifier: ^2.0.2 - version: 2.0.2(@types/node@20.14.10) + specifier: ^2.0.5 + version: 2.0.5(@types/node@20.16.0) + + packages/adapter-webroute: + dependencies: + '@universal-middleware/core': + specifier: link:../core + version: link:../core + devDependencies: + '@brillout/release-me': + specifier: ^0.4.0 + version: 0.4.0 + '@swc/core': + specifier: ^1.7.11 + version: 1.7.11 + '@types/node': + specifier: ^20.14.10 + version: 20.16.0 + '@universal-middleware/hono': + specifier: link:../adapter-hono + version: link:../adapter-hono + '@universal-middleware/tests': + specifier: workspace:* + version: link:../tests + '@webroute/middleware': + specifier: ^0.9.0 + version: 0.9.0 + '@webroute/route': + specifier: ^0.6.0 + version: 0.6.0 + hono: + specifier: ^4.5.6 + version: 4.5.6 + rimraf: + specifier: ^6.0.0 + version: 6.0.1 + tsup: + specifier: ^8.2.4 + version: 8.2.4(@swc/core@1.7.11)(postcss@8.4.41)(tsx@4.17.0)(typescript@5.5.4) + tsx: + specifier: ^4.17.0 + version: 4.17.0 + typescript: + specifier: ^5.5.4 + version: 5.5.4 + vitest: + specifier: ^2.0.5 + version: 2.0.5(@types/node@20.16.0) packages/core: devDependencies: '@brillout/release-me': - specifier: ^0.3.9 - version: 0.3.9 + specifier: ^0.4.0 + version: 0.4.0 + '@swc/core': + specifier: ^1.7.11 + version: 1.7.11 + '@types/bun': + specifier: ^1.1.6 + version: 1.1.6 '@types/node': specifier: ^20.14.10 - version: 20.14.10 + version: 20.16.0 rimraf: specifier: ^6.0.0 - version: 6.0.0 + version: 6.0.1 tsup: - specifier: ^8.1.0 - version: 8.1.0(postcss@8.4.39)(typescript@5.5.3) + specifier: ^8.2.4 + version: 8.2.4(@swc/core@1.7.11)(postcss@8.4.41)(tsx@4.17.0)(typescript@5.5.4) typescript: - specifier: ^5.5.3 - version: 5.5.3 + specifier: ^5.5.4 + version: 5.5.4 packages/tests: dependencies: @@ -262,24 +373,139 @@ importers: specifier: ^8.1.4 version: 8.1.4 devDependencies: + '@swc/core': + specifier: ^1.7.11 + version: 1.7.11 '@types/node': specifier: ^20.14.10 - version: 20.14.10 + version: 20.16.0 '@universal-middleware/core': specifier: link:../core version: link:../core rimraf: specifier: ^6.0.0 - version: 6.0.0 + version: 6.0.1 + tsup: + specifier: ^8.2.4 + version: 8.2.4(@swc/core@1.7.11)(postcss@8.4.41)(tsx@4.17.0)(typescript@5.5.4) + typescript: + specifier: ^5.5.4 + version: 5.5.4 + vitest: + specifier: ^2.0.5 + version: 2.0.5(@types/node@20.16.0) + + packages/universal-middleware: + dependencies: + '@universal-middleware/core': + specifier: link:../core + version: link:../core + '@universal-middleware/express': + specifier: link:../adapter-express + version: link:../adapter-express + '@universal-middleware/hattip': + specifier: link:../adapter-hattip + version: link:../adapter-hattip + '@universal-middleware/hono': + specifier: link:../adapter-hono + version: link:../adapter-hono + '@universal-middleware/webroute': + specifier: link:../adapter-webroute + version: link:../adapter-webroute + oxc-transform: + specifier: ^0.24.3 + version: 0.24.3 + package-up: + specifier: ^5.0.0 + version: 5.0.0 + unplugin: + specifier: ^1.12.2 + version: 1.12.2 + devDependencies: + '@rollup/plugin-node-resolve': + specifier: ^15.2.3 + version: 15.2.3(rollup@4.21.0) + '@rollup/plugin-typescript': + specifier: ^11.1.6 + version: 11.1.6(rollup@4.21.0)(tslib@2.6.3)(typescript@5.5.4) + '@swc/core': + specifier: ^1.7.11 + version: 1.7.11 + esbuild: + specifier: ^0.23.1 + version: 0.23.1 + rimraf: + specifier: ^6.0.1 + version: 6.0.1 + rollup: + specifier: ^4.21.0 + version: 4.21.0 tsup: - specifier: ^8.1.0 - version: 8.1.0(postcss@8.4.39)(typescript@5.5.3) + specifier: ^8.2.4 + version: 8.2.4(@swc/core@1.7.11)(postcss@8.4.41)(tsx@4.17.0)(typescript@5.5.4) typescript: - specifier: ^5.5.3 - version: 5.5.3 + specifier: ^5.5.4 + version: 5.5.4 + vite: + specifier: ^5.4.1 + version: 5.4.1(@types/node@20.16.0) + vitest: + specifier: ^2.0.5 + version: 2.0.5(@types/node@20.16.0) + + tests-examples/tests-tool: + devDependencies: + '@brillout/test-e2e': + specifier: ^0.5.34 + version: 0.5.34 + '@hono/vite-dev-server': + specifier: ^0.14.0 + version: 0.14.0(hono@4.5.6) + '@types/node': + specifier: ^20.14.10 + version: 20.16.0 + '@universal-middleware-examples/tool': + specifier: workspace:* + version: link:../../examples/tool + '@universal-middleware/core': + specifier: link:../../packages/core + version: link:../../packages/core + '@universal-middleware/express': + specifier: link:../../packages/adapter-express + version: link:../../packages/adapter-express + '@universal-middleware/hattip': + specifier: link:../../packages/adapter-hattip + version: link:../../packages/adapter-hattip + '@universal-middleware/hono': + specifier: link:../../packages/adapter-hono + version: link:../../packages/adapter-hono + '@universal-middleware/webroute': + specifier: link:../../packages/adapter-webroute + version: link:../../packages/adapter-webroute + hono: + specifier: ^4.5.6 + version: 4.5.6 + npm-run-all2: + specifier: ^6.2.2 + version: 6.2.2 + playwright: + specifier: ^1.46.1 + version: 1.46.1 + rimraf: + specifier: ^6.0.0 + version: 6.0.1 + tsx: + specifier: ^4.17.0 + version: 4.17.0 + typescript: + specifier: ^5.5.4 + version: 5.5.4 + vite: + specifier: ^5.4.1 + version: 5.4.1(@types/node@20.16.0) vitest: - specifier: ^2.0.2 - version: 2.0.2(@types/node@20.14.10) + specifier: ^2.0.5 + version: 2.0.5(@types/node@20.16.0) packages: @@ -299,39 +525,46 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@brillout/picocolors@1.0.13': - resolution: {integrity: sha512-LblvMKItHbvkaIMI+Awsk1EEjmReE8E8Mgjtj3Pdn/qBvwQ6e+ts5uEqG6iTrK6JWndcxrQgSe664KfoteN6fA==} + '@brillout/part-regex@0.1.4': + resolution: {integrity: sha512-PQy5LfRmIueEfGwhvMedsnj6KulDfxlfvUaTsUchBqA7nTge4C7taG/V6np2uCHVxxE4+cSmwM4COn9aNcMn7g==} + + '@brillout/picocolors@1.0.14': + resolution: {integrity: sha512-XhyZY3/FUh56mDuLIjv5kN9qy+oQj7A/d2uQ6cJJ4uVv55+velua3abcrM5WIvs2RHZGA3EE7S9FWo+TjF10ew==} - '@brillout/release-me@0.3.9': - resolution: {integrity: sha512-7Q9YD+rnVF9hFmRFNSEePAejYSgZzWABJTA5sFrfD1utREt5K8aokoldvm/WES83SOMIkPO97c2kII9J4snc7Q==} + '@brillout/release-me@0.4.0': + resolution: {integrity: sha512-V4YwITguHK3zOy9B4606lc9PQiFDp3p3Ifeq4KF7V8o9fs7OmcrfTWBE0EWFtiLhG2JeKb2RzM0t6Y4tLgXd6w==} hasBin: true - '@cloudflare/workerd-darwin-64@1.20240701.0': - resolution: {integrity: sha512-XAZa4ZP+qyTn6JQQACCPH09hGZXP2lTnWKkmg5mPwT8EyRzCKLkczAf98vPP5bq7JZD/zORdFWRY0dOTap8zTQ==} + '@brillout/test-e2e@0.5.34': + resolution: {integrity: sha512-7opuTq9Uy06RwgTtCc2GHoTDcdZafsF5WktZXLYl+FAwrn6xW3f2UTeRBFLdKTgGw7g1MPv0QnTOIzlM9r+G6A==} + hasBin: true + + '@cloudflare/workerd-darwin-64@1.20240806.0': + resolution: {integrity: sha512-FqcVBBCO//I39K5F+HqE/v+UkqY1UrRnS653Jv+XsNNH9TpX5fTs7VCKG4kDSnmxlAaKttyIN5sMEt7lpuNExQ==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20240701.0': - resolution: {integrity: sha512-w80ZVAgfH4UwTz7fXZtk7KmS2FzlXniuQm4ku4+cIgRTilBAuKqjpOjwUCbx5g13Gqcm9NuiHce+IDGtobRTIQ==} + '@cloudflare/workerd-darwin-arm64@1.20240806.0': + resolution: {integrity: sha512-8c3KvmzYp/wg+82KHSOzDetJK+pThH4MTrU1OsjmsR2cUfedm5dk5Lah9/0Ld68+6A0umFACi4W2xJHs/RoBpA==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20240701.0': - resolution: {integrity: sha512-UWLr/Anxwwe/25nGv451MNd2jhREmPt/ws17DJJqTLAx6JxwGWA15MeitAIzl0dbxRFAJa+0+R8ag2WR3F/D6g==} + '@cloudflare/workerd-linux-64@1.20240806.0': + resolution: {integrity: sha512-/149Bpxw4e2p5QqnBc06g0mx+4sZYh9j0doilnt0wk/uqYkLp0DdXGMQVRB74sBLg2UD3wW8amn1w3KyFhK2tQ==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20240701.0': - resolution: {integrity: sha512-3kCnF9kYgov1ggpuWbgpXt4stPOIYtVmPCa7MO2xhhA0TWP6JDUHRUOsnmIgKrvDjXuXqlK16cdg3v+EWsaPJg==} + '@cloudflare/workerd-linux-arm64@1.20240806.0': + resolution: {integrity: sha512-lacDWY3S1rKL/xT6iMtTQJEKmTTKrBavPczInEuBFXElmrS6IwVjZwv8hhVm32piyNt/AuFu9BYoJALi9D85/g==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20240701.0': - resolution: {integrity: sha512-6IPGITRAeS67j3BH1rN4iwYWDt47SqJG7KlZJ5bB4UaNAia4mvMBSy/p2p4vA89bbXoDRjMtEvRu7Robu6O7hQ==} + '@cloudflare/workerd-windows-64@1.20240806.0': + resolution: {integrity: sha512-hC6JEfTSQK6//Lg+D54TLVn1ceTPY+fv4MXqDZIYlPP53iN+dL8Xd0utn2SG57UYdlL5FRAhm/EWHcATZg1RgA==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -340,141 +573,147 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -500,49 +739,61 @@ packages: resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@hattip/adapter-bun@0.0.46': - resolution: {integrity: sha512-7hlKJRO1DfaLHihmIloi9Gb9Qta1MxFCwOV3/rlqn39hd9L7LvJjLRxprVtfGTZcBFu8nJcG4A8H/i5hxqZsmA==} + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + + '@hattip/adapter-bun@0.0.47': + resolution: {integrity: sha512-QwQbnZ1RVBEPathn8vPU2AGH0LtMfTMDYKGHhA3QjRntdTySv6vpBtGKDA9A+qpU/b/cx4u9ZZ+yMNsblQkZsA==} + + '@hattip/adapter-deno@0.0.47': + resolution: {integrity: sha512-evaL45aZthrZjMIhRSCFkyEIlT/4N8EuBjcLE6AlIqDA+BmhvVTbZk8ucxo8ybAqRAhVDyLFCgEqTR2jgLekSQ==} + + '@hattip/adapter-node@0.0.47': + resolution: {integrity: sha512-QC0+p3w9nmIDsqwJKHDw26htJtbOm+K2HFAnxFq1+6MzOLwticRo0zM5KSQzkXWwt/3/7vTbwxHY+pO9tE9jTg==} - '@hattip/adapter-deno@0.0.46': - resolution: {integrity: sha512-7JL/H5l8jc/JtEa5vzh2KsL2HKu3gp2jzE8+3OGjzTxMs+aOp14dLbt6N4Uy32fHoGXME36I46WTCrM30gq9Dw==} + '@hattip/compose@0.0.45': + resolution: {integrity: sha512-Xrxk2kx6htAoR/fBQEnhhqfjBdHFBi2UtiFuhD6qSSwEaD2jTGkyDzYAmVqPIO0ZSvIlIBBpGKdXip4JhdBMww==} - '@hattip/adapter-node@0.0.46': - resolution: {integrity: sha512-DvG2VH4/116T7x1ibzzeGcoGA940w4G0Gy7XjVOgE6ZXwAOunoXS2zfqTlSxFsdTegDnXpGxI50XVq6cdcwBKA==} + '@hattip/compose@0.0.47': + resolution: {integrity: sha512-4v5CqHthQpGAJpY+T5FZhbweue5ivSZ/Uy7LLCijJlx+qZGTHFmKsh96cno99Wn2PMUCUQIctGkgfjWPa9azTA==} - '@hattip/compose@0.0.46': - resolution: {integrity: sha512-CZRQ+6CnJWY5tslKGgRnS8kKaEBvkViIz9V49Obk4ieGXK0HlGMU9Cyflktx5Pcb5tVNwbrX0dTRiIDesJ1maA==} + '@hattip/core@0.0.45': + resolution: {integrity: sha512-4BK9dPU7sLvmP9sUq048uSaKFvQY2Qa6D0xQteQBIiDYuTdbopcUQLETM1sdkUeUtFxHPwPu/NclfJAC5INarw==} - '@hattip/core@0.0.46': - resolution: {integrity: sha512-6pk22hPi9qVc6jyROu89T2yV2IcORTJZUq5OdFDfWmu4ynMP4I2avC+hnCJj6o3vlN1Io7zBbdT5OIPxpBIX7A==} + '@hattip/core@0.0.47': + resolution: {integrity: sha512-g+yoz7ZCTc4WRIGvbrbnrzfB77Z3tknbJxkLDicxpCL/oErj+IV+jfJj/DWNsgijuUFYCqR2HLaYzl0NGfppRA==} - '@hattip/cors@0.0.46': - resolution: {integrity: sha512-ldg+HNACfZ4Vud7V1+plmXB/csJIIECTB9O8b08KrLBY5y+L3CB049UIeCz8WVmKvVxjj+H4VZfF+JUoHoWQDQ==} + '@hattip/cors@0.0.47': + resolution: {integrity: sha512-EUtGOYugKKU+iNT7jugArR2M5QPRXzBOT/R6JDuT6alwnJqPpahr/CAcq3Ra2XqPE6BeanAr8WV6JP+nq0JVGg==} - '@hattip/headers@0.0.46': - resolution: {integrity: sha512-kk6hzTjTv0McRgt8bv8IwUOWsphrRQzaUvtXz4w60eQQCO6RHL/wzX6BEh+3eJQFVtmu6yFnh/O6NDnSxSPM7Q==} + '@hattip/headers@0.0.47': + resolution: {integrity: sha512-t52miakFhUHpgDvOHafuWVYksMNVr4umOc/zt0N9jt2g8qNSQWrt/vh2olx7WMKtft2Jbl23F0xZBIIN55Je3w==} - '@hattip/polyfills@0.0.46': - resolution: {integrity: sha512-S+0lm8lDZrw5nT9QZwf9+3LukPL6z0kOgMFqW0xkCnJvzZ7NTmn/xc4SsOFD7bYZ4bH/Z4kdi5xw38hLyfMYOw==} + '@hattip/polyfills@0.0.47': + resolution: {integrity: sha512-sVW4kz0tQieVBCE6y0bWbGjtd8r9dhK9pBje3g/bc77F4qXhLGyxM3gfgRQpjalM4anBIkIwG31cmeLQTyxalg==} - '@hattip/router@0.0.46': - resolution: {integrity: sha512-+cDVNElFOUqCf89aK2qJWck12U+i51JzW1q8KgEJCCCEbni2L6BIWjeJ+Cgxx80Mk27B+In3EdEOdX043qNGbA==} + '@hattip/router@0.0.47': + resolution: {integrity: sha512-XpwrvKQuEh26KCa1OyIawmmGn1bIAt2O1RZCvAKcE2z9zy9IM7v8R81b6gt0qOwfmMae92Grfyjl5tcH6/eGbA==} - '@hattip/vite@0.0.46': - resolution: {integrity: sha512-7BhpL1tJqdRiXnPzubXzd46013cXxITXTIxT4iQAH13ARCrSiatwdHVPo8q5TyxNDWPRuLaUlnWNmMB+JNaQNw==} + '@hattip/vite@0.0.47': + resolution: {integrity: sha512-mo9fd7pkqOBhWyC7sfZ6t0a4OTvwvIHJYW0KQaAebzDJkgUIy0uXmNwJtdteSc7w1S9H5SeXGIec9OAmmWfrzg==} hasBin: true peerDependencies: - vite: ^4 | ^5 + vite: ^4 || ^5 - '@hattip/walk@0.0.46': - resolution: {integrity: sha512-LFzLLNgEpf8ulR/ni/5IuQ1c3rTEDj7f9LD6xnMvlIZsYklRDFY6BmfcJTGMICVG3g0tOQjsAL0xkPPPGAv8WQ==} + '@hattip/walk@0.0.47': + resolution: {integrity: sha512-kCEdC2kG3mbFCc2gHs13GFI5VaWfvYYYxZwu7u3wax3R7JkLqztyxno35TT9cMv33XhuN5hf+CkDGCPoO0DIag==} hasBin: true '@hono/node-server@1.12.0': resolution: {integrity: sha512-e6oHjNiErRxsZRZBmc2KucuvY3btlO/XPncIpP2X75bRdTilF9GLjm3NHvKKunpJbbJJj31/FoPTksTf8djAVw==} engines: {node: '>=18.14.1'} - '@hono/vite-dev-server@0.13.0': - resolution: {integrity: sha512-Qy+wEMFb6sphFsOoCSVsgt0tM4rXdNs/9Y9OJSu5kjs+xqNoKzCTXahFQJQYXkQQ1RAOOZxJaPZfdomD14zmwA==} + '@hono/vite-dev-server@0.14.0': + resolution: {integrity: sha512-rhd+hxIIG6wSS73WQxXF7/CiOHBlxdynrRUihSwEszpysB0HWOMN2Q7QprnPHsZSNmGohoTXZxwo7iM4hukGzw==} engines: {node: '>=18.14.1'} peerDependencies: hono: '*' @@ -580,8 +831,8 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -604,93 +855,254 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oxc-transform/binding-darwin-arm64@0.24.3': + resolution: {integrity: sha512-zCbdMm3wV2EhRK/za4KiEmukusyaYCqK6+/5at3lx3WuKUjF1lXiLUCuMSK06J6kOqG3uVe2whb5w76L5t5X/Q==} + cpu: [arm64] + os: [darwin] + + '@oxc-transform/binding-darwin-x64@0.24.3': + resolution: {integrity: sha512-M6M+Nrkps9vlFlWP2JJAkmOXVBTSsqmOIfACfaAUAydzGK84UAximxrTLp4JHPbsIx9FPX3Z9Di32B+lK1hOVg==} + cpu: [x64] + os: [darwin] + + '@oxc-transform/binding-linux-arm64-gnu@0.24.3': + resolution: {integrity: sha512-XzLxUmjztX+/8rlmFyTrZTcECiDBgN1/fAXcj0dNYp8fKspmo7ahPix3IZPPa6kgSpA8SQ4sKhMsT428jM901A==} + cpu: [arm64] + os: [linux] + + '@oxc-transform/binding-linux-arm64-musl@0.24.3': + resolution: {integrity: sha512-giu3raN2bcU+mnI8nfVH71TTD1QzudZUKjYoYIZBbuTvT9FHtZILhbrWijhhhXXWrJqDoB92Ko+G02Ned9S6lw==} + cpu: [arm64] + os: [linux] + + '@oxc-transform/binding-linux-x64-gnu@0.24.3': + resolution: {integrity: sha512-W++VfrY6vpko0T6iyJhiN2bphMHFiMM8bt2BWwF5tXRaPZMXW7wvfxBR1l7r/Y1f0lniLviBTLlZjOJeYBrDwQ==} + cpu: [x64] + os: [linux] + + '@oxc-transform/binding-linux-x64-musl@0.24.3': + resolution: {integrity: sha512-eJzAJhzwfTkHqSAZ+GvcSKY4UfBDv86Zk/gDIa+zmpxpovtCWlGXRiNyUZI0aWgPbH3+5FZnjRLMbw4bJZfrHw==} + cpu: [x64] + os: [linux] + + '@oxc-transform/binding-win32-arm64-msvc@0.24.3': + resolution: {integrity: sha512-gUZ9OQujXhtXWamNWBt1FAW0+ECAMOdrq4MWdqnrzkXKY9ndyJ4CjzulPH8nj/+6AaDq5iv9yTfgJ4bWM9uVTg==} + cpu: [arm64] + os: [win32] + + '@oxc-transform/binding-win32-x64-msvc@0.24.3': + resolution: {integrity: sha512-KfrdrMAn+ZX21qncVjsXt5Tu3Fs/nKj8D6gPL7pXZ8zB/qzYP6aroMChsassb1d3u8fEJB0tl/5DziprZFZYng==} + cpu: [x64] + os: [win32] + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@rollup/rollup-android-arm-eabi@4.18.0': - resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + '@rollup/plugin-node-resolve@15.2.3': + resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-typescript@11.1.6': + resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.14.0||^3.0.0||^4.0.0 + tslib: '*' + typescript: '>=3.7.0' + peerDependenciesMeta: + rollup: + optional: true + tslib: + optional: true + + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.21.0': + resolution: {integrity: sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.18.0': - resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + '@rollup/rollup-android-arm64@4.21.0': + resolution: {integrity: sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.18.0': - resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + '@rollup/rollup-darwin-arm64@4.21.0': + resolution: {integrity: sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.18.0': - resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + '@rollup/rollup-darwin-x64@4.21.0': + resolution: {integrity: sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': - resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + '@rollup/rollup-linux-arm-gnueabihf@4.21.0': + resolution: {integrity: sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.18.0': - resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + '@rollup/rollup-linux-arm-musleabihf@4.21.0': + resolution: {integrity: sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.18.0': - resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + '@rollup/rollup-linux-arm64-gnu@4.21.0': + resolution: {integrity: sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.18.0': - resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + '@rollup/rollup-linux-arm64-musl@4.21.0': + resolution: {integrity: sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': - resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': + resolution: {integrity: sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.18.0': - resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + '@rollup/rollup-linux-riscv64-gnu@4.21.0': + resolution: {integrity: sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.18.0': - resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + '@rollup/rollup-linux-s390x-gnu@4.21.0': + resolution: {integrity: sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.18.0': - resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + '@rollup/rollup-linux-x64-gnu@4.21.0': + resolution: {integrity: sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.18.0': - resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + '@rollup/rollup-linux-x64-musl@4.21.0': + resolution: {integrity: sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.18.0': - resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + '@rollup/rollup-win32-arm64-msvc@4.21.0': + resolution: {integrity: sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.18.0': - resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + '@rollup/rollup-win32-ia32-msvc@4.21.0': + resolution: {integrity: sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.18.0': - resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} + '@rollup/rollup-win32-x64-msvc@4.21.0': + resolution: {integrity: sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==} cpu: [x64] os: [win32] + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + + '@sinclair/typebox@0.32.35': + resolution: {integrity: sha512-Ul3YyOTU++to8cgNkttakC0dWvpERr6RYoHO2W47DLbFvrwBDJUY31B1sImH6JZSYc4Kt4PyHtoPNu+vL2r2dA==} + + '@swc/core-darwin-arm64@1.7.11': + resolution: {integrity: sha512-HRQv4qIeMBPThZ6Y/4yYW52rGsS6yrpusvuxLGyoFo45Y0y12/V2yXkOIA/0HIQyrqoUAxn1k4zQXpPaPNCmnw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.7.11': + resolution: {integrity: sha512-vtMQj0F3oYwDu5yhO7SKDRg1XekRSi6/TbzHAbBXv+dBhlGGvcZZynT1H90EVFTv+7w7Sh+lOFvRv5Z4ZTcxow==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.7.11': + resolution: {integrity: sha512-mHtzWKxhtyreI4CSxs+3+ENv8t/Qo35WFoYG66qHEgJz/Z2Lh6jv1E+MYgHdYwnpQHgHbdvAco7HsBu/Dt6xXw==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.7.11': + resolution: {integrity: sha512-FRwe/x0GfXSQjGP2lIk+NO0pUFS/lI/RorCLBPiK808EVE9JTbh9DKCc/4Bbb4jgScAjNkrFCUVObQYl3YKmpA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.7.11': + resolution: {integrity: sha512-GY/rs0+GUq14Gbnza90KOrQd/9yHd5qQMii5jcSWcUCT5A8QTa8kiicsM2NxZeTJ69xlKmT7sLod5l99lki/2A==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.7.11': + resolution: {integrity: sha512-QDkGRwSPmp2RBOlSs503IUXlWYlny8DyznTT0QuK0ML2RpDFlXWU94K/EZhS0RBEUkMY/W51OacM8P8aS/dkCg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.7.11': + resolution: {integrity: sha512-SBEfKrXy6zQ6ksnyxw1FaCftrIH4fLfA81xNnKb7x/6iblv7Ko6H0aK3P5C86jyqF/82+ONl9C7ImGkUFQADig==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.7.11': + resolution: {integrity: sha512-a2Y4xxEsLLYHJN7sMnw9+YQJDi3M1BxEr9hklfopPuGGnYLFNnx5CypH1l9ReijEfWjIAHNi7pq3m023lzW1Hg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.7.11': + resolution: {integrity: sha512-ZbZFMwZO+j8ulhegJ7EhJ/QVZPoQ5qc30ylJQSxizizTJaen71Q7/13lXWc6ksuCKvg6dUKrp/TPgoxOOtSrFA==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.7.11': + resolution: {integrity: sha512-IUohZedSJyDu/ReEBG/mqX6uG29uA7zZ9z6dIAF+p6eFxjXmh9MuHryyM+H8ebUyoq/Ad3rL+rUCksnuYNnI0w==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.7.11': + resolution: {integrity: sha512-AB+qc45UrJrDfbhPKcUXk+9z/NmFfYYwJT6G7/iur0fCse9kXjx45gi40+u/O2zgarG/30/zV6E3ps8fUvjh7g==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/types@0.1.12': + resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} + '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + '@types/bun@1.1.6': + resolution: {integrity: sha512-uJgKjTdX0GkWEHZzQzFsJkWp5+43ZS7HC8sZPFnOwnSo1AsNl2q9o2bFeS23disNDqbggEgyFkKCHl/w8iZsMA==} + '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -721,14 +1133,14 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - '@types/node@18.19.39': - resolution: {integrity: sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==} + '@types/node@18.19.44': + resolution: {integrity: sha512-ZsbGerYg72WMXUIE9fYxtvfzLEuq6q8mKERdWFnqTmOvudMxnz+CBNRoOwJ2kNpFOncrKjT1hZwxjlFgQ9qvQA==} '@types/node@20.12.14': resolution: {integrity: sha512-scnD59RpYD91xngrQQLGkE+6UrHUPzeKZWhhjBSa3HSkwjbQc38+q3RoIVEwxQGRw3M+j5hpNAM+lgV3cVormg==} - '@types/node@20.14.10': - resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} + '@types/node@20.16.0': + resolution: {integrity: sha512-vDxceJcoZhIVh67S568bm1UGZO0DX0hpplJZxzeXMKwIPLn190ec5RRxQ69BKhX44SUGIxxgMdDY557lGLKprQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -739,17 +1151,20 @@ packages: '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/send@0.17.4': resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} '@types/serve-static@1.15.7': resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - '@types/ws@8.5.11': - resolution: {integrity: sha512-4+q7P5h3SpJxaBft0Dzpbr6lmMaqh0Jr2tbhJZ/luAwvD7ohSCniYkwz/pLxuT2h0EOa6QADgJj1Ko+TzRfZ+w==} + '@types/ws@8.5.12': + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} - '@typescript-eslint/eslint-plugin@7.15.0': - resolution: {integrity: sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==} + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -759,8 +1174,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.15.0': - resolution: {integrity: sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==} + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -769,12 +1184,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@7.15.0': - resolution: {integrity: sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==} + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/type-utils@7.15.0': - resolution: {integrity: sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==} + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -783,12 +1198,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@7.15.0': - resolution: {integrity: sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==} + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/typescript-estree@7.15.0': - resolution: {integrity: sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==} + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -796,64 +1211,73 @@ packages: typescript: optional: true - '@typescript-eslint/utils@7.15.0': - resolution: {integrity: sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==} + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@7.15.0': - resolution: {integrity: sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==} + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vavite/connect@4.1.1': - resolution: {integrity: sha512-UjJEPX9t1fPNJiDbTzzW/ZIorTipCWO9x9aQ0CkNqtH6+dKnaWI/a03gFiNU+7ybhYI1LxdY17ar10ns7DQ08Q==} + '@vavite/connect@4.1.2': + resolution: {integrity: sha512-BeyDUMHM+OGlqrZkJaPj7JLmDzd00nmqg6baU/jgOmKKfvmtWl/Ybvss8k2G8d93jhcPjg6Bp3sbEXILLIRoSA==} peerDependencies: vite: ^2.8.1 || 3 || 4 || 5 - '@vavite/multibuild@4.1.1': - resolution: {integrity: sha512-R+UJWT2wH598OsGNA/NHgUgtOGvyh9kqaDsP/twJa/OJSH+RWgzj+ONQPqbkAYqPYu0NgRb8rkQOK4QJwdLx0A==} + '@vavite/multibuild@4.1.2': + resolution: {integrity: sha512-cGUoadUXNChe1NmU0BnQNdLlQNY/q9QcORoEX7LyVf5/EI+jgSbr11ljjWnAhSage6n5tv6Yki47ToNm/6c+qQ==} peerDependencies: vite: ^2.8.1 || 3 || 4 || 5 - '@vavite/node-loader@4.1.1': - resolution: {integrity: sha512-3vJ3lnO2yJYE+i7DlZuSc7jUT4z+Fe4yVaxlODHWn1lpkVsXjIz2TfTp6zEJGXZJlhY1SnIzZczfQzA3Gs/NZw==} + '@vavite/node-loader@4.1.2': + resolution: {integrity: sha512-EnrbhHorFI5gL8B6DAoeM2LfI3NZMVUz1U9NPjm+tkgyx3EE6xFVclC2LGp3QdrvA4A+79Q/2+gDiJ16qLo1Ng==} hasBin: true peerDependencies: vite: ^2.8.1 || 3 || 4 || 5 - '@vitest/expect@2.0.2': - resolution: {integrity: sha512-nKAvxBYqcDugYZ4nJvnm5OR8eDJdgWjk4XM9owQKUjzW70q0icGV2HVnQOyYsp906xJaBDUXw0+9EHw2T8e0mQ==} + '@vitest/expect@2.0.5': + resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} - '@vitest/pretty-format@2.0.2': - resolution: {integrity: sha512-SBCyOXfGVvddRd9r2PwoVR0fonQjh9BMIcBMlSzbcNwFfGr6ZhOhvBzurjvi2F4ryut2HcqiFhNeDVGwru8tLg==} + '@vitest/pretty-format@2.0.5': + resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} - '@vitest/runner@2.0.2': - resolution: {integrity: sha512-OCh437Vi8Wdbif1e0OvQcbfM3sW4s2lpmOjAE7qfLrpzJX2M7J1IQlNvEcb/fu6kaIB9n9n35wS0G2Q3en5kHg==} + '@vitest/runner@2.0.5': + resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==} - '@vitest/snapshot@2.0.2': - resolution: {integrity: sha512-Yc2ewhhZhx+0f9cSUdfzPRcsM6PhIb+S43wxE7OG0kTxqgqzo8tHkXFuFlndXeDMp09G3sY/X5OAo/RfYydf1g==} + '@vitest/snapshot@2.0.5': + resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==} - '@vitest/spy@2.0.2': - resolution: {integrity: sha512-MgwJ4AZtCgqyp2d7WcQVE8aNG5vQ9zu9qMPYQHjsld/QVsrvg78beNrXdO4HYkP0lDahCO3P4F27aagIag+SGQ==} + '@vitest/spy@2.0.5': + resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - '@vitest/utils@2.0.2': - resolution: {integrity: sha512-pxCY1v7kmOCWYWjzc0zfjGTA3Wmn8PKnlPvSrsA643P1NHl1fOyXj2Q9SaNlrlFE+ivCsxM80Ov3AR82RmHCWQ==} + '@vitest/utils@2.0.5': + resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} - '@whatwg-node/events@0.1.1': - resolution: {integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==} - engines: {node: '>=16.0.0'} + '@webroute/common@1.0.0': + resolution: {integrity: sha512-JQ1+RDjQuwtbXJg46EaZvh6NqgHEKObfQHq3YwUYGiZ9TsfnP+zbaNUYi0mpQfZZjZl18O54vC13s2Hc6dDNuw==} - '@whatwg-node/fetch@0.9.18': - resolution: {integrity: sha512-hqoz6StCW+AjV/3N+vg0s1ah82ptdVUb9nH2ttj3UbySOXUvytWw2yqy8c1cKzyRk6mDD00G47qS3fZI9/gMjg==} - engines: {node: '>=16.0.0'} + '@webroute/middleware@0.9.0': + resolution: {integrity: sha512-KECzsFrxadVRpZYfA4W4xElANOAucOigrAN8g/7BEHTFL8tIcT2xZ0SzxpSY07foGbBbipq7GLC0hrfauNuoKQ==} - '@whatwg-node/node-fetch@0.5.11': - resolution: {integrity: sha512-LS8tSomZa3YHnntpWt3PP43iFEEl6YeIsvDakczHBKlay5LdkXFr8w7v8H6akpG5nRrzydyB0k1iE2eoL6aKIQ==} - engines: {node: '>=16.0.0'} + '@webroute/route@0.6.0': + resolution: {integrity: sha512-w4XMPRdLjuqpRiGrPfzpIuhtlXLX2NuClWMq3pRAqdRxlj2ZVJeulzSqDR5eSe7vyxl1DLUTfIQnt/1g7prfKg==} + engines: {node: ^20.0.0} + + '@webroute/schema@0.4.0': + resolution: {integrity: sha512-ZRv2jAuACvaR/j7syVB0HEwnQocqfLJZwqamUJjb0ymLpnkD70kZFgUzxEsz8TX31clr+owdTGSBcJoz5d8AhQ==} + + '@whatwg-node/fetch@0.9.20': + resolution: {integrity: sha512-bayE8tJBVw3QRg5vDqGIOfBmdxCV6HHUqCxMhZ1pOHukUk1TrfNH3tViivJErhmtSN0bbvjWaBQpJllAOpgSxA==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/node-fetch@0.5.22': + resolution: {integrity: sha512-ccjjD+JCaylDGGcbJ69jFK2FaoGobpyOiDr2FnzSpcEss20MJzfJAiUIrpglWADplyB2AwfunMM7ph3IpPArhw==} + engines: {node: '>=18.0.0'} JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -926,6 +1350,9 @@ packages: as-table@1.0.55: resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -951,14 +1378,24 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - bun-types@1.1.20: - resolution: {integrity: sha512-2u84HciDR3E7Uc0t0AEeXHmQAWe9uzRKTz120D3silIJOQlbGIMJMJiGaM8Yx7nEvMyfV0LfSdkEGnb77AN5AA==} + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + bun-types@1.1.17: + resolution: {integrity: sha512-Z4+OplcSd/YZq7ZsrfD00DKJeCwuNY96a1IDJyR73+cTBaFIS7SC6LhpY/W3AMEXO9iYq5NJ58WAwnwL1p5vKg==} - bundle-require@4.2.1: - resolution: {integrity: sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==} + bun-types@1.1.24: + resolution: {integrity: sha512-UNEcYawHWOVw9GYQdOgjJvTQduYlPckmRMqpBqfkWpUzeK2CZfEP/JOYBH6SMypyfkNg/Zsqf0olN6vMrSPg3w==} + + bundle-require@5.0.0: + resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: - esbuild: '>=0.17' + esbuild: ^0.23.1 busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} @@ -983,6 +1420,10 @@ packages: capnp-ts@0.7.0: resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} + chai@4.5.0: + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} + engines: {node: '>=4'} + chai@5.1.1: resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} engines: {node: '>=12'} @@ -995,6 +1436,9 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} @@ -1108,8 +1552,8 @@ packages: engines: {node: '>=16'} hasBin: true - cookie-es@1.1.0: - resolution: {integrity: sha512-L2rLOcK0wzWSfSDA33YR+PUHDG10a8px7rUHKWbGLP4YfbsMed2KFUw5fczvDPbT98DDe3LEzviswl810apTEw==} + cookie-es@1.2.2: + resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -1152,8 +1596,8 @@ packages: supports-color: optional: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1161,6 +1605,10 @@ packages: supports-color: optional: true + deep-eql@4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -1168,6 +1616,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -1225,9 +1677,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} hasBin: true escape-html@1.0.3: @@ -1264,8 +1716,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -1276,6 +1728,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -1299,8 +1754,8 @@ packages: resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} engines: {node: '>=6'} - express-rate-limit@7.3.1: - resolution: {integrity: sha512-BbaryvkY4wEgDqLgD18/NSy2lDO2jTuT9Y8c1Mpx0X63Yz0sYd5zN6KPe7UvpuSVvV33T6RaE1o1IVZQjHMYgw==} + express-rate-limit@7.4.0: + resolution: {integrity: sha512-v1204w3cXu5gCDmAvgvzI6qjzZzoMWKnyVDk3ACgfswTQLYiGen+r8w0VnXnGMmzEN/g8fwIQ4JrFFd4ZP6ssg==} engines: {node: '>= 16'} peerDependencies: express: 4 || 5 || ^5.0.0-beta.1 @@ -1347,6 +1802,10 @@ packages: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} + find-up-simple@1.0.0: + resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + engines: {node: '>=18'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -1362,8 +1821,8 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - foreground-child@3.2.1: - resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} forwarded@0.2.0: @@ -1377,6 +1836,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1403,8 +1867,8 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + get-tsconfig@4.7.6: + resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} git-raw-commits@4.0.0: resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} @@ -1427,9 +1891,8 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.4.3: - resolution: {integrity: sha512-Q38SGlYRpVtDBPSWEylRyctn7uDeTp4NQERTLiCT1FqA9JXPYWqAVmQU6qh4r/zMM5ehxTcbaO8EjhWnvEhmyg==} - engines: {node: '>=18'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true glob@11.0.0: @@ -1493,12 +1956,8 @@ packages: resolution: {integrity: sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==} engines: {node: '>=16.0.0'} - hono@4.4.12: - resolution: {integrity: sha512-Lx4Vwbws0IqFfXIVYychxUW0A4EE+7dn/jsjVeM34OXSA2Xs45MkDDP14Mzznp7LlDemUNHQG2uv2N5jQld0hA==} - engines: {node: '>=16.0.0'} - - hono@4.4.13: - resolution: {integrity: sha512-c6qqenclmQ6wpXzqiElMa2jt423PVCmgBreDfC5s2lPPpGk7d0lOymd8QTzFZyYC5mSSs6imiTMPip+gLwuW/g==} + hono@4.5.6: + resolution: {integrity: sha512-9SuUC/zLQv8YAcnIxJko0KCeLI0Q6menPsDWuJ9jaH+r8ZkVXeLqeLs1QJXCPKKbURAWj9x0SJBSFh803EnAUw==} engines: {node: '>=16.0.0'} hosted-git-info@7.0.2: @@ -1521,8 +1980,8 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} import-fresh@3.3.0: @@ -1557,6 +2016,14 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + engines: {node: '>= 0.4'} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1569,6 +2036,9 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -1596,14 +2066,16 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jackspeak@3.4.1: - resolution: {integrity: sha512-U23pQPDnmYybVkYjObcuYMk43VRlMLLqLI+RdZy8s8WV8WsxO9SnqSroKaluuvcNOdCAlauKszDwd+umbot5Mg==} - engines: {node: '>=18'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} jackspeak@4.0.1: resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} engines: {node: 20 || >=22} + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -1671,24 +2143,30 @@ packages: lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + loupe@3.1.1: resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} - lru-cache@10.4.0: - resolution: {integrity: sha512-bfJaPTuEiTYBu+ulDaeQ0F+uLmlfFkMgXj4cbwfuMSjgObGMzb55FMMbDvbRU0fAHZ4sLGkz2mKwcMg8Dvm8Ww==} - engines: {node: '>=18'} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} lru-cache@11.0.0: resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==} engines: {node: 20 || >=22} - magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} @@ -1740,8 +2218,8 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - miniflare@3.20240701.0: - resolution: {integrity: sha512-m9+I+7JNyqDGftCMKp9cK9pCZkK72hAL2mM9IWwhct+ZmucLBA8Uu6+rHQqA5iod86cpwOkrB2PrPA3wx9YNgw==} + miniflare@3.20240806.1: + resolution: {integrity: sha512-wJq3YQYx9k83L2CNYtxvwWvXSi+uHrC6aFoXYSbzhxIDlUWvMEqippj+3HeKLgsggC31nHJab3b1Pifg9IxIFQ==} engines: {node: '>=16.13'} hasBin: true @@ -1801,6 +2279,15 @@ packages: node-fetch-native@1.6.4: resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + normalize-package-data@6.0.2: resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} engines: {node: ^16.14.0 || >=18.0.0} @@ -1809,6 +2296,15 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-run-all2@6.2.2: + resolution: {integrity: sha512-Q+alQAGIW7ZhKcxLt8GcSi3h3ryheD6xnmXahkMRVM5LYmajcUrSITm8h+OPC9RYWMV2GR0Q1ntTUCfxaNoOJw==} + engines: {node: ^14.18.0 || ^16.13.0 || >=18.0.0, npm: '>= 8'} + hasBin: true + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -1855,6 +2351,9 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + oxc-transform@0.24.3: + resolution: {integrity: sha512-aOwwJibIHngKt8ccLRaIBHuVKDZB4VB1NgnObmNw6dwuGSmWpAff12tqZbbSwY0X2bGfwm7goY0Tur3yWxpUdA==} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -1874,6 +2373,10 @@ packages: package-json-from-dist@1.0.0: resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + package-up@5.0.0: + resolution: {integrity: sha512-MQEgDUvXCa3sGvqHg3pzHO8e9gqTCMPVrWUko3vPQGntwegmFo52mZb2abIVTjFnUcW0BcPz0D93jV5Cas1DWA==} + engines: {node: '>=18'} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -1906,6 +2409,9 @@ packages: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -1924,6 +2430,9 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} @@ -1935,38 +2444,75 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} + pixelmatch@5.3.0: + resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} + hasBin: true + + playwright-chromium@1.46.1: + resolution: {integrity: sha512-WuNzXHHWaIqnq66Zkg1gu6LGkJ13HsSBkHBXiHKDfPfzAv8stIyNBHJiDqFLFaM5wSl+LSbPbLMlhCicaBg4oA==} + engines: {node: '>=18'} + hasBin: true + + playwright-core@1.46.1: + resolution: {integrity: sha512-h9LqIQaAv+CYvWzsZ+h3RsrqCStkBHlgo6/TJlFst3cOTlLghBQlJwPOZKQJTKNaD3QIB7aAVQ+gfWbN3NXB7A==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.46.1: + resolution: {integrity: sha512-oPcr1yqoXLCkgKtD5eNUPLiN40rYEM39odNpIb6VE6S7/15gJmA1NzVv6zJYusV0e7tzvkU/utBFNa/Kpxmwng==} + engines: {node: '>=18'} + hasBin: true + + pngjs@6.0.0: + resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} + engines: {node: '>=12.13.0'} + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} peerDependencies: + jiti: '>=1.21.0' postcss: '>=8.0.9' - ts-node: '>=9.0.0' + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: + jiti: + optional: true postcss: optional: true - ts-node: + tsx: + optional: true + yaml: optional: true - postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + postcss@8.4.41: + resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.3.2: - resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} hasBin: true printable-characters@1.0.42: resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} + property-expr@2.0.6: + resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -2000,6 +2546,10 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + read-pkg-up@10.1.0: resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==} engines: {node: '>=16'} @@ -2027,6 +2577,10 @@ packages: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -2039,27 +2593,30 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@6.0.0: - resolution: {integrity: sha512-u+yqhM92LW+89cxUQK0SRyvXYQmyuKHx0jkx4W7KfwLGLqJnQM5031Uv1trE4gB9XEXBM/s6MxKlfW95IidqaA==} + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} engines: {node: 20 || >=22} hasBin: true - rollup@4.18.0: - resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + rollup@4.21.0: + resolution: {integrity: sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + runtypes@6.7.0: + resolution: {integrity: sha512-3TLdfFX8YHNFOhwHrSJza6uxVBmBrEjnNQlNXvXCdItS0Pdskfg5vVXUTWIN+Y23QR09jWpSl99UHkA83m4uWA==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true @@ -2086,6 +2643,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -2108,6 +2668,9 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -2186,6 +2749,10 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true + superstruct@1.0.4: + resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} + engines: {node: '>=14.0.0'} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -2194,6 +2761,10 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + text-extensions@2.4.0: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} @@ -2211,8 +2782,11 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - tinybench@2.8.0: - resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} + tiny-case@1.0.3: + resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} tinypool@1.0.0: resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==} @@ -2234,6 +2808,12 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + toposort@2.0.2: + resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} @@ -2253,8 +2833,8 @@ packages: tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - tsup@8.1.0: - resolution: {integrity: sha512-UFdfCAXukax+U6KzeTNO2kAARHcWxmKsnvSPXUcfA1D+kU05XDccCrkffCQpFaWDsZfV0jMyTsxU39VfCp6EOg==} + tsup@8.2.4: + resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -2272,8 +2852,8 @@ packages: typescript: optional: true - tsx@4.16.2: - resolution: {integrity: sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==} + tsx@4.17.0: + resolution: {integrity: sha512-eN4mnDA5UMKDt4YZixo9tBioibaMBpoxBkD+rIPAjVmYERSG0/dWEY1CEFuV89CgASlKL499q8AhmkMnnjtOJg==} engines: {node: '>=18.0.0'} hasBin: true @@ -2281,32 +2861,40 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + type-fest@3.13.1: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} - type-fest@4.21.0: - resolution: {integrity: sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==} + type-fest@4.25.0: + resolution: {integrity: sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==} engines: {node: '>=16'} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typescript@5.5.3: - resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true - ufo@1.5.3: - resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - uglify-js@3.18.0: - resolution: {integrity: sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==} + uglify-js@3.19.2: + resolution: {integrity: sha512-S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlIQ==} engines: {node: '>=0.8.0'} hasBin: true @@ -2320,17 +2908,24 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.6: + resolution: {integrity: sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==} + undici@5.28.4: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} - unenv@1.9.0: - resolution: {integrity: sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g==} + unenv@1.10.0: + resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unplugin@1.12.2: + resolution: {integrity: sha512-bEqQxeC7rxtxPZ3M5V4Djcc4lQqKPgGe3mAWZvxcSmX5jhGxll19NliaRzQSQPrk4xJZSGniK3puLWpRuZN7VQ==} + engines: {node: '>=14.0.0'} + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -2341,6 +2936,9 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + valibot@0.31.0-rc.0: + resolution: {integrity: sha512-c8HERUa1wthubHtWn0EXJIw4itUEMq2WMZEVaV8zv0a0654aGDX+Ln1Ba5smAjFdntIn/0tDCqdeYYRibfhwtQ==} + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -2348,13 +2946,13 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite-node@2.0.2: - resolution: {integrity: sha512-w4vkSz1Wo+NIQg8pjlEn0jQbcM/0D+xVaYjhw3cvarTanLLBh54oNiRbsT8PNK5GfuST0IlVXjsNRoNlqvY/fw==} + vite-node@2.0.5: + resolution: {integrity: sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite@5.3.3: - resolution: {integrity: sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==} + vite@5.4.1: + resolution: {integrity: sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2362,6 +2960,7 @@ packages: less: '*' lightningcss: ^1.21.0 sass: '*' + sass-embedded: '*' stylus: '*' sugarss: '*' terser: ^5.4.0 @@ -2374,6 +2973,8 @@ packages: optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true sugarss: @@ -2381,15 +2982,15 @@ packages: terser: optional: true - vitest@2.0.2: - resolution: {integrity: sha512-WlpZ9neRIjNBIOQwBYfBSr0+of5ZCbxT2TVGKW4Lv0c8+srCFIiRdsP7U009t8mMn821HQ4XKgkx5dVWpyoyLw==} + vitest@2.0.5: + resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.0.2 - '@vitest/ui': 2.0.2 + '@vitest/browser': 2.0.5 + '@vitest/ui': 2.0.5 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -2411,9 +3012,22 @@ packages: engines: {node: '>=10'} hasBin: true + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -2434,8 +3048,8 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerd@1.20240701.0: - resolution: {integrity: sha512-qSgNVqauqzNCij9MaJLF2c2ko3AnFioVSIxMSryGbRK+LvtGr9BKBt6JOxCb24DoJASoJDx3pe3DJHBVydUiBg==} + workerd@1.20240806.0: + resolution: {integrity: sha512-yyNtyzTMgVY0sgYijHBONqZFVXsOFGj2jDjS8MF/RbO2ZdGROvs4Hkc/9QnmqFWahE0STxXeJ1yW1yVotdF0UQ==} engines: {node: '>=16'} hasBin: true @@ -2462,11 +3076,6 @@ packages: utf-8-validate: optional: true - yaml@2.4.5: - resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} - engines: {node: '>= 14'} - hasBin: true - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -2478,6 +3087,9 @@ packages: youch@3.3.3: resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==} + yup@1.4.0: + resolution: {integrity: sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==} + zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} @@ -2507,102 +3119,123 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 - '@brillout/picocolors@1.0.13': {} + '@brillout/part-regex@0.1.4': {} + + '@brillout/picocolors@1.0.14': {} - '@brillout/release-me@0.3.9': + '@brillout/release-me@0.4.0': dependencies: - '@brillout/picocolors': 1.0.13 + '@brillout/picocolors': 1.0.14 commander: 11.1.0 conventional-changelog: 5.1.0 execa: 5.1.1 - semver: 7.6.2 + semver: 7.6.3 + + '@brillout/test-e2e@0.5.34': + dependencies: + '@brillout/part-regex': 0.1.4 + '@brillout/picocolors': 1.0.14 + chai: 4.5.0 + esbuild: 0.23.1 + fast-glob: 3.3.2 + node-fetch: 2.7.0 + pixelmatch: 5.3.0 + playwright-chromium: 1.46.1 + pngjs: 6.0.0 + source-map-support: 0.5.21 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - encoding - '@cloudflare/workerd-darwin-64@1.20240701.0': + '@cloudflare/workerd-darwin-64@1.20240806.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20240701.0': + '@cloudflare/workerd-darwin-arm64@1.20240806.0': optional: true - '@cloudflare/workerd-linux-64@1.20240701.0': + '@cloudflare/workerd-linux-64@1.20240806.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20240701.0': + '@cloudflare/workerd-linux-arm64@1.20240806.0': optional: true - '@cloudflare/workerd-windows-64@1.20240701.0': + '@cloudflare/workerd-windows-64@1.20240806.0': optional: true '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@esbuild/aix-ppc64@0.21.5': + '@esbuild/aix-ppc64@0.23.1': + optional: true + + '@esbuild/android-arm64@0.23.1': optional: true - '@esbuild/android-arm64@0.21.5': + '@esbuild/android-arm@0.23.1': optional: true - '@esbuild/android-arm@0.21.5': + '@esbuild/android-x64@0.23.1': optional: true - '@esbuild/android-x64@0.21.5': + '@esbuild/darwin-arm64@0.23.1': optional: true - '@esbuild/darwin-arm64@0.21.5': + '@esbuild/darwin-x64@0.23.1': optional: true - '@esbuild/darwin-x64@0.21.5': + '@esbuild/freebsd-arm64@0.23.1': optional: true - '@esbuild/freebsd-arm64@0.21.5': + '@esbuild/freebsd-x64@0.23.1': optional: true - '@esbuild/freebsd-x64@0.21.5': + '@esbuild/linux-arm64@0.23.1': optional: true - '@esbuild/linux-arm64@0.21.5': + '@esbuild/linux-arm@0.23.1': optional: true - '@esbuild/linux-arm@0.21.5': + '@esbuild/linux-ia32@0.23.1': optional: true - '@esbuild/linux-ia32@0.21.5': + '@esbuild/linux-loong64@0.23.1': optional: true - '@esbuild/linux-loong64@0.21.5': + '@esbuild/linux-mips64el@0.23.1': optional: true - '@esbuild/linux-mips64el@0.21.5': + '@esbuild/linux-ppc64@0.23.1': optional: true - '@esbuild/linux-ppc64@0.21.5': + '@esbuild/linux-riscv64@0.23.1': optional: true - '@esbuild/linux-riscv64@0.21.5': + '@esbuild/linux-s390x@0.23.1': optional: true - '@esbuild/linux-s390x@0.21.5': + '@esbuild/linux-x64@0.23.1': optional: true - '@esbuild/linux-x64@0.21.5': + '@esbuild/netbsd-x64@0.23.1': optional: true - '@esbuild/netbsd-x64@0.21.5': + '@esbuild/openbsd-arm64@0.23.1': optional: true - '@esbuild/openbsd-x64@0.21.5': + '@esbuild/openbsd-x64@0.23.1': optional: true - '@esbuild/sunos-x64@0.21.5': + '@esbuild/sunos-x64@0.23.1': optional: true - '@esbuild/win32-arm64@0.21.5': + '@esbuild/win32-arm64@0.23.1': optional: true - '@esbuild/win32-ia32@0.21.5': + '@esbuild/win32-ia32@0.23.1': optional: true - '@esbuild/win32-x64@0.21.5': + '@esbuild/win32-x64@0.23.1': optional: true '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': @@ -2615,10 +3248,10 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.5 + debug: 4.3.6 espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.1 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -2630,74 +3263,90 @@ snapshots: '@fastify/busboy@2.1.1': {} - '@hattip/adapter-bun@0.0.46': + '@hapi/hoek@9.3.0': + optional: true + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + optional: true + + '@hattip/adapter-bun@0.0.47': + dependencies: + '@hattip/core': 0.0.47 + bun-types: 1.1.24 + + '@hattip/adapter-deno@0.0.47': dependencies: - '@hattip/core': 0.0.46 - bun-types: 1.1.20 + '@hattip/core': 0.0.47 - '@hattip/adapter-deno@0.0.46': + '@hattip/adapter-node@0.0.47': dependencies: - '@hattip/core': 0.0.46 + '@hattip/core': 0.0.47 + '@hattip/polyfills': 0.0.47 + '@hattip/walk': 0.0.47 - '@hattip/adapter-node@0.0.46': + '@hattip/compose@0.0.45': dependencies: - '@hattip/core': 0.0.46 - '@hattip/polyfills': 0.0.46 - '@hattip/walk': 0.0.46 + '@hattip/core': 0.0.45 + optional: true - '@hattip/compose@0.0.46': + '@hattip/compose@0.0.47': dependencies: - '@hattip/core': 0.0.46 + '@hattip/core': 0.0.47 + + '@hattip/core@0.0.45': + optional: true - '@hattip/core@0.0.46': {} + '@hattip/core@0.0.47': {} - '@hattip/cors@0.0.46': + '@hattip/cors@0.0.47': dependencies: - '@hattip/compose': 0.0.46 - '@hattip/core': 0.0.46 + '@hattip/compose': 0.0.47 + '@hattip/core': 0.0.47 '@types/cookie': 0.6.0 cookie: 0.6.0 - '@hattip/headers@0.0.46': + '@hattip/headers@0.0.47': dependencies: - '@hattip/core': 0.0.46 + '@hattip/core': 0.0.47 - '@hattip/polyfills@0.0.46': + '@hattip/polyfills@0.0.47': dependencies: - '@hattip/core': 0.0.46 - '@whatwg-node/fetch': 0.9.18 + '@hattip/core': 0.0.47 + '@whatwg-node/fetch': 0.9.20 node-fetch-native: 1.6.4 - '@hattip/router@0.0.46': + '@hattip/router@0.0.47': dependencies: - '@hattip/compose': 0.0.46 - '@hattip/core': 0.0.46 + '@hattip/compose': 0.0.47 + '@hattip/core': 0.0.47 - '@hattip/vite@0.0.46(vite@5.3.3(@types/node@18.19.39))': + '@hattip/vite@0.0.47(vite@5.4.1(@types/node@18.19.44))': dependencies: - '@hattip/adapter-node': 0.0.46 - '@vavite/connect': 4.1.1(vite@5.3.3(@types/node@18.19.39)) - '@vavite/multibuild': 4.1.1(vite@5.3.3(@types/node@18.19.39)) - '@vavite/node-loader': 4.1.1(vite@5.3.3(@types/node@18.19.39)) + '@hattip/adapter-node': 0.0.47 + '@vavite/connect': 4.1.2(vite@5.4.1(@types/node@18.19.44)) + '@vavite/multibuild': 4.1.2(vite@5.4.1(@types/node@18.19.44)) + '@vavite/node-loader': 4.1.2(vite@5.4.1(@types/node@18.19.44)) cac: 6.7.14 import-meta-resolve: 4.1.0 picocolors: 1.0.1 resolve.exports: 2.0.2 - vite: 5.3.3(@types/node@18.19.39) + vite: 5.4.1(@types/node@18.19.44) - '@hattip/walk@0.0.46': + '@hattip/walk@0.0.47': dependencies: - '@hattip/headers': 0.0.46 + '@hattip/headers': 0.0.47 cac: 6.7.14 mime-types: 2.1.35 '@hono/node-server@1.12.0': {} - '@hono/vite-dev-server@0.13.0(hono@4.4.12)': + '@hono/vite-dev-server@0.14.0(hono@4.5.6)': dependencies: '@hono/node-server': 1.12.0 - hono: 4.4.12 - miniflare: 3.20240701.0 + hono: 4.5.6 + miniflare: 3.20240806.1 minimatch: 9.0.5 transitivePeerDependencies: - bufferutil @@ -2707,7 +3356,7 @@ snapshots: '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5 + debug: 4.3.6 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -2730,24 +3379,24 @@ snapshots: '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@kamilkisiela/fast-url-parser@1.1.4': {} @@ -2763,65 +3412,187 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@oxc-transform/binding-darwin-arm64@0.24.3': + optional: true + + '@oxc-transform/binding-darwin-x64@0.24.3': + optional: true + + '@oxc-transform/binding-linux-arm64-gnu@0.24.3': + optional: true + + '@oxc-transform/binding-linux-arm64-musl@0.24.3': + optional: true + + '@oxc-transform/binding-linux-x64-gnu@0.24.3': + optional: true + + '@oxc-transform/binding-linux-x64-musl@0.24.3': + optional: true + + '@oxc-transform/binding-win32-arm64-msvc@0.24.3': + optional: true + + '@oxc-transform/binding-win32-x64-msvc@0.24.3': + optional: true + '@pkgjs/parseargs@0.11.0': optional: true - '@rollup/rollup-android-arm-eabi@4.18.0': + '@rollup/plugin-node-resolve@15.2.3(rollup@4.21.0)': + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.21.0) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.8 + optionalDependencies: + rollup: 4.21.0 + + '@rollup/plugin-typescript@11.1.6(rollup@4.21.0)(tslib@2.6.3)(typescript@5.5.4)': + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.21.0) + resolve: 1.22.8 + typescript: 5.5.4 + optionalDependencies: + rollup: 4.21.0 + tslib: 2.6.3 + + '@rollup/pluginutils@5.1.0(rollup@4.21.0)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 4.21.0 + + '@rollup/rollup-android-arm-eabi@4.21.0': + optional: true + + '@rollup/rollup-android-arm64@4.21.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.21.0': + optional: true + + '@rollup/rollup-darwin-x64@4.21.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.21.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.21.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.21.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.21.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.21.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.21.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.21.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.21.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.21.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.21.0': optional: true - '@rollup/rollup-android-arm64@4.18.0': + '@rollup/rollup-win32-x64-msvc@4.21.0': optional: true - '@rollup/rollup-darwin-arm64@4.18.0': + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 optional: true - '@rollup/rollup-darwin-x64@4.18.0': + '@sideway/formula@3.0.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + '@sideway/pinpoint@2.0.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.18.0': + '@sinclair/typebox@0.32.35': optional: true - '@rollup/rollup-linux-arm64-gnu@4.18.0': + '@swc/core-darwin-arm64@1.7.11': optional: true - '@rollup/rollup-linux-arm64-musl@4.18.0': + '@swc/core-darwin-x64@1.7.11': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + '@swc/core-linux-arm-gnueabihf@1.7.11': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.18.0': + '@swc/core-linux-arm64-gnu@1.7.11': optional: true - '@rollup/rollup-linux-s390x-gnu@4.18.0': + '@swc/core-linux-arm64-musl@1.7.11': optional: true - '@rollup/rollup-linux-x64-gnu@4.18.0': + '@swc/core-linux-x64-gnu@1.7.11': optional: true - '@rollup/rollup-linux-x64-musl@4.18.0': + '@swc/core-linux-x64-musl@1.7.11': optional: true - '@rollup/rollup-win32-arm64-msvc@4.18.0': + '@swc/core-win32-arm64-msvc@1.7.11': optional: true - '@rollup/rollup-win32-ia32-msvc@4.18.0': + '@swc/core-win32-ia32-msvc@1.7.11': optional: true - '@rollup/rollup-win32-x64-msvc@4.18.0': + '@swc/core-win32-x64-msvc@1.7.11': optional: true + '@swc/core@1.7.11': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.12 + optionalDependencies: + '@swc/core-darwin-arm64': 1.7.11 + '@swc/core-darwin-x64': 1.7.11 + '@swc/core-linux-arm-gnueabihf': 1.7.11 + '@swc/core-linux-arm64-gnu': 1.7.11 + '@swc/core-linux-arm64-musl': 1.7.11 + '@swc/core-linux-x64-gnu': 1.7.11 + '@swc/core-linux-x64-musl': 1.7.11 + '@swc/core-win32-arm64-msvc': 1.7.11 + '@swc/core-win32-ia32-msvc': 1.7.11 + '@swc/core-win32-x64-msvc': 1.7.11 + + '@swc/counter@0.1.3': {} + + '@swc/types@0.1.12': + dependencies: + '@swc/counter': 0.1.3 + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.14.10 + '@types/node': 20.16.0 + + '@types/bun@1.1.6': + dependencies: + bun-types: 1.1.17 '@types/connect@3.4.38': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.16.0 '@types/cookie@0.6.0': {} @@ -2829,7 +3600,7 @@ snapshots: '@types/express-serve-static-core@4.19.5': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.16.0 '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -2848,19 +3619,19 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.14.10 + '@types/node': 20.16.0 optional: true '@types/http-errors@2.0.4': {} '@types/jsonfile@6.1.4': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.16.0 optional: true '@types/mime@1.3.5': {} - '@types/node@18.19.39': + '@types/node@18.19.44': dependencies: undici-types: 5.26.5 @@ -2868,9 +3639,9 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/node@20.14.10': + '@types/node@20.16.0': dependencies: - undici-types: 5.26.5 + undici-types: 6.19.6 '@types/normalize-package-data@2.4.4': {} @@ -2878,164 +3649,191 @@ snapshots: '@types/range-parser@1.2.7': {} + '@types/resolve@1.20.2': {} + '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.14.10 + '@types/node': 20.16.0 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.14.10 + '@types/node': 20.16.0 '@types/send': 0.17.4 - '@types/ws@8.5.11': + '@types/ws@8.5.12': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.16.0 - '@typescript-eslint/eslint-plugin@7.15.0(@typescript-eslint/parser@7.15.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.15.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/scope-manager': 7.15.0 - '@typescript-eslint/type-utils': 7.15.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/utils': 7.15.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/visitor-keys': 7.15.0 + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.18.0 eslint: 8.57.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.3) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.15.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: - '@typescript-eslint/scope-manager': 7.15.0 - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.5.3) - '@typescript-eslint/visitor-keys': 7.15.0 - debug: 4.3.5 + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.6 eslint: 8.57.0 optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.15.0': + '@typescript-eslint/scope-manager@7.18.0': dependencies: - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/visitor-keys': 7.15.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.15.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: - '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.5.3) - '@typescript-eslint/utils': 7.15.0(eslint@8.57.0)(typescript@5.5.3) - debug: 4.3.5 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + debug: 4.3.6 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.3) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.15.0': {} + '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/typescript-estree@7.15.0(typescript@5.5.3)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)': dependencies: - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/visitor-keys': 7.15.0 - debug: 4.3.5 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.6 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.5.3) + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.15.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.15.0 - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.5.3) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.15.0': + '@typescript-eslint/visitor-keys@7.18.0': dependencies: - '@typescript-eslint/types': 7.15.0 + '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} - '@vavite/connect@4.1.1(vite@5.3.3(@types/node@18.19.39))': + '@vavite/connect@4.1.2(vite@5.4.1(@types/node@18.19.44))': dependencies: - '@types/node': 20.14.10 - vite: 5.3.3(@types/node@18.19.39) + '@types/node': 18.19.44 + vite: 5.4.1(@types/node@18.19.44) - '@vavite/multibuild@4.1.1(vite@5.3.3(@types/node@18.19.39))': + '@vavite/multibuild@4.1.2(vite@5.4.1(@types/node@18.19.44))': dependencies: - '@types/node': 20.14.10 + '@types/node': 18.19.44 cac: 6.7.14 picocolors: 1.0.1 - vite: 5.3.3(@types/node@18.19.39) + vite: 5.4.1(@types/node@18.19.44) - '@vavite/node-loader@4.1.1(vite@5.3.3(@types/node@18.19.39))': + '@vavite/node-loader@4.1.2(vite@5.4.1(@types/node@18.19.44))': dependencies: - vite: 5.3.3(@types/node@18.19.39) + vite: 5.4.1(@types/node@18.19.44) - '@vitest/expect@2.0.2': + '@vitest/expect@2.0.5': dependencies: - '@vitest/spy': 2.0.2 - '@vitest/utils': 2.0.2 + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/pretty-format@2.0.2': + '@vitest/pretty-format@2.0.5': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.0.2': + '@vitest/runner@2.0.5': dependencies: - '@vitest/utils': 2.0.2 + '@vitest/utils': 2.0.5 pathe: 1.1.2 - '@vitest/snapshot@2.0.2': + '@vitest/snapshot@2.0.5': dependencies: - '@vitest/pretty-format': 2.0.2 - magic-string: 0.30.10 + '@vitest/pretty-format': 2.0.5 + magic-string: 0.30.11 pathe: 1.1.2 - '@vitest/spy@2.0.2': + '@vitest/spy@2.0.5': dependencies: tinyspy: 3.0.0 - '@vitest/utils@2.0.2': + '@vitest/utils@2.0.5': dependencies: - '@vitest/pretty-format': 2.0.2 + '@vitest/pretty-format': 2.0.5 estree-walker: 3.0.3 loupe: 3.1.1 tinyrainbow: 1.2.0 - '@whatwg-node/events@0.1.1': {} + '@webroute/common@1.0.0': {} + + '@webroute/middleware@0.9.0': + dependencies: + '@webroute/common': 1.0.0 + optionalDependencies: + '@hattip/compose': 0.0.45 + hono: 4.5.6 + + '@webroute/route@0.6.0': + dependencies: + '@webroute/common': 1.0.0 + '@webroute/middleware': 0.9.0 + '@webroute/schema': 0.4.0 + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + + '@webroute/schema@0.4.0': + optionalDependencies: + '@sinclair/typebox': 0.32.35 + joi: 17.13.3 + runtypes: 6.7.0 + superstruct: 1.0.4 + valibot: 0.31.0-rc.0 + yup: 1.4.0 + zod: 3.23.8 - '@whatwg-node/fetch@0.9.18': + '@whatwg-node/fetch@0.9.20': dependencies: - '@whatwg-node/node-fetch': 0.5.11 + '@whatwg-node/node-fetch': 0.5.22 urlpattern-polyfill: 10.0.0 - '@whatwg-node/node-fetch@0.5.11': + '@whatwg-node/node-fetch@0.5.22': dependencies: '@kamilkisiela/fast-url-parser': 1.1.4 - '@whatwg-node/events': 0.1.1 busboy: 1.6.0 fast-querystring: 1.1.2 tslib: 2.6.3 @@ -3102,6 +3900,8 @@ snapshots: dependencies: printable-characters: 1.0.42 + assertion-error@1.1.0: {} + assertion-error@2.0.1: {} balanced-match@1.0.2: {} @@ -3138,14 +3938,23 @@ snapshots: dependencies: fill-range: 7.1.1 - bun-types@1.1.20: + buffer-from@1.1.2: {} + + builtin-modules@3.3.0: {} + + bun-types@1.1.17: + dependencies: + '@types/node': 20.12.14 + '@types/ws': 8.5.12 + + bun-types@1.1.24: dependencies: '@types/node': 20.12.14 - '@types/ws': 8.5.11 + '@types/ws': 8.5.12 - bundle-require@4.2.1(esbuild@0.21.5): + bundle-require@5.0.0(esbuild@0.23.1): dependencies: - esbuild: 0.21.5 + esbuild: 0.23.1 load-tsconfig: 0.2.5 busboy@1.6.0: @@ -3168,11 +3977,21 @@ snapshots: capnp-ts@0.7.0: dependencies: - debug: 4.3.5 + debug: 4.3.6 tslib: 2.6.3 transitivePeerDependencies: - supports-color + chai@4.5.0: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.4 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.1.0 + chai@5.1.1: dependencies: assertion-error: 2.0.1 @@ -3192,6 +4011,10 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + check-error@2.1.1: {} chokidar@3.6.0: @@ -3284,7 +4107,7 @@ snapshots: handlebars: 4.7.8 json-stringify-safe: 5.0.1 meow: 12.1.1 - semver: 7.6.2 + semver: 7.6.3 split2: 4.2.0 conventional-changelog@5.1.0: @@ -3310,7 +4133,7 @@ snapshots: meow: 12.1.1 split2: 4.2.0 - cookie-es@1.1.0: {} + cookie-es@1.2.2: {} cookie-signature@1.0.6: {} @@ -3336,14 +4159,20 @@ snapshots: dependencies: ms: 2.0.0 - debug@4.3.5: + debug@4.3.6: dependencies: ms: 2.1.2 + deep-eql@4.1.4: + dependencies: + type-detect: 4.1.0 + deep-eql@5.0.2: {} deep-is@0.1.4: {} + deepmerge@4.3.1: {} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 @@ -3390,31 +4219,32 @@ snapshots: es-errors@1.3.0: {} - esbuild@0.21.5: + esbuild@0.23.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 escape-html@1.0.3: {} @@ -3446,13 +4276,13 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.5 + debug: 4.3.6 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -3460,7 +4290,7 @@ snapshots: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -3482,7 +4312,7 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 - esquery@1.5.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -3492,6 +4322,8 @@ snapshots: estraverse@5.3.0: {} + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.5 @@ -3526,7 +4358,7 @@ snapshots: exit-hook@2.2.1: {} - express-rate-limit@7.3.1(express@4.19.2): + express-rate-limit@7.4.0(express@4.19.2): dependencies: express: 4.19.2 @@ -3623,6 +4455,8 @@ snapshots: transitivePeerDependencies: - supports-color + find-up-simple@1.0.0: {} + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -3641,7 +4475,7 @@ snapshots: flatted@3.3.1: {} - foreground-child@3.2.1: + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 @@ -3652,6 +4486,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -3676,7 +4513,7 @@ snapshots: get-stream@8.0.1: {} - get-tsconfig@4.7.5: + get-tsconfig@4.7.6: dependencies: resolve-pkg-maps: 1.0.0 @@ -3689,7 +4526,7 @@ snapshots: git-semver-tags@7.0.1: dependencies: meow: 12.1.1 - semver: 7.6.2 + semver: 7.6.3 glob-parent@5.1.2: dependencies: @@ -3701,10 +4538,10 @@ snapshots: glob-to-regexp@0.4.1: {} - glob@10.4.3: + glob@10.4.5: dependencies: - foreground-child: 3.2.1 - jackspeak: 3.4.1 + foreground-child: 3.3.0 + jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 @@ -3712,7 +4549,7 @@ snapshots: glob@11.0.0: dependencies: - foreground-child: 3.2.1 + foreground-child: 3.3.0 jackspeak: 4.0.1 minimatch: 10.0.1 minipass: 7.1.2 @@ -3737,7 +4574,7 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -3749,16 +4586,16 @@ snapshots: h3@1.12.0: dependencies: - cookie-es: 1.1.0 + cookie-es: 1.2.2 crossws: 0.2.4 defu: 6.1.4 destr: 2.0.3 iron-webcrypto: 1.2.1 ohash: 1.1.3 radix3: 1.1.2 - ufo: 1.5.3 + ufo: 1.5.4 uncrypto: 0.1.3 - unenv: 1.9.0 + unenv: 1.10.0 transitivePeerDependencies: - uWebSockets.js @@ -3769,7 +4606,7 @@ snapshots: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.18.0 + uglify-js: 3.19.2 has-flag@3.0.0: {} @@ -3791,13 +4628,11 @@ snapshots: helmet@7.1.0: {} - hono@4.4.12: {} - - hono@4.4.13: {} + hono@4.5.6: {} hosted-git-info@7.0.2: dependencies: - lru-cache: 10.4.0 + lru-cache: 10.4.3 http-errors@2.0.0: dependencies: @@ -3815,7 +4650,7 @@ snapshots: dependencies: safer-buffer: 2.1.2 - ignore@5.3.1: {} + ignore@5.3.2: {} import-fresh@3.3.0: dependencies: @@ -3843,6 +4678,14 @@ snapshots: dependencies: binary-extensions: 2.3.0 + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + + is-core-module@2.15.0: + dependencies: + hasown: 2.0.2 + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -3851,6 +4694,8 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-module@1.0.0: {} + is-number@7.0.0: {} is-obj@2.0.0: {} @@ -3867,7 +4712,7 @@ snapshots: isexe@2.0.0: {} - jackspeak@3.4.1: + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -3879,6 +4724,15 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + joi@17.13.3: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + optional: true + joycon@3.1.1: {} js-tokens@4.0.0: {} @@ -3928,20 +4782,26 @@ snapshots: lodash.sortby@4.7.0: {} + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + loupe@3.1.1: dependencies: get-func-name: 2.0.2 - lru-cache@10.4.0: {} + lru-cache@10.4.3: {} lru-cache@11.0.0: {} - magic-string@0.30.10: + magic-string@0.30.11: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 media-typer@0.3.0: {} + memorystream@0.3.1: {} + meow@12.1.1: {} merge-descriptors@1.0.1: {} @@ -3973,7 +4833,7 @@ snapshots: mimic-fn@4.0.0: {} - miniflare@3.20240701.0: + miniflare@3.20240806.1: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.12.1 @@ -3983,7 +4843,7 @@ snapshots: glob-to-regexp: 0.4.1 stoppable: 1.1.0 undici: 5.28.4 - workerd: 1.20240701.0 + workerd: 1.20240806.0 ws: 8.18.0 youch: 3.3.3 zod: 3.23.8 @@ -4034,14 +4894,30 @@ snapshots: node-fetch-native@1.6.4: {} + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.6.2 + semver: 7.6.3 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} + npm-normalize-package-bin@3.0.1: {} + + npm-run-all2@6.2.2: + dependencies: + ansi-styles: 6.2.1 + cross-spawn: 7.0.3 + memorystream: 0.3.1 + minimatch: 9.0.5 + pidtree: 0.6.0 + read-package-json-fast: 3.0.2 + shell-quote: 1.8.1 + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -4085,6 +4961,17 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + oxc-transform@0.24.3: + optionalDependencies: + '@oxc-transform/binding-darwin-arm64': 0.24.3 + '@oxc-transform/binding-darwin-x64': 0.24.3 + '@oxc-transform/binding-linux-arm64-gnu': 0.24.3 + '@oxc-transform/binding-linux-arm64-musl': 0.24.3 + '@oxc-transform/binding-linux-x64-gnu': 0.24.3 + '@oxc-transform/binding-linux-x64-musl': 0.24.3 + '@oxc-transform/binding-win32-arm64-msvc': 0.24.3 + '@oxc-transform/binding-win32-x64-msvc': 0.24.3 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -4103,6 +4990,10 @@ snapshots: package-json-from-dist@1.0.0: {} + package-up@5.0.0: + dependencies: + find-up-simple: 1.0.0 + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -4127,9 +5018,11 @@ snapshots: path-key@4.0.0: {} + path-parse@1.0.7: {} + path-scurry@1.11.1: dependencies: - lru-cache: 10.4.0 + lru-cache: 10.4.3 minipass: 7.1.2 path-scurry@2.0.0: @@ -4143,22 +5036,44 @@ snapshots: pathe@1.1.2: {} + pathval@1.1.1: {} + pathval@2.0.0: {} picocolors@1.0.1: {} picomatch@2.3.1: {} + pidtree@0.6.0: {} + pirates@4.0.6: {} - postcss-load-config@4.0.2(postcss@8.4.39): + pixelmatch@5.3.0: + dependencies: + pngjs: 6.0.0 + + playwright-chromium@1.46.1: + dependencies: + playwright-core: 1.46.1 + + playwright-core@1.46.1: {} + + playwright@1.46.1: + dependencies: + playwright-core: 1.46.1 + optionalDependencies: + fsevents: 2.3.2 + + pngjs@6.0.0: {} + + postcss-load-config@6.0.1(postcss@8.4.41)(tsx@4.17.0): dependencies: lilconfig: 3.1.2 - yaml: 2.4.5 optionalDependencies: - postcss: 8.4.39 + postcss: 8.4.41 + tsx: 4.17.0 - postcss@8.4.39: + postcss@8.4.41: dependencies: nanoid: 3.3.7 picocolors: 1.0.1 @@ -4166,10 +5081,13 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.3.2: {} + prettier@3.3.3: {} printable-characters@1.0.42: {} + property-expr@2.0.6: + optional: true + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -4198,18 +5116,23 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + read-package-json-fast@3.0.2: + dependencies: + json-parse-even-better-errors: 3.0.2 + npm-normalize-package-bin: 3.0.1 + read-pkg-up@10.1.0: dependencies: find-up: 6.3.0 read-pkg: 8.1.0 - type-fest: 4.21.0 + type-fest: 4.25.0 read-pkg@8.1.0: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.2 parse-json: 7.1.1 - type-fest: 4.21.0 + type-fest: 4.25.0 readdirp@3.6.0: dependencies: @@ -4223,6 +5146,12 @@ snapshots: resolve.exports@2.0.2: {} + resolve@1.22.8: + dependencies: + is-core-module: 2.15.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + reusify@1.0.4: {} rfdc@1.4.1: {} @@ -4231,41 +5160,45 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@6.0.0: + rimraf@6.0.1: dependencies: glob: 11.0.0 + package-json-from-dist: 1.0.0 - rollup@4.18.0: + rollup@4.21.0: dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.0 - '@rollup/rollup-android-arm64': 4.18.0 - '@rollup/rollup-darwin-arm64': 4.18.0 - '@rollup/rollup-darwin-x64': 4.18.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 - '@rollup/rollup-linux-arm-musleabihf': 4.18.0 - '@rollup/rollup-linux-arm64-gnu': 4.18.0 - '@rollup/rollup-linux-arm64-musl': 4.18.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 - '@rollup/rollup-linux-riscv64-gnu': 4.18.0 - '@rollup/rollup-linux-s390x-gnu': 4.18.0 - '@rollup/rollup-linux-x64-gnu': 4.18.0 - '@rollup/rollup-linux-x64-musl': 4.18.0 - '@rollup/rollup-win32-arm64-msvc': 4.18.0 - '@rollup/rollup-win32-ia32-msvc': 4.18.0 - '@rollup/rollup-win32-x64-msvc': 4.18.0 + '@rollup/rollup-android-arm-eabi': 4.21.0 + '@rollup/rollup-android-arm64': 4.21.0 + '@rollup/rollup-darwin-arm64': 4.21.0 + '@rollup/rollup-darwin-x64': 4.21.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.21.0 + '@rollup/rollup-linux-arm-musleabihf': 4.21.0 + '@rollup/rollup-linux-arm64-gnu': 4.21.0 + '@rollup/rollup-linux-arm64-musl': 4.21.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.21.0 + '@rollup/rollup-linux-riscv64-gnu': 4.21.0 + '@rollup/rollup-linux-s390x-gnu': 4.21.0 + '@rollup/rollup-linux-x64-gnu': 4.21.0 + '@rollup/rollup-linux-x64-musl': 4.21.0 + '@rollup/rollup-win32-arm64-msvc': 4.21.0 + '@rollup/rollup-win32-ia32-msvc': 4.21.0 + '@rollup/rollup-win32-x64-msvc': 4.21.0 fsevents: 2.3.3 run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + runtypes@6.7.0: + optional: true + safe-buffer@5.2.1: {} safer-buffer@2.1.2: {} - semver@7.6.2: {} + semver@7.6.3: {} send@0.18.0: dependencies: @@ -4311,6 +5244,8 @@ snapshots: shebang-regex@3.0.0: {} + shell-quote@1.8.1: {} + side-channel@1.0.6: dependencies: call-bind: 1.0.7 @@ -4328,6 +5263,11 @@ snapshots: source-map-js@1.2.0: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map@0.6.1: {} source-map@0.8.0-beta.0: @@ -4395,12 +5335,15 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.4.3 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 + superstruct@1.0.4: + optional: true + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -4409,6 +5352,8 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-preserve-symlinks-flag@1.0.0: {} + text-extensions@2.4.0: {} text-table@0.2.0: {} @@ -4423,7 +5368,10 @@ snapshots: through@2.3.8: {} - tinybench@2.8.0: {} + tiny-case@1.0.3: + optional: true + + tinybench@2.9.0: {} tinypool@1.0.0: {} @@ -4437,47 +5385,57 @@ snapshots: toidentifier@1.0.1: {} + toposort@2.0.2: + optional: true + + tr46@0.0.3: {} + tr46@1.0.1: dependencies: punycode: 2.3.1 tree-kill@1.2.2: {} - ts-api-utils@1.3.0(typescript@5.5.3): + ts-api-utils@1.3.0(typescript@5.5.4): dependencies: - typescript: 5.5.3 + typescript: 5.5.4 ts-interface-checker@0.1.13: {} tslib@2.6.3: {} - tsup@8.1.0(postcss@8.4.39)(typescript@5.5.3): + tsup@8.2.4(@swc/core@1.7.11)(postcss@8.4.41)(tsx@4.17.0)(typescript@5.5.4): dependencies: - bundle-require: 4.2.1(esbuild@0.21.5) + bundle-require: 5.0.0(esbuild@0.23.1) cac: 6.7.14 chokidar: 3.6.0 - debug: 4.3.5 - esbuild: 0.21.5 + consola: 3.2.3 + debug: 4.3.6 + esbuild: 0.23.1 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.4.39) + picocolors: 1.0.1 + postcss-load-config: 6.0.1(postcss@8.4.41)(tsx@4.17.0) resolve-from: 5.0.0 - rollup: 4.18.0 + rollup: 4.21.0 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 optionalDependencies: - postcss: 8.4.39 - typescript: 5.5.3 + '@swc/core': 1.7.11 + postcss: 8.4.41 + typescript: 5.5.4 transitivePeerDependencies: + - jiti - supports-color - - ts-node + - tsx + - yaml - tsx@4.16.2: + tsx@4.17.0: dependencies: - esbuild: 0.21.5 - get-tsconfig: 4.7.5 + esbuild: 0.23.1 + get-tsconfig: 4.7.6 optionalDependencies: fsevents: 2.3.3 @@ -4485,22 +5443,27 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-detect@4.1.0: {} + type-fest@0.20.2: {} + type-fest@2.19.0: + optional: true + type-fest@3.13.1: {} - type-fest@4.21.0: {} + type-fest@4.25.0: {} type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - typescript@5.5.3: {} + typescript@5.5.4: {} - ufo@1.5.3: {} + ufo@1.5.4: {} - uglify-js@3.18.0: + uglify-js@3.19.2: optional: true uid-safe@2.1.5: @@ -4511,11 +5474,13 @@ snapshots: undici-types@5.26.5: {} + undici-types@6.19.6: {} + undici@5.28.4: dependencies: '@fastify/busboy': 2.1.1 - unenv@1.9.0: + unenv@1.10.0: dependencies: consola: 3.2.3 defu: 6.1.4 @@ -4525,6 +5490,13 @@ snapshots: unpipe@1.0.0: {} + unplugin@1.12.2: + dependencies: + acorn: 8.12.1 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.2 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -4533,6 +5505,9 @@ snapshots: utils-merge@1.0.1: {} + valibot@0.31.0-rc.0: + optional: true + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -4540,68 +5515,70 @@ snapshots: vary@1.1.2: {} - vite-node@2.0.2(@types/node@20.14.10): + vite-node@2.0.5(@types/node@20.16.0): dependencies: cac: 6.7.14 - debug: 4.3.5 + debug: 4.3.6 pathe: 1.1.2 tinyrainbow: 1.2.0 - vite: 5.3.3(@types/node@20.14.10) + vite: 5.4.1(@types/node@20.16.0) transitivePeerDependencies: - '@types/node' - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color - terser - vite@5.3.3(@types/node@18.19.39): + vite@5.4.1(@types/node@18.19.44): dependencies: - esbuild: 0.21.5 - postcss: 8.4.39 - rollup: 4.18.0 + esbuild: 0.23.1 + postcss: 8.4.41 + rollup: 4.21.0 optionalDependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.44 fsevents: 2.3.3 - vite@5.3.3(@types/node@20.14.10): + vite@5.4.1(@types/node@20.16.0): dependencies: - esbuild: 0.21.5 - postcss: 8.4.39 - rollup: 4.18.0 + esbuild: 0.23.1 + postcss: 8.4.41 + rollup: 4.21.0 optionalDependencies: - '@types/node': 20.14.10 + '@types/node': 20.16.0 fsevents: 2.3.3 - vitest@2.0.2(@types/node@20.14.10): + vitest@2.0.5(@types/node@20.16.0): dependencies: '@ampproject/remapping': 2.3.0 - '@vitest/expect': 2.0.2 - '@vitest/pretty-format': 2.0.2 - '@vitest/runner': 2.0.2 - '@vitest/snapshot': 2.0.2 - '@vitest/spy': 2.0.2 - '@vitest/utils': 2.0.2 + '@vitest/expect': 2.0.5 + '@vitest/pretty-format': 2.0.5 + '@vitest/runner': 2.0.5 + '@vitest/snapshot': 2.0.5 + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 chai: 5.1.1 - debug: 4.3.5 + debug: 4.3.6 execa: 8.0.1 - magic-string: 0.30.10 + magic-string: 0.30.11 pathe: 1.1.2 std-env: 3.7.0 - tinybench: 2.8.0 + tinybench: 2.9.0 tinypool: 1.0.0 tinyrainbow: 1.2.0 - vite: 5.3.3(@types/node@20.14.10) - vite-node: 2.0.2(@types/node@20.14.10) + vite: 5.4.1(@types/node@20.16.0) + vite-node: 2.0.5(@types/node@20.16.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 20.14.10 + '@types/node': 20.16.0 transitivePeerDependencies: - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color @@ -4611,12 +5588,23 @@ snapshots: dependencies: chalk: 4.1.2 commander: 9.5.0 - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color + webidl-conversions@3.0.1: {} + webidl-conversions@4.0.2: {} + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.6.2: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + whatwg-url@7.1.0: dependencies: lodash.sortby: 4.7.0 @@ -4636,13 +5624,13 @@ snapshots: wordwrap@1.0.0: {} - workerd@1.20240701.0: + workerd@1.20240806.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20240701.0 - '@cloudflare/workerd-darwin-arm64': 1.20240701.0 - '@cloudflare/workerd-linux-64': 1.20240701.0 - '@cloudflare/workerd-linux-arm64': 1.20240701.0 - '@cloudflare/workerd-windows-64': 1.20240701.0 + '@cloudflare/workerd-darwin-64': 1.20240806.0 + '@cloudflare/workerd-darwin-arm64': 1.20240806.0 + '@cloudflare/workerd-linux-64': 1.20240806.0 + '@cloudflare/workerd-linux-arm64': 1.20240806.0 + '@cloudflare/workerd-windows-64': 1.20240806.0 wrap-ansi@7.0.0: dependencies: @@ -4660,8 +5648,6 @@ snapshots: ws@8.18.0: {} - yaml@2.4.5: {} - yocto-queue@0.1.0: {} yocto-queue@1.1.1: {} @@ -4672,9 +5658,17 @@ snapshots: mustache: 4.2.0 stacktracey: 2.1.8 + yup@1.4.0: + dependencies: + property-expr: 2.0.6 + tiny-case: 1.0.3 + toposort: 2.0.2 + type-fest: 2.19.0 + optional: true + zod@3.23.8: {} zx@8.1.4: optionalDependencies: '@types/fs-extra': 11.0.4 - '@types/node': 20.14.10 + '@types/node': 20.16.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8271c70..273af6f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,5 @@ packages: - "packages/*" + - "examples/*" + - "tests-examples/*" - "." diff --git a/tests-examples/tests-tool/.test-dev.test.ts b/tests-examples/tests-tool/.test-dev.test.ts new file mode 100644 index 0000000..3dfdb12 --- /dev/null +++ b/tests-examples/tests-tool/.test-dev.test.ts @@ -0,0 +1,21 @@ +export { testRun }; + +import { expect, fetch, getServerUrl, run, test } from "@brillout/test-e2e"; + +function testRun(cmd: `pnpm run dev`) { + run(cmd, { + doNotFailOnWarning: true, + serverIsReadyMessage: "ready", + }); + + test("/", async () => { + const response = await fetch(getServerUrl() + "/"); + + const content = await response.text(); + + expect(content).toContain('"something"'); + expect(response.headers.has("x-custom-header")).toBe(true); + }); +} + +testRun("pnpm run dev"); diff --git a/tests-examples/tests-tool/package.json b/tests-examples/tests-tool/package.json new file mode 100644 index 0000000..0a23bab --- /dev/null +++ b/tests-examples/tests-tool/package.json @@ -0,0 +1,36 @@ +{ + "name": "@universal-middleware-tests/tool", + "version": "0.0.0", + "private": true, + "type": "module", + "author": "Joël Charles ", + "repository": "https://github.com/magne4000/universal-handler", + "license": "MIT", + "scripts": { + "dev": "vite --port 3000", + "test:e2e": "test-e2e", + "test:types": "vitest --typecheck", + "test": "run-s \"test:types run\" test:e2e", + "test:typecheck": "tsc -p tsconfig.json --noEmit" + }, + "devDependencies": { + "@brillout/test-e2e": "^0.5.34", + "@hono/vite-dev-server": "^0.14.0", + "@types/node": "^20.14.10", + "@universal-middleware-examples/tool": "workspace:*", + "@universal-middleware/core": "link:packages/core", + "@universal-middleware/express": "link:packages/adapter-express", + "@universal-middleware/hattip": "link:packages/adapter-hattip", + "@universal-middleware/hono": "link:packages/adapter-hono", + "@universal-middleware/webroute": "link:packages/adapter-webroute", + "hono": "^4.5.6", + "npm-run-all2": "^6.2.2", + "playwright": "^1.46.1", + "rimraf": "^6.0.0", + "tsx": "^4.17.0", + "typescript": "^5.5.4", + "vite": "^5.4.1", + "vitest": "^2.0.5" + }, + "sideEffects": false +} diff --git a/tests-examples/tests-tool/src/hono-entry.ts b/tests-examples/tests-tool/src/hono-entry.ts new file mode 100644 index 0000000..ecb841d --- /dev/null +++ b/tests-examples/tests-tool/src/hono-entry.ts @@ -0,0 +1,12 @@ +import { Hono } from "hono"; +import contextMiddleware from "@universal-middleware-examples/tool/middlewares/context-middleware-hono"; +import headersMiddleware from "@universal-middleware-examples/tool/middlewares/headers-middleware-hono"; +import handler from "@universal-middleware-examples/tool/dummy-handler-hono"; + +const app = new Hono(); + +app.use(contextMiddleware("something")); +app.use(headersMiddleware()); +app.get("/", handler()); + +export default app; diff --git a/tests-examples/tests-tool/test-type.test-d.ts b/tests-examples/tests-tool/test-type.test-d.ts new file mode 100644 index 0000000..4833269 --- /dev/null +++ b/tests-examples/tests-tool/test-type.test-d.ts @@ -0,0 +1,81 @@ +import { expectTypeOf, test } from "vitest"; +import honoContextMiddleware from "@universal-middleware-examples/tool/middlewares/context-middleware-hono"; +import honoHeadersMiddleware from "@universal-middleware-examples/tool/middlewares/headers-middleware-hono"; +import honoHandler from "@universal-middleware-examples/tool/dummy-handler-hono"; +import expressContextMiddleware from "@universal-middleware-examples/tool/middlewares/context-middleware-express"; +import expressHeadersMiddleware from "@universal-middleware-examples/tool/middlewares/headers-middleware-express"; +import expressHandler from "@universal-middleware-examples/tool/dummy-handler-express"; +import hattipContextMiddleware from "@universal-middleware-examples/tool/middlewares/context-middleware-hattip"; +import hattipHeadersMiddleware from "@universal-middleware-examples/tool/middlewares/headers-middleware-hattip"; +import hattipHandler from "@universal-middleware-examples/tool/dummy-handler-hattip"; +import webrouteContextMiddleware from "@universal-middleware-examples/tool/middlewares/context-middleware-webroute"; +import webrouteHeadersMiddleware from "@universal-middleware-examples/tool/middlewares/headers-middleware-webroute"; +import webrouteHandler from "@universal-middleware-examples/tool/dummy-handler-webroute"; +import contextMiddleware from "@universal-middleware-examples/tool/middlewares/context-middleware"; +import headersMiddleware from "@universal-middleware-examples/tool/middlewares/headers-middleware"; +import handler from "@universal-middleware-examples/tool/dummy-handler"; +import type { HonoHandler, HonoMiddleware } from "@universal-middleware/hono"; +import type { + HattipHandler, + HattipMiddleware, +} from "@universal-middleware/hattip"; +import type { + NodeHandler, + NodeMiddleware, +} from "@universal-middleware/express"; +import type { + WebrouteHandler, + WebrouteMiddleware, +} from "@universal-middleware/webroute"; +import type { + UniversalHandler, + UniversalMiddleware, +} from "@universal-middleware/core"; + +test("hono", () => { + expectTypeOf(honoContextMiddleware).returns.toEqualTypeOf(); + expectTypeOf(honoHeadersMiddleware).returns.toEqualTypeOf(); + expectTypeOf(honoHandler).returns.toEqualTypeOf(); +}); + +test("express", () => { + expectTypeOf( + expressContextMiddleware, + ).returns.toEqualTypeOf(); + expectTypeOf( + expressHeadersMiddleware, + ).returns.toEqualTypeOf(); + expectTypeOf(expressHandler).returns.toEqualTypeOf(); +}); + +test("hattip", () => { + expectTypeOf( + hattipContextMiddleware, + ).returns.toEqualTypeOf(); + expectTypeOf( + hattipHeadersMiddleware, + ).returns.toEqualTypeOf(); + expectTypeOf(hattipHandler).returns.toEqualTypeOf(); +}); + +test("webroute", () => { + expectTypeOf(webrouteContextMiddleware).returns.toEqualTypeOf< + WebrouteMiddleware + >(); + expectTypeOf(webrouteHeadersMiddleware).returns.toEqualTypeOf< + WebrouteMiddleware<{ something?: string }, { something?: string }> + >(); + expectTypeOf(webrouteHandler).returns.toEqualTypeOf< + WebrouteHandler + >(); +}); + +test("generic", () => { + expectTypeOf(contextMiddleware).returns.toEqualTypeOf< + (req: Request, ctx: Universal.Context) => { something: string } + >(); + expectTypeOf(headersMiddleware).returns.toEqualTypeOf< + UniversalMiddleware<{ something?: string }> + >(); + expectTypeOf(handler).returns.toEqualTypeOf(); +}); diff --git a/tests-examples/tests-tool/tsconfig.json b/tests-examples/tests-tool/tsconfig.json new file mode 100644 index 0000000..4082f16 --- /dev/null +++ b/tests-examples/tests-tool/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/tests-examples/tests-tool/vite.config.ts b/tests-examples/tests-tool/vite.config.ts new file mode 100644 index 0000000..298c49e --- /dev/null +++ b/tests-examples/tests-tool/vite.config.ts @@ -0,0 +1,22 @@ +import devServer from "@hono/vite-dev-server"; +import { defineConfig, type Plugin } from "vite"; + +export default defineConfig({ + plugins: [ + devServer({ + entry: "src/hono-entry.ts", + + exclude: [ + /^\/@.+$/, + /.*\.(ts|tsx|vue)($|\?)/, + /.*\.(s?css|less)($|\?)/, + /^\/favicon\.ico$/, + /.*\.(svg|png)($|\?)/, + /^\/(public|assets|static)\/.+/, + /^\/node_modules\/.*/, + ], + + injectClientScript: false, + }) as Plugin, + ], +}); diff --git a/tests-examples/tests-tool/vitest.config.ts b/tests-examples/tests-tool/vitest.config.ts new file mode 100644 index 0000000..3a89b41 --- /dev/null +++ b/tests-examples/tests-tool/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + include: [], + }, +});