@monorepolint/rules 0.6.0-alpha.4 → 0.6.0-alpha.6
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/.turbo/turbo-clean.log +1 -1
- package/.turbo/turbo-compile-typescript.log +1 -1
- package/.turbo/turbo-lint.log +1 -1
- package/.turbo/turbo-test.log +443 -92
- package/.turbo/turbo-transpile-typescript.log +5 -5
- package/CHANGELOG.md +112 -0
- package/build/js/index.js +413 -368
- package/build/js/index.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/REMOVE.d.ts +2 -0
- package/build/types/REMOVE.d.ts.map +1 -0
- package/build/types/__tests__/alphabeticalDependencies.spec.d.ts +8 -0
- package/build/types/__tests__/alphabeticalDependencies.spec.d.ts.map +1 -0
- package/build/types/__tests__/forceError.spec.d.ts +8 -0
- package/build/types/__tests__/forceError.spec.d.ts.map +1 -0
- package/build/types/__tests__/oncePerPackage.spec.d.ts +8 -0
- package/build/types/__tests__/oncePerPackage.spec.d.ts.map +1 -0
- package/build/types/__tests__/standardTsconfig.spec.d.ts +8 -0
- package/build/types/__tests__/standardTsconfig.spec.d.ts.map +1 -0
- package/build/types/bannedDependencies.d.ts +9 -33
- package/build/types/bannedDependencies.d.ts.map +1 -1
- package/build/types/consistentDependencies.d.ts +6 -6
- package/build/types/consistentDependencies.d.ts.map +1 -1
- package/build/types/consistentVersions.d.ts +6 -10
- package/build/types/consistentVersions.d.ts.map +1 -1
- package/build/types/fileContents.d.ts +3 -2
- package/build/types/fileContents.d.ts.map +1 -1
- package/build/types/index.d.ts +1 -0
- package/build/types/index.d.ts.map +1 -1
- package/build/types/mustSatisfyPeerDependencies.d.ts +12 -190
- package/build/types/mustSatisfyPeerDependencies.d.ts.map +1 -1
- package/build/types/nestedWorkspaces.d.ts +2 -2
- package/build/types/nestedWorkspaces.d.ts.map +1 -1
- package/build/types/oncePerPackage.d.ts +6 -6
- package/build/types/oncePerPackage.d.ts.map +1 -1
- package/build/types/packageEntry.d.ts +11 -33
- package/build/types/packageEntry.d.ts.map +1 -1
- package/build/types/packageOrder.d.ts +2 -1
- package/build/types/packageOrder.d.ts.map +1 -1
- package/build/types/packageScript.d.ts +13 -22
- package/build/types/packageScript.d.ts.map +1 -1
- package/build/types/requireDependency.d.ts +5 -20
- package/build/types/requireDependency.d.ts.map +1 -1
- package/build/types/standardTsconfig.d.ts +12 -19
- package/build/types/standardTsconfig.d.ts.map +1 -1
- package/build/types/util/zodSchemas.d.ts +14 -0
- package/build/types/util/zodSchemas.d.ts.map +1 -0
- package/coverage/block-navigation.js +1 -1
- package/coverage/clover.xml +1420 -1452
- package/coverage/coverage-final.json +21 -19
- package/coverage/index.html +27 -27
- package/coverage/sorter.js +21 -7
- package/coverage/src/REMOVE.ts.html +88 -0
- package/coverage/src/alphabeticalDependencies.ts.html +15 -15
- package/coverage/src/alphabeticalScripts.ts.html +5 -5
- package/coverage/src/bannedDependencies.ts.html +20 -53
- package/coverage/src/consistentDependencies.ts.html +20 -14
- package/coverage/src/consistentVersions.ts.html +330 -183
- package/coverage/src/fileContents.ts.html +223 -88
- package/coverage/src/forceError.ts.html +31 -31
- package/coverage/src/index.html +104 -89
- package/coverage/src/index.ts.html +11 -5
- package/coverage/src/mustSatisfyPeerDependencies.ts.html +15 -501
- package/coverage/src/nestedWorkspaces.ts.html +5 -5
- package/coverage/src/oncePerPackage.ts.html +31 -31
- package/coverage/src/packageEntry.ts.html +121 -91
- package/coverage/src/packageOrder.ts.html +44 -14
- package/coverage/src/packageScript.ts.html +235 -88
- package/coverage/src/requireDependency.ts.html +241 -82
- package/coverage/src/standardTsconfig.ts.html +212 -212
- package/coverage/src/util/checkAlpha.ts.html +40 -40
- package/coverage/src/util/createRuleFactory.ts.html +19 -19
- package/coverage/src/util/index.html +30 -15
- package/coverage/src/util/makeDirectory.ts.html +11 -11
- package/coverage/src/util/packageDependencyGraphService.ts.html +1 -1
- package/coverage/src/util/zodSchemas.ts.html +130 -0
- package/package.json +15 -15
- package/src/REMOVE.ts +1 -0
- package/src/__tests__/alphabeticalDependencies.spec.ts +102 -0
- package/src/__tests__/alphabeticalScripts.spec.ts +18 -0
- package/src/__tests__/bannedDependencies.spec.ts +49 -0
- package/src/__tests__/consistentDependencies.spec.ts +23 -0
- package/src/__tests__/consistentVersions.spec.ts +142 -0
- package/src/__tests__/fileContents.spec.ts +348 -0
- package/src/__tests__/forceError.spec.ts +70 -0
- package/src/__tests__/mustSatisfyPeerDependencies.spec.ts +44 -0
- package/src/__tests__/nestedWorkspaces.spec.ts +14 -0
- package/src/__tests__/oncePerPackage.spec.ts +75 -0
- package/src/__tests__/packageEntry.spec.ts +177 -0
- package/src/__tests__/packageOrder.spec.ts +22 -0
- package/src/__tests__/packageScript.spec.ts +549 -0
- package/src/__tests__/requireDependency.spec.ts +259 -2
- package/src/__tests__/standardTsconfig.spec.ts +91 -0
- package/src/bannedDependencies.ts +14 -25
- package/src/consistentDependencies.ts +10 -8
- package/src/consistentVersions.ts +132 -83
- package/src/fileContents.ts +80 -35
- package/src/index.ts +2 -0
- package/src/mustSatisfyPeerDependencies.ts +10 -172
- package/src/nestedWorkspaces.ts +4 -4
- package/src/oncePerPackage.ts +6 -6
- package/src/packageEntry.ts +60 -50
- package/src/packageOrder.ts +19 -9
- package/src/packageScript.ts +67 -18
- package/src/requireDependency.ts +84 -31
- package/src/standardTsconfig.ts +26 -26
- package/src/util/zodSchemas.ts +15 -0
|
@@ -25,28 +25,28 @@
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
26
|
<span class="strong">100% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>24/24</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
33
|
<span class="strong">100% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>4/4</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
40
|
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>1/1</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
47
|
<span class="strong">100% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>24/24</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -96,46 +96,46 @@
|
|
|
96
96
|
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
97
|
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
98
|
<a name='L33'></a><a href='#L33'>33</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
99
|
-
<span class="cline-any cline-neutral"> </span>
|
|
100
|
-
<span class="cline-any cline-yes">1x</span>
|
|
101
|
-
<span class="cline-any cline-yes">1x</span>
|
|
102
|
-
<span class="cline-any cline-yes">1x</span>
|
|
103
|
-
<span class="cline-any cline-yes">1x</span>
|
|
104
|
-
<span class="cline-any cline-yes">1x</span>
|
|
105
|
-
<span class="cline-any cline-yes">1x</span>
|
|
106
|
-
<span class="cline-any cline-yes">1x</span>
|
|
107
|
-
<span class="cline-any cline-yes">1x</span>
|
|
108
|
-
<span class="cline-any cline-yes">1x</span>
|
|
109
|
-
<span class="cline-any cline-yes">1x</span>
|
|
110
|
-
<span class="cline-any cline-yes">1x</span>
|
|
111
|
-
<span class="cline-any cline-yes">1x</span>
|
|
112
|
-
<span class="cline-any cline-yes">1x</span>
|
|
113
|
-
<span class="cline-any cline-yes">1x</span>
|
|
114
|
-
<span class="cline-any cline-yes">1x</span>
|
|
115
|
-
<span class="cline-any cline-yes">1x</span>
|
|
116
|
-
<span class="cline-any cline-yes">1x</span>
|
|
117
|
-
<span class="cline-any cline-yes">1x</span>
|
|
118
|
-
<span class="cline-any cline-yes">1x</span>
|
|
119
99
|
<span class="cline-any cline-yes">1x</span>
|
|
100
|
+
<span class="cline-any cline-neutral"> </span>
|
|
120
101
|
<span class="cline-any cline-yes">1x</span>
|
|
121
102
|
<span class="cline-any cline-yes">1x</span>
|
|
122
103
|
<span class="cline-any cline-yes">1x</span>
|
|
123
104
|
<span class="cline-any cline-yes">1x</span>
|
|
105
|
+
<span class="cline-any cline-neutral"> </span>
|
|
106
|
+
<span class="cline-any cline-neutral"> </span>
|
|
107
|
+
<span class="cline-any cline-neutral"> </span>
|
|
124
108
|
<span class="cline-any cline-yes">1x</span>
|
|
109
|
+
<span class="cline-any cline-neutral"> </span>
|
|
125
110
|
<span class="cline-any cline-yes">1x</span>
|
|
126
111
|
<span class="cline-any cline-yes">1x</span>
|
|
112
|
+
<span class="cline-any cline-neutral"> </span>
|
|
127
113
|
<span class="cline-any cline-yes">1x</span>
|
|
114
|
+
<span class="cline-any cline-yes">6x</span>
|
|
115
|
+
<span class="cline-any cline-yes">6x</span>
|
|
116
|
+
<span class="cline-any cline-neutral"> </span>
|
|
117
|
+
<span class="cline-any cline-yes">6x</span>
|
|
118
|
+
<span class="cline-any cline-yes">2x</span>
|
|
119
|
+
<span class="cline-any cline-yes">2x</span>
|
|
120
|
+
<span class="cline-any cline-yes">2x</span>
|
|
121
|
+
<span class="cline-any cline-yes">2x</span>
|
|
122
|
+
<span class="cline-any cline-yes">2x</span>
|
|
123
|
+
<span class="cline-any cline-yes">6x</span>
|
|
124
|
+
<span class="cline-any cline-yes">4x</span>
|
|
125
|
+
<span class="cline-any cline-yes">4x</span>
|
|
126
|
+
<span class="cline-any cline-yes">6x</span>
|
|
127
|
+
<span class="cline-any cline-neutral"> </span>
|
|
128
128
|
<span class="cline-any cline-yes">1x</span>
|
|
129
129
|
<span class="cline-any cline-yes">1x</span>
|
|
130
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import
|
|
130
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { z } from "zod";
|
|
131
131
|
import { createRuleFactory } from "./util/createRuleFactory.js";
|
|
132
132
|
|
|
133
|
-
export const Options =
|
|
134
|
-
singletonKey:
|
|
135
|
-
customMessage:
|
|
133
|
+
export const Options = z.object({
|
|
134
|
+
singletonKey: z.union([z.string(), z.symbol()]),
|
|
135
|
+
customMessage: z.string().optional(),
|
|
136
136
|
});
|
|
137
137
|
|
|
138
|
-
export type Options =
|
|
138
|
+
export type Options = z.infer<typeof Options>;
|
|
139
139
|
|
|
140
140
|
const visitedMap = new Map<string | symbol, Set<string>>();
|
|
141
141
|
|
|
@@ -157,7 +157,7 @@ export const oncePerPackage = createRuleFactory<Options>({
|
|
|
157
157
|
}
|
|
158
158
|
},
|
|
159
159
|
|
|
160
|
-
validateOptions: Options.
|
|
160
|
+
validateOptions: Options.parse,
|
|
161
161
|
});
|
|
162
162
|
</pre></td></tr></table></pre>
|
|
163
163
|
|
|
@@ -166,7 +166,7 @@ export const oncePerPackage = createRuleFactory<Options>({
|
|
|
166
166
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
167
167
|
Code coverage generated by
|
|
168
168
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
169
|
-
at 2025-
|
|
169
|
+
at 2025-11-07T18:00:58.549Z
|
|
170
170
|
</div>
|
|
171
171
|
<script src="../prettify.js"></script>
|
|
172
172
|
<script>
|
|
@@ -25,28 +25,28 @@
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
26
|
<span class="strong">100% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>89/89</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
33
|
<span class="strong">100% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>22/22</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
40
|
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>7/7</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
47
|
<span class="strong">100% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>89/89</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -160,7 +160,17 @@
|
|
|
160
160
|
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
161
|
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
162
|
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
-
<a name='L98'></a><a href='#L98'>98</a
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
164
174
|
<span class="cline-any cline-neutral"> </span>
|
|
165
175
|
<span class="cline-any cline-neutral"> </span>
|
|
166
176
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -171,24 +181,9 @@
|
|
|
171
181
|
<span class="cline-any cline-yes">1x</span>
|
|
172
182
|
<span class="cline-any cline-yes">1x</span>
|
|
173
183
|
<span class="cline-any cline-yes">1x</span>
|
|
174
|
-
<span class="cline-any cline-neutral"> </span>
|
|
175
|
-
<span class="cline-any cline-yes">1x</span>
|
|
176
|
-
<span class="cline-any cline-yes">1x</span>
|
|
177
|
-
<span class="cline-any cline-yes">1x</span>
|
|
178
|
-
<span class="cline-any cline-yes">1x</span>
|
|
179
|
-
<span class="cline-any cline-yes">1x</span>
|
|
180
|
-
<span class="cline-any cline-yes">1x</span>
|
|
181
|
-
<span class="cline-any cline-yes">1x</span>
|
|
182
|
-
<span class="cline-any cline-yes">1x</span>
|
|
183
|
-
<span class="cline-any cline-yes">1x</span>
|
|
184
|
-
<span class="cline-any cline-yes">1x</span>
|
|
185
|
-
<span class="cline-any cline-yes">1x</span>
|
|
186
|
-
<span class="cline-any cline-yes">1x</span>
|
|
187
|
-
<span class="cline-any cline-yes">1x</span>
|
|
188
|
-
<span class="cline-any cline-yes">1x</span>
|
|
189
|
-
<span class="cline-any cline-yes">1x</span>
|
|
190
184
|
<span class="cline-any cline-yes">1x</span>
|
|
191
185
|
<span class="cline-any cline-yes">1x</span>
|
|
186
|
+
<span class="cline-any cline-neutral"> </span>
|
|
192
187
|
<span class="cline-any cline-yes">1x</span>
|
|
193
188
|
<span class="cline-any cline-yes">1x</span>
|
|
194
189
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -202,21 +197,16 @@
|
|
|
202
197
|
<span class="cline-any cline-yes">1x</span>
|
|
203
198
|
<span class="cline-any cline-yes">1x</span>
|
|
204
199
|
<span class="cline-any cline-yes">1x</span>
|
|
205
|
-
<span class="cline-any cline-yes">
|
|
200
|
+
<span class="cline-any cline-yes">18x</span>
|
|
206
201
|
<span class="cline-any cline-neutral"> </span>
|
|
207
|
-
<span class="cline-any cline-yes">
|
|
208
|
-
<span class="cline-any cline-yes">
|
|
209
|
-
<span class="cline-any cline-yes">
|
|
202
|
+
<span class="cline-any cline-yes">18x</span>
|
|
203
|
+
<span class="cline-any cline-yes">16x</span>
|
|
204
|
+
<span class="cline-any cline-yes">18x</span>
|
|
205
|
+
<span class="cline-any cline-neutral"> </span>
|
|
206
|
+
<span class="cline-any cline-yes">18x</span>
|
|
210
207
|
<span class="cline-any cline-neutral"> </span>
|
|
211
208
|
<span class="cline-any cline-yes">8x</span>
|
|
212
|
-
<span class="cline-any cline-yes">8x</span>
|
|
213
|
-
<span class="cline-any cline-yes">8x</span>
|
|
214
|
-
<span class="cline-any cline-yes">8x</span>
|
|
215
|
-
<span class="cline-any cline-yes">8x</span>
|
|
216
|
-
<span class="cline-any cline-yes">8x</span>
|
|
217
|
-
<span class="cline-any cline-yes">6x</span>
|
|
218
209
|
<span class="cline-any cline-yes">6x</span>
|
|
219
|
-
<span class="cline-any cline-yes">8x</span>
|
|
220
210
|
<span class="cline-any cline-yes">6x</span>
|
|
221
211
|
<span class="cline-any cline-yes">6x</span>
|
|
222
212
|
<span class="cline-any cline-yes">6x</span>
|
|
@@ -231,32 +221,62 @@
|
|
|
231
221
|
<span class="cline-any cline-yes">6x</span>
|
|
232
222
|
<span class="cline-any cline-yes">6x</span>
|
|
233
223
|
<span class="cline-any cline-yes">6x</span>
|
|
224
|
+
<span class="cline-any cline-yes">18x</span>
|
|
225
|
+
<span class="cline-any cline-neutral"> </span>
|
|
226
|
+
<span class="cline-any cline-yes">10x</span>
|
|
227
|
+
<span class="cline-any cline-yes">10x</span>
|
|
228
|
+
<span class="cline-any cline-yes">10x</span>
|
|
229
|
+
<span class="cline-any cline-yes">10x</span>
|
|
230
|
+
<span class="cline-any cline-yes">10x</span>
|
|
231
|
+
<span class="cline-any cline-yes">10x</span>
|
|
234
232
|
<span class="cline-any cline-yes">6x</span>
|
|
235
233
|
<span class="cline-any cline-yes">6x</span>
|
|
234
|
+
<span class="cline-any cline-yes">10x</span>
|
|
235
|
+
<span class="cline-any cline-yes">8x</span>
|
|
236
|
+
<span class="cline-any cline-yes">8x</span>
|
|
237
|
+
<span class="cline-any cline-yes">8x</span>
|
|
238
|
+
<span class="cline-any cline-yes">8x</span>
|
|
239
|
+
<span class="cline-any cline-yes">8x</span>
|
|
240
|
+
<span class="cline-any cline-yes">8x</span>
|
|
241
|
+
<span class="cline-any cline-yes">8x</span>
|
|
242
|
+
<span class="cline-any cline-yes">8x</span>
|
|
243
|
+
<span class="cline-any cline-yes">8x</span>
|
|
244
|
+
<span class="cline-any cline-yes">8x</span>
|
|
245
|
+
<span class="cline-any cline-yes">8x</span>
|
|
246
|
+
<span class="cline-any cline-yes">8x</span>
|
|
247
|
+
<span class="cline-any cline-yes">8x</span>
|
|
248
|
+
<span class="cline-any cline-yes">8x</span>
|
|
236
249
|
<span class="cline-any cline-yes">8x</span>
|
|
237
250
|
<span class="cline-any cline-yes">8x</span>
|
|
238
|
-
<span class="cline-any cline-neutral"> </span>
|
|
239
251
|
<span class="cline-any cline-yes">10x</span>
|
|
252
|
+
<span class="cline-any cline-yes">18x</span>
|
|
253
|
+
<span class="cline-any cline-yes">16x</span>
|
|
254
|
+
<span class="cline-any cline-neutral"> </span>
|
|
255
|
+
<span class="cline-any cline-yes">18x</span>
|
|
256
|
+
<span class="cline-any cline-yes">6x</span>
|
|
257
|
+
<span class="cline-any cline-yes">6x</span>
|
|
240
258
|
<span class="cline-any cline-yes">4x</span>
|
|
241
259
|
<span class="cline-any cline-yes">4x</span>
|
|
242
260
|
<span class="cline-any cline-yes">4x</span>
|
|
243
261
|
<span class="cline-any cline-yes">4x</span>
|
|
244
262
|
<span class="cline-any cline-yes">4x</span>
|
|
245
|
-
<span class="cline-any cline-yes">
|
|
246
|
-
<span class="cline-any cline-yes">
|
|
247
|
-
<span class="cline-any cline-yes">
|
|
248
|
-
<span class="cline-any cline-yes">4x</span>
|
|
249
|
-
<span class="cline-any cline-yes">10x</span>
|
|
263
|
+
<span class="cline-any cline-yes">6x</span>
|
|
264
|
+
<span class="cline-any cline-yes">6x</span>
|
|
265
|
+
<span class="cline-any cline-yes">18x</span>
|
|
250
266
|
<span class="cline-any cline-yes">1x</span>
|
|
251
267
|
<span class="cline-any cline-yes">1x</span>
|
|
252
268
|
<span class="cline-any cline-neutral"> </span>
|
|
253
269
|
<span class="cline-any cline-yes">1x</span>
|
|
254
|
-
<span class="cline-any cline-yes">
|
|
255
|
-
<span class="cline-any cline-yes">
|
|
270
|
+
<span class="cline-any cline-yes">16x</span>
|
|
271
|
+
<span class="cline-any cline-yes">16x</span>
|
|
256
272
|
<span class="cline-any cline-neutral"> </span>
|
|
257
273
|
<span class="cline-any cline-yes">1x</span>
|
|
258
274
|
<span class="cline-any cline-yes">8x</span>
|
|
259
275
|
<span class="cline-any cline-yes">8x</span>
|
|
276
|
+
<span class="cline-any cline-neutral"> </span>
|
|
277
|
+
<span class="cline-any cline-yes">1x</span>
|
|
278
|
+
<span class="cline-any cline-yes">12x</span>
|
|
279
|
+
<span class="cline-any cline-yes">12x</span>
|
|
260
280
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/*!
|
|
261
281
|
* Copyright 2019 Palantir Technologies, Inc.
|
|
262
282
|
*
|
|
@@ -266,35 +286,20 @@
|
|
|
266
286
|
|
|
267
287
|
import { mutateJson, PackageJson } from "@monorepolint/utils";
|
|
268
288
|
import { diff } from "jest-diff";
|
|
269
|
-
import
|
|
289
|
+
import { z } from "zod";
|
|
290
|
+
import { REMOVE } from "./REMOVE.js";
|
|
270
291
|
import { createRuleFactory } from "./util/createRuleFactory.js";
|
|
292
|
+
import { ZodRemove } from "./util/zodSchemas.js";
|
|
271
293
|
|
|
272
|
-
export const Options =
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
r.Partial({
|
|
279
|
-
entriesExist: r.Undefined,
|
|
280
|
-
}),
|
|
281
|
-
),
|
|
282
|
-
r
|
|
283
|
-
.Record({
|
|
284
|
-
entriesExist: r.Array(r.String), // enforces existence of keys, but not values
|
|
285
|
-
})
|
|
286
|
-
.And(
|
|
287
|
-
r.Partial({
|
|
288
|
-
entries: r.Undefined,
|
|
289
|
-
}),
|
|
290
|
-
),
|
|
291
|
-
r.Record({
|
|
292
|
-
entries: r.Dictionary(r.Unknown), // string => unknown, enforces existence of keys and their values
|
|
293
|
-
entriesExist: r.Array(r.String),
|
|
294
|
-
}),
|
|
294
|
+
export const Options = z.object({
|
|
295
|
+
entries: z.record(z.string(), z.union([z.unknown(), ZodRemove])).optional(), // string => unknown | REMOVE, enforces existence of keys and their values or removal
|
|
296
|
+
entriesExist: z.array(z.string()).optional(), // enforces existence of keys, but not values
|
|
297
|
+
}).refine(
|
|
298
|
+
(data) => data.entries !== undefined || data.entriesExist !== undefined,
|
|
299
|
+
{ message: "At least one of 'entries' or 'entriesExist' must be provided" },
|
|
295
300
|
);
|
|
296
301
|
|
|
297
|
-
export type Options =
|
|
302
|
+
export type Options = z.infer<typeof Options>;
|
|
298
303
|
|
|
299
304
|
export const packageEntry = createRuleFactory<Options>({
|
|
300
305
|
name: "packageEntry",
|
|
@@ -305,30 +310,51 @@ export const packageEntry = createRuleFactory<Options>({
|
|
|
305
310
|
for (const key of Object.keys(options.entries)) {
|
|
306
311
|
const value = options.entries[key];
|
|
307
312
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
(
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
313
|
+
if (value === REMOVE) {
|
|
314
|
+
// Handle removal: only add error if key exists
|
|
315
|
+
if (packageJson[key] !== undefined) {
|
|
316
|
+
context.addError({
|
|
317
|
+
file: context.getPackageJsonPath(),
|
|
318
|
+
message: createRemovalEntryErrorMessage(key),
|
|
319
|
+
fixer: () => {
|
|
320
|
+
mutateJson<PackageJson>(
|
|
321
|
+
context.getPackageJsonPath(),
|
|
322
|
+
context.host,
|
|
323
|
+
(input) => {
|
|
324
|
+
delete input[key];
|
|
325
|
+
return input;
|
|
326
|
+
},
|
|
327
|
+
);
|
|
328
|
+
},
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
} else {
|
|
332
|
+
// Handle regular value checking
|
|
333
|
+
const entryDiff = diff(
|
|
334
|
+
JSON.stringify(value) + "\n",
|
|
335
|
+
(JSON.stringify(packageJson[key]) || "") + "\n",
|
|
336
|
+
);
|
|
337
|
+
if (
|
|
338
|
+
(typeof value !== "object" && value !== packageJson[key])
|
|
339
|
+
|| entryDiff == null
|
|
340
|
+
|| !entryDiff.includes("Compared values have no visual difference")
|
|
341
|
+
) {
|
|
342
|
+
context.addError({
|
|
343
|
+
file: context.getPackageJsonPath(),
|
|
344
|
+
message: createStandardizedEntryErrorMessage(key),
|
|
345
|
+
longMessage: entryDiff,
|
|
346
|
+
fixer: () => {
|
|
347
|
+
mutateJson<PackageJson>(
|
|
348
|
+
context.getPackageJsonPath(),
|
|
349
|
+
context.host,
|
|
350
|
+
(input) => {
|
|
351
|
+
input[key] = value;
|
|
352
|
+
return input;
|
|
353
|
+
},
|
|
354
|
+
);
|
|
355
|
+
},
|
|
356
|
+
});
|
|
357
|
+
}
|
|
332
358
|
}
|
|
333
359
|
}
|
|
334
360
|
}
|
|
@@ -344,7 +370,7 @@ export const packageEntry = createRuleFactory<Options>({
|
|
|
344
370
|
}
|
|
345
371
|
}
|
|
346
372
|
},
|
|
347
|
-
validateOptions: Options.
|
|
373
|
+
validateOptions: Options.parse,
|
|
348
374
|
});
|
|
349
375
|
|
|
350
376
|
export function createStandardizedEntryErrorMessage(key: string) {
|
|
@@ -354,6 +380,10 @@ export function createStandardizedEntryErrorMessage(key: string) {
|
|
|
354
380
|
export function createExpectedEntryErrorMessage(key: string) {
|
|
355
381
|
return `Expected entry for '${key}' to exist`;
|
|
356
382
|
}
|
|
383
|
+
|
|
384
|
+
export function createRemovalEntryErrorMessage(key: string) {
|
|
385
|
+
return `Entry '${key}' should be removed`;
|
|
386
|
+
}
|
|
357
387
|
</pre></td></tr></table></pre>
|
|
358
388
|
|
|
359
389
|
<div class='push'></div><!-- for sticky footer -->
|
|
@@ -361,7 +391,7 @@ export function createExpectedEntryErrorMessage(key: string) {
|
|
|
361
391
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
362
392
|
Code coverage generated by
|
|
363
393
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
364
|
-
at 2025-
|
|
394
|
+
at 2025-11-07T18:00:58.549Z
|
|
365
395
|
</div>
|
|
366
396
|
<script src="../prettify.js"></script>
|
|
367
397
|
<script>
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">99% </span>
|
|
26
|
+
<span class="strong">99.09% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>109/110</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">99% </span>
|
|
47
|
+
<span class="strong">99.09% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>109/110</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -192,7 +192,17 @@
|
|
|
192
192
|
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
193
|
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
194
|
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
-
<a name='L130'></a><a href='#L130'>130</a
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
196
206
|
<span class="cline-any cline-neutral"> </span>
|
|
197
207
|
<span class="cline-any cline-neutral"> </span>
|
|
198
208
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -210,6 +220,16 @@
|
|
|
210
220
|
<span class="cline-any cline-yes">1x</span>
|
|
211
221
|
<span class="cline-any cline-yes">1x</span>
|
|
212
222
|
<span class="cline-any cline-yes">1x</span>
|
|
223
|
+
<span class="cline-any cline-yes">1x</span>
|
|
224
|
+
<span class="cline-any cline-yes">1x</span>
|
|
225
|
+
<span class="cline-any cline-yes">1x</span>
|
|
226
|
+
<span class="cline-any cline-yes">1x</span>
|
|
227
|
+
<span class="cline-any cline-yes">1x</span>
|
|
228
|
+
<span class="cline-any cline-yes">1x</span>
|
|
229
|
+
<span class="cline-any cline-yes">1x</span>
|
|
230
|
+
<span class="cline-any cline-yes">1x</span>
|
|
231
|
+
<span class="cline-any cline-yes">1x</span>
|
|
232
|
+
<span class="cline-any cline-yes">1x</span>
|
|
213
233
|
<span class="cline-any cline-neutral"> </span>
|
|
214
234
|
<span class="cline-any cline-neutral"> </span>
|
|
215
235
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -330,17 +350,27 @@
|
|
|
330
350
|
|
|
331
351
|
import { Context } from "@monorepolint/config";
|
|
332
352
|
import { diff } from "jest-diff";
|
|
333
|
-
import
|
|
353
|
+
import { z } from "zod";
|
|
334
354
|
import { createRuleFactory } from "./util/createRuleFactory.js";
|
|
335
355
|
type OrderFunction = (context: Context) => (a: string, b: string) => number;
|
|
336
356
|
|
|
337
|
-
const Options =
|
|
338
|
-
.
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
357
|
+
const Options = z.union([
|
|
358
|
+
z.undefined(),
|
|
359
|
+
z.object({
|
|
360
|
+
order: z.union([
|
|
361
|
+
z.array(z.string()),
|
|
362
|
+
z.function({
|
|
363
|
+
input: [z.any()],
|
|
364
|
+
output: z.function({
|
|
365
|
+
input: [z.string(), z.string()],
|
|
366
|
+
output: z.number(),
|
|
367
|
+
}),
|
|
368
|
+
}),
|
|
369
|
+
]),
|
|
370
|
+
}),
|
|
371
|
+
]);
|
|
342
372
|
|
|
343
|
-
type Options =
|
|
373
|
+
type Options = z.infer<typeof Options>;
|
|
344
374
|
|
|
345
375
|
const defaultKeyOrder = [
|
|
346
376
|
"name",
|
|
@@ -409,7 +439,7 @@ export const packageOrder = createRuleFactory<Options>({
|
|
|
409
439
|
});
|
|
410
440
|
}
|
|
411
441
|
},
|
|
412
|
-
validateOptions: Options.
|
|
442
|
+
validateOptions: Options.parse,
|
|
413
443
|
});
|
|
414
444
|
|
|
415
445
|
function arrayOrderCompare(a: ReadonlyArray<string>, b: ReadonlyArray<string>) {
|
|
@@ -457,7 +487,7 @@ function isOrderFunction(
|
|
|
457
487
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
458
488
|
Code coverage generated by
|
|
459
489
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
460
|
-
at 2025-
|
|
490
|
+
at 2025-11-07T18:00:58.549Z
|
|
461
491
|
</div>
|
|
462
492
|
<script src="../prettify.js"></script>
|
|
463
493
|
<script>
|