@rsdk/yarn.constraints 6.0.0-next.4 → 6.0.0-next.41
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/DEPENDENCY_MODEL.md +460 -0
- package/README.MD +85 -21
- package/__tests__/compatibility.test.ts +321 -0
- package/__tests__/config-validation.test.ts +42 -0
- package/__tests__/engine.test.ts +1107 -0
- package/__tests__/fixtures/imports/bin.js +4 -0
- package/__tests__/fixtures/imports/export-entry.mjs +1 -0
- package/__tests__/fixtures/imports/lib/lib-entry.js +3 -0
- package/__tests__/fixtures/imports/root-entry.js +4 -0
- package/__tests__/fixtures/imports/rules/transitive.js +3 -0
- package/__tests__/fixtures/imports/src/common.cjs +3 -0
- package/__tests__/fixtures/imports/src/common.cts +3 -0
- package/__tests__/fixtures/imports/src/component.tsx +4 -0
- package/__tests__/fixtures/imports/src/index.ts +13 -0
- package/__tests__/fixtures/imports/src/module.mjs +3 -0
- package/__tests__/fixtures/imports/src/module.mts +3 -0
- package/__tests__/fixtures/imports/src/plain.js +3 -0
- package/__tests__/fixtures/imports/src/test-only-usage.ts +1 -0
- package/__tests__/fixtures/imports/test/outside.ts +3 -0
- package/__tests__/imports.test.ts +218 -0
- package/__tests__/manifest-writer.test.ts +157 -0
- package/dist/ansi.d.ts +9 -0
- package/dist/ansi.js +24 -0
- package/dist/ansi.js.map +1 -0
- package/dist/bin/depdoc.d.ts +2 -0
- package/dist/bin/depdoc.js +157 -0
- package/dist/bin/depdoc.js.map +1 -0
- package/dist/collectors/config.d.ts +2 -0
- package/dist/collectors/config.js +28 -0
- package/dist/collectors/config.js.map +1 -0
- package/dist/collectors/external-metadata.d.ts +5 -0
- package/dist/collectors/external-metadata.js +110 -0
- package/dist/collectors/external-metadata.js.map +1 -0
- package/dist/collectors/package-extensions.d.ts +3 -0
- package/dist/collectors/package-extensions.js +43 -0
- package/dist/collectors/package-extensions.js.map +1 -0
- package/dist/collectors/type-providers.d.ts +3 -0
- package/dist/collectors/type-providers.js +46 -0
- package/dist/collectors/type-providers.js.map +1 -0
- package/dist/collectors/workspaces.d.ts +2 -0
- package/dist/collectors/workspaces.js +90 -0
- package/dist/collectors/workspaces.js.map +1 -0
- package/dist/dependency-model.d.ts +11 -0
- package/dist/dependency-model.js +18 -0
- package/dist/dependency-model.js.map +1 -0
- package/dist/index.d.ts +9 -5
- package/dist/index.js +13 -33
- package/dist/index.js.map +1 -1
- package/dist/lib/imports.d.ts +11 -0
- package/dist/lib/imports.js +342 -0
- package/dist/lib/imports.js.map +1 -0
- package/dist/lib/package-json.d.ts +21 -0
- package/dist/lib/package-json.js +32 -0
- package/dist/lib/package-json.js.map +1 -0
- package/dist/model/config-validation.d.ts +6 -0
- package/dist/model/config-validation.js +31 -0
- package/dist/model/config-validation.js.map +1 -0
- package/dist/model/diagnostics.d.ts +4 -0
- package/dist/model/diagnostics.js +295 -0
- package/dist/model/diagnostics.js.map +1 -0
- package/dist/model/engine.d.ts +5 -0
- package/dist/model/engine.js +52 -0
- package/dist/model/engine.js.map +1 -0
- package/dist/model/expected.d.ts +20 -0
- package/dist/model/expected.js +89 -0
- package/dist/model/expected.js.map +1 -0
- package/dist/model/peer-propagation.d.ts +2 -0
- package/dist/model/peer-propagation.js +124 -0
- package/dist/model/peer-propagation.js.map +1 -0
- package/dist/model/placement.d.ts +9 -0
- package/dist/model/placement.js +210 -0
- package/dist/model/placement.js.map +1 -0
- package/dist/model/rules.d.ts +15 -0
- package/dist/model/rules.js +52 -0
- package/dist/model/rules.js.map +1 -0
- package/dist/model/types.d.ts +118 -0
- package/dist/model/types.js +9 -0
- package/dist/model/types.js.map +1 -0
- package/dist/model/versions.d.ts +3 -0
- package/dist/model/versions.js +77 -0
- package/dist/model/versions.js.map +1 -0
- package/dist/reporting.d.ts +3 -0
- package/dist/reporting.js +80 -0
- package/dist/reporting.js.map +1 -0
- package/dist/runner.d.ts +2 -0
- package/dist/runner.js +70 -0
- package/dist/runner.js.map +1 -0
- package/dist/writer/manifest-writer.d.ts +2 -0
- package/dist/writer/manifest-writer.js +72 -0
- package/dist/writer/manifest-writer.js.map +1 -0
- package/eslint.config.cjs +3 -0
- package/jest.config.js +1 -0
- package/package.json +7 -3
- package/src/ansi.ts +23 -0
- package/src/bin/depdoc.ts +213 -0
- package/src/collectors/config.ts +33 -0
- package/src/collectors/external-metadata.ts +148 -0
- package/src/collectors/package-extensions.ts +52 -0
- package/src/collectors/type-providers.ts +51 -0
- package/src/collectors/workspaces.ts +107 -0
- package/src/dependency-model.ts +26 -0
- package/src/index.ts +28 -45
- package/src/lib/imports.ts +435 -0
- package/src/lib/package-json.ts +46 -0
- package/src/model/config-validation.ts +49 -0
- package/src/model/diagnostics.ts +358 -0
- package/src/model/engine.ts +120 -0
- package/src/model/expected.ts +141 -0
- package/src/model/peer-propagation.ts +199 -0
- package/src/model/placement.ts +378 -0
- package/src/model/rules.ts +85 -0
- package/src/model/types.ts +165 -0
- package/src/model/versions.ts +114 -0
- package/src/reporting.ts +117 -0
- package/src/runner.ts +102 -0
- package/src/writer/manifest-writer.ts +111 -0
- package/tsconfig.build.json +1 -0
- package/tsconfig.json +6 -1
- package/dist/constraint-schema.d.ts +0 -1
- package/dist/constraint-schema.js +0 -17
- package/dist/constraint-schema.js.map +0 -1
- package/dist/dependency-checker.d.ts +0 -8
- package/dist/dependency-checker.js +0 -40
- package/dist/dependency-checker.js.map +0 -1
- package/src/constraint-schema.ts +0 -20
- package/src/dependency-checker.ts +0 -41
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compareManifest = compareManifest;
|
|
4
|
+
exports.validateBasicShape = validateBasicShape;
|
|
5
|
+
exports.dedupeViolations = dedupeViolations;
|
|
6
|
+
/**
|
|
7
|
+
* Manifest diagnostics.
|
|
8
|
+
*
|
|
9
|
+
* The expected graph is compared with actual package manifests here. This
|
|
10
|
+
* module also owns basic shape checks such as root-only sections, workspace
|
|
11
|
+
* roles, forbidden service/CLI sections, and library mirror diagnostics.
|
|
12
|
+
*/
|
|
13
|
+
const expected_1 = require("./expected");
|
|
14
|
+
const placement_1 = require("./placement");
|
|
15
|
+
const rules_1 = require("./rules");
|
|
16
|
+
const types_1 = require("./types");
|
|
17
|
+
function getWorkspaceLabel(workspace) {
|
|
18
|
+
return workspace.isRoot ? '<root>' : workspace.name;
|
|
19
|
+
}
|
|
20
|
+
function collectActualDependencyNames(workspace) {
|
|
21
|
+
return new Set(types_1.SECTIONS.flatMap((section) => Object.keys(workspace.pkg[section] ?? {})));
|
|
22
|
+
}
|
|
23
|
+
function hasExternalCollectedUsage(workspace, workspaceNames) {
|
|
24
|
+
for (const depIdent of workspace.sourceUsage.keys()) {
|
|
25
|
+
if ((0, placement_1.isExternal)(depIdent, workspaceNames))
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
for (const depIdent of workspace.dtsImports) {
|
|
29
|
+
if ((0, placement_1.isExternal)(depIdent, workspaceNames))
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
function compareManifest(expected, violations) {
|
|
35
|
+
const workspace = expected.workspace;
|
|
36
|
+
const actualNames = collectActualDependencyNames(workspace);
|
|
37
|
+
const expectedNames = new Set();
|
|
38
|
+
for (const section of types_1.SECTIONS) {
|
|
39
|
+
for (const depIdent of expected.sections[section].keys()) {
|
|
40
|
+
expectedNames.add(depIdent);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
for (const depIdent of expectedNames) {
|
|
44
|
+
const expectedSection = (0, expected_1.getExpectedSection)(expected, depIdent);
|
|
45
|
+
const expectedRange = (0, expected_1.getExpectedRange)(expected, depIdent);
|
|
46
|
+
const actualSection = (0, expected_1.getDeclaredSection)(workspace.pkg, depIdent);
|
|
47
|
+
const actualRange = (0, expected_1.getDeclaredRange)(workspace.pkg, depIdent);
|
|
48
|
+
if (!actualSection) {
|
|
49
|
+
violations.push({
|
|
50
|
+
code: 'missing',
|
|
51
|
+
workspace: getWorkspaceLabel(workspace),
|
|
52
|
+
workspaceLocation: workspace.location,
|
|
53
|
+
dependency: depIdent,
|
|
54
|
+
expectedSection,
|
|
55
|
+
expectedRange,
|
|
56
|
+
message: `${depIdent} is missing from ${expectedSection}`,
|
|
57
|
+
});
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (actualSection !== expectedSection) {
|
|
61
|
+
violations.push({
|
|
62
|
+
code: expected.workspace.isRoot ? 'root-section' : 'wrong-section',
|
|
63
|
+
workspace: getWorkspaceLabel(workspace),
|
|
64
|
+
workspaceLocation: workspace.location,
|
|
65
|
+
dependency: depIdent,
|
|
66
|
+
actualSection,
|
|
67
|
+
expectedSection,
|
|
68
|
+
actualRange: actualRange ?? undefined,
|
|
69
|
+
expectedRange,
|
|
70
|
+
message: `${depIdent} is in ${actualSection}, expected ${expectedSection}`,
|
|
71
|
+
});
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (actualRange !== expectedRange) {
|
|
75
|
+
violations.push({
|
|
76
|
+
code: 'wrong-range',
|
|
77
|
+
workspace: getWorkspaceLabel(workspace),
|
|
78
|
+
workspaceLocation: workspace.location,
|
|
79
|
+
dependency: depIdent,
|
|
80
|
+
actualSection,
|
|
81
|
+
expectedSection,
|
|
82
|
+
actualRange: actualRange ?? undefined,
|
|
83
|
+
expectedRange,
|
|
84
|
+
message: `${depIdent} range is ${actualRange}, expected ${expectedRange}`,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
for (const depIdent of actualNames) {
|
|
89
|
+
if (expectedNames.has(depIdent))
|
|
90
|
+
continue;
|
|
91
|
+
const actualSection = (0, expected_1.getDeclaredSection)(workspace.pkg, depIdent);
|
|
92
|
+
const actualRange = (0, expected_1.getDeclaredRange)(workspace.pkg, depIdent);
|
|
93
|
+
const isForbiddenRootSection = workspace.isRoot && actualSection && actualSection !== 'devDependencies';
|
|
94
|
+
violations.push({
|
|
95
|
+
code: isForbiddenRootSection ? 'root-section' : 'stale',
|
|
96
|
+
workspace: getWorkspaceLabel(workspace),
|
|
97
|
+
workspaceLocation: workspace.location,
|
|
98
|
+
dependency: depIdent,
|
|
99
|
+
actualSection: actualSection ?? undefined,
|
|
100
|
+
actualRange: actualRange ?? undefined,
|
|
101
|
+
message: isForbiddenRootSection
|
|
102
|
+
? `${depIdent} is declared in root ${actualSection}; root package.json may contain only devDependencies`
|
|
103
|
+
: `${depIdent} is declared but not required by the derived model`,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
for (const depIdent of Object.keys(workspace.pkg.peerDependenciesMeta ?? {})) {
|
|
107
|
+
if (expected.sections.peerDependencies.has(depIdent))
|
|
108
|
+
continue;
|
|
109
|
+
violations.push({
|
|
110
|
+
code: 'stale',
|
|
111
|
+
workspace: getWorkspaceLabel(workspace),
|
|
112
|
+
workspaceLocation: workspace.location,
|
|
113
|
+
dependency: depIdent,
|
|
114
|
+
message: `${depIdent} has peerDependenciesMeta but is not expected in peerDependencies`,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function validateBasicShape(workspaces, expectedByLocation, rules, violations, warnings, withDts) {
|
|
119
|
+
const workspaceNames = new Set(workspaces.filter((ws) => !ws.isRoot).map((ws) => ws.name));
|
|
120
|
+
for (const workspace of workspaces) {
|
|
121
|
+
if (workspace.isRoot) {
|
|
122
|
+
if (workspace.pkg.private !== true) {
|
|
123
|
+
violations.push({
|
|
124
|
+
code: 'root-private',
|
|
125
|
+
workspace: getWorkspaceLabel(workspace),
|
|
126
|
+
workspaceLocation: workspace.location,
|
|
127
|
+
message: 'root package.json must have private: true',
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (!workspace.pkg.role) {
|
|
133
|
+
violations.push({
|
|
134
|
+
code: 'role-missing',
|
|
135
|
+
workspace: getWorkspaceLabel(workspace),
|
|
136
|
+
workspaceLocation: workspace.location,
|
|
137
|
+
message: 'workspace package.json must declare role',
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
else if (!(0, rules_1.isWorkspaceRole)(workspace.pkg.role)) {
|
|
141
|
+
violations.push({
|
|
142
|
+
code: 'role-invalid',
|
|
143
|
+
workspace: getWorkspaceLabel(workspace),
|
|
144
|
+
workspaceLocation: workspace.location,
|
|
145
|
+
message: `workspace role must be library, service, or cli; got ${workspace.pkg.role}`,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
if (workspace.pkg.bin && workspace.role !== 'cli') {
|
|
149
|
+
warnings.push({
|
|
150
|
+
code: 'bin-role-mismatch',
|
|
151
|
+
workspace: getWorkspaceLabel(workspace),
|
|
152
|
+
workspaceLocation: workspace.location,
|
|
153
|
+
message: 'workspace declares bin but role is not cli',
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
if (workspace.role &&
|
|
157
|
+
workspace.sourceFileCount !== undefined &&
|
|
158
|
+
workspace.sourceFileCount > 0 &&
|
|
159
|
+
!hasExternalCollectedUsage(workspace, workspaceNames)) {
|
|
160
|
+
warnings.push({
|
|
161
|
+
code: 'zero-external-dependencies',
|
|
162
|
+
workspace: getWorkspaceLabel(workspace),
|
|
163
|
+
workspaceLocation: workspace.location,
|
|
164
|
+
message: `no external source imports were collected from ${workspace.sourceFileCount} source file(s); check source roots and entrypoints before trusting autofix`,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
if (workspace.hasSrc && !workspace.hasDist && withDts) {
|
|
168
|
+
violations.push({
|
|
169
|
+
code: 'dist-missing',
|
|
170
|
+
workspace: getWorkspaceLabel(workspace),
|
|
171
|
+
workspaceLocation: workspace.location,
|
|
172
|
+
message: 'dist/ not found; build required before --with-dts check',
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
if (workspace.role === 'service' || workspace.role === 'cli') {
|
|
176
|
+
for (const section of ['peerDependencies', 'devDependencies']) {
|
|
177
|
+
for (const depIdent of Object.keys(workspace.pkg[section] ?? {})) {
|
|
178
|
+
violations.push({
|
|
179
|
+
code: 'forbidden-section',
|
|
180
|
+
workspace: getWorkspaceLabel(workspace),
|
|
181
|
+
workspaceLocation: workspace.location,
|
|
182
|
+
dependency: depIdent,
|
|
183
|
+
actualSection: section,
|
|
184
|
+
expectedSection: section === 'peerDependencies' ? 'dependencies' : undefined,
|
|
185
|
+
message: `${section} are forbidden for ${workspace.role} workspaces`,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (workspace.role === 'library') {
|
|
191
|
+
for (const depIdent of Object.keys(workspace.pkg.dependencies ?? {})) {
|
|
192
|
+
if (workspace.pkg.peerDependencies?.[depIdent] !== undefined) {
|
|
193
|
+
violations.push({
|
|
194
|
+
code: 'forbidden-section',
|
|
195
|
+
workspace: getWorkspaceLabel(workspace),
|
|
196
|
+
workspaceLocation: workspace.location,
|
|
197
|
+
dependency: depIdent,
|
|
198
|
+
actualSection: 'dependencies',
|
|
199
|
+
expectedSection: 'peerDependencies',
|
|
200
|
+
message: `${depIdent} is declared in both dependencies and peerDependencies`,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const expected = expectedByLocation.get(workspace.location);
|
|
205
|
+
if (expected) {
|
|
206
|
+
for (const [depIdent, peerRange] of expected.sections
|
|
207
|
+
.peerDependencies) {
|
|
208
|
+
const devRange = workspace.pkg.devDependencies?.[depIdent];
|
|
209
|
+
if (devRange !== peerRange) {
|
|
210
|
+
violations.push({
|
|
211
|
+
code: 'mirror',
|
|
212
|
+
workspace: getWorkspaceLabel(workspace),
|
|
213
|
+
workspaceLocation: workspace.location,
|
|
214
|
+
dependency: depIdent,
|
|
215
|
+
actualSection: 'devDependencies',
|
|
216
|
+
expectedSection: 'devDependencies',
|
|
217
|
+
actualRange: devRange,
|
|
218
|
+
expectedRange: peerRange,
|
|
219
|
+
message: `${depIdent} must be mirrored from peerDependencies to devDependencies`,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
for (const depIdent of Object.keys(workspace.pkg.devDependencies ?? {})) {
|
|
226
|
+
if (workspace.pkg.dependencies?.[depIdent] !== undefined) {
|
|
227
|
+
violations.push({
|
|
228
|
+
code: 'forbidden-section',
|
|
229
|
+
workspace: getWorkspaceLabel(workspace),
|
|
230
|
+
workspaceLocation: workspace.location,
|
|
231
|
+
dependency: depIdent,
|
|
232
|
+
actualSection: 'devDependencies',
|
|
233
|
+
expectedSection: 'dependencies',
|
|
234
|
+
message: `${depIdent} is declared in both dependencies and devDependencies`,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
for (const section of types_1.SECTIONS) {
|
|
239
|
+
for (const depIdent of Object.keys(workspace.pkg[section] ?? {})) {
|
|
240
|
+
const rule = (0, rules_1.getEffectiveRule)(rules, depIdent, workspace.name, workspace.location);
|
|
241
|
+
const expected = expectedByLocation.get(workspace.location);
|
|
242
|
+
if (rule.rootOnly &&
|
|
243
|
+
(0, placement_1.isExternal)(depIdent, workspaceNames) &&
|
|
244
|
+
!expected?.sections[section].has(depIdent)) {
|
|
245
|
+
violations.push({
|
|
246
|
+
code: 'root-only',
|
|
247
|
+
workspace: getWorkspaceLabel(workspace),
|
|
248
|
+
workspaceLocation: workspace.location,
|
|
249
|
+
dependency: depIdent,
|
|
250
|
+
actualSection: section,
|
|
251
|
+
expectedSection: 'devDependencies',
|
|
252
|
+
message: `${depIdent} is rootOnly and must not be declared in workspace package.json`,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
const expected = expectedByLocation.get(workspace.location);
|
|
258
|
+
if (expected) {
|
|
259
|
+
for (const [depIdent, reasons] of expected.reasons) {
|
|
260
|
+
if (!(0, placement_1.isExternal)(depIdent, workspaceNames))
|
|
261
|
+
continue;
|
|
262
|
+
if (!reasons.some((reason) => reason.kind === 'root-only'))
|
|
263
|
+
continue;
|
|
264
|
+
violations.push({
|
|
265
|
+
code: 'root-only-usage',
|
|
266
|
+
workspace: getWorkspaceLabel(workspace),
|
|
267
|
+
workspaceLocation: workspace.location,
|
|
268
|
+
dependency: depIdent,
|
|
269
|
+
expectedSection: 'devDependencies',
|
|
270
|
+
message: `${depIdent} is rootOnly and must not be used by workspace source or peer surface`,
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
function dedupeViolations(violations) {
|
|
277
|
+
const result = [];
|
|
278
|
+
const seen = new Set();
|
|
279
|
+
for (const violation of violations) {
|
|
280
|
+
const key = [
|
|
281
|
+
violation.code,
|
|
282
|
+
violation.workspaceLocation,
|
|
283
|
+
violation.dependency ?? '',
|
|
284
|
+
violation.actualSection ?? '',
|
|
285
|
+
violation.expectedSection ?? '',
|
|
286
|
+
violation.expectedRange ?? '',
|
|
287
|
+
].join('\0');
|
|
288
|
+
if (seen.has(key))
|
|
289
|
+
continue;
|
|
290
|
+
seen.add(key);
|
|
291
|
+
result.push(violation);
|
|
292
|
+
}
|
|
293
|
+
return result;
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/model/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DependencyModelFacts, DependencyModelOutput, DependencyRule, ExpectedWorkspace, WorkspaceFacts } from './types';
|
|
2
|
+
export declare function buildExpected(workspaces: WorkspaceFacts[], rules: DependencyRule[], externalPeerMetadata: Map<string, Map<string, string> | null>, externalTypeMetadata: Map<string, {
|
|
3
|
+
hasBundledTypes: boolean;
|
|
4
|
+
}>, typeProviderPackages: Set<string>): Map<string, ExpectedWorkspace>;
|
|
5
|
+
export declare function deriveDependencyModel(facts: DependencyModelFacts): DependencyModelOutput;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildExpected = buildExpected;
|
|
4
|
+
exports.deriveDependencyModel = deriveDependencyModel;
|
|
5
|
+
/**
|
|
6
|
+
* Pure dependency model engine.
|
|
7
|
+
*
|
|
8
|
+
* The engine receives complete facts and derives expected manifests plus
|
|
9
|
+
* diagnostics. It must not read files, execute Yarn, or inspect `node_modules`;
|
|
10
|
+
* those concerns belong to collectors and the runner.
|
|
11
|
+
*/
|
|
12
|
+
const diagnostics_1 = require("./diagnostics");
|
|
13
|
+
const expected_1 = require("./expected");
|
|
14
|
+
const peer_propagation_1 = require("./peer-propagation");
|
|
15
|
+
const placement_1 = require("./placement");
|
|
16
|
+
const versions_1 = require("./versions");
|
|
17
|
+
function buildExpected(workspaces, rules, externalPeerMetadata, externalTypeMetadata, typeProviderPackages) {
|
|
18
|
+
const expectedByLocation = new Map();
|
|
19
|
+
const root = workspaces[0];
|
|
20
|
+
const workspaceNames = new Set(workspaces.filter((ws) => !ws.isRoot).map((ws) => ws.name));
|
|
21
|
+
const workspacesByName = new Map(workspaces.filter((ws) => !ws.isRoot).map((ws) => [ws.name, ws]));
|
|
22
|
+
for (const workspace of workspaces) {
|
|
23
|
+
expectedByLocation.set(workspace.location, {
|
|
24
|
+
workspace,
|
|
25
|
+
sections: (0, expected_1.emptySections)(),
|
|
26
|
+
reasons: new Map(),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
(0, placement_1.seedRootDevDependencies)(expectedByLocation, workspaceNames, rules);
|
|
30
|
+
(0, placement_1.addUsageDependencies)(expectedByLocation, root, workspaceNames, rules, externalTypeMetadata, typeProviderPackages);
|
|
31
|
+
(0, placement_1.addRequiredRuleDependencies)(expectedByLocation, root, workspaceNames, rules);
|
|
32
|
+
(0, peer_propagation_1.propagatePeers)(expectedByLocation, workspacesByName, workspaceNames, externalPeerMetadata, rules);
|
|
33
|
+
(0, versions_1.applyVersionRules)(expectedByLocation, root, workspaceNames, rules);
|
|
34
|
+
(0, placement_1.rebuildLibraryMirrors)(expectedByLocation);
|
|
35
|
+
return expectedByLocation;
|
|
36
|
+
}
|
|
37
|
+
function deriveDependencyModel(facts) {
|
|
38
|
+
const { workspaces, externalPeerMetadata, externalTypeMetadata = new Map(), typeProviderPackages = new Set(), rules, withDts = false, } = facts;
|
|
39
|
+
const expected = buildExpected(workspaces, rules, externalPeerMetadata, externalTypeMetadata, typeProviderPackages);
|
|
40
|
+
const violations = [];
|
|
41
|
+
const warnings = [];
|
|
42
|
+
(0, diagnostics_1.validateBasicShape)(workspaces, expected, rules, violations, warnings, withDts);
|
|
43
|
+
for (const item of expected.values())
|
|
44
|
+
(0, diagnostics_1.compareManifest)(item, violations);
|
|
45
|
+
violations.push(...(0, versions_1.collectUnconstrainedVersionViolations)(workspaces, expected, rules));
|
|
46
|
+
return {
|
|
47
|
+
violations: (0, diagnostics_1.dedupeViolations)(violations),
|
|
48
|
+
warnings,
|
|
49
|
+
expected,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/model/engine.ts"],"names":[],"mappings":";;AA4BA,sCAkDC;AAED,sDAuCC;AAvHD;;;;;;GAMG;AACH,+CAAsF;AACtF,yCAA2C;AAC3C,yDAAoD;AACpD,2CAKqB;AAQrB,yCAGoB;AAEpB,SAAgB,aAAa,CAC3B,UAA4B,EAC5B,KAAuB,EACvB,oBAA6D,EAC7D,oBAA+D,EAC/D,oBAAiC;IAEjC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA6B,CAAC;IAChE,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;IAC5B,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAC3D,CAAC;IACF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CACjE,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE;YACzC,SAAS;YACT,QAAQ,EAAE,IAAA,wBAAa,GAAE;YACzB,OAAO,EAAE,IAAI,GAAG,EAAE;SACnB,CAAC,CAAC;IACL,CAAC;IAED,IAAA,mCAAuB,EAAC,kBAAkB,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IACnE,IAAA,gCAAoB,EAClB,kBAAkB,EAClB,IAAI,EACJ,cAAc,EACd,KAAK,EACL,oBAAoB,EACpB,oBAAoB,CACrB,CAAC;IACF,IAAA,uCAA2B,EACzB,kBAAkB,EAClB,IAAI,EACJ,cAAc,EACd,KAAK,CACN,CAAC;IACF,IAAA,iCAAc,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,KAAK,CACN,CAAC;IACF,IAAA,4BAAiB,EAAC,kBAAkB,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IACnE,IAAA,iCAAqB,EAAC,kBAAkB,CAAC,CAAC;IAE1C,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,SAAgB,qBAAqB,CACnC,KAA2B;IAE3B,MAAM,EACJ,UAAU,EACV,oBAAoB,EACpB,oBAAoB,GAAG,IAAI,GAAG,EAAE,EAChC,oBAAoB,GAAG,IAAI,GAAG,EAAE,EAChC,KAAK,EACL,OAAO,GAAG,KAAK,GAChB,GAAG,KAAK,CAAC;IACV,MAAM,QAAQ,GAAG,aAAa,CAC5B,UAAU,EACV,KAAK,EACL,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,CACrB,CAAC;IACF,MAAM,UAAU,GAAwC,EAAE,CAAC;IAC3D,MAAM,QAAQ,GAAsC,EAAE,CAAC;IAEvD,IAAA,gCAAkB,EAChB,UAAU,EACV,QAAQ,EACR,KAAK,EACL,UAAU,EACV,QAAQ,EACR,OAAO,CACR,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE;QAAE,IAAA,6BAAe,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACxE,UAAU,CAAC,IAAI,CACb,GAAG,IAAA,gDAAqC,EAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CACtE,CAAC;IAEF,OAAO;QACL,UAAU,EAAE,IAAA,8BAAgB,EAAC,UAAU,CAAC;QACxC,QAAQ;QACR,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for expected dependency sections and their explanations.
|
|
3
|
+
*
|
|
4
|
+
* The model derives a fresh expected manifest for each workspace. This module
|
|
5
|
+
* owns the small mutation primitives for those expected sections and keeps the
|
|
6
|
+
* reason trail used by `depdoc explain`.
|
|
7
|
+
*/
|
|
8
|
+
import type { PackageJson } from '../lib/package-json';
|
|
9
|
+
import { getEffectiveRule } from './rules';
|
|
10
|
+
import { type DependencyRule, type ExpectedWorkspace, type Reason, type SectionType, type WorkspaceFacts } from './types';
|
|
11
|
+
export declare function emptySections(): Record<SectionType, Map<string, string>>;
|
|
12
|
+
export declare function getDeclaredSection(pkg: PackageJson, depIdent: string): SectionType | null;
|
|
13
|
+
export declare function getDeclaredRange(pkg: PackageJson, depIdent: string): string | null;
|
|
14
|
+
export declare function addReason(expected: ExpectedWorkspace, depIdent: string, reason: Reason): void;
|
|
15
|
+
export declare function addRuleReason(expected: ExpectedWorkspace, depIdent: string, rule: ReturnType<typeof getEffectiveRule>): void;
|
|
16
|
+
export declare function setExpectedDependency(expected: ExpectedWorkspace, section: SectionType, depIdent: string, range: string, reason: Reason): void;
|
|
17
|
+
export declare function addExpectedMirrorDependency(expected: ExpectedWorkspace, depIdent: string, range: string, reason: Reason): void;
|
|
18
|
+
export declare function getExpectedSection(expected: ExpectedWorkspace, depIdent: string): SectionType | null;
|
|
19
|
+
export declare function getExpectedRange(expected: ExpectedWorkspace, depIdent: string): string | null;
|
|
20
|
+
export declare function getRangeSource(root: WorkspaceFacts, workspace: WorkspaceFacts, depIdent: string, rules: DependencyRule[]): string;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.emptySections = emptySections;
|
|
4
|
+
exports.getDeclaredSection = getDeclaredSection;
|
|
5
|
+
exports.getDeclaredRange = getDeclaredRange;
|
|
6
|
+
exports.addReason = addReason;
|
|
7
|
+
exports.addRuleReason = addRuleReason;
|
|
8
|
+
exports.setExpectedDependency = setExpectedDependency;
|
|
9
|
+
exports.addExpectedMirrorDependency = addExpectedMirrorDependency;
|
|
10
|
+
exports.getExpectedSection = getExpectedSection;
|
|
11
|
+
exports.getExpectedRange = getExpectedRange;
|
|
12
|
+
exports.getRangeSource = getRangeSource;
|
|
13
|
+
const rules_1 = require("./rules");
|
|
14
|
+
const types_1 = require("./types");
|
|
15
|
+
function emptySections() {
|
|
16
|
+
return {
|
|
17
|
+
dependencies: new Map(),
|
|
18
|
+
peerDependencies: new Map(),
|
|
19
|
+
devDependencies: new Map(),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function getDeclaredSection(pkg, depIdent) {
|
|
23
|
+
for (const section of types_1.SECTIONS) {
|
|
24
|
+
if (pkg[section]?.[depIdent] !== undefined)
|
|
25
|
+
return section;
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
function getDeclaredRange(pkg, depIdent) {
|
|
30
|
+
const section = getDeclaredSection(pkg, depIdent);
|
|
31
|
+
return section ? (pkg[section]?.[depIdent] ?? null) : null;
|
|
32
|
+
}
|
|
33
|
+
function addReason(expected, depIdent, reason) {
|
|
34
|
+
if (!expected.reasons.has(depIdent))
|
|
35
|
+
expected.reasons.set(depIdent, []);
|
|
36
|
+
const list = expected.reasons.get(depIdent);
|
|
37
|
+
if (!list.some((r) => r.kind === reason.kind && r.detail === reason.detail)) {
|
|
38
|
+
list.push(reason);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function addRuleReason(expected, depIdent, rule) {
|
|
42
|
+
const details = [];
|
|
43
|
+
if (rule.section)
|
|
44
|
+
details.push(`section: ${rule.section}`);
|
|
45
|
+
if (rule.version !== undefined)
|
|
46
|
+
details.push(`version: ${rule.version}`);
|
|
47
|
+
if (rule.rootOnly)
|
|
48
|
+
details.push('rootOnly: true');
|
|
49
|
+
if (rule.required)
|
|
50
|
+
details.push('required: true');
|
|
51
|
+
if (details.length === 0)
|
|
52
|
+
return;
|
|
53
|
+
addReason(expected, depIdent, {
|
|
54
|
+
kind: 'rule',
|
|
55
|
+
detail: `${depIdent} matched rule (${details.join(', ')})`,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function setExpectedDependency(expected, section, depIdent, range, reason) {
|
|
59
|
+
for (const other of types_1.SECTIONS) {
|
|
60
|
+
if (other !== section)
|
|
61
|
+
expected.sections[other].delete(depIdent);
|
|
62
|
+
}
|
|
63
|
+
expected.sections[section].set(depIdent, range);
|
|
64
|
+
addReason(expected, depIdent, reason);
|
|
65
|
+
}
|
|
66
|
+
function addExpectedMirrorDependency(expected, depIdent, range, reason) {
|
|
67
|
+
expected.sections.devDependencies.set(depIdent, range);
|
|
68
|
+
addReason(expected, depIdent, reason);
|
|
69
|
+
}
|
|
70
|
+
function getExpectedSection(expected, depIdent) {
|
|
71
|
+
for (const section of types_1.SECTIONS) {
|
|
72
|
+
if (expected.sections[section].has(depIdent))
|
|
73
|
+
return section;
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
function getExpectedRange(expected, depIdent) {
|
|
78
|
+
const section = getExpectedSection(expected, depIdent);
|
|
79
|
+
return section ? (expected.sections[section].get(depIdent) ?? null) : null;
|
|
80
|
+
}
|
|
81
|
+
function getRangeSource(root, workspace, depIdent, rules) {
|
|
82
|
+
const rule = (0, rules_1.getEffectiveRule)(rules, depIdent, workspace.name, workspace.location);
|
|
83
|
+
if (rule.version !== undefined)
|
|
84
|
+
return rule.version;
|
|
85
|
+
return (getDeclaredRange(workspace.pkg, depIdent) ??
|
|
86
|
+
getDeclaredRange(root.pkg, depIdent) ??
|
|
87
|
+
'*');
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=expected.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expected.js","sourceRoot":"","sources":["../../src/model/expected.ts"],"names":[],"mappings":";;AAmBA,sCAMC;AAED,gDASC;AAED,4CAOC;AAED,8BAUC;AAED,sCAgBC;AAED,sDAYC;AAED,kEAQC;AAED,gDASC;AAED,4CAOC;AAED,wCAmBC;AAnID,mCAA2C;AAC3C,mCAOiB;AAEjB,SAAgB,aAAa;IAC3B,OAAO;QACL,YAAY,EAAE,IAAI,GAAG,EAAE;QACvB,gBAAgB,EAAE,IAAI,GAAG,EAAE;QAC3B,eAAe,EAAE,IAAI,GAAG,EAAE;KAC3B,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAChC,GAAgB,EAChB,QAAgB;IAEhB,KAAK,MAAM,OAAO,IAAI,gBAAQ,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;IAC7D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,gBAAgB,CAC9B,GAAgB,EAChB,QAAgB;IAEhB,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAElD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,SAAgB,SAAS,CACvB,QAA2B,EAC3B,QAAgB,EAChB,MAAc;IAEd,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;IAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5E,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAgB,aAAa,CAC3B,QAA2B,EAC3B,QAAgB,EAChB,IAAyC;IAEzC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE;QAC5B,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,GAAG,QAAQ,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;KAC3D,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,qBAAqB,CACnC,QAA2B,EAC3B,OAAoB,EACpB,QAAgB,EAChB,KAAa,EACb,MAAc;IAEd,KAAK,MAAM,KAAK,IAAI,gBAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,KAAK,OAAO;YAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC;IACD,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChD,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,2BAA2B,CACzC,QAA2B,EAC3B,QAAgB,EAChB,KAAa,EACb,MAAc;IAEd,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvD,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,kBAAkB,CAChC,QAA2B,EAC3B,QAAgB;IAEhB,KAAK,MAAM,OAAO,IAAI,gBAAQ,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,OAAO,CAAC;IAC/D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,gBAAgB,CAC9B,QAA2B,EAC3B,QAAgB;IAEhB,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEvD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7E,CAAC;AAED,SAAgB,cAAc,CAC5B,IAAoB,EACpB,SAAyB,EACzB,QAAgB,EAChB,KAAuB;IAEvB,MAAM,IAAI,GAAG,IAAA,wBAAgB,EAC3B,KAAK,EACL,QAAQ,EACR,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,QAAQ,CACnB,CAAC;IACF,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC;IAEpD,OAAO,CACL,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC;QACzC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;QACpC,GAAG,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { DependencyRule, ExpectedWorkspace, WorkspaceFacts } from './types';
|
|
2
|
+
export declare function propagatePeers(expectedByLocation: Map<string, ExpectedWorkspace>, workspacesByName: Map<string, WorkspaceFacts>, workspaceNames: Set<string>, externalPeerMetadata: Map<string, Map<string, string> | null>, rules: DependencyRule[]): void;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.propagatePeers = propagatePeers;
|
|
4
|
+
/**
|
|
5
|
+
* Peer propagation across dependency edges.
|
|
6
|
+
*
|
|
7
|
+
* This module applies peer requirements from local libraries and external
|
|
8
|
+
* packages to the current workspace. It consumes already collected peer
|
|
9
|
+
* metadata and does not inspect `node_modules` itself.
|
|
10
|
+
*/
|
|
11
|
+
const expected_1 = require("./expected");
|
|
12
|
+
const rules_1 = require("./rules");
|
|
13
|
+
function providePeer(expected, rootExpected, workspaceNames, rules, depIdent, range, provider) {
|
|
14
|
+
if (workspaceNames.has(depIdent))
|
|
15
|
+
return false;
|
|
16
|
+
if (expected.sections.dependencies.has(depIdent))
|
|
17
|
+
return false;
|
|
18
|
+
const beforeSection = (0, expected_1.getExpectedSection)(expected, depIdent);
|
|
19
|
+
const beforeRange = (0, expected_1.getExpectedRange)(expected, depIdent);
|
|
20
|
+
const rule = (0, rules_1.getEffectiveRule)(rules, depIdent, expected.workspace.name, expected.workspace.location);
|
|
21
|
+
const resolvedRange = rule.version ?? range;
|
|
22
|
+
(0, expected_1.addRuleReason)(expected, depIdent, rule);
|
|
23
|
+
if (rule.rootOnly) {
|
|
24
|
+
(0, expected_1.setExpectedDependency)(rootExpected, 'devDependencies', depIdent, resolvedRange, {
|
|
25
|
+
kind: 'root-only',
|
|
26
|
+
detail: `${depIdent} is required by ${provider} but marked rootOnly`,
|
|
27
|
+
});
|
|
28
|
+
(0, expected_1.addReason)(expected, depIdent, {
|
|
29
|
+
kind: 'root-only',
|
|
30
|
+
detail: `${depIdent} is required by ${provider} but marked rootOnly`,
|
|
31
|
+
});
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (expected.workspace.role === 'library' &&
|
|
35
|
+
rule.section !== 'dependencies') {
|
|
36
|
+
(0, expected_1.setExpectedDependency)(expected, 'peerDependencies', depIdent, resolvedRange, {
|
|
37
|
+
kind: 'peer-propagation',
|
|
38
|
+
detail: `${depIdent} is required peer of ${provider}`,
|
|
39
|
+
});
|
|
40
|
+
(0, expected_1.addExpectedMirrorDependency)(expected, depIdent, resolvedRange, {
|
|
41
|
+
kind: 'mirror',
|
|
42
|
+
detail: `${depIdent} mirrors propagated peer`,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
(0, expected_1.setExpectedDependency)(expected, 'dependencies', depIdent, resolvedRange, {
|
|
47
|
+
kind: 'peer-propagation',
|
|
48
|
+
detail: `${depIdent} is required peer of ${provider}`,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return (beforeSection !== (0, expected_1.getExpectedSection)(expected, depIdent) ||
|
|
52
|
+
beforeRange !== (0, expected_1.getExpectedRange)(expected, depIdent));
|
|
53
|
+
}
|
|
54
|
+
function propagatePeers(expectedByLocation, workspacesByName, workspaceNames, externalPeerMetadata, rules) {
|
|
55
|
+
const rootExpected = expectedByLocation.get('.');
|
|
56
|
+
let changed = true;
|
|
57
|
+
let passes = 0;
|
|
58
|
+
while (changed && passes < 10) {
|
|
59
|
+
changed = false;
|
|
60
|
+
passes++;
|
|
61
|
+
for (const expected of expectedByLocation.values()) {
|
|
62
|
+
const workspace = expected.workspace;
|
|
63
|
+
const providerDeps = new Map();
|
|
64
|
+
for (const [depIdent, range] of expected.sections.dependencies) {
|
|
65
|
+
providerDeps.set(depIdent, range);
|
|
66
|
+
}
|
|
67
|
+
for (const [depIdent, range] of expected.sections.peerDependencies) {
|
|
68
|
+
providerDeps.set(depIdent, range);
|
|
69
|
+
}
|
|
70
|
+
if (workspace.isRoot) {
|
|
71
|
+
for (const [depIdent, range] of expected.sections.devDependencies) {
|
|
72
|
+
providerDeps.set(depIdent, range);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
for (const [providerIdent] of providerDeps) {
|
|
76
|
+
if (workspaceNames.has(providerIdent)) {
|
|
77
|
+
const provider = workspacesByName.get(providerIdent);
|
|
78
|
+
if (!provider || provider.role !== 'library')
|
|
79
|
+
continue;
|
|
80
|
+
const providerExpected = expectedByLocation.get(provider.location);
|
|
81
|
+
if (!providerExpected)
|
|
82
|
+
continue;
|
|
83
|
+
for (const [peerIdent, peerRange] of providerExpected.sections
|
|
84
|
+
.peerDependencies) {
|
|
85
|
+
if (provider.pkg.peerDependenciesMeta?.[peerIdent]?.optional) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (workspaceNames.has(peerIdent))
|
|
89
|
+
continue;
|
|
90
|
+
if (workspace.isRoot) {
|
|
91
|
+
(0, expected_1.setExpectedDependency)(rootExpected, 'devDependencies', peerIdent, peerRange, {
|
|
92
|
+
kind: 'peer-propagation',
|
|
93
|
+
detail: `${peerIdent} is required by ${providerIdent}`,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
changed =
|
|
98
|
+
providePeer(expected, rootExpected, workspaceNames, rules, peerIdent, peerRange, providerIdent) || changed;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const externalPeers = externalPeerMetadata.get(providerIdent) ?? null;
|
|
104
|
+
if (!externalPeers)
|
|
105
|
+
continue;
|
|
106
|
+
for (const [peerIdent, peerRange] of externalPeers) {
|
|
107
|
+
if (workspaceNames.has(peerIdent))
|
|
108
|
+
continue;
|
|
109
|
+
if (workspace.isRoot) {
|
|
110
|
+
(0, expected_1.setExpectedDependency)(rootExpected, 'devDependencies', peerIdent, peerRange, {
|
|
111
|
+
kind: 'peer-propagation',
|
|
112
|
+
detail: `${peerIdent} is required by ${providerIdent}`,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
changed =
|
|
117
|
+
providePeer(expected, rootExpected, workspaceNames, rules, peerIdent, peerRange, providerIdent) || changed;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=peer-propagation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-propagation.js","sourceRoot":"","sources":["../../src/model/peer-propagation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DependencyRule, ExpectedWorkspace, WorkspaceFacts } from './types';
|
|
2
|
+
export declare function isExternal(depIdent: string, workspaceNames: Set<string>): boolean;
|
|
3
|
+
export declare function seedRootDevDependencies(expectedByLocation: Map<string, ExpectedWorkspace>, workspaceNames: Set<string>, rules: DependencyRule[]): void;
|
|
4
|
+
export declare function addUsageDependencies(expectedByLocation: Map<string, ExpectedWorkspace>, root: WorkspaceFacts, workspaceNames: Set<string>, rules: DependencyRule[], externalTypeMetadata: Map<string, {
|
|
5
|
+
hasBundledTypes: boolean;
|
|
6
|
+
}>, typeProviderPackages: Set<string>): void;
|
|
7
|
+
export declare function addRequiredRuleDependencies(expectedByLocation: Map<string, ExpectedWorkspace>, root: WorkspaceFacts, workspaceNames: Set<string>, rules: DependencyRule[]): void;
|
|
8
|
+
export declare function rebuildLibraryMirrors(expectedByLocation: Map<string, ExpectedWorkspace>): void;
|
|
9
|
+
export declare function resolveExpectedRangeAfterRulePass(root: WorkspaceFacts, expected: ExpectedWorkspace, workspaceNames: Set<string>, rules: DependencyRule[], depIdent: string, currentRange: string): string;
|