diff --git a/.github/workflows/github-actions.yml b/.github/workflows/github-actions.yml index 66ef1d6..0bd4aa7 100644 --- a/.github/workflows/github-actions.yml +++ b/.github/workflows/github-actions.yml @@ -16,7 +16,5 @@ jobs: run: pnpm build - name: 🧪 Running tests run: pnpm test - - name: 🚨 Linting code - run: pnpm lint - - name: 🚨 prettier check code - run: pnpm format:check + - name: 🚨 Biome check + run: pnpm check diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 9f46784..0000000 --- a/.prettierignore +++ /dev/null @@ -1,11 +0,0 @@ -# Ignore everything except the code in src/. -# Based on https://stackoverflow.com/a/70715829/458193 -* -!src/**/*.js -!src/**/*.jsx -!src/**/*.ts -!src/**/*.tsx -!src/**/*.json -!*/ - -# More specific ignores go below. diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 7aef96e..0000000 --- a/.prettierrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "arrowParens": "avoid", - "bracketSameLine": false, - "printWidth": 100, - "semi": true, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false -} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..699ed73 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["biomejs.biome"] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index ad92582..c671393 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,26 @@ { - "editor.formatOnSave": true + "editor.formatOnSave": true, + "editor.defaultFormatter": "biomejs.biome", + "editor.codeActionsOnSave": { + "source.fixAll.biome": "explicit", + "source.organizeImports.biome": "explicit" + }, + "[javascript]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[javascriptreact]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[typescript]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[json]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[jsonc]": { + "editor.defaultFormatter": "biomejs.biome" + } } diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..55b41dc --- /dev/null +++ b/biome.json @@ -0,0 +1,39 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.4.14/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "includes": ["**", "!**/dist", "!**/docs", "!**/.locorc.js", "!**/pnpm-lock.yaml"] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 100 + }, + "javascript": { + "formatter": { + "quoteStyle": "single", + "semicolons": "always", + "trailingCommas": "none", + "arrowParentheses": "asNeeded", + "bracketSameLine": false + } + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "style": { + "noNonNullAssertion": "off" + }, + "suspicious": { + "noAssignInExpressions": "off", + "noExplicitAny": "warn" + } + } + } +} diff --git a/cli.ts b/cli.ts index 937956d..9d40d0c 100755 --- a/cli.ts +++ b/cli.ts @@ -1,10 +1,9 @@ #!/usr/bin/env node import { Command, Option } from 'commander'; - +import { version } from './package.json'; import pull from './src/commands/pull'; import push from './src/commands/push'; import status from './src/commands/status'; -import { version } from './package.json'; import { handleAsyncErrors } from './src/util/handleAsyncErrors'; const program = new Command('loco-cli') diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index 5319d48..0000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,21 +0,0 @@ -// @ts-check - -import eslint from "@eslint/js"; -import tseslint from "typescript-eslint"; -import prettierConfig from "eslint-config-prettier"; - -const ignoreConfig = { - ignores: ["node_modules/", "dist/", "docs/", ".locorc.js"], -}; - -export default tseslint.config( - eslint.configs.recommended, - ...tseslint.configs.recommended, - ignoreConfig, - prettierConfig, - { - rules: { - "@typescript-eslint/no-explicit-any": "warn", - }, - }, -); diff --git a/package.json b/package.json index b40a39a..e79e941 100644 --- a/package.json +++ b/package.json @@ -25,9 +25,11 @@ "docs:dev": "pnpm --filter @loco-cli/docs dev", "docs:build": "pnpm --filter @loco-cli/docs build", "docs:preview": "pnpm --filter @loco-cli/docs preview", - "format:check": "prettier --check .", - "format": "prettier --write .", - "lint": "eslint .", + "check": "biome check", + "check:fix": "biome check --write", + "format": "biome format --write", + "format:check": "biome format", + "lint": "biome lint", "loco-cli": "pnpm build && node ./dist/cli.js", "test": "vitest run" }, @@ -50,16 +52,11 @@ "inquirer": "^13.4.2" }, "devDependencies": { - "@eslint/js": "10.0.1", + "@biomejs/biome": "2.4.14", "@types/cli-progress": "3.11.6", "@types/inquirer": "9.0.9", "@types/node": "~25.6.0", - "eslint": "10.3.0", - "eslint-config-prettier": "10.1.8", - "eslint-plugin-prettier": "5.5.5", - "prettier": "3.8.3", "typescript": "6.0.3", - "typescript-eslint": "8.59.2", "vitest": "4.1.5" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9692f79..f19d963 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,9 +27,9 @@ importers: specifier: ^13.4.2 version: 13.4.2(@types/node@25.6.0) devDependencies: - '@eslint/js': - specifier: 10.0.1 - version: 10.0.1(eslint@10.3.0) + '@biomejs/biome': + specifier: 2.4.14 + version: 2.4.14 '@types/cli-progress': specifier: 3.11.6 version: 3.11.6 @@ -39,24 +39,9 @@ importers: '@types/node': specifier: ~25.6.0 version: 25.6.0 - eslint: - specifier: 10.3.0 - version: 10.3.0 - eslint-config-prettier: - specifier: 10.1.8 - version: 10.1.8(eslint@10.3.0) - eslint-plugin-prettier: - specifier: 5.5.5 - version: 5.5.5(eslint-config-prettier@10.1.8(eslint@10.3.0))(eslint@10.3.0)(prettier@3.8.3) - prettier: - specifier: 3.8.3 - version: 3.8.3 typescript: specifier: 6.0.3 version: 6.0.3 - typescript-eslint: - specifier: 8.59.2 - version: 8.59.2(eslint@10.3.0)(typescript@6.0.3) vitest: specifier: 4.1.5 version: 4.1.5(@types/node@25.6.0)(vite@7.3.2(@types/node@25.6.0)) @@ -131,6 +116,63 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@biomejs/biome@2.4.14': + resolution: {integrity: sha512-TmAvxOEgrpLypzVGJ8FulIZnlyA9TxrO1hyqYrCz9r+bwma9xXxuLA5IuYnj55XQneFx460KjRbx6SWGLkg3bQ==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@2.4.14': + resolution: {integrity: sha512-XvgoE9XOawUOQPdmvs4J7wPhi/DLwSCGks3AlPJDmh34O0awRTqCED1HRcRDdpf1Zrp4us4MGOOdIxNpbqNF5Q==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@2.4.14': + resolution: {integrity: sha512-jE7hKBCFhOx3uUh+ZkWBfOHxAcILPfhFplNkuID/eZeSTLHzfZzoZxW8fbqY9xXRnPi7jGNAf1iPVR+0yWsM/Q==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@2.4.14': + resolution: {integrity: sha512-/z+6gqAqqUQTHazwStxSXKHg9b8UvqBmDFRp+c4wYbq2KXhELQDon9EoC9RpmQ8JWkqQx/lIUy/cs+MhzDZp6A==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@biomejs/cli-linux-arm64@2.4.14': + resolution: {integrity: sha512-2TELhZnW5RSLL063l9rc5xLpA0ZIw0Ccwy/0q384rvNAgFw3yI76bd59547yxowdQr5MNPET/xDLrLuvgSeeWQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@biomejs/cli-linux-x64-musl@2.4.14': + resolution: {integrity: sha512-R6BWgJdQOwW9ulJatuTVrQkjnODjqHZkKNOqb1sz++3Noe5LYd0i3PchnOBUCYAPHoPWHhjJqbdZlHEu0hpjdA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@biomejs/cli-linux-x64@2.4.14': + resolution: {integrity: sha512-zHrlQZDBDUz4OLAraYpWKcnLS6HOewBFWYOzY91d1ZjdqZwibOyb6BEu6WuWLugyo0P3riCmsbV9UqV1cSXwQg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@biomejs/cli-win32-arm64@2.4.14': + resolution: {integrity: sha512-M3EH5hqOI/F/FUA2u4xcLoUgmxd218mvuj/6JL7Hv2toQvr2/AdOvKSpGkoRuWFCtQPVa+ZqkEV3Q5xBA9+XSA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@2.4.14': + resolution: {integrity: sha512-WL0EG5qE+EAKomGXbf2g6VnSKJhTL3tXC0QRzWRwA5VpjxNYa6H4P7ZWfymbGE4IhZZQi1KXQ2R0YjwInmz2fA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + '@capsizecss/unpack@4.0.0': resolution: {integrity: sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==} engines: {node: '>=18'} @@ -306,45 +348,6 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@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} - - '@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.5.5': - resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==} - 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/js@10.0.1': - resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - peerDependencies: - eslint: ^10.0.0 - peerDependenciesMeta: - eslint: - optional: true - - '@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.1': - resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@expressive-code/core@0.41.7': resolution: {integrity: sha512-ck92uZYZ9Wba2zxkiZLsZGi9N54pMSAVdrI9uW3Oo9AtLglD5RmrdTwbYPCT2S/jC36JGB2i+pnQtBm/Ib2+dg==} @@ -357,26 +360,6 @@ packages: '@expressive-code/plugin-text-markers@0.41.7': resolution: {integrity: sha512-Ewpwuc5t6eFdZmWlFyeuy3e1PTQC0jFvw2Q+2bpcWXbOZhPLsT7+h8lsSIJxb5mS7wZko7cKyQ2RLYDyK6Fpmw==} - '@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'} - '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} @@ -711,10 +694,6 @@ packages: cpu: [x64] os: [win32] - '@pkgr/core@0.2.9': - resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} @@ -926,9 +905,6 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/esrecurse@4.3.1': - resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} - '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -944,9 +920,6 @@ packages: '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -977,65 +950,6 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.59.2': - resolution: {integrity: sha512-j/bwmkBvHUtPNxzuWe5z6BEk3q54YRyGlBXkSsmfoih7zNrBvl5A9A98anlp/7JbyZcWIJ8KXo/3Tq/DjFLtuQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.59.2 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/parser@8.59.2': - resolution: {integrity: sha512-plR3pp6D+SSUn1HM7xvSkx12/DhoHInI2YF35KAcVFNZvlC0gtrWqx7Qq1oH2Ssgi0vlFRCTbP+DZc7B9+TtsQ==} - 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/project-service@8.59.2': - resolution: {integrity: sha512-+2hqvEkeyf/0FBor67duF0Ll7Ot8jyKzDQOSrxazF/danillRq2DwR9dLptsXpoZQqxE1UisSmoZewrlPas9Vw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/scope-manager@8.59.2': - resolution: {integrity: sha512-JzfyEpEtOU89CcFSwyNS3mu4MLvLSXqnmX05+aKBDM+TdR5jzcGOEBwxwGNxrEQ7p/z6kK2WyioCGBf2zZBnvg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.59.2': - resolution: {integrity: sha512-BKK4alN7oi4C/zv4VqHQ+uRU+lTa6JGIZ7s1juw7b3RHo9OfKB+bKX3u0iVZetdsUCBBkSbdWbarJbmN0fTeSw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/type-utils@8.59.2': - resolution: {integrity: sha512-nhqaj1nmTdVVl/BP5omXNRGO38jn5iosis2vbdmupF2txCf8ylWT8lx+JlvMYYVqzGVKtjojUFoQ3JRWK+mfzQ==} - 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/types@8.59.2': - resolution: {integrity: sha512-e82GVOE8Ps3E++Egvb6Y3Dw0S10u8NkQ9KXmtRhCWJJ8kDhOJTvtMAWnFL16kB1583goCWXsr0NieKCZMs2/0Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.59.2': - resolution: {integrity: sha512-o0XPGNwcWw+FIwStOWn+BwBuEmL6QXP0rsvAFg7ET1dey1Nr6Wb1ac8p5HEsK0ygO/6mUxlk+YWQD9xcb/nnXg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/utils@8.59.2': - resolution: {integrity: sha512-Juw3EinkXqjaffxz6roowvV7GZT/kET5vSKKZT6upl5TXdWkLkYmNPXwDDL2Vkt2DPn0nODIS4egC/0AGxKo/Q==} - 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.59.2': - resolution: {integrity: sha512-NwjLUnGy8/Zfx23fl50tRC8rYaYnM52xNRYFAXvmiil9yh1+K6aRVQMnzW6gQB/1DLgWt977lYQn7C+wtgXZiA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -1078,9 +992,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - ajv@6.15.0: - resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1127,10 +1038,6 @@ packages: bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - balanced-match@4.0.4: - resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} - engines: {node: 18 || 20 || >=22} - bcp-47-match@2.0.3: resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} @@ -1140,10 +1047,6 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} - engines: {node: 18 || 20 || >=22} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1231,10 +1134,6 @@ packages: typescript: optional: true - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - crossws@0.3.5: resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} @@ -1277,9 +1176,6 @@ packages: decode-named-character-reference@1.3.0: resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deep-object-diff@1.1.9: resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} @@ -1363,72 +1259,10 @@ packages: engines: {node: '>=18'} hasBin: true - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-plugin-prettier@5.5.5: - resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - 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.3.0: - resolution: {integrity: sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw==} - 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} - - 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'} - estree-util-attach-comments@3.0.0: resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} @@ -1453,10 +1287,6 @@ packages: estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} @@ -1470,18 +1300,6 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-string-truncated-width@3.0.3: resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} @@ -1500,21 +1318,6 @@ packages: picomatch: optional: true - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.4.2: - resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} - flattie@1.1.1: resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} engines: {node: '>=8'} @@ -1538,10 +1341,6 @@ packages: github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - h3@1.15.11: resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} @@ -1624,22 +1423,10 @@ 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'} - - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} @@ -1677,18 +1464,10 @@ packages: engines: {node: '>=20'} hasBin: true - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} @@ -1705,9 +1484,6 @@ packages: resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1715,39 +1491,19 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - 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==} - jsonc-parser@3.3.1: resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - klona@2.0.6: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -1936,10 +1692,6 @@ packages: micromark@4.0.2: resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - minimatch@10.2.5: - resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} - engines: {node: 18 || 20 || >=22} - mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -1956,9 +1708,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - neotraverse@0.6.18: resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} engines: {node: '>= 10'} @@ -1994,22 +1743,10 @@ packages: oniguruma-to-es@4.3.6: resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - p-limit@7.3.0: resolution: {integrity: sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==} engines: {node: '>=20'} - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - p-queue@9.2.0: resolution: {integrity: sha512-dWgLE8AH0HjQ9fe74pUkKkvzzYT18Inp4zra3lKHnnwqGvcfcUBrvF2EAVX+envufDNBOzpPq/IBUONDbI7+3g==} engines: {node: '>=20'} @@ -2042,14 +1779,6 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -2081,19 +1810,6 @@ packages: resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.1: - resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} - engines: {node: '>=6.0.0'} - - prettier@3.8.3: - resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} - engines: {node: '>=14'} - hasBin: true - prismjs@1.30.0: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} @@ -2101,10 +1817,6 @@ packages: property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} @@ -2225,14 +1937,6 @@ packages: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - shiki@3.23.0: resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==} @@ -2301,10 +2005,6 @@ packages: engines: {node: '>=16'} hasBin: true - synckit@0.11.12: - resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} - engines: {node: ^14.18.0 || >=16.0.0} - tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} @@ -2333,26 +2033,9 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - 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'} - - typescript-eslint@8.59.2: - resolution: {integrity: sha512-pJw051uomb3ZeCzGTpRb8RbEqB5Y4WWet8gl/GcTlU35BSx0PVdZ86/bqkQCyKKuraVQEK7r6kBHQXF+fBhkoQ==} - 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@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} @@ -2471,9 +2154,6 @@ packages: uploadthing: optional: true - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -2582,20 +2262,11 @@ packages: resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} engines: {node: '>=4'} - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} hasBin: true - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - xxhash-wasm@1.1.0: resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} @@ -2603,10 +2274,6 @@ packages: resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} engines: {node: ^20.19.0 || ^22.12.0 || >=23} - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - yocto-queue@1.2.2: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} @@ -2744,6 +2411,41 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@biomejs/biome@2.4.14': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.4.14 + '@biomejs/cli-darwin-x64': 2.4.14 + '@biomejs/cli-linux-arm64': 2.4.14 + '@biomejs/cli-linux-arm64-musl': 2.4.14 + '@biomejs/cli-linux-x64': 2.4.14 + '@biomejs/cli-linux-x64-musl': 2.4.14 + '@biomejs/cli-win32-arm64': 2.4.14 + '@biomejs/cli-win32-x64': 2.4.14 + + '@biomejs/cli-darwin-arm64@2.4.14': + optional: true + + '@biomejs/cli-darwin-x64@2.4.14': + optional: true + + '@biomejs/cli-linux-arm64-musl@2.4.14': + optional: true + + '@biomejs/cli-linux-arm64@2.4.14': + optional: true + + '@biomejs/cli-linux-x64-musl@2.4.14': + optional: true + + '@biomejs/cli-linux-x64@2.4.14': + optional: true + + '@biomejs/cli-win32-arm64@2.4.14': + optional: true + + '@biomejs/cli-win32-x64@2.4.14': + optional: true + '@capsizecss/unpack@4.0.0': dependencies: fontkitten: 1.0.3 @@ -2845,40 +2547,6 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0)': - dependencies: - eslint: 10.3.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.2': {} - - '@eslint/config-array@0.23.5': - dependencies: - '@eslint/object-schema': 3.0.5 - debug: 4.4.3 - minimatch: 10.2.5 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.5.5': - dependencies: - '@eslint/core': 1.2.1 - - '@eslint/core@1.2.1': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/js@10.0.1(eslint@10.3.0)': - optionalDependencies: - eslint: 10.3.0 - - '@eslint/object-schema@3.0.5': {} - - '@eslint/plugin-kit@0.7.1': - dependencies: - '@eslint/core': 1.2.1 - levn: 0.4.1 - '@expressive-code/core@0.41.7': dependencies: '@ctrl/tinycolor': 4.2.0 @@ -2904,22 +2572,6 @@ snapshots: dependencies: '@expressive-code/core': 0.41.7 - '@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': {} - '@img/colour@1.1.0': {} '@img/sharp-darwin-arm64@0.34.5': @@ -3192,8 +2844,6 @@ snapshots: '@pagefind/windows-x64@1.5.2': optional: true - '@pkgr/core@0.2.9': {} - '@rollup/pluginutils@5.3.0(rollup@4.60.3)': dependencies: '@types/estree': 1.0.8 @@ -3365,8 +3015,6 @@ snapshots: '@types/deep-eql@4.0.2': {} - '@types/esrecurse@4.3.1': {} - '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.8 @@ -3384,8 +3032,6 @@ snapshots: '@types/js-yaml@4.0.9': {} - '@types/json-schema@7.0.15': {} - '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -3418,97 +3064,6 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0)(typescript@6.0.3))(eslint@10.3.0)(typescript@6.0.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.2(eslint@10.3.0)(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.59.2 - '@typescript-eslint/type-utils': 8.59.2(eslint@10.3.0)(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.2(eslint@10.3.0)(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.59.2 - eslint: 10.3.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@6.0.3) - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.59.2(eslint@10.3.0)(typescript@6.0.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.59.2 - '@typescript-eslint/types': 8.59.2 - '@typescript-eslint/typescript-estree': 8.59.2(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.59.2 - debug: 4.4.3 - eslint: 10.3.0 - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.59.2(typescript@6.0.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.59.2(typescript@6.0.3) - '@typescript-eslint/types': 8.59.2 - debug: 4.4.3 - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.59.2': - dependencies: - '@typescript-eslint/types': 8.59.2 - '@typescript-eslint/visitor-keys': 8.59.2 - - '@typescript-eslint/tsconfig-utils@8.59.2(typescript@6.0.3)': - dependencies: - typescript: 6.0.3 - - '@typescript-eslint/type-utils@8.59.2(eslint@10.3.0)(typescript@6.0.3)': - dependencies: - '@typescript-eslint/types': 8.59.2 - '@typescript-eslint/typescript-estree': 8.59.2(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.2(eslint@10.3.0)(typescript@6.0.3) - debug: 4.4.3 - eslint: 10.3.0 - ts-api-utils: 2.5.0(typescript@6.0.3) - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.59.2': {} - - '@typescript-eslint/typescript-estree@8.59.2(typescript@6.0.3)': - dependencies: - '@typescript-eslint/project-service': 8.59.2(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.59.2(typescript@6.0.3) - '@typescript-eslint/types': 8.59.2 - '@typescript-eslint/visitor-keys': 8.59.2 - debug: 4.4.3 - minimatch: 10.2.5 - semver: 7.7.4 - tinyglobby: 0.2.16 - ts-api-utils: 2.5.0(typescript@6.0.3) - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.59.2(eslint@10.3.0)(typescript@6.0.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) - '@typescript-eslint/scope-manager': 8.59.2 - '@typescript-eslint/types': 8.59.2 - '@typescript-eslint/typescript-estree': 8.59.2(typescript@6.0.3) - eslint: 10.3.0 - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.59.2': - dependencies: - '@typescript-eslint/types': 8.59.2 - eslint-visitor-keys: 5.0.1 - '@ungap/structured-clone@1.3.0': {} '@vitest/expect@4.1.5': @@ -3558,13 +3113,6 @@ snapshots: acorn@8.16.0: {} - 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: {} anymatch@3.1.3: @@ -3686,8 +3234,6 @@ snapshots: bail@2.0.2: {} - balanced-match@4.0.4: {} - bcp-47-match@2.0.3: {} bcp-47@2.1.0: @@ -3698,10 +3244,6 @@ snapshots: boolbase@1.0.0: {} - brace-expansion@5.0.5: - dependencies: - balanced-match: 4.0.4 - callsites@3.1.0: {} ccount@2.0.1: {} @@ -3759,12 +3301,6 @@ snapshots: optionalDependencies: typescript: 6.0.3 - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - crossws@0.3.5: dependencies: uncrypto: 0.1.3 @@ -3805,8 +3341,6 @@ snapshots: dependencies: character-entities: 2.0.2 - deep-is@0.1.4: {} - deep-object-diff@1.1.9: {} defu@6.1.7: {} @@ -3906,85 +3440,8 @@ snapshots: '@esbuild/win32-ia32': 0.27.7 '@esbuild/win32-x64': 0.27.7 - escape-string-regexp@4.0.0: {} - escape-string-regexp@5.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.3.0): - dependencies: - eslint: 10.3.0 - - eslint-plugin-prettier@5.5.5(eslint-config-prettier@10.1.8(eslint@10.3.0))(eslint@10.3.0)(prettier@3.8.3): - dependencies: - eslint: 10.3.0 - prettier: 3.8.3 - prettier-linter-helpers: 1.0.1 - synckit: 0.11.12 - optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@10.3.0) - - eslint-scope@9.1.2: - dependencies: - '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.8 - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@5.0.1: {} - - eslint@10.3.0: - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) - '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5 - '@eslint/config-helpers': 0.5.5 - '@eslint/core': 1.2.1 - '@eslint/plugin-kit': 0.7.1 - '@humanfs/node': 0.16.8 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - 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: 8.0.0 - 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.5 - natural-compare: 1.4.0 - optionator: 0.9.4 - 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 - - esquery@1.7.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - estree-util-attach-comments@3.0.0: dependencies: '@types/estree': 1.0.8 @@ -4020,8 +3477,6 @@ snapshots: dependencies: '@types/estree': 1.0.8 - esutils@2.0.3: {} - eventemitter3@5.0.4: {} expect-type@1.3.0: {} @@ -4035,14 +3490,6 @@ snapshots: extend@3.0.2: {} - fast-deep-equal@3.1.3: {} - - fast-diff@1.3.0: {} - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - fast-string-truncated-width@3.0.3: {} fast-string-width@3.0.2: @@ -4057,22 +3504,6 @@ snapshots: optionalDependencies: picomatch: 4.0.4 - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.4.2 - keyv: 4.5.4 - - flatted@3.4.2: {} - flattie@1.1.1: {} fontace@0.4.1: @@ -4092,10 +3523,6 @@ snapshots: github-slugger@2.0.0: {} - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - h3@1.15.11: dependencies: cookie-es: 1.2.3 @@ -4313,17 +3740,11 @@ snapshots: dependencies: safer-buffer: 2.1.2 - ignore@5.3.2: {} - - ignore@7.0.5: {} - import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - imurmurhash@0.1.4: {} - inline-style-parser@0.2.7: {} inquirer@13.4.2(@types/node@25.6.0): @@ -4355,14 +3776,8 @@ snapshots: is-docker@4.0.0: {} - is-extglob@2.1.1: {} - is-fullwidth-code-point@3.0.0: {} - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - is-hexadecimal@2.0.1: {} is-inside-container@1.0.0: @@ -4375,41 +3790,20 @@ snapshots: dependencies: is-inside-container: 1.0.0 - isexe@2.0.0: {} - js-tokens@4.0.0: {} js-yaml@4.1.1: dependencies: argparse: 2.0.1 - json-buffer@3.0.1: {} - json-parse-even-better-errors@2.3.1: {} - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - jsonc-parser@3.3.1: {} - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - klona@2.0.6: {} - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - lines-and-columns@1.2.4: {} - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - longest-streak@3.1.0: {} lru-cache@11.3.6: {} @@ -4889,10 +4283,6 @@ snapshots: transitivePeerDependencies: - supports-color - minimatch@10.2.5: - dependencies: - brace-expansion: 5.0.5 - mrmime@2.0.1: {} ms@2.1.3: {} @@ -4901,8 +4291,6 @@ snapshots: nanoid@3.3.12: {} - natural-compare@1.4.0: {} - neotraverse@0.6.18: {} nlcst-to-string@4.0.0: @@ -4937,27 +4325,10 @@ snapshots: regex: 6.1.0 regex-recursion: 6.0.2 - 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 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - p-limit@7.3.0: dependencies: yocto-queue: 1.2.2 - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - p-queue@9.2.0: dependencies: eventemitter3: 5.0.4 @@ -5011,10 +4382,6 @@ snapshots: dependencies: entities: 6.0.1 - path-exists@4.0.0: {} - - path-key@3.1.1: {} - pathe@2.0.3: {} piccolore@0.1.3: {} @@ -5041,20 +4408,10 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.1: - dependencies: - fast-diff: 1.3.0 - - prettier@3.8.3: {} - prismjs@1.30.0: {} property-information@7.1.0: {} - punycode@2.3.1: {} - radix3@1.1.2: {} readdirp@5.0.0: {} @@ -5300,12 +4657,6 @@ snapshots: '@img/sharp-win32-ia32': 0.34.5 '@img/sharp-win32-x64': 0.34.5 - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - shiki@3.23.0: dependencies: '@shikijs/core': 3.23.0 @@ -5388,10 +4739,6 @@ snapshots: picocolors: 1.1.1 sax: 1.6.0 - synckit@0.11.12: - dependencies: - '@pkgr/core': 0.2.9 - tiny-inflate@1.0.3: {} tinybench@2.9.0: {} @@ -5411,27 +4758,8 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.5.0(typescript@6.0.3): - dependencies: - typescript: 6.0.3 - tslib@2.8.1: {} - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - typescript-eslint@8.59.2(eslint@10.3.0)(typescript@6.0.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0)(typescript@6.0.3))(eslint@10.3.0)(typescript@6.0.3) - '@typescript-eslint/parser': 8.59.2(eslint@10.3.0)(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.59.2(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.2(eslint@10.3.0)(typescript@6.0.3) - eslint: 10.3.0 - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - typescript@6.0.3: {} ufo@1.6.4: {} @@ -5517,10 +4845,6 @@ snapshots: ofetch: 1.5.1 ufo: 1.6.4 - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - util-deprecate@1.0.2: {} vfile-location@5.0.3: @@ -5585,23 +4909,15 @@ snapshots: which-pm-runs@1.1.0: {} - which@2.0.2: - dependencies: - isexe: 2.0.0 - why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 stackback: 0.0.2 - word-wrap@1.2.5: {} - xxhash-wasm@1.1.0: {} yargs-parser@22.0.0: {} - yocto-queue@0.1.0: {} - yocto-queue@1.2.2: {} zod@4.4.3: {} diff --git a/src/commands/pull.ts b/src/commands/pull.ts index ea1f77d..8bf872a 100644 --- a/src/commands/pull.ts +++ b/src/commands/pull.ts @@ -1,13 +1,13 @@ -import { Command } from 'commander'; +import chalk from 'chalk'; +import type { Command } from 'commander'; +import inquirer from 'inquirer'; +import { apiPull } from '../lib/api'; import { diff } from '../lib/diff'; import { readFiles } from '../lib/readFiles'; -import { getGlobalOptions } from '../util/options'; -import { apiPull as apiPull } from '../lib/api'; -import inquirer from 'inquirer'; -import chalk from 'chalk'; -import { printDiff } from '../util/print'; import { writeFiles } from '../lib/writeFiles'; import { log } from '../util/logger'; +import { getGlobalOptions } from '../util/options'; +import { printDiff } from '../util/print'; interface CommandOptions { yes?: boolean; diff --git a/src/commands/push.ts b/src/commands/push.ts index 096f51f..337be5f 100644 --- a/src/commands/push.ts +++ b/src/commands/push.ts @@ -1,15 +1,15 @@ import chalk from 'chalk'; -import { Command } from 'commander'; -import inquirer from 'inquirer'; import cliProgress from 'cli-progress'; +import type { Command } from 'commander'; +import inquirer from 'inquirer'; import { apiPull, apiPush, apiPushAll } from '../lib/api'; import { diff } from '../lib/diff'; +import { flattenAllTranslations, flattenTranslations } from '../lib/dotObject'; import { readFiles } from '../lib/readFiles'; +import { CliError } from '../util/errors'; +import { log } from '../util/logger'; import { getGlobalOptions } from '../util/options'; import { printDiff } from '../util/print'; -import { flattenTranslations, flattenAllTranslations } from '../lib/dotObject'; -import { log } from '../util/logger'; -import { CliError } from '../util/errors'; interface CommandOptions { yes?: boolean; diff --git a/src/commands/status.ts b/src/commands/status.ts index aa6abfe..2ef1f28 100644 --- a/src/commands/status.ts +++ b/src/commands/status.ts @@ -1,13 +1,12 @@ -import { Command } from 'commander'; - -import { getGlobalOptions } from '../util/options'; -import { readFiles } from '../lib/readFiles'; +import chalk from 'chalk'; +import type { Command } from 'commander'; import { apiPull } from '../lib/api'; import { diff } from '../lib/diff'; -import chalk from 'chalk'; -import { printDiff } from '../util/print'; -import { log } from '../util/logger'; +import { readFiles } from '../lib/readFiles'; import { CliError } from '../util/errors'; +import { log } from '../util/logger'; +import { getGlobalOptions } from '../util/options'; +import { printDiff } from '../util/print'; interface CommandOptions { direction: 'remote' | 'local' | 'both'; diff --git a/src/lib/api.ts b/src/lib/api.ts index 0a19877..6bd0a98 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -1,4 +1,4 @@ -import { +import type { FlatTranslations, ImportResponse, ProjectLocale, diff --git a/src/lib/diff.ts b/src/lib/diff.ts index 4e4f6ef..4431557 100644 --- a/src/lib/diff.ts +++ b/src/lib/diff.ts @@ -1,5 +1,5 @@ import { detailedDiff } from 'deep-object-diff'; -import { DiffRecord, PushOptions, Translations, TranslationValue } from '../../types'; +import type { DiffRecord, PushOptions, Translations, TranslationValue } from '../../types'; import { dotObject } from './dotObject'; interface DetailedDiff { diff --git a/src/lib/dotObject.ts b/src/lib/dotObject.ts index 613a0f1..31c7bdb 100644 --- a/src/lib/dotObject.ts +++ b/src/lib/dotObject.ts @@ -1,4 +1,4 @@ -import { DiffRecord, TranslationValue, Translations } from '../../types'; +import type { DiffRecord, Translations, TranslationValue } from '../../types'; type DiffValue = string | undefined; type DiffObject = { [key: string]: DiffValue | DiffObject }; diff --git a/src/lib/readFiles.ts b/src/lib/readFiles.ts index 5360482..0d632a6 100644 --- a/src/lib/readFiles.ts +++ b/src/lib/readFiles.ts @@ -1,7 +1,6 @@ -import { existsSync, readdirSync, statSync } from 'fs'; -import { readFile } from 'fs'; -import { join } from 'path'; -import { Translations } from '../../types'; +import { existsSync, readdirSync, readFile, statSync } from 'node:fs'; +import { join } from 'node:path'; +import type { Translations } from '../../types'; import { CliError } from '../util/errors'; import { log } from '../util/logger'; diff --git a/src/lib/writeFiles.ts b/src/lib/writeFiles.ts index f114653..bb091ab 100644 --- a/src/lib/writeFiles.ts +++ b/src/lib/writeFiles.ts @@ -1,6 +1,6 @@ -import { mkdirSync, writeFileSync } from 'fs'; -import { join } from 'path'; -import { Config, Translations } from '../../types'; +import { mkdirSync, writeFileSync } from 'node:fs'; +import { join } from 'node:path'; +import type { Config, Translations } from '../../types'; import { splitIntoNamespaces } from '../util/namespaces'; export const writeFiles = (translations: Translations, options: Config) => { diff --git a/src/util/config.ts b/src/util/config.ts index 7d93369..dfc3c88 100644 --- a/src/util/config.ts +++ b/src/util/config.ts @@ -1,5 +1,5 @@ -import { Config } from '../../types'; import { cosmiconfig } from 'cosmiconfig'; +import type { Config } from '../../types'; const explorer = cosmiconfig('loco'); diff --git a/src/util/namespaces.ts b/src/util/namespaces.ts index 9413993..88029b3 100644 --- a/src/util/namespaces.ts +++ b/src/util/namespaces.ts @@ -1,4 +1,4 @@ -import { TranslationValue } from '../../types'; +import type { TranslationValue } from '../../types'; export const splitIntoNamespaces = ( json: TranslationValue, diff --git a/src/util/options.ts b/src/util/options.ts index 469b87f..bd57aae 100644 --- a/src/util/options.ts +++ b/src/util/options.ts @@ -1,4 +1,4 @@ -import { Command } from 'commander'; +import type { Command } from 'commander'; import type { Config } from '../../types'; import { readConfig } from './config'; import { CliError } from './errors'; diff --git a/src/util/string.ts b/src/util/string.ts index 073f62f..7b03f49 100644 --- a/src/util/string.ts +++ b/src/util/string.ts @@ -2,5 +2,5 @@ export function truncateString(str: string, num = 40) { if (str.length <= num) { return str; } - return str.slice(0, num) + '…'; + return `${str.slice(0, num)}…`; } diff --git a/test/api.test.ts b/test/api.test.ts index 3dafed0..14dd20f 100644 --- a/test/api.test.ts +++ b/test/api.test.ts @@ -1,14 +1,14 @@ -import { describe, test, expect, vi, beforeEach } from 'vitest'; +import { beforeEach, describe, expect, test, vi } from 'vitest'; +import { apiPull, apiPush, apiPushAll } from '../src/lib/api'; +import { HTTPError } from '../src/util/errors'; import { - mockTranslations, - mockSingleLocaleTranslations, + createMockErrorResponse, + createMockResponse, mockMultipleLocales, mockSingleLocale, - createMockResponse, - createMockErrorResponse + mockSingleLocaleTranslations, + mockTranslations } from './mockdata/mockApi'; -import { apiPull, apiPush, apiPushAll } from '../src/lib/api'; -import { HTTPError } from '../src/util/errors'; const mockFetch = vi.fn(); vi.stubGlobal('fetch', mockFetch); @@ -79,7 +79,9 @@ describe('apiPull', () => { }); test('throws HTTPError on 500 Server Error', async () => { - mockFetch.mockResolvedValueOnce(createMockErrorResponse(500, 'Internal Server Error') as Response); + mockFetch.mockResolvedValueOnce( + createMockErrorResponse(500, 'Internal Server Error') as Response + ); const error = await apiPull('test-api-key').catch(e => e); expect(error).toBeInstanceOf(HTTPError); diff --git a/test/commands/pull.test.ts b/test/commands/pull.test.ts index 691c939..cf7bc61 100644 --- a/test/commands/pull.test.ts +++ b/test/commands/pull.test.ts @@ -1,5 +1,5 @@ -import { describe, test, expect, vi, beforeEach } from 'vitest'; -import { Command } from 'commander'; +import type { Command } from 'commander'; +import { beforeEach, describe, expect, test, vi } from 'vitest'; vi.mock('../../src/util/options'); vi.mock('../../src/lib/readFiles'); @@ -8,13 +8,13 @@ vi.mock('../../src/lib/writeFiles'); vi.mock('../../src/util/logger'); vi.mock('inquirer'); -import { getGlobalOptions } from '../../src/util/options'; -import { readFiles } from '../../src/lib/readFiles'; +import inquirer from 'inquirer'; +import pull from '../../src/commands/pull'; import { apiPull } from '../../src/lib/api'; +import { readFiles } from '../../src/lib/readFiles'; import { writeFiles } from '../../src/lib/writeFiles'; import { log } from '../../src/util/logger'; -import inquirer from 'inquirer'; -import pull from '../../src/commands/pull'; +import { getGlobalOptions } from '../../src/util/options'; const mockGetGlobalOptions = vi.mocked(getGlobalOptions); const mockReadFiles = vi.mocked(readFiles); @@ -120,6 +120,8 @@ describe('pull command', () => { await pull({}, mockProgram); - expect(mockLog.log).toHaveBeenCalledWith(expect.stringContaining('Pulling will have the following effect')); + expect(mockLog.log).toHaveBeenCalledWith( + expect.stringContaining('Pulling will have the following effect') + ); }); }); diff --git a/test/commands/push.test.ts b/test/commands/push.test.ts index 9a04a66..e4f9158 100644 --- a/test/commands/push.test.ts +++ b/test/commands/push.test.ts @@ -1,5 +1,5 @@ -import { describe, test, expect, vi, beforeEach } from 'vitest'; -import { Command } from 'commander'; +import type { Command } from 'commander'; +import { beforeEach, describe, expect, test, vi } from 'vitest'; vi.mock('../../src/util/options'); vi.mock('../../src/lib/readFiles'); @@ -16,13 +16,13 @@ vi.mock('cli-progress', () => ({ } })); -import { getGlobalOptions } from '../../src/util/options'; -import { readFiles } from '../../src/lib/readFiles'; -import { apiPull, apiPush, apiPushAll } from '../../src/lib/api'; -import { log } from '../../src/util/logger'; -import { CliError } from '../../src/util/errors'; import inquirer from 'inquirer'; import push from '../../src/commands/push'; +import { apiPull, apiPush, apiPushAll } from '../../src/lib/api'; +import { readFiles } from '../../src/lib/readFiles'; +import { CliError } from '../../src/util/errors'; +import { log } from '../../src/util/logger'; +import { getGlobalOptions } from '../../src/util/options'; const mockGetGlobalOptions = vi.mocked(getGlobalOptions); const mockReadFiles = vi.mocked(readFiles); @@ -72,9 +72,7 @@ describe('push command', () => { await push({ status: 'fuzzy' }, mockProgram); - expect(mockLog.warn).toHaveBeenCalledWith( - expect.stringContaining('status option is removed') - ); + expect(mockLog.warn).toHaveBeenCalledWith(expect.stringContaining('status option is removed')); }); test('shows deprecation warning for --tag', async () => { @@ -84,9 +82,7 @@ describe('push command', () => { await push({ tag: 'new' }, mockProgram); - expect(mockLog.warn).toHaveBeenCalledWith( - expect.stringContaining('tag option is removed') - ); + expect(mockLog.warn).toHaveBeenCalledWith(expect.stringContaining('tag option is removed')); }); test('uploads each locale', async () => { @@ -140,9 +136,7 @@ describe('push command', () => { await push({}, mockProgram); - expect(mockLog.warn).toHaveBeenCalledWith( - expect.stringContaining('delete-absent') - ); + expect(mockLog.warn).toHaveBeenCalledWith(expect.stringContaining('delete-absent')); }); test('does not push when only deletions exist and delete-absent is false', async () => { @@ -153,9 +147,7 @@ describe('push command', () => { await push({}, mockProgram); - expect(mockLog.info).toHaveBeenCalledWith( - expect.stringContaining('delete-absent') - ); + expect(mockLog.info).toHaveBeenCalledWith(expect.stringContaining('delete-absent')); expect(mockLog.success).toHaveBeenCalledWith('Everything up to date!'); expect(mockApiPush).not.toHaveBeenCalled(); }); @@ -186,12 +178,9 @@ describe('push command', () => { await push({}, mockProgram); - expect(mockApiPush).toHaveBeenCalledWith( - 'test-key', - 'en', - expect.any(Object), - { 'tag-new': 'from-code' } - ); + expect(mockApiPush).toHaveBeenCalledWith('test-key', 'en', expect.any(Object), { + 'tag-new': 'from-code' + }); }); test('uses apiPushAll when experimentalPushAll is enabled via CLI', async () => { diff --git a/test/commands/status.test.ts b/test/commands/status.test.ts index cbb2c94..885331f 100644 --- a/test/commands/status.test.ts +++ b/test/commands/status.test.ts @@ -1,17 +1,17 @@ -import { describe, test, expect, vi, beforeEach } from 'vitest'; -import { Command } from 'commander'; +import type { Command } from 'commander'; +import { beforeEach, describe, expect, test, vi } from 'vitest'; vi.mock('../../src/util/options'); vi.mock('../../src/lib/readFiles'); vi.mock('../../src/lib/api'); vi.mock('../../src/util/logger'); -import { getGlobalOptions } from '../../src/util/options'; -import { readFiles } from '../../src/lib/readFiles'; +import status from '../../src/commands/status'; import { apiPull } from '../../src/lib/api'; -import { log } from '../../src/util/logger'; +import { readFiles } from '../../src/lib/readFiles'; import { CliError } from '../../src/util/errors'; -import status from '../../src/commands/status'; +import { log } from '../../src/util/logger'; +import { getGlobalOptions } from '../../src/util/options'; const mockGetGlobalOptions = vi.mocked(getGlobalOptions); const mockReadFiles = vi.mocked(readFiles); diff --git a/test/dotObject.test.ts b/test/dotObject.test.ts index 18b7203..71fa452 100644 --- a/test/dotObject.test.ts +++ b/test/dotObject.test.ts @@ -1,4 +1,4 @@ -import { expect, test, describe } from 'vitest'; +import { describe, expect, test } from 'vitest'; import { dotObject, flattenAllTranslations } from '../src/lib/dotObject'; import { local } from './mockdata/mockDiff'; diff --git a/test/util/config.test.ts b/test/util/config.test.ts index 4f87663..4424db4 100644 --- a/test/util/config.test.ts +++ b/test/util/config.test.ts @@ -1,4 +1,4 @@ -import { describe, test, expect, vi, beforeEach } from 'vitest'; +import { beforeEach, describe, expect, test, vi } from 'vitest'; vi.mock('cosmiconfig', () => ({ cosmiconfig: vi.fn(() => ({ diff --git a/test/util/handleAsyncErrors.test.ts b/test/util/handleAsyncErrors.test.ts index 5b09aa6..784d89c 100644 --- a/test/util/handleAsyncErrors.test.ts +++ b/test/util/handleAsyncErrors.test.ts @@ -1,6 +1,6 @@ -import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest'; -import { handleAsyncErrors } from '../../src/util/handleAsyncErrors'; +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'; import { CliError, HTTPError } from '../../src/util/errors'; +import { handleAsyncErrors } from '../../src/util/handleAsyncErrors'; describe('handleAsyncErrors', () => { let consoleSpy: ReturnType; diff --git a/test/util/options.test.ts b/test/util/options.test.ts index ff4afa8..afbdcb8 100644 --- a/test/util/options.test.ts +++ b/test/util/options.test.ts @@ -1,12 +1,12 @@ -import { describe, test, expect, vi, beforeEach } from 'vitest'; -import { Command } from 'commander'; +import type { Command } from 'commander'; +import { beforeEach, describe, expect, test, vi } from 'vitest'; vi.mock('../../src/util/config'); vi.mock('../../src/util/logger'); import { readConfig } from '../../src/util/config'; -import { log } from '../../src/util/logger'; import { CliError } from '../../src/util/errors'; +import { log } from '../../src/util/logger'; import { getGlobalOptions } from '../../src/util/options'; const mockReadConfig = vi.mocked(readConfig); @@ -54,9 +54,11 @@ describe('getGlobalOptions', () => { namespaces: false }); - const result = await getGlobalOptions(createMockProgram({ - localesDir: './from-cli' - })); + const result = await getGlobalOptions( + createMockProgram({ + localesDir: './from-cli' + }) + ); expect(result.localesDir).toBe('./from-cli'); }); @@ -68,10 +70,12 @@ describe('getGlobalOptions', () => { namespaces: true }); - const result = await getGlobalOptions(createMockProgram({ - localesDir: undefined, - namespaces: undefined - })); + const result = await getGlobalOptions( + createMockProgram({ + localesDir: undefined, + namespaces: undefined + }) + ); expect(result.localesDir).toBe('./from-file'); expect(result.namespaces).toBe(true); @@ -90,11 +94,13 @@ describe('getGlobalOptions', () => { test('accepts accessKey from CLI', async () => { mockReadConfig.mockResolvedValue({}); - const result = await getGlobalOptions(createMockProgram({ - accessKey: 'cli-key', - localesDir: './locales', - namespaces: false - })); + const result = await getGlobalOptions( + createMockProgram({ + accessKey: 'cli-key', + localesDir: './locales', + namespaces: false + }) + ); expect(result.accessKey).toBe('cli-key'); }); @@ -119,9 +125,7 @@ describe('getGlobalOptions', () => { await getGlobalOptions(createMockProgram({})); - expect(mockLog.warn).toHaveBeenCalledWith( - expect.stringContaining('defaultLanguage') - ); + expect(mockLog.warn).toHaveBeenCalledWith(expect.stringContaining('defaultLanguage')); }); test('logs when reading from config file', async () => { diff --git a/test/writeFiles.test.ts b/test/writeFiles.test.ts index d6cfb88..bae9c3f 100644 --- a/test/writeFiles.test.ts +++ b/test/writeFiles.test.ts @@ -1,12 +1,12 @@ -import { describe, test, expect, vi, beforeEach } from 'vitest'; -import { join } from 'path'; +import { join } from 'node:path'; +import { beforeEach, describe, expect, test, vi } from 'vitest'; vi.mock('fs', () => ({ mkdirSync: vi.fn(), writeFileSync: vi.fn() })); -import { mkdirSync, writeFileSync } from 'fs'; +import { mkdirSync, writeFileSync } from 'node:fs'; import { writeFiles } from '../src/lib/writeFiles'; const mockMkdirSync = vi.mocked(mkdirSync);