diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 1be64475b..000000000 --- a/.eslintignore +++ /dev/null @@ -1,18 +0,0 @@ -coverage/ -out/ -pkg/ -lib/ -tmp/ -docs/_site/ -docs/js/ -docs/releases/ -docs/_releases/ -docs/assets/js/ -docs/vendor -vendor/ - -# has linting of its own -docs/release-source/release/examples - -# has "invalid" ESM syntax -rollup.config.js diff --git a/.eslintrc.yml b/.eslintrc.yml deleted file mode 100644 index 39fff295d..000000000 --- a/.eslintrc.yml +++ /dev/null @@ -1,38 +0,0 @@ -extends: - - "@sinonjs/eslint-config" - -plugins: - - "@sinonjs/no-prototype-methods" - -rules: - "@sinonjs/no-prototype-methods/no-prototype-methods": error - "jsdoc/require-param-type": off - "jsdoc/require-jsdoc": off - "jsdoc/tag-lines": off - -overrides: - - files: - - "src/**/*.js" - - "*.mjs" - - "**/*.mjs" - - "scripts/**/*.mjs" - - "test/distribution/browser-global-smoke.js" - - "test/es2015/check-esm-bundle-is-runnable.js" - parserOptions: - sourceType: module - rules: - "no-underscore-dangle": - - error - - allow: - - "__dirname" - - files: - - "build.cjs" - - "scripts/**/*.mjs" - - "test/distribution/browser-global-smoke.js" - - "test/es2015/check-esm-bundle-is-runnable.js" - rules: - "no-console": off - - files: - - "*.cjs" - parserOptions: - sourceType: script diff --git a/build.cjs b/build.cjs index bd665aa66..84d8a5c18 100755 --- a/build.cjs +++ b/build.cjs @@ -1,6 +1,5 @@ #!/usr/bin/env node -"use strict"; -/* eslint-disable @sinonjs/no-prototype-methods/no-prototype-methods */ + const fs = require("node:fs"); const { execFileSync } = require("node:child_process"); const esbuild = require("esbuild"); diff --git a/coverage.cjs b/coverage.cjs index 4a3068a87..31f0e4267 100644 --- a/coverage.cjs +++ b/coverage.cjs @@ -1,5 +1,3 @@ -"use strict"; - const esbuild = require("esbuild"); const { esbuildPluginIstanbul } = require("esbuild-plugin-istanbul"); diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000..076deee44 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,129 @@ +import noPrototypeMethods from "@sinonjs/eslint-plugin-no-prototype-methods"; +import sinonConfig from "@sinonjs/eslint-config"; + +export default [ + { + ignores: [ + "eslint.config.js", + "coverage/**", + ".worktrees/**", + "**/.worktrees/**", + "out/**", + "pkg/**", + "lib/**", + "tmp/**", + "**/node_modules/**", + "docs/_site/**", + "docs/js/**", + "docs/releases/**", + "docs/_releases/**", + "docs/assets/js/**", + "docs/vendor/**", + "vendor/**", + "docs/release-source/release/examples/**", + "rollup.config.js", + ], + }, + ...sinonConfig, + { + plugins: { + "@sinonjs/no-prototype-methods": noPrototypeMethods, + }, + rules: { + "@sinonjs/no-prototype-methods/no-prototype-methods": "error", + "jsdoc/require-param-type": "off", + "jsdoc/require-jsdoc": "off", + "jsdoc/tag-lines": "off", + }, + }, + { + files: [ + "src/**/*.js", + "test/src/**/*.js", + "*.mjs", + "**/*.mjs", + "scripts/**/*.mjs", + "test/distribution/browser-global-smoke.js", + "test/es2015/check-esm-bundle-is-runnable.js", + ], + languageOptions: { + sourceType: "module", + }, + rules: { + "no-underscore-dangle": [ + "error", + { + allow: ["__dirname"], + }, + ], + }, + }, + { + files: ["test/webworker/webworker-support-assessment.js"], + languageOptions: { + globals: { + describe: false, + it: false, + Worker: false, + }, + }, + }, + { + files: ["test/webworker/webworker-script.js"], + languageOptions: { + globals: { + importScripts: false, + onmessage: false, + postMessage: false, + sinon: false, + }, + }, + }, + { + files: [ + "build.cjs", + "scripts/**/*.mjs", + "test/distribution/browser-global-smoke.js", + "test/es2015/check-esm-bundle-is-runnable.js", + ], + rules: { + "no-console": "off", + "no-implicit-globals": "off", + }, + }, + { + files: ["*.cjs"], + languageOptions: { + sourceType: "script", + }, + }, + { + files: ["**/*-test.js", "test/**/*.js"], + rules: { + "@sinonjs/no-prototype-methods/no-prototype-methods": "off", + "max-nested-callbacks": "off", + }, + }, + { + files: ["**/*-tests.*"], + rules: { + "@sinonjs/no-prototype-methods/no-prototype-methods": "off", + "max-nested-callbacks": "off", + }, + }, + { + files: ["test/src/shared-spy-stub-everything-tests.js"], + rules: { + "mocha/no-exports": "off", + }, + }, + { + files: [ + "src/sinon/util/core/walk-object.js", + "src/sinon/util/core/walk.js", + ], + rules: { + "no-implicit-globals": "off", + }, + }, +]; diff --git a/mochify.webdriver.cjs b/mochify.webdriver.cjs index 5be25090f..823c80548 100644 --- a/mochify.webdriver.cjs +++ b/mochify.webdriver.cjs @@ -1,4 +1,3 @@ -"use strict"; const assert = require("node:assert"); assert(process.env.BROWSER_NAME); diff --git a/package-lock.json b/package-lock.json index 05569c2a5..c51121916 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,8 @@ "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^15.3.1", - "@sinonjs/samsam": "^10.0.1", + "@sinonjs/fake-timers": "^15.3.2", + "@sinonjs/samsam": "^10.0.2", "diff": "^8.0.4" }, "devDependencies": { @@ -21,17 +21,18 @@ "@rollup/plugin-commonjs": "^29.0.2", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^16.0.3", - "@sinonjs/eslint-config": "^6.0.1", + "@sinonjs/eslint-config": "^7.0.3", "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", - "@sinonjs/referee": "^11.0.1", + "@sinonjs/referee": "^11.0.2", "@studio/changes": "^3.0.0", "debug": "^4.4.3", "esbuild": "^0.28.0", "esbuild-plugin-istanbul": "^0.3.0", "esbuild-plugin-umd-wrapper": "^3.0.0", + "eslint": "^10.2.0", "get-stdin": "^10.0.0", "js-yaml": "^4.1.1", - "knip": "^6.3.1", + "knip": "^6.4.0", "lint-staged": "^16.4.0", "mocha": "^11.7.5", "npm-run-all": "^4.1.5", @@ -843,6 +844,19 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { "version": "4.12.2", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", @@ -853,54 +867,93 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.5.tgz", + "integrity": "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@eslint/plugin-kit": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", + "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -917,13 +970,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "9.0.0", @@ -1032,16 +1091,6 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -1923,6 +1972,16 @@ "node": ">=18" } }, + "node_modules/@puppeteer/browsers/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/@puppeteer/browsers/node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -1963,6 +2022,19 @@ "node": ">=8" } }, + "node_modules/@puppeteer/browsers/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@puppeteer/browsers/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -2489,19 +2561,20 @@ } }, "node_modules/@sinonjs/eslint-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/eslint-config/-/eslint-config-6.0.1.tgz", - "integrity": "sha512-/A+TCJJz3JtaRmmkdfq+UNurZFmUhemLfNflyx6p7BM2F2eaoxmsBAliBO5pL65NrIlFNhYfXTOCF+8cCvbE3w==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@sinonjs/eslint-config/-/eslint-config-7.0.3.tgz", + "integrity": "sha512-1eJf1nbezgaXBUs/r2xkS9ebVOBiLcDHIKOiigBr6rvXPNK+9ZX6o7CwgvE/tk0lcmDaRAqsLIIi/XHEtgt+TA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "eslint": "^8.57.1", - "eslint-plugin-compat": "^6.2.1", - "eslint-plugin-jsdoc": "^62.7.1", - "eslint-plugin-mocha": "^10.5.0" + "eslint": "^10.2.0", + "eslint-plugin-compat": "^7.0.1", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-mocha": "^11.2.0", + "globals": "^15.15.0" }, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "^22.13.0 || >=24" } }, "node_modules/@sinonjs/eslint-plugin-no-prototype-methods": { @@ -2518,18 +2591,18 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.3.1.tgz", - "integrity": "sha512-oDDGPn/4jD3viZLphixgu1jwT0bqIqP25FNXC5OkWrUqHZOF4wATtSyVzluOt4DqcMqSoKMClyhUllKSxpQCng==", + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.3.2.tgz", + "integrity": "sha512-mrn35Jl2pCpns+mE3HaZa1yPN5EYCRgiMI+135COjr2hr8Cls9DXqIZ57vZe2cz7y2XVSq92tcs6kGQcT1J8Rw==", "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1" } }, "node_modules/@sinonjs/referee": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/referee/-/referee-11.0.1.tgz", - "integrity": "sha512-slA8klGmJskx/A2CBB/c3yOm8+gBzK64b7hoa3v+j7+dV34F1UI+ABB9tPZOEKcMSrMGZe7hC2Ebq2tnpgUGNA==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/referee/-/referee-11.0.2.tgz", + "integrity": "sha512-s/b74ZlD/XD7zc+KfgzQj67IZbAAxAIhto1X8rEiUGS5Mp9mSD/EgJVvmQ+5Sl1Xrw/mMsyRf6NfYHUAggQ+Ow==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -2562,9 +2635,9 @@ } }, "node_modules/@sinonjs/samsam": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-10.0.1.tgz", - "integrity": "sha512-q2mHXfkviqX+roGbzFJF6r5GR4TJDGngJuPrtj0IZRZZGnFlYTjdeoiZ6vCISmOjTLsZm0+CqHPupXR/BRVZjA==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-10.0.2.tgz", + "integrity": "sha512-8lVwD1Df1BmzoaOLhMcGGcz/Jyr5QY2KSB75/YK1QgKzoabTeLdIVyhXNZK9ojfSKSdirbXqdbsXXqP9/Ve8+A==", "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", @@ -2652,6 +2725,13 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -2659,6 +2739,13 @@ "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/node": { "version": "25.6.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", @@ -2718,13 +2805,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, "node_modules/@wdio/config": { "version": "9.27.0", "resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.27.0.tgz", @@ -2762,19 +2842,6 @@ "node": ">=12" } }, - "node_modules/@wdio/config/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/@wdio/config/node_modules/ansi-styles": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", @@ -2788,10 +2855,17 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@wdio/config/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, "node_modules/@wdio/config/node_modules/brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -2894,22 +2968,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wdio/config/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/@wdio/config/node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -2945,19 +3003,6 @@ "node": ">=18.20.0" } }, - "node_modules/@wdio/logger/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/@wdio/logger/node_modules/chalk": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", @@ -2971,22 +3016,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@wdio/logger/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/@wdio/protocols": { "version": "9.27.0", "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.27.0.tgz", @@ -3156,13 +3185,16 @@ } }, "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "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": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/ansi-styles": { @@ -3329,11 +3361,14 @@ } }, "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } }, "node_modules/bare-events": { "version": "2.8.2", @@ -3433,9 +3468,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.10.17", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.17.tgz", - "integrity": "sha512-HdrkN8eVG2CXxeifv/VdJ4A4RSra1DTW8dc/hdxzhGHN8QePs6gKaWM9pHPcpCoxYZJuOZ8drHmbdpLHjCYjLA==", + "version": "2.10.18", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.18.tgz", + "integrity": "sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3456,14 +3491,16 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/braces": { @@ -3654,6 +3691,19 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chalk/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/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", @@ -3752,19 +3802,6 @@ "node": ">=20" } }, - "node_modules/cliui/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/cliui/node_modules/emoji-regex": { "version": "10.6.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", @@ -3790,22 +3827,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4142,19 +4163,6 @@ "node": ">=0.3.1" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -4258,9 +4266,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.334", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.334.tgz", - "integrity": "sha512-mgjZAz7Jyx1SRCwEpy9wefDS7GvNPazLthHg8eQMJ76wBdGQQDW33TCrUTvQ4wzpmOrv2zrFoD3oNufMdyMpog==", + "version": "1.5.335", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.335.tgz", + "integrity": "sha512-q9n5T4BR4Xwa2cwbrwcsDJtHD/enpQ5S1xF1IAtdqf5AAgqDFmR/aakqH3ChFdqd/QXJhS3rnnXFtexU7rax6Q==", "dev": true, "license": "ISC" }, @@ -4552,8 +4560,36 @@ "nyc": "^15.1.0" } }, - "node_modules/esbuild-plugin-istanbul/node_modules/cliui": { - "version": "6.0.0", + "node_modules/esbuild-plugin-istanbul/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/esbuild-plugin-istanbul/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild-plugin-istanbul/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/esbuild-plugin-istanbul/node_modules/cliui": { + "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, @@ -4678,6 +4714,19 @@ "node": ">=8" } }, + "node_modules/esbuild-plugin-istanbul/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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/esbuild-plugin-istanbul/node_modules/nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -4749,16 +4798,6 @@ "node": ">=8" } }, - "node_modules/esbuild-plugin-istanbul/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/esbuild-plugin-istanbul/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -4826,6 +4865,19 @@ "node": ">=8" } }, + "node_modules/esbuild-plugin-istanbul/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/esbuild-plugin-istanbul/node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -4964,66 +5016,65 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", + "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.4", + "@eslint/config-helpers": "^0.5.4", + "@eslint/core": "^1.2.0", + "@eslint/plugin-kit": "^0.7.0", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^10.2.4", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-plugin-compat": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-6.2.1.tgz", - "integrity": "sha512-gLKqUH+lQcCL+HzsROUjBDvakc5Zaga51Y4ZAkPCXc41pzKBfyluqTr2j8zOx8QQQb7zyglu1LVoL5aSNWf2SQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-7.0.1.tgz", + "integrity": "sha512-wDID2fVIAfxV9R1uSkCn5HscnNu8yMxDF1IaQGyD1C6XuWwJbuaDgMOSkVgOom0LzY8z0fXXXCy7AQQTERQUvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5039,20 +5090,7 @@ "node": ">=18.x" }, "peerDependencies": { - "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0" - } - }, - "node_modules/eslint-plugin-compat/node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "eslint": "^9.0.0 || ^10.0.0" } }, "node_modules/eslint-plugin-jsdoc": { @@ -5084,109 +5122,47 @@ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/eslint-plugin-mocha": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.5.0.tgz", - "integrity": "sha512-F2ALmQVPT1GoP27O1JTZGrV9Pqg8k79OeIuvw63UxMtQKREZtmkK1NFgkZQ2TW7L2JSSFKHFPTtHu5z8R9QNRw==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-11.2.0.tgz", + "integrity": "sha512-nMdy3tEXZac8AH5Z/9hwUkSfWu8xHf4XqwB5UEQzyTQGKcNlgFeciRAjLjliIKC3dR1Ex/a2/5sqgQzvYRkkkA==", "dev": true, "license": "MIT", "dependencies": { - "eslint-utils": "^3.0.0", - "globals": "^13.24.0", - "rambda": "^7.4.0" - }, - "engines": { - "node": ">=14.0.0" + "@eslint-community/eslint-utils": "^4.4.1", + "globals": "^15.14.0" }, "peerDependencies": { - "eslint": ">=7.0.0" + "eslint": ">=9.0.0" } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -5209,18 +5185,18 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^5.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -5555,16 +5531,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { @@ -5626,57 +5602,17 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "keyv": "^4.5.4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { @@ -6073,56 +6009,14 @@ "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6165,13 +6059,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/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -6283,16 +6170,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -6418,6 +6295,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/import-meta-resolve": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", @@ -7111,6 +6998,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/istanbul-lib-report/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/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -7278,9 +7178,9 @@ } }, "node_modules/knip": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/knip/-/knip-6.3.1.tgz", - "integrity": "sha512-22kLJloVcOVOAudCxlFOC0ICAMme7dKsS7pVTEnrmyKGpswb8ieznvAiSKUeFVDJhb01ect6dkDc1Ha1g1sPpg==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/knip/-/knip-6.4.0.tgz", + "integrity": "sha512-SAEeggehgkPdoLZWVEcFKzPw+vNlnrUBDqcX8cOcHGydRInSn5pnn9LN3dDJ8SkDHKXR7xYzNq3HtRJaYmxOHg==", "dev": true, "funding": [ { @@ -7318,19 +7218,6 @@ "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/knip/node_modules/strip-json-comments": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", - "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -7519,13 +7406,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -7576,19 +7456,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/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/log-update/node_modules/ansi-styles": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", @@ -7619,22 +7486,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/loglevel": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", @@ -7802,16 +7653,19 @@ } }, "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "*" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -7897,16 +7751,13 @@ } }, "node_modules/mocha/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, "node_modules/mocha/node_modules/ansi-styles": { @@ -7922,10 +7773,17 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/mocha/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -7947,16 +7805,6 @@ "node": ">=12" } }, - "node_modules/mocha/node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/mocha/node_modules/cliui/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -8142,36 +7990,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/mocha/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==", + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/wrap-ansi": { @@ -8211,16 +8040,6 @@ "node": ">=12" } }, - "node_modules/mocha/node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/mocha/node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -8393,6 +8212,24 @@ "node": ">=4" } }, + "node_modules/npm-run-all/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "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/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -8462,6 +8299,19 @@ "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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "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", @@ -8603,27 +8453,14 @@ "node": "20 || >=22" } }, - "node_modules/nyc/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==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/nyc/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==", + "node_modules/nyc/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=8" } }, "node_modules/nyc/node_modules/cliui": { @@ -8696,24 +8533,8 @@ "dependencies": { "p-locate": "^4.1.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=8" } }, "node_modules/nyc/node_modules/p-limit": { @@ -8745,16 +8566,6 @@ "node": ">=8" } }, - "node_modules/nyc/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/nyc/node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -8777,6 +8588,19 @@ "node": ">=8" } }, + "node_modules/nyc/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -9600,13 +9424,6 @@ ], "license": "MIT" }, - "node_modules/rambda": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", - "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", - "dev": true, - "license": "MIT" - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -9765,13 +9582,13 @@ } }, "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "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": ">=4" + "node": ">=8" } }, "node_modules/resolve-pkg-maps": { @@ -9849,29 +9666,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/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==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/rimraf/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==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, "node_modules/rimraf/node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -9890,22 +9684,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { "version": "4.60.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", @@ -10715,43 +10493,37 @@ "node": ">=8" } }, - "node_modules/string-width-cjs/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", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/string-width/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/string-width-cjs/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", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.2.2" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/string.prototype.padend": { @@ -10833,16 +10605,19 @@ } }, "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^6.2.2" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/strip-ansi-cjs": { @@ -10859,6 +10634,16 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -10883,13 +10668,13 @@ } }, "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", + "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10909,16 +10694,19 @@ "license": "MIT" }, "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": "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": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -10987,29 +10775,6 @@ "node": "20 || >=22" } }, - "node_modules/test-exclude/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==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/test-exclude/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==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, "node_modules/test-exclude/node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -11028,22 +10793,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/text-decoder": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", @@ -11054,13 +10803,6 @@ "b4a": "^1.6.4" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/tinyexec": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", @@ -11138,16 +10880,13 @@ } }, "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/typed-array-buffer": { @@ -11652,6 +11391,16 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi-cjs/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", @@ -11677,17 +11426,17 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/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/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">=8" } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { @@ -11728,22 +11477,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -11906,19 +11639,6 @@ "node": ">=8" } }, - "node_modules/yargs/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/yargs/node_modules/emoji-regex": { "version": "10.6.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", @@ -11944,22 +11664,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/yargs/node_modules/yargs-parser": { "version": "22.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", diff --git a/package.json b/package.json index 6c5d89ee2..44f5108da 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "build": "npm run build-artifacts", "build-docs": "cd docs; make build", "serve-docs": "cd docs; make livereload", - "lint": "eslint --max-warnings 48 '**/*.{js,cjs,mjs}'", + "lint": "eslint --max-warnings 0 '**/*.{js,cjs,mjs}'", "pretest-webworker": "npm run build-artifacts", "prebuild": "rimraf pkg && npm run update-compatibility", "postbuild": "run-s test-esm-support test-esm-browser-build test-contract check-dependencies", @@ -130,8 +130,8 @@ }, "dependencies": { "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^15.3.1", - "@sinonjs/samsam": "^10.0.1", + "@sinonjs/fake-timers": "^15.3.2", + "@sinonjs/samsam": "^10.0.2", "diff": "^8.0.4" }, "devDependencies": { @@ -141,9 +141,10 @@ "@rollup/plugin-commonjs": "^29.0.2", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^16.0.3", - "@sinonjs/eslint-config": "^6.0.1", + "@sinonjs/eslint-config": "^7.0.3", "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", - "@sinonjs/referee": "^11.0.1", + "eslint": "^10.2.0", + "@sinonjs/referee": "^11.0.2", "@studio/changes": "^3.0.0", "debug": "^4.4.3", "esbuild": "^0.28.0", @@ -151,7 +152,7 @@ "esbuild-plugin-umd-wrapper": "^3.0.0", "get-stdin": "^10.0.0", "js-yaml": "^4.1.1", - "knip": "^6.3.1", + "knip": "^6.4.0", "lint-staged": "^16.4.0", "mocha": "^11.7.5", "npm-run-all": "^4.1.5", diff --git a/scripts/set-release-id-in-config-yml.cjs b/scripts/set-release-id-in-config-yml.cjs index 9328995b1..1258fbb80 100644 --- a/scripts/set-release-id-in-config-yml.cjs +++ b/scripts/set-release-id-in-config-yml.cjs @@ -1,4 +1,3 @@ -"use strict"; const configYmlPath = process.env.SINON_DOCS_CONFIG_PATH || "docs/_config.yml"; const UTF8 = "utf8"; diff --git a/scripts/update-compatibility.cjs b/scripts/update-compatibility.cjs index 2baad1a22..b856270af 100755 --- a/scripts/update-compatibility.cjs +++ b/scripts/update-compatibility.cjs @@ -4,8 +4,6 @@ * Background: https://github.com/sinonjs/sinon/pull/2366 */ -"use strict"; - const shell = require("shelljs"); const readline = require("readline"); const fs = require("node:fs"); @@ -28,7 +26,7 @@ const rl = readline.createInterface({ let changeLogData = ""; -/* eslint-disable jsdoc/require-jsdoc, @sinonjs/no-prototype-methods/no-prototype-methods */ + function getKeyByValue(object, value) { return Object.keys(object).find((key) => object[key] === value); } diff --git a/src/sinon/create-stub-instance.js b/src/sinon/create-stub-instance.js index 47c318c87..eda65253a 100644 --- a/src/sinon/create-stub-instance.js +++ b/src/sinon/create-stub-instance.js @@ -12,7 +12,7 @@ function isStub(value) { /** * Creates a stub instance of a constructor. * - * @param {Function} constructor The constructor function + * @param {new (...args: unknown[]) => object} constructor The constructor function * @param {object} [overrides] Optional overrides for the stubbed methods * @returns {object} The stubbed instance */ diff --git a/src/sinon/fake.js b/src/sinon/fake.js index 32e057d27..6dedf1528 100644 --- a/src/sinon/fake.js +++ b/src/sinon/fake.js @@ -5,13 +5,19 @@ import nextTick from "./util/core/next-tick.js"; const { prototypes } = commons; const { slice } = prototypes.array; +/** + * @callback SinonFunction + * @param {...unknown} args + * @returns {unknown} + */ + /** * Returns a `fake` that records all calls, arguments and return values. * * When an `f` argument is supplied, this implementation will be used. * - * @param {Function|undefined} [f] - * @returns {Function} + * @param {SinonFunction|undefined} [f] + * @returns {SinonFunction} * @namespace */ function fake(f) { @@ -27,11 +33,10 @@ function fake(f) { * calls, arguments and return values. * * @memberof fake - * @param {*} value - * @returns {Function} + * @param {unknown} value + * @returns {SinonFunction} */ fake.returns = function returns(value) { - // eslint-disable-next-line jsdoc/require-jsdoc function f() { return value; } @@ -43,11 +48,10 @@ fake.returns = function returns(value) { * Creates a `fake` that throws an Error. * * @memberof fake - * @param {*|Error} value - * @returns {Function} + * @param {unknown|Error} value + * @returns {SinonFunction} */ fake.throws = function throws(value) { - // eslint-disable-next-line jsdoc/require-jsdoc function f() { throw getError(value); } @@ -59,11 +63,10 @@ fake.throws = function throws(value) { * Creates a `fake` that returns a promise that resolves to the passed `value` * * @memberof fake - * @param {*} value - * @returns {Function} + * @param {unknown} value + * @returns {SinonFunction} */ fake.resolves = function resolves(value) { - // eslint-disable-next-line jsdoc/require-jsdoc function f() { return Promise.resolve(value); } @@ -75,11 +78,10 @@ fake.resolves = function resolves(value) { * Creates a `fake` that returns a promise that rejects to the passed `value` * * @memberof fake - * @param {*} value - * @returns {Function} + * @param {unknown} value + * @returns {SinonFunction} */ fake.rejects = function rejects(value) { - // eslint-disable-next-line jsdoc/require-jsdoc function f() { return Promise.reject(getError(value)); } @@ -91,12 +93,11 @@ fake.rejects = function rejects(value) { * Returns a `fake` that calls the callback with the defined arguments. * * @memberof fake - * @returns {Function} + * @returns {SinonFunction} */ fake.yields = function yields() { const values = slice(arguments); - // eslint-disable-next-line jsdoc/require-jsdoc function f() { const callback = arguments[arguments.length - 1]; if (typeof callback !== "function") { @@ -114,12 +115,11 @@ fake.yields = function yields() { * defined arguments. * * @memberof fake - * @returns {Function} + * @returns {SinonFunction} */ fake.yieldsAsync = function yieldsAsync() { const values = slice(arguments); - // eslint-disable-next-line jsdoc/require-jsdoc function f() { const callback = arguments[arguments.length - 1]; if (typeof callback !== "function") { @@ -138,8 +138,8 @@ let uuid = 0; * Creates a proxy (sinon concept) from the passed function. * * @private - * @param {Function} f - * @returns {Function} + * @param {SinonFunction} f + * @returns {SinonFunction} */ function wrapFunc(f) { const fakeInstance = function () { @@ -178,7 +178,7 @@ function wrapFunc(f) { * already an Error instance. * * @private - * @param {*} value [description] + * @param {unknown} value [description] * @returns {Error} [description] */ function getError(value) { diff --git a/src/sinon/promise.js b/src/sinon/promise.js index 18a596d96..0f54b4d2f 100644 --- a/src/sinon/promise.js +++ b/src/sinon/promise.js @@ -5,13 +5,20 @@ const STATUS_PENDING = "pending"; const STATUS_RESOLVED = "resolved"; const STATUS_REJECTED = "rejected"; +/** + * @callback PromiseExecutor + * @param {(value: unknown) => void} resolve + * @param {(reason: unknown) => void} reject + * @returns {void} + */ + /** * Returns a fake for a given function or undefined. If no function is given, a * new fake is returned. If the given function is already a fake, it is * returned as is. Otherwise the given function is wrapped in a new fake. * - * @param {Function} [executor] The optional executor function. - * @returns {Function} + * @param {PromiseExecutor} [executor] The optional executor function. + * @returns {PromiseExecutor} */ function getFakeExecutor(executor) { if (isRestorable(executor)) { @@ -28,7 +35,7 @@ function getFakeExecutor(executor) { * and `rejectedValue` and can be resolved or rejected from the outside by * calling `resolve(value)` or `reject(reason)`. * - * @param {Function} [executor] The optional executor function. + * @param {PromiseExecutor} [executor] The optional executor function. * @returns {Promise} */ export default function promise(executor) { @@ -50,8 +57,8 @@ export default function promise(executor) { * Resolves or rejects the promise with the given status and value. * * @param {string} status - * @param {*} value - * @param {Function} callback + * @param {unknown} value + * @param {(value: unknown) => unknown} callback */ function finalize(status, value, callback) { if (sinonPromise.status !== STATUS_PENDING) { diff --git a/src/sinon/proxy-call-util.js b/src/sinon/proxy-call-util.js index d1e19449d..3aee91e1c 100644 --- a/src/sinon/proxy-call-util.js +++ b/src/sinon/proxy-call-util.js @@ -4,6 +4,18 @@ const { prototypes } = commons; const { push } = prototypes.array; +/** + * @callback SinonFunction + * @param {...unknown} args + * @returns {unknown} + */ + +/** + * @callback DelegateCallback + * @param {...unknown} args + * @returns {unknown} + */ + /** * Increments the call count of a proxy and updates related properties. * @@ -38,7 +50,7 @@ export function createCallProperties(proxy) { * @param {boolean} matchAny Whether to return true if any call matches * @param {string} [actual] The actual method name on the call object * @param {boolean} [returnsValues] Whether to return an array of return values - * @param {Function} [notCalled] Function to call if the proxy has not been called + * @param {DelegateCallback} [notCalled] Function to call if the proxy has not been called * @param {number} [totalCallCount] The expected total call count */ export function delegateToCalls( diff --git a/src/sinon/proxy-call.js b/src/sinon/proxy-call.js index 57d2eec0e..21a7f73b3 100644 --- a/src/sinon/proxy-call.js +++ b/src/sinon/proxy-call.js @@ -6,6 +6,12 @@ const { prototypes, functionName, valueToString } = commons; const { createMatcher: match, deepEqual } = samsam; const { concat, filter, join, map, reduce, slice } = prototypes.array; +/** + * @callback SinonFunction + * @param {...unknown} args + * @returns {unknown} + */ + /** * @param proxy * @param text @@ -248,11 +254,11 @@ callProto.invokeCallback = callProto.yield; /** * Creates a proxy call object. * - * @param {Function} proxy The proxy function - * @param {*} thisValue The `this` context for the call + * @param {(...args: unknown[]) => unknown} proxy The proxy function + * @param {unknown} thisValue The `this` context for the call * @param {Array} args The arguments for the call - * @param {*} returnValue The return value of the call - * @param {*} exception The exception thrown by the call + * @param {unknown} returnValue The return value of the call + * @param {unknown} exception The exception thrown by the call * @param {number} id The call id * @param {Error} errorWithCallStack Error object used for stack trace * @returns {object} proxyCall diff --git a/src/sinon/proxy-invoke.js b/src/sinon/proxy-invoke.js index 49829275c..9abf2a08a 100644 --- a/src/sinon/proxy-invoke.js +++ b/src/sinon/proxy-invoke.js @@ -9,13 +9,19 @@ const { bind } = Function.prototype; let callId = 0; +/** + * @callback SinonFunction + * @param {...unknown} args + * @returns {unknown} + */ + /** * Invokes a proxy function. * - * @param {Function} func The original function - * @param {*} thisValue The `this` context for the call + * @param {SinonFunction} func The original function + * @param {unknown} thisValue The `this` context for the call * @param {Array} args The arguments for the call - * @returns {*} The return value of the function call + * @returns {unknown} The return value of the function call */ export default function invoke(func, thisValue, args) { const matchings = this.matchingFakes(args); diff --git a/src/sinon/proxy.js b/src/sinon/proxy.js index 2186531fd..c61876ec1 100644 --- a/src/sinon/proxy.js +++ b/src/sinon/proxy.js @@ -1,4 +1,3 @@ -/* eslint-disable strict -- proxy wrappers need explicit strict mode for browser bundle semantics */ import commons from "@sinonjs/commons"; import extend from "./util/core/extend.js"; import functionToString from "./util/core/function-to-string.js"; @@ -11,6 +10,12 @@ import formatters from "./spy-formatters.js"; const { prototypes } = commons; const { push, forEach, slice } = prototypes.array; +/** + * @callback SinonFunction + * @param {...unknown} args + * @returns {unknown} + */ + const emptyFakes = []; // Public API @@ -245,7 +250,7 @@ function wrapFunction(func, originalFunc) { // Do not change this to use an eval. Projects that depend on sinon block the use of eval. // ref: https://github.com/sinonjs/sinon/issues/710 switch (arity) { - /*eslint-disable no-unused-vars, max-len*/ + /*eslint-disable no-unused-vars*/ case 0: p = function proxy() { "use strict"; @@ -369,9 +374,9 @@ function wrapFunction(func, originalFunc) { /** * Creates a proxy function. * - * @param {Function} func The original function - * @param {Function} originalFunc The original function (for arity and name) - * @returns {Function} The proxy function + * @param {SinonFunction} func The original function + * @param {SinonFunction} originalFunc The original function (for arity and name) + * @returns {SinonFunction} The proxy function */ export default function createProxy(func, originalFunc) { const proxy = wrapFunction(func, originalFunc); diff --git a/src/sinon/sandbox.js b/src/sinon/sandbox.js index ccbcea00e..2ebc5e165 100644 --- a/src/sinon/sandbox.js +++ b/src/sinon/sandbox.js @@ -18,6 +18,11 @@ const { createMatcher: match } = samsam; const DEFAULT_LEAK_THRESHOLD = 10000; const filter = arrayProto.filter; + +/** + * @callback RestorerFunction + * @returns {void} + */ const forEach = arrayProto.forEach; const push = arrayProto.push; const reverse = arrayProto.reverse; @@ -318,7 +323,7 @@ export default function Sandbox(opts = {}) { * @param {object} object the object containing the property * @param {string} property the name of the property * @param {boolean} [forceAssignment] if true, uses assignment instead of DefineProperty - * @returns {Function} restorer function + * @returns {RestorerFunction} restorer function */ function getFakeRestorer(object, property, forceAssignment = false) { const descriptor = getPropertyDescriptor(object, property); @@ -511,7 +516,6 @@ export default function Sandbox(opts = {}) { // store a function for property for restoring the replaced property push(fakeRestorers, getFakeRestorer(object, property)); - // eslint-disable-next-line accessor-pairs Object.defineProperty(object, property, { get: replacement, configurable: true, diff --git a/src/sinon/spy-formatters.js b/src/sinon/spy-formatters.js index 53e65fe68..153b1c237 100644 --- a/src/sinon/spy-formatters.js +++ b/src/sinon/spy-formatters.js @@ -69,7 +69,6 @@ export default { }, n: function (spyInstance) { - // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods return spyInstance.toString(); }, @@ -128,7 +127,6 @@ export default { const calls = []; for (let i = 0, l = spyInstance.callCount; i < l; ++i) { - // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods let stringifiedCall = ` ${spyInstance.getCall(i).toString()}`; if (/\n/.test(calls[i - 1])) { stringifiedCall = `\n${stringifiedCall}`; diff --git a/src/sinon/spy.js b/src/sinon/spy.js index 58b6dcd55..9c57ff503 100644 --- a/src/sinon/spy.js +++ b/src/sinon/spy.js @@ -13,6 +13,12 @@ const { deepEqual } = samsam; const { forEach, pop, push, slice } = prototypes.array; const filter = Array.prototype.filter; +/** + * @callback SinonFunction + * @param {...unknown} args + * @returns {unknown} + */ + let uuid = 0; function matches(fake, args, strict) { @@ -71,7 +77,6 @@ const spyApi = { }, }; -/* eslint-disable @sinonjs/no-prototype-methods/no-prototype-methods */ const delegateToCalls = proxyCallUtil.delegateToCalls; delegateToCalls(spyApi, "callArg", false, "callArgWith", true, function () { throw new Error( @@ -152,10 +157,10 @@ function createSpy(func) { /** * Creates a spy. * - * @param {object|Function} [object] The object or function to spy on + * @param {object|SinonFunction} [object] The object or function to spy on * @param {string} [property] The property name to spy on * @param {Array} [types] Types of accessor to spy on (get, set) - * @returns {Function|object} The spy or an object with spied accessors + * @returns {SinonFunction|object} The spy or an object with spied accessors */ export default function spy(object, property, types) { if (isEsModule(object)) { diff --git a/src/sinon/stub.js b/src/sinon/stub.js index 570f69f0b..4e84ed237 100644 --- a/src/sinon/stub.js +++ b/src/sinon/stub.js @@ -160,7 +160,6 @@ function isDataDescriptor(descriptor) { ); } -/*eslint-disable no-use-before-define*/ function getParentBehaviour(stubInstance) { return stubInstance.parent && getCurrentBehavior(stubInstance.parent); } @@ -179,7 +178,6 @@ function getCurrentBehavior(stubInstance) { ? currentBehavior : getDefaultBehavior(stubInstance); } -/*eslint-enable no-use-before-define*/ const proto = { resetBehavior: function () { diff --git a/src/sinon/throw-on-falsy-object.js b/src/sinon/throw-on-falsy-object.js index 3d8096677..0295853f9 100644 --- a/src/sinon/throw-on-falsy-object.js +++ b/src/sinon/throw-on-falsy-object.js @@ -5,7 +5,7 @@ const { valueToString } = commons; /** * Throws an error if the object is null or undefined when trying to stub a property. * - * @param {*} object The object to check + * @param {unknown} object The object to check * @param {string} property The property name */ export default function throwOnFalsyObject(object, property) { diff --git a/src/sinon/util/core/extend.js b/src/sinon/util/core/extend.js index 502bd76bd..12fe2be63 100644 --- a/src/sinon/util/core/extend.js +++ b/src/sinon/util/core/extend.js @@ -56,7 +56,7 @@ const hasDontEnumBug = (function () { * @param target * @param sources * @param doCopy - * @returns {*} target + * @returns {unknown} target */ function extendCommon(target, sources, doCopy) { let source, i, prop; diff --git a/src/sinon/util/core/get-next-tick.js b/src/sinon/util/core/get-next-tick.js index 384813fb0..131ef715f 100644 --- a/src/sinon/util/core/get-next-tick.js +++ b/src/sinon/util/core/get-next-tick.js @@ -3,12 +3,18 @@ function nextTick(callback) { setTimeout(callback, 0); } +/** + * @callback NextTickFunction + * @param {...unknown} args + * @returns {unknown} + */ + /** * Returns a next-tick function. * * @param {object} [process] The process object - * @param {Function} [setImmediate] The setImmediate function - * @returns {Function} The next-tick function + * @param {NextTickFunction} [setImmediate] The setImmediate function + * @returns {NextTickFunction} The next-tick function */ export default function getNextTick(process, setImmediate) { if (typeof process === "object" && typeof process.nextTick === "function") { diff --git a/src/sinon/util/core/get-property-descriptor.js b/src/sinon/util/core/get-property-descriptor.js index b1af396ec..ad8725383 100644 --- a/src/sinon/util/core/get-property-descriptor.js +++ b/src/sinon/util/core/get-property-descriptor.js @@ -4,9 +4,9 @@ * @property {boolean} configurable defaults to false * @property {boolean} enumerable defaults to false * @property {boolean} writable defaults to false - * @property {*} value defaults to undefined - * @property {Function} get defaults to undefined - * @property {Function} set defaults to undefined + * @property {unknown} value defaults to undefined + * @property {() => unknown} get defaults to undefined + * @property {(value: unknown) => void} set defaults to undefined */ /** @@ -18,7 +18,7 @@ /** * Returns a slightly modified property descriptor that one can tell is from the object or the prototype * - * @param {*} object + * @param {unknown} object * @param {string} property * @returns {SinonPropertyDescriptor} */ diff --git a/src/sinon/util/core/is-non-existent-property.js b/src/sinon/util/core/is-non-existent-property.js index b5384a5ce..96383160c 100644 --- a/src/sinon/util/core/is-non-existent-property.js +++ b/src/sinon/util/core/is-non-existent-property.js @@ -1,5 +1,5 @@ /** - * @param {*} object + * @param {unknown} object * @param {string} property * @returns {boolean} whether a prop exists in the prototype chain */ diff --git a/src/sinon/util/core/sinon-type.js b/src/sinon/util/core/sinon-type.js index b8087b593..da385563e 100644 --- a/src/sinon/util/core/sinon-type.js +++ b/src/sinon/util/core/sinon-type.js @@ -1,10 +1,16 @@ const sinonTypeSymbolProperty = Symbol("SinonType"); +/** + * @callback SinonFunction + * @param {...unknown} args + * @returns {unknown} + */ + export default { /** * Set the type of a Sinon object to make it possible to identify it later at runtime * - * @param {object|Function} object object/function to set the type on + * @param {object|((...args: unknown[]) => unknown)} object object/function to set the type on * @param {string} type the named type of the object/function */ set(object, type) { diff --git a/src/sinon/util/core/walk-object.js b/src/sinon/util/core/walk-object.js index 9bf0ae2cc..31237ea60 100644 --- a/src/sinon/util/core/walk-object.js +++ b/src/sinon/util/core/walk-object.js @@ -4,15 +4,29 @@ const { functionName } = commons; import getPropertyDescriptor from "./get-property-descriptor.js"; import walk from "./walk.js"; +/** + * @callback ObjectMutator + * @param {object} object + * @param {string} property + * @returns {void} + */ + +/** + * @callback ObjectFilter + * @param {object} object + * @param {string} property + * @returns {boolean} + */ + /** * A utility that allows traversing an object, applying mutating functions on the properties * - * @param {Function} mutator called on each property + * @param {ObjectMutator} mutator called on each property * @param {object} object the object we are walking over - * @param {Function} filter a predicate (boolean function) that will decide whether or not to apply the mutator to the current property + * @param {ObjectFilter} filter a predicate (boolean function) that will decide whether or not to apply the mutator to the current property * @returns {void} nothing */ -export default function walkObject(mutator, object, filter) { +const walkObject = function (mutator, object, filter) { let called = false; const name = functionName(mutator); @@ -49,4 +63,6 @@ export default function walkObject(mutator, object, filter) { } return object; -} +}; + +export default walkObject; diff --git a/src/sinon/util/core/walk.js b/src/sinon/util/core/walk.js index a0e84c891..d1b964382 100644 --- a/src/sinon/util/core/walk.js +++ b/src/sinon/util/core/walk.js @@ -4,6 +4,14 @@ const { prototypes } = commons; const forEach = prototypes.array.forEach; +/** + * @callback WalkIterator + * @param {unknown} value + * @param {string} key + * @param {object} object + * @returns {void} + */ + function walkInternal(obj, iterator, context, originalObj, seen) { let prop; const proto = Object.getPrototypeOf(obj); @@ -44,9 +52,12 @@ function walkInternal(obj, iterator, context, originalObj, seen) { * default to using a simple for..in loop. * * @param {object} obj - The object to walk the prototype chain for. - * @param {Function} iterator - The function to be called on each pass of the walk. + * @param {WalkIterator} iterator - The function to be called on each pass of the walk. * @param {object} [context] - (Optional) When given, the iterator will be called with this object as the receiver. + * @returns {void} nothing */ -export default function walk(obj, iterator, context) { +const walk = function (obj, iterator, context) { return walkInternal(obj, iterator, context, obj, {}); -} +}; + +export default walk; diff --git a/src/sinon/util/core/wrap-method.js b/src/sinon/util/core/wrap-method.js index 53f9cdb17..5541cb49c 100644 --- a/src/sinon/util/core/wrap-method.js +++ b/src/sinon/util/core/wrap-method.js @@ -8,6 +8,12 @@ import sinonType from "./sinon-type.js"; const { hasOwnProperty } = prototypes.object; const { push } = prototypes.array; +/** + * @callback SinonFunction + * @param {...unknown} args + * @returns {unknown} + */ + // eslint-disable-next-line no-empty-function const noop = () => {}; @@ -49,8 +55,8 @@ const hasES5Support = "keys" in Object; * * @param {object} object The object containing the method * @param {string | symbol} property The property name of the method to wrap - * @param {Function|object} method The wrapper function or a property descriptor - * @returns {Function} The wrapped method + * @param {SinonFunction|object} method The wrapper function or a property descriptor + * @returns {SinonFunction} The wrapped method */ export default function wrapMethod(object, property, method) { if (!object) { @@ -108,7 +114,7 @@ export default function wrapMethod(object, property, method) { // Firefox has a problem when using hasOwn.call on objects from other frames. const owned = object.hasOwnProperty - ? object.hasOwnProperty(property) // eslint-disable-line @sinonjs/no-prototype-methods/no-prototype-methods + ? object.hasOwnProperty(property) : hasOwnProperty(object, property); if (hasES5Support) { diff --git a/test/.eslintrc.yml b/test/.eslintrc.yml deleted file mode 100644 index cf4d47a14..000000000 --- a/test/.eslintrc.yml +++ /dev/null @@ -1,10 +0,0 @@ -parserOptions: - sourceType: module - -plugins: - - "@sinonjs/no-prototype-methods" - -rules: - "@sinonjs/no-prototype-methods/no-prototype-methods": off - - max-nested-callbacks: off diff --git a/test/distribution/browser-global-smoke.mjs b/test/distribution/browser-global-smoke.mjs index 6bb7fff9f..5345e8559 100644 --- a/test/distribution/browser-global-smoke.mjs +++ b/test/distribution/browser-global-smoke.mjs @@ -1,4 +1,4 @@ -/* eslint-disable jsdoc/require-jsdoc */ + import fs from "node:fs"; import path from "node:path"; import vm from "node:vm"; diff --git a/test/es2015/a-function-module.mjs b/test/es2015/a-function-module.mjs index b6128ea17..a58e9fc63 100644 --- a/test/es2015/a-function-module.mjs +++ b/test/es2015/a-function-module.mjs @@ -1,4 +1,4 @@ -/* eslint-disable jsdoc/require-jsdoc */ + export default function () { return 42; } diff --git a/test/es2015/a-module.mjs b/test/es2015/a-module.mjs index 85ae76162..3154aa03d 100644 --- a/test/es2015/a-module.mjs +++ b/test/es2015/a-module.mjs @@ -1,4 +1,4 @@ -/* eslint-disable jsdoc/require-jsdoc */ + export function anExport() { return 42; } diff --git a/test/es2015/check-esm-bundle-is-runnable.mjs b/test/es2015/check-esm-bundle-is-runnable.mjs index edf8ad30f..d591a7f17 100644 --- a/test/es2015/check-esm-bundle-is-runnable.mjs +++ b/test/es2015/check-esm-bundle-is-runnable.mjs @@ -1,4 +1,4 @@ -/* eslint-disable jsdoc/require-jsdoc */ + import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; diff --git a/test/issues/issues-test.js b/test/issues/issues-test.js index ce51a229d..4ba3eb900 100644 --- a/test/issues/issues-test.js +++ b/test/issues/issues-test.js @@ -58,7 +58,7 @@ describe("issues", function () { }); describe("#624", function () { - // eslint-disable-next-line mocha/no-skipped-tests + // eslint-disable-next-line mocha/no-pending-tests it.skip("useFakeTimers should be idempotent", function () { // Issue #624 shows that useFakeTimers is not idempotent when it comes to // using Date.now @@ -164,7 +164,6 @@ describe("issues", function () { let oldWatch; - // eslint-disable-next-line no-restricted-syntax try { oldWatch = Object.prototype.watch; @@ -258,7 +257,6 @@ describe("issues", function () { let sandbox; function throwsOnUnconfigurableProperty() { - /* eslint-disable no-restricted-syntax */ try { const preDescriptor = Object.getOwnPropertyDescriptor( window, @@ -274,7 +272,6 @@ describe("issues", function () { } catch (err) { return true; } - /* eslint-enable no-restricted-syntax */ } beforeEach(function () { diff --git a/test/src/assert-test.js b/test/src/assert-test.js index 6d7ad1609..3b4f4b916 100644 --- a/test/src/assert-test.js +++ b/test/src/assert-test.js @@ -1531,7 +1531,6 @@ describe("assert", function () { /*eslint consistent-return: "off"*/ this.message = function (method) { - // eslint-disable-next-line no-restricted-syntax try { sinonAssert[method].apply( sinonAssert, @@ -2314,7 +2313,6 @@ describe("assert", function () { } function createExceptionMessage(method, arg) { - // eslint-disable-next-line no-restricted-syntax try { sinonAssert[method](arg); } catch (e) { diff --git a/test/src/create-stub-instance-test.js b/test/src/create-stub-instance-test.js index 2b54eec2e..fbcb605e2 100644 --- a/test/src/create-stub-instance-test.js +++ b/test/src/create-stub-instance-test.js @@ -84,7 +84,7 @@ describe("createStubInstance", function () { for (let i = 0; i < types.length; i++) { // yes, it's silly to create functions in a loop, it's also a test - // eslint-disable-next-line no-loop-func + assert.exception(function () { createStubInstance(types[i]); }); diff --git a/test/src/fake-test.js b/test/src/fake-test.js index bd0eb18e5..32d9c90a6 100644 --- a/test/src/fake-test.js +++ b/test/src/fake-test.js @@ -224,13 +224,11 @@ describe("fake", function () { myFake(); }); - /* eslint-disable no-restricted-syntax */ try { myFake(); } catch (error) { assert.equals(error.message, expectedMessage); } - /* eslint-disable no-restricted-syntax */ }); // eslint-disable-next-line mocha/no-setup-in-describe @@ -240,13 +238,11 @@ describe("fake", function () { const expected = new TypeError("hello sailor"); const myFake = fake.throws(expected); - /* eslint-disable no-restricted-syntax */ try { myFake(); } catch (actual) { assert.isTrue(actual instanceof TypeError); } - /* eslint-disable no-restricted-syntax */ }); describe("when passed a String", function () { @@ -254,13 +250,11 @@ describe("fake", function () { const expected = "lorem ipsum"; const myFake = fake.throws(expected); - /* eslint-disable no-restricted-syntax */ try { myFake(); } catch (actual) { assert.isTrue(actual instanceof Error); } - /* eslint-disable no-restricted-syntax */ }); }); }); diff --git a/test/src/fake-timers-test.js b/test/src/fake-timers-test.js index e471c7986..959f21bb6 100644 --- a/test/src/fake-timers-test.js +++ b/test/src/fake-timers-test.js @@ -698,10 +698,6 @@ describe("fakeTimers.clock", function () { it("creates real Date objects when Date constructor is gone", function () { const OriginalDateClass = Date; - // eslint-disable-next-line no-global-assign, no-native-reassign - Date = function () { - return; - }; this.global.Date = function () { return; }; diff --git a/test/src/mock-test.js b/test/src/mock-test.js index c2692a6a9..542eb58d8 100644 --- a/test/src/mock-test.js +++ b/test/src/mock-test.js @@ -563,7 +563,6 @@ describe("sinonMock", function () { const expectedException = function (name) { return { test: function (actual) { - // eslint-disable-next-line mocha/no-setup-in-describe return actual.name === name; }, toString: function () { diff --git a/test/src/proxy-call-test.js b/test/src/proxy-call-test.js index e1d02b66a..02e1f949e 100644 --- a/test/src/proxy-call-test.js +++ b/test/src/proxy-call-test.js @@ -1176,7 +1176,7 @@ describe("sinonSpy.call", function () { }); // https://github.com/sinonjs/sinon/issues/1066 - /* eslint-disable consistent-return */ + it("does not throw when the call stack is empty", async function () { if (typeof Promise === "undefined") { this.skip(); @@ -1192,7 +1192,6 @@ describe("sinonSpy.call", function () { "stub(1) => 1", ); }); - /* eslint-enable consistent-return */ it("includes first stack entry from end-user code", function () { /* We find the first stack frame that points to end-user code and diff --git a/test/src/sandbox-test.js b/test/src/sandbox-test.js index cc763bc27..4a90c76d0 100644 --- a/test/src/sandbox-test.js +++ b/test/src/sandbox-test.js @@ -380,7 +380,7 @@ describe("Sandbox", function () { for (let i = 0; i < types.length; i++) { // yes, it's silly to create functions in a loop, it's also a test - /* eslint-disable-next-line no-loop-func */ + assert.exception(function () { this.sandbox.createStubInstance(types[i]); }); @@ -1183,7 +1183,6 @@ describe("Sandbox", function () { const sandbox = createSandbox(); let quaziPrivateStateOfObject = "original"; const object = { - // eslint-disable-next-line accessor-pairs get foo() { return quaziPrivateStateOfObject; }, diff --git a/test/src/shared-spy-stub-everything-tests.js b/test/src/shared-spy-stub-everything-tests.js index 690d9ee5b..d61183d8c 100644 --- a/test/src/shared-spy-stub-everything-tests.js +++ b/test/src/shared-spy-stub-everything-tests.js @@ -1,6 +1,3 @@ -/* eslint-env mocha */ -/* eslint-disable jsdoc/require-jsdoc */ - import referee from "@sinonjs/referee"; const assert = referee.assert; const refute = referee.refute; diff --git a/test/src/spy-test.js b/test/src/spy-test.js index 11dba6996..fef171c76 100644 --- a/test/src/spy-test.js +++ b/test/src/spy-test.js @@ -220,7 +220,6 @@ function verifyFunctionName(func, expectedName) { } } -//eslint-disable-next-line mocha/max-top-level-suites describe("spy", function () { it("does not throw if called without function", function () { refute.exception(function () { @@ -1002,7 +1001,6 @@ describe("spy", function () { describe("spied native function", function () { before(function () { - // eslint-disable-next-line no-restricted-syntax try { // eslint-disable-next-line no-console console.log.apply({}, []); @@ -2138,7 +2136,6 @@ describe("spy", function () { }); it("is equal to getCall(0) after first call when control flow has continued after invocation", function () { - // eslint-disable-next-line const spy = createSpy(runAsserts); function runAsserts() { diff --git a/test/src/util/core/color-test.js b/test/src/util/core/color-test.js index b84b2cd29..699775f41 100644 --- a/test/src/util/core/color-test.js +++ b/test/src/util/core/color-test.js @@ -54,7 +54,6 @@ describe("color", function () { // eslint-disable-next-line mocha/no-setup-in-describe colors.forEach(function (method) { - // eslint-disable-next-line mocha/no-setup-in-describe describe(method.name, function () { it("should return a colored string", function () { const string = "lorem ipsum"; @@ -77,7 +76,6 @@ describe("color", function () { // eslint-disable-next-line mocha/no-setup-in-describe colors.forEach(function (method) { - // eslint-disable-next-line mocha/no-setup-in-describe describe(method.name, function () { it("should return a regular string", function () { const string = "lorem ipsum"; diff --git a/test/src/util/core/walk-test.js b/test/src/util/core/walk-test.js index bfff0a55d..c02e22a65 100644 --- a/test/src/util/core/walk-test.js +++ b/test/src/util/core/walk-test.js @@ -122,7 +122,6 @@ describe("util/core/walk", function () { } /* eslint-enable guard-for-in, no-unused-vars */ - // eslint-disable-next-line no-restricted-syntax try { walk(target, iterator, rcvr); assert.equals(iterator.callCount, numCalls); diff --git a/test/src/util/core/wrap-method-test.js b/test/src/util/core/wrap-method-test.js index 143abdb0e..947181c9d 100644 --- a/test/src/util/core/wrap-method-test.js +++ b/test/src/util/core/wrap-method-test.js @@ -146,7 +146,6 @@ describe("util/core/wrapMethod", function () { it("replaces setter", function () { wrapMethod(this.object, "property", { - // eslint-disable-line accessor-pairs set: function () { return; }, @@ -268,17 +267,14 @@ describe("util/core/wrapMethod", function () { let i = 0; - // eslint-disable-next-line no-global-assign, no-native-reassign - Error = TypeError = function () { + globalThis.Error = globalThis.TypeError = function () { this.stack = `:STACK${++i}:`; }; }); afterEach(function () { - // eslint-disable-next-line no-global-assign, no-native-reassign - Error = this.oldError; - // eslint-disable-next-line no-global-assign, no-native-reassign - TypeError = this.oldTypeError; + globalThis.Error = this.oldError; + globalThis.TypeError = this.oldTypeError; }); it("throws with stack trace showing original wrapMethod call", function () { diff --git a/test/webworker/webworker-script.js b/test/webworker/webworker-script.js index 7f81816fa..5ec187a1b 100644 --- a/test/webworker/webworker-script.js +++ b/test/webworker/webworker-script.js @@ -1,15 +1,13 @@ -/*eslint-env worker*/ -/*global sinon*/ - // Abort if we are not running in a WebWorker if (typeof importScripts !== "undefined") { importScripts("/pkg/sinon.js"); + const sinon = globalThis.sinon; const mySpy = sinon.spy(function (msg) { return `worker received:${msg}`; }); - onmessage = function (e) { + self.onmessage = function (e) { postMessage(mySpy(e.data)); }; } diff --git a/test/webworker/webworker-support-assessment.js b/test/webworker/webworker-support-assessment.js index b5c5934fc..cfc515302 100644 --- a/test/webworker/webworker-support-assessment.js +++ b/test/webworker/webworker-support-assessment.js @@ -1,6 +1,3 @@ -/* eslint-env mocha */ -/* eslint-disable jsdoc/require-jsdoc */ - const referee = require("@sinonjs/referee"); const assert = referee.assert; @@ -11,7 +8,6 @@ if (typeof Worker !== "undefined") { const worker = new Worker("/test/webworker/webworker-script.js"); worker.onmessage = function (msg) { - // eslint-disable-next-line no-restricted-syntax try { assert.same(msg.data, `worker received:${sentMessage}`); done();