diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index d29445011..000000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -*.snap diff --git a/.github/renovate.json5 b/.github/renovate.json5 index d16f5e308..050412652 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -8,7 +8,7 @@ packageRules: [ { packageNames: ["node"], - allowedVersions: "<=22", + allowedVersions: "<=24", rangeStrategy: "replace", }, { diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 184e90bc8..fbb112539 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: 22 + node-version: 24 - run: corepack enable @@ -33,7 +33,7 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile - - run: pnpm lint + - run: node --run lint fmt: runs-on: ubuntu-latest @@ -55,7 +55,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: 22 + node-version: 24 - run: corepack enable @@ -73,7 +73,7 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile - - run: pnpm typecheck + - run: node --run typecheck test: runs-on: ubuntu-latest @@ -83,7 +83,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: 22 + node-version: 24 - run: corepack enable @@ -101,7 +101,7 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile - - run: pnpm test + - run: node --run test env: NODE_ENV: test diff --git a/.gitignore b/.gitignore index 7eb6d9760..0543b85e3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,8 @@ .idea/ .env coverage/ +db/*.sqlite3* dist/ -sqlite/ redoc-static.html # Logs diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 0862da117..000000000 --- a/.npmrc +++ /dev/null @@ -1,3 +0,0 @@ -save-exact = true -shell-emulator = true -use-lockfile-v6 = true diff --git a/Dockerfile b/Dockerfile index 48d9accd5..92cc02afb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22-alpine as base +FROM node:24-alpine as base WORKDIR /app @@ -15,35 +15,31 @@ FROM base as base_deps ENV CI=1 -COPY .npmrc package.json pnpm-lock.yaml ./ -COPY patches/ patches/ +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ RUN corepack enable RUN corepack prepare --activate # Install dependencies -RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ - pnpm install --frozen-lockfile +RUN pnpm install --frozen-lockfile --ignore-scripts FROM base_deps as build -COPY knexfile.js tsconfig.json tsup.config.ts ./ +COPY tsconfig.json tsdown.config.ts ./ COPY src/ src/ -RUN pnpm run build +RUN node --run build FROM base_deps AS docs COPY docs/openapi.yaml docs/openapi.yaml -RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ - pnpm run docs +RUN node --run docs FROM base -COPY .npmrc knexfile.js package.json pnpm-lock.yaml ./ +COPY package.json pnpm-lock.yaml ./ COPY src/ src/ -COPY migrations/ migrations/ COPY --from=build /app/dist dist/ COPY --from=docs /app/redoc-static.html . @@ -54,4 +50,4 @@ ENV NODE_OPTIONS="--enable-source-maps" # Warnings disabled, we know what we're doing and they're annoying ENV NODE_NO_WARNINGS=1 -CMD ["node", "dist/index.js"] +CMD ["node", "--run", "start"] diff --git a/biome.json b/biome.json index b9d26687a..12ab83e22 100644 --- a/biome.json +++ b/biome.json @@ -1,27 +1,24 @@ { - "$schema": "https://biomejs.dev/schemas/1.8.0/schema.json", + "$schema": "https://biomejs.dev/schemas/2.0.5/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "defaultBranch": "main", + "useIgnoreFile": true + }, "formatter": { "lineEnding": "lf", "indentStyle": "tab", "lineWidth": 90, "formatWithErrors": true }, - "organizeImports": { - "enabled": false - }, "javascript": { "formatter": { "quoteStyle": "double", "semicolons": "asNeeded" } }, - "linter": { - "enabled": false - }, - "vcs": { - "enabled": true, - "clientKind": "git", - "defaultBranch": "main", - "useIgnoreFile": true - } + + "assist": { "actions": { "source": { "organizeImports": "off" } } }, + "linter": { "enabled": false } } diff --git a/sqlite/.gitkeep b/db/.gitkeep similarity index 100% rename from sqlite/.gitkeep rename to db/.gitkeep diff --git a/eslint.config.js b/eslint.config.js index df77fbb09..d99ef3b0e 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,5 +1,26 @@ import antfu from "@antfu/eslint-config" +const sortImports = { + "perfectionist/sort-imports": [ + "error", + { + type: "natural", + internalPattern: ["^@/", "^~/", "^#[a-zA-Z0-9-]+/"], + newlinesBetween: "always", + groups: [ + ["builtin", "builtin-type"], + ["external", "external-type"], + ["internal", "internal-type"], + ["parent", "parent-type"], + ["sibling", "sibling-type"], + ["index", "index-type"], + "object", + "unknown", + ], + }, + ], +} + export default antfu({ ignores: ["**/*.json"], markdown: false, @@ -7,39 +28,38 @@ export default antfu({ jsonc: false, jsx: false, toml: false, - yaml: false, test: { overrides: { "test/no-import-node-test": "off" } }, typescript: { tsconfigPath: "tsconfig.json", - overrides: { - "no-console": "off", - "ts/no-use-before-define": "off", - "ts/consistent-type-definitions": "off", - "ts/consistent-type-imports": ["error", { fixStyle: "inline-type-imports" }], - "ts/no-unsafe-argument": "off", - "ts/no-unsafe-assignment": "off", - "node/prefer-global/process": "off", - "antfu/no-top-level-await": "off", - "import/consistent-type-specifier-style": "off", + ignoresTypeAware: ["copy.ts", "*.config.*"], - "perfectionist/sort-imports": [ + overridesTypeAware: { + "ts/no-floating-promises": [ "error", { - type: "natural", - internalPattern: ["^@/", "^~/", "^#[a-zA-Z0-9-]+/"], - newlinesBetween: "always", - groups: [ - ["builtin", "builtin-type"], - ["external", "external-type"], - ["internal", "internal-type"], - ["parent", "parent-type"], - ["sibling", "sibling-type"], - ["index", "index-type"], - "object", - "unknown", + allowForKnownSafeCalls: [ + { from: "package", package: "node:test", name: ["describe", "it", "test"] }, ], }, ], }, + + overrides: { + "no-console": "off", + "antfu/no-top-level-await": "off", + "import/consistent-type-specifier-style": ["error", "prefer-top-level"], + "node/prefer-global/process": "off", + "ts/consistent-type-definitions": "off", + "ts/consistent-type-imports": [ + "error", + { fixStyle: "inline-type-imports", disallowTypeAnnotations: false }, + ], + "ts/no-unsafe-argument": "off", + "ts/no-unsafe-assignment": "off", + "ts/no-use-before-define": "off", + "unused-imports/no-unused-vars": "off", + + ...sortImports, + }, }, }) diff --git a/knexfile.js b/knexfile.js deleted file mode 100644 index 257328e43..000000000 --- a/knexfile.js +++ /dev/null @@ -1,20 +0,0 @@ -import { mkdirSync } from "node:fs" - -mkdirSync("./sqlite", { recursive: true }) - -/** @type5 {import("knex").Knex.Config} */ -export default { - client: "better-sqlite3", - migrations: { - tableName: "migrations", - directory: "migrations", - }, - useNullAsDefault: true, - connection: { - filename: `./sqlite/${process.env.NODE_ENV ?? "development"}.sqlite3`, - options: { - nativeBinding: - process.env.NODE_ENV === "production" ? "./dist/better_sqlite3.node" : undefined, - }, - }, -} diff --git a/migrations/20190611171759_create_tables.js b/migrations/20190611171759_create_tables.js deleted file mode 100644 index 3feb96f7c..000000000 --- a/migrations/20190611171759_create_tables.js +++ /dev/null @@ -1,20 +0,0 @@ -export async function up(knex) { - if (await knex.schema.hasTable("relations")) return - - const promises = [] - - promises.push( - knex.schema.createTable("relations", (table) => { - table.integer("anilist").unique() - table.integer("anidb").unique() - table.integer("myanimelist").unique() - table.integer("kitsu").unique() - }), - ) - - await Promise.all(promises) -} - -export async function down(knex) { - await knex.schema.dropTableIfExists("relations") -} diff --git a/migrations/20221230042725_anime-lists.js b/migrations/20221230042725_anime-lists.js deleted file mode 100644 index d53794824..000000000 --- a/migrations/20221230042725_anime-lists.js +++ /dev/null @@ -1,25 +0,0 @@ -export async function up(knex) { - await knex.schema.alterTable("relations", (table) => { - table.text("anime-planet").unique() - table.integer("anisearch").unique() - table.text("imdb").unique() - table.integer("livechart").unique() - table.text("notify-moe").unique() - table.integer("themoviedb").unique() - table.integer("thetvdb") - }) -} - -export async function down(knex) { - await knex.schema.alterTable("relations", (table) => { - table.dropColumns( - "anime-planet", - "anisearch", - "imdb", - "livechart", - "notify-moe", - "themoviedb", - "thetvdb", - ) - }) -} diff --git a/migrations/20240616234100_wal.js b/migrations/20240616234100_wal.js deleted file mode 100644 index b9ac68fab..000000000 --- a/migrations/20240616234100_wal.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * - * @param knex {import("knex").Knex} - * @return {Promise} - */ -export async function up(knex) { - await knex.raw("PRAGMA journal_mode=WAL;") -} - -export async function down() {} diff --git a/migrations/20240617000000_special_dbs.js b/migrations/20240617000000_special_dbs.js deleted file mode 100644 index a091aaf51..000000000 --- a/migrations/20240617000000_special_dbs.js +++ /dev/null @@ -1,15 +0,0 @@ -/** @param knex {import("knex").Knex} */ -export async function up(knex) { - await knex.schema.alterTable("relations", (table) => { - table.dropUnique("imdb") - table.dropUnique("themoviedb") - }) -} - -/** @param knex {import("knex").Knex} */ -export async function down(knex) { - await knex.schema.alterTable("relations", (table) => { - table.unique("imdb") - table.unique("themoviedb") - }) -} diff --git a/mise.toml b/mise.toml new file mode 100644 index 000000000..6ea5a7e1f --- /dev/null +++ b/mise.toml @@ -0,0 +1,2 @@ +[tools] +node = "24" diff --git a/package.json b/package.json index 7ecf8cf3f..104f23e52 100644 --- a/package.json +++ b/package.json @@ -6,86 +6,60 @@ "private": true, "license": "AGPL-3.0-only", "homepage": "https://arm.haglund.dev/docs", - "packageManager": "pnpm@10.6.2", + "packageManager": "pnpm@10.12.4", "engines": { - "node": ">=22" + "node": "^24" }, "simple-git-hooks": { "pre-commit": "node_modules/.bin/nano-staged" }, "nano-staged": { - "*.{js,cjs,mjs,ts,cts,mts,json}": ["biome check --fix"] + "*.{js,cjs,mjs,ts,cts,mts,json}": [ + "biome check --fix" + ] }, "scripts": { - "build": "tsup", - "dev": "node --experimental-strip-types --experimental-transform-types --watch src/index.ts", + "build": "tsdown", + "dev": "node --watch src/index.ts", "docs": "pnpm --package=@redocly/cli dlx redocly build-docs docs/openapi.yaml", "docs:dev": "onchange --initial --kill docs/openapi.yaml -- pnpm --silent run docs", "docker:build": "docker build . --tag arm-server", "docker:start": "pnpm --silent docker:build; pnpm --silent docker:run", "docker:run": "docker run -it --rm --name arm -p 3000:3000 arm-server", - "fetch-data": "node --experimental-strip-types --experimental-transform-types bin/update.ts --exit", + "fetch-data": "node bin/update.ts --exit", "lint": "eslint src", - "migrate:create": "knex migrate:make --knexfile knexfile.js -x ts", - "start": "node --experimental-strip-types --experimental-transform-types src/index.ts", + "start": "node dist/index.mjs", "test": "vitest", "typecheck": "tsc --noEmit", - "prepare": "is-ci || simple-git-hooks" - }, - "resolutions": { - "esbuild": "0.25.0" + "prepare": "simple-git-hooks" }, "devDependencies": { - "@antfu/eslint-config": "4.16.1", - "@biomejs/biome": "1.9.4", - "@hono/node-server": "1.14.1", + "@antfu/eslint-config": "4.16.2", + "@biomejs/biome": "2.0.6", + "@hono/node-server": "1.15.0", "@hono/standard-validator": "0.1.2", "@standard-schema/spec": "1.0.0", - "@tsconfig/node22": "22.0.1", + "@tsconfig/node24": "24.0.1", "@tsconfig/strictest": "2.0.5", "@types/json-schema": "7.0.15", - "@types/node": "22.15.34", - "@vitest/coverage-v8": "3.1.3", - "better-sqlite3": "11.9.1", - "dotenv": "16.5.0", - "eslint": "9.30.0", - "hono": "4.7.6", - "is-ci": "4.1.0", - "knex": "3.1.0", - "mentoss": "0.9.2", + "@types/node": "24.0.10", + "@vitest/coverage-v8": "3.2.4", + "db0": "0.3.2", + "eslint": "9.30.1", + "hono": "4.8.3", + "kysely": "0.28.2", + "kysely-db0": "0.0.1-beta.1", + "mentoss": "0.11.0", "nano-staged": "0.8.0", "onchange": "7.1.0", - "pino": "9.6.0", + "pino": "9.7.0", "pino-pretty": "13.0.0", - "simple-git-hooks": "2.12.1", - "tsconfig-paths": "4.2.0", - "tsup": "8.4.0", - "type-fest": "4.40.0", + "simple-git-hooks": "2.13.0", + "tsdown": "0.12.9", + "type-fest": "4.41.0", "typescript": "5.8.3", - "valibot": "1.0.0", - "vitest": "3.1.3", + "valibot": "1.1.0", + "vitest": "3.2.4", "xior": "0.7.8" - }, - "pnpm": { - "overrides": { - "@eslint/markdown": "-", - "@stylistic/eslint-plugin": "-", - "eslint-plugin-jsonc": "-", - "eslint-plugin-toml": "-", - "eslint-plugin-vue": "-", - "eslint-plugin-yml": "-", - "eslint-processor-vue-blocks": "-", - "jsonc-eslint-parser": "-", - "sucrase": "-", - "toml-eslint-parser": "-", - "yaml-eslint-parser": "-", - "is-core-module": "npm:@nolyfill/is-core-module@^1", - "safe-buffer": "npm:@nolyfill/safe-buffer@^1" - }, - "onlyBuiltDependencies": ["better-sqlite3"], - "ignoredBuiltDependencies": ["@biomejs/biome", "esbuild", "simple-git-hooks"], - "patchedDependencies": { - "knex": "patches/knex.patch" - } } } diff --git a/patches/knex.patch b/patches/knex.patch deleted file mode 100644 index a8252261d..000000000 --- a/patches/knex.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff --git a/lib/dialects/index.js b/lib/dialects/index.js -index 559a366685d6517de819d1925233e972089928e7..476dcc63fd84758a7c65b1d4b493b73460f62764 100644 ---- a/lib/dialects/index.js -+++ b/lib/dialects/index.js -@@ -4,16 +4,6 @@ exports.getDialectByNameOrAlias = void 0; - const { resolveClientNameWithAliases } = require('../util/helpers'); - const dbNameToDialectLoader = Object.freeze({ - 'better-sqlite3': () => require('./better-sqlite3'), -- cockroachdb: () => require('./cockroachdb'), -- mssql: () => require('./mssql'), -- mysql: () => require('./mysql'), -- mysql2: () => require('./mysql2'), -- oracle: () => require('./oracle'), -- oracledb: () => require('./oracledb'), -- pgnative: () => require('./pgnative'), -- postgres: () => require('./postgres'), -- redshift: () => require('./redshift'), -- sqlite3: () => require('./sqlite3'), - }); - /** - * Gets the Dialect object with the given client name or throw an diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4c3212cbb..637272040 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,48 +5,39 @@ settings: excludeLinksFromLockfile: false overrides: - esbuild: 0.25.0 - '@eslint/markdown': '-' - '@stylistic/eslint-plugin': '-' - eslint-plugin-jsonc: '-' - eslint-plugin-toml: '-' - eslint-plugin-vue: '-' - eslint-plugin-yml: '-' - eslint-processor-vue-blocks: '-' - jsonc-eslint-parser: '-' - sucrase: '-' - toml-eslint-parser: '-' - yaml-eslint-parser: '-' - is-core-module: npm:@nolyfill/is-core-module@^1 - safe-buffer: npm:@nolyfill/safe-buffer@^1 - -patchedDependencies: - knex: - hash: db01a09d7d8f6a60609e1e3ea48a97742c28d90d3be6cf2cb3e330ee5a8d9082 - path: patches/knex.patch + '@antfu/eslint-config>@eslint/markdown': '-' + '@antfu/eslint-config>@stylistic/eslint-plugin': '-' + '@antfu/eslint-config>eslint-plugin-jsonc': '-' + '@antfu/eslint-config>eslint-plugin-toml': '-' + '@antfu/eslint-config>eslint-plugin-vue': '-' + '@antfu/eslint-config>eslint-processor-vue-blocks': '-' + '@antfu/eslint-config>jsonc-eslint-parser': '-' + '@antfu/eslint-config>toml-eslint-parser': '-' + '@antfu/eslint-config>vitest': '-' + eslint-plugin-pnpm>jsonc-eslint-parser: '-' importers: .: devDependencies: '@antfu/eslint-config': - specifier: 4.16.1 - version: 4.16.1(eslint@9.30.0)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0)) + specifier: 4.16.2 + version: 4.16.2(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0)) '@biomejs/biome': - specifier: 1.9.4 - version: 1.9.4 + specifier: 2.0.6 + version: 2.0.6 '@hono/node-server': - specifier: 1.14.1 - version: 1.14.1(hono@4.7.6) + specifier: 1.15.0 + version: 1.15.0(hono@4.8.3) '@hono/standard-validator': specifier: 0.1.2 - version: 0.1.2(@standard-schema/spec@1.0.0)(hono@4.7.6) + version: 0.1.2(@standard-schema/spec@1.0.0)(hono@4.8.3) '@standard-schema/spec': specifier: 1.0.0 version: 1.0.0 - '@tsconfig/node22': - specifier: 22.0.1 - version: 22.0.1 + '@tsconfig/node24': + specifier: 24.0.1 + version: 24.0.1 '@tsconfig/strictest': specifier: 2.0.5 version: 2.0.5 @@ -54,32 +45,29 @@ importers: specifier: 7.0.15 version: 7.0.15 '@types/node': - specifier: 22.15.34 - version: 22.15.34 + specifier: 24.0.10 + version: 24.0.10 '@vitest/coverage-v8': - specifier: 3.1.3 - version: 3.1.3(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0)) - better-sqlite3: - specifier: 11.9.1 - version: 11.9.1 - dotenv: - specifier: 16.5.0 - version: 16.5.0 + specifier: 3.2.4 + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0)) + db0: + specifier: 0.3.2 + version: 0.3.2(better-sqlite3@11.10.0) eslint: - specifier: 9.30.0 - version: 9.30.0 + specifier: 9.30.1 + version: 9.30.1(jiti@2.4.2) hono: - specifier: 4.7.6 - version: 4.7.6 - is-ci: - specifier: 4.1.0 - version: 4.1.0 - knex: - specifier: 3.1.0 - version: 3.1.0(patch_hash=db01a09d7d8f6a60609e1e3ea48a97742c28d90d3be6cf2cb3e330ee5a8d9082)(better-sqlite3@11.9.1) + specifier: 4.8.3 + version: 4.8.3 + kysely: + specifier: 0.28.2 + version: 0.28.2 + kysely-db0: + specifier: 0.0.1-beta.1 + version: 0.0.1-beta.1(db0@0.3.2(better-sqlite3@11.10.0))(kysely@0.28.2) mentoss: - specifier: 0.9.2 - version: 0.9.2 + specifier: 0.11.0 + version: 0.11.0 nano-staged: specifier: 0.8.0 version: 0.8.0 @@ -87,32 +75,29 @@ importers: specifier: 7.1.0 version: 7.1.0 pino: - specifier: 9.6.0 - version: 9.6.0 + specifier: 9.7.0 + version: 9.7.0 pino-pretty: specifier: 13.0.0 version: 13.0.0 simple-git-hooks: - specifier: 2.12.1 - version: 2.12.1 - tsconfig-paths: - specifier: 4.2.0 - version: 4.2.0 - tsup: - specifier: 8.4.0 - version: 8.4.0(postcss@8.5.3)(typescript@5.8.3)(yaml@2.7.0) + specifier: 2.13.0 + version: 2.13.0 + tsdown: + specifier: 0.12.9 + version: 0.12.9(typescript@5.8.3) type-fest: - specifier: 4.40.0 - version: 4.40.0 + specifier: 4.41.0 + version: 4.41.0 typescript: specifier: 5.8.3 version: 5.8.3 valibot: - specifier: 1.0.0 - version: 1.0.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.8.3) vitest: - specifier: 3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0) xior: specifier: 0.7.8 version: 0.7.8 @@ -123,8 +108,8 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@antfu/eslint-config@4.16.1': - resolution: {integrity: sha512-20hA+bjnEmYnZChnQFM9ugPF+FR5N2yd6UNUjhZSmTeYpaKnkJ1EvZyEWxnmVGKC5O5HNDEJY3BXUQymdOoftQ==} + '@antfu/eslint-config@4.16.2': + resolution: {integrity: sha512-5KHZR+7ne+HZnOJUKeTTdHKYA/yOygPssaJ7TZOMoBqjSMtVAa7FO5Wvu2dEtkibM6v3emYyKnQnia1S8NHQeA==} hasBin: true peerDependencies: '@eslint-react/eslint-plugin': ^1.38.4 @@ -175,76 +160,80 @@ packages: '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + '@babel/generator@7.27.5': + resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.9': - resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} + '@babel/parser@7.27.7': + resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/types@7.26.9': - resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + '@babel/types@7.27.7': + resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@biomejs/biome@1.9.4': - resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + '@biomejs/biome@2.0.6': + resolution: {integrity: sha512-RRP+9cdh5qwe2t0gORwXaa27oTOiQRQvrFf49x2PA1tnpsyU7FIHX4ZOFMtBC4QNtyWsN7Dqkf5EDbg4X+9iqA==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@1.9.4': - resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + '@biomejs/cli-darwin-arm64@2.0.6': + resolution: {integrity: sha512-AzdiNNjNzsE6LfqWyBvcL29uWoIuZUkndu+wwlXW13EKcBHbbKjNQEZIJKYDc6IL+p7bmWGx3v9ZtcRyIoIz5A==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@1.9.4': - resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + '@biomejs/cli-darwin-x64@2.0.6': + resolution: {integrity: sha512-wJjjP4E7bO4WJmiQaLnsdXMa516dbtC6542qeRkyJg0MqMXP0fvs4gdsHhZ7p9XWTAmGIjZHFKXdsjBvKGIJJQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@1.9.4': - resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + '@biomejs/cli-linux-arm64-musl@2.0.6': + resolution: {integrity: sha512-CVPEMlin3bW49sBqLBg2x016Pws7eUXA27XYDFlEtponD0luYjg2zQaMJ2nOqlkKG9fqzzkamdYxHdMDc2gZFw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@1.9.4': - resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + '@biomejs/cli-linux-arm64@2.0.6': + resolution: {integrity: sha512-ZSVf6TYo5rNMUHIW1tww+rs/krol7U5A1Is/yzWyHVZguuB0lBnIodqyFuwCNqG9aJGyk7xIMS8HG0qGUPz0SA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@1.9.4': - resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + '@biomejs/cli-linux-x64-musl@2.0.6': + resolution: {integrity: sha512-mKHE/e954hR/hSnAcJSjkf4xGqZc/53Kh39HVW1EgO5iFi0JutTN07TSjEMg616julRtfSNJi0KNyxvc30Y4rQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@1.9.4': - resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + '@biomejs/cli-linux-x64@2.0.6': + resolution: {integrity: sha512-geM1MkHTV1Kh2Cs/Xzot9BOF3WBacihw6bkEmxkz4nSga8B9/hWy5BDiOG3gHDGIBa8WxT0nzsJs2f/hPqQIQw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@1.9.4': - resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + '@biomejs/cli-win32-arm64@2.0.6': + resolution: {integrity: sha512-290V4oSFoKaprKE1zkYVsDfAdn0An5DowZ+GIABgjoq1ndhvNxkJcpxPsiYtT7slbVe3xmlT0ncdfOsN7KruzA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@1.9.4': - resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + '@biomejs/cli-win32-x64@2.0.6': + resolution: {integrity: sha512-bfM1Bce0d69Ao7pjTjUS+AWSZ02+5UHdiAP85Th8e9yV5xzw6JrHXbL5YWlcEKQ84FIZMdDc7ncuti1wd2sdbw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -261,6 +250,15 @@ packages: '@clack/prompts@0.11.0': resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} + '@emnapi/core@1.4.3': + resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + + '@emnapi/runtime@1.4.3': + resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + + '@emnapi/wasi-threads@1.0.2': + resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + '@es-joy/jsdoccomment@0.50.2': resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} @@ -269,152 +267,152 @@ packages: resolution: {integrity: sha512-BXuN7BII+8AyNtn57euU2Yxo9yA/KUDNzrpXyi3pfqKmBhhysR6ZWOebFh3vyPoqA3/j1SOvGgucElMGwlXing==} engines: {node: '>=20.11.0'} - '@esbuild/aix-ppc64@0.25.0': - resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} + '@esbuild/aix-ppc64@0.25.5': + resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.0': - resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} + '@esbuild/android-arm64@0.25.5': + resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.0': - resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} + '@esbuild/android-arm@0.25.5': + resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.0': - resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} + '@esbuild/android-x64@0.25.5': + resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.0': - resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} + '@esbuild/darwin-arm64@0.25.5': + resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.0': - resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} + '@esbuild/darwin-x64@0.25.5': + resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.0': - resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} + '@esbuild/freebsd-arm64@0.25.5': + resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.0': - resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} + '@esbuild/freebsd-x64@0.25.5': + resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.0': - resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} + '@esbuild/linux-arm64@0.25.5': + resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.0': - resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} + '@esbuild/linux-arm@0.25.5': + resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.0': - resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} + '@esbuild/linux-ia32@0.25.5': + resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.0': - resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} + '@esbuild/linux-loong64@0.25.5': + resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.0': - resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} + '@esbuild/linux-mips64el@0.25.5': + resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.0': - resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} + '@esbuild/linux-ppc64@0.25.5': + resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.0': - resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} + '@esbuild/linux-riscv64@0.25.5': + resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.0': - resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} + '@esbuild/linux-s390x@0.25.5': + resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.0': - resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} + '@esbuild/linux-x64@0.25.5': + resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.0': - resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} + '@esbuild/netbsd-arm64@0.25.5': + resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.0': - resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} + '@esbuild/netbsd-x64@0.25.5': + resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.0': - resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} + '@esbuild/openbsd-arm64@0.25.5': + resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.0': - resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} + '@esbuild/openbsd-x64@0.25.5': + resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.25.0': - resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} + '@esbuild/sunos-x64@0.25.5': + resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.0': - resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} + '@esbuild/win32-arm64@0.25.5': + resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.0': - resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} + '@esbuild/win32-ia32@0.25.5': + resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.0': - resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} + '@esbuild/win32-x64@0.25.5': + resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -435,11 +433,11 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/compat@1.2.7': - resolution: {integrity: sha512-xvv7hJE32yhegJ8xNAnb62ggiAwTYHBpUCWhRxEj/ksvgDJuSXfoDkBcRYaYNFiJ+jH0IE3K16hd+xXzhBgNbg==} + '@eslint/compat@1.3.1': + resolution: {integrity: sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^9.10.0 + eslint: ^8.40 || 9 peerDependenciesMeta: eslint: optional: true @@ -460,12 +458,16 @@ packages: resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.15.1': + resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.30.0': - resolution: {integrity: sha512-Wzw3wQwPvc9sHM+NjakWTcPx11mbZyiYHuwWa/QfZ7cIRX7WK54PSk7bdyXDaoaopUcMatv1zaQvOAAO8hCdww==} + '@eslint/js@9.30.1': + resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -476,12 +478,12 @@ packages: resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.1': - resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} + '@eslint/plugin-kit@0.3.3': + resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@hono/node-server@1.14.1': - resolution: {integrity: sha512-vmbuM+HPinjWzPe7FFPWMMQMsbKE9gDPhaH0FFdqbGpkT5lp++tcWDTxwBl5EgS5y6JVgIaCdjeHRfQ4XRBRjQ==} + '@hono/node-server@1.15.0': + resolution: {integrity: sha512-MjmK4l5N4dQpZ9OSWN0tCj7ejuc7WvuWMzSKtc89bnknJykAeHxzRigXBTYZk85H6Awrii6RM59iUiUluApu2A==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 @@ -508,8 +510,8 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.2': - resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} '@isaacs/cliui@8.0.2': @@ -520,26 +522,24 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.10': + resolution: {integrity: sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==} - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@napi-rs/wasm-runtime@0.2.11': + resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -553,18 +553,84 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nolyfill/is-core-module@1.0.39': - resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} - engines: {node: '>=12.4.0'} + '@oxc-project/runtime@0.72.2': + resolution: {integrity: sha512-J2lsPDen2mFs3cOA1gIBd0wsHEhum2vTnuKIRwmj3HJJcIz/XgeNdzvgSOioIXOJgURIpcDaK05jwaDG1rhDwg==} + engines: {node: '>=6.9.0'} - '@nolyfill/safe-buffer@1.0.44': - resolution: {integrity: sha512-SqlKXtlhNTDMeZKey9jnnuPhi8YTl1lJuEcY9zbm5i4Pqe79UJJ8IJ9oiD6DhgI8KjYc+HtLzpQJNRdNYqb/hw==} - engines: {node: '>=12.4.0'} + '@oxc-project/types@0.72.2': + resolution: {integrity: sha512-il5RF8AP85XC0CMjHF4cnVT9nT/v/ocm6qlZQpSiAR9qBbQMGkFKloBZwm7PcnOdiUX97yHgsKM7uDCCWCu3tg==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@quansync/fs@0.1.3': + resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==} + engines: {node: '>=20.0.0'} + + '@rolldown/binding-darwin-arm64@1.0.0-beta.11-commit.f051675': + resolution: {integrity: sha512-Hlt/h+lOJ+ksC2wED2M9Hku/9CA2Hr17ENK82gNMmi3OqwcZLdZFqJDpASTli65wIOeT4p9rIUMdkfshCoJpYA==} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-beta.11-commit.f051675': + resolution: {integrity: sha512-Bnst+HBwhW2YrNybEiNf9TJkI1myDgXmiPBVIOS0apzrLCmByzei6PilTClOpTpNFYB+UviL3Ox2gKUmcgUjGw==} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-beta.11-commit.f051675': + resolution: {integrity: sha512-3jAxVmYDPc8vMZZOfZI1aokGB9cP6VNeU9XNCx0UJ6ShlSPK3qkAa0sWgueMhaQkgBVf8MOfGpjo47ohGd7QrA==} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.11-commit.f051675': + resolution: {integrity: sha512-TpUltUdvcsAf2WvXXD8AVc3BozvhgazJ2gJLXp4DVV2V82m26QelI373Bzx8d/4hB167EEIg4wWW/7GXB/ltoQ==} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.11-commit.f051675': + resolution: {integrity: sha512-eGvHnYQSdbdhsTdjdp/+83LrN81/7X9HD6y3jg7mEmdsicxEMEIt6CsP7tvYS/jn4489jgO/6mLxW/7Vg+B8pw==} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.11-commit.f051675': + resolution: {integrity: sha512-0NJZWXJls83FpBRzkTbGBsXXstaQLsfodnyeOghxbnNdsjn+B4dcNPpMK5V3QDsjC0pNjDLaDdzB2jWKlZbP/Q==} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.11-commit.f051675': + resolution: {integrity: sha512-9vXnu27r4zgS/BHP6RCLBOrJoV2xxtLYHT68IVpSOdCkBHGpf1oOJt6blv1y5NRRJBEfAFCvj5NmwSMhETF96w==} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.11-commit.f051675': + resolution: {integrity: sha512-e6tvsZbtHt4kzl82oCajOUxwIN8uMfjhuQ0qxIVRzPekRRjKEzyH9agYPW6toN0cnHpkhPsu51tyZKJOdUl7jg==} + cpu: [x64] + os: [linux] + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.11-commit.f051675': + resolution: {integrity: sha512-nBQVizPoUQiViANhWrOyihXNf2booP2iq3S396bI1tmHftdgUXWKa6yAoleJBgP0oF0idXpTPU82ciaROUcjpg==} + engines: {node: '>=14.21.3'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.11-commit.f051675': + resolution: {integrity: sha512-Rey/ECXKI/UEykrKfJX3oVAPXDH2k1p2BKzYGza0z3S2X5I3sTDOeBn2I0IQgyyf7U3+DCBhYjkDFnmSePrU/A==} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.11-commit.f051675': + resolution: {integrity: sha512-LtuMKJe6iFH4iV55dy+gDwZ9v23Tfxx5cd7ZAxvhYFGoVNSvarxAgl844BvFGReERCnLTGRvo85FUR6fDHQX+A==} + cpu: [ia32] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.11-commit.f051675': + resolution: {integrity: sha512-YY8UYfBm4dbWa4psgEPPD9T9X0nAvlYu0BOsQC5vDfCwzzU7IHT4jAfetvlQq+4+M6qWHSTr6v+/WX5EmlM1WA==} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-beta.11-commit.f051675': + resolution: {integrity: sha512-TAqMYehvpauLKz7v4TZOTUQNjxa5bUQWw2+51/+Zk3ItclBxgoSWhnZ31sXjdoX6le6OXdK2vZfV3KoyW/O/GA==} + '@rollup/rollup-android-arm-eabi@4.35.0': resolution: {integrity: sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==} cpu: [arm] @@ -663,15 +729,24 @@ packages: '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - '@tsconfig/node22@22.0.1': - resolution: {integrity: sha512-VkgOa3n6jvs1p+r3DiwBqeEwGAwEvnVCg/hIjiANl5IEcqP3G0u5m8cBJspe1t9qjZRlZ7WFgqq5bJrGdgAKMg==} + '@tsconfig/node24@24.0.1': + resolution: {integrity: sha512-3+IXshza3bIrT0tbHBr9CixQDVf4iBf0HTR0hCYowhpLqkzJjswu3UY8aZWjRXZep31kYB+o2SQeD8KwIoUHYw==} '@tsconfig/strictest@2.0.5': resolution: {integrity: sha512-ec4tjL2Rr0pkZ5hww65c+EEPYwxOi4Ryv+0MtjeaSQRJyq322Q27eOQiFbuNgw2hpL4hB1/W/HBGk3VKS43osg==} + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -684,116 +759,79 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@22.15.34': - resolution: {integrity: sha512-8Y6E5WUupYy1Dd0II32BsWAx5MWdcnRd8L84Oys3veg1YrYtNtzgO4CFhiBg6MDSjk7Ay36HYOnU7/tuOzIzcw==} + '@types/node@24.0.10': + resolution: {integrity: sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==} - '@typescript-eslint/eslint-plugin@8.34.1': - resolution: {integrity: sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==} + '@typescript-eslint/eslint-plugin@8.35.1': + resolution: {integrity: sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.34.1 + '@typescript-eslint/parser': ^8.35.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.34.1': - resolution: {integrity: sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==} + '@typescript-eslint/parser@8.35.1': + resolution: {integrity: sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.33.1': - resolution: {integrity: sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==} + '@typescript-eslint/project-service@8.35.1': + resolution: {integrity: sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.34.1': - resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/scope-manager@8.33.1': - resolution: {integrity: sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==} + '@typescript-eslint/scope-manager@8.35.1': + resolution: {integrity: sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.34.1': - resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.33.1': - resolution: {integrity: sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==} + '@typescript-eslint/tsconfig-utils@8.35.1': + resolution: {integrity: sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/tsconfig-utils@8.34.1': - resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/type-utils@8.34.1': - resolution: {integrity: sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==} + '@typescript-eslint/type-utils@8.35.1': + resolution: {integrity: sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.33.1': - resolution: {integrity: sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.34.1': - resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==} + '@typescript-eslint/types@8.35.1': + resolution: {integrity: sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.33.1': - resolution: {integrity: sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/typescript-estree@8.34.1': - resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==} + '@typescript-eslint/typescript-estree@8.35.1': + resolution: {integrity: sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.33.1': - resolution: {integrity: sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==} + '@typescript-eslint/utils@8.35.1': + resolution: {integrity: sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.34.1': - resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/visitor-keys@8.33.1': - resolution: {integrity: sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.34.1': - resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==} + '@typescript-eslint/visitor-keys@8.35.1': + resolution: {integrity: sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitest/coverage-v8@3.1.3': - resolution: {integrity: sha512-cj76U5gXCl3g88KSnf80kof6+6w+K4BjOflCl7t6yRJPDuCrHtVu0SgNYOUARJOL5TI8RScDbm5x4s1/P9bvpw==} + '@vitest/coverage-v8@3.2.4': + resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} peerDependencies: - '@vitest/browser': 3.1.3 - vitest: 3.1.3 + '@vitest/browser': 3.2.4 + vitest: 3.2.4 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/eslint-plugin@1.2.7': - resolution: {integrity: sha512-7WHcGZo6uXsE4SsSnpGDqKyGrd6NfOMM52WKoHSpTRZLbjMuDyHfA5P7m8yrr73tpqYjsiAdSjSerOnx8uEhpA==} + '@vitest/eslint-plugin@1.3.4': + resolution: {integrity: sha512-EOg8d0jn3BAiKnR55WkFxmxfWA3nmzrbIIuOXyTe6A72duryNgyU+bdBEauA97Aab3ho9kLmAwgPX63Ckj4QEg==} peerDependencies: eslint: '>= 8.57.0' typescript: '>= 5.0.0' @@ -804,34 +842,34 @@ packages: vitest: optional: true - '@vitest/expect@3.1.3': - resolution: {integrity: sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/mocker@3.1.3': - resolution: {integrity: sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==} + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.1.3': - resolution: {integrity: sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/runner@3.1.3': - resolution: {integrity: sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==} + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@vitest/snapshot@3.1.3': - resolution: {integrity: sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==} + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/spy@3.1.3': - resolution: {integrity: sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/utils@3.1.3': - resolution: {integrity: sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -884,6 +922,13 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-kit@2.1.0: + resolution: {integrity: sha512-ROM2LlXbZBZVk97crfw8PGDOBzzsJvN2uJCmwswvPUNyfH14eg90mSN3xNqsri1JS1G9cz0VzeDUhxJkTrr4Ew==} + engines: {node: '>=20.18.0'} + + ast-v8-to-istanbul@0.3.3: + resolution: {integrity: sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==} + atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} @@ -894,8 +939,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - better-sqlite3@11.9.1: - resolution: {integrity: sha512-Ba0KR+Fzxh2jDRhdg6TSH0SJGzb8C0aBY4hR8w8madIdIzzC6Y1+kx5qR6eS1Z+Gy20h6ZU28aeyg0z1VIrShQ==} + better-sqlite3@11.10.0: + resolution: {integrity: sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==} binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} @@ -904,11 +949,14 @@ packages: bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + birpc@2.4.0: + resolution: {integrity: sha512-5IdNxTyhXHv2UlgnPHQ0h+5ypVmkrYHzL8QT+DwFZ//2N/oNV8Ch+BCRmTJ3x6/z9Axo/cXYBc9eprsUVK/Jsg==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -917,8 +965,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + browserslist@4.25.1: + resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -932,12 +980,6 @@ packages: resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} engines: {node: '>=18.20'} - bundle-require@5.1.0: - resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: 0.25.0 - cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -946,8 +988,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001703: - resolution: {integrity: sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==} + caniuse-lite@1.0.30001726: + resolution: {integrity: sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==} chai@5.2.0: resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} @@ -987,16 +1029,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -1010,15 +1045,11 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - confbox@0.2.1: - resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==} - - consola@3.4.0: - resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} - engines: {node: ^14.18.0 || >=16.10.0} + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} - core-js-compat@3.41.0: - resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==} + core-js-compat@3.43.0: + resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==} cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} @@ -1027,22 +1058,27 @@ packages: dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} + db0@0.3.2: + resolution: {integrity: sha512-xzWNQ6jk/+NtdfLyXEipbX55dmDSeteLFt/ayF+wZUU5bzKgmrDOxmInUTbyVRp46YwnJdkDA1KhB7WIXFofJw==} peerDependencies: - supports-color: '*' + '@electric-sql/pglite': '*' + '@libsql/client': '*' + better-sqlite3: '*' + drizzle-orm: '*' + mysql2: '*' + sqlite3: '*' peerDependenciesMeta: - supports-color: + '@electric-sql/pglite': optional: true - - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: + '@libsql/client': + optional: true + better-sqlite3: + optional: true + drizzle-orm: + optional: true + mysql2: + optional: true + sqlite3: optional: true debug@4.4.1: @@ -1069,19 +1105,31 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} - dotenv@16.5.0: - resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} - engines: {node: '>=12'} + diff@8.0.2: + resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} + engines: {node: '>=0.3.1'} + + dts-resolver@2.1.1: + resolution: {integrity: sha512-3BiGFhB6mj5Kv+W2vdJseQUYW+SKVzAFJL6YNP6ursbrwy1fXHRotfHi3xLNxe4wZl/K8qbAFeCDjZLjzqxxRw==} + engines: {node: '>=20.18.0'} + peerDependencies: + oxc-resolver: '>=11.0.0' + peerDependenciesMeta: + oxc-resolver: + optional: true eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.114: - resolution: {integrity: sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA==} + electron-to-chromium@1.5.179: + resolution: {integrity: sha512-UWKi/EbBopgfFsc5k61wFpV7WrnnSlSzW/e2XcBmS6qKYTivZlLtoll5/rdqRTxGglGHkmkW0j0pFNJG10EUIQ==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1089,18 +1137,22 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + empathic@2.0.0: + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - enhanced-resolve@5.18.1: - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + enhanced-resolve@5.18.2: + resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} engines: {node: '>=10.13.0'} es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - esbuild@0.25.0: - resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} + esbuild@0.25.5: + resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} engines: {node: '>=18'} hasBin: true @@ -1122,6 +1174,12 @@ packages: peerDependencies: eslint: '>=6.0.0' + eslint-compat-utils@0.6.5: + resolution: {integrity: sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + eslint-config-flat-gitignore@2.1.0: resolution: {integrity: sha512-cJzNJ7L+psWp5mXM7jBX+fjHtBvvh06RBlcweMhKD8jWqQw0G78hOW5tpVALGHGFPsBV+ot2H+pdDGJy6CV8pA==} peerDependencies: @@ -1161,8 +1219,8 @@ packages: typescript: optional: true - eslint-plugin-jsdoc@51.2.1: - resolution: {integrity: sha512-iE2qpG/kaA9xXfEcTNSsxNvH5O8+o38VBGLwl2oZisQaM1JRGftTLJAGQrj7YZjSkp3n9VCrNTjOpo3ONhTApQ==} + eslint-plugin-jsdoc@51.3.3: + resolution: {integrity: sha512-8XK/9wncTh4PPntQfM4iYJ2v/kvX4qsfBzp+dTnyxpERWhl2R9hEJw1ihws+yAecg9CC6ExTfMInEg3wSK9kWA==} engines: {node: '>=20.11.0'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -1209,6 +1267,12 @@ packages: '@typescript-eslint/eslint-plugin': optional: true + eslint-plugin-yml@1.18.0: + resolution: {integrity: sha512-9NtbhHRN2NJa/s3uHchO3qVVZw0vyOIvWlXWGaKCr/6l3Go62wsvJK5byiI6ZoYztDsow4GnS69BZD3GnqH3hA==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1221,8 +1285,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.30.0: - resolution: {integrity: sha512-iN/SiPxmQu6EVkf+m1qpBxzUhE12YqFLOSySuOyVLJLEF9nzTf+h/1AJYc1JWzCnktggeNrjvQGLngDzXirU6g==} + eslint@9.30.1: + resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1231,10 +1295,6 @@ packages: jiti: optional: true - esm@3.2.25: - resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} - engines: {node: '>=6'} - espree@10.4.0: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1266,8 +1326,8 @@ packages: resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} - exsolve@1.0.4: - resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} fast-copy@3.0.2: resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} @@ -1295,14 +1355,6 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.3: - resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - fdir@6.4.4: resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} peerDependencies: @@ -1349,15 +1401,8 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - - get-tsconfig@4.10.0: - resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} - - getopts@2.3.0: - resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==} + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} @@ -1382,8 +1427,8 @@ packages: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} - globals@16.2.0: - resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==} + globals@16.3.0: + resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} engines: {node: '>=18'} graceful-fs@4.2.11: @@ -1399,10 +1444,13 @@ packages: help-me@5.0.0: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} - hono@4.7.6: - resolution: {integrity: sha512-564rVzELU+9BRqqx5k8sT2NFwGD3I3Vifdb6P7CmM6FiarOSY+fDC+6B+k9wcCb86ReoayteZP2ki0cRLN1jbw==} + hono@4.8.3: + resolution: {integrity: sha512-jYZ6ZtfWjzBdh8H/0CIFfCBHaFL75k+KMzaM177hrWWm2TWL39YMYaJgB74uK/niRc866NMlH9B8uCvIo284WQ==} engines: {node: '>=16.9.0'} + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -1413,8 +1461,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.4: - resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} import-fresh@3.3.1: @@ -1435,10 +1483,6 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - interpret@2.2.0: - resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} - engines: {node: '>= 0.10'} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -1447,10 +1491,6 @@ packages: resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} engines: {node: '>=18.20'} - is-ci@4.1.0: - resolution: {integrity: sha512-Ab9bQDQ11lWootZUI5qxgN2ZXwxNI5hTwnsvOc1wyxQ7zQ8OkEDw79mI0+9jI3x432NfwbVRru+3noJfXF6lSQ==} - hasBin: true - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1489,10 +1529,17 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -1520,54 +1567,24 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - knex@3.1.0: - resolution: {integrity: sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==} - engines: {node: '>=16'} - hasBin: true + kysely-db0@0.0.1-beta.1: + resolution: {integrity: sha512-Uzxoe/0oxIUfd2D+tVC5VIdowWTdqxPJSpJnskqDbr6WtdJAjK8BBfHlMOKTw8gztlovRrI23I4f72mk7wSMTg==} + engines: {node: '>=20.19'} peerDependencies: - better-sqlite3: '*' - mysql: '*' - mysql2: '*' - pg: '*' - pg-native: '*' - sqlite3: '*' - tedious: '*' - peerDependenciesMeta: - better-sqlite3: - optional: true - mysql: - optional: true - mysql2: - optional: true - pg: - optional: true - pg-native: - optional: true - sqlite3: - optional: true - tedious: - optional: true + db0: ^0.3.2 + kysely: ^0.28.2 + + kysely@0.28.2: + resolution: {integrity: sha512-4YAVLoF0Sf0UTqlhgQMFU9iQECdah7n+13ANkiuVfRvlK+uI0Etbgd7bVP36dKlG+NXWbhGua8vnGt+sdhvT7A==} + engines: {node: '>=18.0.0'} levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - - load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - local-pkg@1.1.1: resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} engines: {node: '>=14'} @@ -1579,14 +1596,8 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + loupe@3.1.4: + resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -1601,8 +1612,8 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - mentoss@0.9.2: - resolution: {integrity: sha512-pxDUmI70bAAb596F4c3btBqHyTOw3bIGJcHaViNUB9EG4yIzgCdvCO2Qkmji4YHBGAsFtStsWML6nGwnooWUDQ==} + mentoss@0.11.0: + resolution: {integrity: sha512-FSr/MYk9MWwcDl7KalNNBWf37uBcj12Kckndvq5nR7RN86nqfVn2ZaOmVbB0v89JhvjCMSQLS0AIKlc4p32TQg==} engines: {node: '>=18.18'} merge2@1.4.1: @@ -1641,9 +1652,6 @@ packages: mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1667,8 +1675,8 @@ packages: resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==} engines: {node: '>=18'} - node-abi@3.74.0: - resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} + node-abi@3.75.0: + resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==} engines: {node: '>=10'} node-releases@2.0.19: @@ -1729,9 +1737,6 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - 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'} @@ -1743,9 +1748,6 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} - pg-connection-string@2.6.2: - resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1767,15 +1769,15 @@ packages: pino-std-serializers@7.0.0: resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - pino@9.6.0: - resolution: {integrity: sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==} + pino@9.7.0: + resolution: {integrity: sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==} hasBin: true pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.1.0: - resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + pkg-types@2.2.0: + resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} @@ -1784,24 +1786,6 @@ packages: pnpm-workspace-yaml@0.3.1: resolution: {integrity: sha512-3nW5RLmREmZ8Pm8MbPsO2RM+99RRjYd25ynj3NV0cFsN7CcEl4sDFzgoFmSyduFwxFQ2Qbu3y2UdCh6HlyUOeA==} - 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' - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true - postcss@8.5.3: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} @@ -1815,18 +1799,18 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - process-warning@4.0.1: - resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - quansync@0.2.8: - resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==} + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -1854,10 +1838,6 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} - rechoir@0.8.0: - resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} - engines: {node: '>= 10.13.0'} - refa@0.12.1: resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -1878,22 +1858,33 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rolldown-plugin-dts@0.13.13: + resolution: {integrity: sha512-Nchx9nQoa4IpfQ/BJzodKMvtJ3H3dT322siAJSp3uvQJ+Pi1qgEjOp7hSQwGSQRhaC5gC+9hparbWEH5oiAL9Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + '@typescript/native-preview': '>=7.0.0-dev.20250601.1' + rolldown: ^1.0.0-beta.9 + typescript: ^5.0.0 + vue-tsc: ~2.2.0 + peerDependenciesMeta: + '@typescript/native-preview': + optional: true + typescript: + optional: true + vue-tsc: + optional: true + + rolldown@1.0.0-beta.11-commit.f051675: + resolution: {integrity: sha512-g8MCVkvg2GnrrG+j+WplOTx1nAmjSwYOMSOQI0qfxf8D4NmYZqJuG3f85yWK64XXQv6pKcXZsfMkOPs9B6B52A==} + hasBin: true + rollup@4.35.0: resolution: {integrity: sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -1902,6 +1893,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-stable-stringify@2.5.0: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} @@ -1913,11 +1907,6 @@ packages: secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.2: resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} @@ -1944,8 +1933,8 @@ packages: simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - simple-git-hooks@2.12.1: - resolution: {integrity: sha512-NB3V4XyCOrWTIhjh85DyEoVlM3adHWwqQXKYHmuegy/108bJPP6YxuPGm4ZKBq1+GVKRbKJuzNY//09cMJYp+A==} + simple-git-hooks@2.13.0: + resolution: {integrity: sha512-N+goiLxlkHJlyaYEglFypzVNMaNplPAk5syu0+OPp/Bk6dwVoXF6FfOw2vO0Dp+JHsBaI+w6cm8TnFl2Hw6tDA==} hasBin: true sisteransi@1.0.5: @@ -1965,10 +1954,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - spdx-exceptions@2.5.0: resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} @@ -2007,10 +1992,6 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - strip-indent@4.0.0: resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} engines: {node: '>=12'} @@ -2023,29 +2004,24 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + supports-color@7.2.0: 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'} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + tapable@2.2.2: + resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} engines: {node: '>=6'} - tar-fs@2.1.2: - resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} + tar-fs@2.1.3: + resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - tarn@3.0.2: - resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==} - engines: {node: '>=8.0.0'} - terser@5.31.6: resolution: {integrity: sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==} engines: {node: '>=10'} @@ -2058,10 +2034,6 @@ packages: thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} - tildify@2.0.0: - resolution: {integrity: sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==} - engines: {node: '>=8'} - tiny-lru@11.2.11: resolution: {integrity: sha512-27BIW0dIWTYYoWNnqSmoNMKe5WIbkXsc0xaCQHd3/3xT2XMuMJrzHdrO9QBFR14emBz1Bu0dOAs2sCBBrvgPQA==} engines: {node: '>=12'} @@ -2075,33 +2047,26 @@ packages: tinyexec@1.0.1: resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} - tinyglobby@0.2.12: - resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} - engines: {node: '>=12.0.0'} - - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + tinyspy@4.0.3: + resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -2117,28 +2082,30 @@ packages: peerDependencies: typescript: '>=4.0.0' - tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} - - tsup@8.4.0: - resolution: {integrity: sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==} - engines: {node: '>=18'} + tsdown@0.12.9: + resolution: {integrity: sha512-MfrXm9PIlT3saovtWKf/gCJJ/NQCdE0SiREkdNC+9Qy6UHhdeDPxnkFaBD7xttVUmgp0yUHtGirpoLB+OVLuLA==} + engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' + '@arethetypeswrong/core': ^0.18.1 + publint: ^0.3.0 + typescript: ^5.0.0 + unplugin-lightningcss: ^0.4.0 + unplugin-unused: ^0.5.0 peerDependenciesMeta: - '@microsoft/api-extractor': + '@arethetypeswrong/core': optional: true - '@swc/core': - optional: true - postcss: + publint: optional: true typescript: optional: true + unplugin-lightningcss: + optional: true + unplugin-unused: + optional: true + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -2147,8 +2114,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@4.40.0: - resolution: {integrity: sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} typescript@5.8.3: @@ -2156,11 +2123,14 @@ packages: engines: {node: '>=14.17'} hasBin: true - ufo@1.5.4: - resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + unconfig@7.3.2: + resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==} + + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} @@ -2177,16 +2147,16 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - valibot@1.0.0: - resolution: {integrity: sha512-1Hc0ihzWxBar6NGeZv7fPLY0QuxFMyxwYR2sF1Blu7Wq7EnremwY2W02tit2ij2VJT8HcSkHAQqmFfl77f73Yw==} + valibot@1.1.0: + resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==} peerDependencies: typescript: '>=5' peerDependenciesMeta: typescript: optional: true - vite-node@3.1.3: - resolution: {integrity: sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true @@ -2230,16 +2200,16 @@ packages: yaml: optional: true - vitest@3.1.3: - resolution: {integrity: sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw==} + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.1.3 - '@vitest/ui': 3.1.3 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -2258,18 +2228,12 @@ packages: jsdom: optional: true - vue-eslint-parser@10.1.3: - resolution: {integrity: sha512-dbCBnd2e02dYWsXoqX5yKUZlOt+ExIpq7hmHKPb5ZqKcjf++Eo0hMseFTZMLKThrUk61m+Uv6A2YSBve6ZvuDQ==} + vue-eslint-parser@10.2.0: + resolution: {integrity: sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -2298,9 +2262,13 @@ packages: xior@0.7.8: resolution: {integrity: sha512-NQt5qZmQi7GXuJ+M8KImxGOIPBl+CqoSVo2P8K4qzBQfYIQQmnaPDbxegjNzWAucOAgsGBQlR6FHZPINJXWD1g==} - yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} - engines: {node: '>= 14'} + yaml-eslint-parser@1.3.0: + resolution: {integrity: sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==} + engines: {node: ^14.17.0 || >=16.0.0} + + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} hasBin: true yocto-queue@0.1.0: @@ -2311,38 +2279,40 @@ snapshots: '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 - '@antfu/eslint-config@4.16.1(eslint@9.30.0)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0))': + '@antfu/eslint-config@4.16.2(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0))': dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 0.11.0 - '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.30.0) - '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.34.1(eslint@9.30.0)(typescript@5.8.3) - '@vitest/eslint-plugin': 1.2.7(eslint@9.30.0)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0)) + '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.30.1(jiti@2.4.2)) + '@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@vitest/eslint-plugin': 1.3.4(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0)) ansis: 4.1.0 cac: 6.7.14 - eslint: 9.30.0 - eslint-config-flat-gitignore: 2.1.0(eslint@9.30.0) + eslint: 9.30.1(jiti@2.4.2) + eslint-config-flat-gitignore: 2.1.0(eslint@9.30.1(jiti@2.4.2)) eslint-flat-config-utils: 2.1.0 - eslint-merge-processors: 2.0.0(eslint@9.30.0) - eslint-plugin-antfu: 3.1.1(eslint@9.30.0) - eslint-plugin-command: 3.3.1(eslint@9.30.0) - eslint-plugin-import-lite: 0.3.0(eslint@9.30.0)(typescript@5.8.3) - eslint-plugin-jsdoc: 51.2.1(eslint@9.30.0) - eslint-plugin-n: 17.20.0(eslint@9.30.0)(typescript@5.8.3) + eslint-merge-processors: 2.0.0(eslint@9.30.1(jiti@2.4.2)) + eslint-plugin-antfu: 3.1.1(eslint@9.30.1(jiti@2.4.2)) + eslint-plugin-command: 3.3.1(eslint@9.30.1(jiti@2.4.2)) + eslint-plugin-import-lite: 0.3.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-jsdoc: 51.3.3(eslint@9.30.1(jiti@2.4.2)) + eslint-plugin-n: 17.20.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-no-only-tests: 3.3.0 - eslint-plugin-perfectionist: 4.15.0(eslint@9.30.0)(typescript@5.8.3) - eslint-plugin-pnpm: 0.3.1(eslint@9.30.0) - eslint-plugin-regexp: 2.9.0(eslint@9.30.0) - eslint-plugin-unicorn: 59.0.1(eslint@9.30.0) - eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0) - globals: 16.2.0 + eslint-plugin-perfectionist: 4.15.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-pnpm: 0.3.1(eslint@9.30.1(jiti@2.4.2)) + eslint-plugin-regexp: 2.9.0(eslint@9.30.1(jiti@2.4.2)) + eslint-plugin-unicorn: 59.0.1(eslint@9.30.1(jiti@2.4.2)) + eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)) + eslint-plugin-yml: 1.18.0(eslint@9.30.1(jiti@2.4.2)) + globals: 16.3.0 local-pkg: 1.1.1 parse-gitignore: 2.0.0 - vue-eslint-parser: 10.1.3(eslint@9.30.0) + vue-eslint-parser: 10.2.0(eslint@9.30.1(jiti@2.4.2)) + yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - supports-color - typescript @@ -2353,54 +2323,62 @@ snapshots: package-manager-detector: 1.3.0 tinyexec: 1.0.1 - '@babel/helper-string-parser@7.25.9': {} + '@babel/generator@7.27.5': + dependencies: + '@babel/parser': 7.27.7 + '@babel/types': 7.27.7 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + jsesc: 3.1.0 - '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} - '@babel/parser@7.26.9': + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/parser@7.27.7': dependencies: - '@babel/types': 7.26.9 + '@babel/types': 7.27.7 - '@babel/types@7.26.9': + '@babel/types@7.27.7': dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 '@bcoe/v8-coverage@1.0.2': {} - '@biomejs/biome@1.9.4': + '@biomejs/biome@2.0.6': optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.9.4 - '@biomejs/cli-darwin-x64': 1.9.4 - '@biomejs/cli-linux-arm64': 1.9.4 - '@biomejs/cli-linux-arm64-musl': 1.9.4 - '@biomejs/cli-linux-x64': 1.9.4 - '@biomejs/cli-linux-x64-musl': 1.9.4 - '@biomejs/cli-win32-arm64': 1.9.4 - '@biomejs/cli-win32-x64': 1.9.4 - - '@biomejs/cli-darwin-arm64@1.9.4': + '@biomejs/cli-darwin-arm64': 2.0.6 + '@biomejs/cli-darwin-x64': 2.0.6 + '@biomejs/cli-linux-arm64': 2.0.6 + '@biomejs/cli-linux-arm64-musl': 2.0.6 + '@biomejs/cli-linux-x64': 2.0.6 + '@biomejs/cli-linux-x64-musl': 2.0.6 + '@biomejs/cli-win32-arm64': 2.0.6 + '@biomejs/cli-win32-x64': 2.0.6 + + '@biomejs/cli-darwin-arm64@2.0.6': optional: true - '@biomejs/cli-darwin-x64@1.9.4': + '@biomejs/cli-darwin-x64@2.0.6': optional: true - '@biomejs/cli-linux-arm64-musl@1.9.4': + '@biomejs/cli-linux-arm64-musl@2.0.6': optional: true - '@biomejs/cli-linux-arm64@1.9.4': + '@biomejs/cli-linux-arm64@2.0.6': optional: true - '@biomejs/cli-linux-x64-musl@1.9.4': + '@biomejs/cli-linux-x64-musl@2.0.6': optional: true - '@biomejs/cli-linux-x64@1.9.4': + '@biomejs/cli-linux-x64@2.0.6': optional: true - '@biomejs/cli-win32-arm64@1.9.4': + '@biomejs/cli-win32-arm64@2.0.6': optional: true - '@biomejs/cli-win32-x64@1.9.4': + '@biomejs/cli-win32-x64@2.0.6': optional: true '@blakeembrey/deque@1.0.5': {} @@ -2418,10 +2396,26 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 + '@emnapi/core@1.4.3': + dependencies: + '@emnapi/wasi-threads': 1.0.2 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.4.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.2': + dependencies: + tslib: 2.8.1 + optional: true + '@es-joy/jsdoccomment@0.50.2': dependencies: - '@types/estree': 1.0.6 - '@typescript-eslint/types': 8.33.1 + '@types/estree': 1.0.8 + '@typescript-eslint/types': 8.35.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -2429,102 +2423,102 @@ snapshots: '@es-joy/jsdoccomment@0.52.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/types': 8.35.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 - '@esbuild/aix-ppc64@0.25.0': + '@esbuild/aix-ppc64@0.25.5': optional: true - '@esbuild/android-arm64@0.25.0': + '@esbuild/android-arm64@0.25.5': optional: true - '@esbuild/android-arm@0.25.0': + '@esbuild/android-arm@0.25.5': optional: true - '@esbuild/android-x64@0.25.0': + '@esbuild/android-x64@0.25.5': optional: true - '@esbuild/darwin-arm64@0.25.0': + '@esbuild/darwin-arm64@0.25.5': optional: true - '@esbuild/darwin-x64@0.25.0': + '@esbuild/darwin-x64@0.25.5': optional: true - '@esbuild/freebsd-arm64@0.25.0': + '@esbuild/freebsd-arm64@0.25.5': optional: true - '@esbuild/freebsd-x64@0.25.0': + '@esbuild/freebsd-x64@0.25.5': optional: true - '@esbuild/linux-arm64@0.25.0': + '@esbuild/linux-arm64@0.25.5': optional: true - '@esbuild/linux-arm@0.25.0': + '@esbuild/linux-arm@0.25.5': optional: true - '@esbuild/linux-ia32@0.25.0': + '@esbuild/linux-ia32@0.25.5': optional: true - '@esbuild/linux-loong64@0.25.0': + '@esbuild/linux-loong64@0.25.5': optional: true - '@esbuild/linux-mips64el@0.25.0': + '@esbuild/linux-mips64el@0.25.5': optional: true - '@esbuild/linux-ppc64@0.25.0': + '@esbuild/linux-ppc64@0.25.5': optional: true - '@esbuild/linux-riscv64@0.25.0': + '@esbuild/linux-riscv64@0.25.5': optional: true - '@esbuild/linux-s390x@0.25.0': + '@esbuild/linux-s390x@0.25.5': optional: true - '@esbuild/linux-x64@0.25.0': + '@esbuild/linux-x64@0.25.5': optional: true - '@esbuild/netbsd-arm64@0.25.0': + '@esbuild/netbsd-arm64@0.25.5': optional: true - '@esbuild/netbsd-x64@0.25.0': + '@esbuild/netbsd-x64@0.25.5': optional: true - '@esbuild/openbsd-arm64@0.25.0': + '@esbuild/openbsd-arm64@0.25.5': optional: true - '@esbuild/openbsd-x64@0.25.0': + '@esbuild/openbsd-x64@0.25.5': optional: true - '@esbuild/sunos-x64@0.25.0': + '@esbuild/sunos-x64@0.25.5': optional: true - '@esbuild/win32-arm64@0.25.0': + '@esbuild/win32-arm64@0.25.5': optional: true - '@esbuild/win32-ia32@0.25.0': + '@esbuild/win32-ia32@0.25.5': optional: true - '@esbuild/win32-x64@0.25.0': + '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.30.0)': + '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.30.1(jiti@2.4.2))': dependencies: escape-string-regexp: 4.0.0 - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) ignore: 5.3.2 - '@eslint-community/eslint-utils@4.7.0(eslint@9.30.0)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@2.4.2))': dependencies: - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.2.7(eslint@9.30.0)': + '@eslint/compat@1.3.1(eslint@9.30.1(jiti@2.4.2))': optionalDependencies: - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) '@eslint/config-array@0.21.0': dependencies: @@ -2544,6 +2538,10 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@0.15.1': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 @@ -2558,7 +2556,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.30.0': {} + '@eslint/js@9.30.1': {} '@eslint/object-schema@2.1.6': {} @@ -2567,19 +2565,19 @@ snapshots: '@eslint/core': 0.13.0 levn: 0.4.1 - '@eslint/plugin-kit@0.3.1': + '@eslint/plugin-kit@0.3.3': dependencies: - '@eslint/core': 0.14.0 + '@eslint/core': 0.15.1 levn: 0.4.1 - '@hono/node-server@1.14.1(hono@4.7.6)': + '@hono/node-server@1.15.0(hono@4.8.3)': dependencies: - hono: 4.7.6 + hono: 4.8.3 - '@hono/standard-validator@0.1.2(@standard-schema/spec@1.0.0)(hono@4.7.6)': + '@hono/standard-validator@0.1.2(@standard-schema/spec@1.0.0)(hono@4.8.3)': dependencies: '@standard-schema/spec': 1.0.0 - hono: 4.7.6 + hono: 4.8.3 '@humanfs/core@0.19.1': {} @@ -2592,7 +2590,7 @@ snapshots: '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.2': {} + '@humanwhocodes/retry@0.4.3': {} '@isaacs/cliui@8.0.2': dependencies: @@ -2605,28 +2603,32 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jridgewell/gen-mapping@0.3.8': + '@jridgewell/gen-mapping@0.3.12': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.29 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/source-map@0.3.6': + '@jridgewell/source-map@0.3.10': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 optional: true - '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.4': {} - '@jridgewell/trace-mapping@0.3.25': + '@jridgewell/trace-mapping@0.3.29': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.4 + + '@napi-rs/wasm-runtime@0.2.11': + dependencies: + '@emnapi/core': 1.4.3 + '@emnapi/runtime': 1.4.3 + '@tybys/wasm-util': 0.9.0 + optional: true '@nodelib/fs.scandir@2.1.5': dependencies: @@ -2640,13 +2642,57 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@nolyfill/is-core-module@1.0.39': {} + '@oxc-project/runtime@0.72.2': {} - '@nolyfill/safe-buffer@1.0.44': {} + '@oxc-project/types@0.72.2': {} '@pkgjs/parseargs@0.11.0': optional: true + '@quansync/fs@0.1.3': + dependencies: + quansync: 0.2.10 + + '@rolldown/binding-darwin-arm64@1.0.0-beta.11-commit.f051675': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-beta.11-commit.f051675': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-beta.11-commit.f051675': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.11-commit.f051675': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.11-commit.f051675': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.11-commit.f051675': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.11-commit.f051675': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.11-commit.f051675': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.11-commit.f051675': + dependencies: + '@napi-rs/wasm-runtime': 0.2.11 + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.11-commit.f051675': + optional: true + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.11-commit.f051675': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.11-commit.f051675': + optional: true + + '@rolldown/pluginutils@1.0.0-beta.11-commit.f051675': {} + '@rollup/rollup-android-arm-eabi@4.35.0': optional: true @@ -2706,15 +2752,26 @@ snapshots: '@standard-schema/spec@1.0.0': {} - '@tsconfig/node22@22.0.1': {} + '@tsconfig/node24@24.0.1': {} '@tsconfig/strictest@2.0.5': {} + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/chai@5.2.2': + dependencies: + '@types/deep-eql': 4.0.2 + '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 optional: true + '@types/deep-eql@4.0.2': {} + '@types/estree@1.0.6': {} '@types/estree@1.0.8': {} @@ -2724,96 +2781,76 @@ snapshots: '@types/ms@2.1.0': optional: true - '@types/node@22.15.34': + '@types/node@24.0.10': dependencies: - undici-types: 6.21.0 + undici-types: 7.8.0 - '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.34.1(eslint@9.30.0)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/type-utils': 8.34.1(eslint@9.30.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.1(eslint@9.30.0)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.34.1 - eslint: 9.30.0 + '@typescript-eslint/parser': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.35.1 + '@typescript-eslint/type-utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.35.1 + eslint: 9.30.1(jiti@2.4.2) graphemer: 1.4.0 - ignore: 7.0.4 + ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.34.1(eslint@9.30.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.34.1 + '@typescript-eslint/scope-manager': 8.35.1 + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.35.1 debug: 4.4.1 - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.33.1(typescript@5.8.3)': + '@typescript-eslint/project-service@8.35.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3) - '@typescript-eslint/types': 8.33.1 + '@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3) + '@typescript-eslint/types': 8.35.1 debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) - '@typescript-eslint/types': 8.34.1 - debug: 4.4.1 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.33.1': - dependencies: - '@typescript-eslint/types': 8.33.1 - '@typescript-eslint/visitor-keys': 8.33.1 - - '@typescript-eslint/scope-manager@8.34.1': - dependencies: - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/visitor-keys': 8.34.1 - - '@typescript-eslint/tsconfig-utils@8.33.1(typescript@5.8.3)': + '@typescript-eslint/scope-manager@8.35.1': dependencies: - typescript: 5.8.3 + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/visitor-keys': 8.35.1 - '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.35.1(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.34.1(eslint@9.30.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.1(eslint@9.30.0)(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1 - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.33.1': {} - - '@typescript-eslint/types@8.34.1': {} + '@typescript-eslint/types@8.35.1': {} - '@typescript-eslint/typescript-estree@8.33.1(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.35.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.33.1(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3) - '@typescript-eslint/types': 8.33.1 - '@typescript-eslint/visitor-keys': 8.33.1 + '@typescript-eslint/project-service': 8.35.1(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3) + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/visitor-keys': 8.35.1 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -2824,59 +2861,28 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.34.1(typescript@5.8.3)': + '@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.34.1(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/visitor-keys': 8.34.1 - debug: 4.4.1 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.35.1 + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) + eslint: 9.30.1(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.33.1(eslint@9.30.0)(typescript@5.8.3)': + '@typescript-eslint/visitor-keys@8.35.1': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0) - '@typescript-eslint/scope-manager': 8.33.1 - '@typescript-eslint/types': 8.33.1 - '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) - eslint: 9.30.0 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.34.1(eslint@9.30.0)(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0) - '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) - eslint: 9.30.0 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.33.1': - dependencies: - '@typescript-eslint/types': 8.33.1 - eslint-visitor-keys: 4.2.1 - - '@typescript-eslint/visitor-keys@8.34.1': - dependencies: - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/types': 8.35.1 eslint-visitor-keys: 4.2.1 - '@vitest/coverage-v8@3.1.3(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - debug: 4.4.0 + ast-v8-to-istanbul: 0.3.3 + debug: 4.4.1 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 @@ -2886,58 +2892,60 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0) transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.2.7(eslint@9.30.0)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0))': + '@vitest/eslint-plugin@1.3.4(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0))': dependencies: - '@typescript-eslint/utils': 8.33.1(eslint@9.30.0)(typescript@5.8.3) - eslint: 9.30.0 + '@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.30.1(jiti@2.4.2) optionalDependencies: typescript: 5.8.3 - vitest: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0) transitivePeerDependencies: - supports-color - '@vitest/expect@3.1.3': + '@vitest/expect@3.2.4': dependencies: - '@vitest/spy': 3.1.3 - '@vitest/utils': 3.1.3 + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.3(vite@6.2.1(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0))': + '@vitest/mocker@3.2.4(vite@6.2.1(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0))': dependencies: - '@vitest/spy': 3.1.3 + '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.2.1(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0) + vite: 6.2.1(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0) - '@vitest/pretty-format@3.1.3': + '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.1.3': + '@vitest/runner@3.2.4': dependencies: - '@vitest/utils': 3.1.3 + '@vitest/utils': 3.2.4 pathe: 2.0.3 + strip-literal: 3.0.0 - '@vitest/snapshot@3.1.3': + '@vitest/snapshot@3.2.4': dependencies: - '@vitest/pretty-format': 3.1.3 + '@vitest/pretty-format': 3.2.4 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.1.3': + '@vitest/spy@3.2.4': dependencies: - tinyspy: 3.0.2 + tinyspy: 4.0.3 - '@vitest/utils@3.1.3': + '@vitest/utils@3.2.4': dependencies: - '@vitest/pretty-format': 3.1.3 - loupe: 3.1.3 + '@vitest/pretty-format': 3.2.4 + loupe: 3.1.4 tinyrainbow: 2.0.0 acorn-jsx@5.3.2(acorn@8.15.0): @@ -2978,30 +2986,47 @@ snapshots: assertion-error@2.0.1: {} + ast-kit@2.1.0: + dependencies: + '@babel/parser': 7.27.7 + pathe: 2.0.3 + + ast-v8-to-istanbul@0.3.3: + dependencies: + '@jridgewell/trace-mapping': 0.3.29 + estree-walker: 3.0.3 + js-tokens: 9.0.1 + atomic-sleep@1.0.0: {} balanced-match@1.0.2: {} - base64-js@1.5.1: {} + base64-js@1.5.1: + optional: true - better-sqlite3@11.9.1: + better-sqlite3@11.10.0: dependencies: bindings: 1.5.0 prebuild-install: 7.1.3 + optional: true binary-extensions@2.3.0: {} bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 + optional: true + + birpc@2.4.0: {} bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 + optional: true - brace-expansion@1.1.11: + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 @@ -3014,12 +3039,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.4: + browserslist@4.25.1: dependencies: - caniuse-lite: 1.0.30001703 - electron-to-chromium: 1.5.114 + caniuse-lite: 1.0.30001726 + electron-to-chromium: 1.5.179 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.4) + update-browserslist-db: 1.1.3(browserslist@4.25.1) buffer-from@1.1.2: optional: true @@ -3028,26 +3053,22 @@ snapshots: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + optional: true builtin-modules@5.0.0: {} - bundle-require@5.1.0(esbuild@0.25.0): - dependencies: - esbuild: 0.25.0 - load-tsconfig: 0.2.5 - cac@6.7.14: {} callsites@3.1.0: {} - caniuse-lite@1.0.30001703: {} + caniuse-lite@1.0.30001726: {} chai@5.2.0: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.3 + loupe: 3.1.4 pathval: 2.0.0 chalk@4.1.2: @@ -3073,7 +3094,8 @@ snapshots: dependencies: readdirp: 4.1.2 - chownr@1.1.4: {} + chownr@1.1.4: + optional: true ci-info@4.2.0: {} @@ -3087,12 +3109,8 @@ snapshots: color-name@1.1.4: {} - colorette@2.0.19: {} - colorette@2.0.20: {} - commander@10.0.1: {} - commander@2.20.3: optional: true @@ -3102,13 +3120,11 @@ snapshots: confbox@0.1.8: {} - confbox@0.2.1: {} - - consola@3.4.0: {} + confbox@0.2.2: {} - core-js-compat@3.41.0: + core-js-compat@3.43.0: dependencies: - browserslist: 4.24.4 + browserslist: 4.25.1 cross-spawn@7.0.6: dependencies: @@ -3118,13 +3134,9 @@ snapshots: dateformat@4.6.3: {} - debug@4.3.4: - dependencies: - ms: 2.1.2 - - debug@4.4.0: - dependencies: - ms: 2.1.3 + db0@0.3.2(better-sqlite3@11.10.0): + optionalDependencies: + better-sqlite3: 11.10.0 debug@4.4.1: dependencies: @@ -3133,63 +3145,72 @@ snapshots: decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 + optional: true deep-eql@5.0.2: {} - deep-extend@0.6.0: {} + deep-extend@0.6.0: + optional: true deep-is@0.1.4: {} - detect-libc@2.0.3: {} + defu@6.1.4: {} + + detect-libc@2.0.4: + optional: true + + diff@8.0.2: {} - dotenv@16.5.0: {} + dts-resolver@2.1.1: {} eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.114: {} + electron-to-chromium@1.5.179: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - end-of-stream@1.4.4: + empathic@2.0.0: {} + + end-of-stream@1.4.5: dependencies: once: 1.4.0 - enhanced-resolve@5.18.1: + enhanced-resolve@5.18.2: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.1 + tapable: 2.2.2 es-module-lexer@1.7.0: {} - esbuild@0.25.0: + esbuild@0.25.5: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.0 - '@esbuild/android-arm': 0.25.0 - '@esbuild/android-arm64': 0.25.0 - '@esbuild/android-x64': 0.25.0 - '@esbuild/darwin-arm64': 0.25.0 - '@esbuild/darwin-x64': 0.25.0 - '@esbuild/freebsd-arm64': 0.25.0 - '@esbuild/freebsd-x64': 0.25.0 - '@esbuild/linux-arm': 0.25.0 - '@esbuild/linux-arm64': 0.25.0 - '@esbuild/linux-ia32': 0.25.0 - '@esbuild/linux-loong64': 0.25.0 - '@esbuild/linux-mips64el': 0.25.0 - '@esbuild/linux-ppc64': 0.25.0 - '@esbuild/linux-riscv64': 0.25.0 - '@esbuild/linux-s390x': 0.25.0 - '@esbuild/linux-x64': 0.25.0 - '@esbuild/netbsd-arm64': 0.25.0 - '@esbuild/netbsd-x64': 0.25.0 - '@esbuild/openbsd-arm64': 0.25.0 - '@esbuild/openbsd-x64': 0.25.0 - '@esbuild/sunos-x64': 0.25.0 - '@esbuild/win32-arm64': 0.25.0 - '@esbuild/win32-ia32': 0.25.0 - '@esbuild/win32-x64': 0.25.0 + '@esbuild/aix-ppc64': 0.25.5 + '@esbuild/android-arm': 0.25.5 + '@esbuild/android-arm64': 0.25.5 + '@esbuild/android-x64': 0.25.5 + '@esbuild/darwin-arm64': 0.25.5 + '@esbuild/darwin-x64': 0.25.5 + '@esbuild/freebsd-arm64': 0.25.5 + '@esbuild/freebsd-x64': 0.25.5 + '@esbuild/linux-arm': 0.25.5 + '@esbuild/linux-arm64': 0.25.5 + '@esbuild/linux-ia32': 0.25.5 + '@esbuild/linux-loong64': 0.25.5 + '@esbuild/linux-mips64el': 0.25.5 + '@esbuild/linux-ppc64': 0.25.5 + '@esbuild/linux-riscv64': 0.25.5 + '@esbuild/linux-s390x': 0.25.5 + '@esbuild/linux-x64': 0.25.5 + '@esbuild/netbsd-arm64': 0.25.5 + '@esbuild/netbsd-x64': 0.25.5 + '@esbuild/openbsd-arm64': 0.25.5 + '@esbuild/openbsd-x64': 0.25.5 + '@esbuild/sunos-x64': 0.25.5 + '@esbuild/win32-arm64': 0.25.5 + '@esbuild/win32-ia32': 0.25.5 + '@esbuild/win32-x64': 0.25.5 escalade@3.2.0: {} @@ -3197,56 +3218,61 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.30.0): + eslint-compat-utils@0.5.1(eslint@9.30.1(jiti@2.4.2)): + dependencies: + eslint: 9.30.1(jiti@2.4.2) + semver: 7.7.2 + + eslint-compat-utils@0.6.5(eslint@9.30.1(jiti@2.4.2)): dependencies: - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) semver: 7.7.2 - eslint-config-flat-gitignore@2.1.0(eslint@9.30.0): + eslint-config-flat-gitignore@2.1.0(eslint@9.30.1(jiti@2.4.2)): dependencies: - '@eslint/compat': 1.2.7(eslint@9.30.0) - eslint: 9.30.0 + '@eslint/compat': 1.3.1(eslint@9.30.1(jiti@2.4.2)) + eslint: 9.30.1(jiti@2.4.2) eslint-flat-config-utils@2.1.0: dependencies: pathe: 2.0.3 - eslint-merge-processors@2.0.0(eslint@9.30.0): + eslint-merge-processors@2.0.0(eslint@9.30.1(jiti@2.4.2)): dependencies: - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) - eslint-plugin-antfu@3.1.1(eslint@9.30.0): + eslint-plugin-antfu@3.1.1(eslint@9.30.1(jiti@2.4.2)): dependencies: - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) - eslint-plugin-command@3.3.1(eslint@9.30.0): + eslint-plugin-command@3.3.1(eslint@9.30.1(jiti@2.4.2)): dependencies: '@es-joy/jsdoccomment': 0.50.2 - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) - eslint-plugin-es-x@7.8.0(eslint@9.30.0): + eslint-plugin-es-x@7.8.0(eslint@9.30.1(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.30.0 - eslint-compat-utils: 0.5.1(eslint@9.30.0) + eslint: 9.30.1(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.30.1(jiti@2.4.2)) - eslint-plugin-import-lite@0.3.0(eslint@9.30.0)(typescript@5.8.3): + eslint-plugin-import-lite@0.3.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0) - '@typescript-eslint/types': 8.34.1 - eslint: 9.30.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) + '@typescript-eslint/types': 8.35.1 + eslint: 9.30.1(jiti@2.4.2) optionalDependencies: typescript: 5.8.3 - eslint-plugin-jsdoc@51.2.1(eslint@9.30.0): + eslint-plugin-jsdoc@51.3.3(eslint@9.30.1(jiti@2.4.2)): dependencies: '@es-joy/jsdoccomment': 0.52.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.1 escape-string-regexp: 4.0.0 - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) espree: 10.4.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 @@ -3255,14 +3281,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-n@17.20.0(eslint@9.30.0)(typescript@5.8.3): + eslint-plugin-n@17.20.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0) - '@typescript-eslint/utils': 8.33.1(eslint@9.30.0)(typescript@5.8.3) - enhanced-resolve: 5.18.1 - eslint: 9.30.0 - eslint-plugin-es-x: 7.8.0(eslint@9.30.0) - get-tsconfig: 4.10.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) + '@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + enhanced-resolve: 5.18.2 + eslint: 9.30.1(jiti@2.4.2) + eslint-plugin-es-x: 7.8.0(eslint@9.30.1(jiti@2.4.2)) + get-tsconfig: 4.10.1 globals: 15.15.0 ignore: 5.3.2 minimatch: 9.0.5 @@ -3274,47 +3300,48 @@ snapshots: eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-perfectionist@4.15.0(eslint@9.30.0)(typescript@5.8.3): + eslint-plugin-perfectionist@4.15.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/utils': 8.34.1(eslint@9.30.0)(typescript@5.8.3) - eslint: 9.30.0 + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.30.1(jiti@2.4.2) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-pnpm@0.3.1(eslint@9.30.0): + eslint-plugin-pnpm@0.3.1(eslint@9.30.1(jiti@2.4.2)): dependencies: - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) find-up-simple: 1.0.1 pathe: 2.0.3 pnpm-workspace-yaml: 0.3.1 - tinyglobby: 0.2.13 + tinyglobby: 0.2.14 + yaml-eslint-parser: 1.3.0 - eslint-plugin-regexp@2.9.0(eslint@9.30.0): + eslint-plugin-regexp@2.9.0(eslint@9.30.1(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) jsdoc-type-pratt-parser: 4.1.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@59.0.1(eslint@9.30.0): + eslint-plugin-unicorn@59.0.1(eslint@9.30.1(jiti@2.4.2)): dependencies: - '@babel/helper-validator-identifier': 7.25.9 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0) + '@babel/helper-validator-identifier': 7.27.1 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) '@eslint/plugin-kit': 0.2.8 ci-info: 4.2.0 clean-regexp: 1.0.0 - core-js-compat: 3.41.0 - eslint: 9.30.0 + core-js-compat: 3.43.0 + eslint: 9.30.1(jiti@2.4.2) esquery: 1.6.0 find-up-simple: 1.0.1 - globals: 16.2.0 + globals: 16.3.0 indent-string: 5.0.0 is-builtin-module: 5.0.0 jsesc: 3.1.0 @@ -3324,11 +3351,22 @@ snapshots: semver: 7.7.2 strip-indent: 4.0.0 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)): dependencies: - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + + eslint-plugin-yml@1.18.0(eslint@9.30.1(jiti@2.4.2)): + dependencies: + debug: 4.4.1 + escape-string-regexp: 4.0.0 + eslint: 9.30.1(jiti@2.4.2) + eslint-compat-utils: 0.6.5(eslint@9.30.1(jiti@2.4.2)) + natural-compare: 1.4.0 + yaml-eslint-parser: 1.3.0 + transitivePeerDependencies: + - supports-color eslint-scope@8.4.0: dependencies: @@ -3339,19 +3377,19 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.30.0: + eslint@9.30.1(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.0 '@eslint/core': 0.14.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.30.0 - '@eslint/plugin-kit': 0.3.1 + '@eslint/js': 9.30.1 + '@eslint/plugin-kit': 0.3.3 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.2 + '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 ajv: 6.12.6 @@ -3376,11 +3414,11 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.2 transitivePeerDependencies: - supports-color - esm@3.2.25: {} - espree@10.4.0: dependencies: acorn: 8.15.0 @@ -3403,11 +3441,12 @@ snapshots: esutils@2.0.3: {} - expand-template@2.0.3: {} + expand-template@2.0.3: + optional: true expect-type@1.2.1: {} - exsolve@1.0.4: {} + exsolve@1.0.7: {} fast-copy@3.0.2: {} @@ -3433,10 +3472,6 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.4.3(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - fdir@6.4.4(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -3445,7 +3480,8 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-uri-to-path@1.0.0: {} + file-uri-to-path@1.0.0: + optional: true fill-range@7.1.1: dependencies: @@ -3470,20 +3506,18 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fs-constants@1.0.0: {} + fs-constants@1.0.0: + optional: true fsevents@2.3.3: optional: true - get-package-type@0.1.0: {} - - get-tsconfig@4.10.0: + get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 - getopts@2.3.0: {} - - github-from-package@0.0.0: {} + github-from-package@0.0.0: + optional: true glob-parent@5.1.2: dependencies: @@ -3506,7 +3540,7 @@ snapshots: globals@15.15.0: {} - globals@16.2.0: {} + globals@16.3.0: {} graceful-fs@4.2.11: {} @@ -3516,15 +3550,18 @@ snapshots: help-me@5.0.0: {} - hono@4.7.6: {} + hono@4.8.3: {} + + hookable@5.5.3: {} html-escaper@2.0.2: {} - ieee754@1.2.1: {} + ieee754@1.2.1: + optional: true ignore@5.3.2: {} - ignore@7.0.4: {} + ignore@7.0.5: {} import-fresh@3.3.1: dependencies: @@ -3535,11 +3572,11 @@ snapshots: indent-string@5.0.0: {} - inherits@2.0.4: {} - - ini@1.3.8: {} + inherits@2.0.4: + optional: true - interpret@2.2.0: {} + ini@1.3.8: + optional: true is-binary-path@2.1.0: dependencies: @@ -3549,10 +3586,6 @@ snapshots: dependencies: builtin-modules: 5.0.0 - is-ci@4.1.0: - dependencies: - ci-info: 4.2.0 - is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -3575,8 +3608,8 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: - '@jridgewell/trace-mapping': 0.3.25 - debug: 4.4.0 + '@jridgewell/trace-mapping': 0.3.29 + debug: 4.4.1 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -3592,8 +3625,12 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jiti@2.4.2: {} + joycon@3.1.1: {} + js-tokens@9.0.1: {} + js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -3610,47 +3647,27 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json5@2.2.3: {} - keyv@4.5.4: dependencies: json-buffer: 3.0.1 - knex@3.1.0(patch_hash=db01a09d7d8f6a60609e1e3ea48a97742c28d90d3be6cf2cb3e330ee5a8d9082)(better-sqlite3@11.9.1): + kysely-db0@0.0.1-beta.1(db0@0.3.2(better-sqlite3@11.10.0))(kysely@0.28.2): dependencies: - colorette: 2.0.19 - commander: 10.0.1 - debug: 4.3.4 - escalade: 3.2.0 - esm: 3.2.25 - get-package-type: 0.1.0 - getopts: 2.3.0 - interpret: 2.2.0 - lodash: 4.17.21 - pg-connection-string: 2.6.2 - rechoir: 0.8.0 - resolve-from: 5.0.0 - tarn: 3.0.2 - tildify: 2.0.0 - optionalDependencies: - better-sqlite3: 11.9.1 - transitivePeerDependencies: - - supports-color + db0: 0.3.2(better-sqlite3@11.10.0) + kysely: 0.28.2 + + kysely@0.28.2: {} levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - lilconfig@3.1.3: {} - - load-tsconfig@0.2.5: {} - local-pkg@1.1.1: dependencies: mlly: 1.7.4 - pkg-types: 2.1.0 - quansync: 0.2.8 + pkg-types: 2.2.0 + quansync: 0.2.10 locate-path@6.0.0: dependencies: @@ -3658,29 +3675,25 @@ snapshots: lodash.merge@4.6.2: {} - lodash.sortby@4.7.0: {} - - lodash@4.17.21: {} - - loupe@3.1.3: {} + loupe@3.1.4: {} lru-cache@10.4.3: {} magic-string@0.30.17: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.4 magicast@0.3.5: dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 + '@babel/parser': 7.27.7 + '@babel/types': 7.27.7 source-map-js: 1.2.1 make-dir@4.0.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 - mentoss@0.9.2: + mentoss@0.11.0: dependencies: urlpattern-polyfill: 10.0.0 @@ -3691,13 +3704,14 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - mimic-response@3.1.0: {} + mimic-response@3.1.0: + optional: true min-indent@1.0.1: {} minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@9.0.5: dependencies: @@ -3707,16 +3721,15 @@ snapshots: minipass@7.1.2: {} - mkdirp-classic@0.5.3: {} + mkdirp-classic@0.5.3: + optional: true mlly@1.7.4: dependencies: acorn: 8.15.0 pathe: 2.0.3 pkg-types: 1.3.1 - ufo: 1.5.4 - - ms@2.1.2: {} + ufo: 1.6.1 ms@2.1.3: {} @@ -3726,15 +3739,17 @@ snapshots: nanoid@3.3.9: {} - napi-build-utils@2.0.0: {} + napi-build-utils@2.0.0: + optional: true natural-compare@1.4.0: {} natural-orderby@5.0.0: {} - node-abi@3.74.0: + node-abi@3.75.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 + optional: true node-releases@2.0.19: {} @@ -3793,8 +3808,6 @@ snapshots: path-key@3.1.1: {} - path-parse@1.0.7: {} - path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 @@ -3804,8 +3817,6 @@ snapshots: pathval@2.0.0: {} - pg-connection-string@2.6.2: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -3827,21 +3838,21 @@ snapshots: minimist: 1.2.8 on-exit-leak-free: 2.1.2 pino-abstract-transport: 2.0.0 - pump: 3.0.2 + pump: 3.0.3 secure-json-parse: 2.7.0 sonic-boom: 4.2.0 strip-json-comments: 3.1.1 pino-std-serializers@7.0.0: {} - pino@9.6.0: + pino@9.7.0: dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 on-exit-leak-free: 2.1.2 pino-abstract-transport: 2.0.0 pino-std-serializers: 7.0.0 - process-warning: 4.0.1 + process-warning: 5.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.5.0 @@ -3854,24 +3865,17 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 - pkg-types@2.1.0: + pkg-types@2.2.0: dependencies: - confbox: 0.2.1 - exsolve: 1.0.4 + confbox: 0.2.2 + exsolve: 1.0.7 pathe: 2.0.3 pluralize@8.0.0: {} pnpm-workspace-yaml@0.3.1: dependencies: - yaml: 2.7.0 - - postcss-load-config@6.0.1(postcss@8.5.3)(yaml@2.7.0): - dependencies: - lilconfig: 3.1.3 - optionalDependencies: - postcss: 8.5.3 - yaml: 2.7.0 + yaml: 2.8.0 postcss@8.5.3: dependencies: @@ -3881,31 +3885,32 @@ snapshots: prebuild-install@7.1.3: dependencies: - detect-libc: 2.0.3 + detect-libc: 2.0.4 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 3.74.0 - pump: 3.0.2 + node-abi: 3.75.0 + pump: 3.0.3 rc: 1.2.8 simple-get: 4.0.1 - tar-fs: 2.1.2 + tar-fs: 2.1.3 tunnel-agent: 0.6.0 + optional: true prelude-ls@1.2.1: {} - process-warning@4.0.1: {} + process-warning@5.0.0: {} - pump@3.0.2: + pump@3.0.3: dependencies: - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 once: 1.4.0 punycode@2.3.1: {} - quansync@0.2.8: {} + quansync@0.2.10: {} queue-microtask@1.2.3: {} @@ -3917,12 +3922,14 @@ snapshots: ini: 1.3.8 minimist: 1.2.8 strip-json-comments: 2.0.1 + optional: true readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 + optional: true readdirp@3.6.0: dependencies: @@ -3932,10 +3939,6 @@ snapshots: real-require@0.2.0: {} - rechoir@0.8.0: - dependencies: - resolve: 1.22.10 - refa@0.12.1: dependencies: '@eslint-community/regexpp': 4.12.1 @@ -3953,17 +3956,46 @@ snapshots: resolve-from@4.0.0: {} - resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} - resolve@1.22.10: + reusify@1.1.0: {} + + rolldown-plugin-dts@0.13.13(rolldown@1.0.0-beta.11-commit.f051675)(typescript@5.8.3): dependencies: - is-core-module: '@nolyfill/is-core-module@1.0.39' - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + '@babel/generator': 7.27.5 + '@babel/parser': 7.27.7 + '@babel/types': 7.27.7 + ast-kit: 2.1.0 + birpc: 2.4.0 + debug: 4.4.1 + dts-resolver: 2.1.1 + get-tsconfig: 4.10.1 + rolldown: 1.0.0-beta.11-commit.f051675 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - oxc-resolver + - supports-color - reusify@1.1.0: {} + rolldown@1.0.0-beta.11-commit.f051675: + dependencies: + '@oxc-project/runtime': 0.72.2 + '@oxc-project/types': 0.72.2 + '@rolldown/pluginutils': 1.0.0-beta.11-commit.f051675 + ansis: 4.1.0 + optionalDependencies: + '@rolldown/binding-darwin-arm64': 1.0.0-beta.11-commit.f051675 + '@rolldown/binding-darwin-x64': 1.0.0-beta.11-commit.f051675 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.11-commit.f051675 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.11-commit.f051675 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.11-commit.f051675 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.11-commit.f051675 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.11-commit.f051675 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.11-commit.f051675 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.11-commit.f051675 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.11-commit.f051675 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.11-commit.f051675 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.11-commit.f051675 rollup@4.35.0: dependencies: @@ -3994,6 +4026,9 @@ snapshots: dependencies: queue-microtask: 1.2.3 + safe-buffer@5.2.1: + optional: true + safe-stable-stringify@2.5.0: {} scslre@0.3.0: @@ -4004,8 +4039,6 @@ snapshots: secure-json-parse@2.7.0: {} - semver@7.7.1: {} - semver@7.7.2: {} shebang-command@2.0.0: @@ -4018,15 +4051,17 @@ snapshots: signal-exit@4.1.0: {} - simple-concat@1.0.1: {} + simple-concat@1.0.1: + optional: true simple-get@4.0.1: dependencies: decompress-response: 6.0.0 once: 1.4.0 simple-concat: 1.0.1 + optional: true - simple-git-hooks@2.12.1: {} + simple-git-hooks@2.13.0: {} sisteransi@1.0.5: {} @@ -4045,10 +4080,6 @@ snapshots: source-map@0.6.1: optional: true - source-map@0.8.0-beta.0: - dependencies: - whatwg-url: 7.1.0 - spdx-exceptions@2.5.0: {} spdx-expression-parse@4.0.0: @@ -4078,7 +4109,8 @@ snapshots: string_decoder@1.3.0: dependencies: - safe-buffer: '@nolyfill/safe-buffer@1.0.44' + safe-buffer: 5.2.1 + optional: true strip-ansi@6.0.1: dependencies: @@ -4088,44 +4120,45 @@ snapshots: dependencies: ansi-regex: 6.1.0 - strip-bom@3.0.0: {} - strip-indent@4.0.0: dependencies: min-indent: 1.0.1 - strip-json-comments@2.0.1: {} + strip-json-comments@2.0.1: + optional: true strip-json-comments@3.1.1: {} + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: {} + tapable@2.2.2: {} - tapable@2.2.1: {} - - tar-fs@2.1.2: + tar-fs@2.1.3: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 - pump: 3.0.2 + pump: 3.0.3 tar-stream: 2.2.0 + optional: true tar-stream@2.2.0: dependencies: bl: 4.1.0 - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.2 - - tarn@3.0.2: {} + optional: true terser@5.31.6: dependencies: - '@jridgewell/source-map': 0.3.6 + '@jridgewell/source-map': 0.3.10 acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -4141,8 +4174,6 @@ snapshots: dependencies: real-require: 0.2.0 - tildify@2.0.0: {} - tiny-lru@11.2.11: {} tinybench@2.9.0: {} @@ -4151,30 +4182,21 @@ snapshots: tinyexec@1.0.1: {} - tinyglobby@0.2.12: - dependencies: - fdir: 6.4.3(picomatch@4.0.2) - picomatch: 4.0.2 - - tinyglobby@0.2.13: + tinyglobby@0.2.14: dependencies: fdir: 6.4.4(picomatch@4.0.2) picomatch: 4.0.2 - tinypool@1.0.2: {} + tinypool@1.1.1: {} tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} + tinyspy@4.0.3: {} to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - tr46@1.0.1: - dependencies: - punycode: 2.3.1 - tree-kill@1.2.2: {} ts-api-utils@2.1.0(typescript@5.8.3): @@ -4186,57 +4208,59 @@ snapshots: picomatch: 4.0.2 typescript: 5.8.3 - tsconfig-paths@4.2.0: + tsdown@0.12.9(typescript@5.8.3): dependencies: - json5: 2.2.3 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tsup@8.4.0(postcss@8.5.3)(typescript@5.8.3)(yaml@2.7.0): - dependencies: - bundle-require: 5.1.0(esbuild@0.25.0) + ansis: 4.1.0 cac: 6.7.14 chokidar: 4.0.3 - consola: 3.4.0 - debug: 4.4.0 - esbuild: 0.25.0 - joycon: 3.1.1 - picocolors: 1.1.1 - postcss-load-config: 6.0.1(postcss@8.5.3)(yaml@2.7.0) - resolve-from: 5.0.0 - rollup: 4.35.0 - source-map: 0.8.0-beta.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.12 - tree-kill: 1.2.2 + debug: 4.4.1 + diff: 8.0.2 + empathic: 2.0.0 + hookable: 5.5.3 + rolldown: 1.0.0-beta.11-commit.f051675 + rolldown-plugin-dts: 0.13.13(rolldown@1.0.0-beta.11-commit.f051675)(typescript@5.8.3) + semver: 7.7.2 + tinyexec: 1.0.1 + tinyglobby: 0.2.14 + unconfig: 7.3.2 optionalDependencies: - postcss: 8.5.3 typescript: 5.8.3 transitivePeerDependencies: - - jiti + - '@typescript/native-preview' + - oxc-resolver - supports-color - - tsx - - yaml + - vue-tsc + + tslib@2.8.1: + optional: true tunnel-agent@0.6.0: dependencies: - safe-buffer: '@nolyfill/safe-buffer@1.0.44' + safe-buffer: 5.2.1 + optional: true type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - type-fest@4.40.0: {} + type-fest@4.41.0: {} typescript@5.8.3: {} - ufo@1.5.4: {} + ufo@1.6.1: {} - undici-types@6.21.0: {} + unconfig@7.3.2: + dependencies: + '@quansync/fs': 0.1.3 + defu: 6.1.4 + jiti: 2.4.2 + quansync: 0.2.10 + + undici-types@7.8.0: {} - update-browserslist-db@1.1.3(browserslist@4.24.4): + update-browserslist-db@1.1.3(browserslist@4.25.1): dependencies: - browserslist: 4.24.4 + browserslist: 4.25.1 escalade: 3.2.0 picocolors: 1.1.1 @@ -4246,19 +4270,20 @@ snapshots: urlpattern-polyfill@10.0.0: {} - util-deprecate@1.0.2: {} + util-deprecate@1.0.2: + optional: true - valibot@1.0.0(typescript@5.8.3): + valibot@1.1.0(typescript@5.8.3): optionalDependencies: typescript: 5.8.3 - vite-node@3.1.3(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0): + vite-node@3.2.4(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0): dependencies: cac: 6.7.14 - debug: 4.4.0 + debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.2.1(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0) + vite: 6.2.1(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - jiti @@ -4273,43 +4298,46 @@ snapshots: - tsx - yaml - vite@6.2.1(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0): + vite@6.2.1(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0): dependencies: - esbuild: 0.25.0 + esbuild: 0.25.5 postcss: 8.5.3 rollup: 4.35.0 optionalDependencies: - '@types/node': 22.15.34 + '@types/node': 24.0.10 fsevents: 2.3.3 + jiti: 2.4.2 terser: 5.31.6 - yaml: 2.7.0 - - vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0): - dependencies: - '@vitest/expect': 3.1.3 - '@vitest/mocker': 3.1.3(vite@6.2.1(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0)) - '@vitest/pretty-format': 3.1.3 - '@vitest/runner': 3.1.3 - '@vitest/snapshot': 3.1.3 - '@vitest/spy': 3.1.3 - '@vitest/utils': 3.1.3 + yaml: 2.8.0 + + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0): + dependencies: + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@6.2.1(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 chai: 5.2.0 - debug: 4.4.0 + debug: 4.4.1 expect-type: 1.2.1 magic-string: 0.30.17 pathe: 2.0.3 + picomatch: 4.0.2 std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.13 - tinypool: 1.0.2 + tinyglobby: 0.2.14 + tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.2.1(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0) - vite-node: 3.1.3(@types/node@22.15.34)(terser@5.31.6)(yaml@2.7.0) + vite: 6.2.1(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0) + vite-node: 3.2.4(@types/node@24.0.10)(jiti@2.4.2)(terser@5.31.6)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.15.34 + '@types/node': 24.0.10 transitivePeerDependencies: - jiti - less @@ -4324,27 +4352,18 @@ snapshots: - tsx - yaml - vue-eslint-parser@10.1.3(eslint@9.30.0): + vue-eslint-parser@10.2.0(eslint@9.30.1(jiti@2.4.2)): dependencies: debug: 4.4.1 - eslint: 9.30.0 + eslint: 9.30.1(jiti@2.4.2) eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 esquery: 1.6.0 - lodash: 4.17.21 semver: 7.7.2 transitivePeerDependencies: - supports-color - webidl-conversions@4.0.2: {} - - whatwg-url@7.1.0: - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - which@2.0.2: dependencies: isexe: 2.0.0 @@ -4374,6 +4393,11 @@ snapshots: dependencies: tiny-lru: 11.2.11 - yaml@2.7.0: {} + yaml-eslint-parser@1.3.0: + dependencies: + eslint-visitor-keys: 3.4.3 + yaml: 2.8.0 + + yaml@2.8.0: {} yocto-queue@0.1.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 000000000..b2cefe8f0 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,20 @@ +packages: [] + +ignoredBuiltDependencies: ["@biomejs/biome", esbuild, simple-git-hooks] +onlyBuiltDependencies: [] + +overrides: + "@antfu/eslint-config>@eslint/markdown": "-" + "@antfu/eslint-config>@stylistic/eslint-plugin": "-" + "@antfu/eslint-config>eslint-plugin-jsonc": "-" + "@antfu/eslint-config>eslint-plugin-toml": "-" + "@antfu/eslint-config>eslint-plugin-vue": "-" + "@antfu/eslint-config>eslint-processor-vue-blocks": "-" + "@antfu/eslint-config>jsonc-eslint-parser": "-" + "@antfu/eslint-config>toml-eslint-parser": "-" + "@antfu/eslint-config>vitest": "-" + eslint-plugin-pnpm>jsonc-eslint-parser: "-" + +registry: https://npm.h.haglund.dev +savePrefix: "" +shellEmulator: true diff --git a/src/config.ts b/src/config.ts index da42793f2..565a00b5d 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,13 +1,13 @@ import * as v from "valibot" -export enum Environment { - Development = "development", - Test = "test", - Production = "production", -} +export const Environment = { + Dev: "development", + Test: "test", + Prod: "production", +} as const const schema = v.object({ - NODE_ENV: v.optional(v.enum(Environment), Environment.Development), + NODE_ENV: v.optional(v.enum(Environment), Environment.Dev), PORT: v.optional(v.pipe(v.string(), v.transform(Number), v.integer()), "3000"), LOG_LEVEL: v.optional( v.picklist(["fatal", "error", "warn", "info", "debug", "trace"]), diff --git a/src/db.ts b/src/db.ts index 9bf892840..b7afb29bb 100644 --- a/src/db.ts +++ b/src/db.ts @@ -1,20 +1,26 @@ -import Knex from "knex" - -import knexfile from "../knexfile.js" - -export enum Source { - AniDB = "anidb", - AniList = "anilist", - AnimePlanet = "anime-planet", - AniSearch = "anisearch", - IMDB = "imdb", - Kitsu = "kitsu", - LiveChart = "livechart", - NotifyMoe = "notify-moe", - TheMovieDB = "themoviedb", - TheTVDB = "thetvdb", - MAL = "myanimelist", -} +import { mkdirSync } from "node:fs" + +import { createDatabase } from "db0" +import sqlite from "db0/connectors/node-sqlite" +import { Kysely, Migrator } from "kysely" +import { Db0SqliteDialect } from "kysely-db0" + +import { ActuallyWorkingMigrationProvider } from "./db/file-provider.ts" + +export const Source = { + AniDB: "anidb", + AniList: "anilist", + AnimePlanet: "anime-planet", + AniSearch: "anisearch", + IMDB: "imdb", + Kitsu: "kitsu", + LiveChart: "livechart", + NotifyMoe: "notify-moe", + TheMovieDB: "themoviedb", + TheTVDB: "thetvdb", + MAL: "myanimelist", +} as const +export type SourceValue = (typeof Source)[keyof typeof Source] export type Relation = { [Source.AniDB]?: number @@ -30,9 +36,27 @@ export type Relation = { [Source.MAL]?: number } -export type OldRelation = Pick< - Relation, - Source.AniDB | Source.AniList | Source.MAL | Source.Kitsu -> +export type OldRelation = Pick + +// Define database schema for Kysely +export interface Database { + relations: Relation +} + +// Ensure SQLite directory exists +mkdirSync("./dir", { recursive: true }) + +const db0 = createDatabase( + sqlite({ path: `./db/${process.env.NODE_ENV ?? "development"}.sqlite3` }), +) +// Create Kysely instance +export const db = new Kysely({ + dialect: new Db0SqliteDialect(db0), +}) -export const knex = Knex(knexfile) +export const migrator = new Migrator({ + db, + provider: new ActuallyWorkingMigrationProvider( + process.env.NODE_ENV !== "test" ? "dist/migrations" : "src/migrations", + ), +}) diff --git a/src/db/file-provider.ts b/src/db/file-provider.ts new file mode 100644 index 000000000..ea36ed9b8 --- /dev/null +++ b/src/db/file-provider.ts @@ -0,0 +1,52 @@ +import { readdirSync } from "node:fs" +import path from "node:path" +import { pathToFileURL } from "node:url" + +import type { Migration, MigrationProvider } from "kysely" + +const isMigration = (obj: unknown): obj is Migration => + typeof (obj as { up?: unknown })?.up === "function" + +/** + * Reads all migrations from a folder in node.js. + * + * ```ts + * new FileMigrationProvider("path/to/migrations/folder") + * ``` + */ +export class ActuallyWorkingMigrationProvider implements MigrationProvider { + readonly #migrationDirPath: string + + constructor(migrationDirPath: string) { + this.#migrationDirPath = migrationDirPath + } + + async getMigrations(): Promise> { + const migrations: Record = {} + const files = readdirSync(this.#migrationDirPath) + + for (const fileName of files) { + if ( + fileName.endsWith(".js") || + (fileName.endsWith(".ts") && !fileName.endsWith(".d.ts")) || + fileName.endsWith(".mjs") || + (fileName.endsWith(".mts") && !fileName.endsWith(".d.mts")) + ) { + const filePath = pathToFileURL( + path.join(this.#migrationDirPath, fileName), + ).toString() + const migration = (await import(filePath)) as Migration | { default?: Migration } + const migrationKey = fileName.substring(0, fileName.lastIndexOf(".")) + + // Handle esModuleInterop export's `default` prop... + if (isMigration((migration as { default?: Migration })?.default)) { + migrations[migrationKey] = (migration as { default?: Migration }).default! + } else if (isMigration(migration)) { + migrations[migrationKey] = migration + } + } + } + + return migrations + } +} diff --git a/src/index.ts b/src/index.ts index bb43d96e2..7564028f4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,12 +2,12 @@ import { serve } from "@hono/node-server" import { createApp } from "./app.ts" import { config } from "./config.ts" -import { knex } from "./db.ts" +import { migrator } from "./db.ts" import { updateRelations } from "./update.ts" const { NODE_ENV, PORT } = config -await knex.migrate.latest() +// Note: Migrations are handled separately and not through Kysely const runUpdateScript = async () => updateRelations() @@ -20,6 +20,8 @@ if (NODE_ENV === "production") { const app = createApp() +await migrator.migrateToLatest() + serve({ fetch: app.fetch, hostname: "0.0.0.0", port: PORT }, () => { console.log(`Server running on ${PORT}`) }) diff --git a/src/manual-rules.ts b/src/manual-rules.ts index e2d4e404f..7ab263d84 100644 --- a/src/manual-rules.ts +++ b/src/manual-rules.ts @@ -1,4 +1,4 @@ -import { knex, type Relation } from "./db.ts" +import { db, type Relation } from "./db.ts" type Rule = `${keyof Relation}:${number}` const rules: Record = {} @@ -6,35 +6,45 @@ const rules: Record = {} export const updateBasedOnManualRules = async () => { const promises = Object.entries(rules).map(async ([from, to]) => { const [fromSource, fromId] = from.split(":") - const fromWhere = { [fromSource]: Number(fromId) } + const fromSourceKey = fromSource as keyof Relation + const fromIdNum = Number(fromId) + const [toSource, toId] = (to as string).split(":") - const toWhere = { [toSource]: Number(toId) } + const toSourceKey = toSource as keyof Relation + const toIdNum = Number(toId) - const badRelation = (await knex("relations") - .where(fromWhere) - .first()) as Relation | null + // Find the relation that needs to be fixed + const badRelation = await db + .selectFrom("relations") + .selectAll() + .where(fromSourceKey, "=", fromIdNum) + .executeTakeFirst() if (!badRelation) { throw new Error(`Could not find rule source for ${from}->${to as string}!!!!!`) } - if (badRelation[toSource as keyof Relation] === Number(toId)) { + if (badRelation[toSourceKey] === toIdNum) { return console.warn( `${from}:${to as string} has been fixed, can be removed from manual rules.`, ) } - await knex - .transaction(async (trx) => - knex("relations") - .delete() - .where(fromWhere) - .transacting(trx) - .then(() => - knex("relations").update(fromWhere).where(toWhere).transacting(trx), - ), - ) - .catch(console.error) + try { + await db.transaction().execute(async (trx) => { + // Delete the relation with the "from" condition + await trx.deleteFrom("relations").where(fromSourceKey, "=", fromIdNum).execute() + + // Update the relation with the "to" condition to include the "from" data + await trx + .updateTable("relations") + .set({ [fromSourceKey]: fromIdNum }) + .where(toSourceKey, "=", toIdNum) + .execute() + }) + } catch (error) { + console.error(error) + } }) await Promise.all(promises) diff --git a/src/migrations/20190611171759_initial.ts b/src/migrations/20190611171759_initial.ts new file mode 100644 index 000000000..6a5b372b8 --- /dev/null +++ b/src/migrations/20190611171759_initial.ts @@ -0,0 +1,26 @@ +import { type Kysely, sql } from "kysely" + +export async function up(db: Kysely): Promise { + await sql`PRAGMA journal_mode=WAL`.execute(db) + + await db.schema + .createTable("relations") + .ifNotExists() + + // Original columns + .addColumn("anilist", "integer", (col) => col.unique()) + .addColumn("anidb", "integer", (col) => col.unique()) + .addColumn("myanimelist", "integer", (col) => col.unique()) + .addColumn("kitsu", "integer", (col) => col.unique()) + + // v2 columns + .addColumn("anime-planet", "text", (col) => col.unique()) + .addColumn("anisearch", "integer", (col) => col.unique()) + .addColumn("imdb", "text") + .addColumn("livechart", "integer", (col) => col.unique()) + .addColumn("notify-moe", "text", (col) => col.unique()) + .addColumn("themoviedb", "integer") + .addColumn("thetvdb", "integer") + + .execute() +} diff --git a/src/routes/v1/ids/handler.test.ts b/src/routes/v1/ids/handler.test.ts index eb85fec30..9f1527ea8 100644 --- a/src/routes/v1/ids/handler.test.ts +++ b/src/routes/v1/ids/handler.test.ts @@ -2,7 +2,7 @@ import { testClient } from "hono/testing" import { afterAll, afterEach, describe, expect, it } from "vitest" import { createApp } from "../../../app.ts" -import { knex, type Relation, Source } from "../../../db.ts" +import { db, type Relation, Source } from "../../../db.ts" let id = 1 const createRelations = async ( @@ -15,7 +15,7 @@ const createRelations = async ( myanimelist: id++, })) - await knex.insert(relations).into("relations") + await db.insertInto("relations").values(relations).execute() if (amount === 1) { return relations[0] as never @@ -26,10 +26,10 @@ const createRelations = async ( const app = createApp() -afterEach(() => knex.delete().from("relations")) +afterEach(async () => db.deleteFrom("relations").execute()) afterAll(async () => { - await knex.destroy() + await db.destroy() }) describe("query params", () => { @@ -69,7 +69,7 @@ describe("query params", () => { myanimelist: null!, kitsu: null!, } - await knex.insert(relation).into("relations") + await db.insertInto("relations").values(relation).execute() const response = await testClient(app).api.ids.$get({ query: { @@ -146,7 +146,7 @@ describe("json body", () => { myanimelist: null as never, kitsu: null as never, } - await knex.insert(relation).into("relations") + await db.insertInto("relations").values(relation).execute() const response = await testClient(app).api.ids.$post({ json: { anilist: 1337 }, diff --git a/src/routes/v1/ids/handler.ts b/src/routes/v1/ids/handler.ts index 2ce056d65..7a8280193 100644 --- a/src/routes/v1/ids/handler.ts +++ b/src/routes/v1/ids/handler.ts @@ -1,53 +1,73 @@ import { sValidator } from "@hono/standard-validator" import { Hono } from "hono" -import type { InferOutput } from "valibot" -import { knex, type OldRelation, type Relation, type Source } from "../../../db.ts" +import { db } from "../../../db.ts" +import type { OldRelation, Relation, SourceValue } from "../../../db.ts" import { cacheReply, CacheTimes, validationHook } from "../../../utils.ts" import { bodyInputSchema } from "./schemas/json-body.ts" import { queryInputSchema } from "./schemas/query-params.ts" +// Fields to select for v1 API +const V1_FIELDS = [ + "relations.anidb", + "relations.anilist", + "relations.myanimelist", + "relations.kitsu", +] as const + export const v1Routes = new Hono() .get("/ids", sValidator("query", queryInputSchema, validationHook), async (c) => { - const query = c.req.query() + const query = c.req.valid("query") - const row = (await knex - .select(["anidb", "anilist", "myanimelist", "kitsu"]) - .where({ [query.source]: query.id }) - .from("relations") - .first()) as Relation | undefined + const row = await db + .selectFrom("relations") + .select(V1_FIELDS) + .where(query.source as keyof Relation, "=", query.id) + .executeTakeFirst() cacheReply(c.res, CacheTimes.SIX_HOURS) return c.json((row as OldRelation) ?? null) }) .post("/ids", sValidator("json", bodyInputSchema, validationHook), async (c) => { - const input = await c.req.json>() + const input = c.req.valid("json") if (!Array.isArray(input)) { - const relation = (await knex - .select(["anidb", "anilist", "myanimelist", "kitsu"]) - .where(input) - .from("relations") - .first()) as Relation | undefined + // Single item query + const [key, value] = Object.entries(input)[0] + + const relation = await db + .selectFrom("relations") + .select(V1_FIELDS) + .where(key as keyof Relation, "=", value) + .executeTakeFirst() return c.json(relation ?? null) } let relations: Array = [] - // Get relations - relations = await knex - .select(["anidb", "anilist", "myanimelist", "kitsu"]) - .where(function () { - for (const item of input) this.orWhere(item) - }) - .from("relations") + // Get relations with multiple OR conditions + if (input.length > 0) { + let query = db.selectFrom("relations").select(V1_FIELDS) + + // Build OR conditions + query = query.where((eb) => + eb.or( + input.map((item) => { + const [key, value] = Object.entries(item)[0] + return eb(key as keyof Relation, "=", value) + }), + ), + ) + + relations = await query.execute() + } // Map them against the input, so we get results like [{item}, null, {item}] relations = input.map((item) => { - const realItem = Object.entries(item)[0] as [Source, number] + const realItem = Object.entries(item)[0] as [SourceValue, number] return relations.find((relation) => relation![realItem[0]] === realItem[1]) ?? null }) diff --git a/src/routes/v1/ids/schemas/json-body.ts b/src/routes/v1/ids/schemas/json-body.ts index 2c9a26624..5d2965d9f 100644 --- a/src/routes/v1/ids/schemas/json-body.ts +++ b/src/routes/v1/ids/schemas/json-body.ts @@ -1,6 +1,6 @@ import * as v from "valibot" -import type { Source } from "../../../../db.ts" +import type { SourceValue } from "../../../../db.ts" import { numberIdSchema, oldSourceSchema } from "../../../../shared-schemas.ts" export const singularItemInputSchema = v.pipe( @@ -16,7 +16,7 @@ const arrayInputSchema = v.pipe( export const bodyInputSchema = v.union([singularItemInputSchema, arrayInputSchema]) type BodyItem = { - [key in Source]?: number + [key in SourceValue]?: number } export type BodyQuery = BodyItem | BodyItem[] diff --git a/src/routes/v2/ids/handler.test.ts b/src/routes/v2/ids/handler.test.ts index 248e3b73f..d24b4188b 100644 --- a/src/routes/v2/ids/handler.test.ts +++ b/src/routes/v2/ids/handler.test.ts @@ -2,7 +2,7 @@ import { testClient } from "hono/testing" import { afterAll, afterEach, describe, expect, it } from "vitest" import { createApp } from "../../../app.ts" -import { knex, type Relation, Source } from "../../../db.ts" +import { db, type Relation, Source } from "../../../db.ts" import { testIncludeQueryParam } from "../include.test-utils.ts" let id = 1 @@ -23,7 +23,10 @@ const createRelations = async ( myanimelist: id++, })) - await knex.insert(relations).into("relations") + // Insert each relation + for (const relation of relations) { + await db.insertInto("relations").values(relation).execute() + } if (amount === 1) { return relations[0] as never @@ -34,10 +37,12 @@ const createRelations = async ( const app = createApp() -afterEach(() => knex.delete().from("relations")) +afterEach(async () => { + await db.deleteFrom("relations").execute() +}) afterAll(async () => { - await knex.destroy() + await db.destroy() }) describe("query params", () => { @@ -83,7 +88,7 @@ describe("query params", () => { thetvdb: null!, myanimelist: null!, } - await knex.insert(relation).into("relations") + await db.insertInto("relations").values(relation).execute() const response = await testClient(app).api.v2.ids.$get({ query: { @@ -170,7 +175,7 @@ describe("json body", () => { thetvdb: null!, myanimelist: null!, } - await knex.insert(relation).into("relations") + await db.insertInto("relations").values(relation).execute() const response = await testClient(app).api.v2.ids.$post({ query: {}, diff --git a/src/routes/v2/ids/handler.ts b/src/routes/v2/ids/handler.ts index 433db5eab..dac7bd2dc 100644 --- a/src/routes/v2/ids/handler.ts +++ b/src/routes/v2/ids/handler.ts @@ -1,8 +1,7 @@ import { sValidator } from "@hono/standard-validator" import { Hono } from "hono" -import type { InferOutput } from "valibot" -import { knex, type Relation, type Source } from "../../../db.ts" +import { db, type Relation, type SourceValue } from "../../../db.ts" import { cacheReply, CacheTimes, validationHook } from "../../../utils.ts" import { buildSelectFromInclude, includeSchema } from "../include.ts" @@ -11,50 +10,64 @@ import { queryInputSchema } from "./schemas/query-params.ts" export const v2Routes = new Hono() .get("/ids", sValidator("query", queryInputSchema, validationHook), async (c) => { - const query = c.req.query() - const data = (await knex - .select(buildSelectFromInclude(query.include)) - .where({ [query.source]: query.id }) - .from("relations") - .first()) as Relation | undefined + const query = c.req.valid("query") + const selectFields = buildSelectFromInclude(query.include) + + const data = await db + .selectFrom("relations") + .select(selectFields) + .where(query.source as keyof Relation, "=", query.id) + .executeTakeFirst() cacheReply(c.res, CacheTimes.SIX_HOURS) - return c.json((data as Relation | null) ?? null) + return c.json(data ?? null) }) .post( "/ids", sValidator("json", bodyInputSchema, validationHook), sValidator("query", includeSchema, validationHook), async (c) => { - const input = await c.req.json>() - const query = c.req.query() + const input = c.req.valid("json") + const query = c.req.valid("query") - const select = buildSelectFromInclude(query.include) + const selectFields = buildSelectFromInclude(query.include) if (!Array.isArray(input)) { - const relation = (await knex - .select(select) - .where(input) - .from("relations") - .first()) as Relation | undefined + // Single item query + const [key, value] = Object.entries(input)[0] + + const relation = await db + .selectFrom("relations") + .select(selectFields) + .where(key as keyof Relation, "=", value) + .executeTakeFirst() return c.json(relation ?? null) } let relations: Array = [] - // Get relations - relations = await knex - .select(select) - .where(function () { - for (const item of input) void this.orWhere(item) - }) - .from("relations") + // Get relations with multiple OR conditions + if (input.length > 0) { + let query = db.selectFrom("relations").select(selectFields) + + // Build OR conditions + query = query.where((eb) => + eb.or( + input.map((item) => { + const [key, value] = Object.entries(item)[0] + return eb(key as keyof Relation, "=", value) + }), + ), + ) + + relations = await query.execute() + } // Map them against the input, so we get results like [{item}, null, {item}] relations = input.map((item) => { - const realItem = Object.entries(item)[0] as [Source, number] + const realItem = Object.entries(item)[0] as [SourceValue, number] return ( relations.find((relation) => relation![realItem[0]] === realItem[1]) ?? null diff --git a/src/routes/v2/include.test-utils.ts b/src/routes/v2/include.test-utils.ts index 346c3f481..96c173b4c 100644 --- a/src/routes/v2/include.test-utils.ts +++ b/src/routes/v2/include.test-utils.ts @@ -1,22 +1,25 @@ import type { Hono } from "hono" import { describe, expect, test } from "vitest" -import { knex, Source } from "../../db.ts" +import { db, Source, type SourceValue } from "../../db.ts" export const testIncludeQueryParam = ( app: Hono, path: string, - source = Source.AniList, + source: SourceValue = Source.AniList, ) => { const arrayify = (data: T) => (source !== Source.AniList ? [data] : data) - const prefixify = (source: S, input: T) => - source === "imdb" ? (`tt${input}` as const) : input + const prefixify = ( + source: S, + input: T, + ) => (source === "imdb" ? (`tt${input}` as const) : input) describe("?include", () => { test("single source", async () => { - await knex - .insert({ anilist: 1337, thetvdb: 1337, themoviedb: 1337, imdb: "tt1337" }) - .into("relations") + await db + .insertInto("relations") + .values({ anilist: 1337, thetvdb: 1337, themoviedb: 1337, imdb: "tt1337" }) + .execute() const query = new URLSearchParams({ source, @@ -35,9 +38,10 @@ export const testIncludeQueryParam = ( }) test("multiple sources (anilist,thetvdb,themoviedb)", async () => { - await knex - .insert({ anilist: 1337, thetvdb: 1337, themoviedb: 1337, imdb: "tt1337" }) - .into("relations") + await db + .insertInto("relations") + .values({ anilist: 1337, thetvdb: 1337, themoviedb: 1337, imdb: "tt1337" }) + .execute() const query = new URLSearchParams({ source, @@ -58,9 +62,10 @@ export const testIncludeQueryParam = ( }) test("all the sources", async () => { - await knex - .insert({ anilist: 1337, [source]: prefixify(source, 1337) }) - .into("relations") + await db + .insertInto("relations") + .values({ anilist: 1337, [source]: prefixify(source, 1337) }) + .execute() const query = new URLSearchParams({ source, @@ -71,7 +76,7 @@ export const testIncludeQueryParam = ( new Request(`http://localhost${path}?${query.toString()}`), ) - const expectedResult: Record = { + const expectedResult: Record = { anidb: null, anilist: 1337, "anime-planet": null, diff --git a/src/routes/v2/include.test.ts b/src/routes/v2/include.test.ts index 492007aa2..3647a47ae 100644 --- a/src/routes/v2/include.test.ts +++ b/src/routes/v2/include.test.ts @@ -4,7 +4,7 @@ import { Hono } from "hono" import { testClient } from "hono/testing" import { afterAll, beforeEach, describe, expect, it, vi } from "vitest" -import { knex, Source } from "../../db.ts" +import { db, Source } from "../../db.ts" import { validationHook } from "../../utils.ts" import { includeSchema } from "./include.ts" @@ -17,11 +17,11 @@ const app = new Hono().get( ) beforeEach(async () => { - await knex.delete().from("relations") + await db.deleteFrom("relations").execute() }) afterAll(async () => { - await knex.destroy() + await db.destroy() }) describe("schema", () => { diff --git a/src/routes/v2/include.ts b/src/routes/v2/include.ts index 2123550c7..1ba8b0e0f 100644 --- a/src/routes/v2/include.ts +++ b/src/routes/v2/include.ts @@ -1,6 +1,6 @@ import * as v from "valibot" -import { Source } from "../../db.ts" +import { db, Source, type SourceValue } from "../../db.ts" export const includeSchema = v.object({ include: v.optional( @@ -16,10 +16,14 @@ export const includeSchema = v.object({ export type IncludeQuery = v.InferOutput const sources = Object.values(Source) +const selectAll = sources.map((column) => db.dynamic.ref(column)) export const buildSelectFromInclude = (include: string | null | undefined) => { if (include == null) { - return "*" + return selectAll } - return include.split(",").filter((inclusion) => sources.includes(inclusion as Source)) + return include + .split(",") + .filter((inclusion) => sources.includes(inclusion as SourceValue)) + .map((column) => db.dynamic.ref(column)) } diff --git a/src/routes/v2/special/handler.test.ts b/src/routes/v2/special/handler.test.ts index 1bb8ca35c..f8f28a22c 100644 --- a/src/routes/v2/special/handler.test.ts +++ b/src/routes/v2/special/handler.test.ts @@ -2,7 +2,7 @@ import { testClient } from "hono/testing" import { afterAll, beforeEach, describe, expect, it } from "vitest" import { createApp } from "../../../app.ts" -import { knex, type Relation, Source } from "../../../db.ts" +import { db, type Relation, Source } from "../../../db.ts" import { testIncludeQueryParam } from "../include.test-utils.ts" let id = 1 @@ -24,7 +24,7 @@ const createRelations = async ( myanimelist: id++, })) - await knex.insert(relations).into("relations") + await db.insertInto("relations").values(relations).execute() if (amount === 1) { return relations[0] as never @@ -36,11 +36,11 @@ const createRelations = async ( const app = createApp() beforeEach(async () => { - await knex.delete().from("relations") + await db.deleteFrom("relations").execute() }) afterAll(async () => { - await knex.destroy() + await db.destroy() }) describe("imdb", () => { @@ -85,7 +85,7 @@ describe("imdb", () => { thetvdb: null!, myanimelist: null!, } - await knex.insert(relation).into("relations") + await db.insertInto("relations").values(relation).execute() const response = await testClient(app).api.v2.imdb.$get({ query: { @@ -143,7 +143,7 @@ describe("thetvdb", () => { thetvdb: 1337, myanimelist: null!, } - await knex.insert(relation).into("relations") + await db.insertInto("relations").values(relation).execute() const response = await testClient(app).api.v2.thetvdb.$get({ query: { @@ -201,7 +201,7 @@ describe("themoviedb", () => { thetvdb: null!, myanimelist: null!, } - await knex.insert(relation).into("relations") + await db.insertInto("relations").values(relation).execute() const response = await testClient(app).api.v2.themoviedb.$get({ query: { diff --git a/src/routes/v2/special/handler.ts b/src/routes/v2/special/handler.ts index 4177f348d..5c8b05a60 100644 --- a/src/routes/v2/special/handler.ts +++ b/src/routes/v2/special/handler.ts @@ -1,7 +1,7 @@ import { sValidator } from "@hono/standard-validator" import { Hono } from "hono" -import { knex, Source } from "../../../db.ts" +import { db, Source } from "../../../db.ts" import { cacheReply, CacheTimes, validationHook } from "../../../utils.ts" import { buildSelectFromInclude } from "../include.ts" @@ -12,12 +12,14 @@ export const specialRoutes = new Hono() "/imdb", sValidator("query", specialImdbInputSchema, validationHook), async (c) => { - const query = c.req.query() + const query = c.req.valid("query") + const selectFields = buildSelectFromInclude(query.include) - const data = await knex - .select(buildSelectFromInclude(query.include)) - .where({ [Source.IMDB]: query.id }) - .from("relations") + const data = await db + .selectFrom("relations") + .select(selectFields) + .where(Source.IMDB, "=", query.id) + .execute() cacheReply(c.res, CacheTimes.SIX_HOURS) @@ -28,12 +30,14 @@ export const specialRoutes = new Hono() "/themoviedb", sValidator("query", specialInputSchema, validationHook), async (c) => { - const query = c.req.query() + const query = c.req.valid("query") + const selectFields = buildSelectFromInclude(query.include) - const data = await knex - .select(buildSelectFromInclude(query.include)) - .where({ [Source.TheMovieDB]: query.id }) - .from("relations") + const data = await db + .selectFrom("relations") + .select(selectFields) + .where(Source.TheMovieDB, "=", query.id) + .execute() cacheReply(c.res, CacheTimes.SIX_HOURS) @@ -41,12 +45,14 @@ export const specialRoutes = new Hono() }, ) .get("/thetvdb", sValidator("query", specialInputSchema, validationHook), async (c) => { - const query = c.req.query() - - const data = await knex - .select(buildSelectFromInclude(query.include)) - .where({ [Source.TheTVDB]: query.id }) - .from("relations") + const query = c.req.valid("query") + const selectFields = buildSelectFromInclude(query.include) + + const data = await db + .selectFrom("relations") + .select(selectFields) + .where(Source.TheTVDB, "=", query.id) + .execute() cacheReply(c.res, CacheTimes.SIX_HOURS) diff --git a/src/shared-schemas.ts b/src/shared-schemas.ts index e52506593..dec8f3074 100644 --- a/src/shared-schemas.ts +++ b/src/shared-schemas.ts @@ -24,4 +24,5 @@ export const imdbIdSchema = v.pipe( v.startsWith("tt"), v.minLength(3), v.maxLength(50), + v.transform((input): `tt${string}` => input as `tt${string}`), ) diff --git a/src/shims.d.ts b/src/shims.d.ts deleted file mode 100644 index 58660a956..000000000 --- a/src/shims.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -declare module "*/knexfile" { - import type { Config } from "knex" - - const config: { - development: Config - production: Config - } - - export = config -} diff --git a/src/update.test.ts b/src/update.test.ts index ae692055c..4f87670ca 100644 --- a/src/update.test.ts +++ b/src/update.test.ts @@ -1,7 +1,7 @@ import { FetchMocker, MockServer } from "mentoss" import { afterAll, afterEach, beforeEach, expect, it, vi } from "vitest" -import { knex, type Relation, Source } from "./db.ts" +import { db, type Relation, Source, type SourceValue } from "./db.ts" import { type AnimeListsSchema, formatEntry, @@ -20,12 +20,12 @@ beforeEach(() => { afterEach(async () => { mocker.clearAll() vi.resetAllMocks() - await knex.delete().from("relations") + await db.deleteFrom("relations").execute() }) afterAll(async () => { mocker.unmockGlobal() - await Promise.all([knex.destroy()]) + await db.destroy() }) it("handles bad values", async () => { @@ -43,7 +43,15 @@ it("handles bad values", async () => { await updateRelations() await expect( - knex.from("relations").select(["anidb", "imdb", "themoviedb", "thetvdb"]), + db + .selectFrom("relations") + .select([ + "relations.anidb", + "relations.imdb", + "relations.themoviedb", + "relations.thetvdb", + ]) + .execute(), ).resolves.toMatchInlineSnapshot(` [ { @@ -130,7 +138,7 @@ it("handles duplicates", async () => { expect(duplicates[goodSource], `${goodSource} has duplicates`).toStrictEqual({}) } - const findEntry = (source: Source, id: number | string) => + const findEntry = (source: SourceValue, id: number | string) => results.find((entry) => entry[source] === id) expect(findEntry(Source.AniDB, 11261)).toBeDefined() expect(findEntry(Source.AniDB, 11992)).toBeDefined() diff --git a/src/update.ts b/src/update.ts index 4304e6dfa..57bcae601 100644 --- a/src/update.ts +++ b/src/update.ts @@ -1,7 +1,7 @@ import xior, { type XiorError } from "xior" import errorRetryPlugin from "xior/plugins/error-retry" -import { knex, type Relation, Source } from "./db.ts" +import { db, type Relation, Source, type SourceValue } from "./db.ts" import { logger } from "./lib/logger.ts" import { updateBasedOnManualRules } from "./manual-rules.ts" @@ -62,11 +62,13 @@ const handleBadValues = ( // Removes duplicate source-id pairs from the list, except for thetvdb and themoviedb ids export const removeDuplicates = (entries: Relation[]): Relation[] => { - const sources = (Object.values(Source) as Source[]).filter( + const sources = (Object.values(Source) as SourceValue[]).filter( (source) => source !== Source.TheTVDB && source !== Source.TheMovieDB && source !== Source.IMDB, ) - const existing = new Map>(sources.map((name) => [name, new Set()])) + const existing = new Map>( + sources.map((name) => [name, new Set()]), + ) const goodEntries = entries.filter((entry) => { for (const source of Object.keys(entry) as (keyof typeof entry)[]) { @@ -131,15 +133,19 @@ export const updateRelations = async () => { logger.info({ remaining: goodEntries.length }, `Removed duplicates.`) logger.info("Updating database...") - await knex.transaction(async (trx) => - knex - .delete() - .from("relations") - .transacting(trx) - .then(async () => { - await knex.batchInsert("relations", goodEntries, 100).transacting(trx) - }), - ) + await db.transaction().execute(async (trx) => { + // Delete all existing relations + await trx.deleteFrom("relations").execute() + + // Insert new relations in chunks of 100 + const chunkSize = 100 + for (let i = 0; i < goodEntries.length; i += chunkSize) { + const chunk = goodEntries.slice(i, i + chunkSize) + for (const entry of chunk) { + await trx.insertInto("relations").values(entry).execute() + } + } + }) logger.info("Updated database.") logger.info("Executing manual rules...") @@ -148,6 +154,6 @@ export const updateRelations = async () => { logger.info("Done.") if (process.argv.includes("--exit")) { - await knex.destroy() + await db.destroy() } } diff --git a/src/utils.ts b/src/utils.ts index 602828436..b6b9d969b 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -150,14 +150,14 @@ export const validationHook = ( }) } -export enum CacheTimes { - HOUR = 3600, - SIX_HOURS = 21_600, - DAY = 86_400, - WEEK = 1_209_600, -} +export const CacheTimes = { + HOUR: 3600, + SIX_HOURS: 21_600, + DAY: 86_400, + WEEK: 1_209_600, +} as const -export const cacheReply = (response: Response, value: CacheTimes | number | string) => { +export const cacheReply = (response: Response, value: number | string) => { response.headers.set("Cache-Control", `public, max-age=${value.toString()}`) return response diff --git a/tsconfig.json b/tsconfig.json index 38c6e20d7..265352907 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": ["@tsconfig/node22/tsconfig.json", "@tsconfig/strictest/tsconfig.json"], + "extends": ["@tsconfig/node24/tsconfig.json", "@tsconfig/strictest/tsconfig.json"], "compilerOptions": { "noEmit": true, "sourceMap": true, diff --git a/tsdown.config.ts b/tsdown.config.ts new file mode 100644 index 000000000..26a5c5499 --- /dev/null +++ b/tsdown.config.ts @@ -0,0 +1,25 @@ +import { defineConfig } from "tsdown" + +import pkgJson from "./package.json" with { type: "json" } + +export default defineConfig({ + entry: ["src/index.ts", "src/migrations/*.ts"], + outDir: "dist", + + sourcemap: true, + minify: true, + + env: { + NODE_ENV: process.env.NODE_ENV ?? "production", + DEV: process.env.NODE_ENV === "development", + PROD: process.env.NODE_ENV === "production", + TEST: false, + HOMEPAGE: pkgJson.homepage, + }, + + shims: true, + platform: "node", + target: ["node24"], + format: ["esm"], + fixedExtension: true, +}) diff --git a/tsup.config.ts b/tsup.config.ts deleted file mode 100644 index 8d24f3242..000000000 --- a/tsup.config.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { cpSync } from "node:fs" - -import { defineConfig } from "tsup" - -import pkgJson from "./package.json" with { type: "json" } - -export default defineConfig({ - entry: ["src/index.ts"], - external: ["sqlite3"], - outDir: "dist", - - bundle: true, - sourcemap: false, - clean: true, - minify: true, - - env: { - NODE_ENV: process.env.NODE_ENV ?? "production", - DEV: (process.env.NODE_ENV === "development") as unknown as string, - PROD: (process.env.NODE_ENV === "production") as unknown as string, - TEST: false as unknown as string, - HOMEPAGE: JSON.stringify(pkgJson.homepage), - }, - - shims: true, - target: "node22", - format: ["esm"], - banner: { - js: "import {createRequire} from 'module';const require=createRequire(import.meta.url);", - }, - esbuildOptions: (options) => { - options.supported = { - // For better performance: https://github.com/evanw/esbuild/issues/951 - "object-rest-spread": false, - } - }, - esbuildPlugins: [ - { - name: "better-sqlite3-copy", - setup({ onEnd }) { - onEnd(() => { - cpSync( - "node_modules/better-sqlite3/build/Release/better_sqlite3.node", - "dist/better_sqlite3.node", - { recursive: true }, - ) - }) - }, - }, - ], -}) diff --git a/vitest.setup.ts b/vitest.setup.ts index 4197d85df..74d0f199b 100644 --- a/vitest.setup.ts +++ b/vitest.setup.ts @@ -1,7 +1,3 @@ -import Knex from "knex" +import { migrator } from "./src/db.ts" -import knexfile from "./knexfile" - -const knex = Knex(knexfile) - -await knex.migrate.latest() +await migrator.migrateToLatest()