@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">
|
|
26
|
+
<span class="strong">97.82% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>45/46</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">
|
|
47
|
+
<span class="strong">97.82% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>45/46</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -123,17 +123,26 @@
|
|
|
123
123
|
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
124
|
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
125
|
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
-
<a name='L61'></a><a href='#L61'>61</a
|
|
127
|
-
<
|
|
128
|
-
<
|
|
129
|
-
<
|
|
130
|
-
<
|
|
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>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
131
136
|
<span class="cline-any cline-neutral"> </span>
|
|
132
137
|
<span class="cline-any cline-neutral"> </span>
|
|
133
138
|
<span class="cline-any cline-neutral"> </span>
|
|
134
139
|
<span class="cline-any cline-neutral"> </span>
|
|
135
140
|
<span class="cline-any cline-neutral"> </span>
|
|
136
141
|
<span class="cline-any cline-neutral"> </span>
|
|
142
|
+
<span class="cline-any cline-yes">1x</span>
|
|
143
|
+
<span class="cline-any cline-yes">1x</span>
|
|
144
|
+
<span class="cline-any cline-yes">1x</span>
|
|
145
|
+
<span class="cline-any cline-yes">1x</span>
|
|
137
146
|
<span class="cline-any cline-neutral"> </span>
|
|
138
147
|
<span class="cline-any cline-yes">1x</span>
|
|
139
148
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -147,6 +156,9 @@
|
|
|
147
156
|
<span class="cline-any cline-neutral"> </span>
|
|
148
157
|
<span class="cline-any cline-neutral"> </span>
|
|
149
158
|
<span class="cline-any cline-yes">6x</span>
|
|
159
|
+
<span class="cline-any cline-yes">6x</span>
|
|
160
|
+
<span class="cline-any cline-yes">6x</span>
|
|
161
|
+
<span class="cline-any cline-yes">6x</span>
|
|
150
162
|
<span class="cline-any cline-neutral"> </span>
|
|
151
163
|
<span class="cline-any cline-yes">6x</span>
|
|
152
164
|
<span class="cline-any cline-no"> </span>
|
|
@@ -161,15 +173,21 @@
|
|
|
161
173
|
<span class="cline-any cline-yes">1x</span>
|
|
162
174
|
<span class="cline-any cline-yes">1x</span>
|
|
163
175
|
<span class="cline-any cline-yes">1x</span>
|
|
176
|
+
<span class="cline-any cline-yes">1x</span>
|
|
164
177
|
<span class="cline-any cline-neutral"> </span>
|
|
165
178
|
<span class="cline-any cline-neutral"> </span>
|
|
166
179
|
<span class="cline-any cline-yes">6x</span>
|
|
167
180
|
<span class="cline-any cline-neutral"> </span>
|
|
168
181
|
<span class="cline-any cline-neutral"> </span>
|
|
169
182
|
<span class="cline-any cline-yes">6x</span>
|
|
183
|
+
<span class="cline-any cline-yes">6x</span>
|
|
184
|
+
<span class="cline-any cline-yes">6x</span>
|
|
185
|
+
<span class="cline-any cline-yes">6x</span>
|
|
170
186
|
<span class="cline-any cline-neutral"> </span>
|
|
171
187
|
<span class="cline-any cline-neutral"> </span>
|
|
172
188
|
<span class="cline-any cline-yes">6x</span>
|
|
189
|
+
<span class="cline-any cline-yes">8x</span>
|
|
190
|
+
<span class="cline-any cline-yes">6x</span>
|
|
173
191
|
<span class="cline-any cline-neutral"> </span>
|
|
174
192
|
<span class="cline-any cline-yes">6x</span>
|
|
175
193
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -206,18 +224,22 @@ export const nestedWorkspaces = createRuleFactory({
|
|
|
206
224
|
const rootPackageJson = context.getWorkspaceContext().getPackageJson();
|
|
207
225
|
|
|
208
226
|
// Expand a set of globs covering all package.json files in the entire repo (except the root)
|
|
209
|
-
const packageJsonPaths = globby.globbySync([
|
|
227
|
+
const packageJsonPaths = globby.globbySync([
|
|
228
|
+
"*/**/package.json",
|
|
229
|
+
"!**/node_modules/**",
|
|
230
|
+
]);
|
|
210
231
|
|
|
211
232
|
const workspaces = Array.isArray(rootPackageJson.workspaces<span class="branch-0 cbranch-no" title="branch not covered" >)</span>
|
|
212
233
|
<span class="cstat-no" title="statement not covered" > ? rootPackageJson.workspaces</span>
|
|
213
234
|
: rootPackageJson.workspaces !== undefined
|
|
214
|
-
|
|
215
|
-
|
|
235
|
+
? rootPackageJson.workspaces.packages
|
|
236
|
+
: undefined;
|
|
216
237
|
|
|
217
238
|
if (workspaces === undefined && packageJsonPaths.length > 0) {
|
|
218
239
|
context.addError({
|
|
219
240
|
file: context.getPackageJsonPath(),
|
|
220
|
-
message:
|
|
241
|
+
message:
|
|
242
|
+
"The \"workspace\" field is missing, even though there are workspaces in the repository.",
|
|
221
243
|
});
|
|
222
244
|
return;
|
|
223
245
|
}
|
|
@@ -226,18 +248,23 @@ export const nestedWorkspaces = createRuleFactory({
|
|
|
226
248
|
const workspacePackageJsons = (workspaces || []).map((item) => `${item}/package.json`);
|
|
227
249
|
|
|
228
250
|
// Expand the globs to get an array of all package.json files that are in packages specified by a workspace.
|
|
229
|
-
const expandedWorkspacesGlobs = globby.globbySync([
|
|
251
|
+
const expandedWorkspacesGlobs = globby.globbySync([
|
|
252
|
+
...workspacePackageJsons,
|
|
253
|
+
"!**/node_modules/**",
|
|
254
|
+
]);
|
|
230
255
|
|
|
231
256
|
// Ensure there are no package.jsons which are not included in the globbed workspaces set
|
|
232
|
-
const difference = packageJsonPaths.filter((packageJsonPath) =>
|
|
257
|
+
const difference = packageJsonPaths.filter((packageJsonPath) =>
|
|
258
|
+
!expandedWorkspacesGlobs.includes(packageJsonPath)
|
|
259
|
+
);
|
|
233
260
|
|
|
234
261
|
if (difference.length !== 0) {
|
|
235
|
-
const differencesList = difference.map((packageJsonPath) => path.dirname(packageJsonPath))
|
|
262
|
+
const differencesList = difference.map((packageJsonPath) => path.dirname(packageJsonPath))
|
|
263
|
+
.join(", ");
|
|
236
264
|
context.addError({
|
|
237
265
|
file: context.getPackageJsonPath(),
|
|
238
|
-
message:
|
|
239
|
-
|
|
240
|
-
'You may be able to use a glob to avoid listing each workspace individually, e.g. "packages/nested-workspace/*".',
|
|
266
|
+
message: `The "workspace" field is missing one or more values: ${differencesList}. `
|
|
267
|
+
+ "You may be able to use a glob to avoid listing each workspace individually, e.g. \"packages/nested-workspace/*\".",
|
|
241
268
|
});
|
|
242
269
|
}
|
|
243
270
|
},
|
|
@@ -250,7 +277,7 @@ export const nestedWorkspaces = createRuleFactory({
|
|
|
250
277
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
251
278
|
Code coverage generated by
|
|
252
279
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
253
|
-
at 2025-01-
|
|
280
|
+
at 2025-01-31T21:00:08.068Z
|
|
254
281
|
</div>
|
|
255
282
|
<script src="../prettify.js"></script>
|
|
256
283
|
<script>
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/oncePerPackage.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../index.html">All files</a> / <a href="index.html">src</a> oncePerPackage.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">100% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>31/31</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">100% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>0/0</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>0/0</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">100% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>31/31</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
99
|
+
<span class="cline-any cline-neutral"> </span>
|
|
100
|
+
<span class="cline-any cline-yes">1x</span>
|
|
101
|
+
<span class="cline-any cline-yes">1x</span>
|
|
102
|
+
<span class="cline-any cline-yes">1x</span>
|
|
103
|
+
<span class="cline-any cline-yes">1x</span>
|
|
104
|
+
<span class="cline-any cline-yes">1x</span>
|
|
105
|
+
<span class="cline-any cline-yes">1x</span>
|
|
106
|
+
<span class="cline-any cline-yes">1x</span>
|
|
107
|
+
<span class="cline-any cline-yes">1x</span>
|
|
108
|
+
<span class="cline-any cline-yes">1x</span>
|
|
109
|
+
<span class="cline-any cline-yes">1x</span>
|
|
110
|
+
<span class="cline-any cline-yes">1x</span>
|
|
111
|
+
<span class="cline-any cline-yes">1x</span>
|
|
112
|
+
<span class="cline-any cline-yes">1x</span>
|
|
113
|
+
<span class="cline-any cline-yes">1x</span>
|
|
114
|
+
<span class="cline-any cline-yes">1x</span>
|
|
115
|
+
<span class="cline-any cline-yes">1x</span>
|
|
116
|
+
<span class="cline-any cline-yes">1x</span>
|
|
117
|
+
<span class="cline-any cline-yes">1x</span>
|
|
118
|
+
<span class="cline-any cline-yes">1x</span>
|
|
119
|
+
<span class="cline-any cline-yes">1x</span>
|
|
120
|
+
<span class="cline-any cline-yes">1x</span>
|
|
121
|
+
<span class="cline-any cline-yes">1x</span>
|
|
122
|
+
<span class="cline-any cline-yes">1x</span>
|
|
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-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import * as r from "runtypes";
|
|
131
|
+
import { createRuleFactory } from "./util/createRuleFactory.js";
|
|
132
|
+
|
|
133
|
+
export const Options = r.Record({
|
|
134
|
+
singletonKey: r.String.Or(r.Symbol),
|
|
135
|
+
customMessage: r.String.optional(),
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
export type Options = r.Static<typeof Options>;
|
|
139
|
+
|
|
140
|
+
const visitedMap = new Map<string | symbol, Set<string>>();
|
|
141
|
+
|
|
142
|
+
export const oncePerPackage = createRuleFactory<Options>({
|
|
143
|
+
name: "oncePerPackage",
|
|
144
|
+
|
|
145
|
+
check: async (context, options) => {
|
|
146
|
+
const visited = visitedMap.get(options.singletonKey) ?? new Set<string>();
|
|
147
|
+
visitedMap.set(options.singletonKey, visited);
|
|
148
|
+
|
|
149
|
+
if (visited.has(context.getName())) {
|
|
150
|
+
context.addError({
|
|
151
|
+
message: "This package has already been visited for this key: "
|
|
152
|
+
+ options.singletonKey.toString(),
|
|
153
|
+
file: context.getPackageJsonPath(),
|
|
154
|
+
});
|
|
155
|
+
} else {
|
|
156
|
+
visited.add(context.getName());
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
validateOptions: Options.assert,
|
|
161
|
+
});
|
|
162
|
+
</pre></td></tr></table></pre>
|
|
163
|
+
|
|
164
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
165
|
+
</div><!-- /wrapper -->
|
|
166
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
167
|
+
Code coverage generated by
|
|
168
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
169
|
+
at 2025-01-31T21:00:08.068Z
|
|
170
|
+
</div>
|
|
171
|
+
<script src="../prettify.js"></script>
|
|
172
|
+
<script>
|
|
173
|
+
window.onload = function () {
|
|
174
|
+
prettyPrint();
|
|
175
|
+
};
|
|
176
|
+
</script>
|
|
177
|
+
<script src="../sorter.js"></script>
|
|
178
|
+
<script src="../block-navigation.js"></script>
|
|
179
|
+
</body>
|
|
180
|
+
</html>
|
|
181
|
+
|
|
@@ -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'>82/82</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'>82/82</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -153,17 +153,24 @@
|
|
|
153
153
|
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
154
|
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
155
|
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
-
<a name='L91'></a><a href='#L91'>91</a
|
|
157
|
-
<
|
|
158
|
-
<
|
|
159
|
-
<
|
|
160
|
-
<
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
161
164
|
<span class="cline-any cline-neutral"> </span>
|
|
162
165
|
<span class="cline-any cline-neutral"> </span>
|
|
163
166
|
<span class="cline-any cline-neutral"> </span>
|
|
164
167
|
<span class="cline-any cline-neutral"> </span>
|
|
165
168
|
<span class="cline-any cline-neutral"> </span>
|
|
166
169
|
<span class="cline-any cline-neutral"> </span>
|
|
170
|
+
<span class="cline-any cline-yes">1x</span>
|
|
171
|
+
<span class="cline-any cline-yes">1x</span>
|
|
172
|
+
<span class="cline-any cline-yes">1x</span>
|
|
173
|
+
<span class="cline-any cline-yes">1x</span>
|
|
167
174
|
<span class="cline-any cline-neutral"> </span>
|
|
168
175
|
<span class="cline-any cline-yes">1x</span>
|
|
169
176
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -204,6 +211,9 @@
|
|
|
204
211
|
<span class="cline-any cline-yes">8x</span>
|
|
205
212
|
<span class="cline-any cline-yes">8x</span>
|
|
206
213
|
<span class="cline-any cline-yes">8x</span>
|
|
214
|
+
<span class="cline-any cline-yes">8x</span>
|
|
215
|
+
<span class="cline-any cline-yes">8x</span>
|
|
216
|
+
<span class="cline-any cline-yes">8x</span>
|
|
207
217
|
<span class="cline-any cline-yes">6x</span>
|
|
208
218
|
<span class="cline-any cline-yes">6x</span>
|
|
209
219
|
<span class="cline-any cline-yes">8x</span>
|
|
@@ -219,6 +229,10 @@
|
|
|
219
229
|
<span class="cline-any cline-yes">6x</span>
|
|
220
230
|
<span class="cline-any cline-yes">6x</span>
|
|
221
231
|
<span class="cline-any cline-yes">6x</span>
|
|
232
|
+
<span class="cline-any cline-yes">6x</span>
|
|
233
|
+
<span class="cline-any cline-yes">6x</span>
|
|
234
|
+
<span class="cline-any cline-yes">6x</span>
|
|
235
|
+
<span class="cline-any cline-yes">6x</span>
|
|
222
236
|
<span class="cline-any cline-yes">8x</span>
|
|
223
237
|
<span class="cline-any cline-yes">8x</span>
|
|
224
238
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -263,7 +277,7 @@ export const Options = r.Union(
|
|
|
263
277
|
.And(
|
|
264
278
|
r.Partial({
|
|
265
279
|
entriesExist: r.Undefined,
|
|
266
|
-
})
|
|
280
|
+
}),
|
|
267
281
|
),
|
|
268
282
|
r
|
|
269
283
|
.Record({
|
|
@@ -272,12 +286,12 @@ export const Options = r.Union(
|
|
|
272
286
|
.And(
|
|
273
287
|
r.Partial({
|
|
274
288
|
entries: r.Undefined,
|
|
275
|
-
})
|
|
289
|
+
}),
|
|
276
290
|
),
|
|
277
291
|
r.Record({
|
|
278
292
|
entries: r.Dictionary(r.Unknown), // string => unknown, enforces existence of keys and their values
|
|
279
293
|
entriesExist: r.Array(r.String),
|
|
280
|
-
})
|
|
294
|
+
}),
|
|
281
295
|
);
|
|
282
296
|
|
|
283
297
|
export type Options = r.Static<typeof Options>;
|
|
@@ -291,21 +305,28 @@ export const packageEntry = createRuleFactory<Options>({
|
|
|
291
305
|
for (const key of Object.keys(options.entries)) {
|
|
292
306
|
const value = options.entries[key];
|
|
293
307
|
|
|
294
|
-
const entryDiff = diff(
|
|
308
|
+
const entryDiff = diff(
|
|
309
|
+
JSON.stringify(value) + "\n",
|
|
310
|
+
(JSON.stringify(packageJson[key]) || "") + "\n",
|
|
311
|
+
);
|
|
295
312
|
if (
|
|
296
|
-
(typeof value !== "object" && value !== packageJson[key])
|
|
297
|
-
entryDiff == null
|
|
298
|
-
!entryDiff.includes("Compared values have no visual difference")
|
|
313
|
+
(typeof value !== "object" && value !== packageJson[key])
|
|
314
|
+
|| entryDiff == null
|
|
315
|
+
|| !entryDiff.includes("Compared values have no visual difference")
|
|
299
316
|
) {
|
|
300
317
|
context.addError({
|
|
301
318
|
file: context.getPackageJsonPath(),
|
|
302
319
|
message: createStandardizedEntryErrorMessage(key),
|
|
303
320
|
longMessage: entryDiff,
|
|
304
321
|
fixer: () => {
|
|
305
|
-
mutateJson<PackageJson>(
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
322
|
+
mutateJson<PackageJson>(
|
|
323
|
+
context.getPackageJsonPath(),
|
|
324
|
+
context.host,
|
|
325
|
+
(input) => {
|
|
326
|
+
input[key] = value;
|
|
327
|
+
return input;
|
|
328
|
+
},
|
|
329
|
+
);
|
|
309
330
|
},
|
|
310
331
|
});
|
|
311
332
|
}
|
|
@@ -340,7 +361,7 @@ export function createExpectedEntryErrorMessage(key: string) {
|
|
|
340
361
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
341
362
|
Code coverage generated by
|
|
342
363
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
343
|
-
at 2025-01-
|
|
364
|
+
at 2025-01-31T21:00:08.068Z
|
|
344
365
|
</div>
|
|
345
366
|
<script src="../prettify.js"></script>
|
|
346
367
|
<script>
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">99% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>99/100</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">
|
|
47
|
+
<span class="strong">99% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>99/100</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -186,10 +186,13 @@
|
|
|
186
186
|
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
187
|
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
188
|
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
-
<a name='L124'></a><a href='#L124'>124</a
|
|
190
|
-
<
|
|
191
|
-
<
|
|
192
|
-
<
|
|
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
193
196
|
<span class="cline-any cline-neutral"> </span>
|
|
194
197
|
<span class="cline-any cline-neutral"> </span>
|
|
195
198
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -197,6 +200,9 @@
|
|
|
197
200
|
<span class="cline-any cline-neutral"> </span>
|
|
198
201
|
<span class="cline-any cline-neutral"> </span>
|
|
199
202
|
<span class="cline-any cline-neutral"> </span>
|
|
203
|
+
<span class="cline-any cline-yes">1x</span>
|
|
204
|
+
<span class="cline-any cline-yes">1x</span>
|
|
205
|
+
<span class="cline-any cline-yes">1x</span>
|
|
200
206
|
<span class="cline-any cline-neutral"> </span>
|
|
201
207
|
<span class="cline-any cline-neutral"> </span>
|
|
202
208
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -246,8 +252,12 @@
|
|
|
246
252
|
<span class="cline-any cline-yes">8x</span>
|
|
247
253
|
<span class="cline-any cline-neutral"> </span>
|
|
248
254
|
<span class="cline-any cline-yes">8x</span>
|
|
255
|
+
<span class="cline-any cline-no"> </span>
|
|
256
|
+
<span class="cline-any cline-yes">8x</span>
|
|
249
257
|
<span class="cline-any cline-neutral"> </span>
|
|
250
258
|
<span class="cline-any cline-yes">8x</span>
|
|
259
|
+
<span class="cline-any cline-yes">2x</span>
|
|
260
|
+
<span class="cline-any cline-yes">6x</span>
|
|
251
261
|
<span class="cline-any cline-neutral"> </span>
|
|
252
262
|
<span class="cline-any cline-yes">8x</span>
|
|
253
263
|
<span class="cline-any cline-yes">8x</span>
|
|
@@ -309,6 +319,8 @@
|
|
|
309
319
|
<span class="cline-any cline-yes">8x</span>
|
|
310
320
|
<span class="cline-any cline-yes">8x</span>
|
|
311
321
|
<span class="cline-any cline-yes">8x</span>
|
|
322
|
+
<span class="cline-any cline-yes">8x</span>
|
|
323
|
+
<span class="cline-any cline-yes">8x</span>
|
|
312
324
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/*!
|
|
313
325
|
* Copyright 2019 Palantir Technologies, Inc.
|
|
314
326
|
*
|
|
@@ -368,9 +380,13 @@ export const packageOrder = createRuleFactory<Options>({
|
|
|
368
380
|
const packageJson = context.getPackageJson();
|
|
369
381
|
const packagePath = context.getPackageJsonPath();
|
|
370
382
|
|
|
371
|
-
const order: string[] | OrderFunction = opts === <span class="branch-0 cbranch-no" title="branch not covered" >undefined
|
|
383
|
+
const order: string[] | OrderFunction = opts === <span class="branch-0 cbranch-no" title="branch not covered" >undefined</span>
|
|
384
|
+
<span class="cstat-no" title="statement not covered" > ? defaultKeyOrder</span>
|
|
385
|
+
: opts.order;
|
|
372
386
|
|
|
373
|
-
const comparator = isOrderFunction(order)
|
|
387
|
+
const comparator = isOrderFunction(order)
|
|
388
|
+
? order(context)
|
|
389
|
+
: createComparator(order);
|
|
374
390
|
|
|
375
391
|
const actualOrder = Object.keys(packageJson);
|
|
376
392
|
const expectedOrder = actualOrder.slice().sort(comparator); // sort mutates, so we need to copy the previous result
|
|
@@ -429,7 +445,9 @@ function createComparator(order: ReadonlyArray<string>) {
|
|
|
429
445
|
};
|
|
430
446
|
}
|
|
431
447
|
|
|
432
|
-
function isOrderFunction(
|
|
448
|
+
function isOrderFunction(
|
|
449
|
+
order: ReadonlyArray<string> | OrderFunction,
|
|
450
|
+
): order is OrderFunction {
|
|
433
451
|
return !Array.isArray(order);
|
|
434
452
|
}
|
|
435
453
|
</pre></td></tr></table></pre>
|
|
@@ -439,7 +457,7 @@ function isOrderFunction(order: ReadonlyArray<string> | OrderFunction): or
|
|
|
439
457
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
440
458
|
Code coverage generated by
|
|
441
459
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
442
|
-
at 2025-01-
|
|
460
|
+
at 2025-01-31T21:00:08.068Z
|
|
443
461
|
</div>
|
|
444
462
|
<script src="../prettify.js"></script>
|
|
445
463
|
<script>
|