diff --git a/.github/workflows/close-stalled.yml b/.github/workflows/close-stalled.yml index 4d36d9e93cbc23..56c0f2542b9ecf 100644 --- a/.github/workflows/close-stalled.yml +++ b/.github/workflows/close-stalled.yml @@ -20,7 +20,7 @@ jobs: if: github.repository == 'nodejs/node' runs-on: ubuntu-slim steps: - - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0 + - uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0 with: repo-token: ${{ secrets.GITHUB_TOKEN }} days-before-close: 30 diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index 352bfd1e23bbea..77aa6196bb6625 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -149,7 +149,7 @@ jobs: persist-credentials: false sparse-checkout: '*.nix' sparse-checkout-cone-mode: false - - uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f # v31.10.5 + - uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6 - name: Lint Nix files run: | nix-shell -I nixpkgs=./tools/nix/pkgs.nix -p 'nixfmt-tree' --run ' diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 39be55d20d5fd8..323800b749aaea 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -36,7 +36,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@8d3c67de8e2fe68ef647c8db1e6a09f647780f40 # v2.19.0 + uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 704967c24e62ec..217dfcfbae36b4 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -32,7 +32,7 @@ jobs: if: github.repository == 'nodejs/node' runs-on: ubuntu-slim steps: - - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0 + - uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0 with: repo-token: ${{ secrets.GITHUB_TOKEN }} days-before-stale: 210 diff --git a/.github/workflows/test-shared.yml b/.github/workflows/test-shared.yml index 26e55b07078b16..11e7bf37737274 100644 --- a/.github/workflows/test-shared.yml +++ b/.github/workflows/test-shared.yml @@ -187,7 +187,7 @@ jobs: tar xzf tarballs/*.tar.gz -C "$RUNNER_TEMP" echo "TAR_DIR=$RUNNER_TEMP/$(basename tarballs/*.tar.gz .tar.gz)" >> "$GITHUB_ENV" - - uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f # v31.10.5 + - uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6 with: extra_nix_config: sandbox = true @@ -203,7 +203,7 @@ jobs: [ "$(curl -ISsw "%{http_code}" -o /dev/null "https://nodejs.cachix.org/$(basename ${V8_STORE_PATH%-v8-*}).narinfo")" != "200" ] || echo "ALREADY_CACHED=true" >> "$GITHUB_OUTPUT" - - uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17 + - uses: cachix/cachix-action@5f2d7c5294214f71b873db4b969586b980625e71 # v17 if: ${{ steps.v8-drv.outputs.ALREADY_CACHED != 'true' }} with: name: nodejs diff --git a/.github/workflows/tools.yml b/.github/workflows/tools.yml index 0330e649cdadf8..54ca7f12703c52 100644 --- a/.github/workflows/tools.yml +++ b/.github/workflows/tools.yml @@ -321,7 +321,7 @@ jobs: allow-prereleases: true - name: Set up Nix if: matrix.id == 'nixpkgs-unstable' && (github.event_name == 'schedule' || inputs.id == 'all' || inputs.id == matrix.id) - uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f # v31.10.5 + uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6 - run: ${{ matrix.run }} if: github.event_name == 'schedule' || inputs.id == 'all' || inputs.id == matrix.id env: diff --git a/doc/api/webcrypto.md b/doc/api/webcrypto.md index 164b8569fb5299..d7551e4e3dd5cc 100644 --- a/doc/api/webcrypto.md +++ b/doc/api/webcrypto.md @@ -499,7 +499,7 @@ const key = await crypto.subtle.deriveKey( ['encrypt', 'decrypt'], ); const plaintext = 'Hello, world!'; -const iv = crypto.getRandomValues(new Uint8Array(16)); +const iv = crypto.getRandomValues(new Uint8Array(12)); const encrypted = await crypto.subtle.encrypt( { name: encryptionAlg, iv }, key, diff --git a/lib/internal/main/watch_mode.js b/lib/internal/main/watch_mode.js index 63d1b51c815155..ba441a960f07d1 100644 --- a/lib/internal/main/watch_mode.js +++ b/lib/internal/main/watch_mode.js @@ -83,10 +83,13 @@ ArrayPrototypeForEach(kWatchedPaths, (p) => watcher.watchPath(p)); let graceTimer; let child; +let childExitPromise; let exited; +let stopping; function start() { exited = false; + stopping = false; const stdio = kShouldFilterModules ? ['inherit', 'inherit', 'inherit', 'ipc'] : 'inherit'; child = spawn(process.execPath, argsWithoutWatchOptions, { stdio, @@ -103,29 +106,36 @@ function start() { ArrayPrototypeForEach(kOptionalEnvFiles, (file) => watcher.filterFile(resolve(file), undefined, { allowMissing: true })); } - child.once('exit', (code) => { + childExitPromise = once(child, 'exit').then(({ 0: code }) => { exited = true; + if (stopping) { + return code; + } const waitingForChanges = 'Waiting for file changes before restarting...'; if (code === 0) { process.stdout.write(`${blue}Completed running ${kCommandStr}. ${waitingForChanges}${white}\n`); } else { process.stdout.write(`${red}Failed running ${kCommandStr}. ${waitingForChanges}${white}\n`); } + return code; }); return child; } async function killAndWait(signal = kKillSignal, force = false) { - child?.removeAllListeners(); - if (!child) { + const processToKill = child; + const onExit = childExitPromise; + if (!processToKill) { return; } - if ((child.killed || exited) && !force) { + if ((processToKill.killed || exited) && !force) { return; } - const onExit = once(child, 'exit'); - child.kill(signal); - const { 0: exitCode } = await onExit; + stopping = true; + if (!exited && processToKill.exitCode === null && processToKill.signalCode === null) { + processToKill.kill(signal); + } + const exitCode = await onExit; return exitCode; } diff --git a/lib/internal/watch_mode/files_watcher.js b/lib/internal/watch_mode/files_watcher.js index 33b34eb98b45e7..c94775b3e6e4bc 100644 --- a/lib/internal/watch_mode/files_watcher.js +++ b/lib/internal/watch_mode/files_watcher.js @@ -204,6 +204,9 @@ class FilesWatcher extends EventEmitter { this.#filteredFiles.clear(); } clear() { + clearTimeout(this.#debounceTimer); + this.#debounceTimer = null; + this.#debounceOwners.clear(); this.#watchers.forEach(this.#unwatch); this.#watchers.clear(); this.#filteredFiles.clear(); diff --git a/test/parallel/test-watch-mode-files_watcher-clear.mjs b/test/parallel/test-watch-mode-files_watcher-clear.mjs new file mode 100644 index 00000000000000..39514146850d12 --- /dev/null +++ b/test/parallel/test-watch-mode-files_watcher-clear.mjs @@ -0,0 +1,69 @@ +// Flags: --expose-internals +import * as common from '../common/index.mjs'; +import tmpdir from '../common/tmpdir.js'; +import assert from 'node:assert'; +import { writeFileSync } from 'node:fs'; +import { createRequire } from 'node:module'; + +if (common.isIBMi) + common.skip('IBMi does not support `fs.watch()`'); + +const require = createRequire(import.meta.url); +const timers = require('node:timers'); +const originalSetTimeout = timers.setTimeout; +const originalClearTimeout = timers.clearTimeout; +const { promise, resolve } = Promise.withResolvers(); +const debounce = 1000; +let debounceTimer; +let debounceTimerCallback; +let debounceTimerCleared = false; + +timers.setTimeout = function(fn, delay, ...args) { + // Only intercept the FilesWatcher debounce timer configured below. + if (delay === debounce) { + const timer = { + __proto__: null, + ref() { return this; }, + unref() { return this; }, + }; + debounceTimer = timer; + debounceTimerCallback = () => { + if (!debounceTimerCleared) { + fn(...args); + } + }; + resolve(); + return timer; + } + return originalSetTimeout(fn, delay, ...args); +}; + +timers.clearTimeout = function(timer) { + if (timer === debounceTimer) { + debounceTimerCleared = true; + } + return originalClearTimeout(timer); +}; + +try { + const { FilesWatcher } = require('internal/watch_mode/files_watcher'); + + tmpdir.refresh(); + const file = tmpdir.resolve('watcher-clear.js'); + writeFileSync(file, '0'); + + const watcher = new FilesWatcher({ debounce, mode: 'all' }); + watcher.on('changed', common.mustNotCall()); + watcher.watchPath(file, false); + + const interval = setInterval(() => writeFileSync(file, `${Date.now()}`), 50); + await promise; + clearInterval(interval); + + watcher.clear(); + assert.strictEqual(debounceTimerCleared, true); + debounceTimerCallback(); +} finally { + timers.setTimeout = originalSetTimeout; + timers.clearTimeout = originalClearTimeout; +} diff --git a/test/sequential/test-watch-mode.mjs b/test/sequential/test-watch-mode.mjs index 707210a021f944..5b9c789343daa9 100644 --- a/test/sequential/test-watch-mode.mjs +++ b/test/sequential/test-watch-mode.mjs @@ -171,6 +171,23 @@ async function failWriteSucceed({ file, watchedFile }) { tmpdir.refresh(); describe('watch mode', { concurrency: !process.env.TEST_PARALLEL, timeout: 60_000 }, () => { + it('should exit when terminated after the watched process has completed', async () => { + const file = createTmpFile(); + const child = spawn(execPath, ['--watch', '--no-warnings', file], { + encoding: 'utf8', + stdio: 'pipe', + }); + + for await (const line of createInterface({ input: child.stdout })) { + if (line.includes('Completed running')) { + break; + } + } + + child.kill(); + await once(child, 'exit'); + }); + it('should watch changes to a file', async () => { const file = createTmpFile(); const { stderr, stdout } = await runWriteSucceed({ file, watchedFile: file, watchFlag: '--watch=true', options: { diff --git a/tools/eslint/package-lock.json b/tools/eslint/package-lock.json index 6ef33489e6b899..1859609891f370 100644 --- a/tools/eslint/package-lock.json +++ b/tools/eslint/package-lock.json @@ -8,57 +8,58 @@ "name": "eslint-tools", "version": "0.0.0", "dependencies": { - "@babel/core": "^8.0.0-rc.4", - "@babel/eslint-parser": "^8.0.0-rc.4", - "@babel/plugin-syntax-import-source": "^8.0.0-rc.4", + "@babel/core": "^8.0.0-rc.6", + "@babel/eslint-parser": "^8.0.0-rc.6", + "@babel/plugin-syntax-import-source": "^8.0.0-rc.6", "@eslint/js": "^10.0.1", - "@eslint/markdown": "^8.0.1", + "@eslint/markdown": "^8.0.2", "@stylistic/eslint-plugin": "^5.10.0", - "eslint": "^10.2.1", + "eslint": "^10.4.0", "eslint-formatter-tap": "^9.0.1", - "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-jsdoc": "^63.0.0", "eslint-plugin-regexp": "^3.1.0", - "globals": "^17.5.0" + "globals": "^17.6.0" } }, "node_modules/@babel/code-frame": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.0-rc.4.tgz", - "integrity": "sha512-IKAasu/lBZl6mw5HlYCabqi7jGe5cPr9LhnQNf1YH5PWpeWAgchzwzi+siTBbnKEfw4WeSn2OOmDzHklg/Pz9Q==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.0-rc.6.tgz", + "integrity": "sha512-Ru0EdYEptXbJGAGDMsenx+RcelHazuj8spqi7l0geXEPXv0X7qVisqWX+2pMaEZsWhS3Q6Um7oITwhnLe0cHJQ==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^8.0.0-rc.4", + "@babel/helper-validator-identifier": "^8.0.0-rc.6", "js-tokens": "^10.0.0" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/compat-data": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-8.0.0-rc.4.tgz", - "integrity": "sha512-0bCEZ+LmwXRVvkKuxYirgkFq2dMFAs3WyxVtDnOE1djnS6BnyIP0Gym4oC3JKMY8es8U3dgBdKKxAsA+pJJcYg==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-8.0.0-rc.6.tgz", + "integrity": "sha512-9ikfbIp7PCtV/mo8NYrzag1TYInVJAKLwpSoA28+3Bl5z1KVYt5ZGvBZD57yJlf/0HsCntlTlHHodu+eMpUffQ==", "license": "MIT", "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/core": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-8.0.0-rc.4.tgz", - "integrity": "sha512-VhCk07qH2rgkEW6rdOI8nlRd359a+TdnxXqsl3cynjtvkxbdbHVaW+3NUt+BXv4IYy6tjjZihPo5PWg65c7EJQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^8.0.0-rc.4", - "@babel/generator": "^8.0.0-rc.4", - "@babel/helper-compilation-targets": "^8.0.0-rc.4", - "@babel/helpers": "^8.0.0-rc.4", - "@babel/parser": "^8.0.0-rc.4", - "@babel/template": "^8.0.0-rc.4", - "@babel/traverse": "^8.0.0-rc.4", - "@babel/types": "^8.0.0-rc.4", - "@types/gensync": "^1.0.0", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-8.0.0-rc.6.tgz", + "integrity": "sha512-89SVbTu7p+M/W052SFC7R5QuQYgypfuO6HmBBbhA/Kzl6gME8Ly2QrVpIegvTxmcQKOzAPIxiEIfNk+Jxd26mw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0-rc.6", + "@babel/generator": "^8.0.0-rc.6", + "@babel/helper-compilation-targets": "^8.0.0-rc.6", + "@babel/helpers": "^8.0.0-rc.6", + "@babel/parser": "^8.0.0-rc.6", + "@babel/template": "^8.0.0-rc.6", + "@babel/traverse": "^8.0.0-rc.6", + "@babel/types": "^8.0.0-rc.6", + "@types/gensync": "^1.0.5", "convert-source-map": "^2.0.0", + "find-up-simple": "^1.0.1", "gensync": "^1.0.0-beta.2", "import-meta-resolve": "^4.2.0", "json5": "^2.2.3", @@ -66,25 +67,17 @@ "semver": "^7.7.3" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/babel" - }, - "peerDependencies": { - "@babel/preset-typescript": "^8.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/preset-typescript": { - "optional": true - } } }, "node_modules/@babel/eslint-parser": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-8.0.0-rc.4.tgz", - "integrity": "sha512-Caw6OIRvHiAG1aBrbmiZavs0lCtxHxwFlmlY4xcRkdzK+0Cka3aYydMyIbZov77Gf+reZbP4yfcWwlSAx78qRw==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-8.0.0-rc.6.tgz", + "integrity": "sha512-qVHD7K5PyUXj57bsJWbyT5V9JtOX/4dtX9QSQpqGfBG4xiVE/mrCYCT25Ih+wHvISR98Lctl9BtvEUtGyYsrvA==", "license": "MIT", "dependencies": { "eslint-scope": "^9.1.0", @@ -92,180 +85,180 @@ "semver": "^7.7.3" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" }, "peerDependencies": { - "@babel/core": "^8.0.0-rc.4", + "@babel/core": "^8.0.0-rc.6", "eslint": "^9.0.0 || ^10.0.0" } }, "node_modules/@babel/generator": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.0-rc.4.tgz", - "integrity": "sha512-YZ+FuIgkj7KrIb2a2X1XiY0QYgDxAbVbYP64SjwJzOK3euCsUerzenh2oqdsmKuPSlhzmFOOklnxzHAzXagvpw==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.0-rc.6.tgz", + "integrity": "sha512-6mIzgVK8DgEzvIapoQwhXTMnnkuE4STQmVv9H03i/tZ2ml8oev3TRvZJgTenK2Bsq0YWNtzOrFdTyNzCMFtjJQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^8.0.0-rc.4", - "@babel/types": "^8.0.0-rc.4", + "@babel/parser": "^8.0.0-rc.6", + "@babel/types": "^8.0.0-rc.6", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "@types/jsesc": "^2.5.0", "jsesc": "^3.0.2" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-8.0.0-rc.4.tgz", - "integrity": "sha512-pGB7/0uJCdPwKVFd0t3w7S0lN63/V8b20tn5QgdiWYizyTb648hYTyotNYuoHU7HxrQl2FS1ItlJiThzHuE86Q==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-8.0.0-rc.6.tgz", + "integrity": "sha512-jqQD45/yUSy63U8zs9hE5FMXS8J1TLAI/NTMx76C6xWO021e13gJACQvuGmEF7syloC39LkkKwhqtAbMku1rwg==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^8.0.0-rc.4", - "@babel/helper-validator-option": "^8.0.0-rc.4", + "@babel/compat-data": "^8.0.0-rc.6", + "@babel/helper-validator-option": "^8.0.0-rc.6", "browserslist": "^4.24.0", "lru-cache": "^7.14.1", "semver": "^7.7.3" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/helper-globals": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-8.0.0-rc.4.tgz", - "integrity": "sha512-gpEp45D4E60hUci5mWeQF9YNisMFaBg9lFsFzx/5qwRL3wbXv6z8/aOeaclec68RqxE9bv3SG7gP2wypyHBbSg==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-8.0.0-rc.6.tgz", + "integrity": "sha512-ZF5FsxE4y7Eb6DiEbsLW3Gz3e73U/Uq3/ZotWf/moxv0DnZziXSMnW/tcXJF8b1mQE8XJnwPNSQOksKcKTz8kQ==", "license": "MIT", "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-8.0.0-rc.4.tgz", - "integrity": "sha512-yX9iDB1iC6ZQLiIW08DTNpzH6nxMuhdcP3PDsfNoBQbgE/ph3Rjhi6CyyFKFH5haeP15T7Bf/ZBIGjPHEMTlzQ==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-8.0.0-rc.6.tgz", + "integrity": "sha512-sLAjvuIcjzUQJR+CoHwU0JA4i706o71bCJtF+W9sc4KuHK3LCIJCjbKRuzbVn1eubUc66uAEZdBNWSqhLpwp2g==", "license": "MIT", "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" }, "peerDependencies": { - "@babel/core": "^8.0.0-rc.4" + "@babel/core": "^8.0.0-rc.6" } }, "node_modules/@babel/helper-string-parser": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0-rc.4.tgz", - "integrity": "sha512-dluR3v287dp6YPF57kyKKrHPKffUeuxH1zQcF1WD30TeFzWXhDiVi1U6PkqaDB0++H1PeCwRhmYl4DvoerlPIw==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0-rc.6.tgz", + "integrity": "sha512-BCkFy+zN6kXQed3YOT7aJl93NfDSzQc3pBfsvTVPs9gU9X3V0aefEF5kwBT0E+mDWH9QgKaZstYUQN9VdQZT4g==", "license": "MIT", "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.0-rc.4.tgz", - "integrity": "sha512-HTD3bskipk5MSm08twTW6832jzIXUhxMddy4NPPzIMuyMEsrs0ZgwAaMj5ubB5+6hMlUjDu17vNconEmwsmpYg==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.0-rc.6.tgz", + "integrity": "sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg==", "license": "MIT", "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-8.0.0-rc.4.tgz", - "integrity": "sha512-OFognYIXIr2hlubLRUohiFcj6c74CT4fL+j23v3tH/I2y/XA+jWN+v+V0jeFZ1dx0oG+CRfhgNjz75F9d6BFyw==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-8.0.0-rc.6.tgz", + "integrity": "sha512-uonhzCIL2Vf0xA10g5C0zD5thR7a6XxOSwZAzYfyl8n2zEev5bAB9J4b2oZ7u5YkyqdONfkptl2DesvW2P56Kg==", "license": "MIT", "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/helpers": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-8.0.0-rc.4.tgz", - "integrity": "sha512-4h9FSYm3mhyM72Lj7pUKygzqN/3/ptKY30ThccjQL7pi5VKSsgjDJMkoguhJJgI8fY+ZS37Jqd/iKtFHBoRIHg==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-8.0.0-rc.6.tgz", + "integrity": "sha512-kTTqnw+Ubp1/WGXiIpDcl+WYVGTUVGjrQKswGI9VOamk7eWVf5ZYOcCB+o1UxaaHjs/L+QK7IRPlyP7vg579OQ==", "license": "MIT", "dependencies": { - "@babel/template": "^8.0.0-rc.4", - "@babel/types": "^8.0.0-rc.4" + "@babel/template": "^8.0.0-rc.6", + "@babel/types": "^8.0.0-rc.6" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/parser": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.0-rc.4.tgz", - "integrity": "sha512-0S/1yefMa15N4i2v3t8Fw9pgMHhf2gF6Lc1UEXI96Ls6FNAjqvHHZouZ2ZS/deqLhbMFtmfVeFac6iTsvFbLwA==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.0-rc.6.tgz", + "integrity": "sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog==", "license": "MIT", "dependencies": { - "@babel/types": "^8.0.0-rc.4" + "@babel/types": "^8.0.0-rc.6" }, "bin": { "parser": "bin/babel-parser.js" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/plugin-syntax-import-source": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-source/-/plugin-syntax-import-source-8.0.0-rc.4.tgz", - "integrity": "sha512-RnXuuDACF9qvUagoTW50EvqDM+ySR91Z6nrDuc1IqQLbg2gC2bagvJPAe6zxCF1/Azl8r7SlKjo5dSMjme6kkQ==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-source/-/plugin-syntax-import-source-8.0.0-rc.6.tgz", + "integrity": "sha512-kvUkjNZhBdZleJjJ60gH5QGHD2ttZBzEZACPnqaAMraDdPz0bERCWNyptdiCZFTOBo6LRhD9QtMAzdZK3jvPZQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^8.0.0-rc.4" + "@babel/helper-plugin-utils": "^8.0.0-rc.6" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" }, "peerDependencies": { - "@babel/core": "^8.0.0-rc.4" + "@babel/core": "^8.0.0-rc.6" } }, "node_modules/@babel/template": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-8.0.0-rc.4.tgz", - "integrity": "sha512-9DXoBFgYSIhNbzx0SxVrS2oWd19YNgFY3l0HN0kVMiJvg123CKSrvbX4TkN51yAn9B1BPo9JxzCX2BtR1LMsiA==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-8.0.0-rc.6.tgz", + "integrity": "sha512-CZFjZblLiIUEFghbB3sKs3rpYrwo65rLIklw/gNpwBm326cU6TH/xzvJZlZ+H9HpDi00eDXqNJR8CtEKW3oc/A==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^8.0.0-rc.4", - "@babel/parser": "^8.0.0-rc.4", - "@babel/types": "^8.0.0-rc.4" + "@babel/code-frame": "^8.0.0-rc.6", + "@babel/parser": "^8.0.0-rc.6", + "@babel/types": "^8.0.0-rc.6" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/traverse": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-8.0.0-rc.4.tgz", - "integrity": "sha512-IoC3txfExDHZf6YnDeTty4jXSorZI5zBZbPRXqJWtZOEdTDdC6RP5gWAasb6el8UBN7Y/Lp39UZcU05BopJ28Q==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-8.0.0-rc.6.tgz", + "integrity": "sha512-/txuBViGaE9gpM8MSGShru1O2Bzp3zb3m/XKZNUsNv2SyNn++lKDDIWkiIQ/345j2FBy7CHiYTZuKhewHWyefw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^8.0.0-rc.4", - "@babel/generator": "^8.0.0-rc.4", - "@babel/helper-globals": "^8.0.0-rc.4", - "@babel/parser": "^8.0.0-rc.4", - "@babel/template": "^8.0.0-rc.4", - "@babel/types": "^8.0.0-rc.4", + "@babel/code-frame": "^8.0.0-rc.6", + "@babel/generator": "^8.0.0-rc.6", + "@babel/helper-globals": "^8.0.0-rc.6", + "@babel/parser": "^8.0.0-rc.6", + "@babel/template": "^8.0.0-rc.6", + "@babel/types": "^8.0.0-rc.6", "obug": "^2.1.1" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/types": { - "version": "8.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.0-rc.4.tgz", - "integrity": "sha512-bw30DV880P/VYtsjWWdoWmJpb9S2Vn1/PqayyccTELzRQ/HslIO7+BD9rNoZ4AAFOAjC1vrNeBCkAsyh6Ibfww==", + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.0-rc.6.tgz", + "integrity": "sha512-p7/ABylAYlexb31wtRdIfH9L9A0Z2T/9H6zAqzqndkY2PLkvNNc580wGhp/gGKN4Sp9sQvSkhc6Oga8/O+wTyw==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^8.0.0-rc.4", - "@babel/helper-validator-identifier": "^8.0.0-rc.4" + "@babel/helper-string-parser": "^8.0.0-rc.6", + "@babel/helper-validator-identifier": "^8.0.0-rc.6" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@es-joy/jsdoccomment": { @@ -347,9 +340,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.5.tgz", - "integrity": "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", "license": "Apache-2.0", "dependencies": { "@eslint/core": "^1.2.1" @@ -391,16 +384,16 @@ } }, "node_modules/@eslint/markdown": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-8.0.1.tgz", - "integrity": "sha512-WWKmld/EyNdEB8GMq7JMPX1SDWgyJAM1uhtCi5ySrqYQM4HQjmg11EX/q3ZpnpRXHfdccFtli3NBvvGaYjWyQw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-8.0.2.tgz", + "integrity": "sha512-W+/0qHp0WbvFEljUvvECNpSWrUHpBWIWwp7F3QqEwQKmaRCmfEWvk6VfUia9pTQ0th6HyBGBsPfg/kG3/aQxLA==", "license": "MIT", "workspaces": [ "examples/*" ], "dependencies": { - "@eslint/core": "^1.1.1", - "@eslint/plugin-kit": "^0.6.1", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.1", "github-slugger": "^2.0.0", "mdast-util-from-markdown": "^2.0.2", "mdast-util-frontmatter": "^2.0.1", @@ -425,12 +418,12 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz", - "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^1.1.1", + "@eslint/core": "^1.2.1", "levn": "^0.4.1" }, "engines": { @@ -586,9 +579,9 @@ "license": "MIT" }, "node_modules/@types/gensync": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.4.tgz", - "integrity": "sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.5.tgz", + "integrity": "sha512-MbsRCT7mTikHwKZ0X+LVUTLRrZZRLipTuXEO9qOYO+zmjMVk81axyClMROf6uoPD9MRVu46bx8zoR0Ad9q3NAg==", "license": "MIT" }, "node_modules/@types/hast": { @@ -714,9 +707,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.10.25", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.25.tgz", - "integrity": "sha512-QO/VHsXCQdnzADMfmkeOPvHdIAkoB7i0/rGjINPJEetLx75hNttVWGQ/jycHUDP9zZ9rupbm60WRxcwViB0MiA==", + "version": "2.10.33", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.33.tgz", + "integrity": "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -771,9 +764,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001791", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz", - "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==", + "version": "1.0.30001793", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", + "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", "funding": [ { "type": "opencollective", @@ -907,9 +900,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.348", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.348.tgz", - "integrity": "sha512-QC2X59nRlycQQMc4ZXjSVBX+tSgJfgRtcrYHbIZLgOV2dCvefoQGegLR7lLXKgpPpSuVmJU19LMzGrSa2C7k3Q==", + "version": "1.5.366", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.366.tgz", + "integrity": "sha512-OlRuhb688YTCzzU3gXPLn6nGyd+F+53INE1qaKKlu6kETErE8FYsyDh0XqXEU+uBRn0MpCzz2vfNwORhkap8qg==", "license": "ISC" }, "node_modules/escalade": { @@ -934,15 +927,15 @@ } }, "node_modules/eslint": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.1.tgz", - "integrity": "sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.4.0.tgz", + "integrity": "sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.5", - "@eslint/config-helpers": "^0.5.5", + "@eslint/config-helpers": "^0.6.0", "@eslint/core": "^1.2.1", "@eslint/plugin-kit": "^0.7.1", "@humanfs/node": "^0.16.6", @@ -1001,9 +994,9 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "62.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-62.9.0.tgz", - "integrity": "sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==", + "version": "63.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-63.0.0.tgz", + "integrity": "sha512-eDHuVGyZydr4BKgjXouU7bsn5qaqUlObXBSWRJk3vXcQgXVFnrwWIqpP7uBhRX9NQpk6NIIFyRc6F6omZNi/8g==", "license": "BSD-3-Clause", "dependencies": { "@es-joy/jsdoccomment": "~0.86.0", @@ -1017,12 +1010,12 @@ "html-entities": "^2.6.0", "object-deep-merge": "^2.0.0", "parse-imports-exports": "^0.2.4", - "semver": "^7.7.4", + "semver": "^7.8.0", "spdx-expression-parse": "^4.0.0", "to-valid-identifier": "^1.0.0" }, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "^22.13.0 || >=24" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0" @@ -1096,19 +1089,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/@eslint/plugin-kit": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", - "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.1", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, "node_modules/eslint/node_modules/espree": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", @@ -1256,6 +1236,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -1311,9 +1303,9 @@ } }, "node_modules/globals": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.5.0.tgz", - "integrity": "sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==", + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", + "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", "license": "MIT", "engines": { "node": ">=18" @@ -2420,10 +2412,13 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.38", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", - "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", - "license": "MIT" + "version": "2.0.47", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", + "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/object-deep-merge": { "version": "2.0.0", @@ -2609,9 +2604,9 @@ } }, "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "license": "ISC", "bin": { "semver": "bin/semver.js" diff --git a/tools/eslint/package.json b/tools/eslint/package.json index a3a6ac0d1c1d7d..dca626efb2baab 100644 --- a/tools/eslint/package.json +++ b/tools/eslint/package.json @@ -3,16 +3,16 @@ "version": "0.0.0", "private": true, "dependencies": { - "@babel/core": "^8.0.0-rc.4", - "@babel/eslint-parser": "^8.0.0-rc.4", - "@babel/plugin-syntax-import-source": "^8.0.0-rc.4", + "@babel/core": "^8.0.0-rc.6", + "@babel/eslint-parser": "^8.0.0-rc.6", + "@babel/plugin-syntax-import-source": "^8.0.0-rc.6", "@eslint/js": "^10.0.1", - "@eslint/markdown": "^8.0.1", + "@eslint/markdown": "^8.0.2", "@stylistic/eslint-plugin": "^5.10.0", - "eslint": "^10.2.1", + "eslint": "^10.4.0", "eslint-formatter-tap": "^9.0.1", - "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-jsdoc": "^63.0.0", "eslint-plugin-regexp": "^3.1.0", - "globals": "^17.5.0" + "globals": "^17.6.0" } }