@rsdk/yarn.constraints 6.0.0-next.39 → 6.0.0-next.40

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 (118) hide show
  1. package/DEPENDENCY_MODEL.md +452 -0
  2. package/README.MD +24 -0
  3. package/__tests__/compatibility.test.ts +321 -0
  4. package/__tests__/engine.test.ts +1002 -0
  5. package/__tests__/fixtures/imports/bin.js +4 -0
  6. package/__tests__/fixtures/imports/export-entry.mjs +1 -0
  7. package/__tests__/fixtures/imports/root-entry.js +3 -0
  8. package/__tests__/fixtures/imports/src/common.cjs +3 -0
  9. package/__tests__/fixtures/imports/src/common.cts +3 -0
  10. package/__tests__/fixtures/imports/src/component.tsx +4 -0
  11. package/__tests__/fixtures/imports/src/index.ts +13 -0
  12. package/__tests__/fixtures/imports/src/module.mjs +3 -0
  13. package/__tests__/fixtures/imports/src/module.mts +3 -0
  14. package/__tests__/fixtures/imports/src/plain.js +3 -0
  15. package/__tests__/fixtures/imports/src/test-only-usage.ts +1 -0
  16. package/__tests__/imports.test.ts +206 -0
  17. package/__tests__/manifest-writer.test.ts +157 -0
  18. package/dist/ansi.d.ts +9 -0
  19. package/dist/ansi.js +24 -0
  20. package/dist/ansi.js.map +1 -0
  21. package/dist/bin/depdoc.d.ts +2 -0
  22. package/dist/bin/depdoc.js +157 -0
  23. package/dist/bin/depdoc.js.map +1 -0
  24. package/dist/collectors/config.d.ts +2 -0
  25. package/dist/collectors/config.js +25 -0
  26. package/dist/collectors/config.js.map +1 -0
  27. package/dist/collectors/external-metadata.d.ts +5 -0
  28. package/dist/collectors/external-metadata.js +110 -0
  29. package/dist/collectors/external-metadata.js.map +1 -0
  30. package/dist/collectors/package-extensions.d.ts +3 -0
  31. package/dist/collectors/package-extensions.js +43 -0
  32. package/dist/collectors/package-extensions.js.map +1 -0
  33. package/dist/collectors/type-providers.d.ts +3 -0
  34. package/dist/collectors/type-providers.js +46 -0
  35. package/dist/collectors/type-providers.js.map +1 -0
  36. package/dist/collectors/workspaces.d.ts +2 -0
  37. package/dist/collectors/workspaces.js +88 -0
  38. package/dist/collectors/workspaces.js.map +1 -0
  39. package/dist/dependency-model.d.ts +11 -0
  40. package/dist/dependency-model.js +18 -0
  41. package/dist/dependency-model.js.map +1 -0
  42. package/dist/index.d.ts +9 -5
  43. package/dist/index.js +13 -33
  44. package/dist/index.js.map +1 -1
  45. package/dist/lib/imports.d.ts +9 -0
  46. package/dist/lib/imports.js +249 -0
  47. package/dist/lib/imports.js.map +1 -0
  48. package/dist/lib/package-json.d.ts +21 -0
  49. package/dist/lib/package-json.js +32 -0
  50. package/dist/lib/package-json.js.map +1 -0
  51. package/dist/model/diagnostics.d.ts +4 -0
  52. package/dist/model/diagnostics.js +273 -0
  53. package/dist/model/diagnostics.js.map +1 -0
  54. package/dist/model/engine.d.ts +5 -0
  55. package/dist/model/engine.js +52 -0
  56. package/dist/model/engine.js.map +1 -0
  57. package/dist/model/expected.d.ts +20 -0
  58. package/dist/model/expected.js +89 -0
  59. package/dist/model/expected.js.map +1 -0
  60. package/dist/model/peer-propagation.d.ts +2 -0
  61. package/dist/model/peer-propagation.js +124 -0
  62. package/dist/model/peer-propagation.js.map +1 -0
  63. package/dist/model/placement.d.ts +9 -0
  64. package/dist/model/placement.js +205 -0
  65. package/dist/model/placement.js.map +1 -0
  66. package/dist/model/rules.d.ts +14 -0
  67. package/dist/model/rules.js +46 -0
  68. package/dist/model/rules.js.map +1 -0
  69. package/dist/model/types.d.ts +117 -0
  70. package/dist/model/types.js +9 -0
  71. package/dist/model/types.js.map +1 -0
  72. package/dist/model/versions.d.ts +3 -0
  73. package/dist/model/versions.js +73 -0
  74. package/dist/model/versions.js.map +1 -0
  75. package/dist/reporting.d.ts +3 -0
  76. package/dist/reporting.js +80 -0
  77. package/dist/reporting.js.map +1 -0
  78. package/dist/runner.d.ts +2 -0
  79. package/dist/runner.js +70 -0
  80. package/dist/runner.js.map +1 -0
  81. package/dist/writer/manifest-writer.d.ts +2 -0
  82. package/dist/writer/manifest-writer.js +72 -0
  83. package/dist/writer/manifest-writer.js.map +1 -0
  84. package/eslint.config.cjs +3 -0
  85. package/jest.config.js +1 -0
  86. package/package.json +7 -3
  87. package/src/ansi.ts +23 -0
  88. package/src/bin/depdoc.ts +213 -0
  89. package/src/collectors/config.ts +26 -0
  90. package/src/collectors/external-metadata.ts +148 -0
  91. package/src/collectors/package-extensions.ts +52 -0
  92. package/src/collectors/type-providers.ts +51 -0
  93. package/src/collectors/workspaces.ts +99 -0
  94. package/src/dependency-model.ts +26 -0
  95. package/src/index.ts +28 -45
  96. package/src/lib/imports.ts +293 -0
  97. package/src/lib/package-json.ts +46 -0
  98. package/src/model/diagnostics.ts +328 -0
  99. package/src/model/engine.ts +120 -0
  100. package/src/model/expected.ts +141 -0
  101. package/src/model/peer-propagation.ts +199 -0
  102. package/src/model/placement.ts +372 -0
  103. package/src/model/rules.ts +73 -0
  104. package/src/model/types.ts +164 -0
  105. package/src/model/versions.ts +109 -0
  106. package/src/reporting.ts +117 -0
  107. package/src/runner.ts +102 -0
  108. package/src/writer/manifest-writer.ts +111 -0
  109. package/tsconfig.build.json +1 -0
  110. package/tsconfig.json +6 -1
  111. package/dist/constraint-schema.d.ts +0 -1
  112. package/dist/constraint-schema.js +0 -17
  113. package/dist/constraint-schema.js.map +0 -1
  114. package/dist/dependency-checker.d.ts +0 -8
  115. package/dist/dependency-checker.js +0 -40
  116. package/dist/dependency-checker.js.map +0 -1
  117. package/src/constraint-schema.ts +0 -20
  118. package/src/dependency-checker.ts +0 -41
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getPackageName = getPackageName;
7
+ exports.collectSourceImports = collectSourceImports;
8
+ exports.collectDtsImports = collectDtsImports;
9
+ /**
10
+ * TypeScript/JavaScript import collectors.
11
+ *
12
+ * These helpers parse source and emitted declaration files into package-level
13
+ * import facts. They do not decide dependency placement; they only normalize
14
+ * specifiers and classify imports as runtime or type-only.
15
+ */
16
+ const node_fs_1 = require("node:fs");
17
+ const node_module_1 = require("node:module");
18
+ const node_path_1 = __importDefault(require("node:path"));
19
+ const ts = require("typescript");
20
+ const BUILTINS = new Set([
21
+ ...node_module_1.builtinModules,
22
+ ...node_module_1.builtinModules.map((m) => `node:${m}`),
23
+ ]);
24
+ const SOURCE_EXTENSIONS = new Set([
25
+ '.ts',
26
+ '.tsx',
27
+ '.mts',
28
+ '.cts',
29
+ '.js',
30
+ '.jsx',
31
+ '.mjs',
32
+ '.cjs',
33
+ ]);
34
+ const DTS_RE = /\.d\.(?:c|m)?ts$/;
35
+ function getPackageName(specifier) {
36
+ if (specifier.startsWith('.') ||
37
+ specifier.startsWith('/') ||
38
+ specifier.includes('*'))
39
+ return null;
40
+ if (BUILTINS.has(specifier) || specifier.startsWith('node:'))
41
+ return null;
42
+ if (specifier.startsWith('@')) {
43
+ const scopeSlash = specifier.indexOf('/', 1);
44
+ if (scopeSlash === -1)
45
+ return null;
46
+ const subpathSlash = specifier.indexOf('/', scopeSlash + 1);
47
+ return subpathSlash === -1 ? specifier : specifier.slice(0, subpathSlash);
48
+ }
49
+ const slash = specifier.indexOf('/');
50
+ return slash === -1 ? specifier : specifier.slice(0, slash);
51
+ }
52
+ function walkFiles(dir, filter) {
53
+ const results = [];
54
+ try {
55
+ for (const entry of (0, node_fs_1.readdirSync)(dir, { withFileTypes: true })) {
56
+ const full = node_path_1.default.join(dir, entry.name);
57
+ if (entry.isDirectory() && entry.name !== 'node_modules') {
58
+ results.push(...walkFiles(full, filter));
59
+ }
60
+ else if (entry.isFile() && filter(entry.name)) {
61
+ results.push(full);
62
+ }
63
+ }
64
+ }
65
+ catch {
66
+ // dir doesn't exist - return empty
67
+ }
68
+ return results;
69
+ }
70
+ function isSourceFile(name) {
71
+ return SOURCE_EXTENSIONS.has(node_path_1.default.extname(name)) && !DTS_RE.test(name);
72
+ }
73
+ function getScriptKind(file) {
74
+ if (file.endsWith('.tsx'))
75
+ return ts.ScriptKind.TSX;
76
+ if (file.endsWith('.jsx'))
77
+ return ts.ScriptKind.JSX;
78
+ if (file.endsWith('.js') ||
79
+ file.endsWith('.mjs') ||
80
+ file.endsWith('.cjs'))
81
+ return ts.ScriptKind.JS;
82
+ return ts.ScriptKind.TS;
83
+ }
84
+ function stringLiteralText(node) {
85
+ return node && ts.isStringLiteralLike(node) ? node.text : null;
86
+ }
87
+ function addImport(results, file, specifier, isTypeOnly) {
88
+ const packageName = getPackageName(specifier);
89
+ if (!packageName)
90
+ return;
91
+ results.push({ packageName, isTypeOnly, file });
92
+ }
93
+ function isImportDeclarationTypeOnly(node) {
94
+ const clause = node.importClause;
95
+ if (!clause)
96
+ return false;
97
+ if (clause.isTypeOnly)
98
+ return true;
99
+ if (clause.name)
100
+ return false;
101
+ if (!clause.namedBindings)
102
+ return true;
103
+ if (ts.isNamespaceImport(clause.namedBindings))
104
+ return false;
105
+ return (clause.namedBindings.elements.length > 0 &&
106
+ clause.namedBindings.elements.every((element) => element.isTypeOnly));
107
+ }
108
+ function isExportDeclarationTypeOnly(node) {
109
+ if (node.isTypeOnly)
110
+ return true;
111
+ const clause = node.exportClause;
112
+ if (!clause || !ts.isNamedExports(clause))
113
+ return false;
114
+ return (clause.elements.length > 0 &&
115
+ clause.elements.every((element) => element.isTypeOnly));
116
+ }
117
+ function collectExternalModuleReference(node) {
118
+ return stringLiteralText(node.expression);
119
+ }
120
+ function extractImports(file, content, options = {}) {
121
+ const results = [];
122
+ const sourceFile = ts.createSourceFile(file, content, ts.ScriptTarget.Latest, true, getScriptKind(file));
123
+ if (options.includeDtsForms) {
124
+ for (const reference of sourceFile.typeReferenceDirectives) {
125
+ addImport(results, file, reference.fileName, true);
126
+ }
127
+ }
128
+ const visit = (node) => {
129
+ if (ts.isImportDeclaration(node)) {
130
+ const specifier = stringLiteralText(node.moduleSpecifier);
131
+ if (specifier) {
132
+ addImport(results, file, specifier, isImportDeclarationTypeOnly(node));
133
+ }
134
+ }
135
+ else if (ts.isExportDeclaration(node)) {
136
+ const specifier = stringLiteralText(node.moduleSpecifier);
137
+ if (specifier) {
138
+ addImport(results, file, specifier, isExportDeclarationTypeOnly(node));
139
+ }
140
+ }
141
+ else if (ts.isImportEqualsDeclaration(node)) {
142
+ if (ts.isExternalModuleReference(node.moduleReference)) {
143
+ const specifier = collectExternalModuleReference(node.moduleReference);
144
+ if (specifier)
145
+ addImport(results, file, specifier, node.isTypeOnly);
146
+ }
147
+ }
148
+ else if (ts.isCallExpression(node)) {
149
+ if (node.expression.kind === ts.SyntaxKind.ImportKeyword &&
150
+ node.arguments.length === 1) {
151
+ const specifier = stringLiteralText(node.arguments[0]);
152
+ if (specifier)
153
+ addImport(results, file, specifier, false);
154
+ }
155
+ else if (ts.isIdentifier(node.expression) &&
156
+ node.expression.text === 'require' &&
157
+ node.arguments.length === 1) {
158
+ const specifier = stringLiteralText(node.arguments[0]);
159
+ if (specifier)
160
+ addImport(results, file, specifier, false);
161
+ }
162
+ }
163
+ else if (ts.isImportTypeNode(node)) {
164
+ const argument = node.argument;
165
+ if (ts.isLiteralTypeNode(argument)) {
166
+ const specifier = stringLiteralText(argument.literal);
167
+ if (specifier)
168
+ addImport(results, file, specifier, true);
169
+ }
170
+ }
171
+ else if (options.includeDtsForms &&
172
+ ts.isModuleDeclaration(node) &&
173
+ ts.isStringLiteral(node.name)) {
174
+ addImport(results, file, node.name.text, true);
175
+ }
176
+ ts.forEachChild(node, visit);
177
+ };
178
+ visit(sourceFile);
179
+ return results;
180
+ }
181
+ function collectEntrypointStrings(value, result) {
182
+ if (typeof value === 'string') {
183
+ result.add(value);
184
+ return;
185
+ }
186
+ if (!value || typeof value !== 'object')
187
+ return;
188
+ if (Array.isArray(value)) {
189
+ for (const item of value)
190
+ collectEntrypointStrings(item, result);
191
+ return;
192
+ }
193
+ for (const item of Object.values(value)) {
194
+ collectEntrypointStrings(item, result);
195
+ }
196
+ }
197
+ function getPackageEntrypointFiles(workspaceDir, pkg) {
198
+ const candidates = new Set();
199
+ if (pkg.main)
200
+ candidates.add(pkg.main);
201
+ if (typeof pkg.bin === 'string') {
202
+ candidates.add(pkg.bin);
203
+ }
204
+ else if (pkg.bin) {
205
+ for (const value of Object.values(pkg.bin))
206
+ candidates.add(value);
207
+ }
208
+ collectEntrypointStrings(pkg.exports, candidates);
209
+ const result = new Set();
210
+ for (const candidate of candidates) {
211
+ if (!candidate || candidate.includes('*'))
212
+ continue;
213
+ const full = node_path_1.default.resolve(workspaceDir, candidate);
214
+ const relative = node_path_1.default.relative(workspaceDir, full);
215
+ if (relative.startsWith('..') || node_path_1.default.isAbsolute(relative))
216
+ continue;
217
+ if (!(0, node_fs_1.existsSync)(full) || !isSourceFile(full))
218
+ continue;
219
+ const normalized = relative.split(node_path_1.default.sep).join('/');
220
+ const isSrc = normalized.startsWith('src/');
221
+ const isRoot = !normalized.includes('/');
222
+ if (isSrc || isRoot)
223
+ result.add(full);
224
+ }
225
+ return [...result];
226
+ }
227
+ function collectSourceImports(srcDirOrWorkspaceDir, pkg) {
228
+ const srcDir = pkg
229
+ ? node_path_1.default.join(srcDirOrWorkspaceDir, 'src')
230
+ : srcDirOrWorkspaceDir;
231
+ const files = new Set(walkFiles(srcDir, (name) => isSourceFile(name)));
232
+ if (pkg) {
233
+ for (const file of getPackageEntrypointFiles(srcDirOrWorkspaceDir, pkg)) {
234
+ files.add(file);
235
+ }
236
+ }
237
+ return [...files].flatMap((file) => extractImports(file, (0, node_fs_1.readFileSync)(file, 'utf8')));
238
+ }
239
+ function collectDtsImports(distDir) {
240
+ const files = walkFiles(distDir, (name) => DTS_RE.test(name));
241
+ const result = new Set();
242
+ for (const file of files) {
243
+ for (const { packageName } of extractImports(file, (0, node_fs_1.readFileSync)(file, 'utf8'), { includeDtsForms: true })) {
244
+ result.add(packageName);
245
+ }
246
+ }
247
+ return result;
248
+ }
249
+ //# sourceMappingURL=imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/lib/imports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface PackageJson {
2
+ name: string;
3
+ private?: boolean;
4
+ role?: 'library' | 'service' | 'cli';
5
+ workspaces?: string[] | {
6
+ packages: string[];
7
+ };
8
+ main?: string;
9
+ types?: string;
10
+ typings?: string;
11
+ exports?: unknown;
12
+ bin?: string | Record<string, string>;
13
+ dependencies?: Record<string, string>;
14
+ peerDependencies?: Record<string, string>;
15
+ peerDependenciesMeta?: Record<string, {
16
+ optional?: boolean;
17
+ }>;
18
+ devDependencies?: Record<string, string>;
19
+ }
20
+ export declare function readPackageJson(dir: string): PackageJson;
21
+ export declare function findMonorepoRoot(startDir: string): string | null;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readPackageJson = readPackageJson;
4
+ exports.findMonorepoRoot = findMonorepoRoot;
5
+ /**
6
+ * Package manifest helpers.
7
+ *
8
+ * This module intentionally stays small: it reads `package.json` files and
9
+ * locates the monorepo root. Higher-level workspace discovery and model
10
+ * semantics belong to collectors and the engine.
11
+ */
12
+ const node_fs_1 = require("node:fs");
13
+ const node_path_1 = require("node:path");
14
+ function readPackageJson(dir) {
15
+ return JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(dir, 'package.json'), 'utf8'));
16
+ }
17
+ function findMonorepoRoot(startDir) {
18
+ let dir = startDir;
19
+ while (true) {
20
+ const pkgPath = (0, node_path_1.join)(dir, 'package.json');
21
+ if ((0, node_fs_1.existsSync)(pkgPath)) {
22
+ const pkg = JSON.parse((0, node_fs_1.readFileSync)(pkgPath, 'utf8'));
23
+ if (pkg.workspaces)
24
+ return dir;
25
+ }
26
+ const parent = (0, node_path_1.dirname)(dir);
27
+ if (parent === dir)
28
+ return null;
29
+ dir = parent;
30
+ }
31
+ }
32
+ //# sourceMappingURL=package-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../src/lib/package-json.ts"],"names":[],"mappings":";;AA0BA,0CAIC;AAED,4CAaC;AA7CD;;;;;;GAMG;AACH,qCAAmD;AACnD,yCAA0C;AAkB1C,SAAgB,eAAe,CAAC,GAAW;IACzC,OAAO,IAAI,CAAC,KAAK,CACf,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACjC,CAAC;AACnB,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,GAAG,GAAG,QAAQ,CAAC;IAEnB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC1C,IAAI,IAAA,oBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,OAAO,EAAE,MAAM,CAAC,CAAgB,CAAC;YACrE,IAAI,GAAG,CAAC,UAAU;gBAAE,OAAO,GAAG,CAAC;QACjC,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { DependencyRule, DependencyViolation, DependencyWarning, ExpectedWorkspace, WorkspaceFacts } from './types';
2
+ export declare function compareManifest(expected: ExpectedWorkspace, violations: DependencyViolation[]): void;
3
+ export declare function validateBasicShape(workspaces: WorkspaceFacts[], expectedByLocation: Map<string, ExpectedWorkspace>, rules: DependencyRule[], violations: DependencyViolation[], warnings: DependencyWarning[], withDts: boolean): void;
4
+ export declare function dedupeViolations(violations: DependencyViolation[]): DependencyViolation[];
@@ -0,0 +1,273 @@
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 compareManifest(expected, violations) {
24
+ const workspace = expected.workspace;
25
+ const actualNames = collectActualDependencyNames(workspace);
26
+ const expectedNames = new Set();
27
+ for (const section of types_1.SECTIONS) {
28
+ for (const depIdent of expected.sections[section].keys()) {
29
+ expectedNames.add(depIdent);
30
+ }
31
+ }
32
+ for (const depIdent of expectedNames) {
33
+ const expectedSection = (0, expected_1.getExpectedSection)(expected, depIdent);
34
+ const expectedRange = (0, expected_1.getExpectedRange)(expected, depIdent);
35
+ const actualSection = (0, expected_1.getDeclaredSection)(workspace.pkg, depIdent);
36
+ const actualRange = (0, expected_1.getDeclaredRange)(workspace.pkg, depIdent);
37
+ if (!actualSection) {
38
+ violations.push({
39
+ code: 'missing',
40
+ workspace: getWorkspaceLabel(workspace),
41
+ workspaceLocation: workspace.location,
42
+ dependency: depIdent,
43
+ expectedSection,
44
+ expectedRange,
45
+ message: `${depIdent} is missing from ${expectedSection}`,
46
+ });
47
+ continue;
48
+ }
49
+ if (actualSection !== expectedSection) {
50
+ violations.push({
51
+ code: expected.workspace.isRoot ? 'root-section' : 'wrong-section',
52
+ workspace: getWorkspaceLabel(workspace),
53
+ workspaceLocation: workspace.location,
54
+ dependency: depIdent,
55
+ actualSection,
56
+ expectedSection,
57
+ actualRange: actualRange ?? undefined,
58
+ expectedRange,
59
+ message: `${depIdent} is in ${actualSection}, expected ${expectedSection}`,
60
+ });
61
+ continue;
62
+ }
63
+ if (actualRange !== expectedRange) {
64
+ violations.push({
65
+ code: 'wrong-range',
66
+ workspace: getWorkspaceLabel(workspace),
67
+ workspaceLocation: workspace.location,
68
+ dependency: depIdent,
69
+ actualSection,
70
+ expectedSection,
71
+ actualRange: actualRange ?? undefined,
72
+ expectedRange,
73
+ message: `${depIdent} range is ${actualRange}, expected ${expectedRange}`,
74
+ });
75
+ }
76
+ }
77
+ for (const depIdent of actualNames) {
78
+ if (expectedNames.has(depIdent))
79
+ continue;
80
+ const actualSection = (0, expected_1.getDeclaredSection)(workspace.pkg, depIdent);
81
+ const actualRange = (0, expected_1.getDeclaredRange)(workspace.pkg, depIdent);
82
+ const isForbiddenRootSection = workspace.isRoot && actualSection && actualSection !== 'devDependencies';
83
+ violations.push({
84
+ code: isForbiddenRootSection ? 'root-section' : 'stale',
85
+ workspace: getWorkspaceLabel(workspace),
86
+ workspaceLocation: workspace.location,
87
+ dependency: depIdent,
88
+ actualSection: actualSection ?? undefined,
89
+ actualRange: actualRange ?? undefined,
90
+ message: isForbiddenRootSection
91
+ ? `${depIdent} is declared in root ${actualSection}; root package.json may contain only devDependencies`
92
+ : `${depIdent} is declared but not required by the derived model`,
93
+ });
94
+ }
95
+ for (const depIdent of Object.keys(workspace.pkg.peerDependenciesMeta ?? {})) {
96
+ if (expected.sections.peerDependencies.has(depIdent))
97
+ continue;
98
+ violations.push({
99
+ code: 'stale',
100
+ workspace: getWorkspaceLabel(workspace),
101
+ workspaceLocation: workspace.location,
102
+ dependency: depIdent,
103
+ message: `${depIdent} has peerDependenciesMeta but is not expected in peerDependencies`,
104
+ });
105
+ }
106
+ }
107
+ function validateBasicShape(workspaces, expectedByLocation, rules, violations, warnings, withDts) {
108
+ const workspaceNames = new Set(workspaces.filter((ws) => !ws.isRoot).map((ws) => ws.name));
109
+ for (const workspace of workspaces) {
110
+ if (workspace.isRoot) {
111
+ if (workspace.pkg.private !== true) {
112
+ violations.push({
113
+ code: 'root-private',
114
+ workspace: getWorkspaceLabel(workspace),
115
+ workspaceLocation: workspace.location,
116
+ message: 'root package.json must have private: true',
117
+ });
118
+ }
119
+ continue;
120
+ }
121
+ if (!workspace.pkg.role) {
122
+ violations.push({
123
+ code: 'role-missing',
124
+ workspace: getWorkspaceLabel(workspace),
125
+ workspaceLocation: workspace.location,
126
+ message: 'workspace package.json must declare role',
127
+ });
128
+ }
129
+ else if (!(0, rules_1.isWorkspaceRole)(workspace.pkg.role)) {
130
+ violations.push({
131
+ code: 'role-invalid',
132
+ workspace: getWorkspaceLabel(workspace),
133
+ workspaceLocation: workspace.location,
134
+ message: `workspace role must be library, service, or cli; got ${workspace.pkg.role}`,
135
+ });
136
+ }
137
+ if (workspace.pkg.bin && workspace.role !== 'cli') {
138
+ warnings.push({
139
+ code: 'bin-role-mismatch',
140
+ workspace: getWorkspaceLabel(workspace),
141
+ workspaceLocation: workspace.location,
142
+ message: 'workspace declares bin but role is not cli',
143
+ });
144
+ }
145
+ if (workspace.hasSrc && !workspace.hasDist && withDts) {
146
+ violations.push({
147
+ code: 'dist-missing',
148
+ workspace: getWorkspaceLabel(workspace),
149
+ workspaceLocation: workspace.location,
150
+ message: 'dist/ not found; build required before --with-dts check',
151
+ });
152
+ }
153
+ if (workspace.role === 'service' || workspace.role === 'cli') {
154
+ for (const section of ['peerDependencies', 'devDependencies']) {
155
+ for (const depIdent of Object.keys(workspace.pkg[section] ?? {})) {
156
+ violations.push({
157
+ code: 'forbidden-section',
158
+ workspace: getWorkspaceLabel(workspace),
159
+ workspaceLocation: workspace.location,
160
+ dependency: depIdent,
161
+ actualSection: section,
162
+ expectedSection: section === 'peerDependencies' ? 'dependencies' : undefined,
163
+ message: `${section} are forbidden for ${workspace.role} workspaces`,
164
+ });
165
+ }
166
+ }
167
+ }
168
+ if (workspace.role === 'library') {
169
+ for (const depIdent of Object.keys(workspace.pkg.dependencies ?? {})) {
170
+ if (workspace.pkg.peerDependencies?.[depIdent] !== undefined) {
171
+ violations.push({
172
+ code: 'forbidden-section',
173
+ workspace: getWorkspaceLabel(workspace),
174
+ workspaceLocation: workspace.location,
175
+ dependency: depIdent,
176
+ actualSection: 'dependencies',
177
+ expectedSection: 'peerDependencies',
178
+ message: `${depIdent} is declared in both dependencies and peerDependencies`,
179
+ });
180
+ }
181
+ }
182
+ const expected = expectedByLocation.get(workspace.location);
183
+ if (expected) {
184
+ for (const [depIdent, peerRange] of expected.sections
185
+ .peerDependencies) {
186
+ const devRange = workspace.pkg.devDependencies?.[depIdent];
187
+ if (devRange !== peerRange) {
188
+ violations.push({
189
+ code: 'mirror',
190
+ workspace: getWorkspaceLabel(workspace),
191
+ workspaceLocation: workspace.location,
192
+ dependency: depIdent,
193
+ actualSection: 'devDependencies',
194
+ expectedSection: 'devDependencies',
195
+ actualRange: devRange,
196
+ expectedRange: peerRange,
197
+ message: `${depIdent} must be mirrored from peerDependencies to devDependencies`,
198
+ });
199
+ }
200
+ }
201
+ }
202
+ }
203
+ for (const depIdent of Object.keys(workspace.pkg.devDependencies ?? {})) {
204
+ if (workspace.pkg.dependencies?.[depIdent] !== undefined) {
205
+ violations.push({
206
+ code: 'forbidden-section',
207
+ workspace: getWorkspaceLabel(workspace),
208
+ workspaceLocation: workspace.location,
209
+ dependency: depIdent,
210
+ actualSection: 'devDependencies',
211
+ expectedSection: 'dependencies',
212
+ message: `${depIdent} is declared in both dependencies and devDependencies`,
213
+ });
214
+ }
215
+ }
216
+ for (const section of types_1.SECTIONS) {
217
+ for (const depIdent of Object.keys(workspace.pkg[section] ?? {})) {
218
+ const rule = (0, rules_1.getEffectiveRule)(rules, depIdent, workspace.name, workspace.location);
219
+ const expected = expectedByLocation.get(workspace.location);
220
+ if (rule.rootOnly &&
221
+ (0, placement_1.isExternal)(depIdent, workspaceNames) &&
222
+ !expected?.sections[section].has(depIdent)) {
223
+ violations.push({
224
+ code: 'root-only',
225
+ workspace: getWorkspaceLabel(workspace),
226
+ workspaceLocation: workspace.location,
227
+ dependency: depIdent,
228
+ actualSection: section,
229
+ expectedSection: 'devDependencies',
230
+ message: `${depIdent} is rootOnly and must not be declared in workspace package.json`,
231
+ });
232
+ }
233
+ }
234
+ }
235
+ const expected = expectedByLocation.get(workspace.location);
236
+ if (expected) {
237
+ for (const [depIdent, reasons] of expected.reasons) {
238
+ if (!(0, placement_1.isExternal)(depIdent, workspaceNames))
239
+ continue;
240
+ if (!reasons.some((reason) => reason.kind === 'root-only'))
241
+ continue;
242
+ violations.push({
243
+ code: 'root-only-usage',
244
+ workspace: getWorkspaceLabel(workspace),
245
+ workspaceLocation: workspace.location,
246
+ dependency: depIdent,
247
+ expectedSection: 'devDependencies',
248
+ message: `${depIdent} is rootOnly and must not be used by workspace source or peer surface`,
249
+ });
250
+ }
251
+ }
252
+ }
253
+ }
254
+ function dedupeViolations(violations) {
255
+ const result = [];
256
+ const seen = new Set();
257
+ for (const violation of violations) {
258
+ const key = [
259
+ violation.code,
260
+ violation.workspaceLocation,
261
+ violation.dependency ?? '',
262
+ violation.actualSection ?? '',
263
+ violation.expectedSection ?? '',
264
+ violation.expectedRange ?? '',
265
+ ].join('\0');
266
+ if (seen.has(key))
267
+ continue;
268
+ seen.add(key);
269
+ result.push(violation);
270
+ }
271
+ return result;
272
+ }
273
+ //# 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;