@ngrx/eslint-plugin 21.1.0 → 22.0.0-beta.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/migrations/22_0_0-beta_0-rename-eslint-plugin-v9-imports/index.d.ts +2 -0
- package/migrations/22_0_0-beta_0-rename-eslint-plugin-v9-imports/index.js +40 -0
- package/migrations/22_0_0-beta_0-rename-eslint-plugin-v9-imports/index.js.map +1 -0
- package/migrations/migration.json +8 -1
- package/package.json +3 -8
- package/schematics/ng-add/index.js +8 -61
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-add/schema.d.ts +1 -1
- package/schematics/ng-add/schema.js.map +1 -1
- package/schematics/ng-add/schema.json +12 -12
- package/scripts/generate-config.js +0 -10
- package/scripts/generate-config.js.map +1 -1
- package/scripts/generate-overview.js +1 -1
- package/scripts/generate-overview.js.map +1 -1
- package/src/index.d.ts +138 -138
- package/src/index.js +32 -18
- package/src/index.js.map +1 -1
- package/src/rule-creator.d.ts +3 -1
- package/src/rule-creator.js +1 -22
- package/src/rule-creator.js.map +1 -1
- package/src/rules/component-store/avoid-combining-component-store-selectors.d.ts +3 -1
- package/src/rules/component-store/avoid-mapping-component-store-selectors.d.ts +3 -1
- package/src/rules/component-store/require-super-ondestroy.d.ts +3 -1
- package/src/rules/component-store/updater-explicit-return-type.d.ts +3 -1
- package/src/rules/effects/avoid-cyclic-effects.d.ts +3 -1
- package/src/rules/effects/no-dispatch-in-effects.d.ts +3 -1
- package/src/rules/effects/no-effects-in-providers.d.ts +3 -1
- package/src/rules/effects/no-multiple-actions-in-effects.d.ts +3 -1
- package/src/rules/effects/prefer-action-creator-in-of-type.d.ts +3 -1
- package/src/rules/effects/prefer-effect-callback-in-block-statement.d.ts +3 -1
- package/src/rules/effects/use-effects-lifecycle-interface.d.ts +3 -1
- package/src/rules/index.d.ts +105 -35
- package/src/rules/operators/prefer-concat-latest-from.d.ts +3 -1
- package/src/rules/signals/enforce-type-call.d.ts +3 -1
- package/src/rules/signals/prefer-protected-state.d.ts +3 -1
- package/src/rules/signals/signal-state-no-arrays-at-root-level.d.ts +3 -1
- package/src/rules/signals/signal-store-feature-should-use-generic-type.d.ts +3 -1
- package/src/rules/signals/with-state-no-arrays-at-root-level.d.ts +3 -1
- package/src/rules/store/avoid-combining-selectors.d.ts +3 -1
- package/src/rules/store/avoid-dispatching-multiple-actions-sequentially.d.ts +3 -1
- package/src/rules/store/avoid-duplicate-actions-in-reducer.d.ts +3 -1
- package/src/rules/store/avoid-mapping-selectors.d.ts +3 -1
- package/src/rules/store/good-action-hygiene.d.ts +3 -1
- package/src/rules/store/no-multiple-global-stores.d.ts +3 -1
- package/src/rules/store/no-reducer-in-key-names.d.ts +3 -1
- package/src/rules/store/no-store-subscription.d.ts +3 -1
- package/src/rules/store/no-typed-global-store.d.ts +3 -1
- package/src/rules/store/on-function-explicit-return-type.d.ts +3 -1
- package/src/rules/store/prefer-action-creator-in-dispatch.d.ts +3 -1
- package/src/rules/store/prefer-action-creator.d.ts +3 -1
- package/src/rules/store/prefer-inline-action-props.d.ts +3 -1
- package/src/rules/store/prefer-one-generic-in-create-for-feature-selector.d.ts +3 -1
- package/src/rules/store/prefer-selector-in-select.d.ts +3 -1
- package/src/rules/store/prefix-selectors-with-select.d.ts +3 -1
- package/src/rules/store/select-style.d.ts +3 -1
- package/src/rules/store/use-consistent-global-store-name.d.ts +3 -1
- package/src/utils/helper-functions/rules.d.ts +3 -1
- package/src/utils/helper-functions/rules.js +1 -1
- package/src/utils/helper-functions/rules.js.map +1 -1
- package/src/configs/all-type-checked.json +0 -41
- package/src/configs/all.json +0 -37
- package/src/configs/component-store.json +0 -10
- package/src/configs/effects-type-checked.json +0 -13
- package/src/configs/effects.json +0 -11
- package/src/configs/operators.json +0 -7
- package/src/configs/signals-type-checked.json +0 -11
- package/src/configs/signals.json +0 -9
- package/src/configs/store.json +0 -24
- package/v9/index.d.ts +0 -35
- package/v9/index.js +0 -44
- package/v9/index.js.map +0 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = renameEslintPluginV9Imports;
|
|
4
|
+
const OLD_IMPORT = '@ngrx/eslint-plugin/v9';
|
|
5
|
+
const NEW_IMPORT = '@ngrx/eslint-plugin';
|
|
6
|
+
const SUPPORTED_EXTENSIONS = [
|
|
7
|
+
'.ts',
|
|
8
|
+
'.tsx',
|
|
9
|
+
'.mts',
|
|
10
|
+
'.cts',
|
|
11
|
+
'.js',
|
|
12
|
+
'.jsx',
|
|
13
|
+
'.mjs',
|
|
14
|
+
'.cjs',
|
|
15
|
+
];
|
|
16
|
+
function renameEslintPluginV9Imports() {
|
|
17
|
+
return (tree, context) => {
|
|
18
|
+
tree.visit((filePath) => {
|
|
19
|
+
if (isInNodeModules(filePath) || !shouldMigrate(filePath)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const content = tree.read(filePath)?.toString('utf-8');
|
|
23
|
+
if (!content?.includes(OLD_IMPORT)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
tree.overwrite(filePath, content.replaceAll(OLD_IMPORT, NEW_IMPORT));
|
|
27
|
+
context.logger.info(`[@ngrx/eslint-plugin] Renamed '${OLD_IMPORT}' to '${NEW_IMPORT}' in ${formatPath(filePath)}`);
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function shouldMigrate(filePath) {
|
|
32
|
+
return SUPPORTED_EXTENSIONS.some((extension) => filePath.endsWith(extension));
|
|
33
|
+
}
|
|
34
|
+
function isInNodeModules(filePath) {
|
|
35
|
+
return filePath.split('/').includes('node_modules');
|
|
36
|
+
}
|
|
37
|
+
function formatPath(filePath) {
|
|
38
|
+
return filePath.startsWith('/') ? filePath : `/${filePath}`;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../modules/eslint-plugin/migrations/22_0_0-beta_0-rename-eslint-plugin-v9-imports/index.ts"],"names":[],"mappings":";;AAeA,8CAkBC;AA/BD,MAAM,UAAU,GAAG,wBAAwB,CAAC;AAC5C,MAAM,UAAU,GAAG,qBAAqB,CAAC;AACzC,MAAM,oBAAoB,GAAG;IAC3B,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC;AAEF,SAAwB,2BAA2B;IACjD,OAAO,CAAC,IAAU,EAAE,OAAyB,EAAE,EAAE;QAC/C,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE;YACtB,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1D,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,kCAAkC,UAAU,SAAS,UAAU,QAAQ,UAAU,CAAC,QAAQ,CAAC,EAAE,CAC9F,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB;IAClC,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;AAC9D,CAAC","sourcesContent":["import type { Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\n\nconst OLD_IMPORT = '@ngrx/eslint-plugin/v9';\nconst NEW_IMPORT = '@ngrx/eslint-plugin';\nconst SUPPORTED_EXTENSIONS = [\n '.ts',\n '.tsx',\n '.mts',\n '.cts',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n];\n\nexport default function renameEslintPluginV9Imports(): Rule {\n return (tree: Tree, context: SchematicContext) => {\n tree.visit((filePath) => {\n if (isInNodeModules(filePath) || !shouldMigrate(filePath)) {\n return;\n }\n\n const content = tree.read(filePath)?.toString('utf-8');\n if (!content?.includes(OLD_IMPORT)) {\n return;\n }\n\n tree.overwrite(filePath, content.replaceAll(OLD_IMPORT, NEW_IMPORT));\n context.logger.info(\n `[@ngrx/eslint-plugin] Renamed '${OLD_IMPORT}' to '${NEW_IMPORT}' in ${formatPath(filePath)}`\n );\n });\n };\n}\n\nfunction shouldMigrate(filePath: string): boolean {\n return SUPPORTED_EXTENSIONS.some((extension) => filePath.endsWith(extension));\n}\n\nfunction isInNodeModules(filePath: string): boolean {\n return filePath.split('/').includes('node_modules');\n}\n\nfunction formatPath(filePath: string): string {\n return filePath.startsWith('/') ? filePath : `/${filePath}`;\n}\n"]}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
2
|
+
"$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json",
|
|
3
|
+
"schematics": {
|
|
4
|
+
"22_0_0-beta_0-rename-eslint-plugin-v9-imports": {
|
|
5
|
+
"description": "Rename @ngrx/eslint-plugin/v9 imports to @ngrx/eslint-plugin.",
|
|
6
|
+
"version": "22.0.0-beta.0",
|
|
7
|
+
"factory": "./22_0_0-beta_0-rename-eslint-plugin-v9-imports/index"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
3
10
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngrx/eslint-plugin",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "22.0.0-beta.0",
|
|
4
4
|
"description": "NgRx ESLint Plugin",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -41,11 +41,8 @@
|
|
|
41
41
|
"save": "devDependencies"
|
|
42
42
|
},
|
|
43
43
|
"sideEffects": false,
|
|
44
|
-
"dependencies": {
|
|
45
|
-
"strip-json-comments": "3.1.1"
|
|
46
|
-
},
|
|
47
44
|
"peerDependencies": {
|
|
48
|
-
"eslint": "^
|
|
45
|
+
"eslint": "^9.0.0 || ^10.0.0",
|
|
49
46
|
"typescript": "*",
|
|
50
47
|
"typescript-eslint": "^8.0.0",
|
|
51
48
|
"@typescript-eslint/utils": "^8.0.0"
|
|
@@ -55,9 +52,7 @@
|
|
|
55
52
|
".": {
|
|
56
53
|
"types": "./src/index.d.ts",
|
|
57
54
|
"default": "./src/index.js"
|
|
58
|
-
}
|
|
59
|
-
"./v9": "./v9/index.js",
|
|
60
|
-
"./v9/index": "./v9/index.js"
|
|
55
|
+
}
|
|
61
56
|
},
|
|
62
57
|
"types": "./src/index.d.ts",
|
|
63
58
|
"main": "./src/index.js",
|
|
@@ -32,13 +32,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
36
|
exports.possibleFlatConfigPaths = void 0;
|
|
40
37
|
exports.default = default_1;
|
|
41
|
-
const strip_json_comments_1 = __importDefault(require("strip-json-comments"));
|
|
42
38
|
const ts = __importStar(require("typescript"));
|
|
43
39
|
exports.possibleFlatConfigPaths = [
|
|
44
40
|
'eslint.config.js',
|
|
@@ -47,41 +43,37 @@ exports.possibleFlatConfigPaths = [
|
|
|
47
43
|
];
|
|
48
44
|
function default_1(schema) {
|
|
49
45
|
return (host, context) => {
|
|
50
|
-
const jsonConfigPath = '.eslintrc.json';
|
|
51
46
|
const flatConfigPath = exports.possibleFlatConfigPaths.find((path) => host.exists(path));
|
|
52
47
|
const docs = 'https://ngrx.io/guide/eslint-plugin';
|
|
53
48
|
if (flatConfigPath) {
|
|
54
49
|
updateFlatConfig(host, context, flatConfigPath, schema, docs);
|
|
55
50
|
return host;
|
|
56
51
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
Could not find an ESLint config at any of ${exports.possibleFlatConfigPaths.join(', ')} or \`${jsonConfigPath}\`.
|
|
52
|
+
context.logger.warn(`
|
|
53
|
+
Could not find an ESLint config at any of ${exports.possibleFlatConfigPaths.join(', ')}.
|
|
60
54
|
The NgRx ESLint Plugin is installed but not configured.
|
|
61
55
|
Please see ${docs} to configure the NgRx ESLint Plugin.
|
|
62
56
|
`);
|
|
63
|
-
return host;
|
|
64
|
-
}
|
|
65
|
-
updateJsonConfig(host, context, jsonConfigPath, schema, docs);
|
|
66
57
|
return host;
|
|
67
58
|
};
|
|
68
59
|
}
|
|
69
60
|
function updateFlatConfig(host, context, flatConfigPath, schema, docs) {
|
|
70
|
-
const ngrxPlugin = '@ngrx/eslint-plugin
|
|
61
|
+
const ngrxPlugin = '@ngrx/eslint-plugin';
|
|
71
62
|
const content = host.read(flatConfigPath)?.toString('utf-8');
|
|
72
63
|
if (!content) {
|
|
73
64
|
context.logger.error(`Could not read the ESLint flat config at \`${flatConfigPath}\`.`);
|
|
74
65
|
return;
|
|
75
66
|
}
|
|
76
|
-
|
|
67
|
+
const configContent = content;
|
|
68
|
+
if (configContent.includes(ngrxPlugin)) {
|
|
77
69
|
context.logger.info(`Skipping installation, the NgRx ESLint Plugin is already installed in your flat config.`);
|
|
78
70
|
return;
|
|
79
71
|
}
|
|
80
|
-
if (!
|
|
72
|
+
if (!configContent.includes('tseslint.config')) {
|
|
81
73
|
context.logger.warn(`No tseslint found, skipping the installation of the NgRx ESLint Plugin in your flat config.`);
|
|
82
74
|
return;
|
|
83
75
|
}
|
|
84
|
-
const source = ts.createSourceFile(flatConfigPath,
|
|
76
|
+
const source = ts.createSourceFile(flatConfigPath, configContent, ts.ScriptTarget.Latest, true);
|
|
85
77
|
const recorder = host.beginUpdate(flatConfigPath);
|
|
86
78
|
addImport();
|
|
87
79
|
addNgRxPlugin();
|
|
@@ -91,7 +83,7 @@ The NgRx ESLint Plugin is installed and configured using the '${schema.config}'
|
|
|
91
83
|
See ${docs} for more details.
|
|
92
84
|
`);
|
|
93
85
|
function addImport() {
|
|
94
|
-
const isESM =
|
|
86
|
+
const isESM = configContent.includes('export default');
|
|
95
87
|
if (isESM) {
|
|
96
88
|
const lastImport = source.statements
|
|
97
89
|
.filter((statement) => ts.isImportDeclaration(statement))
|
|
@@ -146,49 +138,4 @@ See ${docs} for more details.
|
|
|
146
138
|
}
|
|
147
139
|
}
|
|
148
140
|
}
|
|
149
|
-
function updateJsonConfig(host, context, jsonConfigPath, schema, docs) {
|
|
150
|
-
const eslint = host.read(jsonConfigPath)?.toString('utf-8');
|
|
151
|
-
if (!eslint) {
|
|
152
|
-
context.logger.error(`
|
|
153
|
-
Could not find the ESLint config at \`${jsonConfigPath}\`.
|
|
154
|
-
The NgRx ESLint Plugin is installed but not configured.
|
|
155
|
-
Please see ${docs} to configure the NgRx ESLint Plugin.
|
|
156
|
-
`);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
try {
|
|
160
|
-
const json = JSON.parse((0, strip_json_comments_1.default)(eslint));
|
|
161
|
-
const plugin = {
|
|
162
|
-
files: ['*.ts'],
|
|
163
|
-
extends: [`plugin:@ngrx/${schema.config}`],
|
|
164
|
-
};
|
|
165
|
-
if (json.overrides) {
|
|
166
|
-
if (!json.overrides.some((override) => override.extends?.some((extend) => extend.startsWith('plugin:@ngrx')))) {
|
|
167
|
-
json.overrides.push(plugin);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
else if (!json.extends?.some((extend) => extend.startsWith('plugin:@ngrx'))) {
|
|
171
|
-
json.overrides = [plugin];
|
|
172
|
-
}
|
|
173
|
-
host.overwrite(jsonConfigPath, JSON.stringify(json, null, 2));
|
|
174
|
-
context.logger.info(`
|
|
175
|
-
The NgRx ESLint Plugin is installed and configured with the '${schema.config}' config.
|
|
176
|
-
Take a look at the docs at ${docs} if you want to change the default configuration.
|
|
177
|
-
`);
|
|
178
|
-
}
|
|
179
|
-
catch (err) {
|
|
180
|
-
const detailsContent = err instanceof Error
|
|
181
|
-
? `
|
|
182
|
-
Details:
|
|
183
|
-
${err.message}
|
|
184
|
-
`
|
|
185
|
-
: '';
|
|
186
|
-
context.logger.warn(`
|
|
187
|
-
Something went wrong while adding the NgRx ESLint Plugin.
|
|
188
|
-
The NgRx ESLint Plugin is installed but not configured.
|
|
189
|
-
Please see ${docs} to configure the NgRx ESLint Plugin.
|
|
190
|
-
${detailsContent}
|
|
191
|
-
`);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
141
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../modules/eslint-plugin/schematics/ng-add/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport stripJsonComments from 'strip-json-comments';\nimport type { Schema } from './schema';\nimport * as ts from 'typescript';\n\nexport const possibleFlatConfigPaths = [\n 'eslint.config.js',\n 'eslint.config.mjs',\n 'eslint.config.cjs',\n];\n\nexport default function (schema: Schema): Rule {\n return (host: Tree, context: SchematicContext) => {\n const jsonConfigPath = '.eslintrc.json';\n const flatConfigPath = possibleFlatConfigPaths.find((path) =>\n host.exists(path)\n );\n const docs = 'https://ngrx.io/guide/eslint-plugin';\n\n if (flatConfigPath) {\n updateFlatConfig(host, context, flatConfigPath, schema, docs);\n return host;\n }\n\n if (!host.exists(jsonConfigPath)) {\n context.logger.warn(`\nCould not find an ESLint config at any of ${possibleFlatConfigPaths.join(\n ', '\n )} or \\`${jsonConfigPath}\\`.\nThe NgRx ESLint Plugin is installed but not configured.\nPlease see ${docs} to configure the NgRx ESLint Plugin.\n `);\n return host;\n }\n\n updateJsonConfig(host, context, jsonConfigPath, schema, docs);\n return host;\n };\n}\n\nfunction updateFlatConfig(\n host: Tree,\n context: SchematicContext,\n flatConfigPath: string,\n schema: Schema,\n docs: string\n): void {\n const ngrxPlugin = '@ngrx/eslint-plugin/v9';\n const content = host.read(flatConfigPath)?.toString('utf-8');\n if (!content) {\n context.logger.error(\n `Could not read the ESLint flat config at \\`${flatConfigPath}\\`.`\n );\n return;\n }\n\n if (content.includes(ngrxPlugin)) {\n context.logger.info(\n `Skipping installation, the NgRx ESLint Plugin is already installed in your flat config.`\n );\n return;\n }\n\n if (!content.includes('tseslint.config')) {\n context.logger.warn(\n `No tseslint found, skipping the installation of the NgRx ESLint Plugin in your flat config.`\n );\n return;\n }\n\n const source = ts.createSourceFile(\n flatConfigPath,\n content,\n ts.ScriptTarget.Latest,\n true\n );\n\n const recorder = host.beginUpdate(flatConfigPath);\n addImport();\n addNgRxPlugin();\n\n host.commitUpdate(recorder);\n context.logger.info(`\nThe NgRx ESLint Plugin is installed and configured using the '${schema.config}' configuration in your flat config.\nSee ${docs} for more details.\n `);\n\n function addImport() {\n const isESM = content!.includes('export default');\n if (isESM) {\n const lastImport = source.statements\n .filter((statement) => ts.isImportDeclaration(statement))\n .reverse()[0];\n recorder.insertRight(\n lastImport?.end ?? 0,\n `\\nimport ngrx from '${ngrxPlugin}';`\n );\n } else {\n const lastRequireVariableDeclaration = source.statements\n .filter((statement) => {\n if (!ts.isVariableStatement(statement)) return false;\n const decl = statement.declarationList.declarations[0];\n if (!decl.initializer) return false;\n return (\n ts.isCallExpression(decl.initializer) &&\n decl.initializer.expression.getText() === 'require'\n );\n })\n .reverse()[0];\n\n recorder.insertRight(\n lastRequireVariableDeclaration?.end ?? 0,\n `\\nconst ngrx = require('${ngrxPlugin}');`\n );\n }\n }\n\n function addNgRxPlugin() {\n let tseslintConfigCall: ts.CallExpression | null = null;\n function findTsEslintConfigCalls(node: ts.Node) {\n if (tseslintConfigCall) {\n return;\n }\n\n if (\n ts.isCallExpression(node) &&\n node.expression.getText() === 'tseslint.config'\n ) {\n tseslintConfigCall = node;\n }\n ts.forEachChild(node, findTsEslintConfigCalls);\n }\n findTsEslintConfigCalls(source);\n\n if (tseslintConfigCall) {\n tseslintConfigCall = tseslintConfigCall as ts.CallExpression;\n const lastArgument =\n tseslintConfigCall.arguments[tseslintConfigCall.arguments.length - 1];\n const plugin = ` {\n files: ['**/*.ts'],\n extends: [\n ...ngrx.configs.${schema.config},\n ],\n rules: {},\n }`;\n\n if (lastArgument) {\n recorder.remove(lastArgument.pos, lastArgument.end - lastArgument.pos);\n recorder.insertRight(\n lastArgument.pos,\n `${lastArgument.getFullText()},\\n${plugin}`\n );\n } else {\n recorder.insertRight(tseslintConfigCall.end - 1, `\\n${plugin}\\n`);\n }\n }\n }\n}\n\nfunction updateJsonConfig(\n host: Tree,\n context: SchematicContext,\n jsonConfigPath: string,\n schema: Schema,\n docs: string\n): void {\n const eslint = host.read(jsonConfigPath)?.toString('utf-8');\n if (!eslint) {\n context.logger.error(`\nCould not find the ESLint config at \\`${jsonConfigPath}\\`.\nThe NgRx ESLint Plugin is installed but not configured.\nPlease see ${docs} to configure the NgRx ESLint Plugin.\n`);\n return;\n }\n\n try {\n const json = JSON.parse(stripJsonComments(eslint));\n const plugin = {\n files: ['*.ts'],\n extends: [`plugin:@ngrx/${schema.config}`],\n };\n if (json.overrides) {\n if (\n !json.overrides.some((override: any) =>\n override.extends?.some((extend: any) =>\n extend.startsWith('plugin:@ngrx')\n )\n )\n ) {\n json.overrides.push(plugin);\n }\n } else if (\n !json.extends?.some((extend: any) => extend.startsWith('plugin:@ngrx'))\n ) {\n json.overrides = [plugin];\n }\n\n host.overwrite(jsonConfigPath, JSON.stringify(json, null, 2));\n\n context.logger.info(`\nThe NgRx ESLint Plugin is installed and configured with the '${schema.config}' config.\nTake a look at the docs at ${docs} if you want to change the default configuration.\n`);\n } catch (err) {\n const detailsContent =\n err instanceof Error\n ? `\nDetails:\n${err.message}\n`\n : '';\n context.logger.warn(`\nSomething went wrong while adding the NgRx ESLint Plugin.\nThe NgRx ESLint Plugin is installed but not configured.\nPlease see ${docs} to configure the NgRx ESLint Plugin.\n${detailsContent}\n`);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../modules/eslint-plugin/schematics/ng-add/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport type { Schema } from './schema';\n\nexport const possibleFlatConfigPaths = [\n 'eslint.config.js',\n 'eslint.config.mjs',\n 'eslint.config.cjs',\n];\n\nexport default function (schema: Schema): Rule {\n return (host: Tree, context: SchematicContext) => {\n const flatConfigPath = possibleFlatConfigPaths.find((path) =>\n host.exists(path)\n );\n const docs = 'https://ngrx.io/guide/eslint-plugin';\n\n if (flatConfigPath) {\n updateFlatConfig(host, context, flatConfigPath, schema, docs);\n return host;\n }\n\n context.logger.warn(`\nCould not find an ESLint config at any of ${possibleFlatConfigPaths.join(', ')}.\nThe NgRx ESLint Plugin is installed but not configured.\nPlease see ${docs} to configure the NgRx ESLint Plugin.\n `);\n return host;\n };\n}\n\nfunction updateFlatConfig(\n host: Tree,\n context: SchematicContext,\n flatConfigPath: string,\n schema: Schema,\n docs: string\n): void {\n const ngrxPlugin = '@ngrx/eslint-plugin';\n const content = host.read(flatConfigPath)?.toString('utf-8');\n if (!content) {\n context.logger.error(\n `Could not read the ESLint flat config at \\`${flatConfigPath}\\`.`\n );\n return;\n }\n const configContent = content;\n\n if (configContent.includes(ngrxPlugin)) {\n context.logger.info(\n `Skipping installation, the NgRx ESLint Plugin is already installed in your flat config.`\n );\n return;\n }\n\n if (!configContent.includes('tseslint.config')) {\n context.logger.warn(\n `No tseslint found, skipping the installation of the NgRx ESLint Plugin in your flat config.`\n );\n return;\n }\n\n const source = ts.createSourceFile(\n flatConfigPath,\n configContent,\n ts.ScriptTarget.Latest,\n true\n );\n\n const recorder = host.beginUpdate(flatConfigPath);\n addImport();\n addNgRxPlugin();\n\n host.commitUpdate(recorder);\n context.logger.info(`\nThe NgRx ESLint Plugin is installed and configured using the '${schema.config}' configuration in your flat config.\nSee ${docs} for more details.\n `);\n\n function addImport() {\n const isESM = configContent.includes('export default');\n if (isESM) {\n const lastImport = source.statements\n .filter((statement) => ts.isImportDeclaration(statement))\n .reverse()[0];\n recorder.insertRight(\n lastImport?.end ?? 0,\n `\\nimport ngrx from '${ngrxPlugin}';`\n );\n } else {\n const lastRequireVariableDeclaration = source.statements\n .filter((statement) => {\n if (!ts.isVariableStatement(statement)) return false;\n const decl = statement.declarationList.declarations[0];\n if (!decl.initializer) return false;\n return (\n ts.isCallExpression(decl.initializer) &&\n decl.initializer.expression.getText() === 'require'\n );\n })\n .reverse()[0];\n\n recorder.insertRight(\n lastRequireVariableDeclaration?.end ?? 0,\n `\\nconst ngrx = require('${ngrxPlugin}');`\n );\n }\n }\n\n function addNgRxPlugin() {\n let tseslintConfigCall: ts.CallExpression | null = null;\n function findTsEslintConfigCalls(node: ts.Node) {\n if (tseslintConfigCall) {\n return;\n }\n\n if (\n ts.isCallExpression(node) &&\n node.expression.getText() === 'tseslint.config'\n ) {\n tseslintConfigCall = node;\n }\n ts.forEachChild(node, findTsEslintConfigCalls);\n }\n findTsEslintConfigCalls(source);\n\n if (tseslintConfigCall) {\n tseslintConfigCall = tseslintConfigCall as ts.CallExpression;\n const lastArgument =\n tseslintConfigCall.arguments[tseslintConfigCall.arguments.length - 1];\n const plugin = ` {\n files: ['**/*.ts'],\n extends: [\n ...ngrx.configs.${schema.config},\n ],\n rules: {},\n }`;\n\n if (lastArgument) {\n recorder.remove(lastArgument.pos, lastArgument.end - lastArgument.pos);\n recorder.insertRight(\n lastArgument.pos,\n `${lastArgument.getFullText()},\\n${plugin}`\n );\n } else {\n recorder.insertRight(tseslintConfigCall.end - 1, `\\n${plugin}\\n`);\n }\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../modules/eslint-plugin/schematics/ng-add/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface Schema {\n config
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../modules/eslint-plugin/schematics/ng-add/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface Schema {\n config:\n | 'all'\n | 'allTypeChecked'\n | 'componentStore'\n | 'effects'\n | 'effectsTypeChecked'\n | 'operators'\n | 'signals'\n | 'signalsTypeChecked'\n | 'store';\n}\n"]}
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
"default": "all",
|
|
11
11
|
"enum": [
|
|
12
12
|
"all",
|
|
13
|
-
"
|
|
14
|
-
"
|
|
13
|
+
"allTypeChecked",
|
|
14
|
+
"componentStore",
|
|
15
15
|
"effects",
|
|
16
|
-
"
|
|
16
|
+
"effectsTypeChecked",
|
|
17
17
|
"operators",
|
|
18
18
|
"signals",
|
|
19
|
-
"
|
|
19
|
+
"signalsTypeChecked",
|
|
20
20
|
"store"
|
|
21
21
|
],
|
|
22
22
|
"x-prompt": {
|
|
@@ -28,20 +28,20 @@
|
|
|
28
28
|
"label": "all"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
|
-
"value": "
|
|
32
|
-
"label": "
|
|
31
|
+
"value": "allTypeChecked",
|
|
32
|
+
"label": "allTypeChecked"
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
"value": "
|
|
36
|
-
"label": "
|
|
35
|
+
"value": "componentStore",
|
|
36
|
+
"label": "componentStore"
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"value": "effects",
|
|
40
40
|
"label": "effects"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
|
-
"value": "
|
|
44
|
-
"label": "
|
|
43
|
+
"value": "effectsTypeChecked",
|
|
44
|
+
"label": "effectsTypeChecked"
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
"value": "operators",
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
"label": "signals"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
|
-
"value": "
|
|
56
|
-
"label": "
|
|
55
|
+
"value": "signalsTypeChecked",
|
|
56
|
+
"label": "signalsTypeChecked"
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
"value": "store",
|
|
@@ -59,16 +59,6 @@ const rules_1 = require("../src/utils/helper-functions/rules");
|
|
|
59
59
|
...prettierConfig,
|
|
60
60
|
});
|
|
61
61
|
(0, fs_1.writeFileSync)((0, path_1.join)(CONFIG_DIRECTORY, `${configName}.ts`), tsConfigFormatted);
|
|
62
|
-
const jsonConfig = {
|
|
63
|
-
parser: '@typescript-eslint/parser',
|
|
64
|
-
plugins: ['@ngrx'],
|
|
65
|
-
rules: configRules,
|
|
66
|
-
};
|
|
67
|
-
const jsonConfigFormatted = await (0, prettier_1.format)(JSON.stringify(jsonConfig, null, 2), {
|
|
68
|
-
parser: 'json',
|
|
69
|
-
...prettierConfig,
|
|
70
|
-
});
|
|
71
|
-
(0, fs_1.writeFileSync)((0, path_1.join)(CONFIG_DIRECTORY, `${configName}.json`), jsonConfigFormatted);
|
|
72
62
|
}
|
|
73
63
|
})();
|
|
74
64
|
//# sourceMappingURL=generate-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-config.js","sourceRoot":"","sources":["../../../../modules/eslint-plugin/scripts/generate-config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generate-config.js","sourceRoot":"","sources":["../../../../modules/eslint-plugin/scripts/generate-config.ts"],"names":[],"mappings":"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","sourcesContent":["import { writeFileSync } from 'fs';\nimport { join } from 'path';\nimport { format, resolveConfig } from 'prettier';\nimport { rulesForGenerate } from '../src/utils/helper-functions/rules';\nimport { NgRxRule } from '../src/rule-creator';\n\n(async () => {\n const prettierConfig = await resolveConfig(__dirname);\n const RULE_MODULE = '@ngrx';\n const CONFIG_DIRECTORY = './modules/eslint-plugin/src/configs/';\n\n const isModule = (rule: NgRxRule, moduleName: string) =>\n rule.meta.docs?.ngrxModule === moduleName;\n const isTypeChecked = (rule: NgRxRule) =>\n rule.meta.docs?.requiresTypeChecking === true;\n\n writeConfig('all', (rule) => !isTypeChecked(rule));\n writeConfig('all-type-checked', (_rule) => true);\n\n writeConfig(\n 'store',\n (rule) => isModule(rule, 'store') && !isTypeChecked(rule)\n );\n\n writeConfig(\n 'effects',\n (rule) => isModule(rule, 'effects') && !isTypeChecked(rule)\n );\n writeConfig('effects-type-checked', (rule) => isModule(rule, 'effects'));\n\n writeConfig(\n 'component-store',\n (rule) => isModule(rule, 'component-store') && !isTypeChecked(rule)\n );\n\n writeConfig(\n 'operators',\n (rule) => isModule(rule, 'operators') && !isTypeChecked(rule)\n );\n\n writeConfig(\n 'signals',\n (rule) => isModule(rule, 'signals') && !isTypeChecked(rule)\n );\n writeConfig('signals-type-checked', (rule) => isModule(rule, 'signals'));\n\n async function writeConfig(\n configName:\n | 'all'\n | 'all-type-checked'\n | 'store'\n | 'effects'\n | 'effects-type-checked'\n | 'component-store'\n | 'operators'\n | 'signals'\n | 'signals-type-checked',\n predicate: (rule: NgRxRule) => boolean\n ) {\n const rulesForConfig = Object.entries(rulesForGenerate).filter(\n ([_, rule]) => predicate(rule)\n );\n const configRules = rulesForConfig.reduce<Record<string, string>>(\n (rules, [ruleName, _rule]) => {\n rules[`${RULE_MODULE}/${ruleName}`] = 'error';\n return rules;\n },\n {}\n );\n\n const tsCode = `\n /**\n * DO NOT EDIT\n * This file is generated\n */\n\n import type { TSESLint } from '@typescript-eslint/utils';\n\n export default (\n plugin: TSESLint.FlatConfig.Plugin,\n parser: TSESLint.FlatConfig.Parser,\n ): TSESLint.FlatConfig.ConfigArray => [\n {\n name: 'ngrx/base',\n languageOptions: {\n parser,\n },\n plugins: {\n '@ngrx': plugin,\n },\n },\n {\n name: 'ngrx/${configName}',\n languageOptions: {\n parser,\n },\n rules: ${JSON.stringify(configRules, null, 2)}\n },\n ];`;\n const tsConfigFormatted = await format(tsCode, {\n parser: 'typescript',\n ...prettierConfig,\n });\n writeFileSync(\n join(CONFIG_DIRECTORY, `${configName}.ts`),\n tsConfigFormatted\n );\n }\n})();\n"]}
|
|
@@ -60,7 +60,7 @@ ${overview.substring(end)}`, {
|
|
|
60
60
|
const overview = (0, fs_1.readFileSync)(OVERVIEW, 'utf-8');
|
|
61
61
|
const start = overview.indexOf('<!-- CONFIGURATIONS-CONFIG:START -->');
|
|
62
62
|
const end = overview.indexOf('<!-- CONFIGURATIONS-CONFIG:END -->');
|
|
63
|
-
const configTable = rules_1.configsForGenerate.map((configName) => `| [${configName}](${GH_CONFIGS}/${configName}.
|
|
63
|
+
const configTable = rules_1.configsForGenerate.map((configName) => `| [${configName}](${GH_CONFIGS}/${configName}.ts) |`);
|
|
64
64
|
const newOverview = await (0, prettier_1.format)(`${overview.substring(0, start + '<!-- CONFIGURATIONS-CONFIG:START -->'.length)}
|
|
65
65
|
${[tableHeader, ...configTable].join(os_1.EOL)}
|
|
66
66
|
${overview.substring(end)}`, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-overview.js","sourceRoot":"","sources":["../../../../modules/eslint-plugin/scripts/generate-overview.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generate-overview.js","sourceRoot":"","sources":["../../../../modules/eslint-plugin/scripts/generate-overview.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync, writeFileSync } from 'fs';\nimport { EOL } from 'os';\nimport { format, resolveConfig } from 'prettier';\nimport {\n configsForGenerate,\n rulesForGenerate,\n} from '../src/utils/helper-functions/rules';\n\n(async () => {\n const prettierConfig = await resolveConfig(__dirname);\n const OVERVIEW = './projects/www/src/app/pages/guide/eslint-plugin/index.md';\n const GH_CONFIGS =\n 'https://github.com/ngrx/platform/blob/main/modules/eslint-plugin/src/configs';\n\n await generateRules();\n await generateConfigurations();\n\n async function generateRules() {\n const moduleRules = Object.entries(rulesForGenerate).reduce<\n Record<string, string[][]>\n >((all, [ruleName, { meta }]) => {\n if (!meta.docs) {\n throw new Error(`Rule ${ruleName} is missing meta.docs information`);\n }\n\n all[meta.docs.ngrxModule] = (all[meta.docs.ngrxModule] ?? []).concat([\n [\n `[@ngrx/${ruleName}]${\n meta.docs?.url\n ? '(' +\n meta.docs.url\n .replace('https://ngrx.io', '')\n .replace('.md', '') +\n ')'\n : ''\n }`,\n meta.docs?.description ?? 'TODO',\n meta.type,\n meta.fixable ? 'Yes' : 'No',\n meta.hasSuggestions ? 'Yes' : 'No',\n Array.isArray(meta.schema) && meta.schema.length ? 'Yes' : 'No',\n meta.docs?.requiresTypeChecking ? 'Yes' : 'No',\n ],\n ]);\n return all;\n }, {});\n\n const tableHeader = `| Name | Description | Category | Fixable | Has suggestions | Configurable | Requires type information\n| --- | --- | --- | --- | --- | --- | --- |`;\n\n const configTable = Object.entries(moduleRules).map(\n ([ngrxModule, pluginRules]) => {\n const tableBody = pluginRules\n .map((rule) => `|${rule.join('|')}|`)\n .join(EOL);\n const table = [tableHeader, tableBody].join(EOL);\n\n return [`### ${ngrxModule}`, table].join(EOL);\n }\n );\n\n const overview = readFileSync(OVERVIEW, 'utf-8');\n const start = overview.indexOf('<!-- RULES-CONFIG:START -->');\n const end = overview.indexOf('<!-- RULES-CONFIG:END -->');\n\n const newOverview = await format(\n `${overview.substring(0, start + '<!-- RULES-CONFIG:START -->'.length)}\n${configTable.join(EOL)}\n${overview.substring(end)}`,\n {\n ...prettierConfig,\n parser: 'markdown',\n }\n );\n\n writeFileSync(OVERVIEW, newOverview);\n }\n\n async function generateConfigurations() {\n const tableHeader = `| Name |\n | --- |`;\n\n const overview = readFileSync(OVERVIEW, 'utf-8');\n const start = overview.indexOf('<!-- CONFIGURATIONS-CONFIG:START -->');\n const end = overview.indexOf('<!-- CONFIGURATIONS-CONFIG:END -->');\n\n const configTable = configsForGenerate.map(\n (configName) => `| [${configName}](${GH_CONFIGS}/${configName}.ts) |`\n );\n const newOverview = await format(\n `${overview.substring(\n 0,\n start + '<!-- CONFIGURATIONS-CONFIG:START -->'.length\n )}\n${[tableHeader, ...configTable].join(EOL)}\n${overview.substring(end)}`,\n {\n ...prettierConfig,\n parser: 'markdown',\n }\n );\n\n writeFileSync(OVERVIEW, newOverview);\n }\n})();\n"]}
|