lint-suite 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/eslint.cjs +27 -28
- package/eslint.cjs.map +2 -2
- package/eslint.js +27 -28
- package/eslint.js.map +2 -2
- package/lib/angular.d.ts.map +1 -1
- package/package.json +16 -16
- package/stylelint.cjs +3 -0
- package/stylelint.cjs.map +2 -2
- package/stylelint.d.ts.map +1 -1
- package/stylelint.js +3 -0
- package/stylelint.js.map +2 -2
package/eslint.cjs
CHANGED
|
@@ -141,6 +141,7 @@ var angular = (0, import_config2.defineConfig)([
|
|
|
141
141
|
processor: import_angular_eslint2.processInlineTemplates,
|
|
142
142
|
rules: {
|
|
143
143
|
"@angular-eslint/prefer-on-push-component-change-detection": "error",
|
|
144
|
+
// v22: flags only explicit opt-out of OnPush (omission now means OnPush)
|
|
144
145
|
"@angular-eslint/prefer-signals": "error",
|
|
145
146
|
"@angular-eslint/use-injectable-provided-in": "error",
|
|
146
147
|
"@angular-eslint/prefer-signal-model": "error",
|
|
@@ -158,8 +159,6 @@ var angular = (0, import_config2.defineConfig)([
|
|
|
158
159
|
// Consistent lifecycle method ordering
|
|
159
160
|
"@angular-eslint/computed-must-return": "error",
|
|
160
161
|
// Catch silent computed() bugs missing a return
|
|
161
|
-
"@angular-eslint/no-conflicting-lifecycle": "error",
|
|
162
|
-
// Block incompatible hook combinations (OnChanges + DoCheck)
|
|
163
162
|
"@angular-eslint/no-duplicates-in-metadata-arrays": "error",
|
|
164
163
|
// Catch duplicate imports/providers in @Component/@NgModule
|
|
165
164
|
"@angular-eslint/no-lifecycle-call": "error",
|
|
@@ -1048,53 +1047,53 @@ var boundaries = (0, import_config12.defineConfig)([
|
|
|
1048
1047
|
"error",
|
|
1049
1048
|
{
|
|
1050
1049
|
default: "disallow",
|
|
1051
|
-
message: "
|
|
1052
|
-
|
|
1050
|
+
message: "{{to.element.types}} is not allowed to be imported in {{from.element.types}}",
|
|
1051
|
+
policies: [
|
|
1053
1052
|
{
|
|
1054
|
-
from: { type: "feature" },
|
|
1053
|
+
from: { element: { type: "feature" } },
|
|
1055
1054
|
allow: [
|
|
1056
|
-
{ to: { type: "feature" } },
|
|
1057
|
-
{ to: { type: "ui" } },
|
|
1058
|
-
{ to: { type: "domain-logic" } },
|
|
1059
|
-
{ to: { type: "utils" } },
|
|
1060
|
-
{ to: { type: "common" } }
|
|
1055
|
+
{ to: { element: { type: "feature" } } },
|
|
1056
|
+
{ to: { element: { type: "ui" } } },
|
|
1057
|
+
{ to: { element: { type: "domain-logic" } } },
|
|
1058
|
+
{ to: { element: { type: "utils" } } },
|
|
1059
|
+
{ to: { element: { type: "common" } } }
|
|
1061
1060
|
]
|
|
1062
1061
|
},
|
|
1063
1062
|
{
|
|
1064
|
-
from: { type: "domain-logic" },
|
|
1063
|
+
from: { element: { type: "domain-logic" } },
|
|
1065
1064
|
allow: [
|
|
1066
|
-
{ to: { type: "domain-logic" } },
|
|
1067
|
-
{ to: { type: "data-access" } },
|
|
1068
|
-
{ to: { type: "utils" } },
|
|
1069
|
-
{ to: { type: "common" } }
|
|
1065
|
+
{ to: { element: { type: "domain-logic" } } },
|
|
1066
|
+
{ to: { element: { type: "data-access" } } },
|
|
1067
|
+
{ to: { element: { type: "utils" } } },
|
|
1068
|
+
{ to: { element: { type: "common" } } }
|
|
1070
1069
|
]
|
|
1071
1070
|
},
|
|
1072
1071
|
{
|
|
1073
|
-
from: { type: "data-access" },
|
|
1072
|
+
from: { element: { type: "data-access" } },
|
|
1074
1073
|
allow: [
|
|
1075
|
-
{ to: { type: "data-access" } },
|
|
1076
|
-
{ to: { type: "utils" } },
|
|
1077
|
-
{ to: { type: "common" } }
|
|
1074
|
+
{ to: { element: { type: "data-access" } } },
|
|
1075
|
+
{ to: { element: { type: "utils" } } },
|
|
1076
|
+
{ to: { element: { type: "common" } } }
|
|
1078
1077
|
]
|
|
1079
1078
|
},
|
|
1080
1079
|
{
|
|
1081
|
-
from: { type: "ui" },
|
|
1080
|
+
from: { element: { type: "ui" } },
|
|
1082
1081
|
allow: [
|
|
1083
|
-
{ to: { type: "ui" } },
|
|
1084
|
-
{ to: { type: "utils" } },
|
|
1085
|
-
{ to: { type: "common" } }
|
|
1082
|
+
{ to: { element: { type: "ui" } } },
|
|
1083
|
+
{ to: { element: { type: "utils" } } },
|
|
1084
|
+
{ to: { element: { type: "common" } } }
|
|
1086
1085
|
]
|
|
1087
1086
|
},
|
|
1088
1087
|
{
|
|
1089
|
-
from: { type: "utils" },
|
|
1088
|
+
from: { element: { type: "utils" } },
|
|
1090
1089
|
allow: [
|
|
1091
|
-
{ to: { type: "utils" } },
|
|
1092
|
-
{ to: { type: "common" } }
|
|
1090
|
+
{ to: { element: { type: "utils" } } },
|
|
1091
|
+
{ to: { element: { type: "common" } } }
|
|
1093
1092
|
]
|
|
1094
1093
|
},
|
|
1095
1094
|
{
|
|
1096
|
-
from: { type: "common" },
|
|
1097
|
-
allow: [{ to: { type: "common" } }]
|
|
1095
|
+
from: { element: { type: "common" } },
|
|
1096
|
+
allow: [{ to: { element: { type: "common" } } }]
|
|
1098
1097
|
}
|
|
1099
1098
|
]
|
|
1100
1099
|
}
|
package/eslint.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../packages/lint-suite/src/eslint.ts", "../../../../packages/lint-suite/src/lib/angular-template.ts", "../../../../packages/lint-suite/src/lib/angular.ts", "../../../../packages/lint-suite/src/lib/base.ts", "../../../../packages/lint-suite/src/lib/javascript.ts", "../../../../packages/lint-suite/src/lib/json.ts", "../../../../packages/lint-suite/src/lib/prettier.ts", "../../../../packages/lint-suite/src/lib/rxjs.ts", "../../../../packages/lint-suite/src/lib/storybook.ts", "../../../../packages/lint-suite/src/lib/typescript.ts", "../../../../packages/lint-suite/src/lib/rules/explicit-accessibility.ts", "../../../../packages/lint-suite/src/lib/vitest.ts", "../../../../packages/lint-suite/src/lib/playwright.ts", "../../../../packages/lint-suite/src/lib/boundaries.ts"],
|
|
4
|
-
"sourcesContent": ["import { ConfigArray } from 'typescript-eslint';\nimport { angularTemplate } from './lib/angular-template.js';\nimport { angular } from './lib/angular.js';\nimport { base } from './lib/base.js';\nimport { javascript } from './lib/javascript.js';\nimport { json } from './lib/json.js';\nimport { prettier } from './lib/prettier.js';\nimport { rxjs } from './lib/rxjs.js';\nimport { storybook } from './lib/storybook.js';\nimport { typescript } from './lib/typescript.js';\nimport { vitest } from './lib/vitest.js';\nimport { playwright } from './lib/playwright.js';\nimport { boundaries } from './lib/boundaries.js';\n\nexport const recommended: ConfigArray = [\n ...base,\n ...javascript,\n ...typescript,\n ...json,\n ...boundaries,\n ...prettier // Must be last to disable formatting rules that conflict with Prettier\n];\n\nexport {\n base,\n javascript,\n typescript,\n angular,\n angularTemplate,\n rxjs,\n json,\n boundaries,\n storybook,\n vitest,\n playwright,\n prettier\n};\n", "import { configs } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const angularTemplate = defineConfig([\n {\n files: ['**/*.html'],\n extends: [\n ...(configs.templateAccessibility as Config[]),\n ...(configs.templateRecommended as Config[])\n ],\n rules: {\n '@angular-eslint/template/prefer-template-literal': 'error',\n '@angular-eslint/template/no-any': 'error',\n '@angular-eslint/template/no-duplicate-attributes': 'error',\n '@angular-eslint/template/button-has-type': 'error',\n '@angular-eslint/template/no-positive-tabindex': 'error',\n '@angular-eslint/template/valid-aria': 'error',\n '@angular-eslint/template/alt-text': 'error',\n '@angular-eslint/template/elements-content': 'error',\n '@angular-eslint/template/click-events-have-key-events': 'error',\n '@angular-eslint/template/mouse-events-have-key-events': 'error',\n '@angular-eslint/template/table-scope': 'error',\n '@angular-eslint/template/no-autofocus': 'error',\n '@angular-eslint/template/no-distracting-elements': 'error',\n '@angular-eslint/template/prefer-control-flow': 'error',\n '@angular-eslint/template/prefer-self-closing-tags': 'error',\n '@angular-eslint/template/prefer-ngsrc': 'error',\n '@angular-eslint/template/prefer-built-in-pipes': 'error',\n '@angular-eslint/template/no-interpolation-in-attributes': 'error',\n '@angular-eslint/template/no-nested-tags': 'error',\n '@angular-eslint/template/use-track-by-function': 'error',\n '@angular-eslint/template/label-has-associated-control': 'error',\n '@angular-eslint/template/prefer-at-else': 'error', // v21: @if/@else syntax\n '@angular-eslint/template/prefer-at-empty': 'error', // v21: @for/@empty syntax\n '@angular-eslint/template/prefer-contextual-for-variables': 'error', // v21: Use $index, $first, etc.\n '@angular-eslint/template/no-empty-control-flow': 'error', // v21: Catch incomplete refactoring\n '@angular-eslint/template/prefer-class-binding': 'error', // v21.2.0: Prefer [class] over ngClass\n '@angular-eslint/template/prefer-static-string-properties': 'error', // Reduce change detection\n '@angular-eslint/template/no-non-null-assertion': 'error', // Forbid `!` assertions in templates\n '@angular-eslint/template/no-inline-styles': 'error', // Forbid inline style=\"...\" attributes\n '@angular-eslint/template/conditional-complexity': [\n 'warn',\n { maxComplexity: 5 }\n ], // Template readability\n '@angular-eslint/template/attributes-order': [\n 'error',\n {\n alphabetical: true,\n order: [\n 'STRUCTURAL_DIRECTIVE', // e.g. `*ngIf=\"true\"`, `*ngFor=\"let item of items\"`\n 'TEMPLATE_REFERENCE', // e.g. `<input #inputRef>`\n 'INPUT_BINDING', // e.g. `[id]=\"3\"`, `[attr.colspan]=\"colspan\"`, [style.width.%]=\"100\", [@triggerName]=\"expression\", `bind-id=\"handleChange()\"`\n 'TWO_WAY_BINDING', // e.g. `[(id)]=\"id\"`, `bindon-id=\"id\"\n 'ATTRIBUTE_BINDING', // e.g. `<input required>`, `id=\"3\"`\n 'OUTPUT_BINDING' // e.g. `(idChange)=\"handleChange()\"`, `on-id=\"handleChange()\"`\n ]\n }\n ]\n }\n }\n]);\n", "import globals from 'globals';\nimport { configs, processInlineTemplates } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const angular = defineConfig([\n {\n files: ['**/*.ts'],\n extends: [...(configs.tsRecommended as Config[])],\n languageOptions: {\n globals: {\n ...globals.browser,\n ...globals.es2025,\n ...globals.node\n }\n },\n processor: processInlineTemplates,\n rules: {\n '@angular-eslint/prefer-on-push-component-change-detection': 'error',\n '@angular-eslint/prefer-signals': 'error',\n '@angular-eslint/use-injectable-provided-in': 'error',\n '@angular-eslint/prefer-signal-model': 'error',\n '@angular-eslint/no-uncalled-signals': 'error',\n '@angular-eslint/prefer-host-metadata-property': 'error',\n '@angular-eslint/no-implicit-take-until-destroyed': 'error', // v21.2.0: Enforce explicit DestroyRef\n '@angular-eslint/no-async-lifecycle-method': 'error', // Prevent async lifecycle hooks\n '@angular-eslint/prefer-output-readonly': 'warn', // Prevent accidental reassignment\n '@angular-eslint/prefer-output-emitter-ref': 'warn', // Modern output() function over @Output()\n '@angular-eslint/sort-lifecycle-methods': 'warn', // Consistent lifecycle method ordering\n '@angular-eslint/computed-must-return': 'error', // Catch silent computed() bugs missing a return\n '@angular-eslint/no-conflicting-lifecycle': 'error', // Block incompatible hook combinations (OnChanges + DoCheck)\n '@angular-eslint/no-duplicates-in-metadata-arrays': 'error', // Catch duplicate imports/providers in @Component/@NgModule\n '@angular-eslint/no-lifecycle-call': 'error', // Forbid manual this.ngOnInit() calls\n '@angular-eslint/require-lifecycle-on-prototype': 'error', // Lifecycle hooks must be methods, not arrow-fn fields\n '@angular-eslint/relative-url-prefix': 'error', // Require ./ in templateUrl/styleUrl for portability\n '@angular-eslint/use-component-selector': 'error', // All components must declare a selector\n '@angular-eslint/no-developer-preview': 'warn', // Flag APIs marked @developerPreview (no breaking-change policy)\n '@angular-eslint/no-experimental': 'warn' // Flag APIs marked @experimental\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport stylistic from '@stylistic/eslint-plugin';\nimport importPluginX from 'eslint-plugin-import-x';\nimport { defineConfig } from 'eslint/config';\n\nexport const base = defineConfig([\n { extends: [...configs['flat/base']] },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [importPluginX.flatConfigs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [stylistic.configs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'no-param-reassign': 'error',\n 'no-alert': 'error',\n 'no-console': ['warn', { allow: ['warn', 'error'] }],\n 'no-debugger': 'error',\n eqeqeq: ['error', 'always', { null: 'ignore' }],\n curly: ['error', 'multi'],\n 'prefer-const': ['error', { destructuring: 'all' }],\n 'no-var': 'error',\n 'object-shorthand': 'error',\n 'prefer-arrow-callback': 'error',\n 'no-useless-concat': 'error',\n 'prefer-template': 'error',\n 'no-nested-ternary': 'error',\n 'no-useless-assignment': 'error', // NEW: Catch unused assignments (ESLint v9)\n 'no-object-constructor': 'error', // Disallow new Object() without arguments\n 'no-else-return': ['error', { allowElseIf: false }], // Prefer early returns\n 'no-multi-assign': 'error', // Disallow chaining assignments\n radix: 'error', // Require radix parameter for parseInt()\n yoda: 'error', // Disallow yoda conditions (`if (\"red\" === color)`)\n complexity: ['warn', 10], // Warn if function complexity is high\n 'max-depth': ['warn', 4], // Warn on deeply nested blocks\n 'max-lines-per-function': [\n 'warn',\n { max: 50, skipBlankLines: true, skipComments: true }\n ], // Warn on long functions\n 'max-params': ['warn', 4], // Warn on functions with many parameters\n 'no-lonely-if': 'error', // Disallow if statements as the only statement in an else block\n 'grouped-accessor-pairs': ['error', 'getBeforeSet'], // Enforce consistency for getters/setters\n 'class-methods-use-this': 'error',\n 'no-underscore-dangle': 'error',\n 'max-len': [\n 'error',\n {\n code: 135,\n ignoreComments: true\n }\n ],\n 'spaced-comment': [\n 2,\n 'always',\n {\n block: {\n exceptions: ['*']\n }\n }\n ],\n '@stylistic/padding-line-between-statements': [\n 'error',\n {\n blankLine: 'always',\n prev: 'export',\n next: ['export', 'const']\n },\n {\n blankLine: 'always',\n prev: ['const', 'let', 'var'],\n next: '*'\n },\n {\n blankLine: 'any',\n prev: ['const', 'let', 'var'],\n next: ['const', 'let', 'var']\n },\n {\n blankLine: 'always',\n prev: '*',\n next: [\n 'for',\n 'if',\n 'return',\n 'throw',\n 'switch',\n 'try',\n 'class',\n 'function'\n ]\n }\n ],\n '@stylistic/comma-dangle': ['error', 'never'],\n '@stylistic/indent': [\n 'error',\n 2,\n {\n offsetTernaryExpressions: true,\n SwitchCase: 1,\n ignoredNodes: [\n 'TSTypeParameterInstantiation',\n 'FunctionExpression > .params > :matches(Decorator, :not(:first-child))'\n ]\n }\n ],\n 'sort-imports': [\n 'error',\n {\n ignoreCase: false,\n ignoreDeclarationSort: true,\n ignoreMemberSort: false,\n memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],\n allowSeparatedGroups: true\n }\n ]\n }\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts',\n '**/*.html'\n ],\n rules: {\n 'max-lines': [\n 'error',\n {\n max: 150,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n 'max-lines-per-function': 'off',\n complexity: ['warn', { max: 3 }],\n 'max-lines': [\n 'error',\n {\n max: 300,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n 'max-classes-per-file': 'off'\n }\n },\n {\n files: ['**/*.state.ts'],\n rules: {\n 'class-methods-use-this': 'off'\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const javascript = defineConfig({\n files: ['**/*.js', '**/*.jsx', '**/*.cjs', '**/*.mjs'],\n extends: [...(configs['flat/javascript'] as Config[])]\n});\n", "import jsonPlugin from '@eslint/json';\nimport { defineConfig } from 'eslint/config';\n\nexport const json = defineConfig([\n {\n plugins: { json: jsonPlugin }\n },\n {\n files: ['**/*.json'],\n language: 'json/json',\n extends: [jsonPlugin.configs.recommended]\n }\n]);\n", "import eslintConfigPrettier from 'eslint-config-prettier';\nimport { defineConfig } from 'eslint/config';\n\nexport const prettier = defineConfig([eslintConfigPrettier]);\n", "import rxjsEslint from '@smarttools/eslint-plugin-rxjs';\nimport { defineConfig } from 'eslint/config';\n\nexport const rxjs = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n extends: [rxjsEslint.configs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n rxjs: rxjsEslint\n }\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'rxjs/prefer-observer': 'error',\n 'rxjs/finnish': 'warn',\n 'rxjs/no-ignored-subscription': 'warn',\n 'rxjs/no-ignored-error': 'warn',\n 'rxjs/no-unsafe-switchmap': 'error',\n 'rxjs/no-unsafe-takeuntil': 'error',\n 'rxjs/no-unsafe-catch': 'error',\n 'rxjs/no-unsafe-first': 'error',\n 'rxjs/no-topromise': 'error',\n 'rxjs/throw-error': 'error',\n 'rxjs/no-async-subscribe': 'off',\n 'rxjs/no-exposed-subjects': 'error', // Enforce subject encapsulation\n 'rxjs/no-cyclic-action': 'error', // Prevent infinite loops in NgRx effects\n 'rxjs/no-subscribe-handlers': 'warn' // Prefer observer objects (complements prefer-observer)\n }\n },\n {\n files: ['**/*.spec.ts', '**/*.test.ts', '**/*.spec.js', '**/*.test.js'],\n rules: {\n 'rxjs/no-ignored-subscription': 'off',\n 'rxjs/no-subscribe-handlers': 'off'\n }\n }\n]);\n", "import storybookEslint from 'eslint-plugin-storybook';\nimport { defineConfig } from 'eslint/config';\n\nexport const storybook = defineConfig([\n {\n ignores: ['!.storybook'],\n files: ['**/*.stories.ts'],\n extends: [storybookEslint.configs['flat/recommended']],\n rules: {\n 'storybook/csf-component': 'warn', // Ensure component property is set\n 'storybook/no-stories-of': 'error' // Prevent deprecated storiesOf API\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';\nimport importPluginX from 'eslint-plugin-import-x';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nimport explicitAccessibilityRule from './rules/explicit-accessibility.js';\n\nconst localTypescriptRules: Record<string, unknown> = {\n rules: {\n 'explicit-accessibility': explicitAccessibilityRule\n }\n};\n\nexport const typescript = defineConfig([\n // NOTE: Checks for 'prettier' and 'eslint-plugin-prettier'\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n extends: [\n importPluginX.flatConfigs.typescript,\n ...(configs['flat/typescript'] as Config[])\n ]\n },\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n plugins: { local: localTypescriptRules },\n rules: {\n 'local/explicit-accessibility': 'error',\n '@typescript-eslint/explicit-member-accessibility': 'error',\n '@typescript-eslint/explicit-function-return-type': 'error',\n '@typescript-eslint/no-empty-function': 'error',\n '@typescript-eslint/no-unused-vars': 'error',\n '@typescript-eslint/no-use-before-define': 'error',\n\n // A. Eliminating `any` (already covered by strict-type-checked, but explicit for clarity)\n '@typescript-eslint/no-explicit-any': 'error',\n '@typescript-eslint/no-unsafe-assignment': 'error',\n '@typescript-eslint/no-unsafe-call': 'error',\n '@typescript-eslint/no-unsafe-member-access': 'error',\n '@typescript-eslint/no-unsafe-return': 'error',\n '@typescript-eslint/no-unsafe-argument': 'error',\n\n // New v8 type-safety rules (replacements for deprecated ban-types)\n '@typescript-eslint/no-empty-object-type': 'error', // Bans confusing {} type\n '@typescript-eslint/no-unsafe-function-type': 'error', // Bans Function type\n '@typescript-eslint/no-wrapper-object-types': 'error', // Bans Number, String, Boolean wrappers\n\n // B. Explicit Annotations (partially covered, explicit module boundaries is key)\n '@typescript-eslint/explicit-module-boundary-types': 'error',\n // Consider enabling if maximum explicitness is desired, even if verbose:\n\n // C. Null/Undefined Safety (Requires strictNullChecks)\n '@typescript-eslint/no-non-null-assertion': 'error',\n '@typescript-eslint/prefer-nullish-coalescing': 'error',\n '@typescript-eslint/prefer-optional-chain': 'error',\n\n // D. Promise Handling (Supplementing plugin:promise/recommended)\n '@typescript-eslint/no-floating-promises': [\n 'error',\n { ignoreVoid: true }\n ],\n '@typescript-eslint/no-misused-promises': 'warn', // Already in recommended-type-checked\n '@typescript-eslint/promise-function-async': 'error',\n '@typescript-eslint/await-thenable': 'error', // Already in recommended-type-checked\n\n // E. Best Practices & Potential Errors (Some covered by presets, fine-tuning here)\n '@typescript-eslint/no-inferrable-types': 'warn', // Keep as warn or disable if inference is preferred\n '@typescript-eslint/no-require-imports': 'error', // Use ES modules (replaces deprecated no-var-requires)\n '@typescript-eslint/only-throw-error': 'error', // Replaces deprecated no-throw-literal\n '@typescript-eslint/no-array-delete': 'error', // Prevents delete arr[0]\n '@typescript-eslint/return-await': ['error', 'in-try-catch'], // Better stack traces in try/catch\n '@typescript-eslint/require-await': 'error',\n '@typescript-eslint/restrict-template-expressions': [\n 'error',\n { allowNumber: true, allowBoolean: true }\n ], // Allow numbers/booleans in templates\n '@typescript-eslint/restrict-plus-operands': 'error', // Enforce consistent types for '+'\n '@typescript-eslint/prefer-as-const': 'error',\n '@typescript-eslint/no-shadow': 'error',\n '@typescript-eslint/switch-exhaustiveness-check': 'error', // Ensure switch on unions is exhaustive\n '@typescript-eslint/no-unused-expressions': [\n 'error',\n { allowShortCircuit: true, allowTernary: true }\n ],\n '@typescript-eslint/no-useless-constructor': 'error',\n '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], // Prefer dot notation where possible\n\n // Strict type-checked rules\n '@typescript-eslint/no-unnecessary-condition': 'error', // Catches always-true/false conditions\n '@typescript-eslint/no-confusing-void-expression': [\n 'error',\n { ignoreArrowShorthand: true, ignoreVoidOperator: true }\n ], // Prevent confusing void usage\n '@typescript-eslint/no-dynamic-delete': 'error', // Use Map instead of delete obj[key]\n '@typescript-eslint/no-extraneous-class': [\n 'error',\n { allowWithDecorator: true }\n ], // Allow Angular classes\n '@typescript-eslint/no-invalid-void-type': 'error', // Restrict void to return types\n '@typescript-eslint/unified-signatures': 'error', // Merge overloads where possible\n '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error', // Forbids foo! ?? bar\n\n // Stylistic type-checked rules\n '@typescript-eslint/prefer-find': 'error', // Use find() instead of filter()[0]\n '@typescript-eslint/prefer-for-of': 'error', // Modern iteration\n '@typescript-eslint/prefer-includes': 'error', // indexOf() \u2192 includes()\n '@typescript-eslint/prefer-string-starts-ends-with': 'error', // Modern string methods\n '@typescript-eslint/prefer-regexp-exec': 'error', // Better regex performance\n\n // F. Consistency & Style (Some covered by stylistic-type-checked)\n '@typescript-eslint/consistent-type-assertions': [\n 'error',\n { assertionStyle: 'as', objectLiteralTypeAssertions: 'never' }\n ],\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\n '@typescript-eslint/consistent-type-imports': [\n 'error',\n { prefer: 'type-imports', fixStyle: 'separate-type-imports' }\n ],\n '@typescript-eslint/naming-convention': [\n 'error',\n {\n selector: 'objectLiteralProperty',\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'objectLiteralProperty',\n format: ['camelCase', 'snake_case', 'PascalCase']\n },\n {\n selector: 'parameter',\n format: ['camelCase'],\n leadingUnderscore: 'allow'\n },\n { selector: 'default', format: ['camelCase'] },\n { selector: 'variable', format: ['camelCase', 'UPPER_CASE'] },\n { selector: 'function', format: ['camelCase'] },\n { selector: 'typeLike', format: ['PascalCase'] },\n {\n selector: 'property',\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'property',\n format: ['camelCase', 'PascalCase', 'snake_case']\n }\n ],\n 'import-x/order': [\n 'error',\n {\n groups: [\n 'builtin',\n 'external',\n 'internal',\n ['parent', 'sibling'],\n 'index',\n 'unknown'\n ],\n pathGroups: [\n {\n pattern: '@angular/**',\n group: 'builtin',\n position: 'before'\n },\n {\n pattern: '@nestjs/**',\n group: 'builtin',\n position: 'before'\n },\n {\n pattern: '@shared/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@backend/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@frontend/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@*/shared/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@*/frontend/**',\n group: 'internal',\n position: 'after'\n },\n {\n pattern: '@*/backend/**',\n group: 'internal',\n position: 'after'\n }\n ],\n pathGroupsExcludedImportTypes: ['builtin'],\n 'newlines-between': 'always',\n alphabetize: { order: 'asc', caseInsensitive: true }\n }\n ],\n 'import-x/no-unresolved': 'error',\n 'import-x/no-duplicates': 'error',\n 'import-x/prefer-default-export': 'off',\n 'import-x/no-useless-path-segments': ['error', { noUselessIndex: true }],\n 'import-x/newline-after-import': 'error',\n 'import-x/first': 'error',\n 'import-x/no-mutable-exports': 'error',\n 'import-x/no-self-import': 'error', // Prevents modules importing themselves\n 'import-x/no-cycle': ['error', { maxDepth: 2, ignoreExternal: true }], // Prevents circular dependencies\n 'import-x/consistent-type-specifier-style': ['error', 'prefer-top-level'], // Consistent type imports\n 'import-x/no-anonymous-default-export': 'error' // Improve code searchability\n },\n settings: {\n 'import-x/resolver-next': [\n createTypeScriptImportResolver({\n alwaysTryTypes: true\n })\n ]\n }\n },\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n rules: {\n '@typescript-eslint/prefer-readonly': 'error'\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n '@typescript-eslint/no-namespace': 'off',\n '@typescript-eslint/no-extraneous-class': 'off'\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n '@typescript-eslint/no-empty-function': 'off',\n '@typescript-eslint/no-unbound-method': 'off',\n '@typescript-eslint/consistent-type-assertions': 'off'\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n '@typescript-eslint/consistent-type-assertions': 'off',\n '@typescript-eslint/naming-convention': 'off'\n }\n }\n]);\n", "import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';\n\nconst createRule = ESLintUtils.RuleCreator(\n () => 'https://eslint.org/docs/latest/rules/no-unused-private-class-members'\n);\n\ntype AccessibilityLevel = 'public' | 'private' | 'protected';\n\ntype Options = [\n {\n defaultAccessibility?: AccessibilityLevel;\n }\n];\n\nconst defaultOptions: Options[0] = {\n defaultAccessibility: 'private'\n};\n\nconst getNodeName = (\n node: TSESTree.Node | TSESTree.Token | null | undefined\n): string => {\n if (!node) {\n return '<unknown>';\n }\n\n /*\n * MethodDefinition or PropertyDefinition (check 'key' first)\n * Note: Check 'key' before 'kind' because MethodDefinition has both\n */\n if ('key' in node && node.key) {\n if (node.key.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return node.key.name;\n }\n // Handle computed property names, private identifiers (#name), etc. if needed\n if (node.key.type === TSESTree.AST_NODE_TYPES.PrivateIdentifier) {\n return `#${node.key.name}`;\n }\n return '<computed/complex key>';\n }\n\n // Constructor specific check (if key check didn't catch it - unlikely for MethodDefinition)\n if ('kind' in node && node.kind === 'constructor') {\n return 'constructor';\n }\n\n // TSParameterProperty - handle its 'parameter' property\n if (node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty) {\n const param = node.parameter; // Assign to variable for clarity & potentially better inference\n\n // Handle different parameter kinds:\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return param.name;\n }\n if (param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern) {\n // Check the left side of the assignment\n if (param.left.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return param.left.name; // Name is on the identifier being assigned to\n }\n /*\n * Parameter is an assignment pattern with destructuring (ArrayPattern/ObjectPattern)\n * You might want more sophisticated logic here to extract a name\n */\n return '<destructured parameter>';\n }\n return '<complex parameter>';\n }\n\n return '<unknown>';\n};\n\nexport default createRule<Options, 'missingAccessibility'>({\n name: 'explicit-accessibility',\n meta: {\n type: 'suggestion',\n docs: {\n description: 'Require explicit accessibility modifiers on class members'\n },\n fixable: 'code',\n schema: [\n {\n type: 'object',\n properties: {\n defaultAccessibility: {\n type: 'string',\n enum: ['public', 'private', 'protected'],\n description: 'The accessibility modifier to add if one is missing.'\n }\n },\n additionalProperties: false\n }\n ],\n messages: {\n missingAccessibility:\n \"Class member '{{ name }}' is missing an explicit accessibility modifier (public/private/protected).\"\n }\n },\n defaultOptions: [defaultOptions],\n\n create(context, [options]) {\n const { defaultAccessibility } = { ...defaultOptions, ...options };\n const sourceCode = context.sourceCode;\n\n function checkNode(\n node:\n | TSESTree.MethodDefinition\n | TSESTree.PropertyDefinition\n | TSESTree.TSParameterProperty\n ): void {\n if (node.accessibility) {\n return; // Already has modifier\n }\n\n let reportNode: TSESTree.Node | TSESTree.Token = node;\n const name = getNodeName(node);\n // Adjust report node for better highlighting\n if (\n node.type === TSESTree.AST_NODE_TYPES.MethodDefinition ||\n node.type === TSESTree.AST_NODE_TYPES.PropertyDefinition\n ) {\n reportNode = node.key;\n } else {\n const param = node.parameter;\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\n reportNode = param;\n } else if (\n param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern &&\n param.left.type === TSESTree.AST_NODE_TYPES.Identifier\n ) {\n reportNode = param.left;\n }\n // Keep reportNode as the TSParameterProperty node itself if param isn't simple identifier\n }\n\n context.report({\n node: reportNode ?? node,\n messageId: 'missingAccessibility',\n data: { name },\n fix(fixer) {\n let insertText = `${defaultAccessibility} `;\n\n let tokenToInsertBefore: TSESTree.Token | null;\n if (node.decorators.length > 0) {\n const lastDecorator = node.decorators[node.decorators.length - 1];\n tokenToInsertBefore = sourceCode.getTokenAfter(lastDecorator);\n } else {\n tokenToInsertBefore = sourceCode.getFirstToken(node);\n }\n\n // Parameter properties need special handling if they also have 'readonly'\n if (\n node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty &&\n node.readonly\n ) {\n // If readonly exists without accessibility, insert accessibility *before* readonly\n const firstToken = sourceCode.getFirstToken(node);\n if (firstToken?.value === 'readonly') {\n // double check it's the readonly token\n tokenToInsertBefore = firstToken;\n }\n // If insertion point wasn't decorators, use first token (which should be readonly)\n }\n\n if (!tokenToInsertBefore) return null;\n\n /*\n * If the token immediately after the insertion point isn't whitespace, add a space.\n * (Handles case where tokenToInsertBefore is the last decorator token)\n */\n const tokenAfterInsertion = sourceCode.getTokenAfter(\n tokenToInsertBefore,\n { includeComments: false }\n );\n const textBetween = sourceCode.text.slice(\n tokenToInsertBefore.range[1],\n tokenAfterInsertion?.range[0]\n );\n if (!/^\\s/.test(textBetween)) {\n insertText = ` ${insertText}`; // Add leading space if needed after decorator\n }\n\n return fixer.insertTextBefore(tokenToInsertBefore, insertText);\n }\n });\n }\n\n return {\n MethodDefinition(node: TSESTree.MethodDefinition): void {\n checkNode(node);\n },\n\n PropertyDefinition(node: TSESTree.PropertyDefinition): void {\n checkNode(node);\n },\n\n TSParameterProperty(node: TSESTree.TSParameterProperty): void {\n checkNode(node);\n }\n };\n }\n});\n", "import vitestEslint from '@vitest/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\n\nconst vitestPlugin: Record<string, object> = {\n vitest: vitestEslint\n};\n\nexport const vitest = defineConfig([\n {\n files: ['**/*.spec.ts', '**/*.spec.js', '**/*.test.ts', '**/*.test.js'],\n plugins: vitestPlugin,\n rules: {\n ...vitestEslint.configs.recommended.rules,\n 'vitest/max-nested-describe': ['error', { max: 3 }],\n // Matcher improvements\n 'vitest/prefer-to-be': 'error',\n 'vitest/prefer-to-contain': 'error',\n 'vitest/prefer-to-have-length': 'error',\n 'vitest/prefer-comparison-matcher': 'error',\n 'vitest/prefer-strict-equal': 'warn',\n // Test quality\n 'vitest/prefer-spy-on': 'error',\n 'vitest/prefer-hooks-on-top': 'error',\n 'vitest/prefer-each': 'warn',\n 'vitest/no-test-return-statement': 'error',\n 'vitest/prefer-mock-promise-shorthand': 'error'\n }\n }\n]);\n", "import playwrightEslint from 'eslint-plugin-playwright';\nimport { defineConfig } from 'eslint/config';\n\nexport const playwright = defineConfig([\n {\n ...playwrightEslint.configs['flat/recommended'],\n files: ['**/*.e2e.ts', '**/*.e2e.js'],\n rules: {\n ...playwrightEslint.configs['flat/recommended'].rules,\n // Locator best practices\n 'playwright/prefer-locator': 'error',\n 'playwright/prefer-native-locators': 'error',\n 'playwright/no-nth-methods': 'warn',\n // Matcher improvements\n 'playwright/prefer-to-be': 'error',\n 'playwright/prefer-to-have-count': 'error',\n 'playwright/prefer-to-have-length': 'error',\n 'playwright/prefer-comparison-matcher': 'error',\n // Test structure\n 'playwright/prefer-hooks-on-top': 'error',\n 'playwright/require-top-level-describe': 'warn'\n }\n }\n]);\n", "import boundariesPlugin from 'eslint-plugin-boundaries';\nimport { defineConfig } from 'eslint/config';\n\nexport const boundaries = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n boundaries: boundariesPlugin\n },\n settings: {\n 'boundaries/elements': [\n {\n type: 'feature',\n pattern: '**/feature/**'\n },\n {\n type: 'data-access',\n pattern: '**/data-access/**'\n },\n {\n type: 'domain-logic',\n pattern: '**/domain-logic/**'\n },\n {\n type: 'ui',\n pattern: '**/ui/**'\n },\n {\n type: 'common',\n pattern: '**/common/**'\n },\n {\n type: 'utils',\n pattern: '**/utils/**'\n }\n ],\n 'import/resolver': {\n typescript: {\n alwaysTryTypes: true\n }\n }\n },\n rules: {\n ...boundariesPlugin.configs.recommended.rules,\n 'boundaries/dependencies': [\n 'error',\n {\n default: 'disallow',\n message:\n '${dependency.type} is not allowed to be imported in ${file.type}',\n rules: [\n {\n from: { type: 'feature' },\n allow: [\n { to: { type: 'feature' } },\n { to: { type: 'ui' } },\n { to: { type: 'domain-logic' } },\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'domain-logic' },\n allow: [\n { to: { type: 'domain-logic' } },\n { to: { type: 'data-access' } },\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'data-access' },\n allow: [\n { to: { type: 'data-access' } },\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'ui' },\n allow: [\n { to: { type: 'ui' } },\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'utils' },\n allow: [\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'common' },\n allow: [{ to: { type: 'common' } }]\n }\n ]\n }\n ]\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n 'boundaries/dependencies': 'off'\n }\n }\n]);\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { ConfigArray } from 'typescript-eslint';\nimport { angularTemplate } from './lib/angular-template.js';\nimport { angular } from './lib/angular.js';\nimport { base } from './lib/base.js';\nimport { javascript } from './lib/javascript.js';\nimport { json } from './lib/json.js';\nimport { prettier } from './lib/prettier.js';\nimport { rxjs } from './lib/rxjs.js';\nimport { storybook } from './lib/storybook.js';\nimport { typescript } from './lib/typescript.js';\nimport { vitest } from './lib/vitest.js';\nimport { playwright } from './lib/playwright.js';\nimport { boundaries } from './lib/boundaries.js';\n\nexport const recommended: ConfigArray = [\n ...base,\n ...javascript,\n ...typescript,\n ...json,\n ...boundaries,\n ...prettier // Must be last to disable formatting rules that conflict with Prettier\n];\n\nexport {\n base,\n javascript,\n typescript,\n angular,\n angularTemplate,\n rxjs,\n json,\n boundaries,\n storybook,\n vitest,\n playwright,\n prettier\n};\n", "import { configs } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const angularTemplate = defineConfig([\n {\n files: ['**/*.html'],\n extends: [\n ...(configs.templateAccessibility as Config[]),\n ...(configs.templateRecommended as Config[])\n ],\n rules: {\n '@angular-eslint/template/prefer-template-literal': 'error',\n '@angular-eslint/template/no-any': 'error',\n '@angular-eslint/template/no-duplicate-attributes': 'error',\n '@angular-eslint/template/button-has-type': 'error',\n '@angular-eslint/template/no-positive-tabindex': 'error',\n '@angular-eslint/template/valid-aria': 'error',\n '@angular-eslint/template/alt-text': 'error',\n '@angular-eslint/template/elements-content': 'error',\n '@angular-eslint/template/click-events-have-key-events': 'error',\n '@angular-eslint/template/mouse-events-have-key-events': 'error',\n '@angular-eslint/template/table-scope': 'error',\n '@angular-eslint/template/no-autofocus': 'error',\n '@angular-eslint/template/no-distracting-elements': 'error',\n '@angular-eslint/template/prefer-control-flow': 'error',\n '@angular-eslint/template/prefer-self-closing-tags': 'error',\n '@angular-eslint/template/prefer-ngsrc': 'error',\n '@angular-eslint/template/prefer-built-in-pipes': 'error',\n '@angular-eslint/template/no-interpolation-in-attributes': 'error',\n '@angular-eslint/template/no-nested-tags': 'error',\n '@angular-eslint/template/use-track-by-function': 'error',\n '@angular-eslint/template/label-has-associated-control': 'error',\n '@angular-eslint/template/prefer-at-else': 'error', // v21: @if/@else syntax\n '@angular-eslint/template/prefer-at-empty': 'error', // v21: @for/@empty syntax\n '@angular-eslint/template/prefer-contextual-for-variables': 'error', // v21: Use $index, $first, etc.\n '@angular-eslint/template/no-empty-control-flow': 'error', // v21: Catch incomplete refactoring\n '@angular-eslint/template/prefer-class-binding': 'error', // v21.2.0: Prefer [class] over ngClass\n '@angular-eslint/template/prefer-static-string-properties': 'error', // Reduce change detection\n '@angular-eslint/template/no-non-null-assertion': 'error', // Forbid `!` assertions in templates\n '@angular-eslint/template/no-inline-styles': 'error', // Forbid inline style=\"...\" attributes\n '@angular-eslint/template/conditional-complexity': [\n 'warn',\n { maxComplexity: 5 }\n ], // Template readability\n '@angular-eslint/template/attributes-order': [\n 'error',\n {\n alphabetical: true,\n order: [\n 'STRUCTURAL_DIRECTIVE', // e.g. `*ngIf=\"true\"`, `*ngFor=\"let item of items\"`\n 'TEMPLATE_REFERENCE', // e.g. `<input #inputRef>`\n 'INPUT_BINDING', // e.g. `[id]=\"3\"`, `[attr.colspan]=\"colspan\"`, [style.width.%]=\"100\", [@triggerName]=\"expression\", `bind-id=\"handleChange()\"`\n 'TWO_WAY_BINDING', // e.g. `[(id)]=\"id\"`, `bindon-id=\"id\"\n 'ATTRIBUTE_BINDING', // e.g. `<input required>`, `id=\"3\"`\n 'OUTPUT_BINDING' // e.g. `(idChange)=\"handleChange()\"`, `on-id=\"handleChange()\"`\n ]\n }\n ]\n }\n }\n]);\n", "import globals from 'globals';\nimport { configs, processInlineTemplates } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const angular = defineConfig([\n {\n files: ['**/*.ts'],\n extends: [...(configs.tsRecommended as Config[])],\n languageOptions: {\n globals: {\n ...globals.browser,\n ...globals.es2025,\n ...globals.node\n }\n },\n processor: processInlineTemplates,\n rules: {\n '@angular-eslint/prefer-on-push-component-change-detection': 'error', // v22: flags only explicit opt-out of OnPush (omission now means OnPush)\n '@angular-eslint/prefer-signals': 'error',\n '@angular-eslint/use-injectable-provided-in': 'error',\n '@angular-eslint/prefer-signal-model': 'error',\n '@angular-eslint/no-uncalled-signals': 'error',\n '@angular-eslint/prefer-host-metadata-property': 'error',\n '@angular-eslint/no-implicit-take-until-destroyed': 'error', // v21.2.0: Enforce explicit DestroyRef\n '@angular-eslint/no-async-lifecycle-method': 'error', // Prevent async lifecycle hooks\n '@angular-eslint/prefer-output-readonly': 'warn', // Prevent accidental reassignment\n '@angular-eslint/prefer-output-emitter-ref': 'warn', // Modern output() function over @Output()\n '@angular-eslint/sort-lifecycle-methods': 'warn', // Consistent lifecycle method ordering\n '@angular-eslint/computed-must-return': 'error', // Catch silent computed() bugs missing a return\n '@angular-eslint/no-duplicates-in-metadata-arrays': 'error', // Catch duplicate imports/providers in @Component/@NgModule\n '@angular-eslint/no-lifecycle-call': 'error', // Forbid manual this.ngOnInit() calls\n '@angular-eslint/require-lifecycle-on-prototype': 'error', // Lifecycle hooks must be methods, not arrow-fn fields\n '@angular-eslint/relative-url-prefix': 'error', // Require ./ in templateUrl/styleUrl for portability\n '@angular-eslint/use-component-selector': 'error', // All components must declare a selector\n '@angular-eslint/no-developer-preview': 'warn', // Flag APIs marked @developerPreview (no breaking-change policy)\n '@angular-eslint/no-experimental': 'warn' // Flag APIs marked @experimental\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport stylistic from '@stylistic/eslint-plugin';\nimport importPluginX from 'eslint-plugin-import-x';\nimport { defineConfig } from 'eslint/config';\n\nexport const base = defineConfig([\n { extends: [...configs['flat/base']] },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [importPluginX.flatConfigs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [stylistic.configs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'no-param-reassign': 'error',\n 'no-alert': 'error',\n 'no-console': ['warn', { allow: ['warn', 'error'] }],\n 'no-debugger': 'error',\n eqeqeq: ['error', 'always', { null: 'ignore' }],\n curly: ['error', 'multi'],\n 'prefer-const': ['error', { destructuring: 'all' }],\n 'no-var': 'error',\n 'object-shorthand': 'error',\n 'prefer-arrow-callback': 'error',\n 'no-useless-concat': 'error',\n 'prefer-template': 'error',\n 'no-nested-ternary': 'error',\n 'no-useless-assignment': 'error', // NEW: Catch unused assignments (ESLint v9)\n 'no-object-constructor': 'error', // Disallow new Object() without arguments\n 'no-else-return': ['error', { allowElseIf: false }], // Prefer early returns\n 'no-multi-assign': 'error', // Disallow chaining assignments\n radix: 'error', // Require radix parameter for parseInt()\n yoda: 'error', // Disallow yoda conditions (`if (\"red\" === color)`)\n complexity: ['warn', 10], // Warn if function complexity is high\n 'max-depth': ['warn', 4], // Warn on deeply nested blocks\n 'max-lines-per-function': [\n 'warn',\n { max: 50, skipBlankLines: true, skipComments: true }\n ], // Warn on long functions\n 'max-params': ['warn', 4], // Warn on functions with many parameters\n 'no-lonely-if': 'error', // Disallow if statements as the only statement in an else block\n 'grouped-accessor-pairs': ['error', 'getBeforeSet'], // Enforce consistency for getters/setters\n 'class-methods-use-this': 'error',\n 'no-underscore-dangle': 'error',\n 'max-len': [\n 'error',\n {\n code: 135,\n ignoreComments: true\n }\n ],\n 'spaced-comment': [\n 2,\n 'always',\n {\n block: {\n exceptions: ['*']\n }\n }\n ],\n '@stylistic/padding-line-between-statements': [\n 'error',\n {\n blankLine: 'always',\n prev: 'export',\n next: ['export', 'const']\n },\n {\n blankLine: 'always',\n prev: ['const', 'let', 'var'],\n next: '*'\n },\n {\n blankLine: 'any',\n prev: ['const', 'let', 'var'],\n next: ['const', 'let', 'var']\n },\n {\n blankLine: 'always',\n prev: '*',\n next: [\n 'for',\n 'if',\n 'return',\n 'throw',\n 'switch',\n 'try',\n 'class',\n 'function'\n ]\n }\n ],\n '@stylistic/comma-dangle': ['error', 'never'],\n '@stylistic/indent': [\n 'error',\n 2,\n {\n offsetTernaryExpressions: true,\n SwitchCase: 1,\n ignoredNodes: [\n 'TSTypeParameterInstantiation',\n 'FunctionExpression > .params > :matches(Decorator, :not(:first-child))'\n ]\n }\n ],\n 'sort-imports': [\n 'error',\n {\n ignoreCase: false,\n ignoreDeclarationSort: true,\n ignoreMemberSort: false,\n memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],\n allowSeparatedGroups: true\n }\n ]\n }\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts',\n '**/*.html'\n ],\n rules: {\n 'max-lines': [\n 'error',\n {\n max: 150,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n 'max-lines-per-function': 'off',\n complexity: ['warn', { max: 3 }],\n 'max-lines': [\n 'error',\n {\n max: 300,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n 'max-classes-per-file': 'off'\n }\n },\n {\n files: ['**/*.state.ts'],\n rules: {\n 'class-methods-use-this': 'off'\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const javascript = defineConfig({\n files: ['**/*.js', '**/*.jsx', '**/*.cjs', '**/*.mjs'],\n extends: [...(configs['flat/javascript'] as Config[])]\n});\n", "import jsonPlugin from '@eslint/json';\nimport { defineConfig } from 'eslint/config';\n\nexport const json = defineConfig([\n {\n plugins: { json: jsonPlugin }\n },\n {\n files: ['**/*.json'],\n language: 'json/json',\n extends: [jsonPlugin.configs.recommended]\n }\n]);\n", "import eslintConfigPrettier from 'eslint-config-prettier';\nimport { defineConfig } from 'eslint/config';\n\nexport const prettier = defineConfig([eslintConfigPrettier]);\n", "import rxjsEslint from '@smarttools/eslint-plugin-rxjs';\nimport { defineConfig } from 'eslint/config';\n\nexport const rxjs = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n extends: [rxjsEslint.configs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n rxjs: rxjsEslint\n }\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'rxjs/prefer-observer': 'error',\n 'rxjs/finnish': 'warn',\n 'rxjs/no-ignored-subscription': 'warn',\n 'rxjs/no-ignored-error': 'warn',\n 'rxjs/no-unsafe-switchmap': 'error',\n 'rxjs/no-unsafe-takeuntil': 'error',\n 'rxjs/no-unsafe-catch': 'error',\n 'rxjs/no-unsafe-first': 'error',\n 'rxjs/no-topromise': 'error',\n 'rxjs/throw-error': 'error',\n 'rxjs/no-async-subscribe': 'off',\n 'rxjs/no-exposed-subjects': 'error', // Enforce subject encapsulation\n 'rxjs/no-cyclic-action': 'error', // Prevent infinite loops in NgRx effects\n 'rxjs/no-subscribe-handlers': 'warn' // Prefer observer objects (complements prefer-observer)\n }\n },\n {\n files: ['**/*.spec.ts', '**/*.test.ts', '**/*.spec.js', '**/*.test.js'],\n rules: {\n 'rxjs/no-ignored-subscription': 'off',\n 'rxjs/no-subscribe-handlers': 'off'\n }\n }\n]);\n", "import storybookEslint from 'eslint-plugin-storybook';\nimport { defineConfig } from 'eslint/config';\n\nexport const storybook = defineConfig([\n {\n ignores: ['!.storybook'],\n files: ['**/*.stories.ts'],\n extends: [storybookEslint.configs['flat/recommended']],\n rules: {\n 'storybook/csf-component': 'warn', // Ensure component property is set\n 'storybook/no-stories-of': 'error' // Prevent deprecated storiesOf API\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';\nimport importPluginX from 'eslint-plugin-import-x';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nimport explicitAccessibilityRule from './rules/explicit-accessibility.js';\n\nconst localTypescriptRules: Record<string, unknown> = {\n rules: {\n 'explicit-accessibility': explicitAccessibilityRule\n }\n};\n\nexport const typescript = defineConfig([\n // NOTE: Checks for 'prettier' and 'eslint-plugin-prettier'\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n extends: [\n importPluginX.flatConfigs.typescript,\n ...(configs['flat/typescript'] as Config[])\n ]\n },\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n plugins: { local: localTypescriptRules },\n rules: {\n 'local/explicit-accessibility': 'error',\n '@typescript-eslint/explicit-member-accessibility': 'error',\n '@typescript-eslint/explicit-function-return-type': 'error',\n '@typescript-eslint/no-empty-function': 'error',\n '@typescript-eslint/no-unused-vars': 'error',\n '@typescript-eslint/no-use-before-define': 'error',\n\n // A. Eliminating `any` (already covered by strict-type-checked, but explicit for clarity)\n '@typescript-eslint/no-explicit-any': 'error',\n '@typescript-eslint/no-unsafe-assignment': 'error',\n '@typescript-eslint/no-unsafe-call': 'error',\n '@typescript-eslint/no-unsafe-member-access': 'error',\n '@typescript-eslint/no-unsafe-return': 'error',\n '@typescript-eslint/no-unsafe-argument': 'error',\n\n // New v8 type-safety rules (replacements for deprecated ban-types)\n '@typescript-eslint/no-empty-object-type': 'error', // Bans confusing {} type\n '@typescript-eslint/no-unsafe-function-type': 'error', // Bans Function type\n '@typescript-eslint/no-wrapper-object-types': 'error', // Bans Number, String, Boolean wrappers\n\n // B. Explicit Annotations (partially covered, explicit module boundaries is key)\n '@typescript-eslint/explicit-module-boundary-types': 'error',\n // Consider enabling if maximum explicitness is desired, even if verbose:\n\n // C. Null/Undefined Safety (Requires strictNullChecks)\n '@typescript-eslint/no-non-null-assertion': 'error',\n '@typescript-eslint/prefer-nullish-coalescing': 'error',\n '@typescript-eslint/prefer-optional-chain': 'error',\n\n // D. Promise Handling (Supplementing plugin:promise/recommended)\n '@typescript-eslint/no-floating-promises': [\n 'error',\n { ignoreVoid: true }\n ],\n '@typescript-eslint/no-misused-promises': 'warn', // Already in recommended-type-checked\n '@typescript-eslint/promise-function-async': 'error',\n '@typescript-eslint/await-thenable': 'error', // Already in recommended-type-checked\n\n // E. Best Practices & Potential Errors (Some covered by presets, fine-tuning here)\n '@typescript-eslint/no-inferrable-types': 'warn', // Keep as warn or disable if inference is preferred\n '@typescript-eslint/no-require-imports': 'error', // Use ES modules (replaces deprecated no-var-requires)\n '@typescript-eslint/only-throw-error': 'error', // Replaces deprecated no-throw-literal\n '@typescript-eslint/no-array-delete': 'error', // Prevents delete arr[0]\n '@typescript-eslint/return-await': ['error', 'in-try-catch'], // Better stack traces in try/catch\n '@typescript-eslint/require-await': 'error',\n '@typescript-eslint/restrict-template-expressions': [\n 'error',\n { allowNumber: true, allowBoolean: true }\n ], // Allow numbers/booleans in templates\n '@typescript-eslint/restrict-plus-operands': 'error', // Enforce consistent types for '+'\n '@typescript-eslint/prefer-as-const': 'error',\n '@typescript-eslint/no-shadow': 'error',\n '@typescript-eslint/switch-exhaustiveness-check': 'error', // Ensure switch on unions is exhaustive\n '@typescript-eslint/no-unused-expressions': [\n 'error',\n { allowShortCircuit: true, allowTernary: true }\n ],\n '@typescript-eslint/no-useless-constructor': 'error',\n '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], // Prefer dot notation where possible\n\n // Strict type-checked rules\n '@typescript-eslint/no-unnecessary-condition': 'error', // Catches always-true/false conditions\n '@typescript-eslint/no-confusing-void-expression': [\n 'error',\n { ignoreArrowShorthand: true, ignoreVoidOperator: true }\n ], // Prevent confusing void usage\n '@typescript-eslint/no-dynamic-delete': 'error', // Use Map instead of delete obj[key]\n '@typescript-eslint/no-extraneous-class': [\n 'error',\n { allowWithDecorator: true }\n ], // Allow Angular classes\n '@typescript-eslint/no-invalid-void-type': 'error', // Restrict void to return types\n '@typescript-eslint/unified-signatures': 'error', // Merge overloads where possible\n '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error', // Forbids foo! ?? bar\n\n // Stylistic type-checked rules\n '@typescript-eslint/prefer-find': 'error', // Use find() instead of filter()[0]\n '@typescript-eslint/prefer-for-of': 'error', // Modern iteration\n '@typescript-eslint/prefer-includes': 'error', // indexOf() \u2192 includes()\n '@typescript-eslint/prefer-string-starts-ends-with': 'error', // Modern string methods\n '@typescript-eslint/prefer-regexp-exec': 'error', // Better regex performance\n\n // F. Consistency & Style (Some covered by stylistic-type-checked)\n '@typescript-eslint/consistent-type-assertions': [\n 'error',\n { assertionStyle: 'as', objectLiteralTypeAssertions: 'never' }\n ],\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\n '@typescript-eslint/consistent-type-imports': [\n 'error',\n { prefer: 'type-imports', fixStyle: 'separate-type-imports' }\n ],\n '@typescript-eslint/naming-convention': [\n 'error',\n {\n selector: 'objectLiteralProperty',\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'objectLiteralProperty',\n format: ['camelCase', 'snake_case', 'PascalCase']\n },\n {\n selector: 'parameter',\n format: ['camelCase'],\n leadingUnderscore: 'allow'\n },\n { selector: 'default', format: ['camelCase'] },\n { selector: 'variable', format: ['camelCase', 'UPPER_CASE'] },\n { selector: 'function', format: ['camelCase'] },\n { selector: 'typeLike', format: ['PascalCase'] },\n {\n selector: 'property',\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'property',\n format: ['camelCase', 'PascalCase', 'snake_case']\n }\n ],\n 'import-x/order': [\n 'error',\n {\n groups: [\n 'builtin',\n 'external',\n 'internal',\n ['parent', 'sibling'],\n 'index',\n 'unknown'\n ],\n pathGroups: [\n {\n pattern: '@angular/**',\n group: 'builtin',\n position: 'before'\n },\n {\n pattern: '@nestjs/**',\n group: 'builtin',\n position: 'before'\n },\n {\n pattern: '@shared/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@backend/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@frontend/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@*/shared/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@*/frontend/**',\n group: 'internal',\n position: 'after'\n },\n {\n pattern: '@*/backend/**',\n group: 'internal',\n position: 'after'\n }\n ],\n pathGroupsExcludedImportTypes: ['builtin'],\n 'newlines-between': 'always',\n alphabetize: { order: 'asc', caseInsensitive: true }\n }\n ],\n 'import-x/no-unresolved': 'error',\n 'import-x/no-duplicates': 'error',\n 'import-x/prefer-default-export': 'off',\n 'import-x/no-useless-path-segments': ['error', { noUselessIndex: true }],\n 'import-x/newline-after-import': 'error',\n 'import-x/first': 'error',\n 'import-x/no-mutable-exports': 'error',\n 'import-x/no-self-import': 'error', // Prevents modules importing themselves\n 'import-x/no-cycle': ['error', { maxDepth: 2, ignoreExternal: true }], // Prevents circular dependencies\n 'import-x/consistent-type-specifier-style': ['error', 'prefer-top-level'], // Consistent type imports\n 'import-x/no-anonymous-default-export': 'error' // Improve code searchability\n },\n settings: {\n 'import-x/resolver-next': [\n createTypeScriptImportResolver({\n alwaysTryTypes: true\n })\n ]\n }\n },\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n rules: {\n '@typescript-eslint/prefer-readonly': 'error'\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n '@typescript-eslint/no-namespace': 'off',\n '@typescript-eslint/no-extraneous-class': 'off'\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n '@typescript-eslint/no-empty-function': 'off',\n '@typescript-eslint/no-unbound-method': 'off',\n '@typescript-eslint/consistent-type-assertions': 'off'\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n '@typescript-eslint/consistent-type-assertions': 'off',\n '@typescript-eslint/naming-convention': 'off'\n }\n }\n]);\n", "import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';\n\nconst createRule = ESLintUtils.RuleCreator(\n () => 'https://eslint.org/docs/latest/rules/no-unused-private-class-members'\n);\n\ntype AccessibilityLevel = 'public' | 'private' | 'protected';\n\ntype Options = [\n {\n defaultAccessibility?: AccessibilityLevel;\n }\n];\n\nconst defaultOptions: Options[0] = {\n defaultAccessibility: 'private'\n};\n\nconst getNodeName = (\n node: TSESTree.Node | TSESTree.Token | null | undefined\n): string => {\n if (!node) {\n return '<unknown>';\n }\n\n /*\n * MethodDefinition or PropertyDefinition (check 'key' first)\n * Note: Check 'key' before 'kind' because MethodDefinition has both\n */\n if ('key' in node && node.key) {\n if (node.key.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return node.key.name;\n }\n // Handle computed property names, private identifiers (#name), etc. if needed\n if (node.key.type === TSESTree.AST_NODE_TYPES.PrivateIdentifier) {\n return `#${node.key.name}`;\n }\n return '<computed/complex key>';\n }\n\n // Constructor specific check (if key check didn't catch it - unlikely for MethodDefinition)\n if ('kind' in node && node.kind === 'constructor') {\n return 'constructor';\n }\n\n // TSParameterProperty - handle its 'parameter' property\n if (node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty) {\n const param = node.parameter; // Assign to variable for clarity & potentially better inference\n\n // Handle different parameter kinds:\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return param.name;\n }\n if (param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern) {\n // Check the left side of the assignment\n if (param.left.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return param.left.name; // Name is on the identifier being assigned to\n }\n /*\n * Parameter is an assignment pattern with destructuring (ArrayPattern/ObjectPattern)\n * You might want more sophisticated logic here to extract a name\n */\n return '<destructured parameter>';\n }\n return '<complex parameter>';\n }\n\n return '<unknown>';\n};\n\nexport default createRule<Options, 'missingAccessibility'>({\n name: 'explicit-accessibility',\n meta: {\n type: 'suggestion',\n docs: {\n description: 'Require explicit accessibility modifiers on class members'\n },\n fixable: 'code',\n schema: [\n {\n type: 'object',\n properties: {\n defaultAccessibility: {\n type: 'string',\n enum: ['public', 'private', 'protected'],\n description: 'The accessibility modifier to add if one is missing.'\n }\n },\n additionalProperties: false\n }\n ],\n messages: {\n missingAccessibility:\n \"Class member '{{ name }}' is missing an explicit accessibility modifier (public/private/protected).\"\n }\n },\n defaultOptions: [defaultOptions],\n\n create(context, [options]) {\n const { defaultAccessibility } = { ...defaultOptions, ...options };\n const sourceCode = context.sourceCode;\n\n function checkNode(\n node:\n | TSESTree.MethodDefinition\n | TSESTree.PropertyDefinition\n | TSESTree.TSParameterProperty\n ): void {\n if (node.accessibility) {\n return; // Already has modifier\n }\n\n let reportNode: TSESTree.Node | TSESTree.Token = node;\n const name = getNodeName(node);\n // Adjust report node for better highlighting\n if (\n node.type === TSESTree.AST_NODE_TYPES.MethodDefinition ||\n node.type === TSESTree.AST_NODE_TYPES.PropertyDefinition\n ) {\n reportNode = node.key;\n } else {\n const param = node.parameter;\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\n reportNode = param;\n } else if (\n param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern &&\n param.left.type === TSESTree.AST_NODE_TYPES.Identifier\n ) {\n reportNode = param.left;\n }\n // Keep reportNode as the TSParameterProperty node itself if param isn't simple identifier\n }\n\n context.report({\n node: reportNode ?? node,\n messageId: 'missingAccessibility',\n data: { name },\n fix(fixer) {\n let insertText = `${defaultAccessibility} `;\n\n let tokenToInsertBefore: TSESTree.Token | null;\n if (node.decorators.length > 0) {\n const lastDecorator = node.decorators[node.decorators.length - 1];\n tokenToInsertBefore = sourceCode.getTokenAfter(lastDecorator);\n } else {\n tokenToInsertBefore = sourceCode.getFirstToken(node);\n }\n\n // Parameter properties need special handling if they also have 'readonly'\n if (\n node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty &&\n node.readonly\n ) {\n // If readonly exists without accessibility, insert accessibility *before* readonly\n const firstToken = sourceCode.getFirstToken(node);\n if (firstToken?.value === 'readonly') {\n // double check it's the readonly token\n tokenToInsertBefore = firstToken;\n }\n // If insertion point wasn't decorators, use first token (which should be readonly)\n }\n\n if (!tokenToInsertBefore) return null;\n\n /*\n * If the token immediately after the insertion point isn't whitespace, add a space.\n * (Handles case where tokenToInsertBefore is the last decorator token)\n */\n const tokenAfterInsertion = sourceCode.getTokenAfter(\n tokenToInsertBefore,\n { includeComments: false }\n );\n const textBetween = sourceCode.text.slice(\n tokenToInsertBefore.range[1],\n tokenAfterInsertion?.range[0]\n );\n if (!/^\\s/.test(textBetween)) {\n insertText = ` ${insertText}`; // Add leading space if needed after decorator\n }\n\n return fixer.insertTextBefore(tokenToInsertBefore, insertText);\n }\n });\n }\n\n return {\n MethodDefinition(node: TSESTree.MethodDefinition): void {\n checkNode(node);\n },\n\n PropertyDefinition(node: TSESTree.PropertyDefinition): void {\n checkNode(node);\n },\n\n TSParameterProperty(node: TSESTree.TSParameterProperty): void {\n checkNode(node);\n }\n };\n }\n});\n", "import vitestEslint from '@vitest/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\n\nconst vitestPlugin: Record<string, object> = {\n vitest: vitestEslint\n};\n\nexport const vitest = defineConfig([\n {\n files: ['**/*.spec.ts', '**/*.spec.js', '**/*.test.ts', '**/*.test.js'],\n plugins: vitestPlugin,\n rules: {\n ...vitestEslint.configs.recommended.rules,\n 'vitest/max-nested-describe': ['error', { max: 3 }],\n // Matcher improvements\n 'vitest/prefer-to-be': 'error',\n 'vitest/prefer-to-contain': 'error',\n 'vitest/prefer-to-have-length': 'error',\n 'vitest/prefer-comparison-matcher': 'error',\n 'vitest/prefer-strict-equal': 'warn',\n // Test quality\n 'vitest/prefer-spy-on': 'error',\n 'vitest/prefer-hooks-on-top': 'error',\n 'vitest/prefer-each': 'warn',\n 'vitest/no-test-return-statement': 'error',\n 'vitest/prefer-mock-promise-shorthand': 'error'\n }\n }\n]);\n", "import playwrightEslint from 'eslint-plugin-playwright';\nimport { defineConfig } from 'eslint/config';\n\nexport const playwright = defineConfig([\n {\n ...playwrightEslint.configs['flat/recommended'],\n files: ['**/*.e2e.ts', '**/*.e2e.js'],\n rules: {\n ...playwrightEslint.configs['flat/recommended'].rules,\n // Locator best practices\n 'playwright/prefer-locator': 'error',\n 'playwright/prefer-native-locators': 'error',\n 'playwright/no-nth-methods': 'warn',\n // Matcher improvements\n 'playwright/prefer-to-be': 'error',\n 'playwright/prefer-to-have-count': 'error',\n 'playwright/prefer-to-have-length': 'error',\n 'playwright/prefer-comparison-matcher': 'error',\n // Test structure\n 'playwright/prefer-hooks-on-top': 'error',\n 'playwright/require-top-level-describe': 'warn'\n }\n }\n]);\n", "import boundariesPlugin from 'eslint-plugin-boundaries';\nimport { defineConfig } from 'eslint/config';\n\nexport const boundaries = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n boundaries: boundariesPlugin\n },\n settings: {\n 'boundaries/elements': [\n {\n type: 'feature',\n pattern: '**/feature/**'\n },\n {\n type: 'data-access',\n pattern: '**/data-access/**'\n },\n {\n type: 'domain-logic',\n pattern: '**/domain-logic/**'\n },\n {\n type: 'ui',\n pattern: '**/ui/**'\n },\n {\n type: 'common',\n pattern: '**/common/**'\n },\n {\n type: 'utils',\n pattern: '**/utils/**'\n }\n ],\n 'import/resolver': {\n typescript: {\n alwaysTryTypes: true\n }\n }\n },\n rules: {\n ...boundariesPlugin.configs.recommended.rules,\n 'boundaries/dependencies': [\n 'error',\n {\n default: 'disallow',\n message:\n '{{to.element.types}} is not allowed to be imported in {{from.element.types}}',\n policies: [\n {\n from: { element: { type: 'feature' } },\n allow: [\n { to: { element: { type: 'feature' } } },\n { to: { element: { type: 'ui' } } },\n { to: { element: { type: 'domain-logic' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'domain-logic' } },\n allow: [\n { to: { element: { type: 'domain-logic' } } },\n { to: { element: { type: 'data-access' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'data-access' } },\n allow: [\n { to: { element: { type: 'data-access' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'ui' } },\n allow: [\n { to: { element: { type: 'ui' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'utils' } },\n allow: [\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'common' } },\n allow: [{ to: { element: { type: 'common' } } }]\n }\n ]\n }\n ]\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n 'boundaries/dependencies': 'off'\n }\n }\n]);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_angular_eslint", "import_config", "globals", "import_eslint_plugin", "import_config", "importPluginX", "stylistic", "import_eslint_plugin", "import_config", "import_config", "jsonPlugin", "import_config", "eslintConfigPrettier", "import_config", "rxjsEslint", "import_config", "storybookEslint", "import_eslint_plugin", "import_eslint_plugin_import_x", "import_config", "importPluginX", "import_eslint_plugin", "import_config", "vitestEslint", "import_config", "playwrightEslint", "import_config", "boundariesPlugin"]
|
|
7
7
|
}
|
package/eslint.js
CHANGED
|
@@ -93,6 +93,7 @@ var angular = defineConfig2([
|
|
|
93
93
|
processor: processInlineTemplates,
|
|
94
94
|
rules: {
|
|
95
95
|
"@angular-eslint/prefer-on-push-component-change-detection": "error",
|
|
96
|
+
// v22: flags only explicit opt-out of OnPush (omission now means OnPush)
|
|
96
97
|
"@angular-eslint/prefer-signals": "error",
|
|
97
98
|
"@angular-eslint/use-injectable-provided-in": "error",
|
|
98
99
|
"@angular-eslint/prefer-signal-model": "error",
|
|
@@ -110,8 +111,6 @@ var angular = defineConfig2([
|
|
|
110
111
|
// Consistent lifecycle method ordering
|
|
111
112
|
"@angular-eslint/computed-must-return": "error",
|
|
112
113
|
// Catch silent computed() bugs missing a return
|
|
113
|
-
"@angular-eslint/no-conflicting-lifecycle": "error",
|
|
114
|
-
// Block incompatible hook combinations (OnChanges + DoCheck)
|
|
115
114
|
"@angular-eslint/no-duplicates-in-metadata-arrays": "error",
|
|
116
115
|
// Catch duplicate imports/providers in @Component/@NgModule
|
|
117
116
|
"@angular-eslint/no-lifecycle-call": "error",
|
|
@@ -1000,53 +999,53 @@ var boundaries = defineConfig12([
|
|
|
1000
999
|
"error",
|
|
1001
1000
|
{
|
|
1002
1001
|
default: "disallow",
|
|
1003
|
-
message: "
|
|
1004
|
-
|
|
1002
|
+
message: "{{to.element.types}} is not allowed to be imported in {{from.element.types}}",
|
|
1003
|
+
policies: [
|
|
1005
1004
|
{
|
|
1006
|
-
from: { type: "feature" },
|
|
1005
|
+
from: { element: { type: "feature" } },
|
|
1007
1006
|
allow: [
|
|
1008
|
-
{ to: { type: "feature" } },
|
|
1009
|
-
{ to: { type: "ui" } },
|
|
1010
|
-
{ to: { type: "domain-logic" } },
|
|
1011
|
-
{ to: { type: "utils" } },
|
|
1012
|
-
{ to: { type: "common" } }
|
|
1007
|
+
{ to: { element: { type: "feature" } } },
|
|
1008
|
+
{ to: { element: { type: "ui" } } },
|
|
1009
|
+
{ to: { element: { type: "domain-logic" } } },
|
|
1010
|
+
{ to: { element: { type: "utils" } } },
|
|
1011
|
+
{ to: { element: { type: "common" } } }
|
|
1013
1012
|
]
|
|
1014
1013
|
},
|
|
1015
1014
|
{
|
|
1016
|
-
from: { type: "domain-logic" },
|
|
1015
|
+
from: { element: { type: "domain-logic" } },
|
|
1017
1016
|
allow: [
|
|
1018
|
-
{ to: { type: "domain-logic" } },
|
|
1019
|
-
{ to: { type: "data-access" } },
|
|
1020
|
-
{ to: { type: "utils" } },
|
|
1021
|
-
{ to: { type: "common" } }
|
|
1017
|
+
{ to: { element: { type: "domain-logic" } } },
|
|
1018
|
+
{ to: { element: { type: "data-access" } } },
|
|
1019
|
+
{ to: { element: { type: "utils" } } },
|
|
1020
|
+
{ to: { element: { type: "common" } } }
|
|
1022
1021
|
]
|
|
1023
1022
|
},
|
|
1024
1023
|
{
|
|
1025
|
-
from: { type: "data-access" },
|
|
1024
|
+
from: { element: { type: "data-access" } },
|
|
1026
1025
|
allow: [
|
|
1027
|
-
{ to: { type: "data-access" } },
|
|
1028
|
-
{ to: { type: "utils" } },
|
|
1029
|
-
{ to: { type: "common" } }
|
|
1026
|
+
{ to: { element: { type: "data-access" } } },
|
|
1027
|
+
{ to: { element: { type: "utils" } } },
|
|
1028
|
+
{ to: { element: { type: "common" } } }
|
|
1030
1029
|
]
|
|
1031
1030
|
},
|
|
1032
1031
|
{
|
|
1033
|
-
from: { type: "ui" },
|
|
1032
|
+
from: { element: { type: "ui" } },
|
|
1034
1033
|
allow: [
|
|
1035
|
-
{ to: { type: "ui" } },
|
|
1036
|
-
{ to: { type: "utils" } },
|
|
1037
|
-
{ to: { type: "common" } }
|
|
1034
|
+
{ to: { element: { type: "ui" } } },
|
|
1035
|
+
{ to: { element: { type: "utils" } } },
|
|
1036
|
+
{ to: { element: { type: "common" } } }
|
|
1038
1037
|
]
|
|
1039
1038
|
},
|
|
1040
1039
|
{
|
|
1041
|
-
from: { type: "utils" },
|
|
1040
|
+
from: { element: { type: "utils" } },
|
|
1042
1041
|
allow: [
|
|
1043
|
-
{ to: { type: "utils" } },
|
|
1044
|
-
{ to: { type: "common" } }
|
|
1042
|
+
{ to: { element: { type: "utils" } } },
|
|
1043
|
+
{ to: { element: { type: "common" } } }
|
|
1045
1044
|
]
|
|
1046
1045
|
},
|
|
1047
1046
|
{
|
|
1048
|
-
from: { type: "common" },
|
|
1049
|
-
allow: [{ to: { type: "common" } }]
|
|
1047
|
+
from: { element: { type: "common" } },
|
|
1048
|
+
allow: [{ to: { element: { type: "common" } } }]
|
|
1050
1049
|
}
|
|
1051
1050
|
]
|
|
1052
1051
|
}
|
package/eslint.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../packages/lint-suite/src/lib/angular-template.ts", "../../../../packages/lint-suite/src/lib/angular.ts", "../../../../packages/lint-suite/src/lib/base.ts", "../../../../packages/lint-suite/src/lib/javascript.ts", "../../../../packages/lint-suite/src/lib/json.ts", "../../../../packages/lint-suite/src/lib/prettier.ts", "../../../../packages/lint-suite/src/lib/rxjs.ts", "../../../../packages/lint-suite/src/lib/storybook.ts", "../../../../packages/lint-suite/src/lib/typescript.ts", "../../../../packages/lint-suite/src/lib/rules/explicit-accessibility.ts", "../../../../packages/lint-suite/src/lib/vitest.ts", "../../../../packages/lint-suite/src/lib/playwright.ts", "../../../../packages/lint-suite/src/lib/boundaries.ts", "../../../../packages/lint-suite/src/eslint.ts"],
|
|
4
|
-
"sourcesContent": ["import { configs } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const angularTemplate = defineConfig([\n {\n files: ['**/*.html'],\n extends: [\n ...(configs.templateAccessibility as Config[]),\n ...(configs.templateRecommended as Config[])\n ],\n rules: {\n '@angular-eslint/template/prefer-template-literal': 'error',\n '@angular-eslint/template/no-any': 'error',\n '@angular-eslint/template/no-duplicate-attributes': 'error',\n '@angular-eslint/template/button-has-type': 'error',\n '@angular-eslint/template/no-positive-tabindex': 'error',\n '@angular-eslint/template/valid-aria': 'error',\n '@angular-eslint/template/alt-text': 'error',\n '@angular-eslint/template/elements-content': 'error',\n '@angular-eslint/template/click-events-have-key-events': 'error',\n '@angular-eslint/template/mouse-events-have-key-events': 'error',\n '@angular-eslint/template/table-scope': 'error',\n '@angular-eslint/template/no-autofocus': 'error',\n '@angular-eslint/template/no-distracting-elements': 'error',\n '@angular-eslint/template/prefer-control-flow': 'error',\n '@angular-eslint/template/prefer-self-closing-tags': 'error',\n '@angular-eslint/template/prefer-ngsrc': 'error',\n '@angular-eslint/template/prefer-built-in-pipes': 'error',\n '@angular-eslint/template/no-interpolation-in-attributes': 'error',\n '@angular-eslint/template/no-nested-tags': 'error',\n '@angular-eslint/template/use-track-by-function': 'error',\n '@angular-eslint/template/label-has-associated-control': 'error',\n '@angular-eslint/template/prefer-at-else': 'error', // v21: @if/@else syntax\n '@angular-eslint/template/prefer-at-empty': 'error', // v21: @for/@empty syntax\n '@angular-eslint/template/prefer-contextual-for-variables': 'error', // v21: Use $index, $first, etc.\n '@angular-eslint/template/no-empty-control-flow': 'error', // v21: Catch incomplete refactoring\n '@angular-eslint/template/prefer-class-binding': 'error', // v21.2.0: Prefer [class] over ngClass\n '@angular-eslint/template/prefer-static-string-properties': 'error', // Reduce change detection\n '@angular-eslint/template/no-non-null-assertion': 'error', // Forbid `!` assertions in templates\n '@angular-eslint/template/no-inline-styles': 'error', // Forbid inline style=\"...\" attributes\n '@angular-eslint/template/conditional-complexity': [\n 'warn',\n { maxComplexity: 5 }\n ], // Template readability\n '@angular-eslint/template/attributes-order': [\n 'error',\n {\n alphabetical: true,\n order: [\n 'STRUCTURAL_DIRECTIVE', // e.g. `*ngIf=\"true\"`, `*ngFor=\"let item of items\"`\n 'TEMPLATE_REFERENCE', // e.g. `<input #inputRef>`\n 'INPUT_BINDING', // e.g. `[id]=\"3\"`, `[attr.colspan]=\"colspan\"`, [style.width.%]=\"100\", [@triggerName]=\"expression\", `bind-id=\"handleChange()\"`\n 'TWO_WAY_BINDING', // e.g. `[(id)]=\"id\"`, `bindon-id=\"id\"\n 'ATTRIBUTE_BINDING', // e.g. `<input required>`, `id=\"3\"`\n 'OUTPUT_BINDING' // e.g. `(idChange)=\"handleChange()\"`, `on-id=\"handleChange()\"`\n ]\n }\n ]\n }\n }\n]);\n", "import globals from 'globals';\nimport { configs, processInlineTemplates } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const angular = defineConfig([\n {\n files: ['**/*.ts'],\n extends: [...(configs.tsRecommended as Config[])],\n languageOptions: {\n globals: {\n ...globals.browser,\n ...globals.es2025,\n ...globals.node\n }\n },\n processor: processInlineTemplates,\n rules: {\n '@angular-eslint/prefer-on-push-component-change-detection': 'error',\n '@angular-eslint/prefer-signals': 'error',\n '@angular-eslint/use-injectable-provided-in': 'error',\n '@angular-eslint/prefer-signal-model': 'error',\n '@angular-eslint/no-uncalled-signals': 'error',\n '@angular-eslint/prefer-host-metadata-property': 'error',\n '@angular-eslint/no-implicit-take-until-destroyed': 'error', // v21.2.0: Enforce explicit DestroyRef\n '@angular-eslint/no-async-lifecycle-method': 'error', // Prevent async lifecycle hooks\n '@angular-eslint/prefer-output-readonly': 'warn', // Prevent accidental reassignment\n '@angular-eslint/prefer-output-emitter-ref': 'warn', // Modern output() function over @Output()\n '@angular-eslint/sort-lifecycle-methods': 'warn', // Consistent lifecycle method ordering\n '@angular-eslint/computed-must-return': 'error', // Catch silent computed() bugs missing a return\n '@angular-eslint/no-conflicting-lifecycle': 'error', // Block incompatible hook combinations (OnChanges + DoCheck)\n '@angular-eslint/no-duplicates-in-metadata-arrays': 'error', // Catch duplicate imports/providers in @Component/@NgModule\n '@angular-eslint/no-lifecycle-call': 'error', // Forbid manual this.ngOnInit() calls\n '@angular-eslint/require-lifecycle-on-prototype': 'error', // Lifecycle hooks must be methods, not arrow-fn fields\n '@angular-eslint/relative-url-prefix': 'error', // Require ./ in templateUrl/styleUrl for portability\n '@angular-eslint/use-component-selector': 'error', // All components must declare a selector\n '@angular-eslint/no-developer-preview': 'warn', // Flag APIs marked @developerPreview (no breaking-change policy)\n '@angular-eslint/no-experimental': 'warn' // Flag APIs marked @experimental\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport stylistic from '@stylistic/eslint-plugin';\nimport importPluginX from 'eslint-plugin-import-x';\nimport { defineConfig } from 'eslint/config';\n\nexport const base = defineConfig([\n { extends: [...configs['flat/base']] },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [importPluginX.flatConfigs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [stylistic.configs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'no-param-reassign': 'error',\n 'no-alert': 'error',\n 'no-console': ['warn', { allow: ['warn', 'error'] }],\n 'no-debugger': 'error',\n eqeqeq: ['error', 'always', { null: 'ignore' }],\n curly: ['error', 'multi'],\n 'prefer-const': ['error', { destructuring: 'all' }],\n 'no-var': 'error',\n 'object-shorthand': 'error',\n 'prefer-arrow-callback': 'error',\n 'no-useless-concat': 'error',\n 'prefer-template': 'error',\n 'no-nested-ternary': 'error',\n 'no-useless-assignment': 'error', // NEW: Catch unused assignments (ESLint v9)\n 'no-object-constructor': 'error', // Disallow new Object() without arguments\n 'no-else-return': ['error', { allowElseIf: false }], // Prefer early returns\n 'no-multi-assign': 'error', // Disallow chaining assignments\n radix: 'error', // Require radix parameter for parseInt()\n yoda: 'error', // Disallow yoda conditions (`if (\"red\" === color)`)\n complexity: ['warn', 10], // Warn if function complexity is high\n 'max-depth': ['warn', 4], // Warn on deeply nested blocks\n 'max-lines-per-function': [\n 'warn',\n { max: 50, skipBlankLines: true, skipComments: true }\n ], // Warn on long functions\n 'max-params': ['warn', 4], // Warn on functions with many parameters\n 'no-lonely-if': 'error', // Disallow if statements as the only statement in an else block\n 'grouped-accessor-pairs': ['error', 'getBeforeSet'], // Enforce consistency for getters/setters\n 'class-methods-use-this': 'error',\n 'no-underscore-dangle': 'error',\n 'max-len': [\n 'error',\n {\n code: 135,\n ignoreComments: true\n }\n ],\n 'spaced-comment': [\n 2,\n 'always',\n {\n block: {\n exceptions: ['*']\n }\n }\n ],\n '@stylistic/padding-line-between-statements': [\n 'error',\n {\n blankLine: 'always',\n prev: 'export',\n next: ['export', 'const']\n },\n {\n blankLine: 'always',\n prev: ['const', 'let', 'var'],\n next: '*'\n },\n {\n blankLine: 'any',\n prev: ['const', 'let', 'var'],\n next: ['const', 'let', 'var']\n },\n {\n blankLine: 'always',\n prev: '*',\n next: [\n 'for',\n 'if',\n 'return',\n 'throw',\n 'switch',\n 'try',\n 'class',\n 'function'\n ]\n }\n ],\n '@stylistic/comma-dangle': ['error', 'never'],\n '@stylistic/indent': [\n 'error',\n 2,\n {\n offsetTernaryExpressions: true,\n SwitchCase: 1,\n ignoredNodes: [\n 'TSTypeParameterInstantiation',\n 'FunctionExpression > .params > :matches(Decorator, :not(:first-child))'\n ]\n }\n ],\n 'sort-imports': [\n 'error',\n {\n ignoreCase: false,\n ignoreDeclarationSort: true,\n ignoreMemberSort: false,\n memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],\n allowSeparatedGroups: true\n }\n ]\n }\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts',\n '**/*.html'\n ],\n rules: {\n 'max-lines': [\n 'error',\n {\n max: 150,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n 'max-lines-per-function': 'off',\n complexity: ['warn', { max: 3 }],\n 'max-lines': [\n 'error',\n {\n max: 300,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n 'max-classes-per-file': 'off'\n }\n },\n {\n files: ['**/*.state.ts'],\n rules: {\n 'class-methods-use-this': 'off'\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const javascript = defineConfig({\n files: ['**/*.js', '**/*.jsx', '**/*.cjs', '**/*.mjs'],\n extends: [...(configs['flat/javascript'] as Config[])]\n});\n", "import jsonPlugin from '@eslint/json';\nimport { defineConfig } from 'eslint/config';\n\nexport const json = defineConfig([\n {\n plugins: { json: jsonPlugin }\n },\n {\n files: ['**/*.json'],\n language: 'json/json',\n extends: [jsonPlugin.configs.recommended]\n }\n]);\n", "import eslintConfigPrettier from 'eslint-config-prettier';\nimport { defineConfig } from 'eslint/config';\n\nexport const prettier = defineConfig([eslintConfigPrettier]);\n", "import rxjsEslint from '@smarttools/eslint-plugin-rxjs';\nimport { defineConfig } from 'eslint/config';\n\nexport const rxjs = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n extends: [rxjsEslint.configs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n rxjs: rxjsEslint\n }\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'rxjs/prefer-observer': 'error',\n 'rxjs/finnish': 'warn',\n 'rxjs/no-ignored-subscription': 'warn',\n 'rxjs/no-ignored-error': 'warn',\n 'rxjs/no-unsafe-switchmap': 'error',\n 'rxjs/no-unsafe-takeuntil': 'error',\n 'rxjs/no-unsafe-catch': 'error',\n 'rxjs/no-unsafe-first': 'error',\n 'rxjs/no-topromise': 'error',\n 'rxjs/throw-error': 'error',\n 'rxjs/no-async-subscribe': 'off',\n 'rxjs/no-exposed-subjects': 'error', // Enforce subject encapsulation\n 'rxjs/no-cyclic-action': 'error', // Prevent infinite loops in NgRx effects\n 'rxjs/no-subscribe-handlers': 'warn' // Prefer observer objects (complements prefer-observer)\n }\n },\n {\n files: ['**/*.spec.ts', '**/*.test.ts', '**/*.spec.js', '**/*.test.js'],\n rules: {\n 'rxjs/no-ignored-subscription': 'off',\n 'rxjs/no-subscribe-handlers': 'off'\n }\n }\n]);\n", "import storybookEslint from 'eslint-plugin-storybook';\nimport { defineConfig } from 'eslint/config';\n\nexport const storybook = defineConfig([\n {\n ignores: ['!.storybook'],\n files: ['**/*.stories.ts'],\n extends: [storybookEslint.configs['flat/recommended']],\n rules: {\n 'storybook/csf-component': 'warn', // Ensure component property is set\n 'storybook/no-stories-of': 'error' // Prevent deprecated storiesOf API\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';\nimport importPluginX from 'eslint-plugin-import-x';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nimport explicitAccessibilityRule from './rules/explicit-accessibility.js';\n\nconst localTypescriptRules: Record<string, unknown> = {\n rules: {\n 'explicit-accessibility': explicitAccessibilityRule\n }\n};\n\nexport const typescript = defineConfig([\n // NOTE: Checks for 'prettier' and 'eslint-plugin-prettier'\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n extends: [\n importPluginX.flatConfigs.typescript,\n ...(configs['flat/typescript'] as Config[])\n ]\n },\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n plugins: { local: localTypescriptRules },\n rules: {\n 'local/explicit-accessibility': 'error',\n '@typescript-eslint/explicit-member-accessibility': 'error',\n '@typescript-eslint/explicit-function-return-type': 'error',\n '@typescript-eslint/no-empty-function': 'error',\n '@typescript-eslint/no-unused-vars': 'error',\n '@typescript-eslint/no-use-before-define': 'error',\n\n // A. Eliminating `any` (already covered by strict-type-checked, but explicit for clarity)\n '@typescript-eslint/no-explicit-any': 'error',\n '@typescript-eslint/no-unsafe-assignment': 'error',\n '@typescript-eslint/no-unsafe-call': 'error',\n '@typescript-eslint/no-unsafe-member-access': 'error',\n '@typescript-eslint/no-unsafe-return': 'error',\n '@typescript-eslint/no-unsafe-argument': 'error',\n\n // New v8 type-safety rules (replacements for deprecated ban-types)\n '@typescript-eslint/no-empty-object-type': 'error', // Bans confusing {} type\n '@typescript-eslint/no-unsafe-function-type': 'error', // Bans Function type\n '@typescript-eslint/no-wrapper-object-types': 'error', // Bans Number, String, Boolean wrappers\n\n // B. Explicit Annotations (partially covered, explicit module boundaries is key)\n '@typescript-eslint/explicit-module-boundary-types': 'error',\n // Consider enabling if maximum explicitness is desired, even if verbose:\n\n // C. Null/Undefined Safety (Requires strictNullChecks)\n '@typescript-eslint/no-non-null-assertion': 'error',\n '@typescript-eslint/prefer-nullish-coalescing': 'error',\n '@typescript-eslint/prefer-optional-chain': 'error',\n\n // D. Promise Handling (Supplementing plugin:promise/recommended)\n '@typescript-eslint/no-floating-promises': [\n 'error',\n { ignoreVoid: true }\n ],\n '@typescript-eslint/no-misused-promises': 'warn', // Already in recommended-type-checked\n '@typescript-eslint/promise-function-async': 'error',\n '@typescript-eslint/await-thenable': 'error', // Already in recommended-type-checked\n\n // E. Best Practices & Potential Errors (Some covered by presets, fine-tuning here)\n '@typescript-eslint/no-inferrable-types': 'warn', // Keep as warn or disable if inference is preferred\n '@typescript-eslint/no-require-imports': 'error', // Use ES modules (replaces deprecated no-var-requires)\n '@typescript-eslint/only-throw-error': 'error', // Replaces deprecated no-throw-literal\n '@typescript-eslint/no-array-delete': 'error', // Prevents delete arr[0]\n '@typescript-eslint/return-await': ['error', 'in-try-catch'], // Better stack traces in try/catch\n '@typescript-eslint/require-await': 'error',\n '@typescript-eslint/restrict-template-expressions': [\n 'error',\n { allowNumber: true, allowBoolean: true }\n ], // Allow numbers/booleans in templates\n '@typescript-eslint/restrict-plus-operands': 'error', // Enforce consistent types for '+'\n '@typescript-eslint/prefer-as-const': 'error',\n '@typescript-eslint/no-shadow': 'error',\n '@typescript-eslint/switch-exhaustiveness-check': 'error', // Ensure switch on unions is exhaustive\n '@typescript-eslint/no-unused-expressions': [\n 'error',\n { allowShortCircuit: true, allowTernary: true }\n ],\n '@typescript-eslint/no-useless-constructor': 'error',\n '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], // Prefer dot notation where possible\n\n // Strict type-checked rules\n '@typescript-eslint/no-unnecessary-condition': 'error', // Catches always-true/false conditions\n '@typescript-eslint/no-confusing-void-expression': [\n 'error',\n { ignoreArrowShorthand: true, ignoreVoidOperator: true }\n ], // Prevent confusing void usage\n '@typescript-eslint/no-dynamic-delete': 'error', // Use Map instead of delete obj[key]\n '@typescript-eslint/no-extraneous-class': [\n 'error',\n { allowWithDecorator: true }\n ], // Allow Angular classes\n '@typescript-eslint/no-invalid-void-type': 'error', // Restrict void to return types\n '@typescript-eslint/unified-signatures': 'error', // Merge overloads where possible\n '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error', // Forbids foo! ?? bar\n\n // Stylistic type-checked rules\n '@typescript-eslint/prefer-find': 'error', // Use find() instead of filter()[0]\n '@typescript-eslint/prefer-for-of': 'error', // Modern iteration\n '@typescript-eslint/prefer-includes': 'error', // indexOf() \u2192 includes()\n '@typescript-eslint/prefer-string-starts-ends-with': 'error', // Modern string methods\n '@typescript-eslint/prefer-regexp-exec': 'error', // Better regex performance\n\n // F. Consistency & Style (Some covered by stylistic-type-checked)\n '@typescript-eslint/consistent-type-assertions': [\n 'error',\n { assertionStyle: 'as', objectLiteralTypeAssertions: 'never' }\n ],\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\n '@typescript-eslint/consistent-type-imports': [\n 'error',\n { prefer: 'type-imports', fixStyle: 'separate-type-imports' }\n ],\n '@typescript-eslint/naming-convention': [\n 'error',\n {\n selector: 'objectLiteralProperty',\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'objectLiteralProperty',\n format: ['camelCase', 'snake_case', 'PascalCase']\n },\n {\n selector: 'parameter',\n format: ['camelCase'],\n leadingUnderscore: 'allow'\n },\n { selector: 'default', format: ['camelCase'] },\n { selector: 'variable', format: ['camelCase', 'UPPER_CASE'] },\n { selector: 'function', format: ['camelCase'] },\n { selector: 'typeLike', format: ['PascalCase'] },\n {\n selector: 'property',\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'property',\n format: ['camelCase', 'PascalCase', 'snake_case']\n }\n ],\n 'import-x/order': [\n 'error',\n {\n groups: [\n 'builtin',\n 'external',\n 'internal',\n ['parent', 'sibling'],\n 'index',\n 'unknown'\n ],\n pathGroups: [\n {\n pattern: '@angular/**',\n group: 'builtin',\n position: 'before'\n },\n {\n pattern: '@nestjs/**',\n group: 'builtin',\n position: 'before'\n },\n {\n pattern: '@shared/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@backend/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@frontend/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@*/shared/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@*/frontend/**',\n group: 'internal',\n position: 'after'\n },\n {\n pattern: '@*/backend/**',\n group: 'internal',\n position: 'after'\n }\n ],\n pathGroupsExcludedImportTypes: ['builtin'],\n 'newlines-between': 'always',\n alphabetize: { order: 'asc', caseInsensitive: true }\n }\n ],\n 'import-x/no-unresolved': 'error',\n 'import-x/no-duplicates': 'error',\n 'import-x/prefer-default-export': 'off',\n 'import-x/no-useless-path-segments': ['error', { noUselessIndex: true }],\n 'import-x/newline-after-import': 'error',\n 'import-x/first': 'error',\n 'import-x/no-mutable-exports': 'error',\n 'import-x/no-self-import': 'error', // Prevents modules importing themselves\n 'import-x/no-cycle': ['error', { maxDepth: 2, ignoreExternal: true }], // Prevents circular dependencies\n 'import-x/consistent-type-specifier-style': ['error', 'prefer-top-level'], // Consistent type imports\n 'import-x/no-anonymous-default-export': 'error' // Improve code searchability\n },\n settings: {\n 'import-x/resolver-next': [\n createTypeScriptImportResolver({\n alwaysTryTypes: true\n })\n ]\n }\n },\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n rules: {\n '@typescript-eslint/prefer-readonly': 'error'\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n '@typescript-eslint/no-namespace': 'off',\n '@typescript-eslint/no-extraneous-class': 'off'\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n '@typescript-eslint/no-empty-function': 'off',\n '@typescript-eslint/no-unbound-method': 'off',\n '@typescript-eslint/consistent-type-assertions': 'off'\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n '@typescript-eslint/consistent-type-assertions': 'off',\n '@typescript-eslint/naming-convention': 'off'\n }\n }\n]);\n", "import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';\n\nconst createRule = ESLintUtils.RuleCreator(\n () => 'https://eslint.org/docs/latest/rules/no-unused-private-class-members'\n);\n\ntype AccessibilityLevel = 'public' | 'private' | 'protected';\n\ntype Options = [\n {\n defaultAccessibility?: AccessibilityLevel;\n }\n];\n\nconst defaultOptions: Options[0] = {\n defaultAccessibility: 'private'\n};\n\nconst getNodeName = (\n node: TSESTree.Node | TSESTree.Token | null | undefined\n): string => {\n if (!node) {\n return '<unknown>';\n }\n\n /*\n * MethodDefinition or PropertyDefinition (check 'key' first)\n * Note: Check 'key' before 'kind' because MethodDefinition has both\n */\n if ('key' in node && node.key) {\n if (node.key.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return node.key.name;\n }\n // Handle computed property names, private identifiers (#name), etc. if needed\n if (node.key.type === TSESTree.AST_NODE_TYPES.PrivateIdentifier) {\n return `#${node.key.name}`;\n }\n return '<computed/complex key>';\n }\n\n // Constructor specific check (if key check didn't catch it - unlikely for MethodDefinition)\n if ('kind' in node && node.kind === 'constructor') {\n return 'constructor';\n }\n\n // TSParameterProperty - handle its 'parameter' property\n if (node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty) {\n const param = node.parameter; // Assign to variable for clarity & potentially better inference\n\n // Handle different parameter kinds:\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return param.name;\n }\n if (param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern) {\n // Check the left side of the assignment\n if (param.left.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return param.left.name; // Name is on the identifier being assigned to\n }\n /*\n * Parameter is an assignment pattern with destructuring (ArrayPattern/ObjectPattern)\n * You might want more sophisticated logic here to extract a name\n */\n return '<destructured parameter>';\n }\n return '<complex parameter>';\n }\n\n return '<unknown>';\n};\n\nexport default createRule<Options, 'missingAccessibility'>({\n name: 'explicit-accessibility',\n meta: {\n type: 'suggestion',\n docs: {\n description: 'Require explicit accessibility modifiers on class members'\n },\n fixable: 'code',\n schema: [\n {\n type: 'object',\n properties: {\n defaultAccessibility: {\n type: 'string',\n enum: ['public', 'private', 'protected'],\n description: 'The accessibility modifier to add if one is missing.'\n }\n },\n additionalProperties: false\n }\n ],\n messages: {\n missingAccessibility:\n \"Class member '{{ name }}' is missing an explicit accessibility modifier (public/private/protected).\"\n }\n },\n defaultOptions: [defaultOptions],\n\n create(context, [options]) {\n const { defaultAccessibility } = { ...defaultOptions, ...options };\n const sourceCode = context.sourceCode;\n\n function checkNode(\n node:\n | TSESTree.MethodDefinition\n | TSESTree.PropertyDefinition\n | TSESTree.TSParameterProperty\n ): void {\n if (node.accessibility) {\n return; // Already has modifier\n }\n\n let reportNode: TSESTree.Node | TSESTree.Token = node;\n const name = getNodeName(node);\n // Adjust report node for better highlighting\n if (\n node.type === TSESTree.AST_NODE_TYPES.MethodDefinition ||\n node.type === TSESTree.AST_NODE_TYPES.PropertyDefinition\n ) {\n reportNode = node.key;\n } else {\n const param = node.parameter;\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\n reportNode = param;\n } else if (\n param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern &&\n param.left.type === TSESTree.AST_NODE_TYPES.Identifier\n ) {\n reportNode = param.left;\n }\n // Keep reportNode as the TSParameterProperty node itself if param isn't simple identifier\n }\n\n context.report({\n node: reportNode ?? node,\n messageId: 'missingAccessibility',\n data: { name },\n fix(fixer) {\n let insertText = `${defaultAccessibility} `;\n\n let tokenToInsertBefore: TSESTree.Token | null;\n if (node.decorators.length > 0) {\n const lastDecorator = node.decorators[node.decorators.length - 1];\n tokenToInsertBefore = sourceCode.getTokenAfter(lastDecorator);\n } else {\n tokenToInsertBefore = sourceCode.getFirstToken(node);\n }\n\n // Parameter properties need special handling if they also have 'readonly'\n if (\n node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty &&\n node.readonly\n ) {\n // If readonly exists without accessibility, insert accessibility *before* readonly\n const firstToken = sourceCode.getFirstToken(node);\n if (firstToken?.value === 'readonly') {\n // double check it's the readonly token\n tokenToInsertBefore = firstToken;\n }\n // If insertion point wasn't decorators, use first token (which should be readonly)\n }\n\n if (!tokenToInsertBefore) return null;\n\n /*\n * If the token immediately after the insertion point isn't whitespace, add a space.\n * (Handles case where tokenToInsertBefore is the last decorator token)\n */\n const tokenAfterInsertion = sourceCode.getTokenAfter(\n tokenToInsertBefore,\n { includeComments: false }\n );\n const textBetween = sourceCode.text.slice(\n tokenToInsertBefore.range[1],\n tokenAfterInsertion?.range[0]\n );\n if (!/^\\s/.test(textBetween)) {\n insertText = ` ${insertText}`; // Add leading space if needed after decorator\n }\n\n return fixer.insertTextBefore(tokenToInsertBefore, insertText);\n }\n });\n }\n\n return {\n MethodDefinition(node: TSESTree.MethodDefinition): void {\n checkNode(node);\n },\n\n PropertyDefinition(node: TSESTree.PropertyDefinition): void {\n checkNode(node);\n },\n\n TSParameterProperty(node: TSESTree.TSParameterProperty): void {\n checkNode(node);\n }\n };\n }\n});\n", "import vitestEslint from '@vitest/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\n\nconst vitestPlugin: Record<string, object> = {\n vitest: vitestEslint\n};\n\nexport const vitest = defineConfig([\n {\n files: ['**/*.spec.ts', '**/*.spec.js', '**/*.test.ts', '**/*.test.js'],\n plugins: vitestPlugin,\n rules: {\n ...vitestEslint.configs.recommended.rules,\n 'vitest/max-nested-describe': ['error', { max: 3 }],\n // Matcher improvements\n 'vitest/prefer-to-be': 'error',\n 'vitest/prefer-to-contain': 'error',\n 'vitest/prefer-to-have-length': 'error',\n 'vitest/prefer-comparison-matcher': 'error',\n 'vitest/prefer-strict-equal': 'warn',\n // Test quality\n 'vitest/prefer-spy-on': 'error',\n 'vitest/prefer-hooks-on-top': 'error',\n 'vitest/prefer-each': 'warn',\n 'vitest/no-test-return-statement': 'error',\n 'vitest/prefer-mock-promise-shorthand': 'error'\n }\n }\n]);\n", "import playwrightEslint from 'eslint-plugin-playwright';\nimport { defineConfig } from 'eslint/config';\n\nexport const playwright = defineConfig([\n {\n ...playwrightEslint.configs['flat/recommended'],\n files: ['**/*.e2e.ts', '**/*.e2e.js'],\n rules: {\n ...playwrightEslint.configs['flat/recommended'].rules,\n // Locator best practices\n 'playwright/prefer-locator': 'error',\n 'playwright/prefer-native-locators': 'error',\n 'playwright/no-nth-methods': 'warn',\n // Matcher improvements\n 'playwright/prefer-to-be': 'error',\n 'playwright/prefer-to-have-count': 'error',\n 'playwright/prefer-to-have-length': 'error',\n 'playwright/prefer-comparison-matcher': 'error',\n // Test structure\n 'playwright/prefer-hooks-on-top': 'error',\n 'playwright/require-top-level-describe': 'warn'\n }\n }\n]);\n", "import boundariesPlugin from 'eslint-plugin-boundaries';\nimport { defineConfig } from 'eslint/config';\n\nexport const boundaries = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n boundaries: boundariesPlugin\n },\n settings: {\n 'boundaries/elements': [\n {\n type: 'feature',\n pattern: '**/feature/**'\n },\n {\n type: 'data-access',\n pattern: '**/data-access/**'\n },\n {\n type: 'domain-logic',\n pattern: '**/domain-logic/**'\n },\n {\n type: 'ui',\n pattern: '**/ui/**'\n },\n {\n type: 'common',\n pattern: '**/common/**'\n },\n {\n type: 'utils',\n pattern: '**/utils/**'\n }\n ],\n 'import/resolver': {\n typescript: {\n alwaysTryTypes: true\n }\n }\n },\n rules: {\n ...boundariesPlugin.configs.recommended.rules,\n 'boundaries/dependencies': [\n 'error',\n {\n default: 'disallow',\n message:\n '${dependency.type} is not allowed to be imported in ${file.type}',\n rules: [\n {\n from: { type: 'feature' },\n allow: [\n { to: { type: 'feature' } },\n { to: { type: 'ui' } },\n { to: { type: 'domain-logic' } },\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'domain-logic' },\n allow: [\n { to: { type: 'domain-logic' } },\n { to: { type: 'data-access' } },\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'data-access' },\n allow: [\n { to: { type: 'data-access' } },\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'ui' },\n allow: [\n { to: { type: 'ui' } },\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'utils' },\n allow: [\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'common' },\n allow: [{ to: { type: 'common' } }]\n }\n ]\n }\n ]\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n 'boundaries/dependencies': 'off'\n }\n }\n]);\n", "import { ConfigArray } from 'typescript-eslint';\nimport { angularTemplate } from './lib/angular-template.js';\nimport { angular } from './lib/angular.js';\nimport { base } from './lib/base.js';\nimport { javascript } from './lib/javascript.js';\nimport { json } from './lib/json.js';\nimport { prettier } from './lib/prettier.js';\nimport { rxjs } from './lib/rxjs.js';\nimport { storybook } from './lib/storybook.js';\nimport { typescript } from './lib/typescript.js';\nimport { vitest } from './lib/vitest.js';\nimport { playwright } from './lib/playwright.js';\nimport { boundaries } from './lib/boundaries.js';\n\nexport const recommended: ConfigArray = [\n ...base,\n ...javascript,\n ...typescript,\n ...json,\n ...boundaries,\n ...prettier // Must be last to disable formatting rules that conflict with Prettier\n];\n\nexport {\n base,\n javascript,\n typescript,\n angular,\n angularTemplate,\n rxjs,\n json,\n boundaries,\n storybook,\n vitest,\n playwright,\n prettier\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { configs } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const angularTemplate = defineConfig([\n {\n files: ['**/*.html'],\n extends: [\n ...(configs.templateAccessibility as Config[]),\n ...(configs.templateRecommended as Config[])\n ],\n rules: {\n '@angular-eslint/template/prefer-template-literal': 'error',\n '@angular-eslint/template/no-any': 'error',\n '@angular-eslint/template/no-duplicate-attributes': 'error',\n '@angular-eslint/template/button-has-type': 'error',\n '@angular-eslint/template/no-positive-tabindex': 'error',\n '@angular-eslint/template/valid-aria': 'error',\n '@angular-eslint/template/alt-text': 'error',\n '@angular-eslint/template/elements-content': 'error',\n '@angular-eslint/template/click-events-have-key-events': 'error',\n '@angular-eslint/template/mouse-events-have-key-events': 'error',\n '@angular-eslint/template/table-scope': 'error',\n '@angular-eslint/template/no-autofocus': 'error',\n '@angular-eslint/template/no-distracting-elements': 'error',\n '@angular-eslint/template/prefer-control-flow': 'error',\n '@angular-eslint/template/prefer-self-closing-tags': 'error',\n '@angular-eslint/template/prefer-ngsrc': 'error',\n '@angular-eslint/template/prefer-built-in-pipes': 'error',\n '@angular-eslint/template/no-interpolation-in-attributes': 'error',\n '@angular-eslint/template/no-nested-tags': 'error',\n '@angular-eslint/template/use-track-by-function': 'error',\n '@angular-eslint/template/label-has-associated-control': 'error',\n '@angular-eslint/template/prefer-at-else': 'error', // v21: @if/@else syntax\n '@angular-eslint/template/prefer-at-empty': 'error', // v21: @for/@empty syntax\n '@angular-eslint/template/prefer-contextual-for-variables': 'error', // v21: Use $index, $first, etc.\n '@angular-eslint/template/no-empty-control-flow': 'error', // v21: Catch incomplete refactoring\n '@angular-eslint/template/prefer-class-binding': 'error', // v21.2.0: Prefer [class] over ngClass\n '@angular-eslint/template/prefer-static-string-properties': 'error', // Reduce change detection\n '@angular-eslint/template/no-non-null-assertion': 'error', // Forbid `!` assertions in templates\n '@angular-eslint/template/no-inline-styles': 'error', // Forbid inline style=\"...\" attributes\n '@angular-eslint/template/conditional-complexity': [\n 'warn',\n { maxComplexity: 5 }\n ], // Template readability\n '@angular-eslint/template/attributes-order': [\n 'error',\n {\n alphabetical: true,\n order: [\n 'STRUCTURAL_DIRECTIVE', // e.g. `*ngIf=\"true\"`, `*ngFor=\"let item of items\"`\n 'TEMPLATE_REFERENCE', // e.g. `<input #inputRef>`\n 'INPUT_BINDING', // e.g. `[id]=\"3\"`, `[attr.colspan]=\"colspan\"`, [style.width.%]=\"100\", [@triggerName]=\"expression\", `bind-id=\"handleChange()\"`\n 'TWO_WAY_BINDING', // e.g. `[(id)]=\"id\"`, `bindon-id=\"id\"\n 'ATTRIBUTE_BINDING', // e.g. `<input required>`, `id=\"3\"`\n 'OUTPUT_BINDING' // e.g. `(idChange)=\"handleChange()\"`, `on-id=\"handleChange()\"`\n ]\n }\n ]\n }\n }\n]);\n", "import globals from 'globals';\nimport { configs, processInlineTemplates } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const angular = defineConfig([\n {\n files: ['**/*.ts'],\n extends: [...(configs.tsRecommended as Config[])],\n languageOptions: {\n globals: {\n ...globals.browser,\n ...globals.es2025,\n ...globals.node\n }\n },\n processor: processInlineTemplates,\n rules: {\n '@angular-eslint/prefer-on-push-component-change-detection': 'error', // v22: flags only explicit opt-out of OnPush (omission now means OnPush)\n '@angular-eslint/prefer-signals': 'error',\n '@angular-eslint/use-injectable-provided-in': 'error',\n '@angular-eslint/prefer-signal-model': 'error',\n '@angular-eslint/no-uncalled-signals': 'error',\n '@angular-eslint/prefer-host-metadata-property': 'error',\n '@angular-eslint/no-implicit-take-until-destroyed': 'error', // v21.2.0: Enforce explicit DestroyRef\n '@angular-eslint/no-async-lifecycle-method': 'error', // Prevent async lifecycle hooks\n '@angular-eslint/prefer-output-readonly': 'warn', // Prevent accidental reassignment\n '@angular-eslint/prefer-output-emitter-ref': 'warn', // Modern output() function over @Output()\n '@angular-eslint/sort-lifecycle-methods': 'warn', // Consistent lifecycle method ordering\n '@angular-eslint/computed-must-return': 'error', // Catch silent computed() bugs missing a return\n '@angular-eslint/no-duplicates-in-metadata-arrays': 'error', // Catch duplicate imports/providers in @Component/@NgModule\n '@angular-eslint/no-lifecycle-call': 'error', // Forbid manual this.ngOnInit() calls\n '@angular-eslint/require-lifecycle-on-prototype': 'error', // Lifecycle hooks must be methods, not arrow-fn fields\n '@angular-eslint/relative-url-prefix': 'error', // Require ./ in templateUrl/styleUrl for portability\n '@angular-eslint/use-component-selector': 'error', // All components must declare a selector\n '@angular-eslint/no-developer-preview': 'warn', // Flag APIs marked @developerPreview (no breaking-change policy)\n '@angular-eslint/no-experimental': 'warn' // Flag APIs marked @experimental\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport stylistic from '@stylistic/eslint-plugin';\nimport importPluginX from 'eslint-plugin-import-x';\nimport { defineConfig } from 'eslint/config';\n\nexport const base = defineConfig([\n { extends: [...configs['flat/base']] },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [importPluginX.flatConfigs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [stylistic.configs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'no-param-reassign': 'error',\n 'no-alert': 'error',\n 'no-console': ['warn', { allow: ['warn', 'error'] }],\n 'no-debugger': 'error',\n eqeqeq: ['error', 'always', { null: 'ignore' }],\n curly: ['error', 'multi'],\n 'prefer-const': ['error', { destructuring: 'all' }],\n 'no-var': 'error',\n 'object-shorthand': 'error',\n 'prefer-arrow-callback': 'error',\n 'no-useless-concat': 'error',\n 'prefer-template': 'error',\n 'no-nested-ternary': 'error',\n 'no-useless-assignment': 'error', // NEW: Catch unused assignments (ESLint v9)\n 'no-object-constructor': 'error', // Disallow new Object() without arguments\n 'no-else-return': ['error', { allowElseIf: false }], // Prefer early returns\n 'no-multi-assign': 'error', // Disallow chaining assignments\n radix: 'error', // Require radix parameter for parseInt()\n yoda: 'error', // Disallow yoda conditions (`if (\"red\" === color)`)\n complexity: ['warn', 10], // Warn if function complexity is high\n 'max-depth': ['warn', 4], // Warn on deeply nested blocks\n 'max-lines-per-function': [\n 'warn',\n { max: 50, skipBlankLines: true, skipComments: true }\n ], // Warn on long functions\n 'max-params': ['warn', 4], // Warn on functions with many parameters\n 'no-lonely-if': 'error', // Disallow if statements as the only statement in an else block\n 'grouped-accessor-pairs': ['error', 'getBeforeSet'], // Enforce consistency for getters/setters\n 'class-methods-use-this': 'error',\n 'no-underscore-dangle': 'error',\n 'max-len': [\n 'error',\n {\n code: 135,\n ignoreComments: true\n }\n ],\n 'spaced-comment': [\n 2,\n 'always',\n {\n block: {\n exceptions: ['*']\n }\n }\n ],\n '@stylistic/padding-line-between-statements': [\n 'error',\n {\n blankLine: 'always',\n prev: 'export',\n next: ['export', 'const']\n },\n {\n blankLine: 'always',\n prev: ['const', 'let', 'var'],\n next: '*'\n },\n {\n blankLine: 'any',\n prev: ['const', 'let', 'var'],\n next: ['const', 'let', 'var']\n },\n {\n blankLine: 'always',\n prev: '*',\n next: [\n 'for',\n 'if',\n 'return',\n 'throw',\n 'switch',\n 'try',\n 'class',\n 'function'\n ]\n }\n ],\n '@stylistic/comma-dangle': ['error', 'never'],\n '@stylistic/indent': [\n 'error',\n 2,\n {\n offsetTernaryExpressions: true,\n SwitchCase: 1,\n ignoredNodes: [\n 'TSTypeParameterInstantiation',\n 'FunctionExpression > .params > :matches(Decorator, :not(:first-child))'\n ]\n }\n ],\n 'sort-imports': [\n 'error',\n {\n ignoreCase: false,\n ignoreDeclarationSort: true,\n ignoreMemberSort: false,\n memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],\n allowSeparatedGroups: true\n }\n ]\n }\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts',\n '**/*.html'\n ],\n rules: {\n 'max-lines': [\n 'error',\n {\n max: 150,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n 'max-lines-per-function': 'off',\n complexity: ['warn', { max: 3 }],\n 'max-lines': [\n 'error',\n {\n max: 300,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n 'max-classes-per-file': 'off'\n }\n },\n {\n files: ['**/*.state.ts'],\n rules: {\n 'class-methods-use-this': 'off'\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const javascript = defineConfig({\n files: ['**/*.js', '**/*.jsx', '**/*.cjs', '**/*.mjs'],\n extends: [...(configs['flat/javascript'] as Config[])]\n});\n", "import jsonPlugin from '@eslint/json';\nimport { defineConfig } from 'eslint/config';\n\nexport const json = defineConfig([\n {\n plugins: { json: jsonPlugin }\n },\n {\n files: ['**/*.json'],\n language: 'json/json',\n extends: [jsonPlugin.configs.recommended]\n }\n]);\n", "import eslintConfigPrettier from 'eslint-config-prettier';\nimport { defineConfig } from 'eslint/config';\n\nexport const prettier = defineConfig([eslintConfigPrettier]);\n", "import rxjsEslint from '@smarttools/eslint-plugin-rxjs';\nimport { defineConfig } from 'eslint/config';\n\nexport const rxjs = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n extends: [rxjsEslint.configs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n rxjs: rxjsEslint\n }\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'rxjs/prefer-observer': 'error',\n 'rxjs/finnish': 'warn',\n 'rxjs/no-ignored-subscription': 'warn',\n 'rxjs/no-ignored-error': 'warn',\n 'rxjs/no-unsafe-switchmap': 'error',\n 'rxjs/no-unsafe-takeuntil': 'error',\n 'rxjs/no-unsafe-catch': 'error',\n 'rxjs/no-unsafe-first': 'error',\n 'rxjs/no-topromise': 'error',\n 'rxjs/throw-error': 'error',\n 'rxjs/no-async-subscribe': 'off',\n 'rxjs/no-exposed-subjects': 'error', // Enforce subject encapsulation\n 'rxjs/no-cyclic-action': 'error', // Prevent infinite loops in NgRx effects\n 'rxjs/no-subscribe-handlers': 'warn' // Prefer observer objects (complements prefer-observer)\n }\n },\n {\n files: ['**/*.spec.ts', '**/*.test.ts', '**/*.spec.js', '**/*.test.js'],\n rules: {\n 'rxjs/no-ignored-subscription': 'off',\n 'rxjs/no-subscribe-handlers': 'off'\n }\n }\n]);\n", "import storybookEslint from 'eslint-plugin-storybook';\nimport { defineConfig } from 'eslint/config';\n\nexport const storybook = defineConfig([\n {\n ignores: ['!.storybook'],\n files: ['**/*.stories.ts'],\n extends: [storybookEslint.configs['flat/recommended']],\n rules: {\n 'storybook/csf-component': 'warn', // Ensure component property is set\n 'storybook/no-stories-of': 'error' // Prevent deprecated storiesOf API\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';\nimport importPluginX from 'eslint-plugin-import-x';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nimport explicitAccessibilityRule from './rules/explicit-accessibility.js';\n\nconst localTypescriptRules: Record<string, unknown> = {\n rules: {\n 'explicit-accessibility': explicitAccessibilityRule\n }\n};\n\nexport const typescript = defineConfig([\n // NOTE: Checks for 'prettier' and 'eslint-plugin-prettier'\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n extends: [\n importPluginX.flatConfigs.typescript,\n ...(configs['flat/typescript'] as Config[])\n ]\n },\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n plugins: { local: localTypescriptRules },\n rules: {\n 'local/explicit-accessibility': 'error',\n '@typescript-eslint/explicit-member-accessibility': 'error',\n '@typescript-eslint/explicit-function-return-type': 'error',\n '@typescript-eslint/no-empty-function': 'error',\n '@typescript-eslint/no-unused-vars': 'error',\n '@typescript-eslint/no-use-before-define': 'error',\n\n // A. Eliminating `any` (already covered by strict-type-checked, but explicit for clarity)\n '@typescript-eslint/no-explicit-any': 'error',\n '@typescript-eslint/no-unsafe-assignment': 'error',\n '@typescript-eslint/no-unsafe-call': 'error',\n '@typescript-eslint/no-unsafe-member-access': 'error',\n '@typescript-eslint/no-unsafe-return': 'error',\n '@typescript-eslint/no-unsafe-argument': 'error',\n\n // New v8 type-safety rules (replacements for deprecated ban-types)\n '@typescript-eslint/no-empty-object-type': 'error', // Bans confusing {} type\n '@typescript-eslint/no-unsafe-function-type': 'error', // Bans Function type\n '@typescript-eslint/no-wrapper-object-types': 'error', // Bans Number, String, Boolean wrappers\n\n // B. Explicit Annotations (partially covered, explicit module boundaries is key)\n '@typescript-eslint/explicit-module-boundary-types': 'error',\n // Consider enabling if maximum explicitness is desired, even if verbose:\n\n // C. Null/Undefined Safety (Requires strictNullChecks)\n '@typescript-eslint/no-non-null-assertion': 'error',\n '@typescript-eslint/prefer-nullish-coalescing': 'error',\n '@typescript-eslint/prefer-optional-chain': 'error',\n\n // D. Promise Handling (Supplementing plugin:promise/recommended)\n '@typescript-eslint/no-floating-promises': [\n 'error',\n { ignoreVoid: true }\n ],\n '@typescript-eslint/no-misused-promises': 'warn', // Already in recommended-type-checked\n '@typescript-eslint/promise-function-async': 'error',\n '@typescript-eslint/await-thenable': 'error', // Already in recommended-type-checked\n\n // E. Best Practices & Potential Errors (Some covered by presets, fine-tuning here)\n '@typescript-eslint/no-inferrable-types': 'warn', // Keep as warn or disable if inference is preferred\n '@typescript-eslint/no-require-imports': 'error', // Use ES modules (replaces deprecated no-var-requires)\n '@typescript-eslint/only-throw-error': 'error', // Replaces deprecated no-throw-literal\n '@typescript-eslint/no-array-delete': 'error', // Prevents delete arr[0]\n '@typescript-eslint/return-await': ['error', 'in-try-catch'], // Better stack traces in try/catch\n '@typescript-eslint/require-await': 'error',\n '@typescript-eslint/restrict-template-expressions': [\n 'error',\n { allowNumber: true, allowBoolean: true }\n ], // Allow numbers/booleans in templates\n '@typescript-eslint/restrict-plus-operands': 'error', // Enforce consistent types for '+'\n '@typescript-eslint/prefer-as-const': 'error',\n '@typescript-eslint/no-shadow': 'error',\n '@typescript-eslint/switch-exhaustiveness-check': 'error', // Ensure switch on unions is exhaustive\n '@typescript-eslint/no-unused-expressions': [\n 'error',\n { allowShortCircuit: true, allowTernary: true }\n ],\n '@typescript-eslint/no-useless-constructor': 'error',\n '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], // Prefer dot notation where possible\n\n // Strict type-checked rules\n '@typescript-eslint/no-unnecessary-condition': 'error', // Catches always-true/false conditions\n '@typescript-eslint/no-confusing-void-expression': [\n 'error',\n { ignoreArrowShorthand: true, ignoreVoidOperator: true }\n ], // Prevent confusing void usage\n '@typescript-eslint/no-dynamic-delete': 'error', // Use Map instead of delete obj[key]\n '@typescript-eslint/no-extraneous-class': [\n 'error',\n { allowWithDecorator: true }\n ], // Allow Angular classes\n '@typescript-eslint/no-invalid-void-type': 'error', // Restrict void to return types\n '@typescript-eslint/unified-signatures': 'error', // Merge overloads where possible\n '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error', // Forbids foo! ?? bar\n\n // Stylistic type-checked rules\n '@typescript-eslint/prefer-find': 'error', // Use find() instead of filter()[0]\n '@typescript-eslint/prefer-for-of': 'error', // Modern iteration\n '@typescript-eslint/prefer-includes': 'error', // indexOf() \u2192 includes()\n '@typescript-eslint/prefer-string-starts-ends-with': 'error', // Modern string methods\n '@typescript-eslint/prefer-regexp-exec': 'error', // Better regex performance\n\n // F. Consistency & Style (Some covered by stylistic-type-checked)\n '@typescript-eslint/consistent-type-assertions': [\n 'error',\n { assertionStyle: 'as', objectLiteralTypeAssertions: 'never' }\n ],\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\n '@typescript-eslint/consistent-type-imports': [\n 'error',\n { prefer: 'type-imports', fixStyle: 'separate-type-imports' }\n ],\n '@typescript-eslint/naming-convention': [\n 'error',\n {\n selector: 'objectLiteralProperty',\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'objectLiteralProperty',\n format: ['camelCase', 'snake_case', 'PascalCase']\n },\n {\n selector: 'parameter',\n format: ['camelCase'],\n leadingUnderscore: 'allow'\n },\n { selector: 'default', format: ['camelCase'] },\n { selector: 'variable', format: ['camelCase', 'UPPER_CASE'] },\n { selector: 'function', format: ['camelCase'] },\n { selector: 'typeLike', format: ['PascalCase'] },\n {\n selector: 'property',\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'property',\n format: ['camelCase', 'PascalCase', 'snake_case']\n }\n ],\n 'import-x/order': [\n 'error',\n {\n groups: [\n 'builtin',\n 'external',\n 'internal',\n ['parent', 'sibling'],\n 'index',\n 'unknown'\n ],\n pathGroups: [\n {\n pattern: '@angular/**',\n group: 'builtin',\n position: 'before'\n },\n {\n pattern: '@nestjs/**',\n group: 'builtin',\n position: 'before'\n },\n {\n pattern: '@shared/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@backend/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@frontend/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@*/shared/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@*/frontend/**',\n group: 'internal',\n position: 'after'\n },\n {\n pattern: '@*/backend/**',\n group: 'internal',\n position: 'after'\n }\n ],\n pathGroupsExcludedImportTypes: ['builtin'],\n 'newlines-between': 'always',\n alphabetize: { order: 'asc', caseInsensitive: true }\n }\n ],\n 'import-x/no-unresolved': 'error',\n 'import-x/no-duplicates': 'error',\n 'import-x/prefer-default-export': 'off',\n 'import-x/no-useless-path-segments': ['error', { noUselessIndex: true }],\n 'import-x/newline-after-import': 'error',\n 'import-x/first': 'error',\n 'import-x/no-mutable-exports': 'error',\n 'import-x/no-self-import': 'error', // Prevents modules importing themselves\n 'import-x/no-cycle': ['error', { maxDepth: 2, ignoreExternal: true }], // Prevents circular dependencies\n 'import-x/consistent-type-specifier-style': ['error', 'prefer-top-level'], // Consistent type imports\n 'import-x/no-anonymous-default-export': 'error' // Improve code searchability\n },\n settings: {\n 'import-x/resolver-next': [\n createTypeScriptImportResolver({\n alwaysTryTypes: true\n })\n ]\n }\n },\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n rules: {\n '@typescript-eslint/prefer-readonly': 'error'\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n '@typescript-eslint/no-namespace': 'off',\n '@typescript-eslint/no-extraneous-class': 'off'\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n '@typescript-eslint/no-empty-function': 'off',\n '@typescript-eslint/no-unbound-method': 'off',\n '@typescript-eslint/consistent-type-assertions': 'off'\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n '@typescript-eslint/consistent-type-assertions': 'off',\n '@typescript-eslint/naming-convention': 'off'\n }\n }\n]);\n", "import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';\n\nconst createRule = ESLintUtils.RuleCreator(\n () => 'https://eslint.org/docs/latest/rules/no-unused-private-class-members'\n);\n\ntype AccessibilityLevel = 'public' | 'private' | 'protected';\n\ntype Options = [\n {\n defaultAccessibility?: AccessibilityLevel;\n }\n];\n\nconst defaultOptions: Options[0] = {\n defaultAccessibility: 'private'\n};\n\nconst getNodeName = (\n node: TSESTree.Node | TSESTree.Token | null | undefined\n): string => {\n if (!node) {\n return '<unknown>';\n }\n\n /*\n * MethodDefinition or PropertyDefinition (check 'key' first)\n * Note: Check 'key' before 'kind' because MethodDefinition has both\n */\n if ('key' in node && node.key) {\n if (node.key.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return node.key.name;\n }\n // Handle computed property names, private identifiers (#name), etc. if needed\n if (node.key.type === TSESTree.AST_NODE_TYPES.PrivateIdentifier) {\n return `#${node.key.name}`;\n }\n return '<computed/complex key>';\n }\n\n // Constructor specific check (if key check didn't catch it - unlikely for MethodDefinition)\n if ('kind' in node && node.kind === 'constructor') {\n return 'constructor';\n }\n\n // TSParameterProperty - handle its 'parameter' property\n if (node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty) {\n const param = node.parameter; // Assign to variable for clarity & potentially better inference\n\n // Handle different parameter kinds:\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return param.name;\n }\n if (param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern) {\n // Check the left side of the assignment\n if (param.left.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return param.left.name; // Name is on the identifier being assigned to\n }\n /*\n * Parameter is an assignment pattern with destructuring (ArrayPattern/ObjectPattern)\n * You might want more sophisticated logic here to extract a name\n */\n return '<destructured parameter>';\n }\n return '<complex parameter>';\n }\n\n return '<unknown>';\n};\n\nexport default createRule<Options, 'missingAccessibility'>({\n name: 'explicit-accessibility',\n meta: {\n type: 'suggestion',\n docs: {\n description: 'Require explicit accessibility modifiers on class members'\n },\n fixable: 'code',\n schema: [\n {\n type: 'object',\n properties: {\n defaultAccessibility: {\n type: 'string',\n enum: ['public', 'private', 'protected'],\n description: 'The accessibility modifier to add if one is missing.'\n }\n },\n additionalProperties: false\n }\n ],\n messages: {\n missingAccessibility:\n \"Class member '{{ name }}' is missing an explicit accessibility modifier (public/private/protected).\"\n }\n },\n defaultOptions: [defaultOptions],\n\n create(context, [options]) {\n const { defaultAccessibility } = { ...defaultOptions, ...options };\n const sourceCode = context.sourceCode;\n\n function checkNode(\n node:\n | TSESTree.MethodDefinition\n | TSESTree.PropertyDefinition\n | TSESTree.TSParameterProperty\n ): void {\n if (node.accessibility) {\n return; // Already has modifier\n }\n\n let reportNode: TSESTree.Node | TSESTree.Token = node;\n const name = getNodeName(node);\n // Adjust report node for better highlighting\n if (\n node.type === TSESTree.AST_NODE_TYPES.MethodDefinition ||\n node.type === TSESTree.AST_NODE_TYPES.PropertyDefinition\n ) {\n reportNode = node.key;\n } else {\n const param = node.parameter;\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\n reportNode = param;\n } else if (\n param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern &&\n param.left.type === TSESTree.AST_NODE_TYPES.Identifier\n ) {\n reportNode = param.left;\n }\n // Keep reportNode as the TSParameterProperty node itself if param isn't simple identifier\n }\n\n context.report({\n node: reportNode ?? node,\n messageId: 'missingAccessibility',\n data: { name },\n fix(fixer) {\n let insertText = `${defaultAccessibility} `;\n\n let tokenToInsertBefore: TSESTree.Token | null;\n if (node.decorators.length > 0) {\n const lastDecorator = node.decorators[node.decorators.length - 1];\n tokenToInsertBefore = sourceCode.getTokenAfter(lastDecorator);\n } else {\n tokenToInsertBefore = sourceCode.getFirstToken(node);\n }\n\n // Parameter properties need special handling if they also have 'readonly'\n if (\n node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty &&\n node.readonly\n ) {\n // If readonly exists without accessibility, insert accessibility *before* readonly\n const firstToken = sourceCode.getFirstToken(node);\n if (firstToken?.value === 'readonly') {\n // double check it's the readonly token\n tokenToInsertBefore = firstToken;\n }\n // If insertion point wasn't decorators, use first token (which should be readonly)\n }\n\n if (!tokenToInsertBefore) return null;\n\n /*\n * If the token immediately after the insertion point isn't whitespace, add a space.\n * (Handles case where tokenToInsertBefore is the last decorator token)\n */\n const tokenAfterInsertion = sourceCode.getTokenAfter(\n tokenToInsertBefore,\n { includeComments: false }\n );\n const textBetween = sourceCode.text.slice(\n tokenToInsertBefore.range[1],\n tokenAfterInsertion?.range[0]\n );\n if (!/^\\s/.test(textBetween)) {\n insertText = ` ${insertText}`; // Add leading space if needed after decorator\n }\n\n return fixer.insertTextBefore(tokenToInsertBefore, insertText);\n }\n });\n }\n\n return {\n MethodDefinition(node: TSESTree.MethodDefinition): void {\n checkNode(node);\n },\n\n PropertyDefinition(node: TSESTree.PropertyDefinition): void {\n checkNode(node);\n },\n\n TSParameterProperty(node: TSESTree.TSParameterProperty): void {\n checkNode(node);\n }\n };\n }\n});\n", "import vitestEslint from '@vitest/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\n\nconst vitestPlugin: Record<string, object> = {\n vitest: vitestEslint\n};\n\nexport const vitest = defineConfig([\n {\n files: ['**/*.spec.ts', '**/*.spec.js', '**/*.test.ts', '**/*.test.js'],\n plugins: vitestPlugin,\n rules: {\n ...vitestEslint.configs.recommended.rules,\n 'vitest/max-nested-describe': ['error', { max: 3 }],\n // Matcher improvements\n 'vitest/prefer-to-be': 'error',\n 'vitest/prefer-to-contain': 'error',\n 'vitest/prefer-to-have-length': 'error',\n 'vitest/prefer-comparison-matcher': 'error',\n 'vitest/prefer-strict-equal': 'warn',\n // Test quality\n 'vitest/prefer-spy-on': 'error',\n 'vitest/prefer-hooks-on-top': 'error',\n 'vitest/prefer-each': 'warn',\n 'vitest/no-test-return-statement': 'error',\n 'vitest/prefer-mock-promise-shorthand': 'error'\n }\n }\n]);\n", "import playwrightEslint from 'eslint-plugin-playwright';\nimport { defineConfig } from 'eslint/config';\n\nexport const playwright = defineConfig([\n {\n ...playwrightEslint.configs['flat/recommended'],\n files: ['**/*.e2e.ts', '**/*.e2e.js'],\n rules: {\n ...playwrightEslint.configs['flat/recommended'].rules,\n // Locator best practices\n 'playwright/prefer-locator': 'error',\n 'playwright/prefer-native-locators': 'error',\n 'playwright/no-nth-methods': 'warn',\n // Matcher improvements\n 'playwright/prefer-to-be': 'error',\n 'playwright/prefer-to-have-count': 'error',\n 'playwright/prefer-to-have-length': 'error',\n 'playwright/prefer-comparison-matcher': 'error',\n // Test structure\n 'playwright/prefer-hooks-on-top': 'error',\n 'playwright/require-top-level-describe': 'warn'\n }\n }\n]);\n", "import boundariesPlugin from 'eslint-plugin-boundaries';\nimport { defineConfig } from 'eslint/config';\n\nexport const boundaries = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n boundaries: boundariesPlugin\n },\n settings: {\n 'boundaries/elements': [\n {\n type: 'feature',\n pattern: '**/feature/**'\n },\n {\n type: 'data-access',\n pattern: '**/data-access/**'\n },\n {\n type: 'domain-logic',\n pattern: '**/domain-logic/**'\n },\n {\n type: 'ui',\n pattern: '**/ui/**'\n },\n {\n type: 'common',\n pattern: '**/common/**'\n },\n {\n type: 'utils',\n pattern: '**/utils/**'\n }\n ],\n 'import/resolver': {\n typescript: {\n alwaysTryTypes: true\n }\n }\n },\n rules: {\n ...boundariesPlugin.configs.recommended.rules,\n 'boundaries/dependencies': [\n 'error',\n {\n default: 'disallow',\n message:\n '{{to.element.types}} is not allowed to be imported in {{from.element.types}}',\n policies: [\n {\n from: { element: { type: 'feature' } },\n allow: [\n { to: { element: { type: 'feature' } } },\n { to: { element: { type: 'ui' } } },\n { to: { element: { type: 'domain-logic' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'domain-logic' } },\n allow: [\n { to: { element: { type: 'domain-logic' } } },\n { to: { element: { type: 'data-access' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'data-access' } },\n allow: [\n { to: { element: { type: 'data-access' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'ui' } },\n allow: [\n { to: { element: { type: 'ui' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'utils' } },\n allow: [\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'common' } },\n allow: [{ to: { element: { type: 'common' } } }]\n }\n ]\n }\n ]\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n 'boundaries/dependencies': 'off'\n }\n }\n]);\n", "import { ConfigArray } from 'typescript-eslint';\nimport { angularTemplate } from './lib/angular-template.js';\nimport { angular } from './lib/angular.js';\nimport { base } from './lib/base.js';\nimport { javascript } from './lib/javascript.js';\nimport { json } from './lib/json.js';\nimport { prettier } from './lib/prettier.js';\nimport { rxjs } from './lib/rxjs.js';\nimport { storybook } from './lib/storybook.js';\nimport { typescript } from './lib/typescript.js';\nimport { vitest } from './lib/vitest.js';\nimport { playwright } from './lib/playwright.js';\nimport { boundaries } from './lib/boundaries.js';\n\nexport const recommended: ConfigArray = [\n ...base,\n ...javascript,\n ...typescript,\n ...json,\n ...boundaries,\n ...prettier // Must be last to disable formatting rules that conflict with Prettier\n];\n\nexport {\n base,\n javascript,\n typescript,\n angular,\n angularTemplate,\n rxjs,\n json,\n boundaries,\n storybook,\n vitest,\n playwright,\n prettier\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["configs", "defineConfig", "configs", "defineConfig", "configs", "defineConfig", "defineConfig", "defineConfig", "defineConfig", "defineConfig", "configs", "importPluginX", "defineConfig", "defineConfig", "importPluginX", "configs", "defineConfig", "defineConfig", "defineConfig"]
|
|
7
7
|
}
|
package/lib/angular.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular.d.ts","sourceRoot":"","sources":["../../../../../packages/lint-suite/src/lib/angular.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"angular.d.ts","sourceRoot":"","sources":["../../../../../packages/lint-suite/src/lib/angular.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,eAAO,MAAM,OAAO,UAkClB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lint-suite",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "Reusable ESLint, Stylelint, and Prettier configurations",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -26,28 +26,28 @@
|
|
|
26
26
|
"type": "module",
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@eslint/js": "^10.0.1",
|
|
29
|
-
"@eslint/json": "^
|
|
30
|
-
"@nx/eslint-plugin": "
|
|
29
|
+
"@eslint/json": "^2.0.1",
|
|
30
|
+
"@nx/eslint-plugin": "23.1.0",
|
|
31
31
|
"@smarttools/eslint-plugin-rxjs": "1.0.22",
|
|
32
32
|
"@stylistic/eslint-plugin": "5.10.0",
|
|
33
|
-
"@typescript-eslint/utils": "8.
|
|
34
|
-
"@vitest/eslint-plugin": "1.6.
|
|
35
|
-
"angular-eslint": "^
|
|
36
|
-
"eslint": "^10.
|
|
33
|
+
"@typescript-eslint/utils": "8.64.0",
|
|
34
|
+
"@vitest/eslint-plugin": "1.6.23",
|
|
35
|
+
"angular-eslint": "^22.1.0",
|
|
36
|
+
"eslint": "^10.7.0",
|
|
37
37
|
"eslint-config-prettier": "^10.1.8",
|
|
38
|
-
"eslint-import-resolver-typescript": "4.4.
|
|
39
|
-
"eslint-plugin-boundaries": "
|
|
40
|
-
"eslint-plugin-import-x": "4.
|
|
41
|
-
"eslint-plugin-playwright": "2.10.
|
|
42
|
-
"eslint-plugin-storybook": "10.
|
|
43
|
-
"globals": "17.
|
|
44
|
-
"stylelint": "17.
|
|
38
|
+
"eslint-import-resolver-typescript": "4.4.5",
|
|
39
|
+
"eslint-plugin-boundaries": "7.0.2",
|
|
40
|
+
"eslint-plugin-import-x": "4.17.1",
|
|
41
|
+
"eslint-plugin-playwright": "2.10.5",
|
|
42
|
+
"eslint-plugin-storybook": "10.5.2",
|
|
43
|
+
"globals": "17.7.0",
|
|
44
|
+
"stylelint": "17.14.0",
|
|
45
45
|
"stylelint-config-recess-order": "7.7.0",
|
|
46
46
|
"stylelint-config-standard": "40.0.0",
|
|
47
47
|
"stylelint-config-standard-scss": "17.0.0",
|
|
48
|
-
"stylelint-scss": "7.
|
|
48
|
+
"stylelint-scss": "7.2.0",
|
|
49
49
|
"stylelint-selector-bem-pattern": "5.0.0",
|
|
50
|
-
"typescript-eslint": "8.
|
|
50
|
+
"typescript-eslint": "8.64.0"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
53
|
"prettier": "^3.8.3"
|
package/stylelint.cjs
CHANGED
|
@@ -36,6 +36,9 @@ module.exports = __toCommonJS(stylelint_exports);
|
|
|
36
36
|
var import_stylelint_scss = __toESM(require("stylelint-scss"), 1);
|
|
37
37
|
var import_stylelint_selector_bem_pattern = __toESM(require("stylelint-selector-bem-pattern"), 1);
|
|
38
38
|
var stylelint = {
|
|
39
|
+
// Stylelint resolves config for cwd when picking a formatter; without a
|
|
40
|
+
// top-level `rules` an overrides-only config fails with "No rules found".
|
|
41
|
+
rules: {},
|
|
39
42
|
overrides: [
|
|
40
43
|
{
|
|
41
44
|
files: ["**/*.scss", "**/*.css"],
|
package/stylelint.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../packages/lint-suite/src/stylelint.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Config } from 'stylelint';\nimport stylelintScss from 'stylelint-scss';\nimport bemPattern from 'stylelint-selector-bem-pattern';\n\nexport const stylelint: Config = {\n overrides: [\n {\n files: ['**/*.scss', '**/*.css'],\n extends: [\n 'stylelint-config-standard',\n 'stylelint-config-standard-scss',\n 'stylelint-config-recess-order'\n ],\n plugins: [...stylelintScss, bemPattern],\n rules: {\n 'selector-class-pattern':\n '^(?:(?:o|c|u|t|s|is|has|_|js|qa)-)?[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*(?:__[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:--[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:\\\\[.+\\\\])?$',\n 'plugin/selector-bem-pattern': {\n preset: 'bem',\n implicitComponents: ['**/*.component.scss', '**/*.component.css'],\n ignoreCustomProperties: ['^--mdc', '^--sys']\n },\n 'no-descending-specificity': null\n }\n }\n ]\n};\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4BAA0B;AAC1B,4CAAuB;AAEhB,IAAM,YAAoB;AAAA,
|
|
4
|
+
"sourcesContent": ["import type { Config } from 'stylelint';\nimport stylelintScss from 'stylelint-scss';\nimport bemPattern from 'stylelint-selector-bem-pattern';\n\nexport const stylelint: Config = {\n // Stylelint resolves config for cwd when picking a formatter; without a\n // top-level `rules` an overrides-only config fails with \"No rules found\".\n rules: {},\n overrides: [\n {\n files: ['**/*.scss', '**/*.css'],\n extends: [\n 'stylelint-config-standard',\n 'stylelint-config-standard-scss',\n 'stylelint-config-recess-order'\n ],\n plugins: [...stylelintScss, bemPattern],\n rules: {\n 'selector-class-pattern':\n '^(?:(?:o|c|u|t|s|is|has|_|js|qa)-)?[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*(?:__[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:--[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:\\\\[.+\\\\])?$',\n 'plugin/selector-bem-pattern': {\n preset: 'bem',\n implicitComponents: ['**/*.component.scss', '**/*.component.css'],\n ignoreCustomProperties: ['^--mdc', '^--sys']\n },\n 'no-descending-specificity': null\n }\n }\n ]\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4BAA0B;AAC1B,4CAAuB;AAEhB,IAAM,YAAoB;AAAA;AAAA;AAAA,EAG/B,OAAO,CAAC;AAAA,EACR,WAAW;AAAA,IACT;AAAA,MACE,OAAO,CAAC,aAAa,UAAU;AAAA,MAC/B,SAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS,CAAC,GAAG,sBAAAA,SAAe,sCAAAC,OAAU;AAAA,MACtC,OAAO;AAAA,QACL,0BACE;AAAA,QACF,+BAA+B;AAAA,UAC7B,QAAQ;AAAA,UACR,oBAAoB,CAAC,uBAAuB,oBAAoB;AAAA,UAChE,wBAAwB,CAAC,UAAU,QAAQ;AAAA,QAC7C;AAAA,QACA,6BAA6B;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
6
|
"names": ["stylelintScss", "bemPattern"]
|
|
7
7
|
}
|
package/stylelint.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stylelint.d.ts","sourceRoot":"","sources":["../../../../packages/lint-suite/src/stylelint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAIxC,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"stylelint.d.ts","sourceRoot":"","sources":["../../../../packages/lint-suite/src/stylelint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAIxC,eAAO,MAAM,SAAS,EAAE,MAyBvB,CAAC"}
|
package/stylelint.js
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
import stylelintScss from "stylelint-scss";
|
|
3
3
|
import bemPattern from "stylelint-selector-bem-pattern";
|
|
4
4
|
var stylelint = {
|
|
5
|
+
// Stylelint resolves config for cwd when picking a formatter; without a
|
|
6
|
+
// top-level `rules` an overrides-only config fails with "No rules found".
|
|
7
|
+
rules: {},
|
|
5
8
|
overrides: [
|
|
6
9
|
{
|
|
7
10
|
files: ["**/*.scss", "**/*.css"],
|
package/stylelint.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../packages/lint-suite/src/stylelint.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Config } from 'stylelint';\nimport stylelintScss from 'stylelint-scss';\nimport bemPattern from 'stylelint-selector-bem-pattern';\n\nexport const stylelint: Config = {\n overrides: [\n {\n files: ['**/*.scss', '**/*.css'],\n extends: [\n 'stylelint-config-standard',\n 'stylelint-config-standard-scss',\n 'stylelint-config-recess-order'\n ],\n plugins: [...stylelintScss, bemPattern],\n rules: {\n 'selector-class-pattern':\n '^(?:(?:o|c|u|t|s|is|has|_|js|qa)-)?[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*(?:__[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:--[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:\\\\[.+\\\\])?$',\n 'plugin/selector-bem-pattern': {\n preset: 'bem',\n implicitComponents: ['**/*.component.scss', '**/*.component.css'],\n ignoreCustomProperties: ['^--mdc', '^--sys']\n },\n 'no-descending-specificity': null\n }\n }\n ]\n};\n"],
|
|
5
|
-
"mappings": ";AACA,OAAO,mBAAmB;AAC1B,OAAO,gBAAgB;AAEhB,IAAM,YAAoB;AAAA,
|
|
4
|
+
"sourcesContent": ["import type { Config } from 'stylelint';\nimport stylelintScss from 'stylelint-scss';\nimport bemPattern from 'stylelint-selector-bem-pattern';\n\nexport const stylelint: Config = {\n // Stylelint resolves config for cwd when picking a formatter; without a\n // top-level `rules` an overrides-only config fails with \"No rules found\".\n rules: {},\n overrides: [\n {\n files: ['**/*.scss', '**/*.css'],\n extends: [\n 'stylelint-config-standard',\n 'stylelint-config-standard-scss',\n 'stylelint-config-recess-order'\n ],\n plugins: [...stylelintScss, bemPattern],\n rules: {\n 'selector-class-pattern':\n '^(?:(?:o|c|u|t|s|is|has|_|js|qa)-)?[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*(?:__[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:--[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:\\\\[.+\\\\])?$',\n 'plugin/selector-bem-pattern': {\n preset: 'bem',\n implicitComponents: ['**/*.component.scss', '**/*.component.css'],\n ignoreCustomProperties: ['^--mdc', '^--sys']\n },\n 'no-descending-specificity': null\n }\n }\n ]\n};\n"],
|
|
5
|
+
"mappings": ";AACA,OAAO,mBAAmB;AAC1B,OAAO,gBAAgB;AAEhB,IAAM,YAAoB;AAAA;AAAA;AAAA,EAG/B,OAAO,CAAC;AAAA,EACR,WAAW;AAAA,IACT;AAAA,MACE,OAAO,CAAC,aAAa,UAAU;AAAA,MAC/B,SAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS,CAAC,GAAG,eAAe,UAAU;AAAA,MACtC,OAAO;AAAA,QACL,0BACE;AAAA,QACF,+BAA+B;AAAA,UAC7B,QAAQ;AAAA,UACR,oBAAoB,CAAC,uBAAuB,oBAAoB;AAAA,UAChE,wBAAwB,CAAC,UAAU,QAAQ;AAAA,QAC7C;AAAA,QACA,6BAA6B;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|