@monorepolint/rules 0.5.0-alpha.106 → 0.5.0-alpha.107
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-test.log +143 -143
- package/.turbo/turbo-transpile-typescript.log +8 -4
- package/build/js/chunk-GMT7IGKM.js +25 -0
- package/build/js/chunk-GMT7IGKM.js.map +1 -0
- package/build/js/index.js +4 -21
- package/build/js/index.js.map +1 -1
- package/build/js/public/util.js +7 -0
- package/build/js/public/util.js.map +1 -0
- package/package.json +5 -5
package/.turbo/turbo-test.log
CHANGED
|
@@ -4,79 +4,79 @@
|
|
|
4
4
|
|
|
5
5
|
ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/monorepolint/packages/core/build/js/index.js', falling back to original file content. You can also configure Jest config option `transformIgnorePatterns` to ignore /home/runner/work/monorepolint/monorepolint/packages/core/build/js/index.js from transformation or make sure that `outDir` in your tsconfig is neither `''` or `'.'`
|
|
6
6
|
ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/monorepolint/packages/utils/build/js/index.js', falling back to original file content. You can also configure Jest config option `transformIgnorePatterns` to ignore /home/runner/work/monorepolint/monorepolint/packages/utils/build/js/index.js from transformation or make sure that `outDir` in your tsconfig is neither `''` or `'.'`
|
|
7
|
-
(node:
|
|
7
|
+
(node:2976) ExperimentalWarning: VM Modules is an experimental feature and might change at any time
|
|
8
8
|
(Use `node --trace-warnings ...` to show where the warning was created)
|
|
9
|
-
[0m[7m[1m[32m PASS [39m[22m[27m[0m [2msrc/__tests__/[22m[1mmustSatisfyPeerDependencies.spec.ts[22m ([0m[1m[
|
|
9
|
+
[0m[7m[1m[32m PASS [39m[22m[27m[0m [2msrc/__tests__/[22m[1mmustSatisfyPeerDependencies.spec.ts[22m ([0m[1m[41m5.645 s[49m[22m[0m)
|
|
10
10
|
mustSatisfyPeerDependencies
|
|
11
|
-
[32m✓[39m [2mFlags overloaded dependency (entry in regular dependencies and peer dependencies) (
|
|
12
|
-
[32m✓[39m [2mFlags conflicting peer dependencies (
|
|
13
|
-
[32m✓[39m [2mFlags unsatisfied peer dependencies (test package has regular dep) (
|
|
14
|
-
[32m✓[39m [2mFlags missing peer dependencies (NO regular dependency present) (
|
|
15
|
-
[32m✓[39m [2mFlags unsatisfied peer dependencies (test package has peer dep) (
|
|
16
|
-
[32m✓[39m [2mHonors dependencyWhitelist (
|
|
17
|
-
[32m✓[39m [2mHonors dependencyBlacklist (
|
|
11
|
+
[32m✓[39m [2mFlags overloaded dependency (entry in regular dependencies and peer dependencies) (4 ms)[22m
|
|
12
|
+
[32m✓[39m [2mFlags conflicting peer dependencies (3 ms)[22m
|
|
13
|
+
[32m✓[39m [2mFlags unsatisfied peer dependencies (test package has regular dep) (3 ms)[22m
|
|
14
|
+
[32m✓[39m [2mFlags missing peer dependencies (NO regular dependency present) (4 ms)[22m
|
|
15
|
+
[32m✓[39m [2mFlags unsatisfied peer dependencies (test package has peer dep) (3 ms)[22m
|
|
16
|
+
[32m✓[39m [2mHonors dependencyWhitelist (3 ms)[22m
|
|
17
|
+
[32m✓[39m [2mHonors dependencyBlacklist (2 ms)[22m
|
|
18
18
|
regex tests
|
|
19
|
-
[32m✓[39m [2mProperly matches any version range regex (
|
|
20
|
-
[32m✓[39m [2mProperly matches greator or equal version range regex (
|
|
21
|
-
[32m✓[39m [2mProperly matches major version range regex (
|
|
22
|
-
[32m✓[39m [2mProperly matches allowed range regex (
|
|
19
|
+
[32m✓[39m [2mProperly matches any version range regex (16 ms)[22m
|
|
20
|
+
[32m✓[39m [2mProperly matches greator or equal version range regex (11 ms)[22m
|
|
21
|
+
[32m✓[39m [2mProperly matches major version range regex (6 ms)[22m
|
|
22
|
+
[32m✓[39m [2mProperly matches allowed range regex (11 ms)[22m
|
|
23
23
|
Determines dependencies satisfaction correctly
|
|
24
24
|
[32m✓[39m [2mversion is version (1 ms)[22m
|
|
25
|
-
[32m✓[39m [2mversion satisfies a range (
|
|
26
|
-
[32m✓[39m [2mhigher version satisfies a range (
|
|
27
|
-
[32m✓[39m [2mversion satisfies a greator or equal version range (
|
|
28
|
-
[32m✓[39m [2mhigher version satisfies a greator or equal version range (
|
|
29
|
-
[32m✓[39m [2mversion satisfies 'any' range (
|
|
30
|
-
[32m✓[39m [2mgreator or equal version range satisfies 'any' range (
|
|
31
|
-
[32m✓[39m [2mrange satisfies 'any' range (
|
|
25
|
+
[32m✓[39m [2mversion satisfies a range (3 ms)[22m
|
|
26
|
+
[32m✓[39m [2mhigher version satisfies a range (2 ms)[22m
|
|
27
|
+
[32m✓[39m [2mversion satisfies a greator or equal version range (1 ms)[22m
|
|
28
|
+
[32m✓[39m [2mhigher version satisfies a greator or equal version range (1 ms)[22m
|
|
29
|
+
[32m✓[39m [2mversion satisfies 'any' range (1 ms)[22m
|
|
30
|
+
[32m✓[39m [2mgreator or equal version range satisfies 'any' range (2 ms)[22m
|
|
31
|
+
[32m✓[39m [2mrange satisfies 'any' range (1 ms)[22m
|
|
32
32
|
[32m✓[39m [2munion range satisfies 'any' range (1 ms)[22m
|
|
33
|
-
[32m✓[39m [2mversion found in union start (
|
|
34
|
-
[32m✓[39m [2mversion found in union end (
|
|
35
|
-
[32m✓[39m [2mversion satisfies a range in union start (
|
|
36
|
-
[32m✓[39m [2mversion satisfies a range in union end
|
|
37
|
-
[32m✓[39m [2mhigher version satisfies a range in union start
|
|
38
|
-
[32m✓[39m [2mhigher version satisfies a range in union end
|
|
33
|
+
[32m✓[39m [2mversion found in union start (1 ms)[22m
|
|
34
|
+
[32m✓[39m [2mversion found in union end (1 ms)[22m
|
|
35
|
+
[32m✓[39m [2mversion satisfies a range in union start (1 ms)[22m
|
|
36
|
+
[32m✓[39m [2mversion satisfies a range in union end[22m
|
|
37
|
+
[32m✓[39m [2mhigher version satisfies a range in union start[22m
|
|
38
|
+
[32m✓[39m [2mhigher version satisfies a range in union end[22m
|
|
39
39
|
[32m✓[39m [2mrange found in union start (1 ms)[22m
|
|
40
|
-
[32m✓[39m [2mrange found in union end (
|
|
40
|
+
[32m✓[39m [2mrange found in union end (1 ms)[22m
|
|
41
41
|
[32m✓[39m [2munion satisfies greator or equal version range (1 ms)[22m
|
|
42
42
|
[32m✓[39m [2mgreator or equal version range satisfies greator or equal version range (1 ms)[22m
|
|
43
|
-
[32m✓[39m [2mequivalent greator or equal version ranges satisfy each other
|
|
44
|
-
[32m✓[39m [2mhigher range satisfies a range in union start
|
|
43
|
+
[32m✓[39m [2mequivalent greator or equal version ranges satisfy each other[22m
|
|
44
|
+
[32m✓[39m [2mhigher range satisfies a range in union start[22m
|
|
45
45
|
[32m✓[39m [2mhigher range satisfies a range in union end (1 ms)[22m
|
|
46
46
|
[32m✓[39m [2mequivalent 'any' ranges satisfy each other (1 ms)[22m
|
|
47
|
-
[32m✓[39m [2mequivalent major ranges satisfy each other (
|
|
48
|
-
[32m✓[39m [2mversion missing in union
|
|
49
|
-
[32m✓[39m [2mrange missing in union
|
|
47
|
+
[32m✓[39m [2mequivalent major ranges satisfy each other (3 ms)[22m
|
|
48
|
+
[32m✓[39m [2mversion missing in union[22m
|
|
49
|
+
[32m✓[39m [2mrange missing in union[22m
|
|
50
50
|
Determines dependencies intersections correctly
|
|
51
|
-
[32m✓[39m [2mequivalence (
|
|
51
|
+
[32m✓[39m [2mequivalence (1 ms)[22m
|
|
52
52
|
[32m✓[39m [2mexact vs any (1 ms)[22m
|
|
53
|
-
[32m✓[39m [2mmajor vs any
|
|
53
|
+
[32m✓[39m [2mmajor vs any[22m
|
|
54
54
|
[32m✓[39m [2mgreater or equal vs any (1 ms)[22m
|
|
55
55
|
[32m✓[39m [2many vs any (1 ms)[22m
|
|
56
|
-
[32m✓[39m [2mexact vs greater or equal (
|
|
57
|
-
[32m✓[39m [2mmajor vs greater or equal (
|
|
56
|
+
[32m✓[39m [2mexact vs greater or equal (1 ms)[22m
|
|
57
|
+
[32m✓[39m [2mmajor vs greater or equal (1 ms)[22m
|
|
58
58
|
[32m✓[39m [2mgreater or equal vs greater or equal (1 ms)[22m
|
|
59
|
-
[32m✓[39m [2mexact vs major (
|
|
60
|
-
[32m✓[39m [2mmajor vs major (
|
|
59
|
+
[32m✓[39m [2mexact vs major (1 ms)[22m
|
|
60
|
+
[32m✓[39m [2mmajor vs major (1 ms)[22m
|
|
61
61
|
[32m✓[39m [2mexact vs union (2 ms)[22m
|
|
62
|
-
[32m✓[39m [2mmajor vs union (
|
|
63
|
-
[32m✓[39m [2munion vs union (
|
|
62
|
+
[32m✓[39m [2mmajor vs union (2 ms)[22m
|
|
63
|
+
[32m✓[39m [2munion vs union (2 ms)[22m
|
|
64
64
|
|
|
65
65
|
[0m[7m[1m[32m PASS [39m[22m[27m[0m [2msrc/__tests__/[22m[1mconsistentVersions.spec.ts[22m
|
|
66
66
|
consistentVersions
|
|
67
67
|
standard tests
|
|
68
|
-
[32m✓[39m [2mDoes nothing when arguments are empty (
|
|
69
|
-
[32m✓[39m [2mFixes packages that have an incorrect dependency version (
|
|
70
|
-
[32m✓[39m [2mIgnores packages that have a correct dependency version (
|
|
71
|
-
[32m✓[39m [2mFixes packages that have an incorrect devDependency version (
|
|
72
|
-
[32m✓[39m [2mIgnores packages that have a correct devDependency version (
|
|
73
|
-
[32m✓[39m [2mFixes packages that have an incorrect dependency and devDependency versions (
|
|
68
|
+
[32m✓[39m [2mDoes nothing when arguments are empty (5 ms)[22m
|
|
69
|
+
[32m✓[39m [2mFixes packages that have an incorrect dependency version (3 ms)[22m
|
|
70
|
+
[32m✓[39m [2mIgnores packages that have a correct dependency version (1 ms)[22m
|
|
71
|
+
[32m✓[39m [2mFixes packages that have an incorrect devDependency version (2 ms)[22m
|
|
72
|
+
[32m✓[39m [2mIgnores packages that have a correct devDependency version (2 ms)[22m
|
|
73
|
+
[32m✓[39m [2mFixes packages that have an incorrect dependency and devDependency versions (2 ms)[22m
|
|
74
74
|
Multiple accepted versions tests
|
|
75
|
-
[32m✓[39m [2mAccepts a match when multiple versions are configured (
|
|
76
|
-
[32m✓[39m [2mErrors when version does not match (
|
|
75
|
+
[32m✓[39m [2mAccepts a match when multiple versions are configured (2 ms)[22m
|
|
76
|
+
[32m✓[39m [2mErrors when version does not match (2 ms)[22m
|
|
77
77
|
|
|
78
78
|
[2mconsole.log[22m
|
|
79
|
-
[34mpackage-without-scripts[39m (/tmp/tmp-
|
|
79
|
+
[34mpackage-without-scripts[39m (/tmp/tmp-2976-E1qad23BQFON)
|
|
80
80
|
[2m[22m
|
|
81
81
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
82
82
|
|
|
@@ -99,7 +99,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
99
99
|
[2m [2mat Object.<anonymous> ([22m[2msrc/__tests__/packageScript.spec.ts[2m:56:10)[22m[2m[22m
|
|
100
100
|
|
|
101
101
|
[2mconsole.log[22m
|
|
102
|
-
[34mpackage-without-scripts[39m (/tmp/tmp-
|
|
102
|
+
[34mpackage-without-scripts[39m (/tmp/tmp-2976-ELCGccxnoI5w)
|
|
103
103
|
[2m[22m
|
|
104
104
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
105
105
|
|
|
@@ -109,7 +109,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
109
109
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
110
110
|
|
|
111
111
|
[2mconsole.log[22m
|
|
112
|
-
[34mpackage-with-scripts[39m (/tmp/tmp-
|
|
112
|
+
[34mpackage-with-scripts[39m (/tmp/tmp-2976-vN4K5IRz1vdi)
|
|
113
113
|
[2m[22m
|
|
114
114
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
115
115
|
|
|
@@ -119,7 +119,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
119
119
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
120
120
|
|
|
121
121
|
[2mconsole.log[22m
|
|
122
|
-
[34mpackage-with-scripts[39m (/tmp/tmp-
|
|
122
|
+
[34mpackage-with-scripts[39m (/tmp/tmp-2976-PjZ8KfG9idqN)
|
|
123
123
|
[2m[22m
|
|
124
124
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
125
125
|
|
|
@@ -142,7 +142,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
142
142
|
[2m [2mat Object.<anonymous> ([22m[2msrc/__tests__/packageScript.spec.ts[2m:169:10)[22m[2m[22m
|
|
143
143
|
|
|
144
144
|
[2mconsole.log[22m
|
|
145
|
-
[34mpackage-with-scripts[39m (/tmp/tmp-
|
|
145
|
+
[34mpackage-with-scripts[39m (/tmp/tmp-2976-MqW8uIRDRecH)
|
|
146
146
|
[2m[22m
|
|
147
147
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
148
148
|
|
|
@@ -152,7 +152,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
152
152
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
153
153
|
|
|
154
154
|
[2mconsole.log[22m
|
|
155
|
-
[34mpackage-with-scripts[39m (/tmp/tmp-
|
|
155
|
+
[34mpackage-with-scripts[39m (/tmp/tmp-2976-ZVhzJb73eDQL)
|
|
156
156
|
[2m[22m
|
|
157
157
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
158
158
|
|
|
@@ -162,7 +162,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
162
162
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
163
163
|
|
|
164
164
|
[2mconsole.log[22m
|
|
165
|
-
[34mpackage-with-scripts[39m (/tmp/tmp-
|
|
165
|
+
[34mpackage-with-scripts[39m (/tmp/tmp-2976-eAVYqRuYU4Fz)
|
|
166
166
|
[2m[22m
|
|
167
167
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
168
168
|
|
|
@@ -172,7 +172,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
172
172
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
173
173
|
|
|
174
174
|
[2mconsole.log[22m
|
|
175
|
-
[34mpackage-without-scripts[39m (/tmp/tmp-
|
|
175
|
+
[34mpackage-without-scripts[39m (/tmp/tmp-2976-7xHDaNLggISE)
|
|
176
176
|
[2m[22m
|
|
177
177
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
178
178
|
|
|
@@ -195,7 +195,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
195
195
|
[2m [2mat Object.<anonymous> ([22m[2msrc/__tests__/packageScript.spec.ts[2m:56:10)[22m[2m[22m
|
|
196
196
|
|
|
197
197
|
[2mconsole.log[22m
|
|
198
|
-
[34mpackage-without-scripts[39m (/tmp/tmp-
|
|
198
|
+
[34mpackage-without-scripts[39m (/tmp/tmp-2976-l2CKsPpAfF17)
|
|
199
199
|
[2m[22m
|
|
200
200
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
201
201
|
|
|
@@ -205,7 +205,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
205
205
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
206
206
|
|
|
207
207
|
[2mconsole.log[22m
|
|
208
|
-
[34mpackage-with-scripts[39m (/tmp/tmp-
|
|
208
|
+
[34mpackage-with-scripts[39m (/tmp/tmp-2976-7Z4Lr7bgPO1h)
|
|
209
209
|
[2m[22m
|
|
210
210
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
211
211
|
|
|
@@ -215,7 +215,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
215
215
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
216
216
|
|
|
217
217
|
[2mconsole.log[22m
|
|
218
|
-
[34mpackage-with-scripts[39m (/tmp/tmp-
|
|
218
|
+
[34mpackage-with-scripts[39m (/tmp/tmp-2976-ecnxQaSyNyaE)
|
|
219
219
|
[2m[22m
|
|
220
220
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
221
221
|
|
|
@@ -238,7 +238,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
238
238
|
[2m [2mat Object.<anonymous> ([22m[2msrc/__tests__/packageScript.spec.ts[2m:169:10)[22m[2m[22m
|
|
239
239
|
|
|
240
240
|
[2mconsole.log[22m
|
|
241
|
-
[34mpackage-with-scripts[39m (/tmp/tmp-
|
|
241
|
+
[34mpackage-with-scripts[39m (/tmp/tmp-2976-1vOhkcWoU1AI)
|
|
242
242
|
[2m[22m
|
|
243
243
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
244
244
|
|
|
@@ -248,7 +248,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
248
248
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
249
249
|
|
|
250
250
|
[2mconsole.log[22m
|
|
251
|
-
[34mpackage-with-scripts[39m (/tmp/tmp-
|
|
251
|
+
[34mpackage-with-scripts[39m (/tmp/tmp-2976-X08T9AKnKShP)
|
|
252
252
|
[2m[22m
|
|
253
253
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
254
254
|
|
|
@@ -258,49 +258,49 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
258
258
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
259
259
|
|
|
260
260
|
[2mconsole.log[22m
|
|
261
|
-
[34mpackage-with-scripts[39m (/tmp/tmp-
|
|
261
|
+
[34mpackage-with-scripts[39m (/tmp/tmp-2976-LXndMHhoem6M)
|
|
262
262
|
[2m[22m
|
|
263
263
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
264
264
|
|
|
265
|
-
[0m[7m[1m[32m PASS [39m[22m[27m[0m [2msrc/__tests__/[22m[1mpackageScript.spec.ts[22m
|
|
266
|
-
expectPackageScript (SimpleHost)
|
|
267
|
-
fix: false
|
|
268
265
|
[2mconsole.log[22m
|
|
269
266
|
[32mFixed![39m [35mpackage.json[39m: Expected standardized script entry for 'exists'. Valid options: (empty)
|
|
270
267
|
[2m[22m
|
|
271
268
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
272
269
|
|
|
273
|
-
|
|
270
|
+
[0m[7m[1m[32m PASS [39m[22m[27m[0m [2msrc/__tests__/[22m[1mpackageScript.spec.ts[22m
|
|
271
|
+
expectPackageScript (SimpleHost)
|
|
272
|
+
fix: false
|
|
273
|
+
[32m✓[39m [2mhandles an empty script section (45 ms)[22m
|
|
274
274
|
fix: true
|
|
275
|
-
[32m✓[39m [2mfixes an empty script section (
|
|
276
|
-
[32m✓[39m [2madds a script (
|
|
277
|
-
[32m✓[39m [2mdoes nothing if the value exists (
|
|
278
|
-
[32m✓[39m [2merrors if long form is used and no value matches and there is no fixValue (
|
|
279
|
-
[32m✓[39m [2muses the fixValue for fixing if provided (
|
|
280
|
-
[32m✓[39m [2mcan fix to empty (
|
|
281
|
-
[32m✓[39m [2mcan allow only empty (
|
|
275
|
+
[32m✓[39m [2mfixes an empty script section (6 ms)[22m
|
|
276
|
+
[32m✓[39m [2madds a script (5 ms)[22m
|
|
277
|
+
[32m✓[39m [2mdoes nothing if the value exists (1 ms)[22m
|
|
278
|
+
[32m✓[39m [2merrors if long form is used and no value matches and there is no fixValue (13 ms)[22m
|
|
279
|
+
[32m✓[39m [2muses the fixValue for fixing if provided (4 ms)[22m
|
|
280
|
+
[32m✓[39m [2mcan fix to empty (3 ms)[22m
|
|
281
|
+
[32m✓[39m [2mcan allow only empty (4 ms)[22m
|
|
282
282
|
expectPackageScript (CachingHost)
|
|
283
283
|
fix: false
|
|
284
|
-
[32m✓[39m [2mhandles an empty script section (
|
|
284
|
+
[32m✓[39m [2mhandles an empty script section (8 ms)[22m
|
|
285
285
|
fix: true
|
|
286
|
-
[32m✓[39m [2mfixes an empty script section (
|
|
287
|
-
[32m✓[39m [2madds a script (
|
|
288
|
-
[32m✓[39m [2mdoes nothing if the value exists (
|
|
289
|
-
[32m✓[39m [2merrors if long form is used and no value matches and there is no fixValue (
|
|
290
|
-
[32m✓[39m [2muses the fixValue for fixing if provided (
|
|
291
|
-
[32m✓[39m [2mcan fix to empty (
|
|
292
|
-
[32m✓[39m [2mcan allow only empty (
|
|
286
|
+
[32m✓[39m [2mfixes an empty script section (3 ms)[22m
|
|
287
|
+
[32m✓[39m [2madds a script (5 ms)[22m
|
|
288
|
+
[32m✓[39m [2mdoes nothing if the value exists (1 ms)[22m
|
|
289
|
+
[32m✓[39m [2merrors if long form is used and no value matches and there is no fixValue (12 ms)[22m
|
|
290
|
+
[32m✓[39m [2muses the fixValue for fixing if provided (3 ms)[22m
|
|
291
|
+
[32m✓[39m [2mcan fix to empty (3 ms)[22m
|
|
292
|
+
[32m✓[39m [2mcan allow only empty (4 ms)[22m
|
|
293
293
|
|
|
294
294
|
[0m[7m[1m[32m PASS [39m[22m[27m[0m [2msrc/__tests__/[22m[1mbannedDependencies.spec.ts[22m
|
|
295
295
|
bannedDependencies
|
|
296
|
-
[32m✓[39m [2mFlags banned dependencies correctly (
|
|
297
|
-
[32m✓[39m [2mFlags banned dependencies correctly w legacy globs (
|
|
298
|
-
[32m✓[39m [2mFlags banned dependencies correctly w new globs (
|
|
299
|
-
[32m✓[39m [2mFlags banned dependencies correctly w exact (
|
|
300
|
-
[32m✓[39m [2mFlags banned transitives correctly (
|
|
296
|
+
[32m✓[39m [2mFlags banned dependencies correctly (8 ms)[22m
|
|
297
|
+
[32m✓[39m [2mFlags banned dependencies correctly w legacy globs (2 ms)[22m
|
|
298
|
+
[32m✓[39m [2mFlags banned dependencies correctly w new globs (1 ms)[22m
|
|
299
|
+
[32m✓[39m [2mFlags banned dependencies correctly w exact (2 ms)[22m
|
|
300
|
+
[32m✓[39m [2mFlags banned transitives correctly (5 ms)[22m
|
|
301
301
|
|
|
302
302
|
[2mconsole.log[22m
|
|
303
|
-
[34mpackage[39m (/tmp/tmp-
|
|
303
|
+
[34mpackage[39m (/tmp/tmp-2976-VBDsBVDd1wgj)
|
|
304
304
|
[2m[22m
|
|
305
305
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
306
306
|
|
|
@@ -310,7 +310,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
310
310
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
311
311
|
|
|
312
312
|
[2mconsole.log[22m
|
|
313
|
-
[34mpackage[39m (/tmp/tmp-
|
|
313
|
+
[34mpackage[39m (/tmp/tmp-2976-FIXVSHjUPdu7)
|
|
314
314
|
[2m[22m
|
|
315
315
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
316
316
|
|
|
@@ -320,7 +320,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
320
320
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
321
321
|
|
|
322
322
|
[2mconsole.log[22m
|
|
323
|
-
[34mpackage[39m (/tmp/tmp-
|
|
323
|
+
[34mpackage[39m (/tmp/tmp-2976-FWQEA1WMqPX6)
|
|
324
324
|
[2m[22m
|
|
325
325
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
326
326
|
|
|
@@ -343,7 +343,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
343
343
|
[2m [2mat Object.<anonymous> ([22m[2msrc/__tests__/packageEntry.spec.ts[2m:158:10)[22m[2m[22m
|
|
344
344
|
|
|
345
345
|
[2mconsole.log[22m
|
|
346
|
-
[34mpackage[39m (/tmp/tmp-
|
|
346
|
+
[34mpackage[39m (/tmp/tmp-2976-HAs0QuiAt06a)
|
|
347
347
|
[2m[22m
|
|
348
348
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
349
349
|
|
|
@@ -371,7 +371,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
371
371
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
372
372
|
|
|
373
373
|
[2mconsole.log[22m
|
|
374
|
-
[34mpackage[39m (/tmp/tmp-
|
|
374
|
+
[34mpackage[39m (/tmp/tmp-2976-PZbaXFePn2jb)
|
|
375
375
|
[2m[22m
|
|
376
376
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
377
377
|
|
|
@@ -381,7 +381,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
381
381
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
382
382
|
|
|
383
383
|
[2mconsole.log[22m
|
|
384
|
-
[34mpackage[39m (/tmp/tmp-
|
|
384
|
+
[34mpackage[39m (/tmp/tmp-2976-unDiPztSkoPY)
|
|
385
385
|
[2m[22m
|
|
386
386
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
387
387
|
|
|
@@ -391,7 +391,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
391
391
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
392
392
|
|
|
393
393
|
[2mconsole.log[22m
|
|
394
|
-
[34mpackage[39m (/tmp/tmp-
|
|
394
|
+
[34mpackage[39m (/tmp/tmp-2976-J4N6gMy4pTZQ)
|
|
395
395
|
[2m[22m
|
|
396
396
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
397
397
|
|
|
@@ -414,7 +414,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
414
414
|
[2m [2mat Object.<anonymous> ([22m[2msrc/__tests__/packageEntry.spec.ts[2m:158:10)[22m[2m[22m
|
|
415
415
|
|
|
416
416
|
[2mconsole.log[22m
|
|
417
|
-
[34mpackage[39m (/tmp/tmp-
|
|
417
|
+
[34mpackage[39m (/tmp/tmp-2976-sqmDSh7l6wuB)
|
|
418
418
|
[2m[22m
|
|
419
419
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
420
420
|
|
|
@@ -444,35 +444,35 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
444
444
|
[0m[7m[1m[32m PASS [39m[22m[27m[0m [2msrc/__tests__/[22m[1mpackageEntry.spec.ts[22m
|
|
445
445
|
expectPackageEntries (SimpleHost)
|
|
446
446
|
fix: true
|
|
447
|
-
[32m✓[39m [2mfixes missing entries (
|
|
448
|
-
[32m✓[39m [2mfixes missing nested entries (
|
|
447
|
+
[32m✓[39m [2mfixes missing entries (11 ms)[22m
|
|
448
|
+
[32m✓[39m [2mfixes missing nested entries (4 ms)[22m
|
|
449
449
|
[32m✓[39m [2mdoesn't error for nested entries that are defined (1 ms)[22m
|
|
450
|
-
[32m✓[39m [2merrors for keys that are missing (
|
|
451
|
-
[32m✓[39m [2mhandles both entries and entriesExist (
|
|
450
|
+
[32m✓[39m [2merrors for keys that are missing (7 ms)[22m
|
|
451
|
+
[32m✓[39m [2mhandles both entries and entriesExist (18 ms)[22m
|
|
452
452
|
expectPackageEntries (CachingHost)
|
|
453
453
|
fix: true
|
|
454
|
-
[32m✓[39m [2mfixes missing entries (
|
|
455
|
-
[32m✓[39m [2mfixes missing nested entries (
|
|
456
|
-
[32m✓[39m [2mdoesn't error for nested entries that are defined (
|
|
457
|
-
[32m✓[39m [2merrors for keys that are missing (
|
|
458
|
-
[32m✓[39m [2mhandles both entries and entriesExist (
|
|
454
|
+
[32m✓[39m [2mfixes missing entries (6 ms)[22m
|
|
455
|
+
[32m✓[39m [2mfixes missing nested entries (3 ms)[22m
|
|
456
|
+
[32m✓[39m [2mdoesn't error for nested entries that are defined (1 ms)[22m
|
|
457
|
+
[32m✓[39m [2merrors for keys that are missing (7 ms)[22m
|
|
458
|
+
[32m✓[39m [2mhandles both entries and entriesExist (13 ms)[22m
|
|
459
459
|
|
|
460
460
|
[0m[7m[1m[32m PASS [39m[22m[27m[0m [2msrc/__tests__/[22m[1mnestedWorkspaces.spec.ts[22m
|
|
461
461
|
nestedWorkspaces
|
|
462
|
-
[32m✓[39m [2mchecks correctly when no packages (
|
|
463
|
-
[32m✓[39m [2mchecks correctly when one level packages (
|
|
464
|
-
[32m✓[39m [2mchecks fail when one level packages with no workspaces field (
|
|
465
|
-
[32m✓[39m [2mchecks correctly when two level packages with two level workspaces field (
|
|
466
|
-
[32m✓[39m [2mchecks fail when two level packages with one level workspaces field (
|
|
467
|
-
[32m✓[39m [2mchecks correctly when three level packages with three level workspaces field (
|
|
462
|
+
[32m✓[39m [2mchecks correctly when no packages (11 ms)[22m
|
|
463
|
+
[32m✓[39m [2mchecks correctly when one level packages (5 ms)[22m
|
|
464
|
+
[32m✓[39m [2mchecks fail when one level packages with no workspaces field (4 ms)[22m
|
|
465
|
+
[32m✓[39m [2mchecks correctly when two level packages with two level workspaces field (5 ms)[22m
|
|
466
|
+
[32m✓[39m [2mchecks fail when two level packages with one level workspaces field (4 ms)[22m
|
|
467
|
+
[32m✓[39m [2mchecks correctly when three level packages with three level workspaces field (4 ms)[22m
|
|
468
468
|
|
|
469
469
|
[0m[7m[1m[32m PASS [39m[22m[27m[0m [2msrc/__tests__/[22m[1mrequireDependency.spec.ts[22m
|
|
470
470
|
requireDependency
|
|
471
|
-
[32m✓[39m [2mchecks correctly (
|
|
472
|
-
[32m✓[39m [2mfixes correctly (
|
|
471
|
+
[32m✓[39m [2mchecks correctly (10 ms)[22m
|
|
472
|
+
[32m✓[39m [2mfixes correctly (13 ms)[22m
|
|
473
473
|
|
|
474
474
|
[2mconsole.log[22m
|
|
475
|
-
[34mpackage[39m (/tmp/tmp-
|
|
475
|
+
[34mpackage[39m (/tmp/tmp-2976-MvagtEG5A8Mu)
|
|
476
476
|
[2m[22m
|
|
477
477
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
478
478
|
|
|
@@ -482,7 +482,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
482
482
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
483
483
|
|
|
484
484
|
[2mconsole.log[22m
|
|
485
|
-
[34mpackage-unknown-keys[39m (/tmp/tmp-
|
|
485
|
+
[34mpackage-unknown-keys[39m (/tmp/tmp-2976-Vge61QNK7r8o)
|
|
486
486
|
[2m[22m
|
|
487
487
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
488
488
|
|
|
@@ -492,7 +492,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
492
492
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
493
493
|
|
|
494
494
|
[2mconsole.log[22m
|
|
495
|
-
[34mpackage[39m (/tmp/tmp-
|
|
495
|
+
[34mpackage[39m (/tmp/tmp-2976-XrBjA5HEJUPD)
|
|
496
496
|
[2m[22m
|
|
497
497
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
498
498
|
|
|
@@ -502,7 +502,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
502
502
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
503
503
|
|
|
504
504
|
[2mconsole.log[22m
|
|
505
|
-
[34mpackage[39m (/tmp/tmp-
|
|
505
|
+
[34mpackage[39m (/tmp/tmp-2976-q2usCSUDsuTp)
|
|
506
506
|
[2m[22m
|
|
507
507
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
508
508
|
|
|
@@ -512,7 +512,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
512
512
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
513
513
|
|
|
514
514
|
[2mconsole.log[22m
|
|
515
|
-
[34mpackage-unknown-keys[39m (/tmp/tmp-
|
|
515
|
+
[34mpackage-unknown-keys[39m (/tmp/tmp-2976-T5m7ZleRtZkD)
|
|
516
516
|
[2m[22m
|
|
517
517
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
518
518
|
|
|
@@ -522,7 +522,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
522
522
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
523
523
|
|
|
524
524
|
[2mconsole.log[22m
|
|
525
|
-
[34mpackage[39m (/tmp/tmp-
|
|
525
|
+
[34mpackage[39m (/tmp/tmp-2976-gNn1Gl4feJ5k)
|
|
526
526
|
[2m[22m
|
|
527
527
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
528
528
|
|
|
@@ -534,25 +534,25 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
534
534
|
[0m[7m[1m[32m PASS [39m[22m[27m[0m [2msrc/__tests__/[22m[1mpackageOrder.spec.ts[22m
|
|
535
535
|
expectPackageOrder (SimpleHost)
|
|
536
536
|
fix: true
|
|
537
|
-
[32m✓[39m [2mfixes order for expected keys (
|
|
538
|
-
[32m✓[39m [2mfixes order for unexpected keys (
|
|
539
|
-
[32m✓[39m [2mfixes order using function (
|
|
540
|
-
[32m✓[39m [2mdoes nothing if already order (
|
|
537
|
+
[32m✓[39m [2mfixes order for expected keys (12 ms)[22m
|
|
538
|
+
[32m✓[39m [2mfixes order for unexpected keys (12 ms)[22m
|
|
539
|
+
[32m✓[39m [2mfixes order using function (4 ms)[22m
|
|
540
|
+
[32m✓[39m [2mdoes nothing if already order (1 ms)[22m
|
|
541
541
|
expectPackageOrder (CachingHost)
|
|
542
542
|
fix: true
|
|
543
|
-
[32m✓[39m [2mfixes order for expected keys (
|
|
544
|
-
[32m✓[39m [2mfixes order for unexpected keys (
|
|
545
|
-
[32m✓[39m [2mfixes order using function (
|
|
546
|
-
[32m✓[39m [2mdoes nothing if already order (
|
|
543
|
+
[32m✓[39m [2mfixes order for expected keys (5 ms)[22m
|
|
544
|
+
[32m✓[39m [2mfixes order for unexpected keys (4 ms)[22m
|
|
545
|
+
[32m✓[39m [2mfixes order using function (11 ms)[22m
|
|
546
|
+
[32m✓[39m [2mdoes nothing if already order (2 ms)[22m
|
|
547
547
|
|
|
548
548
|
[0m[7m[1m[32m PASS [39m[22m[27m[0m [2msrc/__tests__/[22m[1mconsistentDependencies.spec.ts[22m
|
|
549
549
|
consistentDependencies
|
|
550
|
-
[32m✓[39m [2mchecks correctly (
|
|
551
|
-
[32m✓[39m [2mfixes correctly (
|
|
552
|
-
[32m✓[39m [2mignores ignored dependencies (
|
|
550
|
+
[32m✓[39m [2mchecks correctly (11 ms)[22m
|
|
551
|
+
[32m✓[39m [2mfixes correctly (3 ms)[22m
|
|
552
|
+
[32m✓[39m [2mignores ignored dependencies (2 ms)[22m
|
|
553
553
|
|
|
554
554
|
[2mconsole.log[22m
|
|
555
|
-
[34mrootProject[39m (/tmp/tmp-
|
|
555
|
+
[34mrootProject[39m (/tmp/tmp-2976-I61ERqqaEShk)
|
|
556
556
|
[2m[22m
|
|
557
557
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
558
558
|
|
|
@@ -562,7 +562,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
562
562
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
563
563
|
|
|
564
564
|
[2mconsole.log[22m
|
|
565
|
-
[34mrootProject[39m (/tmp/tmp-
|
|
565
|
+
[34mrootProject[39m (/tmp/tmp-2976-55snlAN5is4i)
|
|
566
566
|
[2m[22m
|
|
567
567
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
568
568
|
|
|
@@ -572,7 +572,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
572
572
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
573
573
|
|
|
574
574
|
[2mconsole.log[22m
|
|
575
|
-
[34mrootProject[39m (/tmp/tmp-
|
|
575
|
+
[34mrootProject[39m (/tmp/tmp-2976-sNH5g94pvfKL)
|
|
576
576
|
[2m[22m
|
|
577
577
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
578
578
|
|
|
@@ -582,7 +582,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
582
582
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
583
583
|
|
|
584
584
|
[2mconsole.log[22m
|
|
585
|
-
[34mrootProject[39m (/tmp/tmp-
|
|
585
|
+
[34mrootProject[39m (/tmp/tmp-2976-zKOZu5O4UNGB)
|
|
586
586
|
[2m[22m
|
|
587
587
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
588
588
|
|
|
@@ -594,15 +594,15 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
594
594
|
[0m[7m[1m[32m PASS [39m[22m[27m[0m [2msrc/__tests__/[22m[1mfileContents.spec.ts[22m
|
|
595
595
|
fileContents (SimpleHost)
|
|
596
596
|
fix: true
|
|
597
|
-
[32m✓[39m [2mfixes missing file (
|
|
598
|
-
[32m✓[39m [2mfixes missing nested file (
|
|
597
|
+
[32m✓[39m [2mfixes missing file (9 ms)[22m
|
|
598
|
+
[32m✓[39m [2mfixes missing nested file (3 ms)[22m
|
|
599
599
|
fileContents (CachingHost)
|
|
600
600
|
fix: true
|
|
601
|
-
[32m✓[39m [2mfixes missing file (
|
|
602
|
-
[32m✓[39m [2mfixes missing nested file (
|
|
601
|
+
[32m✓[39m [2mfixes missing file (5 ms)[22m
|
|
602
|
+
[32m✓[39m [2mfixes missing nested file (3 ms)[22m
|
|
603
603
|
|
|
604
604
|
[2mconsole.log[22m
|
|
605
|
-
[34mfoo-lib[39m (/tmp/tmp-
|
|
605
|
+
[34mfoo-lib[39m (/tmp/tmp-2976-dw7A1A2SqE1Z)
|
|
606
606
|
[2m[22m
|
|
607
607
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
608
608
|
|
|
@@ -612,7 +612,7 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
612
612
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
613
613
|
|
|
614
614
|
[2mconsole.log[22m
|
|
615
|
-
[34mfoo-lib[39m (/tmp/tmp-
|
|
615
|
+
[34mfoo-lib[39m (/tmp/tmp-2976-DNuNV98nJFPF)
|
|
616
616
|
[2m[22m
|
|
617
617
|
[2m [2mat WorkspaceContextImpl.print ([22m[2m../core/src/PackageContext.ts[2m:133:13)[22m[2m[22m
|
|
618
618
|
|
|
@@ -624,15 +624,15 @@ ts-jest[ts-compiler] (WARN) Unable to process '/home/runner/work/monorepolint/mo
|
|
|
624
624
|
[0m[7m[1m[32m PASS [39m[22m[27m[0m [2msrc/__tests__/[22m[1malphabeticalScripts.spec.ts[22m
|
|
625
625
|
alphabeticalScripts (SimpleHost)
|
|
626
626
|
fix: true
|
|
627
|
-
[32m✓[39m [2mfixes unsorted scripts (
|
|
628
|
-
[32m✓[39m [2mdoes nothing if already sorted (
|
|
627
|
+
[32m✓[39m [2mfixes unsorted scripts (12 ms)[22m
|
|
628
|
+
[32m✓[39m [2mdoes nothing if already sorted (1 ms)[22m
|
|
629
629
|
alphabeticalScripts (CachingHost)
|
|
630
630
|
fix: true
|
|
631
|
-
[32m✓[39m [2mfixes unsorted scripts (
|
|
632
|
-
[32m✓[39m [2mdoes nothing if already sorted (
|
|
631
|
+
[32m✓[39m [2mfixes unsorted scripts (5 ms)[22m
|
|
632
|
+
[32m✓[39m [2mdoes nothing if already sorted (7 ms)[22m
|
|
633
633
|
|
|
634
634
|
[1mTest Suites: [22m[1m[32m11 passed[39m[22m, 11 total
|
|
635
635
|
[1mTests: [22m[1m[32m116 passed[39m[22m, 116 total
|
|
636
636
|
[1mSnapshots: [22m0 total
|
|
637
|
-
[1mTime:[22m
|
|
637
|
+
[1mTime:[22m 11.597 s
|
|
638
638
|
[2mRan all test suites[22m[2m.[22m
|
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
> @monorepolint/rules@0.4.0 transpile-typescript /home/runner/work/monorepolint/monorepolint/packages/rules
|
|
3
3
|
> tsup --config ../../tsup.config.cjs
|
|
4
4
|
|
|
5
|
-
[34mCLI[39m Building entry: src/index.ts
|
|
5
|
+
[34mCLI[39m Building entry: src/index.ts, src/public/util.ts
|
|
6
6
|
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
7
7
|
[34mCLI[39m tsup v6.5.0
|
|
8
8
|
[34mCLI[39m Using tsup config: /home/runner/work/monorepolint/monorepolint/tsup.config.cjs
|
|
9
9
|
[34mCLI[39m Target: node16
|
|
10
10
|
[34mCLI[39m Cleaning output folder
|
|
11
11
|
[34mESM[39m Build start
|
|
12
|
-
[32mESM[39m [1mbuild/js/index.js
|
|
13
|
-
[32mESM[39m [1mbuild/js/
|
|
14
|
-
[32mESM[39m
|
|
12
|
+
[32mESM[39m [1mbuild/js/index.js [22m[32m49.84 KB[39m
|
|
13
|
+
[32mESM[39m [1mbuild/js/chunk-GMT7IGKM.js [22m[32m429.00 B[39m
|
|
14
|
+
[32mESM[39m [1mbuild/js/public/util.js [22m[32m106.00 B[39m
|
|
15
|
+
[32mESM[39m [1mbuild/js/index.js.map [22m[32m99.17 KB[39m
|
|
16
|
+
[32mESM[39m [1mbuild/js/chunk-GMT7IGKM.js.map [22m[32m1.16 KB[39m
|
|
17
|
+
[32mESM[39m [1mbuild/js/public/util.js.map [22m[32m71.00 B[39m
|
|
18
|
+
[32mESM[39m ⚡️ Build success in 47ms
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// src/util/makeRule.ts
|
|
2
|
+
var globalId = 0;
|
|
3
|
+
function makeRule({
|
|
4
|
+
name,
|
|
5
|
+
check,
|
|
6
|
+
optionsRuntype,
|
|
7
|
+
printStats
|
|
8
|
+
}) {
|
|
9
|
+
return function(ruleEntry) {
|
|
10
|
+
const id = `${name} :: ${globalId++}`;
|
|
11
|
+
return {
|
|
12
|
+
id,
|
|
13
|
+
check: (context) => check(context, ruleEntry.options, { id }),
|
|
14
|
+
name,
|
|
15
|
+
optionsRuntype,
|
|
16
|
+
ruleEntry,
|
|
17
|
+
printStats
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
makeRule
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=chunk-GMT7IGKM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/util/makeRule.ts"],"sourcesContent":["import { Context, RuleEntry, RuleModule } from \"@monorepolint/config\";\nimport * as r from \"runtypes\";\n\nlet globalId = 0;\nexport function makeRule<T extends r.Runtype<unknown>>({\n name,\n check,\n optionsRuntype,\n printStats,\n}: {\n name: string;\n check: (context: Context, options: r.Static<T>, extra: { id: string }) => Promise<unknown> | unknown;\n optionsRuntype: T;\n printStats?: () => void;\n}): RuleFunction<T> {\n return function (ruleEntry) {\n const id = `${name} :: ${globalId++}`;\n return {\n id,\n check: (context) => check(context, ruleEntry.options, { id }),\n name,\n optionsRuntype,\n ruleEntry,\n printStats,\n };\n };\n}\n\ntype RuleFunction<T extends r.Runtype<any>> = (ruleEntry: RuleEntry<r.Static<T>>) => RuleModule<T>;\n"],"mappings":";AAGA,IAAI,WAAW;AACR,SAAS,SAAuC;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKoB;AAClB,SAAO,SAAU,WAAW;AAC1B,UAAM,KAAK,GAAG,WAAW;AACzB,WAAO;AAAA,MACL;AAAA,MACA,OAAO,CAAC,YAAY,MAAM,SAAS,UAAU,SAAS,EAAE,GAAG,CAAC;AAAA,MAC5D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
package/build/js/index.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
makeRule
|
|
3
|
+
} from "./chunk-GMT7IGKM.js";
|
|
4
|
+
|
|
1
5
|
// src/alphabeticalDependencies.ts
|
|
2
6
|
import * as r from "runtypes";
|
|
3
7
|
|
|
@@ -41,27 +45,6 @@ function createIncorrectOrderErrorMessage(block, packageName) {
|
|
|
41
45
|
return `Incorrect order of ${block} in ${packageName}'s package.json`;
|
|
42
46
|
}
|
|
43
47
|
|
|
44
|
-
// src/util/makeRule.ts
|
|
45
|
-
var globalId = 0;
|
|
46
|
-
function makeRule({
|
|
47
|
-
name,
|
|
48
|
-
check,
|
|
49
|
-
optionsRuntype,
|
|
50
|
-
printStats
|
|
51
|
-
}) {
|
|
52
|
-
return function(ruleEntry) {
|
|
53
|
-
const id = `${name} :: ${globalId++}`;
|
|
54
|
-
return {
|
|
55
|
-
id,
|
|
56
|
-
check: (context) => check(context, ruleEntry.options, { id }),
|
|
57
|
-
name,
|
|
58
|
-
optionsRuntype,
|
|
59
|
-
ruleEntry,
|
|
60
|
-
printStats
|
|
61
|
-
};
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
48
|
// src/alphabeticalDependencies.ts
|
|
66
49
|
var Options = r.Undefined;
|
|
67
50
|
var alphabeticalDependencies = makeRule({
|
package/build/js/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/alphabeticalDependencies.ts","../../src/util/checkAlpha.ts","../../src/util/makeRule.ts","../../src/alphabeticalScripts.ts","../../src/bannedDependencies.ts","../../src/util/packageDependencyGraphService.ts","../../src/consistentDependencies.ts","../../src/consistentVersions.ts","../../src/fileContents.ts","../../src/mustSatisfyPeerDependencies.ts","../../src/packageOrder.ts","../../src/packageEntry.ts","../../src/packageScript.ts","../../src/standardTsconfig.ts","../../src/nestedWorkspaces.ts","../../src/requireDependency.ts"],"sourcesContent":["/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport * as r from \"runtypes\";\nimport { checkAlpha } from \"./util/checkAlpha.js\";\nimport { makeRule } from \"./util/makeRule.js\";\nconst Options = r.Undefined;\n\nexport const alphabeticalDependencies = makeRule({\n name: \"alphabeticalDependencies\",\n check: (context) => {\n checkAlpha(context, \"dependencies\");\n checkAlpha(context, \"devDependencies\");\n checkAlpha(context, \"peerDependencies\");\n },\n optionsRuntype: Options,\n});\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { diff } from \"jest-diff\";\n\nexport function checkAlpha(\n context: Context,\n block: \"dependencies\" | \"devDependencies\" | \"peerDependencies\" | \"scripts\"\n) {\n const packageJson = context.getPackageJson();\n const packagePath = context.getPackageJsonPath();\n\n const blockToSort = packageJson[block];\n\n if (blockToSort === undefined) {\n return;\n }\n\n const actualOrder = Object.keys(blockToSort);\n const expectedOrder = actualOrder.slice().sort(); // sort mutates, so we need to copy the previous result\n\n if (!arrayOrderCompare(actualOrder, expectedOrder)) {\n context.addError({\n file: packagePath,\n message: createIncorrectOrderErrorMessage(block, packageJson.name!),\n longMessage: diff(expectedOrder, actualOrder, { expand: true }),\n fixer: () => {\n const expectedDependencies: Record<string, string> = {};\n\n expectedOrder.forEach((dep) => {\n expectedDependencies[dep] = blockToSort[dep];\n });\n\n const newPackageJson = { ...packageJson };\n newPackageJson[block] = expectedDependencies;\n context.host.writeJson(packagePath, newPackageJson);\n },\n });\n }\n}\n\nfunction arrayOrderCompare(a: ReadonlyArray<string>, b: ReadonlyArray<string>) {\n for (let index = 0; index < a.length; index++) {\n if (a[index] !== b[index]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function createIncorrectOrderErrorMessage(block: string, packageName: string) {\n return `Incorrect order of ${block} in ${packageName}'s package.json`;\n}\n","import { Context, RuleEntry, RuleModule } from \"@monorepolint/config\";\nimport * as r from \"runtypes\";\n\nlet globalId = 0;\nexport function makeRule<T extends r.Runtype<unknown>>({\n name,\n check,\n optionsRuntype,\n printStats,\n}: {\n name: string;\n check: (context: Context, options: r.Static<T>, extra: { id: string }) => Promise<unknown> | unknown;\n optionsRuntype: T;\n printStats?: () => void;\n}): RuleFunction<T> {\n return function (ruleEntry) {\n const id = `${name} :: ${globalId++}`;\n return {\n id,\n check: (context) => check(context, ruleEntry.options, { id }),\n name,\n optionsRuntype,\n ruleEntry,\n printStats,\n };\n };\n}\n\ntype RuleFunction<T extends r.Runtype<any>> = (ruleEntry: RuleEntry<r.Static<T>>) => RuleModule<T>;\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport * as r from \"runtypes\";\nimport { checkAlpha } from \"./util/checkAlpha.js\";\nimport { makeRule } from \"./util/makeRule.js\";\nconst Options = r.Undefined;\n\nexport const alphabeticalScripts = makeRule({\n name: \"alphabeticalScripts\",\n check: (context) => {\n checkAlpha(context, \"scripts\");\n },\n optionsRuntype: Options,\n});\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { matchesAnyGlob } from \"@monorepolint/utils\";\nimport { AggregateTiming } from \"@monorepolint/utils\";\nimport * as path from \"node:path\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\nimport { IPackageDependencyGraphNode, PackageDependencyGraphService } from \"./util/packageDependencyGraphService.js\";\n// FIXME: This rule is messed. bannedTransitiveDependencies doesnt glob\n\nconst bannedDepGlobsField = r.Union(\n r.Array(r.String),\n r.Record({\n glob: r.Array(r.String).optional(),\n exact: r.Array(r.String).optional(),\n })\n);\n\nconst Options = r.Union(\n r.Record({\n bannedDependencies: bannedDepGlobsField,\n bannedTransitiveDependencies: r.Undefined.optional(),\n }),\n\n r.Record({\n bannedDependencies: bannedDepGlobsField.optional(),\n bannedTransitiveDependencies: r.Array(r.String),\n }),\n\n r.Record({\n bannedDependencies: bannedDepGlobsField.optional(),\n bannedTransitiveDependencies: r.Array(r.String).optional(),\n })\n);\n\nexport type Options = r.Static<typeof Options>;\n\n/**\n * We use this locally to avoid making a billion sets. Because check is called once per package\n * (with the exact same config object reference) we can save quite a bit of time by reusing this cache.\n */\nconst setCache = new Map<ReadonlyArray<string>, Set<string>>();\n\nconst aggregateTiming = new AggregateTiming(\":bannedDependencies stats\");\n\nexport const bannedDependencies = makeRule({\n name: \"bannedDependencies\",\n check: (context, opts, extra) => {\n aggregateTiming.start(extra?.id ?? \"unknown id\");\n\n const packageJson = context.getPackageJson();\n const packagePath = context.getPackageJsonPath();\n\n const curDeps = packageJson.dependencies && Object.keys(packageJson.dependencies);\n const curDevDeps = packageJson.devDependencies && Object.keys(packageJson.devDependencies);\n const curPeerDeps = packageJson.peerDependencies && Object.keys(packageJson.peerDependencies);\n\n const { bannedDependencies: banned, bannedTransitiveDependencies: transitives } = opts;\n\n const globs = banned && (Array.isArray(banned) ? banned : banned.glob);\n const exacts = banned && (Array.isArray(banned) ? undefined : banned.exact);\n\n const violations = new Set<string>();\n\n if (globs) {\n if (curDeps) populateProblemsGlobs(globs, curDeps, violations);\n if (curDevDeps) populateProblemsGlobs(globs, curDevDeps, violations);\n if (curPeerDeps) populateProblemsGlobs(globs, curPeerDeps, violations);\n }\n\n if (exacts) {\n let set = setCache.get(exacts);\n if (set === undefined) {\n set = new Set(exacts);\n setCache.set(exacts, set);\n }\n if (curDeps) populateProblemsExact(set, curDeps, violations);\n if (curDevDeps) populateProblemsExact(set, curDevDeps, violations);\n if (curPeerDeps) populateProblemsExact(set, curPeerDeps, violations);\n }\n\n if (violations.size > 0) {\n context.addError({\n file: packagePath,\n message:\n `Found ${violations.size} banned dependencies of package.json:\\n\\t` +\n Array.from(violations)\n .map((v) => `'${v}'`)\n .join(\", \"),\n });\n }\n\n if (transitives) {\n let set = setCache.get(transitives);\n if (set === undefined) {\n set = new Set(transitives);\n setCache.set(transitives, set);\n }\n checkTransitives(context, set);\n }\n\n aggregateTiming.stop();\n },\n optionsRuntype: Options,\n printStats: () => {\n aggregateTiming.printResults();\n },\n});\n\nfunction populateProblemsExact(banned: Set<string>, dependencies: ReadonlyArray<string>, violations: Set<string>) {\n for (const dependency of dependencies) {\n if (banned.has(dependency)) {\n violations.add(dependency);\n }\n }\n}\n\nfunction populateProblemsGlobs(\n bannedDependencyGlobs: ReadonlyArray<string>,\n dependencies: ReadonlyArray<string>,\n violations: Set<string>\n) {\n for (const dependency of dependencies) {\n if (matchesAnyGlob(dependency, bannedDependencyGlobs)) {\n violations.add(dependency);\n }\n }\n}\n\n// This function is slow. God help you if you use this on a big repo\nfunction checkTransitives(context: Context, banned: Set<string>) {\n const graphService = new PackageDependencyGraphService();\n const root = graphService.buildDependencyGraph(path.resolve(context.getPackageJsonPath()), context.host);\n for (const { dependencies, importPath } of graphService.traverse(root)) {\n for (const [dependency] of dependencies) {\n if (banned.has(dependency)) {\n // Remove the starting package since it's obvious in CLI output.\n const [, ...importPathWithoutRoot] = importPath;\n const pathing = [...importPathWithoutRoot.map(nameOrPackageJsonPath), dependency].join(\" -> \");\n\n context.addError({\n file: root.paths.packageJsonPath,\n message: `Banned transitive dependencies in repo: ${pathing}`,\n });\n }\n }\n }\n}\n\nfunction nameOrPackageJsonPath(node: IPackageDependencyGraphNode): string {\n return node.packageJson.name ?? node.paths.packageJsonPath;\n}\n","/**\n * @license Copyright 2019 Palantir Technologies, Inc. All rights reserved.\n */\n\nimport { Host, PackageJson } from \"@monorepolint/utils\";\nimport * as path from \"node:path\";\nimport resolvePackagePath from \"resolve-package-path\";\n\n/** Interface for a node in a package dependency graph. */\nexport interface IPackageDependencyGraphNode {\n packageJson: PackageJson;\n dependencies: Map<string, IPackageDependencyGraphNode>;\n paths: {\n packageJsonPath: string;\n rootDirectory: string;\n };\n}\n\n/** Service abstraction for constructing and traversing package dependency graphs. */\nexport interface IPackageDependencyGraphService {\n /** Construct a graph of package dependencies. */\n buildDependencyGraph(packageJsonPath: string, host: Host, maxDepth?: number): IPackageDependencyGraphNode;\n\n /** Traverse a package dependency graph. */\n traverse(\n root: IPackageDependencyGraphNode,\n opts?: {\n /** Traverse each unique path to a given package (potentially slow). */\n traverseAllPaths?: boolean;\n }\n ): IterableIterator<IPackageDependencyGraphNode & { importPath: IPackageDependencyGraphNode[] }>;\n}\n\n/** Default implementation of the package dependency graph service. */\nexport class PackageDependencyGraphService implements IPackageDependencyGraphService {\n /** Construct a graph of package dependencies and return the root node. */\n public buildDependencyGraph(\n startPackageJsonPath: string,\n host: Host,\n maxDepth?: number\n ): IPackageDependencyGraphNode {\n const nodes = new Map<string, IPackageDependencyGraphNode>();\n const visit = (packageJsonPath: string, currentDepth: number): IPackageDependencyGraphNode => {\n if (nodes.has(packageJsonPath)) {\n return nodes.get(packageJsonPath)!;\n }\n\n const packageJson: PackageJson = host.readJson(packageJsonPath);\n const node: IPackageDependencyGraphNode = {\n packageJson,\n dependencies: new Map<string, IPackageDependencyGraphNode>(),\n paths: {\n packageJsonPath,\n rootDirectory: path.dirname(packageJsonPath),\n },\n };\n\n // It's important that we register the node before visiting its dependencies to avoid cycles\n nodes.set(packageJsonPath, node);\n\n const nextDepth = currentDepth + 1;\n if (maxDepth == null || nextDepth <= maxDepth) {\n const dependencies = packageJson.dependencies != null ? Object.keys(packageJson.dependencies) : [];\n for (const dependency of dependencies) {\n const dependencyPackageJsonPath = resolvePackagePath(dependency, node.paths.rootDirectory);\n if (dependencyPackageJsonPath == null) {\n throw new Error(`Could not resolve ${dependency} from ${node.paths.rootDirectory}`);\n }\n\n node.dependencies.set(dependency, visit(dependencyPackageJsonPath, nextDepth));\n }\n }\n\n return node;\n };\n\n return visit(startPackageJsonPath, 0);\n }\n\n /** Traverse a package dependency graph with an iterator. */\n public *traverse(\n root: IPackageDependencyGraphNode,\n opts = { traverseAllPaths: false }\n ): IterableIterator<IPackageDependencyGraphNode & { importPath: IPackageDependencyGraphNode[] }> {\n const visited = new Set<IPackageDependencyGraphNode>();\n\n function* visit(\n node: IPackageDependencyGraphNode,\n importPath: IPackageDependencyGraphNode[] = []\n ): IterableIterator<IPackageDependencyGraphNode & { importPath: IPackageDependencyGraphNode[] }> {\n // Don't visit a package more than once unless explicitly asked to traverse all paths\n if (!opts.traverseAllPaths && visited.has(node)) {\n return;\n }\n\n // Break cycles when traversing all paths\n if (importPath.indexOf(node) !== -1) {\n return;\n }\n\n // Visit the node\n visited.add(node);\n importPath = [...importPath, node];\n yield { ...node, importPath };\n\n // Recursively visit the node's dependencies\n for (const dependency of node.dependencies.values()) {\n yield* visit(dependency, importPath);\n }\n }\n\n yield* visit(root);\n }\n}\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { diff } from \"jest-diff\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\nconst Options = r\n .Record({\n ignoredDependencies: r.Array(r.String).Or(r.Undefined),\n })\n .Or(r.Undefined);\nexport type Options = r.Static<typeof Options>;\n\nconst skippedVersions = [\"*\", \"latest\"];\n\nexport const consistentDependencies = makeRule({\n name: \"consistentDependencies\",\n check: (context, args) => {\n checkDeps(context, args, \"dependencies\");\n checkDeps(context, args, \"devDependencies\");\n // we don't check peer deps since they can be more lenient\n },\n optionsRuntype: Options,\n});\n\nfunction checkDeps(context: Context, args: Options, block: \"dependencies\" | \"devDependencies\" | \"peerDependencies\") {\n const packageJson = context.getPackageJson();\n const packagePath = context.getPackageJsonPath();\n const dependencies = packageJson[block];\n\n const workspacePackageJson = context.getWorkspaceContext().getPackageJson();\n const workspaceDependencies = workspacePackageJson[block];\n\n const ignoredDeps = args?.ignoredDependencies ?? [];\n const depsToCheck =\n workspaceDependencies == null || ignoredDeps.length === 0\n ? workspaceDependencies\n : omit(workspaceDependencies, ignoredDeps);\n\n if (dependencies === undefined || depsToCheck === undefined) {\n return;\n }\n\n const expectedDependencies = {\n ...dependencies,\n ...filterKeys(depsToCheck, dependencies),\n };\n\n if (JSON.stringify(dependencies) !== JSON.stringify(expectedDependencies)) {\n context.addError({\n file: packagePath,\n message: `Inconsistent ${block} with root in package.json`,\n longMessage: diff(expectedDependencies, dependencies, { expand: true }),\n fixer: () => {\n const newPackageJson = { ...packageJson };\n newPackageJson[block] = expectedDependencies;\n context.host.writeJson(packagePath, newPackageJson);\n },\n });\n }\n}\n\nfunction filterKeys(ob: Record<string, string>, filterOb: Record<string, string>) {\n const newOb: Record<string, any> = {};\n\n for (const key of Object.keys(filterOb)) {\n if (ob[key] !== undefined && skippedVersions.indexOf(filterOb[key]) === -1) {\n newOb[key] = ob[key];\n }\n }\n\n return newOb;\n}\n\nfunction omit<T>(obj: Record<string, T>, keysToOmit: readonly string[]): Record<string, T> {\n const newObj: Record<string, T> = {};\n\n const filtered = Object.entries(obj).filter(([key]) => !keysToOmit.includes(key));\n for (const [key, value] of filtered) {\n newObj[key] = value;\n }\n\n return newObj;\n}\n","/*!\n * Copyright 2020 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { mutateJson, PackageJson } from \"@monorepolint/utils\";\nimport * as r from \"runtypes\";\nimport { coerce, SemVer } from \"semver\";\nimport { makeRule } from \"./util/makeRule.js\";\nexport const Options = r.Record({\n matchDependencyVersions: r.Dictionary(r.Union(r.String, r.Array(r.String))),\n});\n\nexport type Options = r.Static<typeof Options>;\n\nexport const consistentVersions = makeRule({\n name: \"consistentVersions\",\n check: checkConsistentVersions,\n optionsRuntype: Options,\n});\n\nfunction checkConsistentVersions(context: Context, options: Options) {\n for (const [dependencyPackageName, expectedPackageDependencyValue] of Object.entries(\n options.matchDependencyVersions\n )) {\n if (Array.isArray(expectedPackageDependencyValue)) {\n ensurePackageMatchesSomeVersion(context, dependencyPackageName, expectedPackageDependencyValue);\n } else {\n ensurePackageIsCorrectVersion(context, dependencyPackageName, expectedPackageDependencyValue);\n }\n }\n}\n\nconst ensurePackageIsCorrectVersion = (\n context: Context,\n dependencyPackageName: string,\n expectedPackageDependencyValue: string\n) => {\n const packageJson = context.getPackageJson();\n const packageJsonPath = context.getPackageJsonPath();\n\n const expectedPackageDependencyVersion = coerce(expectedPackageDependencyValue);\n if (expectedPackageDependencyVersion == null) {\n throw new Error(\n `Malformed expected package dependency version defined in monorepolint configuration: ${dependencyPackageName} @ '${expectedPackageDependencyValue}'`\n );\n }\n\n const actualPackageDependencyValue = packageJson.dependencies && packageJson.dependencies[dependencyPackageName];\n const actualPackageDependencyVersion = coerce(actualPackageDependencyValue);\n if (\n actualPackageDependencyVersion != null &&\n actualPackageDependencyVersion.raw !== expectedPackageDependencyVersion.raw\n ) {\n context.addError({\n file: packageJsonPath,\n message: `Expected dependency on ${dependencyPackageName} to match version defined in monorepolint configuration '${expectedPackageDependencyValue}', got '${actualPackageDependencyValue}' instead.`,\n fixer: () =>\n mutateJson<PackageJson>(packageJsonPath, context.host, (input) => {\n input.dependencies![dependencyPackageName] = expectedPackageDependencyValue;\n return input;\n }),\n });\n }\n\n const actualPackageDevDependencyValue =\n packageJson.devDependencies && packageJson.devDependencies[dependencyPackageName];\n const actualPackageDevDependencyVersion = coerce(actualPackageDevDependencyValue);\n if (\n actualPackageDevDependencyVersion != null &&\n actualPackageDevDependencyVersion.raw !== expectedPackageDependencyVersion.raw\n ) {\n context.addError({\n file: packageJsonPath,\n message: `Expected devDependency on ${dependencyPackageName} to match version defined in monorepolint configuration '${expectedPackageDependencyValue}', got '${actualPackageDevDependencyValue}' instead`,\n fixer: () =>\n mutateJson<PackageJson>(packageJsonPath, context.host, (input) => {\n input.devDependencies![dependencyPackageName] = expectedPackageDependencyValue;\n return input;\n }),\n });\n }\n};\n\nconst ensurePackageMatchesSomeVersion = (\n context: Context,\n dependencyPackageName: string,\n acceptedPackageDependencyValues: string[]\n) => {\n const packageJson = context.getPackageJson();\n const packageJsonPath = context.getPackageJsonPath();\n\n const acceptedPackageDependencyVersions: SemVer[] = acceptedPackageDependencyValues.map(\n (acceptedPackageDependencyValue) => {\n const acceptedPackageDependencyVersion = coerce(acceptedPackageDependencyValue);\n if (acceptedPackageDependencyVersion == null) {\n throw new Error(\n `Malformed accepted package dependency version defined in monorepolint configuration: ${dependencyPackageName} @ '${acceptedPackageDependencyValue}'`\n );\n }\n return acceptedPackageDependencyVersion;\n }\n );\n\n const actualPackageDependencyValue = packageJson.dependencies && packageJson.dependencies[dependencyPackageName];\n const actualPackageDependencyVersion = coerce(actualPackageDependencyValue);\n if (\n actualPackageDependencyVersion != null &&\n acceptedPackageDependencyVersions.every(\n (acceptedPackageDependencyVersion) => actualPackageDependencyVersion.raw !== acceptedPackageDependencyVersion.raw\n )\n ) {\n context.addError({\n file: packageJsonPath,\n message: `Expected dependency on ${dependencyPackageName} to match one of '${JSON.stringify(\n acceptedPackageDependencyValues\n )}', got '${actualPackageDependencyValue}' instead.`,\n });\n }\n\n const actualPackageDevDependencyValue =\n packageJson.devDependencies && packageJson.devDependencies[dependencyPackageName];\n const actualPackageDevDependencyVersion = coerce(actualPackageDevDependencyValue);\n if (\n actualPackageDevDependencyVersion != null &&\n acceptedPackageDependencyVersions.every(\n (acceptedPackageDependencyVersion) =>\n actualPackageDevDependencyVersion.raw !== acceptedPackageDependencyVersion.raw\n )\n ) {\n context.addError({\n file: packageJsonPath,\n message: `Expected devDependency on ${dependencyPackageName} to match one of '${JSON.stringify(\n acceptedPackageDependencyValues\n )}', got '${actualPackageDevDependencyValue}' instead.`,\n });\n }\n};\n","/*!\n * Copyright 2023 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { diff } from \"jest-diff\";\nimport * as path from \"path\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\nconst Options = r.Union(\n r.Record({\n file: r.String,\n generator: r.Function,\n template: r.Undefined.optional(),\n templateFile: r.Undefined.optional(),\n }),\n\n r.Record({\n file: r.String,\n generator: r.Undefined.optional(),\n template: r.String,\n templateFile: r.Undefined.optional(),\n }),\n\n r.Record({\n file: r.String,\n generator: r.Undefined.optional(),\n template: r.Undefined.optional(),\n templateFile: r.String,\n })\n);\n\ntype Options = r.Static<typeof Options>;\n\nexport const fileContents = makeRule({\n name: \"fileContents\",\n check: (context, opts) => {\n const fullPath = path.join(context.packageDir, opts.file);\n const expectedContent = getExpectedContents(context, opts);\n\n const pathExists = context.host.exists(fullPath);\n const actualContent = pathExists ? context.host.readFile(fullPath, { encoding: \"utf-8\" }) : undefined;\n if (actualContent !== expectedContent) {\n context.addError({\n file: fullPath,\n message: \"Expect file contents to match\",\n longMessage: diff(expectedContent, actualContent, { expand: true }),\n fixer: () => {\n if (expectedContent === undefined) {\n if (pathExists) context.host.deleteFile(fullPath);\n } else {\n context.host.mkdir(path.dirname(fullPath), { recursive: true });\n context.host.writeFile(fullPath, expectedContent, { encoding: \"utf-8\" });\n }\n },\n });\n }\n },\n optionsRuntype: Options,\n});\n\nconst optionsCache = new Map<Options, ((context: Context) => string | undefined) | string | undefined>();\n\nfunction getExpectedContents(context: Context, opts: Options) {\n // we need to use has because undefined is a valid value in the cache\n if (optionsCache.has(opts)) {\n const cachedEntry = optionsCache.get(opts);\n if (cachedEntry && typeof cachedEntry === \"function\") {\n return cachedEntry(context);\n }\n return cachedEntry;\n }\n\n if (opts.generator) {\n optionsCache.set(opts, opts.generator);\n return opts.generator(context) as string | undefined; // we have no guarentee its the right kind of function\n } else if (opts.templateFile) {\n const { packageDir: workspacePackageDir } = context.getWorkspaceContext();\n const fullPath = path.resolve(workspacePackageDir, opts.templateFile);\n const template = context.host.readFile(fullPath, { encoding: \"utf-8\" });\n\n optionsCache.set(opts, template);\n return template;\n } else {\n optionsCache.set(opts, opts.template);\n return opts.template;\n }\n}\n","/*!\n * Copyright 2020 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { Host, mutateJson, PackageJson } from \"@monorepolint/utils\";\nimport * as path from \"node:path\";\nimport * as r from \"runtypes\";\nimport { coerce } from \"semver\";\nimport resolvePackagePath from \"resolve-package-path\";\nimport { makeRule } from \"./util/makeRule.js\";\n\nconst Options = r.Union(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n dependencyWhitelist: r.Undefined,\n dependencyBlacklist: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n }),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n })\n .And(\n r.Partial({\n dependencyWhitelist: r.Undefined,\n dependencyBlacklist: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n dependencyWhitelist: r.Array(r.String),\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n dependencyBlacklist: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n dependencyBlacklist: r.Array(r.String),\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n dependencyWhitelist: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n dependencyWhitelist: r.Undefined,\n dependencyBlacklist: r.Undefined,\n })\n ),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n dependencyWhitelist: r.Array(r.String),\n })\n .And(\n r.Partial({\n dependencyBlacklist: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n dependencyBlacklist: r.Array(r.String),\n })\n .And(\n r.Partial({\n dependencyWhitelist: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n dependencyWhitelist: r.Undefined,\n dependencyBlacklist: r.Undefined,\n })\n ),\n r\n .Record({\n dependencyWhitelist: r.Array(r.String),\n dependencyBlacklist: r.Array(r.String),\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n dependencyWhitelist: r.Array(r.String),\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n dependencyBlacklist: r.Undefined,\n })\n ),\n r\n .Record({\n dependencyBlacklist: r.Array(r.String),\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n dependencyWhitelist: r.Undefined,\n })\n ),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n dependencyWhitelist: r.Array(r.String),\n dependencyBlacklist: r.Array(r.String),\n })\n .And(\n r.Partial({\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n dependencyWhitelist: r.Array(r.String),\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n dependencyBlacklist: r.Undefined,\n })\n ),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n dependencyBlacklist: r.Array(r.String),\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n dependencyWhitelist: r.Undefined,\n })\n ),\n r\n .Record({\n dependencyWhitelist: r.Array(r.String),\n dependencyBlacklist: r.Array(r.String),\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n })\n ),\n r.Record({\n skipUnparseableRanges: r.Boolean,\n dependencyWhitelist: r.Array(r.String),\n dependencyBlacklist: r.Array(r.String),\n enforceForDevDependencies: r.Boolean,\n })\n);\n\nexport type Options = r.Static<typeof Options>;\n\nexport const mustSatisfyPeerDependencies = makeRule({\n name: \"mustSatisfyPeerDependencies\",\n check: checkSatisfyPeerDependencies,\n optionsRuntype: Options,\n});\n\n/**\n * separating on `|`, this regex allows any of the following formats:\n * - `*`\n * - `x`\n *\n * More info: https://docs.npmjs.com/about-semantic-versioning\n */\nexport const MATCH_ANY_VERSION_RANGE = /^(\\*|x)$/;\n\n/**\n * This regex allows any of the following formats:\n * - `>=15`\n * - `>=15.2`\n * - `>=15.2.1`\n * - `>=15.2.1-rc.0`\n * - `>=15.2.1+sha`\n * - `>=15.2.1-rc.0+sha`\n *\n * See https://semver.org/#spec-item-9 for details about semver formatting, and\n * https://regex101.com/r/vkijKf/1/ for a sample Regex.\n *\n * Note that the semver spec does _not_ specify npm range syntax. (`^`, `||`, `~`, `>`, etc.)\n *\n * More info: https://docs.npmjs.com/about-semantic-versioning\n */\nexport const MATCH_GREATER_OR_EQUAL_VERSION_RANGE =\n /^>= ?\\d+(?:\\.\\d+|\\.\\d+\\.\\d+(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)?$/;\n\n/**\n * This regex allows any of the following formats:\n * - `15`\n * - `^15`\n * - `15.x`\n * - `^15.x`\n * - `15.x.x`\n * - `^15.x.x`\n * - `^15.2`\n * - `^15.2.x`\n * - `^15.2.1`\n * - `^15.2.1-rc.0`\n * - `^15.2.1+sha`\n * - `^15.2.1-rc.0+sha`\n *\n * See https://semver.org/#spec-item-9 for details about semver formatting, and\n * https://regex101.com/r/vkijKf/1/ for a sample Regex.\n *\n * Note that the semver spec does _not_ specify npm range syntax. (`^`, `||`, `~`, `>`, etc.)\n *\n * More info: https://docs.npmjs.com/about-semantic-versioning\n */\nexport const MATCH_MAJOR_VERSION_RANGE =\n /^(?:\\^?\\d+|\\^?\\d+\\.x|\\^?\\d+\\.x\\.x|\\^\\d+\\.\\d+|\\^\\d+\\.\\d+\\.x|\\^\\d+\\.\\d+\\.\\d+(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)$/;\n\n/**\n * Does not currently accept `<`, `<=`, `>`, `=` or `-` for ranges (e.g. `> 2.5.1 < 3` or `1.0.0 - 1.2.0`),\n * though it will accept isolated `>=` ranges (e.g. `>=2.5.1`, but not `^1 || >=2.5.1`)\n *\n * See https://semver.org/#spec-item-9 for details about semver formatting, and\n * https://regex101.com/r/vkijKf/1/ for a sample Regex.\n *\n * Note that the semver spec does _not_ specify npm range syntax. (`^`, `||`, `~`, `>`, etc.)\n *\n * More info: https://docs.npmjs.com/about-semantic-versioning\n *\n * TODO: accept minor pins `~4.2.1`\n */\nexport const RANGE_REGEX =\n /^(\\*|x|>= ?\\d+(?:\\.\\d+|\\.\\d+\\.\\d+(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)?|\\^?\\d+(\\.x|\\.x\\.x|\\.\\d+|\\.\\d+\\.x|\\.\\d+\\.\\d+(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)?( \\|\\| \\^?\\d+(\\.x|\\.x\\.x|\\.\\d+|\\.\\d+\\.x|\\.\\d+\\.\\d+(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)?)*)$/;\n\ninterface IPeerDependencyRequirement {\n fromPackageName: string;\n range: ValidRange;\n}\n\ninterface IResolvedPeerDependencyRequirement {\n fromPeerDependencyRequirements: IPeerDependencyRequirement[];\n range: ValidRange;\n}\n\nfunction checkSatisfyPeerDependencies(context: Context, opts: Options) {\n const { dependencyBlacklist, dependencyWhitelist, enforceForDevDependencies, skipUnparseableRanges } = opts;\n const packageJsonPath = path.resolve(context.getPackageJsonPath());\n const packageJson: PackageJson = context.host.readJson(packageJsonPath);\n const packageDependencies = packageJson.dependencies || {};\n const packageDevDependencies = packageJson.devDependencies || {};\n const packagePeerDependencies = packageJson.peerDependencies || {};\n const packageName = packageJson.name || packageJsonPath;\n\n // check that no peer dependencies are also declared as regular dependencies\n for (const [peerDependencyName, peerDependencyRange] of Object.entries(packagePeerDependencies)) {\n if (shouldSkipPackage({ dependencyBlacklist, dependencyWhitelist, packageName: peerDependencyName })) {\n continue;\n }\n\n const dependencyRange = packageDependencies[peerDependencyName];\n if (dependencyRange != null) {\n context.addError({\n file: packageJsonPath,\n message:\n `[0] Package ${packageName} has overloaded ${peerDependencyName} dependencies.\\n\\t` +\n `Peer dependency '${peerDependencyRange}' and regular dependency '${dependencyRange}'.`,\n });\n }\n }\n\n // map of all inherited peer dependency requirements\n const allRequiredPeerDependencies: { [peerDependencyName: string]: IPeerDependencyRequirement[] } = {};\n\n // for each of this package's dependencies, add the dependency's peer requirements into `allRequiredPeerDependencies`\n const allDependencies = enforceForDevDependencies\n ? [...Object.keys(packageDependencies), ...Object.keys(packageDevDependencies)]\n : Object.keys(packageDependencies);\n for (const dependency of allDependencies) {\n const dependencyPackageJsonPath = resolvePackagePath(dependency, path.dirname(packageJsonPath));\n if (dependencyPackageJsonPath == null) {\n throw new Error(`Could not resolve ${dependency} from ${path.dirname(packageJsonPath)}`);\n }\n const dependencyPackageJson: PackageJson = context.host.readJson(dependencyPackageJsonPath);\n const requiredPeerDependencies = dependencyPackageJson.peerDependencies;\n if (requiredPeerDependencies == null) {\n continue;\n }\n for (const [peerDependencyName, range] of Object.entries(requiredPeerDependencies)) {\n if (shouldSkipPackage({ dependencyBlacklist, dependencyWhitelist, packageName: peerDependencyName })) {\n continue;\n }\n\n if (!isValidRange(range)) {\n const message = `Unable to parse ${dependencyPackageJson.name}'s ${peerDependencyName} peer dependency range '${range}'.`;\n if (skipUnparseableRanges) {\n context.addWarning({ file: dependencyPackageJsonPath, message });\n continue;\n }\n throw new Error(message);\n }\n if (allRequiredPeerDependencies[peerDependencyName] == null) {\n allRequiredPeerDependencies[peerDependencyName] = [];\n }\n allRequiredPeerDependencies[peerDependencyName].push({ fromPackageName: dependencyPackageJson.name!, range });\n }\n }\n\n for (const [peerDependencyName, peerDependencyRequirements] of Object.entries(allRequiredPeerDependencies)) {\n // for each inherited peer dependency, determine the strictest range\n let mostStrictPeerRequirement: IResolvedPeerDependencyRequirement = {\n fromPeerDependencyRequirements: [peerDependencyRequirements[0]],\n range: peerDependencyRequirements[0].range,\n };\n for (const peerRequirement of peerDependencyRequirements) {\n if (doesASatisfyB(mostStrictPeerRequirement.range, peerRequirement.range)) {\n continue;\n } else if (doesASatisfyB(peerRequirement.range, mostStrictPeerRequirement.range)) {\n mostStrictPeerRequirement = {\n fromPeerDependencyRequirements: [peerRequirement],\n range: peerRequirement.range,\n };\n } else {\n const maybeIntersection = findIntersection(peerRequirement.range, mostStrictPeerRequirement.range);\n if (maybeIntersection !== undefined) {\n mostStrictPeerRequirement = {\n fromPeerDependencyRequirements: [\n ...mostStrictPeerRequirement.fromPeerDependencyRequirements,\n peerRequirement,\n ],\n range: maybeIntersection,\n };\n } else {\n context.addError({\n file: packageJsonPath,\n message:\n `[1] Package ${packageName} has conflicting inherited ${peerDependencyName} peer dependencies.\\n\\t` +\n `Dependency ${peerRequirement.fromPackageName} requires '${peerRequirement.range}' but\\n\\t` +\n getMostStrictStatement(mostStrictPeerRequirement),\n });\n }\n }\n }\n\n // if this package has a dependency on an inherited peer dependency,\n // the range must be equal to or stricter than `mostStrictPeerRequirement`\n const packageDependencyRange = packageDependencies[peerDependencyName];\n if (packageDependencyRange != null) {\n if (!isValidRange(packageDependencyRange)) {\n const message = `Unable to parse ${packageName}'s ${peerDependencyName} dependency range '${packageDependencyRange}'.`;\n if (skipUnparseableRanges) {\n context.addWarning({ file: packageJsonPath, message });\n } else {\n throw new Error(message);\n }\n } else if (!doesASatisfyB(packageDependencyRange, mostStrictPeerRequirement.range)) {\n context.addError({\n file: packageJsonPath,\n message:\n `[2] Package ${packageName} dependency on ${peerDependencyName} '${packageDependencyRange}' does not satisfy inherited peer dependencies.\\n\\t` +\n getMostStrictStatement(mostStrictPeerRequirement),\n });\n }\n }\n\n // for every inherited peer dependency, this package must declare a dependency or peer dependency\n // equal to or stricter than `mostStrictPeerRequirement`\n const packagePeerDependencyRange = packagePeerDependencies[peerDependencyName];\n if (packageDependencyRange == null && packagePeerDependencyRange == null) {\n context.addError({\n file: packageJsonPath,\n message:\n `[3] Package ${packageName} is missing required ${peerDependencyName} dependency.\\n\\t` +\n getMostStrictStatement(mostStrictPeerRequirement),\n fixer: getAddDependencyTypeFixer({\n packageJsonPath,\n dependencyType: \"peerDependencies\",\n dependencyName: peerDependencyName,\n version: mostStrictPeerRequirement.range,\n host: context.host,\n }),\n });\n }\n\n // if this package has a peer dependency on an inherited peer dependency,\n // the range must be equal to or stricter than `mostStrictPeerRequirement`\n if (packagePeerDependencyRange != null) {\n if (!isValidRange(packagePeerDependencyRange)) {\n const message = `Unable to parse ${packageName}'s ${peerDependencyName} peer dependency range '${packagePeerDependencyRange}'.`;\n if (skipUnparseableRanges) {\n context.addWarning({ file: packageJsonPath, message });\n } else {\n throw new Error(message);\n }\n } else if (!doesASatisfyB(packagePeerDependencyRange, mostStrictPeerRequirement.range)) {\n context.addError({\n file: packageJsonPath,\n message:\n `[4] Package ${packageName} peer dependency on ${peerDependencyName} '${packagePeerDependencyRange}' is not strict enough.\\n\\t` +\n getMostStrictStatement(mostStrictPeerRequirement),\n fixer: getAddDependencyTypeFixer({\n packageJsonPath,\n dependencyType: \"peerDependencies\",\n dependencyName: peerDependencyName,\n version: mostStrictPeerRequirement.range,\n host: context.host,\n }),\n });\n }\n }\n }\n}\n\nfunction shouldSkipPackage({\n dependencyBlacklist,\n dependencyWhitelist,\n packageName,\n}: {\n dependencyBlacklist?: string[];\n dependencyWhitelist?: string[];\n packageName: string;\n}) {\n // blacklist should take precedance\n if (\n (dependencyBlacklist != null && dependencyBlacklist.includes(packageName)) ||\n (dependencyWhitelist != null && !dependencyWhitelist.includes(packageName))\n ) {\n return true;\n }\n return false;\n}\n\nfunction getMostStrictStatement(mostStrictPeerRequirement: IResolvedPeerDependencyRequirement) {\n if (mostStrictPeerRequirement.fromPeerDependencyRequirements.length === 1) {\n const dependencyName = mostStrictPeerRequirement.fromPeerDependencyRequirements[0].fromPackageName;\n return `Dependency ${dependencyName} requires '${mostStrictPeerRequirement.range}'.`;\n } else {\n const dependencyNames = mostStrictPeerRequirement.fromPeerDependencyRequirements\n .map((peerDependencyRequirement) => peerDependencyRequirement.fromPackageName)\n .join(\", \");\n const dependencyRequirements = mostStrictPeerRequirement.fromPeerDependencyRequirements\n .map((peerDependencyRequirement) => `'${peerDependencyRequirement.range}'`)\n .join(\", \");\n return (\n `Dependencies [${dependencyNames}] require [${dependencyRequirements}] respectively, ` +\n `resolving to '${mostStrictPeerRequirement.range}'.`\n );\n }\n}\n\n/**\n * Given two version ranges, find the maximum intersecting range\n * of `a` and `b`. `findIntersection(a,b)` should return the same\n * result as `findIntersection(b,a)`.\n *\n * NOTE: This code assumes that input version ranges match `RANGE_REGEX`.\n * Additionally, major version ranges must not be repeated in union ranges.\n * e.g. `^15.0.5 || ^16.0.0` is permitted, but `15.0.5 || 15.0.999` is not.\n *\n * EXAMPLES:\n * findIntersection(\"15.1.0\", \"*\") => \"15.1.0\"\n * findIntersection(\"^15\", \"*\") => \"^15\"\n * findIntersection(\">=15\", \"*\") => \">=15\"\n * findIntersection(\"*\", \"*\") => \"*\"\n * findIntersection(\"15.1.0\", \">=1\") => \"15.1.0\"\n * findIntersection(\"^15\", \">=1\") => \"^15\"\n * findIntersection(\">=15\", \">=1\") => \">=15\"\n * findIntersection(\"15.1.0\", \"^15\") => \"15.1.0\"\n * findIntersection(\"^15.2\", \"^15\") => \"^15.2\"\n * findIntersection(\"14\", \"^15\") => undefined\n * findIntersection(\"15.1.0\", \"^15 || ^16\") => \"15.1.0\"\n * findIntersection(\"^15.2\", \"^15 || ^16\") => \"^15.2\"\n * findIntersection(\"14\", \"^15 || ^16\") => undefined\n * findIntersection(\"^15.2 || ^16\", \"^15 || ^16.4\") => \"^15.2 || ^16.4\"\n *\n * @param a version range that matches `RANGE_REGEX`\n * @param b version range that matches `RANGE_REGEX`\n * @returns the maximum intersecting `ValidRange`, or `undefined` if there is no intersection\n */\nexport function findIntersection(a: ValidRange, b: ValidRange): ValidRange | undefined {\n if (doesASatisfyB(a, b)) {\n return a;\n } else if (doesASatisfyB(b, a)) {\n return b;\n }\n\n // It's safe to assume that `isAnyVersionRange(a)` and `isAnyVersionRange(b)` are false,\n // since a `MATCH_ANY_VERSION_RANGE` would have been satisfied by anything.\n if (isAnyVersionRange(a) || isAnyVersionRange(b)) {\n throw new Error();\n }\n\n const aVersions = a.includes(\"||\") ? a.split(\"||\").map((s) => s.trim()) : [a];\n const bVersions = b.includes(\"||\") ? b.split(\"||\").map((s) => s.trim()) : [b];\n\n const aIsGreaterOrEqualVersionRange = isGreaterOrEqualVersionRange(a);\n const bIsGreaterOrEqualVersionRange = isGreaterOrEqualVersionRange(b);\n if (aIsGreaterOrEqualVersionRange && bIsGreaterOrEqualVersionRange) {\n // If the ranges were equal, they'd both satisfy each other.\n // Otherwise, the higher range should have satisfied the lower range.\n throw new Error();\n }\n\n if (aIsGreaterOrEqualVersionRange) {\n const aSemVer = coerce(a)!;\n // keep every version where `bSemVer` is >= `aSemVer`\n // where bVersion has an operator, we need to adjust the version to take into\n // account aVersion, e.g. if a is >=15.2.3 and b is ^15, then the intersection is actually ^15.2.3\n const compatibleBVersions = bVersions\n .map((bVersion) => {\n const bSemVer = coerce(bVersion)!;\n if (bVersion.startsWith(\"^\") && bSemVer.major >= aSemVer.major) {\n return `^${bSemVer.compare(aSemVer) >= 0 ? bSemVer.raw : aSemVer.raw}`;\n }\n return bSemVer.compare(aSemVer) !== -1 ? bVersion : undefined;\n })\n .filter((bVersion): bVersion is string => bVersion != null);\n if (compatibleBVersions.length === 0) {\n return undefined;\n }\n return compatibleBVersions.join(\" || \") as ValidRange;\n }\n if (bIsGreaterOrEqualVersionRange) {\n const bSemVer = coerce(b)!;\n // keep every version where `aSemVer` is >= `bSemVer`\n // where aVersion has an operator, we need to adjust the version to take into\n // account bVersion, e.g. if b is >=15.2.3 and a is ^15, then the intersection is actually ^15.2.3\n const compatibleAVersions = aVersions\n .map((aVersion) => {\n const aSemVer = coerce(aVersion)!;\n if (aVersion.startsWith(\"^\") && aSemVer.major >= bSemVer.major) {\n return `^${aSemVer.compare(bSemVer) >= 0 ? aSemVer.raw : bSemVer.raw}`;\n }\n return aSemVer.compare(bSemVer) !== -1 ? aVersion : undefined;\n })\n .filter((aVersion): aVersion is string => aVersion != null);\n if (compatibleAVersions.length === 0) {\n return undefined;\n }\n return compatibleAVersions.join(\" || \") as ValidRange;\n }\n\n const compatibleVersions = aVersions\n .map((aVersion) => {\n const aSemVer = coerce(aVersion)!;\n const majorMatchingBVersion = bVersions.find((m) => coerce(m)!.major === aSemVer.major);\n if (majorMatchingBVersion === undefined) {\n // there is no intersecting `b` major version for this `a` major version\n return undefined;\n }\n if (doesASatisfyB(aVersion as ValidRange, majorMatchingBVersion as ValidRange)) {\n return aVersion;\n } else if (doesASatisfyB(majorMatchingBVersion as ValidRange, aVersion as ValidRange)) {\n return majorMatchingBVersion;\n } else {\n return undefined;\n }\n })\n .filter((aVersion) => aVersion !== undefined);\n if (compatibleVersions.length === 0) {\n return undefined;\n }\n return compatibleVersions.join(\" || \") as ValidRange;\n}\n\n/**\n * Given two version ranges, determine whether `a` satisfies `b`.\n * `a` satisfies `b` iff `a` is a \"more strict than or equal to\" subset of `b`.\n * For example, both `^15` and `^15.2.0` satisfy `^15`, but `^15 || ^16` does not.\n *\n * NOTE: This code assumes that input version ranges match `RANGE_REGEX`.\n * Additionally, major version ranges must not be repeated in union ranges.\n * e.g. `^15.0.5 || ^16.0.0` is permitted, but `15.0.5 || 15.0.999` is not.\n *\n * To determine that `a` is \"more strict than or equal to\" `b`, we first\n * split the set of all versions or ranges that are potentially unioned in `a` and `b`.\n * For example, if `a` is `15.0.5`, we produce the set `[ \"15.0.5\" ]`,\n * and if `b` is `^15 || ^16`, we produce the set `[ \"^15\", \"^16\" ]`.\n * `a` is \"more strict than or equal to\" `b` iff each entry in `a`'s set\n * satisfies (equal to or greater than) some entry in `b`.\n *\n * The following version ranges satisfy `^15.0.5 || ^16.0.0`:\n * - `^15.0.5 || ^16.0.0`\n * - `^15.0.5 || ^16.x.x`\n * - `15.0.5 || 16.0.0`\n * - `^15.0.999 || ^16.0.0`\n * - `^15.0.5 || ^16.0.999`\n * - `^15.0.999`\n * - `^16.0.0`\n * - `16.0.0`\n * The following version ranges do not satisfy `^15.0.5 || ^16.0.0`:\n * - `^15.0.0 || ^16.0.0`\n * - `^15.0.5 || ^17.0.0`\n * - `^14.0.0 || ^15.0.5 || ^16.0.0`\n * - `^17.0.0`\n * - `17.0.0`\n *\n * @param a version range that matches `RANGE_REGEX`\n * @param b version range that matches `RANGE_REGEX`\n * @returns `true` if `a` is more strict than or equal to `b`, `false` otherwise\n */\nexport function doesASatisfyB(a: ValidRange, b: ValidRange): boolean {\n if (a === b) {\n return true;\n }\n\n const aIsAnyVersionRange = isAnyVersionRange(a);\n const bIsAnyVersionRange = isAnyVersionRange(b);\n if (bIsAnyVersionRange) {\n return true;\n } else if (aIsAnyVersionRange) {\n // `bIsAnyVersionRange` is `false`\n // `a` permits more values than `b`, therefore `a` is \"less strict\"\n return false;\n }\n\n const aVersions = a.includes(\"||\") ? a.split(\"||\").map((s) => s.trim()) : [a];\n const bVersions = b.includes(\"||\") ? b.split(\"||\").map((s) => s.trim()) : [b];\n\n const aIsGreaterOrEqualVersionRange = isGreaterOrEqualVersionRange(a);\n const bIsGreaterOrEqualVersionRange = isGreaterOrEqualVersionRange(b);\n if (aIsGreaterOrEqualVersionRange && bIsGreaterOrEqualVersionRange) {\n const aSemVer = coerce(a)!;\n const bSemVer = coerce(b)!;\n // `a` satisfies `b` so long as `aSemVer` is greater than or equal to `bSemVer`\n return aSemVer.compare(bSemVer) !== -1;\n } else if (bIsGreaterOrEqualVersionRange) {\n const bSemVer = coerce(b)!;\n return aVersions.every((aVersion) => {\n const aSemVer = coerce(aVersion)!;\n // `a` satisfies `b` so long as `aSemVer` is greater than or equal to `bSemVer`\n return aSemVer.compare(bSemVer) !== -1;\n });\n } else if (aIsGreaterOrEqualVersionRange) {\n // `bIsGreaterOrEqualVersionRange` is `false` (and `bIsAnyVersionRange` is `false`)\n // `a` permits more values than `b`, therefore `a` is \"less strict\"\n return false;\n }\n\n return aVersions.every((aVersion) => {\n const aSemVer = coerce(aVersion)!;\n const majorMatchingBVersion = bVersions.find((m) => coerce(m)!.major === aSemVer.major);\n if (majorMatchingBVersion === undefined) {\n // `a` permits a major version that is not permitted by `b`, therefore `a` is \"less strict\"\n return false;\n }\n\n const aVersionIsRange = isMajorVersionRange(aVersion);\n const majorMatchingBSemVer = coerce(majorMatchingBVersion)!;\n const majorMatchingBVersionIsRange = isMajorVersionRange(majorMatchingBVersion);\n\n if (majorMatchingBVersionIsRange) {\n // `a` satisfies `b` so long as `aSemVer` is greater than or equal to `majorMatchingBSemVer`\n // this is true whether or not `aVersionIsRange`\n return aSemVer.compare(majorMatchingBSemVer) !== -1;\n } else {\n // `majorMatchingBVersionIsRange` is `false`\n if (aVersionIsRange) {\n // `a` permits more values than `b`, therefore `a` is \"less strict\"\n // e.g if `b` is `15.5.5`, this is true whether `a` is `^15.0.0`, `^15.5.5`, or `^15.9.9`\n return false;\n } else {\n // `aVersionIsRange` is `false`\n // `a` satisfies `b` if and only if `aSemVer` is equal to `majorMatchingBSemVer`\n return aSemVer.compare(majorMatchingBSemVer) === 0;\n }\n }\n });\n}\n\n/**\n * Returns true if the version evaluates to 'any', e.g. * or x\n */\nfunction isAnyVersionRange(version: string): boolean {\n return MATCH_ANY_VERSION_RANGE.test(version);\n}\n\n/**\n * Retruns true if the version begins with '>='\n */\nfunction isGreaterOrEqualVersionRange(version: string): boolean {\n return MATCH_GREATER_OR_EQUAL_VERSION_RANGE.test(version);\n}\n\nfunction isMajorVersionRange(version: string): boolean {\n return MATCH_MAJOR_VERSION_RANGE.test(version);\n}\n\nexport type ValidRange = string & { _type: \"valid range\" };\nexport function isValidRange(version: string): version is ValidRange {\n return RANGE_REGEX.test(version);\n}\n\ntype IDependencyType = \"dependencies\" | \"devDependencies\" | \"peerDependencies\";\n\nfunction getAddDependencyTypeFixer({\n packageJsonPath,\n dependencyType,\n dependencyName,\n version,\n host,\n}: {\n packageJsonPath: string;\n dependencyType: IDependencyType;\n dependencyName: string;\n version: string;\n host: Host;\n}) {\n return () => {\n mutateJson<PackageJson>(packageJsonPath, host, (packageJson) => {\n if (packageJson[dependencyType] == null) {\n packageJson[dependencyType] = {};\n }\n packageJson[dependencyType]![dependencyName] = version;\n return packageJson;\n });\n };\n}\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { diff } from \"jest-diff\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\ntype OrderFunction = (context: Context) => (a: string, b: string) => number;\n\nconst Options = r\n .Record({\n order: r.Union(r.Array(r.String), r.Function),\n })\n .Or(r.Undefined);\n\ntype Options = r.Static<typeof Options>;\n\nconst defaultKeyOrder = [\n \"name\",\n \"version\",\n \"description\",\n \"author\",\n \"contributors\",\n \"url\",\n \"license\",\n \"type\",\n \"exports\",\n \"private\",\n \"engines\",\n \"bin\",\n \"types\",\n \"main\",\n \"module\",\n \"typings\",\n \"style\",\n \"sideEffects\",\n \"workspaces\",\n \"husky\",\n \"lint-staged\",\n \"files\",\n \"scripts\",\n \"resolutions\",\n \"dependencies\",\n \"peerDependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n \"publishConfig\",\n];\n\nexport const packageOrder = makeRule({\n name: \"packageOrder\",\n check: (context, opts) => {\n const packageJson = context.getPackageJson();\n const packagePath = context.getPackageJsonPath();\n\n const order: string[] | OrderFunction = opts === undefined ? defaultKeyOrder : opts.order;\n\n const comparator = isOrderFunction(order) ? order(context) : createComparator(order);\n\n const actualOrder = Object.keys(packageJson);\n const expectedOrder = actualOrder.slice().sort(comparator); // sort mutates, so we need to copy the previous result\n\n if (!arrayOrderCompare(actualOrder, expectedOrder)) {\n context.addError({\n file: packagePath,\n message: \"Incorrect order of fields in package.json\",\n longMessage: diff(expectedOrder, actualOrder, { expand: true }),\n fixer: () => {\n const expectedPackageJson: Record<string, any> = {};\n\n expectedOrder.forEach((key) => {\n expectedPackageJson[key] = packageJson[key];\n });\n\n context.host.writeJson(packagePath, expectedPackageJson);\n },\n });\n }\n },\n optionsRuntype: Options,\n});\n\nfunction arrayOrderCompare(a: ReadonlyArray<string>, b: ReadonlyArray<string>) {\n for (let index = 0; index < a.length; index++) {\n if (a[index] !== b[index]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction createComparator(order: ReadonlyArray<string>) {\n return (a: string, b: string) => {\n const aIndex = order.indexOf(a);\n const bIndex = order.indexOf(b);\n\n // if one of the two is missing from the order array, push it further down\n if (aIndex >= 0 && bIndex < 0) {\n return -1;\n } else if (aIndex < 0 && bIndex >= 0) {\n return 1;\n }\n\n // otherwise compare the indexes and use alphabetical as a tie breaker\n const compared = aIndex - bIndex;\n\n if (compared !== 0) {\n return compared;\n } else {\n return a.localeCompare(b);\n }\n };\n}\n\nfunction isOrderFunction(order: ReadonlyArray<string> | OrderFunction): order is OrderFunction {\n return !Array.isArray(order);\n}\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { mutateJson, PackageJson } from \"@monorepolint/utils\";\nimport { diff } from \"jest-diff\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\n\nexport const Options = r.Union(\n r\n .Record({\n entries: r.Dictionary(r.Unknown), // string => unknown, enforces existence of keys and their values\n })\n .And(\n r.Partial({\n entriesExist: r.Undefined,\n })\n ),\n r\n .Record({\n entriesExist: r.Array(r.String), // enforces existence of keys, but not values\n })\n .And(\n r.Partial({\n entries: r.Undefined,\n })\n ),\n r.Record({\n entries: r.Dictionary(r.Unknown), // string => unknown, enforces existence of keys and their values\n entriesExist: r.Array(r.String),\n })\n);\n\nexport type Options = r.Static<typeof Options>;\n\nexport const packageEntry = makeRule({\n name: \"packageEntry\",\n check: (context, options) => {\n const packageJson = context.getPackageJson();\n\n if (options.entries) {\n for (const key of Object.keys(options.entries)) {\n const value = options.entries[key];\n\n const entryDiff = diff(JSON.stringify(value) + \"\\n\", (JSON.stringify(packageJson[key]) || \"\") + \"\\n\");\n if (\n (typeof value !== \"object\" && value !== packageJson[key]) ||\n entryDiff == null ||\n !entryDiff.includes(\"Compared values have no visual difference\")\n ) {\n context.addError({\n file: context.getPackageJsonPath(),\n message: createStandardizedEntryErrorMessage(key),\n longMessage: entryDiff,\n fixer: () => {\n mutateJson<PackageJson>(context.getPackageJsonPath(), context.host, (input) => {\n input[key] = value;\n return input;\n });\n },\n });\n }\n }\n }\n\n if (options.entriesExist) {\n for (const key of options.entriesExist) {\n if (packageJson[key] === undefined) {\n context.addError({\n file: context.getPackageJsonPath(),\n message: createExpectedEntryErrorMessage(key),\n });\n }\n }\n }\n },\n optionsRuntype: Options,\n});\n\nexport function createStandardizedEntryErrorMessage(key: string) {\n return `Expected standardized entry for '${key}'`;\n}\n\nexport function createExpectedEntryErrorMessage(key: string) {\n return `Expected entry for '${key}' to exist`;\n}\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { mutateJson, PackageJson } from \"@monorepolint/utils\";\nimport { diff } from \"jest-diff\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\n\nexport const Options = r.Record({\n scripts: r.Dictionary(\n r.Union(\n r.String,\n r.Record({\n options: r.Array(r.String.Or(r.Undefined)),\n fixValue: r.Union(r.String, r.Undefined, r.Literal(false)).optional(),\n })\n )\n ), // string => string\n});\n\nexport type Options = r.Static<typeof Options>;\n\nexport const MSG_NO_SCRIPTS_BLOCK = \"No scripts block in package.json\";\n\nexport const packageScript = makeRule({\n name: \"packageScript\",\n check: (context, options) => {\n const packageJson = context.getPackageJson();\n if (packageJson.scripts === undefined) {\n context.addError({\n file: context.getPackageJsonPath(),\n message: MSG_NO_SCRIPTS_BLOCK,\n fixer: () => {\n mutateJson<PackageJson>(context.getPackageJsonPath(), context.host, (input) => {\n input.scripts = {};\n return input;\n });\n },\n });\n return;\n }\n for (const [name, value] of Object.entries(options.scripts)) {\n const allowedValues = new Set<string | undefined>();\n let fixValue: string | undefined | false;\n let allowEmpty = false;\n let fixToEmpty = false;\n\n if (typeof value === \"string\") {\n allowedValues.add(value);\n fixValue = value;\n } else {\n for (const q of value.options) {\n if (q === undefined) {\n allowEmpty = true;\n }\n allowedValues.add(q);\n }\n fixToEmpty = Object.prototype.hasOwnProperty.call(value, \"fixValue\") && value.fixValue === undefined;\n fixValue = value.fixValue;\n }\n\n const actualValue = packageJson.scripts[name];\n\n if (!allowedValues.has(actualValue) && !(allowEmpty === true && actualValue === undefined)) {\n let fixer;\n\n if (fixValue !== false && (fixValue !== undefined || fixToEmpty === true)) {\n const q = fixValue;\n fixer = () => {\n mutateJson<PackageJson>(context.getPackageJsonPath(), context.host, (input) => {\n if (fixToEmpty && q === undefined) {\n delete input.scripts![name];\n } else {\n input.scripts![name] = q!;\n }\n return input;\n });\n };\n }\n\n const validOptionsString = Array.from(allowedValues.values())\n .map((a) => (a === undefined ? \"(empty)\" : `'${a}'`))\n .join(\", \");\n\n context.addError({\n file: context.getPackageJsonPath(),\n message: `Expected standardized script entry for '${name}'. Valid options: ${validOptionsString}`,\n longMessage: diff(validOptionsString + \"\\n\", (packageJson.scripts[name] || \"\") + \"\\n\"),\n fixer,\n });\n }\n }\n },\n optionsRuntype: Options,\n});\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { matchesAnyGlob } from \"@monorepolint/utils\";\nimport { diff } from \"jest-diff\";\nimport * as path from \"path\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\n\nconst DEFAULT_TSCONFIG_FILENAME = \"tsconfig.json\";\n\nconst Options = r\n .Partial({\n file: r.String,\n generator: r.Function,\n tsconfigReferenceFile: r.String,\n template: r.Record({}).Or(r.String),\n templateFile: r.String,\n excludedReferences: r.Array(r.String).Or(r.Undefined),\n additionalReferences: r.Array(r.String).Or(r.Undefined),\n })\n .withConstraint(({ generator, template, templateFile }) => {\n let count = 0;\n if (generator) {\n count++;\n }\n if (template) {\n count++;\n }\n if (templateFile) {\n count++;\n }\n\n return count === 1 || \"Expect one of { generator, template, templateFile }\";\n });\n\nexport interface Options extends r.Static<typeof Options> {}\n\nexport const standardTsconfig = makeRule({\n name: \"standardTsconfig\",\n check: async (context, opts) => {\n const tsconfigFileName = opts.file ?? DEFAULT_TSCONFIG_FILENAME;\n const fullPath = path.resolve(context.packageDir, tsconfigFileName);\n const generator = getGenerator(context, opts);\n const expectedContent = await generator(context);\n\n const actualContent = context.host.exists(fullPath)\n ? context.host.readFile(fullPath, { encoding: \"utf-8\" })\n : undefined;\n\n if (expectedContent === undefined) {\n context.addWarning({\n file: fullPath,\n message: \"Excluding from expect-standard-tsconfig\",\n });\n return;\n }\n\n if (actualContent !== expectedContent) {\n context.addError({\n file: fullPath,\n message: \"Expect file contents to match\",\n longMessage: diff(expectedContent, actualContent, { expand: true }),\n fixer: () => {\n context.host.writeFile(fullPath, expectedContent, {\n encoding: \"utf-8\",\n });\n },\n });\n }\n },\n optionsRuntype: Options,\n});\n\nfunction getGenerator(context: Context, opts: Options) {\n if (opts.generator) {\n return opts.generator;\n } else if (opts.templateFile) {\n const { packageDir: workspacePackageDir } = context.getWorkspaceContext();\n const fullPath = path.resolve(workspacePackageDir, opts.templateFile);\n const template = JSON.parse(context.host.readFile(fullPath, { encoding: \"utf-8\" }));\n\n return makeGenerator(template, opts.excludedReferences, opts.additionalReferences, opts.tsconfigReferenceFile);\n } else if (opts.template) {\n return makeGenerator(opts.template, opts.excludedReferences, opts.additionalReferences, opts.tsconfigReferenceFile);\n } else {\n throw new Error(\"Unable to make generator\");\n }\n}\n\nfunction makeGenerator(\n template: any,\n excludedReferences: ReadonlyArray<string> | undefined,\n additionalReferences: ReadonlyArray<string> | undefined,\n tsconfigReferenceFile?: string\n) {\n return async function generator(context: Context) {\n template = {\n ...template,\n references: [],\n }; // make a copy and ensure we have a references array\n\n const nameToDirectory = await context.getWorkspaceContext().getPackageNameToDir();\n\n const packageJson = context.getPackageJson();\n const deps = [...Object.keys(packageJson.dependencies || {}), ...Object.keys(packageJson.devDependencies || {})];\n for (const dep of deps) {\n const packageDir = nameToDirectory.get(dep);\n if (packageDir !== undefined && (excludedReferences === undefined || !matchesAnyGlob(dep, excludedReferences))) {\n const absoluteReferencePath =\n tsconfigReferenceFile !== undefined ? path.join(packageDir, tsconfigReferenceFile) : packageDir;\n template.references.push({\n path: path.relative(context.packageDir, absoluteReferencePath),\n });\n }\n }\n\n if (additionalReferences) {\n for (const additionalReference of additionalReferences) {\n template.references.push({\n path: additionalReference,\n });\n }\n }\n\n return JSON.stringify(template, undefined, 2) + \"\\n\";\n };\n}\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport * as globby from \"globby\";\nimport * as path from \"node:path\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\n\nexport const Options = r.Undefined;\n\ntype Options = r.Static<typeof Options>;\n\n// Enforce that the root package.json contains all of the workspaces in the repo (including nested packages)\nexport const nestedWorkspaces = makeRule({\n name: \"nestedWorkspaces\",\n check: (context) => {\n const rootPackageJson = context.getWorkspaceContext().getPackageJson();\n\n // Expand a set of globs covering all package.json files in the entire repo (except the root)\n const packageJsonPaths = globby.globbySync([\"*/**/package.json\", \"!**/node_modules/**\"]);\n\n const workspaces = Array.isArray(rootPackageJson.workspaces)\n ? rootPackageJson.workspaces\n : rootPackageJson.workspaces !== undefined\n ? rootPackageJson.workspaces.packages\n : undefined;\n\n if (workspaces === undefined && packageJsonPaths.length > 0) {\n context.addError({\n file: context.getPackageJsonPath(),\n message: 'The \"workspace\" field is missing, even though there are workspaces in the repository.',\n });\n return;\n }\n\n // Build a set of globs for each package.json that exists in packages specified by a workspace.\n const workspacePackageJsons = (workspaces || []).map((item) => `${item}/package.json`);\n\n // Expand the globs to get an array of all package.json files that are in packages specified by a workspace.\n const expandedWorkspacesGlobs = globby.globbySync([...workspacePackageJsons, \"!**/node_modules/**\"]);\n\n // Ensure there are no package.jsons which are not included in the globbed workspaces set\n const difference = packageJsonPaths.filter((packageJsonPath) => !expandedWorkspacesGlobs.includes(packageJsonPath));\n\n if (difference.length !== 0) {\n const differencesList = difference.map((packageJsonPath) => path.dirname(packageJsonPath)).join(\", \");\n context.addError({\n file: context.getPackageJsonPath(),\n message:\n `The \"workspace\" field is missing one or more values: ${differencesList}. ` +\n 'You may be able to use a glob to avoid listing each workspace individually, e.g. \"packages/nested-workspace/*\".',\n });\n }\n },\n optionsRuntype: Options,\n});\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { mutateJson, PackageJson } from \"@monorepolint/utils\";\nimport { diff } from \"jest-diff\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\n\nconst Options = r.Partial({\n dependencies: r.Dictionary(r.String),\n devDependencies: r.Dictionary(r.String),\n peerDependencies: r.Dictionary(r.String),\n optionalDependencies: r.Dictionary(r.String),\n});\n\ntype Options = r.Static<typeof Options>;\n\nexport const requireDependency = makeRule({\n name: \"requireDependency\",\n check: function expectPackageEntry(context: Context, options: Options) {\n const packageJson = context.getPackageJson();\n const packageJsonPath = context.getPackageJsonPath();\n\n [\n \"dependencies\" as const,\n \"devDependencies\" as const,\n \"peerDependencies\" as const,\n \"optionalDependencies\" as const,\n ].forEach((type) => {\n if (!options[type]) {\n return;\n }\n\n if (packageJson[type] === undefined) {\n context.addError({\n file: packageJsonPath,\n message: `No ${type} block, cannot add required ${type}.`,\n fixer: () => {\n mutateJson<PackageJson>(packageJsonPath, context.host, (input) => {\n input[type] = options[type];\n return input;\n });\n },\n });\n return;\n }\n\n for (const [dep, version] of Object.entries(options[type]!)) {\n if (packageJson[type][dep] !== version) {\n context.addError({\n file: packageJsonPath,\n message: `Expected dependency ${dep}@${version}`,\n longMessage: diff(`${dep}@${version}\\n`, `${dep}@${packageJson[type][dep] || \"missing\"}\\n`)!,\n fixer: () => {\n mutateJson<PackageJson>(packageJsonPath, context.host, (input) => {\n input[type] = { ...input[type], [dep]: version };\n return input;\n });\n },\n });\n }\n }\n });\n },\n optionsRuntype: Options,\n});\n"],"mappings":"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","names":["r","Options","path","r","Options","diff","r","Options","diff","r","Options","diff","path","r","Options","diff","mutateJson","path","r","coerce","resolvePackagePath","Options","resolvePackagePath","coerce","mutateJson","diff","r","Options","arrayOrderCompare","diff","mutateJson","diff","r","Options","diff","mutateJson","mutateJson","diff","r","Options","mutateJson","diff","matchesAnyGlob","diff","path","r","Options","diff","matchesAnyGlob","path","r","Options","mutateJson","diff","r","Options","mutateJson","diff"]}
|
|
1
|
+
{"version":3,"sources":["../../src/alphabeticalDependencies.ts","../../src/util/checkAlpha.ts","../../src/alphabeticalScripts.ts","../../src/bannedDependencies.ts","../../src/util/packageDependencyGraphService.ts","../../src/consistentDependencies.ts","../../src/consistentVersions.ts","../../src/fileContents.ts","../../src/mustSatisfyPeerDependencies.ts","../../src/packageOrder.ts","../../src/packageEntry.ts","../../src/packageScript.ts","../../src/standardTsconfig.ts","../../src/nestedWorkspaces.ts","../../src/requireDependency.ts"],"sourcesContent":["/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport * as r from \"runtypes\";\nimport { checkAlpha } from \"./util/checkAlpha.js\";\nimport { makeRule } from \"./util/makeRule.js\";\nconst Options = r.Undefined;\n\nexport const alphabeticalDependencies = makeRule({\n name: \"alphabeticalDependencies\",\n check: (context) => {\n checkAlpha(context, \"dependencies\");\n checkAlpha(context, \"devDependencies\");\n checkAlpha(context, \"peerDependencies\");\n },\n optionsRuntype: Options,\n});\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { diff } from \"jest-diff\";\n\nexport function checkAlpha(\n context: Context,\n block: \"dependencies\" | \"devDependencies\" | \"peerDependencies\" | \"scripts\"\n) {\n const packageJson = context.getPackageJson();\n const packagePath = context.getPackageJsonPath();\n\n const blockToSort = packageJson[block];\n\n if (blockToSort === undefined) {\n return;\n }\n\n const actualOrder = Object.keys(blockToSort);\n const expectedOrder = actualOrder.slice().sort(); // sort mutates, so we need to copy the previous result\n\n if (!arrayOrderCompare(actualOrder, expectedOrder)) {\n context.addError({\n file: packagePath,\n message: createIncorrectOrderErrorMessage(block, packageJson.name!),\n longMessage: diff(expectedOrder, actualOrder, { expand: true }),\n fixer: () => {\n const expectedDependencies: Record<string, string> = {};\n\n expectedOrder.forEach((dep) => {\n expectedDependencies[dep] = blockToSort[dep];\n });\n\n const newPackageJson = { ...packageJson };\n newPackageJson[block] = expectedDependencies;\n context.host.writeJson(packagePath, newPackageJson);\n },\n });\n }\n}\n\nfunction arrayOrderCompare(a: ReadonlyArray<string>, b: ReadonlyArray<string>) {\n for (let index = 0; index < a.length; index++) {\n if (a[index] !== b[index]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function createIncorrectOrderErrorMessage(block: string, packageName: string) {\n return `Incorrect order of ${block} in ${packageName}'s package.json`;\n}\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport * as r from \"runtypes\";\nimport { checkAlpha } from \"./util/checkAlpha.js\";\nimport { makeRule } from \"./util/makeRule.js\";\nconst Options = r.Undefined;\n\nexport const alphabeticalScripts = makeRule({\n name: \"alphabeticalScripts\",\n check: (context) => {\n checkAlpha(context, \"scripts\");\n },\n optionsRuntype: Options,\n});\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { matchesAnyGlob } from \"@monorepolint/utils\";\nimport { AggregateTiming } from \"@monorepolint/utils\";\nimport * as path from \"node:path\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\nimport { IPackageDependencyGraphNode, PackageDependencyGraphService } from \"./util/packageDependencyGraphService.js\";\n// FIXME: This rule is messed. bannedTransitiveDependencies doesnt glob\n\nconst bannedDepGlobsField = r.Union(\n r.Array(r.String),\n r.Record({\n glob: r.Array(r.String).optional(),\n exact: r.Array(r.String).optional(),\n })\n);\n\nconst Options = r.Union(\n r.Record({\n bannedDependencies: bannedDepGlobsField,\n bannedTransitiveDependencies: r.Undefined.optional(),\n }),\n\n r.Record({\n bannedDependencies: bannedDepGlobsField.optional(),\n bannedTransitiveDependencies: r.Array(r.String),\n }),\n\n r.Record({\n bannedDependencies: bannedDepGlobsField.optional(),\n bannedTransitiveDependencies: r.Array(r.String).optional(),\n })\n);\n\nexport type Options = r.Static<typeof Options>;\n\n/**\n * We use this locally to avoid making a billion sets. Because check is called once per package\n * (with the exact same config object reference) we can save quite a bit of time by reusing this cache.\n */\nconst setCache = new Map<ReadonlyArray<string>, Set<string>>();\n\nconst aggregateTiming = new AggregateTiming(\":bannedDependencies stats\");\n\nexport const bannedDependencies = makeRule({\n name: \"bannedDependencies\",\n check: (context, opts, extra) => {\n aggregateTiming.start(extra?.id ?? \"unknown id\");\n\n const packageJson = context.getPackageJson();\n const packagePath = context.getPackageJsonPath();\n\n const curDeps = packageJson.dependencies && Object.keys(packageJson.dependencies);\n const curDevDeps = packageJson.devDependencies && Object.keys(packageJson.devDependencies);\n const curPeerDeps = packageJson.peerDependencies && Object.keys(packageJson.peerDependencies);\n\n const { bannedDependencies: banned, bannedTransitiveDependencies: transitives } = opts;\n\n const globs = banned && (Array.isArray(banned) ? banned : banned.glob);\n const exacts = banned && (Array.isArray(banned) ? undefined : banned.exact);\n\n const violations = new Set<string>();\n\n if (globs) {\n if (curDeps) populateProblemsGlobs(globs, curDeps, violations);\n if (curDevDeps) populateProblemsGlobs(globs, curDevDeps, violations);\n if (curPeerDeps) populateProblemsGlobs(globs, curPeerDeps, violations);\n }\n\n if (exacts) {\n let set = setCache.get(exacts);\n if (set === undefined) {\n set = new Set(exacts);\n setCache.set(exacts, set);\n }\n if (curDeps) populateProblemsExact(set, curDeps, violations);\n if (curDevDeps) populateProblemsExact(set, curDevDeps, violations);\n if (curPeerDeps) populateProblemsExact(set, curPeerDeps, violations);\n }\n\n if (violations.size > 0) {\n context.addError({\n file: packagePath,\n message:\n `Found ${violations.size} banned dependencies of package.json:\\n\\t` +\n Array.from(violations)\n .map((v) => `'${v}'`)\n .join(\", \"),\n });\n }\n\n if (transitives) {\n let set = setCache.get(transitives);\n if (set === undefined) {\n set = new Set(transitives);\n setCache.set(transitives, set);\n }\n checkTransitives(context, set);\n }\n\n aggregateTiming.stop();\n },\n optionsRuntype: Options,\n printStats: () => {\n aggregateTiming.printResults();\n },\n});\n\nfunction populateProblemsExact(banned: Set<string>, dependencies: ReadonlyArray<string>, violations: Set<string>) {\n for (const dependency of dependencies) {\n if (banned.has(dependency)) {\n violations.add(dependency);\n }\n }\n}\n\nfunction populateProblemsGlobs(\n bannedDependencyGlobs: ReadonlyArray<string>,\n dependencies: ReadonlyArray<string>,\n violations: Set<string>\n) {\n for (const dependency of dependencies) {\n if (matchesAnyGlob(dependency, bannedDependencyGlobs)) {\n violations.add(dependency);\n }\n }\n}\n\n// This function is slow. God help you if you use this on a big repo\nfunction checkTransitives(context: Context, banned: Set<string>) {\n const graphService = new PackageDependencyGraphService();\n const root = graphService.buildDependencyGraph(path.resolve(context.getPackageJsonPath()), context.host);\n for (const { dependencies, importPath } of graphService.traverse(root)) {\n for (const [dependency] of dependencies) {\n if (banned.has(dependency)) {\n // Remove the starting package since it's obvious in CLI output.\n const [, ...importPathWithoutRoot] = importPath;\n const pathing = [...importPathWithoutRoot.map(nameOrPackageJsonPath), dependency].join(\" -> \");\n\n context.addError({\n file: root.paths.packageJsonPath,\n message: `Banned transitive dependencies in repo: ${pathing}`,\n });\n }\n }\n }\n}\n\nfunction nameOrPackageJsonPath(node: IPackageDependencyGraphNode): string {\n return node.packageJson.name ?? node.paths.packageJsonPath;\n}\n","/**\n * @license Copyright 2019 Palantir Technologies, Inc. All rights reserved.\n */\n\nimport { Host, PackageJson } from \"@monorepolint/utils\";\nimport * as path from \"node:path\";\nimport resolvePackagePath from \"resolve-package-path\";\n\n/** Interface for a node in a package dependency graph. */\nexport interface IPackageDependencyGraphNode {\n packageJson: PackageJson;\n dependencies: Map<string, IPackageDependencyGraphNode>;\n paths: {\n packageJsonPath: string;\n rootDirectory: string;\n };\n}\n\n/** Service abstraction for constructing and traversing package dependency graphs. */\nexport interface IPackageDependencyGraphService {\n /** Construct a graph of package dependencies. */\n buildDependencyGraph(packageJsonPath: string, host: Host, maxDepth?: number): IPackageDependencyGraphNode;\n\n /** Traverse a package dependency graph. */\n traverse(\n root: IPackageDependencyGraphNode,\n opts?: {\n /** Traverse each unique path to a given package (potentially slow). */\n traverseAllPaths?: boolean;\n }\n ): IterableIterator<IPackageDependencyGraphNode & { importPath: IPackageDependencyGraphNode[] }>;\n}\n\n/** Default implementation of the package dependency graph service. */\nexport class PackageDependencyGraphService implements IPackageDependencyGraphService {\n /** Construct a graph of package dependencies and return the root node. */\n public buildDependencyGraph(\n startPackageJsonPath: string,\n host: Host,\n maxDepth?: number\n ): IPackageDependencyGraphNode {\n const nodes = new Map<string, IPackageDependencyGraphNode>();\n const visit = (packageJsonPath: string, currentDepth: number): IPackageDependencyGraphNode => {\n if (nodes.has(packageJsonPath)) {\n return nodes.get(packageJsonPath)!;\n }\n\n const packageJson: PackageJson = host.readJson(packageJsonPath);\n const node: IPackageDependencyGraphNode = {\n packageJson,\n dependencies: new Map<string, IPackageDependencyGraphNode>(),\n paths: {\n packageJsonPath,\n rootDirectory: path.dirname(packageJsonPath),\n },\n };\n\n // It's important that we register the node before visiting its dependencies to avoid cycles\n nodes.set(packageJsonPath, node);\n\n const nextDepth = currentDepth + 1;\n if (maxDepth == null || nextDepth <= maxDepth) {\n const dependencies = packageJson.dependencies != null ? Object.keys(packageJson.dependencies) : [];\n for (const dependency of dependencies) {\n const dependencyPackageJsonPath = resolvePackagePath(dependency, node.paths.rootDirectory);\n if (dependencyPackageJsonPath == null) {\n throw new Error(`Could not resolve ${dependency} from ${node.paths.rootDirectory}`);\n }\n\n node.dependencies.set(dependency, visit(dependencyPackageJsonPath, nextDepth));\n }\n }\n\n return node;\n };\n\n return visit(startPackageJsonPath, 0);\n }\n\n /** Traverse a package dependency graph with an iterator. */\n public *traverse(\n root: IPackageDependencyGraphNode,\n opts = { traverseAllPaths: false }\n ): IterableIterator<IPackageDependencyGraphNode & { importPath: IPackageDependencyGraphNode[] }> {\n const visited = new Set<IPackageDependencyGraphNode>();\n\n function* visit(\n node: IPackageDependencyGraphNode,\n importPath: IPackageDependencyGraphNode[] = []\n ): IterableIterator<IPackageDependencyGraphNode & { importPath: IPackageDependencyGraphNode[] }> {\n // Don't visit a package more than once unless explicitly asked to traverse all paths\n if (!opts.traverseAllPaths && visited.has(node)) {\n return;\n }\n\n // Break cycles when traversing all paths\n if (importPath.indexOf(node) !== -1) {\n return;\n }\n\n // Visit the node\n visited.add(node);\n importPath = [...importPath, node];\n yield { ...node, importPath };\n\n // Recursively visit the node's dependencies\n for (const dependency of node.dependencies.values()) {\n yield* visit(dependency, importPath);\n }\n }\n\n yield* visit(root);\n }\n}\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { diff } from \"jest-diff\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\nconst Options = r\n .Record({\n ignoredDependencies: r.Array(r.String).Or(r.Undefined),\n })\n .Or(r.Undefined);\nexport type Options = r.Static<typeof Options>;\n\nconst skippedVersions = [\"*\", \"latest\"];\n\nexport const consistentDependencies = makeRule({\n name: \"consistentDependencies\",\n check: (context, args) => {\n checkDeps(context, args, \"dependencies\");\n checkDeps(context, args, \"devDependencies\");\n // we don't check peer deps since they can be more lenient\n },\n optionsRuntype: Options,\n});\n\nfunction checkDeps(context: Context, args: Options, block: \"dependencies\" | \"devDependencies\" | \"peerDependencies\") {\n const packageJson = context.getPackageJson();\n const packagePath = context.getPackageJsonPath();\n const dependencies = packageJson[block];\n\n const workspacePackageJson = context.getWorkspaceContext().getPackageJson();\n const workspaceDependencies = workspacePackageJson[block];\n\n const ignoredDeps = args?.ignoredDependencies ?? [];\n const depsToCheck =\n workspaceDependencies == null || ignoredDeps.length === 0\n ? workspaceDependencies\n : omit(workspaceDependencies, ignoredDeps);\n\n if (dependencies === undefined || depsToCheck === undefined) {\n return;\n }\n\n const expectedDependencies = {\n ...dependencies,\n ...filterKeys(depsToCheck, dependencies),\n };\n\n if (JSON.stringify(dependencies) !== JSON.stringify(expectedDependencies)) {\n context.addError({\n file: packagePath,\n message: `Inconsistent ${block} with root in package.json`,\n longMessage: diff(expectedDependencies, dependencies, { expand: true }),\n fixer: () => {\n const newPackageJson = { ...packageJson };\n newPackageJson[block] = expectedDependencies;\n context.host.writeJson(packagePath, newPackageJson);\n },\n });\n }\n}\n\nfunction filterKeys(ob: Record<string, string>, filterOb: Record<string, string>) {\n const newOb: Record<string, any> = {};\n\n for (const key of Object.keys(filterOb)) {\n if (ob[key] !== undefined && skippedVersions.indexOf(filterOb[key]) === -1) {\n newOb[key] = ob[key];\n }\n }\n\n return newOb;\n}\n\nfunction omit<T>(obj: Record<string, T>, keysToOmit: readonly string[]): Record<string, T> {\n const newObj: Record<string, T> = {};\n\n const filtered = Object.entries(obj).filter(([key]) => !keysToOmit.includes(key));\n for (const [key, value] of filtered) {\n newObj[key] = value;\n }\n\n return newObj;\n}\n","/*!\n * Copyright 2020 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { mutateJson, PackageJson } from \"@monorepolint/utils\";\nimport * as r from \"runtypes\";\nimport { coerce, SemVer } from \"semver\";\nimport { makeRule } from \"./util/makeRule.js\";\nexport const Options = r.Record({\n matchDependencyVersions: r.Dictionary(r.Union(r.String, r.Array(r.String))),\n});\n\nexport type Options = r.Static<typeof Options>;\n\nexport const consistentVersions = makeRule({\n name: \"consistentVersions\",\n check: checkConsistentVersions,\n optionsRuntype: Options,\n});\n\nfunction checkConsistentVersions(context: Context, options: Options) {\n for (const [dependencyPackageName, expectedPackageDependencyValue] of Object.entries(\n options.matchDependencyVersions\n )) {\n if (Array.isArray(expectedPackageDependencyValue)) {\n ensurePackageMatchesSomeVersion(context, dependencyPackageName, expectedPackageDependencyValue);\n } else {\n ensurePackageIsCorrectVersion(context, dependencyPackageName, expectedPackageDependencyValue);\n }\n }\n}\n\nconst ensurePackageIsCorrectVersion = (\n context: Context,\n dependencyPackageName: string,\n expectedPackageDependencyValue: string\n) => {\n const packageJson = context.getPackageJson();\n const packageJsonPath = context.getPackageJsonPath();\n\n const expectedPackageDependencyVersion = coerce(expectedPackageDependencyValue);\n if (expectedPackageDependencyVersion == null) {\n throw new Error(\n `Malformed expected package dependency version defined in monorepolint configuration: ${dependencyPackageName} @ '${expectedPackageDependencyValue}'`\n );\n }\n\n const actualPackageDependencyValue = packageJson.dependencies && packageJson.dependencies[dependencyPackageName];\n const actualPackageDependencyVersion = coerce(actualPackageDependencyValue);\n if (\n actualPackageDependencyVersion != null &&\n actualPackageDependencyVersion.raw !== expectedPackageDependencyVersion.raw\n ) {\n context.addError({\n file: packageJsonPath,\n message: `Expected dependency on ${dependencyPackageName} to match version defined in monorepolint configuration '${expectedPackageDependencyValue}', got '${actualPackageDependencyValue}' instead.`,\n fixer: () =>\n mutateJson<PackageJson>(packageJsonPath, context.host, (input) => {\n input.dependencies![dependencyPackageName] = expectedPackageDependencyValue;\n return input;\n }),\n });\n }\n\n const actualPackageDevDependencyValue =\n packageJson.devDependencies && packageJson.devDependencies[dependencyPackageName];\n const actualPackageDevDependencyVersion = coerce(actualPackageDevDependencyValue);\n if (\n actualPackageDevDependencyVersion != null &&\n actualPackageDevDependencyVersion.raw !== expectedPackageDependencyVersion.raw\n ) {\n context.addError({\n file: packageJsonPath,\n message: `Expected devDependency on ${dependencyPackageName} to match version defined in monorepolint configuration '${expectedPackageDependencyValue}', got '${actualPackageDevDependencyValue}' instead`,\n fixer: () =>\n mutateJson<PackageJson>(packageJsonPath, context.host, (input) => {\n input.devDependencies![dependencyPackageName] = expectedPackageDependencyValue;\n return input;\n }),\n });\n }\n};\n\nconst ensurePackageMatchesSomeVersion = (\n context: Context,\n dependencyPackageName: string,\n acceptedPackageDependencyValues: string[]\n) => {\n const packageJson = context.getPackageJson();\n const packageJsonPath = context.getPackageJsonPath();\n\n const acceptedPackageDependencyVersions: SemVer[] = acceptedPackageDependencyValues.map(\n (acceptedPackageDependencyValue) => {\n const acceptedPackageDependencyVersion = coerce(acceptedPackageDependencyValue);\n if (acceptedPackageDependencyVersion == null) {\n throw new Error(\n `Malformed accepted package dependency version defined in monorepolint configuration: ${dependencyPackageName} @ '${acceptedPackageDependencyValue}'`\n );\n }\n return acceptedPackageDependencyVersion;\n }\n );\n\n const actualPackageDependencyValue = packageJson.dependencies && packageJson.dependencies[dependencyPackageName];\n const actualPackageDependencyVersion = coerce(actualPackageDependencyValue);\n if (\n actualPackageDependencyVersion != null &&\n acceptedPackageDependencyVersions.every(\n (acceptedPackageDependencyVersion) => actualPackageDependencyVersion.raw !== acceptedPackageDependencyVersion.raw\n )\n ) {\n context.addError({\n file: packageJsonPath,\n message: `Expected dependency on ${dependencyPackageName} to match one of '${JSON.stringify(\n acceptedPackageDependencyValues\n )}', got '${actualPackageDependencyValue}' instead.`,\n });\n }\n\n const actualPackageDevDependencyValue =\n packageJson.devDependencies && packageJson.devDependencies[dependencyPackageName];\n const actualPackageDevDependencyVersion = coerce(actualPackageDevDependencyValue);\n if (\n actualPackageDevDependencyVersion != null &&\n acceptedPackageDependencyVersions.every(\n (acceptedPackageDependencyVersion) =>\n actualPackageDevDependencyVersion.raw !== acceptedPackageDependencyVersion.raw\n )\n ) {\n context.addError({\n file: packageJsonPath,\n message: `Expected devDependency on ${dependencyPackageName} to match one of '${JSON.stringify(\n acceptedPackageDependencyValues\n )}', got '${actualPackageDevDependencyValue}' instead.`,\n });\n }\n};\n","/*!\n * Copyright 2023 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { diff } from \"jest-diff\";\nimport * as path from \"path\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\nconst Options = r.Union(\n r.Record({\n file: r.String,\n generator: r.Function,\n template: r.Undefined.optional(),\n templateFile: r.Undefined.optional(),\n }),\n\n r.Record({\n file: r.String,\n generator: r.Undefined.optional(),\n template: r.String,\n templateFile: r.Undefined.optional(),\n }),\n\n r.Record({\n file: r.String,\n generator: r.Undefined.optional(),\n template: r.Undefined.optional(),\n templateFile: r.String,\n })\n);\n\ntype Options = r.Static<typeof Options>;\n\nexport const fileContents = makeRule({\n name: \"fileContents\",\n check: (context, opts) => {\n const fullPath = path.join(context.packageDir, opts.file);\n const expectedContent = getExpectedContents(context, opts);\n\n const pathExists = context.host.exists(fullPath);\n const actualContent = pathExists ? context.host.readFile(fullPath, { encoding: \"utf-8\" }) : undefined;\n if (actualContent !== expectedContent) {\n context.addError({\n file: fullPath,\n message: \"Expect file contents to match\",\n longMessage: diff(expectedContent, actualContent, { expand: true }),\n fixer: () => {\n if (expectedContent === undefined) {\n if (pathExists) context.host.deleteFile(fullPath);\n } else {\n context.host.mkdir(path.dirname(fullPath), { recursive: true });\n context.host.writeFile(fullPath, expectedContent, { encoding: \"utf-8\" });\n }\n },\n });\n }\n },\n optionsRuntype: Options,\n});\n\nconst optionsCache = new Map<Options, ((context: Context) => string | undefined) | string | undefined>();\n\nfunction getExpectedContents(context: Context, opts: Options) {\n // we need to use has because undefined is a valid value in the cache\n if (optionsCache.has(opts)) {\n const cachedEntry = optionsCache.get(opts);\n if (cachedEntry && typeof cachedEntry === \"function\") {\n return cachedEntry(context);\n }\n return cachedEntry;\n }\n\n if (opts.generator) {\n optionsCache.set(opts, opts.generator);\n return opts.generator(context) as string | undefined; // we have no guarentee its the right kind of function\n } else if (opts.templateFile) {\n const { packageDir: workspacePackageDir } = context.getWorkspaceContext();\n const fullPath = path.resolve(workspacePackageDir, opts.templateFile);\n const template = context.host.readFile(fullPath, { encoding: \"utf-8\" });\n\n optionsCache.set(opts, template);\n return template;\n } else {\n optionsCache.set(opts, opts.template);\n return opts.template;\n }\n}\n","/*!\n * Copyright 2020 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { Host, mutateJson, PackageJson } from \"@monorepolint/utils\";\nimport * as path from \"node:path\";\nimport * as r from \"runtypes\";\nimport { coerce } from \"semver\";\nimport resolvePackagePath from \"resolve-package-path\";\nimport { makeRule } from \"./util/makeRule.js\";\n\nconst Options = r.Union(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n dependencyWhitelist: r.Undefined,\n dependencyBlacklist: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n }),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n })\n .And(\n r.Partial({\n dependencyWhitelist: r.Undefined,\n dependencyBlacklist: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n dependencyWhitelist: r.Array(r.String),\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n dependencyBlacklist: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n dependencyBlacklist: r.Array(r.String),\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n dependencyWhitelist: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n dependencyWhitelist: r.Undefined,\n dependencyBlacklist: r.Undefined,\n })\n ),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n dependencyWhitelist: r.Array(r.String),\n })\n .And(\n r.Partial({\n dependencyBlacklist: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n dependencyBlacklist: r.Array(r.String),\n })\n .And(\n r.Partial({\n dependencyWhitelist: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n dependencyWhitelist: r.Undefined,\n dependencyBlacklist: r.Undefined,\n })\n ),\n r\n .Record({\n dependencyWhitelist: r.Array(r.String),\n dependencyBlacklist: r.Array(r.String),\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n dependencyWhitelist: r.Array(r.String),\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n dependencyBlacklist: r.Undefined,\n })\n ),\n r\n .Record({\n dependencyBlacklist: r.Array(r.String),\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n dependencyWhitelist: r.Undefined,\n })\n ),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n dependencyWhitelist: r.Array(r.String),\n dependencyBlacklist: r.Array(r.String),\n })\n .And(\n r.Partial({\n enforceForDevDependencies: r.Undefined,\n })\n ),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n dependencyWhitelist: r.Array(r.String),\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n dependencyBlacklist: r.Undefined,\n })\n ),\n r\n .Record({\n skipUnparseableRanges: r.Boolean,\n dependencyBlacklist: r.Array(r.String),\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n dependencyWhitelist: r.Undefined,\n })\n ),\n r\n .Record({\n dependencyWhitelist: r.Array(r.String),\n dependencyBlacklist: r.Array(r.String),\n enforceForDevDependencies: r.Boolean,\n })\n .And(\n r.Partial({\n skipUnparseableRanges: r.Undefined,\n })\n ),\n r.Record({\n skipUnparseableRanges: r.Boolean,\n dependencyWhitelist: r.Array(r.String),\n dependencyBlacklist: r.Array(r.String),\n enforceForDevDependencies: r.Boolean,\n })\n);\n\nexport type Options = r.Static<typeof Options>;\n\nexport const mustSatisfyPeerDependencies = makeRule({\n name: \"mustSatisfyPeerDependencies\",\n check: checkSatisfyPeerDependencies,\n optionsRuntype: Options,\n});\n\n/**\n * separating on `|`, this regex allows any of the following formats:\n * - `*`\n * - `x`\n *\n * More info: https://docs.npmjs.com/about-semantic-versioning\n */\nexport const MATCH_ANY_VERSION_RANGE = /^(\\*|x)$/;\n\n/**\n * This regex allows any of the following formats:\n * - `>=15`\n * - `>=15.2`\n * - `>=15.2.1`\n * - `>=15.2.1-rc.0`\n * - `>=15.2.1+sha`\n * - `>=15.2.1-rc.0+sha`\n *\n * See https://semver.org/#spec-item-9 for details about semver formatting, and\n * https://regex101.com/r/vkijKf/1/ for a sample Regex.\n *\n * Note that the semver spec does _not_ specify npm range syntax. (`^`, `||`, `~`, `>`, etc.)\n *\n * More info: https://docs.npmjs.com/about-semantic-versioning\n */\nexport const MATCH_GREATER_OR_EQUAL_VERSION_RANGE =\n /^>= ?\\d+(?:\\.\\d+|\\.\\d+\\.\\d+(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)?$/;\n\n/**\n * This regex allows any of the following formats:\n * - `15`\n * - `^15`\n * - `15.x`\n * - `^15.x`\n * - `15.x.x`\n * - `^15.x.x`\n * - `^15.2`\n * - `^15.2.x`\n * - `^15.2.1`\n * - `^15.2.1-rc.0`\n * - `^15.2.1+sha`\n * - `^15.2.1-rc.0+sha`\n *\n * See https://semver.org/#spec-item-9 for details about semver formatting, and\n * https://regex101.com/r/vkijKf/1/ for a sample Regex.\n *\n * Note that the semver spec does _not_ specify npm range syntax. (`^`, `||`, `~`, `>`, etc.)\n *\n * More info: https://docs.npmjs.com/about-semantic-versioning\n */\nexport const MATCH_MAJOR_VERSION_RANGE =\n /^(?:\\^?\\d+|\\^?\\d+\\.x|\\^?\\d+\\.x\\.x|\\^\\d+\\.\\d+|\\^\\d+\\.\\d+\\.x|\\^\\d+\\.\\d+\\.\\d+(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)$/;\n\n/**\n * Does not currently accept `<`, `<=`, `>`, `=` or `-` for ranges (e.g. `> 2.5.1 < 3` or `1.0.0 - 1.2.0`),\n * though it will accept isolated `>=` ranges (e.g. `>=2.5.1`, but not `^1 || >=2.5.1`)\n *\n * See https://semver.org/#spec-item-9 for details about semver formatting, and\n * https://regex101.com/r/vkijKf/1/ for a sample Regex.\n *\n * Note that the semver spec does _not_ specify npm range syntax. (`^`, `||`, `~`, `>`, etc.)\n *\n * More info: https://docs.npmjs.com/about-semantic-versioning\n *\n * TODO: accept minor pins `~4.2.1`\n */\nexport const RANGE_REGEX =\n /^(\\*|x|>= ?\\d+(?:\\.\\d+|\\.\\d+\\.\\d+(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)?|\\^?\\d+(\\.x|\\.x\\.x|\\.\\d+|\\.\\d+\\.x|\\.\\d+\\.\\d+(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)?( \\|\\| \\^?\\d+(\\.x|\\.x\\.x|\\.\\d+|\\.\\d+\\.x|\\.\\d+\\.\\d+(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)?)*)$/;\n\ninterface IPeerDependencyRequirement {\n fromPackageName: string;\n range: ValidRange;\n}\n\ninterface IResolvedPeerDependencyRequirement {\n fromPeerDependencyRequirements: IPeerDependencyRequirement[];\n range: ValidRange;\n}\n\nfunction checkSatisfyPeerDependencies(context: Context, opts: Options) {\n const { dependencyBlacklist, dependencyWhitelist, enforceForDevDependencies, skipUnparseableRanges } = opts;\n const packageJsonPath = path.resolve(context.getPackageJsonPath());\n const packageJson: PackageJson = context.host.readJson(packageJsonPath);\n const packageDependencies = packageJson.dependencies || {};\n const packageDevDependencies = packageJson.devDependencies || {};\n const packagePeerDependencies = packageJson.peerDependencies || {};\n const packageName = packageJson.name || packageJsonPath;\n\n // check that no peer dependencies are also declared as regular dependencies\n for (const [peerDependencyName, peerDependencyRange] of Object.entries(packagePeerDependencies)) {\n if (shouldSkipPackage({ dependencyBlacklist, dependencyWhitelist, packageName: peerDependencyName })) {\n continue;\n }\n\n const dependencyRange = packageDependencies[peerDependencyName];\n if (dependencyRange != null) {\n context.addError({\n file: packageJsonPath,\n message:\n `[0] Package ${packageName} has overloaded ${peerDependencyName} dependencies.\\n\\t` +\n `Peer dependency '${peerDependencyRange}' and regular dependency '${dependencyRange}'.`,\n });\n }\n }\n\n // map of all inherited peer dependency requirements\n const allRequiredPeerDependencies: { [peerDependencyName: string]: IPeerDependencyRequirement[] } = {};\n\n // for each of this package's dependencies, add the dependency's peer requirements into `allRequiredPeerDependencies`\n const allDependencies = enforceForDevDependencies\n ? [...Object.keys(packageDependencies), ...Object.keys(packageDevDependencies)]\n : Object.keys(packageDependencies);\n for (const dependency of allDependencies) {\n const dependencyPackageJsonPath = resolvePackagePath(dependency, path.dirname(packageJsonPath));\n if (dependencyPackageJsonPath == null) {\n throw new Error(`Could not resolve ${dependency} from ${path.dirname(packageJsonPath)}`);\n }\n const dependencyPackageJson: PackageJson = context.host.readJson(dependencyPackageJsonPath);\n const requiredPeerDependencies = dependencyPackageJson.peerDependencies;\n if (requiredPeerDependencies == null) {\n continue;\n }\n for (const [peerDependencyName, range] of Object.entries(requiredPeerDependencies)) {\n if (shouldSkipPackage({ dependencyBlacklist, dependencyWhitelist, packageName: peerDependencyName })) {\n continue;\n }\n\n if (!isValidRange(range)) {\n const message = `Unable to parse ${dependencyPackageJson.name}'s ${peerDependencyName} peer dependency range '${range}'.`;\n if (skipUnparseableRanges) {\n context.addWarning({ file: dependencyPackageJsonPath, message });\n continue;\n }\n throw new Error(message);\n }\n if (allRequiredPeerDependencies[peerDependencyName] == null) {\n allRequiredPeerDependencies[peerDependencyName] = [];\n }\n allRequiredPeerDependencies[peerDependencyName].push({ fromPackageName: dependencyPackageJson.name!, range });\n }\n }\n\n for (const [peerDependencyName, peerDependencyRequirements] of Object.entries(allRequiredPeerDependencies)) {\n // for each inherited peer dependency, determine the strictest range\n let mostStrictPeerRequirement: IResolvedPeerDependencyRequirement = {\n fromPeerDependencyRequirements: [peerDependencyRequirements[0]],\n range: peerDependencyRequirements[0].range,\n };\n for (const peerRequirement of peerDependencyRequirements) {\n if (doesASatisfyB(mostStrictPeerRequirement.range, peerRequirement.range)) {\n continue;\n } else if (doesASatisfyB(peerRequirement.range, mostStrictPeerRequirement.range)) {\n mostStrictPeerRequirement = {\n fromPeerDependencyRequirements: [peerRequirement],\n range: peerRequirement.range,\n };\n } else {\n const maybeIntersection = findIntersection(peerRequirement.range, mostStrictPeerRequirement.range);\n if (maybeIntersection !== undefined) {\n mostStrictPeerRequirement = {\n fromPeerDependencyRequirements: [\n ...mostStrictPeerRequirement.fromPeerDependencyRequirements,\n peerRequirement,\n ],\n range: maybeIntersection,\n };\n } else {\n context.addError({\n file: packageJsonPath,\n message:\n `[1] Package ${packageName} has conflicting inherited ${peerDependencyName} peer dependencies.\\n\\t` +\n `Dependency ${peerRequirement.fromPackageName} requires '${peerRequirement.range}' but\\n\\t` +\n getMostStrictStatement(mostStrictPeerRequirement),\n });\n }\n }\n }\n\n // if this package has a dependency on an inherited peer dependency,\n // the range must be equal to or stricter than `mostStrictPeerRequirement`\n const packageDependencyRange = packageDependencies[peerDependencyName];\n if (packageDependencyRange != null) {\n if (!isValidRange(packageDependencyRange)) {\n const message = `Unable to parse ${packageName}'s ${peerDependencyName} dependency range '${packageDependencyRange}'.`;\n if (skipUnparseableRanges) {\n context.addWarning({ file: packageJsonPath, message });\n } else {\n throw new Error(message);\n }\n } else if (!doesASatisfyB(packageDependencyRange, mostStrictPeerRequirement.range)) {\n context.addError({\n file: packageJsonPath,\n message:\n `[2] Package ${packageName} dependency on ${peerDependencyName} '${packageDependencyRange}' does not satisfy inherited peer dependencies.\\n\\t` +\n getMostStrictStatement(mostStrictPeerRequirement),\n });\n }\n }\n\n // for every inherited peer dependency, this package must declare a dependency or peer dependency\n // equal to or stricter than `mostStrictPeerRequirement`\n const packagePeerDependencyRange = packagePeerDependencies[peerDependencyName];\n if (packageDependencyRange == null && packagePeerDependencyRange == null) {\n context.addError({\n file: packageJsonPath,\n message:\n `[3] Package ${packageName} is missing required ${peerDependencyName} dependency.\\n\\t` +\n getMostStrictStatement(mostStrictPeerRequirement),\n fixer: getAddDependencyTypeFixer({\n packageJsonPath,\n dependencyType: \"peerDependencies\",\n dependencyName: peerDependencyName,\n version: mostStrictPeerRequirement.range,\n host: context.host,\n }),\n });\n }\n\n // if this package has a peer dependency on an inherited peer dependency,\n // the range must be equal to or stricter than `mostStrictPeerRequirement`\n if (packagePeerDependencyRange != null) {\n if (!isValidRange(packagePeerDependencyRange)) {\n const message = `Unable to parse ${packageName}'s ${peerDependencyName} peer dependency range '${packagePeerDependencyRange}'.`;\n if (skipUnparseableRanges) {\n context.addWarning({ file: packageJsonPath, message });\n } else {\n throw new Error(message);\n }\n } else if (!doesASatisfyB(packagePeerDependencyRange, mostStrictPeerRequirement.range)) {\n context.addError({\n file: packageJsonPath,\n message:\n `[4] Package ${packageName} peer dependency on ${peerDependencyName} '${packagePeerDependencyRange}' is not strict enough.\\n\\t` +\n getMostStrictStatement(mostStrictPeerRequirement),\n fixer: getAddDependencyTypeFixer({\n packageJsonPath,\n dependencyType: \"peerDependencies\",\n dependencyName: peerDependencyName,\n version: mostStrictPeerRequirement.range,\n host: context.host,\n }),\n });\n }\n }\n }\n}\n\nfunction shouldSkipPackage({\n dependencyBlacklist,\n dependencyWhitelist,\n packageName,\n}: {\n dependencyBlacklist?: string[];\n dependencyWhitelist?: string[];\n packageName: string;\n}) {\n // blacklist should take precedance\n if (\n (dependencyBlacklist != null && dependencyBlacklist.includes(packageName)) ||\n (dependencyWhitelist != null && !dependencyWhitelist.includes(packageName))\n ) {\n return true;\n }\n return false;\n}\n\nfunction getMostStrictStatement(mostStrictPeerRequirement: IResolvedPeerDependencyRequirement) {\n if (mostStrictPeerRequirement.fromPeerDependencyRequirements.length === 1) {\n const dependencyName = mostStrictPeerRequirement.fromPeerDependencyRequirements[0].fromPackageName;\n return `Dependency ${dependencyName} requires '${mostStrictPeerRequirement.range}'.`;\n } else {\n const dependencyNames = mostStrictPeerRequirement.fromPeerDependencyRequirements\n .map((peerDependencyRequirement) => peerDependencyRequirement.fromPackageName)\n .join(\", \");\n const dependencyRequirements = mostStrictPeerRequirement.fromPeerDependencyRequirements\n .map((peerDependencyRequirement) => `'${peerDependencyRequirement.range}'`)\n .join(\", \");\n return (\n `Dependencies [${dependencyNames}] require [${dependencyRequirements}] respectively, ` +\n `resolving to '${mostStrictPeerRequirement.range}'.`\n );\n }\n}\n\n/**\n * Given two version ranges, find the maximum intersecting range\n * of `a` and `b`. `findIntersection(a,b)` should return the same\n * result as `findIntersection(b,a)`.\n *\n * NOTE: This code assumes that input version ranges match `RANGE_REGEX`.\n * Additionally, major version ranges must not be repeated in union ranges.\n * e.g. `^15.0.5 || ^16.0.0` is permitted, but `15.0.5 || 15.0.999` is not.\n *\n * EXAMPLES:\n * findIntersection(\"15.1.0\", \"*\") => \"15.1.0\"\n * findIntersection(\"^15\", \"*\") => \"^15\"\n * findIntersection(\">=15\", \"*\") => \">=15\"\n * findIntersection(\"*\", \"*\") => \"*\"\n * findIntersection(\"15.1.0\", \">=1\") => \"15.1.0\"\n * findIntersection(\"^15\", \">=1\") => \"^15\"\n * findIntersection(\">=15\", \">=1\") => \">=15\"\n * findIntersection(\"15.1.0\", \"^15\") => \"15.1.0\"\n * findIntersection(\"^15.2\", \"^15\") => \"^15.2\"\n * findIntersection(\"14\", \"^15\") => undefined\n * findIntersection(\"15.1.0\", \"^15 || ^16\") => \"15.1.0\"\n * findIntersection(\"^15.2\", \"^15 || ^16\") => \"^15.2\"\n * findIntersection(\"14\", \"^15 || ^16\") => undefined\n * findIntersection(\"^15.2 || ^16\", \"^15 || ^16.4\") => \"^15.2 || ^16.4\"\n *\n * @param a version range that matches `RANGE_REGEX`\n * @param b version range that matches `RANGE_REGEX`\n * @returns the maximum intersecting `ValidRange`, or `undefined` if there is no intersection\n */\nexport function findIntersection(a: ValidRange, b: ValidRange): ValidRange | undefined {\n if (doesASatisfyB(a, b)) {\n return a;\n } else if (doesASatisfyB(b, a)) {\n return b;\n }\n\n // It's safe to assume that `isAnyVersionRange(a)` and `isAnyVersionRange(b)` are false,\n // since a `MATCH_ANY_VERSION_RANGE` would have been satisfied by anything.\n if (isAnyVersionRange(a) || isAnyVersionRange(b)) {\n throw new Error();\n }\n\n const aVersions = a.includes(\"||\") ? a.split(\"||\").map((s) => s.trim()) : [a];\n const bVersions = b.includes(\"||\") ? b.split(\"||\").map((s) => s.trim()) : [b];\n\n const aIsGreaterOrEqualVersionRange = isGreaterOrEqualVersionRange(a);\n const bIsGreaterOrEqualVersionRange = isGreaterOrEqualVersionRange(b);\n if (aIsGreaterOrEqualVersionRange && bIsGreaterOrEqualVersionRange) {\n // If the ranges were equal, they'd both satisfy each other.\n // Otherwise, the higher range should have satisfied the lower range.\n throw new Error();\n }\n\n if (aIsGreaterOrEqualVersionRange) {\n const aSemVer = coerce(a)!;\n // keep every version where `bSemVer` is >= `aSemVer`\n // where bVersion has an operator, we need to adjust the version to take into\n // account aVersion, e.g. if a is >=15.2.3 and b is ^15, then the intersection is actually ^15.2.3\n const compatibleBVersions = bVersions\n .map((bVersion) => {\n const bSemVer = coerce(bVersion)!;\n if (bVersion.startsWith(\"^\") && bSemVer.major >= aSemVer.major) {\n return `^${bSemVer.compare(aSemVer) >= 0 ? bSemVer.raw : aSemVer.raw}`;\n }\n return bSemVer.compare(aSemVer) !== -1 ? bVersion : undefined;\n })\n .filter((bVersion): bVersion is string => bVersion != null);\n if (compatibleBVersions.length === 0) {\n return undefined;\n }\n return compatibleBVersions.join(\" || \") as ValidRange;\n }\n if (bIsGreaterOrEqualVersionRange) {\n const bSemVer = coerce(b)!;\n // keep every version where `aSemVer` is >= `bSemVer`\n // where aVersion has an operator, we need to adjust the version to take into\n // account bVersion, e.g. if b is >=15.2.3 and a is ^15, then the intersection is actually ^15.2.3\n const compatibleAVersions = aVersions\n .map((aVersion) => {\n const aSemVer = coerce(aVersion)!;\n if (aVersion.startsWith(\"^\") && aSemVer.major >= bSemVer.major) {\n return `^${aSemVer.compare(bSemVer) >= 0 ? aSemVer.raw : bSemVer.raw}`;\n }\n return aSemVer.compare(bSemVer) !== -1 ? aVersion : undefined;\n })\n .filter((aVersion): aVersion is string => aVersion != null);\n if (compatibleAVersions.length === 0) {\n return undefined;\n }\n return compatibleAVersions.join(\" || \") as ValidRange;\n }\n\n const compatibleVersions = aVersions\n .map((aVersion) => {\n const aSemVer = coerce(aVersion)!;\n const majorMatchingBVersion = bVersions.find((m) => coerce(m)!.major === aSemVer.major);\n if (majorMatchingBVersion === undefined) {\n // there is no intersecting `b` major version for this `a` major version\n return undefined;\n }\n if (doesASatisfyB(aVersion as ValidRange, majorMatchingBVersion as ValidRange)) {\n return aVersion;\n } else if (doesASatisfyB(majorMatchingBVersion as ValidRange, aVersion as ValidRange)) {\n return majorMatchingBVersion;\n } else {\n return undefined;\n }\n })\n .filter((aVersion) => aVersion !== undefined);\n if (compatibleVersions.length === 0) {\n return undefined;\n }\n return compatibleVersions.join(\" || \") as ValidRange;\n}\n\n/**\n * Given two version ranges, determine whether `a` satisfies `b`.\n * `a` satisfies `b` iff `a` is a \"more strict than or equal to\" subset of `b`.\n * For example, both `^15` and `^15.2.0` satisfy `^15`, but `^15 || ^16` does not.\n *\n * NOTE: This code assumes that input version ranges match `RANGE_REGEX`.\n * Additionally, major version ranges must not be repeated in union ranges.\n * e.g. `^15.0.5 || ^16.0.0` is permitted, but `15.0.5 || 15.0.999` is not.\n *\n * To determine that `a` is \"more strict than or equal to\" `b`, we first\n * split the set of all versions or ranges that are potentially unioned in `a` and `b`.\n * For example, if `a` is `15.0.5`, we produce the set `[ \"15.0.5\" ]`,\n * and if `b` is `^15 || ^16`, we produce the set `[ \"^15\", \"^16\" ]`.\n * `a` is \"more strict than or equal to\" `b` iff each entry in `a`'s set\n * satisfies (equal to or greater than) some entry in `b`.\n *\n * The following version ranges satisfy `^15.0.5 || ^16.0.0`:\n * - `^15.0.5 || ^16.0.0`\n * - `^15.0.5 || ^16.x.x`\n * - `15.0.5 || 16.0.0`\n * - `^15.0.999 || ^16.0.0`\n * - `^15.0.5 || ^16.0.999`\n * - `^15.0.999`\n * - `^16.0.0`\n * - `16.0.0`\n * The following version ranges do not satisfy `^15.0.5 || ^16.0.0`:\n * - `^15.0.0 || ^16.0.0`\n * - `^15.0.5 || ^17.0.0`\n * - `^14.0.0 || ^15.0.5 || ^16.0.0`\n * - `^17.0.0`\n * - `17.0.0`\n *\n * @param a version range that matches `RANGE_REGEX`\n * @param b version range that matches `RANGE_REGEX`\n * @returns `true` if `a` is more strict than or equal to `b`, `false` otherwise\n */\nexport function doesASatisfyB(a: ValidRange, b: ValidRange): boolean {\n if (a === b) {\n return true;\n }\n\n const aIsAnyVersionRange = isAnyVersionRange(a);\n const bIsAnyVersionRange = isAnyVersionRange(b);\n if (bIsAnyVersionRange) {\n return true;\n } else if (aIsAnyVersionRange) {\n // `bIsAnyVersionRange` is `false`\n // `a` permits more values than `b`, therefore `a` is \"less strict\"\n return false;\n }\n\n const aVersions = a.includes(\"||\") ? a.split(\"||\").map((s) => s.trim()) : [a];\n const bVersions = b.includes(\"||\") ? b.split(\"||\").map((s) => s.trim()) : [b];\n\n const aIsGreaterOrEqualVersionRange = isGreaterOrEqualVersionRange(a);\n const bIsGreaterOrEqualVersionRange = isGreaterOrEqualVersionRange(b);\n if (aIsGreaterOrEqualVersionRange && bIsGreaterOrEqualVersionRange) {\n const aSemVer = coerce(a)!;\n const bSemVer = coerce(b)!;\n // `a` satisfies `b` so long as `aSemVer` is greater than or equal to `bSemVer`\n return aSemVer.compare(bSemVer) !== -1;\n } else if (bIsGreaterOrEqualVersionRange) {\n const bSemVer = coerce(b)!;\n return aVersions.every((aVersion) => {\n const aSemVer = coerce(aVersion)!;\n // `a` satisfies `b` so long as `aSemVer` is greater than or equal to `bSemVer`\n return aSemVer.compare(bSemVer) !== -1;\n });\n } else if (aIsGreaterOrEqualVersionRange) {\n // `bIsGreaterOrEqualVersionRange` is `false` (and `bIsAnyVersionRange` is `false`)\n // `a` permits more values than `b`, therefore `a` is \"less strict\"\n return false;\n }\n\n return aVersions.every((aVersion) => {\n const aSemVer = coerce(aVersion)!;\n const majorMatchingBVersion = bVersions.find((m) => coerce(m)!.major === aSemVer.major);\n if (majorMatchingBVersion === undefined) {\n // `a` permits a major version that is not permitted by `b`, therefore `a` is \"less strict\"\n return false;\n }\n\n const aVersionIsRange = isMajorVersionRange(aVersion);\n const majorMatchingBSemVer = coerce(majorMatchingBVersion)!;\n const majorMatchingBVersionIsRange = isMajorVersionRange(majorMatchingBVersion);\n\n if (majorMatchingBVersionIsRange) {\n // `a` satisfies `b` so long as `aSemVer` is greater than or equal to `majorMatchingBSemVer`\n // this is true whether or not `aVersionIsRange`\n return aSemVer.compare(majorMatchingBSemVer) !== -1;\n } else {\n // `majorMatchingBVersionIsRange` is `false`\n if (aVersionIsRange) {\n // `a` permits more values than `b`, therefore `a` is \"less strict\"\n // e.g if `b` is `15.5.5`, this is true whether `a` is `^15.0.0`, `^15.5.5`, or `^15.9.9`\n return false;\n } else {\n // `aVersionIsRange` is `false`\n // `a` satisfies `b` if and only if `aSemVer` is equal to `majorMatchingBSemVer`\n return aSemVer.compare(majorMatchingBSemVer) === 0;\n }\n }\n });\n}\n\n/**\n * Returns true if the version evaluates to 'any', e.g. * or x\n */\nfunction isAnyVersionRange(version: string): boolean {\n return MATCH_ANY_VERSION_RANGE.test(version);\n}\n\n/**\n * Retruns true if the version begins with '>='\n */\nfunction isGreaterOrEqualVersionRange(version: string): boolean {\n return MATCH_GREATER_OR_EQUAL_VERSION_RANGE.test(version);\n}\n\nfunction isMajorVersionRange(version: string): boolean {\n return MATCH_MAJOR_VERSION_RANGE.test(version);\n}\n\nexport type ValidRange = string & { _type: \"valid range\" };\nexport function isValidRange(version: string): version is ValidRange {\n return RANGE_REGEX.test(version);\n}\n\ntype IDependencyType = \"dependencies\" | \"devDependencies\" | \"peerDependencies\";\n\nfunction getAddDependencyTypeFixer({\n packageJsonPath,\n dependencyType,\n dependencyName,\n version,\n host,\n}: {\n packageJsonPath: string;\n dependencyType: IDependencyType;\n dependencyName: string;\n version: string;\n host: Host;\n}) {\n return () => {\n mutateJson<PackageJson>(packageJsonPath, host, (packageJson) => {\n if (packageJson[dependencyType] == null) {\n packageJson[dependencyType] = {};\n }\n packageJson[dependencyType]![dependencyName] = version;\n return packageJson;\n });\n };\n}\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { diff } from \"jest-diff\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\ntype OrderFunction = (context: Context) => (a: string, b: string) => number;\n\nconst Options = r\n .Record({\n order: r.Union(r.Array(r.String), r.Function),\n })\n .Or(r.Undefined);\n\ntype Options = r.Static<typeof Options>;\n\nconst defaultKeyOrder = [\n \"name\",\n \"version\",\n \"description\",\n \"author\",\n \"contributors\",\n \"url\",\n \"license\",\n \"type\",\n \"exports\",\n \"private\",\n \"engines\",\n \"bin\",\n \"types\",\n \"main\",\n \"module\",\n \"typings\",\n \"style\",\n \"sideEffects\",\n \"workspaces\",\n \"husky\",\n \"lint-staged\",\n \"files\",\n \"scripts\",\n \"resolutions\",\n \"dependencies\",\n \"peerDependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n \"publishConfig\",\n];\n\nexport const packageOrder = makeRule({\n name: \"packageOrder\",\n check: (context, opts) => {\n const packageJson = context.getPackageJson();\n const packagePath = context.getPackageJsonPath();\n\n const order: string[] | OrderFunction = opts === undefined ? defaultKeyOrder : opts.order;\n\n const comparator = isOrderFunction(order) ? order(context) : createComparator(order);\n\n const actualOrder = Object.keys(packageJson);\n const expectedOrder = actualOrder.slice().sort(comparator); // sort mutates, so we need to copy the previous result\n\n if (!arrayOrderCompare(actualOrder, expectedOrder)) {\n context.addError({\n file: packagePath,\n message: \"Incorrect order of fields in package.json\",\n longMessage: diff(expectedOrder, actualOrder, { expand: true }),\n fixer: () => {\n const expectedPackageJson: Record<string, any> = {};\n\n expectedOrder.forEach((key) => {\n expectedPackageJson[key] = packageJson[key];\n });\n\n context.host.writeJson(packagePath, expectedPackageJson);\n },\n });\n }\n },\n optionsRuntype: Options,\n});\n\nfunction arrayOrderCompare(a: ReadonlyArray<string>, b: ReadonlyArray<string>) {\n for (let index = 0; index < a.length; index++) {\n if (a[index] !== b[index]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction createComparator(order: ReadonlyArray<string>) {\n return (a: string, b: string) => {\n const aIndex = order.indexOf(a);\n const bIndex = order.indexOf(b);\n\n // if one of the two is missing from the order array, push it further down\n if (aIndex >= 0 && bIndex < 0) {\n return -1;\n } else if (aIndex < 0 && bIndex >= 0) {\n return 1;\n }\n\n // otherwise compare the indexes and use alphabetical as a tie breaker\n const compared = aIndex - bIndex;\n\n if (compared !== 0) {\n return compared;\n } else {\n return a.localeCompare(b);\n }\n };\n}\n\nfunction isOrderFunction(order: ReadonlyArray<string> | OrderFunction): order is OrderFunction {\n return !Array.isArray(order);\n}\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { mutateJson, PackageJson } from \"@monorepolint/utils\";\nimport { diff } from \"jest-diff\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\n\nexport const Options = r.Union(\n r\n .Record({\n entries: r.Dictionary(r.Unknown), // string => unknown, enforces existence of keys and their values\n })\n .And(\n r.Partial({\n entriesExist: r.Undefined,\n })\n ),\n r\n .Record({\n entriesExist: r.Array(r.String), // enforces existence of keys, but not values\n })\n .And(\n r.Partial({\n entries: r.Undefined,\n })\n ),\n r.Record({\n entries: r.Dictionary(r.Unknown), // string => unknown, enforces existence of keys and their values\n entriesExist: r.Array(r.String),\n })\n);\n\nexport type Options = r.Static<typeof Options>;\n\nexport const packageEntry = makeRule({\n name: \"packageEntry\",\n check: (context, options) => {\n const packageJson = context.getPackageJson();\n\n if (options.entries) {\n for (const key of Object.keys(options.entries)) {\n const value = options.entries[key];\n\n const entryDiff = diff(JSON.stringify(value) + \"\\n\", (JSON.stringify(packageJson[key]) || \"\") + \"\\n\");\n if (\n (typeof value !== \"object\" && value !== packageJson[key]) ||\n entryDiff == null ||\n !entryDiff.includes(\"Compared values have no visual difference\")\n ) {\n context.addError({\n file: context.getPackageJsonPath(),\n message: createStandardizedEntryErrorMessage(key),\n longMessage: entryDiff,\n fixer: () => {\n mutateJson<PackageJson>(context.getPackageJsonPath(), context.host, (input) => {\n input[key] = value;\n return input;\n });\n },\n });\n }\n }\n }\n\n if (options.entriesExist) {\n for (const key of options.entriesExist) {\n if (packageJson[key] === undefined) {\n context.addError({\n file: context.getPackageJsonPath(),\n message: createExpectedEntryErrorMessage(key),\n });\n }\n }\n }\n },\n optionsRuntype: Options,\n});\n\nexport function createStandardizedEntryErrorMessage(key: string) {\n return `Expected standardized entry for '${key}'`;\n}\n\nexport function createExpectedEntryErrorMessage(key: string) {\n return `Expected entry for '${key}' to exist`;\n}\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { mutateJson, PackageJson } from \"@monorepolint/utils\";\nimport { diff } from \"jest-diff\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\n\nexport const Options = r.Record({\n scripts: r.Dictionary(\n r.Union(\n r.String,\n r.Record({\n options: r.Array(r.String.Or(r.Undefined)),\n fixValue: r.Union(r.String, r.Undefined, r.Literal(false)).optional(),\n })\n )\n ), // string => string\n});\n\nexport type Options = r.Static<typeof Options>;\n\nexport const MSG_NO_SCRIPTS_BLOCK = \"No scripts block in package.json\";\n\nexport const packageScript = makeRule({\n name: \"packageScript\",\n check: (context, options) => {\n const packageJson = context.getPackageJson();\n if (packageJson.scripts === undefined) {\n context.addError({\n file: context.getPackageJsonPath(),\n message: MSG_NO_SCRIPTS_BLOCK,\n fixer: () => {\n mutateJson<PackageJson>(context.getPackageJsonPath(), context.host, (input) => {\n input.scripts = {};\n return input;\n });\n },\n });\n return;\n }\n for (const [name, value] of Object.entries(options.scripts)) {\n const allowedValues = new Set<string | undefined>();\n let fixValue: string | undefined | false;\n let allowEmpty = false;\n let fixToEmpty = false;\n\n if (typeof value === \"string\") {\n allowedValues.add(value);\n fixValue = value;\n } else {\n for (const q of value.options) {\n if (q === undefined) {\n allowEmpty = true;\n }\n allowedValues.add(q);\n }\n fixToEmpty = Object.prototype.hasOwnProperty.call(value, \"fixValue\") && value.fixValue === undefined;\n fixValue = value.fixValue;\n }\n\n const actualValue = packageJson.scripts[name];\n\n if (!allowedValues.has(actualValue) && !(allowEmpty === true && actualValue === undefined)) {\n let fixer;\n\n if (fixValue !== false && (fixValue !== undefined || fixToEmpty === true)) {\n const q = fixValue;\n fixer = () => {\n mutateJson<PackageJson>(context.getPackageJsonPath(), context.host, (input) => {\n if (fixToEmpty && q === undefined) {\n delete input.scripts![name];\n } else {\n input.scripts![name] = q!;\n }\n return input;\n });\n };\n }\n\n const validOptionsString = Array.from(allowedValues.values())\n .map((a) => (a === undefined ? \"(empty)\" : `'${a}'`))\n .join(\", \");\n\n context.addError({\n file: context.getPackageJsonPath(),\n message: `Expected standardized script entry for '${name}'. Valid options: ${validOptionsString}`,\n longMessage: diff(validOptionsString + \"\\n\", (packageJson.scripts[name] || \"\") + \"\\n\"),\n fixer,\n });\n }\n }\n },\n optionsRuntype: Options,\n});\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { matchesAnyGlob } from \"@monorepolint/utils\";\nimport { diff } from \"jest-diff\";\nimport * as path from \"path\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\n\nconst DEFAULT_TSCONFIG_FILENAME = \"tsconfig.json\";\n\nconst Options = r\n .Partial({\n file: r.String,\n generator: r.Function,\n tsconfigReferenceFile: r.String,\n template: r.Record({}).Or(r.String),\n templateFile: r.String,\n excludedReferences: r.Array(r.String).Or(r.Undefined),\n additionalReferences: r.Array(r.String).Or(r.Undefined),\n })\n .withConstraint(({ generator, template, templateFile }) => {\n let count = 0;\n if (generator) {\n count++;\n }\n if (template) {\n count++;\n }\n if (templateFile) {\n count++;\n }\n\n return count === 1 || \"Expect one of { generator, template, templateFile }\";\n });\n\nexport interface Options extends r.Static<typeof Options> {}\n\nexport const standardTsconfig = makeRule({\n name: \"standardTsconfig\",\n check: async (context, opts) => {\n const tsconfigFileName = opts.file ?? DEFAULT_TSCONFIG_FILENAME;\n const fullPath = path.resolve(context.packageDir, tsconfigFileName);\n const generator = getGenerator(context, opts);\n const expectedContent = await generator(context);\n\n const actualContent = context.host.exists(fullPath)\n ? context.host.readFile(fullPath, { encoding: \"utf-8\" })\n : undefined;\n\n if (expectedContent === undefined) {\n context.addWarning({\n file: fullPath,\n message: \"Excluding from expect-standard-tsconfig\",\n });\n return;\n }\n\n if (actualContent !== expectedContent) {\n context.addError({\n file: fullPath,\n message: \"Expect file contents to match\",\n longMessage: diff(expectedContent, actualContent, { expand: true }),\n fixer: () => {\n context.host.writeFile(fullPath, expectedContent, {\n encoding: \"utf-8\",\n });\n },\n });\n }\n },\n optionsRuntype: Options,\n});\n\nfunction getGenerator(context: Context, opts: Options) {\n if (opts.generator) {\n return opts.generator;\n } else if (opts.templateFile) {\n const { packageDir: workspacePackageDir } = context.getWorkspaceContext();\n const fullPath = path.resolve(workspacePackageDir, opts.templateFile);\n const template = JSON.parse(context.host.readFile(fullPath, { encoding: \"utf-8\" }));\n\n return makeGenerator(template, opts.excludedReferences, opts.additionalReferences, opts.tsconfigReferenceFile);\n } else if (opts.template) {\n return makeGenerator(opts.template, opts.excludedReferences, opts.additionalReferences, opts.tsconfigReferenceFile);\n } else {\n throw new Error(\"Unable to make generator\");\n }\n}\n\nfunction makeGenerator(\n template: any,\n excludedReferences: ReadonlyArray<string> | undefined,\n additionalReferences: ReadonlyArray<string> | undefined,\n tsconfigReferenceFile?: string\n) {\n return async function generator(context: Context) {\n template = {\n ...template,\n references: [],\n }; // make a copy and ensure we have a references array\n\n const nameToDirectory = await context.getWorkspaceContext().getPackageNameToDir();\n\n const packageJson = context.getPackageJson();\n const deps = [...Object.keys(packageJson.dependencies || {}), ...Object.keys(packageJson.devDependencies || {})];\n for (const dep of deps) {\n const packageDir = nameToDirectory.get(dep);\n if (packageDir !== undefined && (excludedReferences === undefined || !matchesAnyGlob(dep, excludedReferences))) {\n const absoluteReferencePath =\n tsconfigReferenceFile !== undefined ? path.join(packageDir, tsconfigReferenceFile) : packageDir;\n template.references.push({\n path: path.relative(context.packageDir, absoluteReferencePath),\n });\n }\n }\n\n if (additionalReferences) {\n for (const additionalReference of additionalReferences) {\n template.references.push({\n path: additionalReference,\n });\n }\n }\n\n return JSON.stringify(template, undefined, 2) + \"\\n\";\n };\n}\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport * as globby from \"globby\";\nimport * as path from \"node:path\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\n\nexport const Options = r.Undefined;\n\ntype Options = r.Static<typeof Options>;\n\n// Enforce that the root package.json contains all of the workspaces in the repo (including nested packages)\nexport const nestedWorkspaces = makeRule({\n name: \"nestedWorkspaces\",\n check: (context) => {\n const rootPackageJson = context.getWorkspaceContext().getPackageJson();\n\n // Expand a set of globs covering all package.json files in the entire repo (except the root)\n const packageJsonPaths = globby.globbySync([\"*/**/package.json\", \"!**/node_modules/**\"]);\n\n const workspaces = Array.isArray(rootPackageJson.workspaces)\n ? rootPackageJson.workspaces\n : rootPackageJson.workspaces !== undefined\n ? rootPackageJson.workspaces.packages\n : undefined;\n\n if (workspaces === undefined && packageJsonPaths.length > 0) {\n context.addError({\n file: context.getPackageJsonPath(),\n message: 'The \"workspace\" field is missing, even though there are workspaces in the repository.',\n });\n return;\n }\n\n // Build a set of globs for each package.json that exists in packages specified by a workspace.\n const workspacePackageJsons = (workspaces || []).map((item) => `${item}/package.json`);\n\n // Expand the globs to get an array of all package.json files that are in packages specified by a workspace.\n const expandedWorkspacesGlobs = globby.globbySync([...workspacePackageJsons, \"!**/node_modules/**\"]);\n\n // Ensure there are no package.jsons which are not included in the globbed workspaces set\n const difference = packageJsonPaths.filter((packageJsonPath) => !expandedWorkspacesGlobs.includes(packageJsonPath));\n\n if (difference.length !== 0) {\n const differencesList = difference.map((packageJsonPath) => path.dirname(packageJsonPath)).join(\", \");\n context.addError({\n file: context.getPackageJsonPath(),\n message:\n `The \"workspace\" field is missing one or more values: ${differencesList}. ` +\n 'You may be able to use a glob to avoid listing each workspace individually, e.g. \"packages/nested-workspace/*\".',\n });\n }\n },\n optionsRuntype: Options,\n});\n","/*!\n * Copyright 2019 Palantir Technologies, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n */\n\nimport { Context } from \"@monorepolint/config\";\nimport { mutateJson, PackageJson } from \"@monorepolint/utils\";\nimport { diff } from \"jest-diff\";\nimport * as r from \"runtypes\";\nimport { makeRule } from \"./util/makeRule.js\";\n\nconst Options = r.Partial({\n dependencies: r.Dictionary(r.String),\n devDependencies: r.Dictionary(r.String),\n peerDependencies: r.Dictionary(r.String),\n optionalDependencies: r.Dictionary(r.String),\n});\n\ntype Options = r.Static<typeof Options>;\n\nexport const requireDependency = makeRule({\n name: \"requireDependency\",\n check: function expectPackageEntry(context: Context, options: Options) {\n const packageJson = context.getPackageJson();\n const packageJsonPath = context.getPackageJsonPath();\n\n [\n \"dependencies\" as const,\n \"devDependencies\" as const,\n \"peerDependencies\" as const,\n \"optionalDependencies\" as const,\n ].forEach((type) => {\n if (!options[type]) {\n return;\n }\n\n if (packageJson[type] === undefined) {\n context.addError({\n file: packageJsonPath,\n message: `No ${type} block, cannot add required ${type}.`,\n fixer: () => {\n mutateJson<PackageJson>(packageJsonPath, context.host, (input) => {\n input[type] = options[type];\n return input;\n });\n },\n });\n return;\n }\n\n for (const [dep, version] of Object.entries(options[type]!)) {\n if (packageJson[type][dep] !== version) {\n context.addError({\n file: packageJsonPath,\n message: `Expected dependency ${dep}@${version}`,\n longMessage: diff(`${dep}@${version}\\n`, `${dep}@${packageJson[type][dep] || \"missing\"}\\n`)!,\n fixer: () => {\n mutateJson<PackageJson>(packageJsonPath, context.host, (input) => {\n input[type] = { ...input[type], [dep]: version };\n return input;\n });\n },\n });\n }\n }\n });\n },\n optionsRuntype: Options,\n});\n"],"mappings":"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","names":["r","Options","path","r","Options","diff","r","Options","diff","r","Options","diff","path","r","Options","diff","mutateJson","path","r","coerce","resolvePackagePath","Options","resolvePackagePath","coerce","mutateJson","diff","r","Options","arrayOrderCompare","diff","mutateJson","diff","r","Options","diff","mutateJson","mutateJson","diff","r","Options","mutateJson","diff","matchesAnyGlob","diff","path","r","Options","diff","matchesAnyGlob","path","r","Options","mutateJson","diff","r","Options","mutateJson","diff"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@monorepolint/rules",
|
|
3
|
-
"version": "0.5.0-alpha.
|
|
3
|
+
"version": "0.5.0-alpha.107+27faf77",
|
|
4
4
|
"author": "Eric L Anderson (https://github.com/ericanderson)",
|
|
5
5
|
"contributors": [
|
|
6
6
|
"Mac Lockard (https://github.com/maclockard)"
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
"transpile-typescript": "tsup --config ../../tsup.config.cjs"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@monorepolint/config": "^0.5.0-alpha.
|
|
34
|
-
"@monorepolint/core": "^0.5.0-alpha.
|
|
35
|
-
"@monorepolint/utils": "^0.5.0-alpha.
|
|
33
|
+
"@monorepolint/config": "^0.5.0-alpha.107+27faf77",
|
|
34
|
+
"@monorepolint/core": "^0.5.0-alpha.107+27faf77",
|
|
35
|
+
"@monorepolint/utils": "^0.5.0-alpha.107+27faf77",
|
|
36
36
|
"globby": "^13.1.2",
|
|
37
37
|
"jest-diff": "^29.3.1",
|
|
38
38
|
"resolve-package-path": "^4.0.3",
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"publishConfig": {
|
|
60
60
|
"access": "public"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "27faf7744e0ea03e0609e09747c2c314b56f6e88"
|
|
63
63
|
}
|