@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.
Files changed (126) hide show
  1. package/DEPENDENCY_MODEL.md +460 -0
  2. package/README.MD +85 -21
  3. package/__tests__/compatibility.test.ts +321 -0
  4. package/__tests__/config-validation.test.ts +42 -0
  5. package/__tests__/engine.test.ts +1107 -0
  6. package/__tests__/fixtures/imports/bin.js +4 -0
  7. package/__tests__/fixtures/imports/export-entry.mjs +1 -0
  8. package/__tests__/fixtures/imports/lib/lib-entry.js +3 -0
  9. package/__tests__/fixtures/imports/root-entry.js +4 -0
  10. package/__tests__/fixtures/imports/rules/transitive.js +3 -0
  11. package/__tests__/fixtures/imports/src/common.cjs +3 -0
  12. package/__tests__/fixtures/imports/src/common.cts +3 -0
  13. package/__tests__/fixtures/imports/src/component.tsx +4 -0
  14. package/__tests__/fixtures/imports/src/index.ts +13 -0
  15. package/__tests__/fixtures/imports/src/module.mjs +3 -0
  16. package/__tests__/fixtures/imports/src/module.mts +3 -0
  17. package/__tests__/fixtures/imports/src/plain.js +3 -0
  18. package/__tests__/fixtures/imports/src/test-only-usage.ts +1 -0
  19. package/__tests__/fixtures/imports/test/outside.ts +3 -0
  20. package/__tests__/imports.test.ts +218 -0
  21. package/__tests__/manifest-writer.test.ts +157 -0
  22. package/dist/ansi.d.ts +9 -0
  23. package/dist/ansi.js +24 -0
  24. package/dist/ansi.js.map +1 -0
  25. package/dist/bin/depdoc.d.ts +2 -0
  26. package/dist/bin/depdoc.js +157 -0
  27. package/dist/bin/depdoc.js.map +1 -0
  28. package/dist/collectors/config.d.ts +2 -0
  29. package/dist/collectors/config.js +28 -0
  30. package/dist/collectors/config.js.map +1 -0
  31. package/dist/collectors/external-metadata.d.ts +5 -0
  32. package/dist/collectors/external-metadata.js +110 -0
  33. package/dist/collectors/external-metadata.js.map +1 -0
  34. package/dist/collectors/package-extensions.d.ts +3 -0
  35. package/dist/collectors/package-extensions.js +43 -0
  36. package/dist/collectors/package-extensions.js.map +1 -0
  37. package/dist/collectors/type-providers.d.ts +3 -0
  38. package/dist/collectors/type-providers.js +46 -0
  39. package/dist/collectors/type-providers.js.map +1 -0
  40. package/dist/collectors/workspaces.d.ts +2 -0
  41. package/dist/collectors/workspaces.js +90 -0
  42. package/dist/collectors/workspaces.js.map +1 -0
  43. package/dist/dependency-model.d.ts +11 -0
  44. package/dist/dependency-model.js +18 -0
  45. package/dist/dependency-model.js.map +1 -0
  46. package/dist/index.d.ts +9 -5
  47. package/dist/index.js +13 -33
  48. package/dist/index.js.map +1 -1
  49. package/dist/lib/imports.d.ts +11 -0
  50. package/dist/lib/imports.js +342 -0
  51. package/dist/lib/imports.js.map +1 -0
  52. package/dist/lib/package-json.d.ts +21 -0
  53. package/dist/lib/package-json.js +32 -0
  54. package/dist/lib/package-json.js.map +1 -0
  55. package/dist/model/config-validation.d.ts +6 -0
  56. package/dist/model/config-validation.js +31 -0
  57. package/dist/model/config-validation.js.map +1 -0
  58. package/dist/model/diagnostics.d.ts +4 -0
  59. package/dist/model/diagnostics.js +295 -0
  60. package/dist/model/diagnostics.js.map +1 -0
  61. package/dist/model/engine.d.ts +5 -0
  62. package/dist/model/engine.js +52 -0
  63. package/dist/model/engine.js.map +1 -0
  64. package/dist/model/expected.d.ts +20 -0
  65. package/dist/model/expected.js +89 -0
  66. package/dist/model/expected.js.map +1 -0
  67. package/dist/model/peer-propagation.d.ts +2 -0
  68. package/dist/model/peer-propagation.js +124 -0
  69. package/dist/model/peer-propagation.js.map +1 -0
  70. package/dist/model/placement.d.ts +9 -0
  71. package/dist/model/placement.js +210 -0
  72. package/dist/model/placement.js.map +1 -0
  73. package/dist/model/rules.d.ts +15 -0
  74. package/dist/model/rules.js +52 -0
  75. package/dist/model/rules.js.map +1 -0
  76. package/dist/model/types.d.ts +118 -0
  77. package/dist/model/types.js +9 -0
  78. package/dist/model/types.js.map +1 -0
  79. package/dist/model/versions.d.ts +3 -0
  80. package/dist/model/versions.js +77 -0
  81. package/dist/model/versions.js.map +1 -0
  82. package/dist/reporting.d.ts +3 -0
  83. package/dist/reporting.js +80 -0
  84. package/dist/reporting.js.map +1 -0
  85. package/dist/runner.d.ts +2 -0
  86. package/dist/runner.js +70 -0
  87. package/dist/runner.js.map +1 -0
  88. package/dist/writer/manifest-writer.d.ts +2 -0
  89. package/dist/writer/manifest-writer.js +72 -0
  90. package/dist/writer/manifest-writer.js.map +1 -0
  91. package/eslint.config.cjs +3 -0
  92. package/jest.config.js +1 -0
  93. package/package.json +7 -3
  94. package/src/ansi.ts +23 -0
  95. package/src/bin/depdoc.ts +213 -0
  96. package/src/collectors/config.ts +33 -0
  97. package/src/collectors/external-metadata.ts +148 -0
  98. package/src/collectors/package-extensions.ts +52 -0
  99. package/src/collectors/type-providers.ts +51 -0
  100. package/src/collectors/workspaces.ts +107 -0
  101. package/src/dependency-model.ts +26 -0
  102. package/src/index.ts +28 -45
  103. package/src/lib/imports.ts +435 -0
  104. package/src/lib/package-json.ts +46 -0
  105. package/src/model/config-validation.ts +49 -0
  106. package/src/model/diagnostics.ts +358 -0
  107. package/src/model/engine.ts +120 -0
  108. package/src/model/expected.ts +141 -0
  109. package/src/model/peer-propagation.ts +199 -0
  110. package/src/model/placement.ts +378 -0
  111. package/src/model/rules.ts +85 -0
  112. package/src/model/types.ts +165 -0
  113. package/src/model/versions.ts +114 -0
  114. package/src/reporting.ts +117 -0
  115. package/src/runner.ts +102 -0
  116. package/src/writer/manifest-writer.ts +111 -0
  117. package/tsconfig.build.json +1 -0
  118. package/tsconfig.json +6 -1
  119. package/dist/constraint-schema.d.ts +0 -1
  120. package/dist/constraint-schema.js +0 -17
  121. package/dist/constraint-schema.js.map +0 -1
  122. package/dist/dependency-checker.d.ts +0 -8
  123. package/dist/dependency-checker.js +0 -40
  124. package/dist/dependency-checker.js.map +0 -1
  125. package/src/constraint-schema.ts +0 -20
  126. package/src/dependency-checker.ts +0 -41
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isExternal = isExternal;
4
+ exports.seedRootDevDependencies = seedRootDevDependencies;
5
+ exports.addUsageDependencies = addUsageDependencies;
6
+ exports.addRequiredRuleDependencies = addRequiredRuleDependencies;
7
+ exports.rebuildLibraryMirrors = rebuildLibraryMirrors;
8
+ exports.resolveExpectedRangeAfterRulePass = resolveExpectedRangeAfterRulePass;
9
+ /**
10
+ * Dependency placement rules.
11
+ *
12
+ * This module converts source and `.d.ts` usage facts into expected manifest
13
+ * sections. It is pure: it receives workspace facts, rules, type metadata, and
14
+ * local workspace names, then mutates only the in-memory expected graph.
15
+ */
16
+ const expected_1 = require("./expected");
17
+ const rules_1 = require("./rules");
18
+ function isTestFile(file) {
19
+ return /(^|[/.])(__test__|__tests__|test|tests|spec|e2e)([/.]|$)|\.(spec|test|e2e)\.[cm]?[tj]sx?$/.test(file);
20
+ }
21
+ function isExternal(depIdent, workspaceNames) {
22
+ return !workspaceNames.has(depIdent);
23
+ }
24
+ function getDefinitelyTypedProvider(depIdent) {
25
+ if (depIdent.startsWith('@types/'))
26
+ return null;
27
+ if (depIdent.startsWith('@')) {
28
+ const [scope, name] = depIdent.slice(1).split('/');
29
+ if (!scope || !name)
30
+ return null;
31
+ return `@types/${scope}__${name}`;
32
+ }
33
+ return `@types/${depIdent}`;
34
+ }
35
+ function shouldAddDefinitelyTypedProvider(depIdent, externalTypeMetadata, typeProviderPackages) {
36
+ const provider = getDefinitelyTypedProvider(depIdent);
37
+ if (!provider || !typeProviderPackages.has(provider))
38
+ return null;
39
+ if (externalTypeMetadata.get(depIdent)?.hasBundledTypes)
40
+ return null;
41
+ return provider;
42
+ }
43
+ function getConcreteRuleMatches(rule) {
44
+ const matches = Array.isArray(rule.match) ? rule.match : [rule.match];
45
+ return matches.filter((match) => !match.includes('*'));
46
+ }
47
+ function addPublicDependency(expected, rootExpected, root, workspaceNames, rules, depIdent, reason, options = {}) {
48
+ const workspace = expected.workspace;
49
+ const rule = (0, rules_1.getEffectiveRule)(rules, depIdent, workspace.name, workspace.location);
50
+ const isLocal = workspaceNames.has(depIdent);
51
+ const range = isLocal
52
+ ? 'workspace:*'
53
+ : (0, expected_1.getRangeSource)(root, workspace, depIdent, rules);
54
+ (0, expected_1.addRuleReason)(expected, depIdent, rule);
55
+ if (rule.rootOnly && !isLocal && !options.allowRootOnly) {
56
+ (0, expected_1.addRuleReason)(rootExpected, depIdent, rule);
57
+ (0, expected_1.setExpectedDependency)(rootExpected, 'devDependencies', depIdent, range, {
58
+ kind: options.rootOnlyRequired ? reason.kind : 'root-only',
59
+ detail: options.rootOnlyRequired
60
+ ? `${reason.detail} for ${workspace.name}; rootOnly keeps it in root devDependencies`
61
+ : `${depIdent} is marked rootOnly`,
62
+ });
63
+ (0, expected_1.addReason)(expected, depIdent, reason);
64
+ if (!options.rootOnlyRequired) {
65
+ (0, expected_1.addReason)(expected, depIdent, {
66
+ kind: 'root-only',
67
+ detail: `${depIdent} is marked rootOnly and cannot be used by ${workspace.name}`,
68
+ });
69
+ }
70
+ return;
71
+ }
72
+ if (isLocal) {
73
+ (0, expected_1.setExpectedDependency)(expected, 'dependencies', depIdent, 'workspace:*', {
74
+ kind: reason.kind,
75
+ detail: `${reason.detail}; local workspace edge`,
76
+ });
77
+ return;
78
+ }
79
+ if (workspace.role === 'library' &&
80
+ rule.section !== 'dependencies' &&
81
+ rule.section !== 'devDependencies') {
82
+ (0, expected_1.setExpectedDependency)(expected, 'peerDependencies', depIdent, range, reason);
83
+ (0, expected_1.addExpectedMirrorDependency)(expected, depIdent, range, {
84
+ kind: 'mirror',
85
+ detail: `${depIdent} mirrors peerDependencies in devDependencies`,
86
+ });
87
+ return;
88
+ }
89
+ (0, expected_1.setExpectedDependency)(expected, 'dependencies', depIdent, range, reason);
90
+ }
91
+ function addPrivateDependency(rootExpected, root, requester, workspaceNames, rules, depIdent, reason) {
92
+ const workspace = requester.workspace;
93
+ if (workspaceNames.has(depIdent))
94
+ return;
95
+ const rule = (0, rules_1.getEffectiveRule)(rules, depIdent, workspace.name, workspace.location);
96
+ const range = (0, expected_1.getRangeSource)(root, workspace, depIdent, rules);
97
+ (0, expected_1.addRuleReason)(rootExpected, depIdent, rule);
98
+ (0, expected_1.addRuleReason)(requester, depIdent, rule);
99
+ if (rule.rootOnly) {
100
+ (0, expected_1.addReason)(requester, depIdent, {
101
+ kind: 'root-only',
102
+ detail: `${depIdent} is marked rootOnly and cannot be used by ${workspace.name}`,
103
+ });
104
+ }
105
+ (0, expected_1.setExpectedDependency)(rootExpected, 'devDependencies', depIdent, range, reason);
106
+ }
107
+ function seedRootDevDependencies(expectedByLocation, workspaceNames, rules) {
108
+ const rootExpected = expectedByLocation.get('.');
109
+ for (const [depIdent, declaredRange] of Object.entries(rootExpected.workspace.pkg.devDependencies ?? {})) {
110
+ const rule = (0, rules_1.getEffectiveRule)(rules, depIdent, rootExpected.workspace.name, rootExpected.workspace.location);
111
+ const range = workspaceNames.has(depIdent)
112
+ ? 'workspace:*'
113
+ : (rule.version ?? declaredRange);
114
+ (0, expected_1.setExpectedDependency)(rootExpected, 'devDependencies', depIdent, range, {
115
+ kind: 'declared',
116
+ detail: `${depIdent} is declared in root devDependencies baseline`,
117
+ });
118
+ (0, expected_1.addRuleReason)(rootExpected, depIdent, rule);
119
+ }
120
+ }
121
+ function addUsageDependencies(expectedByLocation, root, workspaceNames, rules, externalTypeMetadata, typeProviderPackages) {
122
+ const rootExpected = expectedByLocation.get('.');
123
+ for (const expected of expectedByLocation.values()) {
124
+ const workspace = expected.workspace;
125
+ if (workspace.isRoot)
126
+ continue;
127
+ for (const [depIdent, usage] of workspace.sourceUsage) {
128
+ const publicType = workspace.dtsImports.has(depIdent);
129
+ const runtime = [...usage.runtimeFiles].some((file) => !isTestFile(file));
130
+ const allTestOnly = [...usage.files].every(isTestFile);
131
+ if (runtime || publicType) {
132
+ addPublicDependency(expected, rootExpected, root, workspaceNames, rules, depIdent, {
133
+ kind: publicType ? 'source-public-type' : 'source-runtime',
134
+ detail: publicType
135
+ ? `${depIdent} appears in emitted .d.ts`
136
+ : `${depIdent} is imported at runtime`,
137
+ });
138
+ }
139
+ else {
140
+ addPrivateDependency(rootExpected, root, expected, workspaceNames, rules, depIdent, {
141
+ kind: 'source-private-dev',
142
+ detail: allTestOnly
143
+ ? `${depIdent} is only used by test files in ${workspace.name}`
144
+ : `${depIdent} is only used as private type/tooling dependency in ${workspace.name}`,
145
+ });
146
+ }
147
+ }
148
+ for (const depIdent of workspace.dtsImports) {
149
+ addPublicDependency(expected, rootExpected, root, workspaceNames, rules, depIdent, {
150
+ kind: 'source-public-type',
151
+ detail: `${depIdent} appears in emitted .d.ts`,
152
+ });
153
+ const typeProvider = shouldAddDefinitelyTypedProvider(depIdent, externalTypeMetadata, typeProviderPackages);
154
+ if (!typeProvider)
155
+ continue;
156
+ addPublicDependency(expected, rootExpected, root, workspaceNames, rules, typeProvider, {
157
+ kind: 'dts-provider',
158
+ detail: `${typeProvider} provides public types for ${depIdent}`,
159
+ }, { allowRootOnly: true });
160
+ }
161
+ }
162
+ }
163
+ function addRequiredRuleDependencies(expectedByLocation, root, workspaceNames, rules) {
164
+ const rootExpected = expectedByLocation.get('.');
165
+ const candidates = new Set();
166
+ for (const rule of rules) {
167
+ if (rule.required === undefined)
168
+ continue;
169
+ for (const depIdent of getConcreteRuleMatches(rule)) {
170
+ candidates.add(depIdent);
171
+ }
172
+ }
173
+ for (const expected of expectedByLocation.values()) {
174
+ const workspace = expected.workspace;
175
+ if (workspace.isRoot)
176
+ continue;
177
+ for (const depIdent of candidates) {
178
+ const rule = (0, rules_1.getEffectiveRule)(rules, depIdent, workspace.name, workspace.location);
179
+ if (!rule.required)
180
+ continue;
181
+ addPublicDependency(expected, rootExpected, root, workspaceNames, rules, depIdent, {
182
+ kind: 'required-rule',
183
+ detail: `${depIdent} is marked required by dependency rule`,
184
+ }, { rootOnlyRequired: rule.rootOnly });
185
+ }
186
+ }
187
+ }
188
+ function rebuildLibraryMirrors(expectedByLocation) {
189
+ for (const expected of expectedByLocation.values()) {
190
+ if (expected.workspace.role !== 'library')
191
+ continue;
192
+ expected.sections.devDependencies = new Map(expected.sections.peerDependencies);
193
+ for (const [depIdent] of expected.sections.devDependencies) {
194
+ (0, expected_1.addReason)(expected, depIdent, {
195
+ kind: 'mirror',
196
+ detail: `${depIdent} mirrors peerDependencies in devDependencies`,
197
+ });
198
+ }
199
+ }
200
+ }
201
+ function resolveExpectedRangeAfterRulePass(root, expected, workspaceNames, rules, depIdent, currentRange) {
202
+ const rule = (0, rules_1.getEffectiveRule)(rules, depIdent, expected.workspace.name, expected.workspace.location);
203
+ return workspaceNames.has(depIdent)
204
+ ? 'workspace:*'
205
+ : (rule.version ??
206
+ (0, expected_1.getDeclaredRange)(expected.workspace.pkg, depIdent) ??
207
+ (0, expected_1.getDeclaredRange)(root.pkg, depIdent) ??
208
+ currentRange);
209
+ }
210
+ //# sourceMappingURL=placement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placement.js","sourceRoot":"","sources":["../../src/model/placement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Rule matching and precedence.
3
+ *
4
+ * Dependency rules are the explicit override surface for the model: versions,
5
+ * section overrides, root-only constraints, and workspace-specific exceptions.
6
+ * The helpers here are pure and apply the documented "last matching rule wins"
7
+ * semantics.
8
+ */
9
+ import type { DependencyRule, EffectiveRule, WorkspaceRole } from './types';
10
+ export declare function matchesGlob(value: string, pattern: string): boolean;
11
+ export declare function matchesPatterns(value: string, pattern: string | string[]): boolean;
12
+ export declare function getEffectiveRule(rules: DependencyRule[], depIdent: string, wsIdent: string, wsCwd: string): EffectiveRule;
13
+ export declare function hasGlobalVersionRule(rules: DependencyRule[], depIdent: string): boolean;
14
+ export declare function hasWorkspaceVersionRule(rules: DependencyRule[], depIdent: string): boolean;
15
+ export declare function isWorkspaceRole(value: string | undefined): value is WorkspaceRole;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.matchesGlob = matchesGlob;
4
+ exports.matchesPatterns = matchesPatterns;
5
+ exports.getEffectiveRule = getEffectiveRule;
6
+ exports.hasGlobalVersionRule = hasGlobalVersionRule;
7
+ exports.hasWorkspaceVersionRule = hasWorkspaceVersionRule;
8
+ exports.isWorkspaceRole = isWorkspaceRole;
9
+ function matchesGlob(value, pattern) {
10
+ if (!pattern.includes('*'))
11
+ return value === pattern;
12
+ const escaped = pattern.replaceAll(/[-[\]{}()+?.,\\^$|#\s]/g, String.raw `\$&`);
13
+ return new RegExp('^' + escaped.replaceAll('**', '.*').replaceAll('*', '[^/]*') + '$').test(value);
14
+ }
15
+ function matchesPatterns(value, pattern) {
16
+ const patterns = Array.isArray(pattern) ? pattern : [pattern];
17
+ return patterns.some((p) => matchesGlob(value, p));
18
+ }
19
+ function getEffectiveRule(rules, depIdent, wsIdent, wsCwd) {
20
+ const effective = { rootOnly: false };
21
+ for (const rule of rules) {
22
+ if (!matchesPatterns(depIdent, rule.match))
23
+ continue;
24
+ if (rule.workspace &&
25
+ !matchesPatterns(wsIdent, rule.workspace) &&
26
+ !matchesPatterns(wsCwd, rule.workspace))
27
+ continue;
28
+ if (rule.section)
29
+ effective.section = rule.section;
30
+ if (rule.version !== undefined)
31
+ effective.version = rule.version;
32
+ if (rule.rootOnly !== undefined)
33
+ effective.rootOnly = rule.rootOnly;
34
+ if (rule.required !== undefined)
35
+ effective.required = rule.required;
36
+ }
37
+ return effective;
38
+ }
39
+ function hasGlobalVersionRule(rules, depIdent) {
40
+ return rules.some((rule) => !rule.workspace &&
41
+ rule.version !== undefined &&
42
+ matchesPatterns(depIdent, rule.match));
43
+ }
44
+ function hasWorkspaceVersionRule(rules, depIdent) {
45
+ return rules.some((rule) => rule.workspace &&
46
+ rule.version !== undefined &&
47
+ matchesPatterns(depIdent, rule.match));
48
+ }
49
+ function isWorkspaceRole(value) {
50
+ return value === 'library' || value === 'service' || value === 'cli';
51
+ }
52
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/model/rules.ts"],"names":[],"mappings":";;AAUA,kCAUC;AAED,0CAOC;AAED,4CAuBC;AAED,oDAUC;AAED,0DAUC;AAED,0CAIC;AA1ED,SAAgB,WAAW,CAAC,KAAa,EAAE,OAAe;IACxD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,KAAK,OAAO,CAAC;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAChC,yBAAyB,EACzB,MAAM,CAAC,GAAG,CAAA,KAAK,CAChB,CAAC;IAEF,OAAO,IAAI,MAAM,CACf,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,CACpE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChB,CAAC;AAED,SAAgB,eAAe,CAC7B,KAAa,EACb,OAA0B;IAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAE9D,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAgB,gBAAgB,CAC9B,KAAuB,EACvB,QAAgB,EAChB,OAAe,EACf,KAAa;IAEb,MAAM,SAAS,GAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAErD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QACrD,IACE,IAAI,CAAC,SAAS;YACd,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;YACzC,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;YAEvC,SAAS;QACX,IAAI,IAAI,CAAC,OAAO;YAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACnD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACjE,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QACpE,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACtE,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,oBAAoB,CAClC,KAAuB,EACvB,QAAgB;IAEhB,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,IAAI,CAAC,SAAS;QACf,IAAI,CAAC,OAAO,KAAK,SAAS;QAC1B,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CACxC,CAAC;AACJ,CAAC;AAED,SAAgB,uBAAuB,CACrC,KAAuB,EACvB,QAAgB;IAEhB,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,OAAO,KAAK,SAAS;QAC1B,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CACxC,CAAC;AACJ,CAAC;AAED,SAAgB,eAAe,CAC7B,KAAyB;IAEzB,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,CAAC;AACvE,CAAC"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Shared dependency-model contracts.
3
+ *
4
+ * This module defines the data exchanged between collectors, the pure model
5
+ * engine, the manifest writer, and CLI reporting. It intentionally contains no
6
+ * filesystem or Yarn logic; callers should pass already collected facts.
7
+ */
8
+ import type { PackageJson } from '../lib/package-json';
9
+ export type SectionType = 'dependencies' | 'peerDependencies' | 'devDependencies';
10
+ export type WorkspaceRole = 'library' | 'service' | 'cli';
11
+ export interface DependencyRule {
12
+ match: string | string[];
13
+ workspace?: string | string[];
14
+ section?: SectionType;
15
+ version?: string;
16
+ rootOnly?: boolean;
17
+ required?: boolean;
18
+ }
19
+ export interface DependencyModelConfig {
20
+ version?: number;
21
+ rules?: DependencyRule[];
22
+ doctor?: DoctorConfig;
23
+ }
24
+ export interface DoctorConfig {
25
+ buildCmd?: string;
26
+ lintCmd?: string;
27
+ typecheckCmd?: string;
28
+ }
29
+ export interface DependencyModelOptions {
30
+ rootDir?: string;
31
+ constraintsPath?: string;
32
+ fix?: boolean;
33
+ withDts?: boolean;
34
+ }
35
+ export interface DependencyViolation {
36
+ code: 'root-private' | 'root-section' | 'role-missing' | 'role-invalid' | 'forbidden-section' | 'missing' | 'wrong-section' | 'wrong-range' | 'root-only' | 'root-only-usage' | 'unconstrained-version' | 'mirror' | 'stale' | 'dist-missing';
37
+ workspace: string;
38
+ workspaceLocation: string;
39
+ dependency?: string | undefined;
40
+ actualSection?: SectionType | undefined;
41
+ expectedSection?: SectionType | undefined;
42
+ actualRange?: string | undefined;
43
+ expectedRange?: string | undefined;
44
+ message: string;
45
+ }
46
+ export interface DependencyWarning {
47
+ code: 'bin-role-mismatch' | 'zero-external-dependencies';
48
+ workspace?: string | undefined;
49
+ workspaceLocation?: string | undefined;
50
+ dependency?: string | undefined;
51
+ message: string;
52
+ }
53
+ export interface UsageSummary {
54
+ files: Set<string>;
55
+ runtimeFiles: Set<string>;
56
+ typeOnlyFiles: Set<string>;
57
+ }
58
+ export interface WorkspaceFacts {
59
+ name: string;
60
+ location: string;
61
+ pkg: PackageJson;
62
+ role: WorkspaceRole | undefined;
63
+ isRoot: boolean;
64
+ sourceUsage: Map<string, UsageSummary>;
65
+ dtsImports: Set<string>;
66
+ hasSrc: boolean;
67
+ hasDist: boolean;
68
+ sourceFileCount?: number;
69
+ }
70
+ export interface WorkspaceContext extends WorkspaceFacts {
71
+ dir: string;
72
+ }
73
+ export interface DependencyModelFacts {
74
+ workspaces: WorkspaceFacts[];
75
+ externalPeerMetadata: Map<string, Map<string, string> | null>;
76
+ externalTypeMetadata?: Map<string, {
77
+ hasBundledTypes: boolean;
78
+ }>;
79
+ typeProviderPackages?: Set<string>;
80
+ rules: DependencyRule[];
81
+ withDts?: boolean;
82
+ }
83
+ export interface DependencyModelOutput {
84
+ violations: DependencyViolation[];
85
+ warnings: DependencyWarning[];
86
+ expected: Map<string, ExpectedWorkspace>;
87
+ }
88
+ export interface DependencyModelResult {
89
+ rootDir: string;
90
+ violations: DependencyViolation[];
91
+ warnings: DependencyWarning[];
92
+ contexts: WorkspaceContext[];
93
+ expected: Map<string, ExpectedWorkspace>;
94
+ config: DependencyModelConfig;
95
+ }
96
+ export interface Reason {
97
+ kind: 'declared' | 'source-runtime' | 'source-public-type' | 'source-private-dev' | 'rule' | 'root-only' | 'dts-provider' | 'peer-propagation' | 'mirror' | 'version' | 'required-rule';
98
+ detail: string;
99
+ }
100
+ export interface ExpectedWorkspace {
101
+ workspace: WorkspaceFacts;
102
+ sections: Record<SectionType, Map<string, string>>;
103
+ reasons: Map<string, Reason[]>;
104
+ }
105
+ export interface EffectiveRule {
106
+ section?: SectionType;
107
+ version?: string;
108
+ rootOnly: boolean;
109
+ required?: boolean;
110
+ }
111
+ export interface PackageExtension {
112
+ dependencies?: Record<string, string>;
113
+ peerDependencies?: Record<string, string>;
114
+ peerDependenciesMeta?: Record<string, {
115
+ optional?: boolean;
116
+ }>;
117
+ }
118
+ export declare const SECTIONS: SectionType[];
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SECTIONS = void 0;
4
+ exports.SECTIONS = [
5
+ 'dependencies',
6
+ 'peerDependencies',
7
+ 'devDependencies',
8
+ ];
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/model/types.ts"],"names":[],"mappings":";;;AAgKa,QAAA,QAAQ,GAAkB;IACrC,cAAc;IACd,kBAAkB;IAClB,iBAAiB;CAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { DependencyRule, DependencyViolation, ExpectedWorkspace, WorkspaceFacts } from './types';
2
+ export declare function applyVersionRules(expectedByLocation: Map<string, ExpectedWorkspace>, root: WorkspaceFacts, workspaceNames: Set<string>, rules: DependencyRule[]): void;
3
+ export declare function collectUnconstrainedVersionViolations(workspaces: WorkspaceFacts[], expectedByLocation: Map<string, ExpectedWorkspace>, rules: DependencyRule[]): DependencyViolation[];
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyVersionRules = applyVersionRules;
4
+ exports.collectUnconstrainedVersionViolations = collectUnconstrainedVersionViolations;
5
+ /**
6
+ * Version normalization and version-rule diagnostics.
7
+ *
8
+ * The placement engine decides where dependencies belong. This module applies
9
+ * version rules after placement and checks the invariant that repeated external
10
+ * dependencies have a global version rule.
11
+ */
12
+ const expected_1 = require("./expected");
13
+ const placement_1 = require("./placement");
14
+ const rules_1 = require("./rules");
15
+ const types_1 = require("./types");
16
+ function applyVersionRules(expectedByLocation, root, workspaceNames, rules) {
17
+ for (const expected of expectedByLocation.values()) {
18
+ for (const section of types_1.SECTIONS) {
19
+ for (const [depIdent, range] of expected.sections[section]) {
20
+ const nextRange = (0, placement_1.resolveExpectedRangeAfterRulePass)(root, expected, workspaceNames, rules, depIdent, range);
21
+ if (nextRange !== range) {
22
+ expected.sections[section].set(depIdent, nextRange);
23
+ (0, expected_1.addReason)(expected, depIdent, {
24
+ kind: 'version',
25
+ detail: `${depIdent} range resolved to ${nextRange}`,
26
+ });
27
+ }
28
+ }
29
+ }
30
+ }
31
+ }
32
+ function collectUnconstrainedVersionViolations(workspaces, expectedByLocation, rules) {
33
+ const workspaceNames = new Set(workspaces.filter((ws) => !ws.isRoot).map((ws) => ws.name));
34
+ const occurrences = new Map();
35
+ const ranges = new Map();
36
+ const addOccurrence = (workspace, section, depIdent, range) => {
37
+ if (!(0, placement_1.isExternal)(depIdent, workspaceNames) || range.startsWith('workspace:'))
38
+ return;
39
+ if (!occurrences.has(depIdent))
40
+ occurrences.set(depIdent, new Set());
41
+ if (!ranges.has(depIdent))
42
+ ranges.set(depIdent, new Set());
43
+ occurrences.get(depIdent).add(`${workspace.location}:${section}`);
44
+ ranges.get(depIdent).add(range);
45
+ };
46
+ for (const workspace of workspaces) {
47
+ for (const section of types_1.SECTIONS) {
48
+ for (const [depIdent, range] of Object.entries(workspace.pkg[section] ?? {})) {
49
+ addOccurrence(workspace, section, depIdent, range);
50
+ }
51
+ }
52
+ }
53
+ for (const expected of expectedByLocation.values()) {
54
+ for (const section of types_1.SECTIONS) {
55
+ for (const [depIdent, range] of expected.sections[section]) {
56
+ addOccurrence(expected.workspace, section, depIdent, range);
57
+ }
58
+ }
59
+ }
60
+ return [...occurrences.entries()]
61
+ .filter(([depIdent, byOccurrence]) => byOccurrence.size > 1 && !(0, rules_1.hasGlobalVersionRule)(rules, depIdent))
62
+ .map(([depIdent, byOccurrence]) => {
63
+ const rangeList = [...(ranges.get(depIdent) ?? [])].join(', ');
64
+ const occurrencesList = [...byOccurrence].sort().join(', ');
65
+ const workspaceRuleHint = (0, rules_1.hasWorkspaceVersionRule)(rules, depIdent)
66
+ ? '; workspace-scoped version rules do not satisfy V1'
67
+ : '';
68
+ return {
69
+ code: 'unconstrained-version',
70
+ workspace: '<root>',
71
+ workspaceLocation: '.',
72
+ dependency: depIdent,
73
+ message: `${depIdent} appears ${byOccurrence.size} times without a global version rule (${rangeList}); occurrences: ${occurrencesList}${workspaceRuleHint}`,
74
+ };
75
+ });
76
+ }
77
+ //# sourceMappingURL=versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/model/versions.ts"],"names":[],"mappings":";;AAmBA,8CA4BC;AAED,sFAgEC;AAjHD;;;;;;GAMG;AACH,yCAAuC;AACvC,2CAA4E;AAC5E,mCAAwE;AAQxE,mCAAmC;AAEnC,SAAgB,iBAAiB,CAC/B,kBAAkD,EAClD,IAAoB,EACpB,cAA2B,EAC3B,KAAuB;IAEvB,KAAK,MAAM,QAAQ,IAAI,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC;QACnD,KAAK,MAAM,OAAO,IAAI,gBAAQ,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3D,MAAM,SAAS,GAAG,IAAA,6CAAiC,EACjD,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,KAAK,EACL,QAAQ,EACR,KAAK,CACN,CAAC;gBAEF,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;oBACxB,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;oBACpD,IAAA,oBAAS,EAAC,QAAQ,EAAE,QAAQ,EAAE;wBAC5B,IAAI,EAAE,SAAS;wBACf,MAAM,EAAE,GAAG,QAAQ,sBAAsB,SAAS,EAAE;qBACrD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,qCAAqC,CACnD,UAA4B,EAC5B,kBAAkD,EAClD,KAAuB;IAEvB,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,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE9C,MAAM,aAAa,GAAG,CACpB,SAAyB,EACzB,OAAoB,EACpB,QAAgB,EAChB,KAAa,EACP,EAAE;QACR,IAAI,CAAC,IAAA,sBAAU,EAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;YACzE,OAAO;QACT,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC3D,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,gBAAQ,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAC5C,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAC7B,EAAE,CAAC;gBACF,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC;QACnD,KAAK,MAAM,OAAO,IAAI,gBAAQ,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3D,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;SAC9B,MAAM,CACL,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,EAAE,CAC3B,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAA,4BAAoB,EAAC,KAAK,EAAE,QAAQ,CAAC,CAClE;SACA,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,EAAE;QAChC,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,eAAe,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,iBAAiB,GAAG,IAAA,+BAAuB,EAAC,KAAK,EAAE,QAAQ,CAAC;YAChE,CAAC,CAAC,oDAAoD;YACtD,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO;YACL,IAAI,EAAE,uBAAgC;YACtC,SAAS,EAAE,QAAQ;YACnB,iBAAiB,EAAE,GAAG;YACtB,UAAU,EAAE,QAAQ;YACpB,OAAO,EACL,GAAG,QAAQ,YAAY,YAAY,CAAC,IAAI,yCAAyC,SAAS,mBAAmB,eAAe,GAAG,iBAAiB,EAAE;SACrJ,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { DependencyModelResult } from './model/types';
2
+ export declare function formatDependencyModelResult(result: DependencyModelResult): string;
3
+ export declare function explainDependency(result: DependencyModelResult, workspaceSelector: string, depIdent: string): string;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatDependencyModelResult = formatDependencyModelResult;
4
+ exports.explainDependency = explainDependency;
5
+ /**
6
+ * CLI-oriented dependency model reporting.
7
+ *
8
+ * The engine returns structured diagnostics and reason trails. This module
9
+ * turns them into stable human-readable text for `check`, `fix`, and `explain`.
10
+ */
11
+ const expected_1 = require("./model/expected");
12
+ const ansi_1 = require("./ansi");
13
+ function formatDependencyModelResult(result) {
14
+ const lines = [];
15
+ for (const violation of result.violations) {
16
+ const dep = violation.dependency ? ` ${violation.dependency}` : '';
17
+ const location = violation.workspaceLocation === '.'
18
+ ? ''
19
+ : ` (${violation.workspaceLocation})`;
20
+ lines.push(`${ansi_1.ansi.red('✖')} ${ansi_1.ansi.bold(violation.workspace)}${ansi_1.ansi.dim(location)}${ansi_1.ansi.red(dep)}: ${violation.message}`);
21
+ }
22
+ for (const warning of result.warnings) {
23
+ const workspace = warning.workspace ? `${warning.workspace}: ` : '';
24
+ lines.push(`${ansi_1.ansi.yellow('⚠')} ${ansi_1.ansi.bold(workspace)}${warning.message}`);
25
+ }
26
+ if (result.violations.length === 0) {
27
+ lines.push(`${ansi_1.ansi.green('✓')} ${ansi_1.ansi.bold('dependency model is consistent')}`);
28
+ }
29
+ else {
30
+ lines.push(`${ansi_1.ansi.red('✖')} ${ansi_1.ansi.bold(`${result.violations.length} dependency model violation(s)`)}`);
31
+ }
32
+ if (result.warnings.length > 0) {
33
+ lines.push(`${ansi_1.ansi.yellow('⚠')} ${ansi_1.ansi.bold(`${result.warnings.length} warning(s)`)}`);
34
+ }
35
+ return lines.join('\n');
36
+ }
37
+ function explainDependency(result, workspaceSelector, depIdent) {
38
+ const workspace = result.contexts.find((ctx) => ctx.name === workspaceSelector ||
39
+ ctx.location === workspaceSelector ||
40
+ (workspaceSelector === '<root>' && ctx.isRoot));
41
+ if (!workspace) {
42
+ return `Workspace not found: ${workspaceSelector}`;
43
+ }
44
+ const expected = result.expected.get(workspace.location);
45
+ if (!expected) {
46
+ return `No dependency model data for workspace: ${workspaceSelector}`;
47
+ }
48
+ const actualSection = (0, expected_1.getDeclaredSection)(workspace.pkg, depIdent);
49
+ const actualRange = (0, expected_1.getDeclaredRange)(workspace.pkg, depIdent);
50
+ const expectedSection = (0, expected_1.getExpectedSection)(expected, depIdent);
51
+ const expectedRange = (0, expected_1.getExpectedRange)(expected, depIdent);
52
+ const reasons = expected.reasons.get(depIdent) ?? [];
53
+ const lines = [
54
+ `${ansi_1.ansi.bold(workspace.name)} ${ansi_1.ansi.dim(`(${workspace.location})`)}`,
55
+ ansi_1.ansi.cyan(depIdent),
56
+ `${ansi_1.ansi.bold('actual:')} ${actualSection ? `${ansi_1.ansi.yellow(actualSection)}@${actualRange}` : ansi_1.ansi.dim('not declared')}`,
57
+ `${ansi_1.ansi.bold('expected:')} ${expectedSection ? `${ansi_1.ansi.green(expectedSection)}@${expectedRange}` : ansi_1.ansi.dim('not required')}`,
58
+ ];
59
+ if (actualSection && !expectedSection) {
60
+ lines.push(`${ansi_1.ansi.bold('status:')} ${ansi_1.ansi.yellow('actual dependency is stale in the derived model')}`);
61
+ }
62
+ if (reasons.length > 0) {
63
+ lines.push(ansi_1.ansi.bold('reasons:'));
64
+ for (const reason of reasons) {
65
+ lines.push(` - ${ansi_1.ansi.magenta(reason.kind)}: ${reason.detail}`);
66
+ }
67
+ }
68
+ const usage = workspace.sourceUsage.get(depIdent);
69
+ if (usage) {
70
+ lines.push(ansi_1.ansi.bold('source imports:'));
71
+ for (const file of [...usage.files].sort()) {
72
+ lines.push(` - ${ansi_1.ansi.dim(file)}`);
73
+ }
74
+ }
75
+ if (workspace.dtsImports.has(depIdent)) {
76
+ lines.push(`${ansi_1.ansi.bold('public type surface:')} ${ansi_1.ansi.green('appears in dist/**/*.d.ts')}`);
77
+ }
78
+ return lines.join('\n');
79
+ }
80
+ //# sourceMappingURL=reporting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporting.js","sourceRoot":"","sources":["../src/reporting.ts"],"names":[],"mappings":";;AAeA,kEAsCC;AAED,8CA6DC;AApHD;;;;;GAKG;AACH,+CAK0B;AAE1B,iCAA8B;AAE9B,SAAgB,2BAA2B,CACzC,MAA6B;IAE7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,QAAQ,GACZ,SAAS,CAAC,iBAAiB,KAAK,GAAG;YACjC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,KAAK,SAAS,CAAC,iBAAiB,GAAG,CAAC;QAE1C,KAAK,CAAC,IAAI,CACR,GAAG,WAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,WAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,WAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,OAAO,EAAE,CAChH,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpE,KAAK,CAAC,IAAI,CAAC,GAAG,WAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,GAAG,WAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,gCAAgC,CAAC,EAAE,CAC7F,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CACR,GAAG,WAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,aAAa,CAAC,EAAE,CAC3E,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,iBAAiB,CAC/B,MAA6B,EAC7B,iBAAyB,EACzB,QAAgB;IAEhB,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CACpC,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,CAAC,IAAI,KAAK,iBAAiB;QAC9B,GAAG,CAAC,QAAQ,KAAK,iBAAiB;QAClC,CAAC,iBAAiB,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,CACjD,CAAC;IAEF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,wBAAwB,iBAAiB,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,2CAA2C,iBAAiB,EAAE,CAAC;IACxE,CAAC;IAED,MAAM,aAAa,GAAG,IAAA,6BAAkB,EAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,IAAA,2BAAgB,EAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,eAAe,GAAG,IAAA,6BAAkB,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,IAAA,2BAAgB,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG;QACZ,GAAG,WAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,WAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,GAAG,CAAC,EAAE;QACrE,WAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnB,GAAG,WAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,WAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,WAAI,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;QACtH,GAAG,WAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,WAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,WAAI,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;KAC9H,CAAC;IAEF,IAAI,aAAa,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CACR,GAAG,WAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,WAAI,CAAC,MAAM,CAAC,iDAAiD,CAAC,EAAE,CAC5F,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,WAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAClC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,WAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,WAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,OAAO,WAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CACR,GAAG,WAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,WAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAClF,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { DependencyModelOptions, DependencyModelResult } from './model/types';
2
+ export declare function runDependencyModel(options?: DependencyModelOptions): DependencyModelResult;