diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index afd51b9..3991931 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,4 +1,4 @@ -# Copyright (c) 2023 National Instruments +# Copyright (c) 2025 National Instruments # Each line is a file pattern followed by one or more owners. # More info: https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-code-owners diff --git a/LICENSE b/LICENSE index ffe640e..2cce61a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 National Instruments Corporation +Copyright (c) 2025 National Instruments Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 273f806..6a97d88 100644 --- a/README.md +++ b/README.md @@ -47,102 +47,104 @@ Install the package for your corresponding language as a development dependency: Then follow the [Playwright configuration](#playwright-configuration) instructions. -With npm 7 and up the required peer dependencies will be installed automatically and you can move on to [Configuration](#configuration). - -If you are using npm 6 or lower, use the following instructions to manually install the required peer dependencies: - -Use [`npm view`](https://docs.npmjs.com/cli/view.html) to list the correct versions of each peer package to install yourself. For example, with a JavaScript project run: - -```bash -npm view @ni/eslint-config-javascript peerDependencies -``` - -Alternatively, use [`npx install-peerdeps`](https://www.npmjs.com/package/install-peerdeps) as a shortcut to install the peer packages for you. For example, with a JavaScript project run: - -```bash -npx install-peerdeps --dev @ni/eslint-config-javascript -``` - ## Configuration After installing the lint configuration packages, follow the configuration instructions for your project language: ### JavaScript configuration -Extend `@ni/eslint-config-javascript` in the [ESLint configuration](https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats). +Use `@ni/eslint-config-javascript` configurations in your [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`): ```js -{ - extends: '@ni/eslint-config-javascript' -} +import { defineConfig } from 'eslint/config'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; + +export default defineConfig([ + javascriptConfig, +]); ``` ### TypeScript configuration -Extend `@ni/eslint-config-typescript` and `@ni/eslint-config-typescript/requiring-type-checking` in the [ESLint configuration](https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats). Set the `parserOptions.project` configuration to the project's TypeScript configuration. +Use `@ni/eslint-config-typescript` configurations in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` to the project's TypeScript configuration to correctly enable [linting with type information](https://typescript-eslint.io/getting-started/typed-linting). ```js -{ - extends: [ - '@ni/eslint-config-typescript', - '@ni/eslint-config-typescript/requiring-type-checking' - ], - parserOptions: { - project: 'tsconfig.json' - } -} +import { defineConfig } from 'eslint/config'; +import { typescriptConfig } from '@ni/eslint-config-typescript'; + +export default defineConfig([ + { + files: ['**/*.ts'], + extends: typescriptConfig, + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsConfigRootDir: import.meta.dirname, + }, + }, + }, +]); ``` ### Angular configuration -ESLint support for Angular is provided by [`@angular-eslint`](https://github.com/angular-eslint/angular-eslint#readme). **It's recommended to use `@angular-eslint/schematics` to -configure ESLint for Angular projects**. +ESLint support for Angular is provided by [`angular-eslint`](https://github.com/angular-eslint/angular-eslint#readme). -1. **For single and multi-project workspaces**, [add the schematic](https://github.com/angular-eslint/angular-eslint#quick-start). Remove the `@angular-eslint`, `@typescript-eslint`, and `eslint` dependencies from `package.json`. +1. **For single and multi-project workspaces**, [add angular-eslint](https://github.com/angular-eslint/angular-eslint#quick-start). Remove the `angular-eslint` and `eslint` dependencies from `package.json`. ```bash - ng add @angular-eslint/schematics + ng add angular-eslint ``` 2. **For multi-project workspaces**, [configure each project](https://github.com/angular-eslint/angular-eslint#adding-eslint-configuration-to-an-existing-angular-cli-project-which-has-no-existing-linter), and then enable future generated projects to be configured as well. ```bash - > ng g @angular-eslint/schematics:add-eslint-to-project - > ng config cli.schematicCollections "[\"@angular-eslint/schematics\"]" + > ng g angular-eslint:add-eslint-to-project + > ng config cli.schematicCollections "[\"angular-eslint\"]" ``` -3. Extend the NI configured rules for Angular and Angular templates in the [ESLint configuration](https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats). Set the `parserOptions.project` configuration to the project's TypeScript configuration. +3. Use the NI configured rules for Angular TypeScript code and Angular templates in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration to correctly enable [linting with type information](https://typescript-eslint.io/getting-started/typed-linting).. ```js - overrides: [{ - files: ['*.ts'], - extends: [ - '@ni/eslint-config-angular', - '@ni/eslint-config-angular/requiring-type-checking' - ], - parserOptions: { - project: 'tsconfig.json' + import { defineConfig } from 'eslint/config'; + import { angularTypescriptConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; + + export default defineConfig([ + { + files: ['**/*.ts'], + extends: angularTypescriptConfig, + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsConfigRootDir: import.meta.dirname, + }, + }, + }, + { + files: ['**/*.html'], + extends: angularTemplateConfig, } - }, { - files: ['*.html'], - extends: ['@ni/eslint-config-angular/template'] - }] + ]); ``` 4. Evaluate the [project specific rule groups](#evaluate-project-specific-rule-groups) to manually add to your lint configuration. For Angular applications in particular, consider enabling the [`[application-prefix]`](#application-prefix) rule group. ### Playwright configuration -Extend `@ni/eslint-config-playwright` and `@ni/eslint-config-playwright/requiring-type-checking` in the [ESLint configuration](https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats). Set the `parserOptions.project` configuration to the project's TypeScript configuration. - -**Note:** The Playwright configurations extend the TypeScript configurations, so it is not necessary for an application to extend them both. However, the Playwright configurations should only be applied to directories that contain Playwright tests and utilities. +Use `@ni/eslint-config-playwright` configurations in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` to the project's TypeScript configuration to correctly enable [linting with type information](https://typescript-eslint.io/getting-started/typed-linting). ```js -// This is an example .eslintrc.js in a Playwright-specific directory. -// If Playwright files are mixed with other code, use an "overrides" file pattern to match only Playwright code. -{ - extends: [ - '@ni/eslint-config-playwright', - '@ni/eslint-config-playwright/requiring-type-checking' - ], - parserOptions: { - project: 'tsconfig.json' +import { defineConfig } from 'eslint/config'; +import { playwrightConfig } from '@ni/eslint-config-playwright'; + +export default defineConfig([ + { + // This files pattern should be updated to only match + // Playwright test files and not other TypeScript files + files: ['**/*.ts'], + extends: playwrightConfig, + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsConfigRootDir: import.meta.dirname, + }, + } } -} +]); ``` ## Usage @@ -226,11 +228,9 @@ Tag: [`[strict-null-checks]`](https://github.com/ni/javascript-styleguide/search When `strictNullChecks` are enabled the values `null` and `undefined` are treated as distinct types by the compiler. For example, with `strictNullChecks` enabled, the value `null` could not be directly assigned to a binding of a `Cat` object, ie `const cat: Cat = null` would be a compile error. The `null` value is a distinct type and the binding would have to explicitly state that it can have a `null` value, ie `const cat: Cat | null = null;`. -`strictNullChecks` are a powerful tool for code correctness and give us a way to avoid ["The Billion Dollar Mistake"](https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare/). However, it can be impractical to retrofit `strictNullChecks` configuration into an existing application and requires expanding your mental model for software development for use in new applications. - -As such, `strictNullChecks` are not recommended by default in order to prevent overhead of rule adoption for existing applications. +`strictNullChecks` are a powerful tool for code correctness and give us a way to avoid ["The Billion Dollar Mistake"](https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare/). -However, we encourage new applications to leverage `strictNullChecks` for development. Enabling `strictNullChecks` is the TypeScript compiler recommendation and it is enabled by default in new Angular applications. +This style guide assumes `strictNullChecks` are enabled by default. However, it can be impractical to retrofit `strictNullChecks` configuration into an existing application and requires expanding your mental model for software development for use in new applications. To adopt this style guide in a project without `strictNullChecks`, configure every rule tagged with `[strict-null-checks]` to `off` unless specified in the rule comment. #### Accessibility @@ -257,15 +257,20 @@ To disable a rule globally, modify the `rules` section of the [ESLint configurat } ``` -To disable a rule for a specific file pattern or directory, modify the `overrides` section of the [ESLint configuration](https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats): +To disable a rule for a specific file pattern or directory, update the rules section for that file pattern in the [ESLint configuration](https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats): ```js - overrides: [{ +import { defineConfig } from 'eslint/config'; + +export default defineConfig([ + // ...other configs + { + // This rule is disabled as an example files: ['*.stories.ts'], rules: { - // This rule is disabled as an example 'import/no-default-export': 'off' } - }] + } +]); ``` ### Inline disable rules that don't apply to a particular situation @@ -276,6 +281,86 @@ The rule configuration files in this package (`index.js`, `typescript.js`, etc) ESLint offers several [ways to disable a rule for a line or file](https://eslint.org/docs/user-guide/configuring/rules#disabling-rules). Suppressions should be as targeted as possible and should include a comment explaining the suppression. +### Migrating to ESLint Flat Configuration Format + +ESLint’s [flat config format](https://eslint.org/docs/latest/use/configure/configuration-files-new) is now the recommended way to configure ESLint. If your project is still using a legacy `.eslintrc.*` file, follow these steps to migrate: + +1. **Rename your configuration file** +Replace your `.eslintrc.js` or `.eslintrc.json` with a new `eslint.config.js` file at the root of your project. + +2. **Switch to using imports** +Instead of using the `extends` property, import the configuration packages you need and export an array of configurations: + + ```js + // eslint.config.js + import { defineConfig } from 'eslint/config'; + import { angularTypescriptConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; + + export default defineConfig([ + angularTypescriptConfig, + angularTemplateConfig, + // Add any project-specific overrides here + ]); + ``` + + **Note:** All rules that previously required type checking are now included in the main config export for each package. You no longer need to import a separate requiring-type-checking config—just import the main config to get all rules. + +3. **Set parser options as needed** + For TypeScript and Angular projects, ensure you set `parserOptions.project` in a config block to point to your TypeScript configuration: + + ```js + { + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsConfigRootDir: import.meta.dirname, + }, + } + } + ``` + +4. **Remove legacy config fields** + The flat config format does not use `parser`, or `plugins` at the top level. All configuration should be handled through the imported arrays and objects. + +5. **@stylistic rules** + The following rules are moved from `@typescript-eslint` to `@stylistic`. Update any project config overrides and inline suppressions to the new names: + - `@typescript-eslint/member-delimiter-style` → `@stylistic/member-delimiter-style` + - `@typescript-eslint/type-annotation-spacing` → `@stylistic/type-annotation-spacing` + + Other deprecated rules may also now reside under `@stylistic`. Search your codebase for old suppressions (e.g. `eslint-disable @typescript-eslint/...`) and rename them as needed. + +6. **Angular CLI linkage** + Configure the linter in `angular.json` for each project in Angular workspaces to use the `eslint.config.js` ESLint configuration. Example: + ```json + "projects": { + "my-app": { + "architect": { + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"], + "eslintConfig": "./eslint.config.js" + } + } + } + } + } + ``` + +7. **strictNullChecks** is now enabled by default. + - If your project has `strictNullChecks` enabled, remove previously overridden strict rules for null checks. + - If your project has `strictNullChecks` disabled, disable strict rules for null checks to maintain previous behavior. Example: + ```js + { + files: ['**/*.ts'], + rules: { + '@typescript-eslint/no-unnecessary-condition': 'off', + '@typescript-eslint/strict-boolean-expressions': 'off' + } + } + ``` + ### Recommended Development Environment Configuration Modern IDEs can be configured to provide live feedback about ESLint errors. @@ -297,7 +382,7 @@ You can [configure a repository to prompt developers to install this extension]( } ``` -Follow the `@angular-eslint` [instructions](https://github.com/angular-eslint/angular-eslint#linting-html-files-and-inline-templates-with-the-vscode-extension-for-eslint) for linting HTML files and inline-templates with Angular. +Follow the `angular-eslint` [instructions](https://github.com/angular-eslint/angular-eslint#linting-html-files-and-inline-templates-with-the-vscode-extension-for-eslint) for linting HTML files and inline-templates with Angular. #### JetBrains WebStorm @@ -322,16 +407,16 @@ This option can be adapted for npm scripts, for example. ### TypeScript linting performance -`@ni/eslint-config/typescript-requiring-type-checking` includes rules that require type checking that run slower as they utilize the TypeScript compiler for type information. +`@ni/eslint-config-typescript` includes rules that require type checking that run slower as they utilize the TypeScript compiler for type information. If there are situations where the analysis time for enabling the type checked rules is an excessive burden you may consider creating a separate ESLint configuration that avoids extending the type checked rules and omits the `parserOptions.project` configuration to run in specific scenarios. -See discussion in the [performance section](https://github.com/typescript-eslint/typescript-eslint/blob/main/docs/getting-started/linting/TYPED_LINTING.md#performance) of the Getting Started - Linting with Type Information guide. +See discussion in the [performance section](https://typescript-eslint.io/troubleshooting/typed-linting/performance/) of the Getting Started - Linting with Type Information guide. ### Angular linting performance -Deviations from the `@angular-eslint schematic`, `@ni/eslint-config-angular`, and the [`parserOptions.project`](https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/parser#parseroptionsproject) configurations can result in significant performance degredation. Fully manual configuration [is not recommended](https://github.com/angular-eslint/angular-eslint#going-fully-manual-not-recommended). Read `@angular-eslint`'s [section on performance](https://github.com/angular-eslint/angular-eslint#eslint-configs-and-performance) for information on addressing slow linting processes. +Deviations from the `angular-eslint`, `@ni/eslint-config-angular`, and the [`parserOptions.project`](https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/parser#parseroptionsproject) configurations can result in significant performance degredation. Read `angular-eslint`'s [section on performance](https://github.com/angular-eslint/angular-eslint/blob/v19.0.0/docs/RULES_REQUIRING_TYPE_INFORMATION.md) for information on addressing slow linting processes. ## License -[MIT (c) 2021 National Instruments Corporation](./LICENSE) +[MIT (c) 2025 National Instruments Corporation](./LICENSE) diff --git a/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json b/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json new file mode 100644 index 0000000..ba7ff1c --- /dev/null +++ b/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json @@ -0,0 +1,7 @@ +{ + "type": "major", + "comment": "Update eslint-config-angular to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled. See [Migration Guide](https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format) for more information.", + "packageName": "@ni/eslint-config-angular", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json b/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json new file mode 100644 index 0000000..949c67f --- /dev/null +++ b/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json @@ -0,0 +1,7 @@ +{ + "type": "major", + "comment": "Update eslint-config-javascript to be compatible with eslint v9. See [Migration Guide](https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format) for more information.", + "packageName": "@ni/eslint-config-javascript", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json b/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json new file mode 100644 index 0000000..ea711a0 --- /dev/null +++ b/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json @@ -0,0 +1,7 @@ +{ + "type": "major", + "comment": "Update eslint-config-playwright to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled. See [Migration Guide](https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format) for more information.", + "packageName": "@ni/eslint-config-playwright", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json b/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json new file mode 100644 index 0000000..05d2b42 --- /dev/null +++ b/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json @@ -0,0 +1,7 @@ +{ + "type": "major", + "comment": "Update eslint-config-typescript to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled. See [Migration Guide](https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format) for more information.", + "packageName": "@ni/eslint-config-typescript", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/package-lock.json b/package-lock.json index f85a7bc..8b3051d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,36 +15,25 @@ "packages/eslint-config-playwright", "tests/javascript", "tests/typescript", - "tests/typescript-requiring-type-checking", "tests/angular", "tests/playwright", - "tests/playwright-requiring-type-checking", "tests/print-evaluated-rules" ], "devDependencies": { "beachball": "^2.41.0" }, "peerDependencies": { - "typescript": "~4.8.2" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "peer": true, - "engines": { - "node": ">=0.10.0" + "typescript": "~5.4.5" } }, "node_modules/@angular-devkit/architect": { - "version": "0.1802.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.12.tgz", - "integrity": "sha512-bepVb2/GtJppYKaeW8yTGE6egmoWZ7zagFDsmBdbF+BYp+HmeoPsclARcdryBPVq68zedyTRdvhWSUTbw1AYuw==", + "version": "0.1802.21", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.21.tgz", + "integrity": "sha512-+Ll+xtpKwZ3iLWN/YypvnCZV/F0MVbP+/7ZpMR+Xv/uB0OmribhBVj9WGaCd9I/bGgoYBw8wBV/NFNCKkf0k3Q==", "license": "MIT", "peer": true, "dependencies": { - "@angular-devkit/core": "18.2.12", + "@angular-devkit/core": "18.2.21", "rxjs": "7.8.1" }, "engines": { @@ -53,10 +42,20 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/architect/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@angular-devkit/core": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.12.tgz", - "integrity": "sha512-NtB6ypsaDyPE6/fqWOdfTmACs+yK5RqfH5tStEzWFeeDsIEDYKsJ06ypuRep7qTjYus5Rmttk0Ds+cFgz8JdUQ==", + "version": "18.2.21", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.21.tgz", + "integrity": "sha512-Lno6GNbJME85wpc/uqn+wamBxvfZJZFYSH8+oAkkyjU/hk8r5+X8DuyqsKAa0m8t46zSTUsonHsQhVe5vgrZeQ==", "license": "MIT", "peer": true, "dependencies": { @@ -94,14 +93,24 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/@angular-devkit/core/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@angular-devkit/schematics": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.12.tgz", - "integrity": "sha512-mMea9txHbnCX5lXLHlo0RAgfhFHDio45/jMsREM2PA8UtVf2S8ltXz7ZwUrUyMQRv8vaSfn4ijDstF4hDMnRgQ==", + "version": "18.2.21", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.21.tgz", + "integrity": "sha512-yuC2vN4VL48JhnsaOa9J/o0Jl+cxOklRNQp5J2/ypMuRROaVCrZAPiX+ChSHh++kHYMpj8+ggNrrUwRNfMKACQ==", "license": "MIT", "peer": true, "dependencies": { - "@angular-devkit/core": "18.2.12", + "@angular-devkit/core": "18.2.21", "jsonc-parser": "3.3.1", "magic-string": "0.30.11", "ora": "5.4.1", @@ -113,6 +122,16 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@angular-eslint/builder": { "version": "18.4.3", "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-18.4.3.tgz", @@ -170,36 +189,6 @@ "typescript": "*" } }, - "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@angular-eslint/utils": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.4.3.tgz", - "integrity": "sha512-w0bJ9+ELAEiPBSTPPm9bvDngfu1d8JbzUhvs2vU+z7sIz/HMwUZT5S4naypj2kNN0gZYGYrW0lt+HIbW87zTAQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.4.3" - }, - "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/eslint-plugin/node_modules/@angular-eslint/utils": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.4.3.tgz", - "integrity": "sha512-w0bJ9+ELAEiPBSTPPm9bvDngfu1d8JbzUhvs2vU+z7sIz/HMwUZT5S4naypj2kNN0gZYGYrW0lt+HIbW87zTAQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.4.3" - }, - "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, "node_modules/@angular-eslint/schematics": { "version": "18.4.3", "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-18.4.3.tgz", @@ -226,6 +215,19 @@ "node": ">= 4" } }, + "node_modules/@angular-eslint/schematics/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@angular-eslint/template-parser": { "version": "18.4.3", "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-18.4.3.tgz", @@ -241,27 +243,25 @@ "typescript": "*" } }, - "node_modules/@angular-eslint/template-parser/node_modules/eslint-scope": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", - "license": "BSD-2-Clause", + "node_modules/@angular-eslint/utils": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.4.3.tgz", + "integrity": "sha512-w0bJ9+ELAEiPBSTPPm9bvDngfu1d8JbzUhvs2vU+z7sIz/HMwUZT5S4naypj2kNN0gZYGYrW0lt+HIbW87zTAQ==", + "license": "MIT", "peer": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "@angular-eslint/bundled-angular-compiler": "18.4.3" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" } }, "node_modules/@angular/core": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.13.tgz", - "integrity": "sha512-8mbWHMgO95OuFV1Ejy4oKmbe9NOJ3WazQf/f7wks8Bck7pcihd0IKhlPBNjFllbF5o+04EYSwFhEtvEgjMDClA==", + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.14.tgz", + "integrity": "sha512-BIPrCs93ZZTY9ym7yfoTgAQ5rs706yoYeAdrgc8kh/bDbM9DawxKlgeKBx2FLt09Y0YQ1bFhKVp0cV4gDEaMxQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -275,37 +275,26 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -329,25 +318,78 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "license": "MIT", "peer": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "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.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "license": "Apache-2.0", + "peer": true, + "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==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "license": "MIT", "peer": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -355,7 +397,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -365,6 +407,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -381,35 +424,75 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT", "peer": true }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", + "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", + "license": "MIT", "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@eslint/core": "^0.15.2", + "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==", + "license": "Apache-2.0", + "peer": true, + "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==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "license": "Apache-2.0", "peer": true, "engines": { "node": ">=12.22" @@ -419,16 +502,24 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "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==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT", "peer": true }, @@ -456,10 +547,6 @@ "resolved": "tests/javascript", "link": true }, - "node_modules/@ni/playwright-requiring-type-checking-test": { - "resolved": "tests/playwright-requiring-type-checking", - "link": true - }, "node_modules/@ni/playwright-test": { "resolved": "tests/playwright", "link": true @@ -468,10 +555,6 @@ "resolved": "tests/print-evaluated-rules", "link": true }, - "node_modules/@ni/typescript-requiring-type-checking-test": { - "resolved": "tests/typescript-requiring-type-checking", - "link": true - }, "node_modules/@ni/typescript-test": { "resolved": "tests/typescript", "link": true @@ -480,6 +563,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -492,6 +576,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", "engines": { "node": ">= 8" } @@ -500,6 +585,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -509,74 +595,112 @@ } }, "node_modules/@playwright/test": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.42.1.tgz", - "integrity": "sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.1.tgz", + "integrity": "sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright": "1.42.1" + "playwright": "1.55.1" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "license": "MIT", + "peer": true + }, "node_modules/@stylistic/eslint-plugin": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-3.1.0.tgz", - "integrity": "sha512-pA6VOrOqk0+S8toJYhQGv2MWpQQR0QpeUo9AhNkC49Y26nxBQ/nH1rta9bUU1rPw2fJ1zZEMV5oCX5AazT7J2g==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.4.0.tgz", + "integrity": "sha512-UG8hdElzuBDzIbjG1QDwnYH0MQ73YLXDFHgZzB4Zh/YJfnw8XNsloVtytqzx0I2Qky9THSdpTmi8Vjn/pf/Lew==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/utils": "^8.13.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "@eslint-community/eslint-utils": "^4.9.0", + "@typescript-eslint/types": "^8.44.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", "estraverse": "^5.3.0", - "picomatch": "^4.0.2" + "picomatch": "^4.0.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "peerDependencies": { - "eslint": ">=8.40.0" + "eslint": ">=9.0.0" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz", - "integrity": "sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==", + "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "peer": true, - "dependencies": { - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz", - "integrity": "sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==", + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/jasmine": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.9.tgz", + "integrity": "sha512-8t4HtkW4wxiPVedMpeZ63n3vlWxEIquo/zc1Tm8ElU+SqVV7+D3Na2PWaJUp179AzTragMWVwkMv7mvty0NfyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/parse-path": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.0.3.tgz", + "integrity": "sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.45.0.tgz", + "integrity": "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/project-service": "8.43.0", - "@typescript-eslint/tsconfig-utils": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/type-utils": "8.45.0", + "@typescript-eslint/utils": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "engines": { @@ -587,20 +711,33 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { + "@typescript-eslint/parser": "^8.45.0", + "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.43.0.tgz", - "integrity": "sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.45.0.tgz", + "integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==", "license": "MIT", "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0" + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", + "debug": "^4.3.4" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -614,15 +751,16 @@ "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz", - "integrity": "sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==", + "node_modules/@typescript-eslint/project-service": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.45.0.tgz", + "integrity": "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "8.43.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/tsconfig-utils": "^8.45.0", + "@typescript-eslint/types": "^8.45.0", + "debug": "^4.3.4" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -630,239 +768,33 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.45.0.tgz", + "integrity": "sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==", "license": "MIT", "peer": true, "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@stylistic/eslint-plugin/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==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "license": "BSD-2-Clause", - "peer": true, - "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/@stylistic/eslint-plugin/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/@types/jasmine": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", - "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "peer": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.43.0.tgz", - "integrity": "sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.43.0", - "@typescript-eslint/types": "^8.43.0", - "debug": "^4.3.4" + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.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/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.43.0.tgz", - "integrity": "sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz", + "integrity": "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==", "license": "MIT", "peer": true, "engines": { @@ -877,37 +809,34 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.45.0.tgz", + "integrity": "sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/utils": "8.45.0", "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.43.0.tgz", - "integrity": "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.45.0.tgz", + "integrity": "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==", "license": "MIT", "peer": true, "engines": { @@ -919,52 +848,38 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "license": "BSD-2-Clause", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz", + "integrity": "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==", + "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/project-service": "8.45.0", + "@typescript-eslint/tsconfig-utils": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "peer": true, "dependencies": { @@ -988,85 +903,53 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.45.0.tgz", + "integrity": "sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==", "license": "MIT", "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz", + "integrity": "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" + "@typescript-eslint/types": "8.45.0", + "eslint-visitor-keys": "^4.2.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "license": "MIT", - "peer": true, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "peer": true - }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/acorn": { "version": "8.15.0", @@ -1085,6 +968,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", "peer": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -1125,30 +1009,58 @@ } } }, + "node_modules/angular-eslint": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/angular-eslint/-/angular-eslint-18.4.3.tgz", + "integrity": "sha512-0ZjLzzADGRLUhZC8ZpwSo6CE/m6QhQB/oljMJ0mEfP+lB1sy1v8PBKNsJboIcfEEgGW669Z/efVQ3df88yJLYg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@angular-devkit/core": ">= 18.0.0 < 19.0.0", + "@angular-devkit/schematics": ">= 18.0.0 < 19.0.0", + "@angular-eslint/builder": "18.4.3", + "@angular-eslint/eslint-plugin": "18.4.3", + "@angular-eslint/eslint-plugin-template": "18.4.3", + "@angular-eslint/schematics": "18.4.3", + "@angular-eslint/template-parser": "18.4.3", + "@typescript-eslint/types": "^8.0.0", + "@typescript-eslint/utils": "^8.0.0" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*", + "typescript-eslint": "^8.0.0" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "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==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" }, "node_modules/aria-query": { "version": "5.3.2", @@ -1161,13 +1073,14 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -1177,16 +1090,20 @@ } }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -1199,21 +1116,26 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -1222,16 +1144,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", - "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.3.0", + "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" }, "engines": { @@ -1241,16 +1163,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -1259,16 +1182,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -1277,32 +1204,21 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", "peer": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", "peer": true, "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -1327,7 +1243,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -1351,22 +1268,23 @@ "peer": true }, "node_modules/beachball": { - "version": "2.41.0", - "resolved": "https://registry.npmjs.org/beachball/-/beachball-2.41.0.tgz", - "integrity": "sha512-hp6BBAiA2UYmm9E+JWwopMK+2njAeV3r6uJR91ICi7jYnjD+DFKxJjrcaW0pb4SOikMdQITw/GfjsMUs07oJqg==", + "version": "2.55.1", + "resolved": "https://registry.npmjs.org/beachball/-/beachball-2.55.1.tgz", + "integrity": "sha512-JtZnFkr0CX68/qPsRJX6viIbkjEGbIbWjaY8TnDgk3VYuh8mpl7wEOM9Kw6Hz5Bk/tI4CbGTWvSN/n6VHM3r9A==", "dev": true, + "license": "MIT", "dependencies": { - "cosmiconfig": "^8.3.6", + "cosmiconfig": "^9.0.0", "execa": "^5.0.0", "fs-extra": "^11.1.1", "lodash": "^4.17.15", "minimatch": "^3.0.4", + "p-graph": "^1.1.2", "p-limit": "^3.0.2", "prompts": "^2.4.2", "semver": "^7.0.0", "toposort": "^2.0.2", - "uuid": "^9.0.0", - "workspace-tools": "^0.36.3", + "workspace-tools": "^0.38.2", "yargs-parser": "^21.0.0" }, "bin": { @@ -1376,47 +1294,6 @@ "node": ">=14.0.0" } }, - "node_modules/beachball/node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/beachball/node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -1430,20 +1307,22 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -1475,16 +1354,47 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", "peer": true, "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -1497,22 +1407,26 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/cli-cursor": { @@ -1545,6 +1459,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -1565,29 +1480,61 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1597,13 +1544,68 @@ "node": ">= 8" } }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "peer": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1618,6 +1620,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "license": "MIT", "peer": true }, "node_modules/defaults": { @@ -1637,6 +1640,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "peer": true, "dependencies": { "es-define-property": "^1.0.0", @@ -1654,6 +1658,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", "peer": true, "dependencies": { "define-data-property": "^1.0.1", @@ -1671,6 +1676,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -1679,78 +1686,120 @@ } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "license": "Apache-2.0", "peer": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.22.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", - "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "license": "MIT", "peer": true, "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.1", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.5", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -1759,20 +1808,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "peer": true - }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "peer": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -1781,43 +1822,64 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" } }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", "peer": true, "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "license": "MIT", "peer": true, "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", "peer": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -1827,81 +1889,93 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "peer": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz", + "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", + "license": "MIT", "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.36.0", + "@eslint/plugin-kit": "^0.3.5", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^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": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "license": "MIT", "peer": true, "dependencies": { "debug": "^3.2.7", @@ -1913,15 +1987,17 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "peer": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "license": "MIT", "peer": true, "dependencies": { "debug": "^3.2.7" @@ -1939,80 +2015,78 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "peer": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "license": "MIT", "peer": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "peer": true, "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "peer": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-playwright": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-0.12.0.tgz", - "integrity": "sha512-KXuzQjVzca5irMT/7rvzJKsVDGbQr43oQPc8i+SLEBqmfrTxlwMwRqfv9vtZqh4hpU0jmrnA/EOfwtls+5QC1w==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-0.18.0.tgz", + "integrity": "sha512-VLvKOAaDvRTonUeI3J8plXIJQuReXjbjrgDGoNwsiydwdqk3lt+mbzgsBcxJscMJDHc9XgnLVo0nWTiaYHLGYQ==", + "license": "MIT", "peer": true, + "dependencies": { + "globals": "^13.23.0" + }, "peerDependencies": { "eslint": ">=7", - "eslint-plugin-jest": ">=24" + "eslint-plugin-jest": ">=25" }, "peerDependenciesMeta": { "eslint-plugin-jest": { @@ -2020,29 +2094,47 @@ } } }, + "node_modules/eslint-plugin-playwright/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "license": "BSD-2-Clause", "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "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==", + "license": "Apache-2.0", "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -2052,6 +2144,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -2064,71 +2157,11 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "peer": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", "peer": true, "dependencies": { "is-glob": "^4.0.3" @@ -2137,54 +2170,36 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT", "peer": true }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "license": "BSD-2-Clause", "peer": true, "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "license": "BSD-3-Clause", "peer": true, "dependencies": { "estraverse": "^5.1.0" @@ -2197,6 +2212,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", "peer": true, "dependencies": { "estraverse": "^5.2.0" @@ -2209,6 +2225,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=4.0" @@ -2218,6 +2235,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=0.10.0" @@ -2228,6 +2246,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -2250,18 +2269,20 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT", "peer": true }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -2271,18 +2292,20 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT", "peer": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "license": "MIT", "peer": true }, "node_modules/fast-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz", - "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", @@ -2297,29 +2320,32 @@ "peer": true }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "license": "MIT", "peer": true, "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2331,6 +2357,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", "peer": true, "dependencies": { "locate-path": "^6.0.0", @@ -2344,39 +2371,48 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "license": "MIT", "peer": true, "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "license": "ISC", "peer": true }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", "peer": true, "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -2386,18 +2422,13 @@ "node": ">=14.14" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "peer": true - }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2410,21 +2441,25 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -2437,6 +2472,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2446,21 +2482,28 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "peer": true, "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -2469,11 +2512,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "peer": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2482,14 +2540,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -2499,28 +2558,31 @@ } }, "node_modules/git-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", - "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.1.1.tgz", + "integrity": "sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==", "dev": true, + "license": "MIT", "dependencies": { "is-ssh": "^1.4.0", - "parse-url": "^8.1.0" + "parse-url": "^9.2.0" } }, "node_modules/git-url-parse": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.1.tgz", - "integrity": "sha512-PCFJyeSSdtnbfhSNRw9Wk96dDCNx+sogTe4YNXeXSJxt7xz5hvXekuRn9JX7m+Mf4OscCu8h+mtAl3+h5Fo8lQ==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.1.0.tgz", + "integrity": "sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==", "dev": true, + "license": "MIT", "dependencies": { - "git-up": "^7.0.0" + "git-up": "^8.1.0" } }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -2529,27 +2591,27 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "license": "MIT", "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", "peer": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -2562,6 +2624,8 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -2578,12 +2642,13 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "peer": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2593,36 +2658,44 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "license": "MIT", "peer": true }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "peer": true, "engines": { - "node": ">=4" + "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==", + "license": "MIT", "peer": true, "dependencies": { "es-define-property": "^1.0.0" @@ -2632,10 +2705,14 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", "peer": true, + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -2644,9 +2721,10 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -2659,6 +2737,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "peer": true, "dependencies": { "has-symbols": "^1.0.3" @@ -2671,9 +2750,10 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "peer": true, "dependencies": { "function-bind": "^1.1.2" @@ -2687,6 +2767,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -2713,17 +2794,19 @@ "peer": true }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -2739,49 +2822,44 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", "peer": true, "engines": { "node": ">=0.8.19" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "peer": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC", "peer": true }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", "peer": true, "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -2794,28 +2872,54 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", "peer": true, "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2828,6 +2932,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -2837,24 +2942,48 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "peer": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", "peer": true, "dependencies": { - "hasown": "^2.0.0" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2867,22 +2996,60 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -2900,10 +3067,24 @@ "node": ">=8" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -2916,17 +3097,20 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2935,24 +3119,31 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, "engines": { "node": ">= 0.4" }, @@ -2961,12 +3152,13 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -2976,10 +3168,11 @@ } }, "node_modules/is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", + "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", "dev": true, + "license": "MIT", "dependencies": { "protocols": "^2.0.1" } @@ -2989,6 +3182,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2997,12 +3191,14 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3012,12 +3208,15 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", "peer": true, "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3027,12 +3226,13 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", "peer": true, "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -3054,13 +3254,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3070,29 +3304,34 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT", "peer": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, "node_modules/jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3104,13 +3343,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT", "peer": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "1.0.0", @@ -3123,12 +3364,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT", "peer": true }, "node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "license": "MIT", "peer": true, "dependencies": { "minimist": "^1.2.0" @@ -3145,10 +3388,11 @@ "peer": true }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -3160,6 +3404,7 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", "peer": true, "dependencies": { "json-buffer": "3.0.1" @@ -3170,6 +3415,7 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3178,6 +3424,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "license": "MIT", "peer": true, "dependencies": { "prelude-ls": "^1.2.1", @@ -3191,12 +3438,14 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", "peer": true, "dependencies": { "p-locate": "^5.0.0" @@ -3212,105 +3461,31 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "peer": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "license": "MIT", - "peer": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT", - "peer": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } + "license": "MIT", + "peer": true }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "license": "MIT", "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/magic-string": { @@ -3323,26 +3498,39 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -3353,6 +3541,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", "engines": { "node": ">=6" } @@ -3361,6 +3550,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3372,21 +3562,24 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", "peer": true }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT", "peer": true }, "node_modules/npm-run-path": { @@ -3394,6 +3587,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -3402,10 +3596,14 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3414,20 +3612,24 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -3438,14 +3640,16 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3455,27 +3659,31 @@ } }, "node_modules/object.groupby": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", - "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "license": "MIT", "peer": true, "dependencies": { - "array.prototype.filter": "^1.0.3", - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0" + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3484,19 +3692,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "peer": true, - "dependencies": { - "wrappy": "1" - } - }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -3508,17 +3708,18 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "license": "MIT", "peer": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -3548,86 +3749,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "license": "MIT", "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT", - "peer": true - }, - "node_modules/ora/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==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ora/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==", - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/p-graph": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-graph/-/p-graph-1.2.0.tgz", + "integrity": "sha512-tJcm42n9DPoTKtt/m2/KAoSSVuFrxV+p32A+58mtt8ta7sjcUBcOTS7AIPpz2miqEpVNuDYjPzs+3lM/hJWAQQ==", + "dev": true, + "license": "MIT" }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -3642,6 +3793,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", "peer": true, "dependencies": { "p-limit": "^3.0.2" @@ -3657,6 +3809,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -3669,6 +3822,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -3683,45 +3837,44 @@ } }, "node_modules/parse-path": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", - "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", "dev": true, + "license": "MIT", "dependencies": { "protocols": "^2.0.0" } }, "node_modules/parse-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", - "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-9.2.0.tgz", + "integrity": "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==", "dev": true, + "license": "MIT", "dependencies": { + "@types/parse-path": "^7.0.0", "parse-path": "^7.0.0" + }, + "engines": { + "node": ">=14.13.0" } }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", "peer": true, "engines": { "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", "engines": { "node": ">=8" } @@ -3730,20 +3883,31 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT", "peer": true }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -3752,39 +3916,42 @@ } }, "node_modules/playwright": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.42.1.tgz", - "integrity": "sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.1.tgz", + "integrity": "sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.42.1" + "playwright-core": "1.55.1" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" }, "optionalDependencies": { "fsevents": "2.3.2" } }, "node_modules/playwright-core": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.42.1.tgz", - "integrity": "sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.1.tgz", + "integrity": "sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -3794,6 +3961,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.8.0" @@ -3804,6 +3972,7 @@ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -3813,15 +3982,17 @@ } }, "node_modules/protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", + "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==", + "dev": true, + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -3844,7 +4015,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/readable-stream": { "version": "3.6.2", @@ -3861,16 +4033,42 @@ "node": ">= 6" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -3883,6 +4081,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3898,18 +4097,22 @@ } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", "peer": true, "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3918,6 +4121,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", "engines": { "node": ">=4" } @@ -3937,49 +4141,15 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3998,28 +4168,32 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", "peer": true, "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -4050,15 +4224,33 @@ "license": "MIT", "peer": true }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -4068,9 +4260,9 @@ } }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4080,17 +4272,18 @@ } }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", "peer": true, "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4100,12 +4293,28 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", "peer": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "peer": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4115,6 +4324,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -4126,20 +4336,79 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -4151,18 +4420,22 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4177,6 +4450,20 @@ "node": ">= 8" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -4191,6 +4478,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4201,14 +4489,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4218,28 +4511,37 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4249,6 +4551,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4260,6 +4563,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", "peer": true, "engines": { "node": ">=4" @@ -4270,6 +4574,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4278,6 +4583,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -4287,21 +4593,23 @@ } }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "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==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -4310,16 +4618,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "peer": true - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -4331,25 +4634,27 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "license": "MIT", "peer": true, "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "license": "MIT", "peer": true, "dependencies": { "@types/json5": "^0.0.29", @@ -4359,14 +4664,16 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "license": "MIT", "peer": true, "dependencies": { "prelude-ls": "^1.2.1" @@ -4379,6 +4686,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", "peer": true, "engines": { "node": ">=10" @@ -4388,30 +4696,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -4421,17 +4731,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", "peer": true, "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -4441,17 +4753,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", - "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -4461,28 +4774,57 @@ } }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "license": "Apache-2.0", "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.45.0.tgz", + "integrity": "sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.45.0", + "@typescript-eslint/parser": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/utils": "8.45.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4493,6 +4835,7 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -4501,6 +4844,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", "peer": true, "dependencies": { "punycode": "^2.1.0" @@ -4513,19 +4857,6 @@ "license": "MIT", "peer": true }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -4540,6 +4871,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4551,32 +4883,86 @@ } }, "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", "peer": true, "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", "peer": true, "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4585,15 +4971,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/workspace-tools": { - "version": "0.36.4", - "resolved": "https://registry.npmjs.org/workspace-tools/-/workspace-tools-0.36.4.tgz", - "integrity": "sha512-v0UFVvw9BjHtRu2Dau5PEJKkuG8u4jPlpXZQWjSz9XgbSutpPURqtO2P0hp3cVmQVATh8lkMFCewFgJuDnyC/w==", + "version": "0.38.4", + "resolved": "https://registry.npmjs.org/workspace-tools/-/workspace-tools-0.38.4.tgz", + "integrity": "sha512-wCei5WNlhHswuU5tPjTYy4yVd7jnavtRUNbqpiHAmWRPOJtkvUpBQZExrrgFs3h9jdx6Qf6inCDSwjqnXhf+vQ==", "dev": true, + "license": "MIT", "dependencies": { "@yarnpkg/lockfile": "^1.1.0", "fast-glob": "^3.3.1", - "git-url-parse": "^13.0.0", + "git-url-parse": "^16.0.0", "globby": "^11.0.0", "jju": "^1.4.0", "js-yaml": "^4.1.0", @@ -4604,6 +5001,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4616,46 +5014,11 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "peer": true - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } @@ -4664,6 +5027,7 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4681,6 +5045,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { "node": ">=12" } @@ -4689,6 +5054,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -4708,12 +5074,9 @@ "version": "9.0.7", "license": "MIT", "peerDependencies": { - "@angular-eslint/builder": "^18.4.3", - "@angular-eslint/eslint-plugin": "^18.4.3", - "@angular-eslint/eslint-plugin-template": "^18.4.3", - "@angular-eslint/schematics": "^18.4.3", - "@angular-eslint/template-parser": "^18.4.3", - "@ni/eslint-config-typescript": "^4.4.4" + "@ni/eslint-config-javascript": "^4.4.0", + "@ni/eslint-config-typescript": "^4.4.4", + "angular-eslint": "^18.4.3" } }, "packages/eslint-config-javascript": { @@ -4721,9 +5084,10 @@ "version": "4.4.0", "license": "MIT", "peerDependencies": { - "@stylistic/eslint-plugin": "^3.0.0", - "eslint": "^8.57.0", - "eslint-plugin-import": "^2.29.1" + "@stylistic/eslint-plugin": "^5.4.0", + "eslint": "^9.36.0", + "eslint-plugin-import": "^2.32.0", + "globals": "^14.0.0" } }, "packages/eslint-config-playwright": { @@ -4731,8 +5095,9 @@ "version": "1.1.5", "license": "MIT", "peerDependencies": { + "@ni/eslint-config-javascript": "^4.4.0", "@ni/eslint-config-typescript": "^4.4.4", - "eslint-plugin-playwright": "^0.12.0" + "eslint-plugin-playwright": "^0.18.0" } }, "packages/eslint-config-typescript": { @@ -4741,8 +5106,8 @@ "license": "MIT", "peerDependencies": { "@ni/eslint-config-javascript": "^4.4.0", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0" + "eslint-plugin-import": "^2.32.0", + "typescript-eslint": "^8.45.0" } }, "tests/angular": { @@ -4755,7 +5120,8 @@ "@types/jasmine": "^5.1.4" }, "peerDependencies": { - "@ni/eslint-config-angular": "*" + "@ni/eslint-config-angular": "*", + "@ni/eslint-config-javascript": "*" } }, "tests/javascript": { @@ -4772,16 +5138,7 @@ "@playwright/test": "^1.42.1" }, "peerDependencies": { - "@ni/eslint-config-playwright": "*" - } - }, - "tests/playwright-requiring-type-checking": { - "name": "@ni/playwright-requiring-type-checking-test", - "version": "1.0.0", - "devDependencies": { - "@playwright/test": "^1.42.1" - }, - "peerDependencies": { + "@ni/eslint-config-javascript": "*", "@ni/eslint-config-playwright": "*" } }, @@ -4792,26 +5149,20 @@ "yargs": "^17.7.2" }, "peerDependencies": { - "@angular-eslint/eslint-plugin": "^18.4.3", "@ni/angular-test": "*", "@ni/eslint-config-angular": "*", + "@ni/eslint-config-javascript": "*", "@ni/javascript-test": "*", - "@ni/typescript-requiring-type-checking-test": "*", "@ni/typescript-test": "*", - "eslint": "^8.57.0" + "angular-eslint": "18.4.3", + "eslint": "^9.35.0" } }, "tests/typescript": { "name": "@ni/typescript-test", "version": "1.0.0", "peerDependencies": { - "@ni/eslint-config-typescript": "*" - } - }, - "tests/typescript-requiring-type-checking": { - "name": "@ni/typescript-requiring-type-checking-test", - "version": "1.0.0", - "peerDependencies": { + "@ni/eslint-config-javascript": "*", "@ni/eslint-config-typescript": "*" } } diff --git a/package.json b/package.json index cd039f4..ab38d3b 100644 --- a/package.json +++ b/package.json @@ -41,16 +41,14 @@ "packages/eslint-config-playwright", "tests/javascript", "tests/typescript", - "tests/typescript-requiring-type-checking", "tests/angular", "tests/playwright", - "tests/playwright-requiring-type-checking", "tests/print-evaluated-rules" ], "devDependencies": { "beachball": "^2.41.0" }, "peerDependencies": { - "typescript": "~4.8.2" + "typescript": "~5.4.5" } } \ No newline at end of file diff --git a/packages/eslint-config-angular/.eslintrc.js b/packages/eslint-config-angular/.eslintrc.js deleted file mode 100644 index b61604d..0000000 --- a/packages/eslint-config-angular/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-javascript' -}; diff --git a/packages/eslint-config-angular/LICENSE b/packages/eslint-config-angular/LICENSE index ffe640e..2cce61a 100644 --- a/packages/eslint-config-angular/LICENSE +++ b/packages/eslint-config-angular/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 National Instruments Corporation +Copyright (c) 2025 National Instruments Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/eslint-config-angular/README.md b/packages/eslint-config-angular/README.md index 9342e7c..7b69029 100644 --- a/packages/eslint-config-angular/README.md +++ b/packages/eslint-config-angular/README.md @@ -13,4 +13,4 @@ See the [ni/javascript-styleguide](https://github.com/ni/javascript-styleguide#r ## License -[MIT (c) 2021 National Instruments Corporation](./LICENSE) +[MIT (c) 2025 National Instruments Corporation](./LICENSE) diff --git a/packages/eslint-config-angular/eslint.config.js b/packages/eslint-config-angular/eslint.config.js new file mode 100644 index 0000000..47dccba --- /dev/null +++ b/packages/eslint-config-angular/eslint.config.js @@ -0,0 +1,14 @@ +import { defineConfig } from 'eslint/config'; + +import { javascriptConfig, importNodeEsmConfig } from '@ni/eslint-config-javascript'; + +export default defineConfig([ + javascriptConfig, + importNodeEsmConfig, + { + files: ['tools/*.js'], + rules: { + 'no-console': 'off' + } + } +]); diff --git a/packages/eslint-config-angular/index.js b/packages/eslint-config-angular/index.js index d74c684..42bb8b9 100644 --- a/packages/eslint-config-angular/index.js +++ b/packages/eslint-config-angular/index.js @@ -1,139 +1,150 @@ -module.exports = { - extends: [ - 'plugin:@angular-eslint/recommended', - 'plugin:@angular-eslint/template/process-inline-templates', - '@ni/eslint-config-typescript' - ], - rules: { - /* - Overrides to Angular recommended rules: - https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/src/configs/recommended.json - */ - - '@angular-eslint/no-host-metadata-property': 'error', - - /* - '@angular-eslint/no-input-rename' rule notes: - Disallow renaming directive inputs generally. Use an inline comment to disable the rule for exceptions where the - context changes significantly, or disable the rule for files of directives that need to prefix their inputs to avoid conflicts. - */ - - /* - '@angular-eslint/no-output-rename' rule notes: - Disallow renaming directive outputs generally. Use an inline comment to disable the rule for exceptions where the - context changes significantly, or disable the rule for projects that use the dollar sign postfix for EventEmitters. - */ - - /* - Upgrade the recommended rule configuration from a warning to an error. - */ - '@angular-eslint/use-lifecycle-interface': 'error', - - // We intended to use the default from @typescript-eslint/recommended, but we adopted this override accidentally. - // See https://github.com/ni/javascript-styleguide/issues/139 - '@typescript-eslint/no-inferrable-types': [ - 'error', - { ignoreParameters: true } - ], - - /* - Overrides to Angular rules outside of the recommended configuration: - */ - - /* - Extract templates and styles into a separate files. In rare cases, allow for inline templates of a few - elements with attributes and three minimal CSS declarations. - */ - '@angular-eslint/component-max-inline-declarations': ['error', { animations: 15, styles: 15, template: 15 }], - - /* [application-prefix] */ - '@angular-eslint/component-selector': 'off', - - '@angular-eslint/contextual-decorator': 'error', - - /* - Do not require a directive to select an element or attribute exclusively, because there are valid use cases - for both. - */ - '@angular-eslint/directive-selector': 'off', - - '@angular-eslint/no-attribute-decorator': 'error', - - /* - `forwardRef` is needed for certain Dependency Injection use cases and abuse is not widespread so its use is permitted. - */ - '@angular-eslint/no-forward-ref': 'off', - - /* - We don't yet have a general naming conventions so enforcing a convention just for inputs would be inconsistent. - */ - '@angular-eslint/no-input-prefix': 'off', - - '@angular-eslint/no-lifecycle-call': 'error', - - '@angular-eslint/no-pipe-impure': 'error', - - '@angular-eslint/no-queries-metadata-property': 'error', - - /* [application-prefix] */ - '@angular-eslint/pipe-prefix': 'error', - - /* - This rule is for specific applications such as libraries that want to minimize global dependencies or parts - of an application that have specific performance goals. - */ - '@angular-eslint/prefer-on-push-component-change-detection': 'off', - - /* - While marking @Output properties as readonly does better capture the intention of how they should generally be used, - it does not appear that there is wide-spread abuse of not marking @Output properties readonly. Marking them readonly - would deviate from the style given in most Angular docs and examples so this rule is not enabled. - */ - '@angular-eslint/prefer-output-readonly': 'off', - - '@angular-eslint/relative-url-prefix': 'error', - - '@angular-eslint/runtime-localize': 'error', - - /* - Generally not expected in practice to sort NgModule metadata arrays. Projects may enable if desired. - */ - '@angular-eslint/sort-ngmodule-metadata-arrays': 'off', - - '@angular-eslint/use-component-selector': 'error', - - '@angular-eslint/use-component-view-encapsulation': 'error', - - /* - Provide root services with the application root injector in the Injectable decorator. However, NgModule - providers are frequently preferred for non-root, module scoped services in applications where tree-shaking - is usually irrelevant. Additionally, libraries commonly export services from modules in order to manage - dependencies. Consider enabling this rule for libraries to ensure proper tree-shaking when appropriate. - */ - '@angular-eslint/use-injectable-provided-in': 'off' +import { defineConfig } from 'eslint/config'; +import { typescriptConfig } from '@ni/eslint-config-typescript'; +import angular from 'angular-eslint'; + +export { angularTemplateConfig } from './lib/template.js'; +export { ignoreAttributes } from './lib/template-options.js'; + +export const angularTypescriptConfig = defineConfig([ + angular.configs.tsRecommended, + typescriptConfig, + { + processor: angular.processInlineTemplates, + rules: { + /* + Overrides to Angular recommended rules: + https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/src/configs/recommended.json + */ + + '@angular-eslint/no-host-metadata-property': 'error', + + /* + '@angular-eslint/no-input-rename' rule notes: + Disallow renaming directive inputs generally. Use an inline comment to disable the rule for exceptions where the + context changes significantly, or disable the rule for files of directives that need to prefix their inputs to avoid conflicts. + */ + + /* + '@angular-eslint/no-output-rename' rule notes: + Disallow renaming directive outputs generally. Use an inline comment to disable the rule for exceptions where the + context changes significantly, or disable the rule for projects that use the dollar sign postfix for EventEmitters. + */ + + /* + Upgrade the recommended rule configuration from a warning to an error. + */ + '@angular-eslint/use-lifecycle-interface': 'error', + + // We intended to use the default from @typescript-eslint/recommended, but we adopted this override accidentally. + // See https://github.com/ni/javascript-styleguide/issues/139 + '@typescript-eslint/no-inferrable-types': [ + 'error', + { ignoreParameters: true } + ], + + /* + Overrides to Angular rules outside of the recommended configuration: + */ + + /* + Extract templates and styles into a separate files. In rare cases, allow for inline templates of a few + elements with attributes and three minimal CSS declarations. + */ + '@angular-eslint/component-max-inline-declarations': ['error', { animations: 15, styles: 15, template: 15 }], + + /* [application-prefix] */ + '@angular-eslint/component-selector': 'off', + + '@angular-eslint/contextual-decorator': 'error', + + /* + Do not require a directive to select an element or attribute exclusively, because there are valid use cases + for both. + */ + '@angular-eslint/directive-selector': 'off', + + '@angular-eslint/no-attribute-decorator': 'error', + + /* + `forwardRef` is needed for certain Dependency Injection use cases and abuse is not widespread so its use is permitted. + */ + '@angular-eslint/no-forward-ref': 'off', + + /* + We don't yet have a general naming conventions so enforcing a convention just for inputs would be inconsistent. + */ + '@angular-eslint/no-input-prefix': 'off', + + '@angular-eslint/no-lifecycle-call': 'error', + + '@angular-eslint/no-pipe-impure': 'error', + + '@angular-eslint/no-queries-metadata-property': 'error', + + /* [application-prefix] */ + '@angular-eslint/pipe-prefix': 'error', + + /* + This rule is for specific applications such as libraries that want to minimize global dependencies or parts + of an application that have specific performance goals. + */ + '@angular-eslint/prefer-on-push-component-change-detection': 'off', + + /* + While marking @Output properties as readonly does better capture the intention of how they should generally be used, + it does not appear that there is wide-spread abuse of not marking @Output properties readonly. Marking them readonly + would deviate from the style given in most Angular docs and examples so this rule is not enabled. + */ + '@angular-eslint/prefer-output-readonly': 'off', + + '@angular-eslint/relative-url-prefix': 'error', + + '@angular-eslint/runtime-localize': 'error', + + /* + Generally not expected in practice to sort NgModule metadata arrays. Projects may enable if desired. + */ + '@angular-eslint/sort-ngmodule-metadata-arrays': 'off', + + '@angular-eslint/use-component-selector': 'error', + + '@angular-eslint/use-component-view-encapsulation': 'error', + + /* + Provide root services with the application root injector in the Injectable decorator. However, NgModule + providers are frequently preferred for non-root, module scoped services in applications where tree-shaking + is usually irrelevant. Additionally, libraries commonly export services from modules in order to manage + dependencies. Consider enabling this rule for libraries to ensure proper tree-shaking when appropriate. + */ + '@angular-eslint/use-injectable-provided-in': 'off' + } }, - overrides: [ - { - files: ['*.spec.ts'], - rules: { - /* - Tests often define helper components and it improves test readability if they are in the same - file as the tests. - */ - '@angular-eslint/component-max-inline-declarations': 'off', - - /* - Components defined in tests are typically only used within a single test file so don't need. - a compontent selector. - */ - '@angular-eslint/use-component-selector': 'off', - - /* - Tests often define additional classes as mocks or helper components and it improves test readability - if those are in the same file as the tests. - */ - 'max-classes-per-file': 'off' - } - }, - ] -}; + { + files: ['**/*.spec.ts'], + rules: { + /* + Tests often define helper components and it improves test readability if they are in the same + file as the tests. + */ + '@angular-eslint/component-max-inline-declarations': 'off', + + /* + Components defined in tests are typically only used within a single test file so don't need. + a compontent selector. + */ + '@angular-eslint/use-component-selector': 'off', + + /* + Tests often define additional classes as mocks or helper components and it improves test readability + if those are in the same file as the tests. + */ + 'max-classes-per-file': 'off', + + /* + Spies used by Angular application tests result in a significant number of + unbound methods so this rule is disabled for test specs in Angular projects. + */ + '@typescript-eslint/unbound-method': 'off', + } + } +]); diff --git a/packages/eslint-config-angular/template/options.js b/packages/eslint-config-angular/lib/template-options.js similarity index 97% rename from packages/eslint-config-angular/template/options.js rename to packages/eslint-config-angular/lib/template-options.js index 79fd42f..3db567a 100644 --- a/packages/eslint-config-angular/template/options.js +++ b/packages/eslint-config-angular/lib/template-options.js @@ -139,11 +139,7 @@ const ignoreAttributeSets = { ] }; -const ignoreAttributes = { +export const ignoreAttributes = { ...ignoreAttributeSets, all: Object.values(ignoreAttributeSets).flat() }; - -module.exports = { - ignoreAttributes -}; diff --git a/packages/eslint-config-angular/lib/template.js b/packages/eslint-config-angular/lib/template.js new file mode 100644 index 0000000..73e67f1 --- /dev/null +++ b/packages/eslint-config-angular/lib/template.js @@ -0,0 +1,111 @@ +import { defineConfig } from 'eslint/config'; +import angularTemplate from 'angular-eslint'; +import { ignoreAttributes } from './template-options.js'; + +export const angularTemplateConfig = defineConfig([ + angularTemplate.configs.templateRecommended, + { + rules: { + /* + Overrides to Angular template recommended rules: + https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/src/configs/recommended.json + */ + + /* + Angular template accessibility rules: + https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/src/configs/accessibility.json + */ + + /* [accessibility] */ + '@angular-eslint/template/alt-text': 'off', + + /* [accessibility] */ + '@angular-eslint/template/click-events-have-key-events': 'off', + + /* [accessibility] */ + '@angular-eslint/template/elements-content': 'off', + + /* [accessibility] */ + '@angular-eslint/template/interactive-supports-focus': 'off', + + /* [accessibility] */ + '@angular-eslint/template/label-has-associated-control': 'off', + + /* [accessibility] */ + '@angular-eslint/template/mouse-events-have-key-events': 'off', + + /* [accessibility] */ + '@angular-eslint/template/no-autofocus': 'off', + + /* [accessibility] */ + '@angular-eslint/template/no-distracting-elements': 'error', + + /* [accessibility] */ + '@angular-eslint/template/no-positive-tabindex': 'off', + + /* [accessibility] */ + '@angular-eslint/template/role-has-required-aria': 'off', + + /* [accessibility] */ + '@angular-eslint/template/table-scope': 'off', + + /* [accessibility] */ + '@angular-eslint/template/valid-aria': 'error', + + /* + Overrides to Angular rules outside of the recommended configuration: + */ + + '@angular-eslint/template/conditional-complexity': 'error', + + /* + In practice, independent paths in templates tend to be parallel rather than linear. Templates are + declarative whereas procedural code is more likely to result in cyclomatic complexity. While this rule may + be applicable to specific features, a template should not result in an error simply because it exceeds the + number of statements allotted by this rule. + */ + '@angular-eslint/template/cyclomatic-complexity': 'off', + + /* + Enable this rule by default to enforce internationalization for existing applications that are localized + and new applications in the chance that they'll need to be localized in the future. Disable this rule + if an application will never be localized. + */ + '@angular-eslint/template/i18n': [ + 'error', + { + checkId: false, + ignoreAttributes: [...ignoreAttributes.all] + } + ], + + '@angular-eslint/template/no-any': 'error', + + /* + When considering efficient bindings use memoization and pipes. Avoid heavy array iteratoration, nested + function calls, and calls into uncontrolled third-party imports. However, there are many cases where a + function call significantly improves template readability and has no impact on performance—where a 1ms + execution is imperceivable for users. + */ + '@angular-eslint/template/no-call-expression': 'off', + + '@angular-eslint/template/no-duplicate-attributes': 'error', + + /* + Providing a `trackBy` function in `ngFor` loops can improve performance in specific cases where Angular can't track references, but it's overkill to require it for every `ngFor` so this rule is disabled. + */ + '@angular-eslint/template/use-track-by-function': 'off' + } + }, + { + // Ignore inline templates in tests using the inline template naming convention + // See naming details: https://github.com/angular-eslint/angular-eslint/releases/tag/v14.0.0 + files: ['**/*.spec.ts*.html'], + rules: { + /* + Tests often define helper components that don't need to be marked for i18n. + */ + '@angular-eslint/template/i18n': 'off' + } + } +]); diff --git a/packages/eslint-config-angular/package.json b/packages/eslint-config-angular/package.json index 8d81a1b..b75d196 100644 --- a/packages/eslint-config-angular/package.json +++ b/packages/eslint-config-angular/package.json @@ -1,42 +1,43 @@ { - "name": "@ni/eslint-config-angular", - "version": "9.0.7", - "description": "NI's Angular ESLint Shareable Config", - "main": "index.js", - "scripts": { - "lint": "eslint .", - "pack": "npm pack", - "print-available-rules": "node tools/print-available-rules" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ni/javascript-styleguide.git" - }, - "keywords": [ - "eslint", - "eslintconfig", - "ni" - ], - "author": "National Instruments", - "license": "MIT", - "bugs": { - "url": "https://github.com/ni/javascript-styleguide/issues" - }, - "homepage": "https://github.com/ni/javascript-styleguide#readme", - "publishConfig": { - "access": "public" - }, - "files": [ - "**/*.js", - "!/.*.js", - "!/tools" - ], - "peerDependencies": { - "@angular-eslint/builder": "^18.4.3", - "@angular-eslint/eslint-plugin": "^18.4.3", - "@angular-eslint/eslint-plugin-template": "^18.4.3", - "@angular-eslint/schematics": "^18.4.3", - "@angular-eslint/template-parser": "^18.4.3", - "@ni/eslint-config-typescript": "^4.4.4" - } + "name": "@ni/eslint-config-angular", + "version": "9.0.7", + "description": "NI's Angular ESLint Shareable Config", + "type": "module", + "main": "index.js", + "exports": { + ".": "./index.js" + }, + "scripts": { + "lint": "eslint .", + "pack": "npm pack", + "print-available-rules": "node tools/print-available-rules" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ni/javascript-styleguide.git" + }, + "keywords": [ + "eslint", + "eslintconfig", + "ni" + ], + "author": "National Instruments", + "license": "MIT", + "bugs": { + "url": "https://github.com/ni/javascript-styleguide/issues" + }, + "homepage": "https://github.com/ni/javascript-styleguide#readme", + "publishConfig": { + "access": "public" + }, + "files": [ + "**/*.js", + "!/tools/*", + "!/eslint.config.js" + ], + "peerDependencies": { + "angular-eslint": "^18.4.3", + "@ni/eslint-config-typescript": "^4.4.4", + "@ni/eslint-config-javascript": "^4.4.0" + } } diff --git a/packages/eslint-config-angular/requiring-type-checking.js b/packages/eslint-config-angular/requiring-type-checking.js deleted file mode 100644 index a36883e..0000000 --- a/packages/eslint-config-angular/requiring-type-checking.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - extends: [ - '@ni/eslint-config-typescript/requiring-type-checking' - ], - parser: '@typescript-eslint/parser', - overrides: [ - { - files: ['*.spec.ts'], - rules: { - /* - Spies used by Angular application tests result in a significant number of - unbound methods so this rule is disabled for test specs in Angular projects. - */ - '@typescript-eslint/unbound-method': 'off', - } - }, - ] -}; diff --git a/packages/eslint-config-angular/template.js b/packages/eslint-config-angular/template.js deleted file mode 100644 index 3a07418..0000000 --- a/packages/eslint-config-angular/template.js +++ /dev/null @@ -1,111 +0,0 @@ -const { ignoreAttributes } = require('./template/options'); - -module.exports = { - extends: [ - 'plugin:@angular-eslint/template/recommended' - ], - rules: { - /* - Overrides to Angular template recommended rules: - https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/src/configs/recommended.json - */ - - /* - Angular template accessibility rules: - https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/src/configs/accessibility.json - */ - - /* [accessibility] */ - '@angular-eslint/template/alt-text': 'off', - - /* [accessibility] */ - '@angular-eslint/template/click-events-have-key-events': 'off', - - /* [accessibility] */ - '@angular-eslint/template/elements-content': 'off', - - /* [accessibility] */ - '@angular-eslint/template/interactive-supports-focus': 'off', - - /* [accessibility] */ - '@angular-eslint/template/label-has-associated-control': 'off', - - /* [accessibility] */ - '@angular-eslint/template/mouse-events-have-key-events': 'off', - - /* [accessibility] */ - '@angular-eslint/template/no-autofocus': 'off', - - /* [accessibility] */ - '@angular-eslint/template/no-distracting-elements': 'error', - - /* [accessibility] */ - '@angular-eslint/template/no-positive-tabindex': 'off', - - /* [accessibility] */ - '@angular-eslint/template/role-has-required-aria': 'off', - - /* [accessibility] */ - '@angular-eslint/template/table-scope': 'off', - - /* [accessibility] */ - '@angular-eslint/template/valid-aria': 'error', - - /* - Overrides to Angular rules outside of the recommended configuration: - */ - - '@angular-eslint/template/conditional-complexity': 'error', - - /* - In practice, independent paths in templates tend to be parallel rather than linear. Templates are - declarative whereas procedural code is more likely to result in cyclomatic complexity. While this rule may - be applicable to specific features, a template should not result in an error simply because it exceeds the - number of statements allotted by this rule. - */ - '@angular-eslint/template/cyclomatic-complexity': 'off', - - /* - Enable this rule by default to enforce internationalization for existing applications that are localized - and new applications in the chance that they'll need to be localized in the future. Disable this rule - if an application will never be localized. - */ - '@angular-eslint/template/i18n': [ - 'error', - { - checkId: false, - ignoreAttributes: [...ignoreAttributes.all] - } - ], - - '@angular-eslint/template/no-any': 'error', - - /* - When considering efficient bindings use memoization and pipes. Avoid heavy array iteratoration, nested - function calls, and calls into uncontrolled third-party imports. However, there are many cases where a - function call significantly improves template readability and has no impact on performance—where a 1ms - execution is imperceivable for users. - */ - '@angular-eslint/template/no-call-expression': 'off', - - '@angular-eslint/template/no-duplicate-attributes': 'error', - - /* - Providing a `trackBy` function in `ngFor` loops can improve performance in specific cases where Angular can't track references, but it's overkill to require it for every `ngFor` so this rule is disabled. - */ - '@angular-eslint/template/use-track-by-function': 'off' - }, - overrides: [ - { - // Ignore inline templates in tests using the inline template naming convention - // See naming details: https://github.com/angular-eslint/angular-eslint/releases/tag/v14.0.0 - files: ['*.spec.ts*.html'], - rules: { - /* - Tests often define helper components that don't need to be marked for i18n. - */ - '@angular-eslint/template/i18n': 'off' - } - }, - ] -}; diff --git a/packages/eslint-config-angular/tools/print-available-rules.js b/packages/eslint-config-angular/tools/print-available-rules.js index 503a9af..7debb27 100644 --- a/packages/eslint-config-angular/tools/print-available-rules.js +++ b/packages/eslint-config-angular/tools/print-available-rules.js @@ -1,28 +1,30 @@ -const plugin = require('@angular-eslint/eslint-plugin'); -const templatePlugin = require('@angular-eslint/eslint-plugin-template'); +import angularPlugin from 'angular-eslint'; -const isTrue = val => val !== undefined && val !== false; -const recommended = rule => isTrue(rule.meta.docs.recommended); -const print = (keys, prefix = '@angular-eslint') => { +const print = keys => { const results = {}; keys.forEach(key => { - results[`${prefix}/${key}`] = ''; + results[`${key}`] = ''; }); - global.console.log(JSON.stringify(results, null, 4)); + console.log(JSON.stringify(results, null, 4)); }; -const sortedRules = Object.keys(plugin.rules).sort(); -const sortedTemplateRules = Object.keys(templatePlugin.rules).sort(); +const getRules = (configs, configName) => { + const config = configs.find(cfg => cfg.name === configName); + return config ? Object.keys(config.rules).sort() : {}; +}; + +const angularTsRecommended = getRules(angularPlugin.configs.tsRecommended, 'angular-eslint/ts-recommended'); +const angularTemplateRecommended = getRules(angularPlugin.configs.templateRecommended, 'angular-eslint/template-recommended'); +const angularTsAll = getRules(angularPlugin.configs.tsAll, 'angular-eslint/ts-all'); +const angularTemplateAll = getRules(angularPlugin.configs.templateAll, 'angular-eslint/template-all'); -const angular = sortedRules.filter(key => !recommended(plugin.rules[key])); -const angularRecommended = sortedRules.filter(key => recommended(plugin.rules[key])); -const template = sortedTemplateRules.filter(key => !recommended(templatePlugin.rules[key])); -const templateRecommended = sortedTemplateRules.filter(key => recommended(templatePlugin.rules[key])); +const angular = angularTsAll.filter(key => !angularTsRecommended.includes(key)); +const template = angularTemplateAll.filter(key => !angularTemplateRecommended.includes(key)); -global.console.log('Angular Recommended:'); -print(angularRecommended); -global.console.log('Remaining Angular Rules:'); +console.log('Angular Recommended:'); +print(angularTsRecommended); +console.log('Remaining Angular Rules:'); print(angular); -global.console.log('Angular Template Recommended:'); -print(templateRecommended, '@angular-eslint/template'); -global.console.log('Remaining Angular Template Rules:'); +console.log('Angular Template Recommended:'); +print(angularTemplateRecommended, '@angular-eslint/template'); +console.log('Remaining Angular Template Rules:'); print(template, '@angular-eslint/template'); diff --git a/packages/eslint-config-javascript/.eslintrc.js b/packages/eslint-config-javascript/.eslintrc.js deleted file mode 100644 index b61604d..0000000 --- a/packages/eslint-config-javascript/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-javascript' -}; diff --git a/packages/eslint-config-javascript/LICENSE b/packages/eslint-config-javascript/LICENSE index ffe640e..2cce61a 100644 --- a/packages/eslint-config-javascript/LICENSE +++ b/packages/eslint-config-javascript/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 National Instruments Corporation +Copyright (c) 2025 National Instruments Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/eslint-config-javascript/README.md b/packages/eslint-config-javascript/README.md index 643d775..04ed9f6 100644 --- a/packages/eslint-config-javascript/README.md +++ b/packages/eslint-config-javascript/README.md @@ -13,4 +13,4 @@ See the [ni/javascript-styleguide](https://github.com/ni/javascript-styleguide#r ## License -[MIT (c) 2021 National Instruments Corporation](./LICENSE) +[MIT (c) 2025 National Instruments Corporation](./LICENSE) diff --git a/packages/eslint-config-javascript/eslint.config.js b/packages/eslint-config-javascript/eslint.config.js new file mode 100644 index 0000000..822adf5 --- /dev/null +++ b/packages/eslint-config-javascript/eslint.config.js @@ -0,0 +1,8 @@ +import { defineConfig } from 'eslint/config'; + +import { javascriptConfig, importNodeEsmConfig } from './index.js'; + +export default defineConfig([ + javascriptConfig, + importNodeEsmConfig, +]); diff --git a/packages/eslint-config-javascript/index.js b/packages/eslint-config-javascript/index.js index 7f61bb3..6536e27 100644 --- a/packages/eslint-config-javascript/index.js +++ b/packages/eslint-config-javascript/index.js @@ -1,18 +1,38 @@ -module.exports = { - extends: [ - require.resolve('./rules/best-practices'), - require.resolve('./rules/errors'), - require.resolve('./rules/node'), - require.resolve('./rules/style'), - require.resolve('./rules/variables'), - require.resolve('./rules/es6'), - require.resolve('./rules/imports'), - require.resolve('./rules/strict'), - 'plugin:@stylistic/disable-legacy', - ], - plugins: ['@stylistic'], - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module', - } -}; \ No newline at end of file +import { defineConfig } from 'eslint/config'; +import importPlugin from 'eslint-plugin-import'; +import stylisticPlugin from '@stylistic/eslint-plugin'; +import globals from 'globals'; +import { bestPractices } from './lib/best-practices.js'; +import { errors } from './lib/errors.js'; +import { node } from './lib/node.js'; +import { style } from './lib/style.js'; +import { variables } from './lib/variables.js'; +import { es6 } from './lib/es6.js'; +import { imports } from './lib/imports.js'; +import { strict } from './lib/strict.js'; + +export { importNodeEsmConfig } from './lib/import-node-esm.js'; +export const javascriptConfig = defineConfig([ + stylisticPlugin.configs['disable-legacy'], + bestPractices, + errors, + node, + style, + variables, + es6, + imports, + strict, + { + plugins: { + '@stylistic': stylisticPlugin, + import: importPlugin, + }, + languageOptions: { + ecmaVersion: 2022, + sourceType: 'module', + globals: { + ...globals.node + } + } + }, +]); diff --git a/packages/eslint-config-javascript/rules/best-practices.js b/packages/eslint-config-javascript/lib/best-practices.js similarity index 99% rename from packages/eslint-config-javascript/rules/best-practices.js rename to packages/eslint-config-javascript/lib/best-practices.js index 1a8ab52..f5c9a6c 100644 --- a/packages/eslint-config-javascript/rules/best-practices.js +++ b/packages/eslint-config-javascript/lib/best-practices.js @@ -1,4 +1,6 @@ -module.exports = { +import { defineConfig } from 'eslint/config'; + +export const bestPractices = defineConfig([{ rules: { /* enforces getter/setter pairs in objects @@ -587,4 +589,4 @@ module.exports = { */ yoda: 'error' } -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-javascript/rules/errors.js b/packages/eslint-config-javascript/lib/errors.js similarity index 99% rename from packages/eslint-config-javascript/rules/errors.js rename to packages/eslint-config-javascript/lib/errors.js index 2b50e5f..c73e2c7 100644 --- a/packages/eslint-config-javascript/rules/errors.js +++ b/packages/eslint-config-javascript/lib/errors.js @@ -1,4 +1,6 @@ -module.exports = { +import { defineConfig } from 'eslint/config'; + +export const errors = defineConfig([{ rules: { /* Enforce “for” loop update clause moving the counter in the right direction @@ -283,4 +285,4 @@ module.exports = { */ 'valid-typeof': ['error', { requireStringLiterals: true }], } -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-javascript/rules/es6.js b/packages/eslint-config-javascript/lib/es6.js similarity index 96% rename from packages/eslint-config-javascript/rules/es6.js rename to packages/eslint-config-javascript/lib/es6.js index 0e1a2a7..e6f0a58 100644 --- a/packages/eslint-config-javascript/rules/es6.js +++ b/packages/eslint-config-javascript/lib/es6.js @@ -1,16 +1,6 @@ -module.exports = { - env: { - es6: true - }, - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - ecmaFeatures: { - generators: false, - objectLiteralDuplicateProperties: false - } - }, +import { defineConfig } from 'eslint/config'; +export const es6 = defineConfig([{ rules: { /* Developers should consider readability, and no braces may be preferred when unnecessary. However, this rule @@ -237,4 +227,4 @@ module.exports = { */ '@stylistic/yield-star-spacing': ['error', 'after'] } -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-javascript/lib/import-node-esm.js b/packages/eslint-config-javascript/lib/import-node-esm.js new file mode 100644 index 0000000..113f03b --- /dev/null +++ b/packages/eslint-config-javascript/lib/import-node-esm.js @@ -0,0 +1,21 @@ +import { defineConfig } from 'eslint/config'; + +/** + * Configuration overrides to support node esm resolution + * See: https://nodejs.org/api/esm.html#terminology + */ +export const importNodeEsmConfig = defineConfig([ + { + rules: { + // node esm relative resolution requires extensions + 'import/extensions': 'off', + // node esm relative resolution requires full path name + 'import/no-useless-path-segments': 'off', + // eslint-plugin-import doesn't know how to resolve entry points in packages + // that use modern export maps in package.json. + // https://github.com/typescript-eslint/typescript-eslint/issues/7565 + // https://github.com/import-js/eslint-plugin-import/issues/2703 + 'import/no-unresolved': 'off', + } + } +]); diff --git a/packages/eslint-config-javascript/rules/imports.js b/packages/eslint-config-javascript/lib/imports.js similarity index 96% rename from packages/eslint-config-javascript/rules/imports.js rename to packages/eslint-config-javascript/lib/imports.js index 0e4c19c..e205078 100644 --- a/packages/eslint-config-javascript/rules/imports.js +++ b/packages/eslint-config-javascript/lib/imports.js @@ -1,15 +1,7 @@ -module.exports = { - env: { - es6: true - }, - parserOptions: { - ecmaVersion: 6, - sourceType: 'module' - }, - plugins: [ - 'import' - ], +import { defineConfig } from 'eslint/config'; +import { importNodeEsmConfig } from '../lib/import-node-esm.js'; +export const imports = defineConfig([{ settings: { 'import/resolver': { node: { @@ -28,7 +20,6 @@ module.exports = { '\\.(coffee|scss|css|less|hbs|svg|json)$', ], }, - rules: { /* Static analysis: @@ -113,7 +104,8 @@ module.exports = { '**/protractor.conf.js', // protractor config '**/protractor.conf.*.js', // protractor config '**/karma.conf.js', // karma config - '**/.eslintrc.js' // eslint config + '**/.eslintrc.js', // legacy eslint config + '**/eslint.config.js', // eslint config ], optionalDependencies: false, }], @@ -386,5 +378,15 @@ module.exports = { https://github.com/import-js/eslint-plugin-import/blob/d5fc8b670dc8e6903dbb7b0894452f60c03089f5/docs/rules/no-empty-named-blocks.md */ 'import/no-empty-named-blocks': 'off', - }, -}; \ No newline at end of file + } +}, { + /* + Eslint configuration file specific settings + */ + files: ['eslint.config.js', 'eslint.config.mjs'], + extends: [importNodeEsmConfig], + rules: { + // eslint config files require a top-level default export + 'import/no-default-export': 'off', + } +}]); diff --git a/packages/eslint-config-javascript/rules/node.js b/packages/eslint-config-javascript/lib/node.js similarity index 94% rename from packages/eslint-config-javascript/rules/node.js rename to packages/eslint-config-javascript/lib/node.js index eaa1406..e106243 100644 --- a/packages/eslint-config-javascript/rules/node.js +++ b/packages/eslint-config-javascript/lib/node.js @@ -1,8 +1,6 @@ -module.exports = { - env: { - node: true - }, +import { defineConfig } from 'eslint/config'; +export const node = defineConfig([{ rules: { /* enforce return after a callback @@ -62,4 +60,4 @@ module.exports = { */ 'no-sync': 'off', } -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-javascript/rules/strict.js b/packages/eslint-config-javascript/lib/strict.js similarity index 58% rename from packages/eslint-config-javascript/rules/strict.js rename to packages/eslint-config-javascript/lib/strict.js index d1101a3..0277985 100644 --- a/packages/eslint-config-javascript/rules/strict.js +++ b/packages/eslint-config-javascript/lib/strict.js @@ -1,8 +1,10 @@ -module.exports = { +import { defineConfig } from 'eslint/config'; + +export const strict = defineConfig([{ rules: { /* babel inserts `'use strict';` for us */ strict: ['error', 'never'], }, -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-javascript/rules/style.js b/packages/eslint-config-javascript/lib/style.js similarity index 98% rename from packages/eslint-config-javascript/rules/style.js rename to packages/eslint-config-javascript/lib/style.js index ca60164..ab7ddd7 100644 --- a/packages/eslint-config-javascript/rules/style.js +++ b/packages/eslint-config-javascript/lib/style.js @@ -1,4 +1,6 @@ -module.exports = { +import { defineConfig } from 'eslint/config'; + +export const style = defineConfig([{ rules: { /* enforce line breaks after opening and before closing array brackets @@ -111,12 +113,6 @@ module.exports = { */ '@stylistic/function-call-argument-newline': ['error', 'consistent'], - /* - enforce spacing between functions and their invocations - https://eslint.style/rules/func-call-spacing - */ - '@stylistic/func-call-spacing': ['error', 'never'], - /* requires function names to match the name of the variable or property to which they are assigned https://eslint.org/docs/rules/func-name-matching @@ -461,11 +457,10 @@ module.exports = { ], /* - disallow space between function identifier and application - deprecated in favor of func-call-spacing + enforce spacing between functions and their invocations https://eslint.style/rules/function-call-spacing */ - '@stylistic/function-call-spacing': 'off', + '@stylistic/function-call-spacing': ['error', 'never'], /* disallow tab characters entirely @@ -722,4 +717,4 @@ module.exports = { */ '@stylistic/wrap-regex': 'off' } -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-javascript/rules/variables.js b/packages/eslint-config-javascript/lib/variables.js similarity index 93% rename from packages/eslint-config-javascript/rules/variables.js rename to packages/eslint-config-javascript/lib/variables.js index 59d1164..d5ba2d8 100644 --- a/packages/eslint-config-javascript/rules/variables.js +++ b/packages/eslint-config-javascript/lib/variables.js @@ -1,4 +1,6 @@ -module.exports = { +import { defineConfig } from 'eslint/config'; + +export const variables = defineConfig([{ rules: { /* enforce or disallow variable initializations at definition @@ -67,7 +69,7 @@ module.exports = { In situations where they are required like unused callback function arguments, indicate that the unused variable is intentional by pre-pending its name with `_`. */ - 'no-unused-vars': ['error', { vars: 'all', args: 'all', argsIgnorePattern: '^_', ignoreRestSiblings: true }], + 'no-unused-vars': ['error', { vars: 'all', args: 'all', argsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_', ignoreRestSiblings: true }], /* Defining classes and variables before their use can cause errors. However, placing @@ -76,4 +78,4 @@ module.exports = { */ 'no-use-before-define': ['error', { functions: false, classes: true, variables: true }], } -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-javascript/package.json b/packages/eslint-config-javascript/package.json index 3a5744a..8650ee4 100644 --- a/packages/eslint-config-javascript/package.json +++ b/packages/eslint-config-javascript/package.json @@ -1,38 +1,43 @@ { - "name": "@ni/eslint-config-javascript", - "version": "4.4.0", - "description": "NI's JavaScript ESLint Shareable Config", - "main": "index.js", - "scripts": { - "lint": "eslint .", - "pack": "npm pack" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ni/javascript-styleguide.git" - }, - "keywords": [ - "eslint", - "eslintconfig", - "ni" - ], - "author": "National Instruments", - "license": "MIT", - "bugs": { - "url": "https://github.com/ni/javascript-styleguide/issues" - }, - "homepage": "https://github.com/ni/javascript-styleguide#readme", - "publishConfig": { - "access": "public" - }, - "files": [ - "/*.js", - "rules/*.js", - "!/.*.js" - ], - "peerDependencies": { - "eslint": "^8.57.0", - "eslint-plugin-import": "^2.29.1", - "@stylistic/eslint-plugin": "^3.0.0" - } -} + "name": "@ni/eslint-config-javascript", + "version": "4.4.0", + "description": "NI's JavaScript ESLint Shareable Config", + "type": "module", + "main": "index.js", + "exports": { + ".": "./index.js" + }, + "scripts": { + "lint": "eslint .", + "pack": "npm pack" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ni/javascript-styleguide.git" + }, + "keywords": [ + "eslint", + "eslintconfig", + "ni" + ], + "author": "National Instruments", + "license": "MIT", + "bugs": { + "url": "https://github.com/ni/javascript-styleguide/issues" + }, + "homepage": "https://github.com/ni/javascript-styleguide#readme", + "publishConfig": { + "access": "public" + }, + "files": [ + "**/*.js", + "!/tools/*", + "!/eslint.config.js" + ], + "peerDependencies": { + "@stylistic/eslint-plugin": "^5.4.0", + "eslint": "^9.36.0", + "eslint-plugin-import": "^2.32.0", + "globals": "^14.0.0" + } +} \ No newline at end of file diff --git a/packages/eslint-config-playwright/.eslintrc.js b/packages/eslint-config-playwright/.eslintrc.js deleted file mode 100644 index b61604d..0000000 --- a/packages/eslint-config-playwright/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-javascript' -}; diff --git a/packages/eslint-config-playwright/LICENSE b/packages/eslint-config-playwright/LICENSE index ffe640e..2cce61a 100644 --- a/packages/eslint-config-playwright/LICENSE +++ b/packages/eslint-config-playwright/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 National Instruments Corporation +Copyright (c) 2025 National Instruments Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/eslint-config-playwright/README.md b/packages/eslint-config-playwright/README.md index d5606c4..f404144 100644 --- a/packages/eslint-config-playwright/README.md +++ b/packages/eslint-config-playwright/README.md @@ -11,4 +11,4 @@ See the [ni/javascript-styleguide](https://github.com/ni/javascript-styleguide#r ## License -[MIT (c) 2022 National Instruments Corporation](./LICENSE) +[MIT (c) 2025 National Instruments Corporation](./LICENSE) diff --git a/packages/eslint-config-playwright/eslint.config.js b/packages/eslint-config-playwright/eslint.config.js new file mode 100644 index 0000000..47dccba --- /dev/null +++ b/packages/eslint-config-playwright/eslint.config.js @@ -0,0 +1,14 @@ +import { defineConfig } from 'eslint/config'; + +import { javascriptConfig, importNodeEsmConfig } from '@ni/eslint-config-javascript'; + +export default defineConfig([ + javascriptConfig, + importNodeEsmConfig, + { + files: ['tools/*.js'], + rules: { + 'no-console': 'off' + } + } +]); diff --git a/packages/eslint-config-playwright/index.js b/packages/eslint-config-playwright/index.js index aa7948a..606cc32 100644 --- a/packages/eslint-config-playwright/index.js +++ b/packages/eslint-config-playwright/index.js @@ -1,82 +1,86 @@ -module.exports = { - extends: [ - '@ni/eslint-config-typescript', - 'plugin:playwright/playwright-test' - ], - rules: { - /* - In UI tests it is common to have a loop that performs async operations which must be sequential. - For example, clicking on a list of elements one after another. - While there are still some cases where the rule would suggest valid improvements, they are not common - enough to justify the noise that comes from needing to suppress it. - */ - 'no-await-in-loop': 'off', +import { defineConfig } from 'eslint/config'; +import { typescriptConfig } from '@ni/eslint-config-typescript'; +import playwright from 'eslint-plugin-playwright'; - /* - Playwright marks this as recommended but configures it as 'warn'. - Deeply nested describe blocks are likely an indication that test files are too complicated. - */ - 'playwright/max-nested-describe': 'error', +export const playwrightConfig = defineConfig([ + typescriptConfig, + playwright.configs['flat/recommended'], + { + rules: { + /* + In UI tests it is common to have a loop that performs async operations which must be sequential. + For example, clicking on a list of elements one after another. + While there are still some cases where the rule would suggest valid improvements, they are not common + enough to justify the noise that comes from needing to suppress it. + */ + 'no-await-in-loop': 'off', - /* - Playwright marks this as recommended but configures it as 'warn'. - Conditional logic in tests is usually an indication that a test is attempting to cover too much, and not testing the logic it intends to. - Each branch of code executing within a conditional statement will usually be better served by a test devoted to it. - */ - 'playwright/no-conditional-in-test': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + Deeply nested describe blocks are likely an indication that test files are too complicated. + */ + 'playwright/max-nested-describe': 'error', - /* - Playwright marks this as recommended but configures it as 'warn'. - Instead of element handles (page.$) use locators (page.locator). - */ - 'playwright/no-element-handle': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + Conditional logic in tests is usually an indication that a test is attempting to cover too much, and not testing the logic it intends to. + Each branch of code executing within a conditional statement will usually be better served by a test devoted to it. + */ + 'playwright/no-conditional-in-test': 'error', - /* - Playwright marks this as recommended but configures it as 'warn'. - Instead of page.$eval use locators (page.locator). - */ - 'playwright/no-eval': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + Instead of element handles (page.$) use locators (page.locator). + */ + 'playwright/no-element-handle': 'error', - /* - Playwright marks this as recommended but configures it as 'warn'. - We should generally avoid using {"force: true"} to force Playwright to interact with an element that isn't visible. - In some cases it is necessary and this rule may be suppressed if explained with a comment. - */ - 'playwright/no-force-option': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + Instead of page.$eval use locators (page.locator). + */ + 'playwright/no-eval': 'error', - /* - Playwright marks this as recommended but configures it as 'warn'. - Using page.pause should be reserved for debugging, not production code. - */ - 'playwright/no-page-pause': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + We should generally avoid using {"force: true"} to force Playwright to interact with an element that isn't visible. + In some cases it is necessary and this rule may be suppressed if explained with a comment. + */ + 'playwright/no-force-option': 'error', - /* - Playwright marks this as recommended but configures it as 'warn'. - We allow skipped tests as a mechanism of temporarily disabling them in production. - Skipped tests should be accompanied by a comment linking to a work item that tracks re-enabling them. - */ - 'playwright/no-skipped-test': 'off', + /* + Playwright marks this as recommended but configures it as 'warn'. + Using page.pause should be reserved for debugging, not production code. + */ + 'playwright/no-page-pause': 'error', - /* - Playwright marks this as recommended but configures it as 'warn'. - Assertions are easier to read when using a dedicated matcher rather than negating the opposite matcher. - */ - 'playwright/no-useless-not': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + We allow skipped tests as a mechanism of temporarily disabling them in production. + Skipped tests should be accompanied by a comment linking to a work item that tracks re-enabling them. + */ + 'playwright/no-skipped-test': 'off', - /* - Playwright marks this as recommended but configures it as 'warn'. - Waiting for arbitrary amounts of time can cause test intermittency. Instead wait for a specific condition. - */ - 'playwright/no-wait-for-timeout': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + Assertions are easier to read when using a dedicated matcher rather than negating the opposite matcher. + */ + 'playwright/no-useless-not': 'error', - /* - In order to have a better failure message, toHaveLength() should be used when asserting expectations on objects length property. - */ - 'playwright/prefer-to-have-length': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + Waiting for arbitrary amounts of time can cause test intermittency. Instead wait for a specific condition. + */ + 'playwright/no-wait-for-timeout': 'error', - /* - Having a top-level describe block in each test file is common practice which aligns with patterns we use in Jasmine - */ - 'playwright/require-top-level-describe': 'error' - }, -}; + /* + In order to have a better failure message, toHaveLength() should be used when asserting expectations on objects length property. + */ + 'playwright/prefer-to-have-length': 'error', + + /* + Having a top-level describe block in each test file is common practice which aligns with patterns we use in Jasmine + */ + 'playwright/require-top-level-describe': 'error' + } + } +]); diff --git a/packages/eslint-config-playwright/package.json b/packages/eslint-config-playwright/package.json index 2ddc7d0..ca751c8 100644 --- a/packages/eslint-config-playwright/package.json +++ b/packages/eslint-config-playwright/package.json @@ -1,37 +1,43 @@ { - "name": "@ni/eslint-config-playwright", - "version": "1.1.5", - "description": "NI's Playwright ESLint Shareable Config", - "main": "index.js", - "scripts": { - "lint": "eslint .", - "pack": "npm pack", - "print-available-rules": "node tools/print-available-rules" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ni/javascript-styleguide.git" - }, - "keywords": [ - "eslint", - "eslintconfig", - "ni" - ], - "author": "National Instruments", - "license": "MIT", - "bugs": { - "url": "https://github.com/ni/javascript-styleguide/issues" - }, - "homepage": "https://github.com/ni/javascript-styleguide#readme", - "publishConfig": { - "access": "public" - }, - "files": [ - "/*.js", - "!/.*.js" - ], - "peerDependencies": { - "@ni/eslint-config-typescript": "^4.4.4", - "eslint-plugin-playwright": "^0.12.0" - } + "name": "@ni/eslint-config-playwright", + "version": "1.1.5", + "description": "NI's Playwright ESLint Shareable Config", + "type": "module", + "main": "index.js", + "exports": { + ".": "./index.js" + }, + "scripts": { + "lint": "eslint .", + "pack": "npm pack", + "print-available-rules": "node tools/print-available-rules" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ni/javascript-styleguide.git" + }, + "keywords": [ + "eslint", + "eslintconfig", + "ni" + ], + "author": "National Instruments", + "license": "MIT", + "bugs": { + "url": "https://github.com/ni/javascript-styleguide/issues" + }, + "homepage": "https://github.com/ni/javascript-styleguide#readme", + "publishConfig": { + "access": "public" + }, + "files": [ + "**/*.js", + "!/tools/*", + "!/eslint.config.js" + ], + "peerDependencies": { + "@ni/eslint-config-typescript": "^4.4.4", + "@ni/eslint-config-javascript": "^4.4.0", + "eslint-plugin-playwright": "^0.18.0" + } } diff --git a/packages/eslint-config-playwright/requiring-type-checking.js b/packages/eslint-config-playwright/requiring-type-checking.js deleted file mode 100644 index 97b401f..0000000 --- a/packages/eslint-config-playwright/requiring-type-checking.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - extends: [ - '@ni/eslint-config-typescript/requiring-type-checking' - ], - parser: '@typescript-eslint/parser', -}; diff --git a/packages/eslint-config-playwright/tools/print-available-rules.js b/packages/eslint-config-playwright/tools/print-available-rules.js index 5d65702..fa61bd1 100644 --- a/packages/eslint-config-playwright/tools/print-available-rules.js +++ b/packages/eslint-config-playwright/tools/print-available-rules.js @@ -1,4 +1,4 @@ -const plugin = require('eslint-plugin-playwright'); +import plugin from 'eslint-plugin-playwright'; const isTrue = val => val !== undefined && val !== false; const recommended = rule => isTrue(rule.meta.docs.recommended); @@ -7,14 +7,14 @@ const print = (keys, prefix = 'playwright') => { keys.forEach(key => { results[`${prefix}/${key}`] = ''; }); - global.console.log(JSON.stringify(results, null, 4)); + console.log(JSON.stringify(results, null, 4)); }; const sortedRules = Object.keys(plugin.rules).sort(); const playwright = sortedRules.filter(key => !recommended(plugin.rules[key])); const playwrightRecommended = sortedRules.filter(key => recommended(plugin.rules[key])); -global.console.log('Playwright Recommended:'); +console.log('Playwright Recommended:'); print(playwrightRecommended); -global.console.log('Remaining Playwright Rules:'); +console.log('Remaining Playwright Rules:'); print(playwright); diff --git a/packages/eslint-config-typescript/.eslintrc.js b/packages/eslint-config-typescript/.eslintrc.js deleted file mode 100644 index b61604d..0000000 --- a/packages/eslint-config-typescript/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-javascript' -}; diff --git a/packages/eslint-config-typescript/LICENSE b/packages/eslint-config-typescript/LICENSE index ffe640e..2cce61a 100644 --- a/packages/eslint-config-typescript/LICENSE +++ b/packages/eslint-config-typescript/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 National Instruments Corporation +Copyright (c) 2025 National Instruments Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/eslint-config-typescript/README.md b/packages/eslint-config-typescript/README.md index 9517893..161485f 100644 --- a/packages/eslint-config-typescript/README.md +++ b/packages/eslint-config-typescript/README.md @@ -13,4 +13,4 @@ See the [ni/javascript-styleguide](https://github.com/ni/javascript-styleguide#r ## License -[MIT (c) 2021 National Instruments Corporation](./LICENSE) +[MIT (c) 2025 National Instruments Corporation](./LICENSE) diff --git a/packages/eslint-config-typescript/eslint.config.js b/packages/eslint-config-typescript/eslint.config.js new file mode 100644 index 0000000..47dccba --- /dev/null +++ b/packages/eslint-config-typescript/eslint.config.js @@ -0,0 +1,14 @@ +import { defineConfig } from 'eslint/config'; + +import { javascriptConfig, importNodeEsmConfig } from '@ni/eslint-config-javascript'; + +export default defineConfig([ + javascriptConfig, + importNodeEsmConfig, + { + files: ['tools/*.js'], + rules: { + 'no-console': 'off' + } + } +]); diff --git a/packages/eslint-config-typescript/index.js b/packages/eslint-config-typescript/index.js index 34c79a0..0e891cc 100644 --- a/packages/eslint-config-typescript/index.js +++ b/packages/eslint-config-typescript/index.js @@ -1,226 +1,227 @@ -module.exports = { - extends: [ - '@ni/eslint-config-javascript', - 'plugin:@typescript-eslint/recommended', - 'plugin:import/typescript', - './lib/extensions' - ], - parser: '@typescript-eslint/parser', - rules: { - /* - Overrides to import rules (already handled by the TypeScript compiler): - https://github.com/benmosher/eslint-plugin-import/blob/main/config/typescript.js - */ - - /* - Already enforced by TypeScript compiler. - */ - 'import/named': 'off', - - /* - Already enforced by TypeScript compiler. - */ - 'import/no-unresolved': 'off', - - /* - Overrides to TypeScript recommended rules: - https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/recommended.ts - */ - - '@typescript-eslint/explicit-module-boundary-types': 'error', - - /* - [strict-null-checks] - With `stickNullChecks` disabled, non-null assertions are discouraged (this rule is configured as 'error') - as non-null assertions do not provide additional type safety and if used inconsistently add to visual noise. - With `strictNullChecks` enabled, the non-null assertion operator (this rule configured as 'off') - is useful for asserting that a value will no longer be null and usage of operator should be allowed. - */ - '@typescript-eslint/no-non-null-assertion': 'error', - - 'valid-typeof': 'off', - - /* - Overrides to TypeScript stylistic rules: - https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/stylistic.ts - */ - - /* - Overrides to Typescript rules outside of the recommended configuration: - */ - - /* - Prefer the array straight bracket syntax over generics in all cases. - */ - '@typescript-eslint/array-type': 'error', - - '@typescript-eslint/ban-tslint-comment': 'error', - - '@typescript-eslint/class-literal-property-style': 'error', - - /* - Prefer the index signature syntax over the builtin `Record` type in all cases. - */ - '@typescript-eslint/consistent-indexed-object-style': ['error', 'index-signature'], - - '@typescript-eslint/consistent-type-assertions': 'error', - - '@typescript-eslint/consistent-type-definitions': ['error', 'interface'], - - /* - Type imports are useful for uncommon use cases such as modules with - side-efects and file-by-file transpiling. Usage will be determined - on a case-by-case basis. - */ - '@typescript-eslint/consistent-type-imports': 'off', - - '@typescript-eslint/explicit-function-return-type': 'error', - - /* - Requiring an accessibility modifier helps when creating classes to ensure the - accessibility of a class member is intentionally decided and not relying on - the default of public accessibility. Constructors are omitted because they are - almost always public. - */ - '@typescript-eslint/explicit-member-accessibility': ['error', - { accessibility: 'explicit', overrides: { constructors: 'off' } } - ], - - /* - All interface members should be terminated with a semicolon including single line - definitions, consistent with classes. Object literal types should use commas - consistent with object literals. - */ - '@typescript-eslint/member-delimiter-style': ['error', { - overrides: { - interface: { - singleline: { - delimiter: 'semi', - requireLast: true - } - }, - typeLiteral: { - multiline: { - delimiter: 'comma', - requireLast: false +import { defineConfig } from 'eslint/config'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; +import typescriptPlugin from 'typescript-eslint'; +import importPlugin from 'eslint-plugin-import'; +import { extensionsConfig } from './lib/extensions.js'; +import { typescriptRequiringTypeCheckingConfig } from './lib/requiring-type-checking.js'; + +export const typescriptConfig = defineConfig([ + javascriptConfig, + typescriptPlugin.configs.recommended, + extensionsConfig, + typescriptRequiringTypeCheckingConfig, + { + languageOptions: { + parser: typescriptPlugin.parser + }, + settings: importPlugin.flatConfigs.typescript.settings, + rules: { + /* + Overrides to import rules (already handled by the TypeScript compiler): + https://github.com/benmosher/eslint-plugin-import/blob/main/config/typescript.js + */ + + /* + Already enforced by TypeScript compiler. + */ + 'import/named': 'off', + + /* + Already enforced by TypeScript compiler. + */ + 'import/no-unresolved': 'off', + + /* + Overrides to TypeScript recommended rules: + https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/recommended.ts + */ + + '@typescript-eslint/explicit-module-boundary-types': 'error', + + 'valid-typeof': 'off', + + /* + Overrides to Typescript rules outside of the recommended configuration: + */ + + /* + Prefer the array straight bracket syntax over generics in all cases. + */ + '@typescript-eslint/array-type': 'error', + + '@typescript-eslint/ban-tslint-comment': 'error', + + '@typescript-eslint/class-literal-property-style': 'error', + + /* + Prefer the index signature syntax over the builtin `Record` type in all cases. + */ + '@typescript-eslint/consistent-indexed-object-style': ['error', 'index-signature'], + + '@typescript-eslint/consistent-type-assertions': 'error', + + '@typescript-eslint/consistent-type-definitions': ['error', 'interface'], + + /* + Type imports are useful for uncommon use cases such as modules with + side-efects and file-by-file transpiling. Usage will be determined + on a case-by-case basis. + */ + '@typescript-eslint/consistent-type-imports': 'off', + + '@typescript-eslint/explicit-function-return-type': 'error', + + /* + Requiring an accessibility modifier helps when creating classes to ensure the + accessibility of a class member is intentionally decided and not relying on + the default of public accessibility. Constructors are omitted because they are + almost always public. + */ + '@typescript-eslint/explicit-member-accessibility': ['error', + { accessibility: 'explicit', overrides: { constructors: 'off' } } + ], + + /* + Overrides to TypeScript stylistic rules: + https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/flat/stylistic.ts + */ + + /* + All interface members should be terminated with a semicolon including single line + definitions, consistent with classes. Object literal types should use commas + consistent with object literals. + */ + '@stylistic/member-delimiter-style': ['error', { + overrides: { + interface: { + singleline: { + delimiter: 'semi', + requireLast: true + } }, - singleline: { - delimiter: 'comma', - requireLast: false + typeLiteral: { + multiline: { + delimiter: 'comma', + requireLast: false + }, + singleline: { + delimiter: 'comma', + requireLast: false + } } } - } - }], - - /* - Group members by fields and methods and then order them by accessibility starting - with statics. Order members within these groups in a logical organization where - readability is the most important thing. Private fields that back public accessors - may be grouped with their accessor by disabling the rule with a comment. - */ - '@typescript-eslint/member-ordering': ['error', { - default: [ - 'signature', - 'public-static-field', - 'protected-static-field', - 'private-static-field', - 'static-field', - 'public-field', - 'protected-field', - 'private-field', - 'field', - 'public-constructor', - 'protected-constructor', - 'private-constructor', - 'constructor', - 'public-static-method', - 'protected-static-method', - 'private-static-method', - 'static-method', - 'public-method', - 'protected-method', - 'private-method', - 'method' - ] - }], - - /* - The stricter type checking that's possible by using property style when declaring - method signatures only has benefits in some cases of inheritance. Therefore we - prefer to align the style between interface and class definitions and to align - with other languages used by NI like C#. - */ - '@typescript-eslint/method-signature-style': 'off', - - '@typescript-eslint/no-confusing-non-null-assertion': 'error', - - /* - This rule is unnecessary because delete is banned via 'no-restricted-syntax' - */ - '@typescript-eslint/no-dynamic-delete': 'off', - - '@typescript-eslint/no-extraneous-class': ['error', { allowWithDecorator: true, allowStaticOnly: true }], - - /* - TypeScript only supports catching `any` and `unknown` so this rule does not add - much value. With the rule no-throw-literal we enforce throwing `Error` objects, - which should be sufficient most of the time. For more type safety, consider - using type guards. - */ - '@typescript-eslint/no-implicit-any-catch': 'off', - - '@typescript-eslint/no-invalid-void-type': 'error', - - /* - Parameter properties are a nice shorthand for defining properties ingested - in the constructor. - */ - '@typescript-eslint/no-parameter-properties': 'off', - - '@typescript-eslint/no-require-imports': 'error', - - /* - Type aliases are in-use in many applications and do not seem to generally be abused - by, for example, aliasing built-in types unnecessarily. - */ - '@typescript-eslint/no-type-alias': 'off', - - '@typescript-eslint/no-unnecessary-type-constraint': 'error', - - /* - As the rule is experimental it is not enabled by default. - */ - '@typescript-eslint/no-unused-vars-experimental': 'off', - - /* - If an enum is crossing a code boundary (being serialized to JSON for example) then - you should initialize its values. But in most other cases code shouldn't care about - the values of enum items, so you can safely leave them implicit. - */ - '@typescript-eslint/prefer-enum-initializers': 'off', - - '@typescript-eslint/prefer-for-of': 'error', - - '@typescript-eslint/prefer-function-type': 'error', - - '@typescript-eslint/prefer-literal-enum-member': 'error', - - '@typescript-eslint/prefer-ts-expect-error': 'error', - - /* - Generally not expected in practice to sort union intersection members. - Projects may enable if desired. - */ - '@typescript-eslint/sort-type-union-intersection-members': 'off', - - '@typescript-eslint/type-annotation-spacing': 'error', - - /* - This rule is better enforced with the TypeScript `noImplicitAny` and - `strictPropertyInitialization` compiler options. - */ - '@typescript-eslint/typedef': 'off', - - '@typescript-eslint/unified-signatures': 'error', + }], + + '@stylistic/type-annotation-spacing': 'error', + + /* + Group members by fields and methods and then order them by accessibility starting + with statics. Order members within these groups in a logical organization where + readability is the most important thing. Private fields that back public accessors + may be grouped with their accessor by disabling the rule with a comment. + */ + '@typescript-eslint/member-ordering': ['error', { + default: [ + 'signature', + 'public-static-field', + 'protected-static-field', + 'private-static-field', + 'static-field', + 'public-field', + 'protected-field', + 'private-field', + 'field', + 'public-constructor', + 'protected-constructor', + 'private-constructor', + 'constructor', + 'public-static-method', + 'protected-static-method', + 'private-static-method', + 'static-method', + 'public-method', + 'protected-method', + 'private-method', + 'method' + ] + }], + + /* + The stricter type checking that's possible by using property style when declaring + method signatures only has benefits in some cases of inheritance. Therefore we + prefer to align the style between interface and class definitions and to align + with other languages used by NI like C#. + */ + '@typescript-eslint/method-signature-style': 'off', + + '@typescript-eslint/no-confusing-non-null-assertion': 'error', + + /* + This rule is unnecessary because delete is banned via 'no-restricted-syntax' + */ + '@typescript-eslint/no-dynamic-delete': 'off', + + '@typescript-eslint/no-extraneous-class': ['error', { allowWithDecorator: true, allowStaticOnly: true }], + + /* + TypeScript only supports catching `any` and `unknown` so this rule does not add + much value. With the rule no-throw-literal we enforce throwing `Error` objects, + which should be sufficient most of the time. For more type safety, consider + using type guards. + */ + '@typescript-eslint/no-implicit-any-catch': 'off', + + '@typescript-eslint/no-invalid-void-type': 'error', + + /* + Parameter properties are a nice shorthand for defining properties ingested + in the constructor. + */ + '@typescript-eslint/no-parameter-properties': 'off', + + '@typescript-eslint/no-require-imports': 'error', + + /* + Type aliases are in-use in many applications and do not seem to generally be abused + by, for example, aliasing built-in types unnecessarily. + */ + '@typescript-eslint/no-type-alias': 'off', + + '@typescript-eslint/no-unnecessary-type-constraint': 'error', + + /* + As the rule is experimental it is not enabled by default. + */ + '@typescript-eslint/no-unused-vars-experimental': 'off', + + /* + If an enum is crossing a code boundary (being serialized to JSON for example) then + you should initialize its values. But in most other cases code shouldn't care about + the values of enum items, so you can safely leave them implicit. + */ + '@typescript-eslint/prefer-enum-initializers': 'off', + + '@typescript-eslint/prefer-for-of': 'error', + + '@typescript-eslint/prefer-function-type': 'error', + + '@typescript-eslint/prefer-literal-enum-member': 'error', + + '@typescript-eslint/prefer-ts-expect-error': 'error', + + /* + Generally not expected in practice to sort union intersection members. + Projects may enable if desired. + */ + '@typescript-eslint/sort-type-union-intersection-members': 'off', + + /* + This rule is better enforced with the TypeScript `noImplicitAny` and + `strictPropertyInitialization` compiler options. + */ + '@typescript-eslint/typedef': 'off', + + '@typescript-eslint/unified-signatures': 'error', + } } -}; +]); diff --git a/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js b/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js index 427fcfa..e74de01 100644 --- a/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js +++ b/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js @@ -1,4 +1,6 @@ -module.exports = { +import { defineConfig } from 'eslint/config'; + +export const extensionsRequiringTypeCheckingConfig = defineConfig([{ rules: { 'dot-notation': 'off', '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], @@ -7,7 +9,7 @@ module.exports = { '@typescript-eslint/no-implied-eval': 'error', 'no-throw-literal': 'off', - '@typescript-eslint/no-throw-literal': 'error', + '@typescript-eslint/only-throw-error': 'error', 'require-await': 'off', '@typescript-eslint/require-await': 'error', @@ -15,4 +17,4 @@ module.exports = { 'no-return-await': 'off', '@typescript-eslint/return-await': ['error', 'always'], } -}; +}]); diff --git a/packages/eslint-config-typescript/lib/extensions.js b/packages/eslint-config-typescript/lib/extensions.js index b5e2e9c..9ef8bf6 100644 --- a/packages/eslint-config-typescript/lib/extensions.js +++ b/packages/eslint-config-typescript/lib/extensions.js @@ -1,4 +1,6 @@ -module.exports = { +import { defineConfig } from 'eslint/config'; + +export const extensionsConfig = defineConfig([{ rules: { /* The following are extension rules that replace core JavaScript rules to support @@ -67,7 +69,7 @@ module.exports = { }], 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': ['error', { vars: 'all', args: 'all', argsIgnorePattern: '^_', ignoreRestSiblings: true }], + '@typescript-eslint/no-unused-vars': ['error', { vars: 'all', args: 'all', argsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_', ignoreRestSiblings: true }], 'no-use-before-define': 'off', '@typescript-eslint/no-use-before-define': ['error', { functions: false, classes: true, variables: true }], @@ -75,4 +77,4 @@ module.exports = { 'no-useless-constructor': 'off', '@typescript-eslint/no-useless-constructor': 'error', } -}; +}]); diff --git a/packages/eslint-config-typescript/lib/requiring-type-checking.js b/packages/eslint-config-typescript/lib/requiring-type-checking.js new file mode 100644 index 0000000..6204f6a --- /dev/null +++ b/packages/eslint-config-typescript/lib/requiring-type-checking.js @@ -0,0 +1,191 @@ +import { defineConfig } from 'eslint/config'; +import typescriptPlugin from 'typescript-eslint'; +import { extensionsRequiringTypeCheckingConfig } from './extensions-requiring-type-checking.js'; + +export const typescriptRequiringTypeCheckingConfig = defineConfig([ + typescriptPlugin.configs.recommendedTypeChecked, + typescriptPlugin.configs.stylisticTypeChecked, + extensionsRequiringTypeCheckingConfig, + { + languageOptions: { + parser: typescriptPlugin.parser + }, + rules: { + /* + Overrides to TypeScript recommended rules: + https://github.com/typescript-eslint/typescript-eslint/tree/v7.18.0/packages/eslint-plugin/src/configs/recommended-type-checked.ts + */ + + '@typescript-eslint/no-duplicate-enum-values': 'off', + '@typescript-eslint/no-duplicate-type-constituents': 'off', + '@typescript-eslint/no-loss-of-precision': 'off', + '@typescript-eslint/no-redundant-type-constituents': 'off', + '@typescript-eslint/no-unsafe-declaration-merging': 'off', + '@typescript-eslint/no-unsafe-enum-comparison': 'off', + '@typescript-eslint/prefer-find': 'off', + 'prefer-promise-reject-errors': ['error', { allowEmptyReject: true }], + '@typescript-eslint/prefer-promise-reject-errors': 'off', + '@typescript-eslint/no-unsafe-unary-minus': 'off', + '@typescript-eslint/no-array-delete': 'off', + 'no-with': 'error', + 'no-class-assign': 'error', + + /* + This rule can be confusing if you're not familiar with JavaScript's rules for binding `this`, + but in our experience when it reports an error it is usually indicitave of a real bug. + + Common ways to resolve this error include: + 1. Wrapping the function with an arrow function, which establishes `this` based on the context + the function is defined in rather than where it's called from. + ``` + // Good, this will refer to the class where this code is defined + array.sort(() => this.compare()); + + // Bad, this will refer to the context where this code is invoked from + array.sort(this.compare); + ``` + 2. For callbacks passed to `addEventListener` which need to be referenced in `removeEventListener`, + the arrow function should be stored in a variable since it must refer to the same instance of the function. + ``` + // Good + const handler = event => this.clickHandler(); + elt.addEventListener('click', handler); + elt.removeEventListener('click', handler); + + // Bad, violates this rule + elt.addEventListener('click', this.clickHandler); + elt.removeEventListener('click', this.clickHandler); + + // Bad, removeEventListener isn't removing the original handler + elt.addEventListener('click', event => this.clickHandler()); + elt.removeEventListener('click', event => this.clickHandler()); + 3. If the function doesn't use `this` to refer to an instance or other static members, you can change the function to be static and the rule will ignore it. + */ + '@typescript-eslint/unbound-method': ['error', { ignoreStatic: true }], + + /* + Overrides to TypeScript type-checked stylistic rules: + https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/stylistic-type-checked.ts + */ + + '@typescript-eslint/consistent-generic-constructors': 'off', + '@typescript-eslint/prefer-regexp-exec': 'off', + + /* + Overrides to Typescript rules outside of the recommended configuration: + */ + + /* + Most of this configuration is identitical to the default with exceptions called out in comments below + */ + '@typescript-eslint/naming-convention': [ + 'error', + // Allow properties with custom-element-names, commonly used in HTMLElementNameTagMap + { + selector: 'property', + format: null, + filter: { + // custom element regex adapted from https://html-validate.org/rules/element-name.html + regex: '^[a-z][a-z0-9\\-._]*-[a-z0-9\\-._]*$', + match: true + } + }, + // The default configuration for this rule requires that enum members + // follow the camelCase style, which doesn't match the existing convention + // within NI and the broader TS community to use PascalCase. + { + selector: 'enumMember', + format: ['PascalCase'], + }, + { + selector: 'variable', + format: ['camelCase', 'UPPER_CASE'], + leadingUnderscore: 'allow', + trailingUnderscore: 'allow', + }, + { + selector: 'typeLike', + format: ['PascalCase'], + }, + { + selector: 'import', + format: ['camelCase', 'PascalCase'], + }, + { + selector: 'default', + format: ['camelCase'], + leadingUnderscore: 'allow', + trailingUnderscore: 'allow', + }, + ], + + '@typescript-eslint/no-base-to-string': 'error', + + '@typescript-eslint/no-confusing-void-expression': ['error', { ignoreArrowShorthand: true }], + + /* [strict-null-checks] */ + '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', + + /* [strict-null-checks] */ + '@typescript-eslint/no-unnecessary-condition': 'error', + + '@typescript-eslint/no-unnecessary-qualifier': 'error', + + '@typescript-eslint/no-unnecessary-type-arguments': 'error', + + '@typescript-eslint/no-unsafe-argument': 'error', + + '@typescript-eslint/non-nullable-type-assertion-style': 'error', + + '@typescript-eslint/prefer-includes': 'error', + + /* + Both nullish coalescing (`??`) and logical OR (`||`) may be used + to provide default values in specific cases. + + Developers should choose the strictest operator for their use case: + - `??` to provide a default for nullish values (null or undefined). + - `||` to provide a default for values that are nullish or one of: empty string / boolean false. + + Logical OR checks should not be used for other falsy values such as numbers (0, -0, 0n, NaN). + */ + '@typescript-eslint/prefer-nullish-coalescing': 'off', + + '@typescript-eslint/prefer-optional-chain': 'error', + + '@typescript-eslint/prefer-readonly': 'error', + + /* + This rule requires adding `readonly` keywords to all levels of non-primitive parameters in order to prevent + any part of the parameter from being mutated. While the spirit of preferring not to mutate inputs is correct, + requiring it to be encoded via `readonly` is overly burdensome. + */ + '@typescript-eslint/prefer-readonly-parameter-types': 'off', + + '@typescript-eslint/prefer-reduce-type-parameter': 'error', + + '@typescript-eslint/prefer-return-this-type': 'error', + + '@typescript-eslint/prefer-string-starts-ends-with': 'error', + + '@typescript-eslint/promise-function-async': 'error', + + '@typescript-eslint/require-array-sort-compare': 'error', + + /* + [strict-null-checks] + */ + '@typescript-eslint/strict-boolean-expressions': ['error', { + allowNumber: false, + allowNullableBoolean: true, + allowNullableString: true, + allowNullableNumber: false + }], + + /* + This rule is made redundant by `default-case` so it will never fire and is disabled. + */ + '@typescript-eslint/switch-exhaustiveness-check': 'off' + } + } +]); diff --git a/packages/eslint-config-typescript/package.json b/packages/eslint-config-typescript/package.json index 0b51b6a..abad0a3 100644 --- a/packages/eslint-config-typescript/package.json +++ b/packages/eslint-config-typescript/package.json @@ -1,39 +1,43 @@ { - "name": "@ni/eslint-config-typescript", - "version": "4.4.4", - "description": "NI's TypeScript ESLint Shareable Config", - "main": "index.js", - "scripts": { - "lint": "eslint .", - "pack": "npm pack", - "print-available-rules": "node tools/print-available-rules" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ni/javascript-styleguide.git" - }, - "keywords": [ - "eslint", - "eslintconfig", - "ni" - ], - "author": "National Instruments", - "license": "MIT", - "bugs": { - "url": "https://github.com/ni/javascript-styleguide/issues" - }, - "homepage": "https://github.com/ni/javascript-styleguide#readme", - "publishConfig": { - "access": "public" - }, - "files": [ - "/*.js", - "!/.*.js", - "/lib/*" - ], - "peerDependencies": { - "@ni/eslint-config-javascript": "^4.4.0", - "@typescript-eslint/parser": "^7.18.0", - "@typescript-eslint/eslint-plugin": "^7.18.0" - } -} + "name": "@ni/eslint-config-typescript", + "version": "4.4.4", + "description": "NI's TypeScript ESLint Shareable Config", + "type": "module", + "main": "index.js", + "exports": { + ".": "./index.js" + }, + "scripts": { + "lint": "eslint .", + "pack": "npm pack", + "print-available-rules": "node tools/print-available-rules" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ni/javascript-styleguide.git" + }, + "keywords": [ + "eslint", + "eslintconfig", + "ni" + ], + "author": "National Instruments", + "license": "MIT", + "bugs": { + "url": "https://github.com/ni/javascript-styleguide/issues" + }, + "homepage": "https://github.com/ni/javascript-styleguide#readme", + "publishConfig": { + "access": "public" + }, + "files": [ + "**/*.js", + "!/tools/*", + "!/eslint.config.js" + ], + "peerDependencies": { + "@ni/eslint-config-javascript": "^4.4.0", + "eslint-plugin-import": "^2.32.0", + "typescript-eslint": "^8.45.0" + } +} \ No newline at end of file diff --git a/packages/eslint-config-typescript/requiring-type-checking.js b/packages/eslint-config-typescript/requiring-type-checking.js deleted file mode 100644 index 70a6cba..0000000 --- a/packages/eslint-config-typescript/requiring-type-checking.js +++ /dev/null @@ -1,180 +0,0 @@ -module.exports = { - extends: [ - 'plugin:@typescript-eslint/recommended-type-checked', - 'plugin:@typescript-eslint/stylistic-type-checked', - './lib/extensions-requiring-type-checking' - ], - parser: '@typescript-eslint/parser', - rules: { - /* - Overrides to TypeScript recommended rules: - https://github.com/typescript-eslint/typescript-eslint/tree/v7.18.0/packages/eslint-plugin/src/configs/recommended-type-checked.ts - */ - - '@typescript-eslint/no-duplicate-enum-values': 'off', - '@typescript-eslint/no-duplicate-type-constituents': 'off', - '@typescript-eslint/no-loss-of-precision': 'off', - '@typescript-eslint/no-redundant-type-constituents': 'off', - '@typescript-eslint/no-unsafe-declaration-merging': 'off', - '@typescript-eslint/no-unsafe-enum-comparison': 'off', - - /* - This rule can be confusing if you're not familiar with JavaScript's rules for binding `this`, - but in our experience when it reports an error it is usually indicitave of a real bug. - - Common ways to resolve this error include: - 1. Wrapping the function with an arrow function, which establishes `this` based on the context - the function is defined in rather than where it's called from. - ``` - // Good, this will refer to the class where this code is defined - array.sort(() => this.compare()); - - // Bad, this will refer to the context where this code is invoked from - array.sort(this.compare); - ``` - 2. For callbacks passed to `addEventListener` which need to be referenced in `removeEventListener`, - the arrow function should be stored in a variable since it must refer to the same instance of the function. - ``` - // Good - const handler = event => this.clickHandler(); - elt.addEventListener('click', handler); - elt.removeEventListener('click', handler); - - // Bad, violates this rule - elt.addEventListener('click', this.clickHandler); - elt.removeEventListener('click', this.clickHandler); - - // Bad, removeEventListener isn't removing the original handler - elt.addEventListener('click', event => this.clickHandler()); - elt.removeEventListener('click', event => this.clickHandler()); - 3. If the function doesn't use `this` to refer to an instance or other static members, you can change the function to be static and the rule will ignore it. - */ - '@typescript-eslint/unbound-method': ['error', { ignoreStatic: true }], - - /* - Overrides to TypeScript type-checked stylistic rules: - https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/stylistic-type-checked.ts - */ - - '@typescript-eslint/consistent-generic-constructors': 'off', - '@typescript-eslint/prefer-regexp-exec': 'off', - - /* - Overrides to Typescript rules outside of the recommended configuration: - */ - - /* - Most of this configuration is identitical to the default with exceptions called out in comments below - */ - '@typescript-eslint/naming-convention': [ - 'error', - // Allow properties with custom-element-names, commonly used in HTMLElementNameTagMap - { - selector: 'property', - format: null, - filter: { - // custom element regex adapted from https://html-validate.org/rules/element-name.html - regex: '^[a-z][a-z0-9\\-._]*-[a-z0-9\\-._]*$', - match: true - } - }, - // The default configuration for this rule requires that enum members - // follow the camelCase style, which doesn't match the existing convention - // within NI and the broader TS community to use PascalCase. - { - selector: 'enumMember', - format: ['PascalCase'], - }, - { - selector: 'variable', - format: ['camelCase', 'UPPER_CASE'], - leadingUnderscore: 'allow', - trailingUnderscore: 'allow', - }, - { - selector: 'typeLike', - format: ['PascalCase'], - }, - { - selector: 'import', - format: ['camelCase', 'PascalCase'], - }, - { - selector: 'default', - format: ['camelCase'], - leadingUnderscore: 'allow', - trailingUnderscore: 'allow', - }, - ], - - '@typescript-eslint/no-base-to-string': 'error', - - '@typescript-eslint/no-confusing-void-expression': ['error', { ignoreArrowShorthand: true }], - - /* [strict-null-checks] */ - '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'off', - - /* [strict-null-checks] */ - '@typescript-eslint/no-unnecessary-condition': 'off', - - '@typescript-eslint/no-unnecessary-qualifier': 'error', - - '@typescript-eslint/no-unnecessary-type-arguments': 'error', - - '@typescript-eslint/no-unsafe-argument': 'error', - - '@typescript-eslint/non-nullable-type-assertion-style': 'error', - - '@typescript-eslint/prefer-includes': 'error', - - /* - Both nullish coalescing (`??`) and logical OR (`||`) may be used - to provide default values in specific cases. - - Developers should choose the strictest operator for their use case: - - `??` to provide a default for nullish values (null or undefined). - - `||` to provide a default for values that are nullish or one of: empty string / boolean false. - - Logical OR checks should not be used for other falsy values such as numbers (0, -0, 0n, NaN). - */ - '@typescript-eslint/prefer-nullish-coalescing': 'off', - - '@typescript-eslint/prefer-optional-chain': 'error', - - '@typescript-eslint/prefer-readonly': 'error', - - /* - This rule requires adding `readonly` keywords to all levels of non-primitive parameters in order to prevent - any part of the parameter from being mutated. While the spirit of preferring not to mutate inputs is correct, - requiring it to be encoded via `readonly` is overly burdensome. - */ - '@typescript-eslint/prefer-readonly-parameter-types': 'off', - - '@typescript-eslint/prefer-reduce-type-parameter': 'error', - - '@typescript-eslint/prefer-return-this-type': 'error', - - '@typescript-eslint/prefer-string-starts-ends-with': 'error', - - '@typescript-eslint/promise-function-async': 'error', - - '@typescript-eslint/require-array-sort-compare': 'error', - - /* - [strict-null-checks] This rule requires the TypeScript strictNullChecks compiler flag. If strictNullChecks is enabled, disallow numbers - with the following configuration: - '@typescript-eslint/strict-boolean-expressions': ['error', { - allowNumber: false, - allowNullableBoolean: true, - allowNullableString: true, - allowNullableNumber: false - }] - */ - '@typescript-eslint/strict-boolean-expressions': 'off', - - /* - This rule is made redundant by `default-case` so it will never fire and is disabled. - */ - '@typescript-eslint/switch-exhaustiveness-check': 'off' - } -}; diff --git a/packages/eslint-config-typescript/tools/print-available-rules.js b/packages/eslint-config-typescript/tools/print-available-rules.js index 7982277..efee6f2 100644 --- a/packages/eslint-config-typescript/tools/print-available-rules.js +++ b/packages/eslint-config-typescript/tools/print-available-rules.js @@ -1,22 +1,17 @@ -// eslint-plugin-import doesn't know how to resolve entry points in commonjs modules that are -// declared using "export" rather than the old "main" syntax in package.json. -// See https://github.com/typescript-eslint/typescript-eslint/issues/7565 -// and https://github.com/import-js/eslint-plugin-import/issues/2703 -// eslint-disable-next-line import/no-unresolved -const plugin = require('@typescript-eslint/eslint-plugin'); +import typescriptPlugin from 'typescript-eslint'; const isTrue = val => val !== undefined && val !== false; -const recommended = key => isTrue(plugin.rules[key].meta.docs.recommended); -const requiresTypeChecking = key => isTrue(plugin.rules[key].meta.docs.requiresTypeChecking); -const extendsBaseRule = key => isTrue(plugin.rules[key].meta.docs.extendsBaseRule); +const recommended = key => isTrue(typescriptPlugin.plugin.rules[key].meta.docs.recommended); +const requiresTypeChecking = key => isTrue(typescriptPlugin.plugin.rules[key].meta.docs.requiresTypeChecking); +const extendsBaseRule = key => isTrue(typescriptPlugin.plugin.rules[key].meta.docs.extendsBaseRule); const print = keys => { const results = {}; keys.forEach(key => { - results[`@typescript-eslint/${key}`] = ''; + results[`typescript-eslint/${key}`] = ''; }); - global.console.log(JSON.stringify(results, null, 4)); + console.log(JSON.stringify(results, null, 4)); }; -const sortedRules = Object.keys(plugin.rules).sort(); +const sortedRules = Object.keys(typescriptPlugin.plugin.rules).sort(); const typeScriptExtensions = sortedRules .filter(key => extendsBaseRule(key)) @@ -46,16 +41,16 @@ const typeScriptRecommendedTypeChecks = sortedRules .filter(key => recommended(key)) .filter(key => requiresTypeChecking(key)); -global.console.log('TypeScript Extensions:'); +console.log('TypeScript Extensions:'); print(typeScriptExtensions); -global.console.log('TypeScript Recommended:'); +console.log('TypeScript Recommended:'); print(typeScriptRecommended); -global.console.log('Remaining TypeScript Rules:'); +console.log('Remaining TypeScript Rules:'); print(typeScript); -global.console.log('TypeScript Extensions Requiring Type Checks:'); +console.log('TypeScript Extensions Requiring Type Checks:'); print(typeScriptExtensionsRequiringTypeChecks); -global.console.log('TypeScript Recommended Requiring Type Checks:'); +console.log('TypeScript Recommended Requiring Type Checks:'); print(typeScriptRecommendedTypeChecks); -global.console.log('Remaining TypeScript Rules Requiring Type Checks:'); -print(typeScriptRequiringTypeChecks); +console.log('Remaining TypeScript Rules Requiring Type Checks:'); +print(typeScriptRequiringTypeChecks); \ No newline at end of file diff --git a/tests/angular/.eslintrc.js b/tests/angular/.eslintrc.js deleted file mode 100644 index 7177089..0000000 --- a/tests/angular/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -// Test TypeScript and templates together to process inline templates. -module.exports = { - ignorePatterns: ['*.js'], - overrides: [{ - extends: [ - '@ni/eslint-config-angular', - '@ni/eslint-config-angular/requiring-type-checking' - ], - files: ['*.ts'], - parserOptions: { - project: './tsconfig.json', - // Resolve the project relative to this file's directory. - // https://stackoverflow.com/questions/64933543/parsing-error-cannot-read-file-tsconfig-json-eslint - tsconfigRootDir: __dirname - } - }, { - extends: '@ni/eslint-config-angular/template', - files: ['*.html'] - }], - root: true -}; diff --git a/tests/angular/CHANGELOG.json b/tests/angular/CHANGELOG.json deleted file mode 100644 index 5544358..0000000 --- a/tests/angular/CHANGELOG.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "@ni/angular-test", - "entries": [ - { - "date": "Tue, 09 Nov 2021 18:23:18 GMT", - "tag": "@ni/angular-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/angular-test", - "comment": "Bump @ni/eslint-config-angular to v3.2.0", - "commit": "e4eed9978948e04ce51a4e20c7c841e688433fc5" - } - ] - } - }, - { - "date": "Thu, 28 Oct 2021 15:59:19 GMT", - "tag": "@ni/angular-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/angular-test", - "comment": "Bump @ni/eslint-config-angular to v3.1.0", - "commit": "772f17b65e83107fd8682087c87b9619a5c2ea38" - } - ] - } - }, - { - "date": "Wed, 29 Sep 2021 22:10:29 GMT", - "tag": "@ni/angular-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/angular-test", - "comment": "Bump @ni/eslint-config-angular to v3.0.1", - "commit": "2eefa5b8f9bd3e68031cdb0e928cd97254a45ba6" - } - ] - } - } - ] -} diff --git a/tests/angular/CHANGELOG.md b/tests/angular/CHANGELOG.md deleted file mode 100644 index 6511df2..0000000 --- a/tests/angular/CHANGELOG.md +++ /dev/null @@ -1,29 +0,0 @@ -# Change Log - @ni/angular-test - -This log was last generated on Tue, 09 Nov 2021 18:23:18 GMT and should not be manually modified. - - - -## 1.0.0 - -Tue, 09 Nov 2021 18:23:18 GMT - -### Patches - -- Bump @ni/eslint-config-angular to v3.2.0 - -## 1.0.0 - -Thu, 28 Oct 2021 15:59:19 GMT - -### Patches - -- Bump @ni/eslint-config-angular to v3.1.0 - -## 1.0.0 - -Wed, 29 Sep 2021 22:10:29 GMT - -### Patches - -- Bump @ni/eslint-config-angular to v3.0.1 diff --git a/tests/angular/custom-ignore-attributes/.eslintrc.js b/tests/angular/custom-ignore-attributes/.eslintrc.js deleted file mode 100644 index f0dfcf3..0000000 --- a/tests/angular/custom-ignore-attributes/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -const {ignoreAttributes} = require('@ni/eslint-config-angular/template/options'); - -module.exports = { - overrides: [{ - files: ['*.html'], - rules: { - '@angular-eslint/template/i18n': [ - 'error', - { - checkId: false, - ignoreAttributes: [...ignoreAttributes.all, 'custom-field'] - } - ], - } - }, { - files: ['*.spec.ts*.html'], - rules: { - '@angular-eslint/template/i18n': 'off' - } - }] -}; diff --git a/tests/angular/custom-ignore-attributes/index.spec.ts b/tests/angular/custom-ignore-attributes/index.spec.ts index cde10b1..beaed0b 100644 --- a/tests/angular/custom-ignore-attributes/index.spec.ts +++ b/tests/angular/custom-ignore-attributes/index.spec.ts @@ -7,13 +7,13 @@ import { ComponentFixture } from '@angular/core/testing'; }) class MyComponent { @Input() public attr = false; - @ViewChild('div') public div: HTMLDivElement; + @ViewChild('div') public div!: HTMLDivElement; public myMethod(): void {} } describe('MyComponent', () => { - let hostComponent: MyComponent; - let fixture: ComponentFixture; + let hostComponent!: MyComponent; + let fixture!: ComponentFixture; it('should have a div', async () => { await fixture.whenStable(); diff --git a/tests/angular/eslint.config.js b/tests/angular/eslint.config.js new file mode 100644 index 0000000..28627bc --- /dev/null +++ b/tests/angular/eslint.config.js @@ -0,0 +1,38 @@ +import { defineConfig } from 'eslint/config'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; +import { angularTypescriptConfig, angularTemplateConfig, ignoreAttributes } from '@ni/eslint-config-angular'; + +export default defineConfig([ + { + files: ['**/*.js'], + extends: javascriptConfig, + }, + { + files: ['**/*.ts'], + extends: angularTypescriptConfig, + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsConfigRootDir: import.meta.dirname, + }, + }, + }, + { + files: ['**/*.html'], + extends: angularTemplateConfig, + }, + // Use only a single top-level eslint.config.js: https://eslint.org/docs/latest/use/configure/configuration-files#experimental-configuration-file-resolution + { + files: ['custom-ignore-attributes/**/*.html'], + ignores: ['custom-ignore-attributes/**/*.spec.ts*.html'], + rules: { + '@angular-eslint/template/i18n': [ + 'error', + { + checkId: false, + ignoreAttributes: [...ignoreAttributes.all, 'custom-field'], + }, + ], + }, + }, +]); diff --git a/tests/angular/index.spec.ts b/tests/angular/index.spec.ts index ceb1fb5..5dece52 100644 --- a/tests/angular/index.spec.ts +++ b/tests/angular/index.spec.ts @@ -12,8 +12,8 @@ class MyComponent { } describe('MyComponent', () => { - let hostComponent: MyComponent; - let fixture: ComponentFixture; + let hostComponent!: MyComponent; + let fixture!: ComponentFixture; it('should have a div', async () => { await fixture.whenStable(); diff --git a/tests/angular/package.json b/tests/angular/package.json index 3463583..0109404 100644 --- a/tests/angular/package.json +++ b/tests/angular/package.json @@ -3,11 +3,13 @@ "version": "1.0.0", "private": true, "description": "Smoke test for Angular project integration.", + "type": "module", "scripts": { "test": "eslint ." }, "peerDependencies": { - "@ni/eslint-config-angular": "*" + "@ni/eslint-config-angular": "*", + "@ni/eslint-config-javascript": "*" }, "dependencies": { "@angular/core": "^18.2.13" diff --git a/tests/angular/tsconfig.json b/tests/angular/tsconfig.json index 09b71a3..4876b74 100644 --- a/tests/angular/tsconfig.json +++ b/tests/angular/tsconfig.json @@ -1,6 +1,13 @@ { "compilerOptions": { - "experimentalDecorators": true + "strict": true, + "target": "ES2020", + "module":"node16", + "moduleResolution": "node16", + "experimentalDecorators": true, + }, + "angularCompilerOptions": { + "strictTemplates": true }, "include": ["."] } \ No newline at end of file diff --git a/tests/javascript/.eslintrc.js b/tests/javascript/.eslintrc.js deleted file mode 100644 index dbabe91..0000000 --- a/tests/javascript/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-javascript', - root: true -}; \ No newline at end of file diff --git a/tests/javascript/CHANGELOG.json b/tests/javascript/CHANGELOG.json deleted file mode 100644 index 161169a..0000000 --- a/tests/javascript/CHANGELOG.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "@ni/javascript-test", - "entries": [ - { - "date": "Wed, 29 Sep 2021 22:10:29 GMT", - "tag": "@ni/javascript-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/javascript-test", - "comment": "Bump @ni/eslint-config-javascript to v3.0.1", - "commit": "2eefa5b8f9bd3e68031cdb0e928cd97254a45ba6" - } - ] - } - } - ] -} diff --git a/tests/javascript/CHANGELOG.md b/tests/javascript/CHANGELOG.md deleted file mode 100644 index cad4d35..0000000 --- a/tests/javascript/CHANGELOG.md +++ /dev/null @@ -1,13 +0,0 @@ -# Change Log - @ni/javascript-test - -This log was last generated on Wed, 29 Sep 2021 22:10:29 GMT and should not be manually modified. - - - -## 1.0.0 - -Wed, 29 Sep 2021 22:10:29 GMT - -### Patches - -- Bump @ni/eslint-config-javascript to v3.0.1 diff --git a/tests/javascript/eslint.config.js b/tests/javascript/eslint.config.js new file mode 100644 index 0000000..662b25b --- /dev/null +++ b/tests/javascript/eslint.config.js @@ -0,0 +1,6 @@ +import { defineConfig } from 'eslint/config'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; + +export default defineConfig([ + javascriptConfig, +]); diff --git a/tests/javascript/package.json b/tests/javascript/package.json index 0788365..6f00dbf 100644 --- a/tests/javascript/package.json +++ b/tests/javascript/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "private": true, "description": "Smoke test for JavaScript project integration.", + "type": "module", "scripts": { "test": "eslint ." }, diff --git a/tests/playwright-requiring-type-checking/.eslintrc.js b/tests/playwright-requiring-type-checking/.eslintrc.js deleted file mode 100644 index f328aeb..0000000 --- a/tests/playwright-requiring-type-checking/.eslintrc.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - extends: [ - '@ni/eslint-config-playwright', - '@ni/eslint-config-playwright/requiring-type-checking' - ], - ignorePatterns: ['*.js'], - parserOptions: { - project: ['./tsconfig.json'], - // Resolve the project relative to this file's directory. - // https://stackoverflow.com/questions/64933543/parsing-error-cannot-read-file-tsconfig-json-eslint - tsconfigRootDir: __dirname, - }, - root: true, - overrides: [ - { - files: [ - '*.ts', - ], - rules: { - // In this example app, all files are allowed to refer to playwright packages from devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - } - } - ] -}; diff --git a/tests/playwright-requiring-type-checking/README.md b/tests/playwright-requiring-type-checking/README.md deleted file mode 100644 index 52fd19f..0000000 --- a/tests/playwright-requiring-type-checking/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Playwright Requiring Type Checking Smoke Test - -## Overview - -This package is an smoke test for using the Playwright requiring type checking rules in a project. See [CONTRIBUTING.md](../../CONTRIBUTING.md#smoke-tests) for more information. diff --git a/tests/playwright-requiring-type-checking/index.ts b/tests/playwright-requiring-type-checking/index.ts deleted file mode 100644 index 944e258..0000000 --- a/tests/playwright-requiring-type-checking/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { test, expect } from '@playwright/test'; - -test.describe('AssetDisplayPropertiesSidenavWrapperComponent', () => { - test('has title', async ({ page }) => { - await page.goto('https://playwright.dev/'); - - // Expect a title "to contain" a substring. - await expect(page).toHaveTitle(/Playwright/); - }); -}); \ No newline at end of file diff --git a/tests/playwright-requiring-type-checking/package.json b/tests/playwright-requiring-type-checking/package.json deleted file mode 100644 index 16f4d4c..0000000 --- a/tests/playwright-requiring-type-checking/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "@ni/playwright-requiring-type-checking-test", - "version": "1.0.0", - "private": true, - "description": "Smoke test for Playwright requiring type checking project integration.", - "scripts": { - "test": "eslint ." - }, - "peerDependencies": { - "@ni/eslint-config-playwright": "*" - }, - "devDependencies": { - "@playwright/test": "^1.42.1" - } -} diff --git a/tests/playwright-requiring-type-checking/tsconfig.json b/tests/playwright-requiring-type-checking/tsconfig.json deleted file mode 100644 index 3f6b14e..0000000 --- a/tests/playwright-requiring-type-checking/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "files": ["./index.ts"], - "compilerOptions": { - "strictNullChecks": false, - "moduleResolution": "node", - "target": "ES2020", - }, -} diff --git a/tests/playwright/.eslintrc.js b/tests/playwright/.eslintrc.js deleted file mode 100644 index 137406e..0000000 --- a/tests/playwright/.eslintrc.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-playwright', - root: true, - overrides: [ - { - files: [ - '*.ts', - ], - rules: { - // In this example app, all files are allowed to refer to playwright packages from devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - } - } - ] -}; diff --git a/tests/playwright/eslint.config.js b/tests/playwright/eslint.config.js new file mode 100644 index 0000000..1f762b4 --- /dev/null +++ b/tests/playwright/eslint.config.js @@ -0,0 +1,24 @@ +import { defineConfig } from 'eslint/config'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; +import { playwrightConfig } from '@ni/eslint-config-playwright'; + +export default defineConfig([ + { + files: ['**/*.js'], + extends: javascriptConfig, + }, + { + files: ['**/*.ts'], + extends: playwrightConfig, + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsConfigRootDir: import.meta.dirname, + }, + }, + rules: { + // In this example app, all files are allowed to refer to playwright packages from devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + }, + } +]); diff --git a/tests/playwright/package.json b/tests/playwright/package.json index 87bcf55..07b4585 100644 --- a/tests/playwright/package.json +++ b/tests/playwright/package.json @@ -3,10 +3,12 @@ "version": "1.0.0", "private": true, "description": "Smoke test for Playwright project integration.", + "type": "module", "scripts": { "test": "eslint ." }, "peerDependencies": { + "@ni/eslint-config-javascript": "*", "@ni/eslint-config-playwright": "*" }, "devDependencies": { diff --git a/tests/playwright/tsconfig.json b/tests/playwright/tsconfig.json new file mode 100644 index 0000000..0b570f4 --- /dev/null +++ b/tests/playwright/tsconfig.json @@ -0,0 +1,9 @@ +{ + "files": ["./index.ts"], + "compilerOptions": { + "strict": true, + "target": "ES2020", + "module":"node16", + "moduleResolution": "node16", + } +} \ No newline at end of file diff --git a/tests/print-evaluated-rules/.eslintrc.js b/tests/print-evaluated-rules/.eslintrc.js deleted file mode 100644 index b97633f..0000000 --- a/tests/print-evaluated-rules/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-javascript', - root: true -}; diff --git a/tests/print-evaluated-rules/eslint.config.js b/tests/print-evaluated-rules/eslint.config.js new file mode 100644 index 0000000..9dc3f45 --- /dev/null +++ b/tests/print-evaluated-rules/eslint.config.js @@ -0,0 +1,12 @@ +import { defineConfig } from 'eslint/config'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; + +export default defineConfig([ + javascriptConfig, + { + files: ['*.js'], + rules: { + 'no-console': 'off' + } + } +]); diff --git a/tests/print-evaluated-rules/index.js b/tests/print-evaluated-rules/index.js index e9ad36c..a17bb74 100644 --- a/tests/print-evaluated-rules/index.js +++ b/tests/print-evaluated-rules/index.js @@ -1,38 +1,50 @@ -const { ESLint } = require('eslint'); -const angularRules = require('@ni/eslint-config-angular').rules; -const angularTemplateRules = require('@ni/eslint-config-angular/template').rules; -const fs = require('fs'); -const path = require('path'); -const yargs = require('yargs/yargs'); -const { hideBin } = require('yargs/helpers'); +import { ESLint } from 'eslint'; +import { angularTypescriptConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; +import fs from 'fs'; +import path from 'path'; +import yargs from 'yargs/yargs'; +import { hideBin } from 'yargs/helpers'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); (async () => { const argv = yargs(hideBin(process.argv)) .option('audit', { default: true, type: 'boolean' }) - .option('diff', { default: false, description: 'diff the evaluated rules with old rules from rules.txt', type: 'boolean' }) - .option('no-audit', { description: 'return the evaluated rules only', type: 'boolean' }) + .option('diff', { + default: false, + description: 'diff the evaluated rules with old rules from rules.txt', + type: 'boolean', + }) + .option('no-audit', { + description: 'return the evaluated rules only', + type: 'boolean', + }) .scriptName('') - .wrap(null) - .argv; + .wrap(null).argv; const hasWarn = function (config) { - return JSON.stringify(config).indexOf('"warn"') !== -1; + return JSON.stringify(normalizeRulesSeverityToString(config.rules)).indexOf('"warn"') !== -1; }; - const eslint = new ESLint(); - const configEslint = await eslint.calculateConfigForFile(require.resolve('@ni/javascript-test/index.js')); - const configTypescript = await eslint.calculateConfigForFile(require.resolve('@ni/typescript-test/index.ts')); - const configTypescriptTypechecked = await eslint.calculateConfigForFile(require.resolve('@ni/typescript-requiring-type-checking-test/index.ts')); - const configAngular = await eslint.calculateConfigForFile(require.resolve('@ni/angular-test/index.ts')); - const configAngularTemplate = await eslint.calculateConfigForFile(require.resolve('@ni/angular-test/index.html')); + const testDir = path.resolve(__dirname, '..'); + const jsPath = path.join(testDir, 'javascript', 'index.js'); + const tsPath = path.join(testDir, 'typescript', 'index.ts'); + const angularTsPath = path.join(testDir, 'angular', 'index.ts'); + const angularHtmlPath = path.join(testDir, 'angular', 'index.html'); + + const configEslint = await calculateConfigForFile(jsPath); + const configTypescript = await calculateConfigForFile(tsPath); + const configAngular = await calculateConfigForFile(angularTsPath); + const configAngularTemplate = await calculateConfigForFile(angularHtmlPath); const getRules = function () { return { - ...configEslint.rules, - ...configTypescript.rules, - ...configTypescriptTypechecked.rules, - ...configAngular.rules, - ...configAngularTemplate.rules + ...normalizeRulesSeverityToString(configEslint.rules), + ...normalizeRulesSeverityToString(configTypescript.rules), + ...normalizeRulesSeverityToString(configAngular.rules), + ...normalizeRulesSeverityToString(configAngularTemplate.rules) }; }; @@ -59,9 +71,9 @@ const { hideBin } = require('yargs/helpers'); if (logs.length) { fs.writeFileSync(path.join(dir, 'rules-diff.txt'), logs.join('')); - global.console.log(logs.join('')); + console.log(logs.join('')); } else { - global.console.log('There were no changes.'); + console.log('There were no changes.'); } return; @@ -73,28 +85,71 @@ const { hideBin } = require('yargs/helpers'); fs.mkdirSync(dir); } fs.writeFileSync(path.join(dir, 'rules.txt'), json); - global.console.log(json); + console.log(json); return; } - const getDivergedRules = rules => ( - Object.keys(rules) - .filter(key => !key.startsWith('@angular-eslint')) - .filter(key => !configTypescript.rules[key] && !configTypescriptTypechecked.rules[key]) - .reduce((config, key) => { - config[key] = rules[key]; - return config; - }, {}) + const getDivergedRules = rules => (Object.keys(rules) + .filter(key => !key.startsWith('@angular-eslint')) + .filter( + key => !configTypescript.rules[key] + ) + .reduce((config, key) => { + config[key] = rules[key]; + return config; + }, {})); + + const angularDivergedRules = getDivergedRules(Object.assign({}, ...angularTypescriptConfig.slice(-2).map(item => item.rules))); + const angularTemplateDivergedRules = getDivergedRules(Object.assign({}, ...angularTemplateConfig.slice(-2).map(item => item.rules))); + const angularHasDivergedRules = !!Object.keys(angularDivergedRules).length + || !!Object.keys(angularTemplateDivergedRules).length; + + console.log('-------- Audits:'); + console.log(`Evaluated ESLint rules has warn?: ${hasWarn(configEslint)}`); + console.log( + `Evaluated TypeScript rules has warn?: ${hasWarn(configTypescript)}` ); - const angularDivergedRules = getDivergedRules(angularRules); - const angularTemplateDivergedRules = getDivergedRules(angularTemplateRules); - const angularHasDivergedRules = !!Object.keys(angularDivergedRules).length || !!Object.keys(angularTemplateDivergedRules).length; - - global.console.log('-------- Audits:'); - global.console.log(`Evaluated ESLint rules has warn?: ${hasWarn(configEslint)}`); - global.console.log(`Evaluated TypeScript rules has warn?: ${hasWarn(configTypescript)}`); - global.console.log(`Evaluated TypeScript type checking rules has warn?: ${hasWarn(configTypescriptTypechecked)}`); - global.console.log(`Evaluated Angular rules has warn?: ${hasWarn(configAngular)}`); - global.console.log(`Evaluated Angular Template rules has warn?: ${hasWarn(configAngularTemplate)}`); - global.console.log(`Angular has diverged rules?: ${angularHasDivergedRules}`); + console.log(`Evaluated Angular rules has warn?: ${hasWarn(configAngular)}`); + console.log( + `Evaluated Angular Template rules has warn?: ${hasWarn( + configAngularTemplate + )}` + ); + console.log(`Angular has diverged rules?: ${angularHasDivergedRules}`); })(); + +async function calculateConfigForFile(filePath) { + const eslint = new ESLint({ + cwd: path.resolve(filePath, '..') + }); + + return await eslint.calculateConfigForFile(filePath); +} + +function normalizeSeverityToString(val) { + switch (val) { + case 0: + return 'off'; + case 1: + return 'warn'; + case 2: + return 'error'; + default: + return val; + } +} + +function normalizeRulesSeverityToString(rulesObj) { + const updatedRules = {}; + for (const ruleName in rulesObj) { + if (Object.prototype.hasOwnProperty.call(rulesObj, ruleName)) { + const ruleVal = rulesObj[ruleName]; + if (Array.isArray(ruleVal)) { + updatedRules[ruleName] = [normalizeSeverityToString(ruleVal[0]), ...ruleVal.slice(1)]; + } else { + updatedRules[ruleName] = normalizeSeverityToString(ruleVal); + } + } + } + return updatedRules; +} diff --git a/tests/print-evaluated-rules/package.json b/tests/print-evaluated-rules/package.json index 8846c7a..7eabb10 100644 --- a/tests/print-evaluated-rules/package.json +++ b/tests/print-evaluated-rules/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "private": true, "description": "Meta project used to analyze the integration tests.", + "type": "module", "scripts": { "lint": "eslint .", "print-evaluated-rules": "node index.js", @@ -10,13 +11,13 @@ "print-evaluated-rules:no-audit": "node index.js --no-audit" }, "peerDependencies": { - "@angular-eslint/eslint-plugin": "^18.4.3", + "angular-eslint": "18.4.3", "@ni/angular-test": "*", "@ni/eslint-config-angular": "*", + "@ni/eslint-config-javascript": "*", "@ni/javascript-test": "*", "@ni/typescript-test": "*", - "@ni/typescript-requiring-type-checking-test": "*", - "eslint": "^8.57.0" + "eslint": "^9.35.0" }, "dependencies": { "yargs": "^17.7.2" diff --git a/tests/typescript-requiring-type-checking/.eslintrc.js b/tests/typescript-requiring-type-checking/.eslintrc.js deleted file mode 100644 index a907b9f..0000000 --- a/tests/typescript-requiring-type-checking/.eslintrc.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - extends: [ - '@ni/eslint-config-typescript', - '@ni/eslint-config-typescript/requiring-type-checking' - ], - ignorePatterns: ['*.js'], - parserOptions: { - project: ['./tsconfig.json'], - // Resolve the project relative to this file's directory. - // https://stackoverflow.com/questions/64933543/parsing-error-cannot-read-file-tsconfig-json-eslint - tsconfigRootDir: __dirname, - }, - root: true -}; diff --git a/tests/typescript-requiring-type-checking/CHANGELOG.json b/tests/typescript-requiring-type-checking/CHANGELOG.json deleted file mode 100644 index 643199e..0000000 --- a/tests/typescript-requiring-type-checking/CHANGELOG.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@ni/typescript-requiring-type-checking-test", - "entries": [ - { - "date": "Thu, 28 Oct 2021 15:59:19 GMT", - "tag": "@ni/typescript-requiring-type-checking-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/typescript-requiring-type-checking-test", - "comment": "Bump @ni/eslint-config-typescript to v3.0.2", - "commit": "772f17b65e83107fd8682087c87b9619a5c2ea38" - } - ] - } - }, - { - "date": "Wed, 29 Sep 2021 22:10:29 GMT", - "tag": "@ni/typescript-requiring-type-checking-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/typescript-requiring-type-checking-test", - "comment": "Bump @ni/eslint-config-typescript to v3.0.1", - "commit": "2eefa5b8f9bd3e68031cdb0e928cd97254a45ba6" - } - ] - } - } - ] -} diff --git a/tests/typescript-requiring-type-checking/CHANGELOG.md b/tests/typescript-requiring-type-checking/CHANGELOG.md deleted file mode 100644 index f22fbee..0000000 --- a/tests/typescript-requiring-type-checking/CHANGELOG.md +++ /dev/null @@ -1,21 +0,0 @@ -# Change Log - @ni/typescript-requiring-type-checking-test - -This log was last generated on Thu, 28 Oct 2021 15:59:19 GMT and should not be manually modified. - - - -## 1.0.0 - -Thu, 28 Oct 2021 15:59:19 GMT - -### Patches - -- Bump @ni/eslint-config-typescript to v3.0.2 - -## 1.0.0 - -Wed, 29 Sep 2021 22:10:29 GMT - -### Patches - -- Bump @ni/eslint-config-typescript to v3.0.1 diff --git a/tests/typescript-requiring-type-checking/README.md b/tests/typescript-requiring-type-checking/README.md deleted file mode 100644 index 7083a24..0000000 --- a/tests/typescript-requiring-type-checking/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# TypeScript Requring Type Checking Smoke Test - -## Overview - -This package is an smoke test for using the TypeScript requiring type checking rules in a project. See [CONTRIBUTING.md](../../CONTRIBUTING.md#smoke-tests) for more information. diff --git a/tests/typescript-requiring-type-checking/index.ts b/tests/typescript-requiring-type-checking/index.ts deleted file mode 100644 index e8fea41..0000000 --- a/tests/typescript-requiring-type-checking/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -// TypeScript Smoke Test - -export class NI { - private _awesomeLevel = 1; - - public get awesome(): boolean { - return this._awesomeLevel > 0; - } - - public makeAwesomer(): void { - this._awesomeLevel += 1; - } - - public async slowAdd(a: number, b: number, timeMs: number): Promise { - return await new Promise(resolve => { - setTimeout(() => resolve(a + b), timeMs); - }); - } -} diff --git a/tests/typescript-requiring-type-checking/package.json b/tests/typescript-requiring-type-checking/package.json deleted file mode 100644 index 937c019..0000000 --- a/tests/typescript-requiring-type-checking/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "@ni/typescript-requiring-type-checking-test", - "version": "1.0.0", - "private": true, - "description": "Smoke test for TypeScript projects using type checking.", - "scripts": { - "test": "eslint ." - }, - "peerDependencies": { - "@ni/eslint-config-typescript": "*" - } -} diff --git a/tests/typescript-requiring-type-checking/tsconfig.json b/tests/typescript-requiring-type-checking/tsconfig.json deleted file mode 100644 index 73a95ee..0000000 --- a/tests/typescript-requiring-type-checking/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "files": ["./index.ts"], - "compilerOptions": { - "strictNullChecks": false, - "target": "ES2020" - }, -} diff --git a/tests/typescript/.eslintrc.js b/tests/typescript/.eslintrc.js deleted file mode 100644 index 2680f66..0000000 --- a/tests/typescript/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-typescript', - root: true -}; diff --git a/tests/typescript/CHANGELOG.json b/tests/typescript/CHANGELOG.json deleted file mode 100644 index 452aa9c..0000000 --- a/tests/typescript/CHANGELOG.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@ni/typescript-test", - "entries": [ - { - "date": "Thu, 28 Oct 2021 15:59:19 GMT", - "tag": "@ni/typescript-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/typescript-test", - "comment": "Bump @ni/eslint-config-typescript to v3.0.2", - "commit": "772f17b65e83107fd8682087c87b9619a5c2ea38" - } - ] - } - }, - { - "date": "Wed, 29 Sep 2021 22:10:29 GMT", - "tag": "@ni/typescript-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/typescript-test", - "comment": "Bump @ni/eslint-config-typescript to v3.0.1", - "commit": "2eefa5b8f9bd3e68031cdb0e928cd97254a45ba6" - } - ] - } - } - ] -} diff --git a/tests/typescript/CHANGELOG.md b/tests/typescript/CHANGELOG.md deleted file mode 100644 index ac35821..0000000 --- a/tests/typescript/CHANGELOG.md +++ /dev/null @@ -1,21 +0,0 @@ -# Change Log - @ni/typescript-test - -This log was last generated on Thu, 28 Oct 2021 15:59:19 GMT and should not be manually modified. - - - -## 1.0.0 - -Thu, 28 Oct 2021 15:59:19 GMT - -### Patches - -- Bump @ni/eslint-config-typescript to v3.0.2 - -## 1.0.0 - -Wed, 29 Sep 2021 22:10:29 GMT - -### Patches - -- Bump @ni/eslint-config-typescript to v3.0.1 diff --git a/tests/typescript/eslint.config.js b/tests/typescript/eslint.config.js new file mode 100644 index 0000000..3d3c1e6 --- /dev/null +++ b/tests/typescript/eslint.config.js @@ -0,0 +1,17 @@ +import { defineConfig } from 'eslint/config'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; +import { typescriptConfig } from '@ni/eslint-config-typescript'; + +export default defineConfig([ + javascriptConfig, + { + files: ['**/*.ts'], + extends: typescriptConfig, + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsConfigRootDir: import.meta.dirname, + }, + }, + }, +]); diff --git a/tests/typescript/index.ts b/tests/typescript/index.ts index 6eafbbc..c1e23a7 100644 --- a/tests/typescript/index.ts +++ b/tests/typescript/index.ts @@ -14,4 +14,10 @@ export class NI { public makeAwesomer(): void { this._awesomeLevel += 1; } + + public async slowAdd(a: number, b: number, timeMs: number): Promise { + return await new Promise(resolve => { + setTimeout(() => resolve(a + b), timeMs); + }); + } } diff --git a/tests/typescript/package.json b/tests/typescript/package.json index 9b3acb1..3fb0f75 100644 --- a/tests/typescript/package.json +++ b/tests/typescript/package.json @@ -3,10 +3,12 @@ "version": "1.0.0", "private": true, "description": "Smoke test for TypeScript project integration.", + "type": "module", "scripts": { "test": "eslint ." }, "peerDependencies": { + "@ni/eslint-config-javascript": "*", "@ni/eslint-config-typescript": "*" } } diff --git a/tests/typescript/tsconfig.json b/tests/typescript/tsconfig.json new file mode 100644 index 0000000..5a78fd9 --- /dev/null +++ b/tests/typescript/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": ["./index.ts"], + "compilerOptions": { + "strict": true, + "target": "ES2020" + } +} \ No newline at end of file