From 792455d0a51beeeeabcc66e6e34e0fa7ea79a074 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 25 Feb 2026 09:12:26 +0000 Subject: [PATCH] build: update eslint monorepo to v10 See associated pull request for more information. Closes #32456 as a pr takeover --- eslint.config.mjs | 9 +- package.json | 6 +- .../src/builders/karma/progress-reporter.ts | 4 +- .../build/src/builders/unit-test/builder.ts | 10 +- .../unit-test/runners/vitest/executor.ts | 1 + .../tools/esbuild/application-code-bundle.ts | 2 - .../src/tools/esbuild/i18n-inliner-worker.ts | 4 +- .../src/utils/normalize-asset-patterns.ts | 2 +- .../angular/build/src/utils/service-worker.ts | 10 +- .../cli/src/commands/mcp/tools/build.ts | 2 +- .../angular/cli/src/commands/mcp/tools/e2e.ts | 2 +- .../zoneless-migration.ts | 2 +- .../cli/src/commands/mcp/tools/test.ts | 2 +- .../cli/src/commands/mcp/workspace-utils.ts | 12 +- .../angular/cli/src/commands/update/cli.ts | 5 +- .../src/commands/update/schematic/index.ts | 6 +- .../angular/cli/src/utilities/completion.ts | 2 +- packages/angular/cli/src/utilities/config.ts | 5 +- .../architect/src/index_spec.ts | 2 - .../architect/src/jobs/dispatcher.ts | 9 +- .../build_angular/src/builders/karma/index.ts | 1 + .../src/tools/webpack/utils/stats.ts | 3 +- .../src/utils/normalize-asset-patterns.ts | 2 +- .../build_angular/src/utils/process-bundle.ts | 10 +- packages/angular_devkit/core/node/host.ts | 3 + .../schematics/src/tree/host-tree.ts | 2 +- .../schematics/src/tree/recorder.ts | 2 +- .../schematics/angular/app-shell/index.ts | 3 +- .../schematics/angular/application/index.ts | 2 +- .../transformers/jasmine-spy.ts | 2 +- .../angular/utility/ng-ast-utils.ts | 3 +- pnpm-lock.yaml | 262 ++++++++++-------- 32 files changed, 212 insertions(+), 180 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 192ba19f2007..89f9fa72243b 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -12,7 +12,7 @@ import js from '@eslint/js'; import stylistic from '@stylistic/eslint-plugin'; import typescriptEslint from '@typescript-eslint/eslint-plugin'; import tsParser from '@typescript-eslint/parser'; -import header from 'eslint-plugin-header'; +import header from '@tony.ganchev/eslint-plugin-header'; import _import from 'eslint-plugin-import'; import globals from 'globals'; @@ -22,9 +22,6 @@ const compat = new FlatCompat({ allConfig: js.configs.all, }); -// See: https://github.com/Stuk/eslint-plugin-header/issues/57 -header.rules.header.meta.schema = false; - export default [ { ignores: [ @@ -59,7 +56,7 @@ export default [ '@stylistic': stylistic, '@typescript-eslint': fixupPluginRules(typescriptEslint), import: fixupPluginRules(_import), - header, + '@tony.ganchev': header, }, languageOptions: { @@ -106,7 +103,7 @@ export default [ '@typescript-eslint/no-unused-expressions': 'error', curly: 'error', - 'header/header': [ + '@tony.ganchev/header': [ 'error', 'block', [ diff --git a/package.json b/package.json index 8c3982211715..953ed6940cb7 100644 --- a/package.json +++ b/package.json @@ -61,12 +61,13 @@ "@bazel/buildifier": "8.2.1", "@eslint/compat": "2.0.2", "@eslint/eslintrc": "3.3.3", - "@eslint/js": "9.39.2", + "@eslint/js": "10.0.1", "@rollup/plugin-alias": "^6.0.0", "@rollup/plugin-commonjs": "^29.0.0", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "16.0.3", "@stylistic/eslint-plugin": "^5.0.0", + "@tony.ganchev/eslint-plugin-header": "~3.2.4", "@types/babel__core": "7.20.5", "@types/babel__generator": "^7.6.8", "@types/browser-sync": "^2.27.0", @@ -95,9 +96,8 @@ "buffer": "6.0.3", "esbuild": "0.27.3", "esbuild-wasm": "0.27.3", - "eslint": "9.39.2", + "eslint": "10.0.2", "eslint-config-prettier": "10.1.8", - "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.32.0", "express": "5.2.1", "fast-glob": "3.3.3", diff --git a/packages/angular/build/src/builders/karma/progress-reporter.ts b/packages/angular/build/src/builders/karma/progress-reporter.ts index 908f1c856e6d..16824badd095 100644 --- a/packages/angular/build/src/builders/karma/progress-reporter.ts +++ b/packages/angular/build/src/builders/karma/progress-reporter.ts @@ -53,11 +53,9 @@ export function injectKarmaReporter( private startWatchingBuild() { void (async () => { // This is effectively "for await of but skip what's already consumed". - let isDone = false; // to mark the loop condition as "not constant". - while (!isDone) { + while (true) { const { done, value: buildOutput } = await buildIterator.next(); if (done) { - isDone = true; break; } diff --git a/packages/angular/build/src/builders/unit-test/builder.ts b/packages/angular/build/src/builders/unit-test/builder.ts index 6f2edd0281d7..fb9faa3b8576 100644 --- a/packages/angular/build/src/builders/unit-test/builder.ts +++ b/packages/angular/build/src/builders/unit-test/builder.ts @@ -45,11 +45,11 @@ async function loadTestRunner(runnerName: string): Promise { } catch (e) { assertIsError(e); if (e.code === 'ERR_MODULE_NOT_FOUND') { - throw new Error(`Unknown test runner "${runnerName}".`); + throw new Error(`Unknown test runner "${runnerName}".`, { cause: e }); } throw new Error( - `Failed to load the '${runnerName}' test runner. The package may be corrupted or improperly installed.\n` + - `Error: ${e.message}`, + `Failed to load the '${runnerName}' test runner. The package may be corrupted or improperly installed.`, + { cause: e }, ); } @@ -370,7 +370,9 @@ async function transformNgPackagrOptions( ngPackageJson = JSON.parse(await readFile(ngPackagePath, 'utf-8')); } catch (e) { assertIsError(e); - throw new Error(`Could not read ng-package.json at ${ngPackagePath}: ${e.message}`); + throw new Error(`Could not read ng-package.json at ${ngPackagePath}`, { + cause: e, + }); } const lib = ngPackageJson['lib'] || {}; diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts index 503aa5da9071..5ff9ac1b443f 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts @@ -185,6 +185,7 @@ export class VitestExecutor implements TestExecutor { } throw new Error( 'The `vitest` package was not found. Please install the package and rerun the test command.', + { cause: error }, ); } const { startVitest } = vitestNodeModule; diff --git a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts index 635faca8c82e..e59f139c8aeb 100644 --- a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts +++ b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts @@ -701,7 +701,6 @@ function getEsBuildCommonPolyfillsOptions( cache: loadResultCache, loadContent: async (_, build) => { let polyfillPaths = polyfills; - let warnings: PartialMessage[] | undefined; if (tryToResolvePolyfillsAsRelative) { polyfillPaths = await Promise.all( @@ -736,7 +735,6 @@ function getEsBuildCommonPolyfillsOptions( return { contents, loader: 'js', - warnings, resolveDir: workspaceRoot, }; }, diff --git a/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts b/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts index 74550e83e5de..f988a4b2f0d8 100644 --- a/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts +++ b/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts @@ -196,7 +196,9 @@ async function transformWithBabel( // Which makes it hard to find the actual error message. const index = error.message.indexOf(')\n'); const msg = index !== -1 ? error.message.slice(0, index + 1) : error.message; - throw new Error(`${msg}\nAn error occurred inlining file "${options.filename}"`); + throw new Error(`${msg}\nAn error occurred inlining file "${options.filename}"`, { + cause: error, + }); } if (!ast) { diff --git a/packages/angular/build/src/utils/normalize-asset-patterns.ts b/packages/angular/build/src/utils/normalize-asset-patterns.ts index 929e88fff506..b935f1d84588 100644 --- a/packages/angular/build/src/utils/normalize-asset-patterns.ts +++ b/packages/angular/build/src/utils/normalize-asset-patterns.ts @@ -45,7 +45,7 @@ export function normalizeAssetPatterns( } let glob: string, input: string; - let isDirectory = false; + let isDirectory: boolean; try { isDirectory = statSync(resolvedAssetPath).isDirectory(); diff --git a/packages/angular/build/src/utils/service-worker.ts b/packages/angular/build/src/utils/service-worker.ts index 1535684f635c..3c8b4cbe6b63 100644 --- a/packages/angular/build/src/utils/service-worker.ts +++ b/packages/angular/build/src/utils/service-worker.ts @@ -6,10 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import type { - Config, - Filesystem, -} from '@angular/service-worker/config' with { 'resolution-mode': 'import' }; +import type { Config, Filesystem } from '@angular/service-worker/config' with { + 'resolution-mode': 'import', +}; import * as crypto from 'node:crypto'; import { existsSync, promises as fsPromises } from 'node:fs'; import * as path from 'node:path'; @@ -149,6 +148,7 @@ export async function augmentAppWithServiceWorker( 'Error: Expected to find an ngsw-config.json configuration file' + ` in the ${appRoot} folder. Either provide one or` + ' disable Service Worker in the angular.json configuration file.', + { cause: error }, ); } else { throw error; @@ -200,7 +200,7 @@ export async function augmentAppWithServiceWorkerEsbuild( workspaceRoot, configPath, )}" could not be found.`; - throw new Error(message); + throw new Error(message, { cause: error }); } else { throw error; } diff --git a/packages/angular/cli/src/commands/mcp/tools/build.ts b/packages/angular/cli/src/commands/mcp/tools/build.ts index 5f6ce7a020a0..45d3765b3c86 100644 --- a/packages/angular/cli/src/commands/mcp/tools/build.ts +++ b/packages/angular/cli/src/commands/mcp/tools/build.ts @@ -47,7 +47,7 @@ export async function runBuild(input: BuildToolInput, context: McpToolContext) { const args = ['build', projectName, '-c', input.configuration ?? DEFAULT_CONFIGURATION]; let status: BuildStatus = 'success'; - let logs: string[] = []; + let logs: string[]; let outputPath: string | undefined; try { diff --git a/packages/angular/cli/src/commands/mcp/tools/e2e.ts b/packages/angular/cli/src/commands/mcp/tools/e2e.ts index 93ae2b55b5a6..1354e9ad19e4 100644 --- a/packages/angular/cli/src/commands/mcp/tools/e2e.ts +++ b/packages/angular/cli/src/commands/mcp/tools/e2e.ts @@ -58,7 +58,7 @@ export async function runE2e(input: E2eToolInput, host: Host, context: McpToolCo const args = ['e2e', projectName]; let status: E2eStatus = 'success'; - let logs: string[] = []; + let logs: string[]; try { logs = (await host.runCommand('ng', args, { cwd: workspacePath })).logs; diff --git a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts index f85a6f322c60..065d4e28669e 100644 --- a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts +++ b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts @@ -137,7 +137,7 @@ async function discoverAndCategorizeFiles( isDirectory = statSync(fileOrDirPath).isDirectory(); } catch (e) { // Re-throw to be handled by the main function as a user input error - throw new Error(`Failed to access path: ${fileOrDirPath}`); + throw new Error(`Failed to access path: ${fileOrDirPath}`, { cause: e }); } if (isDirectory) { diff --git a/packages/angular/cli/src/commands/mcp/tools/test.ts b/packages/angular/cli/src/commands/mcp/tools/test.ts index f3a1440b01ce..2ace1496dd46 100644 --- a/packages/angular/cli/src/commands/mcp/tools/test.ts +++ b/packages/angular/cli/src/commands/mcp/tools/test.ts @@ -49,7 +49,7 @@ export async function runTest(input: TestToolInput, context: McpToolContext) { } let status: TestStatus = 'success'; - let logs: string[] = []; + let logs: string[]; try { logs = (await context.host.runCommand('ng', args, { cwd: workspacePath })).logs; diff --git a/packages/angular/cli/src/commands/mcp/workspace-utils.ts b/packages/angular/cli/src/commands/mcp/workspace-utils.ts index 87a4cdc6c1bc..d1edf55fa56b 100644 --- a/packages/angular/cli/src/commands/mcp/workspace-utils.ts +++ b/packages/angular/cli/src/commands/mcp/workspace-utils.ts @@ -123,11 +123,7 @@ export async function resolveWorkspaceAndProject({ try { workspace = await AngularWorkspace.load(configPath); } catch (e) { - throw new Error( - `Failed to load workspace configuration at ${configPath}: ${ - e instanceof Error ? e.message : e - }`, - ); + throw new Error(`Failed to load workspace configuration at ${configPath}`, { cause: e }); } } else if (mcpWorkspace) { workspace = mcpWorkspace; @@ -146,11 +142,7 @@ export async function resolveWorkspaceAndProject({ try { workspace = await AngularWorkspace.load(configPath); } catch (e) { - throw new Error( - `Failed to load workspace configuration at ${configPath}: ${ - e instanceof Error ? e.message : e - }`, - ); + throw new Error(`Failed to load workspace configuration at ${configPath}.`, { cause: e }); } } diff --git a/packages/angular/cli/src/commands/update/cli.ts b/packages/angular/cli/src/commands/update/cli.ts index 9f990845b59b..0a85f9b77ecc 100644 --- a/packages/angular/cli/src/commands/update/cli.ts +++ b/packages/angular/cli/src/commands/update/cli.ts @@ -287,14 +287,13 @@ export default class UpdateCommandModule extends CommandModule { const { logger } = this.context; - let packageDependency = rootDependencies.get(packageName); + const packageDependency = rootDependencies.get(packageName); let packagePath = packageDependency?.path; let packageNode: PackageManifest | undefined; if (!packageDependency) { const installed = await packageManager.getInstalledPackage(packageName); if (installed) { - packageDependency = installed; packagePath = installed.path; } } @@ -450,7 +449,7 @@ export default class UpdateCommandModule extends CommandModule x.padEnd(pads[i])).join(''), ); - logger.info(' ' + '-'.repeat(pads.reduce((s, x) => (s += x), 0) + 20)); + + const totalWidth = pads.reduce((sum, width) => sum + width, 20); + logger.info(` ${'-'.repeat(totalWidth)}`); packagesToUpdate.forEach((fields) => { if (!fields) { @@ -681,7 +683,7 @@ function _addPackageGroup( if (!packageGroup) { return; } - let packageGroupNormalized: Record = {}; + let packageGroupNormalized: Record; if (Array.isArray(packageGroup) && !packageGroup.some((x) => typeof x != 'string')) { packageGroupNormalized = packageGroup.reduce( (acc, curr) => { diff --git a/packages/angular/cli/src/utilities/completion.ts b/packages/angular/cli/src/utilities/completion.ts index 436680902395..0e23e1f03348 100644 --- a/packages/angular/cli/src/utilities/completion.ts +++ b/packages/angular/cli/src/utilities/completion.ts @@ -244,7 +244,7 @@ export async function initializeAutocomplete(): Promise { ); } catch (err) { assertIsError(err); - throw new Error(`Failed to append autocompletion setup to \`${rcFile}\`:\n${err.message}`); + throw new Error(`Failed to append autocompletion setup to \`${rcFile}\`.`, { cause: err }); } return rcFile; diff --git a/packages/angular/cli/src/utilities/config.ts b/packages/angular/cli/src/utilities/config.ts index dfe21fa96692..7b9188bb3d89 100644 --- a/packages/angular/cli/src/utilities/config.ts +++ b/packages/angular/cli/src/utilities/config.ts @@ -207,10 +207,7 @@ export async function getWorkspace( return workspace; } catch (error) { - throw new Error( - `Workspace config file cannot be loaded: ${configPath}` + - `\n${error instanceof Error ? error.message : error}`, - ); + throw new Error(`Workspace config file cannot be loaded: ${configPath}`, { cause: error }); } } diff --git a/packages/angular_devkit/architect/src/index_spec.ts b/packages/angular_devkit/architect/src/index_spec.ts index 50d599b30dac..e5de7d1b3018 100644 --- a/packages/angular_devkit/architect/src/index_spec.ts +++ b/packages/angular_devkit/architect/src/index_spec.ts @@ -331,7 +331,6 @@ describe('architect', () => { // Use an invalid target and check for error. target.target = 'invalid'; - options = {}; // This should not error. const run2 = await architect.scheduleBuilder('package:getTargetOptions', {}); @@ -375,7 +374,6 @@ describe('architect', () => { // Use an invalid target and check for error. target.target = 'invalid'; - actualBuilderName = ''; // This should not error. const run2 = await architect.scheduleBuilder('package:do-it', {}); diff --git a/packages/angular_devkit/architect/src/jobs/dispatcher.ts b/packages/angular_devkit/architect/src/jobs/dispatcher.ts index 1ffea649e83f..0098a99279a8 100644 --- a/packages/angular_devkit/architect/src/jobs/dispatcher.ts +++ b/packages/angular_devkit/architect/src/jobs/dispatcher.ts @@ -14,8 +14,11 @@ import { Readwrite } from './types'; /** * A JobDispatcher can be used to dispatch between multiple jobs. */ -export interface JobDispatcher - extends JobHandler { +export interface JobDispatcher< + A extends JsonValue, + I extends JsonValue, + O extends JsonValue, +> extends JobHandler { /** * Set the default job if all conditionals failed. * @param name The default name if all conditions are false. @@ -43,7 +46,7 @@ export function createDispatcher = Object.assign( (argument: JsonValue, context: JobHandlerContext) => { const maybeDelegate = conditionalDelegateList.find(([predicate]) => predicate(argument)); - let delegate: Job | null = null; + let delegate: Job; if (maybeDelegate) { delegate = context.scheduler.schedule(maybeDelegate[1], argument); diff --git a/packages/angular_devkit/build_angular/src/builders/karma/index.ts b/packages/angular_devkit/build_angular/src/builders/karma/index.ts index ff54a8292ff2..1ea20e0f5db4 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/index.ts @@ -198,6 +198,7 @@ async function checkForEsbuild( // If we can't find a development builder, we can't use 'detect'. throw new Error( 'Failed to detect the builder used by the application. Please set builderMode explicitly.', + { cause: e }, ); } } diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/utils/stats.ts b/packages/angular_devkit/build_angular/src/tools/webpack/utils/stats.ts index 1ed442a43d3e..a5c5b5c9b4f6 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/utils/stats.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/utils/stats.ts @@ -75,7 +75,6 @@ function statsToString( const w = (x: string) => (colors ? ansiColors.bold.white(x) : x); const changedChunksStats: BundleStats[] = []; - let unchangedChunkNumber = 0; let hasEstimatedTransferSizes = false; const isFirstRun = !runsCache.has(json.outputPath || ''); @@ -109,7 +108,7 @@ function statsToString( } changedChunksStats.push(generateBundleStats({ ...chunk, rawSize, estimatedTransferSize })); } - unchangedChunkNumber = json.chunks.length - changedChunksStats.length; + const unchangedChunkNumber = json.chunks.length - changedChunksStats.length; runsCache.add(json.outputPath || ''); diff --git a/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts b/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts index ef421d81042c..7f18080e05f5 100644 --- a/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts +++ b/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts @@ -43,7 +43,7 @@ export function normalizeAssetPatterns( } let glob: string, input: string; - let isDirectory = false; + let isDirectory: boolean; try { isDirectory = statSync(resolvedAssetPath).isDirectory(); diff --git a/packages/angular_devkit/build_angular/src/utils/process-bundle.ts b/packages/angular_devkit/build_angular/src/utils/process-bundle.ts index c8ec99eef15e..c3828cf804fb 100644 --- a/packages/angular_devkit/build_angular/src/utils/process-bundle.ts +++ b/packages/angular_devkit/build_angular/src/utils/process-bundle.ts @@ -55,11 +55,9 @@ let localizeToolsModule: LocalizeUtilityModule | undefined; * This module must be dynamically loaded as it is an ESM module and this file is CommonJS. */ async function loadLocalizeTools(): Promise { - if (localizeToolsModule !== undefined) { - return localizeToolsModule; - } + localizeToolsModule ??= await import('@angular/localize/tools'); - return import('@angular/localize/tools'); + return localizeToolsModule; } async function createI18nPlugins( @@ -138,7 +136,9 @@ export async function inlineLocales(options: InlineOptions) { // Which makes it hard to find the actual error message. const index = error.message.indexOf(')\n'); const msg = index !== -1 ? error.message.slice(0, index + 1) : error.message; - throw new Error(`${msg}\nAn error occurred inlining file "${options.filename}"`); + throw new Error(`${msg}\nAn error occurred inlining file "${options.filename}"`, { + cause: error, + }); } if (!ast) { diff --git a/packages/angular_devkit/core/node/host.ts b/packages/angular_devkit/core/node/host.ts index 422a95af2b01..107ce003c7f0 100644 --- a/packages/angular_devkit/core/node/host.ts +++ b/packages/angular_devkit/core/node/host.ts @@ -47,6 +47,9 @@ function loadFSWatcher() { throw new Error( 'As of angular-devkit version 8.0, the "chokidar" package ' + 'must be installed in order to use watch() features.', + { + cause: e, + }, ); } throw e; diff --git a/packages/angular_devkit/schematics/src/tree/host-tree.ts b/packages/angular_devkit/schematics/src/tree/host-tree.ts index 9e275052391f..8f9d793a31a9 100644 --- a/packages/angular_devkit/schematics/src/tree/host-tree.ts +++ b/packages/angular_devkit/schematics/src/tree/host-tree.ts @@ -313,7 +313,7 @@ export class HostTree implements Tree { e instanceof TypeError || (e as NodeJS.ErrnoException).code === 'ERR_ENCODING_INVALID_ENCODED_DATA' ) { - throw new Error(`Failed to decode "${path}" as UTF-8 text.`); + throw new Error(`Failed to decode "${path}" as UTF-8 text.`, { cause: e }); } throw e; } diff --git a/packages/angular_devkit/schematics/src/tree/recorder.ts b/packages/angular_devkit/schematics/src/tree/recorder.ts index d7853b5d136f..7ed047c9aa11 100644 --- a/packages/angular_devkit/schematics/src/tree/recorder.ts +++ b/packages/angular_devkit/schematics/src/tree/recorder.ts @@ -32,7 +32,7 @@ export class UpdateRecorderBase implements UpdateRecorder { text = new TextDecoder(encoding, { fatal: true, ignoreBOM: false }).decode(data); } catch (e) { if (e instanceof TypeError) { - throw new Error(`Failed to decode "${path}" as ${encoding} text.`); + throw new Error(`Failed to decode "${path}" as ${encoding} text.`, { cause: e }); } throw e; diff --git a/packages/schematics/angular/app-shell/index.ts b/packages/schematics/angular/app-shell/index.ts index 2bae5e4bef14..c9b30cdcc8b6 100644 --- a/packages/schematics/angular/app-shell/index.ts +++ b/packages/schematics/angular/app-shell/index.ts @@ -168,7 +168,6 @@ function addServerRoutingConfig(options: AppShellOptions, isStandalone: boolean) throw new SchematicsException(`Cannot find "${configFilePath}".`); } - let recorder = host.beginUpdate(configFilePath); const configSourceFile = getSourceFile(host, configFilePath); const functionCall = findNodes( configSourceFile, @@ -185,7 +184,7 @@ function addServerRoutingConfig(options: AppShellOptions, isStandalone: boolean) ); } - recorder = host.beginUpdate(configFilePath); + const recorder = host.beginUpdate(configFilePath); recorder.insertLeft(functionCall.end - 1, `, withAppShell(AppShell)`); applyToUpdateRecorder(recorder, [ diff --git a/packages/schematics/angular/application/index.ts b/packages/schematics/angular/application/index.ts index e84a40530032..d66d4fc89ce0 100644 --- a/packages/schematics/angular/application/index.ts +++ b/packages/schematics/angular/application/index.ts @@ -261,7 +261,7 @@ function addAppToWorkspaceFile(options: ApplicationOptions, appDir: string): Rul } const sourceRoot = join(normalize(projectRoot), 'src'); - let budgets: { type: string; maximumWarning: string; maximumError: string }[] = []; + let budgets: { type: string; maximumWarning: string; maximumError: string }[]; if (options.strict) { budgets = [ { diff --git a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy.ts b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy.ts index f019dbb53099..1139aedc8aed 100644 --- a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy.ts +++ b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy.ts @@ -232,7 +232,7 @@ export function transformCreateSpyObj( const baseName = hasBaseName ? firstArg.text : undefined; const methods = hasBaseName ? node.arguments[1] : firstArg; const propertiesArg = hasBaseName ? node.arguments[2] : node.arguments[1]; - let properties: ts.PropertyAssignment[] = []; + let properties: ts.PropertyAssignment[]; if (node.arguments.length < 2 && hasBaseName) { const category = 'createSpyObj-single-argument'; diff --git a/packages/schematics/angular/utility/ng-ast-utils.ts b/packages/schematics/angular/utility/ng-ast-utils.ts index 05a9f45c87ca..a78738e9623b 100644 --- a/packages/schematics/angular/utility/ng-ast-utils.ts +++ b/packages/schematics/angular/utility/ng-ast-utils.ts @@ -21,8 +21,7 @@ export function findBootstrapModuleCall(host: Tree, mainPath: string): ts.CallEx let bootstrapCall: ts.CallExpression | null = null; for (const node of allNodes) { - let bootstrapCallNode: ts.Node | null = null; - bootstrapCallNode = findNode(node, ts.SyntaxKind.Identifier, 'bootstrapModule'); + let bootstrapCallNode = findNode(node, ts.SyntaxKind.Identifier, 'bootstrapModule'); // Walk up the parent until CallExpression is found. while ( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db1e6664cbb0..87bc83e3cd10 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -72,13 +72,13 @@ importers: version: 8.2.1 '@eslint/compat': specifier: 2.0.2 - version: 2.0.2(eslint@9.39.2(jiti@2.6.1)) + version: 2.0.2(eslint@10.0.2(jiti@2.6.1)) '@eslint/eslintrc': specifier: 3.3.3 version: 3.3.3 '@eslint/js': - specifier: 9.39.2 - version: 9.39.2 + specifier: 10.0.1 + version: 10.0.1(eslint@10.0.2(jiti@2.6.1)) '@rollup/plugin-alias': specifier: ^6.0.0 version: 6.0.0(rollup@4.57.1) @@ -93,7 +93,10 @@ importers: version: 16.0.3(rollup@4.57.1) '@stylistic/eslint-plugin': specifier: ^5.0.0 - version: 5.8.0(eslint@9.39.2(jiti@2.6.1)) + version: 5.8.0(eslint@10.0.2(jiti@2.6.1)) + '@tony.ganchev/eslint-plugin-header': + specifier: ~3.2.4 + version: 3.2.4(eslint@10.0.2(jiti@2.6.1)) '@types/babel__core': specifier: 7.20.5 version: 7.20.5 @@ -162,10 +165,10 @@ importers: version: 1.1.9 '@typescript-eslint/eslint-plugin': specifier: 8.56.0 - version: 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.56.0 - version: 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) ajv: specifier: 8.18.0 version: 8.18.0 @@ -179,17 +182,14 @@ importers: specifier: 0.27.3 version: 0.27.3 eslint: - specifier: 9.39.2 - version: 9.39.2(jiti@2.6.1) + specifier: 10.0.2 + version: 10.0.2(jiti@2.6.1) eslint-config-prettier: specifier: 10.1.8 - version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-header: - specifier: 3.1.1 - version: 3.1.1(eslint@9.39.2(jiti@2.6.1)) + version: 10.1.8(eslint@10.0.2(jiti@2.6.1)) eslint-plugin-import: specifier: 2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1)) express: specifier: 5.2.1 version: 5.2.1 @@ -1833,17 +1833,13 @@ packages: eslint: optional: true - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-array@0.23.2': + resolution: {integrity: sha512-YF+fE6LV4v5MGWRGj7G404/OZzGNepVF8fxk7jqmqo3lrza7a0uUcDnROGRBG1WFC1omYUS/Wp1f42i0M+3Q3A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-helpers@0.5.2': + resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/core@1.1.0': resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==} @@ -1853,17 +1849,22 @@ packages: resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.2': - resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@3.0.2': + resolution: {integrity: sha512-HOy56KJt48Bx8KmJ+XGQNSUMT/6dZee/M54XyUyuvTvPXJmsERRvBchsUVx1UMe1WwIH49XLAczNC7V2INsuUw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.6.0': + resolution: {integrity: sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@exodus/bytes@1.14.1': resolution: {integrity: sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ==} @@ -3509,6 +3510,11 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} + '@tony.ganchev/eslint-plugin-header@3.2.4': + resolution: {integrity: sha512-zqMKTW/KQmqKGINkhwEPoJFcJ0ewUkUAmvzHLB5N+n/6bsk7D/xkQ50VhUakG2P4JHHtqsncaXrPxgSeuBPmOw==} + peerDependencies: + eslint: '>=7.7.0' + '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -3617,6 +3623,9 @@ packages: '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -4152,6 +4161,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + adjust-sourcemap-loader@4.0.0: resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} engines: {node: '>=8.9'} @@ -4191,6 +4205,9 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -5429,11 +5446,6 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-header@3.1.1: - resolution: {integrity: sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==} - peerDependencies: - eslint: '>=7.7.0' - eslint-plugin-import@2.32.0: resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} engines: {node: '>=4'} @@ -5448,9 +5460,9 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-scope@9.1.1: + resolution: {integrity: sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} @@ -5464,9 +5476,13 @@ packages: resolution: {integrity: sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@9.39.2: - resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.0.2: + resolution: {integrity: sha512-uYixubwmqJZH+KLVYIVKY1JQt7tysXhtj21WSvjcSmU5SVNzMus1bgLe+pAt816yQ8opKfheVVoPLqvVMGejYw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: jiti: '*' @@ -5478,6 +5494,10 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@11.1.1: + resolution: {integrity: sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -6839,9 +6859,6 @@ packages: lodash.isstring@4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} @@ -7033,6 +7050,10 @@ packages: resolution: {integrity: sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w==} engines: {node: 20 || >=22} + minimatch@10.2.2: + resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -10508,34 +10529,30 @@ snapshots: '@esbuild/win32-x64@0.27.3': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.0.2(jiti@2.6.1))': dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@2.0.2(eslint@9.39.2(jiti@2.6.1))': + '@eslint/compat@2.0.2(eslint@10.0.2(jiti@2.6.1))': dependencies: '@eslint/core': 1.1.0 optionalDependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) - '@eslint/config-array@0.21.1': + '@eslint/config-array@0.23.2': dependencies: - '@eslint/object-schema': 2.1.7 + '@eslint/object-schema': 3.0.2 debug: 4.4.3(supports-color@10.2.2) - minimatch: 3.1.2 + minimatch: 10.2.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.4.2': + '@eslint/config-helpers@0.5.2': dependencies: - '@eslint/core': 0.17.0 - - '@eslint/core@0.17.0': - dependencies: - '@types/json-schema': 7.0.15 + '@eslint/core': 1.1.0 '@eslint/core@1.1.0': dependencies: @@ -10555,13 +10572,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.39.2': {} + '@eslint/js@10.0.1(eslint@10.0.2(jiti@2.6.1))': + optionalDependencies: + eslint: 10.0.2(jiti@2.6.1) - '@eslint/object-schema@2.1.7': {} + '@eslint/object-schema@3.0.2': {} - '@eslint/plugin-kit@0.4.1': + '@eslint/plugin-kit@0.6.0': dependencies: - '@eslint/core': 0.17.0 + '@eslint/core': 1.1.0 levn: 0.4.1 '@exodus/bytes@1.14.1': {} @@ -12242,11 +12261,11 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stylistic/eslint-plugin@5.8.0(eslint@9.39.2(jiti@2.6.1))': + '@stylistic/eslint-plugin@5.8.0(eslint@10.0.2(jiti@2.6.1))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) '@typescript-eslint/types': 8.55.0 - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -12256,6 +12275,10 @@ snapshots: dependencies: defer-to-connect: 2.0.1 + '@tony.ganchev/eslint-plugin-header@3.2.4(eslint@10.0.2(jiti@2.6.1))': + dependencies: + eslint: 10.0.2(jiti@2.6.1) + '@tootallnate/once@2.0.0': {} '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -12385,6 +12408,8 @@ snapshots: '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 + '@types/esrecurse@4.3.1': {} + '@types/estree@1.0.8': {} '@types/events@3.0.3': {} @@ -12635,15 +12660,15 @@ snapshots: '@types/node': 22.19.11 optional: true - '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.56.0 - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -12651,14 +12676,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.56.0 '@typescript-eslint/types': 8.56.0 '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.56.0 debug: 4.4.3(supports-color@10.2.2) - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -12681,13 +12706,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.56.0 '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@10.2.2) - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -12712,13 +12737,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.56.0 '@typescript-eslint/types': 8.56.0 '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -13227,12 +13252,18 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn-walk@8.3.4: dependencies: acorn: 8.15.0 acorn@8.15.0: {} + acorn@8.16.0: {} + adjust-sourcemap-loader@4.0.0: dependencies: loader-utils: 2.0.4 @@ -13272,6 +13303,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@6.14.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -14643,9 +14681,9 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.0.2(jiti@2.6.1)): dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) eslint-import-resolver-node@0.3.9: dependencies: @@ -14655,21 +14693,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/parser': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + eslint: 10.0.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-header@3.1.1(eslint@9.39.2(jiti@2.6.1)): - dependencies: - eslint: 9.39.2(jiti@2.6.1) - - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -14678,9 +14712,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -14692,7 +14726,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -14703,8 +14737,10 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@8.4.0: + eslint-scope@9.1.1: dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -14714,28 +14750,27 @@ snapshots: eslint-visitor-keys@5.0.0: {} - eslint@9.39.2(jiti@2.6.1): + eslint-visitor-keys@5.0.1: {} + + eslint@10.0.2(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 - '@eslint/config-helpers': 0.4.2 - '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.3 - '@eslint/js': 9.39.2 - '@eslint/plugin-kit': 0.4.1 + '@eslint/config-array': 0.23.2 + '@eslint/config-helpers': 0.5.2 + '@eslint/core': 1.1.0 + '@eslint/plugin-kit': 0.6.0 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - ajv: 6.12.6 - chalk: 4.1.2 + ajv: 6.14.0 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@10.2.2) escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 + eslint-scope: 9.1.1 + eslint-visitor-keys: 5.0.1 + espree: 11.1.1 esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -14746,8 +14781,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 10.2.2 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: @@ -14761,6 +14795,12 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 + espree@11.1.1: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 + esprima@4.0.1: {} esquery@1.7.0: @@ -16384,8 +16424,6 @@ snapshots: lodash.isstring@4.0.1: {} - lodash.merge@4.6.2: {} - lodash.once@4.1.1: {} lodash.snakecase@4.1.1: {} @@ -16572,6 +16610,10 @@ snapshots: dependencies: brace-expansion: 5.0.2 + minimatch@10.2.2: + dependencies: + brace-expansion: 5.0.2 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12