From 1811ef267ec5344384b04359b07034f518368c36 Mon Sep 17 00:00:00 2001 From: Thomasims Date: Mon, 7 Sep 2026 12:44:18 +0200 Subject: [PATCH 1/6] chore: replace Biome with oxlint, oxfmt and Knip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adopts the shared @antelopejs/tooling-configs presets: oxlint with the vendored anti-slop rules, oxfmt for formatting and Knip for dead code. Type-aware linting needs a tsconfig tsgolint accepts, so the removed moduleResolution node10 and baseUrl options go away and the self-referential path mappings the suites use become relative. The module stays on commonjs so the emit keeps using require, which is what the AntelopeJS resolver hooks; the compiled output is byte-identical apart from the reordered imports the sorter produced. The only fixes the linter forced were import order — import(no-cycle) found no cycles in this tree, and nothing needed disabling. Knip needs the suites declared as entry points: they live under src/tests and are run from the compiled output by `ajs module test`, which the preset's src/test glob does not match. The glob covers the fixtures too, not just the *.test.ts files: the whole compiled tree ships in the package for implementing modules to run as their conformance suite, so codec_helpers.ts is reachable from outside rather than an internal module whose exports Knip can trace. No export changes: this package is a contract, so its surface is reachable only from consumers Knip cannot see. --- biome.json | 56 - knip.config.ts | 18 + oxfmt.config.ts | 7 + oxlint.config.ts | 7 + package.json | 17 +- pnpm-lock.yaml | 1909 ++++++++++++++++++++-- src/antelope.test.ts | 2 +- src/database.ts | 7 +- src/model.ts | 19 +- src/modifiers/autodate.ts | 1 + src/modifiers/common.ts | 1 + src/modifiers/encryption.ts | 5 +- src/modifiers/hash.ts | 3 +- src/modifiers/localization.ts | 3 +- src/relation.ts | 3 +- src/schema.ts | 3 +- src/table.ts | 5 +- src/tests/common.test.ts | 2 +- src/tests/database.test.ts | 5 +- src/tests/integration.test.ts | 23 +- src/tests/model.test.ts | 11 +- src/tests/modifiers/autodate.test.ts | 14 +- src/tests/modifiers/common.test.ts | 4 +- src/tests/modifiers/encryption.test.ts | 4 +- src/tests/modifiers/hash.test.ts | 4 +- src/tests/modifiers/localization.test.ts | 4 +- src/tests/relation.test.ts | 4 +- src/tests/schema.test.ts | 12 +- src/tests/table.test.ts | 11 +- tsconfig.json | 6 +- 30 files changed, 1884 insertions(+), 286 deletions(-) delete mode 100644 biome.json create mode 100644 knip.config.ts create mode 100644 oxfmt.config.ts create mode 100644 oxlint.config.ts diff --git a/biome.json b/biome.json deleted file mode 100644 index c60abdf..0000000 --- a/biome.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/2.3.2/schema.json", - "vcs": { - "enabled": true, - "clientKind": "git", - "useIgnoreFile": true - }, - "files": { - "ignoreUnknown": false, - "includes": [ - "**", - "!dist", - "!**/dist", - "!node_modules", - "!**/node_modules", - "!r2-worker", - "!.antelope", - "!nuxt-layer", - "!src/pdf", - "!output" - ] - }, - "formatter": { - "enabled": true, - "indentStyle": "space", - "indentWidth": 2 - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true, - "suspicious": { - "noExplicitAny": "off" - }, - "nursery": { - "noFloatingPromises": "error" - } - } - }, - "javascript": { - "formatter": { - "quoteStyle": "double" - }, - "parser": { - "unsafeParameterDecoratorsEnabled": true - } - }, - "assist": { - "enabled": true, - "actions": { - "source": { - "organizeImports": "on" - } - } - } -} diff --git a/knip.config.ts b/knip.config.ts new file mode 100644 index 0000000..43a9a82 --- /dev/null +++ b/knip.config.ts @@ -0,0 +1,18 @@ +import { antelopeKnipConfig } from "@antelopejs/tooling-configs/knip"; + +export default antelopeKnipConfig({ + entry: [ + // `ajs module test` runs the compiled suites out of this tree, and reads + // src/antelope.test.ts (package.json antelopeJs.test) to build the test + // project; the preset only knows the `src/test/` spelling. The whole + // compiled tree ships in the package, fixtures included, so the modules + // implementing this interface can run it as their conformance suite — that + // makes src/tests/codec_helpers.ts an outside-reachable surface of its own + // rather than an internal module Knip can trace every export of. + "src/tests/**/*.ts", + "src/antelope.test.ts", + ], + // `ajs` comes from @antelopejs/core, which CI installs globally rather than + // pulling the whole CLI into every module's dependency tree. + ignoreBinaries: ["ajs"], +}); diff --git a/oxfmt.config.ts b/oxfmt.config.ts new file mode 100644 index 0000000..bd929ba --- /dev/null +++ b/oxfmt.config.ts @@ -0,0 +1,7 @@ +import { antelopeFmtPreset } from "@antelopejs/tooling-configs/oxc/fmt"; + +export default antelopeFmtPreset({ + // Drop once tooling-configs ships the shared ignore (AntelopeJS/tooling-configs#5): + // these are Markdown templates with a .yml extension, which oxfmt cannot parse. + ignorePatterns: [".github/ISSUE_TEMPLATE/**"], +}); diff --git a/oxlint.config.ts b/oxlint.config.ts new file mode 100644 index 0000000..fbd8c24 --- /dev/null +++ b/oxlint.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from "oxlint"; +import { antelopePreset } from "@antelopejs/tooling-configs/oxc/lint"; + +export default defineConfig({ + extends: [antelopePreset()], + options: { typeAware: true }, +}); diff --git a/package.json b/package.json index 31155a6..c27e83b 100644 --- a/package.json +++ b/package.json @@ -75,12 +75,14 @@ }, "scripts": { "build": "rimraf dist && tsc", - "format": "biome format --write .", - "lint:fix": "biome check --write .", - "lint": "biome check .", + "format": "oxfmt .", + "lint:fix": "oxlint --fix", + "lint": "oxlint", "prepack": "pnpm run build", "release": "pnpm run lint && pnpm run prepack && release-it", - "test": "pnpm run build && ajs module test ." + "test": "pnpm run build && ajs module test .", + "format:check": "oxfmt --check .", + "knip": "knip" }, "dependencies": { "randomstring": "^1.3.1", @@ -90,14 +92,19 @@ "@antelopejs/interface-api": "^0.0.5", "@antelopejs/interface-core": "^0.0.5", "@antelopejs/interface-database": "^0.1.3", - "@biomejs/biome": "2.3.2", + "@antelopejs/tooling-configs": "^0.0.4", "@types/chai": "^4.3.20", "@types/mocha": "^10.0.10", "@types/node": "^22.19.15", "@types/randomstring": "^1.3.0", "@types/semver": "^7.7.1", "chai": "^4.5.0", + "eslint-plugin-perfectionist": "^5.11.0", + "knip": "^6.34.0", "mongodb-memory-server-core": "^10.4.3", + "oxfmt": "^0.66.0", + "oxlint": "1.81.0", + "oxlint-tsgolint": "^7.0.2001", "release-it": "^19.2.4", "release-it-changelogen": "^0.1.0", "rimraf": "^6.1.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6f441d5..74f80cf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,9 +24,9 @@ importers: '@antelopejs/interface-database': specifier: ^0.1.3 version: 0.1.3(@antelopejs/interface-core@0.0.5) - '@biomejs/biome': - specifier: 2.3.2 - version: 2.3.2 + '@antelopejs/tooling-configs': + specifier: ^0.0.4 + version: 0.0.4(eslint-plugin-perfectionist@5.11.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(knip@6.34.0)(oxfmt@0.66.0)(oxlint@1.81.0(oxlint-tsgolint@7.0.2001)) '@types/chai': specifier: ^4.3.20 version: 4.3.20 @@ -45,9 +45,24 @@ importers: chai: specifier: ^4.5.0 version: 4.5.0 + eslint-plugin-perfectionist: + specifier: ^5.11.0 + version: 5.11.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3) + knip: + specifier: ^6.34.0 + version: 6.34.0 mongodb-memory-server-core: specifier: ^10.4.3 version: 10.4.3(socks@2.8.7) + oxfmt: + specifier: ^0.66.0 + version: 0.66.0 + oxlint: + specifier: 1.81.0 + version: 1.81.0(oxlint-tsgolint@7.0.2001) + oxlint-tsgolint: + specifier: ^7.0.2001 + version: 7.0.2001 release-it: specifier: ^19.2.4 version: 19.2.4(@types/node@22.19.15) @@ -76,58 +91,91 @@ packages: peerDependencies: '@antelopejs/interface-core': '>=0.0.3 <1.0.0' - '@biomejs/biome@2.3.2': - resolution: {integrity: sha512-8e9tzamuDycx7fdrcJ/F/GDZ8SYukc5ud6tDicjjFqURKYFSWMl0H0iXNXZEGmcmNUmABgGuHThPykcM41INgg==} - engines: {node: '>=14.21.3'} - hasBin: true + '@antelopejs/tooling-configs@0.0.4': + resolution: {integrity: sha512-Nfv71Z9DF78mFu817SwTZnzfF/oWhjXWhAY/zhBV9ArevV3ZwJ/JhZD+3QiLf9fXIS2pXCrmCCYGclpc598psA==} + engines: {node: '>=22.18.0'} + peerDependencies: + '@nuxt/eslint-config': '>=1.2.0' + eslint-plugin-perfectionist: '>=5.0.0' + knip: '>=6.0.0' + oxfmt: ^0.66.0 + oxlint: 1.81.0 + peerDependenciesMeta: + '@nuxt/eslint-config': + optional: true + eslint-plugin-perfectionist: + optional: true + knip: + optional: true + oxfmt: + optional: true + oxlint: + optional: true - '@biomejs/cli-darwin-arm64@2.3.2': - resolution: {integrity: sha512-4LECm4kc3If0JISai4c3KWQzukoUdpxy4fRzlrPcrdMSRFksR9ZoXK7JBcPuLBmd2SoT4/d7CQS33VnZpgBjew==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [darwin] + '@cacheable/memory@2.2.0': + resolution: {integrity: sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==} - '@biomejs/cli-darwin-x64@2.3.2': - resolution: {integrity: sha512-jNMnfwHT4N3wi+ypRfMTjLGnDmKYGzxVr1EYAPBcauRcDnICFXN81wD6wxJcSUrLynoyyYCdfW6vJHS/IAoTDA==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [darwin] + '@cacheable/utils@2.5.0': + resolution: {integrity: sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==} - '@biomejs/cli-linux-arm64-musl@2.3.2': - resolution: {integrity: sha512-2Zz4usDG1GTTPQnliIeNx6eVGGP2ry5vE/v39nT73a3cKN6t5H5XxjcEoZZh62uVZvED7hXXikclvI64vZkYqw==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] + '@emnapi/core@1.11.2': + resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} - '@biomejs/cli-linux-arm64@2.3.2': - resolution: {integrity: sha512-amnqvk+gWybbQleRRq8TMe0rIv7GHss8mFJEaGuEZYWg1Tw14YKOkeo8h6pf1c+d3qR+JU4iT9KXnBKGON4klw==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} - '@biomejs/cli-linux-x64-musl@2.3.2': - resolution: {integrity: sha512-gzB19MpRdTuOuLtPpFBGrV3Lq424gHyq2lFj8wfX9tvLMLdmA/R9C7k/mqBp/spcbWuHeIEKgEs3RviOPcWGBA==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} - '@biomejs/cli-linux-x64@2.3.2': - resolution: {integrity: sha512-8BG/vRAhFz1pmuyd24FQPhNeueLqPtwvZk6yblABY2gzL2H8fLQAF/Z2OPIc+BPIVPld+8cSiKY/KFh6k81xfA==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] + '@eslint-community/eslint-utils@4.10.1': + resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@biomejs/cli-win32-arm64@2.3.2': - resolution: {integrity: sha512-lCruqQlfWjhMlOdyf5pDHOxoNm4WoyY2vZ4YN33/nuZBRstVDuqPPjS0yBkbUlLEte11FbpW+wWSlfnZfSIZvg==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [win32] + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@biomejs/cli-win32-x64@2.3.2': - resolution: {integrity: sha512-6Ee9P26DTb4D8sN9nXxgbi9Dw5vSOfH98M7UlmkjKB2vtUbrRqCbZiNfryGiwnPIpd6YUoTl7rLVD2/x1CyEHQ==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [win32] + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-helpers@0.7.0': + resolution: {integrity: sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.7.3': + resolution: {integrity: sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} '@inquirer/ansi@1.0.2': resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} @@ -263,9 +311,25 @@ packages: '@types/node': optional: true + '@keyv/bigmap@1.3.1': + resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==} + engines: {node: '>= 18'} + peerDependencies: + keyv: ^5.6.0 + + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + '@mongodb-js/saslprep@1.4.6': resolution: {integrity: sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==} + '@napi-rs/wasm-runtime@1.2.3': + resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} + peerDependencies: + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 + '@nodeutils/defaults-deep@1.1.0': resolution: {integrity: sha512-gG44cwQovaOFdSR02jR9IhVRpnDP64VN6JdjYJTfNz4J4fWn7TQnmrf22nSjRqlwlxPcW8PL/L3KbJg3tdwvpg==} @@ -321,6 +385,480 @@ packages: '@octokit/types@16.0.0': resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} + '@oxc-parser/binding-android-arm-eabi@0.147.0': + resolution: {integrity: sha512-fOtoGvIoirkvxQVw9J1WJPxz571XPgLsPf9uhRD+PJteUnvrJHMDmK9pw2yZEGGyismtRoEsp+JcXUdF/JDMDw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-parser/binding-android-arm64@0.147.0': + resolution: {integrity: sha512-emjQHOYJaomo4ykaXQ1EItunr/I94Nk01oqBmU4dSkKSTupIDx6OysVDf2e8Eytm77rb+4ZxzgElyWP7rcEX7A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-darwin-arm64@0.147.0': + resolution: {integrity: sha512-kXvBPJL7RmDPJ2mze/vXPPVQimCDtFr9OFLjf7dyhV5Dx64cgcXh9KKrA1sMWvCObvJll9CZZUO0FBlFwD0l6A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.147.0': + resolution: {integrity: sha512-mgFF8pLU6R64LbT27lSrtVRspVC/3IcZ0qyIikzmi78Y3Ik2OPnlAHHI0UEBRcC3qmNgtjaef7zkFt7/uPxIcw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-freebsd-x64@0.147.0': + resolution: {integrity: sha512-v38aiF11qufOTBcCAKL4skgQf0zJ4NEvRlivq7B5kHrlyvjCLjvNrMtNWDTz1SDUL6/xVsJRmLDxv2e+Cp4oWw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.147.0': + resolution: {integrity: sha512-AeIiBbwUaP0H1+4/qGW9l5qHecS/+XA5iMuieVcGb1T+tyc2dVGspFW13BWk/XrLsiGP/CiDJTJqAPLLCzZHkw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.147.0': + resolution: {integrity: sha512-/41MKPW4RgPY4DJco0NCF0RYX3IMZaVlRNMNzvhaxRavc7tN3Txm+qllZbh0aMRs0VHdgUlbI8TcAOiTai4TKg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.147.0': + resolution: {integrity: sha512-bmpw/RPhVXgZbtb3xBDuwW5s8+LvZYdqcDSX/sP2ltL77aTio3DP/B5ZTwwgoJ6Mr9vJs4RrmgEKW9XkLNUU1g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-arm64-musl@0.147.0': + resolution: {integrity: sha512-gd7VX/FDVOw6mjQcu45iIcp4QkgybgJwh3a0OFG2NxmPCj628mQWD96QGu1kK8+mZF9qK4b/gIEyC63vQoB7+Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-ppc64-gnu@0.147.0': + resolution: {integrity: sha512-HnAzcfki7dSUNHf510Q2NmbJlz8Ys7rn8l9l588Pkx0tYe1BHLZnmELIgqizJ4WPhHGSwN8Ce+B/menVxS3odA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxc-parser/binding-linux-riscv64-gnu@0.147.0': + resolution: {integrity: sha512-qlkOL6wT44U+fT5s/+sR6Shx0OdwvQF83JyIPZUxG/ovqZF5/7atOtjH+JPZ5/7ATQLbFBBSmghcy/+2NVB/ew==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-parser/binding-linux-riscv64-musl@0.147.0': + resolution: {integrity: sha512-DlefD7L7sMXs/3hIBH23Egk0phj8kG0SA81dVGOQ3S1ekjOlmTLH2E+F2Thwfh1slKx6aH+lNc5fQYAw0GU7/g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-parser/binding-linux-s390x-gnu@0.147.0': + resolution: {integrity: sha512-Xqpagk/031IvZ4svrk2FF01YEqM/iN3MJV3SVZadKg/CsGlDCGoREqKHXYnoV5+8SfGe/m6RM1szXFLusTu/Uw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxc-parser/binding-linux-x64-gnu@0.147.0': + resolution: {integrity: sha512-QioQOeUbI4ATUr0S2z88uA3Cds2R3Mm5Ge7U8XNYtlTb2GJF3rWlcj70z0AJhhOlbdm0YgVjqPBldUNbFylDIg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-linux-x64-musl@0.147.0': + resolution: {integrity: sha512-NXy1tv/OdC+pPTwf9RiCZWPK53V/Xq/2cjSnjOSyKopajdaDqMIkgtDY+jXZemp2e8px5FeWfY2L2LwhKZQovg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-openharmony-arm64@0.147.0': + resolution: {integrity: sha512-GpGWZ6oKz4bjCWW9Mz5pCaGPyk2Aaze6zEoaslIQqpSLtpx5pXj/ap5gUNb5Jn2LIbqWyjkGLX9yv3NMuNcBVQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-win32-arm64-msvc@0.147.0': + resolution: {integrity: sha512-a8mlt7CC8z7LUdCfaxhff4kCd+vSjE+NEFL0cxA8ukfuSnvAto/pWTjytW4BuVLnQGcCVdHJwcRKOfs++H+tjw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.147.0': + resolution: {integrity: sha512-M5ViVDBcFLnl2632AuuWuP35zEL5oikK1jTx8r3+902VEDeSNHxFZAB6RZyfZ7MU6Oi5QTOG8MmMkIeHsudSaw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.147.0': + resolution: {integrity: sha512-DUaE13OwnUSlHpLZNcC/nuT10ivlWqc5EZgsfgXuAmWYw0r3nDxGeLD1zlGwYwIgVk1/ZMAxoXpV+05stvbHaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.147.0': + resolution: {integrity: sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg==} + + '@oxc-resolver/binding-android-arm-eabi@11.24.2': + resolution: {integrity: sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==} + cpu: [arm] + os: [android] + + '@oxc-resolver/binding-android-arm64@11.24.2': + resolution: {integrity: sha512-cl4icWaZFnLdg8m6qtnh5rBMuGbxc/ptStFHLeCNwr+2cZjkjNwQu/jYRS0CHlnPecOJMpuS5M6/BH+0J/YkEg==} + cpu: [arm64] + os: [android] + + '@oxc-resolver/binding-darwin-arm64@11.24.2': + resolution: {integrity: sha512-At29QEMF6HajbQvgY8K6OXnHD1x9rad74xBEfmCB6ZqCGsdq75aK7tOYcTbOanMy8qdIBrfL3SMr3p/lfSlb9w==} + cpu: [arm64] + os: [darwin] + + '@oxc-resolver/binding-darwin-x64@11.24.2': + resolution: {integrity: sha512-A5Kqr1EUj4oIL5CF4WRssq/o5P0Y11cwoFouMRmQ7YnC/A8V93nv1nb7aSU8HwcgmXropjLNkVTl4MN87cu28Q==} + cpu: [x64] + os: [darwin] + + '@oxc-resolver/binding-freebsd-x64@11.24.2': + resolution: {integrity: sha512-R5xkRBRRz7ceH/P5Jrc6G7FmdUdgpLYyESFAUDVTNQ9K0sGPxcp4ljiwEwEqsvNcQ4sYbMRrWcHHBCu7ksAJVw==} + cpu: [x64] + os: [freebsd] + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': + resolution: {integrity: sha512-k/RuYL4L/R58IBn3wT5ma3Wh4k62bp1eYCFRWCmMsasUOqL+H6sW0VGFadEzKWXFFlz+2uIMoeMk9ySSZJHgbg==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': + resolution: {integrity: sha512-bnHAak3ujYfH5pKk4NieFNbvYvernfoQDgwLddbZ3OtMYrem87/qjlA+u+aKG0oZcqSLGCful/6/CEA+aeAgaA==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': + resolution: {integrity: sha512-vDT3KHgzYp47gmtNOqL2VNhCyl5Zv643eyxm//A68J8DeUGXrvD1pZFiaT4jSfe+RInfnn1R2yVHye4enx6RnA==} + cpu: [arm64] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': + resolution: {integrity: sha512-+kMlQvbzfyEYtu5FcjE4p+ttBLpKW4d/AsAsuE69BxV6V4twZJeIQZFfD8gh/wqglY0MkPSezWXQH0jBV13MUw==} + cpu: [arm64] + os: [linux] + + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': + resolution: {integrity: sha512-shjfMhmZ3gq9fv/w7bi3PnZlgOPG+2QAOFf0BJF0EgBSIGZ6PMLN2zbGEblTUYB/NKVDRyYhE2ff3dJ1QqNPkA==} + cpu: [ppc64] + os: [linux] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': + resolution: {integrity: sha512-zGelwFR5oRo+b69k8Lrzun86DyUHzfKN6cnjbR9l7Z7NIRznOE/2ZvPa1IUKqAL2PzAXOdwkfVqNvO1H2RlpAw==} + cpu: [riscv64] + os: [linux] + + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': + resolution: {integrity: sha512-qxZ1SWCXJY0eyhAlP6Lmo9F2Nrtx7EkYj9oCgL8apDPCwXwCEDA2U697bbT81JIc2IrVjxO4KX6WU2N+oN9Z4w==} + cpu: [riscv64] + os: [linux] + + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': + resolution: {integrity: sha512-sGCecF3cx2DFlH4t/z7ApnOnXqN48p5p5mlHDEnHTAukQa2P+qMVE4CwyWE9W+q/m3QJ7kKfGrIjax31f44oFQ==} + cpu: [s390x] + os: [linux] + + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': + resolution: {integrity: sha512-k/VlMMcSzMlahb3/fENM4rTlsJ0s3fFROA0KXPBmKggqmTSaE383sl8F3KCOXPLmVsYfW6hCitMhXCEtNeZxxg==} + cpu: [x64] + os: [linux] + + '@oxc-resolver/binding-linux-x64-musl@11.24.2': + resolution: {integrity: sha512-8hbnZyNi97b/8wapYaIF9+t9GmZKBW2vunaOc3h9HGJptH7b7XpvZqOTBSm/MpTjr7H497BlgOaSfLUdhmy2bw==} + cpu: [x64] + os: [linux] + + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + resolution: {integrity: sha512-MvyGik3a6pVgZ0t/kWlbmFxFLmXQJwgLsY2eYFHLpy0wGwRbfzeIGgDwQ3kXqE30z+kSXennRkCrT7TUvkptNg==} + cpu: [arm64] + os: [openharmony] + + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + resolution: {integrity: sha512-vHcssMPwO08RTvj/c0iOBz90attxyG3wQJ0dTcyEQK43LRpcdLWZlV5feBhv6Isn6ahbQIzHbCgfa81+RiML0Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': + resolution: {integrity: sha512-uokJqro2iBqkFvJdKQLP7d8/BUmFwESQFVmIJUQKj1Xn1a/LysJoe1vmeECLF5b3jsV8CAL5sEMJXX6SdK9Nhg==} + cpu: [arm64] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + resolution: {integrity: sha512-UqGPmo56KDfLlfXFAFIrNflHT8tFxWGEivWg3Zeyp4Uy2NlKN1FGPr6/BxcLGG3+kZ6Wp14g5Uj+n71boqZfiw==} + cpu: [x64] + os: [win32] + + '@oxfmt/binding-android-arm-eabi@0.66.0': + resolution: {integrity: sha512-2Me9eoptv6ERdEuI2P8AOlYdHHraXebJaM6SC0kc2Dfb+mLrep2db+fedBPKaYn673h/vBgvP4tkOdAbaudX6w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxfmt/binding-android-arm64@0.66.0': + resolution: {integrity: sha512-u7O+bSSF0HGsDKkQQxBqvLGVepu93RA+JKu+ONqvfh4sCnCEbj31wZj4iG5gk3XfRwrmYj0/8catkO2LcblQKQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxfmt/binding-darwin-arm64@0.66.0': + resolution: {integrity: sha512-/ikyMIVjX/sdo7KtjxoEsSUosfPzveVhT9RWMx9yGqFDKFJ89JAEKuEeLBmurDjrkb4w8tOnAdSO3SBaplY3bw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxfmt/binding-darwin-x64@0.66.0': + resolution: {integrity: sha512-q5xUsKeFqawa9NXa6ZGXWimFV19m8MogKPdTaSVDAAk2EQKBmBZRDeluwcl1p8ty/OFc9s9888OKEh3xfPVH0g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxfmt/binding-freebsd-x64@0.66.0': + resolution: {integrity: sha512-CR+x4VzMY0pRXLK/xFQ/RzsSFkP5t2Z2mef0QY6OP/rTRcMUoMLCOM62/3Fp/t0K+UDoBKxvMyeb6D0zPMjleA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxfmt/binding-linux-arm-gnueabihf@0.66.0': + resolution: {integrity: sha512-ZEYmO/LbH9tTQCADILHGZE4GeOXOAj2VzedHkASNwjmwlwtutJCLpCJbIs37wRGTFgWRoEcD72jpMX+IBJUGjQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm-musleabihf@0.66.0': + resolution: {integrity: sha512-hNtR9/oU0CeTkq7JnRkmBQwqe17v2ZaAMLC4VcN7IIOWeRyWDk0knSPWS9iiLmtbZ2RRBBtsG01jQgkZmKCJeQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm64-gnu@0.66.0': + resolution: {integrity: sha512-uwOVQ8i6I1LT/+eDzfsgrrcZp8Fn6NPVUPn8fF5gdFGekFf0PddF+LEuwsD0/pbNUcKZhDj2rQ5UpITh9gF4iQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxfmt/binding-linux-arm64-musl@0.66.0': + resolution: {integrity: sha512-tTkF2Dmx4nGAjmBlZb+UtTGqR/EK4ZrW9qBfzte07a9XWqzoGGKzpFFlyNDhQe+Uwql94+ReCTeNbhOXscw1Dg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxfmt/binding-linux-ppc64-gnu@0.66.0': + resolution: {integrity: sha512-F3cKHUav4yXOHn6GFnwpBhSYsJOYKKf9eqO/9jlEuqPxNw9zb98E9ZFct79gcg8pibUGkbveEu9WDlmXJpDzKw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxfmt/binding-linux-riscv64-gnu@0.66.0': + resolution: {integrity: sha512-K5fDaNZfDyQMYA/3qL21bqyN0X9T15LLwwbFPt2aHc94+ZG7bh0vZEsy2y7NlRnjjHFSwN+Hzg6ldJtbOriH4Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxfmt/binding-linux-riscv64-musl@0.66.0': + resolution: {integrity: sha512-44Yc+I+qOmTElRcEhm5hUKIUJEQIOugymz4ua4tB0Wox7tGAfIbjzmXz/HDAtw1Ij6gmBwZlzh4hc9679RhWeA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxfmt/binding-linux-s390x-gnu@0.66.0': + resolution: {integrity: sha512-1e29Eg9hEj2kRBB19M0seIehPbbXHCk35GvImjDvb79rjjYjXCRmtbUNHJcgoktZAMIzXrTbxDBKmTc1V4bg3A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxfmt/binding-linux-x64-gnu@0.66.0': + resolution: {integrity: sha512-vODY1UQo10gngn0+D4xHKU84F1Twm1LqrzV4SqPXvmQKSd87paehvZ6jqA5wKs6XQrlWul9clYMDVHcoW9CPMA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxfmt/binding-linux-x64-musl@0.66.0': + resolution: {integrity: sha512-YDzXx2JsT4+HL4MdkVrYjO55NS5lUKNm8rLC4ZPou8+seu0v0jhecSh+ufoO6+xEa8gccEezMlI2WHJi4ApUgw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxfmt/binding-openharmony-arm64@0.66.0': + resolution: {integrity: sha512-mJjUYd8lj0+j4JkYyEM+5qKBf1Rnrpgjn/SVYKJhicVDqLz566ooa7Fs8zflPqt+dnZDV7X054rVIQX6ZcQNlQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxfmt/binding-win32-arm64-msvc@0.66.0': + resolution: {integrity: sha512-soV+0vESv7e5ntCHWC61x4gg8OSak6IHHnWsZmHrJFlvMj2AK+kmldErCNkVkrvc1Ts2/++rJXn+IuAb2WMXhw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxfmt/binding-win32-ia32-msvc@0.66.0': + resolution: {integrity: sha512-YCPi23uRIEYuIKTZohAkKbPFpujQ5QBuUM5iDv+UqbCmTPAkaFsxjsSuB8xlBpRT0G7eP/4HMF+cPDSqHtOD9A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxfmt/binding-win32-x64-msvc@0.66.0': + resolution: {integrity: sha512-bwTQcv/JVRPkOqQtMF0X7vpvpncDQiBcXHxZ9S2hR12Hlo8bvBdUR5x5XnxzDZ3kM0qoZw1rv7KaD66Ly+pFWA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxlint-tsgolint/darwin-arm64@7.0.2001': + resolution: {integrity: sha512-CUJEdbSZ54+Xy9OXqOhWLTKZKV0BBiV7C2i/ygyVmXtkUNXx5YCzN8DpSSshTAKktoL7S+tnQ/ftFG/i7X896w==} + cpu: [arm64] + os: [darwin] + + '@oxlint-tsgolint/darwin-x64@7.0.2001': + resolution: {integrity: sha512-pXfBb5BqONCcgrXQNUZWXgiYmRSWJzd97S8i41VVOh6ut0tyo+cJ5FKFpczDHxiVNfj/3e7c9B4MtztNdpIVCw==} + cpu: [x64] + os: [darwin] + + '@oxlint-tsgolint/linux-arm64@7.0.2001': + resolution: {integrity: sha512-roP7zujb/QDPzDwEKsFFpzNHHy91/Y7oX9vQXk78ekyZtcQj1QXDIMH33gjDdHBfRl4K9pZ36xhRgrP4Zr+R8A==} + cpu: [arm64] + os: [linux] + + '@oxlint-tsgolint/linux-x64@7.0.2001': + resolution: {integrity: sha512-UDezNqdECVmngu2TPnjaS1YoAmcTaBoI5lV9vk3VahBxoi+I5r9k3iJTT7qZoYWOXTD/7T7bNcwRgrocR6BscQ==} + cpu: [x64] + os: [linux] + + '@oxlint-tsgolint/win32-arm64@7.0.2001': + resolution: {integrity: sha512-uJZhqB6pdXLuN+AD1F5082byyQti/NPmJA77GtcFlmT2HzRelqbNls3SaIqxpjdFgvSBF9g0yOKGBkGFg7kX8Q==} + cpu: [arm64] + os: [win32] + + '@oxlint-tsgolint/win32-x64@7.0.2001': + resolution: {integrity: sha512-FkDRm8hx9OwzGQqyWG1tO5QrTLRApff9DzSgpz9QZau37BR8d1VYKOxMLGf6shPZntJFoTwIIJYT68VndYDCog==} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.81.0': + resolution: {integrity: sha512-IcCRsXiedJoJopY6mpZUBEeVFsUrutmrG7dZ87zMuKJlhg70Ora9bBl1WcCxZQtyI10YpnVdEso5oCg7YcfSHw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.81.0': + resolution: {integrity: sha512-GRrIPyTGVhx3L3h+0T5xT2A0jFAcdPv4+IfuXpGDLIdl6XeYhgg/zw72A5ILZoUgRqZuM8F1y+V/gfDriXSxzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.81.0': + resolution: {integrity: sha512-qNQ9tXRgLuKbqSV1S2h9h4KPHjbovO7RRR2/enUOtHzTkFZ7B9X5zqqHJua8dRyc7dBy7Aoyq5pqTSLFVcAzGQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.81.0': + resolution: {integrity: sha512-q0QTm32jWga2Gv4j7IaVZN0jYMi9UV73sWVgFtDA4iIfqwMCLLZ3ve+9KwfYtsaKZSgQhmPaogeZWqDZpcY1Pw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.81.0': + resolution: {integrity: sha512-/+8wVWDXEC7wHVAhOc59Fw/SkMc1arLkFD8iQCaSsmzenK1X4doFqquL9H1wrtGUzaiycVqkf/sSpcILK6W1UA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.81.0': + resolution: {integrity: sha512-4xt422FEgioRq9hAL4Tq7fujGUWnc8z1BJ+Oi8RN8vB8axaP+sdK6a2xdlcQCCYnJg9QMuMFS0AucuIFx/EacA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.81.0': + resolution: {integrity: sha512-u3vna8KdGplH4DRCW9K54D68fcMo7IxVrkCJWwXnIhwtBdnDnYrmzOUA/XjmBlPpcLsgw9Z5BNdY4za9+Dj+MQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.81.0': + resolution: {integrity: sha512-3j9k+gsYsE7nv71GWotXsqsa2l9/aJenD7dVHNt/CBvsb0SgRjSMnHFeP59IXUAl1wvVFhqGl2wJNMwWU3UBlA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxlint/binding-linux-arm64-musl@1.81.0': + resolution: {integrity: sha512-k5iAp3dNxW0/uDCBY+WSm8jKB2szu7SkEQZdgRRpDXvuDd69vvDcqhB3A/pWCfCwXyenjNjFn9Td1fVoyAc+Yg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxlint/binding-linux-ppc64-gnu@1.81.0': + resolution: {integrity: sha512-TFqLja3uYmVSte6nof9GWrex9Z8WgdZrNiLC6Te5rXGDqXB2y4j/26iFhwosXiAFqDhE9JJVuuCkDKLwptTn1g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxlint/binding-linux-riscv64-gnu@1.81.0': + resolution: {integrity: sha512-UEcySvGS0NOVo7h7n7CYyJL9+6gFAh7Zc/ToDXVScFvzHSTIxtzkMVU30rmQ6+nQ1LF+UdiRDdJajpDu+OylLg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxlint/binding-linux-riscv64-musl@1.81.0': + resolution: {integrity: sha512-H+diDbhD00+wI1IRP8Kz88x/lat+DgtoBJzoTthS16xkTJGNaEkfb8gzmd1rzc/2uDQQMl7GNl+JFUacVeWxIA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxlint/binding-linux-s390x-gnu@1.81.0': + resolution: {integrity: sha512-8znJ/5TekjOKg1j1Acho4PJMdiAHLtlcXuWEiipOhAMV6rQcXdmDdXCbheyDczN6TjBwiNfjcP81k4AthrKRzw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxlint/binding-linux-x64-gnu@1.81.0': + resolution: {integrity: sha512-Q2Wj70yFsvn5QjlmifFzbj4H+kJy53bwqc41o1fzoM7MpLV1NIbhg/LpWXRfC6KOkSAdUx1Wd8VJsdPmhp/HRA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxlint/binding-linux-x64-musl@1.81.0': + resolution: {integrity: sha512-cPInHp/ddEe5qkyK2IiyQ8Q3Mp2oLLEhhsGgTK2oZx4L6+llGam1H1yBvJZ7qHfOXj8N3hxBS8sj4tO+gtFlIg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxlint/binding-openharmony-arm64@1.81.0': + resolution: {integrity: sha512-0CQxSX4ajqm07AHBf5U33qQzXKdd7wtq/oTL/7vpY6RNNuxrRi8W4bqUV1Jyu/vj+9KmxQyDhxfeVX1nQL6kfg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.81.0': + resolution: {integrity: sha512-l0hbeISm9673hVrrQU8j/p2M7YH9Ouoj7p7E/QM55NTrKVLP+P3PF8hLu+OY+x0VtGRW+ggiQKZqmdYps9H+TA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.81.0': + resolution: {integrity: sha512-ksqPP5jbFXcYreEQ7zdJh06rJQBymCTyGRCdaXjfcf2aG4f8KxUWY5wcgYHmaTK+FJ4bPG5sUAdOX+6trnH1JA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.81.0': + resolution: {integrity: sha512-IZuUCwGw9emG5JtCp+fYGB+Z4OWEoeEcM8R5BA1pYw63/ieYFVdcU2ylxTpHbVHSenZnsYE+ZZ20uHAJszQ4cA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxlint/plugins@1.81.0': + resolution: {integrity: sha512-HhD8kd3r6XpelZkhxhRty/po8V6yK1VV63Eq4kSsOS2IoHUywG3DV2EX+z/ZHw46aLI74Y6aA604NRiAqLKW9w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@phun-ky/typeof@2.0.3': resolution: {integrity: sha512-oeQJs1aa8Ghke8JIK9yuq/+KjMiaYeDZ38jx7MhkXncXlUKjqQ3wEm2X3qCKyjo+ZZofZj+WsEEiqkTtRuE2xQ==} engines: {node: ^20.9.0 || >=22.0.0, npm: '>=10.8.2'} @@ -328,9 +866,21 @@ packages: '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@types/chai@4.3.20': resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} @@ -353,6 +903,48 @@ packages: '@types/whatwg-url@11.0.5': resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} + '@typescript-eslint/project-service@8.69.0': + resolution: {integrity: sha512-yi4obFrHMmnsesWehHbkg9zMA7Jt8cXT+mKM08G999pH1yT6nqgsHx7MYm0uY1wAj8CqiBXYRJ7WAT0QdQHQXg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/scope-manager@8.69.0': + resolution: {integrity: sha512-ewfspqWvSxKSOaplqAUNbaSFO0eB6w1EtQ+esfYFRm3614Ty4uNtExkcbgd6nWsXphbqKyf9ZYdbZdv2xEoWEQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.69.0': + resolution: {integrity: sha512-xNqK7YTDZsLniQMV/4rpFR8Z5JlqeRvVjuG1YgF/mdPVH84HSD19L8CczMA0qg2RfwEV231GHH3VnToJDo4MfQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.69.0': + resolution: {integrity: sha512-K3VrubUPhlo9VDBS6QdI8YB5j7ClpqLRdefcz6PFrhnwicehBweqQ9Evhl4l+FYz0HdDmMqIiSX0aldGRYtDCA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.69.0': + resolution: {integrity: sha512-AdFkgqck3Vudb/kWnxlyafU/4aBhHrbQ9locP2N4psXTy5mOBg0SHJumnLvx7r6g1gV4DKvUFwV2nJZBoqOD8w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.69.0': + resolution: {integrity: sha512-tUbx60BBqQa31kXF5MCsOOLL5E/WzUuxIn7YpAvq+eaUlqvk8/NXnXMBNAdLCr0icjkzem7iUA5QqWHe/hJ1aw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.69.0': + resolution: {integrity: sha512-+rmdgPA+EXkNgKYvHvFfhrs35utXbwaC5PGpDquSXcoXQDKUA5UjV0LmTucG/4JXkM31BTu4TilHtrN8IVBe8w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn@8.16.0: resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} @@ -362,6 +954,9 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -459,6 +1054,10 @@ packages: resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} engines: {node: 18 || 20 || >=22} + brace-expansion@5.0.9: + resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} + engines: {node: 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -490,6 +1089,9 @@ packages: magicast: optional: true + cacheable@2.5.0: + resolution: {integrity: sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==} + camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -593,6 +1195,9 @@ packages: resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} engines: {node: '>=6'} + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + default-browser-id@5.0.1: resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} engines: {node: '>=18'} @@ -629,16 +1234,60 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} hasBin: true + eslint-plugin-perfectionist@5.11.0: + resolution: {integrity: sha512-kZV1otBcu4xT5R1p+0x1N1wRv4pS+OIbxrA47n5a1fTnN3MWbexOx5eQgbQhGyCNbpvF/rqrbnpkGjumHF+Y0Q==} + engines: {node: ^20.0.0 || >=22.0.0} + peerDependencies: + eslint: ^8.45.0 || ^9.0.0 || ^10.0.0 + + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.10.0: + resolution: {integrity: sha512-NPXn6r5zl4uET1DAVPaOwzX3rut4c0wcmw3dWJAfOsTM5+TogXo0DDjz8pwm/hL8cyVNpHqeK4JpN0NjnyFFNw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -664,9 +1313,21 @@ packages: fast-content-type-parse@3.0.0: resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==} + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fd-package-json@2.0.0: + resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} + fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -676,6 +1337,9 @@ packages: picomatch: optional: true + file-entry-cache@11.1.5: + resolution: {integrity: sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -688,6 +1352,16 @@ packages: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@6.1.23: + resolution: {integrity: sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==} + + flatted@3.4.4: + resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} + follow-redirects@1.15.11: resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} engines: {node: '>=4.0'} @@ -697,6 +1371,11 @@ packages: debug: optional: true + formatly@0.7.0: + resolution: {integrity: sha512-7CXJtIIA0zy/u12StsYk25qVKxvdLA2ep2sTNxK3ov0mGNIIDqIvAXDSgTnAfDJFsPfWjuz0WjfYSdpvnLA5Tg==} + engines: {node: '>=18.3.0'} + hasBin: true + fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -717,6 +1396,9 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} + get-tsconfig@4.14.3: + resolution: {integrity: sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==} + get-uri@6.0.5: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} engines: {node: '>= 14'} @@ -739,10 +1421,24 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + glob@13.0.6: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} + hashery@1.5.1: + resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==} + engines: {node: '>=20'} + + hookified@1.15.1: + resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==} + + hookified@2.2.0: + resolution: {integrity: sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -759,6 +1455,14 @@ packages: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + inquirer@12.11.1: resolution: {integrity: sha512-9VF7mrY+3OmsAfjH3yKz/pLbJ5z22E23hENKw3/LNSaA/sAt3v49bDRY+Ygct1xwuKT+U+cBfTzjCPySna69Qw==} engines: {node: '>=18'} @@ -836,13 +1540,39 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-with-bigint@3.5.8: resolution: {integrity: sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==} + keyv@5.6.0: + resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} + + knip@6.34.0: + resolution: {integrity: sha512-bbHIrnGspYwe4EBPjjx+lvkUor0F2qfKQc5BPzPI4SOAImYA+k2ueVpIcF7d/W1LEVT7XoJUPt6zELeGZhXBgA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + lodash.capitalize@4.2.1: resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} @@ -913,6 +1643,10 @@ packages: resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} engines: {node: 18 || 20 || >=22} + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} + engines: {node: 18 || 20 || >=22} + minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} @@ -982,6 +1716,13 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + natural-orderby@5.0.0: + resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==} + engines: {node: '>=18'} + netmask@2.0.2: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} @@ -1036,6 +1777,10 @@ packages: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + ora@9.0.0: resolution: {integrity: sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==} engines: {node: '>=20'} @@ -1044,14 +1789,59 @@ packages: resolution: {integrity: sha512-zBd1G8HkewNd2A8oQ8c6BN/f/c9EId7rSUueOLGu28govmUctXmM+3765GwsByv9nYUdrLqHphXlYIc86saYsg==} engines: {node: '>=18'} + oxc-parser@0.147.0: + resolution: {integrity: sha512-5xaug6t7GfV3BO5Iv+xHW1rmQkDEQ3BEu3L8g3InsvWO5i8CYGc4tCZ2X985QcwWNycFJam+aOns6Nr2XAThTA==} + engines: {node: ^20.19.0 || >=22.12.0} + + oxc-resolver@11.24.2: + resolution: {integrity: sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==} + + oxfmt@0.66.0: + resolution: {integrity: sha512-FfvqR8RFtV6JJpRrpkfqyVCQ7HDvZ/VriWFx7veftCgL1B5ZO9qNr+1rvPieycMQnNfVG0PWyJQiy7p0hq1I5w==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + svelte: ^5.0.0 + vite-plus: '*' + peerDependenciesMeta: + svelte: + optional: true + vite-plus: + optional: true + + oxlint-tsgolint@7.0.2001: + resolution: {integrity: sha512-KjK/XLcXr1DSyonKhsuFqJRiuKqcyG9j3LJ8nkOsrLzGvodBPqzHOKauy10asLMDI0sUpvb+1sxlzff3udZvfg==} + hasBin: true + + oxlint@1.81.0: + resolution: {integrity: sha512-HyrJYqeoOCL0iqaLEzGewGT48ZX99P3hxYh8udAF9RGGIghSamkXE4ClUyBpEDNqasamThgmlPbuMOe7SAZmHg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=7.0.2001' + vite-plus: '*' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + vite-plus: + optional: true + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -1067,6 +1857,9 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-manager-detector@1.8.0: + resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==} + parse-path@7.1.0: resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==} @@ -1116,6 +1909,10 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -1126,6 +1923,10 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + protocols@2.0.2: resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} @@ -1140,6 +1941,10 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + qified@0.10.1: + resolution: {integrity: sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==} + engines: {node: '>=20'} + randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -1174,6 +1979,9 @@ packages: engines: {node: ^20.12.0 || >=22.0.0} hasBin: true + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -1237,6 +2045,10 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + smol-toml@1.8.0: + resolution: {integrity: sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==} + engines: {node: '>= 18'} + socks-proxy-agent@8.0.5: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} @@ -1282,6 +2094,10 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-json-comments@5.0.3: + resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} + engines: {node: '>=14.16'} + tar-stream@3.1.8: resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} @@ -1307,6 +2123,14 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + tinypool@2.1.0: + resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + engines: {node: ^20.0.0 || >=22.0.0} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1315,9 +2139,19 @@ packages: resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + type-detect@4.1.0: resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} engines: {node: '>=4'} @@ -1334,6 +2168,10 @@ packages: ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + unbash@4.0.11: + resolution: {integrity: sha512-FoSOKV7NEofQSkAefMVHam4ZPKYMxjAydxiV72UFEDNV/YofxjGfiZ2A9pZjdL/lRJzTjcu4PABo1JYJX8N5iQ==} + engines: {node: '>=14'} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -1344,10 +2182,17 @@ packages: universal-user-agent@7.0.3: resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-join@5.0.0: resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + walk-up-path@4.0.0: + resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} + engines: {node: 20 || >=22} + webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -1368,6 +2213,10 @@ packages: resolution: {integrity: sha512-1lOb3qdzw6OFmOzoY0nauhLG72TpWtb5qgYPiSh/62rjc1XidBSDio2qw0pwHh17VINF217ebIkZJdFLZFn9SA==} engines: {node: '>=18'} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -1384,6 +2233,11 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -1392,6 +2246,10 @@ packages: resolution: {integrity: sha512-k1isifdbpNSFEHFJ1ZY4YDewv0IH9FR61lDetaRMD3j2ae3bIXGV+7c+LHCqtQGofSd8PIyV4X6+dHMAnSr60A==} engines: {node: '>=12'} + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + yoctocolors-cjs@2.1.3: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} @@ -1400,6 +2258,9 @@ packages: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} + zod@4.5.4: + resolution: {integrity: sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==} + snapshots: '@antelopejs/interface-api@0.0.5(@antelopejs/interface-core@0.0.5)': @@ -1414,40 +2275,88 @@ snapshots: dependencies: '@antelopejs/interface-core': 0.0.5 - '@biomejs/biome@2.3.2': + '@antelopejs/tooling-configs@0.0.4(eslint-plugin-perfectionist@5.11.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(knip@6.34.0)(oxfmt@0.66.0)(oxlint@1.81.0(oxlint-tsgolint@7.0.2001))': + dependencies: + '@oxlint/plugins': 1.81.0 optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.3.2 - '@biomejs/cli-darwin-x64': 2.3.2 - '@biomejs/cli-linux-arm64': 2.3.2 - '@biomejs/cli-linux-arm64-musl': 2.3.2 - '@biomejs/cli-linux-x64': 2.3.2 - '@biomejs/cli-linux-x64-musl': 2.3.2 - '@biomejs/cli-win32-arm64': 2.3.2 - '@biomejs/cli-win32-x64': 2.3.2 + eslint-plugin-perfectionist: 5.11.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3) + knip: 6.34.0 + oxfmt: 0.66.0 + oxlint: 1.81.0(oxlint-tsgolint@7.0.2001) - '@biomejs/cli-darwin-arm64@2.3.2': - optional: true + '@cacheable/memory@2.2.0': + dependencies: + '@cacheable/utils': 2.5.0 + '@keyv/bigmap': 1.3.1(keyv@5.6.0) + hookified: 1.15.1 + keyv: 5.6.0 - '@biomejs/cli-darwin-x64@2.3.2': - optional: true + '@cacheable/utils@2.5.0': + dependencies: + hashery: 1.5.1 + keyv: 5.6.0 - '@biomejs/cli-linux-arm64-musl@2.3.2': + '@emnapi/core@1.11.2': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 optional: true - '@biomejs/cli-linux-arm64@2.3.2': + '@emnapi/runtime@1.11.2': + dependencies: + tslib: 2.8.1 optional: true - '@biomejs/cli-linux-x64-musl@2.3.2': + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 optional: true - '@biomejs/cli-linux-x64@2.3.2': - optional: true + '@eslint-community/eslint-utils@4.10.1(eslint@10.10.0(jiti@2.7.0))': + dependencies: + eslint: 10.10.0(jiti@2.7.0) + eslint-visitor-keys: 3.4.3 - '@biomejs/cli-win32-arm64@2.3.2': - optional: true + '@eslint-community/regexpp@4.12.2': {} - '@biomejs/cli-win32-x64@2.3.2': - optional: true + '@eslint/config-array@0.23.5': + dependencies: + '@eslint/object-schema': 3.0.5 + debug: 4.4.3 + minimatch: 10.2.6 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.7.0': + dependencies: + '@eslint/core': 1.2.1 + + '@eslint/core@1.2.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/object-schema@3.0.5': {} + + '@eslint/plugin-kit@0.7.3': + dependencies: + '@eslint/core': 1.2.1 + levn: 0.4.1 + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} '@inquirer/ansi@1.0.2': {} @@ -1543,114 +2452,394 @@ snapshots: optionalDependencies: '@types/node': 22.19.15 - '@inquirer/rawlist@4.1.11(@types/node@22.19.15)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.15) - '@inquirer/type': 3.0.10(@types/node@22.19.15) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.19.15 + '@inquirer/rawlist@4.1.11(@types/node@22.19.15)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.19.15) + '@inquirer/type': 3.0.10(@types/node@22.19.15) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.19.15 + + '@inquirer/search@3.2.2(@types/node@22.19.15)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.19.15) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.19.15) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.19.15 + + '@inquirer/select@4.4.2(@types/node@22.19.15)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.19.15) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.19.15) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.19.15 + + '@inquirer/type@3.0.10(@types/node@22.19.15)': + optionalDependencies: + '@types/node': 22.19.15 + + '@keyv/bigmap@1.3.1(keyv@5.6.0)': + dependencies: + hashery: 1.5.1 + hookified: 1.15.1 + keyv: 5.6.0 + + '@keyv/serialize@1.1.1': {} + + '@mongodb-js/saslprep@1.4.6': + dependencies: + sparse-bitfield: 3.0.3 + + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@nodeutils/defaults-deep@1.1.0': + dependencies: + lodash: 4.17.23 + + '@octokit/auth-token@6.0.0': {} + + '@octokit/core@7.0.6': + dependencies: + '@octokit/auth-token': 6.0.0 + '@octokit/graphql': 9.0.3 + '@octokit/request': 10.0.8 + '@octokit/request-error': 7.1.0 + '@octokit/types': 16.0.0 + before-after-hook: 4.0.0 + universal-user-agent: 7.0.3 + + '@octokit/endpoint@11.0.3': + dependencies: + '@octokit/types': 16.0.0 + universal-user-agent: 7.0.3 + + '@octokit/graphql@9.0.3': + dependencies: + '@octokit/request': 10.0.8 + '@octokit/types': 16.0.0 + universal-user-agent: 7.0.3 + + '@octokit/openapi-types@27.0.0': {} + + '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)': + dependencies: + '@octokit/core': 7.0.6 + '@octokit/types': 16.0.0 + + '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.6)': + dependencies: + '@octokit/core': 7.0.6 + + '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.6)': + dependencies: + '@octokit/core': 7.0.6 + '@octokit/types': 16.0.0 + + '@octokit/request-error@7.1.0': + dependencies: + '@octokit/types': 16.0.0 + + '@octokit/request@10.0.8': + dependencies: + '@octokit/endpoint': 11.0.3 + '@octokit/request-error': 7.1.0 + '@octokit/types': 16.0.0 + fast-content-type-parse: 3.0.0 + json-with-bigint: 3.5.8 + universal-user-agent: 7.0.3 + + '@octokit/rest@22.0.1': + dependencies: + '@octokit/core': 7.0.6 + '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) + '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.6) + '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6) + + '@octokit/types@16.0.0': + dependencies: + '@octokit/openapi-types': 27.0.0 + + '@oxc-parser/binding-android-arm-eabi@0.147.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.147.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.147.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.147.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.147.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.147.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.147.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.147.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.147.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.147.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.147.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.147.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.147.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.147.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.147.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.147.0': + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.147.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.147.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.147.0': + optional: true + + '@oxc-project/types@0.147.0': {} + + '@oxc-resolver/binding-android-arm-eabi@11.24.2': + optional: true + + '@oxc-resolver/binding-android-arm64@11.24.2': + optional: true + + '@oxc-resolver/binding-darwin-arm64@11.24.2': + optional: true + + '@oxc-resolver/binding-darwin-x64@11.24.2': + optional: true + + '@oxc-resolver/binding-freebsd-x64@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@11.24.2': + optional: true + + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) + optional: true + + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': + optional: true + + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + optional: true + + '@oxfmt/binding-android-arm-eabi@0.66.0': + optional: true + + '@oxfmt/binding-android-arm64@0.66.0': + optional: true + + '@oxfmt/binding-darwin-arm64@0.66.0': + optional: true + + '@oxfmt/binding-darwin-x64@0.66.0': + optional: true + + '@oxfmt/binding-freebsd-x64@0.66.0': + optional: true + + '@oxfmt/binding-linux-arm-gnueabihf@0.66.0': + optional: true + + '@oxfmt/binding-linux-arm-musleabihf@0.66.0': + optional: true + + '@oxfmt/binding-linux-arm64-gnu@0.66.0': + optional: true + + '@oxfmt/binding-linux-arm64-musl@0.66.0': + optional: true + + '@oxfmt/binding-linux-ppc64-gnu@0.66.0': + optional: true + + '@oxfmt/binding-linux-riscv64-gnu@0.66.0': + optional: true + + '@oxfmt/binding-linux-riscv64-musl@0.66.0': + optional: true + + '@oxfmt/binding-linux-s390x-gnu@0.66.0': + optional: true + + '@oxfmt/binding-linux-x64-gnu@0.66.0': + optional: true + + '@oxfmt/binding-linux-x64-musl@0.66.0': + optional: true + + '@oxfmt/binding-openharmony-arm64@0.66.0': + optional: true + + '@oxfmt/binding-win32-arm64-msvc@0.66.0': + optional: true + + '@oxfmt/binding-win32-ia32-msvc@0.66.0': + optional: true + + '@oxfmt/binding-win32-x64-msvc@0.66.0': + optional: true + + '@oxlint-tsgolint/darwin-arm64@7.0.2001': + optional: true + + '@oxlint-tsgolint/darwin-x64@7.0.2001': + optional: true + + '@oxlint-tsgolint/linux-arm64@7.0.2001': + optional: true + + '@oxlint-tsgolint/linux-x64@7.0.2001': + optional: true + + '@oxlint-tsgolint/win32-arm64@7.0.2001': + optional: true + + '@oxlint-tsgolint/win32-x64@7.0.2001': + optional: true + + '@oxlint/binding-android-arm-eabi@1.81.0': + optional: true - '@inquirer/search@3.2.2(@types/node@22.19.15)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.15) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.15) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.19.15 + '@oxlint/binding-android-arm64@1.81.0': + optional: true - '@inquirer/select@4.4.2(@types/node@22.19.15)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.15) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.15) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.19.15 + '@oxlint/binding-darwin-arm64@1.81.0': + optional: true - '@inquirer/type@3.0.10(@types/node@22.19.15)': - optionalDependencies: - '@types/node': 22.19.15 + '@oxlint/binding-darwin-x64@1.81.0': + optional: true - '@mongodb-js/saslprep@1.4.6': - dependencies: - sparse-bitfield: 3.0.3 + '@oxlint/binding-freebsd-x64@1.81.0': + optional: true - '@nodeutils/defaults-deep@1.1.0': - dependencies: - lodash: 4.17.23 + '@oxlint/binding-linux-arm-gnueabihf@1.81.0': + optional: true - '@octokit/auth-token@6.0.0': {} + '@oxlint/binding-linux-arm-musleabihf@1.81.0': + optional: true - '@octokit/core@7.0.6': - dependencies: - '@octokit/auth-token': 6.0.0 - '@octokit/graphql': 9.0.3 - '@octokit/request': 10.0.8 - '@octokit/request-error': 7.1.0 - '@octokit/types': 16.0.0 - before-after-hook: 4.0.0 - universal-user-agent: 7.0.3 + '@oxlint/binding-linux-arm64-gnu@1.81.0': + optional: true - '@octokit/endpoint@11.0.3': - dependencies: - '@octokit/types': 16.0.0 - universal-user-agent: 7.0.3 + '@oxlint/binding-linux-arm64-musl@1.81.0': + optional: true - '@octokit/graphql@9.0.3': - dependencies: - '@octokit/request': 10.0.8 - '@octokit/types': 16.0.0 - universal-user-agent: 7.0.3 + '@oxlint/binding-linux-ppc64-gnu@1.81.0': + optional: true - '@octokit/openapi-types@27.0.0': {} + '@oxlint/binding-linux-riscv64-gnu@1.81.0': + optional: true - '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)': - dependencies: - '@octokit/core': 7.0.6 - '@octokit/types': 16.0.0 + '@oxlint/binding-linux-riscv64-musl@1.81.0': + optional: true - '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.6)': - dependencies: - '@octokit/core': 7.0.6 + '@oxlint/binding-linux-s390x-gnu@1.81.0': + optional: true - '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.6)': - dependencies: - '@octokit/core': 7.0.6 - '@octokit/types': 16.0.0 + '@oxlint/binding-linux-x64-gnu@1.81.0': + optional: true - '@octokit/request-error@7.1.0': - dependencies: - '@octokit/types': 16.0.0 + '@oxlint/binding-linux-x64-musl@1.81.0': + optional: true - '@octokit/request@10.0.8': - dependencies: - '@octokit/endpoint': 11.0.3 - '@octokit/request-error': 7.1.0 - '@octokit/types': 16.0.0 - fast-content-type-parse: 3.0.0 - json-with-bigint: 3.5.8 - universal-user-agent: 7.0.3 + '@oxlint/binding-openharmony-arm64@1.81.0': + optional: true - '@octokit/rest@22.0.1': - dependencies: - '@octokit/core': 7.0.6 - '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) - '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.6) - '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6) + '@oxlint/binding-win32-arm64-msvc@1.81.0': + optional: true - '@octokit/types@16.0.0': - dependencies: - '@octokit/openapi-types': 27.0.0 + '@oxlint/binding-win32-ia32-msvc@1.81.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.81.0': + optional: true + + '@oxlint/plugins@1.81.0': {} '@phun-ky/typeof@2.0.3': {} '@tootallnate/quickjs-emscripten@0.23.0': {} + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + '@types/chai@4.3.20': {} + '@types/esrecurse@4.3.1': {} + + '@types/estree@1.0.9': {} + + '@types/json-schema@7.0.15': {} + '@types/mocha@10.0.10': {} '@types/node@22.19.15': @@ -1671,10 +2860,72 @@ snapshots: dependencies: '@types/webidl-conversions': 7.0.3 + '@typescript-eslint/project-service@8.69.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.69.0(typescript@5.9.3) + '@typescript-eslint/types': 8.69.0 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.69.0': + dependencies: + '@typescript-eslint/types': 8.69.0 + '@typescript-eslint/visitor-keys': 8.69.0 + + '@typescript-eslint/tsconfig-utils@8.69.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/types@8.69.0': {} + + '@typescript-eslint/typescript-estree@8.69.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.69.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.69.0(typescript@5.9.3) + '@typescript-eslint/types': 8.69.0 + '@typescript-eslint/visitor-keys': 8.69.0 + debug: 4.4.3 + minimatch: 10.2.4 + semver: 7.7.4 + tinyglobby: 0.2.15 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.69.0 + '@typescript-eslint/types': 8.69.0 + '@typescript-eslint/typescript-estree': 8.69.0(typescript@5.9.3) + eslint: 10.10.0(jiti@2.7.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.69.0': + dependencies: + '@typescript-eslint/types': 8.69.0 + eslint-visitor-keys: 5.0.1 + + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn@8.16.0: {} agent-base@7.1.4: {} + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} @@ -1748,6 +2999,10 @@ snapshots: dependencies: balanced-match: 4.0.4 + brace-expansion@5.0.9: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -1790,6 +3045,14 @@ snapshots: pkg-types: 2.3.0 rc9: 2.1.2 + cacheable@2.5.0: + dependencies: + '@cacheable/memory': 2.2.0 + '@cacheable/utils': 2.5.0 + hookified: 1.15.1 + keyv: 5.6.0 + qified: 0.10.1 + camelcase@6.3.0: {} chai@4.5.0: @@ -1897,6 +3160,8 @@ snapshots: dependencies: type-detect: 4.1.0 + deep-is@0.1.4: {} + default-browser-id@5.0.1: {} default-browser@5.5.0: @@ -1924,6 +3189,8 @@ snapshots: emoji-regex@8.0.0: {} + escape-string-regexp@4.0.0: {} + escodegen@2.1.0: dependencies: esprima: 4.0.1 @@ -1932,8 +3199,79 @@ snapshots: optionalDependencies: source-map: 0.6.1 + eslint-plugin-perfectionist@5.11.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3): + dependencies: + '@typescript-eslint/utils': 8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.10.0(jiti@2.7.0) + natural-orderby: 5.0.0 + transitivePeerDependencies: + - supports-color + - typescript + + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.9 + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@10.10.0(jiti@2.7.0): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.7.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.3 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 11.1.5 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.6 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 + transitivePeerDependencies: + - supports-color + + espree@11.2.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 + esprima@4.0.1: {} + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + estraverse@5.3.0: {} esutils@2.0.3: {} @@ -1962,12 +3300,30 @@ snapshots: fast-content-type-parse@3.0.0: {} + fast-deep-equal@3.1.3: {} + fast-fifo@1.3.2: {} + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fd-package-json@2.0.0: + dependencies: + walk-up-path: 4.0.0 + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + + file-entry-cache@11.1.5: + dependencies: + flat-cache: 6.1.23 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -1983,10 +3339,28 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@6.1.23: + dependencies: + cacheable: 2.5.0 + flatted: 3.4.4 + hookified: 1.15.1 + + flatted@3.4.4: {} + follow-redirects@1.15.11(debug@4.4.3): optionalDependencies: debug: 4.4.3 + formatly@0.7.0: + dependencies: + fd-package-json: 2.0.0 + package-manager-detector: 1.8.0 + fs-minipass@2.1.0: dependencies: minipass: 3.3.6 @@ -2000,6 +3374,10 @@ snapshots: get-stream@8.0.1: {} + get-tsconfig@4.14.3: + dependencies: + resolve-pkg-maps: 1.0.0 + get-uri@6.0.5: dependencies: basic-ftp: 5.2.0 @@ -2040,12 +3418,24 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + glob@13.0.6: dependencies: minimatch: 10.2.4 minipass: 7.1.3 path-scurry: 2.0.2 + hashery@1.5.1: + dependencies: + hookified: 1.15.1 + + hookified@1.15.1: {} + + hookified@2.2.0: {} + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -2066,6 +3456,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + ignore@5.3.2: {} + + imurmurhash@0.1.4: {} + inquirer@12.11.1(@types/node@22.19.15): dependencies: '@inquirer/ansi': 1.0.2 @@ -2128,12 +3522,47 @@ snapshots: jiti@2.6.1: {} + jiti@2.7.0: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + json-with-bigint@3.5.8: {} + keyv@5.6.0: + dependencies: + '@keyv/serialize': 1.1.1 + + knip@6.34.0: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + formatly: 0.7.0 + get-tsconfig: 4.14.3 + jiti: 2.7.0 + oxc-parser: 0.147.0 + oxc-resolver: 11.24.2 + picomatch: 4.0.7 + smol-toml: 1.8.0 + strip-json-comments: 5.0.3 + tinyglobby: 0.2.17 + unbash: 4.0.11 + yaml: 2.9.0 + zod: 4.5.4 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + lodash.capitalize@4.2.1: {} lodash.escaperegexp@4.1.2: {} @@ -2185,6 +3614,10 @@ snapshots: dependencies: brace-expansion: 5.0.5 + minimatch@10.2.6: + dependencies: + brace-expansion: 5.0.9 + minipass@3.3.6: dependencies: yallist: 4.0.0 @@ -2253,6 +3686,10 @@ snapshots: mute-stream@2.0.0: {} + natural-compare@1.4.0: {} + + natural-orderby@5.0.0: {} + netmask@2.0.2: {} new-find-package-json@2.0.0: @@ -2313,6 +3750,15 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + ora@9.0.0: dependencies: chalk: 5.6.2 @@ -2330,14 +3776,124 @@ snapshots: macos-release: 3.4.0 windows-release: 6.1.0 + oxc-parser@0.147.0: + dependencies: + '@oxc-project/types': 0.147.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.147.0 + '@oxc-parser/binding-android-arm64': 0.147.0 + '@oxc-parser/binding-darwin-arm64': 0.147.0 + '@oxc-parser/binding-darwin-x64': 0.147.0 + '@oxc-parser/binding-freebsd-x64': 0.147.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.147.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.147.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.147.0 + '@oxc-parser/binding-linux-arm64-musl': 0.147.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.147.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.147.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.147.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.147.0 + '@oxc-parser/binding-linux-x64-gnu': 0.147.0 + '@oxc-parser/binding-linux-x64-musl': 0.147.0 + '@oxc-parser/binding-openharmony-arm64': 0.147.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.147.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.147.0 + '@oxc-parser/binding-win32-x64-msvc': 0.147.0 + + oxc-resolver@11.24.2: + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.24.2 + '@oxc-resolver/binding-android-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-x64': 11.24.2 + '@oxc-resolver/binding-freebsd-x64': 11.24.2 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-arm64-musl': 11.24.2 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-musl': 11.24.2 + '@oxc-resolver/binding-linux-s390x-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-musl': 11.24.2 + '@oxc-resolver/binding-openharmony-arm64': 11.24.2 + '@oxc-resolver/binding-wasm32-wasi': 11.24.2 + '@oxc-resolver/binding-win32-arm64-msvc': 11.24.2 + '@oxc-resolver/binding-win32-x64-msvc': 11.24.2 + + oxfmt@0.66.0: + dependencies: + tinypool: 2.1.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.66.0 + '@oxfmt/binding-android-arm64': 0.66.0 + '@oxfmt/binding-darwin-arm64': 0.66.0 + '@oxfmt/binding-darwin-x64': 0.66.0 + '@oxfmt/binding-freebsd-x64': 0.66.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.66.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.66.0 + '@oxfmt/binding-linux-arm64-gnu': 0.66.0 + '@oxfmt/binding-linux-arm64-musl': 0.66.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.66.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.66.0 + '@oxfmt/binding-linux-riscv64-musl': 0.66.0 + '@oxfmt/binding-linux-s390x-gnu': 0.66.0 + '@oxfmt/binding-linux-x64-gnu': 0.66.0 + '@oxfmt/binding-linux-x64-musl': 0.66.0 + '@oxfmt/binding-openharmony-arm64': 0.66.0 + '@oxfmt/binding-win32-arm64-msvc': 0.66.0 + '@oxfmt/binding-win32-ia32-msvc': 0.66.0 + '@oxfmt/binding-win32-x64-msvc': 0.66.0 + + oxlint-tsgolint@7.0.2001: + optionalDependencies: + '@oxlint-tsgolint/darwin-arm64': 7.0.2001 + '@oxlint-tsgolint/darwin-x64': 7.0.2001 + '@oxlint-tsgolint/linux-arm64': 7.0.2001 + '@oxlint-tsgolint/linux-x64': 7.0.2001 + '@oxlint-tsgolint/win32-arm64': 7.0.2001 + '@oxlint-tsgolint/win32-x64': 7.0.2001 + + oxlint@1.81.0(oxlint-tsgolint@7.0.2001): + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.81.0 + '@oxlint/binding-android-arm64': 1.81.0 + '@oxlint/binding-darwin-arm64': 1.81.0 + '@oxlint/binding-darwin-x64': 1.81.0 + '@oxlint/binding-freebsd-x64': 1.81.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.81.0 + '@oxlint/binding-linux-arm-musleabihf': 1.81.0 + '@oxlint/binding-linux-arm64-gnu': 1.81.0 + '@oxlint/binding-linux-arm64-musl': 1.81.0 + '@oxlint/binding-linux-ppc64-gnu': 1.81.0 + '@oxlint/binding-linux-riscv64-gnu': 1.81.0 + '@oxlint/binding-linux-riscv64-musl': 1.81.0 + '@oxlint/binding-linux-s390x-gnu': 1.81.0 + '@oxlint/binding-linux-x64-gnu': 1.81.0 + '@oxlint/binding-linux-x64-musl': 1.81.0 + '@oxlint/binding-openharmony-arm64': 1.81.0 + '@oxlint/binding-win32-arm64-msvc': 1.81.0 + '@oxlint/binding-win32-ia32-msvc': 1.81.0 + '@oxlint/binding-win32-x64-msvc': 1.81.0 + oxlint-tsgolint: 7.0.2001 + p-limit@2.3.0: dependencies: p-try: 2.2.0 + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + p-try@2.2.0: {} pac-proxy-agent@7.2.0: @@ -2360,6 +3916,8 @@ snapshots: package-json-from-dist@1.0.1: {} + package-manager-detector@1.8.0: {} + parse-path@7.1.0: dependencies: protocols: 2.0.2 @@ -2396,6 +3954,8 @@ snapshots: picomatch@4.0.4: {} + picomatch@4.0.7: {} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 @@ -2412,6 +3972,8 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 + prelude-ls@1.2.1: {} + protocols@2.0.2: {} proxy-agent@6.5.0: @@ -2431,6 +3993,10 @@ snapshots: punycode@2.3.1: {} + qified@0.10.1: + dependencies: + hookified: 2.2.0 + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 @@ -2494,6 +4060,8 @@ snapshots: - magicast - supports-color + resolve-pkg-maps@1.0.0: {} + restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -2536,6 +4104,8 @@ snapshots: smart-buffer@4.2.0: {} + smol-toml@1.8.0: {} + socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.4 @@ -2590,6 +4160,8 @@ snapshots: strip-final-newline@3.0.0: {} + strip-json-comments@5.0.3: {} + tar-stream@3.1.8: dependencies: b4a: 1.8.0 @@ -2632,6 +4204,13 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + + tinypool@2.1.0: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -2640,8 +4219,16 @@ snapshots: dependencies: punycode: 2.3.1 + ts-api-utils@2.5.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + tslib@2.8.1: {} + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + type-detect@4.1.0: {} type-fest@2.19.0: {} @@ -2650,14 +4237,22 @@ snapshots: ufo@1.6.3: {} + unbash@4.0.11: {} + undici-types@6.21.0: {} undici@6.23.0: {} universal-user-agent@7.0.3: {} + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + url-join@5.0.0: {} + walk-up-path@4.0.0: {} + webidl-conversions@7.0.0: {} whatwg-url@14.2.0: @@ -2675,6 +4270,8 @@ snapshots: dependencies: execa: 8.0.1 + word-wrap@1.2.5: {} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -2689,6 +4286,8 @@ snapshots: yaml@2.8.3: {} + yaml@2.9.0: {} + yargs-parser@21.1.1: {} yauzl@3.2.1: @@ -2696,6 +4295,10 @@ snapshots: buffer-crc32: 0.2.13 pend: 1.2.0 + yocto-queue@0.1.0: {} + yoctocolors-cjs@2.1.3: {} yoctocolors@2.1.2: {} + + zod@4.5.4: {} diff --git a/src/antelope.test.ts b/src/antelope.test.ts index f9c6727..c302820 100644 --- a/src/antelope.test.ts +++ b/src/antelope.test.ts @@ -1,5 +1,5 @@ -import { defineConfig } from "@antelopejs/interface-core/config"; import { MongoMemoryServer } from "mongodb-memory-server-core"; +import { defineConfig } from "@antelopejs/interface-core/config"; let mongod: MongoMemoryServer; diff --git a/src/database.ts b/src/database.ts index 17b1a20..6e4ad7a 100644 --- a/src/database.ts +++ b/src/database.ts @@ -1,12 +1,13 @@ import assert from "node:assert"; import type { Class } from "@antelopejs/interface-core/decorators"; -import { Schema, type SchemaDefinition } from "@antelopejs/interface-database"; import type { IndexDefinition } from "@antelopejs/interface-database/schema"; +import { Schema, type SchemaDefinition } from "@antelopejs/interface-database"; + +import type { Table } from "./table"; +import { getTablesForSchema } from "./schema"; import type { DatumGeneratorOutput } from "./common"; import { DatumStaticMetadata, getMetadata } from "./common"; import { fromPlainData, toDatabase, triggerEvent } from "./modifiers/common"; -import { getTablesForSchema } from "./schema"; -import type { Table } from "./table"; type TableDefinitions = Record>; type TableEntry = Record; diff --git a/src/model.ts b/src/model.ts index c31eb81..dd72e2a 100644 --- a/src/model.ts +++ b/src/model.ts @@ -1,4 +1,7 @@ import assert from "node:assert"; +import type * as DatabaseDev from "@antelopejs/interface-database"; +import type { FieldType } from "@antelopejs/interface-database/schema"; +import { type InstanceId, Schema } from "@antelopejs/interface-database"; import { type RequestContext, SetParameterProvider, @@ -7,21 +10,19 @@ import { type Class, MakeParameterAndPropertyDecorator, } from "@antelopejs/interface-core/decorators"; -import type * as DatabaseDev from "@antelopejs/interface-database"; -import { type InstanceId, Schema } from "@antelopejs/interface-database"; -import type { FieldType } from "@antelopejs/interface-database/schema"; -import { - type Constructible, - DatumStaticMetadata, - type DeepPartial, - getMetadata, -} from "./common"; + import { fromDatabase, fromPlainData, toDatabase, triggerEvent, } from "./modifiers/common"; +import { + type Constructible, + DatumStaticMetadata, + type DeepPartial, + getMetadata, +} from "./common"; export type DataModel = { readonly schemaName: string; diff --git a/src/modifiers/autodate.ts b/src/modifiers/autodate.ts index 86a0dbd..7774044 100644 --- a/src/modifiers/autodate.ts +++ b/src/modifiers/autodate.ts @@ -1,4 +1,5 @@ import { MakePropertyDecorator } from "@antelopejs/interface-core/decorators"; + import { attachModifier, Modifier } from "./common"; type AutoDateType = "created" | "updated"; diff --git a/src/modifiers/common.ts b/src/modifiers/common.ts index 5fdbf88..df1c01f 100644 --- a/src/modifiers/common.ts +++ b/src/modifiers/common.ts @@ -1,4 +1,5 @@ import type * as DatabaseDev from "@antelopejs/interface-database"; + import { type Constructible, getMetadata } from "../common"; export const MixinSymbol = Symbol(); diff --git a/src/modifiers/encryption.ts b/src/modifiers/encryption.ts index cf9bec9..4872fe9 100644 --- a/src/modifiers/encryption.ts +++ b/src/modifiers/encryption.ts @@ -1,3 +1,5 @@ +import type * as DatabaseDev from "@antelopejs/interface-database"; +import { MakePropertyDecorator } from "@antelopejs/interface-core/decorators"; import { type CipherCCM, createCipheriv, @@ -5,8 +7,7 @@ import { type DecipherCCM, randomBytes, } from "node:crypto"; -import { MakePropertyDecorator } from "@antelopejs/interface-core/decorators"; -import type * as DatabaseDev from "@antelopejs/interface-database"; + import { attachModifier, MixinSymbol, TwoWayModifier } from "./common"; type Options = { diff --git a/src/modifiers/hash.ts b/src/modifiers/hash.ts index 39eccdb..40e0ec4 100644 --- a/src/modifiers/hash.ts +++ b/src/modifiers/hash.ts @@ -1,6 +1,7 @@ +import { generate } from "randomstring"; import { createHash } from "node:crypto"; import { MakePropertyDecorator } from "@antelopejs/interface-core/decorators"; -import { generate } from "randomstring"; + import { attachModifier, MixinSymbol, diff --git a/src/modifiers/localization.ts b/src/modifiers/localization.ts index e27141f..ec1b78e 100644 --- a/src/modifiers/localization.ts +++ b/src/modifiers/localization.ts @@ -1,5 +1,6 @@ -import { MakePropertyDecorator } from "@antelopejs/interface-core/decorators"; import type * as DatabaseDev from "@antelopejs/interface-database"; +import { MakePropertyDecorator } from "@antelopejs/interface-core/decorators"; + import { attachModifier, ContainerModifier, diff --git a/src/relation.ts b/src/relation.ts index ec5604b..505cc82 100644 --- a/src/relation.ts +++ b/src/relation.ts @@ -1,6 +1,7 @@ import { MakePropertyDecorator } from "@antelopejs/interface-core/decorators"; -import { getMetadata } from "./common"; + import type { Table } from "./table"; +import { getMetadata } from "./common"; /** * Options for the {@link Relation} decorator. diff --git a/src/schema.ts b/src/schema.ts index 80c258c..c5d6ec8 100644 --- a/src/schema.ts +++ b/src/schema.ts @@ -3,8 +3,9 @@ import { type ClassDecorator, MakeClassDecorator, } from "@antelopejs/interface-core/decorators"; -import { DatumStaticMetadata, getMetadata } from "./common"; + import type { Table } from "./table"; +import { DatumStaticMetadata, getMetadata } from "./common"; const schemaTableRegistry: Record>> = {}; diff --git a/src/table.ts b/src/table.ts index 25edbc2..d1472c9 100644 --- a/src/table.ts +++ b/src/table.ts @@ -1,11 +1,12 @@ +import type { FieldType } from "@antelopejs/interface-database/schema"; import { type ClassDecorator, MakeClassDecorator, MakePropertyDecorator, } from "@antelopejs/interface-core/decorators"; -import type { FieldType } from "@antelopejs/interface-database/schema"; -import { type Constructible, DatumStaticMetadata, getMetadata } from "./common"; + import { MixinSymbol, type MixinType } from "./modifiers/common"; +import { type Constructible, DatumStaticMetadata, getMetadata } from "./common"; type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ( k: infer I, diff --git a/src/tests/common.test.ts b/src/tests/common.test.ts index b6c8ca8..9b5e71f 100644 --- a/src/tests/common.test.ts +++ b/src/tests/common.test.ts @@ -1,9 +1,9 @@ +import { expect } from "chai"; import { DatumStaticMetadata, type DeepPartial, getMetadata, } from "@antelopejs/interface-database-decorators/common"; -import { expect } from "chai"; describe("Common - metadata", () => { it("creates metadata with default values", async () => diff --git a/src/tests/database.test.ts b/src/tests/database.test.ts index 1ea82a9..d9d85a6 100644 --- a/src/tests/database.test.ts +++ b/src/tests/database.test.ts @@ -1,13 +1,14 @@ +import { expect } from "chai"; import { Schema } from "@antelopejs/interface-database"; -import { RegisterSchema } from "@antelopejs/interface-database-decorators/database"; import { RegisterTable } from "@antelopejs/interface-database-decorators/schema"; +import { RegisterSchema } from "@antelopejs/interface-database-decorators/database"; import { Field, Fixture, Index, Table, } from "@antelopejs/interface-database-decorators/table"; -import { expect } from "chai"; + import { asFieldType, numberCodec } from "./codec_helpers"; describe("Database - initialization", () => { diff --git a/src/tests/integration.test.ts b/src/tests/integration.test.ts index 8d8a9ab..82d7ef3 100644 --- a/src/tests/integration.test.ts +++ b/src/tests/integration.test.ts @@ -1,30 +1,31 @@ +import { expect } from "chai"; import { Schema } from "@antelopejs/interface-database"; -import { RegisterSchema } from "@antelopejs/interface-database-decorators/database"; +import { RegisterTable } from "@antelopejs/interface-database-decorators/schema"; import type { FieldError } from "@antelopejs/interface-database-decorators/model"; +import { RegisterSchema } from "@antelopejs/interface-database-decorators/database"; import { BasicDataModel, GetModel, } from "@antelopejs/interface-database-decorators/model"; -import { - Encrypted, - EncryptionModifier, -} from "@antelopejs/interface-database-decorators/modifiers/encryption"; import { Hashed, HashModifier, } from "@antelopejs/interface-database-decorators/modifiers/hash"; -import { - LocalizationModifier, - Localized, -} from "@antelopejs/interface-database-decorators/modifiers/localization"; -import { RegisterTable } from "@antelopejs/interface-database-decorators/schema"; import { Field, Fixture, Index, Table, } from "@antelopejs/interface-database-decorators/table"; -import { expect } from "chai"; +import { + Encrypted, + EncryptionModifier, +} from "@antelopejs/interface-database-decorators/modifiers/encryption"; +import { + LocalizationModifier, + Localized, +} from "@antelopejs/interface-database-decorators/modifiers/localization"; + import { asFieldType, numberCodec } from "./codec_helpers"; function getDatabase(schemaId: string) { diff --git a/src/tests/model.test.ts b/src/tests/model.test.ts index 6044627..8361a9b 100644 --- a/src/tests/model.test.ts +++ b/src/tests/model.test.ts @@ -1,18 +1,19 @@ +import { expect } from "chai"; +import { CROSS_INSTANCE } from "@antelopejs/interface-database"; +import { Field, Table } from "@antelopejs/interface-database-decorators/table"; +import { RegisterTable } from "@antelopejs/interface-database-decorators/schema"; +import { RegisterSchema } from "@antelopejs/interface-database-decorators/database"; import { Controller, Get, type RequestContext, } from "@antelopejs/interface-api"; -import { CROSS_INSTANCE } from "@antelopejs/interface-database"; -import { RegisterSchema } from "@antelopejs/interface-database-decorators/database"; import { BasicDataModel, GetModel, Model, } from "@antelopejs/interface-database-decorators/model"; -import { RegisterTable } from "@antelopejs/interface-database-decorators/schema"; -import { Field, Table } from "@antelopejs/interface-database-decorators/table"; -import { expect } from "chai"; + import { asFieldType, numberCodec, stringCodec } from "./codec_helpers"; describe("Model - data operations", () => { diff --git a/src/tests/modifiers/autodate.test.ts b/src/tests/modifiers/autodate.test.ts index de9b6af..409a64b 100644 --- a/src/tests/modifiers/autodate.test.ts +++ b/src/tests/modifiers/autodate.test.ts @@ -1,15 +1,15 @@ -import { - AutoDateModifier, - CreationTime, - UpdateTime, -} from "@antelopejs/interface-database-decorators/modifiers/autodate"; +import { expect } from "chai"; +import { Field, Table } from "@antelopejs/interface-database-decorators/table"; import { fromPlainData, toDatabase, triggerEvent, } from "@antelopejs/interface-database-decorators/modifiers/common"; -import { Field, Table } from "@antelopejs/interface-database-decorators/table"; -import { expect } from "chai"; +import { + AutoDateModifier, + CreationTime, + UpdateTime, +} from "@antelopejs/interface-database-decorators/modifiers/autodate"; describe("Modifiers - autodate", () => { it("sets creation date on insert", async () => SetCreationDateOnInsertTest()); diff --git a/src/tests/modifiers/common.test.ts b/src/tests/modifiers/common.test.ts index 0ffa8ab..b5a8dc9 100644 --- a/src/tests/modifiers/common.test.ts +++ b/src/tests/modifiers/common.test.ts @@ -1,3 +1,5 @@ +import { expect } from "chai"; +import { Field, Table } from "@antelopejs/interface-database-decorators/table"; import { attachModifier, ContainerModifier, @@ -8,8 +10,6 @@ import { TwoWayModifier, toDatabase, } from "@antelopejs/interface-database-decorators/modifiers/common"; -import { Field, Table } from "@antelopejs/interface-database-decorators/table"; -import { expect } from "chai"; describe("Modifiers - common", () => { it("creates basic modifier", async () => CreateBasicModifierTest()); diff --git a/src/tests/modifiers/encryption.test.ts b/src/tests/modifiers/encryption.test.ts index 4a6cb73..3246893 100644 --- a/src/tests/modifiers/encryption.test.ts +++ b/src/tests/modifiers/encryption.test.ts @@ -1,9 +1,9 @@ +import { expect } from "chai"; +import { Field, Table } from "@antelopejs/interface-database-decorators/table"; import { Encrypted, EncryptionModifier, } from "@antelopejs/interface-database-decorators/modifiers/encryption"; -import { Field, Table } from "@antelopejs/interface-database-decorators/table"; -import { expect } from "chai"; describe("Modifiers - encryption", () => { it("creates encryption modifier", async () => CreateEncryptionModifierTest()); diff --git a/src/tests/modifiers/hash.test.ts b/src/tests/modifiers/hash.test.ts index c08840e..dffccb9 100644 --- a/src/tests/modifiers/hash.test.ts +++ b/src/tests/modifiers/hash.test.ts @@ -1,9 +1,9 @@ +import { expect } from "chai"; +import { Field, Table } from "@antelopejs/interface-database-decorators/table"; import { Hashed, HashModifier, } from "@antelopejs/interface-database-decorators/modifiers/hash"; -import { Field, Table } from "@antelopejs/interface-database-decorators/table"; -import { expect } from "chai"; describe("Modifiers - hash", () => { it("hashes string values", async () => HashStringValuesTest()); diff --git a/src/tests/modifiers/localization.test.ts b/src/tests/modifiers/localization.test.ts index 5791bc0..bb8cb2a 100644 --- a/src/tests/modifiers/localization.test.ts +++ b/src/tests/modifiers/localization.test.ts @@ -1,9 +1,9 @@ +import { expect } from "chai"; +import { Field, Table } from "@antelopejs/interface-database-decorators/table"; import { LocalizationModifier, Localized, } from "@antelopejs/interface-database-decorators/modifiers/localization"; -import { Field, Table } from "@antelopejs/interface-database-decorators/table"; -import { expect } from "chai"; describe("Modifiers - localization", () => { it("creates localization modifier", async () => diff --git a/src/tests/relation.test.ts b/src/tests/relation.test.ts index 1d539a6..347e416 100644 --- a/src/tests/relation.test.ts +++ b/src/tests/relation.test.ts @@ -1,10 +1,10 @@ +import { expect } from "chai"; +import { Table } from "@antelopejs/interface-database-decorators/table"; import { getMetadata } from "@antelopejs/interface-database-decorators/common"; import { Relation, RelationStaticMetadata, } from "@antelopejs/interface-database-decorators/relation"; -import { Table } from "@antelopejs/interface-database-decorators/table"; -import { expect } from "chai"; describe("Relation - Relation decorator", () => { it("stores relation options in metadata", async () => diff --git a/src/tests/schema.test.ts b/src/tests/schema.test.ts index 96614e2..8da0e46 100644 --- a/src/tests/schema.test.ts +++ b/src/tests/schema.test.ts @@ -1,3 +1,9 @@ +import { expect } from "chai"; +import { + Field, + Index, + Table, +} from "@antelopejs/interface-database-decorators/table"; import { DatumStaticMetadata, getMetadata, @@ -6,12 +12,6 @@ import { getTablesForSchema, RegisterTable, } from "@antelopejs/interface-database-decorators/schema"; -import { - Field, - Index, - Table, -} from "@antelopejs/interface-database-decorators/table"; -import { expect } from "chai"; describe("Schema - RegisterTable decorator", () => { it("stores tableName and schemaName in metadata", async () => diff --git a/src/tests/table.test.ts b/src/tests/table.test.ts index 34bd0e3..c6e579e 100644 --- a/src/tests/table.test.ts +++ b/src/tests/table.test.ts @@ -1,7 +1,4 @@ -import { - DatumStaticMetadata, - getMetadata, -} from "@antelopejs/interface-database-decorators/common"; +import { expect } from "chai"; import { MixinSymbol } from "@antelopejs/interface-database-decorators/modifiers/common"; import { Field, @@ -9,7 +6,11 @@ import { Index, Table, } from "@antelopejs/interface-database-decorators/table"; -import { expect } from "chai"; +import { + DatumStaticMetadata, + getMetadata, +} from "@antelopejs/interface-database-decorators/common"; + import { asFieldType, stringCodec } from "./codec_helpers"; describe("Table - decorators", () => { diff --git a/tsconfig.json b/tsconfig.json index 1ecbac3..a07a8fb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,6 @@ "target": "esnext", "module": "commonjs", "lib": ["ES2022"], - "moduleResolution": "node", "types": ["node", "mocha"], "esModuleInterop": true, "strict": true, @@ -13,10 +12,9 @@ "sourceMap": true, "outDir": "dist", "rootDir": "src", - "baseUrl": ".", "paths": { - "@antelopejs/interface-database-decorators": ["src/index.ts"], - "@antelopejs/interface-database-decorators/*": ["src/*"] + "@antelopejs/interface-database-decorators": ["./src/index.ts"], + "@antelopejs/interface-database-decorators/*": ["./src/*"] } }, "include": ["src"] From 60a18ac11e6276341d471268d169b7d2bf4f0eaa Mon Sep 17 00:00:00 2001 From: Thomasims Date: Mon, 7 Sep 2026 12:44:41 +0200 Subject: [PATCH 2/6] style: format with oxfmt --- .github/workflows/stale.yml | 8 +- AGENTS.md | 18 ++-- CHANGELOG.md | 3 - docs/2.table-definitions.md | 66 +++++++++--- docs/3.table-modifiers.md | 100 ++++++++++++++---- docs/4.data-models.md | 8 +- docs/5.parameter-decoration.md | 17 ++- package.json | 92 ++++++++-------- skills/database-decorators-interface/SKILL.md | 73 ++++++++++--- src/model.ts | 4 +- src/modifiers/common.ts | 10 +- 11 files changed, 266 insertions(+), 133 deletions(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 3f89355..1baddef 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,8 +1,8 @@ -name: 'Close stale issues' +name: "Close stale issues" on: schedule: - - cron: '30 * * * *' + - cron: "30 * * * *" workflow_dispatch: permissions: @@ -17,8 +17,8 @@ jobs: - uses: actions/stale@v9 with: exempt-issue-labels: pending - stale-issue-message: 'This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 30 days.' - close-issue-message: 'This issue was closed because it has been stalled for 30 days with no activity.' + stale-issue-message: "This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 30 days." + close-issue-message: "This issue was closed because it has been stalled for 30 days with no activity." days-before-stale: 60 days-before-close: 30 operations-per-run: 200 diff --git a/AGENTS.md b/AGENTS.md index 7d6ce44..7806cce 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,7 +8,7 @@ | --------------------- | --------------------------------------------------------------------------------------- | | English only | All code must be in English: variable names, function names, comments | | PNPM only | Always use pnpm, never npm or yarn | -| NO COMMENTS | Code must be self-documenting through clear naming. TSDoc is allowed for public APIs | +| NO COMMENTS | Code must be self-documenting through clear naming. TSDoc is allowed for public APIs | | NO switch/case | Use objects, maps, or arrays instead | | NO inline types | Define proper interfaces/types, never use anonymous types like `{a: string, b: number}` | | Functions ≤ 40 lines | Split into subfunctions if longer | @@ -35,23 +35,23 @@ Never use `switch/case` or `if param === 'XXX'` chains. Instead: // BAD function getStatus(code: string) { switch (code) { - case 'A': - return 'Active'; - case 'I': - return 'Inactive'; + case "A": + return "Active"; + case "I": + return "Inactive"; default: - return 'Unknown'; + return "Unknown"; } } // GOOD const STATUS_MAP: Record = { - A: 'Active', - I: 'Inactive', + A: "Active", + I: "Inactive", }; function getStatus(code: string) { - return STATUS_MAP[code] ?? 'Unknown'; + return STATUS_MAP[code] ?? "Unknown"; } ``` diff --git a/CHANGELOG.md b/CHANGELOG.md index 46f0b91..0be5d80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,5 @@ # Changelog - ## v0.1.6 [compare changes](https://github.com/AntelopeJS/interface-database-decorators/compare/v0.1.5...v0.1.6) @@ -134,7 +133,6 @@ ## v0.0.2 - ### 🚀 Enhancements - Add database decorators interface implementation ([f470fb9](https://github.com/AntelopeJS/interface-database-decorators/commit/f470fb9)) @@ -158,4 +156,3 @@ - Antony Rizzitelli - Glastis ([@Glastis](http://github.com/Glastis)) - diff --git a/docs/2.table-definitions.md b/docs/2.table-definitions.md index 1cf4e8e..41a3cb8 100644 --- a/docs/2.table-definitions.md +++ b/docs/2.table-definitions.md @@ -23,7 +23,12 @@ class User extends Table { The `Table.with()` static method incorporates modifier mixins into the table class, adding capabilities like encryption, hashing, or localization: ```typescript -import { Table, Field, EncryptionModifier, Encrypted } from "@antelopejs/interface-database-decorators"; +import { + Table, + Field, + EncryptionModifier, + Encrypted, +} from "@antelopejs/interface-database-decorators"; class SensitiveData extends Table.with(EncryptionModifier) { @Field("string") @@ -56,8 +61,8 @@ class User extends Table { ### Options -| Option | Type | Description | -| ------- | -------- | ----------------------------------------------- | +| Option | Type | Description | +| ------- | -------- | ------------------------------------------------- | | `group` | `string` | Assign the field to a named compound index group. | ### Compound Indexes @@ -65,7 +70,12 @@ class User extends Table { Assign multiple fields to the same index group to create a compound index: ```typescript -import { Table, Field, Index, Relation } from "@antelopejs/interface-database-decorators"; +import { + Table, + Field, + Index, + Relation, +} from "@antelopejs/interface-database-decorators"; class User extends Table { @Field("string") @@ -93,7 +103,12 @@ class UserActivity extends Table { ```typescript import * as t from "io-ts"; -import { Table, Field, Index, RegisterTable } from "@antelopejs/interface-database-decorators"; +import { + Table, + Field, + Index, + RegisterTable, +} from "@antelopejs/interface-database-decorators"; @RegisterTable("orders", "shop") class Order extends Table { @@ -116,7 +131,12 @@ Properties without `@Field` are omitted from `fields`. `@Field` stacks freely wi The `Relation` decorator declares a link from a field to another table. It is **declarative metadata only**: database implementations do not enforce it (no foreign key constraint, no referential validation). Introspection tooling consumes it to expose the links between tables — for example to render schema diagrams or navigate related records. ```typescript -import { Table, Field, Index, Relation } from "@antelopejs/interface-database-decorators"; +import { + Table, + Field, + Index, + Relation, +} from "@antelopejs/interface-database-decorators"; class Comment extends Table { @Index() @@ -132,11 +152,11 @@ class Comment extends Table { ### Options -| Option | Type | Description | -| --------- | ------------------- | ---------------------------------------------------------------------- | -| `to` | `() => typeof Table` | Thunk returning the target table class (lazy to allow forward references). | -| `toField` | `string` | Target field name. Defaults to the target table's primary key. | -| `many` | `boolean` | The decorated field holds multiple target keys (many targets per source record). | +| Option | Type | Description | +| --------- | -------------------- | -------------------------------------------------------------------------------- | +| `to` | `() => typeof Table` | Thunk returning the target table class (lazy to allow forward references). | +| `toField` | `string` | Target field name. Defaults to the target table's primary key. | +| `many` | `boolean` | The decorated field holds multiple target keys (many targets per source record). | `@Relation` stacks freely with `@Field` and `@Index`. @@ -145,7 +165,12 @@ class Comment extends Table { The `RegisterTable` class decorator associates a table class with a specific table name and schema. This registration is used by `RegisterSchema` to build the schema definition automatically. ```typescript -import { Table, Field, Index, RegisterTable } from "@antelopejs/interface-database-decorators"; +import { + Table, + Field, + Index, + RegisterTable, +} from "@antelopejs/interface-database-decorators"; @RegisterTable("users", "myapp") class User extends Table { @@ -165,7 +190,11 @@ The first argument is the table name in the database, and the second is the sche The `Fixture` decorator defines default data to insert when a table is first created. It receives a generator function that produces initial records. ```typescript -import { Table, Field, Fixture } from "@antelopejs/interface-database-decorators"; +import { + Table, + Field, + Fixture, +} from "@antelopejs/interface-database-decorators"; @Fixture(() => [ { _id: "admin", name: "Administrator" }, @@ -205,7 +234,12 @@ class SystemConfig extends Table { Tables support standard class inheritance. Define a base table with common fields and extend it for specific use cases: ```typescript -import { Table, Field, Index, Relation } from "@antelopejs/interface-database-decorators"; +import { + Table, + Field, + Index, + Relation, +} from "@antelopejs/interface-database-decorators"; class BaseEntity extends Table { @Field("date") @@ -253,8 +287,8 @@ await RegisterSchema("myapp"); ### Parameters -| Parameter | Type | Description | -| ---------- | -------- | ----------------------------------------------------------------- | +| Parameter | Type | Description | +| ---------- | -------- | ------------------------------------------------------------------ | | `schemaId` | `string` | Schema id matching the `@RegisterTable(_, schemaId)` declarations. | `RegisterSchema` returns `Promise`. diff --git a/docs/3.table-modifiers.md b/docs/3.table-modifiers.md index f98d15c..0ad6773 100644 --- a/docs/3.table-modifiers.md +++ b/docs/3.table-modifiers.md @@ -9,7 +9,12 @@ Table modifiers transform field values as they are stored in and retrieved from The `EncryptionModifier` encrypts field values before storing them and decrypts them on retrieval. Both operations happen transparently. ```typescript -import { Table, Field, EncryptionModifier, Encrypted } from "@antelopejs/interface-database-decorators"; +import { + Table, + Field, + EncryptionModifier, + Encrypted, +} from "@antelopejs/interface-database-decorators"; class UserCredentials extends Table.with(EncryptionModifier) { @Encrypted({ @@ -39,18 +44,23 @@ class UserCredentials extends Table.with(EncryptionModifier) { #### Options -| Option | Type | Default | Description | -| ----------- | -------- | ----------------- | -------------------------------- | -| `secretKey` | `string` | (required) | The encryption key. | -| `algorithm` | `string` | `"aes-256-gcm"` | Encryption algorithm. | -| `ivSize` | `number` | `16` | Initialization vector size in bytes. | +| Option | Type | Default | Description | +| ----------- | -------- | --------------- | ------------------------------------ | +| `secretKey` | `string` | (required) | The encryption key. | +| `algorithm` | `string` | `"aes-256-gcm"` | Encryption algorithm. | +| `ivSize` | `number` | `16` | Initialization vector size in bytes. | ### HashModifier The `HashModifier` stores a one-way hash of field values. Unlike encryption, hashing is irreversible -- you cannot retrieve the original value. Use this for passwords and other sensitive data that only needs equality verification. ```typescript -import { Table, Field, HashModifier, Hashed } from "@antelopejs/interface-database-decorators"; +import { + Table, + Field, + HashModifier, + Hashed, +} from "@antelopejs/interface-database-decorators"; class User extends Table.with(HashModifier) { @Field("string") @@ -93,7 +103,12 @@ Returns `true` if `value`, when hashed, matches the stored hash for the given fi The `LocalizationModifier` stores multiple language versions of a field value. Access a specific locale by calling `localize()` on the table instance. ```typescript -import { Table, Field, LocalizationModifier, Localized } from "@antelopejs/interface-database-decorators"; +import { + Table, + Field, + LocalizationModifier, + Localized, +} from "@antelopejs/interface-database-decorators"; class Product extends Table.with(LocalizationModifier) { @Field("number") @@ -150,8 +165,8 @@ product.localize("*").name = { #### Options -| Option | Type | Description | -| ---------------- | -------- | ----------------------------------------------------- | +| Option | Type | Description | +| ---------------- | -------- | ------------------------------------------------------- | | `fallbackLocale` | `string` | Locale to use when the requested locale is unavailable. | #### Mixin Method @@ -169,7 +184,11 @@ Sets the active locale for accessing localized fields. If `fields` is provided, The `AutoDateModifier` automatically populates timestamp fields during insert and update operations. Use the `CreationTime` and `UpdateTime` decorators to mark fields. ```typescript -import { Table, CreationTime, UpdateTime } from "@antelopejs/interface-database-decorators"; +import { + Table, + CreationTime, + UpdateTime, +} from "@antelopejs/interface-database-decorators"; class Article extends Table { declare title: string; @@ -204,7 +223,11 @@ import { Localized, } from "@antelopejs/interface-database-decorators"; -class UserProfile extends Table.with(EncryptionModifier, HashModifier, LocalizationModifier) { +class UserProfile extends Table.with( + EncryptionModifier, + HashModifier, + LocalizationModifier, +) { @Encrypted({ secretKey: process.env.SECRET_KEY || "default-key" }) @Field("any") declare privateInfo: { @@ -229,11 +252,20 @@ class UserProfile extends Table.with(EncryptionModifier, HashModifier, Localizat A `OneWayModifier` transforms data in one direction (when writing to the database). Use it for irreversible transformations like hashing. ```typescript -import { OneWayModifier, MixinSymbol, attachModifier } from "@antelopejs/interface-database-decorators"; +import { + OneWayModifier, + MixinSymbol, + attachModifier, +} from "@antelopejs/interface-database-decorators"; import { MakePropertyDecorator } from "@antelopejs/interface-core/decorators"; import { createHash } from "crypto"; -class PrefixHashModifier extends OneWayModifier { +class PrefixHashModifier extends OneWayModifier< + string | undefined, + [], + {}, + { algorithm?: string } +> { public readonly autolock = true; public override lock(_locked: string | undefined, value: unknown) { @@ -248,15 +280,20 @@ class PrefixHashModifier extends OneWayModifier { - attachModifier(target.constructor, PrefixHashModifier, propertyKey, options || {}); + attachModifier( + target.constructor, + PrefixHashModifier, + propertyKey, + options || {}, + ); }, ); ``` The generic parameters for `OneWayModifier` are: -| Parameter | Description | -| ------------ | --------------------------------------------------- | +| Parameter | Description | +| ------------ | ---------------------------------------------------- | | `LockedType` | The type stored in the database after transformation | | `Args` | Additional arguments for `lock` and `test` | | `Meta` | Per-field metadata stored alongside the value | @@ -267,10 +304,19 @@ The generic parameters for `OneWayModifier` are A `TwoWayModifier` extends `OneWayModifier` with an `unlock` method for reversible transformations like encryption: ```typescript -import { TwoWayModifier, MixinSymbol, attachModifier } from "@antelopejs/interface-database-decorators"; +import { + TwoWayModifier, + MixinSymbol, + attachModifier, +} from "@antelopejs/interface-database-decorators"; import { MakePropertyDecorator } from "@antelopejs/interface-core/decorators"; -class Base64Modifier extends TwoWayModifier { +class Base64Modifier extends TwoWayModifier< + string, + [], + {}, + { prefix?: string } +> { public readonly autolock = true; public readonly autounlock = true; @@ -295,7 +341,12 @@ class Base64Modifier extends TwoWayModifier const Base64Encoded = MakePropertyDecorator( (target, propertyKey, options?: { prefix?: string }) => { - attachModifier(target.constructor, Base64Modifier, propertyKey, options || {}); + attachModifier( + target.constructor, + Base64Modifier, + propertyKey, + options || {}, + ); }, ); ``` @@ -317,8 +368,8 @@ class MyContainerModifier extends ContainerModifier<{}, { fallback?: string }> { Modifiers can hook into the data lifecycle by implementing event handler methods. These methods are called during data conversion and database operations: -| Event | Triggered When | -| --------------- | ----------------------------------------- | +| Event | Triggered When | +| --------------- | ------------------------------------------ | | `fromPlainData` | After converting plain data to an instance | | `toPlainData` | After converting an instance to plain data | | `fromDatabase` | After reading from the database | @@ -327,7 +378,10 @@ Modifiers can hook into the data lifecycle by implementing event handler methods | `update` | Before updating an existing record | ```typescript -import { Modifier, MixinSymbol } from "@antelopejs/interface-database-decorators"; +import { + Modifier, + MixinSymbol, +} from "@antelopejs/interface-database-decorators"; class TimestampModifier extends Modifier { public insert(instance: any, field: string) { diff --git a/docs/4.data-models.md b/docs/4.data-models.md index 3216967..8f07b5c 100644 --- a/docs/4.data-models.md +++ b/docs/4.data-models.md @@ -15,10 +15,10 @@ const UserModel = BasicDataModel(User, "users"); ### Parameters -| Parameter | Type | Description | -| ----------- | ----------------- | ---------------------------------------------------- | -| `dataType` | `Constructible`| The Table class representing your table | -| `tableName` | `string` | The table name in the database (optional if `@RegisterTable` is used) | +| Parameter | Type | Description | +| ----------- | ------------------ | --------------------------------------------------------------------- | +| `dataType` | `Constructible` | The Table class representing your table | +| `tableName` | `string` | The table name in the database (optional if `@RegisterTable` is used) | When the table class has been decorated with `@RegisterTable`, the `tableName` parameter can be omitted. diff --git a/docs/5.parameter-decoration.md b/docs/5.parameter-decoration.md index edc553a..f218ced 100644 --- a/docs/5.parameter-decoration.md +++ b/docs/5.parameter-decoration.md @@ -17,7 +17,9 @@ import { UserModel } from "./user.model"; class UsersController extends Controller("/users") { @Get() - async listUsers(@Model(UserModel, "main") userModel: InstanceType) { + async listUsers( + @Model(UserModel, "main") userModel: InstanceType, + ) { return await userModel.getAll(); } } @@ -36,7 +38,8 @@ class MultitenantController extends Controller("/tenants") { @Get("/:tenantId/users") async getTenantUsers( @Parameter("tenantId") tenantId: string, - @Model(UserModel, (ctx) => `tenant-${ctx.params.tenantId}`) userModel: InstanceType, + @Model(UserModel, (ctx) => `tenant-${ctx.params.tenantId}`) + userModel: InstanceType, ) { return await userModel.getAll(); } @@ -88,7 +91,15 @@ const model3 = GetModel(UserModel, "other"); Model decorators compose naturally with other API decorators for building complete CRUD controllers: ```typescript -import { Controller, Get, Post, Put, Delete, RawBody, Parameter } from "@antelopejs/interface-api"; +import { + Controller, + Get, + Post, + Put, + Delete, + RawBody, + Parameter, +} from "@antelopejs/interface-api"; import { Model } from "@antelopejs/interface-database-decorators"; import { UserModel } from "./user.model"; diff --git a/package.json b/package.json index c27e83b..386570f 100644 --- a/package.json +++ b/package.json @@ -4,24 +4,60 @@ "description": "AntelopeJS interface for database schema decorators and model definitions", "keywords": [ "antelopejs", - "interface", "database", "decorators", + "interface", "orm" ], + "license": "Apache-2.0", "repository": { "type": "git", "url": "git+https://github.com/AntelopeJS/interface-database-decorators.git" }, - "license": "Apache-2.0", - "packageManager": "pnpm@10.6.5", - "main": "dist/index.js", - "types": "dist/index.d.ts", "files": [ "dist", "docs", "skills" ], + "main": "dist/index.js", + "types": "dist/index.d.ts", + "typesVersions": { + "*": { + "common": [ + "dist/common.d.ts" + ], + "database": [ + "dist/database.d.ts" + ], + "model": [ + "dist/model.d.ts" + ], + "relation": [ + "dist/relation.d.ts" + ], + "schema": [ + "dist/schema.d.ts" + ], + "table": [ + "dist/table.d.ts" + ], + "modifiers/autodate": [ + "dist/modifiers/autodate.d.ts" + ], + "modifiers/common": [ + "dist/modifiers/common.d.ts" + ], + "modifiers/encryption": [ + "dist/modifiers/encryption.d.ts" + ], + "modifiers/hash": [ + "dist/modifiers/hash.d.ts" + ], + "modifiers/localization": [ + "dist/modifiers/localization.d.ts" + ] + } + }, "exports": { ".": { "types": "./dist/index.d.ts", @@ -73,6 +109,10 @@ }, "./package.json": "./package.json" }, + "publishConfig": { + "access": "public", + "provenance": true + }, "scripts": { "build": "rimraf dist && tsc", "format": "oxfmt .", @@ -115,47 +155,7 @@ "@antelopejs/interface-core": ">=0.0.3 <1.0.0", "@antelopejs/interface-database": ">=0.1.1 <1.0.0" }, - "publishConfig": { - "access": "public", - "provenance": true - }, - "typesVersions": { - "*": { - "common": [ - "dist/common.d.ts" - ], - "database": [ - "dist/database.d.ts" - ], - "model": [ - "dist/model.d.ts" - ], - "relation": [ - "dist/relation.d.ts" - ], - "schema": [ - "dist/schema.d.ts" - ], - "table": [ - "dist/table.d.ts" - ], - "modifiers/autodate": [ - "dist/modifiers/autodate.d.ts" - ], - "modifiers/common": [ - "dist/modifiers/common.d.ts" - ], - "modifiers/encryption": [ - "dist/modifiers/encryption.d.ts" - ], - "modifiers/hash": [ - "dist/modifiers/hash.d.ts" - ], - "modifiers/localization": [ - "dist/modifiers/localization.d.ts" - ] - } - }, + "packageManager": "pnpm@10.6.5", "antelopeJs": { "standalone": true, "test": "src/antelope.test.ts", diff --git a/skills/database-decorators-interface/SKILL.md b/skills/database-decorators-interface/SKILL.md index de0aafa..303d6b9 100644 --- a/skills/database-decorators-interface/SKILL.md +++ b/skills/database-decorators-interface/SKILL.md @@ -15,17 +15,50 @@ Peer interfaces required: `@antelopejs/interface-core`, `@antelopejs/interface-a ## Imports ```typescript -import { Table, Field, Index, Fixture } from "@antelopejs/interface-database-decorators/table"; -import { RegisterTable, getTablesForSchema } from "@antelopejs/interface-database-decorators/schema"; +import { + Table, + Field, + Index, + Fixture, +} from "@antelopejs/interface-database-decorators/table"; +import { + RegisterTable, + getTablesForSchema, +} from "@antelopejs/interface-database-decorators/schema"; import { RegisterSchema } from "@antelopejs/interface-database-decorators/database"; -import { BasicDataModel, GetModel, Model } from "@antelopejs/interface-database-decorators/model"; +import { + BasicDataModel, + GetModel, + Model, +} from "@antelopejs/interface-database-decorators/model"; import { Relation } from "@antelopejs/interface-database-decorators/relation"; -import { DatumStaticMetadata, getMetadata } from "@antelopejs/interface-database-decorators/common"; -import { CreationTime, UpdateTime } from "@antelopejs/interface-database-decorators/modifiers/autodate"; -import { Encrypted, EncryptionModifier } from "@antelopejs/interface-database-decorators/modifiers/encryption"; -import { Hashed, HashModifier } from "@antelopejs/interface-database-decorators/modifiers/hash"; -import { Localized, LocalizationModifier } from "@antelopejs/interface-database-decorators/modifiers/localization"; -import { Modifier, OneWayModifier, TwoWayModifier, attachModifier, toPlainData } from "@antelopejs/interface-database-decorators/modifiers/common"; +import { + DatumStaticMetadata, + getMetadata, +} from "@antelopejs/interface-database-decorators/common"; +import { + CreationTime, + UpdateTime, +} from "@antelopejs/interface-database-decorators/modifiers/autodate"; +import { + Encrypted, + EncryptionModifier, +} from "@antelopejs/interface-database-decorators/modifiers/encryption"; +import { + Hashed, + HashModifier, +} from "@antelopejs/interface-database-decorators/modifiers/hash"; +import { + Localized, + LocalizationModifier, +} from "@antelopejs/interface-database-decorators/modifiers/localization"; +import { + Modifier, + OneWayModifier, + TwoWayModifier, + attachModifier, + toPlainData, +} from "@antelopejs/interface-database-decorators/modifiers/common"; ``` The package root re-exports everything above and also imports `reflect-metadata` (see gotchas). @@ -36,7 +69,8 @@ The package root re-exports everything above and also imports `reflect-metadata` @RegisterTable("recipes", "cookbook") // (tableName, schemaName) class Recipe extends Table { // _id: string is inherited as the primary key - @Index() @Field("string") + @Index() + @Field("string") declare slug: string; @Field("string") declare tagline: string; @@ -46,7 +80,10 @@ const RecipeModel = BasicDataModel(Recipe); // table name taken from @RegisterTa await RegisterSchema("cookbook"); // once at startup: provisions all tables registered for "cookbook", runs fixtures const recipes = GetModel(RecipeModel); // cached per (model class, instanceId) -await recipes.insert({ slug: "grilled-halloumi", tagline: "Smoky skewers" }, { validate: true }); +await recipes.insert( + { slug: "grilled-halloumi", tagline: "Smoky skewers" }, + { validate: true }, +); const bySlug = await recipes.getBy("slug", "grilled-halloumi"); const one = await recipes.get(bySlug[0]._id); await recipes.update(one._id, { tagline: "Smoky halloumi skewers" }); @@ -68,12 +105,16 @@ class RecipesController extends Controller("/recipes") { ## Field modifiers ```typescript -class Chef extends Table.with(HashModifier, EncryptionModifier, LocalizationModifier) { - @Hashed() declare passphrase: string; // one-way; test via instance.testHash("passphrase", value) +class Chef extends Table.with( + HashModifier, + EncryptionModifier, + LocalizationModifier, +) { + @Hashed() declare passphrase: string; // one-way; test via instance.testHash("passphrase", value) @Encrypted({ secretKey }) declare supplierCode: string; // transparent encrypt/decrypt (autolock + autounlock) - @Localized() declare motto: string; // read AND write via instance.localize("en", ["motto"]) - @CreationTime() declare hiredAt: Date; // set on insert, stripped from updates - @UpdateTime() declare lastActiveAt: Date; // refreshed on insert and update + @Localized() declare motto: string; // read AND write via instance.localize("en", ["motto"]) + @CreationTime() declare hiredAt: Date; // set on insert, stripped from updates + @UpdateTime() declare lastActiveAt: Date; // refreshed on insert and update } ``` diff --git a/src/model.ts b/src/model.ts index dd72e2a..08a0cdb 100644 --- a/src/model.ts +++ b/src/model.ts @@ -26,9 +26,7 @@ import { export type DataModel = { readonly schemaName: string; - new ( - database: DatabaseDev.SchemaInstance, - ): { + new (database: DatabaseDev.SchemaInstance): { readonly database: DatabaseDev.SchemaInstance; readonly table: DatabaseDev.Table; }; diff --git a/src/modifiers/common.ts b/src/modifiers/common.ts index df1c01f..2247d33 100644 --- a/src/modifiers/common.ts +++ b/src/modifiers/common.ts @@ -345,12 +345,10 @@ export function toDatabase( return result; } -type ExtractModifierOptions = T extends Modifier - ? Options - : undefined; -type ExtractModifierArgs = T extends OneWayModifier - ? Args - : []; +type ExtractModifierOptions = + T extends Modifier ? Options : undefined; +type ExtractModifierArgs = + T extends OneWayModifier ? Args : []; const ignoredEventNames = { constructor: true, From e7797b8427a44a3b3eea9a94aacc0330e87f10ef Mon Sep 17 00:00:00 2001 From: Thomasims Date: Mon, 7 Sep 2026 12:44:41 +0200 Subject: [PATCH 3/6] chore: ignore the oxfmt pass in blame --- .git-blame-ignore-revs | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000..599eb0a --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,2 @@ +# Formatted with oxfmt when the repository moved off Biome. +60a18ac11e6276341d471268d169b7d2bf4f0eaa From e8cad3221c945f5df1fae73b7144eafc016a353c Mon Sep 17 00:00:00 2001 From: Thomasims Date: Mon, 7 Sep 2026 13:35:15 +0200 Subject: [PATCH 4/6] ci: gate format:check and knip --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 16be1a1..700f7d9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,4 +28,6 @@ jobs: - run: pnpm add --global @antelopejs/core - run: pnpm prepack - run: pnpm lint + - run: pnpm format:check + - run: pnpm knip - run: pnpm test From 4ed54c625b488794f3e62cc6bdcecb2447946d34 Mon Sep 17 00:00:00 2001 From: Thomasims Date: Mon, 7 Sep 2026 16:21:04 +0200 Subject: [PATCH 5/6] chore: drop the dead biome-ignore directives Biome is gone, so the directives suppress nothing. The explanations they carried are kept as plain comments. --- src/table.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/table.ts b/src/table.ts index d1472c9..0517c99 100644 --- a/src/table.ts +++ b/src/table.ts @@ -72,7 +72,7 @@ export class Table { | ExtractTableMeta> | ExtractTableMeta> > { - // biome-ignore lint/complexity/noThisInStatic: intentional mixin pattern — this refers to the calling class + // intentional mixin pattern — this refers to the calling class const c = class _internal_table extends (this as any) {}; for (const mixin of others .map((otherClass) => otherClass.prototype && new otherClass()) From 062edffcddfbdee27362fca12b60dcc6b7fd0ee5 Mon Sep 17 00:00:00 2001 From: Thomasims Date: Mon, 7 Sep 2026 17:32:06 +0200 Subject: [PATCH 6/6] chore: remove the dead biome-ignore directives Biome is gone, so they suppressed nothing. AGENTS.md mandates self-documenting code without non-TSDoc comments, so the directives are dropped rather than demoted to plain comments. --- src/table.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/table.ts b/src/table.ts index 0517c99..3d877bd 100644 --- a/src/table.ts +++ b/src/table.ts @@ -72,7 +72,6 @@ export class Table { | ExtractTableMeta> | ExtractTableMeta> > { - // intentional mixin pattern — this refers to the calling class const c = class _internal_table extends (this as any) {}; for (const mixin of others .map((otherClass) => otherClass.prototype && new otherClass())