@@ -2,118 +2,71 @@ import { writeFileSync } from 'fs';
2
2
import { join } from 'path' ;
3
3
import { format , resolveConfig } from 'prettier' ;
4
4
import type { NgRxRuleModule } from '../src/rule-creator' ;
5
- import { rules } from '../src/rules' ;
5
+ import { rulesForGenerate } from '../src/utils/helper-functions /rules' ;
6
6
7
7
const prettierConfig = resolveConfig . sync ( __dirname ) ;
8
8
9
9
const RULE_MODULE = '@ngrx' ;
10
10
const CONFIG_DIRECTORY = './modules/eslint-plugin/src/configs/' ;
11
11
12
- writeConfig (
13
- 'recommended' ,
14
- ( rule ) =>
15
- ! ! rule . meta . docs ?. recommended && ! rule . meta . docs ?. requiresTypeChecking
16
- ) ;
17
-
18
- writeConfig ( 'all' , ( rule ) => ! rule . meta . docs ?. requiresTypeChecking ) ;
19
-
20
- writeConfig (
21
- 'strict' ,
22
- ( rule ) => ! rule . meta . docs ?. requiresTypeChecking ,
23
- ( ) => 'error'
24
- ) ;
25
-
26
- writeConfig (
27
- 'recommended-requiring-type-checking' ,
28
- ( rule ) => ! ! rule . meta . docs ?. recommended
29
- ) ;
30
-
31
- writeConfig ( 'all-requiring-type-checking' , ( ) => true ) ;
32
-
33
- writeConfig (
34
- 'strict-requiring-type-checking' ,
35
- ( ) => true ,
36
- ( ) => 'error'
37
- ) ;
12
+ writeConfig ( 'recommended' , ( rule ) => ! rule . meta . docs ?. requiresTypeChecking ) ;
13
+ writeConfig ( 'all' , ( _rule ) => true ) ;
38
14
39
15
writeConfig (
40
- 'store' ,
16
+ 'store-recommended ' ,
41
17
( rule ) =>
42
18
rule . meta . ngrxModule === 'store' && ! rule . meta . docs ?. requiresTypeChecking
43
19
) ;
20
+ writeConfig ( 'store-all' , ( rule ) => rule . meta . ngrxModule === 'store' ) ;
44
21
45
22
writeConfig (
46
- 'store-strict' ,
47
- ( rule ) =>
48
- rule . meta . ngrxModule === 'store' && ! rule . meta . docs ?. requiresTypeChecking ,
49
- ( ) => 'error'
50
- ) ;
51
-
52
- writeConfig (
53
- 'effects' ,
23
+ 'effects-recommended' ,
54
24
( rule ) =>
55
25
rule . meta . ngrxModule === 'effects' && ! rule . meta . docs ?. requiresTypeChecking
56
26
) ;
27
+ writeConfig ( 'effects-all' , ( rule ) => rule . meta . ngrxModule === 'effects' ) ;
57
28
58
29
writeConfig (
59
- 'effects-strict ' ,
30
+ 'component-store-recommended ' ,
60
31
( rule ) =>
61
- rule . meta . ngrxModule === 'effects' && ! rule . meta . docs ?. requiresTypeChecking ,
62
- ( ) => 'error'
63
- ) ;
64
-
65
- writeConfig (
66
- 'effects-requiring-type-checking' ,
67
- ( rule ) => rule . meta . ngrxModule === 'effects'
32
+ rule . meta . ngrxModule === 'component-store' &&
33
+ ! rule . meta . docs ?. requiresTypeChecking
68
34
) ;
69
35
70
36
writeConfig (
71
- 'effects-strict-requiring-type-checking' ,
72
- ( rule ) => rule . meta . ngrxModule === 'effects' ,
73
- ( ) => 'error'
37
+ 'component-store-all' ,
38
+ ( rule ) => rule . meta . ngrxModule === 'component-store'
74
39
) ;
75
40
76
41
writeConfig (
77
- 'component-store ' ,
42
+ 'operators-recommended ' ,
78
43
( rule ) =>
79
- rule . meta . ngrxModule === 'component-store ' &&
44
+ rule . meta . ngrxModule === 'operators ' &&
80
45
! rule . meta . docs ?. requiresTypeChecking
81
46
) ;
82
47
83
- writeConfig (
84
- 'component-store-strict' ,
85
- ( rule ) =>
86
- rule . meta . ngrxModule === 'component-store' &&
87
- ! rule . meta . docs ?. requiresTypeChecking ,
88
- ( ) => 'error'
89
- ) ;
48
+ writeConfig ( 'operators-all' , ( rule ) => rule . meta . ngrxModule === 'operators' ) ;
90
49
91
50
function writeConfig (
92
51
configName :
93
52
| 'all'
94
53
| 'recommended'
95
- | 'strict'
96
- | 'all-requiring-type-checking'
97
- | 'recommended-requiring-type-checking'
98
- | 'strict-requiring-type-checking'
99
- | 'store'
100
- | 'store-strict'
101
- | 'effects'
102
- | 'effects-requiring-type-checking'
103
- | 'effects-strict'
104
- | 'effects-strict-requiring-type-checking'
105
- | 'component-store'
106
- | 'component-store-strict' ,
107
- predicate : ( rule : NgRxRuleModule < [ ] , string > ) => boolean ,
108
- setting = ( rule : NgRxRuleModule < [ ] , string > ) =>
109
- rule . meta . docs ?. recommended || 'warn'
54
+ | 'store-recommended'
55
+ | 'store-all'
56
+ | 'effects-recommended'
57
+ | 'effects-all'
58
+ | 'component-store-recommended'
59
+ | 'component-store-all'
60
+ | 'operators-recommended'
61
+ | 'operators-all' ,
62
+ predicate : ( rule : NgRxRuleModule < [ ] , string > ) => boolean
110
63
) {
111
- const rulesForConfig = Object . entries ( rules ) . filter ( ( [ _ , rule ] ) =>
64
+ const rulesForConfig = Object . entries ( rulesForGenerate ) . filter ( ( [ _ , rule ] ) =>
112
65
predicate ( rule )
113
66
) ;
114
67
const configRules = rulesForConfig . reduce < Record < string , string > > (
115
- ( rules , [ ruleName , rule ] ) => {
116
- rules [ `${ RULE_MODULE } /${ ruleName } ` ] = setting ( rule ) ;
68
+ ( rules , [ ruleName , _rule ] ) => {
69
+ rules [ `${ RULE_MODULE } /${ ruleName } ` ] = 'error' ;
117
70
return rules ;
118
71
} ,
119
72
{ }
@@ -127,22 +80,66 @@ function writeConfig(
127
80
}
128
81
: null ;
129
82
130
- const code = `
131
- /**
132
- * DO NOT EDIT
133
- * This file is generated
134
- */
135
-
136
- export = {
137
- parser: "@typescript-eslint/parser",
138
- ${ parserOptions ? `parserOptions: ${ JSON . stringify ( parserOptions ) } ,` : '' }
139
- plugins: ["${ RULE_MODULE } "],
140
- rules: ${ JSON . stringify ( configRules ) } ,
141
- }
142
- ` ;
143
- const config = format ( code , {
83
+ const tsCode = `
84
+ /**
85
+ * DO NOT EDIT
86
+ * This file is generated
87
+ */
88
+
89
+ import type { TSESLint } from '@typescript-eslint/utils';
90
+
91
+ export default (
92
+ plugin: TSESLint.FlatConfig.Plugin,
93
+ parser: TSESLint.FlatConfig.Parser,
94
+ ): TSESLint.FlatConfig.ConfigArray => [
95
+ {
96
+ name: 'ngrx/base',
97
+ languageOptions: {
98
+ parser,
99
+ sourceType: 'module',
100
+ },
101
+ plugins: {
102
+ '@ngrx': plugin,
103
+ },
104
+ },
105
+ {
106
+ name: 'ngrx/${ configName } ',
107
+ languageOptions: {
108
+ parser,
109
+ ${
110
+ parserOptions
111
+ ? `parserOptions: ${ JSON . stringify ( parserOptions , null , 2 ) } ,`
112
+ : ''
113
+ }
114
+ },
115
+ rules: ${ JSON . stringify ( configRules , null , 2 ) }
116
+ },
117
+ ];` ;
118
+ const tsConfigFormatted = format ( tsCode , {
144
119
parser : 'typescript' ,
145
120
...prettierConfig ,
146
121
} ) ;
147
- writeFileSync ( join ( CONFIG_DIRECTORY , `${ configName } .ts` ) , config ) ;
122
+ writeFileSync ( join ( CONFIG_DIRECTORY , `${ configName } .ts` ) , tsConfigFormatted ) ;
123
+
124
+ const jsonConfig : { [ key : string ] : any } = {
125
+ parser : '@typescript-eslint/parser' ,
126
+ plugins : [ '@ngrx' ] ,
127
+ rules : configRules ,
128
+ } ;
129
+ if ( configName . includes ( 'all' ) ) {
130
+ jsonConfig . parserOptions = {
131
+ ecmaVersion : 2020 ,
132
+ sourceType : 'module' ,
133
+ project : './tsconfig.json' ,
134
+ } ;
135
+ }
136
+ const jsonConfigFormatted = format ( JSON . stringify ( jsonConfig , null , 2 ) , {
137
+ parser : 'json' ,
138
+ ...prettierConfig ,
139
+ } ) ;
140
+
141
+ writeFileSync (
142
+ join ( CONFIG_DIRECTORY , `${ configName } .json` ) ,
143
+ jsonConfigFormatted
144
+ ) ;
148
145
}
0 commit comments