@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,342 @@
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.collectSourceFiles = collectSourceFiles;
8
+ exports.collectSourceImportsFromFiles = collectSourceImportsFromFiles;
9
+ exports.collectSourceImports = collectSourceImports;
10
+ exports.collectDtsImports = collectDtsImports;
11
+ /**
12
+ * TypeScript/JavaScript import collectors.
13
+ *
14
+ * These helpers parse source and emitted declaration files into package-level
15
+ * import facts. They do not decide dependency placement; they only normalize
16
+ * specifiers and classify imports as runtime or type-only.
17
+ */
18
+ const node_fs_1 = require("node:fs");
19
+ const node_module_1 = require("node:module");
20
+ const node_path_1 = __importDefault(require("node:path"));
21
+ const ts = require("typescript");
22
+ const BUILTINS = new Set([
23
+ ...node_module_1.builtinModules,
24
+ ...node_module_1.builtinModules.map((m) => `node:${m}`),
25
+ ]);
26
+ const SOURCE_EXTENSIONS = new Set([
27
+ '.ts',
28
+ '.tsx',
29
+ '.mts',
30
+ '.cts',
31
+ '.js',
32
+ '.jsx',
33
+ '.mjs',
34
+ '.cjs',
35
+ ]);
36
+ const DTS_RE = /\.d\.(?:c|m)?ts$/;
37
+ const DEFAULT_SOURCE_ROOTS = ['src', 'test', 'tests', '__tests__'];
38
+ const IGNORED_ENTRYPOINT_DIRS = new Set([
39
+ 'node_modules',
40
+ 'dist',
41
+ 'build',
42
+ 'coverage',
43
+ ]);
44
+ const IGNORED_WALK_DIRS = new Set([
45
+ 'node_modules',
46
+ 'fixtures',
47
+ '__fixtures__',
48
+ '__mocks__',
49
+ ]);
50
+ function getPackageName(specifier) {
51
+ if (specifier.startsWith('.') ||
52
+ specifier.startsWith('/') ||
53
+ specifier.includes('*'))
54
+ return null;
55
+ if (BUILTINS.has(specifier) || specifier.startsWith('node:'))
56
+ return null;
57
+ if (specifier.startsWith('@')) {
58
+ const scopeSlash = specifier.indexOf('/', 1);
59
+ if (scopeSlash === -1)
60
+ return null;
61
+ const subpathSlash = specifier.indexOf('/', scopeSlash + 1);
62
+ return subpathSlash === -1 ? specifier : specifier.slice(0, subpathSlash);
63
+ }
64
+ const slash = specifier.indexOf('/');
65
+ return slash === -1 ? specifier : specifier.slice(0, slash);
66
+ }
67
+ function walkFiles(dir, filter) {
68
+ const results = [];
69
+ try {
70
+ for (const entry of (0, node_fs_1.readdirSync)(dir, { withFileTypes: true })) {
71
+ const full = node_path_1.default.join(dir, entry.name);
72
+ if (entry.isDirectory() && !IGNORED_WALK_DIRS.has(entry.name)) {
73
+ results.push(...walkFiles(full, filter));
74
+ }
75
+ else if (entry.isFile() && filter(entry.name)) {
76
+ results.push(full);
77
+ }
78
+ }
79
+ }
80
+ catch {
81
+ // dir doesn't exist - return empty
82
+ }
83
+ return results;
84
+ }
85
+ function isInside(parent, child) {
86
+ const relative = node_path_1.default.relative(parent, child);
87
+ return (relative !== '' &&
88
+ !relative.startsWith('..') &&
89
+ !node_path_1.default.isAbsolute(relative));
90
+ }
91
+ function startsWithIgnoredEntrypointDir(relative) {
92
+ const [first] = relative.split('/');
93
+ return first !== undefined && IGNORED_ENTRYPOINT_DIRS.has(first);
94
+ }
95
+ function isSourceFile(name) {
96
+ return SOURCE_EXTENSIONS.has(node_path_1.default.extname(name)) && !DTS_RE.test(name);
97
+ }
98
+ function getScriptKind(file) {
99
+ if (file.endsWith('.tsx'))
100
+ return ts.ScriptKind.TSX;
101
+ if (file.endsWith('.jsx'))
102
+ return ts.ScriptKind.JSX;
103
+ if (file.endsWith('.js') ||
104
+ file.endsWith('.mjs') ||
105
+ file.endsWith('.cjs'))
106
+ return ts.ScriptKind.JS;
107
+ return ts.ScriptKind.TS;
108
+ }
109
+ function stringLiteralText(node) {
110
+ return node && ts.isStringLiteralLike(node) ? node.text : null;
111
+ }
112
+ function addImport(results, file, specifier, isTypeOnly) {
113
+ const packageName = getPackageName(specifier);
114
+ if (!packageName)
115
+ return;
116
+ results.push({ packageName, isTypeOnly, file });
117
+ }
118
+ function addModuleReference(results, specifier, isTypeOnly) {
119
+ if (!specifier)
120
+ return;
121
+ results.push({ specifier, isTypeOnly });
122
+ }
123
+ function isImportDeclarationTypeOnly(node) {
124
+ const clause = node.importClause;
125
+ if (!clause)
126
+ return false;
127
+ if (clause.isTypeOnly)
128
+ return true;
129
+ if (clause.name)
130
+ return false;
131
+ if (!clause.namedBindings)
132
+ return true;
133
+ if (ts.isNamespaceImport(clause.namedBindings))
134
+ return false;
135
+ return (clause.namedBindings.elements.length > 0 &&
136
+ clause.namedBindings.elements.every((element) => element.isTypeOnly));
137
+ }
138
+ function isExportDeclarationTypeOnly(node) {
139
+ if (node.isTypeOnly)
140
+ return true;
141
+ const clause = node.exportClause;
142
+ if (!clause || !ts.isNamedExports(clause))
143
+ return false;
144
+ return (clause.elements.length > 0 &&
145
+ clause.elements.every((element) => element.isTypeOnly));
146
+ }
147
+ function collectExternalModuleReference(node) {
148
+ return stringLiteralText(node.expression);
149
+ }
150
+ function extractModuleReferences(file, content, options = {}) {
151
+ const results = [];
152
+ const sourceFile = ts.createSourceFile(file, content, ts.ScriptTarget.Latest, true, getScriptKind(file));
153
+ if (options.includeDtsForms) {
154
+ for (const reference of sourceFile.typeReferenceDirectives) {
155
+ addModuleReference(results, reference.fileName, true);
156
+ }
157
+ }
158
+ const visit = (node) => {
159
+ if (ts.isImportDeclaration(node)) {
160
+ const specifier = stringLiteralText(node.moduleSpecifier);
161
+ addModuleReference(results, specifier, isImportDeclarationTypeOnly(node));
162
+ }
163
+ else if (ts.isExportDeclaration(node)) {
164
+ const specifier = stringLiteralText(node.moduleSpecifier);
165
+ addModuleReference(results, specifier, isExportDeclarationTypeOnly(node));
166
+ }
167
+ else if (ts.isImportEqualsDeclaration(node)) {
168
+ if (ts.isExternalModuleReference(node.moduleReference)) {
169
+ const specifier = collectExternalModuleReference(node.moduleReference);
170
+ addModuleReference(results, specifier, node.isTypeOnly);
171
+ }
172
+ }
173
+ else if (ts.isCallExpression(node)) {
174
+ if (node.expression.kind === ts.SyntaxKind.ImportKeyword &&
175
+ node.arguments.length === 1) {
176
+ const specifier = stringLiteralText(node.arguments[0]);
177
+ addModuleReference(results, specifier, false);
178
+ }
179
+ else if (ts.isIdentifier(node.expression) &&
180
+ node.expression.text === 'require' &&
181
+ node.arguments.length === 1) {
182
+ const specifier = stringLiteralText(node.arguments[0]);
183
+ addModuleReference(results, specifier, false);
184
+ }
185
+ }
186
+ else if (ts.isImportTypeNode(node)) {
187
+ const argument = node.argument;
188
+ if (ts.isLiteralTypeNode(argument)) {
189
+ const specifier = stringLiteralText(argument.literal);
190
+ addModuleReference(results, specifier, true);
191
+ }
192
+ }
193
+ else if (options.includeDtsForms &&
194
+ ts.isModuleDeclaration(node) &&
195
+ ts.isStringLiteral(node.name)) {
196
+ addModuleReference(results, node.name.text, true);
197
+ }
198
+ ts.forEachChild(node, visit);
199
+ };
200
+ visit(sourceFile);
201
+ return results;
202
+ }
203
+ function extractImports(file, content, options = {}) {
204
+ const results = [];
205
+ for (const reference of extractModuleReferences(file, content, options)) {
206
+ addImport(results, file, reference.specifier, reference.isTypeOnly);
207
+ }
208
+ return results;
209
+ }
210
+ function collectEntrypointStrings(value, result) {
211
+ if (typeof value === 'string') {
212
+ result.add(value);
213
+ return;
214
+ }
215
+ if (!value || typeof value !== 'object')
216
+ return;
217
+ if (Array.isArray(value)) {
218
+ for (const item of value)
219
+ collectEntrypointStrings(item, result);
220
+ return;
221
+ }
222
+ for (const item of Object.values(value)) {
223
+ collectEntrypointStrings(item, result);
224
+ }
225
+ }
226
+ function getPackageEntrypointFiles(workspaceDir, pkg) {
227
+ const candidates = new Set();
228
+ if (pkg.main)
229
+ candidates.add(pkg.main);
230
+ if (typeof pkg.bin === 'string') {
231
+ candidates.add(pkg.bin);
232
+ }
233
+ else if (pkg.bin) {
234
+ for (const value of Object.values(pkg.bin))
235
+ candidates.add(value);
236
+ }
237
+ collectEntrypointStrings(pkg.exports, candidates);
238
+ const result = new Set();
239
+ for (const candidate of candidates) {
240
+ if (!candidate || candidate.includes('*'))
241
+ continue;
242
+ const full = node_path_1.default.resolve(workspaceDir, candidate);
243
+ const relative = node_path_1.default.relative(workspaceDir, full);
244
+ if (relative.startsWith('..') || node_path_1.default.isAbsolute(relative))
245
+ continue;
246
+ const normalized = relative.split(node_path_1.default.sep).join('/');
247
+ if (startsWithIgnoredEntrypointDir(normalized))
248
+ continue;
249
+ if (!(0, node_fs_1.existsSync)(full) || !isSourceFile(full))
250
+ continue;
251
+ result.add(full);
252
+ }
253
+ return [...result];
254
+ }
255
+ function isRelativeSpecifier(specifier) {
256
+ return specifier.startsWith('./') || specifier.startsWith('../');
257
+ }
258
+ function getJsToTsCandidates(file) {
259
+ const ext = node_path_1.default.extname(file);
260
+ const withoutExt = file.slice(0, -ext.length);
261
+ if (ext === '.js')
262
+ return [`${withoutExt}.ts`, `${withoutExt}.tsx`, file];
263
+ if (ext === '.jsx')
264
+ return [`${withoutExt}.tsx`, file];
265
+ if (ext === '.mjs')
266
+ return [`${withoutExt}.mts`, file];
267
+ if (ext === '.cjs')
268
+ return [`${withoutExt}.cts`, file];
269
+ return [file];
270
+ }
271
+ function resolveRelativeSourceFile(workspaceDir, importer, specifier) {
272
+ const target = node_path_1.default.resolve(node_path_1.default.dirname(importer), specifier);
273
+ const candidates = [];
274
+ const ext = node_path_1.default.extname(target);
275
+ if (ext) {
276
+ candidates.push(...getJsToTsCandidates(target));
277
+ }
278
+ else {
279
+ for (const sourceExt of SOURCE_EXTENSIONS) {
280
+ candidates.push(`${target}${sourceExt}`);
281
+ }
282
+ for (const sourceExt of SOURCE_EXTENSIONS) {
283
+ candidates.push(node_path_1.default.join(target, `index${sourceExt}`));
284
+ }
285
+ }
286
+ for (const candidate of candidates) {
287
+ if (!isInside(workspaceDir, candidate))
288
+ continue;
289
+ if ((0, node_fs_1.existsSync)(candidate) && isSourceFile(candidate))
290
+ return candidate;
291
+ }
292
+ return null;
293
+ }
294
+ function collectEntrypointGraphFiles(workspaceDir, pkg) {
295
+ const result = new Set();
296
+ const stack = getPackageEntrypointFiles(workspaceDir, pkg);
297
+ while (stack.length > 0) {
298
+ const file = stack.pop();
299
+ if (result.has(file))
300
+ continue;
301
+ result.add(file);
302
+ for (const reference of extractModuleReferences(file, (0, node_fs_1.readFileSync)(file, 'utf8'))) {
303
+ if (!isRelativeSpecifier(reference.specifier))
304
+ continue;
305
+ const resolved = resolveRelativeSourceFile(workspaceDir, file, reference.specifier);
306
+ if (resolved && !result.has(resolved))
307
+ stack.push(resolved);
308
+ }
309
+ }
310
+ return [...result];
311
+ }
312
+ function collectSourceFiles(srcDirOrWorkspaceDir, pkg) {
313
+ if (!pkg)
314
+ return walkFiles(srcDirOrWorkspaceDir, (name) => isSourceFile(name));
315
+ const files = new Set();
316
+ for (const sourceRoot of DEFAULT_SOURCE_ROOTS) {
317
+ for (const file of walkFiles(node_path_1.default.join(srcDirOrWorkspaceDir, sourceRoot), (name) => isSourceFile(name))) {
318
+ files.add(file);
319
+ }
320
+ }
321
+ for (const file of collectEntrypointGraphFiles(srcDirOrWorkspaceDir, pkg)) {
322
+ files.add(file);
323
+ }
324
+ return [...files].sort();
325
+ }
326
+ function collectSourceImportsFromFiles(files) {
327
+ return files.flatMap((file) => extractImports(file, (0, node_fs_1.readFileSync)(file, 'utf8')));
328
+ }
329
+ function collectSourceImports(srcDirOrWorkspaceDir, pkg) {
330
+ return collectSourceImportsFromFiles(collectSourceFiles(srcDirOrWorkspaceDir, pkg));
331
+ }
332
+ function collectDtsImports(distDir) {
333
+ const files = walkFiles(distDir, (name) => DTS_RE.test(name));
334
+ const result = new Set();
335
+ for (const file of files) {
336
+ for (const { packageName } of extractImports(file, (0, node_fs_1.readFileSync)(file, 'utf8'), { includeDtsForms: true })) {
337
+ result.add(packageName);
338
+ }
339
+ }
340
+ return result;
341
+ }
342
+ //# 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,6 @@
1
+ /**
2
+ * Config validation for rule shapes that the model cannot interpret safely.
3
+ */
4
+ import type { DependencyModelConfig, DependencyRule } from './types';
5
+ export declare function validateDependencyRules(rules: DependencyRule[]): string[];
6
+ export declare function assertValidDependencyModelConfig(config: DependencyModelConfig): void;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateDependencyRules = validateDependencyRules;
4
+ exports.assertValidDependencyModelConfig = assertValidDependencyModelConfig;
5
+ function getRuleMatches(rule) {
6
+ return Array.isArray(rule.match) ? rule.match : [rule.match];
7
+ }
8
+ function getRuleLabel(rule, index) {
9
+ return `rules[${index}] (${getRuleMatches(rule).join(', ')})`;
10
+ }
11
+ function validateDependencyRules(rules) {
12
+ const errors = [];
13
+ rules.forEach((rule, index) => {
14
+ const label = getRuleLabel(rule, index);
15
+ const matches = getRuleMatches(rule);
16
+ if (rule.required === true && matches.some((match) => match.includes('*'))) {
17
+ errors.push(`${label}: required: true requires concrete match patterns; wildcard matches are ignored by required dependency expansion`);
18
+ }
19
+ if (rule.section === 'devDependencies' && rule.rootOnly !== true) {
20
+ errors.push(`${label}: section: devDependencies is only supported together with rootOnly: true; workspace devDependencies are derived by the model`);
21
+ }
22
+ });
23
+ return errors;
24
+ }
25
+ function assertValidDependencyModelConfig(config) {
26
+ const errors = validateDependencyRules(config.rules ?? []);
27
+ if (errors.length === 0)
28
+ return;
29
+ throw new Error(['Invalid dependency constraints config:', ...errors.map((e) => `- ${e}`)].join('\n'));
30
+ }
31
+ //# sourceMappingURL=config-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-validation.js","sourceRoot":"","sources":["../../src/model/config-validation.ts"],"names":[],"mappings":";;AAaA,0DAqBC;AAED,4EAYC;AA3CD,SAAS,cAAc,CAAC,IAAoB;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,YAAY,CAAC,IAAoB,EAAE,KAAa;IACvD,OAAO,SAAS,KAAK,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAChE,CAAC;AAED,SAAgB,uBAAuB,CAAC,KAAuB;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC3E,MAAM,CAAC,IAAI,CACT,GAAG,KAAK,kHAAkH,CAC3H,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,iBAAiB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CACT,GAAG,KAAK,+HAA+H,CACxI,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,gCAAgC,CAC9C,MAA6B;IAE7B,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAE3D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEhC,MAAM,IAAI,KAAK,CACb,CAAC,wCAAwC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAC7E,IAAI,CACL,CACF,CAAC;AACJ,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[];