@ngrx/eslint-plugin 20.0.1 → 20.1.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.
Files changed (134) hide show
  1. package/package.json +1 -2
  2. package/scripts/generate-config.js +74 -72
  3. package/scripts/generate-config.js.map +1 -1
  4. package/scripts/generate-docs.js +22 -22
  5. package/scripts/generate-docs.js.map +1 -1
  6. package/scripts/generate-overview.js +63 -56
  7. package/scripts/generate-overview.js.map +1 -1
  8. package/spec/utils/from-fixture.js.map +1 -1
  9. package/spec/utils/rule-tester.d.ts +1 -4
  10. package/spec/utils/rule-tester.js +1 -6
  11. package/spec/utils/rule-tester.js.map +1 -1
  12. package/src/index.d.ts +35 -35
  13. package/src/rule-creator.d.ts +7 -23
  14. package/src/rule-creator.js +22 -18
  15. package/src/rule-creator.js.map +1 -1
  16. package/src/rules/component-store/avoid-combining-component-store-selectors.d.ts +1 -1
  17. package/src/rules/component-store/avoid-combining-component-store-selectors.js +1 -1
  18. package/src/rules/component-store/avoid-combining-component-store-selectors.js.map +1 -1
  19. package/src/rules/component-store/avoid-mapping-component-store-selectors.d.ts +1 -1
  20. package/src/rules/component-store/avoid-mapping-component-store-selectors.js +1 -1
  21. package/src/rules/component-store/avoid-mapping-component-store-selectors.js.map +1 -1
  22. package/src/rules/component-store/require-super-ondestroy.d.ts +1 -1
  23. package/src/rules/component-store/require-super-ondestroy.js +1 -1
  24. package/src/rules/component-store/require-super-ondestroy.js.map +1 -1
  25. package/src/rules/component-store/updater-explicit-return-type.d.ts +1 -1
  26. package/src/rules/component-store/updater-explicit-return-type.js +1 -1
  27. package/src/rules/component-store/updater-explicit-return-type.js.map +1 -1
  28. package/src/rules/effects/avoid-cyclic-effects.d.ts +1 -1
  29. package/src/rules/effects/avoid-cyclic-effects.js +1 -1
  30. package/src/rules/effects/avoid-cyclic-effects.js.map +1 -1
  31. package/src/rules/effects/no-dispatch-in-effects.d.ts +1 -1
  32. package/src/rules/effects/no-dispatch-in-effects.js +1 -1
  33. package/src/rules/effects/no-dispatch-in-effects.js.map +1 -1
  34. package/src/rules/effects/no-effects-in-providers.d.ts +1 -1
  35. package/src/rules/effects/no-effects-in-providers.js +1 -1
  36. package/src/rules/effects/no-effects-in-providers.js.map +1 -1
  37. package/src/rules/effects/no-multiple-actions-in-effects.d.ts +1 -1
  38. package/src/rules/effects/no-multiple-actions-in-effects.js +1 -1
  39. package/src/rules/effects/no-multiple-actions-in-effects.js.map +1 -1
  40. package/src/rules/effects/prefer-action-creator-in-of-type.d.ts +1 -1
  41. package/src/rules/effects/prefer-action-creator-in-of-type.js +1 -1
  42. package/src/rules/effects/prefer-action-creator-in-of-type.js.map +1 -1
  43. package/src/rules/effects/prefer-effect-callback-in-block-statement.d.ts +1 -1
  44. package/src/rules/effects/prefer-effect-callback-in-block-statement.js +1 -1
  45. package/src/rules/effects/prefer-effect-callback-in-block-statement.js.map +1 -1
  46. package/src/rules/effects/use-effects-lifecycle-interface.d.ts +1 -1
  47. package/src/rules/effects/use-effects-lifecycle-interface.js +1 -1
  48. package/src/rules/effects/use-effects-lifecycle-interface.js.map +1 -1
  49. package/src/rules/index.d.ts +35 -35
  50. package/src/rules/operators/prefer-concat-latest-from.d.ts +1 -1
  51. package/src/rules/operators/prefer-concat-latest-from.js +1 -1
  52. package/src/rules/operators/prefer-concat-latest-from.js.map +1 -1
  53. package/src/rules/signals/enforce-type-call.d.ts +1 -1
  54. package/src/rules/signals/enforce-type-call.js +1 -1
  55. package/src/rules/signals/enforce-type-call.js.map +1 -1
  56. package/src/rules/signals/prefer-protected-state.d.ts +1 -1
  57. package/src/rules/signals/prefer-protected-state.js +1 -1
  58. package/src/rules/signals/prefer-protected-state.js.map +1 -1
  59. package/src/rules/signals/signal-state-no-arrays-at-root-level.d.ts +1 -1
  60. package/src/rules/signals/signal-state-no-arrays-at-root-level.js +1 -1
  61. package/src/rules/signals/signal-state-no-arrays-at-root-level.js.map +1 -1
  62. package/src/rules/signals/signal-store-feature-should-use-generic-type.d.ts +1 -1
  63. package/src/rules/signals/signal-store-feature-should-use-generic-type.js +1 -1
  64. package/src/rules/signals/signal-store-feature-should-use-generic-type.js.map +1 -1
  65. package/src/rules/signals/with-state-no-arrays-at-root-level.d.ts +1 -1
  66. package/src/rules/signals/with-state-no-arrays-at-root-level.js +1 -1
  67. package/src/rules/signals/with-state-no-arrays-at-root-level.js.map +1 -1
  68. package/src/rules/store/avoid-combining-selectors.d.ts +1 -1
  69. package/src/rules/store/avoid-combining-selectors.js +1 -1
  70. package/src/rules/store/avoid-combining-selectors.js.map +1 -1
  71. package/src/rules/store/avoid-dispatching-multiple-actions-sequentially.d.ts +1 -1
  72. package/src/rules/store/avoid-dispatching-multiple-actions-sequentially.js +1 -1
  73. package/src/rules/store/avoid-dispatching-multiple-actions-sequentially.js.map +1 -1
  74. package/src/rules/store/avoid-duplicate-actions-in-reducer.d.ts +1 -1
  75. package/src/rules/store/avoid-duplicate-actions-in-reducer.js +1 -1
  76. package/src/rules/store/avoid-duplicate-actions-in-reducer.js.map +1 -1
  77. package/src/rules/store/avoid-mapping-selectors.d.ts +1 -1
  78. package/src/rules/store/avoid-mapping-selectors.js +1 -1
  79. package/src/rules/store/avoid-mapping-selectors.js.map +1 -1
  80. package/src/rules/store/good-action-hygiene.d.ts +1 -1
  81. package/src/rules/store/good-action-hygiene.js +1 -1
  82. package/src/rules/store/good-action-hygiene.js.map +1 -1
  83. package/src/rules/store/no-multiple-global-stores.d.ts +1 -1
  84. package/src/rules/store/no-multiple-global-stores.js +1 -1
  85. package/src/rules/store/no-multiple-global-stores.js.map +1 -1
  86. package/src/rules/store/no-reducer-in-key-names.d.ts +1 -1
  87. package/src/rules/store/no-reducer-in-key-names.js +1 -1
  88. package/src/rules/store/no-reducer-in-key-names.js.map +1 -1
  89. package/src/rules/store/no-store-subscription.d.ts +1 -1
  90. package/src/rules/store/no-store-subscription.js +1 -1
  91. package/src/rules/store/no-store-subscription.js.map +1 -1
  92. package/src/rules/store/no-typed-global-store.d.ts +1 -1
  93. package/src/rules/store/no-typed-global-store.js +1 -1
  94. package/src/rules/store/no-typed-global-store.js.map +1 -1
  95. package/src/rules/store/on-function-explicit-return-type.d.ts +1 -1
  96. package/src/rules/store/on-function-explicit-return-type.js +1 -1
  97. package/src/rules/store/on-function-explicit-return-type.js.map +1 -1
  98. package/src/rules/store/prefer-action-creator-in-dispatch.d.ts +1 -1
  99. package/src/rules/store/prefer-action-creator-in-dispatch.js +1 -1
  100. package/src/rules/store/prefer-action-creator-in-dispatch.js.map +1 -1
  101. package/src/rules/store/prefer-action-creator.d.ts +1 -1
  102. package/src/rules/store/prefer-action-creator.js +1 -1
  103. package/src/rules/store/prefer-action-creator.js.map +1 -1
  104. package/src/rules/store/prefer-inline-action-props.d.ts +1 -1
  105. package/src/rules/store/prefer-inline-action-props.js +1 -1
  106. package/src/rules/store/prefer-inline-action-props.js.map +1 -1
  107. package/src/rules/store/prefer-one-generic-in-create-for-feature-selector.d.ts +1 -1
  108. package/src/rules/store/prefer-one-generic-in-create-for-feature-selector.js +1 -1
  109. package/src/rules/store/prefer-one-generic-in-create-for-feature-selector.js.map +1 -1
  110. package/src/rules/store/prefer-selector-in-select.d.ts +1 -1
  111. package/src/rules/store/prefer-selector-in-select.js +1 -1
  112. package/src/rules/store/prefer-selector-in-select.js.map +1 -1
  113. package/src/rules/store/prefix-selectors-with-select.d.ts +1 -1
  114. package/src/rules/store/prefix-selectors-with-select.js +115 -25
  115. package/src/rules/store/prefix-selectors-with-select.js.map +1 -1
  116. package/src/rules/store/select-style.d.ts +1 -1
  117. package/src/rules/store/select-style.js +1 -1
  118. package/src/rules/store/select-style.js.map +1 -1
  119. package/src/rules/store/use-consistent-global-store-name.d.ts +1 -1
  120. package/src/rules/store/use-consistent-global-store-name.js +1 -1
  121. package/src/rules/store/use-consistent-global-store-name.js.map +1 -1
  122. package/src/utils/helper-functions/index.d.ts +0 -2
  123. package/src/utils/helper-functions/index.js +0 -2
  124. package/src/utils/helper-functions/index.js.map +1 -1
  125. package/src/utils/helper-functions/rules.d.ts +1 -2
  126. package/src/utils/helper-functions/rules.js +5 -4
  127. package/src/utils/helper-functions/rules.js.map +1 -1
  128. package/src/utils/helper-functions/utils.js.map +1 -1
  129. package/src/utils/helper-functions/docs.d.ts +0 -1
  130. package/src/utils/helper-functions/docs.js +0 -6
  131. package/src/utils/helper-functions/docs.js.map +0 -1
  132. package/src/utils/helper-functions/versions.d.ts +0 -1
  133. package/src/utils/helper-functions/versions.js +0 -78
  134. 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": "20.0.1",
3
+ "version": "20.1.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": {
@@ -4,82 +4,84 @@ 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
- const prettierConfig = prettier_1.resolveConfig.sync(__dirname);
8
- const RULE_MODULE = '@ngrx';
9
- const CONFIG_DIRECTORY = './modules/eslint-plugin/src/configs/';
10
- writeConfig('all', (_rule) => true);
11
- writeConfig('store', (rule) => rule.meta.ngrxModule === 'store');
12
- writeConfig('effects', (rule) => rule.meta.ngrxModule === 'effects');
13
- writeConfig('component-store', (rule) => rule.meta.ngrxModule === 'component-store');
14
- writeConfig('operators', (rule) => rule.meta.ngrxModule === 'operators');
15
- writeConfig('signals', (rule) => rule.meta.ngrxModule === 'signals');
16
- function writeConfig(configName, predicate) {
17
- const rulesForConfig = Object.entries(rules_1.rulesForGenerate).filter(([_, rule]) => predicate(rule));
18
- const configRules = rulesForConfig.reduce((rules, [ruleName, _rule]) => {
19
- rules[`${RULE_MODULE}/${ruleName}`] = 'error';
20
- return rules;
21
- }, {});
22
- const requireParserOptions = rulesForConfig.some(([_, rule]) => rule.meta.docs?.requiresTypeChecking)
23
- ? {
24
- ecmaVersion: 2020,
25
- sourceType: 'module',
26
- project: './tsconfig.json',
27
- }
28
- : null;
29
- const tsCode = `
30
- /**
31
- * DO NOT EDIT
32
- * This file is generated
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
+ writeConfig('all', (_rule) => true);
12
+ writeConfig('store', (rule) => rule.meta.docs?.ngrxModule === 'store');
13
+ writeConfig('effects', (rule) => rule.meta.docs?.ngrxModule === 'effects');
14
+ writeConfig('component-store', (rule) => rule.meta.docs?.ngrxModule === 'component-store');
15
+ writeConfig('operators', (rule) => rule.meta.docs?.ngrxModule === 'operators');
16
+ writeConfig('signals', (rule) => rule.meta.docs?.ngrxModule === 'signals');
17
+ async function writeConfig(configName, predicate) {
18
+ const rulesForConfig = Object.entries(rules_1.rulesForGenerate).filter(([_, rule]) => predicate(rule));
19
+ const configRules = rulesForConfig.reduce((rules, [ruleName, _rule]) => {
20
+ rules[`${RULE_MODULE}/${ruleName}`] = 'error';
21
+ return rules;
22
+ }, {});
23
+ const requireParserOptions = rulesForConfig.some(([_, rule]) => rule.meta.docs?.requiresTypeChecking)
24
+ ? {
25
+ ecmaVersion: 2020,
26
+ sourceType: 'module',
27
+ project: './tsconfig.json',
28
+ }
29
+ : null;
30
+ const tsCode = `
31
+ /**
32
+ * DO NOT EDIT
33
+ * This file is generated
34
+ */
34
35
 
35
- import type { TSESLint } from '@typescript-eslint/utils';
36
+ import type { TSESLint } from '@typescript-eslint/utils';
36
37
 
37
- export default (
38
- plugin: TSESLint.FlatConfig.Plugin,
39
- parser: TSESLint.FlatConfig.Parser,
40
- ): TSESLint.FlatConfig.ConfigArray => [
41
- {
42
- name: 'ngrx/base',
43
- languageOptions: {
44
- parser,
45
- sourceType: 'module',
46
- },
47
- plugins: {
48
- '@ngrx': plugin,
38
+ export default (
39
+ plugin: TSESLint.FlatConfig.Plugin,
40
+ parser: TSESLint.FlatConfig.Parser,
41
+ ): TSESLint.FlatConfig.ConfigArray => [
42
+ {
43
+ name: 'ngrx/base',
44
+ languageOptions: {
45
+ parser,
46
+ sourceType: 'module',
47
+ },
48
+ plugins: {
49
+ '@ngrx': plugin,
50
+ },
49
51
  },
50
- },
51
- {
52
- name: 'ngrx/${configName}',
53
- languageOptions: {
54
- parser,
55
- ${requireParserOptions
56
- ? `parserOptions: ${JSON.stringify(requireParserOptions, null, 2)},`
57
- : ''}
52
+ {
53
+ name: 'ngrx/${configName}',
54
+ languageOptions: {
55
+ parser,
56
+ ${requireParserOptions
57
+ ? `parserOptions: ${JSON.stringify(requireParserOptions, null, 2)},`
58
+ : ''}
59
+ },
60
+ rules: ${JSON.stringify(configRules, null, 2)}
58
61
  },
59
- rules: ${JSON.stringify(configRules, null, 2)}
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',
62
+ ];`;
63
+ const tsConfigFormatted = await (0, prettier_1.format)(tsCode, {
64
+ parser: 'typescript',
65
+ ...prettierConfig,
66
+ });
67
+ (0, fs_1.writeFileSync)((0, path_1.join)(CONFIG_DIRECTORY, `${configName}.ts`), tsConfigFormatted);
68
+ const jsonConfig = {
69
+ parser: '@typescript-eslint/parser',
70
+ plugins: ['@ngrx'],
71
+ rules: configRules,
77
72
  };
73
+ if (requireParserOptions) {
74
+ jsonConfig.parserOptions = {
75
+ ecmaVersion: 2020,
76
+ sourceType: 'module',
77
+ project: './tsconfig.json',
78
+ };
79
+ }
80
+ const jsonConfigFormatted = await (0, prettier_1.format)(JSON.stringify(jsonConfig, null, 2), {
81
+ parser: 'json',
82
+ ...prettierConfig,
83
+ });
84
+ (0, fs_1.writeFileSync)((0, path_1.join)(CONFIG_DIRECTORY, `${configName}.json`), jsonConfigFormatted);
78
85
  }
79
- const jsonConfigFormatted = (0, prettier_1.format)(JSON.stringify(jsonConfig, null, 2), {
80
- parser: 'json',
81
- ...prettierConfig,
82
- });
83
- (0, fs_1.writeFileSync)((0, path_1.join)(CONFIG_DIRECTORY, `${configName}.json`), jsonConfigFormatted);
84
- }
86
+ })();
85
87
  //# 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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","sourcesContent":["import { writeFileSync } from 'fs';\nimport { join } from 'path';\nimport { format, resolveConfig } from 'prettier';\nimport type { NgRxRuleModule } from '../src/rule-creator';\nimport { rulesForGenerate } from '../src/utils/helper-functions/rules';\n\nconst prettierConfig = resolveConfig.sync(__dirname);\n\nconst RULE_MODULE = '@ngrx';\nconst CONFIG_DIRECTORY = './modules/eslint-plugin/src/configs/';\n\nwriteConfig('all', (_rule) => true);\nwriteConfig('store', (rule) => rule.meta.ngrxModule === 'store');\nwriteConfig('effects', (rule) => rule.meta.ngrxModule === 'effects');\nwriteConfig(\n 'component-store',\n (rule) => rule.meta.ngrxModule === 'component-store'\n);\nwriteConfig('operators', (rule) => rule.meta.ngrxModule === 'operators');\nwriteConfig('signals', (rule) => rule.meta.ngrxModule === 'signals');\n\nfunction writeConfig(\n configName:\n | 'all'\n | 'store'\n | 'effects'\n | 'component-store'\n | 'operators'\n | 'signals',\n predicate: (rule: NgRxRuleModule<[], string>) => boolean\n) {\n const rulesForConfig = Object.entries(rulesForGenerate).filter(([_, rule]) =>\n 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 const requireParserOptions: null | Record<string, string | number> =\n rulesForConfig.some(([_, rule]) => rule.meta.docs?.requiresTypeChecking)\n ? {\n ecmaVersion: 2020,\n sourceType: 'module',\n project: './tsconfig.json',\n }\n : null;\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 sourceType: 'module',\n },\n plugins: {\n '@ngrx': plugin,\n },\n },\n {\n name: 'ngrx/${configName}',\n languageOptions: {\n parser,\n ${\n requireParserOptions\n ? `parserOptions: ${JSON.stringify(\n requireParserOptions,\n null,\n 2\n )},`\n : ''\n }\n },\n rules: ${JSON.stringify(configRules, null, 2)}\n },\n ];`;\n const tsConfigFormatted = format(tsCode, {\n parser: 'typescript',\n ...prettierConfig,\n });\n writeFileSync(join(CONFIG_DIRECTORY, `${configName}.ts`), tsConfigFormatted);\n\n const jsonConfig: { [key: string]: any } = {\n parser: '@typescript-eslint/parser',\n plugins: ['@ngrx'],\n rules: configRules,\n };\n if (requireParserOptions) {\n jsonConfig.parserOptions = {\n ecmaVersion: 2020,\n sourceType: 'module',\n project: './tsconfig.json',\n };\n }\n const jsonConfigFormatted = format(JSON.stringify(jsonConfig, null, 2), {\n parser: 'json',\n ...prettierConfig,\n });\n\n writeFileSync(\n join(CONFIG_DIRECTORY, `${configName}.json`),\n jsonConfigFormatted\n );\n}\n"]}
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 writeConfig('all', (_rule) => true);\n writeConfig('store', (rule) => rule.meta.docs?.ngrxModule === 'store');\n writeConfig('effects', (rule) => rule.meta.docs?.ngrxModule === 'effects');\n writeConfig(\n 'component-store',\n (rule) => rule.meta.docs?.ngrxModule === 'component-store'\n );\n writeConfig(\n 'operators',\n (rule) => rule.meta.docs?.ngrxModule === 'operators'\n );\n writeConfig('signals', (rule) => rule.meta.docs?.ngrxModule === 'signals');\n\n async function writeConfig(\n configName:\n | 'all'\n | 'store'\n | 'effects'\n | 'component-store'\n | 'operators'\n | 'signals',\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 const requireParserOptions: null | Record<string, string | number> =\n rulesForConfig.some(([_, rule]) => rule.meta.docs?.requiresTypeChecking)\n ? {\n ecmaVersion: 2020,\n sourceType: 'module',\n project: './tsconfig.json',\n }\n : null;\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 sourceType: 'module',\n },\n plugins: {\n '@ngrx': plugin,\n },\n },\n {\n name: 'ngrx/${configName}',\n languageOptions: {\n parser,\n ${\n requireParserOptions\n ? `parserOptions: ${JSON.stringify(\n requireParserOptions,\n null,\n 2\n )},`\n : ''\n }\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 if (requireParserOptions) {\n jsonConfig.parserOptions = {\n ecmaVersion: 2020,\n sourceType: 'module',\n project: './tsconfig.json',\n };\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"]}
@@ -37,23 +37,22 @@ 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
- const prettierConfig = prettier_1.resolveConfig.sync(__dirname);
41
- const PLACEHOLDER = '<!-- MANUAL-DOC:START -->';
42
- const RULES_PATHS = [
43
- './projects/ngrx.io/content/guide/eslint-plugin/rules',
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 = (0, prettier_1.format)(`# ${ruleName}
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/ngrx.io/content/guide/eslint-plugin/rules',
45
+ './projects/www/src/app/pages/guide/eslint-plugin/rules',
46
+ ];
47
+ for (const rules of RULES_PATHS) {
48
+ for (const [ruleName, { meta }] of Object.entries(rules_1.rulesForGenerate)) {
49
+ const docPath = path.join(rules, `${ruleName}.md`);
50
+ if (!(0, fs_1.existsSync)(docPath)) {
51
+ (0, fs_1.writeFileSync)(docPath, ``);
52
+ }
53
+ const doc = (0, fs_1.readFileSync)(docPath, 'utf-8');
54
+ const docContent = doc.substring(doc.indexOf(PLACEHOLDER) + PLACEHOLDER.length);
55
+ const newDoc = await (0, prettier_1.format)(`# ${ruleName}
57
56
 
58
57
  ${meta.docs?.description}
59
58
 
@@ -67,10 +66,11 @@ ${meta.docs?.description}
67
66
  <!-- MANUAL-DOC:START -->
68
67
 
69
68
  ${docContent}`, {
70
- parser: 'markdown',
71
- ...prettierConfig,
72
- });
73
- (0, fs_1.writeFileSync)(docPath, newDoc);
69
+ parser: 'markdown',
70
+ ...prettierConfig,
71
+ });
72
+ (0, fs_1.writeFileSync)(docPath, newDoc);
73
+ }
74
74
  }
75
- }
75
+ })();
76
76
  //# 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,wBAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACrD,MAAM,WAAW,GAAG,2BAA2B,CAAC;AAChD,MAAM,WAAW,GAAG;IAClB,sDAAsD;IACtD,wDAAwD;CACzD,CAAC;AAEF,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,wBAAgB,CAAC,EAAE,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAA,kBAAa,EAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,GAAG,GAAG,IAAA,iBAAY,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAC9B,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,MAAM,CAC9C,CAAC;QACF,MAAM,MAAM,GAAG,IAAA,iBAAM,EACnB,KAAK,QAAQ;;EAEjB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC,EAAE;;EAEpE,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;sBAEtE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAC7D;;;;;EAKJ,UAAU,EAAE,EACR;YACE,MAAM,EAAE,UAAU;YAClB,GAAG,cAAc;SAClB,CACF,CAAC;QAEF,IAAA,kBAAa,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;AACH,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\nconst prettierConfig = resolveConfig.sync(__dirname);\nconst PLACEHOLDER = '<!-- MANUAL-DOC:START -->';\nconst RULES_PATHS = [\n './projects/ngrx.io/content/guide/eslint-plugin/rules',\n './projects/www/src/app/pages/guide/eslint-plugin/rules',\n];\n\nfor (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 = format(\n `# ${ruleName}\n\n${meta.version ? '> Required NgRx Version Range: ${meta.version}' : ''}\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"]}
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,sDAAsD;QACtD,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/ngrx.io/content/guide/eslint-plugin/rules',\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
- const prettierConfig = prettier_1.resolveConfig.sync(__dirname);
8
- const OVERVIEW = './projects/ngrx.io/content/guide/eslint-plugin/index.md';
9
- const GH_CONFIGS = 'https://github.com/ngrx/platform/blob/main/modules/eslint-plugin/src/configs';
10
- generateRules();
11
- generateConfigurations();
12
- function generateRules() {
13
- const moduleRules = Object.entries(rules_1.rulesForGenerate).reduce((all, [ruleName, { meta }]) => {
14
- all[meta.ngrxModule] = (all[meta.ngrxModule] ?? []).concat([
15
- [
16
- `[@ngrx/${ruleName}]${meta.docs?.url
17
- ? '(' +
18
- meta.docs.url.replace('https://ngrx.io', '').replace('.md', '') +
19
- ')'
20
- : ''}`,
21
- meta.docs?.description ?? 'TODO',
22
- meta.type,
23
- meta.fixable ? 'Yes' : 'No',
24
- meta.hasSuggestions ? 'Yes' : 'No',
25
- Array.isArray(meta.schema) && meta.schema.length ? 'Yes' : 'No',
26
- meta.docs?.requiresTypeChecking ? 'Yes' : 'No',
27
- ],
28
- ]);
29
- return all;
30
- }, {});
31
- const tableHeader = `| Name | Description | Category | Fixable | Has suggestions | Configurable | Requires type information
7
+ (async () => {
8
+ const prettierConfig = await (0, prettier_1.resolveConfig)(__dirname);
9
+ const OVERVIEW = './projects/ngrx.io/content/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
- const configTable = Object.entries(moduleRules).map(([ngrxModule, pluginRules]) => {
34
- const tableBody = pluginRules
35
- .map((rule) => `|${rule.join('|')}|`)
36
- .join(os_1.EOL);
37
- const table = [tableHeader, tableBody].join(os_1.EOL);
38
- return [`### ${ngrxModule}`, table].join(os_1.EOL);
39
- });
40
- const overview = (0, fs_1.readFileSync)(OVERVIEW, 'utf-8');
41
- const start = overview.indexOf('<!-- RULES-CONFIG:START -->');
42
- const end = overview.indexOf('<!-- RULES-CONFIG:END -->');
43
- const newOverview = (0, prettier_1.format)(`${overview.substring(0, start + '<!-- RULES-CONFIG:START -->'.length)}
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
- parser: 'markdown',
47
- ...prettierConfig,
48
- });
49
- (0, fs_1.writeFileSync)(OVERVIEW, newOverview);
50
- }
51
- function generateConfigurations() {
52
- const tableHeader = `| Name |
53
- | --- |`;
54
- const overview = (0, fs_1.readFileSync)(OVERVIEW, 'utf-8');
55
- const start = overview.indexOf('<!-- CONFIGURATIONS-CONFIG:START -->');
56
- const end = overview.indexOf('<!-- CONFIGURATIONS-CONFIG:END -->');
57
- const configTable = rules_1.configsForGenerate.map((configName) => `| [${configName}](${GH_CONFIGS}/${configName}.json) |`);
58
- const newOverview = (0, prettier_1.format)(`${overview.substring(0, start + '<!-- CONFIGURATIONS-CONFIG:START -->'.length)}
59
- ${[tableHeader, ...configTable].join(os_1.EOL)}
60
- ${overview.substring(end)}`, {
61
- parser: 'markdown',
62
- ...prettierConfig,
63
- });
64
- (0, fs_1.writeFileSync)(OVERVIEW, newOverview);
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":"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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\nconst prettierConfig = resolveConfig.sync(__dirname);\nconst OVERVIEW = './projects/ngrx.io/content/guide/eslint-plugin/index.md';\nconst GH_CONFIGS =\n 'https://github.com/ngrx/platform/blob/main/modules/eslint-plugin/src/configs';\n\ngenerateRules();\ngenerateConfigurations();\n\nfunction generateRules() {\n const moduleRules = Object.entries(rulesForGenerate).reduce<\n Record<string, string[][]>\n >((all, [ruleName, { meta }]) => {\n all[meta.ngrxModule] = (all[meta.ngrxModule] ?? []).concat([\n [\n `[@ngrx/${ruleName}]${\n meta.docs?.url\n ? '(' +\n meta.docs.url.replace('https://ngrx.io', '').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 = format(\n `${overview.substring(0, start + '<!-- RULES-CONFIG:START -->'.length)}\n${configTable.join(EOL)}\n${overview.substring(end)}`,\n {\n parser: 'markdown',\n ...prettierConfig,\n }\n );\n\n writeFileSync(OVERVIEW, newOverview);\n}\n\nfunction 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 = format(\n `${overview.substring(\n 0,\n start + '<!-- CONFIGURATIONS-CONFIG:START -->'.length\n )}\n ${[tableHeader, ...configTable].join(EOL)}\n ${overview.substring(end)}`,\n {\n parser: 'markdown',\n ...prettierConfig,\n }\n );\n\n writeFileSync(OVERVIEW, newOverview);\n}\n"]}
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/ngrx.io/content/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[]\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
+ {"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,5 +1,2 @@
1
1
  import { RuleTester } from '@typescript-eslint/rule-tester';
2
- export declare function ruleTester(environment?: {
3
- ngrxModule: string;
4
- version: string;
5
- }): RuleTester;
2
+ export declare function ruleTester(): RuleTester;
@@ -1,14 +1,9 @@
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(environment) {
8
- (0, utils_1.clearCache)();
9
- if (environment) {
10
- (0, utils_1.setNgrxVersion)(environment.ngrxModule, environment.version);
11
- }
6
+ function ruleTester() {
12
7
  return new rule_tester_1.RuleTester({
13
8
  languageOptions: {
14
9
  parserOptions: {
@@ -1 +1 @@
1
- {"version":3,"file":"rule-tester.js","sourceRoot":"","sources":["../../../../../modules/eslint-plugin/spec/utils/rule-tester.ts"],"names":[],"mappings":";;AAIA,gCAkBC;AAtBD,2CAA6D;AAC7D,gEAA4D;AAC5D,+BAA+B;AAE/B,SAAgB,UAAU,CAAC,WAG1B;IACC,IAAA,kBAAU,GAAE,CAAC;IAEb,IAAI,WAAW,EAAE,CAAC;QAChB,IAAA,sBAAc,EAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,IAAI,wBAAU,CAAC;QACpB,eAAe,EAAE;YACf,aAAa,EAAE;gBACb,eAAe,EAAE,IAAA,cAAO,EAAC,uCAAuC,CAAC;gBACjE,OAAO,EAAE,iBAAiB;aAC3B;SACF;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { clearCache, setNgrxVersion } from '../../src/utils';\nimport { RuleTester } from '@typescript-eslint/rule-tester';\nimport { resolve } from 'path';\n\nexport function ruleTester(environment?: {\n ngrxModule: string;\n version: string;\n}) {\n clearCache();\n\n if (environment) {\n setNgrxVersion(environment.ngrxModule, environment.version);\n }\n\n return new RuleTester({\n languageOptions: {\n parserOptions: {\n tsconfigRootDir: resolve('./modules/eslint-plugin/spec/fixtures'),\n project: './tsconfig.json',\n },\n },\n });\n}\n"]}
1
+ {"version":3,"file":"rule-tester.js","sourceRoot":"","sources":["../../../../../modules/eslint-plugin/spec/utils/rule-tester.ts"],"names":[],"mappings":";;AAGA,gCASC;AAZD,gEAA4D;AAC5D,+BAA+B;AAE/B,SAAgB,UAAU;IACxB,OAAO,IAAI,wBAAU,CAAC;QACpB,eAAe,EAAE;YACf,aAAa,EAAE;gBACb,eAAe,EAAE,IAAA,cAAO,EAAC,uCAAuC,CAAC;gBACjE,OAAO,EAAE,iBAAiB;aAC3B;SACF;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { RuleTester } from '@typescript-eslint/rule-tester';\nimport { resolve } from 'path';\n\nexport function ruleTester() {\n return new RuleTester({\n languageOptions: {\n parserOptions: {\n tsconfigRootDir: resolve('./modules/eslint-plugin/spec/fixtures'),\n project: './tsconfig.json',\n },\n },\n });\n}\n"]}