lint-suite 1.3.1 → 1.3.7

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/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 Art
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Art
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,167 +1,167 @@
1
- # Lint Suite
2
-
3
- A comprehensive collection of ESLint Flat configurations for modern web applications.
4
-
5
- ## Features
6
-
7
- - **TypeScript Linting**: Strict typing rules, v8 type-safety replacements, consistent imports, and code organization
8
- - **Angular Support**: Component best practices (including Signals), Angular 21+ template rules, and modern control flow
9
- - **RxJS Guidelines**: Observable patterns, Finnish notation, subject encapsulation, and operator safety
10
- - **Code Style**: Formatting rules, line limits, and structural consistency
11
- - **Accessibility**: ARIA validation, keyboard events, and semantic HTML
12
- - **Testing**: Jest, Vitest, and Playwright configurations with best-practice rules
13
- - **Prettier**: Automatic disabling of formatting rules that conflict with Prettier
14
- - **Architecture**: Module boundary enforcement with `eslint-plugin-boundaries`
15
- - **Additional Support**: JSON (with comment support for tsconfig), Storybook CSF enforcement
16
-
17
- ## Installation
18
-
19
- ```bash
20
- pnpm add -D lint-suite
21
- ```
22
-
23
- ## Dependencies
24
-
25
- ```bash
26
- pnpm add -D eslint typescript-eslint eslint-config-prettier
27
- ```
28
-
29
- ## Usage
30
-
31
- Create an `eslint.config.mjs` file in your project root:
32
-
33
- ```js
34
- import { recommended } from 'lint-suite';
35
-
36
- export default [...recommended];
37
- ```
38
-
39
- Or selectively include configurations:
40
-
41
- ```js
42
- import { base, javascript, typescript, prettier } from 'lint-suite';
43
-
44
- export default [
45
- ...base,
46
- ...javascript,
47
- ...typescript,
48
- ...prettier // Must be last to disable conflicting formatting rules
49
- ];
50
- ```
51
-
52
- ## Available Configurations
53
-
54
- | Configuration | Description |
55
- | ------------------- | -------------------------------------------------------- |
56
- | `base` | Core JavaScript rules, formatting, and complexity limits |
57
- | `javascript` | JavaScript-specific rules via `@nx/eslint-plugin` |
58
- | `typescript` | TypeScript strict typing, imports, and naming conventions |
59
- | `angular` | Angular component best practices with Signal support |
60
- | `angularTemplate` | HTML template rules with accessibility and performance |
61
- | `rxjs` | Observable patterns, operator safety, and subscriptions |
62
- | `jest` | Jest testing best practices and matchers |
63
- | `vitest` | Vitest testing rules and matcher improvements |
64
- | `playwright` | Playwright e2e locator and matcher best practices |
65
- | `json` | JSON linting with comment support for tsconfig/vscode |
66
- | `storybook` | Storybook CSF enforcement |
67
- | `boundaries` | Module boundary rules (feature, data-access, ui, etc.) |
68
- | `prettier` | Disables rules that conflict with Prettier (use last) |
69
- | **`recommended`** | **All of the above combined in the correct order** |
70
-
71
- ## Customization
72
-
73
- You can override any rules by adding a `rules` section to your ESLint config:
74
-
75
- ```js
76
- import { typescript, prettier } from 'lint-suite';
77
-
78
- export default [
79
- ...typescript,
80
- {
81
- rules: {
82
- '@typescript-eslint/explicit-function-return-type': 'off'
83
- }
84
- },
85
- ...prettier
86
- ];
87
- ```
88
-
89
- ## Available Rules (you can add more as you prefer)
90
-
91
- ### nx/eslint-plugin
92
-
93
- - `@nx/enforce-module-boundaries`: Enforces module boundary restrictions
94
- - `@nx/dependency-checks`: Validates dependencies in workspace projects
95
- - ...
96
-
97
- ### eslint-plugin-jest
98
-
99
- - `jest/consistent-test-it`: Enforces consistent test function usage (`it`)
100
- - `jest/prefer-comparison-matcher`: Enforces comparison matchers
101
- - `jest/prefer-hooks-on-top`: Ensures hooks are at the top of describe blocks
102
- - `jest/no-conditional-in-test`: Warns against conditionals in tests
103
- - ...
104
-
105
- ### @vitest/eslint-plugin
106
-
107
- - `vitest/max-nested-describe`: Limits describe nesting depth
108
- - `vitest/prefer-to-be`: Enforces `toBe` matcher usage
109
- - `vitest/no-conditional-in-test`: Disallows conditionals in tests
110
- - ...
111
-
112
- ### eslint-plugin-playwright
113
-
114
- - `playwright/prefer-locator`: Enforces modern locator API
115
- - `playwright/prefer-native-locators`: Prefers native locator methods
116
- - `playwright/prefer-to-be`: Enforces `toBe` matcher usage
117
- - ...
118
-
119
- ### eslint-plugin-json
120
-
121
- - `json/json`: Validates JSON syntax
122
- - `json/sort-package-json`: Enforces consistent ordering in package.json
123
- - ...
124
-
125
- ### @smarttools/eslint-plugin-rxjs
126
-
127
- - `@rxjs/finnish`: Enforces Finnish notation for observables
128
- - `@rxjs/no-exposed-subjects`: Enforces subject encapsulation
129
- - `@rxjs/no-cyclic-action`: Prevents infinite loops in NgRx effects
130
- - `@rxjs/no-unsafe-takeuntil`: Ensures proper usage of takeUntil operator
131
- - ...
132
-
133
- ### eslint-plugin-storybook
134
-
135
- - `storybook/csf-component`: Enforces component property in stories
136
- - `storybook/no-stories-of`: Prevents deprecated `storiesOf` API
137
- - ...
138
-
139
- ### eslint-plugin-import-x
140
-
141
- - `import-x/no-cycle`: Detects circular dependencies
142
- - `import-x/no-self-import`: Prevents modules importing themselves
143
- - `import-x/order`: Enforces a consistent order of import statements
144
- - `import-x/consistent-type-specifier-style`: Consistent type import style
145
- - ...
146
-
147
- ### @stylistic/eslint-plugin
148
-
149
- - `@stylistic/max-len`: Enforces maximum line length
150
- - `@stylistic/indent`: Enforces consistent indentation
151
- - `@stylistic/quotes`: Enforces consistent quote style
152
- - ...
153
-
154
- ### eslint-config-prettier
155
-
156
- - Automatically disables all ESLint rules that conflict with Prettier
157
- - Must be the last configuration in the array
158
-
159
- ## Contributing
160
-
161
- See [CONTRIBUTING.md](./CONTRIBUTING.md) for contribution guidelines.
162
- See [CHANGELOG.md](./CHANGELOG.md) for version history.
163
- See [RELEASE_NOTES.md](./RELEASE_NOTES.md) for detailed release notes.
164
-
165
- ## License
166
-
167
- MIT
1
+ # Lint Suite
2
+
3
+ A comprehensive collection of ESLint Flat configurations for modern web applications.
4
+
5
+ ## Features
6
+
7
+ - **TypeScript Linting**: Strict typing rules, v8 type-safety replacements, consistent imports, and code organization
8
+ - **Angular Support**: Component best practices (including Signals), Angular 21+ template rules, and modern control flow
9
+ - **RxJS Guidelines**: Observable patterns, Finnish notation, subject encapsulation, and operator safety
10
+ - **Code Style**: Formatting rules, line limits, and structural consistency
11
+ - **Accessibility**: ARIA validation, keyboard events, and semantic HTML
12
+ - **Testing**: Jest, Vitest, and Playwright configurations with best-practice rules
13
+ - **Prettier**: Automatic disabling of formatting rules that conflict with Prettier
14
+ - **Architecture**: Module boundary enforcement with `eslint-plugin-boundaries`
15
+ - **Additional Support**: JSON (with comment support for tsconfig), Storybook CSF enforcement
16
+
17
+ ## Installation
18
+
19
+ ```bash
20
+ pnpm add -D lint-suite
21
+ ```
22
+
23
+ ## Dependencies
24
+
25
+ ```bash
26
+ pnpm add -D eslint typescript-eslint eslint-config-prettier
27
+ ```
28
+
29
+ ## Usage
30
+
31
+ Create an `eslint.config.mjs` file in your project root:
32
+
33
+ ```js
34
+ import { recommended } from 'lint-suite';
35
+
36
+ export default [...recommended];
37
+ ```
38
+
39
+ Or selectively include configurations:
40
+
41
+ ```js
42
+ import { base, javascript, typescript, prettier } from 'lint-suite';
43
+
44
+ export default [
45
+ ...base,
46
+ ...javascript,
47
+ ...typescript,
48
+ ...prettier // Must be last to disable conflicting formatting rules
49
+ ];
50
+ ```
51
+
52
+ ## Available Configurations
53
+
54
+ | Configuration | Description |
55
+ | ------------------- | -------------------------------------------------------- |
56
+ | `base` | Core JavaScript rules, formatting, and complexity limits |
57
+ | `javascript` | JavaScript-specific rules via `@nx/eslint-plugin` |
58
+ | `typescript` | TypeScript strict typing, imports, and naming conventions |
59
+ | `angular` | Angular component best practices with Signal support |
60
+ | `angularTemplate` | HTML template rules with accessibility and performance |
61
+ | `rxjs` | Observable patterns, operator safety, and subscriptions |
62
+ | `jest` | Jest testing best practices and matchers |
63
+ | `vitest` | Vitest testing rules and matcher improvements |
64
+ | `playwright` | Playwright e2e locator and matcher best practices |
65
+ | `json` | JSON linting with comment support for tsconfig/vscode |
66
+ | `storybook` | Storybook CSF enforcement |
67
+ | `boundaries` | Module boundary rules (feature, data-access, ui, etc.) |
68
+ | `prettier` | Disables rules that conflict with Prettier (use last) |
69
+ | **`recommended`** | **All of the above combined in the correct order** |
70
+
71
+ ## Customization
72
+
73
+ You can override any rules by adding a `rules` section to your ESLint config:
74
+
75
+ ```js
76
+ import { typescript, prettier } from 'lint-suite';
77
+
78
+ export default [
79
+ ...typescript,
80
+ {
81
+ rules: {
82
+ '@typescript-eslint/explicit-function-return-type': 'off'
83
+ }
84
+ },
85
+ ...prettier
86
+ ];
87
+ ```
88
+
89
+ ## Available Rules (you can add more as you prefer)
90
+
91
+ ### nx/eslint-plugin
92
+
93
+ - `@nx/enforce-module-boundaries`: Enforces module boundary restrictions
94
+ - `@nx/dependency-checks`: Validates dependencies in workspace projects
95
+ - ...
96
+
97
+ ### eslint-plugin-jest
98
+
99
+ - `jest/consistent-test-it`: Enforces consistent test function usage (`it`)
100
+ - `jest/prefer-comparison-matcher`: Enforces comparison matchers
101
+ - `jest/prefer-hooks-on-top`: Ensures hooks are at the top of describe blocks
102
+ - `jest/no-conditional-in-test`: Warns against conditionals in tests
103
+ - ...
104
+
105
+ ### @vitest/eslint-plugin
106
+
107
+ - `vitest/max-nested-describe`: Limits describe nesting depth
108
+ - `vitest/prefer-to-be`: Enforces `toBe` matcher usage
109
+ - `vitest/no-conditional-in-test`: Disallows conditionals in tests
110
+ - ...
111
+
112
+ ### eslint-plugin-playwright
113
+
114
+ - `playwright/prefer-locator`: Enforces modern locator API
115
+ - `playwright/prefer-native-locators`: Prefers native locator methods
116
+ - `playwright/prefer-to-be`: Enforces `toBe` matcher usage
117
+ - ...
118
+
119
+ ### eslint-plugin-json
120
+
121
+ - `json/json`: Validates JSON syntax
122
+ - `json/sort-package-json`: Enforces consistent ordering in package.json
123
+ - ...
124
+
125
+ ### @smarttools/eslint-plugin-rxjs
126
+
127
+ - `@rxjs/finnish`: Enforces Finnish notation for observables
128
+ - `@rxjs/no-exposed-subjects`: Enforces subject encapsulation
129
+ - `@rxjs/no-cyclic-action`: Prevents infinite loops in NgRx effects
130
+ - `@rxjs/no-unsafe-takeuntil`: Ensures proper usage of takeUntil operator
131
+ - ...
132
+
133
+ ### eslint-plugin-storybook
134
+
135
+ - `storybook/csf-component`: Enforces component property in stories
136
+ - `storybook/no-stories-of`: Prevents deprecated `storiesOf` API
137
+ - ...
138
+
139
+ ### eslint-plugin-import-x
140
+
141
+ - `import-x/no-cycle`: Detects circular dependencies
142
+ - `import-x/no-self-import`: Prevents modules importing themselves
143
+ - `import-x/order`: Enforces a consistent order of import statements
144
+ - `import-x/consistent-type-specifier-style`: Consistent type import style
145
+ - ...
146
+
147
+ ### @stylistic/eslint-plugin
148
+
149
+ - `@stylistic/max-len`: Enforces maximum line length
150
+ - `@stylistic/indent`: Enforces consistent indentation
151
+ - `@stylistic/quotes`: Enforces consistent quote style
152
+ - ...
153
+
154
+ ### eslint-config-prettier
155
+
156
+ - Automatically disables all ESLint rules that conflict with Prettier
157
+ - Must be the last configuration in the array
158
+
159
+ ## Contributing
160
+
161
+ See [CONTRIBUTING.md](./CONTRIBUTING.md) for contribution guidelines.
162
+ See [CHANGELOG.md](./CHANGELOG.md) for version history.
163
+ See [RELEASE_NOTES.md](./RELEASE_NOTES.md) for detailed release notes.
164
+
165
+ ## License
166
+
167
+ MIT
package/index.cjs CHANGED
@@ -631,7 +631,7 @@ var explicit_accessibility_default = createRule({
631
631
  }
632
632
  }
633
633
  context.report({
634
- node: reportNode,
634
+ node: reportNode ?? node,
635
635
  messageId: "missingAccessibility",
636
636
  data: { name },
637
637
  fix(fixer) {
@@ -768,7 +768,10 @@ var typescript = (0, import_config10.defineConfig)([
768
768
  // Strict type-checked rules
769
769
  "@typescript-eslint/no-unnecessary-condition": "error",
770
770
  // Catches always-true/false conditions
771
- "@typescript-eslint/no-confusing-void-expression": "error",
771
+ "@typescript-eslint/no-confusing-void-expression": [
772
+ "error",
773
+ { ignoreArrowShorthand: true, ignoreVoidOperator: true }
774
+ ],
772
775
  // Prevent confusing void usage
773
776
  "@typescript-eslint/no-dynamic-delete": "error",
774
777
  // Use Map instead of delete obj[key]
@@ -908,8 +911,7 @@ var typescript = (0, import_config10.defineConfig)([
908
911
  settings: {
909
912
  "import-x/resolver-next": [
910
913
  (0, import_eslint_import_resolver_typescript.createTypeScriptImportResolver)({
911
- alwaysTryTypes: true,
912
- project: "tsconfig.base.json"
914
+ alwaysTryTypes: true
913
915
  })
914
916
  ]
915
917
  }
package/index.cjs.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../packages/lint-suite/src/index.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/jest.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';\r\nimport { angularTemplate } from './lib/angular-template.js';\r\nimport { angular } from './lib/angular.js';\r\nimport { base } from './lib/base.js';\r\nimport { javascript } from './lib/javascript.js';\r\nimport { jest } from './lib/jest.js';\r\nimport { json } from './lib/json.js';\r\nimport { prettier } from './lib/prettier.js';\r\nimport { rxjs } from './lib/rxjs.js';\r\nimport { storybook } from './lib/storybook.js';\r\nimport { typescript } from './lib/typescript.js';\r\nimport { vitest } from './lib/vitest.js';\r\nimport { playwright } from './lib/playwright.js';\r\nimport { boundaries } from './lib/boundaries.js';\r\n\r\nexport const recommended: ConfigArray = [\r\n ...base,\r\n ...javascript,\r\n ...typescript,\r\n ...angular,\r\n ...angularTemplate,\r\n ...rxjs,\r\n ...jest,\r\n ...json,\r\n ...boundaries,\r\n ...storybook,\r\n ...vitest,\r\n ...playwright,\r\n ...prettier // Must be last to disable formatting rules that conflict with Prettier\r\n];\r\n\r\nexport {\r\n base,\r\n javascript,\r\n typescript,\r\n angular,\r\n angularTemplate,\r\n rxjs,\r\n jest,\r\n json,\r\n boundaries,\r\n storybook,\r\n vitest,\r\n playwright,\r\n prettier\r\n};\r\n", "import { configs } from 'angular-eslint';\r\nimport { defineConfig } from 'eslint/config';\r\nimport type { Config } from 'eslint/config';\r\n\r\nexport const angularTemplate = defineConfig([\r\n {\r\n files: ['**/*.html'],\r\n extends: [\r\n ...(configs.templateAccessibility as Config[]),\r\n ...(configs.templateRecommended as Config[])\r\n ],\r\n rules: {\r\n '@angular-eslint/template/prefer-template-literal': 'error',\r\n '@angular-eslint/template/no-any': 'error',\r\n '@angular-eslint/template/no-duplicate-attributes': 'error',\r\n '@angular-eslint/template/button-has-type': 'error',\r\n '@angular-eslint/template/no-positive-tabindex': 'error',\r\n '@angular-eslint/template/valid-aria': 'error',\r\n '@angular-eslint/template/alt-text': 'error',\r\n '@angular-eslint/template/elements-content': 'error',\r\n '@angular-eslint/template/click-events-have-key-events': 'error',\r\n '@angular-eslint/template/mouse-events-have-key-events': 'error',\r\n '@angular-eslint/template/table-scope': 'error',\r\n '@angular-eslint/template/no-autofocus': 'error',\r\n '@angular-eslint/template/no-distracting-elements': 'error',\r\n '@angular-eslint/template/prefer-control-flow': 'error',\r\n '@angular-eslint/template/prefer-self-closing-tags': 'error',\r\n '@angular-eslint/template/prefer-ngsrc': 'error',\r\n '@angular-eslint/template/prefer-built-in-pipes': 'error',\r\n '@angular-eslint/template/no-interpolation-in-attributes': 'error',\r\n '@angular-eslint/template/no-nested-tags': 'error',\r\n '@angular-eslint/template/use-track-by-function': 'error',\r\n '@angular-eslint/template/label-has-associated-control': 'error',\r\n '@angular-eslint/template/prefer-at-else': 'error', // v21: @if/@else syntax\r\n '@angular-eslint/template/prefer-at-empty': 'error', // v21: @for/@empty syntax\r\n '@angular-eslint/template/prefer-contextual-for-variables': 'error', // v21: Use $index, $first, etc.\r\n '@angular-eslint/template/no-empty-control-flow': 'error', // v21: Catch incomplete refactoring\r\n '@angular-eslint/template/prefer-class-binding': 'error', // v21.2.0: Prefer [class] over ngClass\r\n '@angular-eslint/template/prefer-static-string-properties': 'error', // Reduce change detection\r\n '@angular-eslint/template/conditional-complexity': [\r\n 'warn',\r\n { maxComplexity: 5 }\r\n ], // Template readability\r\n '@angular-eslint/template/attributes-order': [\r\n 'error',\r\n {\r\n alphabetical: true,\r\n order: [\r\n 'STRUCTURAL_DIRECTIVE', // e.g. `*ngIf=\"true\"`, `*ngFor=\"let item of items\"`\r\n 'TEMPLATE_REFERENCE', // e.g. `<input #inputRef>`\r\n 'INPUT_BINDING', // e.g. `[id]=\"3\"`, `[attr.colspan]=\"colspan\"`, [style.width.%]=\"100\", [@triggerName]=\"expression\", `bind-id=\"handleChange()\"`\r\n 'TWO_WAY_BINDING', // e.g. `[(id)]=\"id\"`, `bindon-id=\"id\"\r\n 'ATTRIBUTE_BINDING', // e.g. `<input required>`, `id=\"3\"`\r\n 'OUTPUT_BINDING' // e.g. `(idChange)=\"handleChange()\"`, `on-id=\"handleChange()\"`\r\n ]\r\n }\r\n ]\r\n }\r\n }\r\n]);\r\n", "import globals from 'globals';\r\nimport { configs, processInlineTemplates } from 'angular-eslint';\r\nimport { defineConfig } from 'eslint/config';\r\nimport type { Config } from 'eslint/config';\r\n\r\nexport const angular = defineConfig([\r\n {\r\n files: ['**/*.ts'],\r\n extends: [...(configs.tsRecommended as Config[])],\r\n languageOptions: {\r\n globals: {\r\n ...globals.browser,\r\n ...globals.es2025,\r\n ...globals.node\r\n }\r\n },\r\n processor: processInlineTemplates,\r\n rules: {\r\n '@angular-eslint/prefer-on-push-component-change-detection': 'error',\r\n '@angular-eslint/prefer-signals': 'error',\r\n '@angular-eslint/use-injectable-provided-in': 'error',\r\n '@angular-eslint/prefer-signal-model': 'error',\r\n '@angular-eslint/no-uncalled-signals': 'error',\r\n '@angular-eslint/prefer-host-metadata-property': 'error',\r\n '@angular-eslint/no-implicit-take-until-destroyed': 'error', // v21.2.0: Enforce explicit DestroyRef\r\n '@angular-eslint/no-async-lifecycle-method': 'error', // Prevent async lifecycle hooks\r\n '@angular-eslint/prefer-output-readonly': 'warn', // Prevent accidental reassignment\r\n '@angular-eslint/prefer-output-emitter-ref': 'warn', // Modern output() function over @Output()\r\n '@angular-eslint/sort-lifecycle-methods': 'warn' // Consistent lifecycle method ordering\r\n }\r\n }\r\n]);\r\n", "import { configs } from '@nx/eslint-plugin';\r\nimport stylistic from '@stylistic/eslint-plugin';\r\nimport importPluginX from 'eslint-plugin-import-x';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const base = defineConfig([\r\n { extends: [...configs['flat/base']] },\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n extends: [importPluginX.flatConfigs.recommended]\r\n },\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n extends: [stylistic.configs.recommended]\r\n },\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n rules: {\r\n 'no-param-reassign': 'error',\r\n 'no-alert': 'error',\r\n 'no-console': ['warn', { allow: ['warn', 'error'] }],\r\n 'no-debugger': 'error',\r\n eqeqeq: ['error', 'always', { null: 'ignore' }],\r\n curly: ['error', 'multi'],\r\n 'prefer-const': ['error', { destructuring: 'all' }],\r\n 'no-var': 'error',\r\n 'object-shorthand': 'error',\r\n 'prefer-arrow-callback': 'error',\r\n 'no-useless-concat': 'error',\r\n 'prefer-template': 'error',\r\n 'no-nested-ternary': 'error',\r\n 'no-useless-assignment': 'error', // NEW: Catch unused assignments (ESLint v9)\r\n 'no-object-constructor': 'error', // Disallow new Object() without arguments\r\n 'no-else-return': ['error', { allowElseIf: false }], // Prefer early returns\r\n 'no-multi-assign': 'error', // Disallow chaining assignments\r\n radix: 'error', // Require radix parameter for parseInt()\r\n yoda: 'error', // Disallow yoda conditions (`if (\"red\" === color)`)\r\n complexity: ['warn', 10], // Warn if function complexity is high\r\n 'max-depth': ['warn', 4], // Warn on deeply nested blocks\r\n 'max-lines-per-function': [\r\n 'warn',\r\n { max: 50, skipBlankLines: true, skipComments: true }\r\n ], // Warn on long functions\r\n 'max-params': ['warn', 4], // Warn on functions with many parameters\r\n 'no-lonely-if': 'error', // Disallow if statements as the only statement in an else block\r\n 'grouped-accessor-pairs': ['error', 'getBeforeSet'], // Enforce consistency for getters/setters\r\n 'class-methods-use-this': 'error',\r\n 'no-underscore-dangle': 'error',\r\n 'max-len': [\r\n 'error',\r\n {\r\n code: 135,\r\n ignoreComments: true\r\n }\r\n ],\r\n 'spaced-comment': [\r\n 2,\r\n 'always',\r\n {\r\n block: {\r\n exceptions: ['*']\r\n }\r\n }\r\n ],\r\n '@stylistic/padding-line-between-statements': [\r\n 'error',\r\n {\r\n blankLine: 'always',\r\n prev: 'export',\r\n next: ['export', 'const']\r\n },\r\n {\r\n blankLine: 'always',\r\n prev: ['const', 'let', 'var'],\r\n next: '*'\r\n },\r\n {\r\n blankLine: 'any',\r\n prev: ['const', 'let', 'var'],\r\n next: ['const', 'let', 'var']\r\n },\r\n {\r\n blankLine: 'always',\r\n prev: '*',\r\n next: [\r\n 'for',\r\n 'if',\r\n 'return',\r\n 'throw',\r\n 'switch',\r\n 'try',\r\n 'class',\r\n 'function'\r\n ]\r\n }\r\n ],\r\n '@stylistic/comma-dangle': [\r\n 'error',\r\n {\r\n functions: 'never',\r\n arrays: 'always-multiline',\r\n exports: 'always-multiline',\r\n imports: 'always-multiline',\r\n objects: 'always-multiline',\r\n enums: 'always-multiline'\r\n }\r\n ],\r\n '@stylistic/indent': [\r\n 'error',\r\n 2,\r\n {\r\n offsetTernaryExpressions: true,\r\n SwitchCase: 1,\r\n ignoredNodes: [\r\n 'TSTypeParameterInstantiation',\r\n 'FunctionExpression > .params > :matches(Decorator, :not(:first-child))'\r\n ]\r\n }\r\n ],\r\n 'sort-imports': [\r\n 'error',\r\n {\r\n ignoreCase: false,\r\n ignoreDeclarationSort: true,\r\n ignoreMemberSort: false,\r\n memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],\r\n allowSeparatedGroups: true\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts',\r\n '**/*.html'\r\n ],\r\n rules: {\r\n 'max-lines': [\r\n 'error',\r\n {\r\n max: 150,\r\n skipBlankLines: true,\r\n skipComments: true\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n files: [\r\n '**/*.spec.ts',\r\n '**/*.test.ts',\r\n '**/*.spec.js',\r\n '**/*.test.js',\r\n '**/*.e2e.ts',\r\n '**/*.e2e.js'\r\n ],\r\n rules: {\r\n 'max-lines-per-function': 'off',\r\n complexity: ['warn', { max: 3 }],\r\n 'max-lines': [\r\n 'error',\r\n {\r\n max: 300,\r\n skipBlankLines: true,\r\n skipComments: true\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n files: ['**/*.action.ts'],\r\n rules: {\r\n 'max-classes-per-file': 'off'\r\n }\r\n },\r\n {\r\n files: ['**/*.state.ts'],\r\n rules: {\r\n 'class-methods-use-this': 'off'\r\n }\r\n }\r\n]);\r\n", "import { configs } from '@nx/eslint-plugin';\r\nimport { defineConfig } from 'eslint/config';\r\nimport type { Config } from 'eslint/config';\r\n\r\nexport const javascript = defineConfig({\r\n files: ['**/*.js', '**/*.jsx', '**/*.cjs', '**/*.mjs'],\r\n extends: [...(configs['flat/javascript'] as Config[])]\r\n});\r\n", "import jestEslint from 'eslint-plugin-jest';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const jest = defineConfig([\r\n {\r\n files: ['**/*.spec.ts', '**/*.spec.js'],\r\n extends: [jestEslint.configs['flat/recommended']],\r\n rules: {\r\n 'jest/no-done-callback': 'off',\r\n // Elevated from recommended defaults\r\n 'jest/no-focused-tests': 'error',\r\n 'jest/no-identical-title': 'error',\r\n 'jest/valid-expect': 'error',\r\n // Style rules (selective additions from flat/style)\r\n 'jest/prefer-to-be': 'warn',\r\n 'jest/prefer-to-contain': 'warn',\r\n 'jest/prefer-to-have-length': 'warn',\r\n // Best practice additions\r\n 'jest/consistent-test-it': ['error', { fn: 'it' }],\r\n 'jest/prefer-comparison-matcher': 'error',\r\n 'jest/prefer-equality-matcher': 'error',\r\n 'jest/prefer-hooks-on-top': 'error',\r\n 'jest/prefer-spy-on': 'error',\r\n 'jest/prefer-strict-equal': 'warn',\r\n 'jest/prefer-mock-promise-shorthand': 'error',\r\n 'jest/no-conditional-in-test': 'warn',\r\n 'jest/no-duplicate-hooks': 'error',\r\n 'jest/no-test-return-statement': 'error',\r\n 'jest/require-to-throw-message': 'warn'\r\n }\r\n }\r\n]);\r\n", "import jsonEslint from 'eslint-plugin-json';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const json = defineConfig([\r\n {\r\n files: ['**/*.json'],\r\n extends: [jsonEslint.configs.recommended]\r\n },\r\n {\r\n files: ['**/tsconfig*.json', '**/.vscode/*.json'],\r\n extends: [jsonEslint.configs['recommended-with-comments']]\r\n }\r\n]);\r\n", "import eslintConfigPrettier from 'eslint-config-prettier';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const prettier = defineConfig([eslintConfigPrettier]);\r\n", "import rxjsEslint from '@smarttools/eslint-plugin-rxjs';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const rxjs = defineConfig([\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n languageOptions: {\r\n parserOptions: {\r\n projectService: true\r\n }\r\n },\r\n extends: [rxjsEslint.configs.recommended]\r\n },\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n plugins: {\r\n rxjs: rxjsEslint\r\n }\r\n },\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n rules: {\r\n 'rxjs/prefer-observer': 'error',\r\n 'rxjs/finnish': 'warn',\r\n 'rxjs/no-ignored-subscription': 'warn',\r\n 'rxjs/no-ignored-error': 'warn',\r\n 'rxjs/no-unsafe-switchmap': 'error',\r\n 'rxjs/no-unsafe-takeuntil': 'error',\r\n 'rxjs/no-unsafe-catch': 'error',\r\n 'rxjs/no-unsafe-first': 'error',\r\n 'rxjs/no-topromise': 'error',\r\n 'rxjs/throw-error': 'error',\r\n 'rxjs/no-async-subscribe': 'off',\r\n 'rxjs/no-exposed-subjects': 'error', // Enforce subject encapsulation\r\n 'rxjs/no-cyclic-action': 'error', // Prevent infinite loops in NgRx effects\r\n 'rxjs/no-subscribe-handlers': 'warn' // Prefer observer objects (complements prefer-observer)\r\n }\r\n },\r\n {\r\n files: ['**/*.spec.ts', '**/*.test.ts', '**/*.spec.js', '**/*.test.js'],\r\n rules: {\r\n 'rxjs/no-ignored-subscription': 'off',\r\n 'rxjs/no-subscribe-handlers': 'off'\r\n }\r\n }\r\n]);\r\n", "import storybookEslint from 'eslint-plugin-storybook';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const storybook = defineConfig([\r\n {\r\n ignores: ['!.storybook'],\r\n files: ['**/*.stories.ts'],\r\n extends: [storybookEslint.configs['flat/recommended']],\r\n rules: {\r\n 'storybook/csf-component': 'warn', // Ensure component property is set\r\n 'storybook/no-stories-of': 'error' // Prevent deprecated storiesOf API\r\n }\r\n }\r\n]);\r\n", "import { configs } from '@nx/eslint-plugin';\r\nimport { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';\r\nimport importPluginX from 'eslint-plugin-import-x';\r\nimport { defineConfig } from 'eslint/config';\r\nimport type { Config } from 'eslint/config';\r\n\r\nimport explicitAccessibilityRule from './rules/explicit-accessibility.js';\r\n\r\nconst localTypescriptRules: Record<string, unknown> = {\r\n rules: {\r\n 'explicit-accessibility': explicitAccessibilityRule\r\n }\r\n};\r\n\r\nexport const typescript = defineConfig([\r\n // NOTE: Checks for 'prettier' and 'eslint-plugin-prettier'\r\n {\r\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\r\n extends: [\r\n importPluginX.flatConfigs.typescript,\r\n ...(configs['flat/typescript'] as Config[])\r\n ]\r\n },\r\n {\r\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\r\n plugins: { local: localTypescriptRules },\r\n rules: {\r\n 'local/explicit-accessibility': 'error',\r\n '@typescript-eslint/explicit-member-accessibility': 'error',\r\n '@typescript-eslint/explicit-function-return-type': 'error',\r\n '@typescript-eslint/no-empty-function': 'error',\r\n '@typescript-eslint/no-unused-vars': 'error',\r\n '@typescript-eslint/no-use-before-define': 'error',\r\n\r\n // A. Eliminating `any` (already covered by strict-type-checked, but explicit for clarity)\r\n '@typescript-eslint/no-explicit-any': 'error',\r\n '@typescript-eslint/no-unsafe-assignment': 'error',\r\n '@typescript-eslint/no-unsafe-call': 'error',\r\n '@typescript-eslint/no-unsafe-member-access': 'error',\r\n '@typescript-eslint/no-unsafe-return': 'error',\r\n '@typescript-eslint/no-unsafe-argument': 'error',\r\n\r\n // New v8 type-safety rules (replacements for deprecated ban-types)\r\n '@typescript-eslint/no-empty-object-type': 'error', // Bans confusing {} type\r\n '@typescript-eslint/no-unsafe-function-type': 'error', // Bans Function type\r\n '@typescript-eslint/no-wrapper-object-types': 'error', // Bans Number, String, Boolean wrappers\r\n\r\n // B. Explicit Annotations (partially covered, explicit module boundaries is key)\r\n '@typescript-eslint/explicit-module-boundary-types': 'error',\r\n // Consider enabling if maximum explicitness is desired, even if verbose:\r\n\r\n // C. Null/Undefined Safety (Requires strictNullChecks)\r\n '@typescript-eslint/no-non-null-assertion': 'error',\r\n '@typescript-eslint/prefer-nullish-coalescing': 'error',\r\n '@typescript-eslint/prefer-optional-chain': 'error',\r\n\r\n // D. Promise Handling (Supplementing plugin:promise/recommended)\r\n '@typescript-eslint/no-floating-promises': [\r\n 'error',\r\n { ignoreVoid: true }\r\n ],\r\n '@typescript-eslint/no-misused-promises': 'warn', // Already in recommended-type-checked\r\n '@typescript-eslint/promise-function-async': 'error',\r\n '@typescript-eslint/await-thenable': 'error', // Already in recommended-type-checked\r\n\r\n // E. Best Practices & Potential Errors (Some covered by presets, fine-tuning here)\r\n '@typescript-eslint/no-inferrable-types': 'warn', // Keep as warn or disable if inference is preferred\r\n '@typescript-eslint/no-require-imports': 'error', // Use ES modules (replaces deprecated no-var-requires)\r\n '@typescript-eslint/only-throw-error': 'error', // Replaces deprecated no-throw-literal\r\n '@typescript-eslint/no-array-delete': 'error', // Prevents delete arr[0]\r\n '@typescript-eslint/return-await': ['error', 'in-try-catch'], // Better stack traces in try/catch\r\n '@typescript-eslint/require-await': 'error',\r\n '@typescript-eslint/restrict-template-expressions': [\r\n 'error',\r\n { allowNumber: true, allowBoolean: true }\r\n ], // Allow numbers/booleans in templates\r\n '@typescript-eslint/restrict-plus-operands': 'error', // Enforce consistent types for '+'\r\n '@typescript-eslint/prefer-as-const': 'error',\r\n '@typescript-eslint/no-shadow': 'error',\r\n '@typescript-eslint/switch-exhaustiveness-check': 'error', // Ensure switch on unions is exhaustive\r\n '@typescript-eslint/no-unused-expressions': [\r\n 'error',\r\n { allowShortCircuit: true, allowTernary: true }\r\n ],\r\n '@typescript-eslint/no-useless-constructor': 'error',\r\n '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], // Prefer dot notation where possible\r\n\r\n // Strict type-checked rules\r\n '@typescript-eslint/no-unnecessary-condition': 'error', // Catches always-true/false conditions\r\n '@typescript-eslint/no-confusing-void-expression': 'error', // Prevent confusing void usage\r\n '@typescript-eslint/no-dynamic-delete': 'error', // Use Map instead of delete obj[key]\r\n '@typescript-eslint/no-extraneous-class': ['error', { allowWithDecorator: true }], // Allow Angular classes\r\n '@typescript-eslint/no-invalid-void-type': 'error', // Restrict void to return types\r\n '@typescript-eslint/unified-signatures': 'error', // Merge overloads where possible\r\n '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error', // Forbids foo! ?? bar\r\n\r\n // Stylistic type-checked rules\r\n '@typescript-eslint/prefer-find': 'error', // Use find() instead of filter()[0]\r\n '@typescript-eslint/prefer-for-of': 'error', // Modern iteration\r\n '@typescript-eslint/prefer-includes': 'error', // indexOf() \u2192 includes()\r\n '@typescript-eslint/prefer-string-starts-ends-with': 'error', // Modern string methods\r\n '@typescript-eslint/prefer-regexp-exec': 'error', // Better regex performance\r\n\r\n // F. Consistency & Style (Some covered by stylistic-type-checked)\r\n '@typescript-eslint/consistent-type-assertions': [\r\n 'error',\r\n { assertionStyle: 'as', objectLiteralTypeAssertions: 'never' }\r\n ],\r\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\r\n '@typescript-eslint/consistent-type-imports': [\r\n 'error',\r\n { prefer: 'type-imports', fixStyle: 'separate-type-imports' }\r\n ],\r\n '@typescript-eslint/naming-convention': [\r\n 'error',\r\n {\r\n selector: 'objectLiteralProperty',\r\n modifiers: ['requiresQuotes'],\r\n format: null\r\n },\r\n {\r\n selector: 'objectLiteralProperty',\r\n format: ['camelCase', 'snake_case', 'PascalCase']\r\n },\r\n {\r\n selector: 'parameter',\r\n format: ['camelCase'],\r\n leadingUnderscore: 'allow'\r\n },\r\n { selector: 'default', format: ['camelCase'] },\r\n { selector: 'variable', format: ['camelCase', 'UPPER_CASE'] },\r\n { selector: 'function', format: ['camelCase'] },\r\n { selector: 'typeLike', format: ['PascalCase'] },\r\n {\r\n selector: 'property',\r\n modifiers: ['requiresQuotes'],\r\n format: null\r\n },\r\n {\r\n selector: 'property',\r\n format: ['camelCase', 'PascalCase', 'snake_case']\r\n }\r\n ],\r\n 'import-x/order': [\r\n 'error',\r\n {\r\n groups: [\r\n 'builtin',\r\n 'external',\r\n 'internal',\r\n ['parent', 'sibling'],\r\n 'index',\r\n 'unknown'\r\n ],\r\n pathGroups: [\r\n {\r\n pattern: '@angular/**',\r\n group: 'builtin',\r\n position: 'before'\r\n },\r\n {\r\n pattern: '@nestjs/**',\r\n group: 'builtin',\r\n position: 'before'\r\n },\r\n {\r\n pattern: '@shared/**',\r\n group: 'internal',\r\n position: 'before'\r\n },\r\n {\r\n pattern: '@backend/**',\r\n group: 'internal',\r\n position: 'before'\r\n },\r\n {\r\n pattern: '@frontend/**',\r\n group: 'internal',\r\n position: 'before'\r\n },\r\n {\r\n pattern: '@*/shared/**',\r\n group: 'internal',\r\n position: 'before'\r\n },\r\n {\r\n pattern: '@*/frontend/**',\r\n group: 'internal',\r\n position: 'after'\r\n },\r\n {\r\n pattern: '@*/backend/**',\r\n group: 'internal',\r\n position: 'after'\r\n }\r\n ],\r\n pathGroupsExcludedImportTypes: ['builtin'],\r\n 'newlines-between': 'always',\r\n alphabetize: { order: 'asc', caseInsensitive: true }\r\n }\r\n ],\r\n 'import-x/no-unresolved': 'error',\r\n 'import-x/no-duplicates': 'error',\r\n 'import-x/prefer-default-export': 'off',\r\n 'import-x/no-useless-path-segments': ['error', { noUselessIndex: true }],\r\n 'import-x/newline-after-import': 'error',\r\n 'import-x/first': 'error',\r\n 'import-x/no-mutable-exports': 'error',\r\n 'import-x/no-self-import': 'error', // Prevents modules importing themselves\r\n 'import-x/no-cycle': ['error', { maxDepth: 2, ignoreExternal: true }], // Prevents circular dependencies\r\n 'import-x/consistent-type-specifier-style': ['error', 'prefer-top-level'], // Consistent type imports\r\n 'import-x/no-anonymous-default-export': 'error' // Improve code searchability\r\n },\r\n settings: {\r\n 'import-x/resolver-next': [\r\n createTypeScriptImportResolver({\r\n alwaysTryTypes: true,\r\n project: 'tsconfig.base.json'\r\n })\r\n ]\r\n }\r\n },\r\n {\r\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\r\n languageOptions: {\r\n parserOptions: {\r\n projectService: true\r\n }\r\n },\r\n rules: {\r\n '@typescript-eslint/prefer-readonly': 'error'\r\n }\r\n },\r\n {\r\n files: ['**/*.action.ts'],\r\n rules: {\r\n '@typescript-eslint/no-namespace': 'off',\r\n '@typescript-eslint/no-extraneous-class': 'off'\r\n }\r\n },\r\n {\r\n files: [\r\n '**/*.spec.ts',\r\n '**/*.test.ts',\r\n '**/*.spec.js',\r\n '**/*.test.js',\r\n '**/*.e2e.ts',\r\n '**/*.e2e.js'\r\n ],\r\n rules: {\r\n '@typescript-eslint/no-empty-function': 'off',\r\n '@typescript-eslint/no-unbound-method': 'off',\r\n '@typescript-eslint/consistent-type-assertions': 'off'\r\n }\r\n },\r\n {\r\n files: ['**/*.stories.ts'],\r\n rules: {\r\n '@typescript-eslint/consistent-type-assertions': 'off',\r\n '@typescript-eslint/naming-convention': 'off'\r\n }\r\n }\r\n]);\r\n", "import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';\r\n\r\nconst createRule = ESLintUtils.RuleCreator(\r\n () => 'https://eslint.org/docs/latest/rules/no-unused-private-class-members'\r\n);\r\n\r\ntype AccessibilityLevel = 'public' | 'private' | 'protected';\r\n\r\ntype Options = [\r\n {\r\n defaultAccessibility?: AccessibilityLevel;\r\n }\r\n];\r\n\r\nconst defaultOptions: Options[0] = {\r\n defaultAccessibility: 'private'\r\n};\r\n\r\nconst getNodeName = (\r\n node: TSESTree.Node | TSESTree.Token | null | undefined\r\n): string => {\r\n if (!node) {\r\n return '<unknown>';\r\n }\r\n\r\n /*\r\n * MethodDefinition or PropertyDefinition (check 'key' first)\r\n * Note: Check 'key' before 'kind' because MethodDefinition has both\r\n */\r\n if ('key' in node && node.key) {\r\n if (node.key.type === TSESTree.AST_NODE_TYPES.Identifier) {\r\n return node.key.name;\r\n }\r\n // Handle computed property names, private identifiers (#name), etc. if needed\r\n if (node.key.type === TSESTree.AST_NODE_TYPES.PrivateIdentifier) {\r\n return `#${node.key.name}`;\r\n }\r\n return '<computed/complex key>';\r\n }\r\n\r\n // Constructor specific check (if key check didn't catch it - unlikely for MethodDefinition)\r\n if ('kind' in node && node.kind === 'constructor') {\r\n return 'constructor';\r\n }\r\n\r\n // TSParameterProperty - handle its 'parameter' property\r\n if (node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty) {\r\n const param = node.parameter; // Assign to variable for clarity & potentially better inference\r\n\r\n // Handle different parameter kinds:\r\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\r\n return param.name;\r\n }\r\n if (param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern) {\r\n // Check the left side of the assignment\r\n if (param.left.type === TSESTree.AST_NODE_TYPES.Identifier) {\r\n return param.left.name; // Name is on the identifier being assigned to\r\n }\r\n /*\r\n * Parameter is an assignment pattern with destructuring (ArrayPattern/ObjectPattern)\r\n * You might want more sophisticated logic here to extract a name\r\n */\r\n return '<destructured parameter>';\r\n }\r\n // Handle other potential kinds like RestElement ([...args]), ArrayPattern, ObjectPattern\r\n\r\n return '<complex parameter>';\r\n }\r\n\r\n return '<unknown>';\r\n};\r\n\r\nexport default createRule<Options, 'missingAccessibility'>({\r\n name: 'explicit-accessibility',\r\n meta: {\r\n type: 'suggestion',\r\n docs: {\r\n description: 'Require explicit accessibility modifiers on class members'\r\n },\r\n fixable: 'code',\r\n schema: [\r\n {\r\n type: 'object',\r\n properties: {\r\n defaultAccessibility: {\r\n type: 'string',\r\n enum: ['public', 'private', 'protected'],\r\n description: 'The accessibility modifier to add if one is missing.'\r\n }\r\n },\r\n additionalProperties: false\r\n }\r\n ],\r\n messages: {\r\n missingAccessibility:\r\n \"Class member '{{ name }}' is missing an explicit accessibility modifier (public/private/protected).\"\r\n }\r\n },\r\n defaultOptions: [defaultOptions],\r\n\r\n create(context, [options]) {\r\n const { defaultAccessibility } = { ...defaultOptions, ...options };\r\n const sourceCode = context.sourceCode;\r\n\r\n function checkNode(\r\n node:\r\n | TSESTree.MethodDefinition\r\n | TSESTree.PropertyDefinition\r\n | TSESTree.TSParameterProperty\r\n ): void {\r\n if (node.accessibility) {\r\n return; // Already has modifier\r\n }\r\n\r\n let reportNode: TSESTree.Node | TSESTree.Token = node;\r\n const name = getNodeName(node);\r\n // Adjust report node for better highlighting\r\n if (\r\n node.type === TSESTree.AST_NODE_TYPES.MethodDefinition ||\r\n node.type === TSESTree.AST_NODE_TYPES.PropertyDefinition\r\n ) {\r\n reportNode = node.key;\r\n } else {\r\n const param = node.parameter;\r\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\r\n reportNode = param;\r\n } else if (\r\n param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern &&\r\n param.left.type === TSESTree.AST_NODE_TYPES.Identifier\r\n ) {\r\n reportNode = param.left;\r\n }\r\n // Keep reportNode as the TSParameterProperty node itself if param isn't simple identifier\r\n }\r\n\r\n context.report({\r\n node: reportNode,\r\n messageId: 'missingAccessibility',\r\n data: { name },\r\n fix(fixer) {\r\n let tokenToInsertBefore: TSESTree.Token | null = null;\r\n let insertText = `${defaultAccessibility} `;\r\n\r\n if (node.decorators.length > 0) {\r\n const lastDecorator = node.decorators[node.decorators.length - 1];\r\n tokenToInsertBefore = sourceCode.getTokenAfter(lastDecorator);\r\n } else {\r\n tokenToInsertBefore = sourceCode.getFirstToken(node);\r\n }\r\n\r\n // Parameter properties need special handling if they also have 'readonly'\r\n if (\r\n node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty &&\r\n node.readonly\r\n ) {\r\n // If readonly exists without accessibility, insert accessibility *before* readonly\r\n const firstToken = sourceCode.getFirstToken(node);\r\n if (firstToken?.value === 'readonly') {\r\n // double check it's the readonly token\r\n tokenToInsertBefore = firstToken;\r\n }\r\n // If insertion point wasn't decorators, use first token (which should be readonly)\r\n }\r\n\r\n if (!tokenToInsertBefore) return null;\r\n\r\n /*\r\n * If the token immediately after the insertion point isn't whitespace, add a space.\r\n * (Handles case where tokenToInsertBefore is the last decorator token)\r\n */\r\n const tokenAfterInsertion = sourceCode.getTokenAfter(\r\n tokenToInsertBefore,\r\n { includeComments: false }\r\n );\r\n const textBetween = sourceCode.text.slice(\r\n tokenToInsertBefore.range[1],\r\n tokenAfterInsertion?.range[0]\r\n );\r\n if (!/^\\s/.test(textBetween)) {\r\n insertText = ` ${insertText}`; // Add leading space if needed after decorator\r\n }\r\n\r\n return fixer.insertTextBefore(tokenToInsertBefore, insertText);\r\n }\r\n });\r\n }\r\n\r\n return {\r\n MethodDefinition(node: TSESTree.MethodDefinition): void {\r\n checkNode(node);\r\n },\r\n\r\n PropertyDefinition(node: TSESTree.PropertyDefinition): void {\r\n checkNode(node);\r\n },\r\n\r\n TSParameterProperty(node: TSESTree.TSParameterProperty): void {\r\n checkNode(node);\r\n }\r\n };\r\n }\r\n});\r\n", "import vitestEslint from '@vitest/eslint-plugin';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nconst vitestPlugin: Record<string, object> = {\r\n vitest: vitestEslint\r\n};\r\n\r\nexport const vitest = defineConfig([\r\n {\r\n files: ['**/*.spec.ts', '**/*.spec.js', '**/*.test.ts', '**/*.test.js'],\r\n plugins: vitestPlugin,\r\n rules: {\r\n ...vitestEslint.configs.recommended.rules,\r\n 'vitest/max-nested-describe': ['error', { max: 3 }],\r\n // Matcher improvements\r\n 'vitest/prefer-to-be': 'error',\r\n 'vitest/prefer-to-contain': 'error',\r\n 'vitest/prefer-to-have-length': 'error',\r\n 'vitest/prefer-comparison-matcher': 'error',\r\n 'vitest/prefer-strict-equal': 'warn',\r\n // Test quality\r\n 'vitest/prefer-spy-on': 'error',\r\n 'vitest/prefer-hooks-on-top': 'error',\r\n 'vitest/prefer-each': 'warn',\r\n 'vitest/no-test-return-statement': 'error',\r\n 'vitest/prefer-mock-promise-shorthand': 'error'\r\n }\r\n }\r\n]);\r\n", "import playwrightEslint from 'eslint-plugin-playwright';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const playwright = defineConfig([\r\n {\r\n ...playwrightEslint.configs['flat/recommended'],\r\n files: ['**/*.e2e.ts', '**/*.e2e.js'],\r\n rules: {\r\n ...playwrightEslint.configs['flat/recommended'].rules,\r\n // Locator best practices\r\n 'playwright/prefer-locator': 'error',\r\n 'playwright/prefer-native-locators': 'error',\r\n 'playwright/no-nth-methods': 'warn',\r\n // Matcher improvements\r\n 'playwright/prefer-to-be': 'error',\r\n 'playwright/prefer-to-have-count': 'error',\r\n 'playwright/prefer-to-have-length': 'error',\r\n 'playwright/prefer-comparison-matcher': 'error',\r\n // Test structure\r\n 'playwright/prefer-hooks-on-top': 'error',\r\n 'playwright/require-top-level-describe': 'warn'\r\n }\r\n }\r\n]);\r\n", "import boundariesPlugin from 'eslint-plugin-boundaries';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const boundaries = defineConfig([\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n plugins: {\r\n boundaries: boundariesPlugin\r\n },\r\n settings: {\r\n 'boundaries/elements': [\r\n {\r\n type: 'feature',\r\n pattern: '**/feature/**'\r\n },\r\n {\r\n type: 'data-access',\r\n pattern: '**/data-access/**'\r\n },\r\n {\r\n type: 'domain-logic',\r\n pattern: '**/domain-logic/**'\r\n },\r\n {\r\n type: 'ui',\r\n pattern: '**/ui/**'\r\n },\r\n {\r\n type: 'common',\r\n pattern: '**/common/**'\r\n },\r\n {\r\n type: 'utils',\r\n pattern: '**/utils/**'\r\n }\r\n ],\r\n 'import/resolver': {\r\n typescript: {\r\n alwaysTryTypes: true\r\n }\r\n }\r\n },\r\n rules: {\r\n ...boundariesPlugin.configs.recommended.rules,\r\n 'boundaries/element-types': [\r\n 'error',\r\n {\r\n default: 'disallow',\r\n message:\r\n '${dependency.type} is not allowed to be imported in ${file.type}',\r\n rules: [\r\n {\r\n from: 'feature',\r\n allow: ['feature', 'ui', 'domain-logic', 'utils', 'common']\r\n },\r\n {\r\n from: 'domain-logic',\r\n allow: ['domain-logic', 'data-access', 'utils', 'common']\r\n },\r\n {\r\n from: 'data-access',\r\n allow: ['data-access', 'utils', 'common']\r\n },\r\n {\r\n from: 'ui',\r\n allow: ['ui', 'utils', 'common']\r\n },\r\n {\r\n from: 'utils',\r\n allow: ['utils', 'common']\r\n },\r\n {\r\n from: 'common',\r\n allow: ['common']\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n files: ['**/*.stories.ts'],\r\n rules: {\r\n 'boundaries/element-types': 'off'\r\n }\r\n }\r\n]);\r\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 { jest } from './lib/jest.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 ...angular,\n ...angularTemplate,\n ...rxjs,\n ...jest,\n ...json,\n ...boundaries,\n ...storybook,\n ...vitest,\n ...playwright,\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 jest,\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/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 }\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': [\n 'error',\n {\n functions: 'never',\n arrays: 'always-multiline',\n exports: 'always-multiline',\n imports: 'always-multiline',\n objects: 'always-multiline',\n enums: 'always-multiline'\n }\n ],\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 jestEslint from 'eslint-plugin-jest';\nimport { defineConfig } from 'eslint/config';\n\nexport const jest = defineConfig([\n {\n files: ['**/*.spec.ts', '**/*.spec.js'],\n extends: [jestEslint.configs['flat/recommended']],\n rules: {\n 'jest/no-done-callback': 'off',\n // Elevated from recommended defaults\n 'jest/no-focused-tests': 'error',\n 'jest/no-identical-title': 'error',\n 'jest/valid-expect': 'error',\n // Style rules (selective additions from flat/style)\n 'jest/prefer-to-be': 'warn',\n 'jest/prefer-to-contain': 'warn',\n 'jest/prefer-to-have-length': 'warn',\n // Best practice additions\n 'jest/consistent-test-it': ['error', { fn: 'it' }],\n 'jest/prefer-comparison-matcher': 'error',\n 'jest/prefer-equality-matcher': 'error',\n 'jest/prefer-hooks-on-top': 'error',\n 'jest/prefer-spy-on': 'error',\n 'jest/prefer-strict-equal': 'warn',\n 'jest/prefer-mock-promise-shorthand': 'error',\n 'jest/no-conditional-in-test': 'warn',\n 'jest/no-duplicate-hooks': 'error',\n 'jest/no-test-return-statement': 'error',\n 'jest/require-to-throw-message': 'warn'\n }\n }\n]);\n", "import jsonEslint from 'eslint-plugin-json';\nimport { defineConfig } from 'eslint/config';\n\nexport const json = defineConfig([\n {\n files: ['**/*.json'],\n extends: [jsonEslint.configs.recommended]\n },\n {\n files: ['**/tsconfig*.json', '**/.vscode/*.json'],\n extends: [jsonEslint.configs['recommended-with-comments']]\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': ['error', { allowWithDecorator: true }], // 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 tokenToInsertBefore: TSESTree.Token | null = null;\n let insertText = `${defaultAccessibility} `;\n\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/element-types': [\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: 'feature',\n allow: ['feature', 'ui', 'domain-logic', 'utils', 'common']\n },\n {\n from: 'domain-logic',\n allow: ['domain-logic', 'data-access', 'utils', 'common']\n },\n {\n from: 'data-access',\n allow: ['data-access', 'utils', 'common']\n },\n {\n from: 'ui',\n allow: ['ui', 'utils', 'common']\n },\n {\n from: 'utils',\n allow: ['utils', 'common']\n },\n {\n from: 'common',\n allow: ['common']\n }\n ]\n }\n ]\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n 'boundaries/element-types': '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", "jestEslint", "import_config", "jsonEslint", "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/index.js CHANGED
@@ -582,7 +582,7 @@ var explicit_accessibility_default = createRule({
582
582
  }
583
583
  }
584
584
  context.report({
585
- node: reportNode,
585
+ node: reportNode ?? node,
586
586
  messageId: "missingAccessibility",
587
587
  data: { name },
588
588
  fix(fixer) {
@@ -719,7 +719,10 @@ var typescript = defineConfig10([
719
719
  // Strict type-checked rules
720
720
  "@typescript-eslint/no-unnecessary-condition": "error",
721
721
  // Catches always-true/false conditions
722
- "@typescript-eslint/no-confusing-void-expression": "error",
722
+ "@typescript-eslint/no-confusing-void-expression": [
723
+ "error",
724
+ { ignoreArrowShorthand: true, ignoreVoidOperator: true }
725
+ ],
723
726
  // Prevent confusing void usage
724
727
  "@typescript-eslint/no-dynamic-delete": "error",
725
728
  // Use Map instead of delete obj[key]
@@ -859,8 +862,7 @@ var typescript = defineConfig10([
859
862
  settings: {
860
863
  "import-x/resolver-next": [
861
864
  createTypeScriptImportResolver({
862
- alwaysTryTypes: true,
863
- project: "tsconfig.base.json"
865
+ alwaysTryTypes: true
864
866
  })
865
867
  ]
866
868
  }
package/index.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/jest.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/index.ts"],
4
- "sourcesContent": ["import { configs } from 'angular-eslint';\r\nimport { defineConfig } from 'eslint/config';\r\nimport type { Config } from 'eslint/config';\r\n\r\nexport const angularTemplate = defineConfig([\r\n {\r\n files: ['**/*.html'],\r\n extends: [\r\n ...(configs.templateAccessibility as Config[]),\r\n ...(configs.templateRecommended as Config[])\r\n ],\r\n rules: {\r\n '@angular-eslint/template/prefer-template-literal': 'error',\r\n '@angular-eslint/template/no-any': 'error',\r\n '@angular-eslint/template/no-duplicate-attributes': 'error',\r\n '@angular-eslint/template/button-has-type': 'error',\r\n '@angular-eslint/template/no-positive-tabindex': 'error',\r\n '@angular-eslint/template/valid-aria': 'error',\r\n '@angular-eslint/template/alt-text': 'error',\r\n '@angular-eslint/template/elements-content': 'error',\r\n '@angular-eslint/template/click-events-have-key-events': 'error',\r\n '@angular-eslint/template/mouse-events-have-key-events': 'error',\r\n '@angular-eslint/template/table-scope': 'error',\r\n '@angular-eslint/template/no-autofocus': 'error',\r\n '@angular-eslint/template/no-distracting-elements': 'error',\r\n '@angular-eslint/template/prefer-control-flow': 'error',\r\n '@angular-eslint/template/prefer-self-closing-tags': 'error',\r\n '@angular-eslint/template/prefer-ngsrc': 'error',\r\n '@angular-eslint/template/prefer-built-in-pipes': 'error',\r\n '@angular-eslint/template/no-interpolation-in-attributes': 'error',\r\n '@angular-eslint/template/no-nested-tags': 'error',\r\n '@angular-eslint/template/use-track-by-function': 'error',\r\n '@angular-eslint/template/label-has-associated-control': 'error',\r\n '@angular-eslint/template/prefer-at-else': 'error', // v21: @if/@else syntax\r\n '@angular-eslint/template/prefer-at-empty': 'error', // v21: @for/@empty syntax\r\n '@angular-eslint/template/prefer-contextual-for-variables': 'error', // v21: Use $index, $first, etc.\r\n '@angular-eslint/template/no-empty-control-flow': 'error', // v21: Catch incomplete refactoring\r\n '@angular-eslint/template/prefer-class-binding': 'error', // v21.2.0: Prefer [class] over ngClass\r\n '@angular-eslint/template/prefer-static-string-properties': 'error', // Reduce change detection\r\n '@angular-eslint/template/conditional-complexity': [\r\n 'warn',\r\n { maxComplexity: 5 }\r\n ], // Template readability\r\n '@angular-eslint/template/attributes-order': [\r\n 'error',\r\n {\r\n alphabetical: true,\r\n order: [\r\n 'STRUCTURAL_DIRECTIVE', // e.g. `*ngIf=\"true\"`, `*ngFor=\"let item of items\"`\r\n 'TEMPLATE_REFERENCE', // e.g. `<input #inputRef>`\r\n 'INPUT_BINDING', // e.g. `[id]=\"3\"`, `[attr.colspan]=\"colspan\"`, [style.width.%]=\"100\", [@triggerName]=\"expression\", `bind-id=\"handleChange()\"`\r\n 'TWO_WAY_BINDING', // e.g. `[(id)]=\"id\"`, `bindon-id=\"id\"\r\n 'ATTRIBUTE_BINDING', // e.g. `<input required>`, `id=\"3\"`\r\n 'OUTPUT_BINDING' // e.g. `(idChange)=\"handleChange()\"`, `on-id=\"handleChange()\"`\r\n ]\r\n }\r\n ]\r\n }\r\n }\r\n]);\r\n", "import globals from 'globals';\r\nimport { configs, processInlineTemplates } from 'angular-eslint';\r\nimport { defineConfig } from 'eslint/config';\r\nimport type { Config } from 'eslint/config';\r\n\r\nexport const angular = defineConfig([\r\n {\r\n files: ['**/*.ts'],\r\n extends: [...(configs.tsRecommended as Config[])],\r\n languageOptions: {\r\n globals: {\r\n ...globals.browser,\r\n ...globals.es2025,\r\n ...globals.node\r\n }\r\n },\r\n processor: processInlineTemplates,\r\n rules: {\r\n '@angular-eslint/prefer-on-push-component-change-detection': 'error',\r\n '@angular-eslint/prefer-signals': 'error',\r\n '@angular-eslint/use-injectable-provided-in': 'error',\r\n '@angular-eslint/prefer-signal-model': 'error',\r\n '@angular-eslint/no-uncalled-signals': 'error',\r\n '@angular-eslint/prefer-host-metadata-property': 'error',\r\n '@angular-eslint/no-implicit-take-until-destroyed': 'error', // v21.2.0: Enforce explicit DestroyRef\r\n '@angular-eslint/no-async-lifecycle-method': 'error', // Prevent async lifecycle hooks\r\n '@angular-eslint/prefer-output-readonly': 'warn', // Prevent accidental reassignment\r\n '@angular-eslint/prefer-output-emitter-ref': 'warn', // Modern output() function over @Output()\r\n '@angular-eslint/sort-lifecycle-methods': 'warn' // Consistent lifecycle method ordering\r\n }\r\n }\r\n]);\r\n", "import { configs } from '@nx/eslint-plugin';\r\nimport stylistic from '@stylistic/eslint-plugin';\r\nimport importPluginX from 'eslint-plugin-import-x';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const base = defineConfig([\r\n { extends: [...configs['flat/base']] },\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n extends: [importPluginX.flatConfigs.recommended]\r\n },\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n extends: [stylistic.configs.recommended]\r\n },\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n rules: {\r\n 'no-param-reassign': 'error',\r\n 'no-alert': 'error',\r\n 'no-console': ['warn', { allow: ['warn', 'error'] }],\r\n 'no-debugger': 'error',\r\n eqeqeq: ['error', 'always', { null: 'ignore' }],\r\n curly: ['error', 'multi'],\r\n 'prefer-const': ['error', { destructuring: 'all' }],\r\n 'no-var': 'error',\r\n 'object-shorthand': 'error',\r\n 'prefer-arrow-callback': 'error',\r\n 'no-useless-concat': 'error',\r\n 'prefer-template': 'error',\r\n 'no-nested-ternary': 'error',\r\n 'no-useless-assignment': 'error', // NEW: Catch unused assignments (ESLint v9)\r\n 'no-object-constructor': 'error', // Disallow new Object() without arguments\r\n 'no-else-return': ['error', { allowElseIf: false }], // Prefer early returns\r\n 'no-multi-assign': 'error', // Disallow chaining assignments\r\n radix: 'error', // Require radix parameter for parseInt()\r\n yoda: 'error', // Disallow yoda conditions (`if (\"red\" === color)`)\r\n complexity: ['warn', 10], // Warn if function complexity is high\r\n 'max-depth': ['warn', 4], // Warn on deeply nested blocks\r\n 'max-lines-per-function': [\r\n 'warn',\r\n { max: 50, skipBlankLines: true, skipComments: true }\r\n ], // Warn on long functions\r\n 'max-params': ['warn', 4], // Warn on functions with many parameters\r\n 'no-lonely-if': 'error', // Disallow if statements as the only statement in an else block\r\n 'grouped-accessor-pairs': ['error', 'getBeforeSet'], // Enforce consistency for getters/setters\r\n 'class-methods-use-this': 'error',\r\n 'no-underscore-dangle': 'error',\r\n 'max-len': [\r\n 'error',\r\n {\r\n code: 135,\r\n ignoreComments: true\r\n }\r\n ],\r\n 'spaced-comment': [\r\n 2,\r\n 'always',\r\n {\r\n block: {\r\n exceptions: ['*']\r\n }\r\n }\r\n ],\r\n '@stylistic/padding-line-between-statements': [\r\n 'error',\r\n {\r\n blankLine: 'always',\r\n prev: 'export',\r\n next: ['export', 'const']\r\n },\r\n {\r\n blankLine: 'always',\r\n prev: ['const', 'let', 'var'],\r\n next: '*'\r\n },\r\n {\r\n blankLine: 'any',\r\n prev: ['const', 'let', 'var'],\r\n next: ['const', 'let', 'var']\r\n },\r\n {\r\n blankLine: 'always',\r\n prev: '*',\r\n next: [\r\n 'for',\r\n 'if',\r\n 'return',\r\n 'throw',\r\n 'switch',\r\n 'try',\r\n 'class',\r\n 'function'\r\n ]\r\n }\r\n ],\r\n '@stylistic/comma-dangle': [\r\n 'error',\r\n {\r\n functions: 'never',\r\n arrays: 'always-multiline',\r\n exports: 'always-multiline',\r\n imports: 'always-multiline',\r\n objects: 'always-multiline',\r\n enums: 'always-multiline'\r\n }\r\n ],\r\n '@stylistic/indent': [\r\n 'error',\r\n 2,\r\n {\r\n offsetTernaryExpressions: true,\r\n SwitchCase: 1,\r\n ignoredNodes: [\r\n 'TSTypeParameterInstantiation',\r\n 'FunctionExpression > .params > :matches(Decorator, :not(:first-child))'\r\n ]\r\n }\r\n ],\r\n 'sort-imports': [\r\n 'error',\r\n {\r\n ignoreCase: false,\r\n ignoreDeclarationSort: true,\r\n ignoreMemberSort: false,\r\n memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],\r\n allowSeparatedGroups: true\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts',\r\n '**/*.html'\r\n ],\r\n rules: {\r\n 'max-lines': [\r\n 'error',\r\n {\r\n max: 150,\r\n skipBlankLines: true,\r\n skipComments: true\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n files: [\r\n '**/*.spec.ts',\r\n '**/*.test.ts',\r\n '**/*.spec.js',\r\n '**/*.test.js',\r\n '**/*.e2e.ts',\r\n '**/*.e2e.js'\r\n ],\r\n rules: {\r\n 'max-lines-per-function': 'off',\r\n complexity: ['warn', { max: 3 }],\r\n 'max-lines': [\r\n 'error',\r\n {\r\n max: 300,\r\n skipBlankLines: true,\r\n skipComments: true\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n files: ['**/*.action.ts'],\r\n rules: {\r\n 'max-classes-per-file': 'off'\r\n }\r\n },\r\n {\r\n files: ['**/*.state.ts'],\r\n rules: {\r\n 'class-methods-use-this': 'off'\r\n }\r\n }\r\n]);\r\n", "import { configs } from '@nx/eslint-plugin';\r\nimport { defineConfig } from 'eslint/config';\r\nimport type { Config } from 'eslint/config';\r\n\r\nexport const javascript = defineConfig({\r\n files: ['**/*.js', '**/*.jsx', '**/*.cjs', '**/*.mjs'],\r\n extends: [...(configs['flat/javascript'] as Config[])]\r\n});\r\n", "import jestEslint from 'eslint-plugin-jest';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const jest = defineConfig([\r\n {\r\n files: ['**/*.spec.ts', '**/*.spec.js'],\r\n extends: [jestEslint.configs['flat/recommended']],\r\n rules: {\r\n 'jest/no-done-callback': 'off',\r\n // Elevated from recommended defaults\r\n 'jest/no-focused-tests': 'error',\r\n 'jest/no-identical-title': 'error',\r\n 'jest/valid-expect': 'error',\r\n // Style rules (selective additions from flat/style)\r\n 'jest/prefer-to-be': 'warn',\r\n 'jest/prefer-to-contain': 'warn',\r\n 'jest/prefer-to-have-length': 'warn',\r\n // Best practice additions\r\n 'jest/consistent-test-it': ['error', { fn: 'it' }],\r\n 'jest/prefer-comparison-matcher': 'error',\r\n 'jest/prefer-equality-matcher': 'error',\r\n 'jest/prefer-hooks-on-top': 'error',\r\n 'jest/prefer-spy-on': 'error',\r\n 'jest/prefer-strict-equal': 'warn',\r\n 'jest/prefer-mock-promise-shorthand': 'error',\r\n 'jest/no-conditional-in-test': 'warn',\r\n 'jest/no-duplicate-hooks': 'error',\r\n 'jest/no-test-return-statement': 'error',\r\n 'jest/require-to-throw-message': 'warn'\r\n }\r\n }\r\n]);\r\n", "import jsonEslint from 'eslint-plugin-json';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const json = defineConfig([\r\n {\r\n files: ['**/*.json'],\r\n extends: [jsonEslint.configs.recommended]\r\n },\r\n {\r\n files: ['**/tsconfig*.json', '**/.vscode/*.json'],\r\n extends: [jsonEslint.configs['recommended-with-comments']]\r\n }\r\n]);\r\n", "import eslintConfigPrettier from 'eslint-config-prettier';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const prettier = defineConfig([eslintConfigPrettier]);\r\n", "import rxjsEslint from '@smarttools/eslint-plugin-rxjs';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const rxjs = defineConfig([\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n languageOptions: {\r\n parserOptions: {\r\n projectService: true\r\n }\r\n },\r\n extends: [rxjsEslint.configs.recommended]\r\n },\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n plugins: {\r\n rxjs: rxjsEslint\r\n }\r\n },\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.cjs',\r\n '**/*.mjs',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n rules: {\r\n 'rxjs/prefer-observer': 'error',\r\n 'rxjs/finnish': 'warn',\r\n 'rxjs/no-ignored-subscription': 'warn',\r\n 'rxjs/no-ignored-error': 'warn',\r\n 'rxjs/no-unsafe-switchmap': 'error',\r\n 'rxjs/no-unsafe-takeuntil': 'error',\r\n 'rxjs/no-unsafe-catch': 'error',\r\n 'rxjs/no-unsafe-first': 'error',\r\n 'rxjs/no-topromise': 'error',\r\n 'rxjs/throw-error': 'error',\r\n 'rxjs/no-async-subscribe': 'off',\r\n 'rxjs/no-exposed-subjects': 'error', // Enforce subject encapsulation\r\n 'rxjs/no-cyclic-action': 'error', // Prevent infinite loops in NgRx effects\r\n 'rxjs/no-subscribe-handlers': 'warn' // Prefer observer objects (complements prefer-observer)\r\n }\r\n },\r\n {\r\n files: ['**/*.spec.ts', '**/*.test.ts', '**/*.spec.js', '**/*.test.js'],\r\n rules: {\r\n 'rxjs/no-ignored-subscription': 'off',\r\n 'rxjs/no-subscribe-handlers': 'off'\r\n }\r\n }\r\n]);\r\n", "import storybookEslint from 'eslint-plugin-storybook';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const storybook = defineConfig([\r\n {\r\n ignores: ['!.storybook'],\r\n files: ['**/*.stories.ts'],\r\n extends: [storybookEslint.configs['flat/recommended']],\r\n rules: {\r\n 'storybook/csf-component': 'warn', // Ensure component property is set\r\n 'storybook/no-stories-of': 'error' // Prevent deprecated storiesOf API\r\n }\r\n }\r\n]);\r\n", "import { configs } from '@nx/eslint-plugin';\r\nimport { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';\r\nimport importPluginX from 'eslint-plugin-import-x';\r\nimport { defineConfig } from 'eslint/config';\r\nimport type { Config } from 'eslint/config';\r\n\r\nimport explicitAccessibilityRule from './rules/explicit-accessibility.js';\r\n\r\nconst localTypescriptRules: Record<string, unknown> = {\r\n rules: {\r\n 'explicit-accessibility': explicitAccessibilityRule\r\n }\r\n};\r\n\r\nexport const typescript = defineConfig([\r\n // NOTE: Checks for 'prettier' and 'eslint-plugin-prettier'\r\n {\r\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\r\n extends: [\r\n importPluginX.flatConfigs.typescript,\r\n ...(configs['flat/typescript'] as Config[])\r\n ]\r\n },\r\n {\r\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\r\n plugins: { local: localTypescriptRules },\r\n rules: {\r\n 'local/explicit-accessibility': 'error',\r\n '@typescript-eslint/explicit-member-accessibility': 'error',\r\n '@typescript-eslint/explicit-function-return-type': 'error',\r\n '@typescript-eslint/no-empty-function': 'error',\r\n '@typescript-eslint/no-unused-vars': 'error',\r\n '@typescript-eslint/no-use-before-define': 'error',\r\n\r\n // A. Eliminating `any` (already covered by strict-type-checked, but explicit for clarity)\r\n '@typescript-eslint/no-explicit-any': 'error',\r\n '@typescript-eslint/no-unsafe-assignment': 'error',\r\n '@typescript-eslint/no-unsafe-call': 'error',\r\n '@typescript-eslint/no-unsafe-member-access': 'error',\r\n '@typescript-eslint/no-unsafe-return': 'error',\r\n '@typescript-eslint/no-unsafe-argument': 'error',\r\n\r\n // New v8 type-safety rules (replacements for deprecated ban-types)\r\n '@typescript-eslint/no-empty-object-type': 'error', // Bans confusing {} type\r\n '@typescript-eslint/no-unsafe-function-type': 'error', // Bans Function type\r\n '@typescript-eslint/no-wrapper-object-types': 'error', // Bans Number, String, Boolean wrappers\r\n\r\n // B. Explicit Annotations (partially covered, explicit module boundaries is key)\r\n '@typescript-eslint/explicit-module-boundary-types': 'error',\r\n // Consider enabling if maximum explicitness is desired, even if verbose:\r\n\r\n // C. Null/Undefined Safety (Requires strictNullChecks)\r\n '@typescript-eslint/no-non-null-assertion': 'error',\r\n '@typescript-eslint/prefer-nullish-coalescing': 'error',\r\n '@typescript-eslint/prefer-optional-chain': 'error',\r\n\r\n // D. Promise Handling (Supplementing plugin:promise/recommended)\r\n '@typescript-eslint/no-floating-promises': [\r\n 'error',\r\n { ignoreVoid: true }\r\n ],\r\n '@typescript-eslint/no-misused-promises': 'warn', // Already in recommended-type-checked\r\n '@typescript-eslint/promise-function-async': 'error',\r\n '@typescript-eslint/await-thenable': 'error', // Already in recommended-type-checked\r\n\r\n // E. Best Practices & Potential Errors (Some covered by presets, fine-tuning here)\r\n '@typescript-eslint/no-inferrable-types': 'warn', // Keep as warn or disable if inference is preferred\r\n '@typescript-eslint/no-require-imports': 'error', // Use ES modules (replaces deprecated no-var-requires)\r\n '@typescript-eslint/only-throw-error': 'error', // Replaces deprecated no-throw-literal\r\n '@typescript-eslint/no-array-delete': 'error', // Prevents delete arr[0]\r\n '@typescript-eslint/return-await': ['error', 'in-try-catch'], // Better stack traces in try/catch\r\n '@typescript-eslint/require-await': 'error',\r\n '@typescript-eslint/restrict-template-expressions': [\r\n 'error',\r\n { allowNumber: true, allowBoolean: true }\r\n ], // Allow numbers/booleans in templates\r\n '@typescript-eslint/restrict-plus-operands': 'error', // Enforce consistent types for '+'\r\n '@typescript-eslint/prefer-as-const': 'error',\r\n '@typescript-eslint/no-shadow': 'error',\r\n '@typescript-eslint/switch-exhaustiveness-check': 'error', // Ensure switch on unions is exhaustive\r\n '@typescript-eslint/no-unused-expressions': [\r\n 'error',\r\n { allowShortCircuit: true, allowTernary: true }\r\n ],\r\n '@typescript-eslint/no-useless-constructor': 'error',\r\n '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], // Prefer dot notation where possible\r\n\r\n // Strict type-checked rules\r\n '@typescript-eslint/no-unnecessary-condition': 'error', // Catches always-true/false conditions\r\n '@typescript-eslint/no-confusing-void-expression': 'error', // Prevent confusing void usage\r\n '@typescript-eslint/no-dynamic-delete': 'error', // Use Map instead of delete obj[key]\r\n '@typescript-eslint/no-extraneous-class': ['error', { allowWithDecorator: true }], // Allow Angular classes\r\n '@typescript-eslint/no-invalid-void-type': 'error', // Restrict void to return types\r\n '@typescript-eslint/unified-signatures': 'error', // Merge overloads where possible\r\n '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error', // Forbids foo! ?? bar\r\n\r\n // Stylistic type-checked rules\r\n '@typescript-eslint/prefer-find': 'error', // Use find() instead of filter()[0]\r\n '@typescript-eslint/prefer-for-of': 'error', // Modern iteration\r\n '@typescript-eslint/prefer-includes': 'error', // indexOf() \u2192 includes()\r\n '@typescript-eslint/prefer-string-starts-ends-with': 'error', // Modern string methods\r\n '@typescript-eslint/prefer-regexp-exec': 'error', // Better regex performance\r\n\r\n // F. Consistency & Style (Some covered by stylistic-type-checked)\r\n '@typescript-eslint/consistent-type-assertions': [\r\n 'error',\r\n { assertionStyle: 'as', objectLiteralTypeAssertions: 'never' }\r\n ],\r\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\r\n '@typescript-eslint/consistent-type-imports': [\r\n 'error',\r\n { prefer: 'type-imports', fixStyle: 'separate-type-imports' }\r\n ],\r\n '@typescript-eslint/naming-convention': [\r\n 'error',\r\n {\r\n selector: 'objectLiteralProperty',\r\n modifiers: ['requiresQuotes'],\r\n format: null\r\n },\r\n {\r\n selector: 'objectLiteralProperty',\r\n format: ['camelCase', 'snake_case', 'PascalCase']\r\n },\r\n {\r\n selector: 'parameter',\r\n format: ['camelCase'],\r\n leadingUnderscore: 'allow'\r\n },\r\n { selector: 'default', format: ['camelCase'] },\r\n { selector: 'variable', format: ['camelCase', 'UPPER_CASE'] },\r\n { selector: 'function', format: ['camelCase'] },\r\n { selector: 'typeLike', format: ['PascalCase'] },\r\n {\r\n selector: 'property',\r\n modifiers: ['requiresQuotes'],\r\n format: null\r\n },\r\n {\r\n selector: 'property',\r\n format: ['camelCase', 'PascalCase', 'snake_case']\r\n }\r\n ],\r\n 'import-x/order': [\r\n 'error',\r\n {\r\n groups: [\r\n 'builtin',\r\n 'external',\r\n 'internal',\r\n ['parent', 'sibling'],\r\n 'index',\r\n 'unknown'\r\n ],\r\n pathGroups: [\r\n {\r\n pattern: '@angular/**',\r\n group: 'builtin',\r\n position: 'before'\r\n },\r\n {\r\n pattern: '@nestjs/**',\r\n group: 'builtin',\r\n position: 'before'\r\n },\r\n {\r\n pattern: '@shared/**',\r\n group: 'internal',\r\n position: 'before'\r\n },\r\n {\r\n pattern: '@backend/**',\r\n group: 'internal',\r\n position: 'before'\r\n },\r\n {\r\n pattern: '@frontend/**',\r\n group: 'internal',\r\n position: 'before'\r\n },\r\n {\r\n pattern: '@*/shared/**',\r\n group: 'internal',\r\n position: 'before'\r\n },\r\n {\r\n pattern: '@*/frontend/**',\r\n group: 'internal',\r\n position: 'after'\r\n },\r\n {\r\n pattern: '@*/backend/**',\r\n group: 'internal',\r\n position: 'after'\r\n }\r\n ],\r\n pathGroupsExcludedImportTypes: ['builtin'],\r\n 'newlines-between': 'always',\r\n alphabetize: { order: 'asc', caseInsensitive: true }\r\n }\r\n ],\r\n 'import-x/no-unresolved': 'error',\r\n 'import-x/no-duplicates': 'error',\r\n 'import-x/prefer-default-export': 'off',\r\n 'import-x/no-useless-path-segments': ['error', { noUselessIndex: true }],\r\n 'import-x/newline-after-import': 'error',\r\n 'import-x/first': 'error',\r\n 'import-x/no-mutable-exports': 'error',\r\n 'import-x/no-self-import': 'error', // Prevents modules importing themselves\r\n 'import-x/no-cycle': ['error', { maxDepth: 2, ignoreExternal: true }], // Prevents circular dependencies\r\n 'import-x/consistent-type-specifier-style': ['error', 'prefer-top-level'], // Consistent type imports\r\n 'import-x/no-anonymous-default-export': 'error' // Improve code searchability\r\n },\r\n settings: {\r\n 'import-x/resolver-next': [\r\n createTypeScriptImportResolver({\r\n alwaysTryTypes: true,\r\n project: 'tsconfig.base.json'\r\n })\r\n ]\r\n }\r\n },\r\n {\r\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\r\n languageOptions: {\r\n parserOptions: {\r\n projectService: true\r\n }\r\n },\r\n rules: {\r\n '@typescript-eslint/prefer-readonly': 'error'\r\n }\r\n },\r\n {\r\n files: ['**/*.action.ts'],\r\n rules: {\r\n '@typescript-eslint/no-namespace': 'off',\r\n '@typescript-eslint/no-extraneous-class': 'off'\r\n }\r\n },\r\n {\r\n files: [\r\n '**/*.spec.ts',\r\n '**/*.test.ts',\r\n '**/*.spec.js',\r\n '**/*.test.js',\r\n '**/*.e2e.ts',\r\n '**/*.e2e.js'\r\n ],\r\n rules: {\r\n '@typescript-eslint/no-empty-function': 'off',\r\n '@typescript-eslint/no-unbound-method': 'off',\r\n '@typescript-eslint/consistent-type-assertions': 'off'\r\n }\r\n },\r\n {\r\n files: ['**/*.stories.ts'],\r\n rules: {\r\n '@typescript-eslint/consistent-type-assertions': 'off',\r\n '@typescript-eslint/naming-convention': 'off'\r\n }\r\n }\r\n]);\r\n", "import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';\r\n\r\nconst createRule = ESLintUtils.RuleCreator(\r\n () => 'https://eslint.org/docs/latest/rules/no-unused-private-class-members'\r\n);\r\n\r\ntype AccessibilityLevel = 'public' | 'private' | 'protected';\r\n\r\ntype Options = [\r\n {\r\n defaultAccessibility?: AccessibilityLevel;\r\n }\r\n];\r\n\r\nconst defaultOptions: Options[0] = {\r\n defaultAccessibility: 'private'\r\n};\r\n\r\nconst getNodeName = (\r\n node: TSESTree.Node | TSESTree.Token | null | undefined\r\n): string => {\r\n if (!node) {\r\n return '<unknown>';\r\n }\r\n\r\n /*\r\n * MethodDefinition or PropertyDefinition (check 'key' first)\r\n * Note: Check 'key' before 'kind' because MethodDefinition has both\r\n */\r\n if ('key' in node && node.key) {\r\n if (node.key.type === TSESTree.AST_NODE_TYPES.Identifier) {\r\n return node.key.name;\r\n }\r\n // Handle computed property names, private identifiers (#name), etc. if needed\r\n if (node.key.type === TSESTree.AST_NODE_TYPES.PrivateIdentifier) {\r\n return `#${node.key.name}`;\r\n }\r\n return '<computed/complex key>';\r\n }\r\n\r\n // Constructor specific check (if key check didn't catch it - unlikely for MethodDefinition)\r\n if ('kind' in node && node.kind === 'constructor') {\r\n return 'constructor';\r\n }\r\n\r\n // TSParameterProperty - handle its 'parameter' property\r\n if (node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty) {\r\n const param = node.parameter; // Assign to variable for clarity & potentially better inference\r\n\r\n // Handle different parameter kinds:\r\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\r\n return param.name;\r\n }\r\n if (param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern) {\r\n // Check the left side of the assignment\r\n if (param.left.type === TSESTree.AST_NODE_TYPES.Identifier) {\r\n return param.left.name; // Name is on the identifier being assigned to\r\n }\r\n /*\r\n * Parameter is an assignment pattern with destructuring (ArrayPattern/ObjectPattern)\r\n * You might want more sophisticated logic here to extract a name\r\n */\r\n return '<destructured parameter>';\r\n }\r\n // Handle other potential kinds like RestElement ([...args]), ArrayPattern, ObjectPattern\r\n\r\n return '<complex parameter>';\r\n }\r\n\r\n return '<unknown>';\r\n};\r\n\r\nexport default createRule<Options, 'missingAccessibility'>({\r\n name: 'explicit-accessibility',\r\n meta: {\r\n type: 'suggestion',\r\n docs: {\r\n description: 'Require explicit accessibility modifiers on class members'\r\n },\r\n fixable: 'code',\r\n schema: [\r\n {\r\n type: 'object',\r\n properties: {\r\n defaultAccessibility: {\r\n type: 'string',\r\n enum: ['public', 'private', 'protected'],\r\n description: 'The accessibility modifier to add if one is missing.'\r\n }\r\n },\r\n additionalProperties: false\r\n }\r\n ],\r\n messages: {\r\n missingAccessibility:\r\n \"Class member '{{ name }}' is missing an explicit accessibility modifier (public/private/protected).\"\r\n }\r\n },\r\n defaultOptions: [defaultOptions],\r\n\r\n create(context, [options]) {\r\n const { defaultAccessibility } = { ...defaultOptions, ...options };\r\n const sourceCode = context.sourceCode;\r\n\r\n function checkNode(\r\n node:\r\n | TSESTree.MethodDefinition\r\n | TSESTree.PropertyDefinition\r\n | TSESTree.TSParameterProperty\r\n ): void {\r\n if (node.accessibility) {\r\n return; // Already has modifier\r\n }\r\n\r\n let reportNode: TSESTree.Node | TSESTree.Token = node;\r\n const name = getNodeName(node);\r\n // Adjust report node for better highlighting\r\n if (\r\n node.type === TSESTree.AST_NODE_TYPES.MethodDefinition ||\r\n node.type === TSESTree.AST_NODE_TYPES.PropertyDefinition\r\n ) {\r\n reportNode = node.key;\r\n } else {\r\n const param = node.parameter;\r\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\r\n reportNode = param;\r\n } else if (\r\n param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern &&\r\n param.left.type === TSESTree.AST_NODE_TYPES.Identifier\r\n ) {\r\n reportNode = param.left;\r\n }\r\n // Keep reportNode as the TSParameterProperty node itself if param isn't simple identifier\r\n }\r\n\r\n context.report({\r\n node: reportNode,\r\n messageId: 'missingAccessibility',\r\n data: { name },\r\n fix(fixer) {\r\n let tokenToInsertBefore: TSESTree.Token | null = null;\r\n let insertText = `${defaultAccessibility} `;\r\n\r\n if (node.decorators.length > 0) {\r\n const lastDecorator = node.decorators[node.decorators.length - 1];\r\n tokenToInsertBefore = sourceCode.getTokenAfter(lastDecorator);\r\n } else {\r\n tokenToInsertBefore = sourceCode.getFirstToken(node);\r\n }\r\n\r\n // Parameter properties need special handling if they also have 'readonly'\r\n if (\r\n node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty &&\r\n node.readonly\r\n ) {\r\n // If readonly exists without accessibility, insert accessibility *before* readonly\r\n const firstToken = sourceCode.getFirstToken(node);\r\n if (firstToken?.value === 'readonly') {\r\n // double check it's the readonly token\r\n tokenToInsertBefore = firstToken;\r\n }\r\n // If insertion point wasn't decorators, use first token (which should be readonly)\r\n }\r\n\r\n if (!tokenToInsertBefore) return null;\r\n\r\n /*\r\n * If the token immediately after the insertion point isn't whitespace, add a space.\r\n * (Handles case where tokenToInsertBefore is the last decorator token)\r\n */\r\n const tokenAfterInsertion = sourceCode.getTokenAfter(\r\n tokenToInsertBefore,\r\n { includeComments: false }\r\n );\r\n const textBetween = sourceCode.text.slice(\r\n tokenToInsertBefore.range[1],\r\n tokenAfterInsertion?.range[0]\r\n );\r\n if (!/^\\s/.test(textBetween)) {\r\n insertText = ` ${insertText}`; // Add leading space if needed after decorator\r\n }\r\n\r\n return fixer.insertTextBefore(tokenToInsertBefore, insertText);\r\n }\r\n });\r\n }\r\n\r\n return {\r\n MethodDefinition(node: TSESTree.MethodDefinition): void {\r\n checkNode(node);\r\n },\r\n\r\n PropertyDefinition(node: TSESTree.PropertyDefinition): void {\r\n checkNode(node);\r\n },\r\n\r\n TSParameterProperty(node: TSESTree.TSParameterProperty): void {\r\n checkNode(node);\r\n }\r\n };\r\n }\r\n});\r\n", "import vitestEslint from '@vitest/eslint-plugin';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nconst vitestPlugin: Record<string, object> = {\r\n vitest: vitestEslint\r\n};\r\n\r\nexport const vitest = defineConfig([\r\n {\r\n files: ['**/*.spec.ts', '**/*.spec.js', '**/*.test.ts', '**/*.test.js'],\r\n plugins: vitestPlugin,\r\n rules: {\r\n ...vitestEslint.configs.recommended.rules,\r\n 'vitest/max-nested-describe': ['error', { max: 3 }],\r\n // Matcher improvements\r\n 'vitest/prefer-to-be': 'error',\r\n 'vitest/prefer-to-contain': 'error',\r\n 'vitest/prefer-to-have-length': 'error',\r\n 'vitest/prefer-comparison-matcher': 'error',\r\n 'vitest/prefer-strict-equal': 'warn',\r\n // Test quality\r\n 'vitest/prefer-spy-on': 'error',\r\n 'vitest/prefer-hooks-on-top': 'error',\r\n 'vitest/prefer-each': 'warn',\r\n 'vitest/no-test-return-statement': 'error',\r\n 'vitest/prefer-mock-promise-shorthand': 'error'\r\n }\r\n }\r\n]);\r\n", "import playwrightEslint from 'eslint-plugin-playwright';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const playwright = defineConfig([\r\n {\r\n ...playwrightEslint.configs['flat/recommended'],\r\n files: ['**/*.e2e.ts', '**/*.e2e.js'],\r\n rules: {\r\n ...playwrightEslint.configs['flat/recommended'].rules,\r\n // Locator best practices\r\n 'playwright/prefer-locator': 'error',\r\n 'playwright/prefer-native-locators': 'error',\r\n 'playwright/no-nth-methods': 'warn',\r\n // Matcher improvements\r\n 'playwright/prefer-to-be': 'error',\r\n 'playwright/prefer-to-have-count': 'error',\r\n 'playwright/prefer-to-have-length': 'error',\r\n 'playwright/prefer-comparison-matcher': 'error',\r\n // Test structure\r\n 'playwright/prefer-hooks-on-top': 'error',\r\n 'playwright/require-top-level-describe': 'warn'\r\n }\r\n }\r\n]);\r\n", "import boundariesPlugin from 'eslint-plugin-boundaries';\r\nimport { defineConfig } from 'eslint/config';\r\n\r\nexport const boundaries = defineConfig([\r\n {\r\n files: [\r\n '**/*.js',\r\n '**/*.jsx',\r\n '**/*.ts',\r\n '**/*.tsx',\r\n '**/*.cts',\r\n '**/*.mts'\r\n ],\r\n plugins: {\r\n boundaries: boundariesPlugin\r\n },\r\n settings: {\r\n 'boundaries/elements': [\r\n {\r\n type: 'feature',\r\n pattern: '**/feature/**'\r\n },\r\n {\r\n type: 'data-access',\r\n pattern: '**/data-access/**'\r\n },\r\n {\r\n type: 'domain-logic',\r\n pattern: '**/domain-logic/**'\r\n },\r\n {\r\n type: 'ui',\r\n pattern: '**/ui/**'\r\n },\r\n {\r\n type: 'common',\r\n pattern: '**/common/**'\r\n },\r\n {\r\n type: 'utils',\r\n pattern: '**/utils/**'\r\n }\r\n ],\r\n 'import/resolver': {\r\n typescript: {\r\n alwaysTryTypes: true\r\n }\r\n }\r\n },\r\n rules: {\r\n ...boundariesPlugin.configs.recommended.rules,\r\n 'boundaries/element-types': [\r\n 'error',\r\n {\r\n default: 'disallow',\r\n message:\r\n '${dependency.type} is not allowed to be imported in ${file.type}',\r\n rules: [\r\n {\r\n from: 'feature',\r\n allow: ['feature', 'ui', 'domain-logic', 'utils', 'common']\r\n },\r\n {\r\n from: 'domain-logic',\r\n allow: ['domain-logic', 'data-access', 'utils', 'common']\r\n },\r\n {\r\n from: 'data-access',\r\n allow: ['data-access', 'utils', 'common']\r\n },\r\n {\r\n from: 'ui',\r\n allow: ['ui', 'utils', 'common']\r\n },\r\n {\r\n from: 'utils',\r\n allow: ['utils', 'common']\r\n },\r\n {\r\n from: 'common',\r\n allow: ['common']\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n files: ['**/*.stories.ts'],\r\n rules: {\r\n 'boundaries/element-types': 'off'\r\n }\r\n }\r\n]);\r\n", "import { ConfigArray } from 'typescript-eslint';\r\nimport { angularTemplate } from './lib/angular-template.js';\r\nimport { angular } from './lib/angular.js';\r\nimport { base } from './lib/base.js';\r\nimport { javascript } from './lib/javascript.js';\r\nimport { jest } from './lib/jest.js';\r\nimport { json } from './lib/json.js';\r\nimport { prettier } from './lib/prettier.js';\r\nimport { rxjs } from './lib/rxjs.js';\r\nimport { storybook } from './lib/storybook.js';\r\nimport { typescript } from './lib/typescript.js';\r\nimport { vitest } from './lib/vitest.js';\r\nimport { playwright } from './lib/playwright.js';\r\nimport { boundaries } from './lib/boundaries.js';\r\n\r\nexport const recommended: ConfigArray = [\r\n ...base,\r\n ...javascript,\r\n ...typescript,\r\n ...angular,\r\n ...angularTemplate,\r\n ...rxjs,\r\n ...jest,\r\n ...json,\r\n ...boundaries,\r\n ...storybook,\r\n ...vitest,\r\n ...playwright,\r\n ...prettier // Must be last to disable formatting rules that conflict with Prettier\r\n];\r\n\r\nexport {\r\n base,\r\n javascript,\r\n typescript,\r\n angular,\r\n angularTemplate,\r\n rxjs,\r\n jest,\r\n json,\r\n boundaries,\r\n storybook,\r\n vitest,\r\n playwright,\r\n prettier\r\n};\r\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/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 }\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': [\n 'error',\n {\n functions: 'never',\n arrays: 'always-multiline',\n exports: 'always-multiline',\n imports: 'always-multiline',\n objects: 'always-multiline',\n enums: 'always-multiline'\n }\n ],\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 jestEslint from 'eslint-plugin-jest';\nimport { defineConfig } from 'eslint/config';\n\nexport const jest = defineConfig([\n {\n files: ['**/*.spec.ts', '**/*.spec.js'],\n extends: [jestEslint.configs['flat/recommended']],\n rules: {\n 'jest/no-done-callback': 'off',\n // Elevated from recommended defaults\n 'jest/no-focused-tests': 'error',\n 'jest/no-identical-title': 'error',\n 'jest/valid-expect': 'error',\n // Style rules (selective additions from flat/style)\n 'jest/prefer-to-be': 'warn',\n 'jest/prefer-to-contain': 'warn',\n 'jest/prefer-to-have-length': 'warn',\n // Best practice additions\n 'jest/consistent-test-it': ['error', { fn: 'it' }],\n 'jest/prefer-comparison-matcher': 'error',\n 'jest/prefer-equality-matcher': 'error',\n 'jest/prefer-hooks-on-top': 'error',\n 'jest/prefer-spy-on': 'error',\n 'jest/prefer-strict-equal': 'warn',\n 'jest/prefer-mock-promise-shorthand': 'error',\n 'jest/no-conditional-in-test': 'warn',\n 'jest/no-duplicate-hooks': 'error',\n 'jest/no-test-return-statement': 'error',\n 'jest/require-to-throw-message': 'warn'\n }\n }\n]);\n", "import jsonEslint from 'eslint-plugin-json';\nimport { defineConfig } from 'eslint/config';\n\nexport const json = defineConfig([\n {\n files: ['**/*.json'],\n extends: [jsonEslint.configs.recommended]\n },\n {\n files: ['**/tsconfig*.json', '**/.vscode/*.json'],\n extends: [jsonEslint.configs['recommended-with-comments']]\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': ['error', { allowWithDecorator: true }], // 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 tokenToInsertBefore: TSESTree.Token | null = null;\n let insertText = `${defaultAccessibility} `;\n\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/element-types': [\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: 'feature',\n allow: ['feature', 'ui', 'domain-logic', 'utils', 'common']\n },\n {\n from: 'domain-logic',\n allow: ['domain-logic', 'data-access', 'utils', 'common']\n },\n {\n from: 'data-access',\n allow: ['data-access', 'utils', 'common']\n },\n {\n from: 'ui',\n allow: ['ui', 'utils', 'common']\n },\n {\n from: 'utils',\n allow: ['utils', 'common']\n },\n {\n from: 'common',\n allow: ['common']\n }\n ]\n }\n ]\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n 'boundaries/element-types': '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 { jest } from './lib/jest.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 ...angular,\n ...angularTemplate,\n ...rxjs,\n ...jest,\n ...json,\n ...boundaries,\n ...storybook,\n ...vitest,\n ...playwright,\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 jest,\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", "defineConfig", "configs", "importPluginX", "defineConfig", "defineConfig", "importPluginX", "configs", "defineConfig", "defineConfig", "defineConfig"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"explicit-accessibility.d.ts","sourceRoot":"","sources":["../../../../../../packages/lint-suite/src/lib/rules/explicit-accessibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAY,MAAM,0BAA0B,CAAC;AAMjE,KAAK,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;AAE7D,KAAK,OAAO,GAAG;IACb;QACE,oBAAoB,CAAC,EAAE,kBAAkB,CAAC;KAC3C;CACF,CAAC;;;;AA4DF,wBAiIG"}
1
+ {"version":3,"file":"explicit-accessibility.d.ts","sourceRoot":"","sources":["../../../../../../packages/lint-suite/src/lib/rules/explicit-accessibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAY,MAAM,0BAA0B,CAAC;AAMjE,KAAK,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;AAE7D,KAAK,OAAO,GAAG;IACb;QACE,oBAAoB,CAAC,EAAE,kBAAkB,CAAC;KAC3C;CACF,CAAC;;;;AA0DF,wBAiIG"}
@@ -1 +1 @@
1
- {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../../../packages/lint-suite/src/lib/typescript.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAU5C,eAAO,MAAM,UAAU,UAwPrB,CAAC"}
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../../../packages/lint-suite/src/lib/typescript.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAU5C,eAAO,MAAM,UAAU,UA0PrB,CAAC"}
package/package.json CHANGED
@@ -1,70 +1,69 @@
1
- {
2
- "name": "lint-suite",
3
- "version": "1.3.1",
4
- "description": "Reusable ESLint configurations",
5
- "repository": {
6
- "type": "git",
7
- "url": "git+https://github.com/F0rty-Tw0/lint-suite.git",
8
- "directory": "packages/lint-suite"
9
- },
10
- "keywords": [
11
- "eslint",
12
- "eslintconfig",
13
- "lint",
14
- "typescript",
15
- "jest",
16
- "angular",
17
- "storybook",
18
- "json",
19
- "rxjs",
20
- "vitest",
21
- "playwright"
22
- ],
23
- "license": "MIT",
24
- "author": "Artiom Tofan artiomtofancv@gmail.com",
25
- "type": "module",
26
- "main": "./index.cjs",
27
- "module": "./index.js",
28
- "types": "./index.d.ts",
29
- "dependencies": {
30
- "@nx/eslint-plugin": "22.5.0",
31
- "@smarttools/eslint-plugin-rxjs": "1.0.22",
32
- "@stylistic/eslint-plugin": "5.8.0",
33
- "@typescript-eslint/utils": "8.55.0",
34
- "@vitest/eslint-plugin": "1.6.7",
35
- "angular-eslint": "^21.2.0",
36
- "eslint": "^9.39.2",
37
- "eslint-import-resolver-typescript": "4.4.4",
38
- "eslint-plugin-import-x": "4.16.1",
39
- "eslint-plugin-jest": "29.14.0",
40
- "eslint-plugin-json": "^4.0.1",
41
- "eslint-plugin-playwright": "2.5.1",
42
- "eslint-plugin-storybook": "10.2.8",
43
- "eslint-config-prettier": "^10.1.8",
44
- "eslint-plugin-boundaries": "^5.4.0",
45
- "globals": "17.3.0",
46
- "typescript-eslint": "8.55.0"
47
- },
48
- "scripts": {
49
- "build": "nx build lint-suite",
50
- "patch": "pnpm version patch",
51
- "minor": "pnpm version minor",
52
- "major": "pnpm version major",
53
- "publish": "pnpm publish --access public"
54
- },
55
- "exports": {
56
- "./package.json": "./package.json",
57
- ".": {
58
- "types": "./index.d.ts",
59
- "import": "./index.js",
60
- "require": "./index.cjs"
61
- }
62
- },
63
- "files": [
64
- "./**",
65
- "!**/*.tsbuildinfo"
66
- ],
67
- "publishConfig": {
68
- "access": "public"
69
- }
70
- }
1
+ {
2
+ "name": "lint-suite",
3
+ "version": "1.3.7",
4
+ "description": "Reusable ESLint configurations",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/F0rty-Tw0/lint-suite.git",
8
+ "directory": "packages/lint-suite"
9
+ },
10
+ "keywords": [
11
+ "eslint",
12
+ "eslintconfig",
13
+ "lint",
14
+ "typescript",
15
+ "jest",
16
+ "angular",
17
+ "storybook",
18
+ "json",
19
+ "rxjs",
20
+ "vitest",
21
+ "playwright"
22
+ ],
23
+ "license": "MIT",
24
+ "author": "Artiom Tofan artiomtofancv@gmail.com",
25
+ "type": "module",
26
+ "main": "./index.cjs",
27
+ "module": "./index.js",
28
+ "types": "./index.d.ts",
29
+ "dependencies": {
30
+ "@nx/eslint-plugin": "22.6.3",
31
+ "@smarttools/eslint-plugin-rxjs": "1.0.22",
32
+ "@stylistic/eslint-plugin": "5.10.0",
33
+ "@typescript-eslint/utils": "8.57.2",
34
+ "@vitest/eslint-plugin": "1.6.13",
35
+ "angular-eslint": "^21.3.1",
36
+ "eslint": "^9.39.4",
37
+ "eslint-config-prettier": "^10.1.8",
38
+ "eslint-import-resolver-typescript": "4.4.4",
39
+ "eslint-plugin-boundaries": "5.4.0",
40
+ "eslint-plugin-import-x": "4.16.2",
41
+ "eslint-plugin-jest": "29.15.1",
42
+ "eslint-plugin-json": "^4.0.1",
43
+ "eslint-plugin-playwright": "2.10.1",
44
+ "eslint-plugin-storybook": "10.3.3",
45
+ "globals": "17.4.0",
46
+ "typescript-eslint": "8.57.2"
47
+ },
48
+ "exports": {
49
+ "./package.json": "./package.json",
50
+ ".": {
51
+ "types": "./index.d.ts",
52
+ "import": "./index.js",
53
+ "require": "./index.cjs"
54
+ }
55
+ },
56
+ "files": [
57
+ "./**",
58
+ "!**/*.tsbuildinfo"
59
+ ],
60
+ "publishConfig": {
61
+ "access": "public"
62
+ },
63
+ "scripts": {
64
+ "build": "nx build lint-suite",
65
+ "patch": "pnpm version patch",
66
+ "minor": "pnpm version minor",
67
+ "major": "pnpm version major"
68
+ }
69
+ }