diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 7d7198faf..000000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -/src/worker/*.js diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 1f192dc04..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,22 +0,0 @@ -/**@type {import('eslint').Linter.Config} */ -// eslint-disable-next-line no-undef -module.exports = { - root: true, - parser: "@typescript-eslint/parser", - plugins: ["@typescript-eslint"], - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "prettier", - ], - rules: { - "no-console": "error", - "@typescript-eslint/explicit-module-boundary-types": 0, - "@typescript-eslint/no-non-null-assertion": 0, - "@typescript-eslint/no-floating-promises": "error", - }, - ignorePatterns: ["test-fixtures/**"], - parserOptions: { - project: "./tsconfig.json", - }, -}; diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml new file mode 100644 index 000000000..8e0d10ffd --- /dev/null +++ b/.github/codeql/codeql-config.yml @@ -0,0 +1,4 @@ +name: "CodeQL Config" + +paths-ignore: + - test-fixtures diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 763c50e53..d0c7cbca4 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -6,7 +6,7 @@ This is the official Prettier VS Code extension (`prettier.prettier-vscode`). It - Use `pnpm` as the package manager - Run `pnpm install` to install dependencies -- Run `pnpm webpack` to build for development +- Run `pnpm compile` to build for development - Run `pnpm test` to run tests (no VS Code instance can be running) - Run `pnpm lint` to check linting - Run `pnpm prettier` to format code @@ -23,10 +23,9 @@ Core components: - `src/extension.ts` - Extension activation, creates ModuleResolver, PrettierEditService, and StatusBar - `src/PrettierEditService.ts` - Registers VS Code document formatting providers, handles format requests - `src/ModuleResolver.ts` - Resolves local/global Prettier installations, falls back to bundled Prettier -- `src/PrettierWorkerInstance.ts` - Runs Prettier v3+ in a worker thread for async formatting -- `src/PrettierMainThreadInstance.ts` - Runs Prettier v2 synchronously on main thread +- `src/PrettierInstance.ts` - Interface for Prettier loading, with `PrettierMainThreadInstance` and `PrettierWorkerInstance` implementations -Webpack produces two bundles: +esbuild produces two bundles: - Node bundle (`dist/extension.js`) for desktop VS Code - Web bundle (`dist/web-extension.js`) for vscode.dev/browser @@ -70,7 +69,7 @@ When reviewing pull requests, focus on: ### Performance - Avoid blocking the extension host main thread -- Prettier v3+ should use worker threads via `PrettierWorkerInstance` +- `PrettierWorkerInstance` runs Prettier in a worker thread to avoid blocking - Module and config resolution results are cached appropriately ### Browser Compatibility diff --git a/.github/instructions/typescript.instructions.md b/.github/instructions/typescript.instructions.md index 637f2a3e9..a7fe44f5c 100644 --- a/.github/instructions/typescript.instructions.md +++ b/.github/instructions/typescript.instructions.md @@ -27,8 +27,8 @@ This is a VS Code extension. Follow these patterns: ## Prettier Integration -- Support both Prettier v2 (sync, main thread) and v3+ (async, worker thread) -- `PrettierMainThreadInstance` for v2, `PrettierWorkerInstance` for v3+ +- Support both Prettier v2 and v3+ via `PrettierInstance` interface +- `PrettierMainThreadInstance` loads directly, `PrettierWorkerInstance` uses worker thread - Module resolution: local install → global install → bundled Prettier - Handle `.prettierrc`, `.prettierignore`, and `package.json` prettier config diff --git a/.husky/.gitignore b/.husky/.gitignore deleted file mode 100644 index 31354ec13..000000000 --- a/.husky/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_ diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index e02c24e2b..000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1 +0,0 @@ -pnpm lint-staged \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index a0a747ef0..9aec97600 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,6 +3,7 @@ "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit" }, + "eslint.useFlatConfig": true, "editor.formatOnSave": true, "editor.defaultFormatter": "prettier.prettier-vscode", "editor.formatOnType": false, diff --git a/.vscodeignore b/.vscodeignore index a8c386d98..3c662a5e6 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,5 +1,4 @@ .github/ -.husky/ .vscode/ .vscode-test/ .vscode-test-web/ @@ -14,10 +13,12 @@ test-fixtures/ .prettierrc CODE_OF_CONDUCT.md CONTRIBUTING.md -CONTRIBUTORS.md tsconfig.json -webpack.config.js -yarn.lock +tsconfig.scripts.json +eslint.config.mjs +lefthook.yml +esbuild.mjs +pnpm-lock.yaml dist/*.map node_modules/ diff --git a/CLAUDE.md b/CLAUDE.md index 640cf13c1..bd336d025 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -86,11 +86,12 @@ Web tests are located in `src/test/web/suite/` and test the extension's browser - Caches resolved modules and configurations - Handles Workspace Trust restrictions -**Prettier Instance Wrappers**: +**Prettier Instance** (`PrettierInstance.ts`, `PrettierMainThreadInstance.ts`, `PrettierWorkerInstance.ts`): -- `PrettierWorkerInstance.ts`: Runs Prettier v3+ in a worker thread for async formatting -- `PrettierMainThreadInstance.ts`: Runs Prettier v2 synchronously on main thread -- Worker script lives in `src/worker/prettier-instance-worker.js` +- `PrettierInstance` is an interface with two implementations +- `PrettierMainThreadInstance` loads Prettier directly via `require()` +- `PrettierWorkerInstance` loads Prettier in a worker thread to avoid blocking +- Works with both Prettier v2 and v3+ ### Bundling diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index face2bcf1..7f96a723f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,7 +25,7 @@ Thank you for your interest in contributing to the Prettier VS Code extension! F 3. Build the extension: ```bash - pnpm webpack + pnpm compile ``` ## Development @@ -34,9 +34,8 @@ Thank you for your interest in contributing to the Prettier VS Code extension! F ```bash pnpm install # Install dependencies -pnpm webpack # Build for development -pnpm webpack-dev # Build and watch for changes -pnpm watch # TypeScript watch mode (without webpack) +pnpm compile # Build for development (esbuild + type checking) +pnpm watch # Build and watch for changes pnpm lint # Run ESLint pnpm prettier # Format code with Prettier pnpm test # Run tests @@ -46,7 +45,7 @@ pnpm test-compile # Compile tests only ### Running the Extension 1. Open this repository in VS Code -2. Run `pnpm webpack` to build +2. Run `pnpm compile` to build 3. Press `F5` or go to Debug sidebar → "Run Extension" 4. A new VS Code window will open with the extension loaded @@ -92,8 +91,7 @@ Key components: - `PrettierEditService.ts` - Handles document formatting - `ModuleResolver.ts` - Resolves Prettier installations (local, global, or bundled) -- `PrettierWorkerInstance.ts` - Runs Prettier v3+ in a worker thread -- `PrettierMainThreadInstance.ts` - Runs Prettier v2 on the main thread +- `PrettierInstance.ts` - Interface for Prettier, with `PrettierMainThreadInstance` and `PrettierWorkerInstance` implementations ## Submitting Changes diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md deleted file mode 100644 index c48e6e0c5..000000000 --- a/CONTRIBUTORS.md +++ /dev/null @@ -1,9 +0,0 @@ -- [Cole Kennedy](https://github.com/colek42) -- [Cyril Junod](https://github.com/CiGit) -- [David Burrows](https://github.com/dburrows) -- [Jon Wolfe](https://github.com/JonathanWolfe) -- [Laurence Rowe](https://github.com/lrowe) -- [Robin Malfait](https://github.com/RobinMalfait) -- [Oliver Joseph Ash](https://github.com/OliverJAsh) -- [Nathan Totten](https://github.com/ntotten) -- [Benas Svipas](https://github.com/svipas) diff --git a/esbuild.js b/esbuild.mjs similarity index 80% rename from esbuild.js rename to esbuild.mjs index 84121132e..4009fe235 100644 --- a/esbuild.js +++ b/esbuild.mjs @@ -1,11 +1,13 @@ -const esbuild = require("esbuild"); -const fs = require("fs"); -const path = require("path"); +import esbuild from "esbuild"; +import fs from "fs"; +import path from "path"; const production = process.argv.includes("--production"); const watch = process.argv.includes("--watch"); -const extensionPackage = require("./package.json"); +const extensionPackage = JSON.parse( + fs.readFileSync(new URL("./package.json", import.meta.url), "utf-8"), +); /** * @type {import('esbuild').Plugin} @@ -30,27 +32,6 @@ const esbuildProblemMatcherPlugin = { }, }; -/** - * @type {import('esbuild').Plugin} - */ -const copyWorkerPlugin = { - name: "copy-worker", - setup(build) { - build.onEnd(() => { - const srcDir = path.join(__dirname, "src/worker"); - const destDir = path.join(__dirname, "dist/worker"); - - if (fs.existsSync(srcDir)) { - fs.mkdirSync(destDir, { recursive: true }); - fs.readdirSync(srcDir).forEach((file) => { - fs.copyFileSync(path.join(srcDir, file), path.join(destDir, file)); - }); - console.log("[copy] worker files copied"); - } - }); - }, -}; - /** * @type {import('esbuild').Plugin} */ @@ -84,7 +65,7 @@ const nodeConfig = { "process.env.EXTENSION_VERSION": JSON.stringify(extensionPackage.version), }, logLevel: "silent", - plugins: [copyWorkerPlugin, esbuildProblemMatcherPlugin], + plugins: [esbuildProblemMatcherPlugin], }; /** @@ -163,12 +144,43 @@ const webTestConfig = { plugins: [esbuildProblemMatcherPlugin], }; +function copyWorkerFile() { + // Copy to dist (for production/esbuild bundle) + const distWorkerDir = "dist/worker"; + if (!fs.existsSync(distWorkerDir)) { + fs.mkdirSync(distWorkerDir, { recursive: true }); + } + fs.copyFileSync( + "src/worker/prettier-instance-worker.js", + "dist/worker/prettier-instance-worker.js", + ); + + // Copy to out (for tests/tsc output) + const outWorkerDir = "out/worker"; + if (!fs.existsSync(outWorkerDir)) { + fs.mkdirSync(outWorkerDir, { recursive: true }); + } + fs.copyFileSync( + "src/worker/prettier-instance-worker.js", + "out/worker/prettier-instance-worker.js", + ); +} + async function main() { const nodeCtx = await esbuild.context(nodeConfig); const browserCtx = await esbuild.context(browserConfig); const webTestCtx = await esbuild.context(webTestConfig); + // Copy worker file + copyWorkerFile(); + if (watch) { + // Watch the worker file for changes + fs.watchFile("src/worker/prettier-instance-worker.js", () => { + console.log("[watch] copying worker file"); + copyWorkerFile(); + }); + await Promise.all([ nodeCtx.watch(), browserCtx.watch(), diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..177826dc7 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,79 @@ +import eslint from "@eslint/js"; +import tseslint from "typescript-eslint"; +import eslintConfigPrettier from "eslint-config-prettier"; +import globals from "globals"; + +export default tseslint.config( + // Global ignores + { + ignores: [ + "dist/**", + "out/**", + "test-fixtures/**", + "node_modules/**", + ".vscode-test/**", + ".vscode-test-web/**", + "src/worker/**", + ], + }, + + // Base ESLint recommended rules + eslint.configs.recommended, + + // TypeScript files + { + files: ["src/**/*.ts"], + extends: [...tseslint.configs.recommendedTypeChecked], + languageOptions: { + parserOptions: { + project: ["./tsconfig.json"], + tsconfigRootDir: import.meta.dirname, + }, + }, + rules: { + "no-console": "error", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-require-imports": "off", + // Relax stricter rules from recommendedTypeChecked + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/require-await": "off", + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/no-redundant-type-constituents": "off", + "@typescript-eslint/no-duplicate-type-constituents": "off", + "@typescript-eslint/no-unnecessary-type-assertion": "off", + "@typescript-eslint/no-misused-promises": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/prefer-promise-reject-errors": "off", + "@typescript-eslint/no-unused-vars": [ + "error", + { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }, + ], + }, + }, + + // Script files (mjs) + { + files: ["*.mjs", "scripts/*.mjs"], + languageOptions: { + globals: { + ...globals.node, + }, + }, + rules: { + "no-console": "off", + "no-unused-vars": [ + "error", + { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }, + ], + }, + }, + + // Prettier config (must be last to override other formatting rules) + eslintConfigPrettier, +); diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 000000000..c974c66b7 --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,11 @@ +pre-commit: + parallel: true + commands: + prettier: + glob: "**/*.{ts,json,md,yml,hbs,js,mjs}" + run: pnpm prettier --write {staged_files} + stage_fixed: true + lint: + stage_fixed: true + glob: "src/**/*.ts" + run: pnpm lint diff --git a/package.json b/package.json index 598239049..2af973755 100644 --- a/package.json +++ b/package.json @@ -69,32 +69,24 @@ "main": "./dist/extension", "browser": "./dist/web-extension", "scripts": { - "clean": "node ./scripts/clean.js", - "lint": "eslint -c .eslintrc.js --ext .ts .", - "pretest": "pnpm test-compile && node scripts/install-fixtures.js", + "clean": "node ./scripts/clean.mjs", + "lint": "eslint src *.mjs scripts", + "pretest": "pnpm test-compile && node scripts/install-fixtures.mjs", "prettier": "prettier --write .", - "compile": "pnpm check-types && node esbuild.js", + "compile": "pnpm check-types && node esbuild.mjs", "check-types": "tsc --noEmit", "watch": "pnpm run --parallel watch:esbuild watch:tsc", - "watch:esbuild": "node esbuild.js --watch", + "watch:esbuild": "node esbuild.mjs --watch", "watch:tsc": "tsc --noEmit --watch --project tsconfig.json", - "test-compile": "pnpm clean && tsc -p ./ && pnpm compile && cp -r ./src/worker ./out", + "test-compile": "pnpm clean && tsc -p ./ && pnpm compile", "test": "node ./out/test/runTests.js", - "version": "node ./scripts/version.js && git add CHANGELOG.md", + "version": "node ./scripts/version.mjs && git add CHANGELOG.md", "postversion": "git push origin main --tags", - "chrome": "pnpm webpack && vscode-test-web --browserType=chromium --extensionDevelopmentPath=. .", - "test:web": "pnpm test-compile && node ./out/test/web/runTests.js", - "prepare": "husky" - }, - "lint-staged": { - "**/*.{ts,json,md,yml,hbs,js}": [ - "prettier --write" - ], - "src/**/*.ts": [ - "eslint -c .eslintrc.js --ext .ts ." - ] + "chrome": "pnpm compile && vscode-test-web --browserType=chromium --extensionDevelopmentPath=. .", + "test:web": "pnpm test-compile && node ./out/test/web/runTests.js" }, "devDependencies": { + "@eslint/js": "^9.28.0", "@playwright/test": "^1.57.0", "@types/fs-extra": "^11.0.4", "@types/mocha": "^10.0.7", @@ -104,23 +96,22 @@ "@types/sinon": "^17.0.3", "@types/tmp": "^0.2.6", "@types/vscode": "^1.101.0", - "@typescript-eslint/eslint-plugin": "^5.45.0", - "@typescript-eslint/parser": "^5.45.0", "@vscode/test-electron": "^2.5.2", "@vscode/test-web": "^0.0.76", "@vscode/vsce": "^3.7.1", "esbuild": "^0.27.0", - "eslint": "^8.31.0", - "eslint-config-prettier": "^9.1.0", + "eslint": "^9.28.0", + "eslint-config-prettier": "^10.1.5", "fs-extra": "^11.2.0", - "husky": "^9.1.4", - "lint-staged": "^15.2.9", + "globals": "^16.2.0", + "lefthook": "^2.0.4", "mocha": "^10.7.3", "path-browserify": "^1.0.1", "process": "^0.11.10", "sinon": "^17.0.1", "tmp": "^0.2.3", "typescript": "^4.6.3", + "typescript-eslint": "^8.33.0", "util": "^0.12.4" }, "dependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d700df9b5..38f6581ee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,6 +24,9 @@ importers: specifier: ^5.2.0 version: 5.2.0 devDependencies: + '@eslint/js': + specifier: ^9.28.0 + version: 9.39.1 '@playwright/test': specifier: ^1.57.0 version: 1.57.0 @@ -51,12 +54,6 @@ importers: '@types/vscode': specifier: ^1.101.0 version: 1.106.1 - '@typescript-eslint/eslint-plugin': - specifier: ^5.45.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5) - '@typescript-eslint/parser': - specifier: ^5.45.0 - version: 5.62.0(eslint@8.57.1)(typescript@4.9.5) '@vscode/test-electron': specifier: ^2.5.2 version: 2.5.2 @@ -70,20 +67,20 @@ importers: specifier: ^0.27.0 version: 0.27.0 eslint: - specifier: ^8.31.0 - version: 8.57.1 + specifier: ^9.28.0 + version: 9.39.1 eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.2(eslint@8.57.1) + specifier: ^10.1.5 + version: 10.1.8(eslint@9.39.1) fs-extra: specifier: ^11.2.0 version: 11.3.2 - husky: - specifier: ^9.1.4 - version: 9.1.7 - lint-staged: - specifier: ^15.2.9 - version: 15.5.2 + globals: + specifier: ^16.2.0 + version: 16.5.0 + lefthook: + specifier: ^2.0.4 + version: 2.0.4 mocha: specifier: ^10.7.3 version: 10.8.2 @@ -102,6 +99,9 @@ importers: typescript: specifier: ^4.6.3 version: 4.9.5 + typescript-eslint: + specifier: ^8.33.0 + version: 8.47.0(eslint@9.39.1)(typescript@4.9.5) util: specifier: ^0.12.4 version: 0.12.5 @@ -332,26 +332,49 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.1': + resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} '@isaacs/balanced-match@4.0.1': resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} @@ -470,6 +493,9 @@ packages: '@textlint/types@15.4.0': resolution: {integrity: sha512-ZMwJgw/xjxJufOD+IB7I2Enl9Si4Hxo04B76RwUZ5cKBKzOPcmd6WvGe2F7jqdgmTdGnfMU+Bo/joQrjPNIWqg==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} @@ -509,71 +535,69 @@ packages: '@types/vscode@1.106.1': resolution: {integrity: sha512-R/HV8u2h8CAddSbX8cjpdd7B8/GnE4UjgjpuGuHcbp1xV6yh4OeqU4L1pKjlwujCrSFS0MOpwJAIs/NexMB1fQ==} - '@typescript-eslint/eslint-plugin@5.62.0': - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/eslint-plugin@8.47.0': + resolution: {integrity: sha512-fe0rz9WJQ5t2iaLfdbDc9T80GJy0AeO453q8C3YCilnGozvOyCG5t+EZtg7j7D88+c3FipfP/x+wzGnh1xp8ZA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser': ^8.47.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@5.62.0': - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/parser@8.47.0': + resolution: {integrity: sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@5.62.0': - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/project-service@8.47.0': + resolution: {integrity: sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@5.62.0': - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@8.47.0': + resolution: {integrity: sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.47.0': + resolution: {integrity: sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@5.62.0': - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/type-utils@8.47.0': + resolution: {integrity: sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@5.62.0': - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/types@8.47.0': + resolution: {integrity: sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.47.0': + resolution: {integrity: sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@5.62.0': - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/utils@8.47.0': + resolution: {integrity: sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@5.62.0': - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@8.47.0': + resolution: {integrity: sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typespec/ts-http-runtime@0.3.2': resolution: {integrity: sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==} engines: {node: '>=20.0.0'} - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@vscode/test-electron@2.5.2': resolution: {integrity: sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==} engines: {node: '>=16'} @@ -694,10 +718,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -867,10 +887,6 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} - cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} - cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -885,9 +901,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -896,10 +909,6 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1015,14 +1024,6 @@ packages: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -1119,33 +1120,37 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-prettier@9.1.2: - resolution: {integrity: sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==} + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true peerDependencies: eslint: '>=7.0.0' - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 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@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.39.1: + resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -1160,10 +1165,6 @@ packages: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -1172,16 +1173,9 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - events-universal@1.0.1: resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - expand-template@2.0.3: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} @@ -1220,9 +1214,9 @@ packages: picomatch: optional: true - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -1232,9 +1226,9 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} @@ -1302,10 +1296,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} @@ -1322,22 +1312,18 @@ packages: engines: {node: 20 || >=22} hasBin: true - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} deprecated: Glob versions prior to v9 are no longer supported - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} + engines: {node: '>=18'} globby@14.1.0: resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} @@ -1415,15 +1401,6 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - - husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} - hasBin: true - iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -1499,14 +1476,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - - is-fullwidth-code-point@5.1.0: - resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} - engines: {node: '>=18'} - is-generator-function@1.1.2: resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} @@ -1532,10 +1501,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -1544,10 +1509,6 @@ packages: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -1665,6 +1626,60 @@ packages: resolution: {integrity: sha512-KDDuvpfqSK0ZKEO2gCPedNjl5wYpfj+HNiuVRlbhd1A88S3M0ySkdf2V/EJ4NWt5dwh5PXCdcenrKK2IQJAxsg==} engines: {node: '>= 18'} + lefthook-darwin-arm64@2.0.4: + resolution: {integrity: sha512-AR63/O5UkM7Sc6x5PhP4vTuztTYRBeBroXApeWGM/8e5uZyoQug/7KTh7xhbCMDf8WJv6vdFeXAQCPSmDyPU3Q==} + cpu: [arm64] + os: [darwin] + + lefthook-darwin-x64@2.0.4: + resolution: {integrity: sha512-618DVUttSzV9egQiqTQoxGfnR240JoPWYmqRVHhiegnQKZ2lp5XJ+7NMxeRk/ih93VVOLzFO5ky3PbpxTmJgjQ==} + cpu: [x64] + os: [darwin] + + lefthook-freebsd-arm64@2.0.4: + resolution: {integrity: sha512-mTAQym1BK38fKglHBQ/0GXPznVC4LoStHO5lAI3ZxaEC0FQetqGHYFzhWbIH5sde9JhztE2rL/aBzMHDoAtzSw==} + cpu: [arm64] + os: [freebsd] + + lefthook-freebsd-x64@2.0.4: + resolution: {integrity: sha512-sy02aSxd8UMd6XmiPFVl/Em0b78jdZcDSsLwg+bweJQQk0l+vJhOfqFiG11mbnpo+EBIZmRe6OH5LkxeSU36+w==} + cpu: [x64] + os: [freebsd] + + lefthook-linux-arm64@2.0.4: + resolution: {integrity: sha512-W0Nlr/Cz2QTH9n4k5zNrk3LSsg1C4wHiJi8hrAiQVTaAV/N1XrKqd0DevqQuouuapG6pw/6B1xCgiNPebv9oyw==} + cpu: [arm64] + os: [linux] + + lefthook-linux-x64@2.0.4: + resolution: {integrity: sha512-N6ySVCtB/DrOZ1ZgPL8WBZTgtoVHvcPKI+LV5wbcGrvA/dzDZFvniadrbDWZg7Tm705efiQzyENjwhhqNkwiww==} + cpu: [x64] + os: [linux] + + lefthook-openbsd-arm64@2.0.4: + resolution: {integrity: sha512-VmOhJO3pYzZ/1C2WFXtL/n5pq4/eYOroqJJpwTJfmCHyw4ceLACu8MDyU5AMJhGMkbL8mPxGInJKxg5xhYgGRw==} + cpu: [arm64] + os: [openbsd] + + lefthook-openbsd-x64@2.0.4: + resolution: {integrity: sha512-U8MZz1xlHUdflkQQ2hkMQsei6fSZbs8tuE4EjCIHWnNdnAF4V8sZ6n1KbxsJcoZXPyBZqxZSMu1o/Ye8IAMVKg==} + cpu: [x64] + os: [openbsd] + + lefthook-windows-arm64@2.0.4: + resolution: {integrity: sha512-543H3y2JAwNdvwUQ6nlNBG7rdKgoOUgzAa6pYcl6EoqicCRrjRmGhkJu7vUudkkrD2Wjm7tr9hU9poP2g5fRFQ==} + cpu: [arm64] + os: [win32] + + lefthook-windows-x64@2.0.4: + resolution: {integrity: sha512-UDEPK9RWKm60xsNOdS/DQOdFba0SFa4w3tpFMXK1AJzmRHhosoKrorXGhtTr6kcM0MGKOtYi8GHsm++ArZ9wvQ==} + cpu: [x64] + os: [win32] + + lefthook@2.0.4: + resolution: {integrity: sha512-GNCU2vQWM/UWjiEF23601aILi1aMbPke6viortH7wIO/oVGOCW0H6FdLez4XZDyqnHL9XkTnd0BBVrBbYVMLpA==} + hasBin: true + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -1676,22 +1691,9 @@ packages: lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - lint-staged@15.5.2: - resolution: {integrity: sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==} - engines: {node: '>=18.12.0'} - hasBin: true - - listr2@8.3.3: - resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} - engines: {node: '>=18.0.0'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -1734,10 +1736,6 @@ packages: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} - log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -1764,9 +1762,6 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -1796,10 +1791,6 @@ packages: engines: {node: '>=4'} hasBin: true - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - mimic-function@5.0.1: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} @@ -1819,6 +1810,10 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -1850,9 +1845,6 @@ packages: napi-build-utils@2.0.0: resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -1882,10 +1874,6 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -1908,10 +1896,6 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - onetime@7.0.0: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} @@ -1988,10 +1972,6 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -2005,10 +1985,6 @@ packages: path-to-regexp@8.3.0: resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - path-type@6.0.0: resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} engines: {node: '>=18'} @@ -2030,11 +2006,6 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - playwright-core@1.57.0: resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==} engines: {node: '>=18'} @@ -2159,14 +2130,6 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} @@ -2258,10 +2221,6 @@ packages: resolution: {integrity: sha512-uihLiaB9FhzesElPDFZA7hDcNABzsVHwr3YfmM9sBllVwab3l0ltGlRV1XhpNfIacNDLGD1QRZNLs5nU5+hTuA==} deprecated: There - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - slash@5.1.0: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} @@ -2270,14 +2229,6 @@ packages: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - - slice-ansi@7.1.2: - resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} - engines: {node: '>=18'} - spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -2311,10 +2262,6 @@ packages: streamx@2.23.0: resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -2341,10 +2288,6 @@ packages: resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -2422,8 +2365,11 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -2432,12 +2378,6 @@ packages: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -2457,10 +2397,6 @@ packages: resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} engines: {node: '>=4'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -2472,6 +2408,13 @@ packages: typed-rest-client@1.8.11: resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} + typescript-eslint@8.47.0: + resolution: {integrity: sha512-Lwe8i2XQ3WoMjua/r1PHrCTpkubPYJCAfOurtn+mtTzqB6jNd+14n9UN1bJ4s3F49x9ixAm0FLflB/JzQ57M8Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} @@ -2567,10 +2510,6 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrap-ansi@9.0.2: - resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} - engines: {node: '>=18'} - wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -2597,11 +2536,6 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} - engines: {node: '>= 14.6'} - hasBin: true - yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -2801,19 +2735,35 @@ snapshots: '@esbuild/win32-x64@0.27.0': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)': dependencies: - eslint: 8.57.1 + eslint: 9.39.1 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/eslintrc@2.1.4': + '@eslint/config-array@0.21.1': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 debug: 4.4.3(supports-color@8.1.1) - espree: 9.6.1 - globals: 13.24.0 + espree: 10.4.0 + globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 js-yaml: 4.1.1 @@ -2822,19 +2772,25 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.1': {} + '@eslint/js@9.39.1': {} + + '@eslint/object-schema@2.1.7': {} - '@humanwhocodes/config-array@0.13.0': + '@eslint/plugin-kit@0.4.1': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.3(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.4.3': {} '@isaacs/balanced-match@4.0.1': {} @@ -3004,6 +2960,8 @@ snapshots: dependencies: '@textlint/ast-node-types': 15.4.0 + '@types/estree@1.0.8': {} + '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 @@ -3039,89 +2997,98 @@ snapshots: '@types/vscode@1.106.1': {} - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5)': + '@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@4.9.5))(eslint@9.39.1)(typescript@4.9.5)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@4.9.5) - debug: 4.4.3(supports-color@8.1.1) - eslint: 8.57.1 + '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 8.47.0 + '@typescript-eslint/type-utils': 8.47.0(eslint@9.39.1)(typescript@4.9.5) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.1)(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.47.0 + eslint: 9.39.1 graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare-lite: 1.4.0 - semver: 7.7.3 - tsutils: 3.21.0(typescript@4.9.5) - optionalDependencies: + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5)': + '@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@4.9.5)': dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 8.47.0 + '@typescript-eslint/types': 8.47.0 + '@typescript-eslint/typescript-estree': 8.47.0(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.47.0 + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.39.1 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.47.0(typescript@4.9.5)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@4.9.5) + '@typescript-eslint/types': 8.47.0 debug: 4.4.3(supports-color@8.1.1) - eslint: 8.57.1 - optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@5.62.0': + '@typescript-eslint/scope-manager@8.47.0': dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/types': 8.47.0 + '@typescript-eslint/visitor-keys': 8.47.0 - '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@4.9.5)': + '@typescript-eslint/tsconfig-utils@8.47.0(typescript@4.9.5)': dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@4.9.5) + typescript: 4.9.5 + + '@typescript-eslint/type-utils@8.47.0(eslint@9.39.1)(typescript@4.9.5)': + dependencies: + '@typescript-eslint/types': 8.47.0 + '@typescript-eslint/typescript-estree': 8.47.0(typescript@4.9.5) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.1)(typescript@4.9.5) debug: 4.4.3(supports-color@8.1.1) - eslint: 8.57.1 - tsutils: 3.21.0(typescript@4.9.5) - optionalDependencies: + eslint: 9.39.1 + ts-api-utils: 2.1.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@5.62.0': {} + '@typescript-eslint/types@8.47.0': {} - '@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5)': + '@typescript-eslint/typescript-estree@8.47.0(typescript@4.9.5)': dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/project-service': 8.47.0(typescript@4.9.5) + '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@4.9.5) + '@typescript-eslint/types': 8.47.0 + '@typescript-eslint/visitor-keys': 8.47.0 debug: 4.4.3(supports-color@8.1.1) - globby: 11.1.0 + fast-glob: 3.3.3 is-glob: 4.0.3 + minimatch: 9.0.5 semver: 7.7.3 - tsutils: 3.21.0(typescript@4.9.5) - optionalDependencies: + ts-api-utils: 2.1.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@4.9.5)': + '@typescript-eslint/utils@8.47.0(eslint@9.39.1)(typescript@4.9.5)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) - '@types/json-schema': 7.0.15 - '@types/semver': 7.7.1 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - eslint: 8.57.1 - eslint-scope: 5.1.1 - semver: 7.7.3 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) + '@typescript-eslint/scope-manager': 8.47.0 + '@typescript-eslint/types': 8.47.0 + '@typescript-eslint/typescript-estree': 8.47.0(typescript@4.9.5) + eslint: 9.39.1 + typescript: 4.9.5 transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/visitor-keys@5.62.0': + '@typescript-eslint/visitor-keys@8.47.0': dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 + '@typescript-eslint/types': 8.47.0 + eslint-visitor-keys: 4.2.1 '@typespec/ts-http-runtime@0.3.2': dependencies: @@ -3131,8 +3098,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@ungap/structured-clone@1.3.0': {} - '@vscode/test-electron@2.5.2': dependencies: http-proxy-agent: 7.0.2 @@ -3295,8 +3260,6 @@ snapshots: argparse@2.0.1: {} - array-union@2.1.0: {} - astral-regex@2.0.0: {} asynckit@0.4.0: {} @@ -3482,11 +3445,6 @@ snapshots: cli-spinners@2.9.2: {} - cli-truncate@4.0.0: - dependencies: - slice-ansi: 5.0.0 - string-width: 7.2.0 - cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -3501,16 +3459,12 @@ snapshots: color-name@1.1.4: {} - colorette@2.0.20: {} - combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 commander@12.1.0: {} - commander@13.1.0: {} - concat-map@0.0.1: {} content-disposition@0.5.4: @@ -3600,14 +3554,6 @@ snapshots: diff@5.2.0: {} - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -3724,70 +3670,63 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@9.1.2(eslint@8.57.1): + eslint-config-prettier@10.1.8(eslint@9.39.1): dependencies: - eslint: 8.57.1 + eslint: 9.39.1 - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - eslint-scope@7.2.2: + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint@8.57.1: + eslint-visitor-keys@4.2.1: {} + + eslint@9.39.1: dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) '@eslint-community/regexpp': 4.12.2 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.39.1 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.0 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@8.1.1) - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.1 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 transitivePeerDependencies: - supports-color - espree@9.6.1: + espree@10.4.0: dependencies: acorn: 8.15.0 acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 3.4.3 + eslint-visitor-keys: 4.2.1 esprima@4.0.1: {} @@ -3799,32 +3738,16 @@ snapshots: dependencies: estraverse: 5.3.0 - estraverse@4.3.0: {} - estraverse@5.3.0: {} esutils@2.0.3: {} - eventemitter3@5.0.1: {} - events-universal@1.0.1: dependencies: bare-events: 2.8.2 transitivePeerDependencies: - bare-abort-controller - execa@8.0.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - expand-template@2.0.3: optional: true @@ -3858,9 +3781,9 @@ snapshots: optionalDependencies: picomatch: 4.0.3 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 fill-range@7.1.1: dependencies: @@ -3871,11 +3794,10 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: flatted: 3.3.3 keyv: 4.5.4 - rimraf: 3.0.2 flat@5.0.2: {} @@ -3943,8 +3865,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stream@8.0.1: {} - github-from-package@0.0.0: optional: true @@ -3965,15 +3885,6 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 2.0.1 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - glob@8.1.0: dependencies: fs.realpath: 1.0.0 @@ -3982,18 +3893,9 @@ snapshots: minimatch: 5.1.6 once: 1.4.0 - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.3 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 + globals@16.5.0: {} globby@14.1.0: dependencies: @@ -4094,10 +3996,6 @@ snapshots: transitivePeerDependencies: - supports-color - human-signals@5.0.0: {} - - husky@9.1.7: {} - iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -4155,12 +4053,6 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@4.0.0: {} - - is-fullwidth-code-point@5.1.0: - dependencies: - get-east-asian-width: 1.4.0 - is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 @@ -4183,8 +4075,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-plain-obj@2.1.0: {} is-regex@1.2.1: @@ -4194,8 +4084,6 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - is-stream@3.0.0: {} - is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.19 @@ -4351,6 +4239,49 @@ snapshots: type-is: 2.0.1 vary: 1.1.2 + lefthook-darwin-arm64@2.0.4: + optional: true + + lefthook-darwin-x64@2.0.4: + optional: true + + lefthook-freebsd-arm64@2.0.4: + optional: true + + lefthook-freebsd-x64@2.0.4: + optional: true + + lefthook-linux-arm64@2.0.4: + optional: true + + lefthook-linux-x64@2.0.4: + optional: true + + lefthook-openbsd-arm64@2.0.4: + optional: true + + lefthook-openbsd-x64@2.0.4: + optional: true + + lefthook-windows-arm64@2.0.4: + optional: true + + lefthook-windows-x64@2.0.4: + optional: true + + lefthook@2.0.4: + optionalDependencies: + lefthook-darwin-arm64: 2.0.4 + lefthook-darwin-x64: 2.0.4 + lefthook-freebsd-arm64: 2.0.4 + lefthook-freebsd-x64: 2.0.4 + lefthook-linux-arm64: 2.0.4 + lefthook-linux-x64: 2.0.4 + lefthook-openbsd-arm64: 2.0.4 + lefthook-openbsd-x64: 2.0.4 + lefthook-windows-arm64: 2.0.4 + lefthook-windows-x64: 2.0.4 + leven@3.1.0: {} levn@0.4.1: @@ -4362,36 +4293,10 @@ snapshots: dependencies: immediate: 3.0.6 - lilconfig@3.1.3: {} - linkify-it@5.0.0: dependencies: uc.micro: 2.1.0 - lint-staged@15.5.2: - dependencies: - chalk: 5.6.2 - commander: 13.1.0 - debug: 4.4.3(supports-color@8.1.1) - execa: 8.0.1 - lilconfig: 3.1.3 - listr2: 8.3.3 - micromatch: 4.0.8 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.8.1 - transitivePeerDependencies: - - supports-color - - listr2@8.3.3: - dependencies: - cli-truncate: 4.0.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 6.1.0 - rfdc: 1.4.1 - wrap-ansi: 9.0.2 - locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -4426,14 +4331,6 @@ snapshots: chalk: 5.6.2 is-unicode-supported: 1.3.0 - log-update@6.1.0: - dependencies: - ansi-escapes: 7.2.0 - cli-cursor: 5.0.0 - slice-ansi: 7.1.2 - strip-ansi: 7.1.2 - wrap-ansi: 9.0.2 - lru-cache@10.4.3: {} lru-cache@11.2.2: {} @@ -4457,8 +4354,6 @@ snapshots: media-typer@1.1.0: {} - merge-stream@2.0.0: {} - merge2@1.4.1: {} micromatch@4.0.8: @@ -4480,8 +4375,6 @@ snapshots: mime@1.6.0: {} - mimic-fn@4.0.0: {} - mimic-function@5.0.1: {} mimic-response@3.1.0: @@ -4499,6 +4392,10 @@ snapshots: dependencies: brace-expansion: 2.0.2 + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + minimist@1.2.8: {} minipass@7.1.2: {} @@ -4548,8 +4445,6 @@ snapshots: napi-build-utils@2.0.0: optional: true - natural-compare-lite@1.4.0: {} - natural-compare@1.4.0: {} negotiator@0.6.3: {} @@ -4583,10 +4478,6 @@ snapshots: normalize-path@3.0.0: {} - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - nth-check@2.1.1: dependencies: boolbase: 1.0.0 @@ -4607,10 +4498,6 @@ snapshots: dependencies: wrappy: 1.0.2 - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - onetime@7.0.0: dependencies: mimic-function: 5.0.1 @@ -4696,8 +4583,6 @@ snapshots: path-key@3.1.1: {} - path-key@4.0.0: {} - path-parse@1.0.7: {} path-scurry@2.0.1: @@ -4709,8 +4594,6 @@ snapshots: path-to-regexp@8.3.0: {} - path-type@4.0.0: {} - path-type@6.0.0: {} peek-stream@1.1.3: @@ -4727,8 +4610,6 @@ snapshots: picomatch@4.0.3: {} - pidtree@0.6.0: {} - playwright-core@1.57.0: {} playwright@1.57.0: @@ -4871,12 +4752,6 @@ snapshots: reusify@1.1.0: {} - rfdc@1.4.1: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - run-applescript@7.1.0: {} run-parallel@1.2.0: @@ -4987,8 +4862,6 @@ snapshots: nise: 5.1.9 supports-color: 7.2.0 - slash@3.0.0: {} - slash@5.1.0: {} slice-ansi@4.0.0: @@ -4997,16 +4870,6 @@ snapshots: astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - slice-ansi@5.0.0: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 4.0.0 - - slice-ansi@7.1.2: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -5040,8 +4903,6 @@ snapshots: - bare-abort-controller - react-native-b4a - string-argv@0.3.2: {} - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -5077,8 +4938,6 @@ snapshots: dependencies: ansi-regex: 6.2.2 - strip-final-newline@3.0.0: {} - strip-json-comments@2.0.1: optional: true @@ -5184,17 +5043,14 @@ snapshots: toidentifier@1.0.1: {} - tslib@1.14.1: {} + ts-api-utils@2.1.0(typescript@4.9.5): + dependencies: + typescript: 4.9.5 tslib@2.8.1: {} tsscmp@1.0.6: {} - tsutils@3.21.0(typescript@4.9.5): - dependencies: - tslib: 1.14.1 - typescript: 4.9.5 - tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 @@ -5210,8 +5066,6 @@ snapshots: type-detect@4.1.0: {} - type-fest@0.20.2: {} - type-fest@4.41.0: {} type-is@2.0.1: @@ -5226,6 +5080,17 @@ snapshots: tunnel: 0.0.6 underscore: 1.13.7 + typescript-eslint@8.47.0(eslint@9.39.1)(typescript@4.9.5): + dependencies: + '@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@4.9.5))(eslint@9.39.1)(typescript@4.9.5) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 8.47.0(typescript@4.9.5) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.1)(typescript@4.9.5) + eslint: 9.39.1 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + typescript@4.9.5: {} uc.micro@2.1.0: {} @@ -5309,12 +5174,6 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.2 - wrap-ansi@9.0.2: - dependencies: - ansi-styles: 6.2.3 - string-width: 7.2.0 - strip-ansi: 7.1.2 - wrappy@1.0.2: {} wsl-utils@0.1.0: @@ -5334,8 +5193,6 @@ snapshots: yallist@4.0.0: {} - yaml@2.8.1: {} - yargs-parser@20.2.9: {} yargs-unparser@2.0.0: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a0d51d4b7..6165dbc41 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -10,3 +10,4 @@ onlyBuiltDependencies: - "@vscode/vsce-sign" - esbuild - keytar + - lefthook diff --git a/scripts/clean.js b/scripts/clean.mjs similarity index 58% rename from scripts/clean.js rename to scripts/clean.mjs index 641d7d59a..04288529f 100644 --- a/scripts/clean.js +++ b/scripts/clean.mjs @@ -1,5 +1,8 @@ -const fs = require("fs"); -const path = require("path"); +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const folders = ["../dist", "../out"]; diff --git a/scripts/install-fixtures.js b/scripts/install-fixtures.mjs similarity index 91% rename from scripts/install-fixtures.js rename to scripts/install-fixtures.mjs index a6b0aae7a..5329560db 100644 --- a/scripts/install-fixtures.js +++ b/scripts/install-fixtures.mjs @@ -1,7 +1,9 @@ -const fs = require("fs"); -const path = require("path"); -const { execSync } = require("child_process"); +import fs from "fs"; +import path from "path"; +import { execSync } from "child_process"; +import { fileURLToPath } from "url"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const testFixturesDir = path.join(__dirname, "..", "test-fixtures"); /** @@ -40,7 +42,7 @@ function installFixture(fixtureDir, pkgJson) { cwd: fixtureDir, stdio: "inherit", }); - } catch (error) { + } catch { console.error(`Failed to install ${relativePath}`); process.exit(1); } @@ -68,7 +70,7 @@ function findFixtures(dir, results = []) { // Check for nested fixtures (like explicit-dep/implicit-dep) findFixtures(fullPath, results); - } catch (e) { + } catch { console.error(`Failed to parse ${pkgPath}`); } } diff --git a/scripts/version.js b/scripts/version.mjs similarity index 51% rename from scripts/version.js rename to scripts/version.mjs index c38165cc3..c0f122a89 100644 --- a/scripts/version.js +++ b/scripts/version.mjs @@ -5,7 +5,7 @@ * For prereleases (versions containing -), skip changelog update * since the final release should include all unreleased changes. */ -const fs = require("fs"); +import fs from "fs/promises"; const v = process.env.npm_package_version; const CHANGELOG = "CHANGELOG.md"; @@ -18,20 +18,14 @@ if (isPrerelease) { process.exit(0); } -fs.readFile(CHANGELOG, (error, data) => { - const stringData = data.toString("utf8"); - const updated = stringData.replace( - /## \[Unreleased\](?!\s*## )/, // None empty Unreleased block - `## [Unreleased]\n\n## [${v}]`, - ); +const data = await fs.readFile(CHANGELOG, "utf8"); +const updated = data.replace( + /## \[Unreleased\](?!\s*## )/, // None empty Unreleased block + `## [Unreleased]\n\n## [${v}]`, +); - if (updated !== stringData) { - console.log(`CHANGELOG: [Unreleased] updated with [${v}]`); - } - fs.writeFile(CHANGELOG, updated, (err) => { - if (err) { - console.error(err); - process.exit(1); - } - }); -}); +if (updated !== data) { + console.log(`CHANGELOG: [Unreleased] updated with [${v}]`); +} + +await fs.writeFile(CHANGELOG, updated); diff --git a/src/BrowserModuleResolver.ts b/src/BrowserModuleResolver.ts index 47975072c..5791c14c7 100644 --- a/src/BrowserModuleResolver.ts +++ b/src/BrowserModuleResolver.ts @@ -20,32 +20,32 @@ import * as markdownPlugin from "prettier/plugins/markdown"; import * as estreePlugin from "prettier/plugins/estree"; import * as typescriptPlugin from "prettier/plugins/typescript"; import * as yamlPlugin from "prettier/plugins/yaml"; +import * as meriyahPlugin from "prettier/plugins/meriyah"; -// Note: meriyah parser was removed in Prettier 3, use babel instead -// postcss and flow are commented out due to CSP restrictions +// Note: postcss and flow are not imported due to CSP restrictions import { TextDocument, Uri } from "vscode"; import { LoggingService } from "./LoggingService"; -import { getWorkspaceRelativePath } from "./util"; +import { getWorkspaceRelativePath } from "./utils/workspace"; import { ResolveConfigOptions, Options } from "prettier"; const plugins = [ angularPlugin, babelPlugin, - estreePlugin, // Required for JS/TS formatting in Prettier 3 + estreePlugin, glimmerPlugin, graphqlPlugin, htmlPlugin, markdownPlugin, typescriptPlugin, yamlPlugin, + meriyahPlugin, ]; export class ModuleResolver implements ModuleResolverInterface { constructor(private loggingService: LoggingService) {} public async getPrettierInstance( - // eslint-disable-next-line @typescript-eslint/no-unused-vars _fileName: string, ): Promise { return this.getGlobalPrettierInstance(); @@ -70,6 +70,7 @@ export class ModuleResolver implements ModuleResolverInterface { return { languages: [ { + name: "JavaScript", vscodeLanguageIds: [ "javascript", "javascriptreact", @@ -88,74 +89,89 @@ export class ModuleResolver implements ModuleResolverInterface { ], }, { + name: "TypeScript", vscodeLanguageIds: ["typescript"], extensions: [], parsers: ["typescript", "babel-ts"], }, { + name: "TSX", vscodeLanguageIds: ["typescriptreact"], extensions: [], parsers: ["typescript", "babel-ts"], }, { + name: "JSON.stringify", vscodeLanguageIds: ["json"], extensions: [], parsers: ["json-stringify"], }, { + name: "JSON", vscodeLanguageIds: ["json"], extensions: [], parsers: ["json"], }, { + name: "JSON with Comments", vscodeLanguageIds: ["jsonc"], parsers: ["json"], }, { + name: "JSON5", vscodeLanguageIds: ["json5"], extensions: [], parsers: ["json5"], }, { + name: "Handlebars", vscodeLanguageIds: ["handlebars"], extensions: [], parsers: ["glimmer"], }, { + name: "GraphQL", vscodeLanguageIds: ["graphql"], extensions: [], parsers: ["graphql"], }, { + name: "Markdown", vscodeLanguageIds: ["markdown"], parsers: ["markdown"], }, { + name: "MDX", vscodeLanguageIds: ["mdx"], extensions: [], parsers: ["mdx"], }, { + name: "Angular", vscodeLanguageIds: ["html"], extensions: [], parsers: ["angular"], }, { + name: "HTML", vscodeLanguageIds: ["html"], extensions: [], parsers: ["html"], }, { + name: "Lightning Web Components", vscodeLanguageIds: ["html"], extensions: [], parsers: ["lwc"], }, { + name: "Vue", vscodeLanguageIds: ["vue"], extensions: [], parsers: ["vue"], }, { + name: "YAML", vscodeLanguageIds: ["yaml", "ansible", "home-assistant"], extensions: [], parsers: ["yaml"], @@ -195,9 +211,8 @@ export class ModuleResolver implements ModuleResolverInterface { } async getResolvedConfig( - // eslint-disable-next-line @typescript-eslint/no-unused-vars _doc: TextDocument, - // eslint-disable-next-line @typescript-eslint/no-unused-vars + _vscodeConfig: PrettierVSCodeConfig, ): Promise<"error" | "disabled" | PrettierOptions | null> { return null; diff --git a/src/ModuleResolver.ts b/src/ModuleResolver.ts index 760454d2d..86b8c0a2e 100644 --- a/src/ModuleResolver.ts +++ b/src/ModuleResolver.ts @@ -6,7 +6,10 @@ import * as prettier from "prettier"; import * as resolve from "resolve"; import * as semver from "semver"; import { commands, TextDocument, Uri, workspace } from "vscode"; -import { resolveGlobalNodePath, resolveGlobalYarnPath } from "./Files"; +import { + resolveGlobalNodePath, + resolveGlobalYarnPath, +} from "./utils/global-node-paths"; import { LoggingService } from "./LoggingService"; import { FAILED_TO_LOAD_MODULE_MESSAGE, @@ -23,20 +26,28 @@ import { PrettierResolveConfigOptions, PrettierVSCodeConfig, } from "./types"; -import { getConfig, getWorkspaceRelativePath, isAboveV3 } from "./util"; -import { PrettierWorkerInstance } from "./PrettierWorkerInstance"; +import { + getWorkspaceConfig, + getWorkspaceRelativePath, +} from "./utils/workspace"; import { PrettierInstance } from "./PrettierInstance"; +import { PrettierWorkerInstance } from "./PrettierWorkerInstance"; import { PrettierMainThreadInstance } from "./PrettierMainThreadInstance"; -import { loadNodeModule, resolveConfigPlugins } from "./ModuleLoader"; +import { loadNodeModule, resolveConfigPlugins } from "./utils/resolvers"; +import { isAboveV3 } from "./utils/versions"; const minPrettierVersion = "1.13.0"; export type PrettierNodeModule = typeof prettier; +type Mutable = { + -readonly [P in keyof T]: T[P]; +}; + // Workaround for https://github.com/prettier/prettier-vscode/issues/3020 // Use require() to get a mutable fs module reference and override statSync -// eslint-disable-next-line @typescript-eslint/no-var-requires -const mutableFs: Record = require("fs"); + +const mutableFs: Mutable = require("fs"); const origFsStatSync = fs.statSync; const fsStatSyncWorkaround = ( filePath: fs.PathLike, @@ -51,14 +62,22 @@ const fsStatSyncWorkaround = ( options.throwIfNoEntry = true; try { return origFsStatSync(filePath, options); - } catch (error: any) { - if (error.code === "ENOENT") { + } catch (error) { + if ( + error && + typeof error === "object" && + "code" in error && + error.code === "ENOENT" + ) { return undefined; } throw error; } }; -mutableFs.statSync = fsStatSyncWorkaround; +// Force cast because we return undefined in some cases +// which is not part of the original fs.StatSyncFn return type +// but is necessary for the workaround to function correctly +mutableFs.statSync = fsStatSyncWorkaround as fs.StatSyncFn; const globalPaths: { [key: string]: { cache: string | undefined; get(): string | undefined }; @@ -160,7 +179,7 @@ export class ModuleResolver implements ModuleResolverInterface { return prettier; } - const { prettierPath, resolveGlobalModules } = getConfig( + const { prettierPath, resolveGlobalModules } = getWorkspaceConfig( Uri.file(fileName), ); @@ -617,7 +636,7 @@ export class ModuleResolver implements ModuleResolverInterface { packageJson = JSON.parse( fs.readFileSync(path.join(dir, "package.json"), "utf8"), ); - } catch (e) { + } catch { // Swallow, if we can't read it we don't want to resolve based on it } diff --git a/src/PrettierEditService.ts b/src/PrettierEditService.ts index 094e9fade..31adcd493 100644 --- a/src/PrettierEditService.ts +++ b/src/PrettierEditService.ts @@ -10,7 +10,7 @@ import { window, workspace, } from "vscode"; -import { getParserFromLanguageId } from "./languageFilters"; +import { getParserFromLanguageId } from "./utils/get-parser-from-language"; import { LoggingService } from "./LoggingService"; import { RESTART_TO_ENABLE } from "./message"; import { PrettierEditProvider } from "./PrettierEditProvider"; @@ -26,7 +26,8 @@ import { PrettierPlugin, RangeFormattingOptions, } from "./types"; -import { getConfig, isAboveV3 } from "./util"; +import { getWorkspaceConfig } from "./utils/workspace"; +import { isAboveV3 } from "./utils/versions"; interface ISelectors { rangeLanguageSelector: ReadonlyArray; @@ -278,7 +279,7 @@ export default class PrettierEditService implements Disposable { prettierInstance, documentUri, documentUri.fsPath, - getConfig(documentUri), + getWorkspaceConfig(documentUri), ); if (resolvedConfig === "error") { this.statusBar.update(FormatterStatus.Error); @@ -311,7 +312,7 @@ export default class PrettierEditService implements Disposable { return self.indexOf(value) === index; }); - const { documentSelectors } = getConfig(); + const { documentSelectors } = getWorkspaceConfig(); // Language selector for file extensions const extensionLanguageSelector: DocumentFilter[] = workspaceFolderUri @@ -411,7 +412,7 @@ export default class PrettierEditService implements Disposable { this.loggingService.logInfo(`Formatting ${uri}`); - const vscodeConfig = getConfig(doc); + const vscodeConfig = getWorkspaceConfig(doc); const resolvedConfig = await this.moduleResolver.getResolvedConfig( doc, diff --git a/src/PrettierMainThreadInstance.ts b/src/PrettierMainThreadInstance.ts index fc0b92039..c12f33f87 100644 --- a/src/PrettierMainThreadInstance.ts +++ b/src/PrettierMainThreadInstance.ts @@ -9,7 +9,7 @@ import { PrettierSupportLanguage, } from "./types"; import { PrettierNodeModule } from "./ModuleResolver"; -import { loadNodeModule } from "./ModuleLoader"; +import { loadNodeModule } from "./utils/resolvers"; export const PrettierMainThreadInstance: PrettierInstanceConstructor = class PrettierMainThreadInstance implements PrettierInstance { public version: string | null = null; diff --git a/src/extension.ts b/src/extension.ts index c84b38576..d9e4c0aaa 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,7 +5,7 @@ import { ModuleResolver } from "./ModuleResolver"; import PrettierEditService from "./PrettierEditService"; import { StatusBar } from "./StatusBar"; import { TemplateService } from "./TemplateService"; -import { getConfig } from "./util"; +import { getWorkspaceConfig } from "./utils/workspace"; import { RESTART_TO_ENABLE, EXTENSION_DISABLED } from "./message"; // the application insights key (also known as instrumentation key) @@ -18,7 +18,7 @@ export function activate(context: ExtensionContext) { loggingService.logInfo(`Extension Name: ${extensionName}.`); loggingService.logInfo(`Extension Version: ${extensionVersion}.`); - const { enable, enableDebugLogs } = getConfig(); + const { enable, enableDebugLogs } = getWorkspaceConfig(); if (enableDebugLogs) { loggingService.setOutputLevel("DEBUG"); diff --git a/src/test/suite/module.test.ts b/src/test/suite/module.test.ts index ef019048c..5d49ba1ad 100644 --- a/src/test/suite/module.test.ts +++ b/src/test/suite/module.test.ts @@ -15,7 +15,11 @@ suite("Test module resolution", function () { }); test("it formats without prettier in package.json", async () => { - const { actual } = await format("module", "index.js"); + const { actual } = await format( + "module", + "index.js", + /* shouldRetry */ true, + ); const expected = await getText("module", "index.result.js"); assert.equal(actual, expected); }); diff --git a/src/test/suite/plugins.test.ts b/src/test/suite/plugins.test.ts index 654ca930f..5ff6b422c 100644 --- a/src/test/suite/plugins.test.ts +++ b/src/test/suite/plugins.test.ts @@ -14,7 +14,11 @@ suite("Test plugins", function () { }); test("it correctly resolved plugin in pnpm node_modules dirs structure", async () => { - const { actual } = await format("plugins-pnpm", "index.js"); + const { actual } = await format( + "plugins-pnpm", + "index.js", + /* shouldRetry */ true, + ); const expected = await getText("plugins-pnpm", "index.result.js"); assert.equal(actual, expected); }); diff --git a/src/test/web/suite/smoke.test.ts b/src/test/web/suite/smoke.test.ts index a74aedeaf..0095a1b9c 100644 --- a/src/test/web/suite/smoke.test.ts +++ b/src/test/web/suite/smoke.test.ts @@ -7,7 +7,9 @@ function ok(value: unknown, message?: string): void { } } -suite("Web Extension Smoke Tests", () => { +suite("Web Extension Smoke Tests", function () { + this.timeout(10000); + test("Extension should be present", () => { const extension = vscode.extensions.getExtension( "prettier.prettier-vscode", diff --git a/src/types.d.ts b/src/types.d.ts index 65ab1687e..7c7d02687 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -2,36 +2,28 @@ import * as prettier from "prettier"; import { TextDocument, Uri } from "vscode"; import { PrettierInstance } from "./PrettierInstance"; -type PrettierSupportLanguage = { - vscodeLanguageIds?: string[]; - extensions?: string[]; - parsers: string[]; -}; -type PrettierFileInfoResult = { - ignored: boolean; - inferredParser?: PrettierBuiltInParserName | null; -}; -type PrettierBuiltInParserName = string; +// Re-export Prettier types for convenience +type PrettierSupportLanguage = prettier.SupportLanguage; +type PrettierFileInfoResult = prettier.FileInfoResult; +type PrettierBuiltInParserName = prettier.BuiltInParserName; type PrettierResolveConfigOptions = prettier.ResolveConfigOptions; -type PrettierOptions = prettier.Options & { - experimentalTernaries?: boolean; - objectWrap?: "preserve" | "collapse"; - experimentalOperatorPosition?: "start" | "end"; -}; +type PrettierOptions = prettier.Options; type PrettierFileInfoOptions = prettier.FileInfoOptions; -// eslint-disable-next-line @typescript-eslint/no-explicit-any + type PrettierPlugin = prettier.Plugin | string | URL; type PrettierModule = { - format(source: string, options?: prettier.Options): Promise; - getSupportInfo(): Promise<{ languages: PrettierSupportLanguage[] }>; + format(source: string, options?: PrettierOptions): Promise; + getSupportInfo(options?: { + plugins?: Array; + }): Promise<{ languages: PrettierSupportLanguage[] }>; getFileInfo( filePath: string, options?: PrettierFileInfoOptions, ): Promise; }; -type ModuleResolverInterface = { +export type ModuleResolverInterface = { getPrettierInstance( fileName: string, ): Promise; @@ -50,7 +42,7 @@ type ModuleResolverInterface = { resolveConfigFile(filePath?: string): Promise; resolveConfig( fileName: string, - options?: prettier.ResolveConfigOptions, + options?: PrettierResolveConfigOptions, ): Promise; }, uri: Uri, @@ -59,8 +51,6 @@ type ModuleResolverInterface = { ): Promise<"error" | "disabled" | PrettierOptions | null>; }; -type TrailingCommaOption = "none" | "es5" | "all"; - export type PackageManagers = "npm" | "yarn" | "pnpm"; /** @@ -111,7 +101,7 @@ interface IExtensionConfig { /** * Configuration for prettier-vscode */ -export type PrettierVSCodeConfig = IExtensionConfig & prettier.Options; +export type PrettierVSCodeConfig = IExtensionConfig & PrettierOptions; export interface RangeFormattingOptions { rangeStart: number; diff --git a/src/languageFilters.ts b/src/utils/get-parser-from-language.ts similarity index 98% rename from src/languageFilters.ts rename to src/utils/get-parser-from-language.ts index f97d4aee4..13eb68519 100644 --- a/src/languageFilters.ts +++ b/src/utils/get-parser-from-language.ts @@ -1,5 +1,5 @@ import { Uri } from "vscode"; -import { PrettierBuiltInParserName, PrettierSupportLanguage } from "./types"; +import { PrettierBuiltInParserName, PrettierSupportLanguage } from "../types"; export function getParserFromLanguageId( languages: PrettierSupportLanguage[], diff --git a/src/Files.ts b/src/utils/global-node-paths.ts similarity index 89% rename from src/Files.ts rename to src/utils/global-node-paths.ts index 8c4776439..d32b49d44 100644 --- a/src/Files.ts +++ b/src/utils/global-node-paths.ts @@ -13,8 +13,6 @@ function isWindows(): boolean { /** * Resolve the global npm package path. - * @deprecated Since this depends on the used package manager and their version the best is that servers - * implement this themselves since they know best what kind of package managers to support. * @param tracer the tracer to use */ export function resolveGlobalNodePath( @@ -29,7 +27,6 @@ export function resolveGlobalNodePath( options.shell = true; } - // eslint-disable-next-line @typescript-eslint/no-empty-function const handler = () => {}; try { process.on("SIGPIPE", handler); @@ -58,7 +55,7 @@ export function resolveGlobalNodePath( } } return undefined; - } catch (err) { + } catch { return undefined; } finally { process.removeListener("SIGPIPE", handler); @@ -89,7 +86,6 @@ export function resolveGlobalYarnPath( options.shell = true; } - // eslint-disable-next-line @typescript-eslint/no-empty-function const handler = () => {}; try { process.on("SIGPIPE", handler); @@ -116,12 +112,12 @@ export function resolveGlobalYarnPath( if (yarn.type === "log") { return path.join(yarn.data, "node_modules"); } - } catch (e) { + } catch { // Do nothing. Ignore the line } } return undefined; - } catch (err) { + } catch { return undefined; } finally { process.removeListener("SIGPIPE", handler); diff --git a/src/ModuleLoader.ts b/src/utils/resolvers.ts similarity index 66% rename from src/ModuleLoader.ts rename to src/utils/resolvers.ts index 3dbc61afe..69e5fe8b7 100644 --- a/src/ModuleLoader.ts +++ b/src/utils/resolvers.ts @@ -1,20 +1,11 @@ import * as path from "path"; -import { PrettierOptions } from "./types"; - -declare const __webpack_require__: typeof require; -declare const __non_webpack_require__: typeof require; - -export function nodeModuleLoader() { - return typeof __webpack_require__ === "function" - ? __non_webpack_require__ - : require; -} +import { PrettierOptions } from "../types"; // Source: https://github.com/microsoft/vscode-eslint/blob/master/server/src/eslintServer.ts export function loadNodeModule(moduleName: string): T | undefined { try { - return nodeModuleLoader()(moduleName); - } catch (error) { + return require(moduleName); + } catch { throw new Error(`Error loading node module '${moduleName}'`); } } @@ -24,9 +15,9 @@ export function resolveNodeModule( options?: { paths: string[] }, ) { try { - return nodeModuleLoader().resolve(moduleName, options); - } catch (error) { - throw new Error(`Error resolve node module '${moduleName}'`); + return require.resolve(moduleName, options); + } catch { + throw new Error(`Error resolving node module '${moduleName}'`); } } diff --git a/src/utils/versions.ts b/src/utils/versions.ts new file mode 100644 index 000000000..fc46ae16c --- /dev/null +++ b/src/utils/versions.ts @@ -0,0 +1,9 @@ +import * as semver from "semver"; + +export function isAboveV3(version: string | null): boolean { + const parsedVersion = semver.parse(version); + if (!parsedVersion) { + throw new Error("Invalid version"); + } + return parsedVersion.major >= 3; +} diff --git a/src/util.ts b/src/utils/workspace.ts similarity index 74% rename from src/util.ts rename to src/utils/workspace.ts index 7677acffc..2749edfb2 100644 --- a/src/util.ts +++ b/src/utils/workspace.ts @@ -1,8 +1,7 @@ import * as os from "os"; import * as path from "path"; -import * as semver from "semver"; import { Uri, workspace, type TextDocument } from "vscode"; -import { PrettierVSCodeConfig } from "./types"; +import { PrettierVSCodeConfig } from "../types"; export function getWorkspaceRelativePath( filePath: string, @@ -27,8 +26,9 @@ export function getWorkspaceRelativePath( } } -export function getConfig(scope?: TextDocument | Uri): PrettierVSCodeConfig { - // eslint-disable-next-line @typescript-eslint/no-explicit-any +export function getWorkspaceConfig( + scope?: TextDocument | Uri, +): PrettierVSCodeConfig { const config = workspace.getConfiguration( "prettier", scope, @@ -52,11 +52,3 @@ export function getConfig(scope?: TextDocument | Uri): PrettierVSCodeConfig { return config; } - -export function isAboveV3(version: string | null): boolean { - const parsedVersion = semver.parse(version); - if (!parsedVersion) { - throw new Error("Invalid version"); - } - return parsedVersion.major >= 3; -} diff --git a/test-fixtures/plugins/yarn.lock b/test-fixtures/plugins/yarn.lock index cd21f33fa..1d49480c9 100644 --- a/test-fixtures/plugins/yarn.lock +++ b/test-fixtures/plugins/yarn.lock @@ -41,9 +41,9 @@ p-defer@^1.0.0: resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== -"php-parser@git+https://github.com/glayzzle/php-parser.git#27abcb2337ac6450c068ef064982dfabf77916a5": +"php-parser@https://github.com/glayzzle/php-parser#27abcb2337ac6450c068ef064982dfabf77916a5": version "3.0.2" - resolved "git+https://github.com/glayzzle/php-parser.git#27abcb2337ac6450c068ef064982dfabf77916a5" + resolved "https://github.com/glayzzle/php-parser#27abcb2337ac6450c068ef064982dfabf77916a5" prettier@^2.5.1: version "2.8.8" diff --git a/tsconfig.json b/tsconfig.json index 3d2443eb2..79d33fb0b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,6 +5,7 @@ "outDir": "out", "strict": true, "noUnusedLocals": true, + "isolatedModules": true, "forceConsistentCasingInFileNames": true, "removeComments": true, "lib": ["ES2020"], @@ -15,7 +16,6 @@ "include": [ "src/**/*.ts", "./node_modules/vscode/vscode.d.ts", - "./node_modules/vscode/lib/*", - ".eslintrc.js" + "./node_modules/vscode/lib/*" ] } diff --git a/tsconfig.scripts.json b/tsconfig.scripts.json new file mode 100644 index 000000000..d3fbe9eed --- /dev/null +++ b/tsconfig.scripts.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "Node", + "target": "ES2020", + "strict": true, + "noEmit": true, + "isolatedModules": true, + "forceConsistentCasingInFileNames": true, + "lib": ["ES2020"], + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true + }, + "include": ["esbuild.mjs", "scripts/*.mjs"] +}