diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 3fabd0f9ab..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,18 +0,0 @@ -dist -node_modules -coverage - -# eslint ignores root level "dot" files by default -!/.*.js - -# ignore build tokens -/apps/docs/src/styles/koobiq/default-theme/ - -# ignore nunjuck templates -/tools/api-gen/rendering/templates - -# ignore index.html -**/index.html - -# ignore mocks -**/mock.ts diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 0e15b32b99..0000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,532 +0,0 @@ -// @ts-check - -const isCI = !!process.env.CI; - -/** - * @param {string} str - * @returns {string} - */ -const capitalizeFirst = (str) => str.charAt(0).toUpperCase() + str.slice(1); - -/** - * @see https://typescript-eslint.io/rules/naming-convention/#options - * - * @param {string} prefix - */ -const makeNamingConventionOptions = (prefix) => { - return [ - { selector: 'variable', format: ['camelCase', 'UPPER_CASE'], leadingUnderscore: 'allow' }, - { - selector: 'variable', - modifiers: ['exported'], - format: ['StrictPascalCase', 'UPPER_CASE'], - prefix: [prefix, `${prefix.toUpperCase()}_`] - }, - - { selector: 'function', format: ['camelCase'] }, - { selector: 'function', modifiers: ['exported'], format: ['StrictPascalCase'], prefix: [prefix] }, - - { selector: 'interface', format: ['PascalCase'] }, - { - selector: 'interface', - modifiers: ['exported'], - format: ['StrictPascalCase'], - prefix: [capitalizeFirst(prefix)] - }, - - { selector: 'typeLike', format: ['PascalCase'] }, - { - selector: 'typeLike', - modifiers: ['exported'], - format: ['StrictPascalCase'], - prefix: [capitalizeFirst(prefix)] - }, - - { selector: 'enum', format: ['PascalCase'] }, - { selector: 'enum', modifiers: ['exported'], format: ['StrictPascalCase'], prefix: [capitalizeFirst(prefix)] }, - { selector: 'enumMember', format: ['PascalCase'] }, - - { selector: 'class', format: ['PascalCase'] }, - { selector: 'class', modifiers: ['exported'], format: ['PascalCase'], prefix: [capitalizeFirst(prefix)] }, - { selector: 'classMethod', format: ['camelCase'] }, - { selector: 'classProperty', format: ['camelCase', 'UPPER_CASE'], leadingUnderscore: 'allow' } - ]; -}; - -/** - * @see https://eslint.org/docs/latest/rules/no-restricted-globals - */ -const noRestrictedGlobalsOptionsForSSR = (() => { - /** @type {Array} */ - const restrictedWindowGlobals = [ - 'window', - 'open', - 'close', - 'scroll', - 'scrollTo', - 'scrollBy', - 'requestAnimationFrame', - 'cancelAnimationFrame', - 'requestIdleCallback', - 'cancelIdleCallback', - 'getComputedStyle', - 'matchMedia', - 'navigator', - 'location', - 'history', - 'screen', - 'localStorage', - 'sessionStorage', - 'crypto', - 'caches', - 'performance', - 'speechSynthesis' - ]; - - const restrictedOptions = restrictedWindowGlobals.map((name) => ({ - name, - message: `Global property '${name}' is not available is SSR. Use 'KBQ_WINDOW' injection token from '@koobiq/components/core' instead.` - })); - - restrictedOptions.push({ - name: 'document', - message: `Global property 'document' is not available is SSR. Use 'DOCUMENT' injection token from '@angular/common' instead.` - }); - - return restrictedOptions; -})(); - -/** - * Rules for JavaScript and TypeScript files - * - * @type {import('eslint').Linter.ConfigOverride} - */ -const javascriptAndTypescriptRules = { - files: ['*.js', '*.ts'], - extends: [ - 'eslint:recommended', - 'plugin:promise/recommended' - ], - plugins: [ - '@stylistic' - ], - rules: { - // plugin:eslint - 'no-useless-escape': 0, - 'no-self-assign': 0, - 'no-prototype-builtins': 0, - 'no-console': 1, - - // plugin:promise - 'promise/catch-or-return': 0, - 'promise/always-return': 0, - - // @stylistic - '@stylistic/padding-line-between-statements': [ - 1, - { blankLine: 'always', next: 'block', prev: '*' }, - { blankLine: 'always', next: '*', prev: 'block' }, - { blankLine: 'always', next: 'block-like', prev: '*' }, - { blankLine: 'always', next: '*', prev: 'block-like' }, - { blankLine: 'always', next: 'return', prev: '*' }, - { blankLine: 'always', next: '*', prev: 'directive' }, - { blankLine: 'always', next: ['interface', 'type'], prev: '*' }, - { blankLine: 'always', next: '*', prev: ['const', 'let', 'var'] }, - { blankLine: 'always', next: 'class', prev: '*' }, - { blankLine: 'always', next: '*', prev: 'class' }, - { - blankLine: 'any', - next: ['const', 'let', 'var', 'export'], - prev: ['const', 'let', 'var', 'export'] - }, - { blankLine: 'any', next: ['case', 'default'], prev: '*' }, - { blankLine: 'any', next: '*', prev: ['case', 'default'] }, - { blankLine: 'any', next: 'directive', prev: 'directive' } - ] - } -}; - -/** - * Rules for TypeScript files - * - * @type {import('eslint').Linter.ConfigOverride} - */ -const typescriptRules = { - files: ['*.ts'], - parser: '@typescript-eslint/parser', - parserOptions: { - project: './tsconfig.eslint.json', - tsconfigRootDir: __dirname - }, - extends: [ - /** @see https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/eslintrc/all.ts */ - 'plugin:@typescript-eslint/recommended', - /** @see https://github.com/angular-eslint/angular-eslint/blob/main/packages/angular-eslint/src/configs/ts-all.ts */ - 'plugin:@angular-eslint/all', - 'plugin:@angular-eslint/template/process-inline-templates', - 'plugin:rxjs/recommended' - ], - rules: { - // plugin:@typescript-eslint - '@typescript-eslint/no-explicit-any': 0, - '@typescript-eslint/no-var-requires': 0, - '@typescript-eslint/no-unused-vars': [ - 1, - { - argsIgnorePattern: '^_' - } - ], - '@typescript-eslint/no-duplicate-enum-values': 0, - '@typescript-eslint/ban-tslint-comment': 1, - - // plugin:@angular-eslint - '@angular-eslint/component-class-suffix': 0, - '@angular-eslint/no-host-metadata-property': 0, - '@angular-eslint/directive-class-suffix': 0, - '@angular-eslint/no-output-rename': 0, - '@angular-eslint/no-inputs-metadata-property': 0, - '@angular-eslint/no-output-on-prefix': 0, - '@angular-eslint/no-input-rename': 0, - '@angular-eslint/no-outputs-metadata-property': 0, - '@angular-eslint/no-output-native': 0, - '@angular-eslint/prefer-on-push-component-change-detection': 0, - '@angular-eslint/relative-url-prefix': 0, - '@angular-eslint/component-max-inline-declarations': 0, - '@angular-eslint/consistent-component-styles': 0, - '@angular-eslint/use-component-view-encapsulation': 0, - '@angular-eslint/use-injectable-provided-in': 0, - '@angular-eslint/no-forward-ref': 0, - '@angular-eslint/no-conflicting-lifecycle': 0, - '@angular-eslint/no-attribute-decorator': 0, - '@angular-eslint/no-pipe-impure': 0, - '@angular-eslint/sort-ngmodule-metadata-arrays': 0, - '@angular-eslint/template/cyclomatic-complexity': 0, - - '@angular-eslint/prefer-signals': 0, - '@angular-eslint/prefer-output-emitter-ref': 0, - '@angular-eslint/prefer-inject': 0, - - // plugin:rxjs - 'rxjs/no-implicit-any-catch': 0, - 'rxjs/no-sharereplay': 0, - 'rxjs/no-internal': 0, - 'rxjs/no-unbound-methods': 0, - 'rxjs/no-topromise': 1, - 'rxjs/throw-error': 1 - } -}; - -/** - * Rules for Angular templates - * - * @type {import('eslint').Linter.ConfigOverride} - */ -const templateRules = { - files: ['*.html'], - extends: [ - /** @see https://github.com/angular-eslint/angular-eslint/blob/main/packages/angular-eslint/src/configs/template-all.ts */ - 'plugin:@angular-eslint/template/all' - ], - rules: { - // plugin:@angular-eslint/template - '@angular-eslint/template/no-autofocus': 0, - '@angular-eslint/template/elements-content': 0, - '@angular-eslint/template/click-events-have-key-events': 0, - '@angular-eslint/template/interactive-supports-focus': 0, - '@angular-eslint/template/label-has-associated-control': 0, - '@angular-eslint/template/i18n': 0, - '@angular-eslint/template/no-call-expression': 0, - '@angular-eslint/template/prefer-ngsrc': 0, - '@angular-eslint/template/no-inline-styles': 0, - '@angular-eslint/template/button-has-type': 0, - '@angular-eslint/template/no-interpolation-in-attributes': 0, - '@angular-eslint/template/no-any': 0, - '@angular-eslint/template/prefer-static-string-properties': 0, - '@angular-eslint/template/cyclomatic-complexity': 0, - // Allow combining a static `class`/`style` attribute with its `[class]`/`[style]` binding. - // Angular merges them via styling precedence, so this is a valid pattern (e.g. after the - // NgClass -> [class] migration). Genuine duplicates (two static `class`, two `[class]`) are - // still reported. - '@angular-eslint/template/no-duplicate-attributes': [ - 2, - { - allowStylePrecedenceDuplicates: true - } - ] - } -}; - -/** - * Override rules for packages/components-dev - * - * @type {import('eslint').Linter.ConfigOverride} - */ -const componentsDevRules = { - files: ['packages/components-dev/**/*.ts'], - rules: { - // plugin:eslint - 'no-restricted-globals': [ - 1, - ...noRestrictedGlobalsOptionsForSSR - ], - 'no-console': 0, - - // plugin:@angular-eslint - '@angular-eslint/directive-selector': [ - 1, - { - type: 'attribute', - prefix: 'dev', - style: 'camelCase' - } - ], - '@angular-eslint/component-selector': [ - 1, - { - type: 'element', - prefix: 'dev', - style: 'kebab-case' - } - ], - '@angular-eslint/use-component-selector': 1, - '@angular-eslint/prefer-on-push-component-change-detection': 1, - - // plugin:@typescript-eslint - '@typescript-eslint/naming-convention': [ - 1, - ...makeNamingConventionOptions('dev') - ] - } -}; - -/** - * Override rules for packages/docs-examples - * - * @type {import('eslint').Linter.ConfigOverride} - */ -const componentsExamplesRules = { - files: ['packages/docs-examples/**/*.ts'], - rules: { - // plugin:eslint - 'no-restricted-globals': [ - 1, - ...noRestrictedGlobalsOptionsForSSR - ], - 'no-console': 0, - - // plugin:@angular-eslint - '@angular-eslint/use-component-selector': 1, - '@angular-eslint/prefer-on-push-component-change-detection': 1 - } -}; - -/** - * Override rules for e2e - * - * @type {import('eslint').Linter.ConfigOverride} - */ -const e2eRules = { - files: ['*.playwright-spec.ts', '**/e2e.ts', 'packages/e2e/**/*.ts'], - rules: { - // plugin:eslint - // ignore `noRestrictedGlobalsOptionsForSSR` in e2e tests, because they are not executed in SSR context - 'no-restricted-globals': 0, - - // plugin:@angular-eslint - '@angular-eslint/directive-selector': [ - 1, - { - type: 'attribute', - prefix: 'e2e', - style: 'camelCase' - } - ], - '@angular-eslint/component-selector': [ - 1, - { - type: 'element', - prefix: 'e2e', - style: 'kebab-case' - } - ], - '@angular-eslint/use-component-selector': 1, - '@angular-eslint/prefer-on-push-component-change-detection': 1, - - // plugin:@typescript-eslint - '@typescript-eslint/naming-convention': [ - 1, - ...makeNamingConventionOptions('e2e') - ] - } -}; - -/** - * Override rules for packages/components - * - * @type {import('eslint').Linter.ConfigOverride} - */ -const componentsRules = { - files: ['packages/components/**/*.ts'], - rules: { - // plugin:eslint - 'no-restricted-globals': [ - 1, - ...noRestrictedGlobalsOptionsForSSR - ] - } -}; - -/** - * Override rules for apps/docs - * - * @type {import('eslint').Linter.ConfigOverride} - */ -const appDocsRules = { - files: ['apps/docs/**/*.ts'], - rules: { - // plugin:eslint - 'no-console': [1, { allow: ['warn', 'error'] }], - 'no-restricted-globals': [ - 1, - ...noRestrictedGlobalsOptionsForSSR - ], - - // plugin:@angular-eslint - '@angular-eslint/directive-selector': [ - 1, - { - type: 'attribute', - prefix: 'docs', - style: 'camelCase' - } - ], - '@angular-eslint/component-selector': [ - 1, - { - type: 'element', - prefix: 'docs', - style: 'kebab-case' - } - ], - '@angular-eslint/use-component-selector': 1, - - // plugin:@typescript-eslint - '@typescript-eslint/naming-convention': [ - 1, - ...makeNamingConventionOptions('docs') - ] - } -}; - -/** - * Override rules for specs - * - * @type {import('eslint').Linter.ConfigOverride} - */ -const specRules = { - files: ['*.spec.ts'], - rules: { - // plugin:eslint - // ignore `noRestrictedGlobalsOptionsForSSR` in specs, because they are not executed in SSR context - 'no-restricted-globals': 0, - - // plugin:@angular-eslint - '@angular-eslint/use-component-selector': 0, - '@angular-eslint/prefer-on-push-component-change-detection': 0 - } -}; - -/** - * Override rules for /tools - * - * @type {import('eslint').Linter.ConfigOverride} - */ -const toolsRules = { - files: ['tools/**/*.ts', 'tools/**/*.js'], - rules: { - // plugin:eslint - 'no-console': 0, - - // plugin:@typescript-eslint - // node-only build scripts may use require() for legacy CommonJS modules - '@typescript-eslint/no-require-imports': 0 - } -}; - -/** - * Override rules for /packages/schematics/ - * - * @type {import('eslint').Linter.ConfigOverride} - */ -const schematicsRules = { - files: ['packages/schematics/**/*.ts', 'packages/schematics/**/*.js'], - rules: { - // plugin:eslint - 'no-console': 0 - } -}; - -/** - * Override rules for /packages/cli/ - * - * @type {import('eslint').Linter.ConfigOverride} - */ -const cliRules = { - files: ['packages/cli/**/*.ts', 'packages/cli/**/*.js'], - rules: { - // plugin:eslint - 'no-console': 0, - - // plugin:@typescript-eslint - // node-only CLI scripts may use require() for legacy CommonJS modules - '@typescript-eslint/no-require-imports': 0 - } -}; - -/** @type {import('eslint').Linter.ConfigOverride} */ -const prettierRules = { - files: ['*.js', '*.ts', '*.html'], - extends: ['plugin:prettier/recommended'] -}; - -/** @type {import('eslint').Linter.Config} */ -const config = { - root: true, - env: { - es2022: true, - commonjs: true, - node: true - }, - plugins: [ - 'file-progress' - ], - extends: [ - 'plugin:@eslint-community/eslint-comments/recommended' - ], - rules: { - // plugin:file-progress - 'file-progress/activate': isCI ? 0 : 1, - - // plugin:@eslint-community/eslint-comments - '@eslint-community/eslint-comments/no-unused-disable': 1, - '@eslint-community/eslint-comments/disable-enable-pair': [1, { allowWholeFile: true }] - }, - overrides: [ - javascriptAndTypescriptRules, - typescriptRules, - templateRules, - appDocsRules, - componentsDevRules, - componentsExamplesRules, - componentsRules, - specRules, - e2eRules, - toolsRules, - schematicsRules, - cliRules, - // should be last - prettierRules - ] -}; - -module.exports = config; diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000000..7e5a4f39be --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,522 @@ +// @ts-check + +const eslint = require('@eslint/js'); +const tseslint = require('typescript-eslint'); +const angular = require('angular-eslint'); +const globals = require('globals'); +const stylistic = require('@stylistic/eslint-plugin'); +const promise = require('eslint-plugin-promise'); +// eslint-plugin-rxjs-x ships as transpiled ESM (the plugin object lives under `.default`) +const rxjs = require('eslint-plugin-rxjs-x').default; +const comments = require('@eslint-community/eslint-plugin-eslint-comments/configs'); +const progress = require('eslint-plugin-file-progress'); +const prettierRecommended = require('eslint-plugin-prettier/recommended'); + +const isCI = !!process.env.CI; + +/** + * @param {string} str + * @returns {string} + */ +const capitalizeFirst = (str) => str.charAt(0).toUpperCase() + str.slice(1); + +/** + * @see https://typescript-eslint.io/rules/naming-convention/#options + * + * @param {string} prefix + */ +const makeNamingConventionOptions = (prefix) => { + return [ + { selector: 'variable', format: ['camelCase', 'UPPER_CASE'], leadingUnderscore: 'allow' }, + { + selector: 'variable', + modifiers: ['exported'], + format: ['StrictPascalCase', 'UPPER_CASE'], + prefix: [prefix, `${prefix.toUpperCase()}_`] + }, + + { selector: 'function', format: ['camelCase'] }, + { selector: 'function', modifiers: ['exported'], format: ['StrictPascalCase'], prefix: [prefix] }, + + { selector: 'interface', format: ['PascalCase'] }, + { + selector: 'interface', + modifiers: ['exported'], + format: ['StrictPascalCase'], + prefix: [capitalizeFirst(prefix)] + }, + + { selector: 'typeLike', format: ['PascalCase'] }, + { + selector: 'typeLike', + modifiers: ['exported'], + format: ['StrictPascalCase'], + prefix: [capitalizeFirst(prefix)] + }, + + { selector: 'enum', format: ['PascalCase'] }, + { selector: 'enum', modifiers: ['exported'], format: ['StrictPascalCase'], prefix: [capitalizeFirst(prefix)] }, + { selector: 'enumMember', format: ['PascalCase'] }, + + { selector: 'class', format: ['PascalCase'] }, + { selector: 'class', modifiers: ['exported'], format: ['PascalCase'], prefix: [capitalizeFirst(prefix)] }, + { selector: 'classMethod', format: ['camelCase'] }, + { selector: 'classProperty', format: ['camelCase', 'UPPER_CASE'], leadingUnderscore: 'allow' } + ]; +}; + +/** + * @see https://eslint.org/docs/latest/rules/no-restricted-globals + */ +const noRestrictedGlobalsOptionsForSSR = (() => { + /** @type {Array} */ + const restrictedWindowGlobals = [ + 'window', + 'open', + 'close', + 'scroll', + 'scrollTo', + 'scrollBy', + 'requestAnimationFrame', + 'cancelAnimationFrame', + 'requestIdleCallback', + 'cancelIdleCallback', + 'getComputedStyle', + 'matchMedia', + 'navigator', + 'location', + 'history', + 'screen', + 'localStorage', + 'sessionStorage', + 'crypto', + 'caches', + 'performance', + 'speechSynthesis' + ]; + + const restrictedOptions = restrictedWindowGlobals.map((name) => ({ + name, + message: `Global property '${name}' is not available is SSR. Use 'KBQ_WINDOW' injection token from '@koobiq/components/core' instead.` + })); + + restrictedOptions.push({ + name: 'document', + message: `Global property 'document' is not available is SSR. Use 'DOCUMENT' injection token from '@angular/common' instead.` + }); + + return restrictedOptions; +})(); + +module.exports = tseslint.config( + // Global ignores (ported from .eslintignore) + { + ignores: [ + 'dist', + 'node_modules', + 'coverage', + // ignore Yarn's bundled release/plugin binaries (flat config lints .cjs by default, + // unlike the previous `--ext=.js,.ts,.html`) + '.yarn', + // ignore build tokens + 'apps/docs/src/styles/koobiq/default-theme/', + // ignore nunjuck templates + 'tools/api-gen/rendering/templates/**', + // ignore index.html + '**/index.html', + // ignore mocks + '**/mock.ts' + ] + }, + + // plugin:file-progress + { + plugins: { + 'file-progress': progress + }, + rules: { + 'file-progress/activate': isCI ? 0 : 1 + } + }, + + // plugin:@eslint-community/eslint-comments + comments.recommended, + { + rules: { + '@eslint-community/eslint-comments/no-unused-disable': 1, + '@eslint-community/eslint-comments/disable-enable-pair': [1, { allowWholeFile: true }] + } + }, + + // Rules for JavaScript and TypeScript files + { + files: ['**/*.js', '**/*.ts'], + extends: [ + eslint.configs.recommended, + promise.configs['flat/recommended'] + ], + plugins: { + '@stylistic': stylistic + }, + languageOptions: { + globals: { + ...globals.node, + ...globals.es2022 + } + }, + rules: { + // plugin:eslint + 'no-useless-escape': 0, + 'no-self-assign': 0, + 'no-prototype-builtins': 0, + 'no-console': 1, + + // plugin:promise + 'promise/catch-or-return': 0, + 'promise/always-return': 0, + + // @stylistic + '@stylistic/padding-line-between-statements': [ + 1, + { blankLine: 'always', next: 'block', prev: '*' }, + { blankLine: 'always', next: '*', prev: 'block' }, + { blankLine: 'always', next: 'block-like', prev: '*' }, + { blankLine: 'always', next: '*', prev: 'block-like' }, + { blankLine: 'always', next: 'return', prev: '*' }, + { blankLine: 'always', next: '*', prev: 'directive' }, + { blankLine: 'always', next: ['interface', 'type'], prev: '*' }, + { blankLine: 'always', next: '*', prev: ['const', 'let', 'var'] }, + { blankLine: 'always', next: 'class', prev: '*' }, + { blankLine: 'always', next: '*', prev: 'class' }, + { + blankLine: 'any', + next: ['const', 'let', 'var', 'export'], + prev: ['const', 'let', 'var', 'export'] + }, + { blankLine: 'any', next: ['case', 'default'], prev: '*' }, + { blankLine: 'any', next: '*', prev: ['case', 'default'] }, + { blankLine: 'any', next: 'directive', prev: 'directive' } + ] + } + }, + + // JavaScript files in this repo are CommonJS (require/module.exports) + { + files: ['**/*.js'], + languageOptions: { + sourceType: 'commonjs' + }, + rules: { + // ESLint 9 changed the `no-unused-vars` `caughtErrors` default from 'none' to 'all'. + // Restore the previous behavior so unused `catch` bindings are not newly reported. + 'no-unused-vars': ['error', { caughtErrors: 'none' }] + } + }, + + // Rules for TypeScript files + { + files: ['**/*.ts'], + extends: [ + /** @see https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/recommended.ts */ + tseslint.configs.recommended, + /** @see https://github.com/angular-eslint/angular-eslint/blob/main/packages/angular-eslint/src/configs/ts-all.ts */ + angular.configs.tsAll, + rxjs.configs.recommended + ], + processor: angular.processInlineTemplates, + languageOptions: { + parser: tseslint.parser, + parserOptions: { + project: ['tsconfig.eslint.json'], + tsconfigRootDir: __dirname + } + }, + rules: { + // plugin:@typescript-eslint + '@typescript-eslint/no-explicit-any': 0, + '@typescript-eslint/no-var-requires': 0, + '@typescript-eslint/no-unused-vars': [ + 1, + { + argsIgnorePattern: '^_' + } + ], + '@typescript-eslint/no-duplicate-enum-values': 0, + '@typescript-eslint/ban-tslint-comment': 1, + + // plugin:@angular-eslint + '@angular-eslint/component-class-suffix': 0, + '@angular-eslint/no-host-metadata-property': 0, + '@angular-eslint/directive-class-suffix': 0, + '@angular-eslint/no-output-rename': 0, + '@angular-eslint/no-inputs-metadata-property': 0, + '@angular-eslint/no-output-on-prefix': 0, + '@angular-eslint/no-input-rename': 0, + '@angular-eslint/no-outputs-metadata-property': 0, + '@angular-eslint/no-output-native': 0, + '@angular-eslint/prefer-on-push-component-change-detection': 0, + '@angular-eslint/relative-url-prefix': 0, + '@angular-eslint/component-max-inline-declarations': 0, + '@angular-eslint/consistent-component-styles': 0, + '@angular-eslint/use-component-view-encapsulation': 0, + '@angular-eslint/use-injectable-provided-in': 0, + '@angular-eslint/no-forward-ref': 0, + '@angular-eslint/no-conflicting-lifecycle': 0, + '@angular-eslint/no-attribute-decorator': 0, + '@angular-eslint/no-pipe-impure': 0, + '@angular-eslint/sort-ngmodule-metadata-arrays': 0, + + '@angular-eslint/prefer-signals': 0, + '@angular-eslint/prefer-output-emitter-ref': 0, + '@angular-eslint/prefer-inject': 0, + + // plugin:rxjs-x + 'rxjs-x/no-implicit-any-catch': 0, + 'rxjs-x/no-sharereplay': 0, + 'rxjs-x/no-internal': 0, + 'rxjs-x/no-unbound-methods': 0, + 'rxjs-x/no-topromise': 1, + 'rxjs-x/throw-error': 1, + // These rules are new in eslint-plugin-rxjs-x's `recommended` set (they were not enabled by + // the previous eslint-plugin-rxjs). Disabled to preserve the prior lint behavior. + 'rxjs-x/prefer-root-operators': 0, + 'rxjs-x/prefer-observer': 0 + } + }, + + // Rules for Angular templates + { + files: ['**/*.html'], + extends: [ + /** @see https://github.com/angular-eslint/angular-eslint/blob/main/packages/angular-eslint/src/configs/template-all.ts */ + angular.configs.templateAll + ], + languageOptions: { + parser: angular.templateParser + }, + rules: { + // plugin:@angular-eslint/template + '@angular-eslint/template/no-autofocus': 0, + '@angular-eslint/template/elements-content': 0, + '@angular-eslint/template/click-events-have-key-events': 0, + '@angular-eslint/template/interactive-supports-focus': 0, + '@angular-eslint/template/label-has-associated-control': 0, + '@angular-eslint/template/i18n': 0, + '@angular-eslint/template/no-call-expression': 0, + '@angular-eslint/template/prefer-ngsrc': 0, + '@angular-eslint/template/no-inline-styles': 0, + '@angular-eslint/template/button-has-type': 0, + '@angular-eslint/template/no-interpolation-in-attributes': 0, + '@angular-eslint/template/no-any': 0, + '@angular-eslint/template/prefer-static-string-properties': 0, + '@angular-eslint/template/cyclomatic-complexity': 0, + // Allow combining a static `class`/`style` attribute with its `[class]`/`[style]` binding. + // Angular merges them via styling precedence, so this is a valid pattern (e.g. after the + // NgClass -> [class] migration). Genuine duplicates (two static `class`, two `[class]`) are + // still reported. + '@angular-eslint/template/no-duplicate-attributes': [ + 2, + { + allowStylePrecedenceDuplicates: true + } + ] + } + }, + + // Override rules for apps/docs + { + files: ['apps/docs/**/*.ts'], + rules: { + // plugin:eslint + 'no-console': [1, { allow: ['warn', 'error'] }], + 'no-restricted-globals': [ + 1, + ...noRestrictedGlobalsOptionsForSSR + ], + + // plugin:@angular-eslint + '@angular-eslint/directive-selector': [ + 1, + { + type: 'attribute', + prefix: 'docs', + style: 'camelCase' + } + ], + '@angular-eslint/component-selector': [ + 1, + { + type: 'element', + prefix: 'docs', + style: 'kebab-case' + } + ], + '@angular-eslint/use-component-selector': 1, + + // plugin:@typescript-eslint + '@typescript-eslint/naming-convention': [ + 1, + ...makeNamingConventionOptions('docs') + ] + } + }, + + // Override rules for packages/components-dev + { + files: ['packages/components-dev/**/*.ts'], + rules: { + // plugin:eslint + 'no-restricted-globals': [ + 1, + ...noRestrictedGlobalsOptionsForSSR + ], + 'no-console': 0, + + // plugin:@angular-eslint + '@angular-eslint/directive-selector': [ + 1, + { + type: 'attribute', + prefix: 'dev', + style: 'camelCase' + } + ], + '@angular-eslint/component-selector': [ + 1, + { + type: 'element', + prefix: 'dev', + style: 'kebab-case' + } + ], + '@angular-eslint/use-component-selector': 1, + '@angular-eslint/prefer-on-push-component-change-detection': 1, + + // plugin:@typescript-eslint + '@typescript-eslint/naming-convention': [ + 1, + ...makeNamingConventionOptions('dev') + ] + } + }, + + // Override rules for packages/docs-examples + { + files: ['packages/docs-examples/**/*.ts'], + rules: { + // plugin:eslint + 'no-restricted-globals': [ + 1, + ...noRestrictedGlobalsOptionsForSSR + ], + 'no-console': 0, + + // plugin:@angular-eslint + '@angular-eslint/use-component-selector': 1, + '@angular-eslint/prefer-on-push-component-change-detection': 1 + } + }, + + // Override rules for packages/components + { + files: ['packages/components/**/*.ts'], + rules: { + // plugin:eslint + 'no-restricted-globals': [ + 1, + ...noRestrictedGlobalsOptionsForSSR + ] + } + }, + + // Override rules for specs + { + files: ['**/*.spec.ts'], + rules: { + // plugin:eslint + // ignore `noRestrictedGlobalsOptionsForSSR` in specs, because they are not executed in SSR context + 'no-restricted-globals': 0, + + // plugin:@angular-eslint + '@angular-eslint/use-component-selector': 0, + '@angular-eslint/prefer-on-push-component-change-detection': 0 + } + }, + + // Override rules for e2e + { + files: ['**/*.playwright-spec.ts', '**/e2e.ts', 'packages/e2e/**/*.ts'], + rules: { + // plugin:eslint + // ignore `noRestrictedGlobalsOptionsForSSR` in e2e tests, because they are not executed in SSR context + 'no-restricted-globals': 0, + + // plugin:@angular-eslint + '@angular-eslint/directive-selector': [ + 1, + { + type: 'attribute', + prefix: 'e2e', + style: 'camelCase' + } + ], + '@angular-eslint/component-selector': [ + 1, + { + type: 'element', + prefix: 'e2e', + style: 'kebab-case' + } + ], + '@angular-eslint/use-component-selector': 1, + '@angular-eslint/prefer-on-push-component-change-detection': 1, + + // plugin:@typescript-eslint + '@typescript-eslint/naming-convention': [ + 1, + ...makeNamingConventionOptions('e2e') + ] + } + }, + + // Override rules for /tools + { + files: ['tools/**/*.ts', 'tools/**/*.js'], + rules: { + // plugin:eslint + 'no-console': 0, + + // plugin:@typescript-eslint + // node-only build scripts may use require() for legacy CommonJS modules + '@typescript-eslint/no-require-imports': 0 + } + }, + + // Override rules for /packages/schematics/ + { + files: ['packages/schematics/**/*.ts', 'packages/schematics/**/*.js'], + rules: { + // plugin:eslint + 'no-console': 0 + } + }, + + // Override rules for /packages/cli/ + { + files: ['packages/cli/**/*.ts', 'packages/cli/**/*.js'], + rules: { + // plugin:eslint + 'no-console': 0, + + // plugin:@typescript-eslint + // node-only CLI scripts may use require() for legacy CommonJS modules + '@typescript-eslint/no-require-imports': 0 + } + }, + + // plugin:prettier — must be last so it can turn off conflicting formatting rules + { + files: ['**/*.js', '**/*.ts', '**/*.html'], + extends: [prettierRecommended] + } +); diff --git a/package.json b/package.json index 3ce4af03d0..f09681a937 100644 --- a/package.json +++ b/package.json @@ -52,9 +52,6 @@ "@angular-devkit/build-angular": "20.3.27", "@angular-devkit/core": "20.3.27", "@angular-devkit/schematics": "20.3.27", - "@angular-eslint/eslint-plugin": "^20.7.0", - "@angular-eslint/eslint-plugin-template": "^20.7.0", - "@angular-eslint/template-parser": "^20.7.0", "@angular/cli": "20.3.27", "@angular/compiler-cli": "20.3.24", "@angular/platform-browser-dynamic": "20.3.24", @@ -66,6 +63,7 @@ "@cspell/dict-markdown": "^2.0.17", "@cspell/dict-ru_ru": "^2.3.2", "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0", + "@eslint/js": "^9.0.0", "@koobiq/design-tokens": "^3.17.2", "@koobiq/luxon-date-adapter": "^3.5.1", "@koobiq/moment-date-adapter": "^3.5.1", @@ -87,7 +85,7 @@ "@types/chalk": "^2.2.0", "@types/conventional-changelog": "^3.1.5", "@types/conventional-changelog-writer": "^4.0.10", - "@types/eslint": "^8.56.12", + "@types/eslint": "^9.0.0", "@types/express": "^4.17.21", "@types/fs-extra": "^5.1.0", "@types/glob": "^7.1.4", @@ -100,8 +98,7 @@ "@types/nunjucks": "^3.2.1", "@types/spdx-satisfies": "^0.1.2", "@types/ws": "<8.18.2", - "@typescript-eslint/eslint-plugin": "^8.60.1", - "@typescript-eslint/parser": "^8.60.1", + "angular-eslint": "^20.7.0", "autoprefixer": "^10.4.21", "chalk": "^4.1.2", "commander": "^11.1.0", @@ -110,16 +107,17 @@ "conventional-changelog-writer": "5.0.1", "cspell": "^8.19.4", "dotenv": "^16.6.1", - "eslint": "^8.57.1", + "eslint": "^9.0.0", "eslint-config-prettier": "^9.1.2", "eslint-plugin-file-progress": "^1.5.0", "eslint-plugin-prettier": "^5.5.6", "eslint-plugin-promise": "^7.3.0", - "eslint-plugin-rxjs": "^5.0.3", + "eslint-plugin-rxjs-x": "^1.0.0", "express": "^4.22.1", "firebase-tools": "^15.3.1", "fs-extra": "^5.0.0", "glob": "^7.1.3", + "globals": "^16.0.0", "husky": "^9.1.7", "inquirer": "^7.3.3", "jest": "^30.4.2", @@ -154,7 +152,8 @@ "ts-node": "^10.9.1", "tsconfig-paths": "^3.9.0", "tsickle": "^0.39.1", - "typescript": "5.8.3" + "typescript": "5.8.3", + "typescript-eslint": "^8.60.1" }, "scripts": { "ng": "ng", @@ -286,7 +285,7 @@ "approve-api": "ts-node --project tools/api-extractor/tsconfig.json tools/api-extractor/api-extractor.ts", "check-api": "yarn run approve-api onlyCheck", "-----LINTERS-----": "----------------------------------------------------------------------------------------", - "eslint": "eslint . --ext='.js,.ts,.html'", + "eslint": "eslint .", "eslint:fix": "yarn run eslint --fix", "stylelint": "stylelint '**/*.{css,scss}'", "stylelint:fix": "yarn run stylelint --fix", diff --git a/packages/components/app-switcher/app-switcher.ts b/packages/components/app-switcher/app-switcher.ts index e8e4ee5b41..492637da98 100644 --- a/packages/components/app-switcher/app-switcher.ts +++ b/packages/components/app-switcher/app-switcher.ts @@ -537,7 +537,7 @@ export class KbqAppSwitcherTrigger this.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((visible: boolean) => { if (visible) { - // eslint-disable-next-line rxjs/no-nested-subscribe + // eslint-disable-next-line rxjs-x/no-nested-subscribe this.preventClosingByInnerScrollSubscription = this.closingActions().subscribe((event) => { if (event['scrollDispatcher']) { event['kbqPopoverPreventHide'] = true; diff --git a/packages/components/dropdown/dropdown-trigger.directive.ts b/packages/components/dropdown/dropdown-trigger.directive.ts index f3f81e2b0a..86b23e0ff5 100644 --- a/packages/components/dropdown/dropdown-trigger.directive.ts +++ b/packages/components/dropdown/dropdown-trigger.directive.ts @@ -18,6 +18,7 @@ import { ChangeDetectorRef, Directive, ElementRef, + EventEmitter, inject, Inject, InjectionToken, @@ -25,6 +26,7 @@ import { numberAttribute, OnDestroy, Optional, + Output, output, Renderer2, Self, @@ -195,8 +197,12 @@ export class KbqDropdownTrigger implements AfterContentInit, OnDestroy { /** Event emitted when the associated dropdown is opened. */ readonly dropdownOpened = output(); - /** Event emitted when the associated dropdown is closed. */ - readonly dropdownClosed = output(); + /** + * Event emitted when the associated dropdown is closed. Kept as an `@Output()` EventEmitter + * (not `output()`): `KbqOptionActionComponent` subscribes to it via `.pipe()` through the + * KBQ_OPTION_ACTION_PARENT contract, which an `OutputEmitterRef` does not support — see #DS-5079. + */ + @Output() readonly dropdownClosed = new EventEmitter(); // Tracking input type is necessary so it's possible to only auto-focus // the first item of the list when the dropdown is opened via the keyboard @@ -678,7 +684,7 @@ export class KbqDropdownTrigger implements AfterContentInit, OnDestroy { // 'changed after checked' errors in some cases. See #12194. this.dropdown.animationDone .pipe(take(1), delay(0, asapScheduler), takeUntil(this.parent.hovered())) - // eslint-disable-next-line rxjs/no-nested-subscribe + // eslint-disable-next-line rxjs-x/no-nested-subscribe .subscribe(() => this.open()); } else { this.open(); diff --git a/packages/components/list/list-selection.component.ts b/packages/components/list/list-selection.component.ts index 90c1af1230..5b4fdc0ff4 100644 --- a/packages/components/list/list-selection.component.ts +++ b/packages/components/list/list-selection.component.ts @@ -10,6 +10,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, + ContentChild, contentChild, ContentChildren, DestroyRef, @@ -714,8 +715,13 @@ export class KbqListOption implements OnDestroy, OnInit, IFocusableOption, KbqTi readonly onBlur = new Subject(); readonly actionButton = contentChild(KbqOptionActionComponent); - readonly tooltipTrigger = contentChild(KbqTooltipTrigger); - readonly dropdownTrigger = contentChild(KbqDropdownTrigger); + + // `KbqOptionActionComponent` reads these as directive instances through KBQ_OPTION_ACTION_PARENT, + // so they must stay decorator queries. A signal `contentChild` would expose the query function + // instead of the trigger, making `dropdownTrigger.dropdownClosed` undefined and throwing on `.pipe` + // when an action button is rendered — see #DS-5079. + @ContentChild(KbqTooltipTrigger) tooltipTrigger: KbqTooltipTrigger; + @ContentChild(KbqDropdownTrigger) dropdownTrigger: KbqDropdownTrigger; readonly pseudoCheckbox = contentChild(KbqPseudoCheckbox); readonly text = viewChild.required('text'); diff --git a/packages/components/notification-center/notification-center.ts b/packages/components/notification-center/notification-center.ts index 125eedb23e..46e1ce2193 100644 --- a/packages/components/notification-center/notification-center.ts +++ b/packages/components/notification-center/notification-center.ts @@ -385,7 +385,7 @@ export class KbqNotificationCenterTrigger ngAfterContentInit(): void { this.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((visible: boolean) => { if (visible) { - // eslint-disable-next-line rxjs/no-nested-subscribe + // eslint-disable-next-line rxjs-x/no-nested-subscribe this.preventClosingByInnerScrollSubscription = this.closingActions().subscribe((event) => { if (event && event['scrollDispatcher']) { this.instance.setStickPosition(); diff --git a/packages/components/toast/toast.service.ts b/packages/components/toast/toast.service.ts index aebcf9b429..340e1c70eb 100644 --- a/packages/components/toast/toast.service.ts +++ b/packages/components/toast/toast.service.ts @@ -44,7 +44,7 @@ export class KbqToastService im timer = timer(CHECK_INTERVAL, CHECK_INTERVAL).pipe( filter(() => this.toasts.length > 0 && !this.hovered.getValue() && !this.focused.getValue()), - // eslint-disable-next-line rxjs/no-ignored-replay-buffer + // eslint-disable-next-line rxjs-x/no-ignored-replay-buffer shareReplay() ); diff --git a/packages/components/tree/tree-option.component.ts b/packages/components/tree/tree-option.component.ts index bfdd3c3f93..95110929af 100644 --- a/packages/components/tree/tree-option.component.ts +++ b/packages/components/tree/tree-option.component.ts @@ -6,6 +6,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, + ContentChild, contentChild, ElementRef, EventEmitter, @@ -107,8 +108,13 @@ export class KbqTreeOption extends KbqTreeNode implements AfterCo readonly toggleElementComponent = contentChild(KbqTreeNodeToggleComponent); readonly pseudoCheckbox = contentChild(KbqPseudoCheckbox); readonly actionButton = contentChild(KbqOptionActionComponent); - readonly tooltipTrigger = contentChild(KbqTooltipTrigger); - readonly dropdownTrigger = contentChild(KbqDropdownTrigger); + + // `KbqOptionActionComponent` reads these as directive instances through KBQ_OPTION_ACTION_PARENT, + // so they must stay decorator queries. A signal `contentChild` would expose the query function + // instead of the trigger, making `dropdownTrigger.dropdownClosed` undefined and throwing on `.pipe` + // when an action button is rendered (e.g. on tree node expansion) — see #DS-5079. + @ContentChild(KbqTooltipTrigger) tooltipTrigger: KbqTooltipTrigger; + @ContentChild(KbqDropdownTrigger) dropdownTrigger: KbqDropdownTrigger; readonly checkboxThirdState = input(false); diff --git a/packages/components/tree/tree-option.scss b/packages/components/tree/tree-option.scss index d36f3abb8e..1fff3d2581 100644 --- a/packages/components/tree/tree-option.scss +++ b/packages/components/tree/tree-option.scss @@ -36,13 +36,6 @@ gap: var(--kbq-tree-size-container-content-gap-horizontal); - & > *[kbqtreenodetoggle], - & > .kbq-tree-node-toggle, - & > .kbq-pseudo-checkbox { - margin-top: var(--kbq-size-3xs); - align-self: flex-start; - } - & .kbq-option-text { @include common.kbq-line-wrapper-base(); display: inline-block; diff --git a/packages/components/tree/tree-selection.component.spec.ts b/packages/components/tree/tree-selection.component.spec.ts index bd43ba6eeb..1f4d1b98d5 100644 --- a/packages/components/tree/tree-selection.component.spec.ts +++ b/packages/components/tree/tree-selection.component.spec.ts @@ -1,9 +1,18 @@ import { Clipboard } from '@angular/cdk/clipboard'; import { Component, DebugElement, ViewChild, viewChild } from '@angular/core'; -import { ComponentFixture, TestBed, fakeAsync, flush, tick } from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, flush, TestBed, tick } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { By } from '@angular/platform-browser'; -import { A, C, createKeyboardEvent, createMouseEvent, dispatchEvent, dispatchFakeEvent } from '@koobiq/components/core'; +import { + A, + C, + createKeyboardEvent, + createMouseEvent, + dispatchEvent, + dispatchFakeEvent, + KbqOptionModule +} from '@koobiq/components/core'; +import { KbqDropdownModule } from '@koobiq/components/dropdown'; import { AsyncScheduler } from 'rxjs/internal/scheduler/AsyncScheduler'; import { TestScheduler } from 'rxjs/testing'; import { @@ -505,6 +514,34 @@ describe('KbqTreeSelection', () => { }); }); + describe('with an action button and dropdown (#DS-5079)', () => { + beforeEach(() => { + configureKbqTreeTestingModule(); + }); + + it('renders deeper nodes as selectable options without crashing the action button', fakeAsync(() => { + const fixture = TestBed.createComponent(TreeWithActionButtonApp); + + fixture.detectChanges(); + + const component = fixture.componentInstance; + const parent = component.treeControl.dataNodes.find((node) => node.name === 'Pictures')!; + + component.treeControl.expand(parent); + fixture.detectChanges(); + tick(); + + // Before the fix, KbqOptionActionComponent.ngAfterViewInit threw — `dropdownTrigger` was a + // signal query and `dropdownClosed` an `output()` without `.pipe` — aborting the tree render, + // so nodes revealed on expand never registered in renderedOptions and could not be selected. + const renderedHasSun = component.tree.renderedOptions + .toArray() + .some((option) => option.getHostElement().textContent!.includes('Sun')); + + expect(renderedHasSun).toBe(true); + })); + }); + // todo need recover xdescribe('with when node template', () => { let fixture: ComponentFixture; @@ -1080,6 +1117,35 @@ class KbqTreeAppMultiple extends TreeParams { } } +@Component({ + imports: [ + KbqTreeModule, + KbqDropdownModule, + KbqOptionModule + ], + template: ` + + + {{ node.name }} + + + + + + {{ node.name }} + + + + + + + + ` +}) +class TreeWithActionButtonApp extends TreeParams { + @ViewChild(KbqTreeSelection) tree: KbqTreeSelection; +} + @Component({ imports: [ KbqTreeModule, diff --git a/packages/docs-examples/components/tree/tree-action-button/tree-action-button-example.ts b/packages/docs-examples/components/tree/tree-action-button/tree-action-button-example.ts index a37339f440..2df715691f 100644 --- a/packages/docs-examples/components/tree/tree-action-button/tree-action-button-example.ts +++ b/packages/docs-examples/components/tree/tree-action-button/tree-action-button-example.ts @@ -125,7 +125,7 @@ export const DATA_OBJECT = { -
+
badge
@@ -142,7 +142,7 @@ export const DATA_OBJECT = { -
+
badge
diff --git a/tools/public_api_guard/components/dropdown.api.md b/tools/public_api_guard/components/dropdown.api.md index 3179c9fc08..444f484803 100644 --- a/tools/public_api_guard/components/dropdown.api.md +++ b/tools/public_api_guard/components/dropdown.api.md @@ -268,7 +268,7 @@ export class KbqDropdownTrigger implements AfterContentInit, OnDestroy { get dir(): Direction; get dropdown(): KbqDropdownPanel; set dropdown(dropdown: KbqDropdownPanel); - readonly dropdownClosed: i0.OutputEmitterRef; + readonly dropdownClosed: EventEmitter; readonly dropdownOpened: i0.OutputEmitterRef; focus(origin?: FocusOrigin, options?: FocusOptions): void; handleClick(event: MouseEvent): void; diff --git a/tools/public_api_guard/components/list.api.md b/tools/public_api_guard/components/list.api.md index 1888d8e79d..636840757f 100644 --- a/tools/public_api_guard/components/list.api.md +++ b/tools/public_api_guard/components/list.api.md @@ -97,7 +97,7 @@ export class KbqListOption implements OnDestroy, OnInit, IFocusableOption, KbqTi get disabled(): boolean; set disabled(value: boolean); // (undocumented) - readonly dropdownTrigger: i0.Signal; + dropdownTrigger: KbqDropdownTrigger; // (undocumented) get externalPseudoCheckbox(): boolean; // (undocumented) @@ -149,12 +149,12 @@ export class KbqListOption implements OnDestroy, OnInit, IFocusableOption, KbqTi // (undocumented) toggle(): void; // (undocumented) - readonly tooltipTrigger: i0.Signal; + tooltipTrigger: KbqTooltipTrigger; // (undocumented) get value(): any; set value(newValue: any); // (undocumented) - static ɵcmp: i0.ɵɵComponentDeclaration; + static ɵcmp: i0.ɵɵComponentDeclaration; // (undocumented) static ɵfac: i0.ɵɵFactoryDeclaration; } diff --git a/tools/public_api_guard/components/tree.api.md b/tools/public_api_guard/components/tree.api.md index a8ece3b07b..aaa247b300 100644 --- a/tools/public_api_guard/components/tree.api.md +++ b/tools/public_api_guard/components/tree.api.md @@ -438,7 +438,7 @@ export class KbqTreeOption extends KbqTreeNode implements AfterCo get disabled(): any; set disabled(value: any); // (undocumented) - readonly dropdownTrigger: i0.Signal; + dropdownTrigger: KbqDropdownTrigger; // (undocumented) emitSelectionChangeEvent(): void; // (undocumented) @@ -498,7 +498,7 @@ export class KbqTreeOption extends KbqTreeNode implements AfterCo // (undocumented) readonly toggleElementDirective: i0.Signal | undefined>; // (undocumented) - readonly tooltipTrigger: i0.Signal; + tooltipTrigger: KbqTooltipTrigger; // (undocumented) tree: any; // (undocumented) diff --git a/yarn.lock b/yarn.lock index 1ee7bec065..e587d1ae75 100644 --- a/yarn.lock +++ b/yarn.lock @@ -406,7 +406,7 @@ __metadata: languageName: node linkType: hard -"@angular-devkit/architect@npm:0.2003.27": +"@angular-devkit/architect@npm:0.2003.27, @angular-devkit/architect@npm:>= 0.2000.0 < 0.2100.0": version: 0.2003.27 resolution: "@angular-devkit/architect@npm:0.2003.27" dependencies: @@ -570,7 +570,7 @@ __metadata: languageName: node linkType: hard -"@angular-devkit/core@npm:20.3.27": +"@angular-devkit/core@npm:20.3.27, @angular-devkit/core@npm:>= 20.0.0 < 21.0.0": version: 20.3.27 resolution: "@angular-devkit/core@npm:20.3.27" dependencies: @@ -589,7 +589,7 @@ __metadata: languageName: node linkType: hard -"@angular-devkit/schematics@npm:20.3.27": +"@angular-devkit/schematics@npm:20.3.27, @angular-devkit/schematics@npm:>= 20.0.0 < 21.0.0": version: 20.3.27 resolution: "@angular-devkit/schematics@npm:20.3.27" dependencies: @@ -602,6 +602,19 @@ __metadata: languageName: node linkType: hard +"@angular-eslint/builder@npm:20.7.0": + version: 20.7.0 + resolution: "@angular-eslint/builder@npm:20.7.0" + dependencies: + "@angular-devkit/architect": "npm:>= 0.2000.0 < 0.2100.0" + "@angular-devkit/core": "npm:>= 20.0.0 < 21.0.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: "*" + checksum: 10c0/3cfbd894d93b52989fe26e583b203e7eef51c4f825fcff98bcff27c0039bf3dbfb756692396759a8bb74790ce7d0e3675fe345111769f773da131afe160ab405 + languageName: node + linkType: hard + "@angular-eslint/bundled-angular-compiler@npm:20.7.0": version: 20.7.0 resolution: "@angular-eslint/bundled-angular-compiler@npm:20.7.0" @@ -609,7 +622,7 @@ __metadata: languageName: node linkType: hard -"@angular-eslint/eslint-plugin-template@npm:^20.7.0": +"@angular-eslint/eslint-plugin-template@npm:20.7.0": version: 20.7.0 resolution: "@angular-eslint/eslint-plugin-template@npm:20.7.0" dependencies: @@ -627,7 +640,7 @@ __metadata: languageName: node linkType: hard -"@angular-eslint/eslint-plugin@npm:^20.7.0": +"@angular-eslint/eslint-plugin@npm:20.7.0": version: 20.7.0 resolution: "@angular-eslint/eslint-plugin@npm:20.7.0" dependencies: @@ -642,7 +655,22 @@ __metadata: languageName: node linkType: hard -"@angular-eslint/template-parser@npm:^20.7.0": +"@angular-eslint/schematics@npm:20.7.0": + version: 20.7.0 + resolution: "@angular-eslint/schematics@npm:20.7.0" + dependencies: + "@angular-devkit/core": "npm:>= 20.0.0 < 21.0.0" + "@angular-devkit/schematics": "npm:>= 20.0.0 < 21.0.0" + "@angular-eslint/eslint-plugin": "npm:20.7.0" + "@angular-eslint/eslint-plugin-template": "npm:20.7.0" + ignore: "npm:7.0.5" + semver: "npm:7.7.3" + strip-json-comments: "npm:3.1.1" + checksum: 10c0/275bd939a530acff911861e84d54dcd54caf49ca8dd2b6ebfdfc361730787b42bfdf00eb832c89603d184f1600075a55544a6f491986b740bc1bbc2e3e4655e9 + languageName: node + linkType: hard + +"@angular-eslint/template-parser@npm:20.7.0": version: 20.7.0 resolution: "@angular-eslint/template-parser@npm:20.7.0" dependencies: @@ -1798,7 +1826,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.10.3, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.7, @babel/parser@npm:^7.24.8": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.7, @babel/parser@npm:^7.24.8": version: 7.24.8 resolution: "@babel/parser@npm:7.24.8" bin: @@ -2910,7 +2938,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.10.3, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8": +"@babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8": version: 7.24.8 resolution: "@babel/traverse@npm:7.24.8" dependencies: @@ -2958,7 +2986,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.10.3, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.24.9": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.24.9": version: 7.24.9 resolution: "@babel/types@npm:7.24.9" dependencies: @@ -4768,7 +4796,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": +"@eslint-community/eslint-utils@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" dependencies: @@ -4779,7 +4807,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.9.1": +"@eslint-community/eslint-utils@npm:^4.8.0, @eslint-community/eslint-utils@npm:^4.9.1": version: 4.9.1 resolution: "@eslint-community/eslint-utils@npm:4.9.1" dependencies: @@ -4790,41 +4818,80 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.12.2": +"@eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.12.2": version: 4.12.2 resolution: "@eslint-community/regexpp@npm:4.12.2" checksum: 10c0/fddcbc66851b308478d04e302a4d771d6917a0b3740dc351513c0da9ca2eab8a1adf99f5e0aa7ab8b13fa0df005c81adeee7e63a92f3effd7d367a163b721c2d languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.6.1": - version: 4.10.0 - resolution: "@eslint-community/regexpp@npm:4.10.0" - checksum: 10c0/c5f60ef1f1ea7649fa7af0e80a5a79f64b55a8a8fa5086de4727eb4c86c652aedee407a9c143b8995d2c0b2d75c1222bec9ba5d73dbfc1f314550554f0979ef4 +"@eslint/config-array@npm:^0.21.2": + version: 0.21.2 + resolution: "@eslint/config-array@npm:0.21.2" + dependencies: + "@eslint/object-schema": "npm:^2.1.7" + debug: "npm:^4.3.1" + minimatch: "npm:^3.1.5" + checksum: 10c0/89dfe815d18456177c0a1f238daf4593107fd20298b3598e0103054360d3b8d09d967defd8318f031185d68df1f95cfa68becf1390a9c5c6887665f1475142e3 languageName: node linkType: hard -"@eslint/eslintrc@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/eslintrc@npm:2.1.4" +"@eslint/config-helpers@npm:^0.4.2": + version: 0.4.2 + resolution: "@eslint/config-helpers@npm:0.4.2" + dependencies: + "@eslint/core": "npm:^0.17.0" + checksum: 10c0/92efd7a527b2d17eb1a148409d71d80f9ac160b565ac73ee092252e8bf08ecd08670699f46b306b94f13d22e88ac88a612120e7847570dd7cdc72f234d50dcb4 + languageName: node + linkType: hard + +"@eslint/core@npm:^0.17.0": + version: 0.17.0 + resolution: "@eslint/core@npm:0.17.0" dependencies: - ajv: "npm:^6.12.4" + "@types/json-schema": "npm:^7.0.15" + checksum: 10c0/9a580f2246633bc752298e7440dd942ec421860d1946d0801f0423830e67887e4aeba10ab9a23d281727a978eb93d053d1922a587d502942a713607f40ed704e + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^3.3.5": + version: 3.3.5 + resolution: "@eslint/eslintrc@npm:3.3.5" + dependencies: + ajv: "npm:^6.14.0" debug: "npm:^4.3.2" - espree: "npm:^9.6.0" - globals: "npm:^13.19.0" + espree: "npm:^10.0.1" + globals: "npm:^14.0.0" ignore: "npm:^5.2.0" import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" + js-yaml: "npm:^4.1.1" + minimatch: "npm:^3.1.5" strip-json-comments: "npm:^3.1.1" - checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 + checksum: 10c0/9fb9f1ca65e46d6173966e3aaa5bd353e3a65d7f1f582bebf77f578fab7d7960a399fac1ecfb1e7d52bd61f5cefd6531087ca52a3a3c388f2e1b4f1ebd3da8b7 languageName: node linkType: hard -"@eslint/js@npm:8.57.1": - version: 8.57.1 - resolution: "@eslint/js@npm:8.57.1" - checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 +"@eslint/js@npm:9.39.4, @eslint/js@npm:^9.0.0": + version: 9.39.4 + resolution: "@eslint/js@npm:9.39.4" + checksum: 10c0/5aa7dea2cbc5decf7f5e3b0c6f86a084ccee0f792d288ca8e839f8bc1b64e03e227068968e49b26096e6f71fd857ab6e42691d1b993826b9a3883f1bdd7a0e46 + languageName: node + linkType: hard + +"@eslint/object-schema@npm:^2.1.7": + version: 2.1.7 + resolution: "@eslint/object-schema@npm:2.1.7" + checksum: 10c0/936b6e499853d1335803f556d526c86f5fe2259ed241bc665000e1d6353828edd913feed43120d150adb75570cae162cf000b5b0dfc9596726761c36b82f4e87 + languageName: node + linkType: hard + +"@eslint/plugin-kit@npm:^0.4.1": + version: 0.4.1 + resolution: "@eslint/plugin-kit@npm:0.4.1" + dependencies: + "@eslint/core": "npm:^0.17.0" + levn: "npm:^0.4.1" + checksum: 10c0/51600f78b798f172a9915dffb295e2ffb44840d583427bc732baf12ecb963eb841b253300e657da91d890f4b323d10a1bd12934bf293e3018d8bb66fdce5217b languageName: node linkType: hard @@ -4956,14 +5023,30 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.13.0": - version: 0.13.0 - resolution: "@humanwhocodes/config-array@npm:0.13.0" +"@humanfs/core@npm:^0.19.2": + version: 0.19.2 + resolution: "@humanfs/core@npm:0.19.2" dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.3" - debug: "npm:^4.3.1" - minimatch: "npm:^3.0.5" - checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e + "@humanfs/types": "npm:^0.15.0" + checksum: 10c0/d0a1d52d7b30c27d49475a53072d1510b81c5803e44b342fb8faf3887f1aa27593a1e6dc76a45268e7892d3f4e198146659281f6b6d55eacf3fd5a38bac30c5c + languageName: node + linkType: hard + +"@humanfs/node@npm:^0.16.6": + version: 0.16.8 + resolution: "@humanfs/node@npm:0.16.8" + dependencies: + "@humanfs/core": "npm:^0.19.2" + "@humanfs/types": "npm:^0.15.0" + "@humanwhocodes/retry": "npm:^0.4.0" + checksum: 10c0/56140579db811af4e160b195d45d0f29acf644d192c93fe24c9e594ebf06f19dfc157494a07c84540b8a071c0e4b37209c2362765d31734f4d0be869c2422e25 + languageName: node + linkType: hard + +"@humanfs/types@npm:^0.15.0": + version: 0.15.0 + resolution: "@humanfs/types@npm:0.15.0" + checksum: 10c0/fc26b9a024b0e55f7eaf64036df94345bf5d36d6a41ef80ef38e78f1f7430ce26cf435af736adae58913baae18eac3f38c18739054a3d379102015978eae862e languageName: node linkType: hard @@ -4974,10 +5057,10 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.3": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c +"@humanwhocodes/retry@npm:^0.4.0, @humanwhocodes/retry@npm:^0.4.2": + version: 0.4.3 + resolution: "@humanwhocodes/retry@npm:0.4.3" + checksum: 10c0/3775bb30087d4440b3f7406d5a057777d90e4b9f435af488a4923ef249e93615fb78565a85f173a186a076c7706a81d0d57d563a2624e4de2c5c9c66c486ce42 languageName: node linkType: hard @@ -6538,7 +6621,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": +"@nodelib/fs.walk@npm:^1.2.3": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -8423,7 +8506,7 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:*": +"@types/eslint@npm:*, @types/eslint@npm:^9.0.0": version: 9.6.1 resolution: "@types/eslint@npm:9.6.1" dependencies: @@ -8433,16 +8516,6 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:^8.56.12": - version: 8.56.12 - resolution: "@types/eslint@npm:8.56.12" - dependencies: - "@types/estree": "npm:*" - "@types/json-schema": "npm:*" - checksum: 10c0/e4ca426abe9d55f82b69a3250bec78b6d340ad1e567f91c97ecc59d3b2d6a1d8494955ac62ad0ea14b97519db580611c02be8277cbea370bdfb0f96aa2910504 - languageName: node - linkType: hard - "@types/esrecurse@npm:^4.3.1": version: 4.3.1 resolution: "@types/esrecurse@npm:4.3.1" @@ -8464,7 +8537,7 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:1.0.9": +"@types/estree@npm:1.0.9, @types/estree@npm:^1.0.6": version: 1.0.9 resolution: "@types/estree@npm:1.0.9" checksum: 10c0/3ad3286ca2988cd550dafb8f2ad599c8474868e954fa601a36655bdfefd8039f7c714b8c1c7f2ae219ffbd58bd4660e66fa7479a0120fc02d4777057d4865387 @@ -8761,13 +8834,6 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.3.12": - version: 7.5.8 - resolution: "@types/semver@npm:7.5.8" - checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa - languageName: node - linkType: hard - "@types/send@npm:*": version: 0.17.4 resolution: "@types/send@npm:0.17.4" @@ -8880,25 +8946,25 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^17.0.0, @types/yargs@npm:^17.0.8": - version: 17.0.32 - resolution: "@types/yargs@npm:17.0.32" +"@types/yargs@npm:^17.0.33": + version: 17.0.35 + resolution: "@types/yargs@npm:17.0.35" dependencies: "@types/yargs-parser": "npm:*" - checksum: 10c0/2095e8aad8a4e66b86147415364266b8d607a3b95b4239623423efd7e29df93ba81bb862784a6e08664f645cc1981b25fd598f532019174cd3e5e1e689e1cccf + checksum: 10c0/609557826a6b85e73ccf587923f6429850d6dc70e420b455bab4601b670bfadf684b09ae288bccedab042c48ba65f1666133cf375814204b544009f57d6eef63 languageName: node linkType: hard -"@types/yargs@npm:^17.0.33": - version: 17.0.35 - resolution: "@types/yargs@npm:17.0.35" +"@types/yargs@npm:^17.0.8": + version: 17.0.32 + resolution: "@types/yargs@npm:17.0.32" dependencies: "@types/yargs-parser": "npm:*" - checksum: 10c0/609557826a6b85e73ccf587923f6429850d6dc70e420b455bab4601b670bfadf684b09ae288bccedab042c48ba65f1666133cf375814204b544009f57d6eef63 + checksum: 10c0/2095e8aad8a4e66b86147415364266b8d607a3b95b4239623423efd7e29df93ba81bb862784a6e08664f645cc1981b25fd598f532019174cd3e5e1e689e1cccf languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^8.60.1": +"@typescript-eslint/eslint-plugin@npm:8.60.1": version: 8.60.1 resolution: "@typescript-eslint/eslint-plugin@npm:8.60.1" dependencies: @@ -8918,18 +8984,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/experimental-utils@npm:^5.0.0": - version: 5.62.0 - resolution: "@typescript-eslint/experimental-utils@npm:5.62.0" - dependencies: - "@typescript-eslint/utils": "npm:5.62.0" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/f7037977e00849cd8c03677a88b0659a4f0e0b1e0151aebb47c49c92b8e57408578142df598eac08b364623d926343c724f42494f87662e437b1c89f0b2e815b - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^8.60.1": +"@typescript-eslint/parser@npm:8.60.1": version: 8.60.1 resolution: "@typescript-eslint/parser@npm:8.60.1" dependencies: @@ -8958,16 +9013,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/scope-manager@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" - checksum: 10c0/861253235576c1c5c1772d23cdce1418c2da2618a479a7de4f6114a12a7ca853011a1e530525d0931c355a8fd237b9cd828fac560f85f9623e24054fd024726f - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:8.30.1": version: 8.30.1 resolution: "@typescript-eslint/scope-manager@npm:8.30.1" @@ -9013,13 +9058,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/types@npm:5.62.0" - checksum: 10c0/7febd3a7f0701c0b927e094f02e82d8ee2cada2b186fcb938bc2b94ff6fbad88237afc304cbaf33e82797078bbbb1baf91475f6400912f8b64c89be79bfa4ddf - languageName: node - linkType: hard - "@typescript-eslint/types@npm:8.30.1": version: 8.30.1 resolution: "@typescript-eslint/types@npm:8.30.1" @@ -9027,31 +9065,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:8.60.1, @typescript-eslint/types@npm:^8.60.1": +"@typescript-eslint/types@npm:8.60.1, @typescript-eslint/types@npm:^8.0.0, @typescript-eslint/types@npm:^8.60.1": version: 8.60.1 resolution: "@typescript-eslint/types@npm:8.60.1" checksum: 10c0/44308007e090ae1ac9cfdc5c2089cf1a82601298f69dd4835f62549e3d36886d41ecb1f84b490603382657481ca4e2ff23de49b97ad09d199dc65ce6c2e00b22 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - semver: "npm:^7.3.7" - tsutils: "npm:^3.21.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/d7984a3e9d56897b2481940ec803cb8e7ead03df8d9cfd9797350be82ff765dfcf3cfec04e7355e1779e948da8f02bc5e11719d07a596eb1cb995c48a95e38cf - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:8.30.1": version: 8.30.1 resolution: "@typescript-eslint/typescript-estree@npm:8.30.1" @@ -9089,25 +9109,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/utils@npm:5.62.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@types/json-schema": "npm:^7.0.9" - "@types/semver": "npm:^7.3.12" - "@typescript-eslint/scope-manager": "npm:5.62.0" - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/typescript-estree": "npm:5.62.0" - eslint-scope: "npm:^5.1.1" - semver: "npm:^7.3.7" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/f09b7d9952e4a205eb1ced31d7684dd55cee40bf8c2d78e923aa8a255318d97279825733902742c09d8690f37a50243f4c4d383ab16bd7aefaf9c4b438f785e1 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:8.60.1": +"@typescript-eslint/utils@npm:8.60.1, @typescript-eslint/utils@npm:^8.0.0, @typescript-eslint/utils@npm:^8.58.0": version: 8.60.1 resolution: "@typescript-eslint/utils@npm:8.60.1" dependencies: @@ -9137,16 +9139,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - eslint-visitor-keys: "npm:^3.3.0" - checksum: 10c0/7c3b8e4148e9b94d9b7162a596a1260d7a3efc4e65199693b8025c71c4652b8042501c0bc9f57654c1e2943c26da98c0f77884a746c6ae81389fcb0b513d995d - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:8.30.1": version: 8.30.1 resolution: "@typescript-eslint/visitor-keys@npm:8.30.1" @@ -9167,13 +9159,6 @@ __metadata: languageName: node linkType: hard -"@ungap/structured-clone@npm:^1.2.0": - version: 1.2.0 - resolution: "@ungap/structured-clone@npm:1.2.0" - checksum: 10c0/8209c937cb39119f44eb63cf90c0b73e7c754209a6411c707be08e50e29ee81356dca1a848a405c8bdeebfe2f5e4f831ad310ae1689eeef65e7445c090c6657d - languageName: node - linkType: hard - "@ungap/structured-clone@npm:^1.3.0": version: 1.3.0 resolution: "@ungap/structured-clone@npm:1.3.0" @@ -9653,7 +9638,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.4.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": +"acorn@npm:^8.4.1, acorn@npm:^8.8.2": version: 8.11.3 resolution: "acorn@npm:8.11.3" bin: @@ -9815,15 +9800,15 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.4": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" +"ajv@npm:^6.14.0": + version: 6.15.0 + resolution: "ajv@npm:6.15.0" dependencies: fast-deep-equal: "npm:^3.1.1" fast-json-stable-stringify: "npm:^2.0.0" json-schema-traverse: "npm:^0.4.1" uri-js: "npm:^4.2.2" - checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + checksum: 10c0/67966499dd272ecde1c2e467084411132891523d057487587879d39ac04207f4351b7b2324c83198013967fbfa632c1612adc960114a30770fbe07a0773b32c2 languageName: node linkType: hard @@ -9906,6 +9891,27 @@ __metadata: languageName: node linkType: hard +"angular-eslint@npm:^20.7.0": + version: 20.7.0 + resolution: "angular-eslint@npm:20.7.0" + dependencies: + "@angular-devkit/core": "npm:>= 20.0.0 < 21.0.0" + "@angular-devkit/schematics": "npm:>= 20.0.0 < 21.0.0" + "@angular-eslint/builder": "npm:20.7.0" + "@angular-eslint/eslint-plugin": "npm:20.7.0" + "@angular-eslint/eslint-plugin-template": "npm:20.7.0" + "@angular-eslint/schematics": "npm:20.7.0" + "@angular-eslint/template-parser": "npm:20.7.0" + "@typescript-eslint/types": "npm:^8.0.0" + "@typescript-eslint/utils": "npm:^8.0.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: "*" + typescript-eslint: ^8.0.0 + checksum: 10c0/bfc86fca1c4a6e82fe9fe03eebf051e960e79d0fd41e82349b2220ecdbd143c4c5d1c2a15149e84104ecea2f33657ed6179c45a1c96ac2fe7739b6b141f4b772 + languageName: node + linkType: hard + "ansi-align@npm:^3.0.0": version: 3.0.1 resolution: "ansi-align@npm:3.0.1" @@ -10450,17 +10456,6 @@ __metadata: languageName: node linkType: hard -"bent@npm:~7.3.6": - version: 7.3.12 - resolution: "bent@npm:7.3.12" - dependencies: - bytesish: "npm:^0.4.1" - caseless: "npm:~0.12.0" - is-stream: "npm:^2.0.0" - checksum: 10c0/20f77364bcb462a6eb0ea7322442a1125ca6181ea6b94ad498b8348c678a2adf56c231a653bcac016c5d017aee91ff55b2169b69d8263a4b3c710f4121cbe615 - languageName: node - linkType: hard - "big.js@npm:^5.2.2": version: 5.2.2 resolution: "big.js@npm:5.2.2" @@ -10793,13 +10788,6 @@ __metadata: languageName: node linkType: hard -"bytesish@npm:^0.4.1": - version: 0.4.4 - resolution: "bytesish@npm:0.4.4" - checksum: 10c0/469088f0020797dfbb61b6ce3972c91d95d79df8aacca55841ea93ac59ef3209bb04be8212b6265dfbafb7583a58dd73ca2f14e4feae36d3333a4f1509dd2eef - languageName: node - linkType: hard - "cacache@npm:^18.0.0": version: 18.0.2 resolution: "cacache@npm:18.0.2" @@ -10979,13 +10967,6 @@ __metadata: languageName: node linkType: hard -"caseless@npm:~0.12.0": - version: 0.12.0 - resolution: "caseless@npm:0.12.0" - checksum: 10c0/ccf64bcb6c0232cdc5b7bd91ddd06e23a4b541f138336d4725233ac538041fb2f29c2e86c3c4a7a61ef990b665348db23a047060b9414c3a6603e9fa61ad4626 - languageName: node - linkType: hard - "chalk-template@npm:^1.1.0": version: 1.1.0 resolution: "chalk-template@npm:1.1.0" @@ -11013,7 +10994,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2, chalk@npm:~4.1.0": +"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -11501,13 +11482,6 @@ __metadata: languageName: node linkType: hard -"common-tags@npm:^1.8.0": - version: 1.8.2 - resolution: "common-tags@npm:1.8.2" - checksum: 10c0/23efe47ff0a1a7c91489271b3a1e1d2a171c12ec7f9b35b29b2fce51270124aff0ec890087e2bc2182c1cb746e232ab7561aaafe05f1e7452aea733d2bfe3f63 - languageName: node - linkType: hard - "commondir@npm:^1.0.1": version: 1.0.1 resolution: "commondir@npm:1.0.1" @@ -12030,7 +12004,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -12041,7 +12015,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.5": +"cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.5, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" dependencies: @@ -12454,10 +12428,10 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^5.0.0": - version: 5.0.1 - resolution: "decamelize@npm:5.0.1" - checksum: 10c0/3da71022bc1e85487810fa0833138effb599fa331ca21e179650e93a765d0c4dabeb1ecdd6ad1474fa0bacd2457953c63ea335afb6e53b35f2b4bf779514e2a3 +"decamelize@npm:^6.0.1": + version: 6.0.1 + resolution: "decamelize@npm:6.0.1" + checksum: 10c0/c0a3a529591ebab1d1a9458b60684194e91d904e9b0a56367d3d507b2c8ab89dfd40c61423ca6a1eb2f70e2d44d2efe78f3342326395d3738d1d42592b1a6224 languageName: node linkType: hard @@ -12729,15 +12703,6 @@ __metadata: languageName: node linkType: hard -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: "npm:^2.0.2" - checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 - languageName: node - linkType: hard - "dom-serializer@npm:^2.0.0": version: 2.0.0 resolution: "dom-serializer@npm:2.0.0" @@ -13560,20 +13525,6 @@ __metadata: languageName: node linkType: hard -"eslint-etc@npm:^5.1.0": - version: 5.2.1 - resolution: "eslint-etc@npm:5.2.1" - dependencies: - "@typescript-eslint/experimental-utils": "npm:^5.0.0" - tsutils: "npm:^3.17.1" - tsutils-etc: "npm:^1.4.1" - peerDependencies: - eslint: ^8.0.0 - typescript: ">=4.0.0" - checksum: 10c0/628f9d65e16f7c7d06c663256d39f5e72f508a515d2712b0bcb329dbb9e7a1a4f175292c3477c83be9cc8a75deea5f050a00c3dc9b084af6b651d46ee8360a9e - languageName: node - linkType: hard - "eslint-plugin-file-progress@npm:^1.5.0": version: 1.5.0 resolution: "eslint-plugin-file-progress@npm:1.5.0" @@ -13617,27 +13568,25 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-rxjs@npm:^5.0.3": - version: 5.0.3 - resolution: "eslint-plugin-rxjs@npm:5.0.3" - dependencies: - "@typescript-eslint/experimental-utils": "npm:^5.0.0" - common-tags: "npm:^1.8.0" - decamelize: "npm:^5.0.0" - eslint-etc: "npm:^5.1.0" - requireindex: "npm:~1.2.0" - rxjs-report-usage: "npm:^1.0.4" - tslib: "npm:^2.0.0" - tsutils: "npm:^3.0.0" - tsutils-etc: "npm:^1.4.1" +"eslint-plugin-rxjs-x@npm:^1.0.0": + version: 1.0.2 + resolution: "eslint-plugin-rxjs-x@npm:1.0.2" + dependencies: + "@typescript-eslint/utils": "npm:^8.58.0" + decamelize: "npm:^6.0.1" + ts-api-utils: "npm:^2.5.0" peerDependencies: - eslint: ^8.0.0 - typescript: ">=4.0.0" - checksum: 10c0/bba2048a6772ec017e63c9201642c90043365308f2d386b448a28b91f7195a7f65ebb39705bb886f89bcc4fe1ffbd18bd2b25bf8f389bc5cae592828dbfe9d58 + eslint: ^10.0.1 + rxjs: ^7.2.0 + typescript: ">=4.8.4 <6.1.0" + peerDependenciesMeta: + rxjs: + optional: true + checksum: 10c0/2af7669ad52b0880043ec8c1860614257f72648e8c08579935593b53540194510d5d005dc9592aac0894b04f1af0f4d9d4456dc7c6d27d69ae07f14c4a6c8394 languageName: node linkType: hard -"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": +"eslint-scope@npm:5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" dependencies: @@ -13647,13 +13596,13 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^7.2.2": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" +"eslint-scope@npm:^8.4.0": + version: 8.4.0 + resolution: "eslint-scope@npm:8.4.0" dependencies: esrecurse: "npm:^4.3.0" estraverse: "npm:^5.2.0" - checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + checksum: 10c0/407f6c600204d0f3705bd557f81bd0189e69cd7996f408f8971ab5779c0af733d1af2f1412066b40ee1588b085874fc37a2333986c6521669cdbdd36ca5058e0 languageName: node linkType: hard @@ -13669,7 +13618,7 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 @@ -13683,6 +13632,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^4.2.1": + version: 4.2.1 + resolution: "eslint-visitor-keys@npm:4.2.1" + checksum: 10c0/fcd43999199d6740db26c58dbe0c2594623e31ca307e616ac05153c9272f12f1364f5a0b1917a8e962268fdecc6f3622c1c2908b4fcc2e047a106fe6de69dc43 + languageName: node + linkType: hard + "eslint-visitor-keys@npm:^5.0.0": version: 5.0.1 resolution: "eslint-visitor-keys@npm:5.0.1" @@ -13690,51 +13646,63 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.57.1": - version: 8.57.1 - resolution: "eslint@npm:8.57.1" +"eslint@npm:^9.0.0": + version: 9.39.4 + resolution: "eslint@npm:9.39.4" dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.6.1" - "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.1" - "@humanwhocodes/config-array": "npm:^0.13.0" + "@eslint-community/eslint-utils": "npm:^4.8.0" + "@eslint-community/regexpp": "npm:^4.12.1" + "@eslint/config-array": "npm:^0.21.2" + "@eslint/config-helpers": "npm:^0.4.2" + "@eslint/core": "npm:^0.17.0" + "@eslint/eslintrc": "npm:^3.3.5" + "@eslint/js": "npm:9.39.4" + "@eslint/plugin-kit": "npm:^0.4.1" + "@humanfs/node": "npm:^0.16.6" "@humanwhocodes/module-importer": "npm:^1.0.1" - "@nodelib/fs.walk": "npm:^1.2.8" - "@ungap/structured-clone": "npm:^1.2.0" - ajv: "npm:^6.12.4" + "@humanwhocodes/retry": "npm:^0.4.2" + "@types/estree": "npm:^1.0.6" + ajv: "npm:^6.14.0" chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.2" + cross-spawn: "npm:^7.0.6" debug: "npm:^4.3.2" - doctrine: "npm:^3.0.0" escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^7.2.2" - eslint-visitor-keys: "npm:^3.4.3" - espree: "npm:^9.6.1" - esquery: "npm:^1.4.2" + eslint-scope: "npm:^8.4.0" + eslint-visitor-keys: "npm:^4.2.1" + espree: "npm:^10.4.0" + esquery: "npm:^1.5.0" esutils: "npm:^2.0.2" fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^6.0.1" + file-entry-cache: "npm:^8.0.0" find-up: "npm:^5.0.0" glob-parent: "npm:^6.0.2" - globals: "npm:^13.19.0" - graphemer: "npm:^1.4.0" ignore: "npm:^5.2.0" imurmurhash: "npm:^0.1.4" is-glob: "npm:^4.0.0" - is-path-inside: "npm:^3.0.3" - js-yaml: "npm:^4.1.0" json-stable-stringify-without-jsonify: "npm:^1.0.1" - levn: "npm:^0.4.1" lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" + minimatch: "npm:^3.1.5" natural-compare: "npm:^1.4.0" optionator: "npm:^0.9.3" - strip-ansi: "npm:^6.0.1" - text-table: "npm:^0.2.0" + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true bin: eslint: bin/eslint.js - checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 + checksum: 10c0/1955067c2d991f0c84f4c4abfafe31bb47fa3b717a7fd3e43fe1e511c6f859d7700cbca969f85661dc4c130f7aeced5e5444884314198a54428f5e5141db9337 + languageName: node + linkType: hard + +"espree@npm:^10.0.1, espree@npm:^10.4.0": + version: 10.4.0 + resolution: "espree@npm:10.4.0" + dependencies: + acorn: "npm:^8.15.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10c0/c63fe06131c26c8157b4083313cb02a9a54720a08e21543300e55288c40e06c3fc284bdecf108d3a1372c5934a0a88644c98714f38b6ae8ed272b40d9ea08d6b languageName: node linkType: hard @@ -13749,17 +13717,6 @@ __metadata: languageName: node linkType: hard -"espree@npm:^9.6.0, espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" - dependencies: - acorn: "npm:^8.9.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 - languageName: node - linkType: hard - "esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -13770,12 +13727,12 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.2": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" +"esquery@npm:^1.5.0": + version: 1.7.0 + resolution: "esquery@npm:1.7.0" dependencies: estraverse: "npm:^5.1.0" - checksum: 10c0/a084bd049d954cc88ac69df30534043fb2aee5555b56246493f42f27d1e168f00d9e5d4192e46f10290d312dc30dc7d58994d61a609c579c1219d636996f9213 + checksum: 10c0/77d5173db450b66f3bc685d11af4c90cffeedb340f34a39af96d43509a335ce39c894fd79233df32d38f5e4e219fa0f7076f6ec90bae8320170ba082c0db4793 languageName: node linkType: hard @@ -14374,12 +14331,12 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" dependencies: - flat-cache: "npm:^3.0.4" - checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd + flat-cache: "npm:^4.0.0" + checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 languageName: node linkType: hard @@ -14644,14 +14601,13 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^3.0.4": - version: 3.2.0 - resolution: "flat-cache@npm:3.2.0" +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" dependencies: flatted: "npm:^3.2.9" - keyv: "npm:^4.5.3" - rimraf: "npm:^3.0.2" - checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 + keyv: "npm:^4.5.4" + checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc languageName: node linkType: hard @@ -15246,7 +15202,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:~7.2.0": +"glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -15318,12 +15274,17 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.19.0": - version: 13.24.0 - resolution: "globals@npm:13.24.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd +"globals@npm:^14.0.0": + version: 14.0.0 + resolution: "globals@npm:14.0.0" + checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d + languageName: node + linkType: hard + +"globals@npm:^16.0.0": + version: 16.5.0 + resolution: "globals@npm:16.5.0" + checksum: 10c0/615241dae7851c8012f5aa0223005b1ed6607713d6813de0741768bd4ddc39353117648f1a7086b4b0fa45eae733f1c0a0fe369aa4e543bb63f8de8990178ea9 languageName: node linkType: hard @@ -15454,13 +15415,6 @@ __metadata: languageName: node linkType: hard -"graphemer@npm:^1.4.0": - version: 1.4.0 - resolution: "graphemer@npm:1.4.0" - checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 - languageName: node - linkType: hard - "gtoken@npm:^7.0.0": version: 7.1.0 resolution: "gtoken@npm:7.1.0" @@ -15986,6 +15940,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:7.0.5, ignore@npm:^7.0.4, ignore@npm:^7.0.5": + version: 7.0.5 + resolution: "ignore@npm:7.0.5" + checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d + languageName: node + linkType: hard + "ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.3.1 resolution: "ignore@npm:5.3.1" @@ -15993,13 +15954,6 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^7.0.4, ignore@npm:^7.0.5": - version: 7.0.5 - resolution: "ignore@npm:7.0.5" - checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d - languageName: node - linkType: hard - "image-size@npm:~0.5.0": version: 0.5.5 resolution: "image-size@npm:0.5.5" @@ -16450,7 +16404,7 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": +"is-path-inside@npm:^3.0.2": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 @@ -17536,6 +17490,17 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^4.1.1": + version: 4.2.0 + resolution: "js-yaml@npm:4.2.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/1916456c118746603b067d74bbcbb0445d9a1d5e474ad4ae775e7b20525bed902e01d9d97dd0c81fcd8d4f596162309d0eb057f4aa38f3e9647f14075e9dea45 + languageName: node + linkType: hard + "jsbn@npm:1.1.0": version: 1.1.0 resolution: "jsbn@npm:1.1.0" @@ -17853,7 +17818,7 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.5.3, keyv@npm:^4.5.4": +"keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: @@ -17887,13 +17852,6 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^3.0.3": - version: 3.0.3 - resolution: "kleur@npm:3.0.3" - checksum: 10c0/cd3a0b8878e7d6d3799e54340efe3591ca787d9f95f109f28129bdd2915e37807bf8918bb295ab86afb8c82196beec5a1adcaf29042ce3f2bd932b038fe3aa4b - languageName: node - linkType: hard - "known-css-properties@npm:^0.37.0": version: 0.37.0 resolution: "known-css-properties@npm:0.37.0" @@ -17911,9 +17869,6 @@ __metadata: "@angular-devkit/build-angular": "npm:20.3.27" "@angular-devkit/core": "npm:20.3.27" "@angular-devkit/schematics": "npm:20.3.27" - "@angular-eslint/eslint-plugin": "npm:^20.7.0" - "@angular-eslint/eslint-plugin-template": "npm:^20.7.0" - "@angular-eslint/template-parser": "npm:^20.7.0" "@angular/animations": "npm:20.3.24" "@angular/cdk": "npm:20.2.14" "@angular/cli": "npm:20.3.27" @@ -17934,6 +17889,7 @@ __metadata: "@docsearch/css": "npm:^3.9.0" "@docsearch/js": "npm:^3.9.0" "@eslint-community/eslint-plugin-eslint-comments": "npm:^4.5.0" + "@eslint/js": "npm:^9.0.0" "@fontsource/inter": "npm:^5.2.8" "@fontsource/jetbrains-mono": "npm:^5.2.6" "@koobiq/ag-grid-angular-theme": "npm:^34.3.1" @@ -17964,7 +17920,7 @@ __metadata: "@types/chalk": "npm:^2.2.0" "@types/conventional-changelog": "npm:^3.1.5" "@types/conventional-changelog-writer": "npm:^4.0.10" - "@types/eslint": "npm:^8.56.12" + "@types/eslint": "npm:^9.0.0" "@types/express": "npm:^4.17.21" "@types/fs-extra": "npm:^5.1.0" "@types/glob": "npm:^7.1.4" @@ -17977,10 +17933,9 @@ __metadata: "@types/nunjucks": "npm:^3.2.1" "@types/spdx-satisfies": "npm:^0.1.2" "@types/ws": "npm:<8.18.2" - "@typescript-eslint/eslint-plugin": "npm:^8.60.1" - "@typescript-eslint/parser": "npm:^8.60.1" ag-grid-angular: "npm:^34.3.1" ag-grid-community: "npm:^34.3.1" + angular-eslint: "npm:^20.7.0" autoprefixer: "npm:^10.4.21" chalk: "npm:^4.1.2" commander: "npm:^11.1.0" @@ -17989,16 +17944,17 @@ __metadata: conventional-changelog-writer: "npm:5.0.1" cspell: "npm:^8.19.4" dotenv: "npm:^16.6.1" - eslint: "npm:^8.57.1" + eslint: "npm:^9.0.0" eslint-config-prettier: "npm:^9.1.2" eslint-plugin-file-progress: "npm:^1.5.0" eslint-plugin-prettier: "npm:^5.5.6" eslint-plugin-promise: "npm:^7.3.0" - eslint-plugin-rxjs: "npm:^5.0.3" + eslint-plugin-rxjs-x: "npm:^1.0.0" express: "npm:^4.22.1" firebase-tools: "npm:^15.3.1" fs-extra: "npm:^5.0.0" glob: "npm:^7.1.3" + globals: "npm:^16.0.0" highlight.js: "npm:^11.11.1" husky: "npm:^9.1.7" inquirer: "npm:^7.3.3" @@ -18039,6 +17995,7 @@ __metadata: tsickle: "npm:^0.39.1" tslib: "npm:^2.8.1" typescript: "npm:5.8.3" + typescript-eslint: "npm:^8.60.1" zone.js: "npm:~0.16.2" languageName: unknown linkType: soft @@ -19145,7 +19102,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -19154,6 +19111,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^3.1.5": + version: 3.1.5 + resolution: "minimatch@npm:3.1.5" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/2ecbdc0d33f07bddb0315a8b5afbcb761307a8778b48f0b312418ccbced99f104a2d17d8aca7573433c70e8ccd1c56823a441897a45e384ea76ef401a26ace70 + languageName: node + linkType: hard + "minimatch@npm:^5.0.1, minimatch@npm:^5.1.0": version: 5.1.6 resolution: "minimatch@npm:5.1.6" @@ -21445,16 +21411,6 @@ __metadata: languageName: node linkType: hard -"prompts@npm:~2.4.2": - version: 2.4.2 - resolution: "prompts@npm:2.4.2" - dependencies: - kleur: "npm:^3.0.3" - sisteransi: "npm:^1.0.5" - checksum: 10c0/16f1ac2977b19fe2cf53f8411cc98db7a3c8b115c479b2ca5c82b5527cd937aa405fa04f9a5960abeb9daef53191b53b4d13e35c1f5d50e8718c76917c5f1ea4 - languageName: node - linkType: hard - "proto-list@npm:~1.2.1": version: 1.2.4 resolution: "proto-list@npm:1.2.4" @@ -22114,13 +22070,6 @@ __metadata: languageName: node linkType: hard -"requireindex@npm:~1.2.0": - version: 1.2.0 - resolution: "requireindex@npm:1.2.0" - checksum: 10c0/7fb42aed73bf8de9acc4d6716cf07acc7fbe180e58729433bafcf702e76e7bb10e54f8266c06bfec62d752e0ac14d50e8758833de539e6f4e2cd642077866153 - languageName: node - linkType: hard - "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -22309,17 +22258,6 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: bin.js - checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 - languageName: node - linkType: hard - "rimraf@npm:^5.0.1, rimraf@npm:^5.0.10": version: 5.0.10 resolution: "rimraf@npm:5.0.10" @@ -22774,23 +22712,6 @@ __metadata: languageName: node linkType: hard -"rxjs-report-usage@npm:^1.0.4": - version: 1.0.6 - resolution: "rxjs-report-usage@npm:1.0.6" - dependencies: - "@babel/parser": "npm:^7.10.3" - "@babel/traverse": "npm:^7.10.3" - "@babel/types": "npm:^7.10.3" - bent: "npm:~7.3.6" - chalk: "npm:~4.1.0" - glob: "npm:~7.2.0" - prompts: "npm:~2.4.2" - bin: - rxjs-report-usage: bin/rxjs-report-usage - checksum: 10c0/f87af567fcce83644cd028de6aaba5ee7555c85fc5b7f075068c4e48088b220721548c1b0cef9e8452def26257a098e732e062e82e494f236cf9ed5748bd8e5b - languageName: node - linkType: hard - "rxjs@npm:7.8.2, rxjs@npm:^7.8.2": version: 7.8.2 resolution: "rxjs@npm:7.8.2" @@ -23014,6 +22935,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:7.7.3": + version: 7.7.3 + resolution: "semver@npm:7.7.3" + bin: + semver: bin/semver.js + checksum: 10c0/4afe5c986567db82f44c8c6faef8fe9df2a9b1d98098fc1721f57c696c4c21cebd572f297fc21002f81889492345b8470473bc6f4aff5fb032a6ea59ea2bc45e + languageName: node + linkType: hard + "semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" @@ -23398,13 +23328,6 @@ __metadata: languageName: node linkType: hard -"sisteransi@npm:^1.0.5": - version: 1.0.5 - resolution: "sisteransi@npm:1.0.5" - checksum: 10c0/230ac975cca485b7f6fe2b96a711aa62a6a26ead3e6fb8ba17c5a00d61b8bed0d7adc21f5626b70d7c33c62ff4e63933017a6462942c719d1980bb0b1207ad46 - languageName: node - linkType: hard - "skin-tone@npm:^2.0.0": version: 2.0.0 resolution: "skin-tone@npm:2.0.0" @@ -24009,7 +23932,7 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1": +"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd @@ -24473,13 +24396,6 @@ __metadata: languageName: node linkType: hard -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c - languageName: node - linkType: hard - "thenify-all@npm:^1.0.0": version: 1.6.0 resolution: "thenify-all@npm:1.6.0" @@ -24965,7 +24881,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.8.1, tslib@npm:^1.9.0": +"tslib@npm:^1.9.0": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 @@ -24986,33 +24902,6 @@ __metadata: languageName: node linkType: hard -"tsutils-etc@npm:^1.4.1": - version: 1.4.2 - resolution: "tsutils-etc@npm:1.4.2" - dependencies: - "@types/yargs": "npm:^17.0.0" - yargs: "npm:^17.0.0" - peerDependencies: - tsutils: ^3.0.0 - typescript: ">=4.0.0" - bin: - ts-flags: bin/ts-flags - ts-kind: bin/ts-kind - checksum: 10c0/7b07273627f2f4af2a785a073d0fead7c0c0d1133fee68e5de19f2aca4b01ea35a08de2c97e75f58fb6ba6ddb03ad490abf056bb8b71fb01e84bfed1b8a24a0d - languageName: node - linkType: hard - -"tsutils@npm:^3.0.0, tsutils@npm:^3.17.1, tsutils@npm:^3.21.0": - version: 3.21.0 - resolution: "tsutils@npm:3.21.0" - dependencies: - tslib: "npm:^1.8.1" - peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - checksum: 10c0/02f19e458ec78ead8fffbf711f834ad8ecd2cc6ade4ec0320790713dccc0a412b99e7fd907c4cda2a1dc602c75db6f12e0108e87a5afad4b2f9e90a24cabd5a2 - languageName: node - linkType: hard - "tuf-js@npm:^4.1.0": version: 4.1.0 resolution: "tuf-js@npm:4.1.0" @@ -25168,6 +25057,21 @@ __metadata: languageName: node linkType: hard +"typescript-eslint@npm:^8.60.1": + version: 8.60.1 + resolution: "typescript-eslint@npm:8.60.1" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:8.60.1" + "@typescript-eslint/parser": "npm:8.60.1" + "@typescript-eslint/typescript-estree": "npm:8.60.1" + "@typescript-eslint/utils": "npm:8.60.1" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + checksum: 10c0/75a42e14b4a7446dd9ad992422135f696e0af58d7c0f64ff2d9f157f1df7bac6a089fa7a35454d2393eadd329e602c0002c07043bbcf4906f7007e45e783b54e + languageName: node + linkType: hard + "typescript@npm:5.8.2": version: 5.8.2 resolution: "typescript@npm:5.8.2"