@monorepolint/rules 0.6.0-alpha.2 → 0.6.0-alpha.4
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 +161 -102
- package/.turbo/turbo-transpile-typescript.log +4 -4
- package/CHANGELOG.md +19 -0
- package/build/js/index.js +429 -241
- package/build/js/index.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/__tests__/utils.d.ts +0 -1
- package/build/types/__tests__/utils.d.ts.map +1 -1
- package/build/types/bannedDependencies.d.ts.map +1 -1
- package/build/types/fileContents.d.ts.map +1 -1
- package/build/types/forceError.d.ts +4 -0
- package/build/types/forceError.d.ts.map +1 -0
- package/build/types/index.d.ts +5 -3
- package/build/types/index.d.ts.map +1 -1
- package/build/types/mustSatisfyPeerDependencies.d.ts.map +1 -1
- package/build/types/nestedWorkspaces.d.ts.map +1 -1
- package/build/types/oncePerPackage.d.ts +11 -0
- package/build/types/oncePerPackage.d.ts.map +1 -0
- package/build/types/packageEntry.d.ts.map +1 -1
- package/build/types/packageOrder.d.ts.map +1 -1
- package/build/types/packageScript.d.ts.map +1 -1
- package/build/types/requireDependency.d.ts +12 -12
- package/build/types/requireDependency.d.ts.map +1 -1
- package/build/types/util/checkAlpha.d.ts.map +1 -1
- package/build/types/util/createRuleFactory.d.ts.map +1 -1
- package/build/types/util/packageDependencyGraphService.d.ts.map +1 -1
- package/coverage/clover.xml +1201 -813
- package/coverage/coverage-final.json +20 -18
- package/coverage/index.html +20 -20
- package/coverage/src/alphabeticalDependencies.ts.html +11 -11
- package/coverage/src/alphabeticalScripts.ts.html +5 -5
- package/coverage/src/bannedDependencies.ts.html +76 -28
- package/coverage/src/consistentDependencies.ts.html +51 -18
- package/coverage/src/consistentVersions.ts.html +144 -48
- package/coverage/src/fileContents.ts.html +47 -23
- package/coverage/src/forceError.ts.html +184 -0
- package/coverage/src/index.html +96 -66
- package/coverage/src/index.ts.html +39 -33
- package/coverage/src/mustSatisfyPeerDependencies.ts.html +323 -80
- package/coverage/src/nestedWorkspaces.ts.html +47 -20
- package/coverage/src/oncePerPackage.ts.html +181 -0
- package/coverage/src/packageEntry.ts.html +40 -19
- package/coverage/src/packageOrder.ts.html +30 -12
- package/coverage/src/packageScript.ts.html +81 -27
- package/coverage/src/requireDependency.ts.html +77 -32
- package/coverage/src/standardTsconfig.ts.html +84 -21
- package/coverage/src/util/checkAlpha.ts.html +18 -9
- package/coverage/src/util/createRuleFactory.ts.html +16 -4
- package/coverage/src/util/index.html +17 -17
- package/coverage/src/util/makeDirectory.ts.html +5 -5
- package/coverage/src/util/packageDependencyGraphService.ts.html +94 -19
- package/package.json +4 -5
- package/src/__tests__/alphabeticalScripts.spec.ts +12 -4
- package/src/__tests__/bannedDependencies.spec.ts +45 -16
- package/src/__tests__/consistentDependencies.spec.ts +11 -5
- package/src/__tests__/consistentVersions.spec.ts +72 -18
- package/src/__tests__/fileContents.spec.ts +5 -5
- package/src/__tests__/mustSatisfyPeerDependencies.spec.ts +191 -76
- package/src/__tests__/nestedWorkspaces.spec.ts +10 -7
- package/src/__tests__/packageEntry.spec.ts +48 -47
- package/src/__tests__/packageOrder.spec.ts +72 -71
- package/src/__tests__/packageScript.spec.ts +19 -10
- package/src/__tests__/requireDependency.spec.ts +12 -6
- package/src/__tests__/utils.ts +16 -7
- package/src/bannedDependencies.ts +32 -16
- package/src/consistentDependencies.ts +19 -8
- package/src/consistentVersions.ts +70 -38
- package/src/fileContents.ts +19 -11
- package/src/forceError.ts +33 -0
- package/src/index.ts +5 -3
- package/src/mustSatisfyPeerDependencies.ts +141 -60
- package/src/nestedWorkspaces.ts +19 -10
- package/src/oncePerPackage.ts +32 -0
- package/src/packageEntry.ts +18 -11
- package/src/packageOrder.ts +9 -3
- package/src/packageScript.ts +37 -19
- package/src/requireDependency.ts +26 -11
- package/src/standardTsconfig.ts +31 -10
- package/src/util/checkAlpha.ts +5 -2
- package/src/util/createRuleFactory.ts +6 -2
- package/src/util/packageDependencyGraphService.ts +38 -13
- package/vitest.config.mjs +6 -7
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">95.
|
|
26
|
+
<span class="strong">95.55% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>43/45</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">95.
|
|
47
|
+
<span class="strong">95.55% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>43/45</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -122,8 +122,10 @@
|
|
|
122
122
|
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
123
|
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
124
|
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
-
<a name='L60'></a><a href='#L60'>60</a
|
|
126
|
-
<
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
127
129
|
<span class="cline-any cline-neutral"> </span>
|
|
128
130
|
<span class="cline-any cline-neutral"> </span>
|
|
129
131
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -131,6 +133,7 @@
|
|
|
131
133
|
<span class="cline-any cline-neutral"> </span>
|
|
132
134
|
<span class="cline-any cline-neutral"> </span>
|
|
133
135
|
<span class="cline-any cline-neutral"> </span>
|
|
136
|
+
<span class="cline-any cline-yes">1x</span>
|
|
134
137
|
<span class="cline-any cline-neutral"> </span>
|
|
135
138
|
<span class="cline-any cline-yes">1x</span>
|
|
136
139
|
<span class="cline-any cline-yes">4x</span>
|
|
@@ -181,6 +184,9 @@
|
|
|
181
184
|
<span class="cline-any cline-yes">1x</span>
|
|
182
185
|
<span class="cline-any cline-yes">4x</span>
|
|
183
186
|
<span class="cline-any cline-yes">4x</span>
|
|
187
|
+
<span class="cline-any cline-yes">4x</span>
|
|
188
|
+
<span class="cline-any cline-yes">4x</span>
|
|
189
|
+
<span class="cline-any cline-yes">4x</span>
|
|
184
190
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/*!
|
|
185
191
|
* Copyright 2019 Palantir Technologies, Inc.
|
|
186
192
|
*
|
|
@@ -193,7 +199,7 @@ import { diff } from "jest-diff";
|
|
|
193
199
|
|
|
194
200
|
export function checkAlpha(
|
|
195
201
|
context: Context,
|
|
196
|
-
block: "dependencies" | "devDependencies" | "peerDependencies" | "scripts"
|
|
202
|
+
block: "dependencies" | "devDependencies" | "peerDependencies" | "scripts",
|
|
197
203
|
) {
|
|
198
204
|
const packageJson = context.getPackageJson();
|
|
199
205
|
const packagePath = context.getPackageJsonPath();
|
|
@@ -237,7 +243,10 @@ function arrayOrderCompare(a: ReadonlyArray<string>, b: ReadonlyArray<s
|
|
|
237
243
|
return true;
|
|
238
244
|
}
|
|
239
245
|
|
|
240
|
-
export function createIncorrectOrderErrorMessage(
|
|
246
|
+
export function createIncorrectOrderErrorMessage(
|
|
247
|
+
block: string,
|
|
248
|
+
packageName: string,
|
|
249
|
+
) {
|
|
241
250
|
return `Incorrect order of ${block} in ${packageName}'s package.json`;
|
|
242
251
|
}
|
|
243
252
|
</pre></td></tr></table></pre>
|
|
@@ -247,7 +256,7 @@ export function createIncorrectOrderErrorMessage(block: string, packageName: str
|
|
|
247
256
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
248
257
|
Code coverage generated by
|
|
249
258
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
250
|
-
at 2025-01-
|
|
259
|
+
at 2025-01-31T21:00:08.068Z
|
|
251
260
|
</div>
|
|
252
261
|
<script src="../../prettify.js"></script>
|
|
253
262
|
<script>
|
|
@@ -96,7 +96,15 @@
|
|
|
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>
|
|
99
|
-
<a name='L34'></a><a href='#L34'>34</a
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
104
|
+
<span class="cline-any cline-neutral"> </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>
|
|
100
108
|
<span class="cline-any cline-neutral"> </span>
|
|
101
109
|
<span class="cline-any cline-neutral"> </span>
|
|
102
110
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -133,7 +141,11 @@
|
|
|
133
141
|
|
|
134
142
|
export type ValidateOptionsFn<X> = (options: unknown) => asserts options is X;
|
|
135
143
|
export type RuleFactoryFn<T> = (ruleEntry: RuleEntry<T>) => RuleModule<T>;
|
|
136
|
-
export type RuleCheckFn<O> = (
|
|
144
|
+
export type RuleCheckFn<O> = (
|
|
145
|
+
context: Context,
|
|
146
|
+
options: O,
|
|
147
|
+
extra: { id: string },
|
|
148
|
+
) => Promise<unknown> | unknown;
|
|
137
149
|
|
|
138
150
|
export interface RuleFactoryOptions<X> {
|
|
139
151
|
name: string;
|
|
@@ -149,7 +161,7 @@ export function createRuleFactory<X>({
|
|
|
149
161
|
validateOptions,
|
|
150
162
|
printStats,
|
|
151
163
|
}: RuleFactoryOptions<X>): RuleFactoryFn<X> {
|
|
152
|
-
return function
|
|
164
|
+
return function(ruleEntry) {
|
|
153
165
|
const id = ruleEntry.id ?? `${name} :: ${globalId++}`;
|
|
154
166
|
return {
|
|
155
167
|
id,
|
|
@@ -169,7 +181,7 @@ export function createRuleFactory<X>({
|
|
|
169
181
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
170
182
|
Code coverage generated by
|
|
171
183
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
172
|
-
at 2025-01-
|
|
184
|
+
at 2025-01-31T21:00:08.068Z
|
|
173
185
|
</div>
|
|
174
186
|
<script src="../../prettify.js"></script>
|
|
175
187
|
<script>
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">92.
|
|
26
|
+
<span class="strong">92.25% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>143/155</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">92.
|
|
47
|
+
<span class="strong">92.25% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>143/155</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -80,17 +80,17 @@
|
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
82
|
<td class="file high" data-value="checkAlpha.ts"><a href="checkAlpha.ts.html">checkAlpha.ts</a></td>
|
|
83
|
-
<td data-value="95.
|
|
83
|
+
<td data-value="95.55" class="pic high">
|
|
84
84
|
<div class="chart"><div class="cover-fill" style="width: 95%"></div><div class="cover-empty" style="width: 5%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
-
<td data-value="95.
|
|
87
|
-
<td data-value="
|
|
86
|
+
<td data-value="95.55" class="pct high">95.55%</td>
|
|
87
|
+
<td data-value="45" class="abs high">43/45</td>
|
|
88
88
|
<td data-value="90" class="pct high">90%</td>
|
|
89
89
|
<td data-value="10" class="abs high">9/10</td>
|
|
90
90
|
<td data-value="100" class="pct high">100%</td>
|
|
91
91
|
<td data-value="4" class="abs high">4/4</td>
|
|
92
|
-
<td data-value="95.
|
|
93
|
-
<td data-value="
|
|
92
|
+
<td data-value="95.55" class="pct high">95.55%</td>
|
|
93
|
+
<td data-value="45" class="abs high">43/45</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
@@ -114,28 +114,28 @@
|
|
|
114
114
|
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
115
115
|
</td>
|
|
116
116
|
<td data-value="100" class="pct high">100%</td>
|
|
117
|
-
<td data-value="
|
|
117
|
+
<td data-value="14" class="abs high">14/14</td>
|
|
118
118
|
<td data-value="100" class="pct high">100%</td>
|
|
119
119
|
<td data-value="4" class="abs high">4/4</td>
|
|
120
120
|
<td data-value="100" class="pct high">100%</td>
|
|
121
121
|
<td data-value="1" class="abs high">1/1</td>
|
|
122
122
|
<td data-value="100" class="pct high">100%</td>
|
|
123
|
-
<td data-value="
|
|
123
|
+
<td data-value="14" class="abs high">14/14</td>
|
|
124
124
|
</tr>
|
|
125
125
|
|
|
126
126
|
<tr>
|
|
127
127
|
<td class="file high" data-value="packageDependencyGraphService.ts"><a href="packageDependencyGraphService.ts.html">packageDependencyGraphService.ts</a></td>
|
|
128
|
-
<td data-value="87.
|
|
128
|
+
<td data-value="87.01" class="pic high">
|
|
129
129
|
<div class="chart"><div class="cover-fill" style="width: 87%"></div><div class="cover-empty" style="width: 13%"></div></div>
|
|
130
130
|
</td>
|
|
131
|
-
<td data-value="87.
|
|
132
|
-
<td data-value="
|
|
131
|
+
<td data-value="87.01" class="pct high">87.01%</td>
|
|
132
|
+
<td data-value="77" class="abs high">67/77</td>
|
|
133
133
|
<td data-value="61.53" class="pct medium">61.53%</td>
|
|
134
134
|
<td data-value="13" class="abs medium">8/13</td>
|
|
135
135
|
<td data-value="100" class="pct high">100%</td>
|
|
136
136
|
<td data-value="4" class="abs high">4/4</td>
|
|
137
|
-
<td data-value="87.
|
|
138
|
-
<td data-value="
|
|
137
|
+
<td data-value="87.01" class="pct high">87.01%</td>
|
|
138
|
+
<td data-value="77" class="abs high">67/77</td>
|
|
139
139
|
</tr>
|
|
140
140
|
|
|
141
141
|
</tbody>
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
147
147
|
Code coverage generated by
|
|
148
148
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
149
|
-
at 2025-01-
|
|
149
|
+
at 2025-01-31T21:00:08.068Z
|
|
150
150
|
</div>
|
|
151
151
|
<script src="../../prettify.js"></script>
|
|
152
152
|
<script>
|
|
@@ -25,7 +25,7 @@
|
|
|
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'>14/14</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -46,7 +46,7 @@
|
|
|
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'>14/14</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -94,8 +94,8 @@
|
|
|
94
94
|
<span class="cline-any cline-neutral"> </span>
|
|
95
95
|
<span class="cline-any cline-neutral"> </span>
|
|
96
96
|
<span class="cline-any cline-neutral"> </span>
|
|
97
|
-
<span class="cline-any cline-
|
|
98
|
-
<span class="cline-any cline-
|
|
97
|
+
<span class="cline-any cline-yes">1x</span>
|
|
98
|
+
<span class="cline-any cline-yes">1x</span>
|
|
99
99
|
<span class="cline-any cline-neutral"> </span>
|
|
100
100
|
<span class="cline-any cline-yes">1x</span>
|
|
101
101
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -142,7 +142,7 @@ export function makeDirectoryRecursively(directoryPath: string) {
|
|
|
142
142
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
143
143
|
Code coverage generated by
|
|
144
144
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
145
|
-
at 2025-01-
|
|
145
|
+
at 2025-01-31T21:00:08.068Z
|
|
146
146
|
</div>
|
|
147
147
|
<script src="../../prettify.js"></script>
|
|
148
148
|
<script>
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">87.
|
|
26
|
+
<span class="strong">87.01% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>67/77</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">87.
|
|
47
|
+
<span class="strong">87.01% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>67/77</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -177,7 +177,38 @@
|
|
|
177
177
|
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
178
|
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
179
|
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
-
<a name='L115'></a><a href='#L115'>115</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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
206
|
+
<span class="cline-any cline-neutral"> </span>
|
|
207
|
+
<span class="cline-any cline-neutral"> </span>
|
|
208
|
+
<span class="cline-any cline-neutral"> </span>
|
|
209
|
+
<span class="cline-any cline-neutral"> </span>
|
|
210
|
+
<span class="cline-any cline-yes">1x</span>
|
|
211
|
+
<span class="cline-any cline-yes">1x</span>
|
|
181
212
|
<span class="cline-any cline-neutral"> </span>
|
|
182
213
|
<span class="cline-any cline-neutral"> </span>
|
|
183
214
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -221,6 +252,9 @@
|
|
|
221
252
|
<span class="cline-any cline-yes">1x</span>
|
|
222
253
|
<span class="cline-any cline-yes">1x</span>
|
|
223
254
|
<span class="cline-any cline-yes">5x</span>
|
|
255
|
+
<span class="cline-any cline-yes">5x</span>
|
|
256
|
+
<span class="cline-any cline-yes">5x</span>
|
|
257
|
+
<span class="cline-any cline-yes">5x</span>
|
|
224
258
|
<span class="cline-any cline-no"> </span>
|
|
225
259
|
<span class="cline-any cline-no"> </span>
|
|
226
260
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -240,14 +274,24 @@
|
|
|
240
274
|
<span class="cline-any cline-yes">5x</span>
|
|
241
275
|
<span class="cline-any cline-yes">5x</span>
|
|
242
276
|
<span class="cline-any cline-yes">5x</span>
|
|
277
|
+
<span class="cline-any cline-yes">3x</span>
|
|
278
|
+
<span class="cline-any cline-yes">2x</span>
|
|
243
279
|
<span class="cline-any cline-yes">5x</span>
|
|
244
280
|
<span class="cline-any cline-yes">4x</span>
|
|
245
281
|
<span class="cline-any cline-yes">4x</span>
|
|
282
|
+
<span class="cline-any cline-yes">4x</span>
|
|
283
|
+
<span class="cline-any cline-yes">4x</span>
|
|
284
|
+
<span class="cline-any cline-yes">4x</span>
|
|
285
|
+
<span class="cline-any cline-no"> </span>
|
|
286
|
+
<span class="cline-any cline-no"> </span>
|
|
246
287
|
<span class="cline-any cline-no"> </span>
|
|
247
288
|
<span class="cline-any cline-no"> </span>
|
|
248
289
|
<span class="cline-any cline-neutral"> </span>
|
|
249
290
|
<span class="cline-any cline-yes">4x</span>
|
|
250
291
|
<span class="cline-any cline-yes">4x</span>
|
|
292
|
+
<span class="cline-any cline-yes">4x</span>
|
|
293
|
+
<span class="cline-any cline-yes">4x</span>
|
|
294
|
+
<span class="cline-any cline-yes">4x</span>
|
|
251
295
|
<span class="cline-any cline-yes">5x</span>
|
|
252
296
|
<span class="cline-any cline-neutral"> </span>
|
|
253
297
|
<span class="cline-any cline-yes">5x</span>
|
|
@@ -260,12 +304,18 @@
|
|
|
260
304
|
<span class="cline-any cline-yes">1x</span>
|
|
261
305
|
<span class="cline-any cline-yes">1x</span>
|
|
262
306
|
<span class="cline-any cline-yes">1x</span>
|
|
307
|
+
<span class="cline-any cline-neutral"> </span>
|
|
308
|
+
<span class="cline-any cline-neutral"> </span>
|
|
263
309
|
<span class="cline-any cline-yes">1x</span>
|
|
264
310
|
<span class="cline-any cline-yes">1x</span>
|
|
265
311
|
<span class="cline-any cline-neutral"> </span>
|
|
266
312
|
<span class="cline-any cline-yes">1x</span>
|
|
267
313
|
<span class="cline-any cline-yes">5x</span>
|
|
268
314
|
<span class="cline-any cline-yes">5x</span>
|
|
315
|
+
<span class="cline-any cline-neutral"> </span>
|
|
316
|
+
<span class="cline-any cline-neutral"> </span>
|
|
317
|
+
<span class="cline-any cline-neutral"> </span>
|
|
318
|
+
<span class="cline-any cline-neutral"> </span>
|
|
269
319
|
<span class="cline-any cline-yes">5x</span>
|
|
270
320
|
<span class="cline-any cline-neutral"> </span>
|
|
271
321
|
<span class="cline-any cline-yes">5x</span>
|
|
@@ -312,7 +362,11 @@ export interface IPackageDependencyGraphNode {
|
|
|
312
362
|
/** Service abstraction for constructing and traversing package dependency graphs. */
|
|
313
363
|
export interface IPackageDependencyGraphService {
|
|
314
364
|
/** Construct a graph of package dependencies. */
|
|
315
|
-
buildDependencyGraph(
|
|
365
|
+
buildDependencyGraph(
|
|
366
|
+
packageJsonPath: string,
|
|
367
|
+
host: Host,
|
|
368
|
+
maxDepth?: number,
|
|
369
|
+
): IPackageDependencyGraphNode;
|
|
316
370
|
|
|
317
371
|
/** Traverse a package dependency graph. */
|
|
318
372
|
traverse(
|
|
@@ -320,8 +374,10 @@ export interface IPackageDependencyGraphService {
|
|
|
320
374
|
opts?: {
|
|
321
375
|
/** Traverse each unique path to a given package (potentially slow). */
|
|
322
376
|
traverseAllPaths?: boolean;
|
|
323
|
-
}
|
|
324
|
-
): IterableIterator<
|
|
377
|
+
},
|
|
378
|
+
): IterableIterator<
|
|
379
|
+
IPackageDependencyGraphNode & { importPath: IPackageDependencyGraphNode[] }
|
|
380
|
+
>;
|
|
325
381
|
}
|
|
326
382
|
|
|
327
383
|
/** Default implementation of the package dependency graph service. */
|
|
@@ -330,10 +386,13 @@ export class PackageDependencyGraphService implements IPackageDependencyGraphSer
|
|
|
330
386
|
public buildDependencyGraph(
|
|
331
387
|
startPackageJsonPath: string,
|
|
332
388
|
host: Host,
|
|
333
|
-
maxDepth?: number
|
|
389
|
+
maxDepth?: number,
|
|
334
390
|
): IPackageDependencyGraphNode {
|
|
335
391
|
const nodes = new Map<string, IPackageDependencyGraphNode>();
|
|
336
|
-
const visit = (
|
|
392
|
+
const visit = (
|
|
393
|
+
packageJsonPath: string,
|
|
394
|
+
currentDepth: number,
|
|
395
|
+
): IPackageDependencyGraphNode => {
|
|
337
396
|
if (nodes.has(packageJsonPath)) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
338
397
|
<span class="cstat-no" title="statement not covered" > return nodes.get(packageJsonPath)!;</span>
|
|
339
398
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
@@ -353,14 +412,24 @@ export class PackageDependencyGraphService implements IPackageDependencyGraphSer
|
|
|
353
412
|
|
|
354
413
|
const nextDepth = currentDepth + 1;
|
|
355
414
|
if (maxDepth == <span class="branch-0 cbranch-no" title="branch not covered" >null || nextDepth <= maxDepth) {</span>
|
|
356
|
-
const dependencies = packageJson.dependencies != null
|
|
415
|
+
const dependencies = packageJson.dependencies != null
|
|
416
|
+
? Object.keys(packageJson.dependencies)
|
|
417
|
+
: [];
|
|
357
418
|
for (const dependency of dependencies) {
|
|
358
|
-
const dependencyPackageJsonPath = resolvePackagePath(
|
|
419
|
+
const dependencyPackageJsonPath = resolvePackagePath(
|
|
420
|
+
dependency,
|
|
421
|
+
node.paths.rootDirectory,
|
|
422
|
+
);
|
|
359
423
|
if (dependencyPackageJsonPath == null) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
360
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(
|
|
424
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
425
|
+
<span class="cstat-no" title="statement not covered" > `Could not resolve ${dependency} from ${node.paths.rootDirectory}`,</span>
|
|
426
|
+
<span class="cstat-no" title="statement not covered" > );</span>
|
|
361
427
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
362
428
|
|
|
363
|
-
node.dependencies.set(
|
|
429
|
+
node.dependencies.set(
|
|
430
|
+
dependency,
|
|
431
|
+
visit(dependencyPackageJsonPath, nextDepth),
|
|
432
|
+
);
|
|
364
433
|
}
|
|
365
434
|
}
|
|
366
435
|
|
|
@@ -373,14 +442,20 @@ export class PackageDependencyGraphService implements IPackageDependencyGraphSer
|
|
|
373
442
|
/** Traverse a package dependency graph with an iterator. */
|
|
374
443
|
public *traverse(
|
|
375
444
|
root: IPackageDependencyGraphNode,
|
|
376
|
-
opts = { traverseAllPaths: false }
|
|
377
|
-
): IterableIterator<
|
|
445
|
+
opts = { traverseAllPaths: false },
|
|
446
|
+
): IterableIterator<
|
|
447
|
+
IPackageDependencyGraphNode & { importPath: IPackageDependencyGraphNode[] }
|
|
448
|
+
> {
|
|
378
449
|
const visited = new Set<IPackageDependencyGraphNode>();
|
|
379
450
|
|
|
380
451
|
function* visit(
|
|
381
452
|
node: IPackageDependencyGraphNode,
|
|
382
|
-
importPath: IPackageDependencyGraphNode[] = []
|
|
383
|
-
): IterableIterator<
|
|
453
|
+
importPath: IPackageDependencyGraphNode[] = [],
|
|
454
|
+
): IterableIterator<
|
|
455
|
+
IPackageDependencyGraphNode & {
|
|
456
|
+
importPath: IPackageDependencyGraphNode[];
|
|
457
|
+
}
|
|
458
|
+
> {
|
|
384
459
|
// Don't visit a package more than once unless explicitly asked to traverse all paths
|
|
385
460
|
if (!opts.traverseAllPaths && visited.has(node)) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
386
461
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
@@ -412,7 +487,7 @@ export class PackageDependencyGraphService implements IPackageDependencyGraphSer
|
|
|
412
487
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
413
488
|
Code coverage generated by
|
|
414
489
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
415
|
-
at 2025-01-
|
|
490
|
+
at 2025-01-31T21:00:08.068Z
|
|
416
491
|
</div>
|
|
417
492
|
<script src="../../prettify.js"></script>
|
|
418
493
|
<script>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@monorepolint/rules",
|
|
3
|
-
"version": "0.6.0-alpha.
|
|
3
|
+
"version": "0.6.0-alpha.4",
|
|
4
4
|
"author": "Eric L Anderson (https://github.com/ericanderson)",
|
|
5
5
|
"contributors": [
|
|
6
6
|
"Mac Lockard (https://github.com/maclockard)"
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"runtypes": "^6.7.0",
|
|
29
29
|
"semver": "^7.6.3",
|
|
30
30
|
"tslib": "^2.8.1",
|
|
31
|
-
"@monorepolint/
|
|
32
|
-
"@monorepolint/
|
|
33
|
-
"@monorepolint/
|
|
31
|
+
"@monorepolint/config": "^0.6.0-alpha.4",
|
|
32
|
+
"@monorepolint/core": "^0.6.0-alpha.4",
|
|
33
|
+
"@monorepolint/utils": "^0.6.0-alpha.4"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/semver": "^7.5.8",
|
|
@@ -38,7 +38,6 @@
|
|
|
38
38
|
"@typescript-eslint/eslint-plugin": "^8.20.0",
|
|
39
39
|
"@typescript-eslint/parser": "^8.20.0",
|
|
40
40
|
"eslint": "^9.18.0",
|
|
41
|
-
"prettier": "^3.4.2",
|
|
42
41
|
"tmp": "^0.2.3",
|
|
43
42
|
"tslib": "^2.8.1",
|
|
44
43
|
"tsup": "^8.3.5",
|
|
@@ -6,11 +6,17 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
// tslint:disable:no-console
|
|
9
|
-
import { describe, expect, it, beforeEach, vi } from "vitest";
|
|
10
|
-
import { AddErrorSpy, createTestingWorkspace, HOST_FACTORIES, jsonToString, TestingWorkspace } from "./utils.js";
|
|
11
9
|
import { Context, Failure } from "@monorepolint/config";
|
|
10
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
12
11
|
import { alphabeticalScripts } from "../alphabeticalScripts.js";
|
|
13
12
|
import { createIncorrectOrderErrorMessage } from "../util/checkAlpha.js";
|
|
13
|
+
import {
|
|
14
|
+
AddErrorSpy,
|
|
15
|
+
createTestingWorkspace,
|
|
16
|
+
HOST_FACTORIES,
|
|
17
|
+
jsonToString,
|
|
18
|
+
TestingWorkspace,
|
|
19
|
+
} from "./utils.js";
|
|
14
20
|
|
|
15
21
|
const PACKAGE_SCRIPTS_SORTED = jsonToString({
|
|
16
22
|
name: "foo-lib",
|
|
@@ -59,10 +65,12 @@ describe.each(HOST_FACTORIES)("alphabeticalScripts ($name)", (hostFactory) => {
|
|
|
59
65
|
file: "package.json",
|
|
60
66
|
hasFixer: true,
|
|
61
67
|
message: createIncorrectOrderErrorMessage("scripts", "foo-lib"),
|
|
62
|
-
})
|
|
68
|
+
}),
|
|
63
69
|
);
|
|
64
70
|
|
|
65
|
-
expect(workspace.readFile("package.json")).toEqual(
|
|
71
|
+
expect(workspace.readFile("package.json")).toEqual(
|
|
72
|
+
PACKAGE_SCRIPTS_SORTED,
|
|
73
|
+
);
|
|
66
74
|
});
|
|
67
75
|
|
|
68
76
|
it("does nothing if already sorted", () => {
|