@domainlang/language 0.1.20 → 0.1.82
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/domain-lang-module.d.ts +0 -2
- package/out/domain-lang-module.js +3 -11
- package/out/domain-lang-module.js.map +1 -1
- package/out/generated/ast.d.ts +19 -8
- package/out/generated/ast.js +10 -1
- package/out/generated/ast.js.map +1 -1
- package/out/generated/grammar.d.ts +1 -1
- package/out/generated/grammar.js +123 -28
- package/out/generated/grammar.js.map +1 -1
- package/out/generated/module.d.ts +1 -1
- package/out/generated/module.js +1 -1
- package/out/index.d.ts +0 -3
- package/out/index.js +0 -5
- package/out/index.js.map +1 -1
- package/out/lsp/hover/domain-lang-hover.js +4 -0
- package/out/lsp/hover/domain-lang-hover.js.map +1 -1
- package/out/sdk/index.d.ts +1 -1
- package/out/sdk/loader-node.d.ts +3 -7
- package/out/sdk/loader-node.js +9 -24
- package/out/sdk/loader-node.js.map +1 -1
- package/out/sdk/types.d.ts +21 -0
- package/out/services/dependency-analyzer.d.ts +39 -3
- package/out/services/dependency-analyzer.js +47 -22
- package/out/services/dependency-analyzer.js.map +1 -1
- package/out/services/dependency-resolver.d.ts +45 -68
- package/out/services/dependency-resolver.js +43 -243
- package/out/services/dependency-resolver.js.map +1 -1
- package/out/services/git-url-resolver.browser.d.ts +12 -4
- package/out/services/git-url-resolver.browser.js +1 -5
- package/out/services/git-url-resolver.browser.js.map +1 -1
- package/out/services/git-url-resolver.d.ts +56 -22
- package/out/services/git-url-resolver.js +36 -70
- package/out/services/git-url-resolver.js.map +1 -1
- package/out/services/governance-validator.d.ts +37 -1
- package/out/services/governance-validator.js +10 -4
- package/out/services/governance-validator.js.map +1 -1
- package/out/services/import-resolver.d.ts +6 -65
- package/out/services/import-resolver.js +5 -223
- package/out/services/import-resolver.js.map +1 -1
- package/out/services/performance-optimizer.d.ts +1 -1
- package/out/services/workspace-manager.d.ts +10 -57
- package/out/services/workspace-manager.js +21 -187
- package/out/services/workspace-manager.js.map +1 -1
- package/out/syntaxes/domain-lang.monarch.js +1 -1
- package/out/syntaxes/domain-lang.monarch.js.map +1 -1
- package/out/utils/import-utils.d.ts +12 -4
- package/out/utils/import-utils.js +135 -35
- package/out/utils/import-utils.js.map +1 -1
- package/out/validation/constants.d.ts +0 -103
- package/out/validation/constants.js +1 -140
- package/out/validation/constants.js.map +1 -1
- package/out/validation/domain.js +1 -46
- package/out/validation/domain.js.map +1 -1
- package/out/validation/import.d.ts +22 -46
- package/out/validation/import.js +85 -187
- package/out/validation/import.js.map +1 -1
- package/out/validation/maps.js +6 -10
- package/out/validation/maps.js.map +1 -1
- package/out/validation/metadata.js +1 -5
- package/out/validation/metadata.js.map +1 -1
- package/package.json +6 -8
- package/src/domain-lang-module.ts +6 -18
- package/src/domain-lang.langium +12 -7
- package/src/generated/ast.ts +20 -7
- package/src/generated/grammar.ts +123 -28
- package/src/generated/module.ts +1 -1
- package/src/index.ts +0 -7
- package/src/lsp/hover/domain-lang-hover.ts +2 -0
- package/src/sdk/index.ts +2 -0
- package/src/sdk/loader-node.ts +9 -29
- package/src/sdk/types.ts +23 -0
- package/src/services/dependency-analyzer.ts +84 -24
- package/src/services/dependency-resolver.ts +84 -301
- package/src/services/git-url-resolver.browser.ts +14 -9
- package/src/services/git-url-resolver.ts +93 -86
- package/src/services/governance-validator.ts +47 -5
- package/src/services/import-resolver.ts +8 -270
- package/src/services/performance-optimizer.ts +1 -1
- package/src/services/workspace-manager.ts +46 -237
- package/src/syntaxes/domain-lang.monarch.ts +1 -1
- package/src/utils/import-utils.ts +160 -38
- package/src/validation/constants.ts +1 -181
- package/src/validation/domain.ts +1 -54
- package/src/validation/import.ts +104 -228
- package/src/validation/maps.ts +6 -10
- package/src/validation/metadata.ts +1 -5
- package/out/lsp/domain-lang-code-actions.d.ts +0 -55
- package/out/lsp/domain-lang-code-actions.js +0 -143
- package/out/lsp/domain-lang-code-actions.js.map +0 -1
- package/out/lsp/domain-lang-workspace-manager.d.ts +0 -21
- package/out/lsp/domain-lang-workspace-manager.js +0 -93
- package/out/lsp/domain-lang-workspace-manager.js.map +0 -1
- package/out/lsp/manifest-diagnostics.d.ts +0 -82
- package/out/lsp/manifest-diagnostics.js +0 -230
- package/out/lsp/manifest-diagnostics.js.map +0 -1
- package/out/services/semver.d.ts +0 -98
- package/out/services/semver.js +0 -195
- package/out/services/semver.js.map +0 -1
- package/out/services/types.d.ts +0 -340
- package/out/services/types.js +0 -46
- package/out/services/types.js.map +0 -1
- package/out/validation/manifest.d.ts +0 -144
- package/out/validation/manifest.js +0 -327
- package/out/validation/manifest.js.map +0 -1
- package/src/lsp/domain-lang-code-actions.ts +0 -189
- package/src/lsp/domain-lang-workspace-manager.ts +0 -104
- package/src/lsp/manifest-diagnostics.ts +0 -290
- package/src/services/semver.ts +0 -213
- package/src/services/types.ts +0 -415
- package/src/validation/manifest.ts +0 -439
package/out/sdk/loader-node.js
CHANGED
|
@@ -22,15 +22,13 @@ import { NodeFileSystem } from 'langium/node';
|
|
|
22
22
|
import { isModel } from '../generated/ast.js';
|
|
23
23
|
import { createDomainLangServices } from '../domain-lang-module.js';
|
|
24
24
|
import { fromModel, augmentModel } from './query.js';
|
|
25
|
-
import { ensureImportGraphFromDocument } from '../utils/import-utils.js';
|
|
26
25
|
/**
|
|
27
26
|
* Loads a DomainLang model from a file on disk.
|
|
28
27
|
*
|
|
29
28
|
* **Node.js only** - uses file system APIs.
|
|
30
29
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* to see all loaded files.
|
|
30
|
+
* Note: This loads a single file. For multi-file models with imports,
|
|
31
|
+
* consider using the WorkspaceManager or hosting an LSP server.
|
|
34
32
|
*
|
|
35
33
|
* @param entryFile - Path to the entry .dlang file
|
|
36
34
|
* @param options - Optional load configuration
|
|
@@ -41,16 +39,13 @@ import { ensureImportGraphFromDocument } from '../utils/import-utils.js';
|
|
|
41
39
|
* ```typescript
|
|
42
40
|
* import { loadModel } from '@domainlang/language/sdk/loader-node';
|
|
43
41
|
*
|
|
44
|
-
* const { query, model
|
|
42
|
+
* const { query, model } = await loadModel('./domains.dlang', {
|
|
45
43
|
* workspaceDir: process.cwd()
|
|
46
44
|
* });
|
|
47
45
|
*
|
|
48
|
-
* // Query spans all imported files
|
|
49
46
|
* for (const bc of query.boundedContexts()) {
|
|
50
47
|
* console.log(bc.name);
|
|
51
48
|
* }
|
|
52
|
-
*
|
|
53
|
-
* console.log(`Loaded ${documents.length} files`);
|
|
54
49
|
* ```
|
|
55
50
|
*/
|
|
56
51
|
export async function loadModel(entryFile, options) {
|
|
@@ -78,13 +73,8 @@ export async function loadModel(entryFile, options) {
|
|
|
78
73
|
const document = shared.workspace.LangiumDocumentFactory.fromString(fileContent, uri);
|
|
79
74
|
// Register document and build it
|
|
80
75
|
shared.workspace.LangiumDocuments.addDocument(document);
|
|
81
|
-
await shared.workspace.DocumentBuilder.build([document], { validation:
|
|
82
|
-
//
|
|
83
|
-
const importedUris = await ensureImportGraphFromDocument(document, shared.workspace.LangiumDocuments);
|
|
84
|
-
// Build all imported documents with validation
|
|
85
|
-
const allDocuments = Array.from(shared.workspace.LangiumDocuments.all);
|
|
86
|
-
await shared.workspace.DocumentBuilder.build(allDocuments, { validation: true });
|
|
87
|
-
// Wait for entry document to be fully processed
|
|
76
|
+
await shared.workspace.DocumentBuilder.build([document], { validation: true });
|
|
77
|
+
// Wait for document to be fully processed
|
|
88
78
|
if (document.state < DocumentState.Validated) {
|
|
89
79
|
throw new Error(`Document not fully processed: ${absolutePath}`);
|
|
90
80
|
}
|
|
@@ -101,15 +91,10 @@ export async function loadModel(entryFile, options) {
|
|
|
101
91
|
if (!isModel(model)) {
|
|
102
92
|
throw new Error(`Document root is not a Model: ${entryFile}`);
|
|
103
93
|
}
|
|
104
|
-
// Augment AST nodes with SDK properties
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
augmentModel(docModel);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
// Collect all document URIs from the import graph
|
|
112
|
-
const documentUris = Array.from(importedUris).map(uriStr => URI.parse(uriStr));
|
|
94
|
+
// Augment AST nodes with SDK properties
|
|
95
|
+
augmentModel(model);
|
|
96
|
+
// Collect all document URIs
|
|
97
|
+
const documentUris = Array.from(shared.workspace.LangiumDocuments.all).map(doc => doc.uri);
|
|
113
98
|
return {
|
|
114
99
|
model,
|
|
115
100
|
documents: documentUris,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-node.js","sourceRoot":"","sources":["../../src/sdk/loader-node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"loader-node.js","sourceRoot":"","sources":["../../src/sdk/loader-node.ts"],"names":[],"mappings":"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"}
|
package/out/sdk/types.d.ts
CHANGED
|
@@ -262,6 +262,27 @@ export interface RelationshipView {
|
|
|
262
262
|
/** Original AST relationship node */
|
|
263
263
|
readonly astNode: Relationship;
|
|
264
264
|
}
|
|
265
|
+
/**
|
|
266
|
+
* Augmented BoundedContext with SDK-resolved properties.
|
|
267
|
+
* These properties are computed during model loading using precedence rules.
|
|
268
|
+
*
|
|
269
|
+
* Property names follow the PRS design: natural names that "just work" with
|
|
270
|
+
* IDE autocomplete. Use `resolved*` prefix to avoid conflicts with existing
|
|
271
|
+
* AST properties while maintaining discoverability.
|
|
272
|
+
*
|
|
273
|
+
* @deprecated Since SDK now uses module augmentation in ast-augmentation.ts,
|
|
274
|
+
* this type alias is only kept for backwards compatibility. Use BoundedContext
|
|
275
|
+
* directly after importing the SDK.
|
|
276
|
+
*/
|
|
277
|
+
export type AugmentedBoundedContext = BoundedContext;
|
|
278
|
+
/**
|
|
279
|
+
* Augmented Domain with SDK-resolved properties.
|
|
280
|
+
*
|
|
281
|
+
* @deprecated Since SDK now uses module augmentation in ast-augmentation.ts,
|
|
282
|
+
* this type alias is only kept for backwards compatibility. Use Domain
|
|
283
|
+
* directly after importing the SDK.
|
|
284
|
+
*/
|
|
285
|
+
export type AugmentedDomain = Domain;
|
|
265
286
|
/**
|
|
266
287
|
* Internal index structure for O(1) lookups.
|
|
267
288
|
* Not exported from public API.
|
|
@@ -7,7 +7,35 @@
|
|
|
7
7
|
* - Circular dependency detection
|
|
8
8
|
* - Version policy enforcement
|
|
9
9
|
*/
|
|
10
|
-
import type { LockFile
|
|
10
|
+
import type { LockFile } from './git-url-resolver.js';
|
|
11
|
+
export interface DependencyTreeNode {
|
|
12
|
+
/** Package identifier */
|
|
13
|
+
packageKey: string;
|
|
14
|
+
/** Locked version */
|
|
15
|
+
version: string;
|
|
16
|
+
/** Commit hash */
|
|
17
|
+
commit: string;
|
|
18
|
+
/** Direct dependencies */
|
|
19
|
+
dependencies: DependencyTreeNode[];
|
|
20
|
+
/** Depth in tree (0 = root) */
|
|
21
|
+
depth: number;
|
|
22
|
+
}
|
|
23
|
+
export interface ReverseDependency {
|
|
24
|
+
/** Package that depends on the target */
|
|
25
|
+
dependentPackage: string;
|
|
26
|
+
/** Version of the dependent package */
|
|
27
|
+
version: string;
|
|
28
|
+
/** Type: direct or transitive */
|
|
29
|
+
type: 'direct' | 'transitive';
|
|
30
|
+
}
|
|
31
|
+
export interface VersionPolicy {
|
|
32
|
+
/** Policy name: latest, stable, or specific version */
|
|
33
|
+
policy: 'latest' | 'stable' | 'pinned';
|
|
34
|
+
/** Resolved version */
|
|
35
|
+
version: string;
|
|
36
|
+
/** Available versions for policy */
|
|
37
|
+
availableVersions?: string[];
|
|
38
|
+
}
|
|
11
39
|
/**
|
|
12
40
|
* Analyzes dependency relationships and provides visualization/analysis tools.
|
|
13
41
|
*/
|
|
@@ -44,9 +72,9 @@ export declare class DependencyAnalyzer {
|
|
|
44
72
|
*/
|
|
45
73
|
detectCircularDependencies(lockFile: LockFile): Promise<string[][]>;
|
|
46
74
|
/**
|
|
47
|
-
* Resolves
|
|
75
|
+
* Resolves version policies (latest, stable) to concrete versions.
|
|
48
76
|
*/
|
|
49
|
-
resolveVersionPolicy(
|
|
77
|
+
resolveVersionPolicy(packageKey: string, policy: string, availableVersions: string[]): Promise<VersionPolicy>;
|
|
50
78
|
/**
|
|
51
79
|
* Gets the cache directory for a package.
|
|
52
80
|
*/
|
|
@@ -55,4 +83,12 @@ export declare class DependencyAnalyzer {
|
|
|
55
83
|
* Loads dependencies from a cached package.
|
|
56
84
|
*/
|
|
57
85
|
private loadPackageDependencies;
|
|
86
|
+
/**
|
|
87
|
+
* Sorts versions in descending order (newest first).
|
|
88
|
+
*/
|
|
89
|
+
private sortVersions;
|
|
90
|
+
/**
|
|
91
|
+
* Checks if a version is a pre-release.
|
|
92
|
+
*/
|
|
93
|
+
private isPreRelease;
|
|
58
94
|
}
|
|
@@ -11,7 +11,6 @@ import path from 'node:path';
|
|
|
11
11
|
import fs from 'node:fs/promises';
|
|
12
12
|
import os from 'node:os';
|
|
13
13
|
import YAML from 'yaml';
|
|
14
|
-
import { sortVersionsDescending, isPreRelease } from './semver.js';
|
|
15
14
|
/**
|
|
16
15
|
* Analyzes dependency relationships and provides visualization/analysis tools.
|
|
17
16
|
*/
|
|
@@ -62,7 +61,7 @@ export class DependencyAnalyzer {
|
|
|
62
61
|
if (visited.has(packageKey)) {
|
|
63
62
|
return {
|
|
64
63
|
packageKey,
|
|
65
|
-
|
|
64
|
+
version: locked.version,
|
|
66
65
|
commit: locked.commit,
|
|
67
66
|
dependencies: [], // Don't recurse into already visited
|
|
68
67
|
depth,
|
|
@@ -82,7 +81,7 @@ export class DependencyAnalyzer {
|
|
|
82
81
|
}
|
|
83
82
|
return {
|
|
84
83
|
packageKey,
|
|
85
|
-
|
|
84
|
+
version: locked.version,
|
|
86
85
|
commit: locked.commit,
|
|
87
86
|
dependencies: children,
|
|
88
87
|
depth,
|
|
@@ -108,7 +107,7 @@ export class DependencyAnalyzer {
|
|
|
108
107
|
if (dep.source === targetPackage) {
|
|
109
108
|
reverseDeps.push({
|
|
110
109
|
dependentPackage: 'root',
|
|
111
|
-
|
|
110
|
+
version: 'workspace',
|
|
112
111
|
type: 'direct',
|
|
113
112
|
});
|
|
114
113
|
}
|
|
@@ -128,7 +127,7 @@ export class DependencyAnalyzer {
|
|
|
128
127
|
if (packageDeps[targetPackage]) {
|
|
129
128
|
reverseDeps.push({
|
|
130
129
|
dependentPackage: packageKey,
|
|
131
|
-
|
|
130
|
+
version: locked.version,
|
|
132
131
|
type: 'direct',
|
|
133
132
|
});
|
|
134
133
|
}
|
|
@@ -142,10 +141,10 @@ export class DependencyAnalyzer {
|
|
|
142
141
|
const lines = [];
|
|
143
142
|
const formatNode = (node, prefix, isLast) => {
|
|
144
143
|
const branch = isLast ? '└── ' : '├── ';
|
|
145
|
-
const
|
|
146
|
-
? `${node.
|
|
147
|
-
: node.
|
|
148
|
-
lines.push(`${prefix}${branch}${node.packageKey}@${
|
|
144
|
+
const versionStr = options.showCommits
|
|
145
|
+
? `${node.version} (${node.commit.substring(0, 7)})`
|
|
146
|
+
: node.version;
|
|
147
|
+
lines.push(`${prefix}${branch}${node.packageKey}@${versionStr}`);
|
|
149
148
|
const childPrefix = prefix + (isLast ? ' ' : '│ ');
|
|
150
149
|
node.dependencies.forEach((child, index) => {
|
|
151
150
|
const isLastChild = index === node.dependencies.length - 1;
|
|
@@ -194,32 +193,32 @@ export class DependencyAnalyzer {
|
|
|
194
193
|
return cycles;
|
|
195
194
|
}
|
|
196
195
|
/**
|
|
197
|
-
* Resolves
|
|
196
|
+
* Resolves version policies (latest, stable) to concrete versions.
|
|
198
197
|
*/
|
|
199
|
-
async resolveVersionPolicy(
|
|
198
|
+
async resolveVersionPolicy(packageKey, policy, availableVersions) {
|
|
200
199
|
if (policy === 'latest') {
|
|
201
|
-
// Return the most recent
|
|
202
|
-
const sorted =
|
|
200
|
+
// Return the most recent version
|
|
201
|
+
const sorted = this.sortVersions(availableVersions);
|
|
203
202
|
return {
|
|
204
203
|
policy: 'latest',
|
|
205
|
-
|
|
206
|
-
|
|
204
|
+
version: sorted[0] || 'main',
|
|
205
|
+
availableVersions: sorted,
|
|
207
206
|
};
|
|
208
207
|
}
|
|
209
208
|
if (policy === 'stable') {
|
|
210
|
-
// Return the most recent stable
|
|
211
|
-
const stable =
|
|
212
|
-
const sorted =
|
|
209
|
+
// Return the most recent stable version (exclude pre-release)
|
|
210
|
+
const stable = availableVersions.filter(v => !this.isPreRelease(v));
|
|
211
|
+
const sorted = this.sortVersions(stable);
|
|
213
212
|
return {
|
|
214
213
|
policy: 'stable',
|
|
215
|
-
|
|
216
|
-
|
|
214
|
+
version: sorted[0] || 'main',
|
|
215
|
+
availableVersions: sorted,
|
|
217
216
|
};
|
|
218
217
|
}
|
|
219
|
-
// Pinned
|
|
218
|
+
// Pinned version
|
|
220
219
|
return {
|
|
221
220
|
policy: 'pinned',
|
|
222
|
-
|
|
221
|
+
version: policy,
|
|
223
222
|
};
|
|
224
223
|
}
|
|
225
224
|
/**
|
|
@@ -250,5 +249,31 @@ export class DependencyAnalyzer {
|
|
|
250
249
|
return {};
|
|
251
250
|
}
|
|
252
251
|
}
|
|
252
|
+
/**
|
|
253
|
+
* Sorts versions in descending order (newest first).
|
|
254
|
+
*/
|
|
255
|
+
sortVersions(versions) {
|
|
256
|
+
return versions.sort((a, b) => {
|
|
257
|
+
// Simple lexicographic sort (good enough for basic semver)
|
|
258
|
+
// Production: use semver library
|
|
259
|
+
const aParts = a.replace(/^v/, '').split('.').map(Number);
|
|
260
|
+
const bParts = b.replace(/^v/, '').split('.').map(Number);
|
|
261
|
+
for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
|
|
262
|
+
const aNum = aParts[i] || 0;
|
|
263
|
+
const bNum = bParts[i] || 0;
|
|
264
|
+
if (aNum !== bNum) {
|
|
265
|
+
return bNum - aNum; // Descending
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return 0;
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Checks if a version is a pre-release.
|
|
273
|
+
*/
|
|
274
|
+
isPreRelease(version) {
|
|
275
|
+
const clean = version.replace(/^v/, '');
|
|
276
|
+
return /-(alpha|beta|rc|pre|dev)/.test(clean);
|
|
277
|
+
}
|
|
253
278
|
}
|
|
254
279
|
//# sourceMappingURL=dependency-analyzer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-analyzer.js","sourceRoot":"","sources":["../../src/services/dependency-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"dependency-analyzer.js","sourceRoot":"","sources":["../../src/services/dependency-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,18 +9,42 @@
|
|
|
9
9
|
* 2. Download all direct dependencies
|
|
10
10
|
* 3. Parse each dependency's model.yaml
|
|
11
11
|
* 4. Recursively discover transitive dependencies
|
|
12
|
-
* 5. Resolve version constraints
|
|
12
|
+
* 5. Resolve version constraints (simple: use latest satisfying version)
|
|
13
13
|
* 6. Generate lock file with pinned commit hashes
|
|
14
|
-
*
|
|
15
|
-
* Resolution Strategy ("Latest Wins"):
|
|
16
|
-
* - SemVer tags (same major): Pick highest compatible version
|
|
17
|
-
* - Same branch: No conflict, resolve once
|
|
18
|
-
* - Commit pins: Error (explicit pins are intentional)
|
|
19
|
-
* - Major version mismatch: Error
|
|
20
|
-
* - Tag vs Branch: Error (incompatible intent)
|
|
21
14
|
*/
|
|
22
|
-
import { GitUrlResolver } from './git-url-resolver.js';
|
|
23
|
-
|
|
15
|
+
import { GitUrlResolver, LockFile } from './git-url-resolver.js';
|
|
16
|
+
/**
|
|
17
|
+
* Dependency graph node representing a package and its dependencies.
|
|
18
|
+
*/
|
|
19
|
+
export interface DependencyNode {
|
|
20
|
+
/** Package identifier (owner/repo) */
|
|
21
|
+
packageKey: string;
|
|
22
|
+
/** Version constraint from parent (e.g., "^1.0.0") */
|
|
23
|
+
versionConstraint: string;
|
|
24
|
+
/** Resolved version */
|
|
25
|
+
resolvedVersion?: string;
|
|
26
|
+
/** Resolved commit hash */
|
|
27
|
+
commitHash?: string;
|
|
28
|
+
/** Full git URL */
|
|
29
|
+
repoUrl?: string;
|
|
30
|
+
/** Direct dependencies of this package */
|
|
31
|
+
dependencies: Record<string, string>;
|
|
32
|
+
/** Parent packages that depend on this one */
|
|
33
|
+
dependents: string[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Dependency graph for the entire workspace.
|
|
37
|
+
*/
|
|
38
|
+
export interface DependencyGraph {
|
|
39
|
+
/** All discovered packages, keyed by owner/repo */
|
|
40
|
+
nodes: Record<string, DependencyNode>;
|
|
41
|
+
/** Root package name */
|
|
42
|
+
root: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Resolves dependencies and generates lock files.
|
|
46
|
+
*/
|
|
47
|
+
export type { LockFile, PackageMetadata } from './git-url-resolver.js';
|
|
24
48
|
export declare class DependencyResolver {
|
|
25
49
|
private gitResolver;
|
|
26
50
|
private workspaceRoot;
|
|
@@ -38,47 +62,29 @@ export declare class DependencyResolver {
|
|
|
38
62
|
* @returns Generated lock file
|
|
39
63
|
*/
|
|
40
64
|
resolveDependencies(): Promise<LockFile>;
|
|
41
|
-
/**
|
|
42
|
-
* Applies ref overrides from model.yaml to resolve conflicts explicitly.
|
|
43
|
-
*
|
|
44
|
-
* Overrides take precedence over all other constraints.
|
|
45
|
-
*
|
|
46
|
-
* @example
|
|
47
|
-
* ```yaml
|
|
48
|
-
* overrides:
|
|
49
|
-
* domainlang/core: v2.0.0
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
private applyOverrides;
|
|
53
|
-
/** Override messages for CLI output */
|
|
54
|
-
private overrideMessages;
|
|
55
|
-
/**
|
|
56
|
-
* Returns any override messages from the last dependency resolution.
|
|
57
|
-
*/
|
|
58
|
-
getOverrideMessages(): string[];
|
|
59
65
|
/**
|
|
60
66
|
* Builds the complete dependency graph by recursively discovering transitive dependencies.
|
|
61
67
|
*/
|
|
62
68
|
private buildDependencyGraph;
|
|
63
69
|
/**
|
|
64
|
-
* Resolves
|
|
70
|
+
* Resolves version constraints to specific versions.
|
|
65
71
|
*
|
|
66
|
-
* Simple algorithm: Use the
|
|
67
|
-
*
|
|
72
|
+
* Simple algorithm: Use the latest version that satisfies all constraints.
|
|
73
|
+
* Future: Implement proper semantic versioning resolution.
|
|
68
74
|
*/
|
|
69
75
|
private resolveVersions;
|
|
70
76
|
/**
|
|
71
|
-
* Extracts a
|
|
77
|
+
* Extracts a version from a constraint string.
|
|
72
78
|
*
|
|
73
79
|
* Examples:
|
|
74
|
-
* - "^1.0.0" → "1.0.0"
|
|
75
|
-
* - "~2.3.0" → "2.3.0"
|
|
76
|
-
* - "1.5.0" → "1.5.0"
|
|
77
|
-
* - "main" → "main" (treated as branch)
|
|
78
|
-
* - "abc123def" → "abc123def" (treated as commit)
|
|
80
|
+
* - "^1.0.0" → "1.0.0"
|
|
81
|
+
* - "~2.3.0" → "2.3.0"
|
|
82
|
+
* - "1.5.0" → "1.5.0"
|
|
79
83
|
* - "owner/repo@1.0.0" → "1.0.0"
|
|
84
|
+
*
|
|
85
|
+
* Future: Implement proper semver range parsing and resolution.
|
|
80
86
|
*/
|
|
81
|
-
private
|
|
87
|
+
private extractVersionFromConstraint;
|
|
82
88
|
/**
|
|
83
89
|
* Resolves a version (tag/branch) to a commit hash using git ls-remote.
|
|
84
90
|
*/
|
|
@@ -103,38 +109,9 @@ export declare class DependencyResolver {
|
|
|
103
109
|
* dependencies:
|
|
104
110
|
* package-name:
|
|
105
111
|
* source: owner/repo
|
|
106
|
-
*
|
|
112
|
+
* version: ^1.0.0
|
|
107
113
|
*/
|
|
108
114
|
private parseYaml;
|
|
109
|
-
/**
|
|
110
|
-
* Detects ref conflicts and applies "Latest Wins" resolution strategy.
|
|
111
|
-
*
|
|
112
|
-
* Resolution Rules:
|
|
113
|
-
* - SemVer tags (same major): Pick highest version automatically
|
|
114
|
-
* - Same branch refs: No conflict, use single resolution
|
|
115
|
-
* - Commit SHA conflicts: Error (explicit pins are intentional)
|
|
116
|
-
* - Major version mismatch: Error (breaking change)
|
|
117
|
-
* - Tag vs Branch: Error (incompatible intent)
|
|
118
|
-
*
|
|
119
|
-
* Modifies graph nodes in-place to set the resolved constraint.
|
|
120
|
-
* Throws an error only for unresolvable conflicts.
|
|
121
|
-
*/
|
|
122
|
-
private detectVersionConflicts;
|
|
123
|
-
/**
|
|
124
|
-
* Throws a formatted conflict error with actionable hints.
|
|
125
|
-
*/
|
|
126
|
-
private throwConflictError;
|
|
127
|
-
/** Resolution messages from "Latest Wins" auto-resolution */
|
|
128
|
-
private resolutionMessages;
|
|
129
|
-
/**
|
|
130
|
-
* Returns any resolution messages from the last dependency resolution.
|
|
131
|
-
* Useful for CLI output to inform users about auto-resolved conflicts.
|
|
132
|
-
*/
|
|
133
|
-
getResolutionMessages(): string[];
|
|
134
|
-
/**
|
|
135
|
-
* Detects package-level cycles in the dependency graph and throws a clear error.
|
|
136
|
-
*/
|
|
137
|
-
private detectPackageCycles;
|
|
138
115
|
/**
|
|
139
116
|
* Loads an existing lock file from disk.
|
|
140
117
|
*/
|