@monorepolint/rules 0.6.0-alpha.5 → 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.
Files changed (107) hide show
  1. package/.turbo/turbo-clean.log +1 -1
  2. package/.turbo/turbo-compile-typescript.log +1 -1
  3. package/.turbo/turbo-lint.log +1 -1
  4. package/.turbo/turbo-test.log +446 -94
  5. package/.turbo/turbo-transpile-typescript.log +5 -5
  6. package/CHANGELOG.md +102 -0
  7. package/build/js/index.js +413 -368
  8. package/build/js/index.js.map +1 -1
  9. package/build/tsconfig.tsbuildinfo +1 -1
  10. package/build/types/REMOVE.d.ts +2 -0
  11. package/build/types/REMOVE.d.ts.map +1 -0
  12. package/build/types/__tests__/alphabeticalDependencies.spec.d.ts +8 -0
  13. package/build/types/__tests__/alphabeticalDependencies.spec.d.ts.map +1 -0
  14. package/build/types/__tests__/forceError.spec.d.ts +8 -0
  15. package/build/types/__tests__/forceError.spec.d.ts.map +1 -0
  16. package/build/types/__tests__/oncePerPackage.spec.d.ts +8 -0
  17. package/build/types/__tests__/oncePerPackage.spec.d.ts.map +1 -0
  18. package/build/types/__tests__/standardTsconfig.spec.d.ts +8 -0
  19. package/build/types/__tests__/standardTsconfig.spec.d.ts.map +1 -0
  20. package/build/types/bannedDependencies.d.ts +9 -33
  21. package/build/types/bannedDependencies.d.ts.map +1 -1
  22. package/build/types/consistentDependencies.d.ts +6 -6
  23. package/build/types/consistentDependencies.d.ts.map +1 -1
  24. package/build/types/consistentVersions.d.ts +6 -10
  25. package/build/types/consistentVersions.d.ts.map +1 -1
  26. package/build/types/fileContents.d.ts +3 -2
  27. package/build/types/fileContents.d.ts.map +1 -1
  28. package/build/types/index.d.ts +1 -0
  29. package/build/types/index.d.ts.map +1 -1
  30. package/build/types/mustSatisfyPeerDependencies.d.ts +12 -190
  31. package/build/types/mustSatisfyPeerDependencies.d.ts.map +1 -1
  32. package/build/types/nestedWorkspaces.d.ts +2 -2
  33. package/build/types/nestedWorkspaces.d.ts.map +1 -1
  34. package/build/types/oncePerPackage.d.ts +6 -6
  35. package/build/types/oncePerPackage.d.ts.map +1 -1
  36. package/build/types/packageEntry.d.ts +11 -33
  37. package/build/types/packageEntry.d.ts.map +1 -1
  38. package/build/types/packageOrder.d.ts +2 -1
  39. package/build/types/packageOrder.d.ts.map +1 -1
  40. package/build/types/packageScript.d.ts +13 -22
  41. package/build/types/packageScript.d.ts.map +1 -1
  42. package/build/types/requireDependency.d.ts +5 -20
  43. package/build/types/requireDependency.d.ts.map +1 -1
  44. package/build/types/standardTsconfig.d.ts +12 -19
  45. package/build/types/standardTsconfig.d.ts.map +1 -1
  46. package/build/types/util/zodSchemas.d.ts +14 -0
  47. package/build/types/util/zodSchemas.d.ts.map +1 -0
  48. package/coverage/block-navigation.js +1 -1
  49. package/coverage/clover.xml +1454 -1442
  50. package/coverage/coverage-final.json +21 -19
  51. package/coverage/index.html +27 -27
  52. package/coverage/sorter.js +21 -7
  53. package/coverage/src/REMOVE.ts.html +88 -0
  54. package/coverage/src/alphabeticalDependencies.ts.html +34 -34
  55. package/coverage/src/alphabeticalScripts.ts.html +5 -5
  56. package/coverage/src/bannedDependencies.ts.html +20 -53
  57. package/coverage/src/consistentDependencies.ts.html +20 -14
  58. package/coverage/src/consistentVersions.ts.html +330 -183
  59. package/coverage/src/fileContents.ts.html +223 -88
  60. package/coverage/src/forceError.ts.html +60 -60
  61. package/coverage/src/index.html +127 -112
  62. package/coverage/src/index.ts.html +11 -5
  63. package/coverage/src/mustSatisfyPeerDependencies.ts.html +15 -501
  64. package/coverage/src/nestedWorkspaces.ts.html +5 -5
  65. package/coverage/src/oncePerPackage.ts.html +59 -59
  66. package/coverage/src/packageEntry.ts.html +121 -91
  67. package/coverage/src/packageOrder.ts.html +44 -14
  68. package/coverage/src/packageScript.ts.html +235 -88
  69. package/coverage/src/requireDependency.ts.html +241 -82
  70. package/coverage/src/standardTsconfig.ts.html +193 -193
  71. package/coverage/src/util/checkAlpha.ts.html +40 -40
  72. package/coverage/src/util/createRuleFactory.ts.html +19 -19
  73. package/coverage/src/util/index.html +30 -15
  74. package/coverage/src/util/makeDirectory.ts.html +11 -11
  75. package/coverage/src/util/packageDependencyGraphService.ts.html +1 -1
  76. package/coverage/src/util/zodSchemas.ts.html +130 -0
  77. package/package.json +14 -14
  78. package/src/REMOVE.ts +1 -0
  79. package/src/__tests__/alphabeticalDependencies.spec.ts +102 -0
  80. package/src/__tests__/alphabeticalScripts.spec.ts +18 -0
  81. package/src/__tests__/bannedDependencies.spec.ts +49 -0
  82. package/src/__tests__/consistentDependencies.spec.ts +23 -0
  83. package/src/__tests__/consistentVersions.spec.ts +142 -0
  84. package/src/__tests__/fileContents.spec.ts +348 -0
  85. package/src/__tests__/forceError.spec.ts +70 -0
  86. package/src/__tests__/mustSatisfyPeerDependencies.spec.ts +44 -0
  87. package/src/__tests__/nestedWorkspaces.spec.ts +14 -0
  88. package/src/__tests__/oncePerPackage.spec.ts +75 -0
  89. package/src/__tests__/packageEntry.spec.ts +177 -0
  90. package/src/__tests__/packageOrder.spec.ts +22 -0
  91. package/src/__tests__/packageScript.spec.ts +549 -0
  92. package/src/__tests__/requireDependency.spec.ts +259 -2
  93. package/src/__tests__/standardTsconfig.spec.ts +91 -0
  94. package/src/bannedDependencies.ts +14 -25
  95. package/src/consistentDependencies.ts +10 -8
  96. package/src/consistentVersions.ts +132 -83
  97. package/src/fileContents.ts +80 -35
  98. package/src/index.ts +2 -0
  99. package/src/mustSatisfyPeerDependencies.ts +10 -172
  100. package/src/nestedWorkspaces.ts +4 -4
  101. package/src/oncePerPackage.ts +6 -6
  102. package/src/packageEntry.ts +60 -50
  103. package/src/packageOrder.ts +19 -9
  104. package/src/packageScript.ts +67 -18
  105. package/src/requireDependency.ts +84 -31
  106. package/src/standardTsconfig.ts +26 -26
  107. package/src/util/zodSchemas.ts +15 -0
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">94.8% </span>
26
+ <span class="strong">94.62% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>146/154</span>
28
+ <span class='fraction'>176/186</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">90.9% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>20/22</span>
35
+ <span class='fraction'>30/33</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'>5/5</span>
42
+ <span class='fraction'>7/7</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">94.8% </span>
47
+ <span class="strong">94.62% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>146/154</span>
49
+ <span class='fraction'>176/186</span>
50
50
  </div>
51
51
 
52
52
 
@@ -236,7 +236,56 @@
236
236
  <a name='L171'></a><a href='#L171'>171</a>
237
237
  <a name='L172'></a><a href='#L172'>172</a>
238
238
  <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
240
289
  <span class="cline-any cline-neutral">&nbsp;</span>
241
290
  <span class="cline-any cline-neutral">&nbsp;</span>
242
291
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -260,76 +309,120 @@
260
309
  <span class="cline-any cline-yes">1x</span>
261
310
  <span class="cline-any cline-yes">1x</span>
262
311
  <span class="cline-any cline-neutral">&nbsp;</span>
263
- <span class="cline-any cline-yes">13x</span>
264
- <span class="cline-any cline-yes">13x</span>
265
- <span class="cline-any cline-yes">13x</span>
266
- <span class="cline-any cline-yes">13x</span>
267
- <span class="cline-any cline-yes">13x</span>
268
- <span class="cline-any cline-yes">13x</span>
269
- <span class="cline-any cline-yes">13x</span>
312
+ <span class="cline-any cline-yes">17x</span>
313
+ <span class="cline-any cline-yes">17x</span>
314
+ <span class="cline-any cline-yes">17x</span>
315
+ <span class="cline-any cline-yes">17x</span>
316
+ <span class="cline-any cline-yes">17x</span>
317
+ <span class="cline-any cline-yes">17x</span>
318
+ <span class="cline-any cline-yes">17x</span>
319
+ <span class="cline-any cline-yes">22x</span>
320
+ <span class="cline-any cline-yes">7x</span>
321
+ <span class="cline-any cline-yes">7x</span>
322
+ <span class="cline-any cline-yes">7x</span>
323
+ <span class="cline-any cline-yes">7x</span>
324
+ <span class="cline-any cline-yes">7x</span>
325
+ <span class="cline-any cline-yes">22x</span>
270
326
  <span class="cline-any cline-yes">15x</span>
271
- <span class="cline-any cline-yes">6x</span>
272
- <span class="cline-any cline-yes">6x</span>
273
- <span class="cline-any cline-yes">6x</span>
274
- <span class="cline-any cline-yes">6x</span>
275
- <span class="cline-any cline-yes">6x</span>
276
327
  <span class="cline-any cline-yes">15x</span>
277
- <span class="cline-any cline-yes">9x</span>
278
- <span class="cline-any cline-yes">9x</span>
279
- <span class="cline-any cline-yes">9x</span>
280
- <span class="cline-any cline-yes">9x</span>
281
- <span class="cline-any cline-yes">9x</span>
282
- <span class="cline-any cline-yes">9x</span>
283
328
  <span class="cline-any cline-yes">15x</span>
284
- <span class="cline-any cline-yes">13x</span>
329
+ <span class="cline-any cline-yes">15x</span>
330
+ <span class="cline-any cline-yes">15x</span>
331
+ <span class="cline-any cline-yes">15x</span>
332
+ <span class="cline-any cline-yes">22x</span>
333
+ <span class="cline-any cline-yes">17x</span>
334
+ <span class="cline-any cline-neutral">&nbsp;</span>
335
+ <span class="cline-any cline-yes">1x</span>
336
+ <span class="cline-any cline-yes">20x</span>
337
+ <span class="cline-any cline-yes">20x</span>
338
+ <span class="cline-any cline-yes">20x</span>
339
+ <span class="cline-any cline-yes">20x</span>
340
+ <span class="cline-any cline-yes">20x</span>
341
+ <span class="cline-any cline-yes">20x</span>
342
+ <span class="cline-any cline-yes">5x</span>
343
+ <span class="cline-any cline-yes">5x</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-yes">15x</span>
346
+ <span class="cline-any cline-yes">15x</span>
347
+ <span class="cline-any cline-yes">20x</span>
285
348
  <span class="cline-any cline-neutral">&nbsp;</span>
286
349
  <span class="cline-any cline-yes">1x</span>
287
- <span class="cline-any cline-yes">9x</span>
288
- <span class="cline-any cline-yes">9x</span>
289
- <span class="cline-any cline-yes">9x</span>
290
- <span class="cline-any cline-yes">9x</span>
291
- <span class="cline-any cline-yes">9x</span>
292
- <span class="cline-any cline-yes">9x</span>
350
+ <span class="cline-any cline-yes">8x</span>
351
+ <span class="cline-any cline-yes">8x</span>
352
+ <span class="cline-any cline-yes">8x</span>
353
+ <span class="cline-any cline-yes">8x</span>
354
+ <span class="cline-any cline-yes">8x</span>
355
+ <span class="cline-any cline-yes">1x</span>
356
+ <span class="cline-any cline-yes">1x</span>
293
357
  <span class="cline-any cline-neutral">&nbsp;</span>
294
- <span class="cline-any cline-yes">9x</span>
295
- <span class="cline-any cline-yes">9x</span>
296
- <span class="cline-any cline-yes">9x</span>
297
- <span class="cline-any cline-yes">9x</span>
358
+ <span class="cline-any cline-yes">7x</span>
359
+ <span class="cline-any cline-yes">8x</span>
360
+ <span class="cline-any cline-no">&nbsp;</span>
361
+ <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-yes">7x</span>
364
+ <span class="cline-any cline-yes">7x</span>
365
+ <span class="cline-any cline-yes">7x</span>
366
+ <span class="cline-any cline-yes">7x</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-yes">1x</span>
369
+ <span class="cline-any cline-yes">15x</span>
370
+ <span class="cline-any cline-yes">15x</span>
371
+ <span class="cline-any cline-yes">15x</span>
372
+ <span class="cline-any cline-yes">15x</span>
373
+ <span class="cline-any cline-yes">15x</span>
374
+ <span class="cline-any cline-yes">15x</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-yes">15x</span>
378
+ <span class="cline-any cline-yes">15x</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
380
+ <span class="cline-any cline-yes">15x</span>
381
+ <span class="cline-any cline-yes">10x</span>
382
+ <span class="cline-any cline-yes">10x</span>
298
383
  <span class="cline-any cline-no">&nbsp;</span>
299
384
  <span class="cline-any cline-no">&nbsp;</span>
300
385
  <span class="cline-any cline-no">&nbsp;</span>
301
386
  <span class="cline-any cline-no">&nbsp;</span>
387
+ <span class="cline-any cline-yes">10x</span>
302
388
  <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-yes">9x</span>
304
- <span class="cline-any cline-yes">9x</span>
305
- <span class="cline-any cline-yes">9x</span>
306
- <span class="cline-any cline-yes">9x</span>
307
- <span class="cline-any cline-yes">9x</span>
308
- <span class="cline-any cline-yes">8x</span>
309
- <span class="cline-any cline-yes">8x</span>
310
- <span class="cline-any cline-yes">9x</span>
311
- <span class="cline-any cline-yes">2x</span>
312
- <span class="cline-any cline-yes">2x</span>
313
- <span class="cline-any cline-yes">2x</span>
314
- <span class="cline-any cline-yes">2x</span>
315
- <span class="cline-any cline-yes">2x</span>
316
- <span class="cline-any cline-yes">2x</span>
317
- <span class="cline-any cline-yes">2x</span>
389
+ <span class="cline-any cline-yes">15x</span>
390
+ <span class="cline-any cline-yes">15x</span>
391
+ <span class="cline-any cline-neutral">&nbsp;</span>
392
+ <span class="cline-any cline-yes">15x</span>
393
+ <span class="cline-any cline-yes">13x</span>
394
+ <span class="cline-any cline-yes">13x</span>
395
+ <span class="cline-any cline-yes">13x</span>
396
+ <span class="cline-any cline-yes">13x</span>
397
+ <span class="cline-any cline-yes">13x</span>
398
+ <span class="cline-any cline-yes">13x</span>
399
+ <span class="cline-any cline-neutral">&nbsp;</span>
400
+ <span class="cline-any cline-yes">13x</span>
401
+ <span class="cline-any cline-yes">3x</span>
402
+ <span class="cline-any cline-yes">3x</span>
403
+ <span class="cline-any cline-yes">3x</span>
404
+ <span class="cline-any cline-yes">3x</span>
405
+ <span class="cline-any cline-yes">3x</span>
318
406
  <span class="cline-any cline-yes">2x</span>
319
407
  <span class="cline-any cline-yes">2x</span>
320
408
  <span class="cline-any cline-yes">2x</span>
321
409
  <span class="cline-any cline-yes">2x</span>
410
+ <span class="cline-any cline-yes">3x</span>
411
+ <span class="cline-any cline-yes">3x</span>
412
+ <span class="cline-any cline-yes">13x</span>
322
413
  <span class="cline-any cline-neutral">&nbsp;</span>
323
- <span class="cline-any cline-yes">9x</span>
324
- <span class="cline-any cline-yes">9x</span>
325
- <span class="cline-any cline-yes">9x</span>
326
- <span class="cline-any cline-yes">9x</span>
327
- <span class="cline-any cline-yes">9x</span>
328
- <span class="cline-any cline-yes">9x</span>
329
- <span class="cline-any cline-yes">9x</span>
330
- <span class="cline-any cline-yes">6x</span>
331
- <span class="cline-any cline-yes">6x</span>
332
- <span class="cline-any cline-yes">9x</span>
414
+ <span class="cline-any cline-yes">15x</span>
415
+ <span class="cline-any cline-yes">12x</span>
416
+ <span class="cline-any cline-neutral">&nbsp;</span>
417
+ <span class="cline-any cline-yes">15x</span>
418
+ <span class="cline-any cline-yes">7x</span>
419
+ <span class="cline-any cline-yes">7x</span>
420
+ <span class="cline-any cline-yes">7x</span>
421
+ <span class="cline-any cline-yes">7x</span>
422
+ <span class="cline-any cline-yes">7x</span>
423
+ <span class="cline-any cline-yes">7x</span>
424
+ <span class="cline-any cline-neutral">&nbsp;</span>
425
+ <span class="cline-any cline-yes">7x</span>
333
426
  <span class="cline-any cline-yes">2x</span>
334
427
  <span class="cline-any cline-yes">2x</span>
335
428
  <span class="cline-any cline-yes">2x</span>
@@ -341,41 +434,46 @@
341
434
  <span class="cline-any cline-yes">2x</span>
342
435
  <span class="cline-any cline-yes">2x</span>
343
436
  <span class="cline-any cline-yes">2x</span>
344
- <span class="cline-any cline-yes">9x</span>
437
+ <span class="cline-any cline-yes">7x</span>
438
+ <span class="cline-any cline-yes">15x</span>
345
439
  <span class="cline-any cline-neutral">&nbsp;</span>
346
440
  <span class="cline-any cline-yes">1x</span>
347
- <span class="cline-any cline-yes">6x</span>
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>
441
+ <span class="cline-any cline-yes">7x</span>
442
+ <span class="cline-any cline-yes">7x</span>
443
+ <span class="cline-any cline-yes">7x</span>
444
+ <span class="cline-any cline-yes">7x</span>
445
+ <span class="cline-any cline-yes">7x</span>
446
+ <span class="cline-any cline-yes">7x</span>
353
447
  <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-yes">6x</span>
355
- <span class="cline-any cline-yes">6x</span>
356
- <span class="cline-any cline-yes">16x</span>
357
- <span class="cline-any cline-yes">16x</span>
358
- <span class="cline-any cline-yes">16x</span>
359
- <span class="cline-any cline-yes">16x</span>
448
+ <span class="cline-any cline-neutral">&nbsp;</span>
449
+ <span class="cline-any cline-yes">7x</span>
450
+ <span class="cline-any cline-yes">7x</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-yes">7x</span>
453
+ <span class="cline-any cline-yes">7x</span>
454
+ <span class="cline-any cline-yes">17x</span>
455
+ <span class="cline-any cline-yes">17x</span>
456
+ <span class="cline-any cline-yes">17x</span>
457
+ <span class="cline-any cline-yes">17x</span>
360
458
  <span class="cline-any cline-no">&nbsp;</span>
361
459
  <span class="cline-any cline-no">&nbsp;</span>
362
460
  <span class="cline-any cline-no">&nbsp;</span>
363
461
  <span class="cline-any cline-no">&nbsp;</span>
364
- <span class="cline-any cline-yes">16x</span>
365
- <span class="cline-any cline-yes">16x</span>
366
- <span class="cline-any cline-yes">6x</span>
462
+ <span class="cline-any cline-yes">17x</span>
463
+ <span class="cline-any cline-yes">17x</span>
464
+ <span class="cline-any cline-yes">7x</span>
367
465
  <span class="cline-any cline-neutral">&nbsp;</span>
368
- <span class="cline-any cline-yes">6x</span>
369
- <span class="cline-any cline-yes">6x</span>
370
- <span class="cline-any cline-yes">6x</span>
371
- <span class="cline-any cline-yes">6x</span>
372
- <span class="cline-any cline-yes">6x</span>
373
- <span class="cline-any cline-yes">6x</span>
374
- <span class="cline-any cline-yes">6x</span>
375
- <span class="cline-any cline-yes">12x</span>
376
- <span class="cline-any cline-yes">12x</span>
377
- <span class="cline-any cline-yes">6x</span>
378
- <span class="cline-any cline-yes">6x</span>
466
+ <span class="cline-any cline-yes">7x</span>
467
+ <span class="cline-any cline-yes">7x</span>
468
+ <span class="cline-any cline-neutral">&nbsp;</span>
469
+ <span class="cline-any cline-yes">7x</span>
470
+ <span class="cline-any cline-yes">7x</span>
471
+ <span class="cline-any cline-yes">7x</span>
472
+ <span class="cline-any cline-yes">7x</span>
473
+ <span class="cline-any cline-yes">7x</span>
474
+ <span class="cline-any cline-yes">7x</span>
475
+ <span class="cline-any cline-neutral">&nbsp;</span>
476
+ <span class="cline-any cline-yes">7x</span>
379
477
  <span class="cline-any cline-yes">2x</span>
380
478
  <span class="cline-any cline-yes">2x</span>
381
479
  <span class="cline-any cline-yes">2x</span>
@@ -385,21 +483,18 @@
385
483
  <span class="cline-any cline-yes">2x</span>
386
484
  <span class="cline-any cline-yes">2x</span>
387
485
  <span class="cline-any cline-yes">2x</span>
486
+ <span class="cline-any cline-yes">7x</span>
388
487
  <span class="cline-any cline-neutral">&nbsp;</span>
488
+ <span class="cline-any cline-yes">7x</span>
389
489
  <span class="cline-any cline-yes">6x</span>
390
- <span class="cline-any cline-yes">6x</span>
391
- <span class="cline-any cline-yes">6x</span>
392
- <span class="cline-any cline-yes">6x</span>
393
- <span class="cline-any cline-yes">6x</span>
394
- <span class="cline-any cline-yes">6x</span>
395
- <span class="cline-any cline-yes">6x</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-yes">7x</span>
492
+ <span class="cline-any cline-yes">1x</span>
396
493
  <span class="cline-any cline-yes">1x</span>
397
494
  <span class="cline-any cline-yes">1x</span>
398
- <span class="cline-any cline-yes">2x</span>
399
- <span class="cline-any cline-yes">2x</span>
400
495
  <span class="cline-any cline-yes">1x</span>
401
- <span class="cline-any cline-yes">6x</span>
402
496
  <span class="cline-any cline-yes">1x</span>
497
+ <span class="cline-any cline-neutral">&nbsp;</span>
403
498
  <span class="cline-any cline-yes">1x</span>
404
499
  <span class="cline-any cline-yes">1x</span>
405
500
  <span class="cline-any cline-yes">1x</span>
@@ -408,7 +503,10 @@
408
503
  <span class="cline-any cline-yes">1x</span>
409
504
  <span class="cline-any cline-yes">1x</span>
410
505
  <span class="cline-any cline-yes">1x</span>
411
- <span class="cline-any cline-yes">6x</span>
506
+ <span class="cline-any cline-yes">1x</span>
507
+ <span class="cline-any cline-yes">1x</span>
508
+ <span class="cline-any cline-yes">1x</span>
509
+ <span class="cline-any cline-yes">7x</span>
412
510
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/*!
413
511
  * Copyright 2020 Palantir Technologies, Inc.
414
512
  *
@@ -418,19 +516,19 @@
418
516
  &nbsp;
419
517
  import { Context } from "@monorepolint/config";
420
518
  import { mutateJson, PackageJson } from "@monorepolint/utils";
421
- import * as r from "runtypes";
422
519
  import { coerce, SemVer } from "semver";
520
+ import { z } from "zod";
423
521
  import { createRuleFactory } from "./util/createRuleFactory.js";
424
- export const Options = r.Record({
425
- matchDependencyVersions: r.Dictionary(r.Union(r.String, r.Array(r.String))),
522
+ export const Options = z.object({
523
+ matchDependencyVersions: z.record(z.string(), z.union([z.string(), z.array(z.string())])),
426
524
  });
427
525
  &nbsp;
428
- export type Options = r.Static&lt;typeof Options&gt;;
526
+ export type Options = z.infer&lt;typeof Options&gt;;
429
527
  &nbsp;
430
528
  export const consistentVersions = createRuleFactory({
431
529
  name: "consistentVersions",
432
530
  check: checkConsistentVersions,
433
- validateOptions: Options.check,
531
+ validateOptions: Options.parse,
434
532
  });
435
533
  &nbsp;
436
534
  function checkConsistentVersions(context: Context, options: Options) {
@@ -456,6 +554,39 @@ function checkConsistentVersions(context: Context, options: Options) {
456
554
  }
457
555
  }
458
556
  &nbsp;
557
+ const shouldUpdateVersion = (
558
+ actualValue: string,
559
+ expectedValue: string,
560
+ isProtocolVersionString: boolean,
561
+ expectedSemVer: SemVer | null,
562
+ ): boolean =&gt; {
563
+ if (isProtocolVersionString) {
564
+ return actualValue !== expectedValue;
565
+ }
566
+ &nbsp;
567
+ const actualSemVer = coerce(actualValue);
568
+ return actualSemVer != null &amp;&amp; actualSemVer.raw !== expectedSemVer!.raw;
569
+ };
570
+ &nbsp;
571
+ const matchesAnyVersion = (
572
+ actualValue: string,
573
+ protocolVersions: string[],
574
+ acceptedSemVerVersions: SemVer[],
575
+ ): boolean =&gt; {
576
+ if (protocolVersions.includes(actualValue)) {
577
+ return true;
578
+ }
579
+ &nbsp;
580
+ const actualSemVer = coerce(actualValue);
581
+ if (actualSemVer == null) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
582
+ <span class="cstat-no" title="statement not covered" > return false;</span>
583
+ <span class="cstat-no" title="statement not covered" > }</span>
584
+ &nbsp;
585
+ return acceptedSemVerVersions.some(
586
+ (acceptedSemVer) =&gt; actualSemVer.raw === acceptedSemVer.raw,
587
+ );
588
+ };
589
+ &nbsp;
459
590
  const ensurePackageIsCorrectVersion = (
460
591
  context: Context,
461
592
  dependencyPackageName: string,
@@ -464,55 +595,67 @@ const ensurePackageIsCorrectVersion = (
464
595
  const packageJson = context.getPackageJson();
465
596
  const packageJsonPath = context.getPackageJsonPath();
466
597
  &nbsp;
467
- const expectedPackageDependencyVersion = coerce(
468
- expectedPackageDependencyValue,
469
- );
470
- if (expectedPackageDependencyVersion == null) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
471
- <span class="cstat-no" title="statement not covered" > throw new Error(</span>
472
- <span class="cstat-no" title="statement not covered" > `Malformed expected package dependency version defined in monorepolint configuration: ${dependencyPackageName} @ '${expectedPackageDependencyValue}'`,</span>
473
- <span class="cstat-no" title="statement not covered" > );</span>
474
- <span class="cstat-no" title="statement not covered" > }</span>
598
+ // Allow protocol version strings like "catalog:", "workspace:", etc.
599
+ const isProtocolVersion = expectedPackageDependencyValue.endsWith(":");
600
+ let expectedPackageDependencyVersion: SemVer | null = null;
601
+ &nbsp;
602
+ if (!isProtocolVersion) {
603
+ expectedPackageDependencyVersion = coerce(expectedPackageDependencyValue);
604
+ if (expectedPackageDependencyVersion == null) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
605
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
606
+ <span class="cstat-no" title="statement not covered" > `Malformed expected package dependency version defined in monorepolint configuration: ${dependencyPackageName} @ '${expectedPackageDependencyValue}'`,</span>
607
+ <span class="cstat-no" title="statement not covered" > );</span>
608
+ <span class="cstat-no" title="statement not covered" > }</span>
609
+ }
475
610
  &nbsp;
476
611
  const actualPackageDependencyValue = packageJson.dependencies
477
612
  &amp;&amp; packageJson.dependencies[dependencyPackageName];
478
- const actualPackageDependencyVersion = coerce(actualPackageDependencyValue);
479
- if (
480
- actualPackageDependencyVersion != null
481
- &amp;&amp; actualPackageDependencyVersion.raw
482
- !== expectedPackageDependencyVersion.raw
483
- ) {
484
- context.addError({
485
- file: packageJsonPath,
486
- message:
487
- `Expected dependency on ${dependencyPackageName} to match version defined in monorepolint configuration '${expectedPackageDependencyValue}', got '${actualPackageDependencyValue}' instead.`,
488
- fixer: () =&gt;
489
- mutateJson&lt;PackageJson&gt;(packageJsonPath, context.host, (input) =&gt; {
490
- input.dependencies![dependencyPackageName] = expectedPackageDependencyValue;
491
- return input;
492
- }),
493
- });
613
+ &nbsp;
614
+ if (actualPackageDependencyValue != null) {
615
+ const shouldUpdate = shouldUpdateVersion(
616
+ actualPackageDependencyValue,
617
+ expectedPackageDependencyValue,
618
+ isProtocolVersion,
619
+ expectedPackageDependencyVersion,
620
+ );
621
+ &nbsp;
622
+ if (shouldUpdate) {
623
+ context.addError({
624
+ file: packageJsonPath,
625
+ message:
626
+ `Expected dependency on ${dependencyPackageName} to match version defined in monorepolint configuration '${expectedPackageDependencyValue}', got '${actualPackageDependencyValue}' instead.`,
627
+ fixer: () =&gt;
628
+ mutateJson&lt;PackageJson&gt;(packageJsonPath, context.host, (input) =&gt; {
629
+ input.dependencies![dependencyPackageName] = expectedPackageDependencyValue;
630
+ return input;
631
+ }),
632
+ });
633
+ }
494
634
  }
495
635
  &nbsp;
496
636
  const actualPackageDevDependencyValue = packageJson.devDependencies
497
637
  &amp;&amp; packageJson.devDependencies[dependencyPackageName];
498
- const actualPackageDevDependencyVersion = coerce(
499
- actualPackageDevDependencyValue,
500
- );
501
- if (
502
- actualPackageDevDependencyVersion != null
503
- &amp;&amp; actualPackageDevDependencyVersion.raw
504
- !== expectedPackageDependencyVersion.raw
505
- ) {
506
- context.addError({
507
- file: packageJsonPath,
508
- message:
509
- `Expected devDependency on ${dependencyPackageName} to match version defined in monorepolint configuration '${expectedPackageDependencyValue}', got '${actualPackageDevDependencyValue}' instead`,
510
- fixer: () =&gt;
511
- mutateJson&lt;PackageJson&gt;(packageJsonPath, context.host, (input) =&gt; {
512
- input.devDependencies![dependencyPackageName] = expectedPackageDependencyValue;
513
- return input;
514
- }),
515
- });
638
+ &nbsp;
639
+ if (actualPackageDevDependencyValue != null) {
640
+ const shouldUpdateDev = shouldUpdateVersion(
641
+ actualPackageDevDependencyValue,
642
+ expectedPackageDependencyValue,
643
+ isProtocolVersion,
644
+ expectedPackageDependencyVersion,
645
+ );
646
+ &nbsp;
647
+ if (shouldUpdateDev) {
648
+ context.addError({
649
+ file: packageJsonPath,
650
+ message:
651
+ `Expected devDependency on ${dependencyPackageName} to match version defined in monorepolint configuration '${expectedPackageDependencyValue}', got '${actualPackageDevDependencyValue}' instead`,
652
+ fixer: () =&gt;
653
+ mutateJson&lt;PackageJson&gt;(packageJsonPath, context.host, (input) =&gt; {
654
+ input.devDependencies![dependencyPackageName] = expectedPackageDependencyValue;
655
+ return input;
656
+ }),
657
+ });
658
+ }
516
659
  }
517
660
  };
518
661
  &nbsp;
@@ -524,7 +667,11 @@ const ensurePackageMatchesSomeVersion = (
524
667
  const packageJson = context.getPackageJson();
525
668
  const packageJsonPath = context.getPackageJsonPath();
526
669
  &nbsp;
527
- const acceptedPackageDependencyVersions: SemVer[] = acceptedPackageDependencyValues.map(
670
+ // Separate protocol versions from regular semver versions
671
+ const protocolVersions = acceptedPackageDependencyValues.filter(val =&gt; val.endsWith(":"));
672
+ const regularVersions = acceptedPackageDependencyValues.filter(val =&gt; !val.endsWith(":"));
673
+ &nbsp;
674
+ const acceptedPackageDependencyVersions: SemVer[] = regularVersions.map(
528
675
  (acceptedPackageDependencyValue) =&gt; {
529
676
  const acceptedPackageDependencyVersion = coerce(
530
677
  acceptedPackageDependencyValue,
@@ -540,46 +687,46 @@ const ensurePackageMatchesSomeVersion = (
540
687
  &nbsp;
541
688
  const actualPackageDependencyValue = packageJson.dependencies
542
689
  &amp;&amp; packageJson.dependencies[dependencyPackageName];
543
- const actualPackageDependencyVersion = coerce(actualPackageDependencyValue);
544
- if (
545
- actualPackageDependencyVersion != null
546
- &amp;&amp; acceptedPackageDependencyVersions.every(
547
- (acceptedPackageDependencyVersion) =&gt;
548
- actualPackageDependencyVersion.raw
549
- !== acceptedPackageDependencyVersion.raw,
550
- )
551
- ) {
552
- context.addError({
553
- file: packageJsonPath,
554
- message: `Expected dependency on ${dependencyPackageName} to match one of '${
555
- JSON.stringify(
556
- acceptedPackageDependencyValues,
557
- )
558
- }', got '${actualPackageDependencyValue}' instead.`,
559
- });
690
+ &nbsp;
691
+ if (actualPackageDependencyValue != null) {
692
+ const matches = matchesAnyVersion(
693
+ actualPackageDependencyValue,
694
+ protocolVersions,
695
+ acceptedPackageDependencyVersions,
696
+ );
697
+ &nbsp;
698
+ if (!matches) {
699
+ context.addError({
700
+ file: packageJsonPath,
701
+ message: `Expected dependency on ${dependencyPackageName} to match one of '${
702
+ JSON.stringify(
703
+ acceptedPackageDependencyValues,
704
+ )
705
+ }', got '${actualPackageDependencyValue}' instead.`,
706
+ });
707
+ }
560
708
  }
561
709
  &nbsp;
562
710
  const actualPackageDevDependencyValue = packageJson.devDependencies
563
711
  &amp;&amp; packageJson.devDependencies[dependencyPackageName];
564
- const actualPackageDevDependencyVersion = coerce(
565
- actualPackageDevDependencyValue,
566
- );
567
- if (
568
- actualPackageDevDependencyVersion != null
569
- &amp;&amp; acceptedPackageDependencyVersions.every(
570
- (acceptedPackageDependencyVersion) =&gt;
571
- actualPackageDevDependencyVersion.raw
572
- !== acceptedPackageDependencyVersion.raw,
573
- )
574
- ) {
575
- context.addError({
576
- file: packageJsonPath,
577
- message: `Expected devDependency on ${dependencyPackageName} to match one of '${
578
- JSON.stringify(
579
- acceptedPackageDependencyValues,
580
- )
581
- }', got '${actualPackageDevDependencyValue}' instead.`,
582
- });
712
+ &nbsp;
713
+ if (actualPackageDevDependencyValue != null) {
714
+ const matches = matchesAnyVersion(
715
+ actualPackageDevDependencyValue,
716
+ protocolVersions,
717
+ acceptedPackageDependencyVersions,
718
+ );
719
+ &nbsp;
720
+ if (!matches) {
721
+ context.addError({
722
+ file: packageJsonPath,
723
+ message: `Expected devDependency on ${dependencyPackageName} to match one of '${
724
+ JSON.stringify(
725
+ acceptedPackageDependencyValues,
726
+ )
727
+ }', got '${actualPackageDevDependencyValue}' instead.`,
728
+ });
729
+ }
583
730
  }
584
731
  };
585
732
  &nbsp;</pre></td></tr></table></pre>
@@ -589,7 +736,7 @@ const ensurePackageMatchesSomeVersion = (
589
736
  <div class='footer quiet pad2 space-top1 center small'>
590
737
  Code coverage generated by
591
738
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
592
- at 2025-04-02T20:08:01.942Z
739
+ at 2025-11-07T18:00:58.549Z
593
740
  </div>
594
741
  <script src="../prettify.js"></script>
595
742
  <script>