@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
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">93.33% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>112/120</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">90.32% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>28/31</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">93.33% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>112/120</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -171,7 +171,52 @@
|
|
|
171
171
|
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
172
|
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
173
|
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
-
<a name='L109'></a><a href='#L109'>109</a
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</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>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
175
220
|
<span class="cline-any cline-neutral"> </span>
|
|
176
221
|
<span class="cline-any cline-neutral"> </span>
|
|
177
222
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -185,9 +230,17 @@
|
|
|
185
230
|
<span class="cline-any cline-yes">1x</span>
|
|
186
231
|
<span class="cline-any cline-yes">1x</span>
|
|
187
232
|
<span class="cline-any cline-yes">1x</span>
|
|
233
|
+
<span class="cline-any cline-neutral"> </span>
|
|
234
|
+
<span class="cline-any cline-yes">1x</span>
|
|
235
|
+
<span class="cline-any cline-yes">1x</span>
|
|
236
|
+
<span class="cline-any cline-yes">1x</span>
|
|
237
|
+
<span class="cline-any cline-yes">1x</span>
|
|
238
|
+
<span class="cline-any cline-neutral"> </span>
|
|
239
|
+
<span class="cline-any cline-yes">1x</span>
|
|
240
|
+
<span class="cline-any cline-yes">14x</span>
|
|
241
|
+
<span class="cline-any cline-yes">1x</span>
|
|
188
242
|
<span class="cline-any cline-yes">1x</span>
|
|
189
243
|
<span class="cline-any cline-yes">1x</span>
|
|
190
|
-
<span class="cline-any cline-no"> </span>
|
|
191
244
|
<span class="cline-any cline-yes">1x</span>
|
|
192
245
|
<span class="cline-any cline-yes">1x</span>
|
|
193
246
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -211,39 +264,51 @@
|
|
|
211
264
|
<span class="cline-any cline-yes">1x</span>
|
|
212
265
|
<span class="cline-any cline-yes">1x</span>
|
|
213
266
|
<span class="cline-any cline-yes">1x</span>
|
|
214
|
-
<span class="cline-any cline-yes">
|
|
215
|
-
<span class="cline-any cline-yes">6x</span>
|
|
267
|
+
<span class="cline-any cline-yes">30x</span>
|
|
216
268
|
<span class="cline-any cline-neutral"> </span>
|
|
217
|
-
<span class="cline-any cline-yes">6x</span>
|
|
218
|
-
<span class="cline-any cline-yes">6x</span>
|
|
219
|
-
<span class="cline-any cline-no"> </span>
|
|
220
|
-
<span class="cline-any cline-yes">6x</span>
|
|
221
|
-
<span class="cline-any cline-yes">6x</span>
|
|
222
|
-
<span class="cline-any cline-yes">6x</span>
|
|
223
|
-
<span class="cline-any cline-no"> </span>
|
|
224
|
-
<span class="cline-any cline-yes">6x</span>
|
|
225
269
|
<span class="cline-any cline-neutral"> </span>
|
|
226
|
-
<span class="cline-any cline-yes">
|
|
227
|
-
<span class="cline-any cline-
|
|
228
|
-
<span class="cline-any cline-yes">
|
|
270
|
+
<span class="cline-any cline-yes">30x</span>
|
|
271
|
+
<span class="cline-any cline-yes">2x</span>
|
|
272
|
+
<span class="cline-any cline-yes">2x</span>
|
|
229
273
|
<span class="cline-any cline-neutral"> </span>
|
|
274
|
+
<span class="cline-any cline-yes">28x</span>
|
|
275
|
+
<span class="cline-any cline-neutral"> </span>
|
|
276
|
+
<span class="cline-any cline-neutral"> </span>
|
|
277
|
+
<span class="cline-any cline-yes">30x</span>
|
|
230
278
|
<span class="cline-any cline-yes">6x</span>
|
|
231
279
|
<span class="cline-any cline-yes">6x</span>
|
|
232
|
-
<span class="cline-any cline-
|
|
233
|
-
<span class="cline-any cline-yes">
|
|
234
|
-
<span class="cline-any cline-yes">
|
|
235
|
-
<span class="cline-any cline-yes">
|
|
236
|
-
<span class="cline-any cline-
|
|
237
|
-
<span class="cline-any cline-yes">
|
|
238
|
-
<span class="cline-any cline-yes">
|
|
239
|
-
<span class="cline-any cline-yes">
|
|
240
|
-
<span class="cline-any cline-yes">
|
|
241
|
-
<span class="cline-any cline-yes">
|
|
242
|
-
<span class="cline-any cline-
|
|
243
|
-
<span class="cline-any cline-yes">
|
|
244
|
-
<span class="cline-any cline-yes">
|
|
245
|
-
<span class="cline-any cline-yes">
|
|
246
|
-
<span class="cline-any cline-
|
|
280
|
+
<span class="cline-any cline-neutral"> </span>
|
|
281
|
+
<span class="cline-any cline-yes">18x</span>
|
|
282
|
+
<span class="cline-any cline-yes">18x</span>
|
|
283
|
+
<span class="cline-any cline-yes">2x</span>
|
|
284
|
+
<span class="cline-any cline-yes">16x</span>
|
|
285
|
+
<span class="cline-any cline-yes">30x</span>
|
|
286
|
+
<span class="cline-any cline-yes">16x</span>
|
|
287
|
+
<span class="cline-any cline-yes">16x</span>
|
|
288
|
+
<span class="cline-any cline-yes">2x</span>
|
|
289
|
+
<span class="cline-any cline-yes">14x</span>
|
|
290
|
+
<span class="cline-any cline-neutral"> </span>
|
|
291
|
+
<span class="cline-any cline-yes">16x</span>
|
|
292
|
+
<span class="cline-any cline-yes">2x</span>
|
|
293
|
+
<span class="cline-any cline-yes">14x</span>
|
|
294
|
+
<span class="cline-any cline-neutral"> </span>
|
|
295
|
+
<span class="cline-any cline-yes">16x</span>
|
|
296
|
+
<span class="cline-any cline-yes">16x</span>
|
|
297
|
+
<span class="cline-any cline-yes">16x</span>
|
|
298
|
+
<span class="cline-any cline-yes">16x</span>
|
|
299
|
+
<span class="cline-any cline-yes">16x</span>
|
|
300
|
+
<span class="cline-any cline-yes">16x</span>
|
|
301
|
+
<span class="cline-any cline-yes">2x</span>
|
|
302
|
+
<span class="cline-any cline-yes">16x</span>
|
|
303
|
+
<span class="cline-any cline-yes">14x</span>
|
|
304
|
+
<span class="cline-any cline-yes">14x</span>
|
|
305
|
+
<span class="cline-any cline-yes">14x</span>
|
|
306
|
+
<span class="cline-any cline-yes">14x</span>
|
|
307
|
+
<span class="cline-any cline-yes">14x</span>
|
|
308
|
+
<span class="cline-any cline-yes">16x</span>
|
|
309
|
+
<span class="cline-any cline-yes">16x</span>
|
|
310
|
+
<span class="cline-any cline-yes">16x</span>
|
|
311
|
+
<span class="cline-any cline-yes">30x</span>
|
|
247
312
|
<span class="cline-any cline-yes">1x</span>
|
|
248
313
|
<span class="cline-any cline-yes">1x</span>
|
|
249
314
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -254,9 +319,12 @@
|
|
|
254
319
|
<span class="cline-any cline-neutral"> </span>
|
|
255
320
|
<span class="cline-any cline-yes">1x</span>
|
|
256
321
|
<span class="cline-any cline-neutral"> </span>
|
|
257
|
-
<span class="cline-any cline-yes">
|
|
322
|
+
<span class="cline-any cline-yes">28x</span>
|
|
323
|
+
<span class="cline-any cline-yes">28x</span>
|
|
324
|
+
<span class="cline-any cline-yes">28x</span>
|
|
325
|
+
<span class="cline-any cline-yes">28x</span>
|
|
258
326
|
<span class="cline-any cline-neutral"> </span>
|
|
259
|
-
<span class="cline-any cline-yes">
|
|
327
|
+
<span class="cline-any cline-yes">28x</span>
|
|
260
328
|
<span class="cline-any cline-no"> </span>
|
|
261
329
|
<span class="cline-any cline-no"> </span>
|
|
262
330
|
<span class="cline-any cline-no"> </span>
|
|
@@ -264,21 +332,43 @@
|
|
|
264
332
|
<span class="cline-any cline-no"> </span>
|
|
265
333
|
<span class="cline-any cline-no"> </span>
|
|
266
334
|
<span class="cline-any cline-neutral"> </span>
|
|
267
|
-
<span class="cline-any cline-yes">
|
|
335
|
+
<span class="cline-any cline-yes">28x</span>
|
|
336
|
+
<span class="cline-any cline-yes">8x</span>
|
|
337
|
+
<span class="cline-any cline-yes">8x</span>
|
|
338
|
+
<span class="cline-any cline-yes">8x</span>
|
|
339
|
+
<span class="cline-any cline-yes">8x</span>
|
|
340
|
+
<span class="cline-any cline-yes">2x</span>
|
|
268
341
|
<span class="cline-any cline-yes">2x</span>
|
|
269
342
|
<span class="cline-any cline-yes">2x</span>
|
|
343
|
+
<span class="cline-any cline-yes">8x</span>
|
|
344
|
+
<span class="cline-any cline-neutral"> </span>
|
|
345
|
+
<span class="cline-any cline-yes">6x</span>
|
|
270
346
|
<span class="cline-any cline-yes">6x</span>
|
|
271
|
-
<span class="cline-any cline-yes">4x</span>
|
|
272
|
-
<span class="cline-any cline-yes">4x</span>
|
|
273
|
-
<span class="cline-any cline-yes">4x</span>
|
|
274
347
|
<span class="cline-any cline-neutral"> </span>
|
|
275
|
-
<span class="cline-any cline-yes">
|
|
276
|
-
<span class="cline-any cline-yes">
|
|
277
|
-
<span class="cline-any cline-yes">
|
|
278
|
-
<span class="cline-any cline-
|
|
348
|
+
<span class="cline-any cline-yes">6x</span>
|
|
349
|
+
<span class="cline-any cline-yes">6x</span>
|
|
350
|
+
<span class="cline-any cline-yes">6x</span>
|
|
351
|
+
<span class="cline-any cline-yes">6x</span>
|
|
352
|
+
<span class="cline-any cline-yes">6x</span>
|
|
353
|
+
<span class="cline-any cline-yes">6x</span>
|
|
354
|
+
<span class="cline-any cline-neutral"> </span>
|
|
355
|
+
<span class="cline-any cline-neutral"> </span>
|
|
356
|
+
<span class="cline-any cline-yes">6x</span>
|
|
357
|
+
<span class="cline-any cline-yes">6x</span>
|
|
358
|
+
<span class="cline-any cline-yes">28x</span>
|
|
359
|
+
<span class="cline-any cline-yes">8x</span>
|
|
360
|
+
<span class="cline-any cline-yes">8x</span>
|
|
361
|
+
<span class="cline-any cline-yes">8x</span>
|
|
362
|
+
<span class="cline-any cline-neutral"> </span>
|
|
363
|
+
<span class="cline-any cline-yes">8x</span>
|
|
364
|
+
<span class="cline-any cline-yes">8x</span>
|
|
365
|
+
<span class="cline-any cline-yes">20x</span>
|
|
366
|
+
<span class="cline-any cline-yes">12x</span>
|
|
367
|
+
<span class="cline-any cline-yes">12x</span>
|
|
368
|
+
<span class="cline-any cline-yes">12x</span>
|
|
279
369
|
<span class="cline-any cline-no"> </span>
|
|
280
370
|
<span class="cline-any cline-no"> </span>
|
|
281
|
-
<span class="cline-any cline-yes">
|
|
371
|
+
<span class="cline-any cline-yes">28x</span>
|
|
282
372
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/*!
|
|
283
373
|
* Copyright 2023 Palantir Technologies, Inc.
|
|
284
374
|
*
|
|
@@ -289,50 +379,70 @@
|
|
|
289
379
|
import { Context } from "@monorepolint/config";
|
|
290
380
|
import { diff } from "jest-diff";
|
|
291
381
|
import * as path from "path";
|
|
292
|
-
import
|
|
382
|
+
import { z } from "zod";
|
|
383
|
+
import { REMOVE } from "./REMOVE.js";
|
|
293
384
|
import { createRuleFactory } from "./util/createRuleFactory.js";
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
385
|
+
import { ZodRemove } from "./util/zodSchemas.js";
|
|
386
|
+
|
|
387
|
+
const Options = z.union([
|
|
388
|
+
z.object({
|
|
389
|
+
file: z.string(),
|
|
390
|
+
generator: z.custom<
|
|
391
|
+
(context: Context) => string | typeof REMOVE | Promise<string | typeof REMOVE>
|
|
392
|
+
>((val) => {
|
|
393
|
+
return typeof val === "function";
|
|
394
|
+
}),
|
|
395
|
+
template: z.undefined().optional(),
|
|
396
|
+
templateFile: z.undefined().optional(),
|
|
302
397
|
}),
|
|
303
|
-
|
|
304
|
-
file:
|
|
305
|
-
generator:
|
|
306
|
-
template:
|
|
307
|
-
|
|
398
|
+
z.object({
|
|
399
|
+
file: z.string(),
|
|
400
|
+
generator: z.undefined().optional(),
|
|
401
|
+
template: z.union([
|
|
402
|
+
z.string(),
|
|
403
|
+
ZodRemove,
|
|
404
|
+
]),
|
|
405
|
+
templateFile: z.undefined().optional(),
|
|
308
406
|
}),
|
|
309
|
-
|
|
310
|
-
file:
|
|
311
|
-
generator:
|
|
312
|
-
template:
|
|
313
|
-
templateFile:
|
|
407
|
+
z.object({
|
|
408
|
+
file: z.string(),
|
|
409
|
+
generator: z.undefined().optional(),
|
|
410
|
+
template: z.undefined().optional(),
|
|
411
|
+
templateFile: z.string(),
|
|
314
412
|
}),
|
|
315
|
-
);
|
|
413
|
+
]);
|
|
316
414
|
|
|
317
|
-
type Options =
|
|
415
|
+
type Options = z.infer<typeof Options>;
|
|
318
416
|
|
|
319
417
|
export const fileContents = createRuleFactory<Options>({
|
|
320
418
|
name: "fileContents",
|
|
321
419
|
check: async (context, opts) => {
|
|
322
420
|
const fullPath = path.join(context.packageDir, opts.file);
|
|
421
|
+
|
|
422
|
+
// Validate that the file path doesn't contain null bytes or other invalid characters
|
|
423
|
+
if (fullPath.includes("\0")) {
|
|
424
|
+
throw new Error(`Invalid file path: path contains null bytes`);
|
|
425
|
+
}
|
|
426
|
+
|
|
323
427
|
const expectedContent = await getExpectedContents(context, opts);
|
|
428
|
+
|
|
429
|
+
// If the generator function failed, an unfixable error was already added, so we should return early
|
|
430
|
+
if (expectedContent === Symbol.for("GENERATOR_ERROR")) {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
324
433
|
|
|
325
434
|
const pathExists = context.host.exists(fullPath);
|
|
326
|
-
const actualContent =
|
|
327
|
-
|
|
328
|
-
:
|
|
435
|
+
const actualContent = pathExists
|
|
436
|
+
? context.host.readFile(fullPath, { encoding: "utf-8" })
|
|
437
|
+
: REMOVE;
|
|
329
438
|
if (actualContent !== expectedContent) {
|
|
330
|
-
const longMessage =
|
|
331
|
-
|
|
332
|
-
|
|
439
|
+
const longMessage =
|
|
440
|
+
pathExists && (expectedContent === undefined || expectedContent === REMOVE)
|
|
441
|
+
? undefined
|
|
442
|
+
: diff(expectedContent, actualContent, { expand: true });
|
|
333
443
|
|
|
334
|
-
const message =
|
|
335
|
-
|
|
444
|
+
const message = pathExists && (expectedContent === undefined || expectedContent === REMOVE)
|
|
445
|
+
? "File should not exist"
|
|
336
446
|
: "Expect file contents to match";
|
|
337
447
|
|
|
338
448
|
context.addError({
|
|
@@ -340,9 +450,9 @@ export const fileContents = createRuleFactory<Options>({
|
|
|
340
450
|
message,
|
|
341
451
|
longMessage,
|
|
342
452
|
fixer: () => {
|
|
343
|
-
if (expectedContent ===
|
|
344
|
-
|
|
345
|
-
} else {
|
|
453
|
+
if (expectedContent === REMOVE) {
|
|
454
|
+
if (pathExists) context.host.deleteFile(fullPath);
|
|
455
|
+
} else if (expectedContent !== undefined && typeof expectedContent === "string") {
|
|
346
456
|
context.host.mkdir(path.dirname(fullPath), { recursive: true });
|
|
347
457
|
context.host.writeFile(fullPath, expectedContent, {
|
|
348
458
|
encoding: "utf-8",
|
|
@@ -352,29 +462,52 @@ export const fileContents = createRuleFactory<Options>({
|
|
|
352
462
|
});
|
|
353
463
|
}
|
|
354
464
|
},
|
|
355
|
-
validateOptions: Options.
|
|
465
|
+
validateOptions: Options.parse,
|
|
356
466
|
});
|
|
357
467
|
|
|
358
468
|
const optionsCache = new Map<
|
|
359
469
|
Options,
|
|
360
|
-
| ((context: Context) => Promise<string> | string |
|
|
470
|
+
| ((context: Context) => Promise<string | typeof REMOVE> | string | typeof REMOVE)
|
|
361
471
|
| string
|
|
362
|
-
|
|
|
472
|
+
| typeof REMOVE
|
|
363
473
|
>();
|
|
364
474
|
|
|
365
|
-
async function getExpectedContents(
|
|
475
|
+
async function getExpectedContents(
|
|
476
|
+
context: Context,
|
|
477
|
+
opts: Options,
|
|
478
|
+
): Promise<string | typeof REMOVE | symbol> {
|
|
366
479
|
// we need to use has because undefined is a valid value in the cache
|
|
367
480
|
if (optionsCache.has(opts)) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
368
481
|
<span class="cstat-no" title="statement not covered" > const cachedEntry = optionsCache.get(opts);</span>
|
|
369
482
|
<span class="cstat-no" title="statement not covered" > if (cachedEntry && typeof cachedEntry === "function") {</span>
|
|
370
483
|
<span class="cstat-no" title="statement not covered" > return cachedEntry(context);</span>
|
|
371
484
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
372
|
-
<span class="cstat-no" title="statement not covered" > return cachedEntry;</span>
|
|
485
|
+
<span class="cstat-no" title="statement not covered" > return cachedEntry as string | typeof REMOVE;</span>
|
|
373
486
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
374
487
|
|
|
375
488
|
if (opts.generator) {
|
|
376
489
|
optionsCache.set(opts, opts.generator);
|
|
377
|
-
|
|
490
|
+
try {
|
|
491
|
+
const result = await opts.generator(context);
|
|
492
|
+
if (typeof result !== "string" && result !== REMOVE) {
|
|
493
|
+
throw new Error(`Generator function must return a string or REMOVE, got ${typeof result}`);
|
|
494
|
+
}
|
|
495
|
+
return result;
|
|
496
|
+
} catch (error) {
|
|
497
|
+
// Instead of throwing, create an unfixable error and return a special marker
|
|
498
|
+
const errorMessage = error instanceof Error ? error.<span class="branch-0 cbranch-no" title="branch not covered" >message : String(error);</span>
|
|
499
|
+
const fullPath = path.join(context.packageDir, opts.file);
|
|
500
|
+
|
|
501
|
+
context.addError({
|
|
502
|
+
file: fullPath,
|
|
503
|
+
message: `Generator function failed: ${errorMessage}`,
|
|
504
|
+
longMessage:
|
|
505
|
+
`The generator function for file "${opts.file}" threw an error:\n\n${errorMessage}`,
|
|
506
|
+
});
|
|
507
|
+
|
|
508
|
+
// Return a special marker that will prevent the file comparison from proceeding
|
|
509
|
+
return Symbol.for("GENERATOR_ERROR");
|
|
510
|
+
}
|
|
378
511
|
} else if (opts.templateFile) {
|
|
379
512
|
const { packageDir: workspacePackageDir } = context.getWorkspaceContext();
|
|
380
513
|
const fullPath = path.resolve(workspacePackageDir, opts.templateFile);
|
|
@@ -382,9 +515,11 @@ async function getExpectedContents(context: Context, opts: Options) {
|
|
|
382
515
|
|
|
383
516
|
optionsCache.set(opts, template);
|
|
384
517
|
return template;
|
|
518
|
+
} else if (opts.template !== undefined) {
|
|
519
|
+
optionsCache.set(opts, opts.template);
|
|
520
|
+
return opts.template;
|
|
385
521
|
<span class="branch-0 cbranch-no" title="branch not covered" > } else {</span>
|
|
386
|
-
<span class="cstat-no" title="statement not covered" >
|
|
387
|
-
<span class="cstat-no" title="statement not covered" > return opts.template;</span>
|
|
522
|
+
<span class="cstat-no" title="statement not covered" > throw new Error("Unable to get expected contents");</span>
|
|
388
523
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
389
524
|
}
|
|
390
525
|
</pre></td></tr></table></pre>
|
|
@@ -394,7 +529,7 @@ async function getExpectedContents(context: Context, opts: Options) {
|
|
|
394
529
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
395
530
|
Code coverage generated by
|
|
396
531
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
397
|
-
at 2025-
|
|
532
|
+
at 2025-11-07T18:00:58.549Z
|
|
398
533
|
</div>
|
|
399
534
|
<script src="../prettify.js"></script>
|
|
400
535
|
<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'>25/25</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'>14/14</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'>2/2</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'>25/25</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -100,34 +100,34 @@
|
|
|
100
100
|
<span class="cline-any cline-neutral"> </span>
|
|
101
101
|
<span class="cline-any cline-yes">1x</span>
|
|
102
102
|
<span class="cline-any cline-yes">1x</span>
|
|
103
|
+
<span class="cline-any cline-neutral"> </span>
|
|
103
104
|
<span class="cline-any cline-yes">1x</span>
|
|
105
|
+
<span class="cline-any cline-yes">4x</span>
|
|
106
|
+
<span class="cline-any cline-yes">4x</span>
|
|
107
|
+
<span class="cline-any cline-yes">2x</span>
|
|
108
|
+
<span class="cline-any cline-yes">4x</span>
|
|
109
|
+
<span class="cline-any cline-yes">4x</span>
|
|
110
|
+
<span class="cline-any cline-yes">4x</span>
|
|
111
|
+
<span class="cline-any cline-neutral"> </span>
|
|
104
112
|
<span class="cline-any cline-yes">1x</span>
|
|
105
|
-
<span class="cline-any cline-yes">
|
|
106
|
-
<span class="cline-any cline-
|
|
107
|
-
<span class="cline-any cline-yes">
|
|
108
|
-
<span class="cline-any cline-yes">
|
|
109
|
-
<span class="cline-any cline-yes">
|
|
110
|
-
<span class="cline-any cline-
|
|
111
|
-
<span class="cline-any cline-yes">
|
|
112
|
-
<span class="cline-any cline-
|
|
113
|
-
<span class="cline-any cline-yes">
|
|
114
|
-
<span class="cline-any cline-
|
|
115
|
-
<span class="cline-any cline-yes">
|
|
116
|
-
<span class="cline-any cline-yes">
|
|
117
|
-
<span class="cline-any cline-yes">
|
|
118
|
-
<span class="cline-any cline-
|
|
119
|
-
<span class="cline-any cline-yes">
|
|
120
|
-
<span class="cline-any cline-yes">
|
|
121
|
-
<span class="cline-any cline-yes">
|
|
122
|
-
<span class="cline-any cline-yes">
|
|
123
|
-
<span class="cline-any cline-yes">1x</span>
|
|
124
|
-
<span class="cline-any cline-yes">1x</span>
|
|
125
|
-
<span class="cline-any cline-yes">1x</span>
|
|
126
|
-
<span class="cline-any cline-yes">1x</span>
|
|
127
|
-
<span class="cline-any cline-yes">1x</span>
|
|
128
|
-
<span class="cline-any cline-yes">1x</span>
|
|
129
|
-
<span class="cline-any cline-yes">1x</span>
|
|
130
|
-
<span class="cline-any cline-yes">1x</span>
|
|
113
|
+
<span class="cline-any cline-yes">16x</span>
|
|
114
|
+
<span class="cline-any cline-neutral"> </span>
|
|
115
|
+
<span class="cline-any cline-yes">16x</span>
|
|
116
|
+
<span class="cline-any cline-yes">2x</span>
|
|
117
|
+
<span class="cline-any cline-yes">2x</span>
|
|
118
|
+
<span class="cline-any cline-neutral"> </span>
|
|
119
|
+
<span class="cline-any cline-yes">10x</span>
|
|
120
|
+
<span class="cline-any cline-neutral"> </span>
|
|
121
|
+
<span class="cline-any cline-yes">10x</span>
|
|
122
|
+
<span class="cline-any cline-neutral"> </span>
|
|
123
|
+
<span class="cline-any cline-yes">16x</span>
|
|
124
|
+
<span class="cline-any cline-yes">2x</span>
|
|
125
|
+
<span class="cline-any cline-yes">2x</span>
|
|
126
|
+
<span class="cline-any cline-neutral"> </span>
|
|
127
|
+
<span class="cline-any cline-yes">16x</span>
|
|
128
|
+
<span class="cline-any cline-yes">2x</span>
|
|
129
|
+
<span class="cline-any cline-yes">2x</span>
|
|
130
|
+
<span class="cline-any cline-yes">16x</span>
|
|
131
131
|
<span class="cline-any cline-yes">1x</span>
|
|
132
132
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { createRuleFactory } from "./util/createRuleFactory.js";
|
|
133
133
|
|
|
@@ -169,7 +169,7 @@ export const forceError = createRuleFactory<{ customMessage?: string }>({
|
|
|
169
169
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
170
170
|
Code coverage generated by
|
|
171
171
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
172
|
-
at 2025-
|
|
172
|
+
at 2025-11-07T18:00:58.549Z
|
|
173
173
|
</div>
|
|
174
174
|
<script src="../prettify.js"></script>
|
|
175
175
|
<script>
|