@domainlang/language 0.6.0 → 0.8.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.
- package/README.md +1 -1
- package/out/domain-lang-module.d.ts +2 -0
- package/out/domain-lang-module.js +23 -2
- package/out/domain-lang-module.js.map +1 -1
- package/out/lsp/domain-lang-completion.d.ts +142 -1
- package/out/lsp/domain-lang-completion.js +620 -22
- package/out/lsp/domain-lang-completion.js.map +1 -1
- package/out/lsp/domain-lang-document-symbol-provider.d.ts +79 -0
- package/out/lsp/domain-lang-document-symbol-provider.js +210 -0
- package/out/lsp/domain-lang-document-symbol-provider.js.map +1 -0
- package/out/lsp/domain-lang-index-manager.d.ts +98 -1
- package/out/lsp/domain-lang-index-manager.js +214 -7
- package/out/lsp/domain-lang-index-manager.js.map +1 -1
- package/out/lsp/domain-lang-node-kind-provider.d.ts +27 -0
- package/out/lsp/domain-lang-node-kind-provider.js +87 -0
- package/out/lsp/domain-lang-node-kind-provider.js.map +1 -0
- package/out/lsp/domain-lang-scope-provider.d.ts +100 -0
- package/out/lsp/domain-lang-scope-provider.js +170 -0
- package/out/lsp/domain-lang-scope-provider.js.map +1 -0
- package/out/lsp/domain-lang-workspace-manager.d.ts +46 -0
- package/out/lsp/domain-lang-workspace-manager.js +148 -4
- package/out/lsp/domain-lang-workspace-manager.js.map +1 -1
- package/out/lsp/hover/domain-lang-hover.d.ts +16 -6
- package/out/lsp/hover/domain-lang-hover.js +160 -134
- package/out/lsp/hover/domain-lang-hover.js.map +1 -1
- package/out/lsp/hover/hover-builders.d.ts +57 -0
- package/out/lsp/hover/hover-builders.js +171 -0
- package/out/lsp/hover/hover-builders.js.map +1 -0
- package/out/main.js +116 -20
- package/out/main.js.map +1 -1
- package/out/sdk/index.d.ts +2 -1
- package/out/sdk/index.js +1 -1
- package/out/sdk/index.js.map +1 -1
- package/out/sdk/loader-node.js +1 -1
- package/out/sdk/loader-node.js.map +1 -1
- package/out/sdk/loader.d.ts +55 -2
- package/out/sdk/loader.js +87 -28
- package/out/sdk/loader.js.map +1 -1
- package/out/sdk/query.js +14 -11
- package/out/sdk/query.js.map +1 -1
- package/out/services/import-resolver.d.ts +29 -6
- package/out/services/import-resolver.js +48 -9
- package/out/services/import-resolver.js.map +1 -1
- package/out/services/package-boundary-detector.d.ts +101 -0
- package/out/services/package-boundary-detector.js +211 -0
- package/out/services/package-boundary-detector.js.map +1 -0
- package/out/services/performance-optimizer.js +6 -2
- package/out/services/performance-optimizer.js.map +1 -1
- package/out/services/types.d.ts +24 -0
- package/out/services/types.js.map +1 -1
- package/out/services/workspace-manager.d.ts +73 -6
- package/out/services/workspace-manager.js +210 -57
- package/out/services/workspace-manager.js.map +1 -1
- package/out/utils/import-utils.d.ts +9 -6
- package/out/utils/import-utils.js +26 -15
- package/out/utils/import-utils.js.map +1 -1
- package/out/validation/constants.d.ts +20 -0
- package/out/validation/constants.js +39 -3
- package/out/validation/constants.js.map +1 -1
- package/out/validation/import.d.ts +22 -1
- package/out/validation/import.js +104 -16
- package/out/validation/import.js.map +1 -1
- package/out/validation/maps.js +101 -3
- package/out/validation/maps.js.map +1 -1
- package/package.json +5 -5
- package/src/domain-lang-module.ts +26 -3
- package/src/lsp/domain-lang-completion.ts +736 -27
- package/src/lsp/domain-lang-document-symbol-provider.ts +254 -0
- package/src/lsp/domain-lang-index-manager.ts +250 -7
- package/src/lsp/domain-lang-node-kind-provider.ts +119 -0
- package/src/lsp/domain-lang-scope-provider.ts +250 -0
- package/src/lsp/domain-lang-workspace-manager.ts +187 -4
- package/src/lsp/hover/domain-lang-hover.ts +189 -131
- package/src/lsp/hover/hover-builders.ts +208 -0
- package/src/main.ts +156 -23
- package/src/sdk/index.ts +2 -1
- package/src/sdk/loader-node.ts +2 -1
- package/src/sdk/loader.ts +125 -34
- package/src/sdk/query.ts +15 -11
- package/src/services/import-resolver.ts +60 -9
- package/src/services/package-boundary-detector.ts +238 -0
- package/src/services/performance-optimizer.ts +6 -2
- package/src/services/types.ts +25 -0
- package/src/services/workspace-manager.ts +259 -62
- package/src/utils/import-utils.ts +27 -15
- package/src/validation/constants.ts +47 -6
- package/src/validation/import.ts +124 -16
- package/src/validation/maps.ts +118 -4
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standalone hover content builder functions.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from DomainLangHoverProvider to reduce class complexity
|
|
5
|
+
* and enable independent testing of hover content generation.
|
|
6
|
+
*
|
|
7
|
+
* Each builder takes typed AST nodes (not generic AstNode) and the helper
|
|
8
|
+
* functions needed for formatting, keeping them pure and testable.
|
|
9
|
+
*
|
|
10
|
+
* @module lsp/hover/hover-builders
|
|
11
|
+
*/
|
|
12
|
+
import { effectiveClassification, effectiveTeam } from '../../sdk/resolution.js';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Shared formatting utilities
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Wraps text in a domain-lang fenced code block.
|
|
18
|
+
*/
|
|
19
|
+
export function codeBlock(text) {
|
|
20
|
+
return `\`\`\`domain-lang\n${text}\n\`\`\``;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Formats hover output with a consistent header/body structure.
|
|
24
|
+
*
|
|
25
|
+
* @param commentBlock - Documentation comment prefix (or empty)
|
|
26
|
+
* @param emoji - Emoji icon for the type
|
|
27
|
+
* @param typeName - Lowercase type name
|
|
28
|
+
* @param name - Element name (optional)
|
|
29
|
+
* @param fields - Body content fields
|
|
30
|
+
*/
|
|
31
|
+
export function formatHoverContent(commentBlock, emoji, typeName, name, fields) {
|
|
32
|
+
const separator = commentBlock ? `${commentBlock}\n\n---\n\n` : '';
|
|
33
|
+
const nameDisplay = name ? ` ${name}` : '';
|
|
34
|
+
const header = `${emoji} **\`(${typeName})\`${nameDisplay}**`;
|
|
35
|
+
const body = fields.length > 0 ? `\n\n${fields.join('\n\n')}` : '';
|
|
36
|
+
return `${separator}${header}${body}`;
|
|
37
|
+
}
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// Domain hover builder
|
|
40
|
+
// ============================================================================
|
|
41
|
+
/**
|
|
42
|
+
* Builds a signature string for a domain (e.g., "Domain Sales in Commerce").
|
|
43
|
+
*/
|
|
44
|
+
export function buildDomainSignature(domain) {
|
|
45
|
+
const parts = ['Domain', domain.name];
|
|
46
|
+
if (domain.parent?.ref?.name) {
|
|
47
|
+
parts.push('in', domain.parent.ref.name);
|
|
48
|
+
}
|
|
49
|
+
return parts.join(' ');
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Builds hover fields for a Domain node.
|
|
53
|
+
*
|
|
54
|
+
* @param domain - The domain AST node
|
|
55
|
+
* @param refLink - Function to create reference links
|
|
56
|
+
* @returns Array of formatted field strings
|
|
57
|
+
*/
|
|
58
|
+
export function buildDomainFields(domain, refLink) {
|
|
59
|
+
const description = domain.description ?? '';
|
|
60
|
+
const vision = domain.vision ?? '';
|
|
61
|
+
const typeRef = domain.type?.ref;
|
|
62
|
+
const signature = codeBlock(buildDomainSignature(domain));
|
|
63
|
+
const fields = [signature];
|
|
64
|
+
if (description)
|
|
65
|
+
fields.push(description);
|
|
66
|
+
if (vision || typeRef || domain.parent)
|
|
67
|
+
fields.push('---');
|
|
68
|
+
if (vision)
|
|
69
|
+
fields.push(`**Vision:** ${vision}`);
|
|
70
|
+
if (typeRef)
|
|
71
|
+
fields.push(`**Type:** ${refLink(typeRef)}`);
|
|
72
|
+
if (domain.parent?.ref)
|
|
73
|
+
fields.push(`**Parent:** ${refLink(domain.parent.ref)}`);
|
|
74
|
+
return fields;
|
|
75
|
+
}
|
|
76
|
+
// ============================================================================
|
|
77
|
+
// Bounded context hover builder
|
|
78
|
+
// ============================================================================
|
|
79
|
+
/**
|
|
80
|
+
* Builds a signature string for a bounded context
|
|
81
|
+
* (e.g., "boundedcontext OrderManagement for Sales as Core by SalesTeam").
|
|
82
|
+
*/
|
|
83
|
+
export function buildBcSignature(bc) {
|
|
84
|
+
const classification = effectiveClassification(bc);
|
|
85
|
+
const team = effectiveTeam(bc);
|
|
86
|
+
const parts = ['BoundedContext', bc.name];
|
|
87
|
+
if (bc.domain?.ref?.name)
|
|
88
|
+
parts.push('for', bc.domain.ref.name);
|
|
89
|
+
if (classification?.name)
|
|
90
|
+
parts.push('as', classification.name);
|
|
91
|
+
if (team?.name)
|
|
92
|
+
parts.push('by', team.name);
|
|
93
|
+
return parts.join(' ');
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Builds the properties section (domain, classification, team, businessModel, evolution).
|
|
97
|
+
*/
|
|
98
|
+
function buildBcPropertyFields(bc, classification, team, refLink) {
|
|
99
|
+
const fields = [];
|
|
100
|
+
const domain = bc.domain?.ref;
|
|
101
|
+
const businessModel = bc.businessModel?.ref;
|
|
102
|
+
const evolution = bc.evolution?.ref;
|
|
103
|
+
if (domain || classification || team || businessModel || evolution)
|
|
104
|
+
fields.push('---');
|
|
105
|
+
if (domain)
|
|
106
|
+
fields.push(`📁 **Domain:** ${refLink(domain)}`);
|
|
107
|
+
if (classification)
|
|
108
|
+
fields.push(`🔖 **Classification:** ${refLink(classification)}`);
|
|
109
|
+
if (team)
|
|
110
|
+
fields.push(`👥 **Team:** ${refLink(team)}`);
|
|
111
|
+
if (businessModel)
|
|
112
|
+
fields.push(`💼 **Business Model:** ${refLink(businessModel)}`);
|
|
113
|
+
if (evolution)
|
|
114
|
+
fields.push(`🔄 **Evolution:** ${refLink(evolution)}`);
|
|
115
|
+
return fields;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Builds the relationships section for a bounded context hover.
|
|
119
|
+
*/
|
|
120
|
+
function buildBcRelationshipsSection(relationships, formatRelationshipLine) {
|
|
121
|
+
if (relationships.length === 0)
|
|
122
|
+
return [];
|
|
123
|
+
const lines = relationships.map(formatRelationshipLine);
|
|
124
|
+
return [`**Relationships:**\n${lines.join('\n')}`];
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Builds the terminology section for a bounded context hover.
|
|
128
|
+
*/
|
|
129
|
+
function buildBcTerminologySection(bc) {
|
|
130
|
+
const terminology = bc.terminology ?? [];
|
|
131
|
+
if (terminology.length === 0)
|
|
132
|
+
return [];
|
|
133
|
+
const lines = terminology.map(t => `- \`${t.name}\`: ${t.meaning ?? ''}`);
|
|
134
|
+
return [`**Terminology:**\n${lines.join('\n')}`];
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Builds the decisions section for a bounded context hover.
|
|
138
|
+
*/
|
|
139
|
+
function buildBcDecisionsSection(bc) {
|
|
140
|
+
const decisions = bc.decisions ?? [];
|
|
141
|
+
if (decisions.length === 0)
|
|
142
|
+
return [];
|
|
143
|
+
const lines = decisions.map(d => `- \`${d.name}\`: ${d.value ?? ''}`);
|
|
144
|
+
return [`**Decisions:**\n${lines.join('\n')}`];
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Builds hover fields for a BoundedContext node.
|
|
148
|
+
*
|
|
149
|
+
* @param bc - The bounded context AST node
|
|
150
|
+
* @param refLink - Function to create reference links
|
|
151
|
+
* @param formatRelationshipLine - Function to format a relationship line
|
|
152
|
+
* @returns Array of formatted field strings
|
|
153
|
+
*/
|
|
154
|
+
export function buildBcFields(bc, refLink, formatRelationshipLine) {
|
|
155
|
+
const description = bc.description ?? '';
|
|
156
|
+
const classification = effectiveClassification(bc);
|
|
157
|
+
const team = effectiveTeam(bc);
|
|
158
|
+
const signature = codeBlock(buildBcSignature(bc));
|
|
159
|
+
const fields = [signature];
|
|
160
|
+
if (description)
|
|
161
|
+
fields.push(description);
|
|
162
|
+
const sections = [
|
|
163
|
+
...buildBcPropertyFields(bc, classification, team, refLink),
|
|
164
|
+
...buildBcRelationshipsSection(bc.relationships ?? [], formatRelationshipLine),
|
|
165
|
+
...buildBcTerminologySection(bc),
|
|
166
|
+
...buildBcDecisionsSection(bc),
|
|
167
|
+
];
|
|
168
|
+
fields.push(...sections);
|
|
169
|
+
return fields;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=hover-builders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hover-builders.js","sourceRoot":"","sources":["../../../src/lsp/hover/hover-builders.ts"],"names":[],"mappings":"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"}
|
package/out/main.js
CHANGED
|
@@ -34,7 +34,7 @@ shared.lsp.LanguageServer.onInitialize((params) => {
|
|
|
34
34
|
// This invalidates caches when config files change externally
|
|
35
35
|
shared.lsp.DocumentUpdateHandler?.onWatchedFilesChange(async (params) => {
|
|
36
36
|
try {
|
|
37
|
-
await
|
|
37
|
+
await handleFileChanges(params, DomainLang.imports.WorkspaceManager, shared, DomainLang);
|
|
38
38
|
}
|
|
39
39
|
catch (error) {
|
|
40
40
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -43,41 +43,137 @@ shared.lsp.DocumentUpdateHandler?.onWatchedFilesChange(async (params) => {
|
|
|
43
43
|
}
|
|
44
44
|
});
|
|
45
45
|
/**
|
|
46
|
-
*
|
|
47
|
-
* Invalidates caches and rebuilds workspace as needed.
|
|
48
|
-
* Uses incremental updates: only rebuilds if dependencies actually changed.
|
|
46
|
+
* Categorizes file changes by type.
|
|
49
47
|
*/
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
+
};
|
|
53
56
|
for (const change of params.changes) {
|
|
54
57
|
const uri = URI.parse(change.uri);
|
|
55
58
|
const fileName = uri.path.split('/').pop() ?? '';
|
|
59
|
+
const uriString = change.uri;
|
|
56
60
|
if (fileName === 'model.yaml') {
|
|
57
|
-
console.warn(`model.yaml changed: ${
|
|
61
|
+
console.warn(`model.yaml changed: ${uriString}`);
|
|
58
62
|
workspaceManager.invalidateManifestCache();
|
|
59
|
-
|
|
60
|
-
// Clear IndexManager import dependencies - resolved paths may have changed
|
|
61
|
-
const indexManager = sharedServices.workspace.IndexManager;
|
|
63
|
+
langServices.imports.ImportResolver.clearCache();
|
|
62
64
|
indexManager.clearImportDependencies();
|
|
63
|
-
manifestChanged = true;
|
|
65
|
+
result.manifestChanged = true;
|
|
64
66
|
}
|
|
65
67
|
else if (fileName === 'model.lock') {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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);
|
|
69
164
|
}
|
|
70
165
|
}
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
|
|
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);
|
|
74
171
|
}
|
|
75
172
|
}
|
|
76
173
|
/**
|
|
77
174
|
* Handles lock file creation, change, or deletion.
|
|
78
175
|
*/
|
|
79
176
|
async function handleLockFileChange(change, workspaceManager) {
|
|
80
|
-
console.warn(`model.lock changed: ${change.uri}`);
|
|
81
177
|
if (change.type === FileChangeType.Changed || change.type === FileChangeType.Created) {
|
|
82
178
|
await workspaceManager.refreshLockFile();
|
|
83
179
|
}
|
|
@@ -132,7 +228,7 @@ if (entryFile) {
|
|
|
132
228
|
*/
|
|
133
229
|
const reloadFromEntry = async () => {
|
|
134
230
|
try {
|
|
135
|
-
currentGraph = await ensureImportGraphFromEntryFile(entryFile, shared.workspace.LangiumDocuments);
|
|
231
|
+
currentGraph = await ensureImportGraphFromEntryFile(entryFile, shared.workspace.LangiumDocuments, DomainLang.imports.ImportResolver);
|
|
136
232
|
console.warn(`Successfully loaded import graph from ${entryFile}`);
|
|
137
233
|
}
|
|
138
234
|
catch (error) {
|
package/out/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACnG,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAEzE,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE9B,oCAAoC;AACpC,MAAM,UAAU,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAE1D,4DAA4D;AAC5D,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,wBAAwB,CAAC,EAAE,UAAU,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;AAE3F,gEAAgE;AAChE,+EAA+E;AAC/E,8DAA8D;AAC9D,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;IAC9C,2DAA2D;IAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACxC,MAAM,aAAa,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;QACnC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM;QAClC,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,aAAa,EAAE,CAAC;QAChB,mEAAmE;QACnE,sEAAsE;QACtE,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC7D,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACrD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;YAC3D,6DAA6D;QACjE,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,8BAA8B,aAAa,EAAE,CAAC,CAAC;IAChE,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8DAA8D;AAC9D,+EAA+E;AAC/E,8DAA8D;AAC9D,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;IACpE,IAAI,CAAC;QACD,MAAM,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/out/sdk/index.d.ts
CHANGED
|
@@ -87,7 +87,8 @@
|
|
|
87
87
|
* }
|
|
88
88
|
* ```
|
|
89
89
|
*/
|
|
90
|
-
export { loadModelFromText } from './loader.js';
|
|
90
|
+
export { loadModelFromText, createModelLoader } from './loader.js';
|
|
91
|
+
export type { ModelLoader } from './loader.js';
|
|
91
92
|
export { fromModel, fromDocument, fromServices, augmentModel } from './query.js';
|
|
92
93
|
export { Pattern, PatternFullName, PatternAliases, matchesPattern, isUpstreamPattern, isDownstreamPattern, isMutualPattern, UpstreamPatterns, DownstreamPatterns, MutualPatterns, } from './patterns.js';
|
|
93
94
|
export type { IntegrationPattern } from './patterns.js';
|
package/out/sdk/index.js
CHANGED
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
* ```
|
|
89
89
|
*/
|
|
90
90
|
// Browser-safe entry points
|
|
91
|
-
export { loadModelFromText } from './loader.js';
|
|
91
|
+
export { loadModelFromText, createModelLoader } from './loader.js';
|
|
92
92
|
export { fromModel, fromDocument, fromServices, augmentModel } from './query.js';
|
|
93
93
|
// Note: loadModel() is NOT exported here - it requires Node.js filesystem
|
|
94
94
|
// For CLI/Node.js usage: import { loadModel } from '@domainlang/language/sdk/loader-node';
|
package/out/sdk/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwFG;AAEH,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwFG;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"}
|
package/out/sdk/loader-node.js
CHANGED
|
@@ -80,7 +80,7 @@ export async function loadModel(entryFile, options) {
|
|
|
80
80
|
shared.workspace.LangiumDocuments.addDocument(document);
|
|
81
81
|
await shared.workspace.DocumentBuilder.build([document], { validation: false });
|
|
82
82
|
// Traverse import graph to load all imported files
|
|
83
|
-
const importedUris = await ensureImportGraphFromDocument(document, shared.workspace.LangiumDocuments);
|
|
83
|
+
const importedUris = await ensureImportGraphFromDocument(document, shared.workspace.LangiumDocuments, services.imports.ImportResolver);
|
|
84
84
|
// Build all imported documents with validation
|
|
85
85
|
const allDocuments = Array.from(shared.workspace.LangiumDocuments.all);
|
|
86
86
|
await shared.workspace.DocumentBuilder.build(allDocuments, { validation: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-node.js","sourceRoot":"","sources":["../../src/sdk/loader-node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC3B,SAAiB,EACjB,OAAqB;IAErB,wBAAwB;IACxB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3C,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAEtE,2BAA2B;IAC3B,MAAM,WAAW,GAAG,OAAO,EAAE,QAAQ;QACjC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE;QACnE,CAAC,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC;IACxC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAElC,6CAA6C;IAC7C,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;QACxB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC3D,MAAM,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5D,CAAC;IAED,wCAAwC;IACxC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEnC,uCAAuC;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,sBAAsB,CAAC,UAAU,CAC/D,WAAW,EACX,GAAG,CACN,CAAC;IAEF,iCAAiC;IACjC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAEhF,mDAAmD;IACnD,MAAM,YAAY,GAAG,MAAM,6BAA6B,CACpD,QAAQ,EACR,MAAM,CAAC,SAAS,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"loader-node.js","sourceRoot":"","sources":["../../src/sdk/loader-node.ts"],"names":[],"mappings":"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"}
|
package/out/sdk/loader.d.ts
CHANGED
|
@@ -4,6 +4,14 @@
|
|
|
4
4
|
* This module provides `loadModelFromText()` which works in both
|
|
5
5
|
* browser and Node.js environments by using Langium's EmptyFileSystem.
|
|
6
6
|
*
|
|
7
|
+
* For repeated parsing (e.g., web playgrounds, REPLs), use `createModelLoader()`
|
|
8
|
+
* to reuse Langium services across multiple parse calls:
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const loader = createModelLoader();
|
|
11
|
+
* const result1 = await loader.loadFromText('Domain A {}');
|
|
12
|
+
* const result2 = await loader.loadFromText('Domain B {}');
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
7
15
|
* For file-based loading in Node.js CLI tools, use:
|
|
8
16
|
* ```typescript
|
|
9
17
|
* import { loadModel } from '@domainlang/language/sdk/loader-node';
|
|
@@ -16,16 +24,61 @@
|
|
|
16
24
|
*
|
|
17
25
|
* @module sdk/loader
|
|
18
26
|
*/
|
|
27
|
+
import type { DomainLangServices } from '../domain-lang-module.js';
|
|
19
28
|
import type { LoadOptions, QueryContext } from './types.js';
|
|
29
|
+
/**
|
|
30
|
+
* A reusable model loader that maintains Langium services across multiple parse calls.
|
|
31
|
+
*
|
|
32
|
+
* Use this when calling `loadFromText()` repeatedly (e.g., web playgrounds, REPLs,
|
|
33
|
+
* batch processing) to avoid the overhead of recreating Langium services each time.
|
|
34
|
+
*/
|
|
35
|
+
export interface ModelLoader {
|
|
36
|
+
/**
|
|
37
|
+
* Loads a DomainLang model from a text string, reusing internal services.
|
|
38
|
+
*
|
|
39
|
+
* Each call creates a fresh document but shares the underlying parser,
|
|
40
|
+
* linker, and validator infrastructure.
|
|
41
|
+
*
|
|
42
|
+
* @param text - DomainLang source code
|
|
43
|
+
* @returns QueryContext with model and query API
|
|
44
|
+
* @throws Error if parsing fails
|
|
45
|
+
*/
|
|
46
|
+
loadFromText(text: string): Promise<QueryContext>;
|
|
47
|
+
/** The underlying DomainLang services (for advanced use). */
|
|
48
|
+
readonly services: DomainLangServices;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Creates a reusable model loader that shares Langium services across parse calls.
|
|
52
|
+
*
|
|
53
|
+
* **Browser-safe** - uses in-memory file system (EmptyFileSystem).
|
|
54
|
+
*
|
|
55
|
+
* For applications that parse multiple texts (web playgrounds, REPLs, batch tools),
|
|
56
|
+
* this avoids the overhead of creating new Langium services for each parse call.
|
|
57
|
+
*
|
|
58
|
+
* @returns A ModelLoader instance that can be used repeatedly
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* import { createModelLoader } from '@domainlang/language/sdk';
|
|
63
|
+
*
|
|
64
|
+
* const loader = createModelLoader();
|
|
65
|
+
*
|
|
66
|
+
* // Parse multiple texts efficiently - services are reused
|
|
67
|
+
* const result1 = await loader.loadFromText('Domain Sales { vision: "Sales" }');
|
|
68
|
+
* const result2 = await loader.loadFromText('Domain Billing { vision: "Billing" }');
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export declare function createModelLoader(): ModelLoader;
|
|
20
72
|
/**
|
|
21
73
|
* Loads a DomainLang model from a text string.
|
|
22
74
|
*
|
|
23
75
|
* **Browser-safe** - uses in-memory file system (EmptyFileSystem).
|
|
24
76
|
*
|
|
77
|
+
* For repeated parsing, prefer {@link createModelLoader} to reuse services.
|
|
78
|
+
*
|
|
25
79
|
* Useful for:
|
|
26
80
|
* - Testing
|
|
27
|
-
* -
|
|
28
|
-
* - Web-based editors
|
|
81
|
+
* - One-off parsing
|
|
29
82
|
* - Any environment without file system access
|
|
30
83
|
*
|
|
31
84
|
* @param text - DomainLang source code
|