From a5d7afaa77c8d7c2d1f10c5a1b1d3be58ad39496 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Feb 2026 09:27:33 +0000 Subject: [PATCH 1/2] build(deps-dev): bump gts from 4.0.1 to 7.0.0 Bumps [gts](https://github.com/google/gts) from 4.0.1 to 7.0.0. - [Release notes](https://github.com/google/gts/releases) - [Changelog](https://github.com/google/gts/blob/main/CHANGELOG.md) - [Commits](https://github.com/google/gts/compare/v4.0.1...v7.0.0) --- updated-dependencies: - dependency-name: gts dependency-version: 7.0.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 1453 +++++++++++++++++++++++++++++++++++++++------ package.json | 2 +- 2 files changed, 1262 insertions(+), 193 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8ae2123f..fec7a206 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,7 @@ "eslint-plugin-import": "^2.26.0", "eslint-plugin-n": "^16.0.1", "eslint-plugin-promise": "^6.1.1", - "gts": "^4.0.1", + "gts": "^7.0.0", "js-green-licenses": "^4.0.0", "mocha": "^11.7.5", "nan": "^2.23.1", @@ -347,21 +347,63 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -385,7 +427,8 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "Python-2.0" + "license": "Python-2.0", + "peer": true }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.1", @@ -393,6 +436,7 @@ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "argparse": "^2.0.1" }, @@ -406,10 +450,59 @@ "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "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": ">=18.18.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -417,6 +510,7 @@ "deprecated": "Use @eslint/config-array instead", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", @@ -446,7 +540,22 @@ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", "dev": true, - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true + }, + "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": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -743,6 +852,19 @@ "node": ">=14" } }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -840,6 +962,13 @@ "@types/responselike": "^1.0.0" } }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", @@ -984,6 +1113,7 @@ "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", @@ -1006,6 +1136,42 @@ } } }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz", + "integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.56.1", + "@typescript-eslint/types": "^8.56.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service/node_modules/@typescript-eslint/types": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", + "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", @@ -1024,6 +1190,23 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz", + "integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, "node_modules/@typescript-eslint/type-utils": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", @@ -1144,7 +1327,8 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/acorn": { "version": "8.15.0", @@ -1197,9 +1381,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -2041,9 +2225,9 @@ } }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -2242,6 +2426,7 @@ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "esutils": "^2.0.2" }, @@ -2295,6 +2480,20 @@ "once": "^1.4.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2491,6 +2690,7 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -2558,14 +2758,17 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", - "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, "peerDependencies": { "eslint": ">=7.0.0" } @@ -2650,26 +2853,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, "node_modules/eslint-plugin-es-x": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", @@ -2788,54 +2971,32 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-prettier": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.5.tgz", - "integrity": "sha512-9Ni+xgemM2IWLq6aXEpP2+V/V30GeA/46Ar629vcMqVPodFFWC9skHu/D1phvuqtS8bJCFnNf01/qcmqYEwNfg==", + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", + "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.12" }, "engines": { - "node": ">=12.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, "eslint-config-prettier": { "optional": true } @@ -2871,32 +3032,6 @@ "node": ">=8.0.0" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -2915,7 +3050,8 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "Python-2.0" + "license": "Python-2.0", + "peer": true }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", @@ -2923,6 +3059,7 @@ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -2940,6 +3077,7 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=4.0" } @@ -2950,6 +3088,7 @@ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "argparse": "^2.0.1" }, @@ -2963,6 +3102,7 @@ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -3231,6 +3371,7 @@ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -3302,6 +3443,7 @@ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -3635,6 +3777,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true, + "license": "MIT" + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -3689,107 +3838,632 @@ "license": "MIT" }, "node_modules/gts": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/gts/-/gts-4.0.1.tgz", - "integrity": "sha512-BeFQLqra3HH5/MHuog+uOpn/h6qVMLeBB0WZ4bgal7CbqbvfaCxCYA7vlfaMAANhgw1Ko2HFZA4iuOJqOBW5lg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/gts/-/gts-7.0.0.tgz", + "integrity": "sha512-5Sb73zpklh7GyYRd14QUwa6+4n99b7JqECc+bS2fRYlSK40SXu7Po3//q4jBAP/CQwR+VbUPiOLxJf5zpp4Ajw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", - "chalk": "^4.1.0", - "eslint": "^8.0.0", - "eslint-config-prettier": "^8.0.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^4.0.0", + "@eslint/js": "^9.37.0", + "@typescript-eslint/eslint-plugin": "^8.46.1", + "@typescript-eslint/parser": "^8.46.1", + "chalk": "^4.1.2", + "eslint": "^9.37.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-n": "^17.23.1", + "eslint-plugin-prettier": "^5.5.4", "execa": "^5.0.0", "inquirer": "^7.3.3", "json5": "^2.1.3", "meow": "^9.0.0", "ncp": "^2.0.0", - "prettier": "~2.7.0", - "rimraf": "^3.0.2", - "write-file-atomic": "^4.0.0" + "prettier": "^3.6.2", + "typescript-eslint": "^8.46.1", + "write-file-atomic": "^6.0.0" }, "bin": { "gts": "build/src/cli.js" }, "engines": { - "node": ">=12" + "node": ">=18" }, "peerDependencies": { - "typescript": ">=3" + "typescript": ">=5" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "node_modules/gts/node_modules/@eslint/eslintrc": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.4.tgz", + "integrity": "sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ==", "dev": true, "license": "MIT", + "dependencies": { + "ajv": "^6.14.0", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.3", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "node_modules/gts/node_modules/@eslint/js": { + "version": "9.39.3", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.3.tgz", + "integrity": "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://eslint.org/donate" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/gts/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz", + "integrity": "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==", "dev": true, "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/type-utils": "8.56.1", + "@typescript-eslint/utils": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.56.1", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/gts/node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 4" } }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "node_modules/gts/node_modules/@typescript-eslint/parser": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz", + "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.0" + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "debug": "^4.4.3" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/gts/node_modules/@typescript-eslint/scope-manager": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz", + "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==", "dev": true, "license": "MIT", - "engines": { + "dependencies": { + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/gts/node_modules/@typescript-eslint/type-utils": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz", + "integrity": "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/utils": "8.56.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/gts/node_modules/@typescript-eslint/types": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", + "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/gts/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz", + "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.56.1", + "@typescript-eslint/tsconfig-utils": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/gts/node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/gts/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz", + "integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gts/node_modules/@typescript-eslint/utils": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz", + "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/gts/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz", + "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.56.1", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/gts/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/gts/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/gts/node_modules/eslint": { + "version": "9.39.3", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.3.tgz", + "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.3", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/gts/node_modules/eslint-plugin-n": { + "version": "17.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.24.0.tgz", + "integrity": "sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.5.0", + "enhanced-resolve": "^5.17.1", + "eslint-plugin-es-x": "^7.8.0", + "get-tsconfig": "^4.8.1", + "globals": "^15.11.0", + "globrex": "^0.1.2", + "ignore": "^5.3.2", + "semver": "^7.6.3", + "ts-declaration-location": "^1.0.6" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": ">=8.23.0" + } + }, + "node_modules/gts/node_modules/eslint-plugin-n/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" + } + }, + "node_modules/gts/node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/gts/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/gts/node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/gts/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/gts/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/gts/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/gts/node_modules/file-entry-cache": { + "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": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/gts/node_modules/flat-cache": { + "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.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/gts/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gts/node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gts/node_modules/minimatch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.4.tgz", + "integrity": "sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { "node": ">= 0.4" }, "funding": { @@ -6168,25 +6842,25 @@ } }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "dev": true, "license": "MIT", "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", "dev": true, "license": "MIT", "dependencies": { @@ -6509,19 +7183,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/registry-auth-token": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", @@ -7350,30 +8011,60 @@ "dev": true, "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==", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@pkgr/core": "^0.2.9" }, "engines": { - "node": ">=8" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/teeny-request": { @@ -7413,7 +8104,8 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/through": { "version": "2.3.8", @@ -7422,6 +8114,54 @@ "dev": true, "license": "MIT" }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmp": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", @@ -7462,6 +8202,55 @@ "node": ">=8" } }, + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-declaration-location": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ts-declaration-location/-/ts-declaration-location-1.0.7.tgz", + "integrity": "sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==", + "dev": true, + "funding": [ + { + "type": "ko-fi", + "url": "https://ko-fi.com/rebeccastevens" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/ts-declaration-location" + } + ], + "license": "BSD-3-Clause", + "dependencies": { + "picomatch": "^4.0.2" + }, + "peerDependencies": { + "typescript": ">=4.0.0" + } + }, + "node_modules/ts-declaration-location/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -7659,6 +8448,273 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.56.1.tgz", + "integrity": "sha512-U4lM6pjmBX7J5wk4szltF7I1cGBHXZopnAXCMXb3+fZ3B/0Z3hq3wS/CCUB2NZBNAExK92mCU2tEohWuwVMsDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.56.1", + "@typescript-eslint/parser": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/utils": "8.56.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz", + "integrity": "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/type-utils": "8.56.1", + "@typescript-eslint/utils": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.56.1", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz", + "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz", + "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz", + "integrity": "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/utils": "8.56.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", + "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz", + "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.56.1", + "@typescript-eslint/tsconfig-utils": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz", + "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz", + "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.56.1", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/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/typescript-eslint/node_modules/brace-expansion": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/typescript-eslint/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/typescript-eslint/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/typescript-eslint/node_modules/minimatch": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz", + "integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", @@ -7966,17 +9022,30 @@ "license": "ISC" }, "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-6.0.0.tgz", + "integrity": "sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==", "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "signal-exit": "^4.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/y18n": { diff --git a/package.json b/package.json index f74a70fb..a0c5979b 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "eslint-plugin-import": "^2.26.0", "eslint-plugin-n": "^16.0.1", "eslint-plugin-promise": "^6.1.1", - "gts": "^4.0.1", + "gts": "^7.0.0", "js-green-licenses": "^4.0.0", "mocha": "^11.7.5", "nan": "^2.23.1", From 349f69133b878dcbe1937648c56f051515f646fb Mon Sep 17 00:00:00 2001 From: Attila Szegedi Date: Tue, 3 Mar 2026 13:35:16 +0100 Subject: [PATCH 2/2] fix(lint): migrate ESLint config to flat format for gts 7.x / ESLint v9 - Add eslint.config.js using gts flat config export - Delete legacy .eslintrc.json and .eslintignore - Fix .prettierrc.js formatting (prettier v3 style) - Fix @typescript-eslint/no-explicit-any errors (now error in ts-eslint v8 recommended) - Fix @typescript-eslint/no-unused-vars and @typescript-eslint/no-floating-promises - Update eslint-disable comment to use n/ prefix instead of node/ - Exclude benchmark/, scripts/, system-test/ from root config (have own configs) - Auto-fix prettier trailing comma issues across source files (prettier v3) Co-Authored-By: Claude Sonnet 4.6 --- .eslintignore | 5 -- .eslintrc.json | 3 - .prettierrc.js | 6 +- eslint.config.js | 19 +++++ ts/src/heap-profiler-bindings.ts | 12 +-- ts/src/heap-profiler.ts | 16 ++-- ts/src/profile-serializer.ts | 26 +++---- ts/src/sourcemapper/sourcemapper.ts | 28 +++---- ts/src/time-profiler.ts | 8 +- ts/test/profiles-for-tests.ts | 16 ++-- ts/test/test-get-value-from-map-profiler.ts | 4 +- ts/test/test-heap-profiler.ts | 20 ++--- ts/test/test-profile-serializer.ts | 32 ++++---- ts/test/test-time-profiler.ts | 86 ++++++++++----------- ts/test/test-worker-threads.ts | 6 +- ts/test/worker.ts | 47 +++++------ ts/test/worker2.ts | 2 +- 17 files changed, 175 insertions(+), 161 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.json create mode 100644 eslint.config.js diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index e21434e3..00000000 --- a/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -**/node_modules -**/coverage -build/ -proto/ -out/ diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 78215349..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "./node_modules/gts" -} diff --git a/.prettierrc.js b/.prettierrc.js index 3435cc0b..33e412df 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -13,6 +13,6 @@ // limitations under the License. module.exports = { - endOfLine:"auto", - ...require('gts/.prettierrc.json') - } + endOfLine: 'auto', + ...require('gts/.prettierrc.json'), +}; diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..7432de02 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,19 @@ +'use strict'; +const gts = require('./node_modules/gts'); + +module.exports = [ + { + ignores: [ + '**/node_modules', + '**/coverage', + 'build/**', + 'proto/**', + 'out/**', + 'benchmark/**', + 'scripts/**', + 'system-test/**', + 'test.ts', + ], + }, + ...gts, +]; diff --git a/ts/src/heap-profiler-bindings.ts b/ts/src/heap-profiler-bindings.ts index e6fa0b05..7d625d50 100644 --- a/ts/src/heap-profiler-bindings.ts +++ b/ts/src/heap-profiler-bindings.ts @@ -25,11 +25,11 @@ const profiler = findBinding(path.join(__dirname, '..', '..')); export function startSamplingHeapProfiler( heapIntervalBytes: number, - heapStackDepth: number + heapStackDepth: number, ) { profiler.heapProfiler.startSamplingHeapProfiler( heapIntervalBytes, - heapStackDepth + heapStackDepth, ); } @@ -38,7 +38,7 @@ export function stopSamplingHeapProfiler() { } export function mapAllocationProfile( - callback: (root: AllocationProfileNode) => T + callback: (root: AllocationProfileNode) => T, ): T { return profiler.heapProfiler.mapAllocationProfile(callback); } @@ -49,10 +49,10 @@ export function monitorOutOfMemory( heapLimitExtensionSize: number, maxHeapLimitExtensionCount: number, dumpHeapProfileOnSdterr: boolean, - exportCommand: Array | undefined, + exportCommand: Array | undefined, callback: NearHeapLimitCallback | undefined, callbackMode: number, - isMainThread: boolean + isMainThread: boolean, ) { profiler.heapProfiler.monitorOutOfMemory( heapLimitExtensionSize, @@ -61,6 +61,6 @@ export function monitorOutOfMemory( exportCommand, callback, callbackMode, - isMainThread + isMainThread, ); } diff --git a/ts/src/heap-profiler.ts b/ts/src/heap-profiler.ts index 550121e6..f34591ae 100644 --- a/ts/src/heap-profiler.ts +++ b/ts/src/heap-profiler.ts @@ -55,7 +55,7 @@ export function convertProfile( rootNode: AllocationProfileNode, ignoreSamplePath?: string, sourceMapper?: SourceMapper, - generateLabels?: GenerateAllocationLabelsFunction + generateLabels?: GenerateAllocationLabelsFunction, ): Profile { const startTimeNanos = Date.now() * 1000 * 1000; // Add node for external memory usage. @@ -81,7 +81,7 @@ export function convertProfile( heapIntervalBytes, ignoreSamplePath, sourceMapper, - generateLabels + generateLabels, ); } @@ -96,7 +96,7 @@ export function convertProfile( export function profile( ignoreSamplePath?: string, sourceMapper?: SourceMapper, - generateLabels?: GenerateAllocationLabelsFunction + generateLabels?: GenerateAllocationLabelsFunction, ): Profile { return v8Profile(root => { return convertProfile(root, ignoreSamplePath, sourceMapper, generateLabels); @@ -114,7 +114,7 @@ export function profile( export function start(intervalBytes: number, stackDepth: number) { if (enabled) { throw new Error( - `Heap profiler is already started with intervalBytes ${heapIntervalBytes} and stackDepth ${stackDepth}` + `Heap profiler is already started with intervalBytes ${heapIntervalBytes} and stackDepth ${stackDepth}`, ); } heapIntervalBytes = intervalBytes; @@ -170,13 +170,13 @@ export function monitorOutOfMemory( heapLimitExtensionSize: number, maxHeapLimitExtensionCount: number, dumpHeapProfileOnSdterr: boolean, - exportCommand?: Array, + exportCommand?: Array, callback?: NearHeapLimitCallback, - callbackMode?: number + callbackMode?: number, ) { if (!enabled) { throw new Error( - 'Heap profiler must already be started to call monitorOutOfMemory' + 'Heap profiler must already be started to call monitorOutOfMemory', ); } let newCallback; @@ -192,6 +192,6 @@ export function monitorOutOfMemory( exportCommand || [], newCallback, typeof callbackMode !== 'undefined' ? callbackMode : CallbackMode.Async, - isMainThread + isMainThread, ); } diff --git a/ts/src/profile-serializer.ts b/ts/src/profile-serializer.ts index f966bb69..7566beef 100644 --- a/ts/src/profile-serializer.ts +++ b/ts/src/profile-serializer.ts @@ -54,7 +54,7 @@ type Stack = number[]; */ type AppendEntryToSamples = ( entry: Entry, - samples: Sample[] + samples: Sample[], ) => void; /** @@ -66,7 +66,7 @@ interface Entry { } function isGeneratedLocation( - location: SourceLocation + location: SourceLocation, ): location is GeneratedLocation { return ( location.column !== undefined && @@ -93,7 +93,7 @@ function serialize( appendToSamples: AppendEntryToSamples, stringTable: StringTable, ignoreSamplesPath?: string, - sourceMapper?: SourceMapper + sourceMapper?: SourceMapper, ) { const samples: Sample[] = []; const locations: Location[] = []; @@ -134,7 +134,7 @@ function serialize( function getLocation( node: ProfileNode, scriptName: string, - sourceMapper?: SourceMapper + sourceMapper?: SourceMapper, ): Location { let profLoc: SourceLocation = { file: scriptName || '', @@ -264,7 +264,7 @@ function computeTotalHitCount(root: TimeProfileNode): number { root.hitCount + (root.children as TimeProfileNode[]).reduce( (sum, node) => sum + computeTotalHitCount(node), - 0 + 0, ) ); } @@ -357,7 +357,7 @@ export function serializeTimeProfile( sourceMapper?: SourceMapper, recomputeSamplingInterval = false, generateLabels?: GenerateTimeLabelsFunction, - lowCardinalityLabels: string[] = [] + lowCardinalityLabels: string[] = [], ): Profile { // If requested, recompute sampling interval from profile duration and total number of hits, // since profile duration should be #hits x interval. @@ -371,9 +371,9 @@ export function serializeTimeProfile( intervalMicros = Math.min( Math.max( Math.floor((prof.endTime - prof.startTime) / totalHitCount), - intervalMicros + intervalMicros, ), - 2 * intervalMicros + 2 * intervalMicros, ); } } @@ -406,7 +406,7 @@ export function serializeTimeProfile( const appendTimeEntryToSamples: AppendEntryToSamples = ( entry: Entry, - samples: Sample[] + samples: Sample[], ) => { let unlabelledHits = entry.node.hitCount; let unlabelledCpuTime = 0; @@ -414,7 +414,7 @@ export function serializeTimeProfile( for (const context of entry.node.contexts || []) { const labels = generateLabels ? generateLabels({node: entry.node, context}) - : context.context ?? {}; + : (context.context ?? {}); const labelsArr = buildLabels(labels, stringTable); if (labelsArr.length > 0) { // Only assign wall time if there are hits, some special nodes such as `(Non-JS threads)` @@ -479,7 +479,7 @@ export function serializeTimeProfile( appendTimeEntryToSamples, stringTable, undefined, - sourceMapper + sourceMapper, ); return new Profile(profile); @@ -525,7 +525,7 @@ export function serializeHeapProfile( intervalBytes: number, ignoreSamplesPath?: string, sourceMapper?: SourceMapper, - generateLabels?: GenerateAllocationLabelsFunction + generateLabels?: GenerateAllocationLabelsFunction, ): Profile { const appendHeapEntryToSamples: AppendEntryToSamples< AllocationProfileNode @@ -563,7 +563,7 @@ export function serializeHeapProfile( appendHeapEntryToSamples, stringTable, ignoreSamplesPath, - sourceMapper + sourceMapper, ); return new Profile(profile); diff --git a/ts/src/sourcemapper/sourcemapper.ts b/ts/src/sourcemapper/sourcemapper.ts index 4ba711df..aa906eab 100644 --- a/ts/src/sourcemapper/sourcemapper.ts +++ b/ts/src/sourcemapper/sourcemapper.ts @@ -64,7 +64,7 @@ export interface SourceLocation { async function processSourceMap( infoMap: Map, mapPath: string, - debug: boolean + debug: boolean, ): Promise { // this handles the case when the path is undefined, null, or // the empty string @@ -89,7 +89,7 @@ async function processSourceMap( // type is expected to be of `RawSourceMap` but the existing // working code uses a string.) consumer = (await new sourceMap.SourceMapConsumer( - contents as {} as sourceMap.RawSourceMap + contents as {} as sourceMap.RawSourceMap, )) as {} as sourceMap.RawSourceMap; } catch (e) { throw error( @@ -97,7 +97,7 @@ async function processSourceMap( 'sourceMap file ' + mapPath + ': ' + - e + e, ); } @@ -138,7 +138,7 @@ async function processSourceMap( logger.debug(`Loaded source map for ${generatedPath} => ${mapPath}`); } return; - } catch (err) { + } catch { if (debug) { logger.debug(`Generated path ${generatedPath} does not exist`); } @@ -155,11 +155,11 @@ export class SourceMapper { static async create( searchDirs: string[], - debug = false + debug = false, ): Promise { if (debug) { logger.debug( - `Looking for source map files in dirs: [${searchDirs.join(', ')}]` + `Looking for source map files in dirs: [${searchDirs.join(', ')}]`, ); } const mapFiles: string[] = []; @@ -253,7 +253,7 @@ export class SourceMapper { if (entry === null) { if (this.debug) { logger.debug( - `Source map lookup failed: no map found for ${location.file} (normalized: ${inputPath})` + `Source map lookup failed: no map found for ${location.file} (normalized: ${inputPath})`, ); } return location; @@ -280,7 +280,7 @@ export class SourceMapper { if (pos.source === null) { if (this.debug) { logger.debug( - `Source map lookup failed for ${location.name}(${location.file}:${location.line}:${location.column})` + `Source map lookup failed for ${location.name}(${location.file}:${location.line}:${location.column})`, ); } return location; @@ -295,7 +295,7 @@ export class SourceMapper { if (this.debug) { logger.debug( - `Source map lookup succeeded for ${location.name}(${location.file}:${location.line}:${location.column}) => ${loc.name}(${loc.file}:${loc.line}:${loc.column})` + `Source map lookup succeeded for ${location.name}(${location.file}:${location.line}:${location.column}) => ${loc.name}(${loc.file}:${loc.line}:${loc.column})`, ); } return loc; @@ -304,18 +304,18 @@ export class SourceMapper { async function createFromMapFiles( mapFiles: string[], - debug: boolean + debug: boolean, ): Promise { const limit = pLimit(CONCURRENCY); const mapper = new SourceMapper(debug); const promises: Array> = mapFiles.map(mapPath => - limit(() => processSourceMap(mapper.infoMap, mapPath, debug)) + limit(() => processSourceMap(mapper.infoMap, mapPath, debug)), ); try { await Promise.all(promises); } catch (err) { throw error( - 'An error occurred while processing the source map files' + err + 'An error occurred while processing the source map files' + err, ); } return mapper; @@ -338,7 +338,7 @@ async function* walk( // eslint-disable-next-line @typescript-eslint/no-unused-vars fileFilter = (filename: string) => true, // eslint-disable-next-line @typescript-eslint/no-unused-vars - directoryFilter = (root: string, dirname: string) => true + directoryFilter = (root: string, dirname: string) => true, ): AsyncIterable { async function* walkRecursive(dir: string): AsyncIterable { try { @@ -370,7 +370,7 @@ async function getMapFiles(baseDir: string): Promise { baseDir, filename => /\.[cm]?js\.map$/.test(filename), (root, dirname) => - root !== '/proc' && dirname !== '.git' && dirname !== 'node_modules' + root !== '/proc' && dirname !== '.git' && dirname !== 'node_modules', )) { mapFiles.push(path.relative(baseDir, entry)); } diff --git a/ts/src/time-profiler.ts b/ts/src/time-profiler.ts index 631a89dc..42d2c1a8 100644 --- a/ts/src/time-profiler.ts +++ b/ts/src/time-profiler.ts @@ -39,7 +39,7 @@ type Microseconds = number; type Milliseconds = number; let gProfiler: InstanceType | undefined; -let gStore: AsyncLocalStorage | undefined; +let gStore: AsyncLocalStorage | undefined; let gSourceMapper: SourceMapper | undefined; let gIntervalMicros: Microseconds; let gV8ProfilerStuckEventLoopDetected = 0; @@ -114,7 +114,7 @@ export function start(options: TimeProfilerOptions = {}) { export function stop( restart = false, generateLabels?: GenerateTimeLabelsFunction, - lowCardinalityLabels?: string[] + lowCardinalityLabels?: string[], ) { if (!gProfiler) { throw new Error('Wall profiler is not started'); @@ -141,7 +141,7 @@ export function stop( gSourceMapper, true, generateLabels, - lowCardinalityLabels + lowCardinalityLabels, ); if (!restart) { gProfiler.dispose(); @@ -169,7 +169,7 @@ export function setContext(context?: object) { gProfiler.context = context; } -export function runWithContext( +export function runWithContext( context: object, f: (...args: TArgs) => R, ...args: TArgs diff --git a/ts/test/profiles-for-tests.ts b/ts/test/profiles-for-tests.ts index eb2df90f..3e1ea7c1 100644 --- a/ts/test/profiles-for-tests.ts +++ b/ts/test/profiles-for-tests.ts @@ -196,7 +196,7 @@ export const timeProfile = new Profile({ // decodedTimeProfile const encodedTimeProfile = timeProfile.encode(); export const decodedTimeProfile = Object.freeze( - Profile.decode(encodedTimeProfile) + Profile.decode(encodedTimeProfile), ); const heapLeaf1 = { @@ -350,7 +350,7 @@ export const heapProfile = new Profile({ // decodedHeapProfile const encodedHeapProfile = heapProfile.encode(); export const decodedHeapProfile = Object.freeze( - Profile.decode(encodedHeapProfile) + Profile.decode(encodedHeapProfile), ); const heapLinesWithExternal = [ @@ -462,7 +462,7 @@ export const heapProfileWithExternal = new Profile({ // decodedHeapProfile const encodedHeapProfileWithExternal = heapProfile.encode(); export const decodedHeapProfileWithExternal = Object.freeze( - Profile.decode(encodedHeapProfileWithExternal) + Profile.decode(encodedHeapProfileWithExternal), ); const anonymousHeapNode = { @@ -827,7 +827,7 @@ export const heapProfileIncludePathWithLabels = new Profile({ // decodedHeapProfile const encodedHeapProfileIncludePath = heapProfileIncludePath.encode(); export const decodedHeapProfileIncludePath = Object.freeze( - Profile.decode(encodedHeapProfileIncludePath) + Profile.decode(encodedHeapProfileIncludePath), ); const heapExcludePathFunctions = [ @@ -888,7 +888,7 @@ export const heapProfileExcludePath = new Profile({ // decodedHeapProfile const encodedHeapProfileExcludePath = heapProfileExcludePath.encode(); export const decodedHeapProfileExcludePath = Object.freeze( - Profile.decode(encodedHeapProfileExcludePath) + Profile.decode(encodedHeapProfileExcludePath), ); export const mapDirPath = ((name: string) => { @@ -1239,7 +1239,7 @@ export function getAndVerifyPresence( // eslint-disable-next-line @typescript-eslint/no-explicit-any list: any[], id: number, - zeroIndex = false + zeroIndex = false, ) { assert.strictEqual(typeof id, 'number', 'has id'); const index = id - (zeroIndex ? 0 : 1); @@ -1251,13 +1251,13 @@ export function getAndVerifyString( stringTable: StringTable, // eslint-disable-next-line @typescript-eslint/no-explicit-any source: any, - field: string + field: string, ) { assert.ok(hasOwnProperty.call(source, field), 'has id field'); const str = getAndVerifyPresence( stringTable.strings, source[field] as number, - true + true, ); assert.strictEqual(typeof str, 'string', 'is a string'); return str; diff --git a/ts/test/test-get-value-from-map-profiler.ts b/ts/test/test-get-value-from-map-profiler.ts index 5e03bf00..432dac5c 100644 --- a/ts/test/test-get-value-from-map-profiler.ts +++ b/ts/test/test-get-value-from-map-profiler.ts @@ -59,7 +59,7 @@ if (useCPED && supportedPlatform) { assert.strictEqual( retrieved, context, - 'Should retrieve the same object' + 'Should retrieve the same object', ); profiler.dispose(); @@ -200,7 +200,7 @@ if (useCPED && supportedPlatform) { }); } -function createProfiler(als: AsyncLocalStorage) { +function createProfiler(als: AsyncLocalStorage) { return new profiler.TimeProfiler({ intervalMicros: 10000, durationMillis: 500, diff --git a/ts/test/test-heap-profiler.ts b/ts/test/test-heap-profiler.ts index 6ffe259d..14f67d04 100644 --- a/ts/test/test-heap-profiler.ts +++ b/ts/test/test-heap-profiler.ts @@ -98,7 +98,7 @@ describe('HeapProfiler', () => { profileStub = sinon .stub(v8HeapProfiler, 'mapAllocationProfile') .callsFake(callback => - callback(mapToGetterNode(copy(v8HeapWithPathProfile))) + callback(mapToGetterNode(copy(v8HeapWithPathProfile))), ); memoryUsageStub = sinon.stub(process, 'memoryUsage').returns({ external: 0, @@ -118,7 +118,7 @@ describe('HeapProfiler', () => { profileStub = sinon .stub(v8HeapProfiler, 'mapAllocationProfile') .callsFake(callback => - callback(mapToGetterNode(copy(v8HeapWithPathProfile))) + callback(mapToGetterNode(copy(v8HeapWithPathProfile))), ); memoryUsageStub = sinon.stub(process, 'memoryUsage').returns({ external: 0, @@ -138,7 +138,7 @@ describe('HeapProfiler', () => { profileStub = sinon .stub(v8HeapProfiler, 'mapAllocationProfile') .callsFake(callback => - callback(mapToGetterNode(copy(v8HeapWithPathProfile))) + callback(mapToGetterNode(copy(v8HeapWithPathProfile))), ); memoryUsageStub = sinon.stub(process, 'memoryUsage').returns({ external: 0, @@ -164,7 +164,7 @@ describe('HeapProfiler', () => { }, (err: Error) => { return err.message === 'Heap profiler is not enabled.'; - } + }, ); }); @@ -179,7 +179,7 @@ describe('HeapProfiler', () => { }, (err: Error) => { return err.message === 'Heap profiler is not enabled.'; - } + }, ); }); }); @@ -191,7 +191,7 @@ describe('HeapProfiler', () => { heapProfiler.start(intervalBytes1, stackDepth1); assert.ok( startStub.calledWith(intervalBytes1, stackDepth1), - 'expected startSamplingHeapProfiler to be called' + 'expected startSamplingHeapProfiler to be called', ); }); it('should throw error when enabled and started with different parameters', () => { @@ -200,7 +200,7 @@ describe('HeapProfiler', () => { heapProfiler.start(intervalBytes1, stackDepth1); assert.ok( startStub.calledWith(intervalBytes1, stackDepth1), - 'expected startSamplingHeapProfiler to be called' + 'expected startSamplingHeapProfiler to be called', ); startStub.resetHistory(); const intervalBytes2 = 1024 * 128; @@ -211,12 +211,12 @@ describe('HeapProfiler', () => { assert.strictEqual( (e as Error).message, 'Heap profiler is already started with intervalBytes 524288 and' + - ' stackDepth 64' + ' stackDepth 64', ); } assert.ok( !startStub.called, - 'expected startSamplingHeapProfiler not to be called second time' + 'expected startSamplingHeapProfiler not to be called second time', ); }); }); @@ -231,7 +231,7 @@ describe('HeapProfiler', () => { heapProfiler.stop(); assert.ok( stopStub.called, - 'expected stopSamplingHeapProfiler to be called' + 'expected stopSamplingHeapProfiler to be called', ); }); }); diff --git a/ts/test/test-profile-serializer.ts b/ts/test/test-profile-serializer.ts index 31faae84..c4461cdd 100644 --- a/ts/test/test-profile-serializer.ts +++ b/ts/test/test-profile-serializer.ts @@ -43,18 +43,18 @@ import { const assert = require('assert'); -function getNonJSThreadsSample(profile: Profile): Number[] | null { +function getNonJSThreadsSample(profile: Profile): number[] | null { for (const sample of profile.sample!) { const locationId = sample.locationId[0]; const location = getAndVerifyPresence( profile.location!, - locationId as number + locationId as number, ); const functionId = location.line![0].functionId; const fn = getAndVerifyPresence(profile.function!, functionId as number); const fn_name = profile.stringTable.strings[fn.name as number]; if (fn_name === NON_JS_THREADS_FUNCTION_NAME) { - return sample.value as Number[]; + return sample.value as number[]; } } @@ -102,7 +102,7 @@ describe('profile-serializer', () => { false, () => { return {foo: 'bar'}; - } + }, ); assert.equal(getNonJSThreadsSample(timeProfileOutWithLabels), null); }); @@ -132,7 +132,7 @@ describe('profile-serializer', () => { false, () => { return {foo: 'bar'}; - } + }, ); assert.equal(getNonJSThreadsSample(timeProfileOutWithLabels), null); }); @@ -166,7 +166,7 @@ describe('profile-serializer', () => { false, () => { return {foo: 'bar'}; - } + }, ); const valuesWithLabels = getNonJSThreadsSample(timeProfileOutWithLabels); assert.notEqual(valuesWithLabels, null); @@ -197,7 +197,7 @@ describe('profile-serializer', () => { const heapProfileOut = serializeHeapProfile( v8AnonymousFunctionHeapProfile, 0, - 512 * 1024 + 512 * 1024, ); assert.deepEqual(heapProfileOut, anonymousFunctionHeapProfile); }); @@ -217,7 +217,7 @@ describe('profile-serializer', () => { 0, 512 * 1024, undefined, - sourceMapper + sourceMapper, ); assert.deepEqual(heapProfileOut, heapSourceProfile); }); @@ -228,7 +228,7 @@ describe('profile-serializer', () => { const timeProfileOut = serializeTimeProfile( v8TimeGeneratedProfile, 1000, - sourceMapper + sourceMapper, ); assert.deepEqual(timeProfileOut, timeSourceProfile); }); @@ -278,7 +278,7 @@ describe('profile-serializer', () => { fs.writeFileSync( path.join(testMapDir, 'generated.js.map'), - mapGen.toString() + mapGen.toString(), ); fs.writeFileSync(path.join(testMapDir, 'generated.js'), ''); @@ -319,24 +319,24 @@ describe('profile-serializer', () => { const line = loc.line![0]; const func = getAndVerifyPresence( profile.function!, - line.functionId as number + line.functionId as number, ); const filename = getAndVerifyString( profile.stringTable, func, - 'filename' + 'filename', ); // Should be mapped to source.ts assert.ok( filename.includes('source.ts'), - `Expected source.ts but got ${filename}` + `Expected source.ts but got ${filename}`, ); // With column 0 and LEAST_UPPER_BOUND, should map to FIRST mapping (line 100) assert.strictEqual( line.line, FIRST_CALL_SOURCE_LINE, - 'Column 0 should use LEAST_UPPER_BOUND to find first mapping on line' + 'Column 0 should use LEAST_UPPER_BOUND to find first mapping on line', ); }); @@ -377,7 +377,7 @@ describe('profile-serializer', () => { assert.strictEqual( line.line, SECOND_CALL_SOURCE_LINE, - 'Column 26 should use GREATEST_LOWER_BOUND to find mapping at column 25' + 'Column 26 should use GREATEST_LOWER_BOUND to find mapping at column 25', ); }); @@ -418,7 +418,7 @@ describe('profile-serializer', () => { assert.strictEqual( line.line, FIRST_CALL_SOURCE_LINE, - 'Column 11 should use GREATEST_LOWER_BOUND to find mapping at column 10' + 'Column 11 should use GREATEST_LOWER_BOUND to find mapping at column 10', ); }); }); diff --git a/ts/test/test-time-profiler.ts b/ts/test/test-time-profiler.ts index 6727d77c..559247f1 100644 --- a/ts/test/test-time-profiler.ts +++ b/ts/test/test-time-profiler.ts @@ -93,7 +93,7 @@ describe('Time Profiler', () => { assert.deepEqual( context!.context, initialContext, - 'Unexpected context' + 'Unexpected context', ); assert.ok(context!.timestamp >= startTime); @@ -137,8 +137,8 @@ describe('Time Profiler', () => { validateProfile( time.stop( i < repeats - 1, - enableEndPoint || collectAsyncId ? generateLabels : undefined - ) + enableEndPoint || collectAsyncId ? generateLabels : undefined, + ), ); } @@ -226,7 +226,7 @@ describe('Time Profiler', () => { hrtimeBigIntIdx, asyncIdLabelIdx, ] = ['loop', 'fn0', 'fn1', 'fn2', 'hrtimeBigInt', asyncIdLabel].map(x => - stringTable.dedup(x) + stringTable.dedup(x), ); function getString(n: number | bigint): string { @@ -281,7 +281,7 @@ describe('Time Profiler', () => { const labels = sample.label; if (collectAsyncId) { const idx = labels.findIndex( - label => label.key === asyncIdLabelIdx + label => label.key === asyncIdLabelIdx, ); if (idx !== -1) { // Remove async ID label so it doesn't confuse the assertions on @@ -295,7 +295,7 @@ describe('Time Profiler', () => { if (enableEndPoint) { assert( labels.length < 4, - 'loop can have at most two labels and one endpoint' + 'loop can have at most two labels and one endpoint', ); labels.forEach(label => { assert( @@ -303,7 +303,7 @@ describe('Time Profiler', () => { labelIs(label, 'label', 'value1') || labelIs(label, endPointLabel, endPoint) || labelIs(label, rootSpanIdLabel, rootSpanId), - 'loop can be observed with value0 or value1 or root span id or endpoint' + 'loop can be observed with value0 or value1 or root span id or endpoint', ); }); } else { @@ -313,7 +313,7 @@ describe('Time Profiler', () => { labelIs(label, 'label', 'value0') || labelIs(label, 'label', 'value1') || labelIs(label, rootSpanIdLabel, rootSpanId), - 'loop can be observed with value0 or value1 or root span id' + 'loop can be observed with value0 or value1 or root span id', ); }); } @@ -323,8 +323,8 @@ describe('Time Profiler', () => { assert( labels.length < 2, `fn0 can have at most one label, instead got: ${labels.map( - labelStr - )}` + labelStr, + )}`, ); labels.forEach(label => { if (labelIs(label, 'label', 'value0')) { @@ -342,7 +342,7 @@ describe('Time Profiler', () => { if (enableEndPoint) { assert( labels.length === 3, - 'fn1 must be observed with a label, a root span id and an endpoint' + 'fn1 must be observed with a label, a root span id and an endpoint', ); const labelMap = getLabels(labels); assert.deepEqual(labelMap, { @@ -352,13 +352,13 @@ describe('Time Profiler', () => { } else { assert( labels.length === 2, - 'fn1 must be observed with a label' + 'fn1 must be observed with a label', ); labels.forEach(label => { assert( labelIs(label, 'label', 'value1') || labelIs(label, rootSpanIdLabel, rootSpanId), - 'Only value1 can be observed with fn1' + 'Only value1 can be observed with fn1', ); }); } @@ -368,7 +368,7 @@ describe('Time Profiler', () => { assert( labels.length === 0, 'fn2 must be observed with no labels. Observed instead with ' + - labelStr(labels[0]) + labelStr(labels[0]), ); fn2ObservedWithoutLabels = true; break; @@ -381,7 +381,7 @@ describe('Time Profiler', () => { assert(fn1ObservedWithLabel1, 'fn1 was not observed with value1'); assert( fn2ObservedWithoutLabels, - 'fn2 was not observed without a label' + 'fn2 was not observed without a label', ); assert(!collectAsyncId || observedAsyncId, 'Async ID was not observed'); } @@ -445,7 +445,7 @@ describe('Time Profiler', () => { before(() => { sinonStubs.push( - sinon.stub(v8TimeProfiler, 'TimeProfiler').returns(timeProfilerStub) + sinon.stub(v8TimeProfiler, 'TimeProfiler').returns(timeProfilerStub), ); sinonStubs.push(sinon.stub(Date, 'now').returns(0)); }); @@ -458,7 +458,7 @@ describe('Time Profiler', () => { it('should profile during duration and finish profiling after duration', async () => { let isProfiling = true; - time.profile(PROFILE_OPTIONS).then(() => { + void time.profile(PROFILE_OPTIONS).then(() => { isProfiling = false; }); await setTimeoutPromise(2 * PROFILE_OPTIONS.durationMillis); @@ -479,7 +479,7 @@ describe('Time Profiler', () => { assert.equal( time.v8ProfilerStuckEventLoopDetected(), 0, - 'v8 bug detected' + 'v8 bug detected', ); sinon.assert.notCalled(timeProfilerStub.start); @@ -507,7 +507,7 @@ describe('Time Profiler', () => { before(() => { sinonStubs.push( - sinon.stub(v8TimeProfiler, 'TimeProfiler').returns(timeProfilerStub) + sinon.stub(v8TimeProfiler, 'TimeProfiler').returns(timeProfilerStub), ); sinonStubs.push(sinon.stub(Date, 'now').returns(0)); }); @@ -527,7 +527,7 @@ describe('Time Profiler', () => { assert.equal( time.v8ProfilerStuckEventLoopDetected(), 2, - 'v8 bug not detected' + 'v8 bug not detected', ); timeProfilerStub.start.resetHistory(); timeProfilerStub.stop.resetHistory(); @@ -641,7 +641,7 @@ describe('Time Profiler', () => { assert(foundLowCardLabel, 'Should find low cardinality label in samples'); assert( foundHighCardLabel, - 'Should find high cardinality label in samples' + 'Should find high cardinality label in samples', ); // Verify that the lowCardinalityLabels parameter is working correctly @@ -662,17 +662,17 @@ describe('Time Profiler', () => { labelsByValue.size === 2, `Expected exactly 2 distinct low cardinality label values, found ${ labelsByValue.size - }. Values: ${Array.from(labelsByValue.keys()).join(', ')}` + }. Values: ${Array.from(labelsByValue.keys()).join(', ')}`, ); // Verify we found both expected values assert( labelsByValue.has('web-service'), - 'Should find web-service labels' + 'Should find web-service labels', ); assert( labelsByValue.has('api-service'), - 'Should find api-service labels' + 'Should find api-service labels', ); // Verify that the lowCardinalityLabels parameter was properly used @@ -680,7 +680,7 @@ describe('Time Profiler', () => { labelsByValue.forEach((labels, value) => { assert( labels.length > 0, - `Should have at least one label with value '${value}'` + `Should have at least one label with value '${value}'`, ); // Check that all labels have the same key (service_name) @@ -688,7 +688,7 @@ describe('Time Profiler', () => { const keyStr = profile.stringTable.strings[Number(label.key)]; assert( keyStr === lowCardLabel, - `Expected label key to be '${lowCardLabel}', got '${keyStr}'` + `Expected label key to be '${lowCardLabel}', got '${keyStr}'`, ); }); }); @@ -697,17 +697,17 @@ describe('Time Profiler', () => { // This verifies that the lowCardinalityLabels parameter is properly handled const allUniqueValues = new Set( lowCardinalityLabels.map( - label => profile.stringTable.strings[Number(label.str)] - ) + label => profile.stringTable.strings[Number(label.str)], + ), ); assert( allUniqueValues.size === 2, - `Expected exactly 2 unique low cardinality label values across all samples, found ${allUniqueValues.size}` + `Expected exactly 2 unique low cardinality label values across all samples, found ${allUniqueValues.size}`, ); assert( allUniqueValues.has('web-service') && allUniqueValues.has('api-service'), - 'Should find both web-service and api-service values in the low cardinality labels' + 'Should find both web-service and api-service values in the low cardinality labels', ); // Verify that low cardinality labels with the same value are the same object @@ -717,7 +717,7 @@ describe('Time Profiler', () => { assert( uniqueObjects.size === 1, `All labels with value '${value}' should be the same object, found ${uniqueObjects.size} different objects. ` + - 'The lowCardinalityLabels parameter should enable deduplication of Label objects with identical key/value pairs.' + 'The lowCardinalityLabels parameter should enable deduplication of Label objects with identical key/value pairs.', ); }); }); @@ -782,7 +782,7 @@ describe('Time Profiler', () => { assert.deepEqual( contextInsideFunction, testContext, - 'Context should be accessible within function' + 'Context should be accessible within function', ); } finally { time.stop(); @@ -810,13 +810,13 @@ describe('Time Profiler', () => { }, 42, 'hello', - true + true, ); assert.deepEqual( result, {a: 42, b: 'hello', c: true}, - 'Arguments should be passed correctly' + 'Arguments should be passed correctly', ); } finally { time.stop(); @@ -844,7 +844,7 @@ describe('Time Profiler', () => { assert.strictEqual( result, 'test-result', - 'Function result should be returned' + 'Function result should be returned', ); } finally { time.stop(); @@ -870,21 +870,21 @@ describe('Time Profiler', () => { time.runWithContext(outerContext, () => { const ctx1 = time.getContext(); - results.push((ctx1 as any).label); + results.push((ctx1 as Record).label); time.runWithContext(innerContext, () => { const ctx2 = time.getContext(); - results.push((ctx2 as any).label); + results.push((ctx2 as Record).label); }); const ctx3 = time.getContext(); - results.push((ctx3 as any).label); + results.push((ctx3 as Record).label); }); assert.deepEqual( results, ['outer', 'inner', 'outer'], - 'Nested contexts should be properly isolated and restored' + 'Nested contexts should be properly isolated and restored', ); } finally { time.stop(); @@ -917,12 +917,12 @@ describe('Time Profiler', () => { assert.deepEqual( contextInside, runWithContextContext, - 'Context inside should match' + 'Context inside should match', ); assert.strictEqual( contextOutside, undefined, - 'Context outside should be undefined with CPED' + 'Context outside should be undefined with CPED', ); } finally { time.stop(); @@ -954,12 +954,12 @@ describe('Time Profiler', () => { assert.deepEqual( result.ctx1, testContext, - 'Context should be available before await' + 'Context should be available before await', ); assert.deepEqual( result.ctx2, testContext, - 'Context should be preserved after await' + 'Context should be preserved after await', ); } finally { time.stop(); diff --git a/ts/test/test-worker-threads.ts b/ts/test/test-worker-threads.ts index d659da02..efb8cfaf 100644 --- a/ts/test/test-worker-threads.ts +++ b/ts/test/test-worker-threads.ts @@ -1,4 +1,4 @@ -// eslint-disable-next-line node/no-unsupported-features/node-builtins +// eslint-disable-next-line n/no-unsupported-features/node-builtins import {execFile} from 'child_process'; import {promisify} from 'util'; import {Worker} from 'worker_threads'; @@ -24,7 +24,7 @@ describe('Worker Threads', () => { worker.postMessage('hello'); worker.on('message', () => { - worker.terminate(); + void worker.terminate(); }); workers.push( @@ -36,7 +36,7 @@ describe('Worker Threads', () => { reject(new Error('Worker exited with code 0')); } }); - }) + }), ); } await Promise.all(workers); diff --git a/ts/test/worker.ts b/ts/test/worker.ts index 5bc7dca9..5b4240af 100644 --- a/ts/test/worker.ts +++ b/ts/test/worker.ts @@ -26,19 +26,22 @@ function createWorker(durationMs: number): Promise { new Worker(__filename, {workerData: {durationMs}}) .on('exit', exitCode => { if (exitCode !== 0) reject(); - setTimeout(() => { - // Run a second worker after the first one exited to test for proper - // cleanup after first worker. This used to segfault. - new Worker(__filename, {workerData: {durationMs}}) - .on('exit', exitCode => { - if (exitCode !== 0) reject(); - resolve(profiles); - }) - .on('error', reject) - .on('message', profile => { - profiles.push(profile); - }); - }, Math.floor(Math.random() * durationMs)); + setTimeout( + () => { + // Run a second worker after the first one exited to test for proper + // cleanup after first worker. This used to segfault. + new Worker(__filename, {workerData: {durationMs}}) + .on('exit', exitCode => { + if (exitCode !== 0) reject(); + resolve(profiles); + }) + .on('error', reject) + .on('message', profile => { + profiles.push(profile); + }); + }, + Math.floor(Math.random() * durationMs), + ); }) .on('error', reject) .on('message', profile => { @@ -125,9 +128,9 @@ async function worker(durationMs: number) { } if (isMainThread) { - main(DURATION_MILLIS); + void main(DURATION_MILLIS); } else { - worker(workerData.durationMs); + void worker(workerData.durationMs); } function valueName(profile: Profile, vt: ValueType) { @@ -148,7 +151,7 @@ function getCpuTime(profile: Profile) { const locationId = sample.locationId[0]; const location = getAndVerifyPresence( profile.location!, - locationId as number + locationId as number, ); const functionId = location.line![0].functionId; const fn = getAndVerifyPresence(profile.function!, functionId as number); @@ -169,7 +172,7 @@ function checkCpuTime( profile: Profile, processCpuTimeMicros: number, workerProfiles: Profile[] = [], - maxRelativeError = 0.1 + maxRelativeError = 0.1, ) { let workersJsCpuTime = 0; let workersNonJsCpuTime = 0; @@ -187,7 +190,7 @@ function checkCpuTime( assert.strictEqual( workersNonJsCpuTime, 0, - 'worker non-JS CPU time should be null' + 'worker non-JS CPU time should be null', ); const totalCpuTimeMicros = @@ -203,7 +206,7 @@ function checkCpuTime( }\nnon-JS cpu time: ${mainNonJsCpuTime / 1000000}ms\nerror: ${err}`; assert.ok( err <= maxRelativeError, - `total profile CPU time should be close to process cpu time:\n${msg}` + `total profile CPU time should be close to process cpu time:\n${msg}`, ); } @@ -218,7 +221,7 @@ function checkProfile(profile: Profile) { assert.strictEqual(typeof profile.period, 'number'); assert.strictEqual( valueName(profile, profile.periodType!), - 'wall/nanoseconds' + 'wall/nanoseconds', ); assert.ok(profile.sample.length > 0, 'No samples'); @@ -233,13 +236,13 @@ function checkProfile(profile: Profile) { for (const locationId of sample.locationId!) { const location = getAndVerifyPresence( profile.location!, - locationId as number + locationId as number, ); for (const {functionId, line} of location.line!) { const fn = getAndVerifyPresence( profile.function!, - functionId as number + functionId as number, ); getAndVerifyString(profile.stringTable!, fn, 'name'); diff --git a/ts/test/worker2.ts b/ts/test/worker2.ts index eaacd07c..2a1e4b13 100644 --- a/ts/test/worker2.ts +++ b/ts/test/worker2.ts @@ -29,7 +29,7 @@ time.start({ }); parentPort?.on('message', () => { - delay(50).then(() => { + void delay(50).then(() => { parentPort?.postMessage('hello'); }); });