diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bf0b933a..81cd37b2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,6 @@ jobs: npm run lint npm run unittest npm run gulp - npm run webpack npm run vscePackage working-directory: vscode-wpilib name: Build VSIX diff --git a/.vscode/launch.json b/.vscode/launch.json index 8b86ce87..df20fd20 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -12,7 +12,7 @@ "runtimeExecutable": "${execPath}", "args": ["--extensionDevelopmentPath=${workspaceFolder}/vscode-wpilib"], "outFiles": ["${workspaceFolder}/vscode-wpilib/out/**/*.js"], - "preLaunchTask": "vscode-web-watch" + "preLaunchTask": "npm: build:dev" }, { "name": "Extension Tests", @@ -24,7 +24,7 @@ "--extensionTestsPath=${workspaceFolder}/vscode-wpilib/out/test" ], "outFiles": ["${workspaceFolder}/vscode-wpilib/out/test/**/*.js"], - "preLaunchTask": "vscode-web-watch" + "preLaunchTask": "npm: build:dev" } ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 8bf11a27..1f4dec9f 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,18 +4,30 @@ "version": "2.0.0", "tasks": [ { + "label": "npm: build:dev", "type": "npm", - "identifier": "vscode-web-watch", - "script": "webpack-watch", + "script": "build:dev", "path": "vscode-wpilib/", - "isBackground": true, - "presentation": { - "reveal": "never" - }, "group": { "kind": "build", "isDefault": true }, + "presentation": { + "reveal": "never" + } + }, + { + "label": "wpilib: watch", + "type": "npm", + "script": "watch", + "path": "vscode-wpilib/", + "isBackground": true, + "runOptions": { + "runOn": "folderOpen" + }, + "presentation": { + "reveal": "never" + }, "problemMatcher": [] } ] diff --git a/vscode-wpilib/.vscodeignore b/vscode-wpilib/.vscodeignore index 8ba1fdb8..743a0683 100644 --- a/vscode-wpilib/.vscodeignore +++ b/vscode-wpilib/.vscodeignore @@ -2,7 +2,6 @@ .vscode-test/** node_modules .gitignore -webpack.config.js gulpfile.js i18n/**/package.i18n.json locale/** diff --git a/vscode-wpilib/eslint.config.mjs b/vscode-wpilib/eslint.config.mjs index eccce053..80329063 100644 --- a/vscode-wpilib/eslint.config.mjs +++ b/vscode-wpilib/eslint.config.mjs @@ -8,7 +8,7 @@ export default defineConfig([ 'out/', 'resources/', '.eslintrc.js', - 'webpack.config.js', + 'rollup.*.config.mjs', 'gulpfile.js', 'dist', ]), diff --git a/vscode-wpilib/gulpfile.mjs b/vscode-wpilib/gulpfile.mjs index 9813527b..7f744172 100644 --- a/vscode-wpilib/gulpfile.mjs +++ b/vscode-wpilib/gulpfile.mjs @@ -32,6 +32,10 @@ gulp.task('clean', async () => { globSync(['package.nls.*.json', '*.vsix']).map(async (file) => await rm(file)); }); +gulp.task('clean-webviews', async () => { + await rm('resources/dist/', { force: true, recursive: true }); +}); + gulp.task('build', gulp.series('clean', 'i18n-compile', 'i18n-additional')); gulp.task('default', gulp.series('build')); diff --git a/vscode-wpilib/package-lock.json b/vscode-wpilib/package-lock.json index 24d67bcf..7f93f44f 100644 --- a/vscode-wpilib/package-lock.json +++ b/vscode-wpilib/package-lock.json @@ -21,6 +21,12 @@ }, "devDependencies": { "@eslint/js": "^9.29.0", + "@rollup/plugin-commonjs": "^25.0.8", + "@rollup/plugin-html": "^1.0.3", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.3.0", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^11.1.6", "@types/micromatch": "^4.0.9", "@types/mocha": "^10.0.10", "@types/node": "^22.19.0", @@ -32,16 +38,16 @@ "gulp-filter": "^9.0.1", "gulp-yaml": "^2.0.4", "mocha": "^11.5.0", + "npm-run-all": "^4.1.5", "prettier": "3.5.3", - "terser-webpack-plugin": "^5.3.14", - "ts-loader": "^9.5.4", + "rollup": "^4.22.4", + "rollup-plugin-svelte": "^7.2.3", + "svelte": "^5.0.0", + "svelte-preprocess": "^6.0.0", "ts-node": "^10.9.2", "typescript": "^5.9.2", "typescript-eslint": "^8.43.0", - "vscode-nls-dev": "^4.0.4", - "webpack": "^5.101.3", - "webpack-cli": "^6.0.1", - "webpack-node-externals": "^3.0.0" + "vscode-nls-dev": "^4.0.4" }, "engines": { "vscode": "^1.105.0" @@ -302,16 +308,6 @@ "kuler": "^2.0.0" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", - "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.17.0" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", @@ -357,9 +353,9 @@ } }, "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -368,9 +364,9 @@ } }, "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -444,9 +440,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -465,9 +461,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -602,27 +598,6 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -701,6 +676,17 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -789,221 +775,781 @@ "node": ">=14" } }, - "node_modules/@secretlint/config-creator": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-10.2.2.tgz", - "integrity": "sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==", + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.8", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz", + "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/types": "^10.2.2" + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" }, "engines": { - "node": ">=20.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@secretlint/config-loader": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-10.2.2.tgz", - "integrity": "sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==", + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@secretlint/profiler": "^10.2.2", - "@secretlint/resolver": "^10.2.2", - "@secretlint/types": "^10.2.2", - "ajv": "^8.17.1", - "debug": "^4.4.1", - "rc-config-loader": "^4.1.3" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@secretlint/config-loader/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "brace-expansion": "^2.0.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=10" } }, - "node_modules/@secretlint/config-loader/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/@secretlint/core": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-10.2.2.tgz", - "integrity": "sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==", + "node_modules/@rollup/plugin-html": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-html/-/plugin-html-1.1.0.tgz", + "integrity": "sha512-MTJDgMp83fB0kFRU95wAUqboUTcl1O1oXg7KLZNjNXfgPKTV0crek1k2vBUgM6Nmuvl/koqea7OrnUzzQdWT7w==", "dev": true, "license": "MIT", - "dependencies": { - "@secretlint/profiler": "^10.2.2", - "@secretlint/types": "^10.2.2", - "debug": "^4.4.1", - "structured-source": "^4.0.0" - }, "engines": { - "node": ">=20.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@secretlint/formatter": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/formatter/-/formatter-10.2.2.tgz", - "integrity": "sha512-10f/eKV+8YdGKNQmoDUD1QnYL7TzhI2kzyx95vsJKbEa8akzLAR5ZrWIZ3LbcMmBLzxlSQMMccRmi05yDQ5YDA==", + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/resolver": "^10.2.2", - "@secretlint/types": "^10.2.2", - "@textlint/linter-formatter": "^15.2.0", - "@textlint/module-interop": "^15.2.0", - "@textlint/types": "^15.2.0", - "chalk": "^5.4.1", - "debug": "^4.4.1", - "pluralize": "^8.0.0", - "strip-ansi": "^7.1.0", - "table": "^6.9.0", - "terminal-link": "^4.0.0" + "@rollup/pluginutils": "^5.1.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@secretlint/formatter/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", "dev": true, "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, "engines": { - "node": ">=12" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@secretlint/formatter/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", "dev": true, "license": "MIT", + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@secretlint/formatter/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/@rollup/plugin-typescript": { + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.6.tgz", + "integrity": "sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" }, "engines": { - "node": ">=12" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } } }, - "node_modules/@secretlint/node": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/node/-/node-10.2.2.tgz", - "integrity": "sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==", + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/config-loader": "^10.2.2", - "@secretlint/core": "^10.2.2", - "@secretlint/formatter": "^10.2.2", - "@secretlint/profiler": "^10.2.2", - "@secretlint/source-creator": "^10.2.2", - "@secretlint/types": "^10.2.2", - "debug": "^4.4.1", - "p-map": "^7.0.3" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@secretlint/node/node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@secretlint/profiler": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-10.2.2.tgz", - "integrity": "sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@secretlint/resolver": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-10.2.2.tgz", - "integrity": "sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@secretlint/secretlint-formatter-sarif": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.2.2.tgz", - "integrity": "sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==", + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "node-sarif-builder": "^3.2.0" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@secretlint/secretlint-rule-no-dotenv": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.2.tgz", - "integrity": "sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==", + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@secretlint/types": "^10.2.2" - }, - "engines": { - "node": ">=20.0.0" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@secretlint/secretlint-rule-preset-recommend": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-10.2.2.tgz", - "integrity": "sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==", + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">=20.0.0" - } + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@secretlint/config-creator": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-10.2.2.tgz", + "integrity": "sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/types": "^10.2.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/config-loader": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-10.2.2.tgz", + "integrity": "sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/profiler": "^10.2.2", + "@secretlint/resolver": "^10.2.2", + "@secretlint/types": "^10.2.2", + "ajv": "^8.17.1", + "debug": "^4.4.1", + "rc-config-loader": "^4.1.3" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/config-loader/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@secretlint/config-loader/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@secretlint/core": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-10.2.2.tgz", + "integrity": "sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/profiler": "^10.2.2", + "@secretlint/types": "^10.2.2", + "debug": "^4.4.1", + "structured-source": "^4.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/formatter": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/formatter/-/formatter-10.2.2.tgz", + "integrity": "sha512-10f/eKV+8YdGKNQmoDUD1QnYL7TzhI2kzyx95vsJKbEa8akzLAR5ZrWIZ3LbcMmBLzxlSQMMccRmi05yDQ5YDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/resolver": "^10.2.2", + "@secretlint/types": "^10.2.2", + "@textlint/linter-formatter": "^15.2.0", + "@textlint/module-interop": "^15.2.0", + "@textlint/types": "^15.2.0", + "chalk": "^5.4.1", + "debug": "^4.4.1", + "pluralize": "^8.0.0", + "strip-ansi": "^7.1.0", + "table": "^6.9.0", + "terminal-link": "^4.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/formatter/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@secretlint/formatter/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@secretlint/formatter/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@secretlint/node": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/node/-/node-10.2.2.tgz", + "integrity": "sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/config-loader": "^10.2.2", + "@secretlint/core": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/profiler": "^10.2.2", + "@secretlint/source-creator": "^10.2.2", + "@secretlint/types": "^10.2.2", + "debug": "^4.4.1", + "p-map": "^7.0.3" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/node/node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@secretlint/profiler": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-10.2.2.tgz", + "integrity": "sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==", + "dev": true, + "license": "MIT" + }, + "node_modules/@secretlint/resolver": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-10.2.2.tgz", + "integrity": "sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@secretlint/secretlint-formatter-sarif": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.2.2.tgz", + "integrity": "sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-sarif-builder": "^3.2.0" + } + }, + "node_modules/@secretlint/secretlint-rule-no-dotenv": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.2.tgz", + "integrity": "sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/types": "^10.2.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/secretlint-rule-preset-recommend": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-10.2.2.tgz", + "integrity": "sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } }, "node_modules/@secretlint/source-creator": { "version": "10.2.2", @@ -1052,28 +1598,38 @@ "text-hex": "1.0.x" } }, + "node_modules/@sveltejs/acorn-typescript": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.6.tgz", + "integrity": "sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8.9.0" + } + }, "node_modules/@textlint/ast-node-types": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.3.tgz", - "integrity": "sha512-GEhoxfmh6TF+xC8TJmAUwOzzh0J6sVDqjKhwTTwetf7YDdhHbIv1PuUb/dTadMVIWs1H0+JD4Y27n6LWMmqn9Q==", + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.5.0.tgz", + "integrity": "sha512-K0LEuuTo4rza8yDrlYkRdXLao8Iz/QBMsQdIxRrOOrLYb4HAtZaypZ78c+J6rDA1UlGxadZVLmkkiv4KV5fMKQ==", "dev": true, "license": "MIT" }, "node_modules/@textlint/linter-formatter": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.2.3.tgz", - "integrity": "sha512-gnFGl8MejAS4rRDPKV2OYvU0Tb0iJySOPDahf+RCK30b615UqY6CjqWxXw1FvXfT3pHPoRrefVu39j1AKm2ezg==", + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.5.0.tgz", + "integrity": "sha512-DPTm2+VXKID41qKQWagg/4JynM6hEEpvbq0PlGsEoC4Xm7IqXIxFym3mSf5+ued0cuiIV1hR9kgXjqGdP035tw==", "dev": true, "license": "MIT", "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "15.2.3", - "@textlint/resolver": "15.2.3", - "@textlint/types": "15.2.3", + "@textlint/module-interop": "15.5.0", + "@textlint/resolver": "15.5.0", + "@textlint/types": "15.5.0", "chalk": "^4.1.2", "debug": "^4.4.3", - "js-yaml": "^3.14.1", + "js-yaml": "^4.1.1", "lodash": "^4.17.21", "pluralize": "^2.0.0", "string-width": "^4.2.3", @@ -1092,28 +1648,67 @@ "node": ">=8" } }, - "node_modules/@textlint/linter-formatter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@textlint/linter-formatter/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@textlint/linter-formatter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/@textlint/linter-formatter/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@textlint/linter-formatter/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, "node_modules/@textlint/linter-formatter/node_modules/pluralize": { @@ -1136,34 +1731,47 @@ "node": ">=8" } }, + "node_modules/@textlint/linter-formatter/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@textlint/module-interop": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.2.3.tgz", - "integrity": "sha512-dV6M3ptOFJjR5bgYUMeVqc8AqFrMtCEFaZEiLAfMufX29asYonI2K8arqivOA69S2Lh6esyij6V7qpQiXeK/cA==", + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.5.0.tgz", + "integrity": "sha512-rqfouEhBEgZlR9umswWXXRBcmmSM28Trpr9b0duzgehKYVc7wSQCuQMagr6YBJa2NRMfRNinupusbJXMg0ij2A==", "dev": true, "license": "MIT" }, "node_modules/@textlint/resolver": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.2.3.tgz", - "integrity": "sha512-Qd3udqo2sWa3u0sYgDVd9M/iybBVBJLrWGaID6Yzl9GyhdGi0E6ngo3b9r+H6psbJDIaCKi54IxvC9q5didWfA==", + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.5.0.tgz", + "integrity": "sha512-kK5nFbg5N3kVoZExQI/dnYjCInmTltvXDnuCRrBxHI01i6kO/o8R7Lc2aFkAZ6/NUZuRPalkyDdwZJke4/R2wg==", "dev": true, "license": "MIT" }, "node_modules/@textlint/types": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.2.3.tgz", - "integrity": "sha512-i8XVmDHJwykMXcGgkSxZLjdbeqnl+voYAcIr94KIe0STwgkHIhwHJgb/tEVFawGClHo+gPczF12l1C5+TAZEzQ==", + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.5.0.tgz", + "integrity": "sha512-EjAPbuA+3NyQ9WyFP7iUlddi35F3mGrf4tb4cZM0nWywbtEJ3+XAYqL+5RsF0qFeSguxGir09NdZOWrG9wVOUQ==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.2.3" + "@textlint/ast-node-types": "15.5.0" } }, "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", "dev": true, "license": "MIT" }, @@ -1195,114 +1803,339 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/micromatch": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.10.tgz", + "integrity": "sha512-5jOhFDElqr4DKTrTEbnW8DZ4Hz5LRUEmyrGpCMrD/NphYv3nUnaF08xmSLx1rGGnyEs/kFnhiw6dCgcDqMr5PQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@types/braces": "*" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz", + "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==", + "devOptional": true, "license": "MIT", "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "undici-types": "~6.21.0" } }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, "license": "MIT" }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sarif": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", + "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/vscode": { + "version": "1.105.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.105.0.tgz", + "integrity": "sha512-Lotk3CTFlGZN8ray4VxJE7axIyLZZETQJVWi/lYoUVQuqfRxlQhVOfoejsD2V3dVXPSbS15ov5ZyowMAzgUqcw==", "dev": true, "license": "MIT" }, - "node_modules/@types/micromatch": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.10.tgz", - "integrity": "sha512-5jOhFDElqr4DKTrTEbnW8DZ4Hz5LRUEmyrGpCMrD/NphYv3nUnaF08xmSLx1rGGnyEs/kFnhiw6dCgcDqMr5PQ==", + "node_modules/@types/xml2js": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.14.tgz", + "integrity": "sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.50.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.50.1.tgz", + "integrity": "sha512-PKhLGDq3JAg0Jk/aK890knnqduuI/Qj+udH7wCf0217IGi4gt+acgCyPVe79qoT+qKUvHMDQkwJeKW9fwl8Cyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.50.1", + "@typescript-eslint/type-utils": "8.50.1", + "@typescript-eslint/utils": "8.50.1", + "@typescript-eslint/visitor-keys": "8.50.1", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.50.1", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.50.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.50.1.tgz", + "integrity": "sha512-hM5faZwg7aVNa819m/5r7D0h0c9yC4DUlWAOvHAtISdFTc8xB86VmX5Xqabrama3wIPJ/q9RbGS1worb6JfnMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.50.1", + "@typescript-eslint/types": "8.50.1", + "@typescript-eslint/typescript-estree": "8.50.1", + "@typescript-eslint/visitor-keys": "8.50.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.50.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.50.1.tgz", + "integrity": "sha512-E1ur1MCVf+YiP89+o4Les/oBAVzmSbeRB0MQLfSlYtbWU17HPxZ6Bhs5iYmKZRALvEuBoXIZMOIRRc/P++Ortg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.50.1", + "@typescript-eslint/types": "^8.50.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.50.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.50.1.tgz", + "integrity": "sha512-mfRx06Myt3T4vuoHaKi8ZWNTPdzKPNBhiblze5N50//TSHOAQQevl/aolqA/BcqqbJ88GUnLqjjcBc8EWdBcVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.50.1", + "@typescript-eslint/visitor-keys": "8.50.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.50.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.50.1.tgz", + "integrity": "sha512-ooHmotT/lCWLXi55G4mvaUF60aJa012QzvLK0Y+Mp4WdSt17QhMhWOaBWeGTFVkb2gDgBe19Cxy1elPXylslDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.50.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.50.1.tgz", + "integrity": "sha512-7J3bf022QZE42tYMO6SL+6lTPKFk/WphhRPe9Tw/el+cEwzLz1Jjz2PX3GtGQVxooLDKeMVmMt7fWpYRdG5Etg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.50.1", + "@typescript-eslint/typescript-estree": "8.50.1", + "@typescript-eslint/utils": "8.50.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.50.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.1.tgz", + "integrity": "sha512-v5lFIS2feTkNyMhd7AucE/9j/4V9v5iIbpVRncjk/K0sQ6Sb+Np9fgYS/63n6nwqahHQvbmujeBL7mp07Q9mlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.50.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.50.1.tgz", + "integrity": "sha512-woHPdW+0gj53aM+cxchymJCrh0cyS7BTIdcDxWUNsclr9VDkOSbqC13juHzxOmQ22dDkMZEpZB+3X1WpUvzgVQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/braces": "*" + "@typescript-eslint/project-service": "8.50.1", + "@typescript-eslint/tsconfig-utils": "8.50.1", + "@typescript-eslint/types": "8.50.1", + "@typescript-eslint/visitor-keys": "8.50.1", + "debug": "^4.3.4", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@types/mocha": { - "version": "10.0.10", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", - "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "node_modules/@typescript-eslint/utils": { + "version": "8.50.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.50.1.tgz", + "integrity": "sha512-lCLp8H1T9T7gPbEuJSnHwnSuO9mDf8mfK/Nion5mZmiEaQD9sWf9W4dfeFqRyqRjF06/kBuTmAqcs9sewM2NbQ==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.19.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.0.tgz", - "integrity": "sha512-xpr/lmLPQEj+TUnHmR+Ab91/glhJvsqcjB+yY0Ix9GO70H6Lb4FHH5GeqdOE5btAx7eIMwuHkp4H2MSkLcqWbA==", - "devOptional": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.50.1", + "@typescript-eslint/types": "8.50.1", + "@typescript-eslint/typescript-estree": "8.50.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "license": "MIT" - }, - "node_modules/@types/vscode": { - "version": "1.105.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.105.0.tgz", - "integrity": "sha512-Lotk3CTFlGZN8ray4VxJE7axIyLZZETQJVWi/lYoUVQuqfRxlQhVOfoejsD2V3dVXPSbS15ov5ZyowMAzgUqcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/xml2js": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.14.tgz", - "integrity": "sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.50.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.50.1.tgz", + "integrity": "sha512-IrDKrw7pCRUR94zeuCSUWQ+w8JEf5ZX5jl/e6AHGSLi1/zIr0lgutfn/7JpfCey+urpgQEdrZVYzCaVVKiTwhQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@typescript-eslint/types": "8.50.1", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@typespec/ts-http-runtime": { @@ -1321,9 +2154,9 @@ } }, "node_modules/@vscode/vsce": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.6.2.tgz", - "integrity": "sha512-gvBfarWF+Ii20ESqjA3dpnPJpQJ8fFJYtcWtjwbRADommCzGg1emtmb34E+DKKhECYvaVyAl+TF9lWS/3GSPvg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.7.1.tgz", + "integrity": "sha512-OTm2XdMt2YkpSn2Nx7z2EJtSuhRHsTPYsSK59hr3v8jRArK+2UEoju4Jumn1CmpgoBLGI6ReHLJ/czYltNUW3g==", "dev": true, "license": "MIT", "dependencies": { @@ -1386,279 +2219,119 @@ "@vscode/vsce-sign-win32-x64": "2.0.6" } }, - "node_modules/@vscode/vsce-sign-win32-x64": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz", - "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@vscode/vsce/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/@vscode/vsce/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@vscode/vsce/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "color-convert": "^2.0.1" }, "engines": { - "node": "*" - } - }, - "node_modules/@vscode/vsce/node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" + "node": ">=8" }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "node_modules/@vscode/vsce/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "node_modules/@vscode/vsce/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "node_modules/@vscode/vsce/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "node_modules/@vscode/vsce/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "node_modules/@vscode/vsce/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" + "engines": { + "node": ">=8" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "node_modules/@vscode/vsce/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "node_modules/@vscode/vsce/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", - "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", - "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", - "dev": true, - "license": "MIT", "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" + "node": ">=8" } }, - "node_modules/@webpack-cli/serve": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", - "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", + "node_modules/@vscode/vsce/node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "license": "Apache-2.0" + "engines": { + "node": ">=4.0.0" + } }, "node_modules/acorn": { "version": "8.15.0", @@ -1673,19 +2346,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -1720,9 +2380,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -1736,48 +2396,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, "node_modules/ansi-colors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", @@ -1792,9 +2410,9 @@ } }, "node_modules/ansi-escapes": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", - "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", "dev": true, "license": "MIT", "dependencies": { @@ -1821,18 +2439,16 @@ } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "node_modules/ansi-wrap": { @@ -1873,6 +2489,16 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/aria-query": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz", + "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -1893,6 +2519,23 @@ "node": ">=0.10.0" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-differ": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz", @@ -1926,6 +2569,28 @@ "node": ">=0.10.0" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -1967,6 +2632,16 @@ "node": ">= 10.13.0" } }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/async-settle": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", @@ -1987,6 +2662,32 @@ "dev": true, "license": "MIT" }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/azure-devops-node-api": { "version": "12.5.0", "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", @@ -2049,9 +2750,9 @@ "license": "MIT" }, "node_modules/bare-events": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.1.tgz", - "integrity": "sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -2084,16 +2785,6 @@ ], "license": "MIT" }, - "node_modules/baseline-browser-mapping": { - "version": "2.8.21", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.21.tgz", - "integrity": "sha512-JU0h5APyQNsHOlAM7HnQnPToSDQoEBZqzu/YBlqDnEeymPnZDREeXJA3KBMQee+dKteAxZ2AtvQEvVYdZf241Q==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -2195,40 +2886,6 @@ "dev": true, "license": "ISC" }, - "node_modules/browserslist": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", - "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.8.19", - "caniuse-lite": "^1.0.30001751", - "electron-to-chromium": "^1.5.238", - "node-releases": "^2.0.26", - "update-browserslist-db": "^1.1.4" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -2307,6 +2964,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -2348,42 +3024,19 @@ "node": ">=6" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001751", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", - "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, "node_modules/cheerio": { @@ -2455,31 +3108,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chokidar/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -2502,6 +3130,42 @@ "node": ">=8" } }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/cliui/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -2529,66 +3193,28 @@ "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8" } }, - "node_modules/clone-deep/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, "node_modules/clone-stats": { @@ -2610,6 +3236,16 @@ "readable-stream": "^2.3.5" } }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/cockatiel": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", @@ -2634,21 +3270,20 @@ } }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, "license": "MIT" }, "node_modules/color-string": { @@ -2703,13 +3338,6 @@ "node": ">=12.20" } }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -2733,6 +3361,13 @@ "node": ">=18" } }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2812,6 +3447,60 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -2864,6 +3553,16 @@ "dev": true, "license": "MIT" }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/default-browser": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", @@ -2894,6 +3593,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-lazy-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", @@ -2907,6 +3624,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2938,6 +3673,13 @@ "node": ">=8" } }, + "node_modules/devalue": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.7.1.tgz", + "integrity": "sha512-MUbZ586EgQqdRnC4yDrlod3BEdyvE4TapGYHMW2CiaW+KkkFmWEFqBUaLltEZCGi0iFXCEjRF0OjF0DV2QHjOA==", + "dev": true, + "license": "MIT" + }, "node_modules/diff": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", @@ -3076,13 +3818,6 @@ "url": "https://bevry.me/fund" } }, - "node_modules/electron-to-chromium": { - "version": "1.5.244", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz", - "integrity": "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==", - "dev": true, - "license": "ISC" - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -3118,20 +3853,6 @@ "once": "^1.4.0" } }, - "node_modules/enhanced-resolve": { - "version": "5.18.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", - "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -3145,19 +3866,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/envinfo": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.19.0.tgz", - "integrity": "sha512-DoSM9VyG6O3vqBf+p3Gjgr/Q52HYBBtO3v+4koAxt1MnWr+zEnxE+nke/yXS4lt2P4SYCHQ4V3f1i88LQVOpAw==", - "dev": true, - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/environment": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", @@ -3171,6 +3879,85 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -3191,13 +3978,6 @@ "node": ">= 0.4" } }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -3227,6 +4007,24 @@ "node": ">= 0.4" } }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -3237,6 +4035,16 @@ "node": ">=6" } }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/eslint": { "version": "9.38.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", @@ -3327,10 +4135,26 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -3338,6 +4162,43 @@ "concat-map": "0.0.1" } }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3377,6 +4238,16 @@ "node": ">=10.13.0" } }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/eslint/node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -3388,18 +4259,38 @@ } }, "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "has-flag": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=8" } }, + "node_modules/esm-env": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "dev": true, + "license": "MIT" + }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -3458,6 +4349,24 @@ "node": ">=0.10" } }, + "node_modules/esrap": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.5.tgz", + "integrity": "sha512-/yLB1538mag+dn0wsePTe8C0rDIjUOaJpMs2McodSzmM2msWcZsBSdRtg6HOBt0A/r82BN+Md3pgwSc/uWt2Ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "peerDependencies": { + "@typescript-eslint/types": "^8.2.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/types": { + "optional": true + } + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -3481,6 +4390,13 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3491,16 +4407,6 @@ "node": ">=0.10.0" } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/events-universal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", @@ -3785,9 +4691,9 @@ } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, "license": "ISC" }, @@ -3797,6 +4703,22 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", "license": "MIT" }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3869,9 +4791,9 @@ "optional": true }, "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "dev": true, "license": "MIT", "dependencies": { @@ -3890,6 +4812,21 @@ "dev": true, "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -3900,6 +4837,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3964,6 +4942,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -3973,14 +4969,14 @@ "optional": true }, "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", - "license": "ISC", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "license": "BlueOak-1.0.0", "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", + "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" @@ -4008,13 +5004,6 @@ "node": ">= 6" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/glob-watcher": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", @@ -4029,16 +5018,37 @@ "node": ">= 10.13.0" } }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/glob/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -4111,6 +5121,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/glogg": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", @@ -4144,13 +5171,6 @@ "dev": true, "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/gulp": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.1.tgz", @@ -4197,6 +5217,82 @@ "node": ">=10.13.0" } }, + "node_modules/gulp-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/gulp-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/gulp-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/gulp-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/gulp-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/gulp-filter": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-9.0.1.tgz", @@ -4294,9 +5390,9 @@ } }, "node_modules/gulp-yaml/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -4514,14 +5610,56 @@ "node": ">= 10.13.0" } }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-symbols": { @@ -4708,37 +5846,17 @@ } }, "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4792,6 +5910,21 @@ "dev": true, "license": "ISC" }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/interpret": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", @@ -4826,6 +5959,67 @@ "node": ">=0.10.0" } }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4839,6 +6033,36 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", @@ -4855,6 +6079,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-docker": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", @@ -4881,6 +6140,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -4890,6 +6165,26 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -4922,6 +6217,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, "node_modules/is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", @@ -4932,58 +6247,207 @@ "node": ">=0.10.0" } }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { - "is-unc-path": "^1.0.0" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-unc-path": { @@ -5022,6 +6486,52 @@ "node": ">=0.10.0" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -5104,37 +6614,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5143,9 +6622,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -5162,10 +6641,10 @@ "dev": true, "license": "MIT" }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, "license": "MIT" }, @@ -5251,13 +6730,13 @@ } }, "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.3.tgz", + "integrity": "sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==", "dev": true, "license": "MIT", "dependencies": { - "jwa": "^1.4.1", + "jwa": "^1.4.2", "safe-buffer": "^5.0.1" } }, @@ -5353,19 +6832,12 @@ "uc.micro": "^2.0.0" } }, - "node_modules/loader-runner": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", - "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } + "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", @@ -5384,9 +6856,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "dev": true, "license": "MIT" }, @@ -5470,6 +6942,82 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/logform": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", @@ -5500,6 +7048,16 @@ "node": ">=10" } }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -5525,9 +7083,9 @@ "license": "MIT" }, "node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", "dev": true, "license": "MIT", "dependencies": { @@ -5559,12 +7117,14 @@ "dev": true, "license": "MIT" }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, - "license": "MIT" + "engines": { + "node": ">= 0.10.0" + } }, "node_modules/merge2": { "version": "1.4.1", @@ -5640,13 +7200,13 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -5675,9 +7235,9 @@ "optional": true }, "node_modules/mocha": { - "version": "11.7.4", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.4.tgz", - "integrity": "sha512-1jYAaY8x0kAZ0XszLWu14pzsf4KV740Gld4HXkhNTXwcHx4AUEDkPzgEHg9CM5dVcW+zv036tjpsEbLraPJj4w==", + "version": "11.7.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", + "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==", "dev": true, "license": "MIT", "dependencies": { @@ -5721,6 +7281,22 @@ "node": ">=8" } }, + "node_modules/mocha/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/mocha/node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", @@ -5752,6 +7328,26 @@ "node": ">=12" } }, + "node_modules/mocha/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/mocha/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -5766,9 +7362,9 @@ } }, "node_modules/mocha/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "dev": true, "license": "ISC", "dependencies": { @@ -5786,10 +7382,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -5857,17 +7453,7 @@ }, "funding": { "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/mocha/node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" + "url": "https://paulmillr.com/funding/" } }, "node_modules/mocha/node_modules/strip-ansi": { @@ -6005,10 +7591,10 @@ "dev": true, "license": "MIT" }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true, "license": "MIT" }, @@ -6034,17 +7620,10 @@ "license": "MIT", "optional": true }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "dev": true, - "license": "MIT" - }, "node_modules/node-sarif-builder": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.2.0.tgz", - "integrity": "sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.3.1.tgz", + "integrity": "sha512-8z5dAbhpxmk/WRQHXlv4V0h+9Y4Ugk+w08lyhV/7E/CQX9yDdBc3025/EG+RSMJU2aPFh/IQ7XDV7Ti5TLt/TA==", "dev": true, "license": "MIT", "dependencies": { @@ -6052,54 +7631,250 @@ "fs-extra": "^11.1.1" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 4" } }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "node_modules/npm-run-all/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { - "lru-cache": "^10.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "*" } }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "node_modules/npm-run-all/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/normalize-path": { + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/path-type": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/npm-run-all/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -6136,6 +7911,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", @@ -6220,6 +8026,24 @@ "node": ">= 0.8.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -6252,16 +8076,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", @@ -6467,9 +8281,9 @@ } }, "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", @@ -6483,10 +8297,10 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "license": "ISC", + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } @@ -6508,103 +8322,47 @@ "license": [ "MIT", "Apache2" - ], - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + ], + "dependencies": { + "through": "~2.3" } }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" + "bin": { + "pidtree": "bin/pidtree.js" }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, "node_modules/plugin-error": { @@ -6673,6 +8431,16 @@ "node": ">=4" } }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prebuild-install": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", @@ -6765,9 +8533,9 @@ } }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6885,6 +8653,41 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/read-pkg/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -6934,6 +8737,50 @@ "node": ">= 10.13.0" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -7002,29 +8849,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", @@ -7049,6 +8873,16 @@ "node": ">=4" } }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -7060,6 +8894,83 @@ "node": ">=0.10.0" } }, + "node_modules/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-svelte": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.2.3.tgz", + "integrity": "sha512-LlniP+h00DfM+E4eav/Kk8uGjgPUjGIBfrAS/IxQvsuFdqSM0Y2sXf31AdxuIGSW9GsmocDqOfaxR5QNno/Tgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^4.1.0", + "resolve.exports": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "rollup": ">=2.0.0", + "svelte": ">=3.5.0" + } + }, + "node_modules/rollup-plugin-svelte/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/run-applescript": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", @@ -7097,6 +9008,33 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -7118,6 +9056,48 @@ ], "license": "MIT" }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-stable-stringify": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", @@ -7248,27 +9228,63 @@ "node": ">= 10.13.0" } }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { - "kind-of": "^6.0.2" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/shallow-clone/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/shebang-command": { @@ -7292,6 +9308,19 @@ "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -7436,15 +9465,61 @@ "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/smob": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.1.tgz", + "integrity": "sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" } }, "node_modules/source-map": { @@ -7543,6 +9618,20 @@ "node": "*" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", @@ -7697,6 +9786,84 @@ "node": ">=8" } }, + "node_modules/string.prototype.padend": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", @@ -7743,16 +9910,16 @@ } }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/supports-hyperlinks": { @@ -7772,6 +9939,29 @@ "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -7785,6 +9975,100 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svelte": { + "version": "5.55.3", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.55.3.tgz", + "integrity": "sha512-dS1N+i3bA1v+c4UDb750MlN5vCO82G6vxh8HeTsPsTdJ1BLsN1zxSyDlIdBBqUjqZ/BxEwM8UrFf98aaoVnZFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@sveltejs/acorn-typescript": "^1.0.5", + "@types/estree": "^1.0.5", + "@types/trusted-types": "^2.0.7", + "acorn": "^8.12.1", + "aria-query": "5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "devalue": "^5.6.4", + "esm-env": "^1.2.1", + "esrap": "^2.2.4", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/svelte-preprocess": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.3.tgz", + "integrity": "sha512-PLG2k05qHdhmRG7zR/dyo5qKvakhm8IJ+hD2eFRQmMLHp7X3eJnjeupUtvuRpbNiF31RjVw45W+abDwHEmP5OA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.10.2", + "coffeescript": "^2.5.1", + "less": "^3.11.3 || ^4.0.0", + "postcss": "^7 || ^8", + "postcss-load-config": ">=3", + "pug": "^3.0.0", + "sass": "^1.26.8", + "stylus": ">=0.55", + "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.100 || ^5.0.0", + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "coffeescript": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-load-config": { + "optional": true + }, + "pug": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/svelte/node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.6" + } + }, "node_modules/sver": { "version": "1.8.4", "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", @@ -7824,9 +10108,9 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", "dependencies": { @@ -7870,20 +10154,6 @@ "node": ">=8" } }, - "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/tar-fs": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", @@ -7958,134 +10228,32 @@ "license": "MIT", "dependencies": { "ansi-escapes": "^7.0.0", - "supports-hyperlinks": "^3.2.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", - "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "supports-hyperlinks": "^3.2.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "node_modules/terser": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz", + "integrity": "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "BSD-2-Clause", "dependencies": { - "randombytes": "^2.1.0" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, "node_modules/terser/node_modules/commander": { @@ -8151,6 +10319,54 @@ "node": ">=0.10.0" } }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmp": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", @@ -8183,9 +10399,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.3.0.tgz", + "integrity": "sha512-6eg3Y9SF7SsAvGzRHQvvc1skDAhwI4YQ32ui1scxD1Ccr0G5qIIbUBT3pFTKX8kmWIQClHobtUdNuaBgwdfdWg==", "dev": true, "license": "MIT", "engines": { @@ -8195,37 +10411,6 @@ "typescript": ">=4.8.4" } }, - "node_modules/ts-loader": { - "version": "9.5.4", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.4.tgz", - "integrity": "sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-loader/node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 12" - } - }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -8271,9 +10456,9 @@ } }, "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -8337,247 +10522,121 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typed-rest-client": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", - "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-eslint": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.43.0.tgz", - "integrity": "sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.43.0", - "@typescript-eslint/parser": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0", - "@typescript-eslint/utils": "8.43.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.43.0.tgz", - "integrity": "sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==", + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/type-utils": "8.43.0", - "@typescript-eslint/utils": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.43.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "node": ">= 0.4" } }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.43.0.tgz", - "integrity": "sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==", + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", - "debug": "^4.3.4" + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/project-service": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.43.0.tgz", - "integrity": "sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.43.0", - "@typescript-eslint/types": "^8.43.0", - "debug": "^4.3.4" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz", - "integrity": "sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==", + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.43.0.tgz", - "integrity": "sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==", - "dev": true, - "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.43.0.tgz", - "integrity": "sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==", + "node_modules/typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0", - "@typescript-eslint/utils": "8.43.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.43.0.tgz", - "integrity": "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" } }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz", - "integrity": "sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==", + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.43.0", - "@typescript-eslint/tsconfig-utils": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "node": ">=14.17" } }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.43.0.tgz", - "integrity": "sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==", + "node_modules/typescript-eslint": { + "version": "8.50.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.50.1.tgz", + "integrity": "sha512-ytTHO+SoYSbhAH9CrYnMhiLx8To6PSSvqnvXyPUgPETCvB6eBKmTI9w6XMPS3HsBRGkwTVBX+urA8dYQx6bHfQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0" + "@typescript-eslint/eslint-plugin": "8.50.1", + "@typescript-eslint/parser": "8.50.1", + "@typescript-eslint/typescript-estree": "8.50.1", + "@typescript-eslint/utils": "8.50.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -8591,37 +10650,6 @@ "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz", - "integrity": "sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.43.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/typescript-eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", @@ -8629,6 +10657,25 @@ "dev": true, "license": "MIT" }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", @@ -8640,9 +10687,9 @@ } }, "node_modules/underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", + "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==", "dev": true, "license": "MIT" }, @@ -8683,9 +10730,9 @@ } }, "node_modules/undici": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", - "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", + "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==", "dev": true, "license": "MIT", "engines": { @@ -8722,37 +10769,6 @@ "node": ">= 10.0.0" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -8996,10 +11012,26 @@ "node": ">=8" } }, + "node_modules/vscode-nls-dev/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/vscode-nls-dev/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -9022,6 +11054,26 @@ "node": ">=12" } }, + "node_modules/vscode-nls-dev/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/vscode-nls-dev/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/vscode-nls-dev/node_modules/event-stream": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.5.tgz", @@ -9061,9 +11113,9 @@ } }, "node_modules/vscode-nls-dev/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -9151,273 +11203,140 @@ "node": ">=12" } }, - "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, "license": "MIT", "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "iconv-lite": "0.6.3" }, "engines": { - "node": ">=10.13.0" + "node": ">=18" } }, - "node_modules/webpack": { - "version": "5.102.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz", - "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.8", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", - "acorn-import-phases": "^1.0.3", - "browserslist": "^4.26.3", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.3", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", - "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.4", - "webpack-sources": "^3.3.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } + "node": ">=18" } }, - "node_modules/webpack-cli": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", - "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", - "dev": true, - "license": "MIT", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { - "@discoveryjs/json-ext": "^0.6.1", - "@webpack-cli/configtest": "^3.0.1", - "@webpack-cli/info": "^3.0.1", - "@webpack-cli/serve": "^3.0.1", - "colorette": "^2.0.14", - "commander": "^12.1.0", - "cross-spawn": "^7.0.3", - "envinfo": "^7.14.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^6.0.1" + "isexe": "^2.0.0" }, "bin": { - "webpack-cli": "bin/cli.js" + "node-which": "bin/node-which" }, "engines": { - "node": ">=18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.82.0" - }, - "peerDependenciesMeta": { - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } + "node": ">= 8" } }, - "node_modules/webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" }, "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/webpack-node-externals": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", - "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "node": ">= 0.4" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack/node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", "dependencies": { - "iconv-lite": "0.6.3" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "node": ">= 0.4" }, - "engines": { - "node": ">= 8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true, - "license": "MIT" - }, "node_modules/winston": { "version": "3.18.3", "resolved": "https://registry.npmjs.org/winston/-/winston-3.18.3.tgz", @@ -9543,6 +11462,39 @@ "node": ">=8" } }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -9801,6 +11753,13 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zimmerframe": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", + "dev": true, + "license": "MIT" } } } diff --git a/vscode-wpilib/package.json b/vscode-wpilib/package.json index b2050b4b..a9072f7b 100644 --- a/vscode-wpilib/package.json +++ b/vscode-wpilib/package.json @@ -429,19 +429,31 @@ "repository": "https://github.com/wpilibsuite/vscode-wpilib", "homepage": "https://github.com/wpilibsuite/vscode-wpilib", "scripts": { - "vscode:prepublish": "gulp build && eslint . && webpack --config-node-env production", + "vscode:prepublish": "gulp build && npm run build && eslint .", "clean": "gulp clean", "lint": "eslint .", - "webpack": "webpack --config-node-env production", - "webpack-watch": "webpack --config-node-env development --watch", + "build": "npm-run-all build:webviews build:extension", + "build:dev": "npm-run-all build:webviews:dev build:extension:dev", + "build:webviews": "gulp clean-webviews && rollup -c rollup.webviews.config.mjs --environment NODE_ENV:production", + "build:webviews:dev": "gulp clean-webviews && rollup -c rollup.webviews.config.mjs --environment NODE_ENV:development", + "build:extension": "rollup -c rollup.extension.config.mjs --environment NODE_ENV:production", + "build:extension:dev": "rollup -c rollup.extension.config.mjs --environment NODE_ENV:development", + "watch:webviews": "rollup -c rollup.webviews.config.mjs -w --environment NODE_ENV:development", + "watch:extension": "rollup -c rollup.extension.config.mjs -w --environment NODE_ENV:development", + "watch": "npm-run-all --parallel watch:extension watch:webviews", "unittest": "mocha -r ts-node/register -u tdd src/unittest/*.ts", "gulp": "gulp", - "test": "webpack --config-node-env production && node ./node_modules/vscode/bin/test", + "test": "npm run build:extension && node ./node_modules/vscode/bin/test", "updateActivation": "gulp update-activation", "vscePackage": "vsce package --no-dependencies" }, "devDependencies": { "@eslint/js": "^9.29.0", + "@rollup/plugin-commonjs": "^25.0.8", + "@rollup/plugin-html": "^1.0.3", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.3.0", + "@rollup/plugin-typescript": "^11.1.6", "@types/micromatch": "^4.0.9", "@types/mocha": "^10.0.10", "@types/node": "^22.19.0", @@ -453,16 +465,17 @@ "gulp-filter": "^9.0.1", "gulp-yaml": "^2.0.4", "mocha": "^11.5.0", + "npm-run-all": "^4.1.5", "prettier": "3.5.3", - "terser-webpack-plugin": "^5.3.14", - "ts-loader": "^9.5.4", + "@rollup/plugin-terser": "^0.4.4", + "rollup": "^4.22.4", + "rollup-plugin-svelte": "^7.2.3", + "svelte": "^5.0.0", + "svelte-preprocess": "^6.0.0", "ts-node": "^10.9.2", "typescript": "^5.9.2", "typescript-eslint": "^8.43.0", - "vscode-nls-dev": "^4.0.4", - "webpack": "^5.101.3", - "webpack-cli": "^6.0.1", - "webpack-node-externals": "^3.0.0" + "vscode-nls-dev": "^4.0.4" }, "dependencies": { "extract-zip": "^2.0.1", diff --git a/vscode-wpilib/resources/live.html b/vscode-wpilib/resources/live.html deleted file mode 100644 index 4faa128b..00000000 --- a/vscode-wpilib/resources/live.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - WPILib RioLog - - - -
- - diff --git a/vscode-wpilib/resources/media/main.css b/vscode-wpilib/resources/media/main.css index 8331475a..cd76ed5e 100644 --- a/vscode-wpilib/resources/media/main.css +++ b/vscode-wpilib/resources/media/main.css @@ -1,28 +1,11 @@ .installed-dependency, .available-dependency { margin-bottom: 10px; - - &:first-of-type { - margin-top: 10px; - } } -.uninstall-button button[id*='version-action'], -.uninstall-button button[id*='uninstall-action'], -.uninstall-button button[id*='install-action'] { - width: 72px; - height: 24px; - box-sizing: border-box; - padding: 1px 8px; - display: flex; - align-items: center; - justify-content: center; -} - -.uninstall-button { - background-color: var(--vscode-button-secondaryBackground, transparent); - color: var(--vscode-button-secondaryForeground); - border: 1px solid var(--vscode-button-border); +.installed-dependency:first-of-type, +.available-dependency:first-of-type { + margin-top: 10px; } .dependency-header { @@ -87,29 +70,16 @@ justify-content: space-between; align-items: center; margin-bottom: 8px; +} - &:has(#updateall-action) { - margin-top: 4px; - } +.top-line:has(#updateall-action) { + margin-top: 4px; } #updateall-action { width: 100%; } -i { - margin-right: 4px !important; -} - -.uninstall-button { - padding: 4px !important; - - & > i { - margin-right: 4px !important; - margin-left: 4px !important; - } -} - .vscode-collapsible div { overflow: visible; } @@ -119,13 +89,35 @@ i { flex-shrink: 2; } -button[id*='install-action'] { - flex-shrink: 0; +.dependency-controls .vscode-button, +.available-dependency .vscode-button, +.top-line .vscode-button, +.url-install-section .vscode-button { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 4px; + padding: 4px 10px; + min-height: 26px; + box-sizing: border-box; } -button[id*='version-action'] { - overflow: visible; - padding: 1px 6px; +.dependency-controls .vscode-button span, +.available-dependency .vscode-button span, +.url-install-section .vscode-button span { + line-height: 1.2; +} + +.dependency-controls .uninstall-button { + background-color: var(--vscode-button-secondaryBackground, transparent); + color: var(--vscode-button-secondaryForeground); + border: 1px solid var(--vscode-button-border); + min-width: 32px; + padding: 4px; +} + +.dependency-controls .uninstall-button i { + margin: 0; } /* Project Creator and Import Styles */ @@ -299,15 +291,25 @@ button[id*='version-action'] { text-align: center; position: relative; transition: all 0.2s; + background-color: var(--vscode-editor-background); } .selection-card:hover { - background-color: var(--vscode-list-hoverBackground); + background-color: var(--vscode-button-background); + border-color: var(--vscode-button-background); + color: var(--vscode-button-foreground); +} + +.selection-card:hover h3, +.selection-card:hover p, +.selection-card:hover .card-icon { + color: var(--vscode-button-foreground); } .selection-card.selected { border-color: var(--vscode-button-background); - background-color: var(--vscode-editor-lineHighlightBackground, rgba(255, 255, 255, 0.05)); + background-color: var(--vscode-editor-background); + color: inherit; } .selection-card h3 { @@ -316,22 +318,22 @@ button[id*='version-action'] { } .selection-card p { - color: var(--vscode-descriptionForeground); + /* color: var(--vscode-descriptionForeground); */ font-size: 13px; margin-bottom: 16px; } -.card-icon { +/* .card-icon { color: var(--vscode-descriptionForeground); -} +} */ .card-icon i.codicon { font-size: 48px; } -.selection-card.selected .card-icon { +/* .selection-card.selected .card-icon { color: var(--vscode-button-background); -} +} */ .select-wrapper { position: relative; diff --git a/vscode-wpilib/resources/media/main.js b/vscode-wpilib/resources/media/main.js deleted file mode 100644 index 5d9830c1..00000000 --- a/vscode-wpilib/resources/media/main.js +++ /dev/null @@ -1,286 +0,0 @@ -//@ts-check - -// This script will be run within the webview itself -// It cannot access the main VS Code APIs directly. -(function () { - // @ts-ignore - const vscode = acquireVsCodeApi(); - let message; - - // Function to generate HTML for installed dependencies - function populateInstalledList(installed, container) { - // Create HTML for installed dependencies - const badge = Object.assign(document.createElement('span'), { - className: 'vscode-badge counter', - textContent: installed.length, - }); - document.querySelector('#installed-actions')?.replaceChildren(badge); - container.replaceChildren(); - - if (installed.length === 0) { - const emptyState = Object.assign(document.createElement('div'), { - className: 'empty-state', - textContent: 'No dependencies installed', - }); - container.appendChild(emptyState); - return; - } - - installed.forEach((dep, index) => { - const installedDep = Object.assign(document.createElement('div'), { - className: 'installed-dependency', - }); - - const header = Object.assign(document.createElement('div'), { - className: 'dependency-header', - }); - - const nameContainer = Object.assign(document.createElement('div'), { - className: 'dependency-title', - }); - - nameContainer.appendChild( - Object.assign(document.createElement('span'), { - textContent: dep.name, - className: 'dependency-name', - }) - ); - - nameContainer.appendChild( - Object.assign(document.createElement('span'), { - textContent: dep.currentVersion, - className: 'dependency-version', - }) - ); - - header.appendChild(nameContainer); - installedDep.appendChild(header); - - const controls = Object.assign(document.createElement('div'), { - className: 'dependency-controls', - }); - - const selectContainer = controls.appendChild( - Object.assign(document.createElement('div'), { - className: 'vscode-select', - style: 'margin: 4px 0', - }) - ); - - selectContainer.appendChild( - Object.assign(document.createElement('i'), { - className: 'codicon codicon-chevron-right chevron-icon', - }) - ); - - const versionSelect = selectContainer.appendChild( - Object.assign(document.createElement('select'), { - id: `version-select-${index}`, - }) - ); - - const versionAction = controls.appendChild( - Object.assign(document.createElement('button'), { - className: 'vscode-button', - id: `version-action-${index}`, - }) - ); - - dep.versionInfo.forEach((versionTuple, i) => { - const option = document.createElement('option'); - option.value = versionTuple.version; - option.textContent = versionTuple.version; - if (dep.currentVersion === versionTuple.version) { - option.selected = true; - versionAction.textContent = versionTuple.buttonText; - if (i === 0) { - // This is the first element of the version array thus the most current - versionAction.setAttribute('disabled', 'true'); - } - } - versionSelect.appendChild(option); - }); - - versionAction.addEventListener('click', () => { - if (versionSelect) { - var selectedText = versionSelect.options[versionSelect.selectedIndex].label; - // Handle update logic here - vscode.postMessage({ - type: 'update', - version: selectedText, - index: index, - }); - } - }); - - versionSelect.addEventListener('change', () => { - const versions = dep.versionInfo; - var selectedText = versionSelect.options[versionSelect.selectedIndex].label; - const version = versions.find((versionTuple) => versionTuple.version === selectedText); - // Change button text based on selected dropdown value - versionAction.textContent = version.buttonText; - - if ( - versionSelect.selectedIndex === 0 && - version.version === message.installed[index].currentVersion - ) { - // This is the first element of the version array thus the most current - versionAction.disabled = true; - } else { - versionAction.disabled = false; - } - }); - - const uninstallAction = controls.appendChild( - Object.assign(document.createElement('button'), { - id: `uninstall-action-${index}`, - className: 'uninstall-button vscode-button', - title: `Uninstall ${dep.name}`, - }) - ); - - uninstallAction.appendChild( - Object.assign(document.createElement('i'), { - className: 'codicon codicon-trash', - }) - ); - - uninstallAction.addEventListener('click', () => { - vscode.postMessage({ type: 'uninstall', index: index }); - }); - - installedDep.appendChild(controls); - container.appendChild(installedDep); - }); - } - - // Function to generate HTML for available dependencies - function populateAvailableList(available, container) { - const badge = Object.assign(document.createElement('span'), { - className: 'vscode-badge counter', - textContent: available.length, - }); - document.querySelector('#available-actions')?.replaceChildren(badge); - container.replaceChildren(); - - if (available.length === 0) { - const emptyState = Object.assign(document.createElement('div'), { - className: 'empty-state', - textContent: 'No additional dependencies available', - }); - container.appendChild(emptyState); - return; - } - - available.forEach((dep, index) => { - const availableDep = Object.assign(document.createElement('div'), { - className: 'available-dependency', - }); - - const header = Object.assign(document.createElement('div'), { - className: 'dependency-header', - }); - - header.appendChild( - Object.assign(document.createElement('span'), { - textContent: dep.name, - className: 'dependency-name', - }) - ); - - const installAction = header.appendChild( - Object.assign(document.createElement('button'), { - id: `install-action-${index}`, - className: 'vscode-button', - }) - ); - - installAction.appendChild( - Object.assign(document.createElement('i'), { - className: 'codicon codicon-add', - }) - ); - - installAction.appendChild(document.createTextNode(' Install')); - - installAction.addEventListener('click', () => { - vscode.postMessage({ type: 'install', index: index }); - }); - - availableDep.appendChild(header); - - const details = Object.assign(document.createElement('div'), { - className: 'dependency-description', - }); - - const versionSpan = details.appendChild( - Object.assign(document.createElement('span'), { - textContent: dep.version, - }) - ); - - details.appendChild(document.createTextNode(` - ${dep.description}`)); - availableDep.appendChild(details); - - container.appendChild(availableDep); - }); - } - - // Add event listeners to the buttons - function addEventListeners() { - // Handle messages sent from the extension to the webview - window.addEventListener('message', (event) => { - message = event.data; // The json data that the extension sent - switch (message.type) { - case 'updateDependencies': { - const installedContainer = document.getElementById('installed-dependencies'); - const availableContainer = document.getElementById('available-dependencies'); - - if (installedContainer) { - populateInstalledList(message.installed, installedContainer); - } else { - console.error('Element with ID "installed-dependencies" not found.'); - } - - if (availableContainer) { - populateAvailableList(message.available, availableContainer); - } else { - console.error('Element with ID "available-dependencies" not found.'); - } - - break; - } - } - }); - - document.getElementById('updateall-action')?.addEventListener('click', () => { - vscode.postMessage({ type: 'updateall' }); - }); - - document.getElementById('install-url-action')?.addEventListener('click', () => { - const urlInput = /** @type {HTMLInputElement | null} */ ( - document.getElementById('url-input') - ); - if (urlInput && urlInput.value.trim()) { - vscode.postMessage({ - type: 'installFromUrl', - url: urlInput.value.trim(), - }); - urlInput.value = ''; - } - }); - - document.getElementById('url-input')?.addEventListener('keypress', (event) => { - if (event.key === 'Enter') { - document.getElementById('install-url-action')?.click(); - } - }); - - // Listen for focus events - window.addEventListener('blur', () => { - vscode.postMessage({ type: 'blur' }); - }); - } - - addEventListeners(); -})(); diff --git a/vscode-wpilib/resources/media/riolog.css b/vscode-wpilib/resources/media/riolog.css index 3b83814b..3b39fc74 100644 --- a/vscode-wpilib/resources/media/riolog.css +++ b/vscode-wpilib/resources/media/riolog.css @@ -1,6 +1,29 @@ +html, +body { + height: 100vh; + margin: 0; + overflow: hidden; +} + body { scrollbar-gutter: stable; padding: 0; + display: flex; + flex-direction: column; +} + +#app { + display: flex; + flex-direction: column; + flex: 1; + overflow: hidden; +} + +#mainDiv { + display: flex; + flex-direction: column; + flex: 1; + overflow: hidden; } .toolbar { @@ -10,11 +33,7 @@ body { display: flex; flex-direction: column; gap: 8px; - position: fixed; - bottom: 0; - left: 0; - right: 0; - z-index: 100; + flex-shrink: 0; } .status-container { @@ -74,7 +93,7 @@ body { #log-container { padding: 8px; overflow-y: auto; - max-height: calc(100vh - 60px); + flex: 1; font-family: var(--vscode-editor-font-family, monospace); font-size: var(--vscode-editor-font-size, 13px); line-height: 1.4; diff --git a/vscode-wpilib/resources/webviews/gradle2025import.html b/vscode-wpilib/resources/webviews/gradle2025import.html deleted file mode 100644 index 674351a2..00000000 --- a/vscode-wpilib/resources/webviews/gradle2025import.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - WPILib 2025 Project Import - - - - - - -
- - -

Import WPILib 2025 Project

- -
-
Select Source
-
Configure Project
-
Review & Import
-
- - -
-
-

Step 1: Select Source Project

-

Select the build.gradle file of your 2025 WPILib project that you want to import.

-
- -
-
Gradle Project
- Select the build.gradle file of the gradle project to import. -
- -
- -
- -
- -
- -
-
- - -
-
- - -
-
-

Step 2: Configure Project

-

Configure the new project's location and settings.

-
- -
-
Base Folder
- Select a base folder to place the new project into. -
- -
- -
- -
- -
- -
-
Project Name
-
- -
Project name is required
-
-
- -
-
Team Number
-
- -
Invalid Team Number
-
-
- -
-
- - - Creates a new folder at Base Folder/Project Name -
-
- -
-
- - - Enables desktop simulation and unit testing -
-
- -
-

Hardware Platform

-

Select a hardware platform if applicable:

-
- - -
-
- - -
-
- - -
-
- -
- - -
-
- - -
-
-

Step 3: Review & Import

-

Review your settings and select additional options before importing.

-
- -
-
-
- Source Project: -
-
- Destination: -
-
- Team Number: -
-
-
- -
-
-

- Note: The import process copies your project source files to a new - directory and completely regenerates the gradle files. If you made non-standard - updates to the build.gradle, you'll need to make those changes again. Vendor libraries - must also be imported again. -

-

- For more details, see - Importing a Gradle Project - on frc-docs. -

-
-
- -
- - -
-
-
- - diff --git a/vscode-wpilib/resources/webviews/help.html b/vscode-wpilib/resources/webviews/help.html deleted file mode 100644 index 2d9a95de..00000000 --- a/vscode-wpilib/resources/webviews/help.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - WPILib Help - - - - - - -
- - -

WPILib Help

- -
-

- Welcome to WPILib Help! Thank you for alpha testing the Systemcore and 2027 WPILib. Please - see - - https://github.com/wpilibsuite/SystemcoreTesting/ - for the expectations for testing and to provide your feedback. -

- -

- To open this window again, open the Command Palette (F1 or View->Command Palette), and - select - Open WPILib Help. -

-

- For more help, see - the 2027 WPILib documentation. -

-
- -
-

Common Tasks

- -
- -
-

Setting Up Your Workspace

- -
- -
- - -
-
- - - - diff --git a/vscode-wpilib/resources/webviews/projectcreator.html b/vscode-wpilib/resources/webviews/projectcreator.html deleted file mode 100644 index cf72bae6..00000000 --- a/vscode-wpilib/resources/webviews/projectcreator.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - WPILib Project Creator - - - - - - -
- - -

Welcome to WPILib New Project Creator

- -
-
Project Type
-
Project Settings
-
Location & Config
-
Review & Create
-
- - -
-
-

Step 1: Select Project Type

-

Choose whether to create a project from a template or an example.

-
- -
-
-

Template

-

Start with a basic robot program structure

-
- -
-
-
-

Example

-

Start with a complete example project

-
- -
-
-
- -
-
- - -
-
- - -
-
-

Step 2: Select Language & Base

-

Choose the programming language and project base to use.

-
- -
-
Language
-
- - -
-
- -
-
Project Base
-
- - -
-
- -
- - -
-
- - -
-
-

Step 3: Project Location & Configuration

-

Set where to save your project and configure basic settings.

-
- -
-
Base Folder
-
- -
Base folder is required
-
-
- -
- -
- -
-
Project Name
-
- -
Project name is required
-
-
- -
-
Team Number
-
- -
Invalid Team Number
-
-
- -
-
- - - Creates a new folder at Base Folder/Project Name -
-
- -
-
- - - This enables unit testing and simulation support -
-
- -
- - -
-
- - -
-
-

Step 4: Review & Create

-

Review your selections and create the project.

-
- -
-
-
- Project Type: -
-
- Language: -
-
- Project Base: -
-
- Location: -
-
- Team Number: -
-
-
- -
- - -
-
-
- - diff --git a/vscode-wpilib/rollup.extension.config.mjs b/vscode-wpilib/rollup.extension.config.mjs new file mode 100644 index 00000000..297ed3fc --- /dev/null +++ b/vscode-wpilib/rollup.extension.config.mjs @@ -0,0 +1,33 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import commonjs from '@rollup/plugin-commonjs'; +import resolve from '@rollup/plugin-node-resolve'; +import typescript from '@rollup/plugin-typescript'; +import json from '@rollup/plugin-json'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const production = process.env.NODE_ENV === 'production'; + +export default { + input: path.resolve(__dirname, 'src/extension.ts'), + output: { + file: path.resolve(__dirname, 'out/extension.js'), + format: 'cjs', + sourcemap: production ? 'hidden' : 'inline', + exports: 'named', + }, + external: ['vscode'], + plugins: [ + resolve({ + preferBuiltins: true, + extensions: ['.mjs', '.js', '.json', '.ts'], + }), + json(), + commonjs(), + typescript({ + tsconfig: path.resolve(__dirname, 'tsconfig.rollup.extension.json'), + }), + ], +}; diff --git a/vscode-wpilib/rollup.webviews.config.mjs b/vscode-wpilib/rollup.webviews.config.mjs new file mode 100644 index 00000000..413a70f1 --- /dev/null +++ b/vscode-wpilib/rollup.webviews.config.mjs @@ -0,0 +1,173 @@ +import path from 'path'; +import { fileURLToPath } from 'url'; + +import commonjs from '@rollup/plugin-commonjs'; +import resolve from '@rollup/plugin-node-resolve'; +import typescript from '@rollup/plugin-typescript'; +import svelte from 'rollup-plugin-svelte'; +import terser from '@rollup/plugin-terser'; +import svelteConfig from './svelte.config.mjs'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const production = process.env.NODE_ENV === 'production'; + +const webviews = [ + { + name: 'help', + input: 'src/webviews/svelte/help/main.ts', + title: 'WPILib Help', + }, + { + name: 'projectcreator', + input: 'src/webviews/svelte/projectcreator/main.ts', + title: 'WPILib Project Creator', + }, + { + name: 'gradle2025import', + input: 'src/webviews/svelte/gradle2025import/main.ts', + title: 'WPILib Gradle 2025 Import', + }, + { + name: 'dependencyview', + input: 'src/webviews/svelte/dependencyview/main.ts', + title: 'WPILib Vendor Dependencies', + }, + { + name: 'riolog', + input: 'src/webviews/svelte/riolog/main.ts', + title: 'WPILib RioLog', + }, +]; + +function createWebviewHtml(title, entryFileName) { + return ` + + + + + ${title} + + +
+ + +`; +} + +function generateWebviewHtmlFiles() { + return { + name: 'generate-webview-html-files', + generateBundle(_outputOptions, bundle) { + const entryFileNames = new Map(); + + for (const file of Object.values(bundle)) { + if (file.type === 'chunk' && file.isEntry) { + entryFileNames.set(file.name, file.fileName); + } + } + + for (const webview of webviews) { + const entryFileName = entryFileNames.get(webview.name); + if (!entryFileName) { + this.error(`Missing entry chunk for webview '${webview.name}'`); + } + + this.emitFile({ + type: 'asset', + fileName: `${webview.name}.html`, + source: createWebviewHtml(webview.title, entryFileName), + }); + } + }, + }; +} + +// No minifyWithTerser needed, use @rollup/plugin-terser directly + +const bundleEntries = Object.fromEntries( + webviews.map(({ name, input }) => [name, path.resolve(__dirname, input)]) +); + +function toPosixPath(filePath) { + return filePath.split(path.sep).join('/'); +} + +function isSharedWebviewModule(moduleId) { + const modulePath = toPosixPath(moduleId); + return ( + modulePath.includes('/node_modules/') || + modulePath.includes('/src/webviews/svelte/lib/') || + modulePath.includes('/src/webviews/svelte/components/shared/') || + modulePath.endsWith('/src/formatter.ts') + ); +} + +export default { + input: bundleEntries, + output: { + dir: path.resolve(__dirname, 'resources', 'dist'), + entryFileNames: '[name].js', + chunkFileNames: 'chunks/[name]-[hash].js', + format: 'es', + sourcemap: !production, + manualChunks(id) { + if (isSharedWebviewModule(id)) { + return 'webview-shared'; + } + return undefined; + }, + }, + onwarn(warning, handler) { + if ( + warning.code === 'CIRCULAR_DEPENDENCY' && + Array.isArray(warning.ids) && + warning.ids.every((id) => id.includes(`${path.sep}node_modules${path.sep}svelte${path.sep}`)) + ) { + return; + } + handler(warning); + }, + plugins: [ + svelte({ + compilerOptions: { + dev: !production, + }, + emitCss: false, + preprocess: svelteConfig.preprocess, + }), + resolve({ + browser: true, + exportConditions: production ? ['production'] : ['development'], + dedupe: ['svelte'], + extensions: ['.mjs', '.js', '.json', '.ts', '.svelte'], + }), + commonjs(), + typescript({ + sourceMap: !production, + tsconfig: path.resolve(__dirname, 'tsconfig.webviews.json'), + outDir: path.resolve(__dirname, 'resources', 'dist', '.tsbuild'), + }), + production && + terser({ + module: true, + toplevel: true, + compress: { + module: true, + toplevel: true, + passes: 2, + }, + mangle: { + toplevel: true, + }, + format: { + comments: false, + }, + }), + generateWebviewHtmlFiles(), + ].filter(Boolean), + watch: { + clearScreen: false, + }, +}; diff --git a/vscode-wpilib/src/cppprovider/apiprovider.ts b/vscode-wpilib/src/cppprovider/apiprovider.ts index f14913fc..17b47017 100644 --- a/vscode-wpilib/src/cppprovider/apiprovider.ts +++ b/vscode-wpilib/src/cppprovider/apiprovider.ts @@ -2,7 +2,7 @@ import { readFile } from 'fs/promises'; import * as jsonc from 'jsonc-parser'; -import * as mm from 'micromatch'; +import mm from 'micromatch'; import * as path from 'path'; import * as vscode from 'vscode'; import { diff --git a/vscode-wpilib/src/dependencyView.ts b/vscode-wpilib/src/dependencyView.ts index 675d3395..495b1cb5 100644 --- a/vscode-wpilib/src/dependencyView.ts +++ b/vscode-wpilib/src/dependencyView.ts @@ -6,7 +6,7 @@ import { IProjectInfo, ProjectInfoGatherer } from './projectinfo'; import { IJsonDependency } from './shared/vendorlibrariesbase'; import { VendorLibraries } from './vendorlibraries'; import { isNewerVersion } from './versions'; - +import { loadDistWebviewHtml } from './webviews/distWebviewHtml'; export interface IJsonList { path: string; name: string; @@ -18,6 +18,7 @@ export interface IJsonList { } export interface IDepInstalled { + uuid: string; name: string; currentVersion: string; versionInfo: { version: string; buttonText: string }[]; @@ -48,6 +49,20 @@ export class DependencyViewProvider implements vscode.WebviewViewProvider { private changed = 0; private refreshInProgress = false; private showingInstructions = false; + private viewReady = false; + private marketplaceDeps: IJsonList[] = []; + private marketplaceDepsYear: string | undefined; + private marketplaceLastSuccessAt = 0; + private marketplaceLastAttemptAt = 0; + private readonly marketplaceCacheTTLms = 5 * 60 * 1000; + private readonly marketplaceRetryBackoffMs = 30 * 1000; + private pendingDependenciesUpdate: + | { + type: 'updateDependencies'; + installed: IDepInstalled[]; + available: IJsonList[]; + } + | undefined; private _view?: vscode.WebviewView; @@ -68,6 +83,8 @@ export class DependencyViewProvider implements vscode.WebviewViewProvider { _token: vscode.CancellationToken ) { this._view = webviewView; + this.viewReady = false; + this.pendingDependenciesUpdate = undefined; webviewView.webview.options = { // Allow scripts in the webview @@ -76,37 +93,20 @@ export class DependencyViewProvider implements vscode.WebviewViewProvider { localResourceRoots: [ this._extensionUri, vscode.Uri.joinPath(this._extensionUri, 'resources', 'media'), + vscode.Uri.joinPath(this._extensionUri, 'resources', 'dist'), ], }; this.wp = await this.externalApi.getPreferencesAPI().getFirstOrSelectedWorkspace(); if (this.wp === undefined) { logger.warn('no workspace'); + webviewView.webview.html = this._getHtmlForWebview(webviewView.webview, 'no-workspace'); return; } const prefs = this.externalApi.getPreferencesAPI().getPreferences(this.wp); if (prefs.getProjectYear() === 'none' || !prefs.getIsWPILibProject()) { - webviewView.webview.html = ` - - - - - WPILib Vendor Dependencies - - - - -
- - This is not a WPILib project.
- Vendor dependency management is only available for WPILib projects.
-
- To use vendor dependencies, open a WPILib project or create a new one from the WPILib extension. -
- - - `; + webviewView.webview.html = this._getHtmlForWebview(webviewView.webview, 'not-wpilib'); return; } @@ -119,6 +119,8 @@ export class DependencyViewProvider implements vscode.WebviewViewProvider { if (this.wp) { // If the webview becomes visible refresh it, invisible then check for changes if (webviewView.visible) { + // Show cached data immediately while refresh runs. + this.updateDependencies(); void this._refresh(this.wp); } else { if (this.showingInstructions) { @@ -135,11 +137,27 @@ export class DependencyViewProvider implements vscode.WebviewViewProvider { console.log(item.name.concat(' / ', item.version)) ); - webviewView.webview.html = this._getHtmlForWebview(webviewView.webview); + webviewView.webview.html = this._getHtmlForWebview(webviewView.webview, 'ready'); + // Populate the webview quickly with any cached data while the refresh runs. + this.updateDependencies(); + + const disposeListener = webviewView.onDidDispose(() => { + this.viewReady = false; + this.pendingDependenciesUpdate = undefined; + }); + this.disposables.push(disposeListener); webviewView.webview.onDidReceiveMessage((data) => { if (this.isJSMessage(data)) { switch (data.type) { + case 'loaded': { + this.viewReady = true; + if (this.pendingDependenciesUpdate) { + void this._view?.webview.postMessage(this.pendingDependenciesUpdate); + this.pendingDependenciesUpdate = undefined; + } + break; + } case 'install': { void this.install(data.index); break; @@ -458,12 +476,19 @@ export class DependencyViewProvider implements vscode.WebviewViewProvider { } public updateDependencies() { + const message = { + type: 'updateDependencies' as const, + installed: this.installedList, + available: this.availableDepsList, + }; + + if (!this.viewReady) { + this.pendingDependenciesUpdate = message; + return; + } + if (this._view) { - this._view.webview.postMessage({ - type: 'updateDependencies', - installed: this.installedList, - available: this.availableDepsList, - }); + this._view.webview.postMessage(message); } } @@ -482,67 +507,59 @@ export class DependencyViewProvider implements vscode.WebviewViewProvider { this.refreshInProgress = true; try { - this.installedDeps = await this.vendorLibraries.getCurrentlyInstalledLibraries(workspace); - this.installedList = []; - this.availableDepsList = []; - - this.availableDeps = await this.getAvailableDependencies(); - if (this.availableDeps.length !== 0) { - // Check Github for the VendorDep list - if (this.installedDeps.length !== 0) { - for (const id of this.installedDeps) { - let versionList = [{ version: id.version, buttonText: i18n('ui', 'To Latest') }]; - for (const ad of this.availableDeps) { - if (id.uuid === ad.uuid) { - // Populate version array with version and button text - if (id.version !== ad.version) { - if (isNewerVersion(ad.version, id.version)) { - versionList.push({ - version: ad.version, - buttonText: i18n('ui', 'Update'), - }); - } else { - versionList.push({ - version: ad.version, - buttonText: i18n('ui', 'Downgrade'), - }); - } - } + const installedDeps = await this.vendorLibraries.getCurrentlyInstalledLibraries(workspace); + const availableDeps = await this.getAvailableDependencies(); + + const installedList: IDepInstalled[] = []; + const availableDepsList: IJsonList[] = []; + + if (installedDeps.length !== 0) { + for (const id of installedDeps) { + let versionList = [{ version: id.version, buttonText: i18n('ui', 'To Latest') }]; + for (const ad of availableDeps) { + if (id.uuid === ad.uuid) { + if (id.version !== ad.version) { + versionList.push({ + version: ad.version, + buttonText: isNewerVersion(ad.version, id.version) + ? i18n('ui', 'Update') + : i18n('ui', 'Downgrade'), + }); } } - // Now we need to sort the version list newest to oldest - versionList = this.sortVersions(versionList); - - this.installedList.push({ - name: id.name, - currentVersion: id.version, - versionInfo: versionList, - }); } + versionList = this.sortVersions(versionList); + + installedList.push({ + uuid: id.uuid, + name: id.name, + currentVersion: id.version, + versionInfo: versionList, + }); } + } - // We need to group the available deps and filter out the installed ones - this.availableDeps.forEach((dep) => { - // See if the dep is one of the installed deps if so don't add it - const installedDep = this.installedDeps.findIndex((depend) => depend.uuid === dep.uuid); - if (installedDep < 0) { - // Check to see if it is already in the available list - const foundDep = this.availableDepsList.findIndex((depend) => depend.uuid === dep.uuid); - if (foundDep < 0) { - // Not in the list so just add it - this.availableDepsList.push(dep); - } else if (isNewerVersion(dep.version, this.availableDepsList[foundDep].version)) { - // It was in the list but this version is newer so lets use that - this.availableDepsList[foundDep] = dep; - } + availableDeps.forEach((dep) => { + const installedDep = installedDeps.findIndex((depend) => depend.uuid === dep.uuid); + if (installedDep < 0) { + const foundDep = availableDepsList.findIndex((depend) => depend.uuid === dep.uuid); + if (foundDep < 0) { + availableDepsList.push(dep); + } else if (isNewerVersion(dep.version, availableDepsList[foundDep].version)) { + availableDepsList[foundDep] = dep; } - }); + } + }); - this.sortInstalled(); - this.sortAvailable(); + this.installedDeps = installedDeps; + this.availableDeps = availableDeps; + this.installedList = installedList; + this.availableDepsList = availableDepsList; - this.updateDependencies(); - } + this.sortInstalled(); + this.sortAvailable(); + + this.updateDependencies(); } finally { this.refreshInProgress = false; } @@ -615,12 +632,37 @@ export class DependencyViewProvider implements vscode.WebviewViewProvider { .getPreferences(this.wp) .getProjectYear(); const manifestURL = this.vendordepMarketplaceURL + `${projectYear}.json`; - try { - this.onlineDeps = await this.loadFileFromUrl(manifestURL); - } catch (err) { - logger.log('Error fetching vendordep marketplace manifest', manifestURL, err); - this.onlineDeps = []; + + const now = Date.now(); + const cacheValid = + this.marketplaceDepsYear === projectYear && + this.marketplaceDeps.length > 0 && + now - this.marketplaceLastSuccessAt < this.marketplaceCacheTTLms; + + const shouldAttemptFetch = + !cacheValid && now - this.marketplaceLastAttemptAt >= this.marketplaceRetryBackoffMs; + + if (shouldAttemptFetch) { + this.marketplaceLastAttemptAt = now; + try { + this.marketplaceDeps = await this.loadFileFromUrl(manifestURL); + this.marketplaceDepsYear = projectYear; + this.marketplaceLastSuccessAt = now; + } catch (err) { + logger.log('Error fetching vendordep marketplace manifest', manifestURL, err); + // Avoid mixing years; if year changed and we couldn't fetch, fall back to empty marketplace list. + if (this.marketplaceDepsYear !== projectYear) { + this.marketplaceDeps = []; + this.marketplaceDepsYear = projectYear; + } + } + } else if (this.marketplaceDepsYear !== projectYear) { + // Year changed but we are within backoff; don't use stale year data. + this.marketplaceDeps = []; + this.marketplaceDepsYear = projectYear; } + + this.onlineDeps = [...this.marketplaceDeps]; } this.homeDeps = await this.vendorLibraries.getHomeDirDeps(); this.homeDeps.forEach((homedep) => { @@ -675,88 +717,19 @@ export class DependencyViewProvider implements vscode.WebviewViewProvider { }); } - private _getHtmlForWebview(webview: vscode.Webview): string { - // Get the local path to main script run in the webview, then convert it to a uri we can use in the webview. - const createUri = (fp: string) => { - return webview.asWebviewUri(vscode.Uri.joinPath(this._extensionUri, ...fp.split('/'))); - }; - - const scriptUri = createUri(`resources/media/main.js`); - const styleUri = createUri(`resources/media/main.css`); - const vscodeElementsUri = createUri(`resources/media/vscode-elements.css`); - const codiconUri = createUri(`resources/media/icons.css`); - - // Return the complete HTML - return ` - - - - - - WPILib Vendor Dependencies - - - - - - - - - - -
- -
- -
- - -

- Install from URL -

-
-
-
- - -
-
- Enter a vendor dependency JSON URL to install a library not listed in the available dependencies. -
-
-
- -
- - -

- Installed Dependencies -

-
-
-
-
- -
- - -

- Available Dependencies -

-
-
-
-
- - - - - `; + private _getHtmlForWebview(webview: vscode.Webview, viewMode: string): string { + return loadDistWebviewHtml({ + webview, + extensionRoot: this._extensionUri, + distHtmlFileName: 'dependencyview.html', + extraCss: [ + vscode.Uri.joinPath(this._extensionUri, 'resources', 'media', 'vscode-elements.css'), + vscode.Uri.joinPath(this._extensionUri, 'resources', 'media', 'main.css'), + vscode.Uri.joinPath(this._extensionUri, 'resources', 'media', 'icons.css'), + ], + appAttributes: { + 'data-view-mode': viewMode, + }, + }); } } diff --git a/vscode-wpilib/src/docsapi.ts b/vscode-wpilib/src/docsapi.ts index 993e22bf..ad88f581 100644 --- a/vscode-wpilib/src/docsapi.ts +++ b/vscode-wpilib/src/docsapi.ts @@ -1,6 +1,6 @@ 'use strict'; -import * as extract from 'extract-zip'; +import extract from 'extract-zip'; import { mkdir, unlink } from 'fs/promises'; import * as path from 'path'; import * as vscode from 'vscode'; diff --git a/vscode-wpilib/src/riolog/rioconnector.ts b/vscode-wpilib/src/riolog/rioconnector.ts index 2e5e39c8..d1518890 100644 --- a/vscode-wpilib/src/riolog/rioconnector.ts +++ b/vscode-wpilib/src/riolog/rioconnector.ts @@ -8,23 +8,18 @@ async function properRace(promises: Promise[]): Promise { return Promise.reject("Can't start a race without promises!"); } - // There is no way to know which promise is rejected. - // So we map it to a new promise to return the index when it fails - const indexPromises = promises.map((p, index) => - p.catch(() => { - throw index; - }) - ); - - try { - return await Promise.race(indexPromises); - } catch (index) { - // The promise has rejected, remove it from the list of promises and just continue the race. - logger.info('reject promise'); - const p = promises.splice(index as number, 1)[0]; - p.catch((e) => logger.info('A promise has been rejected, but awaiting others', e)); - return properRace(promises); - } + return new Promise((resolve, reject) => { + let rejections = 0; + promises.forEach((p) => { + p.then(resolve).catch((e) => { + rejections++; + logger.info('A promise has been rejected, but awaiting others', e); + if (rejections === promises.length) { + reject('All promises rejected'); + } + }); + }); + }); } interface IDriverStationData { @@ -33,7 +28,7 @@ interface IDriverStationData { const constantIps: string[] = [ '172.22.11.2', - //, '127.0.0.1', + '127.0.0.1', // Uncomment the above line for testing on localhost. ]; diff --git a/vscode-wpilib/src/riolog/script/implscript.ts b/vscode-wpilib/src/riolog/script/implscript.ts deleted file mode 100644 index bc6b79c1..00000000 --- a/vscode-wpilib/src/riolog/script/implscript.ts +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -import { IIPCReceiveMessage, IIPCSendMessage } from '../shared/interfaces'; -import { setImplFunctions, handleMessage } from '../shared/sharedscript'; - -interface IVsCodeApi { - postMessage(message: IIPCReceiveMessage, to: string): void; -} - -declare function acquireVsCodeApi(): IVsCodeApi; - -const vscode = acquireVsCodeApi(); - -export function checkResize(): void { - // Get required elements - const toolbar = document.getElementById('toolbar'); - const logContainer = document.getElementById('log-container'); - - // Apply dynamic max-height calculation if both elements exist - if (toolbar && logContainer) { - logContainer.style.maxHeight = `calc(100vh - ${toolbar.offsetHeight}px)`; - } -} - -export function scrollImpl() { - const logContainer = document.getElementById('log-container'); - if (logContainer) { - logContainer.scrollTop = logContainer.scrollHeight; - } -} - -export function sendMessage(message: IIPCReceiveMessage) { - vscode.postMessage(message, '*'); -} - -// Register the implementation functions with the shared module -console.log('Setting impl functions'); -setImplFunctions(checkResize, scrollImpl, sendMessage); - -window.addEventListener('message', (event) => { - const data: IIPCSendMessage | any = event.data; - handleMessage(data); - checkResize(); -}); - -// Listen for window resize events -window.addEventListener('resize', checkResize); - -// Initialize everything once loaded -window.addEventListener('load', () => { - setTimeout(checkResize, 100); -}); diff --git a/vscode-wpilib/src/riolog/shared/interfaces.ts b/vscode-wpilib/src/riolog/shared/interfaces.ts index cf7ad9c3..2f530e38 100644 --- a/vscode-wpilib/src/riolog/shared/interfaces.ts +++ b/vscode-wpilib/src/riolog/shared/interfaces.ts @@ -1,7 +1,7 @@ 'use strict'; -import { EventEmitter } from 'events'; -import { IErrorMessage, IPrintMessage } from './message'; +import type { EventEmitter } from 'events'; +import type { IErrorMessage, IPrintMessage } from './message'; export enum SendTypes { Batch, diff --git a/vscode-wpilib/src/riolog/shared/sharedscript.ts b/vscode-wpilib/src/riolog/shared/sharedscript.ts deleted file mode 100644 index d7195c35..00000000 --- a/vscode-wpilib/src/riolog/shared/sharedscript.ts +++ /dev/null @@ -1,986 +0,0 @@ -'use strict'; - -import { IErrorMessage, IPrintMessage, MessageType } from './message'; -import { IIPCSendMessage, ReceiveTypes, SendTypes } from './interfaces'; -import { AnsiSegment, applyAnsiStyling, parseAnsiString } from '../ansi/ansiparser'; - -// Define these functions here, they'll be implemented in implscript.ts -let checkResize: () => void; -let scrollImpl: () => void; -let sendMessage: (message: any) => void; - -// Function to set the implementation functions from implscript -export function setImplFunctions( - checkResizeImpl: () => void, - scrollImplFunc: () => void, - sendMessageFunc: (message: any) => void -) { - checkResize = checkResizeImpl; - scrollImpl = scrollImplFunc; - sendMessage = sendMessageFunc; - setLivePage(); -} - -const maxLogEntries = 2000; -let paused = false; -let discard = false; -let showWarnings = true; -let showPrints = true; -let autoReconnect = true; -let showTimestamps = false; -let autoScroll = true; -let filterText = ''; - -let UI_COLORS = { - success: '#4caf50', - warning: '#ff9800', - error: '#f44336', - info: '#2196f3', -}; - -function updateThemeColors(colors: Record) { - UI_COLORS = { ...UI_COLORS, ...colors }; -} - -export function onPause() { - paused = !paused; - const pauseElement = document.getElementById('pause-button'); - if (pauseElement === null) { - return; - } - - if (paused) { - pauseElement.innerHTML = 'Paused: 0'; - pauseElement.classList.add('active'); - } else { - pauseElement.innerHTML = 'Pause'; - pauseElement.classList.remove('active'); - } - - sendMessage({ - message: paused, - type: ReceiveTypes.Pause, - }); -} - -export function onDiscard() { - discard = !discard; - const dButton = document.getElementById('discard-button'); - if (dButton === null) { - return; - } - - if (discard) { - dButton.innerHTML = 'Resume Capture'; - dButton.classList.add('active'); - } else { - dButton.innerHTML = 'Discard'; - dButton.classList.remove('active'); - } - - sendMessage({ - message: discard, - type: ReceiveTypes.Discard, - }); -} - -export function onClear() { - const list = document.getElementById('log-container'); - if (list === null) { - return; - } - list.innerHTML = ''; -} - -export function onAutoScrollToggle() { - autoScroll = !autoScroll; - const scrollButton = document.getElementById('autoscroll-button'); - if (scrollButton === null) { - return; - } - - if (autoScroll) { - scrollButton.innerHTML = 'Auto-Scroll: On'; - scrollButton.classList.remove('active'); - scrollImpl(); - } else { - scrollButton.innerHTML = 'Auto-Scroll: Off'; - scrollButton.classList.add('active'); - } -} - -export function onShowWarnings() { - showWarnings = !showWarnings; - const warningsButton = document.getElementById('warnings-button'); - if (warningsButton === null) { - return; - } - - if (showWarnings) { - warningsButton.innerHTML = 'Hide Warnings'; - warningsButton.classList.remove('active'); - } else { - warningsButton.innerHTML = 'Show Warnings'; - warningsButton.classList.add('active'); - } - - const container = document.getElementById('log-container'); - if (container === null) { - return; - } - - const items = container.getElementsByClassName('warning-log'); - for (let i = 0; i < items.length; ++i) { - if (showWarnings) { - (items[i] as HTMLElement).style.display = 'block'; - } else { - (items[i] as HTMLElement).style.display = 'none'; - } - } - - applyLogFilter(); - checkResize(); -} - -export function onShowPrints() { - showPrints = !showPrints; - const printButton = document.getElementById('prints-button'); - if (printButton === null) { - return; - } - - if (showPrints) { - printButton.innerHTML = 'Hide Prints'; - printButton.classList.remove('active'); - } else { - printButton.innerHTML = 'Show Prints'; - printButton.classList.add('active'); - } - - const container = document.getElementById('log-container'); - if (container === null) { - return; - } - - const items = container.getElementsByClassName('print-log'); - for (let i = 0; i < items.length; ++i) { - if (showPrints) { - (items[i] as HTMLElement).style.display = 'block'; - } else { - (items[i] as HTMLElement).style.display = 'none'; - } - } - - applyLogFilter(); - checkResize(); -} - -export function onAutoReconnect() { - autoReconnect = !autoReconnect; - - // Send message to backend - sendMessage({ - message: autoReconnect, - type: ReceiveTypes.Reconnect, - }); - - const arButton = document.getElementById('reconnect-button'); - if (arButton === null) { - return; - } - - if (autoReconnect) { - arButton.innerHTML = 'Auto-Reconnect: On'; - arButton.classList.remove('active'); - } else { - arButton.innerHTML = 'Auto-Reconnect: Off'; - arButton.classList.add('active'); - - // Force disconnect when auto-reconnect is disabled - sendMessage({ - message: false, - type: ReceiveTypes.Reconnect, - }); - } -} - -export function onShowTimestamps() { - showTimestamps = !showTimestamps; - const tsButton = document.getElementById('timestamps-button'); - if (tsButton === null) { - return; - } - - if (showTimestamps) { - tsButton.innerHTML = 'Hide Timestamps'; - tsButton.classList.remove('active'); - } else { - tsButton.innerHTML = 'Show Timestamps'; - tsButton.classList.add('active'); - } - - const container = document.getElementById('log-container'); - if (container === null) { - return; - } - - const timestamps = container.getElementsByClassName('timestamp'); - for (let i = 0; i < timestamps.length; ++i) { - if (showTimestamps) { - (timestamps[i] as HTMLElement).style.display = 'inline'; - } else { - (timestamps[i] as HTMLElement).style.display = 'none'; - } - } - - checkResize(); -} - -export function onSaveLog() { - const container = document.getElementById('log-container'); - if (container === null) { - return; - } - - const items = container.getElementsByClassName('log-entry'); - const logs: string[] = []; - - for (let i = 0; i < items.length; ++i) { - const m = items[i].getAttribute('data-message'); - if (m === null) { - continue; - } - logs.push(m); - } - - sendMessage({ - message: logs, - type: ReceiveTypes.Save, - }); -} - -export function onSearch(event: Event) { - const input = event.target as HTMLInputElement; - filterText = input.value.toLowerCase(); - applyLogFilter(); -} - -function applyLogFilter() { - if (filterText === '') { - // Show all entries that should be visible based on their type - const container = document.getElementById('log-container'); - if (container === null) { - return; - } - - const items = container.getElementsByClassName('log-entry'); - for (let i = 0; i < items.length; ++i) { - const item = items[i] as HTMLElement; - const type = item.getAttribute('data-type'); - - if (type === 'warning' && !showWarnings) { - item.style.display = 'none'; - } else if (type === 'print' && !showPrints) { - item.style.display = 'none'; - } else { - item.style.display = 'block'; - } - } - return; - } - - // Filter based on text content - const container = document.getElementById('log-container'); - if (container === null) { - return; - } - - const items = container.getElementsByClassName('log-entry'); - for (let i = 0; i < items.length; ++i) { - const item = items[i] as HTMLElement; - const type = item.getAttribute('data-type'); - - // Skip if it's already hidden by type filters - if ((type === 'warning' && !showWarnings) || (type === 'print' && !showPrints)) { - item.style.display = 'none'; - continue; - } - - const content = item.textContent?.toLowerCase() || ''; - if (content.includes(filterText)) { - item.style.display = 'block'; - } else { - item.style.display = 'none'; - } - } -} - -export function onConnect() { - const statusIndicator = document.getElementById('connection-status'); - if (statusIndicator) { - statusIndicator.className = 'connection-status connected'; - statusIndicator.setAttribute('title', 'Connected to Robot'); - } - - // Add connection message - const connectedMessage: IPrintMessage = { - line: '\u001b[32mRobot connection established\u001b[0m', - messageType: MessageType.Print, - seqNumber: 0, - timestamp: Date.now() / 1000, - }; - addMessage(connectedMessage); -} - -export function onDisconnect() { - const statusIndicator = document.getElementById('connection-status'); - if (statusIndicator) { - statusIndicator.className = 'connection-status disconnected'; - statusIndicator.setAttribute('title', 'Disconnected from Robot'); - } - - // Add disconnection message - const disconnectedMessage: IPrintMessage = { - line: '\u001b[31mRobot connection lost\u001b[0m', - messageType: MessageType.Print, - seqNumber: 0, - timestamp: Date.now() / 1000, - }; - addMessage(disconnectedMessage); -} - -export function onChangeTeamNumber() { - const input = document.getElementById('team-number') as HTMLInputElement; - if (!input) { - return; - } - - const teamNumber = parseInt(input.value, 10); - if (isNaN(teamNumber) || teamNumber < 0 || teamNumber > 99999) { - // Visual indication of invalid input - input.classList.add('error'); - setTimeout(() => { - input.classList.remove('error'); - }, 1000); - return; - } - - sendMessage({ - message: teamNumber, - type: ReceiveTypes.ChangeNumber, - }); - - // Visual confirmation - const button = document.getElementById('team-number-button'); - if (button) { - const originalText = button.textContent || ''; - button.textContent = '✓ Applied'; - button.classList.add('success'); - - setTimeout(() => { - button.textContent = originalText; - button.classList.remove('success'); - }, 1000); - } -} - -// Create a styled segment from ANSI parsed content -function createStyledElement(segment: AnsiSegment): HTMLSpanElement { - const span = document.createElement('span'); - const tNode = document.createTextNode(segment.text); - span.appendChild(tNode); - applyAnsiStyling(span, segment.state); - return span; -} - -function insertMessage(ts: number, line: string, li: HTMLElement, color?: string) { - const messageContent = document.createElement('div'); - messageContent.className = 'log-message'; - - // Create timestamp element - const tsSpan = document.createElement('span'); - tsSpan.className = 'timestamp'; - tsSpan.textContent = new Date(ts * 1000).toISOString().slice(11, -1) + ': '; - if (!showTimestamps) { - tsSpan.style.display = 'none'; - } - messageContent.appendChild(tsSpan); - - // Create the content container - const contentSpan = document.createElement('span'); - contentSpan.className = 'message-content'; - if (color !== undefined) { - contentSpan.style.color = color; - } - - // Process each line - const lines = line.split('\n'); - let first = true; - - for (const item of lines) { - if (item.trim() === '') { - continue; - } - - if (first === false) { - contentSpan.appendChild(document.createElement('br')); - } - first = false; - - // Check if the line contains ANSI codes - if (item.includes('\u001b[')) { - const segments = parseAnsiString(item); - for (const segment of segments) { - contentSpan.appendChild(createStyledElement(segment)); - } - } else { - // No ANSI codes, just append text - const tNode = document.createTextNode(item); - contentSpan.appendChild(tNode); - } - } - - messageContent.appendChild(contentSpan); - li.appendChild(messageContent); -} - -function insertStackTrace(st: string, container: HTMLElement, color?: string) { - const div = document.createElement('div'); - div.className = 'stack-trace'; - - const split = st.split('\n'); - let first = true; - for (const item of split) { - if (item.trim() === '') { - continue; - } - if (first === false) { - div.appendChild(document.createElement('br')); - } - first = false; - const tNode = document.createTextNode('\u00a0\u00a0\u00a0\u00a0 at: ' + item); - div.appendChild(tNode); - } - if (color !== undefined) { - div.style.color = color; - } - container.appendChild(div); -} - -function insertLocation(loc: string, container: HTMLElement, color?: string) { - const div = document.createElement('div'); - div.className = 'location-info'; - - const split = loc.split('\n'); - let first = true; - for (const item of split) { - if (item.trim() === '') { - continue; - } - if (first === false) { - div.appendChild(document.createElement('br')); - } - first = false; - const tNode = document.createTextNode('\u00a0\u00a0 from: ' + item); - div.appendChild(tNode); - } - if (color !== undefined) { - div.style.color = color; - } - container.appendChild(div); -} - -export function addMessage(message: IPrintMessage | IErrorMessage) { - if (message.messageType === MessageType.Print) { - addPrint(message as IPrintMessage); - } else { - addError(message as IErrorMessage); - } -} - -function limitList() { - const container = document.getElementById('log-container'); - if (container === null) { - return; - } - - while (container.childElementCount > maxLogEntries && container.firstChild !== null) { - container.removeChild(container.firstChild); - } -} - -export function addPrint(message: IPrintMessage) { - limitList(); - const container = document.getElementById('log-container'); - if (container === null) { - return; - } - - const entry = document.createElement('div'); - entry.className = 'log-entry print-log'; - entry.setAttribute('data-type', 'print'); - entry.setAttribute('data-message', JSON.stringify(message)); - - if (!showPrints) { - entry.style.display = 'none'; - } - - insertMessage(message.timestamp, message.line, entry); - container.appendChild(entry); - - // Apply search filter if needed - if (filterText !== '') { - const content = entry.textContent?.toLowerCase() || ''; - if (!content.includes(filterText)) { - entry.style.display = 'none'; - } - } - - if (autoScroll) { - scrollImpl(); - } -} - -// Creates HTML for an expanded error view -export function createErrorContent(message: IErrorMessage, container: HTMLElement, color?: string) { - // Clear existing content first - container.innerHTML = ''; - - // First append the message - insertMessage(message.timestamp, message.details, container, color); - - // Then append location, tabbed in once - insertLocation(message.location, container, color); - - // Then append stack trace, tabbed in twice - insertStackTrace(message.callStack, container, color); -} - -// Create HTML for a collapsed error view -export function createCollapsedErrorContent( - message: IErrorMessage, - container: HTMLElement, - color?: string -) { - // Clear existing content - container.innerHTML = ''; - - // Just show the error message - insertMessage(message.timestamp, message.details, container, color); -} - -export function addError(message: IErrorMessage) { - limitList(); - const container = document.getElementById('log-container'); - if (container === null) { - return; - } - - const entry = document.createElement('div'); - entry.className = - message.messageType === MessageType.Warning ? 'log-entry warning-log' : 'log-entry error-log'; - entry.setAttribute('data-expanded', 'false'); - entry.setAttribute( - 'data-type', - message.messageType === MessageType.Warning ? 'warning' : 'error' - ); - entry.setAttribute('data-message', JSON.stringify(message)); - - // Hide warnings if they're filtered out - if (message.messageType === MessageType.Warning && !showWarnings) { - entry.style.display = 'none'; - } - - // Create the toggle button - const toggleButton = document.createElement('div'); - toggleButton.className = 'toggle-button collapsed'; - entry.appendChild(toggleButton); - - // Create the content container - const contentContainer = document.createElement('div'); - contentContainer.className = 'error-content collapsed'; - entry.appendChild(contentContainer); - - // Add the initial collapsed view content - const textColor = - message.messageType === MessageType.Warning - ? 'var(--vscode-warningForeground, ' + UI_COLORS.warning + ')' - : 'var(--vscode-testing-iconFailed, ' + UI_COLORS.error + ')'; - - createCollapsedErrorContent(message, contentContainer, textColor); - - // Add click handler to toggle expansion - entry.addEventListener('click', function () { - const isExpanded = this.getAttribute('data-expanded') === 'true'; - const toggleBtn = this.querySelector('.toggle-button'); - const contentCtr = this.querySelector('.error-content'); - - if (isExpanded) { - // Collapse - this.setAttribute('data-expanded', 'false'); - if (toggleBtn) { - toggleBtn.className = 'toggle-button collapsed'; - } - if (contentCtr) { - contentCtr.className = 'error-content collapsed'; - createCollapsedErrorContent(message, contentCtr as HTMLElement, textColor); - } - } else { - // Expand - this.setAttribute('data-expanded', 'true'); - if (toggleBtn) { - toggleBtn.className = 'toggle-button expanded'; - } - if (contentCtr) { - contentCtr.className = 'error-content expanded'; - createErrorContent(message, contentCtr as HTMLElement, textColor); - } - } - - checkResize(); - }); - - container.appendChild(entry); - - // Apply search filter if needed - if (filterText !== '') { - const content = entry.textContent?.toLowerCase() || ''; - if (!content.includes(filterText)) { - entry.style.display = 'none'; - } - } - - if (autoScroll) { - scrollImpl(); - } -} - -export function checkResizeImpl() { - const container = document.getElementById('log-container'); - if (container === null) { - return; - } - // Container height is managed through CSS -} - -export function handleMessage(data: IIPCSendMessage | any): void { - // Handle theme color update message - if (data.type === 'themeColors') { - updateThemeColors(data.message); - return; - } - - switch (data.type) { - case SendTypes.New: - addMessage(data.message as IPrintMessage | IErrorMessage); - break; - - case SendTypes.Batch: - for (const message of data.message as (IPrintMessage | IErrorMessage)[]) { - addMessage(message); - } - break; - - case SendTypes.PauseUpdate: - const pauseButton = document.getElementById('pause-button'); - if (pauseButton !== null) { - pauseButton.innerHTML = `Paused: ${data.message}`; - } - break; - - case SendTypes.ConnectionChanged: - const connected: boolean = data.message as boolean; - if (connected) { - onConnect(); - } else { - onDisconnect(); - } - break; - - default: - break; - } -} - -export function createToolbar(): HTMLElement { - const toolbar = document.createElement('div'); - toolbar.id = 'toolbar'; - toolbar.className = 'toolbar'; - - // Create the connection status indicator - const statusContainer = document.createElement('div'); - statusContainer.className = 'status-container'; - - const connectionStatus = document.createElement('div'); - connectionStatus.id = 'connection-status'; - connectionStatus.className = 'connection-status disconnected'; - connectionStatus.setAttribute('title', 'Disconnected from Robot'); - statusContainer.appendChild(connectionStatus); - - // Create the team number input group - const teamNumberContainer = document.createElement('div'); - teamNumberContainer.className = 'team-number-container'; - - const teamNumberLabel = document.createElement('label'); - teamNumberLabel.htmlFor = 'team-number'; - teamNumberLabel.textContent = 'Team:'; - teamNumberContainer.appendChild(teamNumberLabel); - - const teamNumberInput = document.createElement('input'); - teamNumberInput.type = 'number'; - teamNumberInput.id = 'team-number'; - teamNumberInput.className = 'vscode-textfield'; - teamNumberInput.min = '1'; - teamNumberInput.max = '99999'; - teamNumberInput.placeholder = 'Team #'; - teamNumberContainer.appendChild(teamNumberInput); - - const teamNumberButton = document.createElement('button'); - teamNumberButton.id = 'team-number-button'; - teamNumberButton.className = 'vscode-button'; - teamNumberButton.textContent = 'Set'; - teamNumberButton.addEventListener('click', onChangeTeamNumber); - teamNumberContainer.appendChild(teamNumberButton); - - // Search filter - const searchContainer = document.createElement('div'); - searchContainer.className = 'search-container'; - - const searchInput = document.createElement('input'); - searchInput.type = 'text'; - searchInput.id = 'search-input'; - searchInput.className = 'vscode-textfield'; - searchInput.placeholder = 'Search logs...'; - searchInput.addEventListener('input', onSearch); - searchContainer.appendChild(searchInput); - - // Button groups - const buttonsContainer = document.createElement('div'); - buttonsContainer.className = 'buttons-container'; - - // Control buttons - const controlButtons = document.createElement('div'); - controlButtons.className = 'button-group'; - - const buttons = [ - { id: 'pause-button', text: 'Pause', handler: onPause, tooltip: 'Pause log updates' }, - { - id: 'discard-button', - text: 'Discard', - handler: onDiscard, - tooltip: 'Discard incoming messages', - }, - { id: 'clear-button', text: 'Clear', handler: onClear, tooltip: 'Clear all log entries' }, - { - id: 'autoscroll-button', - text: 'Auto-Scroll: On', - handler: onAutoScrollToggle, - tooltip: 'Toggle automatic scrolling', - }, - ]; - - buttons.forEach((btn) => { - const button = document.createElement('button'); - button.id = btn.id; - button.className = 'vscode-button'; - button.textContent = btn.text; - button.title = btn.tooltip; - button.addEventListener('click', btn.handler); - controlButtons.appendChild(button); - }); - - // Filter buttons - const filterButtons = document.createElement('div'); - filterButtons.className = 'button-group'; - - const filterBtns = [ - { - id: 'prints-button', - text: 'Hide Prints', - handler: onShowPrints, - tooltip: 'Toggle print messages', - }, - { - id: 'warnings-button', - text: 'Hide Warnings', - handler: onShowWarnings, - tooltip: 'Toggle warning messages', - }, - { - id: 'timestamps-button', - text: 'Show Timestamps', - handler: onShowTimestamps, - tooltip: 'Toggle timestamps', - active: true, - }, - { - id: 'reconnect-button', - text: 'Auto-Reconnect: On', - handler: onAutoReconnect, - tooltip: 'Toggle auto reconnection', - }, - { id: 'save-button', text: 'Save Log', handler: onSaveLog, tooltip: 'Save log to file' }, - ]; - - filterBtns.forEach((btn) => { - const button = document.createElement('button'); - button.id = btn.id; - button.className = 'vscode-button'; - if (btn.active) { - button.classList.add('active'); - } - button.textContent = btn.text; - button.title = btn.tooltip; - button.addEventListener('click', btn.handler); - filterButtons.appendChild(button); - }); - - // Add all components to the toolbar - buttonsContainer.appendChild(controlButtons); - buttonsContainer.appendChild(filterButtons); - - toolbar.appendChild(statusContainer); - toolbar.appendChild(teamNumberContainer); - toolbar.appendChild(searchContainer); - toolbar.appendChild(buttonsContainer); - - return toolbar; -} - -export function setLivePage() { - const mainDiv = document.getElementById('mainDiv'); - if (!mainDiv) { - return; - } - - // Clear the container - mainDiv.innerHTML = ''; - - const toolbar = createToolbar(); - toolbar.id = 'toolbar'; - mainDiv.appendChild(toolbar); - - // Create log container - const logContainer = document.createElement('div'); - logContainer.id = 'log-container'; - mainDiv.appendChild(logContainer); - - if (!window.__riologHasLoaded) { - const welcomeMessage: IPrintMessage = { - messageType: MessageType.Print, - line: - '\u001b[1m\u001b[36m=== WPILib RioLog Started ===\u001b[0m\n' + - '\u001b[32mWaiting for robot connection...\u001b[0m\n' + - '\u001b[33mTIPS:\u001b[0m\n' + - '• \u001b[0mUse \u001b[1mSet\u001b[0m button to change team number\n' + - '• \u001b[0mClick on errors/warnings to expand details\n' + - '• \u001b[0mUse search box to filter messages\n' + - '• \u001b[0mToggle auto-scrolling for viewing older logs\n' + - '• \u001b[0mSave logs to file for later analysis', - timestamp: Date.now() / 1000, - seqNumber: 0, - }; - addMessage(welcomeMessage); - window.__riologHasLoaded = true; - } - - // Ensure timestamps button starts in correct state - const timestampsButton = document.getElementById('timestamps-button'); - if (timestampsButton) { - if (!showTimestamps) { - timestampsButton.classList.add('active'); - } else { - timestampsButton.classList.remove('active'); - } - } - - // Ensure warnings button starts in correct state - const warningsButton = document.getElementById('warnings-button'); - if (warningsButton) { - if (!showWarnings) { - warningsButton.classList.add('active'); - warningsButton.textContent = 'Show Warnings'; - } else { - warningsButton.classList.remove('active'); - warningsButton.textContent = 'Hide Warnings'; - } - } -} - -export function setViewerPage() { - setLivePage(); // Reuse the same UI for now with minor modifications - - // Add file input control for loading logs - const toolbar = document.getElementById('toolbar'); - if (toolbar) { - const fileInput = document.createElement('input'); - fileInput.type = 'file'; - fileInput.id = 'log-file-input'; - fileInput.accept = '.json'; - fileInput.className = 'file-input'; - fileInput.addEventListener('change', handleFileSelect, false); - - const fileLabel = document.createElement('label'); - fileLabel.htmlFor = 'log-file-input'; - fileLabel.textContent = 'Load Log File'; - fileLabel.className = 'vscode-button'; - - toolbar.insertBefore(fileLabel, toolbar.firstChild); - toolbar.insertBefore(fileInput, toolbar.firstChild); - - // Hide reconnect button in viewer mode - const reconnectButton = document.getElementById('reconnect-button'); - if (reconnectButton) { - reconnectButton.style.display = 'none'; - } - - // Hide team number input in viewer mode - const teamNumberContainer = document.querySelector('.team-number-container') as HTMLElement; - if (teamNumberContainer) { - teamNumberContainer.style.display = 'none'; - } - } -} - -function handleFileSelect(evt: Event) { - const files = (evt.target as HTMLInputElement).files!; - const firstFile = files[0]; - const reader = new FileReader(); - reader.onload = (loaded: Event) => { - const target: FileReader = loaded.target as FileReader; - try { - const parsed = JSON.parse(target.result as string) as (IPrintMessage | IErrorMessage)[]; - - // Clear existing logs first - onClear(); - - // Add all logs from the file - for (const p of parsed) { - addMessage(p); - } - } catch (error) { - console.error('Error parsing log file:', error); - - // Show error message in the log - const errorMessage: IErrorMessage = { - callStack: '', - details: 'Failed to parse log file: ' + (error as Error).message, - errorCode: 0, - flags: 1, - location: '', - messageType: MessageType.Error, - numOccur: 1, - seqNumber: 0, - timestamp: Date.now() / 1000, - }; - addMessage(errorMessage); - } - }; - reader.readAsText(firstFile); -} - -declare global { - interface Window { - __riologHasLoaded?: boolean; - } -} diff --git a/vscode-wpilib/src/riolog/vscodeimpl.ts b/vscode-wpilib/src/riolog/vscodeimpl.ts index 15bef216..d825656f 100644 --- a/vscode-wpilib/src/riolog/vscodeimpl.ts +++ b/vscode-wpilib/src/riolog/vscodeimpl.ts @@ -14,6 +14,7 @@ import { IWindowView, } from './shared/interfaces'; import { RioConsole } from './rioconsole'; +import { rewriteDistWebviewHtml } from '../webviews/distWebviewHtml'; interface IHTMLProvider { getHTML(webview: vscode.Webview): string; @@ -23,12 +24,22 @@ export class RioLogWindowView extends EventEmitter implements IWindowView { private webview: vscode.WebviewPanel; private disposables: vscode.Disposable[] = []; - constructor(resourceName: string, windowName: string, viewColumn: vscode.ViewColumn) { + constructor( + resourceName: string, + windowName: string, + viewColumn: vscode.ViewColumn, + private readonly extensionRoot: string + ) { super(); this.webview = vscode.window.createWebviewPanel(resourceName, windowName, viewColumn, { enableCommandUris: true, enableScripts: true, retainContextWhenHidden: true, + localResourceRoots: [ + vscode.Uri.file(this.extensionRoot), + vscode.Uri.file(path.join(this.extensionRoot, 'resources', 'media')), + vscode.Uri.file(path.join(this.extensionRoot, 'resources', 'dist')), + ], }); this.disposables.push(this.webview); @@ -132,7 +143,7 @@ export class RioLogWindowView extends EventEmitter implements IWindowView { export class RioLogHTMLProvider implements IHTMLProvider { public static async Create(resourceRoot: string): Promise { const provider = new RioLogHTMLProvider(resourceRoot); - const htmlFile = path.join(resourceRoot, 'live.html'); + const htmlFile = path.join(resourceRoot, 'dist', 'riolog.html'); provider.html = await readFile(htmlFile, 'utf8'); return provider; } @@ -145,60 +156,41 @@ export class RioLogHTMLProvider implements IHTMLProvider { } public getHTML(webview: vscode.Webview): string { - // Get paths to script and CSS - const scriptPath = vscode.Uri.file( - path.join(this.resourceRoot, '..', 'resources', 'dist', 'riologpage.js') - ); - const elementsCssPath = vscode.Uri.file( - path.join(this.resourceRoot, '..', 'resources', 'media', 'vscode-elements.css') - ); - const rioLogCssPath = vscode.Uri.file( - path.join(this.resourceRoot, '..', 'resources', 'media', 'riolog.css') - ); - - // Convert to webview URIs - const scriptUri = webview.asWebviewUri(scriptPath); - const elementsCssUri = webview.asWebviewUri(elementsCssPath); - const rioLogCssUri = webview.asWebviewUri(rioLogCssPath); - - let html = this.html!; - - // Add CSS link - html = html.replace( - '', - ` - \r\n` - ); - - // Add script with error handling - html = html.replace( - '', - ` - - ` - ); - - return html; + return rewriteDistWebviewHtml({ + webview, + extensionRoot: vscode.Uri.file(path.join(this.resourceRoot, '..')), + html: this.html!, + extraCss: [ + vscode.Uri.file( + path.join(this.resourceRoot, '..', 'resources', 'media', 'vscode-elements.css') + ), + vscode.Uri.file(path.join(this.resourceRoot, '..', 'resources', 'media', 'riolog.css')), + ], + }); } } export class RioLogWebviewProvider implements IWindowProvider { public static async Create(resourceRoot: string): Promise { const provider = new RioLogWebviewProvider(); + provider.resourceRoot = resourceRoot; provider.htmlProvider = await RioLogHTMLProvider.Create(resourceRoot); return provider; } private htmlProvider: RioLogHTMLProvider | undefined; + private resourceRoot: string | undefined; private constructor() {} public createWindowView(): IWindowView { - const wv = new RioLogWindowView('wpilib:riologlive', 'RioLog', vscode.ViewColumn.Three); + const extensionRoot = path.join(this.resourceRoot!, '..'); + const wv = new RioLogWindowView( + 'wpilib:riologlive', + 'RioLog', + vscode.ViewColumn.Beside, + extensionRoot + ); wv.setHTML(this.htmlProvider!.getHTML(wv.getWebview())); return wv; } diff --git a/vscode-wpilib/src/webviews/distWebviewHtml.ts b/vscode-wpilib/src/webviews/distWebviewHtml.ts new file mode 100644 index 00000000..ff62f077 --- /dev/null +++ b/vscode-wpilib/src/webviews/distWebviewHtml.ts @@ -0,0 +1,111 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import * as vscode from 'vscode'; + +type DistHtmlOptions = { + webview: vscode.Webview; + extensionRoot: vscode.Uri; + distHtmlFileName: string; + extraCss?: vscode.Uri[]; + appAttributes?: Record; +}; + +type RewriteHtmlOptions = { + webview: vscode.Webview; + extensionRoot: vscode.Uri; + html: string; + extraCss?: vscode.Uri[]; + appAttributes?: Record; +}; + +function insertBeforeHeadClose(html: string, insert: string): string { + if (!insert) { + return html; + } + if (html.includes('')) { + return html.replace('', `${insert}\n`); + } + return `${insert}\n${html}`; +} + +function patchAppAttributes(html: string, attributes: Record): string { + if (!attributes || Object.keys(attributes).length === 0) { + return html; + } + + // Prefer the known rollup template shape. + const appDivPattern = /]*)>/i; + const match = html.match(appDivPattern); + if (!match) { + return html; + } + + const existingAttrs = match[1] ?? ''; + const toInject = Object.entries(attributes) + .map(([key, value]) => ` ${key}="${escapeHtmlAttribute(value)}"`) + .join(''); + + return html.replace(appDivPattern, `
`); +} + +function escapeHtmlAttribute(value: string): string { + return value + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(//g, '>'); +} + +function rewriteReplaceresourceBase(html: string, extensionRootUri: string): string { + return html.replace(/replaceresource/g, extensionRootUri); +} + +function rewriteDistScriptTags( + html: string, + webview: vscode.Webview, + distRootFsPath: string +): string { + return html.replace( + /<\/script>/g, + (_match, fileName: string) => { + const uri = webview.asWebviewUri(vscode.Uri.file(path.join(distRootFsPath, fileName))); + return ``; + } + ); +} + +export function rewriteDistWebviewHtml(options: RewriteHtmlOptions): string { + const distRootFsPath = path.join(options.extensionRoot.fsPath, 'resources', 'dist'); + let html = options.html; + + html = patchAppAttributes(html, options.appAttributes ?? {}); + + html = rewriteDistScriptTags(html, options.webview, distRootFsPath); + + const extensionRootUri = options.webview.asWebviewUri(options.extensionRoot).toString(); + html = rewriteReplaceresourceBase(html, extensionRootUri); + + if (options.extraCss && options.extraCss.length > 0) { + const cssLinks = options.extraCss + .map( + (uri) => `` + ) + .join('\n'); + html = insertBeforeHeadClose(html, cssLinks); + } + + return html; +} + +export function loadDistWebviewHtml(options: DistHtmlOptions): string { + const distRootFsPath = path.join(options.extensionRoot.fsPath, 'resources', 'dist'); + const htmlPath = path.join(distRootFsPath, options.distHtmlFileName); + const html = fs.readFileSync(htmlPath, 'utf8'); + return rewriteDistWebviewHtml({ + webview: options.webview, + extensionRoot: options.extensionRoot, + html, + extraCss: options.extraCss, + appAttributes: options.appAttributes, + }); +} diff --git a/vscode-wpilib/src/webviews/gradle2025import.ts b/vscode-wpilib/src/webviews/gradle2025import.ts index 522bbe79..870e2d05 100644 --- a/vscode-wpilib/src/webviews/gradle2025import.ts +++ b/vscode-wpilib/src/webviews/gradle2025import.ts @@ -350,8 +350,8 @@ export class Gradle2025Import extends WebViewBase { private async asyncInitialize() { await this.loadWebpage( - path.join(extensionContext.extensionPath, 'resources', 'webviews', 'gradle2025import.html'), - path.join(extensionContext.extensionPath, 'resources', 'dist', 'gradle2025importpage.js') + path.join(extensionContext.extensionPath, 'resources', 'dist', 'gradle2025import.html'), + ['gradle2025import'] ); } } diff --git a/vscode-wpilib/src/webviews/help.ts b/vscode-wpilib/src/webviews/help.ts index cdf200c1..191ef73c 100644 --- a/vscode-wpilib/src/webviews/help.ts +++ b/vscode-wpilib/src/webviews/help.ts @@ -21,11 +21,15 @@ export class Help extends WebViewBase { ); } + private messageHandlerSetup = false; + public displayHelp() { + const wasUndefined = this.webview === undefined; this.displayWebView(vscode.ViewColumn.Active, true); - // Set up message handler for button clicks if webview exists - if (this.webview) { + // Set up message handler for button clicks only when webview is first created + if (this.webview && wasUndefined && !this.messageHandlerSetup) { + this.messageHandlerSetup = true; this.webview.webview.onDidReceiveMessage( (message) => { switch (message.command) { @@ -43,12 +47,17 @@ export class Help extends WebViewBase { undefined, this.disposables ); + // Reset flag when webview is disposed + this.webview.onDidDispose(() => { + this.messageHandlerSetup = false; + }); } } private async asyncInitialize() { await this.loadWebpage( - path.join(extensionContext.extensionPath, 'resources', 'webviews', 'help.html') + path.join(extensionContext.extensionPath, 'resources', 'dist', 'help.html'), + ['help'] ); } } diff --git a/vscode-wpilib/src/webviews/localeloader.ts b/vscode-wpilib/src/webviews/localeloader.ts deleted file mode 100644 index da93f189..00000000 --- a/vscode-wpilib/src/webviews/localeloader.ts +++ /dev/null @@ -1,63 +0,0 @@ -import format from '../formatter'; - -interface ITranslationMap { - [text: string]: string; -} - -const localeDomains: { - [domain: string]: ITranslationMap; -} = {}; -let defaultDomain: string; - -function localize(domain: string, message: string | string[], ...args: unknown[]) { - let key: string; - if (typeof message === 'string') { - key = message; - } else if (message.length === 2) { - key = message[0]; - message = message[1]; - } else { - throw new Error('Invalid message'); - } - if (localeDomains[domain] && localeDomains[domain][key]) { - message = localeDomains[domain][key]; - } - return format(message, args); -} - -window.addEventListener('load', () => { - // Loads locale translations - document.querySelectorAll('[data-locale]').forEach((e: Element) => { - const domainAttr = e.attributes.getNamedItem('data-domain'); - if (!domainAttr) { - console.log('failed to process ', e); - return; - } - const domain = domainAttr.value; - /* eslint-disable no-extra-boolean-cast */ - if (!!e.attributes.getNamedItem('data-default-domain')) { - defaultDomain = domain; - } - - localeDomains[domain] = JSON.parse(e.innerHTML) as ITranslationMap; - }); - - // auto translate `textContent` - document.querySelectorAll('[data-i18n-trans]').forEach((e: Element) => { - const domainAttr = e.attributes.getNamedItem('data-i18n-trans'); - const keyAttr = e.attributes.getNamedItem('data-i18n-key'); - if (!domainAttr || !e.textContent) { - return; - } - let message: string | string[] = e.textContent; - if (!!keyAttr && keyAttr.value !== '') { - message = [keyAttr.value, message]; - } - const domain = domainAttr.value === '' ? defaultDomain : domainAttr.value; - e.textContent = localize(domain, message); - }); -}); - -window.i18nTrans = localize; -// @ts-expect-error Force window object to accept locale domains -window.__I18N_LOCALE_DOMAINS = localeDomains; diff --git a/vscode-wpilib/src/webviews/pages/gradle2025importpage.ts b/vscode-wpilib/src/webviews/pages/gradle2025importpage.ts deleted file mode 100644 index 9ef753fc..00000000 --- a/vscode-wpilib/src/webviews/pages/gradle2025importpage.ts +++ /dev/null @@ -1,165 +0,0 @@ -'use strict'; - -import { IGradle2025IPCReceive, IGradle2025IPCSend } from './gradle2025importpagetypes'; -import { - validateProject, - validateTeamNumber, - validateProjectFolder, - validateXrpRomi, -} from './sharedpages'; - -interface IVsCodeApi { - postMessage(message: IGradle2025IPCReceive): void; -} - -declare function acquireVsCodeApi(): IVsCodeApi; - -const vscode = acquireVsCodeApi(); - -function gradle2025SelectButtonClick() { - (document.activeElement as HTMLElement).blur(); - vscode.postMessage({ type: 'gradle2025' }); -} - -function projectSelectButtonClick() { - (document.activeElement as HTMLElement).blur(); - vscode.postMessage({ type: 'newproject' }); -} - -function importProjectButtonClick() { - const isValidTeam = validateTeamNumber(); - const isValidProject = validateProject(); - const isValidFolder = validateProjectFolder(); - const isXrpRomiValid = validateXrpRomi(); - if (!isValidTeam || !isValidProject || !isValidFolder || !isXrpRomiValid) { - return; - } - - (document.activeElement as HTMLElement).blur(); - - const hardwareSelection = document.querySelector( - 'input[name="hardware"]:checked' - ) as HTMLInputElement; - const romiSelected = hardwareSelection?.value === 'romi'; - const xrpSelected = hardwareSelection?.value === 'xrp'; - - vscode.postMessage({ - data: { - desktop: (document.getElementById('desktopCB') as HTMLInputElement).checked, - romi: romiSelected, - xrp: xrpSelected, - fromProps: (document.getElementById('gradle2025Input') as HTMLInputElement).value, - newFolder: (document.getElementById('newFolderCB') as HTMLInputElement).checked, - projectName: (document.getElementById('projectName') as HTMLInputElement).value, - teamNumber: (document.getElementById('teamNumber') as HTMLInputElement).value, - toFolder: (document.getElementById('projectFolder') as HTMLInputElement).value, - }, - type: 'importproject', - }); -} - -function navigateToStep(step: number) { - document.querySelectorAll('.wizard-step').forEach((el) => { - (el as HTMLElement).classList.remove('active'); - }); - - const targetStep = document.getElementById(`step-${step}`); - if (targetStep) { - targetStep.classList.add('active'); - } - - document.querySelectorAll('.progress-step').forEach((el) => { - const stepNumber = parseInt((el as HTMLElement).getAttribute('data-step') || '0', 10); - - (el as HTMLElement).classList.remove('active', 'completed'); - - if (stepNumber === step) { - (el as HTMLElement).classList.add('active'); - } else if (stepNumber < step) { - (el as HTMLElement).classList.add('completed'); - } - }); - - if (step === 3) { - updateSummary(); - } -} - -function updateSummary() { - const summarySource = document.getElementById('summary-source'); - const summaryDestination = document.getElementById('summary-destination'); - const summaryTeam = document.getElementById('summary-team'); - - if (summarySource) { - const gradle2025Input = document.getElementById('gradle2025Input') as HTMLInputElement; - summarySource.textContent = gradle2025Input.value || 'Not selected'; - } - - if (summaryDestination) { - const projectFolder = document.getElementById('projectFolder') as HTMLInputElement; - const projectName = document.getElementById('projectName') as HTMLInputElement; - const newFolder = document.getElementById('newFolderCB') as HTMLInputElement; - - let destination = projectFolder.value || 'Not selected'; - if (newFolder.checked && projectName.value) { - destination += `/${projectName.value}`; - } - summaryDestination.textContent = destination; - } - - if (summaryTeam) { - const teamNumber = document.getElementById('teamNumber') as HTMLInputElement; - summaryTeam.textContent = teamNumber.value || 'Not specified'; - } -} - -window.addEventListener('message', (event) => { - const data = event.data as IGradle2025IPCSend; - switch (data.type) { - case 'gradle2025': - (document.getElementById('gradle2025Input') as HTMLInputElement).value = data.data; - const nextButton = document.getElementById('next-to-step-2') as HTMLButtonElement; - if (nextButton) { - nextButton.disabled = false; - } - break; - case 'projectname': - const doc = document.getElementById('projectName') as HTMLInputElement; - doc.value = data.data; - doc.disabled = false; - validateProject(); - break; - case 'newproject': - const elem = document.getElementById('projectFolder') as HTMLInputElement; - elem.value = data.data; - validateProjectFolder(); - break; - case 'teamnumber': - const tn = document.getElementById('teamNumber') as HTMLInputElement; - tn.value = data.data; - validateTeamNumber(); - break; - default: - break; - } -}); - -window.addEventListener('load', (_: Event) => { - document.getElementById('gradle2025SelectButton')!.onclick = gradle2025SelectButtonClick; - document.getElementById('projectSelectButton')!.onclick = projectSelectButtonClick; - document.getElementById('projectName')!.oninput = validateProject; - document.getElementById('teamNumber')!.oninput = validateTeamNumber; - document.getElementById('importProject')!.onclick = importProjectButtonClick; - document.getElementById('projectFolder')!.oninput = validateProjectFolder; - document.getElementById('romiCB')!.onchange = validateXrpRomi; - document.getElementById('xrpCB')!.onchange = validateXrpRomi; - - document.getElementById('next-to-step-2')!.onclick = () => navigateToStep(2); - document.getElementById('next-to-step-3')!.onclick = () => navigateToStep(3); - document.getElementById('back-to-step-1')!.onclick = () => navigateToStep(1); - document.getElementById('back-to-step-2')!.onclick = () => navigateToStep(2); - - navigateToStep(1); - - vscode.postMessage({ type: 'loaded' }); -}); diff --git a/vscode-wpilib/src/webviews/pages/projectcreatorpage.ts b/vscode-wpilib/src/webviews/pages/projectcreatorpage.ts deleted file mode 100644 index eca004c7..00000000 --- a/vscode-wpilib/src/webviews/pages/projectcreatorpage.ts +++ /dev/null @@ -1,419 +0,0 @@ -'use strict'; - -import { IProjectIPCReceive, IProjectIPCSend, ProjectType } from './projectcreatorpagetypes'; -import { validateProject, validateTeamNumber, validateProjectFolder } from './sharedpages'; - -interface IVsCodeApi { - postMessage(message: IProjectIPCReceive): void; -} - -declare function acquireVsCodeApi(): IVsCodeApi; - -const vscode = acquireVsCodeApi(); - -let projectType: ProjectType = ProjectType.Template; -let language = ''; -let base = ''; -let currentStep = 1; -let languages: string[] = []; -let bases: string[] = []; - -function navigateToStep(step: number) { - // Hide all steps - document.querySelectorAll('.wizard-step').forEach((el) => { - (el as HTMLElement).classList.remove('active'); - }); - - // Show the target step - const targetStep = document.getElementById(`step-${step}`); - if (targetStep) { - targetStep.classList.add('active'); - } - - // Update progress indicators - document.querySelectorAll('.progress-step').forEach((el) => { - const stepNumber = parseInt((el as HTMLElement).getAttribute('data-step') || '0', 10); - - (el as HTMLElement).classList.remove('active', 'completed'); - - if (stepNumber === step) { - (el as HTMLElement).classList.add('active'); - } else if (stepNumber < step) { - (el as HTMLElement).classList.add('completed'); - } - }); - - currentStep = step; - - // If navigating to step 2, ensure dropdowns reflect the current project type - if (step === 2) { - // Reset language dropdown to default state if needed - const languageSelect = document.getElementById('language-select') as HTMLSelectElement; - if (languageSelect.selectedIndex !== 0) { - languageSelect.selectedIndex = 0; - language = ''; - } - - // Reset base dropdown - resetBaseDropdown(); - } - - // Update summary when navigating to the final step - if (step === 4) { - updateSummary(); - } -} - -function updateSummary() { - const typeEl = document.getElementById('summary-type'); - const languageEl = document.getElementById('summary-language'); - const baseEl = document.getElementById('summary-base'); - const locationEl = document.getElementById('summary-location'); - const teamEl = document.getElementById('summary-team'); - - if (typeEl) { - typeEl.textContent = ProjectType[projectType]; - } - - if (languageEl) { - languageEl.textContent = language; - } - - if (baseEl) { - baseEl.textContent = base; - } - - if (locationEl) { - const projectFolder = (document.getElementById('projectFolder') as HTMLInputElement).value; - const projectName = (document.getElementById('projectName') as HTMLInputElement).value; - const newFolder = (document.getElementById('newFolderCB') as HTMLInputElement).checked; - - locationEl.textContent = newFolder ? `${projectFolder}/${projectName}` : projectFolder; - } - - if (teamEl) { - const teamNumber = (document.getElementById('teamNumber') as HTMLInputElement).value; - teamEl.textContent = teamNumber ? teamNumber : 'Not specified'; - } -} - -function validateCurrentStep(): boolean { - switch (currentStep) { - case 1: - return validateStep1(); - case 2: - return validateStep2(); - case 3: - return validateStep3(); - case 4: - return validateStep4(); - default: - return true; - } -} - -function validateStep1(): boolean { - return projectType !== undefined; -} - -function validateStep2(): boolean { - return language !== '' && base !== ''; -} - -function validateStep3(): boolean { - const isValidProject = validateProject(); - const isValidFolder = validateProjectFolder(); - return isValidProject && isValidFolder; -} - -function validateStep4(): boolean { - return validateTeamNumber(); -} - -function resetBaseDropdown() { - const baseSelect = document.getElementById('base-select') as HTMLSelectElement; - - // Clear all options except the first default option - while (baseSelect.options.length > 1) { - baseSelect.remove(1); - } - - // Reset to default option and disable - baseSelect.selectedIndex = 0; - baseSelect.disabled = true; - - // Reset the base variable - base = ''; - - // Disable next button - const nextButton = document.getElementById('next-to-step-3'); - if (nextButton) { - (nextButton as HTMLButtonElement).disabled = true; - } -} - -function selectProjectType(type: ProjectType) { - projectType = type; - - // Update selection visuals - document.querySelectorAll('.selection-card').forEach((el) => { - el.classList.remove('selected'); - }); - - const selectedCard = document.querySelector(`.selection-card[data-value="${ProjectType[type]}"]`); - if (selectedCard) { - selectedCard.classList.add('selected'); - } - - // Enable next button - const nextButton = document.getElementById('next-to-step-2'); - if (nextButton) { - (nextButton as HTMLButtonElement).disabled = false; - } - - // Reset language and base since they depend on project type - language = ''; - base = ''; - - // Request languages for this project type - vscode.postMessage({ - data: { - base: '', - desktop: false, - language, - newFolder: false, - projectName: '', - projectType, - teamNumber: '', - toFolder: '', - }, - type: 'language', - }); -} - -function populateLanguageSelect(languages: string[]) { - const select = document.getElementById('language-select') as HTMLSelectElement; - - // Clear existing options except the default - while (select.options.length > 1) { - select.remove(1); - } - - // Add new options - languages.forEach((lang) => { - const option = document.createElement('option'); - option.value = lang; - option.textContent = lang; - select.appendChild(option); - }); - - // Enable the select - select.disabled = false; -} - -function populateBaseSelect(bases: string[]) { - const select = document.getElementById('base-select') as HTMLSelectElement; - - // Clear existing options except the default - while (select.options.length > 1) { - select.remove(1); - } - - // Add new options - bases.forEach((baseOption) => { - const option = document.createElement('option'); - option.value = baseOption; - option.textContent = baseOption; - select.appendChild(option); - }); - - // Enable the select - select.disabled = false; -} - -function selectProjectFolder() { - (document.activeElement as HTMLElement).blur(); - vscode.postMessage({ - type: 'newproject', - data: { - base, - desktop: false, - language, - newFolder: false, - projectName: '', - projectType, - teamNumber: '', - toFolder: (document.getElementById('projectFolder') as HTMLInputElement).value, - }, - }); -} - -function generateProject() { - if (!validateCurrentStep()) { - return; - } - - (document.activeElement as HTMLElement).blur(); - vscode.postMessage({ - data: { - base, - desktop: (document.getElementById('desktopCB') as HTMLInputElement).checked, - language, - newFolder: (document.getElementById('newFolderCB') as HTMLInputElement).checked, - projectName: (document.getElementById('projectName') as HTMLInputElement).value, - projectType, - teamNumber: (document.getElementById('teamNumber') as HTMLInputElement).value, - toFolder: (document.getElementById('projectFolder') as HTMLInputElement).value, - }, - type: 'createproject', - }); -} - -// Set up event handlers -function setupEventListeners() { - // Step 1 - Project Type Selection - document.querySelectorAll('.selection-card').forEach((el) => { - el.addEventListener('click', () => { - const typeValue = (el as HTMLElement).getAttribute('data-value'); - if (typeValue === 'Template') { - selectProjectType(ProjectType.Template); - } else if (typeValue === 'Example') { - selectProjectType(ProjectType.Example); - } - }); - }); - - document.getElementById('next-to-step-2')!.addEventListener('click', () => { - if (validateStep1()) { - navigateToStep(2); - } - }); - - // Step 2 - Language and Base Selection - const languageSelect = document.getElementById('language-select') as HTMLSelectElement; - languageSelect.addEventListener('change', () => { - language = languageSelect.value; - - // Reset base dropdown when language changes - resetBaseDropdown(); - - // Request project bases for this language - vscode.postMessage({ - data: { - base: '', - desktop: false, - language, - newFolder: false, - projectName: '', - projectType, - teamNumber: '', - toFolder: '', - }, - type: 'base', - }); - - validateStep2(); - }); - - const baseSelect = document.getElementById('base-select') as HTMLSelectElement; - baseSelect.addEventListener('change', () => { - base = baseSelect.value; - - // Enable next button if both selections are made - const nextButton = document.getElementById('next-to-step-3'); - if (nextButton) { - (nextButton as HTMLButtonElement).disabled = !validateStep2(); - } - }); - - document.getElementById('back-to-step-1')!.addEventListener('click', () => navigateToStep(1)); - document.getElementById('next-to-step-3')!.addEventListener('click', () => { - if (validateStep2()) { - navigateToStep(3); - } - }); - - // Step 3 - Project Location and Name - document.getElementById('projectSelectButton')!.addEventListener('click', selectProjectFolder); - document.getElementById('projectName')!.addEventListener('input', () => { - validateProject(); - // Update next button state - const nextButton = document.getElementById('next-to-step-4'); - if (nextButton) { - (nextButton as HTMLButtonElement).disabled = !validateStep3(); - } - }); - document.getElementById('projectFolder')!.addEventListener('input', () => { - validateProjectFolder(); - // Update next button state - const nextButton = document.getElementById('next-to-step-4'); - if (nextButton) { - (nextButton as HTMLButtonElement).disabled = !validateStep3(); - } - }); - - document.getElementById('back-to-step-2')!.addEventListener('click', () => navigateToStep(2)); - document.getElementById('next-to-step-4')!.addEventListener('click', () => { - if (validateStep3()) { - navigateToStep(4); - } - }); - - // Step 4 - Review and Create - document.getElementById('teamNumber')!.addEventListener('input', validateTeamNumber); - document.getElementById('back-to-step-3')!.addEventListener('click', () => navigateToStep(3)); - document.getElementById('generateProject')!.addEventListener('click', generateProject); -} - -window.addEventListener('message', (event) => { - const data = event.data as IProjectIPCSend; - const nextButton = document.getElementById('next-to-step-3') as HTMLButtonElement; - - switch (data.type) { - case 'newproject': - const elem = document.getElementById('projectFolder') as HTMLInputElement; - elem.value = data.data as string; - validateProjectFolder(); - // Update next button state - const step3NextButton = document.getElementById('next-to-step-4'); - if (step3NextButton) { - (step3NextButton as HTMLButtonElement).disabled = !validateStep3(); - } - break; - case 'projecttype': - projectType = data.data as ProjectType; - break; - case 'language': - const langData = data.data as string[]; - if (Array.isArray(langData)) { - // This is a language list response - languages = langData; - populateLanguageSelect(languages); - } else { - // This is a language selection response - language = data.data as string; - } - break; - case 'base': - const baseData = data.data as { label: string; description: string }[]; - if (Array.isArray(baseData)) { - // This is a base list response - bases = baseData.map((b) => b.label); - populateBaseSelect(bases); - } else { - // This is a base selection response - base = data.data as string; - if (nextButton) { - nextButton.disabled = !validateStep2(); - } - } - break; - default: - break; - } -}); - -window.addEventListener('load', (_: Event) => { - setupEventListeners(); - navigateToStep(1); // Start at first step -}); diff --git a/vscode-wpilib/src/webviews/pages/projectcreatorpagetypes.ts b/vscode-wpilib/src/webviews/pages/projectcreatorpagetypes.ts index b94a6239..79d6295a 100644 --- a/vscode-wpilib/src/webviews/pages/projectcreatorpagetypes.ts +++ b/vscode-wpilib/src/webviews/pages/projectcreatorpagetypes.ts @@ -1,6 +1,6 @@ 'use strict'; -import { ICreatorQuickPick } from '../../api'; +import type { ICreatorQuickPick } from '../../api'; export enum ProjectType { Example, diff --git a/vscode-wpilib/src/webviews/pages/sharedpages.ts b/vscode-wpilib/src/webviews/pages/sharedpages.ts deleted file mode 100644 index 074e3b88..00000000 --- a/vscode-wpilib/src/webviews/pages/sharedpages.ts +++ /dev/null @@ -1,96 +0,0 @@ -'use strict'; - -// import { logger } from '../../logger'; - -declare global { - interface Window { - i18nTrans: (domain: string, message: string, ...args: unknown[]) => string; - } -} - -export function validateProject(): boolean { - const projectName = document.getElementById('projectName') as HTMLInputElement; - const error = document.getElementById('projectNameError') as HTMLElement; - - if (projectName.value.trim() === '') { - projectName.classList.add('invalid'); - error.style.display = 'block'; - return false; - } else { - projectName.classList.remove('invalid'); - error.style.display = 'none'; - return true; - } -} - -export function validateProjectFolder(): boolean { - const projectFolder = document.getElementById('projectFolder') as HTMLInputElement; - const error = document.getElementById('projectFolderError') as HTMLElement; - const folderPath = projectFolder.value.trim(); - - if (folderPath === '' || folderPath.includes('OneDrive')) { - projectFolder.classList.add('invalid'); - if (error) { - error.style.display = 'block'; - error.innerText = folderPath.includes('OneDrive') - ? window.i18nTrans('ui', "Invalid Base Folder - Folder can't be in OneDrive") - : window.i18nTrans('ui', 'Invalid Base Folder'); - } - return false; - } else { - projectFolder.classList.remove('invalid'); - if (error) { - error.style.display = 'none'; - } - return true; - } -} - -export function validateXrpRomi(): boolean { - const romiDiv = document.getElementById('romidiv') as HTMLDivElement; - const xrpDiv = document.getElementById('xrpdiv') as HTMLDivElement; - - if (romiDiv) { - romiDiv.classList.remove('error'); - } - if (xrpDiv) { - xrpDiv.classList.remove('error'); - } - - return true; -} - -export function validateTeamNumber(): boolean { - const teamNumber = document.getElementById('teamNumber') as HTMLInputElement; - const error = document.getElementById('teamNumberError') as HTMLElement; - - if (teamNumber.value.trim() === '') { - // Empty is valid (optional) - teamNumber.classList.remove('invalid'); - if (error) { - error.style.display = 'none'; - } - return true; - } - - const num = Number.parseInt(teamNumber.value, 10); - if ( - Number.isNaN(num) || - teamNumber.value.includes('.') || - teamNumber.value.includes('e') || - num < 1 || - num > 25599 - ) { - teamNumber.classList.add('invalid'); - if (error) { - error.style.display = 'block'; - } - return false; - } else { - teamNumber.classList.remove('invalid'); - if (error) { - error.style.display = 'none'; - } - return true; - } -} diff --git a/vscode-wpilib/src/webviews/projectcreator.ts b/vscode-wpilib/src/webviews/projectcreator.ts index 28e091dd..a39616ce 100644 --- a/vscode-wpilib/src/webviews/projectcreator.ts +++ b/vscode-wpilib/src/webviews/projectcreator.ts @@ -143,9 +143,14 @@ export class ProjectCreator extends WebViewBase { data.language ); - // Return the complete base objects to the UI + // Only send the fields the webview needs to avoid structured clone issues + const baseOptions = bases.map((base) => ({ + label: base.label, + description: base.description ?? '', + })); + await this.postMessage({ - data: bases, + data: baseOptions, type: 'base', }); } @@ -174,19 +179,13 @@ export class ProjectCreator extends WebViewBase { private async asyncInitialize() { const htmlPath = path.join( - extensionContext.extensionPath, - 'resources', - 'webviews', - 'projectcreator.html' - ); - const scriptPath = path.join( extensionContext.extensionPath, 'resources', 'dist', - 'projectcreatorpage.js' + 'projectcreator.html' ); // Include the 'projectcreator' domain for localization - await this.loadWebpage(htmlPath, scriptPath, ['projectcreator']); + await this.loadWebpage(htmlPath, ['projectcreator']); } } diff --git a/vscode-wpilib/src/webviews/svelte/components/shared/SummaryBox.svelte b/vscode-wpilib/src/webviews/svelte/components/shared/SummaryBox.svelte new file mode 100644 index 00000000..e16316e9 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/components/shared/SummaryBox.svelte @@ -0,0 +1,31 @@ + + + + +
+ {#if title} +

{title}

+ {/if} + + {#if children}{@render children()}{:else} + {#each items as item (item.label)} +
+ {item.label}: + {item.value ?? ''} +
+ {/each} + {/if} +
diff --git a/vscode-wpilib/src/webviews/svelte/components/shared/ValidationError.svelte b/vscode-wpilib/src/webviews/svelte/components/shared/ValidationError.svelte new file mode 100644 index 00000000..2dd93111 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/components/shared/ValidationError.svelte @@ -0,0 +1,31 @@ + + +
+ {#if children}{@render children()}{:else} + {#if message} + {message} + {/if} + {/if} +
diff --git a/vscode-wpilib/src/webviews/svelte/components/shared/WizardProgress.svelte b/vscode-wpilib/src/webviews/svelte/components/shared/WizardProgress.svelte new file mode 100644 index 00000000..e9ede5a7 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/components/shared/WizardProgress.svelte @@ -0,0 +1,27 @@ + + + + +
+ {#each steps as step (step.step)} +
step.step ? ' completed' : ''}`} + data-step={step.step} + > + {step.label} +
+ {/each} +
diff --git a/vscode-wpilib/src/webviews/svelte/components/shared/WizardStep.svelte b/vscode-wpilib/src/webviews/svelte/components/shared/WizardStep.svelte new file mode 100644 index 00000000..49e09315 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/components/shared/WizardStep.svelte @@ -0,0 +1,38 @@ + + +{#if element === 'section'} +
+ {@render children?.()} +
+{:else} +
+ {@render children?.()} +
+{/if} diff --git a/vscode-wpilib/src/webviews/svelte/components/shared/index.ts b/vscode-wpilib/src/webviews/svelte/components/shared/index.ts new file mode 100644 index 00000000..2b1c9eb3 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/components/shared/index.ts @@ -0,0 +1,4 @@ +export { default as WizardStep } from './WizardStep.svelte'; +export { default as WizardProgress } from './WizardProgress.svelte'; +export { default as ValidationError } from './ValidationError.svelte'; +export { default as SummaryBox } from './SummaryBox.svelte'; diff --git a/vscode-wpilib/src/webviews/svelte/dependencyview/AvailableDependencies.svelte b/vscode-wpilib/src/webviews/svelte/dependencyview/AvailableDependencies.svelte new file mode 100644 index 00000000..fbf4ee51 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/dependencyview/AvailableDependencies.svelte @@ -0,0 +1,30 @@ + + +{#if dependencies.length === 0} +
No additional dependencies available
+{:else} + {#each dependencies as dependency, index} +
+
+ {dependency.name} + +
+
+ {dependency.version} + - {dependency.description} +
+
+ {/each} +{/if} diff --git a/vscode-wpilib/src/webviews/svelte/dependencyview/DependencyView.svelte b/vscode-wpilib/src/webviews/svelte/dependencyview/DependencyView.svelte new file mode 100644 index 00000000..662c9cf7 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/dependencyview/DependencyView.svelte @@ -0,0 +1,132 @@ + + +{#if mode === 'ready'} +
+ +
+ +
+ + +

Install from URL

+
+ +
+ +
+ + +

Installed Dependencies

+
+ {installedDependencies.length} +
+
+ +
+ +
+ + +

Available Dependencies

+
+ {availableDependencies.length} +
+
+ +
+{:else} +
+ + {#if mode === 'not-wpilib'} + This is not a WPILib project.
+ Vendor dependency management is only available for WPILib projects.
+
+ To use vendor dependencies, open a WPILib project or create a new one from the WPILib extension. + {:else if mode === 'no-workspace'} + No workspace is open.
+ Vendor dependency management is only available inside a workspace folder.
+
+ Open a folder containing a WPILib project. + {:else} + Vendor dependency view unavailable. + {/if} +
+{/if} diff --git a/vscode-wpilib/src/webviews/svelte/dependencyview/InstalledDependencies.svelte b/vscode-wpilib/src/webviews/svelte/dependencyview/InstalledDependencies.svelte new file mode 100644 index 00000000..559593ca --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/dependencyview/InstalledDependencies.svelte @@ -0,0 +1,87 @@ + + +{#if dependencies.length === 0} +
No dependencies installed
+{:else} + {#each dependencies as dependency, index (dependency.uuid)} +
+
+
+ {dependency.name} + {dependency.currentVersion} +
+
+ +
+
+ + +
+ + + + +
+
+ {/each} +{/if} diff --git a/vscode-wpilib/src/webviews/svelte/dependencyview/UrlInstallSection.svelte b/vscode-wpilib/src/webviews/svelte/dependencyview/UrlInstallSection.svelte new file mode 100644 index 00000000..1d19f81b --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/dependencyview/UrlInstallSection.svelte @@ -0,0 +1,43 @@ + + +
+
+ + +
+
+ Enter a vendor dependency JSON URL to install a library not listed in the available dependencies. +
+
diff --git a/vscode-wpilib/src/webviews/svelte/dependencyview/main.ts b/vscode-wpilib/src/webviews/svelte/dependencyview/main.ts new file mode 100644 index 00000000..9eb66de2 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/dependencyview/main.ts @@ -0,0 +1,12 @@ +import { mount } from 'svelte'; +import DependencyView from './DependencyView.svelte'; +import { getViewMode } from '../lib'; + +const target = document.getElementById('app') ?? document.body; + +export default mount(DependencyView, { + target, + props: { + mode: getViewMode(), + }, +}); diff --git a/vscode-wpilib/src/webviews/svelte/dependencyview/types.ts b/vscode-wpilib/src/webviews/svelte/dependencyview/types.ts new file mode 100644 index 00000000..54bac69e --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/dependencyview/types.ts @@ -0,0 +1,14 @@ +export interface InstalledDependency { + uuid: string; + name: string; + currentVersion: string; + versionInfo: { version: string; buttonText: string }[]; +} + +export interface AvailableDependency { + name: string; + version: string; + description: string; + website: string; + instructions?: string; +} diff --git a/vscode-wpilib/src/webviews/svelte/gradle2025import/Gradle2025Import.svelte b/vscode-wpilib/src/webviews/svelte/gradle2025import/Gradle2025Import.svelte new file mode 100644 index 00000000..0a9b4be2 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/gradle2025import/Gradle2025Import.svelte @@ -0,0 +1,218 @@ + + +
+ WPILib + +

Import WPILib 2025 Project

+ + + + + goToStep(2)} + /> + + + + { + projectName = value; + showProjectNameError = true; + }} + onTeamNumberChange={(value) => { + teamNumber = value; + showTeamNumberError = true; + }} + onNewFolderChange={(value) => (newFolder = value)} + onDesktopChange={(value) => (desktop = value)} + onHardwareChange={(value) => (hardware = value)} + onBack={() => goToStep(1)} + onNext={() => { + showProjectFolderError = true; + showProjectNameError = true; + showTeamNumberError = true; + if (!projectFolderError && !projectNameError && !teamNumberError) { + goToStep(3); + } + }} + /> + + + + goToStep(2)} + onImport={submitImport} + /> + +
diff --git a/vscode-wpilib/src/webviews/svelte/gradle2025import/main.ts b/vscode-wpilib/src/webviews/svelte/gradle2025import/main.ts new file mode 100644 index 00000000..8fc74991 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/gradle2025import/main.ts @@ -0,0 +1,8 @@ +import { mount } from 'svelte'; +import Gradle2025Import from './Gradle2025Import.svelte'; + +const target = document.getElementById('app') ?? document.body; + +export default mount(Gradle2025Import, { + target, +}); diff --git a/vscode-wpilib/src/webviews/svelte/gradle2025import/steps/Step1SelectSource.svelte b/vscode-wpilib/src/webviews/svelte/gradle2025import/steps/Step1SelectSource.svelte new file mode 100644 index 00000000..60aa6b2c --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/gradle2025import/steps/Step1SelectSource.svelte @@ -0,0 +1,47 @@ + + +
+

Step 1: Select Source Project

+

Select the build.gradle file of your 2025 WPILib project that you want to import.

+
+ +
+
Gradle Project
+ Select the build.gradle file of the gradle project to import. +
+ +
+ +
+ +
+ +
+ +
+
+ +
diff --git a/vscode-wpilib/src/webviews/svelte/gradle2025import/steps/Step2Configure.svelte b/vscode-wpilib/src/webviews/svelte/gradle2025import/steps/Step2Configure.svelte new file mode 100644 index 00000000..ec831861 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/gradle2025import/steps/Step2Configure.svelte @@ -0,0 +1,237 @@ + + +
+

Step 2: Configure Project

+

Configure the new project's location and settings.

+
+ +
+
Base Folder
+ Select a base folder to place the new project into. +
+ +
+
+ + +
+
+ +
+ +
+ +
+
Project Name
+
+ + +
+
+ +
+
Team Number
+
+ + +
+
+ +
+
+ + + Creates a new folder at Base Folder/Project Name +
+
+ +
+
+ + + Enables desktop simulation and unit testing +
+
+ +
+

Hardware Platform

+

Select a hardware platform if applicable:

+
+ updateHardware('none')} + /> + +
+
+ updateHardware('romi')} + /> + +
+
+ updateHardware('xrp')} + /> + +
+
+ +
+ + +
diff --git a/vscode-wpilib/src/webviews/svelte/gradle2025import/steps/Step3Review.svelte b/vscode-wpilib/src/webviews/svelte/gradle2025import/steps/Step3Review.svelte new file mode 100644 index 00000000..1b69d73d --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/gradle2025import/steps/Step3Review.svelte @@ -0,0 +1,63 @@ + + +
+

Step 3: Review & Import

+

Review your settings and select additional options before importing.

+
+ +
+ +
+ +
+
+

+ Note: The import process copies your project source files to a new directory and + completely regenerates the gradle files. If you made non-standard updates to the build.gradle, + you'll need to make those changes again. Vendor libraries must also be imported again. +

+

+ For more details, see + + Importing a Gradle Project + + on frc-docs. +

+
+
+ +
+ + +
diff --git a/vscode-wpilib/src/webviews/svelte/gradle2025import/types.ts b/vscode-wpilib/src/webviews/svelte/gradle2025import/types.ts new file mode 100644 index 00000000..c30d8ca5 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/gradle2025import/types.ts @@ -0,0 +1,15 @@ +export interface Gradle2025ImportData { + desktop: boolean; + romi: boolean; + xrp: boolean; + fromProps: string; + toFolder: string; + projectName: string; + newFolder: boolean; + teamNumber: string; +} + +export interface Gradle2025Message { + type: string; + data: string; +} diff --git a/vscode-wpilib/src/webviews/svelte/help/Help.svelte b/vscode-wpilib/src/webviews/svelte/help/Help.svelte new file mode 100644 index 00000000..b3ac3973 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/help/Help.svelte @@ -0,0 +1,89 @@ + + +
+ WPILib + +

WPILib Help

+ +
+

+ Welcome to WPILib Help! Thank you for alpha testing the Systemcore and 2027 WPILib. Please + see + + https://github.com/wpilibsuite/SystemcoreTesting/ + for the expectations for testing and to provide your feedback. +

+ +

+ To open this window again, open the Command Palette (F1 or View->Command Palette), and + select + Open WPILib Help. +

+

+ For more help, see + the 2027 WPILib documentation. +

+
+ +
+

Common Tasks

+
    +
  • + Create a new project: Click on the Command Palette and type "WPILib: Create a new + project" +
  • +
  • + Deploy code to the robot: Click on the Command Palette and type "WPILib: Deploy Robot + Code" +
  • +
  • + Start a simulation: Click on the Command Palette and type "WPILib: Simulate Robot Code" +
  • +
  • Install vendor libraries: Click on "WPILib Dependencies" in the Activity Bar
  • +
+
+ +
+

Setting Up Your Workspace

+
    +
  • + Enable desktop support: Click on the Command Palette and type "WPILib: Set Desktop + Support" +
  • +
  • Run RioLog: Click on the Command Palette and type "WPILib: Start RioLog"
  • +
  • + Import a project: Click on the Command Palette and type "WPILib: Import a WPILib 2025 + Gradle project" +
  • +
+
+ +
+ + +
+
diff --git a/vscode-wpilib/src/webviews/svelte/help/main.ts b/vscode-wpilib/src/webviews/svelte/help/main.ts new file mode 100644 index 00000000..f6f87d2d --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/help/main.ts @@ -0,0 +1,8 @@ +import { mount } from 'svelte'; +import Help from './Help.svelte'; + +const target = document.getElementById('app') ?? document.body; + +export default mount(Help, { + target, +}); diff --git a/vscode-wpilib/src/webviews/svelte/lib/i18n.ts b/vscode-wpilib/src/webviews/svelte/lib/i18n.ts new file mode 100644 index 00000000..58182b51 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/lib/i18n.ts @@ -0,0 +1,48 @@ +import { readable } from 'svelte/store'; +import formatMessage from '../../../formatter'; + +type MessageInput = string | [string, string]; +type LocaleDomains = Record>; + +let parsedDomains: LocaleDomains | null = null; +let defaultLocaleDomain = ''; + +function initializeLocales(): LocaleDomains { + if (parsedDomains) { + return parsedDomains; + } + parsedDomains = {}; + + document.querySelectorAll('script[data-locale]').forEach((element) => { + const domain = element.dataset.domain!; + if (element.hasAttribute('data-default-domain')) { + defaultLocaleDomain = domain; + } + parsedDomains![domain] = JSON.parse(element.textContent ?? '{}') as Record; + }); + + return parsedDomains; +} + +export function translate(domain: string, message: MessageInput, ...args: unknown[]): string { + const domains = initializeLocales(); + const [key, defaultText] = typeof message === 'string' ? [message, message] : message; + + const targetDomain = domain === '' ? defaultLocaleDomain : domain; + const localized = domains[targetDomain]?.[key] ?? defaultText; + + return formatMessage(localized, args); +} + +export function createTranslator(defaultDomain: string) { + return (message: MessageInput, ...args: unknown[]) => translate(defaultDomain, message, ...args); +} + +export const localeDomainsStore = readable({}, (set) => { + set(initializeLocales()); + return () => undefined; +}); + +export function getLocaleDomains(): LocaleDomains { + return initializeLocales(); +} diff --git a/vscode-wpilib/src/webviews/svelte/lib/index.ts b/vscode-wpilib/src/webviews/svelte/lib/index.ts new file mode 100644 index 00000000..3ca35f14 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/lib/index.ts @@ -0,0 +1,3 @@ +export * from './i18n'; +export * from './webview-context'; +export * from './webview-bridge'; diff --git a/vscode-wpilib/src/webviews/svelte/lib/webview-bridge.ts b/vscode-wpilib/src/webviews/svelte/lib/webview-bridge.ts new file mode 100644 index 00000000..b090a529 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/lib/webview-bridge.ts @@ -0,0 +1,8 @@ +export function onWebviewMessage(handler: (message: TMessage) => void): () => void { + const listener = (event: MessageEvent) => { + handler(event.data as TMessage); + }; + + window.addEventListener('message', listener); + return () => window.removeEventListener('message', listener); +} diff --git a/vscode-wpilib/src/webviews/svelte/lib/webview-context.ts b/vscode-wpilib/src/webviews/svelte/lib/webview-context.ts new file mode 100644 index 00000000..d3fdf7f5 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/lib/webview-context.ts @@ -0,0 +1,19 @@ +export type WebviewAppElement = HTMLElement & { + dataset: DOMStringMap & { + resourceBase?: string; + viewMode?: string; + }; +}; + +export function getWebviewAppElement(): WebviewAppElement | null { + const element = document.getElementById('app'); + return element as WebviewAppElement | null; +} + +export function getResourceBase(): string { + return getWebviewAppElement()?.dataset.resourceBase ?? ''; +} + +export function getViewMode(defaultMode = 'ready'): string { + return getWebviewAppElement()?.dataset.viewMode ?? defaultMode; +} diff --git a/vscode-wpilib/src/webviews/svelte/projectcreator/ProjectCreator.svelte b/vscode-wpilib/src/webviews/svelte/projectcreator/ProjectCreator.svelte new file mode 100644 index 00000000..31327f39 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/projectcreator/ProjectCreator.svelte @@ -0,0 +1,314 @@ + + +
+ WPILib + +

{t('Welcome to WPILib New Project Creator')}

+ + + + + + + + + goToStep(3)} + onBack={() => goToStep(1)} + /> + + + + (newFolder = value)} + onDesktopChange={(value) => (desktop = value)} + onBack={() => goToStep(2)} + onNext={handleStep3Next} + /> + + + + goToStep(3)} + onCreate={createProject} + /> + +
diff --git a/vscode-wpilib/src/webviews/svelte/projectcreator/main.ts b/vscode-wpilib/src/webviews/svelte/projectcreator/main.ts new file mode 100644 index 00000000..9c00f168 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/projectcreator/main.ts @@ -0,0 +1,8 @@ +import { mount } from 'svelte'; +import ProjectCreator from './ProjectCreator.svelte'; + +const target = document.getElementById('app') ?? document.body; + +export default mount(ProjectCreator, { + target, +}); diff --git a/vscode-wpilib/src/webviews/svelte/projectcreator/steps/Step1ProjectType.svelte b/vscode-wpilib/src/webviews/svelte/projectcreator/steps/Step1ProjectType.svelte new file mode 100644 index 00000000..41c532fa --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/projectcreator/steps/Step1ProjectType.svelte @@ -0,0 +1,68 @@ + + +
+

{t('Step 1: Select Project Type')}

+

{t('Choose whether to create a project from a template or an example.')}

+
+ +
+ + +
+ +
+
+ +
diff --git a/vscode-wpilib/src/webviews/svelte/projectcreator/steps/Step2LanguageBase.svelte b/vscode-wpilib/src/webviews/svelte/projectcreator/steps/Step2LanguageBase.svelte new file mode 100644 index 00000000..51596230 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/projectcreator/steps/Step2LanguageBase.svelte @@ -0,0 +1,117 @@ + + +
+

{t('Step 2: Select Language & Base')}

+

{t('Choose the programming language and project base to use.')}

+
+ +
+
{t('Language')}
+
+ + +
+
+ +
+
{t('Project Base')}
+
+ + +
+
+ +
+ + +
diff --git a/vscode-wpilib/src/webviews/svelte/projectcreator/steps/Step3LocationConfig.svelte b/vscode-wpilib/src/webviews/svelte/projectcreator/steps/Step3LocationConfig.svelte new file mode 100644 index 00000000..43513d6b --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/projectcreator/steps/Step3LocationConfig.svelte @@ -0,0 +1,187 @@ + + +
+

{t('Step 3: Project Location & Configuration')}

+

{t('Set where to save your project and configure basic settings.')}

+
+ +
+
{t('Base Folder')}
+
+ + +
+
+ +
+ +
+ +
+
{t('Project Name')}
+
+ + +
+
+ +
+
{t('Team Number')}
+
+ + +
+
+ +
+
+ + + {t('Creates a new folder at Base Folder/Project Name')} +
+
+ +
+
+ + + {t('This enables unit testing and simulation support')} +
+
+ +
+ + +
diff --git a/vscode-wpilib/src/webviews/svelte/projectcreator/steps/Step4Review.svelte b/vscode-wpilib/src/webviews/svelte/projectcreator/steps/Step4Review.svelte new file mode 100644 index 00000000..2f6b116e --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/projectcreator/steps/Step4Review.svelte @@ -0,0 +1,57 @@ + + +
+

{t('Step 4: Review & Create')}

+

{t('Review your selections and create the project.')}

+
+ +
+ +
+ +
+ + +
diff --git a/vscode-wpilib/src/webviews/svelte/projectcreator/types.ts b/vscode-wpilib/src/webviews/svelte/projectcreator/types.ts new file mode 100644 index 00000000..b302b9b6 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/projectcreator/types.ts @@ -0,0 +1,20 @@ +export enum ProjectType { + Example, + Template, +} + +export interface BaseOption { + label: string; + description: string; +} + +export interface ProjectCreationData { + base: string; + desktop: boolean; + projectType: ProjectType; + language: string; + toFolder: string; + projectName: string; + newFolder: boolean; + teamNumber: string; +} diff --git a/vscode-wpilib/src/webviews/svelte/riolog/AnsiText.svelte b/vscode-wpilib/src/webviews/svelte/riolog/AnsiText.svelte new file mode 100644 index 00000000..46ee02a9 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/riolog/AnsiText.svelte @@ -0,0 +1,17 @@ + + +{#each lines as line, lineIndex} + {#if lineIndex > 0}
{/if} + {#each line as segment} + {segment.text} + {/each} +{/each} diff --git a/vscode-wpilib/src/webviews/svelte/riolog/RioLog.svelte b/vscode-wpilib/src/webviews/svelte/riolog/RioLog.svelte new file mode 100644 index 00000000..05589ca6 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/riolog/RioLog.svelte @@ -0,0 +1,273 @@ + + +
+
+ {#each visibleEntries as entry (entry.id)} + + {/each} +
+ + (teamNumber = value)} + onFilterInput={(value) => (filterText = value)} + /> +
diff --git a/vscode-wpilib/src/webviews/svelte/riolog/RioLogEntry.svelte b/vscode-wpilib/src/webviews/svelte/riolog/RioLogEntry.svelte new file mode 100644 index 00000000..5fe22c1d --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/riolog/RioLogEntry.svelte @@ -0,0 +1,87 @@ + + +{#if isErrorOrWarning} +
onToggleExpanded(entry.id)} + onkeydown={(e) => { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + onToggleExpanded(entry.id); + } + }} + > +
+
+
+ {#if showTimestamps} + {formatRioLogTimestamp(entry.message.timestamp)} + {/if} + + + +
+ + {#if isExpanded} +
+ {#if 'location' in entry.message && entry.message.location} +
   at: {entry.message.location}
+ {/if} +
+ {#if 'callStack' in entry.message && entry.message.callStack} +
+ {#each entry.message.callStack.split('\n') as line} + {#if line.trim() !== ''} +
   from: {line}
+ {/if} + {/each} +
+ {/if} + {/if} +
+
+{:else} +
+
+ {#if showTimestamps} + {formatRioLogTimestamp(entry.message.timestamp)} + {/if} + + + +
+
+{/if} diff --git a/vscode-wpilib/src/webviews/svelte/riolog/RioLogToolbar.svelte b/vscode-wpilib/src/webviews/svelte/riolog/RioLogToolbar.svelte new file mode 100644 index 00000000..293f29aa --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/riolog/RioLogToolbar.svelte @@ -0,0 +1,190 @@ + + +
+
+
+
+ +
+ + + +
+ +
+ onFilterInput((e.currentTarget as HTMLInputElement).value)} + /> +
+ +
+
+ + + + +
+ +
+ + + + + +
+
+
diff --git a/vscode-wpilib/src/webviews/svelte/riolog/ansi.ts b/vscode-wpilib/src/webviews/svelte/riolog/ansi.ts new file mode 100644 index 00000000..d95d0b9e --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/riolog/ansi.ts @@ -0,0 +1,33 @@ +import type { AnsiState } from '../../../riolog/ansi/ansiparser'; + +export function ansiStateToStyle(state: AnsiState): string { + const styles: string[] = []; + if (state.foreground) { + styles.push(`color: ${state.foreground}`); + } + if (state.background) { + styles.push(`background-color: ${state.background}`); + } + if (state.bold) { + styles.push('font-weight: bold'); + } + if (state.dim) { + styles.push('opacity: 0.7'); + } + if (state.italic) { + styles.push('font-style: italic'); + } + + const decorations: string[] = []; + if (state.underline) { + decorations.push('underline'); + } + if (state.strikethrough) { + decorations.push('line-through'); + } + if (decorations.length > 0) { + styles.push(`text-decoration: ${decorations.join(' ')}`); + } + + return styles.join('; '); +} diff --git a/vscode-wpilib/src/webviews/svelte/riolog/main.ts b/vscode-wpilib/src/webviews/svelte/riolog/main.ts new file mode 100644 index 00000000..fdb95334 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/riolog/main.ts @@ -0,0 +1,8 @@ +import { mount } from 'svelte'; +import RioLog from './RioLog.svelte'; + +const target = document.getElementById('app') ?? document.body; + +export default mount(RioLog, { + target, +}); diff --git a/vscode-wpilib/src/webviews/svelte/riolog/types.ts b/vscode-wpilib/src/webviews/svelte/riolog/types.ts new file mode 100644 index 00000000..e4225938 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/riolog/types.ts @@ -0,0 +1,26 @@ +import type { AnsiSegment } from '../../../riolog/ansi/ansiparser'; +import type { IErrorMessage, IPrintMessage, MessageType } from '../../../riolog/shared/message'; + +export type RioLogMessage = IPrintMessage | IErrorMessage; + +export type RioLogEntryKind = 'print' | 'warning' | 'error'; + +export type RioLogEntry = { + id: number; + kind: RioLogEntryKind; + message: RioLogMessage; + lines: AnsiSegment[][]; + searchText: string; + expanded?: boolean; +}; + +export function messageTypeToKind(messageType: MessageType): RioLogEntryKind { + switch (messageType) { + case 0: + return 'error'; + case 1: + return 'warning'; + default: + return 'print'; + } +} diff --git a/vscode-wpilib/src/webviews/svelte/vscode.d.ts b/vscode-wpilib/src/webviews/svelte/vscode.d.ts new file mode 100644 index 00000000..4ee37006 --- /dev/null +++ b/vscode-wpilib/src/webviews/svelte/vscode.d.ts @@ -0,0 +1,7 @@ +interface VsCodeApi { + postMessage: (message: unknown) => void; + setState: (state: T) => void; + getState: () => T | undefined; +} + +declare function acquireVsCodeApi(): VsCodeApi; diff --git a/vscode-wpilib/src/webviews/webviewbase.ts b/vscode-wpilib/src/webviews/webviewbase.ts index 0acfe1fb..d6e104b6 100644 --- a/vscode-wpilib/src/webviews/webviewbase.ts +++ b/vscode-wpilib/src/webviews/webviewbase.ts @@ -6,27 +6,20 @@ import * as vscode from 'vscode'; import { loadLocaleFile } from '../locale'; import { extensionContext } from '../utilities'; import { logger } from '../logger'; +import { rewriteDistWebviewHtml } from './distWebviewHtml'; export abstract class WebViewBase { - protected html: string = ''; - protected webview: vscode.WebviewPanel | undefined; + protected html = ''; + protected webview?: vscode.WebviewPanel; protected disposables: vscode.Disposable[] = []; - protected viewType: string; - protected title: string; - protected resourceRoot: string; - protected scriptPath?: string = undefined; - protected constructor(viewType: string, title: string, resourceRoot: string) { - this.viewType = viewType; - this.title = title; - this.resourceRoot = resourceRoot; - } + constructor( + protected readonly viewType: string, + protected readonly title: string, + protected readonly resourceRoot: string + ) {} - public async loadWebpage( - htmlPath: string, - scriptPath?: string, - localeDomains?: string[] - ): Promise { + public async loadWebpage(htmlPath: string, localeDomains?: string[]): Promise { try { this.html = await readFile(htmlPath, 'utf8'); } catch (err) { @@ -34,79 +27,39 @@ export abstract class WebViewBase { return; } - if (scriptPath) { - this.scriptPath = scriptPath; + const specifiedDomains = Array.isArray(localeDomains) ? localeDomains.filter(Boolean) : []; + if (!specifiedDomains.includes('ui')) { + specifiedDomains.push('ui'); } + const uniqueDomains = [...new Set(specifiedDomains)]; - this.html = this.html.replace( - '', - ` - - - ` - ); + if (uniqueDomains.length > 0) { + const defaultDomain = uniqueDomains[0]; + const scriptBlocks = uniqueDomains + .map((domain) => { + const localeJson = JSON.stringify(loadLocaleFile(domain)).replace( + /<\/(script)/gi, + '<\\/$1' + ); + const defaultAttr = defaultDomain === domain ? ' data-default-domain' : ''; + return ``; + }) + .join('\n'); - if (localeDomains) { - localeDomains.push('ui'); - } else { - localeDomains = ['ui']; + if (this.html.includes('')) { + this.html = this.html.replace('', `${scriptBlocks}\n`); + } else { + this.html += `\n${scriptBlocks}\n`; + } } - const defaultDomain = localeDomains[0]; - - localeDomains.forEach((domain) => { - this.html += - `\r\n\r\n'; - }); - } - - private replaceResources(webview: vscode.Webview) { - // Add CSS for main.css - const cssUri = webview.asWebviewUri( - vscode.Uri.file(path.join(extensionContext.extensionPath, 'resources', 'media', 'main.css')) - ); - // Add CSS for vscode-elements.css - const elementsCssUri = webview.asWebviewUri( - vscode.Uri.file( - path.join(extensionContext.extensionPath, 'resources', 'media', 'vscode-elements.css') - ) - ); - // Add CSS for icons.css - const iconsCssUri = webview.asWebviewUri( - vscode.Uri.file(path.join(extensionContext.extensionPath, 'resources', 'media', 'icons.css')) - ); - // Update the CSS paths with the webview URI - this.html = this.html.replace('replaceresource/media/main.css', cssUri.toString()); - this.html = this.html.replace( - 'replaceresource/media/vscode-elements.css', - elementsCssUri.toString() - ); - this.html = this.html.replace('replaceresource/media/icons.css', iconsCssUri.toString()); - - // Add script path if provided - if (this.scriptPath) { - this.html += this.getScriptTag(this.scriptPath, webview); - } - - // Add locale loader script - this.html += this.getScriptTag( - path.join(extensionContext.extensionPath, 'resources', 'dist', 'localeloader.js'), - webview - ); - - // Replace resource paths - const onDiskPath = vscode.Uri.file(extensionContext.extensionPath); - const replacePath = webview.asWebviewUri(onDiskPath); - this.html = this.html.replace(/replaceresource/g, replacePath.toString()); } public displayWebView( showOptions: vscode.ViewColumn | { preserveFocus: boolean; viewColumn: vscode.ViewColumn }, reveal?: boolean, options?: vscode.WebviewPanelOptions & vscode.WebviewOptions - ) { - if (this.webview === undefined) { + ): void { + if (!this.webview) { this.webview = vscode.window.createWebviewPanel(this.viewType, this.title, showOptions, { enableScripts: true, retainContextWhenHidden: true, @@ -116,36 +69,41 @@ export abstract class WebViewBase { vscode.Uri.file(path.join(extensionContext.extensionPath, 'resources', 'media')), ], }); + this.webview.iconPath = vscode.Uri.file(path.join(this.resourceRoot, 'wpilib-icon-128.png')); - this.replaceResources(this.webview.webview); - this.webview.webview.html = this.html; - this.webview.onDidDispose(() => { - this.webview = undefined; - }); + this.webview.webview.html = this.rewriteHtml(this.webview.webview); + + this.webview.onDidDispose(() => (this.webview = undefined)); } + if (reveal) { this.webview.reveal(); } } - public dispose() { - if (this.webview !== undefined) { - this.webview.dispose(); - } + public dispose(): void { + this.webview?.dispose(); for (const d of this.disposables) { d.dispose(); } } - private getScriptTag(scriptPath: string, webview: vscode.Webview) { - let html = ''; - const scriptOnDisk = vscode.Uri.file(scriptPath); - // get the special URI to use with the webview - const scriptResourcePath = webview.asWebviewUri(scriptOnDisk); - html += '\r\n\r\n'; - return html; + private rewriteHtml(webview: vscode.Webview): string { + return rewriteDistWebviewHtml({ + webview, + extensionRoot: vscode.Uri.file(extensionContext.extensionPath), + html: this.html, + extraCss: [ + vscode.Uri.file( + path.join(extensionContext.extensionPath, 'resources', 'media', 'icons.css') + ), + vscode.Uri.file( + path.join(extensionContext.extensionPath, 'resources', 'media', 'vscode-elements.css') + ), + vscode.Uri.file( + path.join(extensionContext.extensionPath, 'resources', 'media', 'main.css') + ), + ], + }); } } diff --git a/vscode-wpilib/svelte.config.mjs b/vscode-wpilib/svelte.config.mjs new file mode 100644 index 00000000..76a69f36 --- /dev/null +++ b/vscode-wpilib/svelte.config.mjs @@ -0,0 +1,13 @@ +import { sveltePreprocess } from 'svelte-preprocess'; + +export default { + preprocess: sveltePreprocess({ + typescript: { + tsconfigFile: './tsconfig.webviews.json', + }, + }), + compilerOptions: { + css: true, + dev: process.env.NODE_ENV !== 'production', + }, +}; diff --git a/vscode-wpilib/tsconfig.json b/vscode-wpilib/tsconfig.json index 3035a863..5c1d2240 100644 --- a/vscode-wpilib/tsconfig.json +++ b/vscode-wpilib/tsconfig.json @@ -5,7 +5,10 @@ "outDir": "out", "lib": ["es2019", "dom"], "sourceMap": true, + "esModuleInterop": true, "rootDir": "src", + "moduleResolution": "node", + "types": ["node", "svelte", "mocha"], /* Strict Type-Checking Option */ "strict": true /* enable all strict type-checking options */, /* Additional Checks */ @@ -14,5 +17,6 @@ "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, "noUnusedParameters": true /* Report errors on unused parameters. */ }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.svelte"], "exclude": ["node_modules", ".vscode-test", "out", "resources"] } diff --git a/vscode-wpilib/tsconfig.rollup.extension.json b/vscode-wpilib/tsconfig.rollup.extension.json new file mode 100644 index 00000000..9ab97840 --- /dev/null +++ b/vscode-wpilib/tsconfig.rollup.extension.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "esnext", + "noEmit": false, + "outDir": "./out/.tsbuild", + "esModuleInterop": true + }, + "exclude": ["resources", "src/webviews/svelte/**/*.svelte"] +} diff --git a/vscode-wpilib/tsconfig.webviews.json b/vscode-wpilib/tsconfig.webviews.json new file mode 100644 index 00000000..87c42ee8 --- /dev/null +++ b/vscode-wpilib/tsconfig.webviews.json @@ -0,0 +1,29 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "esnext", + "outDir": "./resources/dist/.tsbuild", + "noEmit": false, + "types": ["node", "svelte", "mocha"], + "verbatimModuleSyntax": true, + "noUnusedLocals": false + }, + "include": [ + "src/webviews/svelte/**/*.ts", + "src/webviews/svelte/**/*.svelte", + "src/webviews/pages/**/*.ts", + "src/formatter.ts", + "src/riolog/ansi/ansiparser.ts", + "src/riolog/shared/interfaces.ts", + "src/riolog/shared/message.ts" + ], + "exclude": [ + "node_modules", + "out", + "resources", + "src/unittest", + "src/extension.ts", + "src/webviews/**/*.test.ts", + "src/webviews/**/*.spec.ts" + ] +} diff --git a/vscode-wpilib/webpack.config.js b/vscode-wpilib/webpack.config.js deleted file mode 100644 index e7cad117..00000000 --- a/vscode-wpilib/webpack.config.js +++ /dev/null @@ -1,72 +0,0 @@ -const path = require('path'); -const isDevelopment = process.env.NODE_ENV !== 'production'; - -/**@type {import('webpack').Configuration}*/ -module.exports = [ - { - entry: { - localeloader: './src/webviews/localeloader.ts', - gradle2025importpage: './src/webviews/pages/gradle2025importpage.ts', - projectcreatorpage: './src/webviews/pages/projectcreatorpage.ts', - riologpage: ['./src/riolog/shared/sharedscript.ts', './src/riolog/script/implscript.ts'], - }, - devtool: isDevelopment ? 'inline-source-map' : 'source-map', - module: { - rules: [ - { - test: /\.ts$/, - use: 'ts-loader', - }, - { - test: /\.js$/, - include: [/node_modules/], - }, - ], - }, - resolve: { - extensions: ['.ts', '.js'], - fallback: { - net: false, - }, - }, - output: { - path: path.resolve(__dirname, 'resources', 'dist'), - filename: '[name].js', - hashFunction: 'sha256', - }, - }, - { - target: 'node', // vscode extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ - entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ - output: { - // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ - path: path.resolve(__dirname, 'out'), - filename: 'extension.js', - libraryTarget: 'commonjs2', - devtoolModuleFilenameTemplate: '../[resource-path]', - hashFunction: 'sha256', - }, - devtool: isDevelopment ? 'inline-source-map' : 'source-map', - externals: { - vscode: 'commonjs vscode', // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ - }, - resolve: { - // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader - extensions: ['.ts', '.js'], - }, - node: false, // no polyfill for node context - module: { - rules: [ - { - test: /\.ts$/, - exclude: /node_modules/, - use: [ - { - loader: 'ts-loader', - }, - ], - }, - ], - }, - }, -];