@domainlang/language 0.7.0 → 0.9.0

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 (88) hide show
  1. package/out/domain-lang-module.d.ts +2 -0
  2. package/out/domain-lang-module.js +21 -2
  3. package/out/domain-lang-module.js.map +1 -1
  4. package/out/lsp/domain-lang-completion.d.ts +142 -1
  5. package/out/lsp/domain-lang-completion.js +620 -22
  6. package/out/lsp/domain-lang-completion.js.map +1 -1
  7. package/out/lsp/domain-lang-document-symbol-provider.d.ts +79 -0
  8. package/out/lsp/domain-lang-document-symbol-provider.js +210 -0
  9. package/out/lsp/domain-lang-document-symbol-provider.js.map +1 -0
  10. package/out/lsp/domain-lang-index-manager.d.ts +34 -5
  11. package/out/lsp/domain-lang-index-manager.js +66 -27
  12. package/out/lsp/domain-lang-index-manager.js.map +1 -1
  13. package/out/lsp/domain-lang-node-kind-provider.d.ts +27 -0
  14. package/out/lsp/domain-lang-node-kind-provider.js +87 -0
  15. package/out/lsp/domain-lang-node-kind-provider.js.map +1 -0
  16. package/out/lsp/domain-lang-scope-provider.d.ts +53 -20
  17. package/out/lsp/domain-lang-scope-provider.js +119 -44
  18. package/out/lsp/domain-lang-scope-provider.js.map +1 -1
  19. package/out/lsp/domain-lang-workspace-manager.d.ts +23 -2
  20. package/out/lsp/domain-lang-workspace-manager.js +51 -6
  21. package/out/lsp/domain-lang-workspace-manager.js.map +1 -1
  22. package/out/lsp/hover/domain-lang-hover.d.ts +16 -6
  23. package/out/lsp/hover/domain-lang-hover.js +160 -134
  24. package/out/lsp/hover/domain-lang-hover.js.map +1 -1
  25. package/out/lsp/hover/hover-builders.d.ts +57 -0
  26. package/out/lsp/hover/hover-builders.js +171 -0
  27. package/out/lsp/hover/hover-builders.js.map +1 -0
  28. package/out/main.js +2 -1
  29. package/out/main.js.map +1 -1
  30. package/out/sdk/index.d.ts +31 -11
  31. package/out/sdk/index.js +30 -11
  32. package/out/sdk/index.js.map +1 -1
  33. package/out/sdk/loader-node.d.ts +2 -0
  34. package/out/sdk/loader-node.js +3 -1
  35. package/out/sdk/loader-node.js.map +1 -1
  36. package/out/sdk/loader.d.ts +55 -2
  37. package/out/sdk/loader.js +87 -28
  38. package/out/sdk/loader.js.map +1 -1
  39. package/out/sdk/query.js +14 -11
  40. package/out/sdk/query.js.map +1 -1
  41. package/out/sdk/validator.d.ts +134 -0
  42. package/out/sdk/validator.js +249 -0
  43. package/out/sdk/validator.js.map +1 -0
  44. package/out/services/package-boundary-detector.d.ts +101 -0
  45. package/out/services/package-boundary-detector.js +211 -0
  46. package/out/services/package-boundary-detector.js.map +1 -0
  47. package/out/services/performance-optimizer.js +6 -2
  48. package/out/services/performance-optimizer.js.map +1 -1
  49. package/out/services/types.d.ts +24 -0
  50. package/out/services/types.js.map +1 -1
  51. package/out/services/workspace-manager.d.ts +73 -6
  52. package/out/services/workspace-manager.js +210 -57
  53. package/out/services/workspace-manager.js.map +1 -1
  54. package/out/utils/import-utils.d.ts +9 -6
  55. package/out/utils/import-utils.js +26 -15
  56. package/out/utils/import-utils.js.map +1 -1
  57. package/out/validation/constants.d.ts +7 -0
  58. package/out/validation/constants.js +21 -3
  59. package/out/validation/constants.js.map +1 -1
  60. package/out/validation/import.d.ts +11 -1
  61. package/out/validation/import.js +42 -14
  62. package/out/validation/import.js.map +1 -1
  63. package/out/validation/maps.js +50 -1
  64. package/out/validation/maps.js.map +1 -1
  65. package/package.json +8 -9
  66. package/src/domain-lang-module.ts +24 -3
  67. package/src/lsp/domain-lang-completion.ts +736 -27
  68. package/src/lsp/domain-lang-document-symbol-provider.ts +254 -0
  69. package/src/lsp/domain-lang-index-manager.ts +79 -27
  70. package/src/lsp/domain-lang-node-kind-provider.ts +119 -0
  71. package/src/lsp/domain-lang-scope-provider.ts +171 -55
  72. package/src/lsp/domain-lang-workspace-manager.ts +64 -6
  73. package/src/lsp/hover/domain-lang-hover.ts +189 -131
  74. package/src/lsp/hover/hover-builders.ts +208 -0
  75. package/src/main.ts +3 -1
  76. package/src/sdk/index.ts +33 -11
  77. package/src/sdk/loader-node.ts +6 -1
  78. package/src/sdk/loader.ts +125 -34
  79. package/src/sdk/query.ts +15 -11
  80. package/src/sdk/validator.ts +358 -0
  81. package/src/services/package-boundary-detector.ts +238 -0
  82. package/src/services/performance-optimizer.ts +6 -2
  83. package/src/services/types.ts +25 -0
  84. package/src/services/workspace-manager.ts +259 -62
  85. package/src/utils/import-utils.ts +27 -15
  86. package/src/validation/constants.ts +23 -6
  87. package/src/validation/import.ts +49 -14
  88. package/src/validation/maps.ts +59 -2
@@ -2,6 +2,11 @@ import type { LockFile, ModelManifest, DependencySpec, ExtendedDependencySpec, P
2
2
  /**
3
3
  * Coordinates workspace discovery and manifest/lock file reading.
4
4
  *
5
+ * **Multi-Root Support:**
6
+ * Maintains separate contexts for each workspace root (directory with model.yaml).
7
+ * This enables correct resolution in multi-project setups where sub-projects
8
+ * have their own model.yaml files.
9
+ *
5
10
  * This is a read-only service for the LSP - it does NOT:
6
11
  * - Generate lock files (use CLI: `dlang install`)
7
12
  * - Download packages (use CLI: `dlang install`)
@@ -15,16 +20,41 @@ import type { LockFile, ModelManifest, DependencySpec, ExtendedDependencySpec, P
15
20
  export declare class WorkspaceManager {
16
21
  private readonly manifestFiles;
17
22
  private readonly lockFiles;
18
- private workspaceRoot;
19
- private lockFile;
20
- private initializePromise;
21
- private manifestCache;
23
+ /**
24
+ * Cache of workspace contexts by resolved workspace root path.
25
+ * Supports multiple independent workspaces in a single session.
26
+ */
27
+ private readonly workspaceContexts;
28
+ /**
29
+ * Cache mapping start paths to their resolved workspace roots.
30
+ * Avoids repeated directory tree walking for the same paths.
31
+ */
32
+ private readonly pathToRootCache;
33
+ /**
34
+ * The currently active workspace root (set by last initialize() call).
35
+ * Used by methods like getWorkspaceRoot(), getManifest(), etc.
36
+ */
37
+ private activeRoot;
22
38
  constructor(options?: WorkspaceManagerOptions);
39
+ /**
40
+ * Returns the active workspace context, or undefined if not initialized.
41
+ * All methods that need context should call this after ensureInitialized().
42
+ */
43
+ private getActiveContext;
23
44
  /**
24
45
  * Finds the workspace root and loads any existing lock file.
25
- * Repeated calls await the same initialization work.
46
+ *
47
+ * **Multi-Root Support:**
48
+ * Each call may switch to a different workspace context based on the startPath.
49
+ * The workspace root is the nearest ancestor directory containing model.yaml.
50
+ *
51
+ * @param startPath - Directory to start searching from (usually document directory)
26
52
  */
27
53
  initialize(startPath: string): Promise<void>;
54
+ /**
55
+ * Initializes a workspace context by loading its lock file.
56
+ */
57
+ private initializeContext;
28
58
  /**
29
59
  * Returns the absolute path of the workspace root.
30
60
  * @throws Error if {@link initialize} has not completed successfully.
@@ -33,8 +63,19 @@ export declare class WorkspaceManager {
33
63
  /**
34
64
  * Returns the project-local package cache directory.
35
65
  * Per PRS-010: .dlang/packages/
66
+ *
67
+ * If the current workspace root is inside a cached package,
68
+ * walks up to find the actual project root's cache directory.
36
69
  */
37
70
  getCacheDir(): string;
71
+ /**
72
+ * Finds the actual project root when inside a cached package.
73
+ *
74
+ * Cached packages are stored in: <project>/.dlang/packages/<owner>/<repo>/<commit>/
75
+ * If workspaceRoot is inside this structure, returns <project>
76
+ * Otherwise returns workspaceRoot unchanged.
77
+ */
78
+ private findProjectRootFromCache;
38
79
  /**
39
80
  * Resolves the manifest file path within the workspace, if present.
40
81
  */
@@ -44,6 +85,20 @@ export declare class WorkspaceManager {
44
85
  * Uses cached contents when unchanged on disk.
45
86
  */
46
87
  getManifest(): Promise<ModelManifest | undefined>;
88
+ /**
89
+ * Returns the cached manifest synchronously (if available).
90
+ * Used by LSP features that need synchronous access (like completion).
91
+ * Returns undefined if manifest hasn't been loaded yet.
92
+ */
93
+ getCachedManifest(): ModelManifest | undefined;
94
+ /**
95
+ * Ensures the manifest is loaded and returns it.
96
+ * Use this over getCachedManifest() when you need to guarantee the manifest
97
+ * is available (e.g., in async LSP operations like completions).
98
+ *
99
+ * @returns The manifest or undefined if no model.yaml exists
100
+ */
101
+ ensureManifestLoaded(): Promise<ModelManifest | undefined>;
47
102
  /**
48
103
  * Gets the currently cached lock file.
49
104
  * Returns undefined if no lock file exists (run `dlang install` to create one).
@@ -94,11 +149,23 @@ export declare class WorkspaceManager {
94
149
  * Reads the entry point from a cached package's model.yaml.
95
150
  */
96
151
  private readPackageEntry;
97
- private performInitialization;
98
152
  private ensureInitialized;
99
153
  private loadLockFileFromDisk;
100
154
  private tryReadLockFile;
101
155
  private loadManifest;
156
+ /**
157
+ * Reads, validates, and caches a manifest file.
158
+ */
159
+ private readAndCacheManifest;
160
+ /**
161
+ * Handles errors from manifest loading, distinguishing recoverable
162
+ * errors (missing file, parse errors) from unexpected ones.
163
+ */
164
+ private handleManifestError;
165
+ /**
166
+ * Clears the manifest cache on the given context, if available.
167
+ */
168
+ private clearManifestCache;
102
169
  /**
103
170
  * Validates manifest structure and dependency configurations.
104
171
  * Throws detailed errors for invalid manifests.
@@ -12,6 +12,11 @@ const DEFAULT_LOCK_FILES = [
12
12
  /**
13
13
  * Coordinates workspace discovery and manifest/lock file reading.
14
14
  *
15
+ * **Multi-Root Support:**
16
+ * Maintains separate contexts for each workspace root (directory with model.yaml).
17
+ * This enables correct resolution in multi-project setups where sub-projects
18
+ * have their own model.yaml files.
19
+ *
15
20
  * This is a read-only service for the LSP - it does NOT:
16
21
  * - Generate lock files (use CLI: `dlang install`)
17
22
  * - Download packages (use CLI: `dlang install`)
@@ -24,43 +29,125 @@ const DEFAULT_LOCK_FILES = [
24
29
  */
25
30
  export class WorkspaceManager {
26
31
  constructor(options = {}) {
32
+ /**
33
+ * Cache of workspace contexts by resolved workspace root path.
34
+ * Supports multiple independent workspaces in a single session.
35
+ */
36
+ this.workspaceContexts = new Map();
37
+ /**
38
+ * Cache mapping start paths to their resolved workspace roots.
39
+ * Avoids repeated directory tree walking for the same paths.
40
+ */
41
+ this.pathToRootCache = new Map();
27
42
  this.manifestFiles = options.manifestFiles ?? [...DEFAULT_MANIFEST_FILES];
28
43
  this.lockFiles = options.lockFiles ?? [...DEFAULT_LOCK_FILES];
29
44
  }
45
+ /**
46
+ * Returns the active workspace context, or undefined if not initialized.
47
+ * All methods that need context should call this after ensureInitialized().
48
+ */
49
+ getActiveContext() {
50
+ if (!this.activeRoot)
51
+ return undefined;
52
+ return this.workspaceContexts.get(this.activeRoot);
53
+ }
30
54
  /**
31
55
  * Finds the workspace root and loads any existing lock file.
32
- * Repeated calls await the same initialization work.
56
+ *
57
+ * **Multi-Root Support:**
58
+ * Each call may switch to a different workspace context based on the startPath.
59
+ * The workspace root is the nearest ancestor directory containing model.yaml.
60
+ *
61
+ * @param startPath - Directory to start searching from (usually document directory)
33
62
  */
34
63
  async initialize(startPath) {
35
- this.initializePromise ?? (this.initializePromise = this.performInitialization(startPath));
36
- await this.initializePromise;
64
+ const normalizedStart = path.resolve(startPath);
65
+ // Fast path: check if we've already resolved this path
66
+ let workspaceRoot = this.pathToRootCache.get(normalizedStart);
67
+ if (!workspaceRoot) {
68
+ // Find workspace root by walking up directory tree
69
+ workspaceRoot = await this.findWorkspaceRoot(normalizedStart) ?? normalizedStart;
70
+ this.pathToRootCache.set(normalizedStart, workspaceRoot);
71
+ }
72
+ // Switch to this workspace's context
73
+ this.activeRoot = workspaceRoot;
74
+ // Get or create context for this workspace
75
+ let context = this.workspaceContexts.get(workspaceRoot);
76
+ if (!context) {
77
+ context = {
78
+ root: workspaceRoot,
79
+ lockFile: undefined,
80
+ manifestCache: undefined,
81
+ initPromise: undefined
82
+ };
83
+ this.workspaceContexts.set(workspaceRoot, context);
84
+ }
85
+ // Initialize this context (lazy, once per context)
86
+ context.initPromise ?? (context.initPromise = this.initializeContext(context));
87
+ await context.initPromise;
88
+ }
89
+ /**
90
+ * Initializes a workspace context by loading its lock file.
91
+ */
92
+ async initializeContext(context) {
93
+ const loaded = await this.loadLockFileFromDisk(context.root);
94
+ if (loaded) {
95
+ context.lockFile = loaded.lockFile;
96
+ }
37
97
  }
38
98
  /**
39
99
  * Returns the absolute path of the workspace root.
40
100
  * @throws Error if {@link initialize} has not completed successfully.
41
101
  */
42
102
  getWorkspaceRoot() {
43
- if (!this.workspaceRoot) {
103
+ if (!this.activeRoot) {
44
104
  throw new Error('WorkspaceManager not initialized. Call initialize() first.');
45
105
  }
46
- return this.workspaceRoot;
106
+ return this.activeRoot;
47
107
  }
48
108
  /**
49
109
  * Returns the project-local package cache directory.
50
110
  * Per PRS-010: .dlang/packages/
111
+ *
112
+ * If the current workspace root is inside a cached package,
113
+ * walks up to find the actual project root's cache directory.
51
114
  */
52
115
  getCacheDir() {
53
- if (!this.workspaceRoot) {
116
+ if (!this.activeRoot) {
54
117
  throw new Error('WorkspaceManager not initialized. Call initialize() first.');
55
118
  }
56
- return path.join(this.workspaceRoot, '.dlang', 'packages');
119
+ // If workspace root is inside .dlang/packages, find the project root
120
+ const projectRoot = this.findProjectRootFromCache(this.activeRoot);
121
+ return path.join(projectRoot, '.dlang', 'packages');
122
+ }
123
+ /**
124
+ * Finds the actual project root when inside a cached package.
125
+ *
126
+ * Cached packages are stored in: <project>/.dlang/packages/<owner>/<repo>/<commit>/
127
+ * If workspaceRoot is inside this structure, returns <project>
128
+ * Otherwise returns workspaceRoot unchanged.
129
+ */
130
+ findProjectRootFromCache(currentRoot) {
131
+ // Normalize path for cross-platform compatibility
132
+ const normalized = currentRoot.split(path.sep);
133
+ // Find last occurrence of .dlang in the path
134
+ const dlangIndex = normalized.lastIndexOf('.dlang');
135
+ // Check if we're inside .dlang/packages/...
136
+ if (dlangIndex !== -1 &&
137
+ dlangIndex + 1 < normalized.length &&
138
+ normalized[dlangIndex + 1] === 'packages') {
139
+ // Return the directory containing .dlang (the project root)
140
+ return normalized.slice(0, dlangIndex).join(path.sep);
141
+ }
142
+ // Not in a cached package, return as-is
143
+ return currentRoot;
57
144
  }
58
145
  /**
59
146
  * Resolves the manifest file path within the workspace, if present.
60
147
  */
61
148
  async getManifestPath() {
62
149
  await this.ensureInitialized();
63
- const root = this.workspaceRoot;
150
+ const root = this.activeRoot;
64
151
  if (!root) {
65
152
  return undefined;
66
153
  }
@@ -80,27 +167,49 @@ export class WorkspaceManager {
80
167
  await this.ensureInitialized();
81
168
  return this.loadManifest();
82
169
  }
170
+ /**
171
+ * Returns the cached manifest synchronously (if available).
172
+ * Used by LSP features that need synchronous access (like completion).
173
+ * Returns undefined if manifest hasn't been loaded yet.
174
+ */
175
+ getCachedManifest() {
176
+ return this.getActiveContext()?.manifestCache?.manifest;
177
+ }
178
+ /**
179
+ * Ensures the manifest is loaded and returns it.
180
+ * Use this over getCachedManifest() when you need to guarantee the manifest
181
+ * is available (e.g., in async LSP operations like completions).
182
+ *
183
+ * @returns The manifest or undefined if no model.yaml exists
184
+ */
185
+ async ensureManifestLoaded() {
186
+ // If we already have a cached manifest, return it immediately
187
+ const context = this.getActiveContext();
188
+ if (context?.manifestCache?.manifest) {
189
+ return context.manifestCache.manifest;
190
+ }
191
+ // Otherwise load it (this also populates the cache)
192
+ return this.getManifest();
193
+ }
83
194
  /**
84
195
  * Gets the currently cached lock file.
85
196
  * Returns undefined if no lock file exists (run `dlang install` to create one).
86
197
  */
87
198
  async getLockFile() {
88
199
  await this.ensureInitialized();
89
- return this.lockFile;
200
+ return this.getActiveContext()?.lockFile;
90
201
  }
91
202
  /**
92
203
  * Reloads the lock file from disk.
93
204
  */
94
205
  async refreshLockFile() {
95
206
  await this.ensureInitialized();
207
+ const context = this.getActiveContext();
96
208
  const loaded = await this.loadLockFileFromDisk();
97
- if (loaded) {
98
- this.lockFile = loaded.lockFile;
99
- }
100
- else {
101
- this.lockFile = undefined;
209
+ if (context) {
210
+ context.lockFile = loaded?.lockFile;
102
211
  }
103
- return this.lockFile;
212
+ return loaded?.lockFile;
104
213
  }
105
214
  /**
106
215
  * Invalidates all cached data (manifest and lock file).
@@ -110,22 +219,31 @@ export class WorkspaceManager {
110
219
  * will re-read from disk.
111
220
  */
112
221
  invalidateCache() {
113
- this.manifestCache = undefined;
114
- this.lockFile = undefined;
222
+ const context = this.getActiveContext();
223
+ if (context) {
224
+ context.manifestCache = undefined;
225
+ context.lockFile = undefined;
226
+ }
115
227
  }
116
228
  /**
117
229
  * Invalidates only the manifest cache.
118
230
  * Call this when model.yaml changes.
119
231
  */
120
232
  invalidateManifestCache() {
121
- this.manifestCache = undefined;
233
+ const context = this.getActiveContext();
234
+ if (context) {
235
+ context.manifestCache = undefined;
236
+ }
122
237
  }
123
238
  /**
124
239
  * Invalidates only the lock file cache.
125
240
  * Call this when model.lock changes.
126
241
  */
127
242
  invalidateLockCache() {
128
- this.lockFile = undefined;
243
+ const context = this.getActiveContext();
244
+ if (context) {
245
+ context.lockFile = undefined;
246
+ }
129
247
  }
130
248
  /**
131
249
  * Returns the path aliases from the manifest, if present.
@@ -164,7 +282,8 @@ export class WorkspaceManager {
164
282
  */
165
283
  async resolveDependencyPath(specifier) {
166
284
  await this.ensureInitialized();
167
- if (!this.lockFile) {
285
+ const context = this.getActiveContext();
286
+ if (!context?.lockFile) {
168
287
  return undefined;
169
288
  }
170
289
  const manifest = await this.loadManifest();
@@ -185,7 +304,7 @@ export class WorkspaceManager {
185
304
  // Match if specifier equals key or starts with key/
186
305
  if (specifier === key || specifier.startsWith(`${key}/`)) {
187
306
  // Find in lock file
188
- const locked = this.lockFile.dependencies[normalized.source];
307
+ const locked = context.lockFile.dependencies[normalized.source];
189
308
  if (!locked) {
190
309
  return undefined;
191
310
  }
@@ -219,33 +338,30 @@ export class WorkspaceManager {
219
338
  return 'index.dlang';
220
339
  }
221
340
  }
222
- async performInitialization(startPath) {
223
- this.workspaceRoot = await this.findWorkspaceRoot(startPath) ?? path.resolve(startPath);
224
- const loaded = await this.loadLockFileFromDisk();
225
- if (loaded) {
226
- this.lockFile = loaded.lockFile;
227
- }
228
- }
229
341
  async ensureInitialized() {
230
- if (this.initializePromise) {
231
- await this.initializePromise;
232
- }
233
- else if (!this.workspaceRoot) {
234
- throw new Error('WorkspaceManager not initialized. Call initialize() first.');
342
+ // Check if we have an active workspace context
343
+ if (this.activeRoot) {
344
+ const context = this.workspaceContexts.get(this.activeRoot);
345
+ if (context?.initPromise) {
346
+ await context.initPromise;
347
+ return;
348
+ }
235
349
  }
350
+ throw new Error('WorkspaceManager not initialized. Call initialize() first.');
236
351
  }
237
- async loadLockFileFromDisk() {
238
- if (!this.workspaceRoot) {
352
+ async loadLockFileFromDisk(root) {
353
+ const workspaceRoot = root ?? this.activeRoot;
354
+ if (!workspaceRoot) {
239
355
  return undefined;
240
356
  }
241
357
  // Try performance optimizer cache first
242
358
  const optimizer = getGlobalOptimizer();
243
- const cached = await optimizer.getCachedLockFile(this.workspaceRoot);
359
+ const cached = await optimizer.getCachedLockFile(workspaceRoot);
244
360
  if (cached) {
245
- return { lockFile: cached, filePath: path.join(this.workspaceRoot, 'model.lock') };
361
+ return { lockFile: cached, filePath: path.join(workspaceRoot, 'model.lock') };
246
362
  }
247
363
  for (const filename of this.lockFiles) {
248
- const filePath = path.join(this.workspaceRoot, filename);
364
+ const filePath = path.join(workspaceRoot, filename);
249
365
  const lockFile = await this.tryReadLockFile(filePath);
250
366
  if (lockFile) {
251
367
  return { lockFile, filePath };
@@ -266,34 +382,71 @@ export class WorkspaceManager {
266
382
  }
267
383
  }
268
384
  async loadManifest() {
385
+ const context = this.getActiveContext();
269
386
  const manifestPath = await this.getManifestPath();
270
387
  if (!manifestPath) {
271
- this.manifestCache = undefined;
388
+ this.clearManifestCache(context);
272
389
  return undefined;
273
390
  }
274
391
  try {
275
- const stat = await fs.stat(manifestPath);
276
- if (this.manifestCache?.path === manifestPath &&
277
- this.manifestCache.mtimeMs === stat.mtimeMs) {
278
- return this.manifestCache.manifest;
279
- }
280
- const content = await fs.readFile(manifestPath, 'utf-8');
281
- const manifest = (YAML.parse(content) ?? {});
282
- // Validate manifest structure
283
- this.validateManifest(manifest, manifestPath);
284
- this.manifestCache = {
392
+ return await this.readAndCacheManifest(manifestPath, context);
393
+ }
394
+ catch (error) {
395
+ return this.handleManifestError(error, manifestPath, context);
396
+ }
397
+ }
398
+ /**
399
+ * Reads, validates, and caches a manifest file.
400
+ */
401
+ async readAndCacheManifest(manifestPath, context) {
402
+ const stat = await fs.stat(manifestPath);
403
+ if (context?.manifestCache?.path === manifestPath &&
404
+ context.manifestCache.mtimeMs === stat.mtimeMs) {
405
+ return context.manifestCache.manifest;
406
+ }
407
+ const content = await fs.readFile(manifestPath, 'utf-8');
408
+ const manifest = (YAML.parse(content) ?? {});
409
+ // Validate manifest structure
410
+ this.validateManifest(manifest, manifestPath);
411
+ if (context) {
412
+ context.manifestCache = {
285
413
  manifest,
286
414
  path: manifestPath,
287
415
  mtimeMs: stat.mtimeMs,
288
416
  };
289
- return manifest;
290
417
  }
291
- catch (error) {
292
- if (error?.code === 'ENOENT') {
293
- this.manifestCache = undefined;
294
- return undefined;
295
- }
296
- throw error;
418
+ return manifest;
419
+ }
420
+ /**
421
+ * Handles errors from manifest loading, distinguishing recoverable
422
+ * errors (missing file, parse errors) from unexpected ones.
423
+ */
424
+ handleManifestError(error, manifestPath, context) {
425
+ if (error?.code === 'ENOENT') {
426
+ this.clearManifestCache(context);
427
+ return undefined;
428
+ }
429
+ // YAML parse errors should not crash the LSP
430
+ if (error instanceof Error &&
431
+ (error.name === 'YAMLParseError' || error.name === 'YAMLSyntaxError')) {
432
+ console.error(`Invalid model.yaml at ${manifestPath}: ${error.message}`);
433
+ this.clearManifestCache(context);
434
+ return undefined;
435
+ }
436
+ // Validation errors from validateManifest should not crash the LSP
437
+ if (error instanceof Error) {
438
+ console.error(`Manifest validation error at ${manifestPath}: ${error.message}`);
439
+ this.clearManifestCache(context);
440
+ return undefined;
441
+ }
442
+ throw error;
443
+ }
444
+ /**
445
+ * Clears the manifest cache on the given context, if available.
446
+ */
447
+ clearManifestCache(context) {
448
+ if (context) {
449
+ context.manifestCache = undefined;
297
450
  }
298
451
  }
299
452
  /**
@@ -366,7 +519,7 @@ export class WorkspaceManager {
366
519
  // Resolve path relative to manifest directory
367
520
  const manifestDir = path.dirname(manifestPath);
368
521
  const resolvedPath = path.resolve(manifestDir, localPath);
369
- const workspaceRoot = this.workspaceRoot || manifestDir;
522
+ const workspaceRoot = this.activeRoot || manifestDir;
370
523
  // Check if resolved path is within workspace
371
524
  const relativePath = path.relative(workspaceRoot, resolvedPath);
372
525
  if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-manager.js","sourceRoot":"","sources":["../../src/services/workspace-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-manager.js","sourceRoot":"","sources":["../../src/services/workspace-manager.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,UAAU,IAAI,eAAe,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAWvH,MAAM,sBAAsB,GAAG;IAC3B,YAAY;CACN,CAAC;AAEX,MAAM,kBAAkB,GAAG;IACvB,YAAY;CACN,CAAC;AA4BX;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,gBAAgB;IAsBzB,YAAY,UAAmC,EAAE;QAlBjD;;;WAGG;QACc,sBAAiB,GAAG,IAAI,GAAG,EAA4B,CAAC;QAEzE;;;WAGG;QACc,oBAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;QASzD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,GAAG,sBAAsB,CAAC,CAAC;QAC1E,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC;IAClE,CAAC;IAED;;;OAGG;IACK,gBAAgB;QACpB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,SAAS,CAAC;QACvC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,UAAU,CAAC,SAAiB;QAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhD,uDAAuD;QACvD,IAAI,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAE9D,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,mDAAmD;YACnD,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC;YACjF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QAC7D,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC;QAEhC,2CAA2C;QAC3C,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,GAAG;gBACN,IAAI,EAAE,aAAa;gBACnB,QAAQ,EAAE,SAAS;gBACnB,aAAa,EAAE,SAAS;gBACxB,WAAW,EAAE,SAAS;aACzB,CAAC;YACF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;QAED,mDAAmD;QACnD,OAAO,CAAC,WAAW,KAAnB,OAAO,CAAC,WAAW,GAAK,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAC;QACxD,MAAM,OAAO,CAAC,WAAW,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,OAAyB;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACvC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,gBAAgB;QACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,WAAW;QACP,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAClF,CAAC;QAED,qEAAqE;QACrE,MAAM,WAAW,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;OAMG;IACK,wBAAwB,CAAC,WAAmB;QAChD,kDAAkD;QAClD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/C,6CAA6C;QAC7C,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEpD,4CAA4C;QAC5C,IAAI,UAAU,KAAK,CAAC,CAAC;YACjB,UAAU,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM;YAClC,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;YAC5C,4DAA4D;YAC5D,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1D,CAAC;QAED,wCAAwC;QACxC,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACjB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC5C,IAAI,MAAM,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,OAAO,SAAS,CAAC;YACrB,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW;QACb,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,iBAAiB;QACb,OAAO,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,QAAQ,CAAC;IAC5D,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,oBAAoB;QACtB,8DAA8D;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxC,IAAI,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;YACnC,OAAO,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC1C,CAAC;QACD,oDAAoD;QACpD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW;QACb,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,gBAAgB,EAAE,EAAE,QAAQ,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACjB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACjD,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC;QACxC,CAAC;QACD,OAAO,MAAM,EAAE,QAAQ,CAAC;IAC5B,CAAC;IAED;;;;;;OAMG;IACH,eAAe;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;YAClC,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;QACjC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,uBAAuB;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;QACtC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,mBAAmB;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;QACjC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,OAAO,QAAQ,EAAE,KAAK,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,mBAAmB,CAAC,GAAW,EAAE,GAAmB;QAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1B,kDAAkD;YAClD,2CAA2C;YAC3C,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACrC,CAAC;QACD,iBAAiB;QACjB,6BAA6B;QAC7B,oDAAoD;QACpD,sEAAsE;QACtE,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC;QACf,CAAC;QACD,OAAO,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,qBAAqB,CAAC,SAAiB;QACzC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,QAAQ,EAAE,YAAY,CAAC;QAE5C,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,2BAA2B;QAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACpD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAEtD,yDAAyD;YACzD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBAClB,SAAS;YACb,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;gBACrB,SAAS;YACb,CAAC;YAED,oDAAoD;YACpD,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;gBACvD,oBAAoB;gBACpB,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAChE,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,OAAO,SAAS,CAAC;gBACrB,CAAC;gBAED,qBAAqB;gBACrB,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE7E,kBAAkB;gBAClB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC3C,IAAI,MAAM,EAAE,CAAC;oBACT,6CAA6C;oBAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACzC,CAAC;gBAED,6CAA6C;gBAC7C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;gBAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,UAAkB;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACzD,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmC,CAAC;YACvE,OAAO,QAAQ,EAAE,KAAK,EAAE,KAAK,IAAI,aAAa,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,aAAa,CAAC;QACzB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC3B,+CAA+C;QAC/C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5D,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;gBACvB,MAAM,OAAO,CAAC,WAAW,CAAC;gBAC1B,OAAO;YACX,CAAC;QACL,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAClF,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,IAAa;QAC5C,MAAM,aAAa,GAAG,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,wCAAwC;QACxC,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAChE,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,CAAC;QAClF,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAI,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;YAClC,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,QAAgB;QAC1C,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAK,KAA+B,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtD,OAAO,SAAS,CAAC;YACrB,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,YAAY;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,IAAI,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAC9B,YAAoB,EACpB,OAAqC;QAErC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,aAAa,EAAE,IAAI,KAAK,YAAY;YAC7C,OAAO,CAAC,aAAa,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACjD,OAAO,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC1C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAkB,CAAC;QAE9D,8BAA8B;QAC9B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAE9C,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,aAAa,GAAG;gBACpB,QAAQ;gBACR,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,IAAI,CAAC,OAAO;aACxB,CAAC;QACN,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;OAGG;IACK,mBAAmB,CACvB,KAAc,EACd,YAAoB,EACpB,OAAqC;QAErC,IAAK,KAA+B,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtD,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,6CAA6C;QAC7C,IAAI,KAAK,YAAY,KAAK;YACtB,CAAC,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,EAAE,CAAC;YACxE,OAAO,CAAC,KAAK,CAAC,yBAAyB,YAAY,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,mEAAmE;QACnE,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,gCAAgC,YAAY,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAChF,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,KAAK,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,OAAqC;QAC5D,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;QACtC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,gBAAgB,CAAC,QAAuB,EAAE,YAAoB;QAClE,wBAAwB;QACxB,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YACzB,OAAO,CAAC,8BAA8B;QAC1C,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAEtD,8CAA8C;YAC9C,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CACX,uBAAuB,GAAG,QAAQ,YAAY,KAAK;oBACnD,4CAA4C;oBAC5C,qFAAqF,CACxF,CAAC;YACN,CAAC;YAED,+DAA+D;YAC/D,oDAAoD;YACpD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CACX,uBAAuB,GAAG,QAAQ,YAAY,KAAK;oBACnD,2CAA2C;oBAC3C,kGAAkG,CACrG,CAAC;YACN,CAAC;YAED,iDAAiD;YACjD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBAClB,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YAC/D,CAAC;YAED,yCAAyC;YACzC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CACX,uBAAuB,GAAG,QAAQ,YAAY,KAAK;oBACnD,0DAA0D;oBAC1D,uEAAuE,CAC1E,CAAC;YACN,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,KAAkB,EAAE,YAAoB;QAChE,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,+BAA+B;YAC/B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACX,uBAAuB,KAAK,QAAQ,YAAY,KAAK;oBACrD,qCAAqC;oBACrC,qBAAqB,KAAK,qCAAqC,CAClE,CAAC;YACN,CAAC;YAED,gDAAgD;YAChD,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,iBAAiB,CAAC,SAAiB,EAAE,KAAa,EAAE,YAAoB;QAC5E,wBAAwB;QACxB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACX,uBAAuB,KAAK,QAAQ,YAAY,KAAK;gBACrD,6BAA6B,SAAS,MAAM;gBAC5C,+EAA+E,CAClF,CAAC;QACN,CAAC;QAED,8CAA8C;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC;QAErD,6CAA6C;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAChE,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CACX,uBAAuB,KAAK,QAAQ,YAAY,KAAK;gBACrD,SAAS,SAAS,0CAA0C;gBAC5D,aAAa,YAAY,IAAI;gBAC7B,cAAc,aAAa,IAAI;gBAC/B,oHAAoH,CACvH,CAAC;QACN,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,OAAe;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAEhC,CAAC;QAEF,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAC1E,MAAM,YAAY,GAAqC,EAAE,CAAC;QAE1D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACpH,SAAS;YACb,CAAC;YACD,YAAY,CAAC,GAAG,CAAC,GAAG;gBAChB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,QAAQ,EAAE,gDAAgD;gBACpF,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,SAAS,EAAE,KAAK,CAAC,SAAS;aAC7B,CAAC;QACN,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IACrC,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QAC7C,6DAA6D;QAC7D,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;YAC5E,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;QAED,0DAA0D;QAC1D,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAErC,OAAO,IAAI,EAAE,CAAC;YACV,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvC,OAAO,OAAO,CAAC;YACnB,CAAC;YAED,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,SAAS,CAAC;YACrB,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACrB,OAAO,SAAS,CAAC;YACrB,CAAC;YAED,OAAO,GAAG,MAAM,CAAC;QACrB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,GAAW;QACtC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;gBAClD,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
@@ -1,11 +1,10 @@
1
1
  import { URI, type LangiumDocument, type LangiumDocuments } from 'langium';
2
+ import { ImportResolver } from '../services/import-resolver.js';
2
3
  /**
3
4
  * Resolves an import path to an absolute file URI.
4
5
  *
5
- * Delegates to ImportResolver which implements PRS-010 semantics:
6
- * - File imports (with .dlang extension): Direct file access
7
- * - Module imports (no extension): Requires model.yaml in directory
8
- * - External dependencies: Resolved via manifest and lock file
6
+ * @deprecated Prefer using ImportResolver.resolveForDocument() from the DI container.
7
+ * This function creates standalone instances outside the DI system.
9
8
  *
10
9
  * @param importingDoc - The document containing the import statement
11
10
  * @param rawImportPath - The raw import path from the import statement
@@ -18,15 +17,19 @@ export declare function resolveImportPath(importingDoc: LangiumDocument, rawImpo
18
17
  *
19
18
  * @param entryFilePath - Absolute or workspace-relative path to entry file
20
19
  * @param langiumDocuments - The Langium documents manager
20
+ * @param importResolver - Optional DI-injected ImportResolver. When provided,
21
+ * uses it instead of creating standalone instances. Recommended for LSP contexts.
21
22
  * @returns Set of URIs (as strings) for all documents in the import graph
22
23
  * @throws {Error} If entry file cannot be resolved or loaded
23
24
  */
24
- export declare function ensureImportGraphFromEntryFile(entryFilePath: string, langiumDocuments: LangiumDocuments): Promise<Set<string>>;
25
+ export declare function ensureImportGraphFromEntryFile(entryFilePath: string, langiumDocuments: LangiumDocuments, importResolver?: ImportResolver): Promise<Set<string>>;
25
26
  /**
26
27
  * Recursively builds the import graph from a document.
27
28
  *
28
29
  * @param document - The starting document
29
30
  * @param langiumDocuments - The Langium documents manager
31
+ * @param importResolver - Optional DI-injected ImportResolver. When provided,
32
+ * uses it instead of creating standalone instances. Recommended for LSP contexts.
30
33
  * @returns Set of URIs (as strings) for all documents in the import graph
31
34
  */
32
- export declare function ensureImportGraphFromDocument(document: LangiumDocument, langiumDocuments: LangiumDocuments): Promise<Set<string>>;
35
+ export declare function ensureImportGraphFromDocument(document: LangiumDocument, langiumDocuments: LangiumDocuments, importResolver?: ImportResolver): Promise<Set<string>>;