@domainlang/language 0.9.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 (81) 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 +4 -0
  6. package/out/index.js +4 -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/lsp/explain.d.ts +18 -0
  20. package/out/lsp/explain.js +138 -0
  21. package/out/lsp/explain.js.map +1 -0
  22. package/out/lsp/tool-handlers.d.ts +113 -0
  23. package/out/lsp/tool-handlers.js +297 -0
  24. package/out/lsp/tool-handlers.js.map +1 -0
  25. package/out/main.js +33 -190
  26. package/out/main.js.map +1 -1
  27. package/out/sdk/index.d.ts +2 -0
  28. package/out/sdk/index.js +2 -0
  29. package/out/sdk/index.js.map +1 -1
  30. package/out/sdk/loader-node.js +1 -1
  31. package/out/sdk/loader-node.js.map +1 -1
  32. package/out/sdk/serializers.d.ts +110 -0
  33. package/out/sdk/serializers.js +158 -0
  34. package/out/sdk/serializers.js.map +1 -0
  35. package/out/sdk/validator.js +17 -14
  36. package/out/sdk/validator.js.map +1 -1
  37. package/out/services/import-resolver.d.ts +67 -17
  38. package/out/services/import-resolver.js +146 -65
  39. package/out/services/import-resolver.js.map +1 -1
  40. package/out/services/lsp-logger.d.ts +42 -0
  41. package/out/services/lsp-logger.js +50 -0
  42. package/out/services/lsp-logger.js.map +1 -0
  43. package/out/services/lsp-runtime-settings.d.ts +20 -0
  44. package/out/services/lsp-runtime-settings.js +20 -0
  45. package/out/services/lsp-runtime-settings.js.map +1 -0
  46. package/out/services/performance-optimizer.d.ts +9 -9
  47. package/out/services/performance-optimizer.js +17 -41
  48. package/out/services/performance-optimizer.js.map +1 -1
  49. package/out/services/workspace-manager.d.ts +22 -1
  50. package/out/services/workspace-manager.js +57 -9
  51. package/out/services/workspace-manager.js.map +1 -1
  52. package/out/utils/import-utils.js +6 -6
  53. package/out/utils/import-utils.js.map +1 -1
  54. package/out/validation/constants.d.ts +6 -0
  55. package/out/validation/constants.js +7 -0
  56. package/out/validation/constants.js.map +1 -1
  57. package/out/validation/import.d.ts +13 -3
  58. package/out/validation/import.js +54 -10
  59. package/out/validation/import.js.map +1 -1
  60. package/package.json +1 -1
  61. package/src/domain-lang-module.ts +3 -3
  62. package/src/index.ts +4 -0
  63. package/src/lsp/domain-lang-completion.ts +3 -3
  64. package/src/lsp/domain-lang-index-manager.ts +438 -56
  65. package/src/lsp/domain-lang-refresh.ts +205 -0
  66. package/src/lsp/domain-lang-workspace-manager.ts +45 -0
  67. package/src/lsp/explain.ts +172 -0
  68. package/src/lsp/tool-handlers.ts +443 -0
  69. package/src/main.ts +40 -244
  70. package/src/sdk/index.ts +11 -0
  71. package/src/sdk/loader-node.ts +1 -1
  72. package/src/sdk/serializers.ts +213 -0
  73. package/src/sdk/validator.ts +17 -13
  74. package/src/services/import-resolver.ts +196 -89
  75. package/src/services/lsp-logger.ts +89 -0
  76. package/src/services/lsp-runtime-settings.ts +34 -0
  77. package/src/services/performance-optimizer.ts +18 -57
  78. package/src/services/workspace-manager.ts +62 -10
  79. package/src/utils/import-utils.ts +6 -6
  80. package/src/validation/constants.ts +9 -0
  81. package/src/validation/import.ts +67 -12
@@ -0,0 +1,297 @@
1
+ /**
2
+ * LSP Custom Request Handlers for VS Code Language Model Tools (PRS-015)
3
+ *
4
+ * These handlers respond to custom LSP requests from the VS Code extension
5
+ * and return serialized model data suitable for Language Model Tools.
6
+ *
7
+ * Architecture:
8
+ * - Extension calls `client.sendRequest('domainlang/validate', params)`
9
+ * - LSP receives via `connection.onRequest('domainlang/validate', handler)`
10
+ * - Handler uses SDK `fromServices()` for zero-copy AST access
11
+ * - Handler returns plain JSON (no circular refs, no class instances)
12
+ *
13
+ * @module lsp/tool-handlers
14
+ */
15
+ import { URI } from 'langium';
16
+ import { fromDocument } from '../sdk/query.js';
17
+ import { serializeNode, serializeRelationship, normalizeEntityType, } from '../sdk/serializers.js';
18
+ import { generateExplanation } from './explain.js';
19
+ // ─────────────────────────────────────────────────────────────────────────────
20
+ // Handler Registration
21
+ // ─────────────────────────────────────────────────────────────────────────────
22
+ /**
23
+ * Registers all custom request handlers on the LSP connection.
24
+ * Call this from main.ts after creating the connection.
25
+ *
26
+ * @param connection - LSP connection
27
+ * @param sharedServices - Langium shared services for workspace access
28
+ */
29
+ export function registerToolHandlers(connection, sharedServices) {
30
+ connection.onRequest('domainlang/validate', async (params) => {
31
+ return handleValidate(params, sharedServices);
32
+ });
33
+ connection.onRequest('domainlang/list', async (params) => {
34
+ return handleList(params, sharedServices);
35
+ });
36
+ connection.onRequest('domainlang/get', async (params) => {
37
+ return handleGet(params, sharedServices);
38
+ });
39
+ connection.onRequest('domainlang/explain', async (params) => {
40
+ return handleExplain(params, sharedServices);
41
+ });
42
+ }
43
+ // ─────────────────────────────────────────────────────────────────────────────
44
+ // Handler Implementations
45
+ // ─────────────────────────────────────────────────────────────────────────────
46
+ /**
47
+ * Handles domainlang/validate requests.
48
+ * Aggregates all validation diagnostics from the workspace.
49
+ */
50
+ async function handleValidate(params, sharedServices) {
51
+ try {
52
+ const langiumDocs = sharedServices.workspace.LangiumDocuments;
53
+ const documents = params.file
54
+ ? [langiumDocs.getDocument(URI.parse(params.file))]
55
+ : Array.from(langiumDocs.all);
56
+ const errors = [];
57
+ const warnings = [];
58
+ const info = [];
59
+ for (const doc of documents) {
60
+ if (!doc)
61
+ continue;
62
+ const diagnostics = doc.diagnostics ?? [];
63
+ for (const diag of diagnostics) {
64
+ const diagInfo = {
65
+ file: doc.uri.toString(),
66
+ line: diag.range.start.line + 1, // 1-indexed
67
+ column: diag.range.start.character + 1, // 1-indexed
68
+ message: diag.message,
69
+ severity: severityToString(diag.severity ?? 1),
70
+ code: diag.code,
71
+ };
72
+ if (diag.severity === 1) {
73
+ errors.push(diagInfo);
74
+ }
75
+ else if (diag.severity === 2) {
76
+ warnings.push(diagInfo);
77
+ }
78
+ else {
79
+ info.push(diagInfo);
80
+ }
81
+ }
82
+ }
83
+ return {
84
+ count: errors.length + warnings.length + info.length,
85
+ diagnostics: { errors, warnings, info },
86
+ };
87
+ }
88
+ catch (error) {
89
+ console.error('domainlang/validate handler error:', error);
90
+ return { count: 0, diagnostics: { errors: [], warnings: [], info: [] } };
91
+ }
92
+ }
93
+ /**
94
+ * Handles domainlang/list requests.
95
+ * Queries entities of a specific type and returns serialized results.
96
+ */
97
+ async function handleList(params, sharedServices) {
98
+ try {
99
+ const entityType = normalizeEntityType(params.type);
100
+ const filters = params.filters ?? {};
101
+ // Get all documents and merge results
102
+ const langiumDocs = sharedServices.workspace.LangiumDocuments;
103
+ const documents = Array.from(langiumDocs.all);
104
+ const allResults = [];
105
+ const seen = new Set(); // Deduplicate by FQN
106
+ for (const doc of documents) {
107
+ const query = fromDocument(doc);
108
+ const results = executeListQuery(query, entityType, filters);
109
+ for (const result of results) {
110
+ const fqn = result.fqn;
111
+ if (fqn && seen.has(fqn))
112
+ continue;
113
+ if (fqn)
114
+ seen.add(fqn);
115
+ allResults.push(result);
116
+ }
117
+ }
118
+ return {
119
+ entityType,
120
+ count: allResults.length,
121
+ results: allResults,
122
+ };
123
+ }
124
+ catch (error) {
125
+ console.error('domainlang/list handler error:', error);
126
+ return { entityType: normalizeEntityType(params.type), count: 0, results: [] };
127
+ }
128
+ }
129
+ /**
130
+ * Handles domainlang/get requests.
131
+ * Retrieves a single element by FQN or returns a model summary.
132
+ */
133
+ async function handleGet(params, sharedServices) {
134
+ try {
135
+ if (params.summary) {
136
+ return { result: await getModelSummary(sharedServices) };
137
+ }
138
+ if (!params.fqn) {
139
+ return { result: null };
140
+ }
141
+ // Search all documents for the element
142
+ const langiumDocs = sharedServices.workspace.LangiumDocuments;
143
+ const documents = Array.from(langiumDocs.all);
144
+ for (const doc of documents) {
145
+ const query = fromDocument(doc);
146
+ const element = query.byFqn(params.fqn);
147
+ if (element) {
148
+ return { result: serializeNode(element, query) };
149
+ }
150
+ }
151
+ return { result: null };
152
+ }
153
+ catch (error) {
154
+ console.error('domainlang/get handler error:', error);
155
+ return { result: null };
156
+ }
157
+ }
158
+ /**
159
+ * Handles domainlang/explain requests.
160
+ * Returns rich markdown explanation of a model element.
161
+ */
162
+ async function handleExplain(params, sharedServices) {
163
+ try {
164
+ const langiumDocs = sharedServices.workspace.LangiumDocuments;
165
+ const documents = Array.from(langiumDocs.all);
166
+ for (const doc of documents) {
167
+ const query = fromDocument(doc);
168
+ const element = query.byFqn(params.fqn);
169
+ if (element) {
170
+ const explanation = generateExplanation(element);
171
+ return { explanation };
172
+ }
173
+ }
174
+ return {
175
+ explanation: `Element not found: ${params.fqn}`,
176
+ };
177
+ }
178
+ catch (error) {
179
+ console.error('domainlang/explain handler error:', error);
180
+ return { explanation: `Error explaining element: ${params.fqn}` };
181
+ }
182
+ }
183
+ // ─────────────────────────────────────────────────────────────────────────────
184
+ // Helper Functions
185
+ // ─────────────────────────────────────────────────────────────────────────────
186
+ /**
187
+ * Executes a list query for a specific entity type.
188
+ */
189
+ function executeListQuery(query, entityType, filters) {
190
+ switch (entityType) {
191
+ case 'domains': {
192
+ let builder = query.domains();
193
+ if (filters.name)
194
+ builder = builder.withName(filters.name);
195
+ if (filters.fqn)
196
+ builder = builder.withFqn(filters.fqn);
197
+ return builder.toArray().map((d) => serializeNode(d, query));
198
+ }
199
+ case 'bcs': {
200
+ let builder = query.boundedContexts();
201
+ if (filters.domain)
202
+ builder = builder.inDomain(filters.domain);
203
+ if (filters.team)
204
+ builder = builder.withTeam(filters.team);
205
+ if (filters.classification)
206
+ builder = builder.withClassification(filters.classification);
207
+ if (filters.metadata) {
208
+ const [key, value] = filters.metadata.split('=');
209
+ builder = builder.withMetadata(key, value);
210
+ }
211
+ if (filters.name)
212
+ builder = builder.withName(filters.name);
213
+ if (filters.fqn)
214
+ builder = builder.withFqn(filters.fqn);
215
+ return builder.toArray().map((bc) => serializeNode(bc, query));
216
+ }
217
+ case 'teams': {
218
+ let builder = query.teams();
219
+ if (filters.name)
220
+ builder = builder.withName(filters.name);
221
+ return builder.toArray().map((t) => serializeNode(t, query));
222
+ }
223
+ case 'classifications': {
224
+ let builder = query.classifications();
225
+ if (filters.name)
226
+ builder = builder.withName(filters.name);
227
+ return builder.toArray().map((c) => serializeNode(c, query));
228
+ }
229
+ case 'relationships': {
230
+ const rels = query.relationships().toArray();
231
+ return rels.map((r) => serializeRelationship(r));
232
+ }
233
+ case 'context-maps': {
234
+ let builder = query.contextMaps();
235
+ if (filters.name)
236
+ builder = builder.withName(filters.name);
237
+ return builder.toArray().map((cm) => serializeNode(cm, query));
238
+ }
239
+ case 'domain-maps': {
240
+ let builder = query.domainMaps();
241
+ if (filters.name)
242
+ builder = builder.withName(filters.name);
243
+ return builder.toArray().map((dm) => serializeNode(dm, query));
244
+ }
245
+ default:
246
+ return [];
247
+ }
248
+ }
249
+ /**
250
+ * Generates a model summary with counts of major entities.
251
+ */
252
+ async function getModelSummary(sharedServices) {
253
+ const langiumDocs = sharedServices.workspace.LangiumDocuments;
254
+ const documents = Array.from(langiumDocs.all);
255
+ let domains = 0;
256
+ let bcs = 0;
257
+ let teams = 0;
258
+ let classifications = 0;
259
+ let relationships = 0;
260
+ let contextMaps = 0;
261
+ let domainMaps = 0;
262
+ for (const doc of documents) {
263
+ const query = fromDocument(doc);
264
+ domains += query.domains().count();
265
+ bcs += query.boundedContexts().count();
266
+ teams += query.teams().count();
267
+ classifications += query.classifications().count();
268
+ relationships += query.relationships().count();
269
+ contextMaps += query.contextMaps().count();
270
+ domainMaps += query.domainMaps().count();
271
+ }
272
+ return {
273
+ $type: 'ModelSummary',
274
+ documentCount: documents.length,
275
+ domains,
276
+ boundedContexts: bcs,
277
+ teams,
278
+ classifications,
279
+ relationships,
280
+ contextMaps,
281
+ domainMaps,
282
+ };
283
+ }
284
+ /**
285
+ * Converts diagnostic severity number to string.
286
+ */
287
+ function severityToString(severity) {
288
+ switch (severity) {
289
+ case 1:
290
+ return 'error';
291
+ case 2:
292
+ return 'warning';
293
+ default:
294
+ return 'info';
295
+ }
296
+ }
297
+ //# sourceMappingURL=tool-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-handlers.js","sourceRoot":"","sources":["../../src/lsp/tool-handlers.ts"],"names":[],"mappings":"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"}
package/out/main.js CHANGED
@@ -1,13 +1,24 @@
1
1
  import { startLanguageServer } from 'langium/lsp';
2
2
  import { NodeFileSystem } from 'langium/node';
3
- import { createConnection, ProposedFeatures, FileChangeType } from 'vscode-languageserver/node.js';
3
+ import { createConnection, ProposedFeatures } from 'vscode-languageserver/node.js';
4
4
  import { createDomainLangServices } from './domain-lang-module.js';
5
5
  import { ensureImportGraphFromEntryFile } from './utils/import-utils.js';
6
+ import { registerDomainLangRefresh } from './lsp/domain-lang-refresh.js';
7
+ import { registerToolHandlers } from './lsp/tool-handlers.js';
6
8
  import { URI } from 'langium';
9
+ import { setLspRuntimeSettings } from './services/lsp-runtime-settings.js';
7
10
  // Create a connection to the client
8
11
  const connection = createConnection(ProposedFeatures.all);
9
12
  // Inject the shared services and language-specific services
10
13
  const { shared, DomainLang } = createDomainLangServices({ connection, ...NodeFileSystem });
14
+ // Register custom LSP request handlers for VS Code Language Model Tools (PRS-015)
15
+ registerToolHandlers(connection, shared);
16
+ shared.lsp.LanguageServer.onInitialize((params) => {
17
+ applyLspSettings(params.initializationOptions);
18
+ });
19
+ connection.onDidChangeConfiguration((params) => {
20
+ applyLspSettings(params.settings);
21
+ });
11
22
  // Initialize workspace manager when language server initializes
12
23
  // Uses Langium's LanguageServer.onInitialize hook (not raw connection handler)
13
24
  // This integrates properly with Langium's initialization flow
@@ -20,7 +31,7 @@ shared.lsp.LanguageServer.onInitialize((params) => {
20
31
  if (workspaceRoot) {
21
32
  // Initialize workspace manager synchronously (just sets root path)
22
33
  // Heavy work happens in initializeWorkspace() called by Langium later
23
- const workspaceManager = DomainLang.imports.WorkspaceManager;
34
+ const workspaceManager = DomainLang.imports.ManifestManager;
24
35
  workspaceManager.initialize(workspaceRoot).catch(error => {
25
36
  const message = error instanceof Error ? error.message : String(error);
26
37
  console.warn(`Failed to initialize workspace: ${message}`);
@@ -29,194 +40,7 @@ shared.lsp.LanguageServer.onInitialize((params) => {
29
40
  console.warn(`DomainLang workspace root: ${workspaceRoot}`);
30
41
  }
31
42
  });
32
- // Handle file changes for model.yaml and model.lock (PRS-010)
33
- // Uses Langium's built-in file watcher which already watches **/* in workspace
34
- // This invalidates caches when config files change externally
35
- shared.lsp.DocumentUpdateHandler?.onWatchedFilesChange(async (params) => {
36
- try {
37
- await handleFileChanges(params, DomainLang.imports.WorkspaceManager, shared, DomainLang);
38
- }
39
- catch (error) {
40
- const message = error instanceof Error ? error.message : String(error);
41
- console.error(`Error handling file change notification: ${message}`);
42
- // Continue - don't crash the server
43
- }
44
- });
45
- /**
46
- * Categorizes file changes by type.
47
- */
48
- function categorizeChanges(params, workspaceManager, langServices, indexManager) {
49
- const result = {
50
- manifestChanged: false,
51
- lockFileChanged: false,
52
- changedDlangUris: new Set(),
53
- deletedDlangUris: new Set(),
54
- createdDlangUris: new Set()
55
- };
56
- for (const change of params.changes) {
57
- const uri = URI.parse(change.uri);
58
- const fileName = uri.path.split('/').pop() ?? '';
59
- const uriString = change.uri;
60
- if (fileName === 'model.yaml') {
61
- console.warn(`model.yaml changed: ${uriString}`);
62
- workspaceManager.invalidateManifestCache();
63
- langServices.imports.ImportResolver.clearCache();
64
- indexManager.clearImportDependencies();
65
- result.manifestChanged = true;
66
- }
67
- else if (fileName === 'model.lock') {
68
- console.warn(`model.lock changed: ${uriString}`);
69
- langServices.imports.ImportResolver.clearCache();
70
- indexManager.clearImportDependencies();
71
- result.lockFileChanged = true;
72
- }
73
- else if (fileName.endsWith('.dlang')) {
74
- if (change.type === FileChangeType.Deleted) {
75
- result.deletedDlangUris.add(uriString);
76
- console.warn(`DomainLang file deleted: ${uriString}`);
77
- }
78
- else if (change.type === FileChangeType.Created) {
79
- result.createdDlangUris.add(uriString);
80
- console.warn(`DomainLang file created: ${uriString}`);
81
- }
82
- else {
83
- result.changedDlangUris.add(uriString);
84
- console.warn(`DomainLang file changed: ${uriString}`);
85
- }
86
- }
87
- }
88
- return result;
89
- }
90
- /**
91
- * Rebuilds documents that depend on changed/deleted/created .dlang files.
92
- */
93
- async function rebuildAffectedDocuments(changes, indexManager, sharedServices, langServices) {
94
- const hasChanges = changes.changedDlangUris.size > 0 ||
95
- changes.deletedDlangUris.size > 0 ||
96
- changes.createdDlangUris.size > 0;
97
- if (!hasChanges) {
98
- return;
99
- }
100
- // CRITICAL: Clear ImportResolver cache BEFORE rebuilding.
101
- // The WorkspaceCache only clears AFTER linking, but resolution happens
102
- // DURING linking. Without this, stale cached resolutions would be used.
103
- langServices.imports.ImportResolver.clearCache();
104
- const affectedUris = collectAffectedDocuments(changes, indexManager);
105
- if (affectedUris.size === 0) {
106
- return;
107
- }
108
- console.warn(`Rebuilding ${affectedUris.size} documents affected by file changes`);
109
- const langiumDocuments = sharedServices.workspace.LangiumDocuments;
110
- const affectedDocs = [];
111
- for (const uriString of affectedUris) {
112
- const uri = URI.parse(uriString);
113
- if (langiumDocuments.hasDocument(uri)) {
114
- affectedDocs.push(uri);
115
- indexManager.markForReprocessing(uriString);
116
- }
117
- }
118
- const deletedUriObjects = [...changes.deletedDlangUris].map(u => URI.parse(u));
119
- if (affectedDocs.length > 0 || deletedUriObjects.length > 0) {
120
- await sharedServices.workspace.DocumentBuilder.update(affectedDocs, deletedUriObjects);
121
- }
122
- }
123
- /**
124
- * Collects all document URIs that should be rebuilt based on the changes.
125
- *
126
- * Uses targeted matching to avoid expensive full rebuilds:
127
- * - For edits: rebuild documents that import the changed file (by resolved URI)
128
- * - For all changes: rebuild documents whose import specifiers match the path
129
- *
130
- * The specifier matching handles renamed/moved/created files by comparing
131
- * import specifiers against path segments (filename, parent/filename, etc.).
132
- */
133
- function collectAffectedDocuments(changes, indexManager) {
134
- const allChangedUris = new Set([
135
- ...changes.changedDlangUris,
136
- ...changes.deletedDlangUris,
137
- ...changes.createdDlangUris
138
- ]);
139
- // Get documents affected by resolved URI changes (edits to imported files)
140
- const affectedByUri = indexManager.getAllAffectedDocuments(allChangedUris);
141
- // Get documents with import specifiers that match changed paths
142
- // This catches:
143
- // - File moves/renames: specifiers that previously resolved but now won't
144
- // - File creations: specifiers that previously failed but might now resolve
145
- // Uses fuzzy matching on path segments rather than rebuilding all imports
146
- const affectedBySpecifier = indexManager.getDocumentsWithPotentiallyAffectedImports(allChangedUris);
147
- return new Set([...affectedByUri, ...affectedBySpecifier]);
148
- }
149
- /**
150
- * Handles all file changes including .dlang files, model.yaml, and model.lock.
151
- *
152
- * For .dlang files: rebuilds all documents that import the changed file.
153
- * For config files: invalidates caches and rebuilds workspace as needed.
154
- */
155
- async function handleFileChanges(params, workspaceManager, sharedServices, langServices) {
156
- const indexManager = sharedServices.workspace.IndexManager;
157
- // Categorize and process changes
158
- const changes = categorizeChanges(params, workspaceManager, langServices, indexManager);
159
- // Handle lock file changes
160
- if (changes.lockFileChanged) {
161
- const lockChange = params.changes.find(c => c.uri.endsWith('model.lock'));
162
- if (lockChange) {
163
- await handleLockFileChange(lockChange, workspaceManager);
164
- }
165
- }
166
- // Rebuild documents affected by .dlang file changes
167
- await rebuildAffectedDocuments(changes, indexManager, sharedServices, langServices);
168
- // Handle config file changes
169
- if (changes.manifestChanged || changes.lockFileChanged) {
170
- await rebuildWorkspace(sharedServices, workspaceManager, changes.manifestChanged);
171
- }
172
- }
173
- /**
174
- * Handles lock file creation, change, or deletion.
175
- */
176
- async function handleLockFileChange(change, workspaceManager) {
177
- if (change.type === FileChangeType.Changed || change.type === FileChangeType.Created) {
178
- await workspaceManager.refreshLockFile();
179
- }
180
- else if (change.type === FileChangeType.Deleted) {
181
- workspaceManager.invalidateLockCache();
182
- }
183
- }
184
- /**
185
- * Rebuilds the workspace after config file changes.
186
- * Uses incremental strategy: only full rebuild if dependencies changed.
187
- *
188
- * @param sharedServices - Shared Langium services
189
- * @param workspaceManager - Workspace manager for manifest access
190
- * @param manifestChanged - Whether model.yaml changed (vs just model.lock)
191
- */
192
- async function rebuildWorkspace(sharedServices, workspaceManager, manifestChanged) {
193
- try {
194
- // If only lock file changed, caches are already invalidated - no rebuild needed
195
- // Lock file changes mean resolved versions changed, but import resolver cache is cleared
196
- // Documents will re-resolve imports on next access
197
- if (!manifestChanged) {
198
- console.warn('Lock file changed - caches invalidated, no rebuild needed');
199
- return;
200
- }
201
- // For manifest changes, check if dependencies section actually changed
202
- // If only metadata changed (name, version, etc.), no rebuild needed
203
- const manifest = await workspaceManager.getManifest();
204
- const hasDependencies = manifest?.dependencies && Object.keys(manifest.dependencies).length > 0;
205
- if (!hasDependencies) {
206
- console.warn('Manifest changed but has no dependencies - skipping rebuild');
207
- return;
208
- }
209
- // Dependencies exist and manifest changed - do full rebuild
210
- const documents = sharedServices.workspace.LangiumDocuments.all.toArray();
211
- const uris = documents.map(doc => doc.uri);
212
- await sharedServices.workspace.DocumentBuilder.update([], uris);
213
- console.warn(`Workspace rebuilt: ${documents.length} documents revalidated`);
214
- }
215
- catch (error) {
216
- const message = error instanceof Error ? error.message : String(error);
217
- console.error(`Failed to rebuild workspace: ${message}`);
218
- }
219
- }
43
+ registerDomainLangRefresh(shared, DomainLang);
220
44
  // Optionally start from a single entry file and follow imports.
221
45
  // Configure via env DOMAINLANG_ENTRY (absolute or workspace-relative path)
222
46
  const entryFile = process.env.DOMAINLANG_ENTRY;
@@ -259,4 +83,23 @@ else {
259
83
  // No entry file configured: start normally
260
84
  startLanguageServer(shared);
261
85
  }
86
+ function applyLspSettings(settings) {
87
+ const lsp = extractLspSettings(settings);
88
+ setLspRuntimeSettings({
89
+ traceImports: lsp.traceImports,
90
+ infoLogs: lsp.infoLogs,
91
+ });
92
+ }
93
+ function extractLspSettings(source) {
94
+ const root = isRecord(source) ? source : {};
95
+ const domainlang = isRecord(root.domainlang) ? root.domainlang : root;
96
+ const lsp = isRecord(domainlang.lsp) ? domainlang.lsp : {};
97
+ return {
98
+ traceImports: typeof lsp.traceImports === 'boolean' ? lsp.traceImports : false,
99
+ infoLogs: typeof lsp.infoLogs === 'boolean' ? lsp.infoLogs : false,
100
+ };
101
+ }
102
+ function isRecord(value) {
103
+ return typeof value === 'object' && value !== null;
104
+ }
262
105
  //# sourceMappingURL=main.js.map
package/out/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -109,6 +109,8 @@ export { fromModel, fromDocument, fromServices, augmentModel } from './query.js'
109
109
  export { Pattern, PatternFullName, PatternAliases, matchesPattern, isUpstreamPattern, isDownstreamPattern, isMutualPattern, UpstreamPatterns, DownstreamPatterns, MutualPatterns, } from './patterns.js';
110
110
  export type { IntegrationPattern } from './patterns.js';
111
111
  export type { Query, QueryBuilder, QueryContext, LoadOptions, BcQueryBuilder, RelationshipView, } from './types.js';
112
+ export { serializeNode, serializeRelationship, resolveName, resolveMultiReference, normalizeEntityType, ENTITY_ALIASES, } from './serializers.js';
113
+ export type { QueryEntityType, QueryEntityInput, QueryFilters } from './serializers.js';
112
114
  export { loadModel } from './loader-node.js';
113
115
  export { validateFile, validateWorkspace } from './validator.js';
114
116
  export type { ValidationResult, ValidationDiagnostic, ValidationOptions, WorkspaceValidationResult } from './validator.js';
package/out/sdk/index.js CHANGED
@@ -110,6 +110,8 @@ export { fromModel, fromDocument, fromServices, augmentModel } from './query.js'
110
110
  // For CLI/Node.js usage: import { loadModel } from '@domainlang/language/sdk/loader-node';
111
111
  // Integration patterns for type-safe pattern matching (no magic strings)
112
112
  export { Pattern, PatternFullName, PatternAliases, matchesPattern, isUpstreamPattern, isDownstreamPattern, isMutualPattern, UpstreamPatterns, DownstreamPatterns, MutualPatterns, } from './patterns.js';
113
+ // Serializers for tool responses (browser-safe)
114
+ export { serializeNode, serializeRelationship, resolveName, resolveMultiReference, normalizeEntityType, ENTITY_ALIASES, } from './serializers.js';
113
115
  // Node.js-specific exports (will fail in browser environments)
114
116
  export { loadModel } from './loader-node.js';
115
117
  export { validateFile, validateWorkspace } from './validator.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwGG;AAEH,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjF,0EAA0E;AAC1E,2FAA2F;AAE3F,yEAAyE;AACzE,OAAO,EACH,OAAO,EACP,eAAe,EACf,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACjB,MAAM,eAAe,CAAC;AAkBvB,+DAA+D;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwGG;AAEH,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjF,0EAA0E;AAC1E,2FAA2F;AAE3F,yEAAyE;AACzE,OAAO,EACH,OAAO,EACP,eAAe,EACf,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACjB,MAAM,eAAe,CAAC;AAkBvB,gDAAgD;AAChD,OAAO,EACH,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACjB,MAAM,kBAAkB,CAAC;AAG1B,+DAA+D;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -67,7 +67,7 @@ export async function loadModel(entryFile, options) {
67
67
  const shared = servicesObj.shared;
68
68
  // Initialize workspace if directory provided
69
69
  if (options?.workspaceDir) {
70
- const workspaceManager = services.imports.WorkspaceManager;
70
+ const workspaceManager = services.imports.ManifestManager;
71
71
  await workspaceManager.initialize(options.workspaceDir);
72
72
  }
73
73
  // Read file content and create document