@ngrx/eslint-plugin 20.0.1 → 21.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/package.json +1 -2
- package/schematics/ng-add/schema.json +15 -0
- package/scripts/generate-config.js +61 -72
- package/scripts/generate-config.js.map +1 -1
- package/scripts/generate-docs.js +21 -22
- package/scripts/generate-docs.js.map +1 -1
- package/scripts/generate-overview.js +63 -56
- package/scripts/generate-overview.js.map +1 -1
- package/spec/utils/from-fixture.js.map +1 -1
- package/spec/utils/rule-tester.d.ts +1 -4
- package/spec/utils/rule-tester.js +7 -9
- package/spec/utils/rule-tester.js.map +1 -1
- package/src/configs/all.js +0 -9
- package/src/configs/all.js.map +1 -1
- package/src/configs/all.json +0 -8
- package/src/configs/allTypeChecked.d.ts +7 -0
- package/src/configs/allTypeChecked.js +61 -0
- package/src/configs/allTypeChecked.js.map +1 -0
- package/src/configs/allTypeChecked.json +41 -0
- package/src/configs/component-store.js +0 -1
- package/src/configs/component-store.js.map +1 -1
- package/src/configs/effects.js +0 -8
- package/src/configs/effects.js.map +1 -1
- package/src/configs/effects.json +0 -7
- package/src/configs/effectsTypeChecked.d.ts +7 -0
- package/src/configs/effectsTypeChecked.js +33 -0
- package/src/configs/effectsTypeChecked.js.map +1 -0
- package/src/configs/effectsTypeChecked.json +13 -0
- package/src/configs/operators.js +0 -1
- package/src/configs/operators.js.map +1 -1
- package/src/configs/signals.js +0 -7
- package/src/configs/signals.js.map +1 -1
- package/src/configs/signals.json +1 -7
- package/src/configs/signalsTypeChecked.d.ts +7 -0
- package/src/configs/signalsTypeChecked.js +31 -0
- package/src/configs/signalsTypeChecked.js.map +1 -0
- package/src/configs/signalsTypeChecked.json +11 -0
- package/src/configs/store.js +0 -1
- package/src/configs/store.js.map +1 -1
- package/src/index.d.ts +35 -56
- package/src/rule-creator.d.ts +7 -23
- package/src/rule-creator.js +22 -18
- package/src/rule-creator.js.map +1 -1
- package/src/rules/component-store/avoid-combining-component-store-selectors.d.ts +1 -1
- package/src/rules/component-store/avoid-combining-component-store-selectors.js +1 -1
- package/src/rules/component-store/avoid-combining-component-store-selectors.js.map +1 -1
- package/src/rules/component-store/avoid-mapping-component-store-selectors.d.ts +1 -1
- package/src/rules/component-store/avoid-mapping-component-store-selectors.js +1 -1
- package/src/rules/component-store/avoid-mapping-component-store-selectors.js.map +1 -1
- package/src/rules/component-store/require-super-ondestroy.d.ts +1 -1
- package/src/rules/component-store/require-super-ondestroy.js +1 -1
- package/src/rules/component-store/require-super-ondestroy.js.map +1 -1
- package/src/rules/component-store/updater-explicit-return-type.d.ts +1 -1
- package/src/rules/component-store/updater-explicit-return-type.js +1 -1
- package/src/rules/component-store/updater-explicit-return-type.js.map +1 -1
- package/src/rules/effects/avoid-cyclic-effects.d.ts +1 -1
- package/src/rules/effects/avoid-cyclic-effects.js +1 -1
- package/src/rules/effects/avoid-cyclic-effects.js.map +1 -1
- package/src/rules/effects/no-dispatch-in-effects.d.ts +1 -1
- package/src/rules/effects/no-dispatch-in-effects.js +1 -1
- package/src/rules/effects/no-dispatch-in-effects.js.map +1 -1
- package/src/rules/effects/no-effects-in-providers.d.ts +1 -1
- package/src/rules/effects/no-effects-in-providers.js +1 -1
- package/src/rules/effects/no-effects-in-providers.js.map +1 -1
- package/src/rules/effects/no-multiple-actions-in-effects.d.ts +1 -1
- package/src/rules/effects/no-multiple-actions-in-effects.js +1 -1
- package/src/rules/effects/no-multiple-actions-in-effects.js.map +1 -1
- package/src/rules/effects/prefer-action-creator-in-of-type.d.ts +1 -1
- package/src/rules/effects/prefer-action-creator-in-of-type.js +1 -1
- package/src/rules/effects/prefer-action-creator-in-of-type.js.map +1 -1
- package/src/rules/effects/prefer-effect-callback-in-block-statement.d.ts +1 -1
- package/src/rules/effects/prefer-effect-callback-in-block-statement.js +1 -1
- package/src/rules/effects/prefer-effect-callback-in-block-statement.js.map +1 -1
- package/src/rules/effects/use-effects-lifecycle-interface.d.ts +1 -1
- package/src/rules/effects/use-effects-lifecycle-interface.js +1 -1
- package/src/rules/effects/use-effects-lifecycle-interface.js.map +1 -1
- package/src/rules/index.d.ts +35 -35
- package/src/rules/operators/prefer-concat-latest-from.d.ts +1 -1
- package/src/rules/operators/prefer-concat-latest-from.js +1 -1
- package/src/rules/operators/prefer-concat-latest-from.js.map +1 -1
- package/src/rules/signals/enforce-type-call.d.ts +1 -1
- package/src/rules/signals/enforce-type-call.js +1 -1
- package/src/rules/signals/enforce-type-call.js.map +1 -1
- package/src/rules/signals/prefer-protected-state.d.ts +1 -1
- package/src/rules/signals/prefer-protected-state.js +1 -1
- package/src/rules/signals/prefer-protected-state.js.map +1 -1
- package/src/rules/signals/signal-state-no-arrays-at-root-level.d.ts +1 -1
- package/src/rules/signals/signal-state-no-arrays-at-root-level.js +1 -1
- package/src/rules/signals/signal-state-no-arrays-at-root-level.js.map +1 -1
- package/src/rules/signals/signal-store-feature-should-use-generic-type.d.ts +1 -1
- package/src/rules/signals/signal-store-feature-should-use-generic-type.js +1 -1
- package/src/rules/signals/signal-store-feature-should-use-generic-type.js.map +1 -1
- package/src/rules/signals/with-state-no-arrays-at-root-level.d.ts +1 -1
- package/src/rules/signals/with-state-no-arrays-at-root-level.js +1 -1
- package/src/rules/signals/with-state-no-arrays-at-root-level.js.map +1 -1
- package/src/rules/store/avoid-combining-selectors.d.ts +1 -1
- package/src/rules/store/avoid-combining-selectors.js +1 -1
- package/src/rules/store/avoid-combining-selectors.js.map +1 -1
- package/src/rules/store/avoid-dispatching-multiple-actions-sequentially.d.ts +1 -1
- package/src/rules/store/avoid-dispatching-multiple-actions-sequentially.js +1 -1
- package/src/rules/store/avoid-dispatching-multiple-actions-sequentially.js.map +1 -1
- package/src/rules/store/avoid-duplicate-actions-in-reducer.d.ts +1 -1
- package/src/rules/store/avoid-duplicate-actions-in-reducer.js +1 -1
- package/src/rules/store/avoid-duplicate-actions-in-reducer.js.map +1 -1
- package/src/rules/store/avoid-mapping-selectors.d.ts +1 -1
- package/src/rules/store/avoid-mapping-selectors.js +1 -1
- package/src/rules/store/avoid-mapping-selectors.js.map +1 -1
- package/src/rules/store/good-action-hygiene.d.ts +1 -1
- package/src/rules/store/good-action-hygiene.js +1 -1
- package/src/rules/store/good-action-hygiene.js.map +1 -1
- package/src/rules/store/no-multiple-global-stores.d.ts +1 -1
- package/src/rules/store/no-multiple-global-stores.js +1 -1
- package/src/rules/store/no-multiple-global-stores.js.map +1 -1
- package/src/rules/store/no-reducer-in-key-names.d.ts +1 -1
- package/src/rules/store/no-reducer-in-key-names.js +1 -1
- package/src/rules/store/no-reducer-in-key-names.js.map +1 -1
- package/src/rules/store/no-store-subscription.d.ts +1 -1
- package/src/rules/store/no-store-subscription.js +1 -1
- package/src/rules/store/no-store-subscription.js.map +1 -1
- package/src/rules/store/no-typed-global-store.d.ts +1 -1
- package/src/rules/store/no-typed-global-store.js +1 -1
- package/src/rules/store/no-typed-global-store.js.map +1 -1
- package/src/rules/store/on-function-explicit-return-type.d.ts +1 -1
- package/src/rules/store/on-function-explicit-return-type.js +1 -1
- package/src/rules/store/on-function-explicit-return-type.js.map +1 -1
- package/src/rules/store/prefer-action-creator-in-dispatch.d.ts +1 -1
- package/src/rules/store/prefer-action-creator-in-dispatch.js +1 -1
- package/src/rules/store/prefer-action-creator-in-dispatch.js.map +1 -1
- package/src/rules/store/prefer-action-creator.d.ts +1 -1
- package/src/rules/store/prefer-action-creator.js +1 -1
- package/src/rules/store/prefer-action-creator.js.map +1 -1
- package/src/rules/store/prefer-inline-action-props.d.ts +1 -1
- package/src/rules/store/prefer-inline-action-props.js +1 -1
- package/src/rules/store/prefer-inline-action-props.js.map +1 -1
- package/src/rules/store/prefer-one-generic-in-create-for-feature-selector.d.ts +1 -1
- package/src/rules/store/prefer-one-generic-in-create-for-feature-selector.js +1 -1
- package/src/rules/store/prefer-one-generic-in-create-for-feature-selector.js.map +1 -1
- package/src/rules/store/prefer-selector-in-select.d.ts +1 -1
- package/src/rules/store/prefer-selector-in-select.js +1 -1
- package/src/rules/store/prefer-selector-in-select.js.map +1 -1
- package/src/rules/store/prefix-selectors-with-select.d.ts +1 -1
- package/src/rules/store/prefix-selectors-with-select.js +121 -25
- package/src/rules/store/prefix-selectors-with-select.js.map +1 -1
- package/src/rules/store/select-style.d.ts +1 -1
- package/src/rules/store/select-style.js +1 -1
- package/src/rules/store/select-style.js.map +1 -1
- package/src/rules/store/use-consistent-global-store-name.d.ts +1 -1
- package/src/rules/store/use-consistent-global-store-name.js +1 -1
- package/src/rules/store/use-consistent-global-store-name.js.map +1 -1
- package/src/utils/helper-functions/index.d.ts +0 -2
- package/src/utils/helper-functions/index.js +0 -2
- package/src/utils/helper-functions/index.js.map +1 -1
- package/src/utils/helper-functions/rules.d.ts +1 -2
- package/src/utils/helper-functions/rules.js +5 -4
- package/src/utils/helper-functions/rules.js.map +1 -1
- package/src/utils/helper-functions/utils.js.map +1 -1
- package/v9/index.d.ts +6 -0
- package/v9/index.js +6 -0
- package/v9/index.js.map +1 -1
- package/jest.config.d.ts +0 -15
- package/jest.config.js +0 -25
- package/jest.config.js.map +0 -1
- package/src/utils/helper-functions/docs.d.ts +0 -1
- package/src/utils/helper-functions/docs.js +0 -6
- package/src/utils/helper-functions/docs.js.map +0 -1
- package/src/utils/helper-functions/versions.d.ts +0 -1
- package/src/utils/helper-functions/versions.js +0 -78
- package/src/utils/helper-functions/versions.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngrx/eslint-plugin",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "21.0.0-beta.0",
|
|
4
4
|
"description": "NgRx ESLint Plugin",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -42,7 +42,6 @@
|
|
|
42
42
|
},
|
|
43
43
|
"sideEffects": false,
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"semver": "^7.3.5",
|
|
46
45
|
"strip-json-comments": "3.1.1"
|
|
47
46
|
},
|
|
48
47
|
"peerDependencies": {
|
|
@@ -10,10 +10,13 @@
|
|
|
10
10
|
"default": "all",
|
|
11
11
|
"enum": [
|
|
12
12
|
"all",
|
|
13
|
+
"allTypedChecked",
|
|
13
14
|
"component-store",
|
|
14
15
|
"effects",
|
|
16
|
+
"effectsTypedChecked",
|
|
15
17
|
"operators",
|
|
16
18
|
"signals",
|
|
19
|
+
"signalsTypedChecked",
|
|
17
20
|
"store"
|
|
18
21
|
],
|
|
19
22
|
"x-prompt": {
|
|
@@ -24,6 +27,10 @@
|
|
|
24
27
|
"value": "all",
|
|
25
28
|
"label": "all"
|
|
26
29
|
},
|
|
30
|
+
{
|
|
31
|
+
"value": "allTypedChecked",
|
|
32
|
+
"label": "allTypedChecked"
|
|
33
|
+
},
|
|
27
34
|
{
|
|
28
35
|
"value": "component-store",
|
|
29
36
|
"label": "component-store"
|
|
@@ -32,6 +39,10 @@
|
|
|
32
39
|
"value": "effects",
|
|
33
40
|
"label": "effects"
|
|
34
41
|
},
|
|
42
|
+
{
|
|
43
|
+
"value": "effectsTypedChecked",
|
|
44
|
+
"label": "effectsTypedChecked"
|
|
45
|
+
},
|
|
35
46
|
{
|
|
36
47
|
"value": "operators",
|
|
37
48
|
"label": "operators"
|
|
@@ -40,6 +51,10 @@
|
|
|
40
51
|
"value": "signals",
|
|
41
52
|
"label": "signals"
|
|
42
53
|
},
|
|
54
|
+
{
|
|
55
|
+
"value": "signalsTypedChecked",
|
|
56
|
+
"label": "signalsTypedChecked"
|
|
57
|
+
},
|
|
43
58
|
{
|
|
44
59
|
"value": "store",
|
|
45
60
|
"label": "store"
|
|
@@ -4,82 +4,71 @@ const fs_1 = require("fs");
|
|
|
4
4
|
const path_1 = require("path");
|
|
5
5
|
const prettier_1 = require("prettier");
|
|
6
6
|
const rules_1 = require("../src/utils/helper-functions/rules");
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
writeConfig('
|
|
14
|
-
writeConfig('
|
|
15
|
-
writeConfig('
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
*/
|
|
7
|
+
(async () => {
|
|
8
|
+
const prettierConfig = await (0, prettier_1.resolveConfig)(__dirname);
|
|
9
|
+
const RULE_MODULE = '@ngrx';
|
|
10
|
+
const CONFIG_DIRECTORY = './modules/eslint-plugin/src/configs/';
|
|
11
|
+
const isModule = (rule, moduleName) => rule.meta.docs?.ngrxModule === moduleName;
|
|
12
|
+
const isTypeChecked = (rule) => rule.meta.docs?.requiresTypeChecking === true;
|
|
13
|
+
writeConfig('all', (rule) => !isTypeChecked(rule));
|
|
14
|
+
writeConfig('allTypeChecked', (_rule) => true);
|
|
15
|
+
writeConfig('store', (rule) => isModule(rule, 'store') && !isTypeChecked(rule));
|
|
16
|
+
writeConfig('effects', (rule) => isModule(rule, 'effects') && !isTypeChecked(rule));
|
|
17
|
+
writeConfig('effectsTypeChecked', (rule) => isModule(rule, 'effects'));
|
|
18
|
+
writeConfig('component-store', (rule) => isModule(rule, 'component-store') && !isTypeChecked(rule));
|
|
19
|
+
writeConfig('operators', (rule) => isModule(rule, 'operators') && !isTypeChecked(rule));
|
|
20
|
+
writeConfig('signals', (rule) => isModule(rule, 'signals') && !isTypeChecked(rule));
|
|
21
|
+
writeConfig('signalsTypeChecked', (rule) => isModule(rule, 'signals'));
|
|
22
|
+
async function writeConfig(configName, predicate) {
|
|
23
|
+
const rulesForConfig = Object.entries(rules_1.rulesForGenerate).filter(([_, rule]) => predicate(rule));
|
|
24
|
+
const configRules = rulesForConfig.reduce((rules, [ruleName, _rule]) => {
|
|
25
|
+
rules[`${RULE_MODULE}/${ruleName}`] = 'error';
|
|
26
|
+
return rules;
|
|
27
|
+
}, {});
|
|
28
|
+
const tsCode = `
|
|
29
|
+
/**
|
|
30
|
+
* DO NOT EDIT
|
|
31
|
+
* This file is generated
|
|
32
|
+
*/
|
|
34
33
|
|
|
35
|
-
|
|
34
|
+
import type { TSESLint } from '@typescript-eslint/utils';
|
|
36
35
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
36
|
+
export default (
|
|
37
|
+
plugin: TSESLint.FlatConfig.Plugin,
|
|
38
|
+
parser: TSESLint.FlatConfig.Parser,
|
|
39
|
+
): TSESLint.FlatConfig.ConfigArray => [
|
|
40
|
+
{
|
|
41
|
+
name: 'ngrx/base',
|
|
42
|
+
languageOptions: {
|
|
43
|
+
parser,
|
|
44
|
+
},
|
|
45
|
+
plugins: {
|
|
46
|
+
'@ngrx': plugin,
|
|
47
|
+
},
|
|
46
48
|
},
|
|
47
|
-
|
|
48
|
-
'
|
|
49
|
+
{
|
|
50
|
+
name: 'ngrx/${configName}',
|
|
51
|
+
languageOptions: {
|
|
52
|
+
parser,
|
|
53
|
+
},
|
|
54
|
+
rules: ${JSON.stringify(configRules, null, 2)}
|
|
49
55
|
},
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
},
|
|
61
|
-
];`;
|
|
62
|
-
const tsConfigFormatted = (0, prettier_1.format)(tsCode, {
|
|
63
|
-
parser: 'typescript',
|
|
64
|
-
...prettierConfig,
|
|
65
|
-
});
|
|
66
|
-
(0, fs_1.writeFileSync)((0, path_1.join)(CONFIG_DIRECTORY, `${configName}.ts`), tsConfigFormatted);
|
|
67
|
-
const jsonConfig = {
|
|
68
|
-
parser: '@typescript-eslint/parser',
|
|
69
|
-
plugins: ['@ngrx'],
|
|
70
|
-
rules: configRules,
|
|
71
|
-
};
|
|
72
|
-
if (requireParserOptions) {
|
|
73
|
-
jsonConfig.parserOptions = {
|
|
74
|
-
ecmaVersion: 2020,
|
|
75
|
-
sourceType: 'module',
|
|
76
|
-
project: './tsconfig.json',
|
|
56
|
+
];`;
|
|
57
|
+
const tsConfigFormatted = await (0, prettier_1.format)(tsCode, {
|
|
58
|
+
parser: 'typescript',
|
|
59
|
+
...prettierConfig,
|
|
60
|
+
});
|
|
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,
|
|
77
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);
|
|
78
72
|
}
|
|
79
|
-
|
|
80
|
-
parser: 'json',
|
|
81
|
-
...prettierConfig,
|
|
82
|
-
});
|
|
83
|
-
(0, fs_1.writeFileSync)((0, path_1.join)(CONFIG_DIRECTORY, `${configName}.json`), jsonConfigFormatted);
|
|
84
|
-
}
|
|
73
|
+
})();
|
|
85
74
|
//# 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":";;AAAA,2BAAmC;AACnC,+BAA4B;AAC5B,uCAAiD;
|
|
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('allTypeChecked', (_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('effectsTypeChecked', (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('signalsTypeChecked', (rule) => isModule(rule, 'signals'));\n\n async function writeConfig(\n configName:\n | 'all'\n | 'allTypeChecked'\n | 'store'\n | 'effects'\n | 'effectsTypeChecked'\n | 'component-store'\n | 'operators'\n | 'signals'\n | 'signalsTypeChecked',\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 const jsonConfig: { [key: string]: any } = {\n parser: '@typescript-eslint/parser',\n plugins: ['@ngrx'],\n rules: configRules,\n };\n const jsonConfigFormatted = await format(\n JSON.stringify(jsonConfig, null, 2),\n {\n parser: 'json',\n ...prettierConfig,\n }\n );\n\n writeFileSync(\n join(CONFIG_DIRECTORY, `${configName}.json`),\n jsonConfigFormatted\n );\n }\n})();\n"]}
|
package/scripts/generate-docs.js
CHANGED
|
@@ -37,23 +37,21 @@ const fs_1 = require("fs");
|
|
|
37
37
|
const path = __importStar(require("path"));
|
|
38
38
|
const prettier_1 = require("prettier");
|
|
39
39
|
const rules_1 = require("../src/utils/helper-functions/rules");
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
];
|
|
46
|
-
for (const rules of RULES_PATHS) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
${meta.version ? '> Required NgRx Version Range: ${meta.version}' : ''}
|
|
40
|
+
(async () => {
|
|
41
|
+
const prettierConfig = await (0, prettier_1.resolveConfig)(__dirname);
|
|
42
|
+
const PLACEHOLDER = '<!-- MANUAL-DOC:START -->';
|
|
43
|
+
const RULES_PATHS = [
|
|
44
|
+
'./projects/www/src/app/pages/guide/eslint-plugin/rules',
|
|
45
|
+
];
|
|
46
|
+
for (const rules of RULES_PATHS) {
|
|
47
|
+
for (const [ruleName, { meta }] of Object.entries(rules_1.rulesForGenerate)) {
|
|
48
|
+
const docPath = path.join(rules, `${ruleName}.md`);
|
|
49
|
+
if (!(0, fs_1.existsSync)(docPath)) {
|
|
50
|
+
(0, fs_1.writeFileSync)(docPath, ``);
|
|
51
|
+
}
|
|
52
|
+
const doc = (0, fs_1.readFileSync)(docPath, 'utf-8');
|
|
53
|
+
const docContent = doc.substring(doc.indexOf(PLACEHOLDER) + PLACEHOLDER.length);
|
|
54
|
+
const newDoc = await (0, prettier_1.format)(`# ${ruleName}
|
|
57
55
|
|
|
58
56
|
${meta.docs?.description}
|
|
59
57
|
|
|
@@ -67,10 +65,11 @@ ${meta.docs?.description}
|
|
|
67
65
|
<!-- MANUAL-DOC:START -->
|
|
68
66
|
|
|
69
67
|
${docContent}`, {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
parser: 'markdown',
|
|
69
|
+
...prettierConfig,
|
|
70
|
+
});
|
|
71
|
+
(0, fs_1.writeFileSync)(docPath, newDoc);
|
|
72
|
+
}
|
|
74
73
|
}
|
|
75
|
-
}
|
|
74
|
+
})();
|
|
76
75
|
//# sourceMappingURL=generate-docs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-docs.js","sourceRoot":"","sources":["../../../../modules/eslint-plugin/scripts/generate-docs.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2BAA6D;AAC7D,2CAA6B;AAC7B,uCAAiD;AACjD,+DAAuE;AAEvE,MAAM,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"generate-docs.js","sourceRoot":"","sources":["../../../../modules/eslint-plugin/scripts/generate-docs.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2BAA6D;AAC7D,2CAA6B;AAC7B,uCAAiD;AACjD,+DAAuE;AAEvE,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,cAAc,GAAG,MAAM,IAAA,wBAAa,EAAC,SAAS,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,2BAA2B,CAAC;IAChD,MAAM,WAAW,GAAG;QAClB,wDAAwD;KACzD,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,wBAAgB,CAAC,EAAE,CAAC;YACpE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAA,kBAAa,EAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,GAAG,GAAG,IAAA,iBAAY,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3C,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAC9B,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,MAAM,CAC9C,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAA,iBAAM,EACzB,KAAK,QAAQ;;EAEnB,IAAI,CAAC,IAAI,EAAE,WAAW;;cAEV,IAAI,CAAC,IAAI;iBACN,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;oBACxB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gCACtB,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;sBAEpE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAC7D;;;;;EAKN,UAAU,EAAE,EACN;gBACE,MAAM,EAAE,UAAU;gBAClB,GAAG,cAAc;aAClB,CACF,CAAC;YAEF,IAAA,kBAAa,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;AACH,CAAC,CAAC,EAAE,CAAC","sourcesContent":["import { readFileSync, writeFileSync, existsSync } from 'fs';\nimport * as path from 'path';\nimport { format, resolveConfig } from 'prettier';\nimport { rulesForGenerate } from '../src/utils/helper-functions/rules';\n\n(async () => {\n const prettierConfig = await resolveConfig(__dirname);\n const PLACEHOLDER = '<!-- MANUAL-DOC:START -->';\n const RULES_PATHS = [\n './projects/www/src/app/pages/guide/eslint-plugin/rules',\n ];\n\n for (const rules of RULES_PATHS) {\n for (const [ruleName, { meta }] of Object.entries(rulesForGenerate)) {\n const docPath = path.join(rules, `${ruleName}.md`);\n if (!existsSync(docPath)) {\n writeFileSync(docPath, ``);\n }\n const doc = readFileSync(docPath, 'utf-8');\n const docContent = doc.substring(\n doc.indexOf(PLACEHOLDER) + PLACEHOLDER.length\n );\n const newDoc = await format(\n `# ${ruleName}\n\n${meta.docs?.description}\n\n- **Type**: ${meta.type}\n- **Fixable**: ${meta.fixable ? 'Yes' : 'No'}\n- **Suggestion**: ${meta.hasSuggestions ? 'Yes' : 'No'}\n- **Requires type checking**: ${meta.docs?.requiresTypeChecking ? 'Yes' : 'No'}\n- **Configurable**: ${\n Array.isArray(meta.schema) && meta.schema.length ? 'Yes' : 'No'\n }\n\n<!-- Everything above this generated, do not edit -->\n<!-- MANUAL-DOC:START -->\n\n${docContent}`,\n {\n parser: 'markdown',\n ...prettierConfig,\n }\n );\n\n writeFileSync(docPath, newDoc);\n }\n }\n})();\n"]}
|
|
@@ -4,63 +4,70 @@ const fs_1 = require("fs");
|
|
|
4
4
|
const os_1 = require("os");
|
|
5
5
|
const prettier_1 = require("prettier");
|
|
6
6
|
const rules_1 = require("../src/utils/helper-functions/rules");
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
`
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
7
|
+
(async () => {
|
|
8
|
+
const prettierConfig = await (0, prettier_1.resolveConfig)(__dirname);
|
|
9
|
+
const OVERVIEW = './projects/www/src/app/pages/guide/eslint-plugin/index.md';
|
|
10
|
+
const GH_CONFIGS = 'https://github.com/ngrx/platform/blob/main/modules/eslint-plugin/src/configs';
|
|
11
|
+
await generateRules();
|
|
12
|
+
await generateConfigurations();
|
|
13
|
+
async function generateRules() {
|
|
14
|
+
const moduleRules = Object.entries(rules_1.rulesForGenerate).reduce((all, [ruleName, { meta }]) => {
|
|
15
|
+
if (!meta.docs) {
|
|
16
|
+
throw new Error(`Rule ${ruleName} is missing meta.docs information`);
|
|
17
|
+
}
|
|
18
|
+
all[meta.docs.ngrxModule] = (all[meta.docs.ngrxModule] ?? []).concat([
|
|
19
|
+
[
|
|
20
|
+
`[@ngrx/${ruleName}]${meta.docs?.url
|
|
21
|
+
? '(' +
|
|
22
|
+
meta.docs.url
|
|
23
|
+
.replace('https://ngrx.io', '')
|
|
24
|
+
.replace('.md', '') +
|
|
25
|
+
')'
|
|
26
|
+
: ''}`,
|
|
27
|
+
meta.docs?.description ?? 'TODO',
|
|
28
|
+
meta.type,
|
|
29
|
+
meta.fixable ? 'Yes' : 'No',
|
|
30
|
+
meta.hasSuggestions ? 'Yes' : 'No',
|
|
31
|
+
Array.isArray(meta.schema) && meta.schema.length ? 'Yes' : 'No',
|
|
32
|
+
meta.docs?.requiresTypeChecking ? 'Yes' : 'No',
|
|
33
|
+
],
|
|
34
|
+
]);
|
|
35
|
+
return all;
|
|
36
|
+
}, {});
|
|
37
|
+
const tableHeader = `| Name | Description | Category | Fixable | Has suggestions | Configurable | Requires type information
|
|
32
38
|
| --- | --- | --- | --- | --- | --- | --- |`;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
const configTable = Object.entries(moduleRules).map(([ngrxModule, pluginRules]) => {
|
|
40
|
+
const tableBody = pluginRules
|
|
41
|
+
.map((rule) => `|${rule.join('|')}|`)
|
|
42
|
+
.join(os_1.EOL);
|
|
43
|
+
const table = [tableHeader, tableBody].join(os_1.EOL);
|
|
44
|
+
return [`### ${ngrxModule}`, table].join(os_1.EOL);
|
|
45
|
+
});
|
|
46
|
+
const overview = (0, fs_1.readFileSync)(OVERVIEW, 'utf-8');
|
|
47
|
+
const start = overview.indexOf('<!-- RULES-CONFIG:START -->');
|
|
48
|
+
const end = overview.indexOf('<!-- RULES-CONFIG:END -->');
|
|
49
|
+
const newOverview = await (0, prettier_1.format)(`${overview.substring(0, start + '<!-- RULES-CONFIG:START -->'.length)}
|
|
44
50
|
${configTable.join(os_1.EOL)}
|
|
45
51
|
${overview.substring(end)}`, {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
function generateConfigurations() {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
52
|
+
...prettierConfig,
|
|
53
|
+
parser: 'markdown',
|
|
54
|
+
});
|
|
55
|
+
(0, fs_1.writeFileSync)(OVERVIEW, newOverview);
|
|
56
|
+
}
|
|
57
|
+
async function generateConfigurations() {
|
|
58
|
+
const tableHeader = `| Name |
|
|
59
|
+
| --- |`;
|
|
60
|
+
const overview = (0, fs_1.readFileSync)(OVERVIEW, 'utf-8');
|
|
61
|
+
const start = overview.indexOf('<!-- CONFIGURATIONS-CONFIG:START -->');
|
|
62
|
+
const end = overview.indexOf('<!-- CONFIGURATIONS-CONFIG:END -->');
|
|
63
|
+
const configTable = rules_1.configsForGenerate.map((configName) => `| [${configName}](${GH_CONFIGS}/${configName}.json) |`);
|
|
64
|
+
const newOverview = await (0, prettier_1.format)(`${overview.substring(0, start + '<!-- CONFIGURATIONS-CONFIG:START -->'.length)}
|
|
65
|
+
${[tableHeader, ...configTable].join(os_1.EOL)}
|
|
66
|
+
${overview.substring(end)}`, {
|
|
67
|
+
...prettierConfig,
|
|
68
|
+
parser: 'markdown',
|
|
69
|
+
});
|
|
70
|
+
(0, fs_1.writeFileSync)(OVERVIEW, newOverview);
|
|
71
|
+
}
|
|
72
|
+
})();
|
|
66
73
|
//# sourceMappingURL=generate-overview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-overview.js","sourceRoot":"","sources":["../../../../modules/eslint-plugin/scripts/generate-overview.ts"],"names":[],"mappings":";;AAAA,2BAAiD;AACjD,2BAAyB;AACzB,uCAAiD;AACjD,+DAG6C;AAE7C,MAAM,cAAc,GAAG,
|
|
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}.json) |`\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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-fixture.js","sourceRoot":"","sources":["../../../../../modules/eslint-plugin/spec/utils/from-fixture.ts"],"names":[],"mappings":";;AAuBA,kCAiBC;AAjBD,SAAgB,WAAW,CAIzB,OAAe,EACf,kBAKI,EAAE;IAEN,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,eAAe,CAAC;IACjD,OAAO;QACL,GAAG,IAAI;QACP,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,WAGa,EACb,OAAgB,EAChB,OAA2B;IAE3B,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,WAAW,EAAW,CAAC;IAClC,CAAC;IACD,OAAO;QACL,WAAW,EAAE,OAAO;aACjB,KAAK,CAAC,KAAK,CAAC;aACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;KAClD,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CACnB,OAAe,EACf,WAAoE;IAEpE,MAAM,WAAW,GACf,kHAAkH,CAAC;IACrH,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAwC,EAAE,CAAC;IACvD,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;YACrD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM;gBACN,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;gBAC3C,SAAS;gBACT,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAiB;gBACzC,kHAAkH;gBAClH,GAAI,cAAc,CAChB,WAAW,EACX,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAC7B,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CACwB;aACvD,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACzB,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,WAAW,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACtB,MAAM;KACP,CAAC;AACJ,CAAC","sourcesContent":["import { TSESLint as eslint } from '@typescript-eslint/utils';\n\nexport function fromFixture<TMessageIds extends string>(\n fixture: string,\n invalidTestCase?: {\n output?: string;\n suggestions?: readonly eslint.SuggestionOutput<TMessageIds>[] | null;\n }\n): eslint.InvalidTestCase<TMessageIds, never>;\n\nexport function fromFixture<\n TMessageIds extends string,\n TOptions extends readonly unknown[]
|
|
1
|
+
{"version":3,"file":"from-fixture.js","sourceRoot":"","sources":["../../../../../modules/eslint-plugin/spec/utils/from-fixture.ts"],"names":[],"mappings":";;AAuBA,kCAiBC;AAjBD,SAAgB,WAAW,CAIzB,OAAe,EACf,kBAKI,EAAE;IAEN,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,eAAe,CAAC;IACjD,OAAO;QACL,GAAG,IAAI;QACP,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,WAGa,EACb,OAAgB,EAChB,OAA2B;IAE3B,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,WAAW,EAAW,CAAC;IAClC,CAAC;IACD,OAAO;QACL,WAAW,EAAE,OAAO;aACjB,KAAK,CAAC,KAAK,CAAC;aACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;KAClD,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CACnB,OAAe,EACf,WAAoE;IAEpE,MAAM,WAAW,GACf,kHAAkH,CAAC;IACrH,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAwC,EAAE,CAAC;IACvD,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;YACrD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM;gBACN,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;gBAC3C,SAAS;gBACT,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAiB;gBACzC,kHAAkH;gBAClH,GAAI,cAAc,CAChB,WAAW,EACX,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAC7B,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CACwB;aACvD,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACzB,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,WAAW,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACtB,MAAM;KACP,CAAC;AACJ,CAAC","sourcesContent":["import { TSESLint as eslint } from '@typescript-eslint/utils';\n\nexport function fromFixture<TMessageIds extends string>(\n fixture: string,\n invalidTestCase?: {\n output?: string;\n suggestions?: readonly eslint.SuggestionOutput<TMessageIds>[] | null;\n }\n): eslint.InvalidTestCase<TMessageIds, never>;\n\nexport function fromFixture<\n TMessageIds extends string,\n TOptions extends readonly unknown[],\n>(\n fixture: string,\n invalidTestCase: Omit<\n eslint.InvalidTestCase<TMessageIds, TOptions>,\n 'code' | 'errors'\n > & {\n suggestions?: readonly eslint.SuggestionOutput<TMessageIds>[] | null;\n }\n): eslint.InvalidTestCase<TMessageIds, TOptions>;\n\nexport function fromFixture<\n TMessageIds extends string,\n TOptions extends readonly unknown[],\n>(\n fixture: string,\n invalidTestCase: Omit<\n eslint.InvalidTestCase<TMessageIds, TOptions>,\n 'code' | 'errors'\n > & {\n suggestions?: readonly eslint.SuggestionOutput<TMessageIds>[] | null;\n } = {}\n): eslint.InvalidTestCase<TMessageIds, TOptions> {\n const { suggestions, ...rest } = invalidTestCase;\n return {\n ...rest,\n ...parseFixture(fixture, suggestions),\n };\n}\n\nfunction getSuggestions<TMessageIds extends string>(\n suggestions:\n | readonly eslint.SuggestionOutput<TMessageIds>[]\n | null\n | undefined,\n suggest: boolean,\n indices: string | undefined\n) {\n if (!suggestions || !suggest) {\n return {};\n }\n if (!indices) {\n return { suggestions } as const;\n }\n return {\n suggestions: indices\n .split(/\\s+/)\n .map((index) => suggestions[Number.parseInt(index, 10)]),\n } as const;\n}\n\nfunction parseFixture<TMessageIds extends string>(\n fixture: string,\n suggestions?: readonly eslint.SuggestionOutput<TMessageIds>[] | null\n) {\n const errorRegExp =\n /^(?<indent>\\s*)(?<error>~+)\\s*\\[(?<id>\\w+)\\s*(?<data>.*?)(?:\\s*(?<suggest>suggest)\\s*(?<indices>[\\d\\s]*))?\\]\\s*$/;\n const lines: string[] = [];\n const errors: eslint.TestCaseError<TMessageIds>[] = [];\n let suggestFound = false;\n fixture.split('\\n').forEach((line) => {\n const match = line.match(errorRegExp);\n if (match?.groups) {\n const column = match.groups.indent.length + 1;\n const endColumn = column + match.groups.error.length;\n const { length } = lines;\n errors.push({\n column,\n data: JSON.parse(match.groups.data || '{}'),\n endColumn,\n endLine: length,\n line: length,\n messageId: match.groups.id as TMessageIds,\n // TODO: Remove type assertion once https://github.com/typescript-eslint/typescript-eslint/pull/3844 is available.\n ...(getSuggestions(\n suggestions,\n Boolean(match.groups.suggest),\n match.groups.indices?.trim()\n ) as eslint.TestCaseError<TMessageIds>['suggestions']),\n });\n if (match.groups.suggest) {\n suggestFound = true;\n }\n } else {\n lines.push(line);\n }\n });\n if (suggestions && !suggestFound) {\n throw new Error(\"Suggestions specified but no 'suggest' annotation found.\");\n }\n return {\n code: lines.join('\\n'),\n errors,\n };\n}\n"]}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ruleTester = ruleTester;
|
|
4
|
-
const utils_1 = require("../../src/utils");
|
|
5
4
|
const rule_tester_1 = require("@typescript-eslint/rule-tester");
|
|
6
5
|
const path_1 = require("path");
|
|
7
|
-
function ruleTester(
|
|
8
|
-
(
|
|
9
|
-
|
|
10
|
-
(0, utils_1.setNgrxVersion)(environment.ngrxModule, environment.version);
|
|
11
|
-
}
|
|
12
|
-
return new rule_tester_1.RuleTester({
|
|
13
|
-
languageOptions: {
|
|
6
|
+
function ruleTester(requiresTypeChecking) {
|
|
7
|
+
const languageOptions = (requiresTypeChecking ?? false)
|
|
8
|
+
? {
|
|
14
9
|
parserOptions: {
|
|
15
10
|
tsconfigRootDir: (0, path_1.resolve)('./modules/eslint-plugin/spec/fixtures'),
|
|
16
11
|
project: './tsconfig.json',
|
|
17
12
|
},
|
|
18
|
-
}
|
|
13
|
+
}
|
|
14
|
+
: undefined;
|
|
15
|
+
return new rule_tester_1.RuleTester({
|
|
16
|
+
languageOptions,
|
|
19
17
|
});
|
|
20
18
|
}
|
|
21
19
|
//# sourceMappingURL=rule-tester.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-tester.js","sourceRoot":"","sources":["../../../../../modules/eslint-plugin/spec/utils/rule-tester.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"rule-tester.js","sourceRoot":"","sources":["../../../../../modules/eslint-plugin/spec/utils/rule-tester.ts"],"names":[],"mappings":";;AAGA,gCAaC;AAhBD,gEAA4D;AAC5D,+BAA+B;AAE/B,SAAgB,UAAU,CAAC,oBAA8B;IACvD,MAAM,eAAe,GACnB,CAAC,oBAAoB,IAAI,KAAK,CAAC;QAC7B,CAAC,CAAC;YACE,aAAa,EAAE;gBACb,eAAe,EAAE,IAAA,cAAO,EAAC,uCAAuC,CAAC;gBACjE,OAAO,EAAE,iBAAiB;aAC3B;SACF;QACH,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,IAAI,wBAAU,CAAC;QACpB,eAAe;KAChB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { RuleTester } from '@typescript-eslint/rule-tester';\nimport { resolve } from 'path';\n\nexport function ruleTester(requiresTypeChecking?: boolean) {\n const languageOptions =\n (requiresTypeChecking ?? false)\n ? {\n parserOptions: {\n tsconfigRootDir: resolve('./modules/eslint-plugin/spec/fixtures'),\n project: './tsconfig.json',\n },\n }\n : undefined;\n return new RuleTester({\n languageOptions,\n });\n}\n"]}
|
package/src/configs/all.js
CHANGED
|
@@ -9,7 +9,6 @@ exports.default = (plugin, parser) => [
|
|
|
9
9
|
name: 'ngrx/base',
|
|
10
10
|
languageOptions: {
|
|
11
11
|
parser,
|
|
12
|
-
sourceType: 'module',
|
|
13
12
|
},
|
|
14
13
|
plugins: {
|
|
15
14
|
'@ngrx': plugin,
|
|
@@ -19,21 +18,14 @@ exports.default = (plugin, parser) => [
|
|
|
19
18
|
name: 'ngrx/all',
|
|
20
19
|
languageOptions: {
|
|
21
20
|
parser,
|
|
22
|
-
parserOptions: {
|
|
23
|
-
ecmaVersion: 2020,
|
|
24
|
-
sourceType: 'module',
|
|
25
|
-
project: './tsconfig.json',
|
|
26
|
-
},
|
|
27
21
|
},
|
|
28
22
|
rules: {
|
|
29
23
|
'@ngrx/avoid-combining-component-store-selectors': 'error',
|
|
30
24
|
'@ngrx/avoid-mapping-component-store-selectors': 'error',
|
|
31
25
|
'@ngrx/require-super-ondestroy': 'error',
|
|
32
26
|
'@ngrx/updater-explicit-return-type': 'error',
|
|
33
|
-
'@ngrx/avoid-cyclic-effects': 'error',
|
|
34
27
|
'@ngrx/no-dispatch-in-effects': 'error',
|
|
35
28
|
'@ngrx/no-effects-in-providers': 'error',
|
|
36
|
-
'@ngrx/no-multiple-actions-in-effects': 'error',
|
|
37
29
|
'@ngrx/prefer-action-creator-in-of-type': 'error',
|
|
38
30
|
'@ngrx/prefer-effect-callback-in-block-statement': 'error',
|
|
39
31
|
'@ngrx/use-effects-lifecycle-interface': 'error',
|
|
@@ -42,7 +34,6 @@ exports.default = (plugin, parser) => [
|
|
|
42
34
|
'@ngrx/prefer-protected-state': 'error',
|
|
43
35
|
'@ngrx/signal-state-no-arrays-at-root-level': 'error',
|
|
44
36
|
'@ngrx/signal-store-feature-should-use-generic-type': 'error',
|
|
45
|
-
'@ngrx/with-state-no-arrays-at-root-level': 'error',
|
|
46
37
|
'@ngrx/avoid-combining-selectors': 'error',
|
|
47
38
|
'@ngrx/avoid-dispatching-multiple-actions-sequentially': 'error',
|
|
48
39
|
'@ngrx/avoid-duplicate-actions-in-reducer': 'error',
|