lint-suite 1.3.10 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -16
- package/{index.cjs → eslint.cjs} +63 -93
- package/eslint.cjs.map +7 -0
- package/{index.d.ts → eslint.d.ts} +2 -3
- package/eslint.d.ts.map +1 -0
- package/{index.js → eslint.js} +59 -88
- package/eslint.js.map +7 -0
- package/lib/base.d.ts.map +1 -1
- package/lib/boundaries.d.ts.map +1 -1
- package/package.json +36 -20
- package/prettier.cjs +45 -0
- package/prettier.cjs.map +7 -0
- package/prettier.d.ts +3 -0
- package/prettier.d.ts.map +1 -0
- package/prettier.js +20 -0
- package/prettier.js.map +7 -0
- package/stylelint.cjs +64 -0
- package/stylelint.cjs.map +7 -0
- package/stylelint.d.ts +3 -0
- package/stylelint.d.ts.map +1 -0
- package/stylelint.js +29 -0
- package/stylelint.js.map +7 -0
- package/index.cjs.map +0 -7
- package/index.d.ts.map +0 -1
- package/index.js.map +0 -7
- package/lib/jest.d.ts +0 -2
- package/lib/jest.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -9,8 +9,10 @@ A comprehensive collection of ESLint Flat configurations for modern web applicat
|
|
|
9
9
|
- **RxJS Guidelines**: Observable patterns, Finnish notation, subject encapsulation, and operator safety
|
|
10
10
|
- **Code Style**: Formatting rules, line limits, and structural consistency
|
|
11
11
|
- **Accessibility**: ARIA validation, keyboard events, and semantic HTML
|
|
12
|
-
- **Testing**:
|
|
13
|
-
- **Prettier**: Automatic disabling of formatting rules that conflict with Prettier
|
|
12
|
+
- **Testing**: Vitest and Playwright configurations with best-practice rules
|
|
13
|
+
- **Prettier**: Automatic disabling of formatting rules that conflict with Prettier (`eslint-config-prettier`)
|
|
14
|
+
- **Prettier config**: Standalone formatting preset (subpath `lint-suite/prettier`) with the suite's house defaults and Angular/HTML overrides
|
|
15
|
+
- **Stylelint**: Standalone SCSS/CSS preset (subpath `lint-suite/stylelint`) with standard + recess-order + BEM selector enforcement
|
|
14
16
|
- **Architecture**: Module boundary enforcement with `eslint-plugin-boundaries`
|
|
15
17
|
- **Additional Support**: JSON (with comment support for tsconfig), Storybook CSF enforcement
|
|
16
18
|
|
|
@@ -26,12 +28,18 @@ pnpm add -D lint-suite
|
|
|
26
28
|
pnpm add -D eslint typescript-eslint eslint-config-prettier
|
|
27
29
|
```
|
|
28
30
|
|
|
31
|
+
If you use the Prettier preset (`lint-suite/prettier`), also install its peer dependency:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pnpm add -D prettier
|
|
35
|
+
```
|
|
36
|
+
|
|
29
37
|
## Usage
|
|
30
38
|
|
|
31
39
|
Create an `eslint.config.mjs` file in your project root:
|
|
32
40
|
|
|
33
41
|
```js
|
|
34
|
-
import { recommended } from 'lint-suite';
|
|
42
|
+
import { recommended } from 'lint-suite/eslint';
|
|
35
43
|
|
|
36
44
|
export default [...recommended];
|
|
37
45
|
```
|
|
@@ -39,7 +47,7 @@ export default [...recommended];
|
|
|
39
47
|
Or selectively include configurations:
|
|
40
48
|
|
|
41
49
|
```js
|
|
42
|
-
import { base, javascript, typescript, prettier } from 'lint-suite';
|
|
50
|
+
import { base, javascript, typescript, prettier } from 'lint-suite/eslint';
|
|
43
51
|
|
|
44
52
|
export default [
|
|
45
53
|
...base,
|
|
@@ -49,6 +57,24 @@ export default [
|
|
|
49
57
|
];
|
|
50
58
|
```
|
|
51
59
|
|
|
60
|
+
### Composing framework configs on top
|
|
61
|
+
|
|
62
|
+
`recommended` is intentionally framework-agnostic — it ships only the language + architecture + format baseline (`base`, `javascript`, `typescript`, `json`, `boundaries`, `prettier`). Add the framework/tooling configs your project actually uses:
|
|
63
|
+
|
|
64
|
+
```js
|
|
65
|
+
import { recommended, angular, angularTemplate, rxjs, vitest } from 'lint-suite/eslint';
|
|
66
|
+
|
|
67
|
+
export default [
|
|
68
|
+
...recommended,
|
|
69
|
+
...angular,
|
|
70
|
+
...angularTemplate,
|
|
71
|
+
...rxjs,
|
|
72
|
+
...vitest
|
|
73
|
+
];
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
`recommended` already ends with `prettier`. The composable configs above are rule-only, so appending them after `recommended` is safe — but if a config you add re-enables a formatting rule, append `...prettier` again at the very end.
|
|
77
|
+
|
|
52
78
|
## Available Configurations
|
|
53
79
|
|
|
54
80
|
| Configuration | Description |
|
|
@@ -59,21 +85,20 @@ export default [
|
|
|
59
85
|
| `angular` | Angular component best practices with Signal support |
|
|
60
86
|
| `angularTemplate` | HTML template rules with accessibility and performance |
|
|
61
87
|
| `rxjs` | Observable patterns, operator safety, and subscriptions |
|
|
62
|
-
| `jest` | Jest testing best practices and matchers |
|
|
63
88
|
| `vitest` | Vitest testing rules and matcher improvements |
|
|
64
89
|
| `playwright` | Playwright e2e locator and matcher best practices |
|
|
65
90
|
| `json` | JSON linting with comment support for tsconfig/vscode |
|
|
66
91
|
| `storybook` | Storybook CSF enforcement |
|
|
67
92
|
| `boundaries` | Module boundary rules (feature, data-access, ui, etc.) |
|
|
68
93
|
| `prettier` | Disables rules that conflict with Prettier (use last) |
|
|
69
|
-
| **`recommended`** | **
|
|
94
|
+
| **`recommended`** | **Baseline only: `base` + `javascript` + `typescript` + `json` + `boundaries` + `prettier` — compose the rest on top** |
|
|
70
95
|
|
|
71
96
|
## Customization
|
|
72
97
|
|
|
73
98
|
You can override any rules by adding a `rules` section to your ESLint config:
|
|
74
99
|
|
|
75
100
|
```js
|
|
76
|
-
import { typescript, prettier } from 'lint-suite';
|
|
101
|
+
import { typescript, prettier } from 'lint-suite/eslint';
|
|
77
102
|
|
|
78
103
|
export default [
|
|
79
104
|
...typescript,
|
|
@@ -86,6 +111,26 @@ export default [
|
|
|
86
111
|
];
|
|
87
112
|
```
|
|
88
113
|
|
|
114
|
+
## Stylelint and Prettier presets
|
|
115
|
+
|
|
116
|
+
These are standalone configs exported as subpaths — they are not part of the `recommended` ESLint array.
|
|
117
|
+
|
|
118
|
+
```js
|
|
119
|
+
// stylelint.config.mjs
|
|
120
|
+
import { stylelint } from 'lint-suite/stylelint';
|
|
121
|
+
|
|
122
|
+
export default stylelint;
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```js
|
|
126
|
+
// prettier.config.mjs
|
|
127
|
+
import { prettier } from 'lint-suite/prettier';
|
|
128
|
+
|
|
129
|
+
export default prettier;
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The Prettier preset is published with `prettier` as a peer dependency. The Stylelint preset requires `stylelint` and the referenced shared configs/plugins, which ship as dependencies of this package.
|
|
133
|
+
|
|
89
134
|
## Available Rules (you can add more as you prefer)
|
|
90
135
|
|
|
91
136
|
### nx/eslint-plugin
|
|
@@ -94,14 +139,6 @@ export default [
|
|
|
94
139
|
- `@nx/dependency-checks`: Validates dependencies in workspace projects
|
|
95
140
|
- ...
|
|
96
141
|
|
|
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
142
|
### @vitest/eslint-plugin
|
|
106
143
|
|
|
107
144
|
- `vitest/max-nested-describe`: Limits describe nesting depth
|
|
@@ -156,9 +193,23 @@ export default [
|
|
|
156
193
|
- Automatically disables all ESLint rules that conflict with Prettier
|
|
157
194
|
- Must be the last configuration in the array
|
|
158
195
|
|
|
196
|
+
### stylelint
|
|
197
|
+
|
|
198
|
+
- Scoped to `**/*.scss` and `**/*.css` via an `overrides` entry (SCSS is a CSS superset; SCSS-only rules simply don't fire on `.css`)
|
|
199
|
+
- Extends `stylelint-config-standard`, `stylelint-config-standard-scss`, and `stylelint-config-recess-order`
|
|
200
|
+
- `selector-class-pattern`: BEM-aware class names with ITCSS-style namespace prefixes (`o-`, `c-`, `u-`, `is-`, `has-`, `js-`, `qa-`, etc.)
|
|
201
|
+
- `plugin/selector-bem-pattern`: enforces BEM selectors, treats `*.component.scss`/`*.component.css` as implicit components, ignores `--mdc`/`--sys` custom properties
|
|
202
|
+
- `no-descending-specificity`: disabled
|
|
203
|
+
|
|
204
|
+
### prettier (format config)
|
|
205
|
+
|
|
206
|
+
- `singleQuote: true`, `semi: true`, `tabWidth: 2`, `printWidth: 135`
|
|
207
|
+
- `trailingComma: 'none'`, `bracketSpacing: true`, `bracketSameLine: true`, `arrowParens: 'always'`, `endOfLine: 'lf'`
|
|
208
|
+
- Overrides: `*.html` → `html` parser, `*.component.html` → `angular` parser
|
|
209
|
+
|
|
159
210
|
## Contributing
|
|
160
211
|
|
|
161
|
-
See [CONTRIBUTING.md](
|
|
212
|
+
See [CONTRIBUTING.md](https://github.com/F0rty-Tw0/lint-suite/blob/main/CONTRIBUTING.md) for contribution guidelines.
|
|
162
213
|
See [CHANGELOG.md](./CHANGELOG.md) for version history.
|
|
163
214
|
See [RELEASE_NOTES.md](./RELEASE_NOTES.md) for detailed release notes.
|
|
164
215
|
|
package/{index.cjs → eslint.cjs}
RENAMED
|
@@ -27,15 +27,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
|
|
30
|
-
// packages/lint-suite/src/
|
|
31
|
-
var
|
|
32
|
-
__export(
|
|
30
|
+
// packages/lint-suite/src/eslint.ts
|
|
31
|
+
var eslint_exports = {};
|
|
32
|
+
__export(eslint_exports, {
|
|
33
33
|
angular: () => angular,
|
|
34
34
|
angularTemplate: () => angularTemplate,
|
|
35
35
|
base: () => base,
|
|
36
36
|
boundaries: () => boundaries,
|
|
37
37
|
javascript: () => javascript,
|
|
38
|
-
jest: () => jest,
|
|
39
38
|
json: () => json,
|
|
40
39
|
playwright: () => playwright,
|
|
41
40
|
prettier: () => prettier,
|
|
@@ -45,7 +44,7 @@ __export(index_exports, {
|
|
|
45
44
|
typescript: () => typescript,
|
|
46
45
|
vitest: () => vitest
|
|
47
46
|
});
|
|
48
|
-
module.exports = __toCommonJS(
|
|
47
|
+
module.exports = __toCommonJS(eslint_exports);
|
|
49
48
|
|
|
50
49
|
// packages/lint-suite/src/lib/angular-template.ts
|
|
51
50
|
var import_angular_eslint = require("angular-eslint");
|
|
@@ -171,10 +170,10 @@ var angular = (0, import_config2.defineConfig)([
|
|
|
171
170
|
// Require ./ in templateUrl/styleUrl for portability
|
|
172
171
|
"@angular-eslint/use-component-selector": "error",
|
|
173
172
|
// All components must declare a selector
|
|
174
|
-
"@angular-eslint/no-developer-preview": "
|
|
175
|
-
//
|
|
176
|
-
"@angular-eslint/no-experimental": "
|
|
177
|
-
//
|
|
173
|
+
"@angular-eslint/no-developer-preview": "warn",
|
|
174
|
+
// Flag APIs marked @developerPreview (no breaking-change policy)
|
|
175
|
+
"@angular-eslint/no-experimental": "warn"
|
|
176
|
+
// Flag APIs marked @experimental
|
|
178
177
|
}
|
|
179
178
|
}
|
|
180
179
|
]);
|
|
@@ -314,17 +313,7 @@ var base = (0, import_config3.defineConfig)([
|
|
|
314
313
|
]
|
|
315
314
|
}
|
|
316
315
|
],
|
|
317
|
-
"@stylistic/comma-dangle": [
|
|
318
|
-
"error",
|
|
319
|
-
{
|
|
320
|
-
functions: "never",
|
|
321
|
-
arrays: "always-multiline",
|
|
322
|
-
exports: "always-multiline",
|
|
323
|
-
imports: "always-multiline",
|
|
324
|
-
objects: "always-multiline",
|
|
325
|
-
enums: "always-multiline"
|
|
326
|
-
}
|
|
327
|
-
],
|
|
316
|
+
"@stylistic/comma-dangle": ["error", "never"],
|
|
328
317
|
"@stylistic/indent": [
|
|
329
318
|
"error",
|
|
330
319
|
2,
|
|
@@ -416,43 +405,10 @@ var javascript = (0, import_config4.defineConfig)({
|
|
|
416
405
|
extends: [...import_eslint_plugin3.configs["flat/javascript"]]
|
|
417
406
|
});
|
|
418
407
|
|
|
419
|
-
// packages/lint-suite/src/lib/jest.ts
|
|
420
|
-
var import_eslint_plugin_jest = __toESM(require("eslint-plugin-jest"), 1);
|
|
421
|
-
var import_config5 = require("eslint/config");
|
|
422
|
-
var jest = (0, import_config5.defineConfig)([
|
|
423
|
-
{
|
|
424
|
-
files: ["**/*.spec.ts", "**/*.spec.js"],
|
|
425
|
-
extends: [import_eslint_plugin_jest.default.configs["flat/recommended"]],
|
|
426
|
-
rules: {
|
|
427
|
-
"jest/no-done-callback": "off",
|
|
428
|
-
// Elevated from recommended defaults
|
|
429
|
-
"jest/no-focused-tests": "error",
|
|
430
|
-
"jest/no-identical-title": "error",
|
|
431
|
-
"jest/valid-expect": "error",
|
|
432
|
-
// Style rules (selective additions from flat/style)
|
|
433
|
-
"jest/prefer-to-be": "warn",
|
|
434
|
-
"jest/prefer-to-contain": "warn",
|
|
435
|
-
"jest/prefer-to-have-length": "warn",
|
|
436
|
-
// Best practice additions
|
|
437
|
-
"jest/consistent-test-it": ["error", { fn: "it" }],
|
|
438
|
-
"jest/prefer-comparison-matcher": "error",
|
|
439
|
-
"jest/prefer-equality-matcher": "error",
|
|
440
|
-
"jest/prefer-hooks-on-top": "error",
|
|
441
|
-
"jest/prefer-spy-on": "error",
|
|
442
|
-
"jest/prefer-strict-equal": "warn",
|
|
443
|
-
"jest/prefer-mock-promise-shorthand": "error",
|
|
444
|
-
"jest/no-conditional-in-test": "warn",
|
|
445
|
-
"jest/no-duplicate-hooks": "error",
|
|
446
|
-
"jest/no-test-return-statement": "error",
|
|
447
|
-
"jest/require-to-throw-message": "warn"
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
]);
|
|
451
|
-
|
|
452
408
|
// packages/lint-suite/src/lib/json.ts
|
|
453
409
|
var import_json = __toESM(require("@eslint/json"), 1);
|
|
454
|
-
var
|
|
455
|
-
var json = (0,
|
|
410
|
+
var import_config5 = require("eslint/config");
|
|
411
|
+
var json = (0, import_config5.defineConfig)([
|
|
456
412
|
{
|
|
457
413
|
plugins: { json: import_json.default }
|
|
458
414
|
},
|
|
@@ -465,13 +421,13 @@ var json = (0, import_config6.defineConfig)([
|
|
|
465
421
|
|
|
466
422
|
// packages/lint-suite/src/lib/prettier.ts
|
|
467
423
|
var import_eslint_config_prettier = __toESM(require("eslint-config-prettier"), 1);
|
|
468
|
-
var
|
|
469
|
-
var prettier = (0,
|
|
424
|
+
var import_config6 = require("eslint/config");
|
|
425
|
+
var prettier = (0, import_config6.defineConfig)([import_eslint_config_prettier.default]);
|
|
470
426
|
|
|
471
427
|
// packages/lint-suite/src/lib/rxjs.ts
|
|
472
428
|
var import_eslint_plugin_rxjs = __toESM(require("@smarttools/eslint-plugin-rxjs"), 1);
|
|
473
|
-
var
|
|
474
|
-
var rxjs = (0,
|
|
429
|
+
var import_config7 = require("eslint/config");
|
|
430
|
+
var rxjs = (0, import_config7.defineConfig)([
|
|
475
431
|
{
|
|
476
432
|
files: [
|
|
477
433
|
"**/*.js",
|
|
@@ -547,8 +503,8 @@ var rxjs = (0, import_config8.defineConfig)([
|
|
|
547
503
|
|
|
548
504
|
// packages/lint-suite/src/lib/storybook.ts
|
|
549
505
|
var import_eslint_plugin_storybook = __toESM(require("eslint-plugin-storybook"), 1);
|
|
550
|
-
var
|
|
551
|
-
var storybook = (0,
|
|
506
|
+
var import_config8 = require("eslint/config");
|
|
507
|
+
var storybook = (0, import_config8.defineConfig)([
|
|
552
508
|
{
|
|
553
509
|
ignores: ["!.storybook"],
|
|
554
510
|
files: ["**/*.stories.ts"],
|
|
@@ -566,7 +522,7 @@ var storybook = (0, import_config9.defineConfig)([
|
|
|
566
522
|
var import_eslint_plugin4 = require("@nx/eslint-plugin");
|
|
567
523
|
var import_eslint_import_resolver_typescript = require("eslint-import-resolver-typescript");
|
|
568
524
|
var import_eslint_plugin_import_x2 = __toESM(require("eslint-plugin-import-x"), 1);
|
|
569
|
-
var
|
|
525
|
+
var import_config9 = require("eslint/config");
|
|
570
526
|
|
|
571
527
|
// packages/lint-suite/src/lib/rules/explicit-accessibility.ts
|
|
572
528
|
var import_utils = require("@typescript-eslint/utils");
|
|
@@ -707,7 +663,7 @@ var localTypescriptRules = {
|
|
|
707
663
|
"explicit-accessibility": explicit_accessibility_default
|
|
708
664
|
}
|
|
709
665
|
};
|
|
710
|
-
var typescript = (0,
|
|
666
|
+
var typescript = (0, import_config9.defineConfig)([
|
|
711
667
|
// NOTE: Checks for 'prettier' and 'eslint-plugin-prettier'
|
|
712
668
|
{
|
|
713
669
|
files: ["**/*.ts", "**/*.tsx", "**/*.cts", "**/*.mts"],
|
|
@@ -985,11 +941,11 @@ var typescript = (0, import_config10.defineConfig)([
|
|
|
985
941
|
|
|
986
942
|
// packages/lint-suite/src/lib/vitest.ts
|
|
987
943
|
var import_eslint_plugin5 = __toESM(require("@vitest/eslint-plugin"), 1);
|
|
988
|
-
var
|
|
944
|
+
var import_config10 = require("eslint/config");
|
|
989
945
|
var vitestPlugin = {
|
|
990
946
|
vitest: import_eslint_plugin5.default
|
|
991
947
|
};
|
|
992
|
-
var vitest = (0,
|
|
948
|
+
var vitest = (0, import_config10.defineConfig)([
|
|
993
949
|
{
|
|
994
950
|
files: ["**/*.spec.ts", "**/*.spec.js", "**/*.test.ts", "**/*.test.js"],
|
|
995
951
|
plugins: vitestPlugin,
|
|
@@ -1014,8 +970,8 @@ var vitest = (0, import_config11.defineConfig)([
|
|
|
1014
970
|
|
|
1015
971
|
// packages/lint-suite/src/lib/playwright.ts
|
|
1016
972
|
var import_eslint_plugin_playwright = __toESM(require("eslint-plugin-playwright"), 1);
|
|
1017
|
-
var
|
|
1018
|
-
var playwright = (0,
|
|
973
|
+
var import_config11 = require("eslint/config");
|
|
974
|
+
var playwright = (0, import_config11.defineConfig)([
|
|
1019
975
|
{
|
|
1020
976
|
...import_eslint_plugin_playwright.default.configs["flat/recommended"],
|
|
1021
977
|
files: ["**/*.e2e.ts", "**/*.e2e.js"],
|
|
@@ -1039,8 +995,8 @@ var playwright = (0, import_config12.defineConfig)([
|
|
|
1039
995
|
|
|
1040
996
|
// packages/lint-suite/src/lib/boundaries.ts
|
|
1041
997
|
var import_eslint_plugin_boundaries = __toESM(require("eslint-plugin-boundaries"), 1);
|
|
1042
|
-
var
|
|
1043
|
-
var boundaries = (0,
|
|
998
|
+
var import_config12 = require("eslint/config");
|
|
999
|
+
var boundaries = (0, import_config12.defineConfig)([
|
|
1044
1000
|
{
|
|
1045
1001
|
files: [
|
|
1046
1002
|
"**/*.js",
|
|
@@ -1088,35 +1044,57 @@ var boundaries = (0, import_config13.defineConfig)([
|
|
|
1088
1044
|
},
|
|
1089
1045
|
rules: {
|
|
1090
1046
|
...import_eslint_plugin_boundaries.default.configs.recommended.rules,
|
|
1091
|
-
"boundaries/
|
|
1047
|
+
"boundaries/dependencies": [
|
|
1092
1048
|
"error",
|
|
1093
1049
|
{
|
|
1094
1050
|
default: "disallow",
|
|
1095
1051
|
message: "${dependency.type} is not allowed to be imported in ${file.type}",
|
|
1096
1052
|
rules: [
|
|
1097
1053
|
{
|
|
1098
|
-
from: "feature",
|
|
1099
|
-
allow: [
|
|
1054
|
+
from: { type: "feature" },
|
|
1055
|
+
allow: [
|
|
1056
|
+
{ to: { type: "feature" } },
|
|
1057
|
+
{ to: { type: "ui" } },
|
|
1058
|
+
{ to: { type: "domain-logic" } },
|
|
1059
|
+
{ to: { type: "utils" } },
|
|
1060
|
+
{ to: { type: "common" } }
|
|
1061
|
+
]
|
|
1100
1062
|
},
|
|
1101
1063
|
{
|
|
1102
|
-
from: "domain-logic",
|
|
1103
|
-
allow: [
|
|
1064
|
+
from: { type: "domain-logic" },
|
|
1065
|
+
allow: [
|
|
1066
|
+
{ to: { type: "domain-logic" } },
|
|
1067
|
+
{ to: { type: "data-access" } },
|
|
1068
|
+
{ to: { type: "utils" } },
|
|
1069
|
+
{ to: { type: "common" } }
|
|
1070
|
+
]
|
|
1104
1071
|
},
|
|
1105
1072
|
{
|
|
1106
|
-
from: "data-access",
|
|
1107
|
-
allow: [
|
|
1073
|
+
from: { type: "data-access" },
|
|
1074
|
+
allow: [
|
|
1075
|
+
{ to: { type: "data-access" } },
|
|
1076
|
+
{ to: { type: "utils" } },
|
|
1077
|
+
{ to: { type: "common" } }
|
|
1078
|
+
]
|
|
1108
1079
|
},
|
|
1109
1080
|
{
|
|
1110
|
-
from: "ui",
|
|
1111
|
-
allow: [
|
|
1081
|
+
from: { type: "ui" },
|
|
1082
|
+
allow: [
|
|
1083
|
+
{ to: { type: "ui" } },
|
|
1084
|
+
{ to: { type: "utils" } },
|
|
1085
|
+
{ to: { type: "common" } }
|
|
1086
|
+
]
|
|
1112
1087
|
},
|
|
1113
1088
|
{
|
|
1114
|
-
from: "utils",
|
|
1115
|
-
allow: [
|
|
1089
|
+
from: { type: "utils" },
|
|
1090
|
+
allow: [
|
|
1091
|
+
{ to: { type: "utils" } },
|
|
1092
|
+
{ to: { type: "common" } }
|
|
1093
|
+
]
|
|
1116
1094
|
},
|
|
1117
1095
|
{
|
|
1118
|
-
from: "common",
|
|
1119
|
-
allow: ["common"]
|
|
1096
|
+
from: { type: "common" },
|
|
1097
|
+
allow: [{ to: { type: "common" } }]
|
|
1120
1098
|
}
|
|
1121
1099
|
]
|
|
1122
1100
|
}
|
|
@@ -1126,25 +1104,18 @@ var boundaries = (0, import_config13.defineConfig)([
|
|
|
1126
1104
|
{
|
|
1127
1105
|
files: ["**/*.stories.ts"],
|
|
1128
1106
|
rules: {
|
|
1129
|
-
"boundaries/
|
|
1107
|
+
"boundaries/dependencies": "off"
|
|
1130
1108
|
}
|
|
1131
1109
|
}
|
|
1132
1110
|
]);
|
|
1133
1111
|
|
|
1134
|
-
// packages/lint-suite/src/
|
|
1112
|
+
// packages/lint-suite/src/eslint.ts
|
|
1135
1113
|
var recommended = [
|
|
1136
1114
|
...base,
|
|
1137
1115
|
...javascript,
|
|
1138
1116
|
...typescript,
|
|
1139
|
-
...angular,
|
|
1140
|
-
...angularTemplate,
|
|
1141
|
-
...rxjs,
|
|
1142
|
-
...jest,
|
|
1143
1117
|
...json,
|
|
1144
1118
|
...boundaries,
|
|
1145
|
-
...storybook,
|
|
1146
|
-
...vitest,
|
|
1147
|
-
...playwright,
|
|
1148
1119
|
...prettier
|
|
1149
1120
|
// Must be last to disable formatting rules that conflict with Prettier
|
|
1150
1121
|
];
|
|
@@ -1155,7 +1126,6 @@ var recommended = [
|
|
|
1155
1126
|
base,
|
|
1156
1127
|
boundaries,
|
|
1157
1128
|
javascript,
|
|
1158
|
-
jest,
|
|
1159
1129
|
json,
|
|
1160
1130
|
playwright,
|
|
1161
1131
|
prettier,
|
|
@@ -1165,4 +1135,4 @@ var recommended = [
|
|
|
1165
1135
|
typescript,
|
|
1166
1136
|
vitest
|
|
1167
1137
|
});
|
|
1168
|
-
//# sourceMappingURL=
|
|
1138
|
+
//# sourceMappingURL=eslint.cjs.map
|
package/eslint.cjs.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../packages/lint-suite/src/eslint.ts", "../../../../packages/lint-suite/src/lib/angular-template.ts", "../../../../packages/lint-suite/src/lib/angular.ts", "../../../../packages/lint-suite/src/lib/base.ts", "../../../../packages/lint-suite/src/lib/javascript.ts", "../../../../packages/lint-suite/src/lib/json.ts", "../../../../packages/lint-suite/src/lib/prettier.ts", "../../../../packages/lint-suite/src/lib/rxjs.ts", "../../../../packages/lint-suite/src/lib/storybook.ts", "../../../../packages/lint-suite/src/lib/typescript.ts", "../../../../packages/lint-suite/src/lib/rules/explicit-accessibility.ts", "../../../../packages/lint-suite/src/lib/vitest.ts", "../../../../packages/lint-suite/src/lib/playwright.ts", "../../../../packages/lint-suite/src/lib/boundaries.ts"],
|
|
4
|
+
"sourcesContent": ["import { ConfigArray } from 'typescript-eslint';\nimport { angularTemplate } from './lib/angular-template.js';\nimport { angular } from './lib/angular.js';\nimport { base } from './lib/base.js';\nimport { javascript } from './lib/javascript.js';\nimport { json } from './lib/json.js';\nimport { prettier } from './lib/prettier.js';\nimport { rxjs } from './lib/rxjs.js';\nimport { storybook } from './lib/storybook.js';\nimport { typescript } from './lib/typescript.js';\nimport { vitest } from './lib/vitest.js';\nimport { playwright } from './lib/playwright.js';\nimport { boundaries } from './lib/boundaries.js';\n\nexport const recommended: ConfigArray = [\n ...base,\n ...javascript,\n ...typescript,\n ...json,\n ...boundaries,\n ...prettier // Must be last to disable formatting rules that conflict with Prettier\n];\n\nexport {\n base,\n javascript,\n typescript,\n angular,\n angularTemplate,\n rxjs,\n json,\n boundaries,\n storybook,\n vitest,\n playwright,\n prettier\n};\n", "import { configs } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const angularTemplate = defineConfig([\n {\n files: ['**/*.html'],\n extends: [\n ...(configs.templateAccessibility as Config[]),\n ...(configs.templateRecommended as Config[])\n ],\n rules: {\n '@angular-eslint/template/prefer-template-literal': 'error',\n '@angular-eslint/template/no-any': 'error',\n '@angular-eslint/template/no-duplicate-attributes': 'error',\n '@angular-eslint/template/button-has-type': 'error',\n '@angular-eslint/template/no-positive-tabindex': 'error',\n '@angular-eslint/template/valid-aria': 'error',\n '@angular-eslint/template/alt-text': 'error',\n '@angular-eslint/template/elements-content': 'error',\n '@angular-eslint/template/click-events-have-key-events': 'error',\n '@angular-eslint/template/mouse-events-have-key-events': 'error',\n '@angular-eslint/template/table-scope': 'error',\n '@angular-eslint/template/no-autofocus': 'error',\n '@angular-eslint/template/no-distracting-elements': 'error',\n '@angular-eslint/template/prefer-control-flow': 'error',\n '@angular-eslint/template/prefer-self-closing-tags': 'error',\n '@angular-eslint/template/prefer-ngsrc': 'error',\n '@angular-eslint/template/prefer-built-in-pipes': 'error',\n '@angular-eslint/template/no-interpolation-in-attributes': 'error',\n '@angular-eslint/template/no-nested-tags': 'error',\n '@angular-eslint/template/use-track-by-function': 'error',\n '@angular-eslint/template/label-has-associated-control': 'error',\n '@angular-eslint/template/prefer-at-else': 'error', // v21: @if/@else syntax\n '@angular-eslint/template/prefer-at-empty': 'error', // v21: @for/@empty syntax\n '@angular-eslint/template/prefer-contextual-for-variables': 'error', // v21: Use $index, $first, etc.\n '@angular-eslint/template/no-empty-control-flow': 'error', // v21: Catch incomplete refactoring\n '@angular-eslint/template/prefer-class-binding': 'error', // v21.2.0: Prefer [class] over ngClass\n '@angular-eslint/template/prefer-static-string-properties': 'error', // Reduce change detection\n '@angular-eslint/template/no-non-null-assertion': 'error', // Forbid `!` assertions in templates\n '@angular-eslint/template/no-inline-styles': 'error', // Forbid inline style=\"...\" attributes\n '@angular-eslint/template/conditional-complexity': [\n 'warn',\n { maxComplexity: 5 }\n ], // Template readability\n '@angular-eslint/template/attributes-order': [\n 'error',\n {\n alphabetical: true,\n order: [\n 'STRUCTURAL_DIRECTIVE', // e.g. `*ngIf=\"true\"`, `*ngFor=\"let item of items\"`\n 'TEMPLATE_REFERENCE', // e.g. `<input #inputRef>`\n 'INPUT_BINDING', // e.g. `[id]=\"3\"`, `[attr.colspan]=\"colspan\"`, [style.width.%]=\"100\", [@triggerName]=\"expression\", `bind-id=\"handleChange()\"`\n 'TWO_WAY_BINDING', // e.g. `[(id)]=\"id\"`, `bindon-id=\"id\"\n 'ATTRIBUTE_BINDING', // e.g. `<input required>`, `id=\"3\"`\n 'OUTPUT_BINDING' // e.g. `(idChange)=\"handleChange()\"`, `on-id=\"handleChange()\"`\n ]\n }\n ]\n }\n }\n]);\n", "import globals from 'globals';\nimport { configs, processInlineTemplates } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const angular = defineConfig([\n {\n files: ['**/*.ts'],\n extends: [...(configs.tsRecommended as Config[])],\n languageOptions: {\n globals: {\n ...globals.browser,\n ...globals.es2025,\n ...globals.node\n }\n },\n processor: processInlineTemplates,\n rules: {\n '@angular-eslint/prefer-on-push-component-change-detection': 'error',\n '@angular-eslint/prefer-signals': 'error',\n '@angular-eslint/use-injectable-provided-in': 'error',\n '@angular-eslint/prefer-signal-model': 'error',\n '@angular-eslint/no-uncalled-signals': 'error',\n '@angular-eslint/prefer-host-metadata-property': 'error',\n '@angular-eslint/no-implicit-take-until-destroyed': 'error', // v21.2.0: Enforce explicit DestroyRef\n '@angular-eslint/no-async-lifecycle-method': 'error', // Prevent async lifecycle hooks\n '@angular-eslint/prefer-output-readonly': 'warn', // Prevent accidental reassignment\n '@angular-eslint/prefer-output-emitter-ref': 'warn', // Modern output() function over @Output()\n '@angular-eslint/sort-lifecycle-methods': 'warn', // Consistent lifecycle method ordering\n '@angular-eslint/computed-must-return': 'error', // Catch silent computed() bugs missing a return\n '@angular-eslint/no-conflicting-lifecycle': 'error', // Block incompatible hook combinations (OnChanges + DoCheck)\n '@angular-eslint/no-duplicates-in-metadata-arrays': 'error', // Catch duplicate imports/providers in @Component/@NgModule\n '@angular-eslint/no-lifecycle-call': 'error', // Forbid manual this.ngOnInit() calls\n '@angular-eslint/require-lifecycle-on-prototype': 'error', // Lifecycle hooks must be methods, not arrow-fn fields\n '@angular-eslint/relative-url-prefix': 'error', // Require ./ in templateUrl/styleUrl for portability\n '@angular-eslint/use-component-selector': 'error', // All components must declare a selector\n '@angular-eslint/no-developer-preview': 'warn', // Flag APIs marked @developerPreview (no breaking-change policy)\n '@angular-eslint/no-experimental': 'warn' // Flag APIs marked @experimental\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport stylistic from '@stylistic/eslint-plugin';\nimport importPluginX from 'eslint-plugin-import-x';\nimport { defineConfig } from 'eslint/config';\n\nexport const base = defineConfig([\n { extends: [...configs['flat/base']] },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [importPluginX.flatConfigs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [stylistic.configs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'no-param-reassign': 'error',\n 'no-alert': 'error',\n 'no-console': ['warn', { allow: ['warn', 'error'] }],\n 'no-debugger': 'error',\n eqeqeq: ['error', 'always', { null: 'ignore' }],\n curly: ['error', 'multi'],\n 'prefer-const': ['error', { destructuring: 'all' }],\n 'no-var': 'error',\n 'object-shorthand': 'error',\n 'prefer-arrow-callback': 'error',\n 'no-useless-concat': 'error',\n 'prefer-template': 'error',\n 'no-nested-ternary': 'error',\n 'no-useless-assignment': 'error', // NEW: Catch unused assignments (ESLint v9)\n 'no-object-constructor': 'error', // Disallow new Object() without arguments\n 'no-else-return': ['error', { allowElseIf: false }], // Prefer early returns\n 'no-multi-assign': 'error', // Disallow chaining assignments\n radix: 'error', // Require radix parameter for parseInt()\n yoda: 'error', // Disallow yoda conditions (`if (\"red\" === color)`)\n complexity: ['warn', 10], // Warn if function complexity is high\n 'max-depth': ['warn', 4], // Warn on deeply nested blocks\n 'max-lines-per-function': [\n 'warn',\n { max: 50, skipBlankLines: true, skipComments: true }\n ], // Warn on long functions\n 'max-params': ['warn', 4], // Warn on functions with many parameters\n 'no-lonely-if': 'error', // Disallow if statements as the only statement in an else block\n 'grouped-accessor-pairs': ['error', 'getBeforeSet'], // Enforce consistency for getters/setters\n 'class-methods-use-this': 'error',\n 'no-underscore-dangle': 'error',\n 'max-len': [\n 'error',\n {\n code: 135,\n ignoreComments: true\n }\n ],\n 'spaced-comment': [\n 2,\n 'always',\n {\n block: {\n exceptions: ['*']\n }\n }\n ],\n '@stylistic/padding-line-between-statements': [\n 'error',\n {\n blankLine: 'always',\n prev: 'export',\n next: ['export', 'const']\n },\n {\n blankLine: 'always',\n prev: ['const', 'let', 'var'],\n next: '*'\n },\n {\n blankLine: 'any',\n prev: ['const', 'let', 'var'],\n next: ['const', 'let', 'var']\n },\n {\n blankLine: 'always',\n prev: '*',\n next: [\n 'for',\n 'if',\n 'return',\n 'throw',\n 'switch',\n 'try',\n 'class',\n 'function'\n ]\n }\n ],\n '@stylistic/comma-dangle': ['error', 'never'],\n '@stylistic/indent': [\n 'error',\n 2,\n {\n offsetTernaryExpressions: true,\n SwitchCase: 1,\n ignoredNodes: [\n 'TSTypeParameterInstantiation',\n 'FunctionExpression > .params > :matches(Decorator, :not(:first-child))'\n ]\n }\n ],\n 'sort-imports': [\n 'error',\n {\n ignoreCase: false,\n ignoreDeclarationSort: true,\n ignoreMemberSort: false,\n memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],\n allowSeparatedGroups: true\n }\n ]\n }\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts',\n '**/*.html'\n ],\n rules: {\n 'max-lines': [\n 'error',\n {\n max: 150,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n 'max-lines-per-function': 'off',\n complexity: ['warn', { max: 3 }],\n 'max-lines': [\n 'error',\n {\n max: 300,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n 'max-classes-per-file': 'off'\n }\n },\n {\n files: ['**/*.state.ts'],\n rules: {\n 'class-methods-use-this': 'off'\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const javascript = defineConfig({\n files: ['**/*.js', '**/*.jsx', '**/*.cjs', '**/*.mjs'],\n extends: [...(configs['flat/javascript'] as Config[])]\n});\n", "import jsonPlugin from '@eslint/json';\nimport { defineConfig } from 'eslint/config';\n\nexport const json = defineConfig([\n {\n plugins: { json: jsonPlugin }\n },\n {\n files: ['**/*.json'],\n language: 'json/json',\n extends: [jsonPlugin.configs.recommended]\n }\n]);\n", "import eslintConfigPrettier from 'eslint-config-prettier';\nimport { defineConfig } from 'eslint/config';\n\nexport const prettier = defineConfig([eslintConfigPrettier]);\n", "import rxjsEslint from '@smarttools/eslint-plugin-rxjs';\nimport { defineConfig } from 'eslint/config';\n\nexport const rxjs = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n extends: [rxjsEslint.configs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n rxjs: rxjsEslint\n }\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'rxjs/prefer-observer': 'error',\n 'rxjs/finnish': 'warn',\n 'rxjs/no-ignored-subscription': 'warn',\n 'rxjs/no-ignored-error': 'warn',\n 'rxjs/no-unsafe-switchmap': 'error',\n 'rxjs/no-unsafe-takeuntil': 'error',\n 'rxjs/no-unsafe-catch': 'error',\n 'rxjs/no-unsafe-first': 'error',\n 'rxjs/no-topromise': 'error',\n 'rxjs/throw-error': 'error',\n 'rxjs/no-async-subscribe': 'off',\n 'rxjs/no-exposed-subjects': 'error', // Enforce subject encapsulation\n 'rxjs/no-cyclic-action': 'error', // Prevent infinite loops in NgRx effects\n 'rxjs/no-subscribe-handlers': 'warn' // Prefer observer objects (complements prefer-observer)\n }\n },\n {\n files: ['**/*.spec.ts', '**/*.test.ts', '**/*.spec.js', '**/*.test.js'],\n rules: {\n 'rxjs/no-ignored-subscription': 'off',\n 'rxjs/no-subscribe-handlers': 'off'\n }\n }\n]);\n", "import storybookEslint from 'eslint-plugin-storybook';\nimport { defineConfig } from 'eslint/config';\n\nexport const storybook = defineConfig([\n {\n ignores: ['!.storybook'],\n files: ['**/*.stories.ts'],\n extends: [storybookEslint.configs['flat/recommended']],\n rules: {\n 'storybook/csf-component': 'warn', // Ensure component property is set\n 'storybook/no-stories-of': 'error' // Prevent deprecated storiesOf API\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';\nimport importPluginX from 'eslint-plugin-import-x';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nimport explicitAccessibilityRule from './rules/explicit-accessibility.js';\n\nconst localTypescriptRules: Record<string, unknown> = {\n rules: {\n 'explicit-accessibility': explicitAccessibilityRule\n }\n};\n\nexport const typescript = defineConfig([\n // NOTE: Checks for 'prettier' and 'eslint-plugin-prettier'\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n extends: [\n importPluginX.flatConfigs.typescript,\n ...(configs['flat/typescript'] as Config[])\n ]\n },\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n plugins: { local: localTypescriptRules },\n rules: {\n 'local/explicit-accessibility': 'error',\n '@typescript-eslint/explicit-member-accessibility': 'error',\n '@typescript-eslint/explicit-function-return-type': 'error',\n '@typescript-eslint/no-empty-function': 'error',\n '@typescript-eslint/no-unused-vars': 'error',\n '@typescript-eslint/no-use-before-define': 'error',\n\n // A. Eliminating `any` (already covered by strict-type-checked, but explicit for clarity)\n '@typescript-eslint/no-explicit-any': 'error',\n '@typescript-eslint/no-unsafe-assignment': 'error',\n '@typescript-eslint/no-unsafe-call': 'error',\n '@typescript-eslint/no-unsafe-member-access': 'error',\n '@typescript-eslint/no-unsafe-return': 'error',\n '@typescript-eslint/no-unsafe-argument': 'error',\n\n // New v8 type-safety rules (replacements for deprecated ban-types)\n '@typescript-eslint/no-empty-object-type': 'error', // Bans confusing {} type\n '@typescript-eslint/no-unsafe-function-type': 'error', // Bans Function type\n '@typescript-eslint/no-wrapper-object-types': 'error', // Bans Number, String, Boolean wrappers\n\n // B. Explicit Annotations (partially covered, explicit module boundaries is key)\n '@typescript-eslint/explicit-module-boundary-types': 'error',\n // Consider enabling if maximum explicitness is desired, even if verbose:\n\n // C. Null/Undefined Safety (Requires strictNullChecks)\n '@typescript-eslint/no-non-null-assertion': 'error',\n '@typescript-eslint/prefer-nullish-coalescing': 'error',\n '@typescript-eslint/prefer-optional-chain': 'error',\n\n // D. Promise Handling (Supplementing plugin:promise/recommended)\n '@typescript-eslint/no-floating-promises': [\n 'error',\n { ignoreVoid: true }\n ],\n '@typescript-eslint/no-misused-promises': 'warn', // Already in recommended-type-checked\n '@typescript-eslint/promise-function-async': 'error',\n '@typescript-eslint/await-thenable': 'error', // Already in recommended-type-checked\n\n // E. Best Practices & Potential Errors (Some covered by presets, fine-tuning here)\n '@typescript-eslint/no-inferrable-types': 'warn', // Keep as warn or disable if inference is preferred\n '@typescript-eslint/no-require-imports': 'error', // Use ES modules (replaces deprecated no-var-requires)\n '@typescript-eslint/only-throw-error': 'error', // Replaces deprecated no-throw-literal\n '@typescript-eslint/no-array-delete': 'error', // Prevents delete arr[0]\n '@typescript-eslint/return-await': ['error', 'in-try-catch'], // Better stack traces in try/catch\n '@typescript-eslint/require-await': 'error',\n '@typescript-eslint/restrict-template-expressions': [\n 'error',\n { allowNumber: true, allowBoolean: true }\n ], // Allow numbers/booleans in templates\n '@typescript-eslint/restrict-plus-operands': 'error', // Enforce consistent types for '+'\n '@typescript-eslint/prefer-as-const': 'error',\n '@typescript-eslint/no-shadow': 'error',\n '@typescript-eslint/switch-exhaustiveness-check': 'error', // Ensure switch on unions is exhaustive\n '@typescript-eslint/no-unused-expressions': [\n 'error',\n { allowShortCircuit: true, allowTernary: true }\n ],\n '@typescript-eslint/no-useless-constructor': 'error',\n '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], // Prefer dot notation where possible\n\n // Strict type-checked rules\n '@typescript-eslint/no-unnecessary-condition': 'error', // Catches always-true/false conditions\n '@typescript-eslint/no-confusing-void-expression': [\n 'error',\n { ignoreArrowShorthand: true, ignoreVoidOperator: true }\n ], // Prevent confusing void usage\n '@typescript-eslint/no-dynamic-delete': 'error', // Use Map instead of delete obj[key]\n '@typescript-eslint/no-extraneous-class': [\n 'error',\n { allowWithDecorator: true }\n ], // Allow Angular classes\n '@typescript-eslint/no-invalid-void-type': 'error', // Restrict void to return types\n '@typescript-eslint/unified-signatures': 'error', // Merge overloads where possible\n '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error', // Forbids foo! ?? bar\n\n // Stylistic type-checked rules\n '@typescript-eslint/prefer-find': 'error', // Use find() instead of filter()[0]\n '@typescript-eslint/prefer-for-of': 'error', // Modern iteration\n '@typescript-eslint/prefer-includes': 'error', // indexOf() \u2192 includes()\n '@typescript-eslint/prefer-string-starts-ends-with': 'error', // Modern string methods\n '@typescript-eslint/prefer-regexp-exec': 'error', // Better regex performance\n\n // F. Consistency & Style (Some covered by stylistic-type-checked)\n '@typescript-eslint/consistent-type-assertions': [\n 'error',\n { assertionStyle: 'as', objectLiteralTypeAssertions: 'never' }\n ],\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\n '@typescript-eslint/consistent-type-imports': [\n 'error',\n { prefer: 'type-imports', fixStyle: 'separate-type-imports' }\n ],\n '@typescript-eslint/naming-convention': [\n 'error',\n {\n selector: 'objectLiteralProperty',\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'objectLiteralProperty',\n format: ['camelCase', 'snake_case', 'PascalCase']\n },\n {\n selector: 'parameter',\n format: ['camelCase'],\n leadingUnderscore: 'allow'\n },\n { selector: 'default', format: ['camelCase'] },\n { selector: 'variable', format: ['camelCase', 'UPPER_CASE'] },\n { selector: 'function', format: ['camelCase'] },\n { selector: 'typeLike', format: ['PascalCase'] },\n {\n selector: 'property',\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'property',\n format: ['camelCase', 'PascalCase', 'snake_case']\n }\n ],\n 'import-x/order': [\n 'error',\n {\n groups: [\n 'builtin',\n 'external',\n 'internal',\n ['parent', 'sibling'],\n 'index',\n 'unknown'\n ],\n pathGroups: [\n {\n pattern: '@angular/**',\n group: 'builtin',\n position: 'before'\n },\n {\n pattern: '@nestjs/**',\n group: 'builtin',\n position: 'before'\n },\n {\n pattern: '@shared/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@backend/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@frontend/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@*/shared/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@*/frontend/**',\n group: 'internal',\n position: 'after'\n },\n {\n pattern: '@*/backend/**',\n group: 'internal',\n position: 'after'\n }\n ],\n pathGroupsExcludedImportTypes: ['builtin'],\n 'newlines-between': 'always',\n alphabetize: { order: 'asc', caseInsensitive: true }\n }\n ],\n 'import-x/no-unresolved': 'error',\n 'import-x/no-duplicates': 'error',\n 'import-x/prefer-default-export': 'off',\n 'import-x/no-useless-path-segments': ['error', { noUselessIndex: true }],\n 'import-x/newline-after-import': 'error',\n 'import-x/first': 'error',\n 'import-x/no-mutable-exports': 'error',\n 'import-x/no-self-import': 'error', // Prevents modules importing themselves\n 'import-x/no-cycle': ['error', { maxDepth: 2, ignoreExternal: true }], // Prevents circular dependencies\n 'import-x/consistent-type-specifier-style': ['error', 'prefer-top-level'], // Consistent type imports\n 'import-x/no-anonymous-default-export': 'error' // Improve code searchability\n },\n settings: {\n 'import-x/resolver-next': [\n createTypeScriptImportResolver({\n alwaysTryTypes: true\n })\n ]\n }\n },\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n rules: {\n '@typescript-eslint/prefer-readonly': 'error'\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n '@typescript-eslint/no-namespace': 'off',\n '@typescript-eslint/no-extraneous-class': 'off'\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n '@typescript-eslint/no-empty-function': 'off',\n '@typescript-eslint/no-unbound-method': 'off',\n '@typescript-eslint/consistent-type-assertions': 'off'\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n '@typescript-eslint/consistent-type-assertions': 'off',\n '@typescript-eslint/naming-convention': 'off'\n }\n }\n]);\n", "import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';\n\nconst createRule = ESLintUtils.RuleCreator(\n () => 'https://eslint.org/docs/latest/rules/no-unused-private-class-members'\n);\n\ntype AccessibilityLevel = 'public' | 'private' | 'protected';\n\ntype Options = [\n {\n defaultAccessibility?: AccessibilityLevel;\n }\n];\n\nconst defaultOptions: Options[0] = {\n defaultAccessibility: 'private'\n};\n\nconst getNodeName = (\n node: TSESTree.Node | TSESTree.Token | null | undefined\n): string => {\n if (!node) {\n return '<unknown>';\n }\n\n /*\n * MethodDefinition or PropertyDefinition (check 'key' first)\n * Note: Check 'key' before 'kind' because MethodDefinition has both\n */\n if ('key' in node && node.key) {\n if (node.key.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return node.key.name;\n }\n // Handle computed property names, private identifiers (#name), etc. if needed\n if (node.key.type === TSESTree.AST_NODE_TYPES.PrivateIdentifier) {\n return `#${node.key.name}`;\n }\n return '<computed/complex key>';\n }\n\n // Constructor specific check (if key check didn't catch it - unlikely for MethodDefinition)\n if ('kind' in node && node.kind === 'constructor') {\n return 'constructor';\n }\n\n // TSParameterProperty - handle its 'parameter' property\n if (node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty) {\n const param = node.parameter; // Assign to variable for clarity & potentially better inference\n\n // Handle different parameter kinds:\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return param.name;\n }\n if (param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern) {\n // Check the left side of the assignment\n if (param.left.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return param.left.name; // Name is on the identifier being assigned to\n }\n /*\n * Parameter is an assignment pattern with destructuring (ArrayPattern/ObjectPattern)\n * You might want more sophisticated logic here to extract a name\n */\n return '<destructured parameter>';\n }\n return '<complex parameter>';\n }\n\n return '<unknown>';\n};\n\nexport default createRule<Options, 'missingAccessibility'>({\n name: 'explicit-accessibility',\n meta: {\n type: 'suggestion',\n docs: {\n description: 'Require explicit accessibility modifiers on class members'\n },\n fixable: 'code',\n schema: [\n {\n type: 'object',\n properties: {\n defaultAccessibility: {\n type: 'string',\n enum: ['public', 'private', 'protected'],\n description: 'The accessibility modifier to add if one is missing.'\n }\n },\n additionalProperties: false\n }\n ],\n messages: {\n missingAccessibility:\n \"Class member '{{ name }}' is missing an explicit accessibility modifier (public/private/protected).\"\n }\n },\n defaultOptions: [defaultOptions],\n\n create(context, [options]) {\n const { defaultAccessibility } = { ...defaultOptions, ...options };\n const sourceCode = context.sourceCode;\n\n function checkNode(\n node:\n | TSESTree.MethodDefinition\n | TSESTree.PropertyDefinition\n | TSESTree.TSParameterProperty\n ): void {\n if (node.accessibility) {\n return; // Already has modifier\n }\n\n let reportNode: TSESTree.Node | TSESTree.Token = node;\n const name = getNodeName(node);\n // Adjust report node for better highlighting\n if (\n node.type === TSESTree.AST_NODE_TYPES.MethodDefinition ||\n node.type === TSESTree.AST_NODE_TYPES.PropertyDefinition\n ) {\n reportNode = node.key;\n } else {\n const param = node.parameter;\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\n reportNode = param;\n } else if (\n param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern &&\n param.left.type === TSESTree.AST_NODE_TYPES.Identifier\n ) {\n reportNode = param.left;\n }\n // Keep reportNode as the TSParameterProperty node itself if param isn't simple identifier\n }\n\n context.report({\n node: reportNode ?? node,\n messageId: 'missingAccessibility',\n data: { name },\n fix(fixer) {\n let insertText = `${defaultAccessibility} `;\n\n let tokenToInsertBefore: TSESTree.Token | null;\n if (node.decorators.length > 0) {\n const lastDecorator = node.decorators[node.decorators.length - 1];\n tokenToInsertBefore = sourceCode.getTokenAfter(lastDecorator);\n } else {\n tokenToInsertBefore = sourceCode.getFirstToken(node);\n }\n\n // Parameter properties need special handling if they also have 'readonly'\n if (\n node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty &&\n node.readonly\n ) {\n // If readonly exists without accessibility, insert accessibility *before* readonly\n const firstToken = sourceCode.getFirstToken(node);\n if (firstToken?.value === 'readonly') {\n // double check it's the readonly token\n tokenToInsertBefore = firstToken;\n }\n // If insertion point wasn't decorators, use first token (which should be readonly)\n }\n\n if (!tokenToInsertBefore) return null;\n\n /*\n * If the token immediately after the insertion point isn't whitespace, add a space.\n * (Handles case where tokenToInsertBefore is the last decorator token)\n */\n const tokenAfterInsertion = sourceCode.getTokenAfter(\n tokenToInsertBefore,\n { includeComments: false }\n );\n const textBetween = sourceCode.text.slice(\n tokenToInsertBefore.range[1],\n tokenAfterInsertion?.range[0]\n );\n if (!/^\\s/.test(textBetween)) {\n insertText = ` ${insertText}`; // Add leading space if needed after decorator\n }\n\n return fixer.insertTextBefore(tokenToInsertBefore, insertText);\n }\n });\n }\n\n return {\n MethodDefinition(node: TSESTree.MethodDefinition): void {\n checkNode(node);\n },\n\n PropertyDefinition(node: TSESTree.PropertyDefinition): void {\n checkNode(node);\n },\n\n TSParameterProperty(node: TSESTree.TSParameterProperty): void {\n checkNode(node);\n }\n };\n }\n});\n", "import vitestEslint from '@vitest/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\n\nconst vitestPlugin: Record<string, object> = {\n vitest: vitestEslint\n};\n\nexport const vitest = defineConfig([\n {\n files: ['**/*.spec.ts', '**/*.spec.js', '**/*.test.ts', '**/*.test.js'],\n plugins: vitestPlugin,\n rules: {\n ...vitestEslint.configs.recommended.rules,\n 'vitest/max-nested-describe': ['error', { max: 3 }],\n // Matcher improvements\n 'vitest/prefer-to-be': 'error',\n 'vitest/prefer-to-contain': 'error',\n 'vitest/prefer-to-have-length': 'error',\n 'vitest/prefer-comparison-matcher': 'error',\n 'vitest/prefer-strict-equal': 'warn',\n // Test quality\n 'vitest/prefer-spy-on': 'error',\n 'vitest/prefer-hooks-on-top': 'error',\n 'vitest/prefer-each': 'warn',\n 'vitest/no-test-return-statement': 'error',\n 'vitest/prefer-mock-promise-shorthand': 'error'\n }\n }\n]);\n", "import playwrightEslint from 'eslint-plugin-playwright';\nimport { defineConfig } from 'eslint/config';\n\nexport const playwright = defineConfig([\n {\n ...playwrightEslint.configs['flat/recommended'],\n files: ['**/*.e2e.ts', '**/*.e2e.js'],\n rules: {\n ...playwrightEslint.configs['flat/recommended'].rules,\n // Locator best practices\n 'playwright/prefer-locator': 'error',\n 'playwright/prefer-native-locators': 'error',\n 'playwright/no-nth-methods': 'warn',\n // Matcher improvements\n 'playwright/prefer-to-be': 'error',\n 'playwright/prefer-to-have-count': 'error',\n 'playwright/prefer-to-have-length': 'error',\n 'playwright/prefer-comparison-matcher': 'error',\n // Test structure\n 'playwright/prefer-hooks-on-top': 'error',\n 'playwright/require-top-level-describe': 'warn'\n }\n }\n]);\n", "import boundariesPlugin from 'eslint-plugin-boundaries';\nimport { defineConfig } from 'eslint/config';\n\nexport const boundaries = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n boundaries: boundariesPlugin\n },\n settings: {\n 'boundaries/elements': [\n {\n type: 'feature',\n pattern: '**/feature/**'\n },\n {\n type: 'data-access',\n pattern: '**/data-access/**'\n },\n {\n type: 'domain-logic',\n pattern: '**/domain-logic/**'\n },\n {\n type: 'ui',\n pattern: '**/ui/**'\n },\n {\n type: 'common',\n pattern: '**/common/**'\n },\n {\n type: 'utils',\n pattern: '**/utils/**'\n }\n ],\n 'import/resolver': {\n typescript: {\n alwaysTryTypes: true\n }\n }\n },\n rules: {\n ...boundariesPlugin.configs.recommended.rules,\n 'boundaries/dependencies': [\n 'error',\n {\n default: 'disallow',\n message:\n '${dependency.type} is not allowed to be imported in ${file.type}',\n rules: [\n {\n from: { type: 'feature' },\n allow: [\n { to: { type: 'feature' } },\n { to: { type: 'ui' } },\n { to: { type: 'domain-logic' } },\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'domain-logic' },\n allow: [\n { to: { type: 'domain-logic' } },\n { to: { type: 'data-access' } },\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'data-access' },\n allow: [\n { to: { type: 'data-access' } },\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'ui' },\n allow: [\n { to: { type: 'ui' } },\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'utils' },\n allow: [\n { to: { type: 'utils' } },\n { to: { type: 'common' } }\n ]\n },\n {\n from: { type: 'common' },\n allow: [{ to: { type: 'common' } }]\n }\n ]\n }\n ]\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n 'boundaries/dependencies': 'off'\n }\n }\n]);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_angular_eslint", "import_config", "globals", "import_eslint_plugin", "import_config", "importPluginX", "stylistic", "import_eslint_plugin", "import_config", "import_config", "jsonPlugin", "import_config", "eslintConfigPrettier", "import_config", "rxjsEslint", "import_config", "storybookEslint", "import_eslint_plugin", "import_eslint_plugin_import_x", "import_config", "importPluginX", "import_eslint_plugin", "import_config", "vitestEslint", "import_config", "playwrightEslint", "import_config", "boundariesPlugin"]
|
|
7
|
+
}
|
|
@@ -3,7 +3,6 @@ import { angularTemplate } from './lib/angular-template.js';
|
|
|
3
3
|
import { angular } from './lib/angular.js';
|
|
4
4
|
import { base } from './lib/base.js';
|
|
5
5
|
import { javascript } from './lib/javascript.js';
|
|
6
|
-
import { jest } from './lib/jest.js';
|
|
7
6
|
import { json } from './lib/json.js';
|
|
8
7
|
import { prettier } from './lib/prettier.js';
|
|
9
8
|
import { rxjs } from './lib/rxjs.js';
|
|
@@ -13,5 +12,5 @@ import { vitest } from './lib/vitest.js';
|
|
|
13
12
|
import { playwright } from './lib/playwright.js';
|
|
14
13
|
import { boundaries } from './lib/boundaries.js';
|
|
15
14
|
export declare const recommended: ConfigArray;
|
|
16
|
-
export { base, javascript, typescript, angular, angularTemplate, rxjs,
|
|
17
|
-
//# sourceMappingURL=
|
|
15
|
+
export { base, javascript, typescript, angular, angularTemplate, rxjs, json, boundaries, storybook, vitest, playwright, prettier };
|
|
16
|
+
//# sourceMappingURL=eslint.d.ts.map
|
package/eslint.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eslint.d.ts","sourceRoot":"","sources":["../../../../packages/lint-suite/src/eslint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,eAAO,MAAM,WAAW,EAAE,WAOzB,CAAC;AAEF,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,OAAO,EACP,eAAe,EACf,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,MAAM,EACN,UAAU,EACV,QAAQ,EACT,CAAC"}
|