@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
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import { URI } from 'langium';
|
|
13
13
|
import path from 'node:path';
|
|
14
14
|
import fs from 'node:fs/promises';
|
|
15
|
+
import os from 'node:os';
|
|
15
16
|
import { exec } from 'node:child_process';
|
|
16
17
|
import { promisify } from 'node:util';
|
|
17
18
|
import YAML from 'yaml';
|
|
@@ -58,8 +59,7 @@ export class GitUrlParser {
|
|
|
58
59
|
if (importStr.startsWith('https://') || importStr.startsWith('git://')) {
|
|
59
60
|
return this.parseFullUrl(importStr);
|
|
60
61
|
}
|
|
61
|
-
throw new Error(`Invalid git import URL:
|
|
62
|
-
`Hint: Use 'owner/repo' or 'owner/repo@version' format (e.g., 'domainlang/core@v1.0.0').`);
|
|
62
|
+
throw new Error(`Invalid git import URL: ${importStr}`);
|
|
63
63
|
}
|
|
64
64
|
/**
|
|
65
65
|
* Checks if string is GitHub shorthand format.
|
|
@@ -73,8 +73,7 @@ export class GitUrlParser {
|
|
|
73
73
|
static parseGitHubShorthand(importStr) {
|
|
74
74
|
const match = importStr.match(/^([a-zA-Z0-9-]+)\/([a-zA-Z0-9-_.]+)(?:@([^/]+))?$/);
|
|
75
75
|
if (!match) {
|
|
76
|
-
throw new Error(`Invalid GitHub shorthand format:
|
|
77
|
-
`Hint: Use 'owner/repo' or 'owner/repo@version' format.`);
|
|
76
|
+
throw new Error(`Invalid GitHub shorthand format: ${importStr}`);
|
|
78
77
|
}
|
|
79
78
|
const [, owner, repo, version] = match;
|
|
80
79
|
const resolvedVersion = version || 'main';
|
|
@@ -85,7 +84,7 @@ export class GitUrlParser {
|
|
|
85
84
|
repo,
|
|
86
85
|
version: resolvedVersion,
|
|
87
86
|
repoUrl: `https://github.com/${owner}/${repo}`,
|
|
88
|
-
entryPoint: 'index.dlang', // Default, will be resolved from
|
|
87
|
+
entryPoint: 'index.dlang', // Default, will be resolved from dlang.toml
|
|
89
88
|
};
|
|
90
89
|
}
|
|
91
90
|
/**
|
|
@@ -153,34 +152,22 @@ export class GitUrlParser {
|
|
|
153
152
|
entryPoint: 'index.dlang',
|
|
154
153
|
};
|
|
155
154
|
}
|
|
156
|
-
throw new Error(`Unsupported git URL format:
|
|
157
|
-
`Supported formats:\n` +
|
|
158
|
-
` • owner/repo (GitHub shorthand)\n` +
|
|
159
|
-
` • owner/repo@version\n` +
|
|
160
|
-
` • https://github.com/owner/repo\n` +
|
|
161
|
-
` • https://gitlab.com/owner/repo`);
|
|
155
|
+
throw new Error(`Unsupported git URL format: ${importStr}`);
|
|
162
156
|
}
|
|
163
157
|
}
|
|
164
158
|
/**
|
|
165
159
|
* Resolves git repository imports to local entry point files.
|
|
166
160
|
*
|
|
167
161
|
* Implements a content-addressable cache:
|
|
168
|
-
* - Cache location:
|
|
169
|
-
* - Cache key:
|
|
162
|
+
* - Cache location: ~/.dlang/cache/
|
|
163
|
+
* - Cache key: platform/owner/repo/commit-hash
|
|
170
164
|
* - Downloads entire repository on first use
|
|
171
|
-
* - Reads
|
|
165
|
+
* - Reads dlang.toml to find entry point
|
|
172
166
|
* - Returns URI to entry point file
|
|
173
167
|
*/
|
|
174
168
|
export class GitUrlResolver {
|
|
175
|
-
/**
|
|
176
|
-
* Creates a GitUrlResolver with a project-local cache directory.
|
|
177
|
-
*
|
|
178
|
-
* @param cacheDir - The cache directory path. Per PRS-010, this should be
|
|
179
|
-
* the project's `.dlang/packages/` directory for isolation
|
|
180
|
-
* and reproducibility (like node_modules).
|
|
181
|
-
*/
|
|
182
169
|
constructor(cacheDir) {
|
|
183
|
-
this.cacheDir = cacheDir;
|
|
170
|
+
this.cacheDir = cacheDir || path.join(os.homedir(), '.dlang', 'cache');
|
|
184
171
|
}
|
|
185
172
|
/**
|
|
186
173
|
* Sets the lock file for dependency resolution.
|
|
@@ -203,13 +190,13 @@ export class GitUrlResolver {
|
|
|
203
190
|
* 3. Resolve version to commit hash (if not locked)
|
|
204
191
|
* 4. Check cache
|
|
205
192
|
* 5. Download repository if not cached
|
|
206
|
-
* 6. Read
|
|
193
|
+
* 6. Read dlang.toml to find entry point
|
|
207
194
|
* 7. Return URI to entry point file
|
|
208
195
|
*
|
|
209
196
|
* @param importUrl - The git import URL
|
|
210
197
|
* @returns URI to the package's entry point file
|
|
211
198
|
*/
|
|
212
|
-
async resolve(importUrl
|
|
199
|
+
async resolve(importUrl) {
|
|
213
200
|
const gitInfo = GitUrlParser.parse(importUrl);
|
|
214
201
|
// Check lock file for pinned version (handles transitive dependencies)
|
|
215
202
|
let commitHash;
|
|
@@ -219,22 +206,12 @@ export class GitUrlResolver {
|
|
|
219
206
|
commitHash = this.lockFile.dependencies[packageKey].commit;
|
|
220
207
|
}
|
|
221
208
|
else {
|
|
222
|
-
//
|
|
223
|
-
if (options.allowNetwork === false) {
|
|
224
|
-
// LSP mode: cannot perform network operations
|
|
225
|
-
throw new Error(`Dependency '${packageKey}' not installed.\n` +
|
|
226
|
-
`Hint: Run 'dlang install' to fetch dependencies and generate model.lock.`);
|
|
227
|
-
}
|
|
228
|
-
// CLI/dev mode: resolve version via network
|
|
209
|
+
// Resolve version dynamically (development mode or missing lock)
|
|
229
210
|
commitHash = await this.resolveCommit(gitInfo);
|
|
230
211
|
}
|
|
231
212
|
// Check cache
|
|
232
213
|
const cachedPath = this.getCachePath(gitInfo, commitHash);
|
|
233
214
|
if (!(await this.existsInCache(cachedPath))) {
|
|
234
|
-
if (options.allowNetwork === false) {
|
|
235
|
-
throw new Error(`Dependency '${packageKey}' not installed.\n` +
|
|
236
|
-
`Hint: Run 'dlang install' to fetch dependencies.`);
|
|
237
|
-
}
|
|
238
215
|
// Download repository
|
|
239
216
|
await this.downloadRepo(gitInfo, commitHash, cachedPath);
|
|
240
217
|
}
|
|
@@ -243,8 +220,7 @@ export class GitUrlResolver {
|
|
|
243
220
|
const entryFile = path.join(cachedPath, entryPoint);
|
|
244
221
|
// Verify entry point exists
|
|
245
222
|
if (!(await this.existsInCache(entryFile))) {
|
|
246
|
-
throw new Error(`Entry point
|
|
247
|
-
`Hint: Ensure the package has an entry point file (default: index.dlang).`);
|
|
223
|
+
throw new Error(`Entry point not found: ${entryPoint} in ${gitInfo.repoUrl}@${gitInfo.version}`);
|
|
248
224
|
}
|
|
249
225
|
return URI.file(entryFile);
|
|
250
226
|
}
|
|
@@ -257,7 +233,8 @@ export class GitUrlResolver {
|
|
|
257
233
|
try {
|
|
258
234
|
const yamlContent = await fs.readFile(yamlPath, 'utf-8');
|
|
259
235
|
const metadata = this.parseYaml(yamlContent);
|
|
260
|
-
|
|
236
|
+
// Prefer 'entry' field, fallback to 'main' for backward compatibility
|
|
237
|
+
return metadata.entry || metadata.main || 'index.dlang';
|
|
261
238
|
}
|
|
262
239
|
catch {
|
|
263
240
|
// No model.yaml or parse error, use default
|
|
@@ -275,6 +252,7 @@ export class GitUrlResolver {
|
|
|
275
252
|
const parsed = YAML.parse(content);
|
|
276
253
|
return {
|
|
277
254
|
entry: parsed.model?.entry,
|
|
255
|
+
main: parsed.model?.main,
|
|
278
256
|
name: parsed.model?.name,
|
|
279
257
|
version: parsed.model?.version,
|
|
280
258
|
};
|
|
@@ -294,25 +272,19 @@ export class GitUrlResolver {
|
|
|
294
272
|
if (/^[0-9a-f]{7,40}$/i.test(gitInfo.version)) {
|
|
295
273
|
return gitInfo.version;
|
|
296
274
|
}
|
|
297
|
-
throw new Error(`Could not resolve version
|
|
298
|
-
`Hint: Check that the version (tag, branch, or commit) exists in the repository.`);
|
|
275
|
+
throw new Error(`Could not resolve version: ${gitInfo.version}`);
|
|
299
276
|
}
|
|
300
277
|
catch (error) {
|
|
301
|
-
throw new Error(`Failed to resolve git version
|
|
302
|
-
`Error: ${error}\n` +
|
|
303
|
-
`Hint: Verify the repository URL is correct and accessible.`);
|
|
278
|
+
throw new Error(`Failed to resolve git version ${gitInfo.version} for ${gitInfo.repoUrl}: ${error}`);
|
|
304
279
|
}
|
|
305
280
|
}
|
|
306
281
|
/**
|
|
307
282
|
* Gets the local cache path for a git repository.
|
|
308
283
|
*
|
|
309
|
-
* Format:
|
|
310
|
-
*
|
|
311
|
-
* Per PRS-010: Project-local cache structure mirrors the Design Considerations
|
|
312
|
-
* section showing `.dlang/packages/{owner}/{repo}/{version}/` layout.
|
|
284
|
+
* Format: ~/.dlang/cache/{platform}/{owner}/{repo}/{commit-hash}/
|
|
313
285
|
*/
|
|
314
286
|
getCachePath(gitInfo, commitHash) {
|
|
315
|
-
return path.join(this.cacheDir, gitInfo.owner, gitInfo.repo, commitHash);
|
|
287
|
+
return path.join(this.cacheDir, gitInfo.platform, gitInfo.owner, gitInfo.repo, commitHash);
|
|
316
288
|
}
|
|
317
289
|
/**
|
|
318
290
|
* Checks if a file or directory exists in the cache.
|
|
@@ -344,9 +316,7 @@ export class GitUrlResolver {
|
|
|
344
316
|
catch (error) {
|
|
345
317
|
await fs.rm(targetDir, { recursive: true, force: true });
|
|
346
318
|
const message = error instanceof Error ? error.message : String(error);
|
|
347
|
-
throw new Error(`Failed to download
|
|
348
|
-
`Error: ${message}\n` +
|
|
349
|
-
`Hint: Check your network connection and verify the repository URL is correct.`);
|
|
319
|
+
throw new Error(`Failed to download git repository ${gitInfo.repoUrl}@${gitInfo.version}: ${message}`);
|
|
350
320
|
}
|
|
351
321
|
}
|
|
352
322
|
/**
|
|
@@ -357,30 +327,26 @@ export class GitUrlResolver {
|
|
|
357
327
|
}
|
|
358
328
|
/**
|
|
359
329
|
* Gets cache statistics (size, number of cached repos, etc.).
|
|
360
|
-
*
|
|
361
|
-
* Cache structure: .dlang/packages/{owner}/{repo}/{version}/
|
|
362
330
|
*/
|
|
363
331
|
async getCacheStats() {
|
|
364
332
|
let totalSize = 0;
|
|
365
333
|
let repoCount = 0;
|
|
366
334
|
try {
|
|
367
|
-
const
|
|
368
|
-
for (const
|
|
369
|
-
const
|
|
370
|
-
const
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
const versionPath = path.join(repoPath, version);
|
|
383
|
-
totalSize += await this.getDirectorySize(versionPath);
|
|
335
|
+
const platforms = await fs.readdir(this.cacheDir);
|
|
336
|
+
for (const platform of platforms) {
|
|
337
|
+
const platformPath = path.join(this.cacheDir, platform);
|
|
338
|
+
const owners = await fs.readdir(platformPath);
|
|
339
|
+
for (const owner of owners) {
|
|
340
|
+
const ownerPath = path.join(platformPath, owner);
|
|
341
|
+
const repos = await fs.readdir(ownerPath);
|
|
342
|
+
for (const repo of repos) {
|
|
343
|
+
const repoPath = path.join(ownerPath, repo);
|
|
344
|
+
const commits = await fs.readdir(repoPath);
|
|
345
|
+
repoCount += commits.length;
|
|
346
|
+
for (const commit of commits) {
|
|
347
|
+
const commitPath = path.join(repoPath, commit);
|
|
348
|
+
totalSize += await this.getDirectorySize(commitPath);
|
|
349
|
+
}
|
|
384
350
|
}
|
|
385
351
|
}
|
|
386
352
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-url-resolver.js","sourceRoot":"","sources":["../../src/services/git-url-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"git-url-resolver.js","sourceRoot":"","sources":["../../src/services/git-url-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAuDlC;;;;;;;;;GASG;AACH,MAAM,OAAO,YAAY;IACrB;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,SAAiB;QAC7B,qDAAqD;QACrD,IAAI,2CAA2C,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,YAAY;QACZ,OAAO,CACH,SAAS,CAAC,UAAU,CAAC,qBAAqB,CAAC;YAC3C,SAAS,CAAC,UAAU,CAAC,qBAAqB,CAAC;YAC3C,SAAS,CAAC,UAAU,CAAC,wBAAwB,CAAC;YAC9C,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC;YACpC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CACjC,CAAC;IACN,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,SAAiB;QAC1B,6DAA6D;QAC7D,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;QAED,mBAAmB;QACnB,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrE,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,iBAAiB,CAAC,SAAiB;QAC9C,OAAO,2CAA2C,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,oBAAoB,CAAC,SAAiB;QACjD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACnF,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;QACvC,MAAM,eAAe,GAAG,OAAO,IAAI,MAAM,CAAC;QAE1C,OAAO;YACH,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,QAAQ;YAClB,KAAK;YACL,IAAI;YACJ,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,sBAAsB,KAAK,IAAI,IAAI,EAAE;YAC9C,UAAU,EAAE,aAAa,EAAE,4CAA4C;SAC1E,CAAC;IACN,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,YAAY,CAAC,SAAiB;QACzC,SAAS;QACT,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAC3B,yDAAyD,CAC5D,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;YACzC,OAAO;gBACH,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,QAAQ;gBAClB,KAAK;gBACL,IAAI;gBACJ,OAAO,EAAE,OAAO,IAAI,MAAM;gBAC1B,OAAO,EAAE,sBAAsB,KAAK,IAAI,IAAI,EAAE;gBAC9C,UAAU,EAAE,aAAa;aAC5B,CAAC;QACN,CAAC;QAED,SAAS;QACT,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAC3B,yDAAyD,CAC5D,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;YACzC,OAAO;gBACH,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,QAAQ;gBAClB,KAAK;gBACL,IAAI;gBACJ,OAAO,EAAE,OAAO,IAAI,MAAM;gBAC1B,OAAO,EAAE,sBAAsB,KAAK,IAAI,IAAI,EAAE;gBAC9C,UAAU,EAAE,aAAa;aAC5B,CAAC;QACN,CAAC;QAED,YAAY;QACZ,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAC3B,4DAA4D,CAC/D,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;YACzC,OAAO;gBACH,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,WAAW;gBACrB,KAAK;gBACL,IAAI;gBACJ,OAAO,EAAE,OAAO,IAAI,MAAM;gBAC1B,OAAO,EAAE,yBAAyB,KAAK,IAAI,IAAI,EAAE;gBACjD,UAAU,EAAE,aAAa;aAC5B,CAAC;QACN,CAAC;QAED,kBAAkB;QAClB,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAChC,6DAA6D,CAChE,CAAC;QACF,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC;YACpD,OAAO;gBACH,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,SAAS;gBACnB,KAAK;gBACL,IAAI;gBACJ,OAAO,EAAE,OAAO,IAAI,MAAM;gBAC1B,OAAO,EAAE,WAAW,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;gBAC3C,UAAU,EAAE,aAAa;aAC5B,CAAC;QACN,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;IAChE,CAAC;CACJ;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,cAAc;IAIvB,YAAY,QAAiB;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;;;;OAQG;IACH,WAAW,CAAC,QAA8B;QACtC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAE9C,uEAAuE;QACvE,IAAI,UAAkB,CAAC;QACvB,MAAM,UAAU,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAEtD,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,8CAA8C;YAC9C,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QAC/D,CAAC;aAAM,CAAC;YACJ,iEAAiE;YACjE,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;QAED,cAAc;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAE1D,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YAC1C,sBAAsB;YACtB,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAC7D,CAAC;QAED,2CAA2C;QAC3C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEpD,4BAA4B;QAC5B,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACX,0BAA0B,UAAU,OAAO,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAClF,CAAC;QACN,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,aAAa,CAAC,QAAgB;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAEnD,IAAI,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC7C,sEAAsE;YACtE,OAAO,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,IAAI,aAAa,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACL,4CAA4C;YAC5C,OAAO,aAAa,CAAC;QACzB,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACK,SAAS,CAAC,OAAe;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAOhC,CAAC;QAEF,OAAO;YACH,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK;YAC1B,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI;YACxB,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI;YACxB,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO;SACjC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,OAAsB;QAC9C,IAAI,CAAC;YACD,kCAAkC;YAClC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAC9B,iBAAiB,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CACxD,CAAC;YAEF,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,OAAO,UAAU,CAAC;YACtB,CAAC;YAED,kDAAkD;YAClD,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5C,OAAO,OAAO,CAAC,OAAO,CAAC;YAC3B,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACX,iCAAiC,OAAO,CAAC,OAAO,QAAQ,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CACtF,CAAC;QACN,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,YAAY,CAAC,OAAsB,EAAE,UAAkB;QAC3D,OAAO,IAAI,CAAC,IAAI,CACZ,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,IAAI,EACZ,UAAU,CACb,CAAC;IACN,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,QAAgB;QACxC,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,YAAY,CACtB,OAAsB,EACtB,UAAkB,EAClB,SAAiB;QAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/C,IAAI,CAAC;YACD,MAAM,SAAS,CACX,aAAa,OAAO,CAAC,OAAO,SAAS,SAAS,iBAAiB,CAClE,CAAC;YAEF,MAAM,SAAS,CACX,WAAW,SAAS,4BAA4B,UAAU,EAAE,CAC/D,CAAC;YAEF,MAAM,SAAS,CACX,WAAW,SAAS,+BAA+B,UAAU,EAAE,CAClE,CAAC;YAEF,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,IAAI,KAAK,CACX,qCAAqC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CACxF,CAAC;QACN,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACZ,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QAKf,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;oBACjD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;wBAC5C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;wBAC3C,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;wBAE5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;4BAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;4BAC/C,SAAS,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;wBACzD,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,oCAAoC;QACxC,CAAC;QAED,OAAO;YACH,SAAS;YACT,SAAS;YACT,QAAQ,EAAE,IAAI,CAAC,QAAQ;SAC1B,CAAC;IACN,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,OAAe;QAC1C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtB,IAAI,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACJ,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;YACvB,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
|
|
@@ -18,7 +18,39 @@
|
|
|
18
18
|
* requireTeamOwnership: true
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
|
-
import type { LockFile
|
|
21
|
+
import type { LockFile } from './git-url-resolver.js';
|
|
22
|
+
export interface GovernancePolicy {
|
|
23
|
+
/** Allowed git domains (e.g., ['github.com/acme']) */
|
|
24
|
+
allowedSources?: string[];
|
|
25
|
+
/** Blocked packages or patterns */
|
|
26
|
+
blockedPackages?: string[];
|
|
27
|
+
/** Require stable versions only (no pre-release) */
|
|
28
|
+
requireStableVersions?: boolean;
|
|
29
|
+
/** Require team ownership metadata */
|
|
30
|
+
requireTeamOwnership?: boolean;
|
|
31
|
+
/** Allowed licenses */
|
|
32
|
+
allowedLicenses?: string[];
|
|
33
|
+
}
|
|
34
|
+
export interface GovernanceMetadata {
|
|
35
|
+
/** Team responsible for the model */
|
|
36
|
+
team?: string;
|
|
37
|
+
/** Contact email */
|
|
38
|
+
contact?: string;
|
|
39
|
+
/** Business domain */
|
|
40
|
+
domain?: string;
|
|
41
|
+
/** Compliance tags */
|
|
42
|
+
compliance?: string[];
|
|
43
|
+
}
|
|
44
|
+
export interface GovernanceViolation {
|
|
45
|
+
/** Type of violation */
|
|
46
|
+
type: 'blocked-source' | 'unstable-version' | 'missing-metadata' | 'license-violation';
|
|
47
|
+
/** Package that violates the policy */
|
|
48
|
+
packageKey: string;
|
|
49
|
+
/** Violation message */
|
|
50
|
+
message: string;
|
|
51
|
+
/** Severity: error or warning */
|
|
52
|
+
severity: 'error' | 'warning';
|
|
53
|
+
}
|
|
22
54
|
/**
|
|
23
55
|
* Validates dependencies against organizational governance policies.
|
|
24
56
|
*/
|
|
@@ -37,6 +69,10 @@ export declare class GovernanceValidator {
|
|
|
37
69
|
* Generates an audit report for compliance tracking.
|
|
38
70
|
*/
|
|
39
71
|
generateAuditReport(lockFile: LockFile, workspaceRoot: string): Promise<string>;
|
|
72
|
+
/**
|
|
73
|
+
* Checks if a version is a pre-release.
|
|
74
|
+
*/
|
|
75
|
+
private isPreReleaseVersion;
|
|
40
76
|
}
|
|
41
77
|
/**
|
|
42
78
|
* Loads governance policy from model.yaml governance section.
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
import path from 'node:path';
|
|
22
22
|
import fs from 'node:fs/promises';
|
|
23
23
|
import YAML from 'yaml';
|
|
24
|
-
import { isPreRelease } from './semver.js';
|
|
25
24
|
/**
|
|
26
25
|
* Validates dependencies against organizational governance policies.
|
|
27
26
|
*/
|
|
@@ -62,11 +61,11 @@ export class GovernanceValidator {
|
|
|
62
61
|
}
|
|
63
62
|
// Check version stability
|
|
64
63
|
if (this.policy.requireStableVersions) {
|
|
65
|
-
if (
|
|
64
|
+
if (this.isPreReleaseVersion(locked.version)) {
|
|
66
65
|
violations.push({
|
|
67
66
|
type: 'unstable-version',
|
|
68
67
|
packageKey,
|
|
69
|
-
message: `Pre-release
|
|
68
|
+
message: `Pre-release version not allowed: ${locked.version}`,
|
|
70
69
|
severity: 'error',
|
|
71
70
|
});
|
|
72
71
|
}
|
|
@@ -116,7 +115,7 @@ export class GovernanceValidator {
|
|
|
116
115
|
lines.push('');
|
|
117
116
|
lines.push('Dependencies:');
|
|
118
117
|
for (const [packageKey, locked] of Object.entries(lockFile.dependencies)) {
|
|
119
|
-
lines.push(` - ${packageKey}@${locked.
|
|
118
|
+
lines.push(` - ${packageKey}@${locked.version}`);
|
|
120
119
|
lines.push(` Source: ${locked.resolved}`);
|
|
121
120
|
lines.push(` Commit: ${locked.commit}`);
|
|
122
121
|
}
|
|
@@ -133,6 +132,13 @@ export class GovernanceValidator {
|
|
|
133
132
|
}
|
|
134
133
|
return lines.join('\n');
|
|
135
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Checks if a version is a pre-release.
|
|
137
|
+
*/
|
|
138
|
+
isPreReleaseVersion(version) {
|
|
139
|
+
const clean = version.replace(/^v/, '');
|
|
140
|
+
return /-(alpha|beta|rc|pre|dev|snapshot)/.test(clean);
|
|
141
|
+
}
|
|
136
142
|
}
|
|
137
143
|
/**
|
|
138
144
|
* Loads governance policy from model.yaml governance section.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governance-validator.js","sourceRoot":"","sources":["../../src/services/governance-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"governance-validator.js","sourceRoot":"","sources":["../../src/services/governance-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,75 +1,16 @@
|
|
|
1
|
-
import { URI
|
|
1
|
+
import { URI } from 'langium';
|
|
2
2
|
import type { DomainLangServices } from '../domain-lang-module.js';
|
|
3
|
-
import type { LockFile } from './
|
|
3
|
+
import type { LockFile } from './git-url-resolver.js';
|
|
4
4
|
/**
|
|
5
|
-
* ImportResolver resolves import statements using
|
|
6
|
-
*
|
|
7
|
-
* Import Types (PRS-010):
|
|
8
|
-
* - Local relative: ./path, ../path → Directory-first resolution
|
|
9
|
-
* - Path aliases: @/path, @alias/path → Configurable in model.yaml paths section
|
|
10
|
-
* - External: owner/package → Manifest dependencies
|
|
11
|
-
*
|
|
12
|
-
* Directory-First Resolution:
|
|
13
|
-
* - ./types → ./types/index.dlang → ./types.dlang
|
|
14
|
-
* - Module entry defaults to index.dlang (no model.yaml required)
|
|
5
|
+
* ImportResolver resolves import statements using WorkspaceManager and GitUrlResolver.
|
|
15
6
|
*/
|
|
16
7
|
export declare class ImportResolver {
|
|
17
|
-
private
|
|
8
|
+
private workspaceManager;
|
|
18
9
|
constructor(services: DomainLangServices);
|
|
19
10
|
/**
|
|
20
|
-
* Resolve an import
|
|
11
|
+
* Resolve an import URL to a file URI using the workspace's GitUrlResolver.
|
|
21
12
|
*/
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Resolve an import specifier from a base directory (non-LSP contexts).
|
|
25
|
-
*/
|
|
26
|
-
resolveFrom(baseDir: string, specifier: string): Promise<URI>;
|
|
27
|
-
/**
|
|
28
|
-
* Resolves a path alias import.
|
|
29
|
-
*
|
|
30
|
-
* @param specifier - Import specifier starting with @ (e.g., "@/lib", "@shared/types")
|
|
31
|
-
*/
|
|
32
|
-
private resolvePathAlias;
|
|
33
|
-
/**
|
|
34
|
-
* Finds the longest matching alias for a specifier.
|
|
35
|
-
*/
|
|
36
|
-
private findMatchingAlias;
|
|
37
|
-
/**
|
|
38
|
-
* Resolves an external dependency via manifest.
|
|
39
|
-
*
|
|
40
|
-
* NEW FORMAT (PRS-010): Import specifier is owner/package format.
|
|
41
|
-
*/
|
|
42
|
-
private resolveExternalDependency;
|
|
43
|
-
/**
|
|
44
|
-
* Resolves a local path using directory-first resolution.
|
|
45
|
-
*
|
|
46
|
-
* Per PRS-010 (updated design):
|
|
47
|
-
* - If path ends with .dlang → direct file import
|
|
48
|
-
* - If no extension → directory-first:
|
|
49
|
-
* 1. Try ./path/index.dlang (module default, no model.yaml required)
|
|
50
|
-
* 2. Try ./path.dlang (file fallback)
|
|
51
|
-
*/
|
|
52
|
-
private resolveLocalPath;
|
|
53
|
-
/**
|
|
54
|
-
* Directory-first resolution: ./types → ./types/index.dlang → ./types.dlang
|
|
55
|
-
*
|
|
56
|
-
* Module entry defaults to index.dlang without requiring model.yaml.
|
|
57
|
-
* If the directory has model.yaml with custom entry, use that.
|
|
58
|
-
*/
|
|
59
|
-
private resolveDirectoryFirst;
|
|
60
|
-
/**
|
|
61
|
-
* Reads the entry point from a module's model.yaml.
|
|
62
|
-
* Defaults to index.dlang if no manifest or no entry specified.
|
|
63
|
-
*/
|
|
64
|
-
private readModuleEntry;
|
|
65
|
-
/**
|
|
66
|
-
* Checks if a path is a directory.
|
|
67
|
-
*/
|
|
68
|
-
private isDirectory;
|
|
69
|
-
/**
|
|
70
|
-
* Checks if a file exists.
|
|
71
|
-
*/
|
|
72
|
-
private fileExists;
|
|
13
|
+
resolveImport(importUrl: string): Promise<URI>;
|
|
73
14
|
/**
|
|
74
15
|
* Get the current lock file (if loaded).
|
|
75
16
|
*/
|