@domainlang/language 0.10.0 → 0.11.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 (65) hide show
  1. package/README.md +44 -102
  2. package/out/domain-lang-module.d.ts +2 -2
  3. package/out/domain-lang-module.js +2 -2
  4. package/out/domain-lang-module.js.map +1 -1
  5. package/out/index.d.ts +3 -0
  6. package/out/index.js +3 -0
  7. package/out/index.js.map +1 -1
  8. package/out/lsp/domain-lang-completion.js +1 -1
  9. package/out/lsp/domain-lang-completion.js.map +1 -1
  10. package/out/lsp/domain-lang-index-manager.d.ts +149 -5
  11. package/out/lsp/domain-lang-index-manager.js +388 -52
  12. package/out/lsp/domain-lang-index-manager.js.map +1 -1
  13. package/out/lsp/domain-lang-refresh.d.ts +35 -0
  14. package/out/lsp/domain-lang-refresh.js +129 -0
  15. package/out/lsp/domain-lang-refresh.js.map +1 -0
  16. package/out/lsp/domain-lang-workspace-manager.d.ts +10 -0
  17. package/out/lsp/domain-lang-workspace-manager.js +35 -0
  18. package/out/lsp/domain-lang-workspace-manager.js.map +1 -1
  19. package/out/main.js +30 -190
  20. package/out/main.js.map +1 -1
  21. package/out/sdk/loader-node.js +1 -1
  22. package/out/sdk/loader-node.js.map +1 -1
  23. package/out/sdk/validator.js +17 -14
  24. package/out/sdk/validator.js.map +1 -1
  25. package/out/services/import-resolver.d.ts +67 -17
  26. package/out/services/import-resolver.js +146 -65
  27. package/out/services/import-resolver.js.map +1 -1
  28. package/out/services/lsp-logger.d.ts +42 -0
  29. package/out/services/lsp-logger.js +50 -0
  30. package/out/services/lsp-logger.js.map +1 -0
  31. package/out/services/lsp-runtime-settings.d.ts +20 -0
  32. package/out/services/lsp-runtime-settings.js +20 -0
  33. package/out/services/lsp-runtime-settings.js.map +1 -0
  34. package/out/services/performance-optimizer.d.ts +9 -9
  35. package/out/services/performance-optimizer.js +17 -41
  36. package/out/services/performance-optimizer.js.map +1 -1
  37. package/out/services/workspace-manager.d.ts +22 -1
  38. package/out/services/workspace-manager.js +57 -9
  39. package/out/services/workspace-manager.js.map +1 -1
  40. package/out/utils/import-utils.js +6 -6
  41. package/out/utils/import-utils.js.map +1 -1
  42. package/out/validation/constants.d.ts +6 -0
  43. package/out/validation/constants.js +7 -0
  44. package/out/validation/constants.js.map +1 -1
  45. package/out/validation/import.d.ts +13 -3
  46. package/out/validation/import.js +54 -10
  47. package/out/validation/import.js.map +1 -1
  48. package/package.json +1 -1
  49. package/src/domain-lang-module.ts +3 -3
  50. package/src/index.ts +3 -0
  51. package/src/lsp/domain-lang-completion.ts +3 -3
  52. package/src/lsp/domain-lang-index-manager.ts +438 -56
  53. package/src/lsp/domain-lang-refresh.ts +205 -0
  54. package/src/lsp/domain-lang-workspace-manager.ts +45 -0
  55. package/src/main.ts +36 -244
  56. package/src/sdk/loader-node.ts +1 -1
  57. package/src/sdk/validator.ts +17 -13
  58. package/src/services/import-resolver.ts +196 -89
  59. package/src/services/lsp-logger.ts +89 -0
  60. package/src/services/lsp-runtime-settings.ts +34 -0
  61. package/src/services/performance-optimizer.ts +18 -57
  62. package/src/services/workspace-manager.ts +62 -10
  63. package/src/utils/import-utils.ts +6 -6
  64. package/src/validation/constants.ts +9 -0
  65. package/src/validation/import.ts +67 -12
@@ -1,10 +1,15 @@
1
1
  import { DefaultIndexManager, DocumentState } from 'langium';
2
2
  import { CancellationToken } from 'vscode-jsonrpc';
3
3
  import { resolveImportPath } from '../utils/import-utils.js';
4
+ import { createLogger } from '../services/lsp-logger.js';
5
+ const log = createLogger('IndexManager');
4
6
  /**
5
7
  * Custom IndexManager that extends Langium's default to:
6
8
  * 1. Automatically load imported documents during indexing
7
9
  * 2. Track import dependencies for cross-file revalidation
10
+ * 3. Export-signature diffing to prevent unnecessary cascading (PRS-017 R2)
11
+ * 4. Import cycle detection with diagnostics (PRS-017 R3)
12
+ * 5. Targeted ImportResolver cache invalidation (PRS-017 R1)
8
13
  *
9
14
  * **Why this exists:**
10
15
  * Langium's `DefaultIndexManager.isAffected()` only checks cross-references
@@ -46,6 +51,24 @@ export class DomainLangIndexManager extends DefaultIndexManager {
46
51
  * Cleared on workspace config changes.
47
52
  */
48
53
  this.importsLoaded = new Set();
54
+ /**
55
+ * Export snapshot cache (PRS-017 R2): maps document URI to its exported symbol
56
+ * signatures. Used to detect whether a document's public interface actually
57
+ * changed, preventing cascading revalidation for implementation-only changes.
58
+ * Signature = "nodeType:qualifiedName" for each exported symbol.
59
+ */
60
+ this.exportSnapshots = new Map();
61
+ /**
62
+ * Tracks which URIs had their exports actually change during the current
63
+ * update cycle. Reset before each updateContent() call. Used by isAffected()
64
+ * to skip transitive invalidation when exports are unchanged.
65
+ */
66
+ this.changedExports = new Set();
67
+ /**
68
+ * Detected import cycles (PRS-017 R3): maps document URI to the cycle path.
69
+ * Populated during trackImportDependencies(). Consumed by ImportValidator.
70
+ */
71
+ this.detectedCycles = new Map();
49
72
  this.sharedServices = services;
50
73
  }
51
74
  /**
@@ -71,18 +94,43 @@ export class DomainLangIndexManager extends DefaultIndexManager {
71
94
  }
72
95
  /**
73
96
  * Extends the default content update to:
74
- * 1. Ensure all imported documents are loaded
75
- * 2. Track import dependencies for change propagation
97
+ * 1. Capture export snapshot before update (PRS-017 R2)
98
+ * 2. Ensure all imported documents are loaded
99
+ * 3. Track import dependencies for change propagation
100
+ * 4. Compare export snapshot to detect interface changes (PRS-017 R2)
101
+ * 5. Detect import cycles (PRS-017 R3)
102
+ * 6. Trigger targeted ImportResolver cache invalidation (PRS-017 R1)
76
103
  *
77
104
  * Called by Langium during the IndexedContent build phase.
78
105
  * This is BEFORE linking/validation, so imports are available for resolution.
79
106
  */
80
107
  async updateContent(document, cancelToken = CancellationToken.None) {
81
- // First, do the standard content indexing
108
+ const uri = document.uri.toString();
109
+ // R2: Capture export snapshot BEFORE re-indexing
110
+ const oldExports = this.exportSnapshots.get(uri);
111
+ // Standard content indexing
82
112
  await super.updateContent(document, cancelToken);
83
- // Then, ensure imports are loaded and track dependencies
113
+ // R2: Capture new export snapshot and compare
114
+ const newExports = this.captureExportSnapshot(uri);
115
+ this.exportSnapshots.set(uri, newExports);
116
+ const exportsChanged = !oldExports || !this.setsEqual(oldExports, newExports);
117
+ if (exportsChanged) {
118
+ this.changedExports.add(uri);
119
+ log.info('exports changed', { uri });
120
+ }
121
+ else {
122
+ // R2: Remove from changedExports when exports stabilize.
123
+ // Without this, the set accumulates indefinitely and the
124
+ // anyExportsChanged() gate stays permanently open.
125
+ this.changedExports.delete(uri);
126
+ }
127
+ // Ensure imports are loaded and track dependencies
84
128
  await this.ensureImportsLoaded(document);
85
129
  await this.trackImportDependencies(document);
130
+ // R3: Detect import cycles after tracking dependencies
131
+ this.detectAndStoreCycles(uri);
132
+ // R1: Targeted ImportResolver cache invalidation
133
+ this.invalidateImportResolverCache(uri);
86
134
  }
87
135
  /**
88
136
  * Extends the default remove to also clean up import dependencies.
@@ -103,26 +151,97 @@ export class DomainLangIndexManager extends DefaultIndexManager {
103
151
  this.importsLoaded.delete(uriString);
104
152
  }
105
153
  /**
106
- * Extends `isAffected` to also check import dependencies.
154
+ * Extends `isAffected` to check import dependencies — direct, transitive,
155
+ * and specifier-sensitive.
107
156
  *
108
157
  * A document is affected if:
109
158
  * 1. It has cross-references to any changed document (default Langium behavior)
110
- * 2. It imports any of the changed documents (our extension)
159
+ * 2. It directly or transitively imports any changed document whose exports
160
+ * actually changed (PRS-017 R2 — export-signature diffing)
161
+ * 3. Its import specifiers match changed file paths (handles renames/moves)
162
+ *
163
+ * The transitive affected set is computed once per `update()` cycle and cached
164
+ * using `changedUris` Set identity (Langium creates a fresh Set per cycle).
165
+ * This avoids redundant BFS walks when `isAffected()` is called for every
166
+ * loaded document in the workspace.
111
167
  */
112
168
  isAffected(document, changedUris) {
113
169
  // First check Langium's default: cross-references
114
170
  if (super.isAffected(document, changedUris)) {
115
171
  return true;
116
172
  }
117
- // Then check our import dependencies
118
- const docUri = document.uri.toString();
119
- for (const changedUri of changedUris) {
120
- const dependents = this.importDependencies.get(changedUri);
121
- if (dependents?.has(docUri)) {
122
- return true;
173
+ // R2: If no changed URIs had their exports change, skip transitive check.
174
+ // This prevents cascading revalidation for implementation-only changes
175
+ // (e.g., editing a domain's vision string).
176
+ const hasExportChanges = this.anyExportsChanged(changedUris);
177
+ if (!hasExportChanges) {
178
+ // Still check specifier matches for file renames/moves
179
+ const changedPaths = this.extractPathSegments(changedUris);
180
+ for (const changedPath of changedPaths) {
181
+ const infos = this.documentImportInfo.get(document.uri.toString());
182
+ if (infos && this.hasMatchingSpecifierOrResolvedUri(infos, new Set([changedPath]))) {
183
+ return true;
184
+ }
185
+ }
186
+ return false;
187
+ }
188
+ // Then check our import dependency graph (direct + transitive + specifier)
189
+ const affectedSet = this.computeAffectedSet(changedUris);
190
+ return affectedSet.has(document.uri.toString());
191
+ }
192
+ /**
193
+ * Computes the full set of document URIs affected by changes.
194
+ * Cached per `changedUris` identity to avoid recomputation across multiple
195
+ * `isAffected()` calls within the same `DocumentBuilder.update()` cycle.
196
+ *
197
+ * Combines two dependency strategies:
198
+ * 1. **Reverse graph walk** — direct and transitive importers via `importDependencies`
199
+ * 2. **Specifier matching** — documents whose import specifiers match changed file
200
+ * paths (handles file renames/moves that change how imports resolve)
201
+ */
202
+ computeAffectedSet(changedUris) {
203
+ // Cache hit: same changedUris Set reference means same update() cycle
204
+ if (this.transitiveAffectedCache?.key === changedUris) {
205
+ return this.transitiveAffectedCache.result;
206
+ }
207
+ const affected = new Set();
208
+ this.addTransitiveDependents(changedUris, affected);
209
+ this.addSpecifierMatches(changedUris, affected);
210
+ this.transitiveAffectedCache = { key: changedUris, result: affected };
211
+ return affected;
212
+ }
213
+ /**
214
+ * BFS through the reverse dependency graph to find all transitive importers.
215
+ * If C changes and B imports C and A imports B, both A and B are added.
216
+ */
217
+ addTransitiveDependents(changedUris, affected) {
218
+ const toProcess = [...changedUris];
219
+ let uri;
220
+ while ((uri = toProcess.pop()) !== undefined) {
221
+ const dependents = this.importDependencies.get(uri);
222
+ if (!dependents) {
223
+ continue;
224
+ }
225
+ for (const dep of dependents) {
226
+ if (!affected.has(dep) && !changedUris.has(dep)) {
227
+ affected.add(dep);
228
+ toProcess.push(dep);
229
+ }
230
+ }
231
+ }
232
+ }
233
+ /**
234
+ * Finds documents whose import specifiers fuzzy-match changed file paths.
235
+ * Handles file renames/moves where the resolved URI hasn't been updated yet.
236
+ */
237
+ addSpecifierMatches(changedUris, affected) {
238
+ const changedPaths = this.extractPathSegments(changedUris);
239
+ for (const [docUri, importInfoList] of this.documentImportInfo) {
240
+ if (!affected.has(docUri) && !changedUris.has(docUri)
241
+ && this.hasMatchingSpecifierOrResolvedUri(importInfoList, changedPaths)) {
242
+ affected.add(docUri);
123
243
  }
124
244
  }
125
- return false;
126
245
  }
127
246
  /**
128
247
  * Tracks import dependencies for a document.
@@ -148,36 +267,46 @@ export class DomainLangIndexManager extends DefaultIndexManager {
148
267
  for (const imp of model.imports) {
149
268
  if (!imp.uri)
150
269
  continue;
151
- try {
152
- const resolvedUri = await this.resolveImport(document, imp.uri);
153
- const importedUri = resolvedUri.toString();
154
- // Track the full import info (specifier, alias, resolved URI)
155
- importInfoList.push({
156
- specifier: imp.uri,
157
- alias: imp.alias,
158
- resolvedUri: importedUri
159
- });
160
- // Add to reverse dependency graph: importedUri → importingUri
161
- let dependents = this.importDependencies.get(importedUri);
162
- if (!dependents) {
163
- dependents = new Set();
164
- this.importDependencies.set(importedUri, dependents);
165
- }
166
- dependents.add(importingUri);
167
- }
168
- catch {
169
- // Import resolution failed - still track the specifier with empty resolution
170
- importInfoList.push({
171
- specifier: imp.uri,
172
- alias: imp.alias,
173
- resolvedUri: ''
174
- });
175
- }
270
+ const info = await this.resolveAndTrackImport(document, imp, importingUri);
271
+ importInfoList.push(info);
176
272
  }
177
273
  if (importInfoList.length > 0) {
178
274
  this.documentImportInfo.set(importingUri, importInfoList);
179
275
  }
180
276
  }
277
+ /**
278
+ * Resolves a single import and registers it in the reverse dependency graph.
279
+ * Falls back to searching loaded documents when the filesystem resolver fails.
280
+ */
281
+ async resolveAndTrackImport(document, imp, importingUri) {
282
+ const specifier = imp.uri ?? '';
283
+ try {
284
+ const resolvedUri = await this.resolveImport(document, specifier);
285
+ const importedUri = resolvedUri.toString();
286
+ this.addToDependencyGraph(importedUri, importingUri);
287
+ return { specifier, alias: imp.alias, resolvedUri: importedUri };
288
+ }
289
+ catch {
290
+ // Filesystem resolution failed (e.g., unsaved file, EmptyFileSystem).
291
+ // Try to find a loaded document whose URI path matches the specifier.
292
+ const matchedUri = this.findLoadedDocumentByPath(specifier, importingUri);
293
+ if (matchedUri) {
294
+ this.addToDependencyGraph(matchedUri, importingUri);
295
+ }
296
+ return { specifier, alias: imp.alias, resolvedUri: matchedUri };
297
+ }
298
+ }
299
+ /**
300
+ * Adds an edge to the reverse dependency graph: importedUri → importingUri.
301
+ */
302
+ addToDependencyGraph(importedUri, importingUri) {
303
+ let dependents = this.importDependencies.get(importedUri);
304
+ if (!dependents) {
305
+ dependents = new Set();
306
+ this.importDependencies.set(importedUri, dependents);
307
+ }
308
+ dependents.add(importingUri);
309
+ }
181
310
  /**
182
311
  * Ensures all imported documents are loaded and available.
183
312
  * This is called during indexing, BEFORE linking/validation,
@@ -237,10 +366,18 @@ export class DomainLangIndexManager extends DefaultIndexManager {
237
366
  * Called when a document is deleted.
238
367
  */
239
368
  removeImportDependencies(uri) {
240
- // Remove as an imported document
369
+ // Remove as an imported document (reverse graph entry)
241
370
  this.importDependencies.delete(uri);
242
- // Remove from all dependency sets (as an importer)
371
+ // Remove import info for this document (forward graph entry)
372
+ this.documentImportInfo.delete(uri);
373
+ // Remove from all dependency sets (as an importer of other files)
243
374
  this.removeDocumentFromDependencies(uri);
375
+ // Clean up PRS-017 caches
376
+ this.exportSnapshots.delete(uri);
377
+ this.changedExports.delete(uri);
378
+ this.detectedCycles.delete(uri);
379
+ // Invalidate the per-cycle cache since the graph changed
380
+ this.transitiveAffectedCache = undefined;
244
381
  }
245
382
  /**
246
383
  * Removes a document from all dependency sets.
@@ -259,6 +396,28 @@ export class DomainLangIndexManager extends DefaultIndexManager {
259
396
  this.importDependencies.clear();
260
397
  this.documentImportInfo.clear();
261
398
  this.importsLoaded.clear();
399
+ this.transitiveAffectedCache = undefined;
400
+ this.exportSnapshots.clear();
401
+ this.changedExports.clear();
402
+ this.detectedCycles.clear();
403
+ }
404
+ /**
405
+ * Fallback for import resolution: searches loaded documents for one whose
406
+ * URI path matches the import specifier. Used when the filesystem-based
407
+ * resolver fails (e.g., unsaved files, EmptyFileSystem in tests).
408
+ */
409
+ findLoadedDocumentByPath(specifier, excludeUri) {
410
+ const langiumDocuments = this.sharedServices.workspace.LangiumDocuments;
411
+ for (const doc of langiumDocuments.all) {
412
+ const docUri = doc.uri.toString();
413
+ if (docUri === excludeUri) {
414
+ continue;
415
+ }
416
+ if (doc.uri.path === specifier || doc.uri.path.endsWith(`/${specifier}`)) {
417
+ return docUri;
418
+ }
419
+ }
420
+ return '';
262
421
  }
263
422
  /**
264
423
  * Marks a document as needing import re-loading.
@@ -398,7 +557,11 @@ export class DomainLangIndexManager extends DefaultIndexManager {
398
557
  return affected;
399
558
  }
400
559
  /**
401
- * Checks if any specifier OR its resolved URI matches the changed paths.
560
+ * Checks if any specifier OR its resolved URI matches the changed paths (PRS-017 R4).
561
+ *
562
+ * Uses exact filename matching instead of substring matching to prevent
563
+ * false positives (e.g., changing `sales.dlang` should NOT trigger
564
+ * revalidation of a file importing `pre-sales.dlang`).
402
565
  *
403
566
  * This handles both regular imports and path aliases:
404
567
  * - Regular: `./domains/sales.dlang` matches path `sales.dlang`
@@ -409,20 +572,193 @@ export class DomainLangIndexManager extends DefaultIndexManager {
409
572
  */
410
573
  hasMatchingSpecifierOrResolvedUri(importInfoList, changedPaths) {
411
574
  for (const info of importInfoList) {
412
- const normalizedSpecifier = info.specifier.replace(/^[.@/]+/, '');
413
- for (const changedPath of changedPaths) {
414
- // Check the raw specifier (handles relative imports)
415
- if (info.specifier.includes(changedPath) || changedPath.endsWith(normalizedSpecifier)) {
416
- return true;
417
- }
418
- // Check the resolved URI (handles path aliases like @domains/...)
419
- // The resolved URI contains the full file path which matches moved files
420
- if (info.resolvedUri?.includes(changedPath)) {
421
- return true;
422
- }
575
+ if (this.matchesAnyChangedPath(info, changedPaths)) {
576
+ return true;
423
577
  }
424
578
  }
425
579
  return false;
426
580
  }
581
+ /**
582
+ * Checks if a single import info matches any of the changed paths.
583
+ * Extracted to reduce cognitive complexity of hasMatchingSpecifierOrResolvedUri.
584
+ */
585
+ matchesAnyChangedPath(info, changedPaths) {
586
+ for (const changedPath of changedPaths) {
587
+ if (this.matchesChangedPath(info, changedPath)) {
588
+ return true;
589
+ }
590
+ }
591
+ return false;
592
+ }
593
+ /**
594
+ * Checks if a single import info matches a single changed path.
595
+ */
596
+ matchesChangedPath(info, changedPath) {
597
+ const changedFileName = this.extractFileName(changedPath);
598
+ if (!changedFileName)
599
+ return false;
600
+ // Check the resolved URI first (most reliable — already normalized)
601
+ if (info.resolvedUri && this.matchesResolvedUri(info.resolvedUri, changedFileName, changedPath)) {
602
+ return true;
603
+ }
604
+ // Check the specifier (handles relative imports)
605
+ return this.matchesSpecifier(info.specifier, changedFileName, changedPath);
606
+ }
607
+ /**
608
+ * Checks if a resolved URI matches a changed path by exact filename comparison.
609
+ */
610
+ matchesResolvedUri(resolvedUri, changedFileName, changedPath) {
611
+ const resolvedFileName = this.extractFileName(resolvedUri);
612
+ if (resolvedFileName && changedFileName === resolvedFileName) {
613
+ return this.pathEndsWith(resolvedUri, changedPath);
614
+ }
615
+ return false;
616
+ }
617
+ /**
618
+ * Checks if an import specifier matches a changed path by exact filename comparison.
619
+ */
620
+ matchesSpecifier(specifier, changedFileName, changedPath) {
621
+ const specifierFileName = this.extractFileName(specifier);
622
+ if (specifierFileName && changedFileName === specifierFileName) {
623
+ const normalizedSpecifier = specifier.replace(/^[.@/]+/, '');
624
+ return this.pathEndsWith(changedPath, normalizedSpecifier) ||
625
+ this.pathEndsWith(normalizedSpecifier, changedPath);
626
+ }
627
+ return false;
628
+ }
629
+ /**
630
+ * Extracts the filename (without extension) from a path or URI string.
631
+ */
632
+ extractFileName(pathOrUri) {
633
+ // Handle URI paths and regular paths
634
+ const lastSlash = Math.max(pathOrUri.lastIndexOf('/'), pathOrUri.lastIndexOf('\\'));
635
+ const fileName = lastSlash >= 0 ? pathOrUri.slice(lastSlash + 1) : pathOrUri;
636
+ return fileName.replace(/\.dlang$/, '') || undefined;
637
+ }
638
+ /**
639
+ * Checks if longPath ends with shortPath, comparing path segments.
640
+ * Prevents substring false positives (e.g., "pre-sales" matching "sales").
641
+ */
642
+ pathEndsWith(longPath, shortPath) {
643
+ const normalizedLong = longPath.replaceAll('\\', '/').replace(/\.dlang$/, '');
644
+ const normalizedShort = shortPath.replaceAll('\\', '/').replace(/\.dlang$/, '');
645
+ return normalizedLong === normalizedShort ||
646
+ normalizedLong.endsWith(`/${normalizedShort}`);
647
+ }
648
+ // --- PRS-017 R2: Export-signature diffing ---
649
+ /**
650
+ * Captures a snapshot of exported symbol signatures for a document.
651
+ * Signature = "nodeType:qualifiedName" for each exported symbol.
652
+ * Used to detect whether a document's public interface actually changed.
653
+ */
654
+ captureExportSnapshot(uri) {
655
+ const descriptions = this.symbolIndex.get(uri) ?? [];
656
+ const signatures = new Set();
657
+ for (const desc of descriptions) {
658
+ signatures.add(`${desc.type}:${desc.name}`);
659
+ }
660
+ return signatures;
661
+ }
662
+ /**
663
+ * Checks if two sets of strings are equal (same size and same elements).
664
+ */
665
+ setsEqual(a, b) {
666
+ if (a.size !== b.size)
667
+ return false;
668
+ for (const item of a) {
669
+ if (!b.has(item))
670
+ return false;
671
+ }
672
+ return true;
673
+ }
674
+ /**
675
+ * Returns true if any of the changed URIs had their exports actually change.
676
+ * Used by isAffected() to skip transitive invalidation when only
677
+ * implementation details changed (e.g., editing a vision string).
678
+ */
679
+ anyExportsChanged(changedUris) {
680
+ for (const uri of changedUris) {
681
+ if (this.changedExports.has(uri)) {
682
+ return true;
683
+ }
684
+ }
685
+ return false;
686
+ }
687
+ // --- PRS-017 R3: Import cycle detection ---
688
+ /**
689
+ * Detects import cycles starting from a given document URI.
690
+ * Uses DFS with a recursion stack to find back-edges in the import graph.
691
+ * Stores detected cycles for reporting by ImportValidator.
692
+ */
693
+ detectAndStoreCycles(startUri) {
694
+ // Clear any previous cycle for this document
695
+ this.detectedCycles.delete(startUri);
696
+ const cycle = this.findCycle(startUri);
697
+ if (cycle) {
698
+ // Store the cycle for each participant (skip last element which is the
699
+ // duplicate that closes the cycle, e.g. [A, B, C, A] → store for A, B, C)
700
+ for (let i = 0; i < cycle.length - 1; i++) {
701
+ this.detectedCycles.set(cycle[i], cycle);
702
+ }
703
+ }
704
+ }
705
+ /**
706
+ * DFS to find a cycle in the forward import graph starting from startUri.
707
+ * Returns the cycle path (e.g., [A, B, C, A]) if found, undefined otherwise.
708
+ */
709
+ findCycle(startUri) {
710
+ const visited = new Set();
711
+ const stack = new Set();
712
+ const path = [];
713
+ const dfs = (uri) => {
714
+ if (stack.has(uri)) {
715
+ // Found cycle — extract the cycle path from the stack
716
+ const cycleStart = path.indexOf(uri);
717
+ return [...path.slice(cycleStart), uri];
718
+ }
719
+ if (visited.has(uri))
720
+ return undefined;
721
+ visited.add(uri);
722
+ stack.add(uri);
723
+ path.push(uri);
724
+ const imports = this.documentImportInfo.get(uri);
725
+ if (imports) {
726
+ for (const imp of imports) {
727
+ if (imp.resolvedUri) {
728
+ const cycle = dfs(imp.resolvedUri);
729
+ if (cycle)
730
+ return cycle;
731
+ }
732
+ }
733
+ }
734
+ stack.delete(uri);
735
+ path.pop();
736
+ return undefined;
737
+ };
738
+ return dfs(startUri);
739
+ }
740
+ /**
741
+ * Gets the detected import cycle for a document, if any.
742
+ * Returns the cycle path as an array of URIs, or undefined if no cycle.
743
+ * Used by ImportValidator to report cycle diagnostics (PRS-017 R3).
744
+ */
745
+ getCycleForDocument(uri) {
746
+ return this.detectedCycles.get(uri);
747
+ }
748
+ // --- PRS-017 R1: Targeted ImportResolver cache invalidation ---
749
+ /**
750
+ * Invalidates the ImportResolver cache for the changed document and its dependents.
751
+ * This provides surgical cache invalidation instead of clearing the entire cache.
752
+ */
753
+ invalidateImportResolverCache(changedUri) {
754
+ if (!this.importResolver)
755
+ return;
756
+ const affectedUris = [changedUri];
757
+ const dependents = this.importDependencies.get(changedUri);
758
+ if (dependents) {
759
+ affectedUris.push(...dependents);
760
+ }
761
+ this.importResolver.invalidateForDocuments(affectedUris);
762
+ }
427
763
  }
428
764
  //# sourceMappingURL=domain-lang-index-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"domain-lang-index-manager.js","sourceRoot":"","sources":["../../src/lsp/domain-lang-index-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAM7D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,sBAAuB,SAAQ,mBAAmB;IAkC3D,YAAY,QAAmC;QAC3C,KAAK,CAAC,QAAQ,CAAC,CAAC;QAlCpB;;;;WAIG;QACc,uBAAkB,GAAG,IAAI,GAAG,EAAuB,CAAC;QAErE;;;;;WAKG;QACc,uBAAkB,GAAG,IAAI,GAAG,EAAwB,CAAC;QAEtE;;;WAGG;QACc,kBAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAgB/C,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;IACnC,CAAC;IAED;;;;;;OAMG;IACH,mBAAmB,CAAC,QAA4B;QAC5C,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,aAAa,CAAC,QAAyB,EAAE,SAAiB;QACpE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvE,CAAC;QACD,2EAA2E;QAC3E,OAAO,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;OAOG;IACM,KAAK,CAAC,aAAa,CAAC,QAAyB,EAAE,WAAW,GAAG,iBAAiB,CAAC,IAAI;QACxF,0CAA0C;QAC1C,MAAM,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEjD,yDAAyD;QACzD,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACM,MAAM,CAAC,GAAQ;QACpB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACM,aAAa,CAAC,GAAQ;QAC3B,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;OAMG;IACM,UAAU,CAAC,QAAyB,EAAE,WAAwB;QACnE,kDAAkD;QAClD,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,qCAAqC;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACvC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3D,IAAI,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,uBAAuB,CAAC,QAAyB;QAC3D,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAE7C,oDAAoD;QACpD,4BAA4B;QAC5B,IAAI,CAAC,8BAA8B,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAE7C,iDAAiD;QACjD,IAAI,QAAQ,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;YACxC,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAyB,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QAED,MAAM,cAAc,GAAiB,EAAE,CAAC;QAExC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,GAAG;gBAAE,SAAS;YAEvB,IAAI,CAAC;gBACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChE,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAE3C,8DAA8D;gBAC9D,cAAc,CAAC,IAAI,CAAC;oBAChB,SAAS,EAAE,GAAG,CAAC,GAAG;oBAClB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,WAAW,EAAE,WAAW;iBAC3B,CAAC,CAAC;gBAEH,8DAA8D;gBAC9D,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;oBACd,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;oBACvB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;gBACzD,CAAC;gBACD,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACL,6EAA6E;gBAC7E,cAAc,CAAC,IAAI,CAAC;oBAChB,SAAS,EAAE,GAAG,CAAC,GAAG;oBAClB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,WAAW,EAAE,EAAE;iBAClB,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,mBAAmB,CAAC,QAAyB;QACvD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAE1C,sEAAsE;QACtE,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,OAAO;QACX,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAElC,iDAAiD;QACjD,IAAI,QAAQ,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;YACxC,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAyB,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO;QACX,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,gBAAgB,CAAC;QACxE,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,eAAe,CAAC;QACtE,MAAM,OAAO,GAAsB,EAAE,CAAC;QAEtC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,GAAG;gBAAE,SAAS;YAEvB,IAAI,CAAC;gBACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChE,MAAM,iBAAiB,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAEjD,yBAAyB;gBACzB,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;oBAC5C,SAAS;gBACb,CAAC;gBAED,uCAAuC;gBACvC,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;gBAE5E,8DAA8D;gBAC9D,6DAA6D;gBAC7D,2DAA2D;gBAC3D,IAAI,WAAW,CAAC,KAAK,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;oBAC9C,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC9B,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,8DAA8D;YAClE,CAAC;QACL,CAAC;QAED,0DAA0D;QAC1D,mEAAmE;QACnE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,wBAAwB,CAAC,GAAW;QACxC,iCAAiC;QACjC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEpC,mDAAmD;QACnD,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACK,8BAA8B,CAAC,GAAW;QAC9C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,uBAAuB;QACnB,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,mBAAmB,CAAC,GAAW;QAC3B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;;;;;OAMG;IACH,qBAAqB,CAAC,GAAW;QAC7B,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;IACzD,CAAC;IAED;;;;;;OAMG;IACH,kBAAkB,CAAC,WAAmB;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChE,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO,IAAI,GAAG,EAAE,CAAC;QACrB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAChC,gEAAgE;YAChE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;OAMG;IACH,aAAa,CAAC,WAAmB;QAC7B,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC1D,CAAC;IAED;;;;;;OAMG;IACH,uBAAuB,CAAC,WAA6B;QACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,MAAM,SAAS,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;QAEnC,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACP,SAAS;YACb,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,UAAU,EAAE,CAAC;gBACb,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;oBAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACrB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAClB,mCAAmC;wBACnC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACxB,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;;;;OASG;IACH,0CAA0C,CAAC,WAA6B;QACpE,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAsB;QAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAEhC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,GAAW,EAAE,KAAkB;QAC1D,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEpE,eAAe;YACf,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,QAAQ,EAAE,CAAC;gBACX,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;YAED,kCAAkC;YAClC,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7C,CAAC;YAED,8CAA8C;YAC9C,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,oBAAoB;QACxB,CAAC;IACL,CAAC;IAED;;OAEG;IACK,0BAA0B,CAAC,YAAyB;QACxD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QAEnC,KAAK,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7D,IAAI,IAAI,CAAC,iCAAiC,CAAC,cAAc,EAAE,YAAY,CAAC,EAAE,CAAC;gBACvE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;;;;OASG;IACK,iCAAiC,CAAC,cAA4B,EAAE,YAAyB;QAC7F,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAChC,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAElE,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;gBACrC,qDAAqD;gBACrD,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBACpF,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAED,kEAAkE;gBAClE,yEAAyE;gBACzE,IAAI,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC1C,OAAO,IAAI,CAAC;gBAChB,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
1
+ {"version":3,"file":"domain-lang-index-manager.js","sourceRoot":"","sources":["../../src/lsp/domain-lang-index-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { LangiumSharedServices } from 'langium/lsp';
2
+ import { FileChangeType, type DidChangeWatchedFilesParams } from 'vscode-languageserver-protocol';
3
+ import type { DomainLangServices } from '../domain-lang-module.js';
4
+ export interface DomainLangRefreshHooks {
5
+ onManifestChanged?: (change: {
6
+ uri: string;
7
+ type: FileChangeType;
8
+ }) => Promise<void> | void;
9
+ onManifestDeleted?: (uri: string) => Promise<void> | void;
10
+ }
11
+ export interface DomainLangRefreshOptions {
12
+ dedupeWindowMs?: number;
13
+ }
14
+ export interface RefreshOutcome {
15
+ readonly configChanged: boolean;
16
+ readonly fullRebuildTriggered: boolean;
17
+ }
18
+ export declare function registerDomainLangRefresh(shared: LangiumSharedServices, domainLang: DomainLangServices, hooks?: DomainLangRefreshHooks, options?: DomainLangRefreshOptions): {
19
+ dispose(): void;
20
+ };
21
+ /**
22
+ * Processes watched file change events.
23
+ *
24
+ * **Architecture:**
25
+ * - `.dlang` changes are handled entirely by Langium's own `DocumentBuilder.update()`
26
+ * pipeline. `DomainLangIndexManager.isAffected()` provides transitive import
27
+ * dependency tracking and specifier-sensitive matching, so Langium's single
28
+ * `update()` call propagates changes correctly through the import graph.
29
+ *
30
+ * - Config changes (model.yaml, model.lock) need explicit handling because Langium
31
+ * ignores non-language files (they have no LangiumDocument). Config changes
32
+ * invalidate caches and trigger a full rebuild of all loaded documents, routed
33
+ * through the workspace lock to serialize with Langium's own updates.
34
+ */
35
+ export declare function processWatchedFileChanges(params: DidChangeWatchedFilesParams, shared: LangiumSharedServices, domainLang: DomainLangServices, hooks?: DomainLangRefreshHooks): Promise<RefreshOutcome>;