@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 @@
1
+ {"version":3,"file":"grammar.js","sourceRoot":"","sources":["../../src/generated/grammar.ts"],"names":[],"mappings":"AAAA;;;gFAGgF;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,IAAI,uBAA4C,CAAC;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAY,EAAE,CAAC,uBAAuB,IAAI,CAAC,uBAAuB,GAAG,mBAAmB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA87ExH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /******************************************************************************
2
+ * This file was generated by langium-cli 4.1.0.
3
+ * DO NOT EDIT MANUALLY!
4
+ ******************************************************************************/
5
+ import type { LangiumSharedCoreServices, LangiumCoreServices, LangiumGeneratedCoreServices, LangiumGeneratedSharedCoreServices, Module } from 'langium';
6
+ export declare const DomainLangLanguageMetaData: {
7
+ readonly languageId: "domain-lang";
8
+ readonly fileExtensions: readonly [".dlang"];
9
+ readonly caseInsensitive: false;
10
+ readonly mode: "development";
11
+ };
12
+ export declare const DomainLangGeneratedSharedModule: Module<LangiumSharedCoreServices, LangiumGeneratedSharedCoreServices>;
13
+ export declare const DomainLangGeneratedModule: Module<LangiumCoreServices, LangiumGeneratedCoreServices>;
@@ -0,0 +1,21 @@
1
+ /******************************************************************************
2
+ * This file was generated by langium-cli 4.1.0.
3
+ * DO NOT EDIT MANUALLY!
4
+ ******************************************************************************/
5
+ import { DomainLangAstReflection } from './ast.js';
6
+ import { DomainLangGrammar } from './grammar.js';
7
+ export const DomainLangLanguageMetaData = {
8
+ languageId: 'domain-lang',
9
+ fileExtensions: ['.dlang'],
10
+ caseInsensitive: false,
11
+ mode: 'development'
12
+ };
13
+ export const DomainLangGeneratedSharedModule = {
14
+ AstReflection: () => new DomainLangAstReflection()
15
+ };
16
+ export const DomainLangGeneratedModule = {
17
+ Grammar: () => DomainLangGrammar(),
18
+ LanguageMetaData: () => DomainLangLanguageMetaData,
19
+ parser: {}
20
+ };
21
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/generated/module.ts"],"names":[],"mappings":"AAAA;;;gFAGgF;AAGhF,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACtC,UAAU,EAAE,aAAa;IACzB,cAAc,EAAE,CAAC,QAAQ,CAAC;IAC1B,eAAe,EAAE,KAAK;IACtB,IAAI,EAAE,aAAa;CACc,CAAC;AAEtC,MAAM,CAAC,MAAM,+BAA+B,GAA0E;IAClH,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,uBAAuB,EAAE;CACrD,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAA8D;IAChG,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE;IAClC,gBAAgB,EAAE,GAAG,EAAE,CAAC,0BAA0B;IAClD,MAAM,EAAE,EAAE;CACb,CAAC"}
package/out/index.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ export * from './domain-lang-module.js';
2
+ export * from './generated/ast.js';
3
+ export * from './generated/grammar.js';
4
+ export * from './generated/module.js';
5
+ export * from './ast-augmentation.js';
6
+ export * from './services/workspace-manager.js';
7
+ export * from './services/dependency-resolver.js';
8
+ export * from './services/dependency-analyzer.js';
9
+ export * from './services/governance-validator.js';
10
+ export * from './services/import-resolver.js';
11
+ export * from './services/relationship-inference.js';
12
+ export * from './services/git-url-resolver.js';
13
+ export * from './services/performance-optimizer.js';
package/out/index.js ADDED
@@ -0,0 +1,17 @@
1
+ export * from './domain-lang-module.js';
2
+ export * from './generated/ast.js';
3
+ export * from './generated/grammar.js';
4
+ export * from './generated/module.js';
5
+ // Note: main.js is intentionally NOT exported here - it's the LSP entry point
6
+ // and creates a connection when imported, which breaks CLI/SDK standalone usage
7
+ export * from './ast-augmentation.js';
8
+ // Export services
9
+ export * from './services/workspace-manager.js';
10
+ export * from './services/dependency-resolver.js';
11
+ export * from './services/dependency-analyzer.js';
12
+ export * from './services/governance-validator.js';
13
+ export * from './services/import-resolver.js';
14
+ export * from './services/relationship-inference.js';
15
+ export * from './services/git-url-resolver.js';
16
+ export * from './services/performance-optimizer.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,8EAA8E;AAC9E,gFAAgF;AAChF,cAAc,uBAAuB,CAAC;AAEtC,kBAAkB;AAClB,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Completion provider for DomainLang - context-aware, grammar-aligned.
3
+ *
4
+ * **Design:**
5
+ * - Context-aware: Only suggests what's valid at cursor position
6
+ * - Grammar-aligned: Completions match grammar structure exactly
7
+ * - Simple: Uses parent node to determine context
8
+ * - Maintainable: Clear mapping from grammar to completions
9
+ */
10
+ import { CompletionAcceptor, CompletionContext, DefaultCompletionProvider, NextFeature } from 'langium/lsp';
11
+ export declare class DomainLangCompletionProvider extends DefaultCompletionProvider {
12
+ protected completionFor(context: CompletionContext, next: NextFeature, acceptor: CompletionAcceptor): void;
13
+ private addTopLevelSnippets;
14
+ /**
15
+ * Add property/collection completions for BoundedContext.
16
+ */
17
+ private addBoundedContextCompletions;
18
+ /**
19
+ * Add property completions for Domain.
20
+ */
21
+ private addDomainCompletions;
22
+ /**
23
+ * Add completions for ContextMap.
24
+ * Suggests relationship patterns and context references.
25
+ */
26
+ private addContextMapCompletions;
27
+ /**
28
+ * Add completions for DomainMap.
29
+ * Suggests domain references.
30
+ */
31
+ private addDomainMapCompletions;
32
+ /**
33
+ * Add completions for relationships.
34
+ * Provides integration patterns and relationship types.
35
+ */
36
+ private addRelationshipCompletions;
37
+ }
@@ -0,0 +1,452 @@
1
+ /**
2
+ * Completion provider for DomainLang - context-aware, grammar-aligned.
3
+ *
4
+ * **Design:**
5
+ * - Context-aware: Only suggests what's valid at cursor position
6
+ * - Grammar-aligned: Completions match grammar structure exactly
7
+ * - Simple: Uses parent node to determine context
8
+ * - Maintainable: Clear mapping from grammar to completions
9
+ */
10
+ import { DefaultCompletionProvider } from 'langium/lsp';
11
+ import { CompletionItemKind, InsertTextFormat } from 'vscode-languageserver';
12
+ import * as ast from '../generated/ast.js';
13
+ /**
14
+ * Top-level snippet templates for creating new AST nodes.
15
+ */
16
+ const TOP_LEVEL_SNIPPETS = [
17
+ {
18
+ label: '⚡ Domain (simple)',
19
+ kind: CompletionItemKind.Snippet,
20
+ insertText: 'Domain ${1:Name} {}',
21
+ documentation: '📝 Snippet: Create a simple domain',
22
+ sortText: '0_snippet_domain_simple'
23
+ },
24
+ {
25
+ label: '⚡ Domain (detailed)',
26
+ kind: CompletionItemKind.Snippet,
27
+ insertText: [
28
+ 'Domain ${1:Name} {',
29
+ '\tdescription: "${2:Description}"',
30
+ '\tvision: "${3:Vision}"',
31
+ '\tclassification: ${4:CoreDomain}',
32
+ '}'
33
+ ].join('\n'),
34
+ documentation: '📝 Snippet: Create a domain with description and vision',
35
+ sortText: '0_snippet_domain_detailed'
36
+ },
37
+ {
38
+ label: '⚡ BoundedContext (simple)',
39
+ kind: CompletionItemKind.Snippet,
40
+ insertText: 'bc ${1:Name} for ${2:Domain} as ${3:Core} by ${4:Team}',
41
+ documentation: '📝 Snippet: Quick bounded context definition',
42
+ sortText: '0_snippet_bc_simple'
43
+ },
44
+ {
45
+ label: '⚡ BoundedContext (detailed)',
46
+ kind: CompletionItemKind.Snippet,
47
+ insertText: [
48
+ 'BoundedContext ${1:Name} for ${2:Domain} {',
49
+ '\tdescription: "${3:Description}"',
50
+ '\tteam: ${4:Team}',
51
+ '\trole: ${5:Core}',
52
+ '\t',
53
+ '\tterminology {',
54
+ '\t\tterm ${6:Term}: "${7:Definition}"',
55
+ '\t}',
56
+ '}'
57
+ ].join('\n'),
58
+ documentation: '📝 Snippet: Full bounded context with all common blocks',
59
+ sortText: '0_snippet_bc_detailed'
60
+ },
61
+ {
62
+ label: '⚡ ContextMap',
63
+ kind: CompletionItemKind.Snippet,
64
+ insertText: [
65
+ 'ContextMap ${1:Name} {',
66
+ '\tcontains ${2:Context1}, ${3:Context2}',
67
+ '}'
68
+ ].join('\n'),
69
+ documentation: '📝 Snippet: Create a context map',
70
+ sortText: '0_snippet_contextmap'
71
+ },
72
+ {
73
+ label: '⚡ DomainMap',
74
+ kind: CompletionItemKind.Snippet,
75
+ insertText: [
76
+ 'DomainMap ${1:Name} {',
77
+ '\tcontains ${2:Domain1}, ${3:Domain2}',
78
+ '}'
79
+ ].join('\n'),
80
+ documentation: '📝 Snippet: Create a domain map',
81
+ sortText: '0_snippet_domainmap'
82
+ },
83
+ {
84
+ label: '⚡ Team',
85
+ kind: CompletionItemKind.Snippet,
86
+ insertText: 'Team ${1:TeamName}',
87
+ documentation: '📝 Snippet: Define a team',
88
+ sortText: '0_snippet_team'
89
+ },
90
+ {
91
+ label: '⚡ Classification',
92
+ kind: CompletionItemKind.Snippet,
93
+ insertText: 'Classification ${1:Name}',
94
+ documentation: '📝 Snippet: Define a reusable classification label',
95
+ sortText: '0_snippet_classification'
96
+ },
97
+ {
98
+ label: '⚡ Metadata',
99
+ kind: CompletionItemKind.Snippet,
100
+ insertText: 'Metadata ${1:KeyName}',
101
+ documentation: '📝 Snippet: Define a metadata key',
102
+ sortText: '0_snippet_metadata'
103
+ },
104
+ {
105
+ label: '⚡ Namespace',
106
+ kind: CompletionItemKind.Snippet,
107
+ insertText: [
108
+ 'Namespace ${1:name.space} {',
109
+ '\t$0',
110
+ '}'
111
+ ].join('\n'),
112
+ documentation: '📝 Snippet: Create a hierarchical namespace',
113
+ sortText: '0_snippet_namespace'
114
+ }
115
+ ];
116
+ export class DomainLangCompletionProvider extends DefaultCompletionProvider {
117
+ completionFor(context, next, acceptor) {
118
+ const node = context.node;
119
+ if (!node) {
120
+ super.completionFor(context, next, acceptor);
121
+ return;
122
+ }
123
+ // Strategy: Check node type and container to determine what's allowed at cursor position
124
+ // Check if cursor is after the node (for top-level positioning)
125
+ const offset = context.offset;
126
+ const nodeEnd = node.$cstNode?.end ?? 0;
127
+ const isAfterNode = offset >= nodeEnd;
128
+ // If we're positioned after a BC/Domain (e.g., on next line): show top-level
129
+ if ((ast.isBoundedContext(node) || ast.isDomain(node)) && isAfterNode) {
130
+ this.addTopLevelSnippets(acceptor, context);
131
+ // Let Langium provide keywords like "bc", "Domain", etc.
132
+ super.completionFor(context, next, acceptor);
133
+ return;
134
+ }
135
+ // If we're AT a BoundedContext node: only BC documentation blocks
136
+ if (ast.isBoundedContext(node)) {
137
+ this.addBoundedContextCompletions(node, acceptor, context);
138
+ super.completionFor(context, next, acceptor);
139
+ return;
140
+ }
141
+ // If we're AT a Domain node: only Domain documentation blocks
142
+ if (ast.isDomain(node)) {
143
+ this.addDomainCompletions(node, acceptor, context);
144
+ super.completionFor(context, next, acceptor);
145
+ return;
146
+ }
147
+ // If we're AT a ContextMap node: relationships and contains
148
+ if (ast.isContextMap(node)) {
149
+ this.addContextMapCompletions(node, acceptor, context);
150
+ super.completionFor(context, next, acceptor);
151
+ return;
152
+ }
153
+ // If we're AT a DomainMap node: contains
154
+ if (ast.isDomainMap(node)) {
155
+ this.addDomainMapCompletions(node, acceptor, context);
156
+ super.completionFor(context, next, acceptor);
157
+ return;
158
+ }
159
+ // If we're AT the Model or NamespaceDeclaration level: all top-level constructs
160
+ if (ast.isModel(node) || ast.isNamespaceDeclaration(node)) {
161
+ this.addTopLevelSnippets(acceptor, context);
162
+ super.completionFor(context, next, acceptor);
163
+ return;
164
+ }
165
+ const container = node.$container;
166
+ // Inside BoundedContext body: suggest missing scalar properties and collections
167
+ if (ast.isBoundedContext(container)) {
168
+ this.addBoundedContextCompletions(container, acceptor, context);
169
+ super.completionFor(context, next, acceptor);
170
+ return;
171
+ }
172
+ // Inside Domain body: suggest missing scalar properties
173
+ if (ast.isDomain(container)) {
174
+ this.addDomainCompletions(container, acceptor, context);
175
+ super.completionFor(context, next, acceptor);
176
+ return;
177
+ }
178
+ // Inside ContextMap body: relationships and contains
179
+ if (ast.isContextMap(container)) {
180
+ this.addContextMapCompletions(container, acceptor, context);
181
+ super.completionFor(context, next, acceptor);
182
+ return;
183
+ }
184
+ // Inside DomainMap body: contains
185
+ if (ast.isDomainMap(container)) {
186
+ this.addDomainMapCompletions(container, acceptor, context);
187
+ super.completionFor(context, next, acceptor);
188
+ return;
189
+ }
190
+ if (ast.isRelationship(node) || ast.isRelationship(container)) {
191
+ this.addRelationshipCompletions(acceptor, context);
192
+ super.completionFor(context, next, acceptor);
193
+ return;
194
+ }
195
+ // Top level container (Model or NamespaceDeclaration): all top-level constructs
196
+ if (ast.isModel(container) || ast.isNamespaceDeclaration(container)) {
197
+ this.addTopLevelSnippets(acceptor, context);
198
+ }
199
+ // Let Langium handle default completions
200
+ super.completionFor(context, next, acceptor);
201
+ }
202
+ addTopLevelSnippets(acceptor, context) {
203
+ for (const snippet of TOP_LEVEL_SNIPPETS) {
204
+ acceptor(context, {
205
+ label: snippet.label,
206
+ kind: snippet.kind,
207
+ insertText: snippet.insertText,
208
+ insertTextFormat: InsertTextFormat.Snippet,
209
+ documentation: snippet.documentation,
210
+ sortText: snippet.sortText
211
+ });
212
+ }
213
+ }
214
+ /**
215
+ * Add property/collection completions for BoundedContext.
216
+ */
217
+ addBoundedContextCompletions(node, acceptor, context) {
218
+ if (!node.description) {
219
+ acceptor(context, {
220
+ label: '⚡ description',
221
+ kind: CompletionItemKind.Snippet,
222
+ insertText: 'description: "${1:Description}"',
223
+ insertTextFormat: InsertTextFormat.Snippet,
224
+ documentation: '📝 Snippet: Describe the bounded context\'s responsibility',
225
+ sortText: '0_snippet_description'
226
+ });
227
+ }
228
+ if (node.team.length === 0) {
229
+ acceptor(context, {
230
+ label: '⚡ team',
231
+ kind: CompletionItemKind.Snippet,
232
+ insertText: 'team: ${1:TeamName}',
233
+ insertTextFormat: InsertTextFormat.Snippet,
234
+ documentation: '📝 Snippet: Assign the responsible team',
235
+ sortText: '0_snippet_team'
236
+ });
237
+ }
238
+ if (node.classification.length === 0) {
239
+ acceptor(context, {
240
+ label: '⚡ classification',
241
+ kind: CompletionItemKind.Snippet,
242
+ insertText: 'classification: ${1:Core}',
243
+ insertTextFormat: InsertTextFormat.Snippet,
244
+ documentation: '📝 Snippet: Assign the strategic classification (Core, Supporting, Generic)',
245
+ sortText: '0_snippet_classification'
246
+ });
247
+ }
248
+ if (!node.businessModel) {
249
+ acceptor(context, {
250
+ label: '⚡ businessModel',
251
+ kind: CompletionItemKind.Snippet,
252
+ insertText: 'businessModel: ${1:Commercial}',
253
+ insertTextFormat: InsertTextFormat.Snippet,
254
+ documentation: '📝 Snippet: Classify the business model',
255
+ sortText: '0_snippet_businessModel'
256
+ });
257
+ }
258
+ if (!node.evolution) {
259
+ acceptor(context, {
260
+ label: '⚡ evolution',
261
+ kind: CompletionItemKind.Snippet,
262
+ insertText: 'evolution: ${1:Product}',
263
+ insertTextFormat: InsertTextFormat.Snippet,
264
+ documentation: '📝 Snippet: Define the evolution stage (Genesis, Custom, Product, Commodity)',
265
+ sortText: '0_snippet_evolution'
266
+ });
267
+ }
268
+ if (node.terminology.length === 0) {
269
+ acceptor(context, {
270
+ label: '⚡ terminology',
271
+ kind: CompletionItemKind.Snippet,
272
+ insertText: [
273
+ 'terminology {',
274
+ '\tterm ${1:Term}: "${2:Definition}"',
275
+ '}'
276
+ ].join('\n'),
277
+ insertTextFormat: InsertTextFormat.Snippet,
278
+ documentation: '📝 Snippet: Define ubiquitous language terms',
279
+ sortText: '0_snippet_terminology'
280
+ });
281
+ }
282
+ if (node.decisions.length === 0) {
283
+ acceptor(context, {
284
+ label: '⚡ decisions',
285
+ kind: CompletionItemKind.Snippet,
286
+ insertText: [
287
+ 'decisions {',
288
+ '\tdecision [${1|technical,business|}] ${2:DecisionName}: "${3:Rationale}"',
289
+ '}'
290
+ ].join('\n'),
291
+ insertTextFormat: InsertTextFormat.Snippet,
292
+ documentation: '📝 Snippet: Document architectural decisions',
293
+ sortText: '0_snippet_decisions'
294
+ });
295
+ }
296
+ if (node.relationships.length === 0) {
297
+ acceptor(context, {
298
+ label: '⚡ relationships',
299
+ kind: CompletionItemKind.Snippet,
300
+ insertText: [
301
+ 'relationships {',
302
+ '\t${1:Context1} -> ${2:Context2}',
303
+ '}'
304
+ ].join('\n'),
305
+ insertTextFormat: InsertTextFormat.Snippet,
306
+ documentation: '📝 Snippet: Define relationships with other bounded contexts',
307
+ sortText: '0_snippet_relationships'
308
+ });
309
+ }
310
+ if (node.metadata.length === 0) {
311
+ acceptor(context, {
312
+ label: '⚡ metadata',
313
+ kind: CompletionItemKind.Snippet,
314
+ insertText: [
315
+ 'metadata {',
316
+ '\t${1:Language}: "${2:TypeScript}"',
317
+ '}'
318
+ ].join('\n'),
319
+ insertTextFormat: InsertTextFormat.Snippet,
320
+ documentation: '📝 Snippet: Add metadata key-value pairs',
321
+ sortText: '0_snippet_metadata'
322
+ });
323
+ }
324
+ }
325
+ /**
326
+ * Add property completions for Domain.
327
+ */
328
+ addDomainCompletions(node, acceptor, context) {
329
+ if (!node.description) {
330
+ acceptor(context, {
331
+ label: '⚡ description',
332
+ kind: CompletionItemKind.Snippet,
333
+ insertText: 'description: "${1:Description}"',
334
+ insertTextFormat: InsertTextFormat.Snippet,
335
+ documentation: '📝 Snippet: Describe what this domain encompasses',
336
+ sortText: '0_snippet_description'
337
+ });
338
+ }
339
+ if (!node.vision) {
340
+ acceptor(context, {
341
+ label: '⚡ vision',
342
+ kind: CompletionItemKind.Snippet,
343
+ insertText: 'vision: "${1:Vision statement}"',
344
+ insertTextFormat: InsertTextFormat.Snippet,
345
+ documentation: '📝 Snippet: Define the strategic vision for this domain',
346
+ sortText: '0_snippet_vision'
347
+ });
348
+ }
349
+ if (!node.type) {
350
+ acceptor(context, {
351
+ label: '⚡ type',
352
+ kind: CompletionItemKind.Snippet,
353
+ insertText: 'type: ${1:Core}',
354
+ insertTextFormat: InsertTextFormat.Snippet,
355
+ documentation: '📝 Snippet: Classify as Core, Supporting, or Generic domain type',
356
+ sortText: '0_snippet_type'
357
+ });
358
+ }
359
+ }
360
+ /**
361
+ * Add completions for ContextMap.
362
+ * Suggests relationship patterns and context references.
363
+ */
364
+ addContextMapCompletions(node, acceptor, context) {
365
+ // Suggest contains if no contexts yet
366
+ if (node.boundedContexts.length === 0) {
367
+ acceptor(context, {
368
+ label: 'contains',
369
+ kind: CompletionItemKind.Keyword,
370
+ insertText: 'contains ${1:Context1}, ${2:Context2}',
371
+ insertTextFormat: InsertTextFormat.Snippet,
372
+ documentation: 'Add bounded contexts to this map',
373
+ sortText: '0_contains'
374
+ });
375
+ }
376
+ // Always suggest relationship snippet
377
+ acceptor(context, {
378
+ label: 'relationship (simple)',
379
+ kind: CompletionItemKind.Snippet,
380
+ insertText: '${1:Context1} -> ${2:Context2}',
381
+ insertTextFormat: InsertTextFormat.Snippet,
382
+ documentation: 'Add a simple upstream-downstream relationship',
383
+ sortText: '1_relationship_simple'
384
+ });
385
+ acceptor(context, {
386
+ label: 'relationship (with patterns)',
387
+ kind: CompletionItemKind.Snippet,
388
+ insertText: '[${1|OHS,PL,ACL,CF,P,SK|}] ${2:Context1} -> [${3|OHS,PL,ACL,CF,P,SK|}] ${4:Context2}',
389
+ insertTextFormat: InsertTextFormat.Snippet,
390
+ documentation: 'Add a relationship with integration patterns',
391
+ sortText: '1_relationship_patterns'
392
+ });
393
+ }
394
+ /**
395
+ * Add completions for DomainMap.
396
+ * Suggests domain references.
397
+ */
398
+ addDomainMapCompletions(node, acceptor, context) {
399
+ // Suggest contains if no domains yet
400
+ if (node.domains.length === 0) {
401
+ acceptor(context, {
402
+ label: 'contains',
403
+ kind: CompletionItemKind.Keyword,
404
+ insertText: 'contains ${1:Domain1}, ${2:Domain2}',
405
+ insertTextFormat: InsertTextFormat.Snippet,
406
+ documentation: 'Add domains to this map',
407
+ sortText: '0_contains'
408
+ });
409
+ }
410
+ }
411
+ /**
412
+ * Add completions for relationships.
413
+ * Provides integration patterns and relationship types.
414
+ */
415
+ addRelationshipCompletions(acceptor, context) {
416
+ // Integration pattern completions
417
+ const patterns = [
418
+ { label: 'OHS (Open Host Service)', insertText: '[OHS]', doc: 'Open Host Service pattern' },
419
+ { label: 'PL (Published Language)', insertText: '[PL]', doc: 'Published Language pattern' },
420
+ { label: 'ACL (Anti-Corruption Layer)', insertText: '[ACL]', doc: 'Anti-Corruption Layer pattern' },
421
+ { label: 'CF (Conformist)', insertText: '[CF]', doc: 'Conformist pattern' },
422
+ { label: 'P (Partnership)', insertText: '[P]', doc: 'Partnership pattern' },
423
+ { label: 'SK (Shared Kernel)', insertText: '[SK]', doc: 'Shared Kernel pattern' }
424
+ ];
425
+ for (const pattern of patterns) {
426
+ acceptor(context, {
427
+ label: pattern.label,
428
+ kind: CompletionItemKind.EnumMember,
429
+ insertText: pattern.insertText,
430
+ documentation: pattern.doc,
431
+ sortText: `0_${pattern.label}`
432
+ });
433
+ }
434
+ // Relationship arrow completions
435
+ const arrows = [
436
+ { label: '->', doc: 'Upstream to downstream' },
437
+ { label: '<-', doc: 'Downstream to upstream' },
438
+ { label: '<->', doc: 'Bidirectional/Partnership' },
439
+ { label: '><', doc: 'Separate Ways' }
440
+ ];
441
+ for (const arrow of arrows) {
442
+ acceptor(context, {
443
+ label: arrow.label,
444
+ kind: CompletionItemKind.Operator,
445
+ insertText: arrow.label,
446
+ documentation: arrow.doc,
447
+ sortText: `1_${arrow.label}`
448
+ });
449
+ }
450
+ }
451
+ }
452
+ //# sourceMappingURL=domain-lang-completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-lang-completion.js","sourceRoot":"","sources":["../../src/lsp/domain-lang-completion.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAyC,yBAAyB,EAAe,MAAM,aAAa,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAE3C;;GAEG;AACH,MAAM,kBAAkB,GAAG;IACvB;QACI,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,kBAAkB,CAAC,OAAO;QAChC,UAAU,EAAE,qBAAqB;QACjC,aAAa,EAAE,oCAAoC;QACnD,QAAQ,EAAE,yBAAyB;KACtC;IACD;QACI,KAAK,EAAE,qBAAqB;QAC5B,IAAI,EAAE,kBAAkB,CAAC,OAAO;QAChC,UAAU,EAAE;YACR,oBAAoB;YACpB,mCAAmC;YACnC,yBAAyB;YACzB,mCAAmC;YACnC,GAAG;SACN,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,aAAa,EAAE,yDAAyD;QACxE,QAAQ,EAAE,2BAA2B;KACxC;IACD;QACI,KAAK,EAAE,2BAA2B;QAClC,IAAI,EAAE,kBAAkB,CAAC,OAAO;QAChC,UAAU,EAAE,wDAAwD;QACpE,aAAa,EAAE,8CAA8C;QAC7D,QAAQ,EAAE,qBAAqB;KAClC;IACD;QACI,KAAK,EAAE,6BAA6B;QACpC,IAAI,EAAE,kBAAkB,CAAC,OAAO;QAChC,UAAU,EAAE;YACR,4CAA4C;YAC5C,mCAAmC;YACnC,mBAAmB;YACnB,mBAAmB;YACnB,IAAI;YACJ,iBAAiB;YACjB,uCAAuC;YACvC,KAAK;YACL,GAAG;SACN,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,aAAa,EAAE,yDAAyD;QACxE,QAAQ,EAAE,uBAAuB;KACpC;IACD;QACI,KAAK,EAAE,cAAc;QACrB,IAAI,EAAE,kBAAkB,CAAC,OAAO;QAChC,UAAU,EAAE;YACR,wBAAwB;YACxB,yCAAyC;YACzC,GAAG;SACN,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,aAAa,EAAE,kCAAkC;QACjD,QAAQ,EAAE,sBAAsB;KACnC;IACD;QACI,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,kBAAkB,CAAC,OAAO;QAChC,UAAU,EAAE;YACR,uBAAuB;YACvB,uCAAuC;YACvC,GAAG;SACN,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,aAAa,EAAE,iCAAiC;QAChD,QAAQ,EAAE,qBAAqB;KAClC;IACD;QACI,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,kBAAkB,CAAC,OAAO;QAChC,UAAU,EAAE,oBAAoB;QAChC,aAAa,EAAE,2BAA2B;QAC1C,QAAQ,EAAE,gBAAgB;KAC7B;IACD;QACI,KAAK,EAAE,kBAAkB;QACzB,IAAI,EAAE,kBAAkB,CAAC,OAAO;QAChC,UAAU,EAAE,0BAA0B;QACtC,aAAa,EAAE,oDAAoD;QACnE,QAAQ,EAAE,0BAA0B;KACvC;IACD;QACI,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,kBAAkB,CAAC,OAAO;QAChC,UAAU,EAAE,uBAAuB;QACnC,aAAa,EAAE,mCAAmC;QAClD,QAAQ,EAAE,oBAAoB;KACjC;IACD;QACI,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,kBAAkB,CAAC,OAAO;QAChC,UAAU,EAAE;YACR,6BAA6B;YAC7B,MAAM;YACN,GAAG;SACN,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,aAAa,EAAE,6CAA6C;QAC5D,QAAQ,EAAE,qBAAqB;KAClC;CACK,CAAC;AAEX,MAAM,OAAO,4BAA6B,SAAQ,yBAAyB;IACpD,aAAa,CAC5B,OAA0B,EAC1B,IAAiB,EACjB,QAA4B;QAE5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,OAAO;QACX,CAAC;QAED,yFAAyF;QAEzF,gEAAgE;QAChE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,IAAI,OAAO,CAAC;QAEtC,6EAA6E;QAC7E,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC;YACpE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,yDAAyD;YACzD,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,OAAO;QACX,CAAC;QAED,kEAAkE;QAClE,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC3D,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,OAAO;QACX,CAAC;QAED,8DAA8D;QAC9D,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,OAAO;QACX,CAAC;QAED,4DAA4D;QAC5D,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACvD,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,OAAO;QACX,CAAC;QAED,yCAAyC;QACzC,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtD,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,OAAO;QACX,CAAC;QAED,gFAAgF;QAChF,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,OAAO;QACX,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAElC,gFAAgF;QAChF,IAAI,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,4BAA4B,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChE,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,OAAO;QACX,CAAC;QAED,wDAAwD;QACxD,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACxD,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,OAAO;QACX,CAAC;QAED,qDAAqD;QACrD,IAAI,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5D,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,OAAO;QACX,CAAC;QAED,kCAAkC;QAClC,IAAI,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC3D,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,OAAO;QACX,CAAC;QAED,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,OAAO;QACX,CAAC;QAED,gFAAgF;QAChF,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QAED,yCAAyC;QACzC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAEO,mBAAmB,CAAC,QAA4B,EAAE,OAA0B;QAChF,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;YACvC,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC7B,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;OAEG;IACK,4BAA4B,CAChC,IAAwB,EACxB,QAA4B,EAC5B,OAA0B;QAE1B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE,iCAAiC;gBAC7C,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,4DAA4D;gBAC3E,QAAQ,EAAE,uBAAuB;aACpC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE,qBAAqB;gBACjC,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,yCAAyC;gBACxD,QAAQ,EAAE,gBAAgB;aAC7B,CAAC,CAAC;QACP,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,kBAAkB;gBACzB,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE,2BAA2B;gBACvC,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,6EAA6E;gBAC5F,QAAQ,EAAE,0BAA0B;aACvC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACtB,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,iBAAiB;gBACxB,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE,gCAAgC;gBAC5C,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,yCAAyC;gBACxD,QAAQ,EAAE,yBAAyB;aACtC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,aAAa;gBACpB,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE,yBAAyB;gBACrC,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,8EAA8E;gBAC7F,QAAQ,EAAE,qBAAqB;aAClC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE;oBACR,eAAe;oBACf,qCAAqC;oBACrC,GAAG;iBACN,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,8CAA8C;gBAC7D,QAAQ,EAAE,uBAAuB;aACpC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,aAAa;gBACpB,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE;oBACR,aAAa;oBACb,2EAA2E;oBAC3E,GAAG;iBACN,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,8CAA8C;gBAC7D,QAAQ,EAAE,qBAAqB;aAClC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,iBAAiB;gBACxB,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE;oBACR,iBAAiB;oBACjB,kCAAkC;oBAClC,GAAG;iBACN,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,8DAA8D;gBAC7E,QAAQ,EAAE,yBAAyB;aACtC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE;oBACR,YAAY;oBACZ,oCAAoC;oBACpC,GAAG;iBACN,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,0CAA0C;gBACzD,QAAQ,EAAE,oBAAoB;aACjC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;OAEG;IACK,oBAAoB,CACxB,IAAgB,EAChB,QAA4B,EAC5B,OAA0B;QAE1B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE,iCAAiC;gBAC7C,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,mDAAmD;gBAClE,QAAQ,EAAE,uBAAuB;aACpC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE,iCAAiC;gBAC7C,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,yDAAyD;gBACxE,QAAQ,EAAE,kBAAkB;aAC/B,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE,iBAAiB;gBAC7B,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,kEAAkE;gBACjF,QAAQ,EAAE,gBAAgB;aAC7B,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,wBAAwB,CAC5B,IAAoB,EACpB,QAA4B,EAC5B,OAA0B;QAE1B,sCAAsC;QACtC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE,uCAAuC;gBACnD,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,kCAAkC;gBACjD,QAAQ,EAAE,YAAY;aACzB,CAAC,CAAC;QACP,CAAC;QAED,sCAAsC;QACtC,QAAQ,CAAC,OAAO,EAAE;YACd,KAAK,EAAE,uBAAuB;YAC9B,IAAI,EAAE,kBAAkB,CAAC,OAAO;YAChC,UAAU,EAAE,gCAAgC;YAC5C,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;YAC1C,aAAa,EAAE,+CAA+C;YAC9D,QAAQ,EAAE,uBAAuB;SACpC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,EAAE;YACd,KAAK,EAAE,8BAA8B;YACrC,IAAI,EAAE,kBAAkB,CAAC,OAAO;YAChC,UAAU,EAAE,sFAAsF;YAClG,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;YAC1C,aAAa,EAAE,8CAA8C;YAC7D,QAAQ,EAAE,yBAAyB;SACtC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACK,uBAAuB,CAC3B,IAAmB,EACnB,QAA4B,EAC5B,OAA0B;QAE1B,qCAAqC;QACrC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,UAAU,EAAE,qCAAqC;gBACjD,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;gBAC1C,aAAa,EAAE,yBAAyB;gBACxC,QAAQ,EAAE,YAAY;aACzB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,0BAA0B,CAC9B,QAA4B,EAC5B,OAA0B;QAE1B,kCAAkC;QAClC,MAAM,QAAQ,GAAG;YACb,EAAE,KAAK,EAAE,yBAAyB,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,2BAA2B,EAAE;YAC3F,EAAE,KAAK,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,4BAA4B,EAAE;YAC3F,EAAE,KAAK,EAAE,6BAA6B,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,+BAA+B,EAAE;YACnG,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE;YAC3E,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,qBAAqB,EAAE;YAC3E,EAAE,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,EAAE;SACpF,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,kBAAkB,CAAC,UAAU;gBACnC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,aAAa,EAAE,OAAO,CAAC,GAAG;gBAC1B,QAAQ,EAAE,KAAK,OAAO,CAAC,KAAK,EAAE;aACjC,CAAC,CAAC;QACP,CAAC;QAED,iCAAiC;QACjC,MAAM,MAAM,GAAG;YACX,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,wBAAwB,EAAE;YAC9C,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,wBAAwB,EAAE;YAC9C,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,2BAA2B,EAAE;YAClD,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE;SACxC,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,QAAQ,CAAC,OAAO,EAAE;gBACd,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,kBAAkB,CAAC,QAAQ;gBACjC,UAAU,EAAE,KAAK,CAAC,KAAK;gBACvB,aAAa,EAAE,KAAK,CAAC,GAAG;gBACxB,QAAQ,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE;aAC/B,CAAC,CAAC;QACP,CAAC;IACL,CAAC;CACJ"}
@@ -0,0 +1,15 @@
1
+ import type { AstNode } from "langium";
2
+ import { AbstractFormatter } from "langium/lsp";
3
+ /**
4
+ * Provides formatting for DomainLang documents.
5
+ * Handles indentation and newlines for block-based constructs.
6
+ */
7
+ export declare class DomainLangFormatter extends AbstractFormatter {
8
+ protected format(node: AstNode): void;
9
+ /**
10
+ * Formats a block node with standard indentation and newlines.
11
+ *
12
+ * @param node - The AST node to format
13
+ */
14
+ private formatBlock;
15
+ }
@@ -0,0 +1,43 @@
1
+ import { AbstractFormatter, Formatting } from "langium/lsp";
2
+ import * as ast from '../generated/ast.js';
3
+ /**
4
+ * Provides formatting for DomainLang documents.
5
+ * Handles indentation and newlines for block-based constructs.
6
+ */
7
+ export class DomainLangFormatter extends AbstractFormatter {
8
+ format(node) {
9
+ // Namespace declarations
10
+ if (ast.isNamespaceDeclaration(node)) {
11
+ this.formatBlock(node);
12
+ }
13
+ // Domain declarations
14
+ if (ast.isDomain(node)) {
15
+ this.formatBlock(node);
16
+ }
17
+ // Bounded contexts
18
+ if (ast.isBoundedContext(node)) {
19
+ this.formatBlock(node);
20
+ }
21
+ // Context maps
22
+ if (ast.isContextMap(node)) {
23
+ this.formatBlock(node);
24
+ }
25
+ // Domain maps
26
+ if (ast.isDomainMap(node)) {
27
+ this.formatBlock(node);
28
+ }
29
+ }
30
+ /**
31
+ * Formats a block node with standard indentation and newlines.
32
+ *
33
+ * @param node - The AST node to format
34
+ */
35
+ formatBlock(node) {
36
+ const formatter = this.getNodeFormatter(node);
37
+ const open = formatter.keyword('{');
38
+ const close = formatter.keyword('}');
39
+ formatter.interior(open, close).prepend(Formatting.indent());
40
+ close.prepend(Formatting.newLine());
41
+ }
42
+ }
43
+ //# sourceMappingURL=domain-lang-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-lang-formatter.js","sourceRoot":"","sources":["../../src/lsp/domain-lang-formatter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAE3C;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,iBAAiB;IAE5C,MAAM,CAAC,IAAa;QAC9B,yBAAyB;QACzB,IAAI,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,sBAAsB;QACtB,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,mBAAmB;QACnB,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,eAAe;QACf,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,cAAc;QACd,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,WAAW,CAAC,IAAa;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAErC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7D,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;CACJ"}