@domainlang/language 0.1.81

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 (188) hide show
  1. package/README.md +32 -0
  2. package/out/ast-augmentation.d.ts +6 -0
  3. package/out/ast-augmentation.js +2 -0
  4. package/out/ast-augmentation.js.map +1 -0
  5. package/out/domain-lang-module.d.ts +55 -0
  6. package/out/domain-lang-module.js +59 -0
  7. package/out/domain-lang-module.js.map +1 -0
  8. package/out/generated/ast.d.ts +770 -0
  9. package/out/generated/ast.js +565 -0
  10. package/out/generated/ast.js.map +1 -0
  11. package/out/generated/grammar.d.ts +6 -0
  12. package/out/generated/grammar.js +2502 -0
  13. package/out/generated/grammar.js.map +1 -0
  14. package/out/generated/module.d.ts +13 -0
  15. package/out/generated/module.js +21 -0
  16. package/out/generated/module.js.map +1 -0
  17. package/out/index.d.ts +13 -0
  18. package/out/index.js +17 -0
  19. package/out/index.js.map +1 -0
  20. package/out/lsp/domain-lang-completion.d.ts +37 -0
  21. package/out/lsp/domain-lang-completion.js +452 -0
  22. package/out/lsp/domain-lang-completion.js.map +1 -0
  23. package/out/lsp/domain-lang-formatter.d.ts +15 -0
  24. package/out/lsp/domain-lang-formatter.js +43 -0
  25. package/out/lsp/domain-lang-formatter.js.map +1 -0
  26. package/out/lsp/domain-lang-naming.d.ts +34 -0
  27. package/out/lsp/domain-lang-naming.js +49 -0
  28. package/out/lsp/domain-lang-naming.js.map +1 -0
  29. package/out/lsp/domain-lang-scope.d.ts +59 -0
  30. package/out/lsp/domain-lang-scope.js +102 -0
  31. package/out/lsp/domain-lang-scope.js.map +1 -0
  32. package/out/lsp/hover/ddd-pattern-explanations.d.ts +50 -0
  33. package/out/lsp/hover/ddd-pattern-explanations.js +196 -0
  34. package/out/lsp/hover/ddd-pattern-explanations.js.map +1 -0
  35. package/out/lsp/hover/domain-lang-hover.d.ts +19 -0
  36. package/out/lsp/hover/domain-lang-hover.js +306 -0
  37. package/out/lsp/hover/domain-lang-hover.js.map +1 -0
  38. package/out/lsp/hover/domain-lang-keywords.d.ts +13 -0
  39. package/out/lsp/hover/domain-lang-keywords.js +47 -0
  40. package/out/lsp/hover/domain-lang-keywords.js.map +1 -0
  41. package/out/main-browser.d.ts +1 -0
  42. package/out/main-browser.js +11 -0
  43. package/out/main-browser.js.map +1 -0
  44. package/out/main.d.ts +1 -0
  45. package/out/main.js +74 -0
  46. package/out/main.js.map +1 -0
  47. package/out/sdk/ast-augmentation.d.ts +136 -0
  48. package/out/sdk/ast-augmentation.js +62 -0
  49. package/out/sdk/ast-augmentation.js.map +1 -0
  50. package/out/sdk/index.d.ts +94 -0
  51. package/out/sdk/index.js +97 -0
  52. package/out/sdk/index.js.map +1 -0
  53. package/out/sdk/indexes.d.ts +16 -0
  54. package/out/sdk/indexes.js +97 -0
  55. package/out/sdk/indexes.js.map +1 -0
  56. package/out/sdk/loader-node.d.ts +47 -0
  57. package/out/sdk/loader-node.js +104 -0
  58. package/out/sdk/loader-node.js.map +1 -0
  59. package/out/sdk/loader.d.ts +49 -0
  60. package/out/sdk/loader.js +85 -0
  61. package/out/sdk/loader.js.map +1 -0
  62. package/out/sdk/patterns.d.ts +93 -0
  63. package/out/sdk/patterns.js +123 -0
  64. package/out/sdk/patterns.js.map +1 -0
  65. package/out/sdk/query.d.ts +90 -0
  66. package/out/sdk/query.js +679 -0
  67. package/out/sdk/query.js.map +1 -0
  68. package/out/sdk/resolution.d.ts +52 -0
  69. package/out/sdk/resolution.js +68 -0
  70. package/out/sdk/resolution.js.map +1 -0
  71. package/out/sdk/types.d.ts +301 -0
  72. package/out/sdk/types.js +8 -0
  73. package/out/sdk/types.js.map +1 -0
  74. package/out/services/dependency-analyzer.d.ts +94 -0
  75. package/out/services/dependency-analyzer.js +279 -0
  76. package/out/services/dependency-analyzer.js.map +1 -0
  77. package/out/services/dependency-resolver.d.ts +123 -0
  78. package/out/services/dependency-resolver.js +252 -0
  79. package/out/services/dependency-resolver.js.map +1 -0
  80. package/out/services/git-url-resolver.browser.d.ts +18 -0
  81. package/out/services/git-url-resolver.browser.js +15 -0
  82. package/out/services/git-url-resolver.browser.js.map +1 -0
  83. package/out/services/git-url-resolver.d.ts +192 -0
  84. package/out/services/git-url-resolver.js +382 -0
  85. package/out/services/git-url-resolver.js.map +1 -0
  86. package/out/services/governance-validator.d.ts +80 -0
  87. package/out/services/governance-validator.js +159 -0
  88. package/out/services/governance-validator.js.map +1 -0
  89. package/out/services/import-resolver.d.ts +18 -0
  90. package/out/services/import-resolver.js +22 -0
  91. package/out/services/import-resolver.js.map +1 -0
  92. package/out/services/performance-optimizer.d.ts +60 -0
  93. package/out/services/performance-optimizer.js +140 -0
  94. package/out/services/performance-optimizer.js.map +1 -0
  95. package/out/services/relationship-inference.d.ts +11 -0
  96. package/out/services/relationship-inference.js +98 -0
  97. package/out/services/relationship-inference.js.map +1 -0
  98. package/out/services/workspace-manager.d.ts +76 -0
  99. package/out/services/workspace-manager.js +323 -0
  100. package/out/services/workspace-manager.js.map +1 -0
  101. package/out/syntaxes/domain-lang.monarch.d.ts +76 -0
  102. package/out/syntaxes/domain-lang.monarch.js +29 -0
  103. package/out/syntaxes/domain-lang.monarch.js.map +1 -0
  104. package/out/utils/import-utils.d.ts +57 -0
  105. package/out/utils/import-utils.js +228 -0
  106. package/out/utils/import-utils.js.map +1 -0
  107. package/out/validation/bounded-context.d.ts +11 -0
  108. package/out/validation/bounded-context.js +79 -0
  109. package/out/validation/bounded-context.js.map +1 -0
  110. package/out/validation/classification.d.ts +3 -0
  111. package/out/validation/classification.js +3 -0
  112. package/out/validation/classification.js.map +1 -0
  113. package/out/validation/constants.d.ts +77 -0
  114. package/out/validation/constants.js +96 -0
  115. package/out/validation/constants.js.map +1 -0
  116. package/out/validation/domain-lang-validator.d.ts +2 -0
  117. package/out/validation/domain-lang-validator.js +27 -0
  118. package/out/validation/domain-lang-validator.js.map +1 -0
  119. package/out/validation/domain.d.ts +11 -0
  120. package/out/validation/domain.js +18 -0
  121. package/out/validation/domain.js.map +1 -0
  122. package/out/validation/import.d.ts +44 -0
  123. package/out/validation/import.js +135 -0
  124. package/out/validation/import.js.map +1 -0
  125. package/out/validation/maps.d.ts +21 -0
  126. package/out/validation/maps.js +56 -0
  127. package/out/validation/maps.js.map +1 -0
  128. package/out/validation/metadata.d.ts +7 -0
  129. package/out/validation/metadata.js +12 -0
  130. package/out/validation/metadata.js.map +1 -0
  131. package/out/validation/model.d.ts +12 -0
  132. package/out/validation/model.js +29 -0
  133. package/out/validation/model.js.map +1 -0
  134. package/out/validation/relationships.d.ts +12 -0
  135. package/out/validation/relationships.js +94 -0
  136. package/out/validation/relationships.js.map +1 -0
  137. package/out/validation/shared.d.ts +6 -0
  138. package/out/validation/shared.js +12 -0
  139. package/out/validation/shared.js.map +1 -0
  140. package/package.json +97 -0
  141. package/src/ast-augmentation.ts +5 -0
  142. package/src/domain-lang-module.ts +100 -0
  143. package/src/domain-lang.langium +356 -0
  144. package/src/generated/ast.ts +999 -0
  145. package/src/generated/grammar.ts +2504 -0
  146. package/src/generated/module.ts +25 -0
  147. package/src/index.ts +17 -0
  148. package/src/lsp/domain-lang-completion.ts +514 -0
  149. package/src/lsp/domain-lang-formatter.ts +51 -0
  150. package/src/lsp/domain-lang-naming.ts +56 -0
  151. package/src/lsp/domain-lang-scope.ts +137 -0
  152. package/src/lsp/hover/ddd-pattern-explanations.ts +237 -0
  153. package/src/lsp/hover/domain-lang-hover.ts +340 -0
  154. package/src/lsp/hover/domain-lang-keywords.ts +50 -0
  155. package/src/main-browser.ts +15 -0
  156. package/src/main.ts +85 -0
  157. package/src/sdk/README.md +297 -0
  158. package/src/sdk/ast-augmentation.ts +157 -0
  159. package/src/sdk/index.ts +128 -0
  160. package/src/sdk/indexes.ts +155 -0
  161. package/src/sdk/loader-node.ts +126 -0
  162. package/src/sdk/loader.ts +99 -0
  163. package/src/sdk/patterns.ts +147 -0
  164. package/src/sdk/query.ts +802 -0
  165. package/src/sdk/resolution.ts +78 -0
  166. package/src/sdk/types.ts +346 -0
  167. package/src/services/dependency-analyzer.ts +381 -0
  168. package/src/services/dependency-resolver.ts +334 -0
  169. package/src/services/git-url-resolver.browser.ts +31 -0
  170. package/src/services/git-url-resolver.ts +524 -0
  171. package/src/services/governance-validator.ts +219 -0
  172. package/src/services/import-resolver.ts +30 -0
  173. package/src/services/performance-optimizer.ts +170 -0
  174. package/src/services/relationship-inference.ts +121 -0
  175. package/src/services/workspace-manager.ts +416 -0
  176. package/src/syntaxes/domain-lang.monarch.ts +29 -0
  177. package/src/utils/import-utils.ts +274 -0
  178. package/src/validation/bounded-context.ts +99 -0
  179. package/src/validation/classification.ts +5 -0
  180. package/src/validation/constants.ts +124 -0
  181. package/src/validation/domain-lang-validator.ts +33 -0
  182. package/src/validation/domain.ts +24 -0
  183. package/src/validation/import.ts +171 -0
  184. package/src/validation/maps.ts +72 -0
  185. package/src/validation/metadata.ts +14 -0
  186. package/src/validation/model.ts +37 -0
  187. package/src/validation/relationships.ts +154 -0
  188. package/src/validation/shared.ts +14 -0
@@ -0,0 +1,306 @@
1
+ import { CstUtils, isAstNodeWithComment, isJSDoc, isReference, parseJSDoc } from 'langium';
2
+ import { AstNodeHoverProvider } from 'langium/lsp';
3
+ import * as ast from '../../generated/ast.js';
4
+ import { keywordExplanations } from './domain-lang-keywords.js';
5
+ import { effectiveClassification, effectiveTeam } from '../../sdk/resolution.js';
6
+ /**
7
+ * Provides hover information for DomainLang elements.
8
+ */
9
+ export class DomainLangHoverProvider extends AstNodeHoverProvider {
10
+ constructor(services) {
11
+ super(services);
12
+ this.documentationProvider = services.documentation.DocumentationProvider;
13
+ this.commentProvider = services.documentation.CommentProvider;
14
+ const domainServices = services;
15
+ this.qualifiedNameProvider = domainServices.references.QualifiedNameProvider;
16
+ }
17
+ async getHoverContent(document, params) {
18
+ try {
19
+ const rootNode = document.parseResult?.value?.$cstNode;
20
+ if (!rootNode) {
21
+ return undefined;
22
+ }
23
+ const offset = document.textDocument.offsetAt(params.position);
24
+ const cstNode = CstUtils.findDeclarationNodeAtOffset(rootNode, offset, this.grammarConfig.nameRegexp);
25
+ if (!cstNode || cstNode.offset + cstNode.length <= offset) {
26
+ return undefined;
27
+ }
28
+ const targetNodes = this.references.findDeclarations(cstNode);
29
+ const targetNode = targetNodes?.[0];
30
+ if (targetNode) {
31
+ const content = await this.getAstNodeHoverContent(targetNode);
32
+ if (content) {
33
+ return { contents: { kind: 'markdown', value: content } };
34
+ }
35
+ }
36
+ if (cstNode.astNode && ast.isThisRef(cstNode.astNode)) {
37
+ const content = await this.getAstNodeHoverContent(cstNode.astNode);
38
+ if (content) {
39
+ return { contents: { kind: 'markdown', value: content } };
40
+ }
41
+ }
42
+ if (cstNode.grammarSource?.$type === 'Keyword') {
43
+ const keywordHover = this.getKeywordHoverContent(cstNode.grammarSource);
44
+ if (keywordHover) {
45
+ return keywordHover;
46
+ }
47
+ const explanation = keywordExplanations[cstNode.text.toLowerCase()];
48
+ if (explanation) {
49
+ return { contents: { kind: 'markdown', value: `💡 ${explanation}` } };
50
+ }
51
+ }
52
+ }
53
+ catch (error) {
54
+ console.error('Error in getHoverContent:', error);
55
+ }
56
+ return undefined;
57
+ }
58
+ getAstNodeHoverContent(node) {
59
+ try {
60
+ const content = this.documentationProvider.getDocumentation(node);
61
+ const commentBlock = content ? `*${content}*\n\n` : '';
62
+ if (ast.isDomain(node)) {
63
+ const description = node.description ?? '';
64
+ const vision = node.vision ?? '';
65
+ const typeRef = node.type?.ref;
66
+ const type = this.getRefName(typeRef);
67
+ const signatureParts = ['Domain', node.name];
68
+ if (node.parent?.ref?.name)
69
+ signatureParts.push('in', node.parent.ref.name);
70
+ const signature = `\`\`\`domain-lang\n${signatureParts.join(' ')}\n\`\`\``;
71
+ const fields = [signature];
72
+ if (description)
73
+ fields.push(description);
74
+ if (vision || type || node.parent)
75
+ fields.push('---');
76
+ if (vision)
77
+ fields.push(`**Vision:** ${vision}`);
78
+ if (type)
79
+ fields.push(`**Type:** ${this.refLink(typeRef, type)}`);
80
+ if (node.parent)
81
+ fields.push(`**Parent:** ${this.refLink(node.parent)}`);
82
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
83
+ `📁 **\`(domain)\` ${node.name}**\n\n` +
84
+ fields.join('\n\n');
85
+ }
86
+ if (ast.isThisRef(node)) {
87
+ let parent = node.$container;
88
+ while (parent) {
89
+ if (ast.isDomain(parent) ||
90
+ ast.isBoundedContext(parent) ||
91
+ ast.isNamespaceDeclaration(parent) ||
92
+ ast.isContextMap(parent) ||
93
+ ast.isDomainMap(parent) ||
94
+ ast.isModel(parent)) {
95
+ return this.getAstNodeHoverContent(parent);
96
+ }
97
+ parent = parent.$container;
98
+ }
99
+ return '*this* refers to the current context';
100
+ }
101
+ if (ast.isBoundedContext(node)) {
102
+ const description = node.description ?? '';
103
+ const classification = effectiveClassification(node);
104
+ const team = effectiveTeam(node);
105
+ const businessModel = node.businessModel?.ref;
106
+ const evolution = node.evolution?.ref;
107
+ const relationships = node.relationships ?? [];
108
+ const terminology = node.terminology ?? [];
109
+ const decisions = node.decisions ?? [];
110
+ const classificationName = classification?.name;
111
+ const teamName = team?.name;
112
+ const signatureParts = ['boundedcontext', node.name];
113
+ if (node.domain?.ref?.name)
114
+ signatureParts.push('for', node.domain.ref.name);
115
+ if (classificationName)
116
+ signatureParts.push('as', classificationName);
117
+ if (teamName)
118
+ signatureParts.push('by', teamName);
119
+ const signature = `\`\`\`domain-lang\n${signatureParts.join(' ')}\n\`\`\``;
120
+ const fields = [signature];
121
+ if (description)
122
+ fields.push(description);
123
+ if (classification || team || businessModel || evolution)
124
+ fields.push('---');
125
+ if (classification)
126
+ fields.push(`🔖 **Classification:** ${this.refLink(classification)}`);
127
+ if (team)
128
+ fields.push(`👥 **Team:** ${this.refLink(team)}`);
129
+ if (businessModel)
130
+ fields.push(`💼 **Business Model:** ${this.refLink(businessModel)}`);
131
+ if (evolution)
132
+ fields.push(`🔄 **Evolution:** ${this.refLink(evolution)}`);
133
+ if (relationships.length) {
134
+ const relationshipLines = relationships.map(rel => `- ${this.refLink(rel.left?.link)} ${rel.arrow} ${this.refLink(rel.right?.link)}${rel.type ? ` \`${rel.type}\`` : ''}`);
135
+ fields.push(`**Relationships:**\n${relationshipLines.join('\n')}`);
136
+ }
137
+ if (terminology.length) {
138
+ const termLines = terminology.map(t => `- \`${t.name}\`: ${t.meaning ?? ''}`);
139
+ fields.push(`**Terminology:**\n${termLines.join('\n')}`);
140
+ }
141
+ if (decisions.length) {
142
+ const decisionLines = decisions.map(d => `- \`${d.name}\`: ${d.value ?? ''}`);
143
+ fields.push(`**Decisions:**\n${decisionLines.join('\n')}`);
144
+ }
145
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
146
+ `📕 **\`(boundedcontext)\` ${node.name}**\n\n` +
147
+ fields.join('\n\n');
148
+ }
149
+ if (ast.isNamespaceDeclaration && ast.isNamespaceDeclaration(node)) {
150
+ const fields = [`Contains ${node.children.length} elements.`];
151
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
152
+ `🧭 **\`(namespace)\` ${node.name}**\n\n` +
153
+ fields.join('\n\n');
154
+ }
155
+ if (ast.isContextMap && ast.isContextMap(node)) {
156
+ const fields = [];
157
+ if (node.boundedContexts.length) {
158
+ fields.push('---');
159
+ fields.push(`**📕 Bounded Contexts**\n${node.boundedContexts.flatMap(bc => bc.items.map(item => `- ${this.refLink(item.ref)}`)).join('\n')}`);
160
+ }
161
+ if (node.relationships.length) {
162
+ fields.push('---');
163
+ fields.push(`**🔗 Relationships**\n${node.relationships.map(r => `- ${this.refLink(r.left?.link)} ${r.arrow} ${this.refLink(r.right?.link)}${r.type ? ` \`${r.type}\`` : ''}`).join('\n')}`);
164
+ }
165
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
166
+ `🗺️ **\`(contextmap)\` ${node.name}**\n\n` +
167
+ fields.join('\n\n');
168
+ }
169
+ if (ast.isDomainMap && ast.isDomainMap(node)) {
170
+ const fields = [];
171
+ if (node.domains.length) {
172
+ fields.push('---');
173
+ fields.push(`**📁 Domains**\n${node.domains.flatMap(d => d.items.map(item => `- ${this.refLink(item.ref)}`)).join('\n')}`);
174
+ }
175
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
176
+ `🗺️ **\`(domainmap)\` ${node.name}**\n\n` +
177
+ fields.join('\n\n');
178
+ }
179
+ if (ast.isDecision && ast.isDecision(node)) {
180
+ const fields = [];
181
+ if (node.value) {
182
+ fields.push('---');
183
+ fields.push(`*Definition:* ${node.value}`);
184
+ }
185
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
186
+ `⚖️ **\`(decision)\` ${node.name}**\n\n` +
187
+ fields.join('\n\n');
188
+ }
189
+ if (ast.isPolicy && ast.isPolicy(node)) {
190
+ const fields = [];
191
+ if (node.value) {
192
+ fields.push('---');
193
+ fields.push(`*Definition:* ${node.value}`);
194
+ }
195
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
196
+ `📜 **\`(policy)\` ${node.name}**\n\n` +
197
+ fields.join('\n\n');
198
+ }
199
+ if (ast.isBusinessRule && ast.isBusinessRule(node)) {
200
+ const fields = [];
201
+ if (node.value) {
202
+ fields.push('---');
203
+ fields.push(`*Definition:* ${node.value}`);
204
+ }
205
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
206
+ `⚖️ **\`(rule)\` ${node.name}**\n\n` +
207
+ fields.join('\n\n');
208
+ }
209
+ if (ast.isDomainTerm && ast.isDomainTerm(node)) {
210
+ const fields = [];
211
+ if (node.meaning) {
212
+ fields.push('---');
213
+ fields.push(`*${node.meaning}*`);
214
+ }
215
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
216
+ `🗝️ **\`(term)\` ${node.name}**\n\n` +
217
+ fields.join('\n\n');
218
+ }
219
+ if (ast.isTeam && ast.isTeam(node)) {
220
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
221
+ `👥 **\`(team)\` ${node.name}**`;
222
+ }
223
+ if (ast.isClassification && ast.isClassification(node)) {
224
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
225
+ `🏷️ **\`(classification)\` ${node.name}**`;
226
+ }
227
+ if (ast.isMetadata && ast.isMetadata(node)) {
228
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
229
+ `🔖 **\`(metadata)\` ${node.name}**`;
230
+ }
231
+ if (ast.isRelationship && ast.isRelationship(node)) {
232
+ const leftPatterns = node.leftPatterns.join(', ');
233
+ const rightPatterns = node.rightPatterns.join(', ');
234
+ const fields = [];
235
+ fields.push(`${this.refLink(node.left.link)} ${node.arrow} ${this.refLink(node.right.link)}`);
236
+ if (node.type)
237
+ fields.push(`**Type:** \`${node.type}\``);
238
+ if (leftPatterns)
239
+ fields.push(`**Left patterns:** ${leftPatterns}`);
240
+ if (rightPatterns)
241
+ fields.push(`**Right patterns:** ${rightPatterns}`);
242
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
243
+ `🔗 **\`(relationship)\`**\n\n` +
244
+ fields.join('\n\n');
245
+ }
246
+ if (ast.isImportStatement && ast.isImportStatement(node)) {
247
+ const fields = [];
248
+ fields.push(`**URI:** \`${node.uri}\``);
249
+ if (node.symbols.length)
250
+ fields.push(`**Imports:** ${node.symbols.map(s => `\`${s}\``).join(', ')}`);
251
+ if (node.alias)
252
+ fields.push(`**Alias:** \`${node.alias}\``);
253
+ if (node.integrity)
254
+ fields.push(`**Integrity:** \`${node.integrity}\``);
255
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
256
+ `📦 **\`(import)\`**\n\n` +
257
+ fields.join('\n\n');
258
+ }
259
+ const title = ast.isType(node) ? node.name : node.$type.toLowerCase();
260
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
261
+ `ℹ️ **\`(${node.$type.toLowerCase()})\`${ast.isType(node) ? ` ${title}` : ''}**`;
262
+ }
263
+ catch (error) {
264
+ console.error('Error in getAstNodeHoverContent:', error);
265
+ return 'Unable to display complete information.';
266
+ }
267
+ }
268
+ getRefName(ref) {
269
+ const node = isReference(ref) ? ref.ref : ref;
270
+ if (node && ast.isType(node)) {
271
+ return node.name;
272
+ }
273
+ return '';
274
+ }
275
+ refLink(ref, label) {
276
+ if (label) {
277
+ return `[${label}](#${encodeURIComponent(label)})`;
278
+ }
279
+ const node = isReference(ref) ? ref.ref : ref;
280
+ if (node && ast.isType(node)) {
281
+ let linkLabel = node.name;
282
+ try {
283
+ linkLabel = this.qualifiedNameProvider.getQualifiedName(node.$container, node.name);
284
+ }
285
+ catch {
286
+ // fallback to name
287
+ }
288
+ return `[${linkLabel}](#${encodeURIComponent(linkLabel)})`;
289
+ }
290
+ return '';
291
+ }
292
+ getKeywordHoverContent(node) {
293
+ let comment = isAstNodeWithComment(node) ? node.$comment : undefined;
294
+ if (!comment) {
295
+ comment = CstUtils.findCommentNode(node.$cstNode, ['ML_COMMENT'])?.text;
296
+ }
297
+ if (comment && isJSDoc(comment)) {
298
+ const markdown = parseJSDoc(comment).toMarkdown();
299
+ if (markdown) {
300
+ return { contents: { kind: 'markdown', value: markdown } };
301
+ }
302
+ }
303
+ return undefined;
304
+ }
305
+ }
306
+ //# sourceMappingURL=domain-lang-hover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-lang-hover.js","sourceRoot":"","sources":["../../../src/lsp/hover/domain-lang-hover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Keyword explanations for DomainLang hover documentation.
3
+ *
4
+ * This dictionary provides fallback hover content for keywords that don't have
5
+ * JSDoc comments in the grammar file, or for providing richer DDD pattern explanations.
6
+ *
7
+ * Basic keyword documentation (domain, boundedcontext, etc.) is now in the grammar file
8
+ * as JSDoc comments. This dictionary focuses on DDD integration patterns and advanced concepts.
9
+ *
10
+ * @see src/language/domain-lang.langium for basic keyword JSDoc
11
+ * @see ddd-pattern-explanations.ts for role patterns and relationship types
12
+ */
13
+ export declare const keywordExplanations: Record<string, string>;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Keyword explanations for DomainLang hover documentation.
3
+ *
4
+ * This dictionary provides fallback hover content for keywords that don't have
5
+ * JSDoc comments in the grammar file, or for providing richer DDD pattern explanations.
6
+ *
7
+ * Basic keyword documentation (domain, boundedcontext, etc.) is now in the grammar file
8
+ * as JSDoc comments. This dictionary focuses on DDD integration patterns and advanced concepts.
9
+ *
10
+ * @see src/language/domain-lang.langium for basic keyword JSDoc
11
+ * @see ddd-pattern-explanations.ts for role patterns and relationship types
12
+ */
13
+ export const keywordExplanations = {
14
+ // Advanced syntax keywords
15
+ implements: "**implements** - Declares that a Bounded Context or type implements a Domain or interface.",
16
+ as: "**as** - Used for aliasing or renaming imports or types.",
17
+ from: "**from** - Specifies the source module or file for an import statement.",
18
+ type: "**type** - Declares a new type or alias in the model.",
19
+ map: "**map** - Defines a mapping or transformation between elements.",
20
+ this: "**this** - Refers to the current context or object.",
21
+ // DDD Classifiers
22
+ entity: "**Entity** - Domain object with distinct identity that runs through time.",
23
+ valueobject: "**Value Object** - Immutable object that describes a characteristic.",
24
+ aggregate: "**Aggregate** - Cluster of domain objects with a root and boundary.",
25
+ service: "**Service** - Stateless domain operation.",
26
+ event: "**Event** - Significant domain occurrence or state change.",
27
+ businessrule: "**Business Rule** - Rule that constrains business behavior.",
28
+ // DDD Integration Patterns
29
+ acl: "**ACL (Anti-Corruption Layer)** - Translation layer protecting downstream context from upstream changes.",
30
+ ohs: "**OHS (Open Host Service)** - Well-defined protocol providing access to a subsystem.",
31
+ pl: "**PL (Published Language)** - Documented shared language for context communication.",
32
+ cf: "**CF (Conformist)** - Downstream adopts upstream model without translation.",
33
+ bbom: "**BBoM (Big Ball of Mud)** - System with tangled architecture and no clear boundaries.",
34
+ sk: "**SK (Shared Kernel)** - Shared domain model subset requiring coordination.",
35
+ p: "**P (Partnership)** - Teams collaborate closely with shared success/failure.",
36
+ // DDD Relationship Types
37
+ separateways: "**Separate Ways** - No connection between contexts, each solves problems independently.",
38
+ partnership: "**Partnership** - Teams share risks and rewards with close collaboration.",
39
+ sharedkernel: "**Shared Kernel** - Shared domain model subset requiring coordination.",
40
+ customersupplier: "**Customer-Supplier** - Upstream prioritizes downstream needs.",
41
+ upstreamdownstream: "**Upstream-Downstream** - Upstream changes affect downstream.",
42
+ // Relationship arrows
43
+ '<->': "**Bidirectional** - Two contexts connected in both directions.",
44
+ '->': "**Upstream → Downstream** - Left depends on right.",
45
+ '<-': "**Downstream ← Upstream** - Right depends on left.",
46
+ };
47
+ //# sourceMappingURL=domain-lang-keywords.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-lang-keywords.js","sourceRoot":"","sources":["../../../src/lsp/hover/domain-lang-keywords.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACvD,2BAA2B;IAC3B,UAAU,EAAE,4FAA4F;IACxG,EAAE,EAAE,0DAA0D;IAC9D,IAAI,EAAE,yEAAyE;IAC/E,IAAI,EAAE,uDAAuD;IAC7D,GAAG,EAAE,iEAAiE;IACtE,IAAI,EAAE,qDAAqD;IAE3D,kBAAkB;IAClB,MAAM,EAAE,2EAA2E;IACnF,WAAW,EAAE,sEAAsE;IACnF,SAAS,EAAE,qEAAqE;IAChF,OAAO,EAAE,2CAA2C;IACpD,KAAK,EAAE,4DAA4D;IACnE,YAAY,EAAE,6DAA6D;IAE3E,2BAA2B;IAC3B,GAAG,EAAE,0GAA0G;IAC/G,GAAG,EAAE,sFAAsF;IAC3F,EAAE,EAAE,qFAAqF;IACzF,EAAE,EAAE,6EAA6E;IACjF,IAAI,EAAE,wFAAwF;IAC9F,EAAE,EAAE,6EAA6E;IACjF,CAAC,EAAE,8EAA8E;IAEjF,yBAAyB;IACzB,YAAY,EAAE,yFAAyF;IACvG,WAAW,EAAE,2EAA2E;IACxF,YAAY,EAAE,wEAAwE;IACtF,gBAAgB,EAAE,gEAAgE;IAClF,kBAAkB,EAAE,+DAA+D;IAEnF,sBAAsB;IACtB,KAAK,EAAE,gEAAgE;IACvE,IAAI,EAAE,oDAAoD;IAC1D,IAAI,EAAE,oDAAoD;CAC7D,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import { EmptyFileSystem } from 'langium';
2
+ import { startLanguageServer } from 'langium/lsp';
3
+ import { BrowserMessageReader, BrowserMessageWriter, createConnection } from 'vscode-languageserver/browser.js';
4
+ import { createDomainLangServices } from './domain-lang-module.js';
5
+ // declare const self: DedicatedWorkerGlobalScope;
6
+ const messageReader = new BrowserMessageReader(self);
7
+ const messageWriter = new BrowserMessageWriter(self);
8
+ const connection = createConnection(messageReader, messageWriter);
9
+ const { shared } = createDomainLangServices({ connection, ...EmptyFileSystem });
10
+ startLanguageServer(shared);
11
+ //# sourceMappingURL=main-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-browser.js","sourceRoot":"","sources":["../src/main-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAChH,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,kDAAkD;AAElD,MAAM,aAAa,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACrD,MAAM,aAAa,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAErD,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAElE,MAAM,EAAE,MAAM,EAAE,GAAG,wBAAwB,CAAC,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC;AAEhF,mBAAmB,CAAC,MAAM,CAAC,CAAC"}
package/out/main.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/out/main.js ADDED
@@ -0,0 +1,74 @@
1
+ import { startLanguageServer } from 'langium/lsp';
2
+ import { NodeFileSystem } from 'langium/node';
3
+ import { createConnection, ProposedFeatures } from 'vscode-languageserver/node.js';
4
+ import { createDomainLangServices } from './domain-lang-module.js';
5
+ import { ensureImportGraphFromEntryFile } from './utils/import-utils.js';
6
+ import { URI } from 'langium';
7
+ // Create a connection to the client
8
+ const connection = createConnection(ProposedFeatures.all);
9
+ // Inject the shared services and language-specific services
10
+ const { shared, DomainLang } = createDomainLangServices({ connection, ...NodeFileSystem });
11
+ // Initialize workspace on connection
12
+ connection.onInitialize(async (params) => {
13
+ const workspaceRoot = params.rootUri ? URI.parse(params.rootUri).fsPath : undefined;
14
+ if (workspaceRoot) {
15
+ try {
16
+ // Initialize workspace manager
17
+ const workspaceManager = DomainLang.imports.WorkspaceManager;
18
+ await workspaceManager.initialize(workspaceRoot);
19
+ console.warn(`DomainLang workspace initialized: ${workspaceRoot}`);
20
+ }
21
+ catch (error) {
22
+ const message = error instanceof Error ? error.message : String(error);
23
+ console.warn(`Failed to initialize workspace: ${message}`);
24
+ // Continue without workspace - local imports will still work
25
+ }
26
+ }
27
+ return {
28
+ capabilities: {
29
+ // Language server capabilities are configured by Langium
30
+ }
31
+ };
32
+ });
33
+ // Optionally start from a single entry file and follow imports.
34
+ // Configure via env DOMAINLANG_ENTRY (absolute or workspace-relative path)
35
+ const entryFile = process.env.DOMAINLANG_ENTRY;
36
+ if (entryFile) {
37
+ let currentGraph = new Set();
38
+ /**
39
+ * Reloads the import graph from the entry file.
40
+ * Handles errors gracefully and notifies the LSP client.
41
+ */
42
+ const reloadFromEntry = async () => {
43
+ try {
44
+ currentGraph = await ensureImportGraphFromEntryFile(entryFile, shared.workspace.LangiumDocuments);
45
+ console.warn(`Successfully loaded import graph from ${entryFile}`);
46
+ }
47
+ catch (error) {
48
+ const message = error instanceof Error ? error.message : String(error);
49
+ console.error(`Failed to preload import graph from ${entryFile}: ${message}`);
50
+ // Notify LSP client of the error
51
+ connection.console.error(`DomainLang: Could not load entry file ${entryFile}. Error: ${message}`);
52
+ }
53
+ };
54
+ // Initial load from entry file, then start the server
55
+ reloadFromEntry().finally(() => startLanguageServer(shared));
56
+ // Any change within the loaded graph should trigger a reload from the entry
57
+ shared.workspace.TextDocuments.onDidChangeContent(async (event) => {
58
+ const changed = event.document.uri;
59
+ if (currentGraph.has(changed)) {
60
+ await reloadFromEntry();
61
+ }
62
+ });
63
+ // If the entry file itself is opened/changed, also reload
64
+ shared.workspace.TextDocuments.onDidOpen(async (event) => {
65
+ if (URI.parse(event.document.uri).fsPath === URI.file(entryFile).fsPath) {
66
+ await reloadFromEntry();
67
+ }
68
+ });
69
+ }
70
+ else {
71
+ // No entry file configured: start normally
72
+ startLanguageServer(shared);
73
+ }
74
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * SDK AST Augmentation - Module augmentation for native SDK properties.
3
+ *
4
+ * This file uses TypeScript's declaration merging to add computed helpers
5
+ * directly to the AST types. After importing this module, BoundedContext,
6
+ * Domain, and Relationship instances expose convenience getters.
7
+ *
8
+ * **Only properties that add value beyond direct AST access are augmented:**
9
+ * - Precedence resolution: `effectiveClassification`, `effectiveTeam` (for array-based properties)
10
+ * - Data transformation: `metadataMap` (array to Map)
11
+ * - Computed values: `fqn` (fully qualified name)
12
+ * - Helper methods: `hasClassification()`, `hasTeam()`, `hasMetadata()`, `hasType()`
13
+ *
14
+ * **Direct AST access (no augmentation needed):**
15
+ * - `bc.description` - Direct string property
16
+ * - `bc.businessModel?.ref` - Direct reference
17
+ * - `bc.evolution?.ref` - Direct reference
18
+ * - `bc.archetype?.ref` - Direct reference
19
+ * - `domain.description` - Direct string property
20
+ * - `domain.vision` - Direct string property
21
+ * - `domain.type?.ref` - Direct reference
22
+ *
23
+ * **Usage:**
24
+ * ```typescript
25
+ * import '../sdk/ast-augmentation.js'; // Enable augmented properties
26
+ * import { fromDocument } from '../sdk/index.js';
27
+ *
28
+ * fromDocument(document); // Ensures augmentation
29
+ * const bc: BoundedContext = ...;
30
+ * console.log(bc.effectiveClassification?.name);
31
+ * console.log(bc.metadataMap.get('Language'));
32
+ * // Direct access for simple properties:
33
+ * console.log(bc.businessModel?.ref?.name);
34
+ * ```
35
+ *
36
+ * **Properties added to BoundedContext:**
37
+ * - `effectiveClassification` - Inline `as` header → body `classification:`
38
+ * - `effectiveTeam` - Inline `team` header → body `team:`
39
+ * - `metadataMap` - Metadata entries exposed as a ReadonlyMap
40
+ * - `fqn` - Computed fully qualified name
41
+ * - `hasClassification(name)` - Check if classification matches
42
+ * - `hasTeam(name)` - Check if team matches
43
+ * - `hasMetadata(key, value?)` - Check metadata
44
+ *
45
+ * **Properties added to Domain:**
46
+ * - `fqn` - Computed fully qualified name
47
+ * - `hasType(name)` - Check type matches
48
+ *
49
+ * **Properties added to Relationship:**
50
+ * - `hasPattern(pattern)` - Check if pattern exists on either side
51
+ * - `hasLeftPattern(pattern)` - Check left patterns
52
+ * - `hasRightPattern(pattern)` - Check right patterns
53
+ * - `isUpstream(side)` - Check if side is upstream
54
+ * - `isDownstream(side)` - Check if side is downstream
55
+ * - `isBidirectional` - Check if relationship is bidirectional
56
+ * - `leftContextName` - Resolved name of left context
57
+ * - `rightContextName` - Resolved name of right context
58
+ *
59
+ * @module sdk/ast-augmentation
60
+ */
61
+ /**
62
+ * Module augmentation for native SDK properties on AST types.
63
+ */
64
+ declare module '../generated/ast.js' {
65
+ /**
66
+ * Augmented BoundedContext with SDK-computed properties.
67
+ *
68
+ * Note: description, businessModel, evolution, archetype, metadata, relationships,
69
+ * terminology, and decisions are direct AST properties - use them directly.
70
+ */
71
+ interface BoundedContext {
72
+ /** Effective classification with inline precedence (header `as` > body `classification:`) */
73
+ readonly effectiveClassification: import('../generated/ast.js').Classification | undefined;
74
+ /** Effective team with inline precedence (header `by` > body `team:`) */
75
+ readonly effectiveTeam: import('../generated/ast.js').Team | undefined;
76
+ /** Metadata entries exposed as a map for O(1) lookups */
77
+ readonly metadataMap: ReadonlyMap<string, string>;
78
+ /** SDK-computed fully qualified name */
79
+ readonly fqn: string;
80
+ /** Checks if this bounded context has the specified classification. */
81
+ hasClassification(name: string | import('../generated/ast.js').Classification): boolean;
82
+ /** Checks if this bounded context is owned by the specified team. */
83
+ hasTeam(name: string | import('../generated/ast.js').Team): boolean;
84
+ /** Checks if this bounded context has metadata with the given key (and optionally value). */
85
+ hasMetadata(key: string, value?: string): boolean;
86
+ }
87
+ /**
88
+ * Augmented Domain with SDK-computed properties.
89
+ *
90
+ * Note: description, vision, and type are direct AST properties - use them directly.
91
+ */
92
+ interface Domain {
93
+ /** SDK-computed fully qualified name */
94
+ readonly fqn: string;
95
+ /** Checks if this domain has the specified type. */
96
+ hasType(name: string | import('../generated/ast.js').Classification): boolean;
97
+ }
98
+ /**
99
+ * Augmented Relationship with SDK helper methods.
100
+ */
101
+ interface Relationship {
102
+ /** Resolved name of left context (handles 'this') */
103
+ readonly leftContextName: string;
104
+ /** Resolved name of right context (handles 'this') */
105
+ readonly rightContextName: string;
106
+ /** Whether this is a bidirectional relationship (<->) */
107
+ readonly isBidirectional: boolean;
108
+ /**
109
+ * Checks if the relationship has a specific integration pattern on either side.
110
+ * Accepts both abbreviations (SK, ACL) and full names (SharedKernel, AntiCorruptionLayer).
111
+ * @param pattern - Pattern abbreviation or full name
112
+ */
113
+ hasPattern(pattern: import('./patterns.js').IntegrationPattern | string): boolean;
114
+ /**
115
+ * Checks if the left side has a specific integration pattern.
116
+ * @param pattern - Pattern abbreviation or full name
117
+ */
118
+ hasLeftPattern(pattern: import('./patterns.js').IntegrationPattern | string): boolean;
119
+ /**
120
+ * Checks if the right side has a specific integration pattern.
121
+ * @param pattern - Pattern abbreviation or full name
122
+ */
123
+ hasRightPattern(pattern: import('./patterns.js').IntegrationPattern | string): boolean;
124
+ /**
125
+ * Checks if the specified side is upstream (provider) in this relationship.
126
+ * @param side - 'left' or 'right'
127
+ */
128
+ isUpstream(side: 'left' | 'right'): boolean;
129
+ /**
130
+ * Checks if the specified side is downstream (consumer) in this relationship.
131
+ * @param side - 'left' or 'right'
132
+ */
133
+ isDownstream(side: 'left' | 'right'): boolean;
134
+ }
135
+ }
136
+ export {};