@fornari-lanza/domain-design-language-language 0.0.1

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 (35) hide show
  1. package/README.md +24 -0
  2. package/out/domain-design-language-formatter.d.ts +5 -0
  3. package/out/domain-design-language-formatter.js +197 -0
  4. package/out/domain-design-language-formatter.js.map +1 -0
  5. package/out/domain-design-language-module.d.ts +41 -0
  6. package/out/domain-design-language-module.js +50 -0
  7. package/out/domain-design-language-module.js.map +1 -0
  8. package/out/domain-design-language-scope.d.ts +8 -0
  9. package/out/domain-design-language-scope.js +79 -0
  10. package/out/domain-design-language-scope.js.map +1 -0
  11. package/out/domain-design-language-validator.d.ts +39 -0
  12. package/out/domain-design-language-validator.js +468 -0
  13. package/out/domain-design-language-validator.js.map +1 -0
  14. package/out/generated/ast.d.ts +1393 -0
  15. package/out/generated/ast.js +1147 -0
  16. package/out/generated/ast.js.map +1 -0
  17. package/out/generated/grammar.d.ts +6 -0
  18. package/out/generated/grammar.js +3430 -0
  19. package/out/generated/grammar.js.map +1 -0
  20. package/out/generated/module.d.ts +13 -0
  21. package/out/generated/module.js +21 -0
  22. package/out/generated/module.js.map +1 -0
  23. package/out/index.d.ts +5 -0
  24. package/out/index.js +6 -0
  25. package/out/index.js.map +1 -0
  26. package/package.json +49 -0
  27. package/src/domain-design-language-formatter.ts +186 -0
  28. package/src/domain-design-language-module.ts +96 -0
  29. package/src/domain-design-language-scope.ts +132 -0
  30. package/src/domain-design-language-validator.ts +699 -0
  31. package/src/domain-design-language.langium +299 -0
  32. package/src/generated/ast.ts +1737 -0
  33. package/src/generated/grammar.ts +3432 -0
  34. package/src/generated/module.ts +25 -0
  35. package/src/index.ts +5 -0
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # The mandatory language package
2
+
3
+ As a good entry point to our documentation, please use to this [guide](https://langium.org/docs/learn/workflow/write_grammar/).
4
+
5
+ ## What's in the folder?
6
+
7
+ - [package.json](./package.json) - The manifest file of your language package.
8
+ - [tsconfig.json](./tsconfig.json) - The packages specific TypeScript compiler configuration extending the [base config](../../tsconfig.json)
9
+ - [src/domain-design-language.langium](src/domain-design-language.langium) - The grammar definition of your language
10
+ - [src/domain-design-language-module.ts](src/domain-design-language-module.ts) - The dependency injection module of your language implementation. Use this to register overridden and added services.
11
+ - [src/domain-design-language-validator.ts](src/domain-design-language-validator.ts) - An example validator. You should change it to reflect the semantics of your language.
12
+ - [src/generated/ast.ts](src/generated/ast.ts) - AST generated by `langium generate`.
13
+ - [src/generated/grammar.ts](src/generated/grammar.ts) - Grammar generated by `langium generate`.
14
+ - [src/generated/module.ts](src/generated/module.ts) - Module generated by `langium generate`.
15
+ - [src/syntaxes/domain-design-language.monarch.ts](src/syntaxes/domain-design-language.monarch.ts) - Monarch based syntax highlighting instructions.
16
+ - [syntaxes/domain-design-language.tmLanguage.json](syntaxes/domain-design-language.tmLanguage.json) - Textmate based syntax highlighting instructions.
17
+ - [src/index.ts](src/index.ts) Defines what is exported to other packages.
18
+
19
+ If you selected the test option as well, then the following files will be present in addition:
20
+
21
+ - [tsconfig.test.json](./tsconfig.test.json) - The package specific TypeScript compiler configuration for the unit tests extending the [tsconfig.src.config](./tsconfig.src.json)
22
+ - [test/linking.test.ts](test/linking.test.ts) - Unit tests checking linking.
23
+ - [test/parsing.test.ts](test/parsing.test.ts) - Unit tests regarding parsing.
24
+ - [test/validating.test.ts](test/validating.test.ts) - Unit tests regarding validation.
@@ -0,0 +1,5 @@
1
+ import type { AstNode } from 'langium';
2
+ import { AbstractFormatter } from 'langium/lsp';
3
+ export declare class DomainDesignLanguageFormatter extends AbstractFormatter {
4
+ protected format(node: AstNode): void;
5
+ }
@@ -0,0 +1,197 @@
1
+ import { AbstractFormatter, Formatting } from 'langium/lsp';
2
+ import * as ast from './generated/ast.js';
3
+ export class DomainDesignLanguageFormatter extends AbstractFormatter {
4
+ format(node) {
5
+ const formatter = this.getNodeFormatter(node);
6
+ const bracesOpen = formatter.keyword('{');
7
+ const bracesClose = formatter.keyword('}');
8
+ const bracketsOpen = formatter.keyword('[');
9
+ const bracketsClose = formatter.keyword(']');
10
+ const parenthesisOpen = formatter.keyword('(');
11
+ const parenthesisClose = formatter.keyword(')');
12
+ const comma = formatter.keyword(',');
13
+ bracesOpen.append(Formatting.newLine()).prepend(Formatting.oneSpace());
14
+ bracesClose.surround(Formatting.newLine());
15
+ bracketsOpen.append(Formatting.noSpace());
16
+ bracketsClose.prepend(Formatting.noSpace());
17
+ parenthesisOpen.append(Formatting.noSpace());
18
+ parenthesisClose.prepend(Formatting.noSpace());
19
+ comma.append(Formatting.oneSpace()).prepend(Formatting.noSpace());
20
+ if (ast.isDomainModel(node)) {
21
+ const nodes = formatter.nodes(...(node.boundedContext ? [node.boundedContext] : []), ...(node.contextMap ? [node.contextMap] : []));
22
+ nodes.append(Formatting.noIndent());
23
+ }
24
+ else if (ast.isBoundedContext(node)) {
25
+ formatter
26
+ .properties('ubiquitousLanguage', 'aggregates', 'domainServices', 'ports', 'commands', 'eventStorming')
27
+ .prepend(Formatting.indent());
28
+ formatter.property('description').prepend(Formatting.indent());
29
+ }
30
+ else if (ast.isUbiquitousLanguageDeclaration(node)) {
31
+ formatter.properties('terms').prepend(Formatting.indent());
32
+ }
33
+ else if (ast.isTerm(node)) {
34
+ formatter
35
+ .keywords('definition:', 'aliases:')
36
+ .prepend(Formatting.indent())
37
+ .append(Formatting.oneSpace());
38
+ }
39
+ else if (ast.isContextMap(node)) {
40
+ formatter.keyword('ContextMap').append(Formatting.oneSpace());
41
+ formatter.properties('relationships').prepend(Formatting.indent());
42
+ }
43
+ else if (ast.isAsymmetricRelationship(node)) {
44
+ formatter
45
+ .keywords('upstream:', 'downstream:')
46
+ .prepend(Formatting.indent())
47
+ .append(Formatting.oneSpace());
48
+ formatter
49
+ .properties('customerSupplier', 'description')
50
+ .prepend(Formatting.indent());
51
+ }
52
+ else if (ast.isSymmetricRelationship(node)) {
53
+ formatter.keyword('Relationship').append(Formatting.oneSpace());
54
+ formatter
55
+ .keywords('between')
56
+ .prepend(Formatting.indent())
57
+ .append(Formatting.oneSpace());
58
+ formatter.keyword('and').surround(Formatting.oneSpace());
59
+ formatter.properties('type', 'description').prepend(Formatting.indent());
60
+ }
61
+ else if (ast.isAggregateRoot(node)) {
62
+ formatter.keyword('AggregateRoot').append(Formatting.oneSpace());
63
+ formatter
64
+ .keywords('enforcedInvariants:', 'correctivePolicies:')
65
+ .prepend(Formatting.indent())
66
+ .append(Formatting.oneSpace());
67
+ formatter
68
+ .properties('id', 'attributes', 'events', 'description', 'methods', 'exceptions')
69
+ .prepend(Formatting.indent());
70
+ }
71
+ else if (ast.isUID(node)) {
72
+ formatter
73
+ .keywords('type:', 'enforcedInvariants:')
74
+ .prepend(Formatting.indent())
75
+ .append(Formatting.oneSpace());
76
+ }
77
+ else if (ast.isValueObject(node)) {
78
+ formatter.keyword('ValueObject').append(Formatting.oneSpace());
79
+ formatter
80
+ .properties('attributes', 'description')
81
+ .prepend(Formatting.indent());
82
+ formatter
83
+ .keywords('enforcedInvariants:')
84
+ .prepend(Formatting.indent())
85
+ .append(Formatting.oneSpace());
86
+ }
87
+ else if (ast.isPrimitiveAttribute(node) || ast.isDomainAttribute(node)) {
88
+ formatter
89
+ .keyword(':')
90
+ .append(Formatting.oneSpace())
91
+ .prepend(Formatting.noSpace());
92
+ formatter.properties('many', 'optional').append(Formatting.oneSpace());
93
+ }
94
+ else if (ast.isAggregateAttribute(node) || ast.isEntityAttribute(node)) {
95
+ formatter.properties('many', 'optional').append(Formatting.oneSpace());
96
+ }
97
+ else if (ast.isEntity(node)) {
98
+ formatter.keyword('Entity').append(Formatting.oneSpace());
99
+ formatter.properties('id', 'attributes').prepend(Formatting.indent());
100
+ formatter.property('description').prepend(Formatting.indent());
101
+ }
102
+ else if (ast.isDomainEventsDeclaration(node)) {
103
+ formatter.properties('events').prepend(Formatting.indent());
104
+ formatter.keyword('DomainEvents').append(Formatting.oneSpace());
105
+ }
106
+ else if (ast.isDomainEvent(node)) {
107
+ formatter.property('name').append(Formatting.oneSpace());
108
+ formatter.property('description').prepend(Formatting.indent());
109
+ formatter.property('payload').prepend(Formatting.indent());
110
+ }
111
+ else if (ast.isPayload(node)) {
112
+ formatter.properties('attributes').prepend(Formatting.indent());
113
+ }
114
+ else if (ast.isDomainService(node) || ast.isCommand(node)) {
115
+ formatter.property('name').prepend(Formatting.oneSpace());
116
+ formatter.property('description').prepend(Formatting.indent());
117
+ formatter
118
+ .keywords('type:', 'uses', 'emits', 'dependencies:')
119
+ .prepend(Formatting.indent())
120
+ .append(Formatting.oneSpace());
121
+ formatter.properties('input', 'response').prepend(Formatting.indent());
122
+ }
123
+ else if (ast.isDomainServiceInput(node) ||
124
+ ast.isDomainServiceResponse(node) ||
125
+ ast.isInputDTO(node) ||
126
+ ast.isResponseDTO(node)) {
127
+ formatter.properties('attributes').prepend(Formatting.indent());
128
+ }
129
+ else if (ast.isPort(node)) {
130
+ formatter.keyword('Port').append(Formatting.oneSpace());
131
+ formatter.property('description').prepend(Formatting.indent());
132
+ }
133
+ else if (ast.isEventStormingDeclaration(node)) {
134
+ formatter.keyword('EventStorming').append(Formatting.oneSpace());
135
+ formatter.properties('elements', 'flows').prepend(Formatting.indent());
136
+ }
137
+ else if (ast.isEventStormingElement(node)) {
138
+ formatter.property('name').surround(Formatting.oneSpace());
139
+ formatter.property('description').prepend(Formatting.indent());
140
+ }
141
+ else if (ast.isProcessFlow(node)) {
142
+ formatter.keyword('ProcessFlow').append(Formatting.oneSpace());
143
+ formatter.property('description').prepend(Formatting.indent());
144
+ formatter
145
+ .properties('given', 'command', 'reactions')
146
+ .prepend(Formatting.indent());
147
+ }
148
+ else if (ast.isGivenStep(node)) {
149
+ formatter.keyword('given').append(Formatting.oneSpace());
150
+ formatter.keyword('views').surround(Formatting.oneSpace());
151
+ }
152
+ else if (ast.isActorCommandStep(node)) {
153
+ formatter.keyword('issues').surround(Formatting.oneSpace());
154
+ }
155
+ else if (ast.isReactionStep(node)) {
156
+ formatter.keywords('on').append(Formatting.oneSpace());
157
+ formatter.keyword('then').surround(Formatting.oneSpace());
158
+ formatter.properties('outcomes').prepend(Formatting.indent());
159
+ }
160
+ else if (ast.isProjection(node)) {
161
+ formatter.keyword('projects').append(Formatting.oneSpace());
162
+ formatter.keywords('to', 'hotspot').surround(Formatting.oneSpace());
163
+ }
164
+ else if (ast.isPolicyTrigger(node)) {
165
+ formatter.keyword('triggers').append(Formatting.oneSpace());
166
+ formatter.keyword('hotspot').prepend(Formatting.indent());
167
+ }
168
+ else if (ast.isPolicy(node)) {
169
+ formatter.keyword('Policy').append(Formatting.oneSpace());
170
+ formatter.property('description').prepend(Formatting.indent());
171
+ formatter
172
+ .keywords('invokes')
173
+ .prepend(Formatting.indent())
174
+ .append(Formatting.oneSpace());
175
+ formatter.keywords('on').surround(Formatting.oneSpace());
176
+ }
177
+ else if (ast.isMethod(node)) {
178
+ formatter.property('name').append(Formatting.noSpace());
179
+ formatter.keywords('(', ')').surround(Formatting.noSpace());
180
+ formatter
181
+ .properties('description')
182
+ .prepend(Formatting.indent());
183
+ }
184
+ else if (ast.isMethodsDeclaration(node)) {
185
+ formatter.properties('methods').prepend(Formatting.indent());
186
+ formatter.keyword('Methods').append(Formatting.oneSpace());
187
+ }
188
+ else if (ast.isExceptionsDeclaration(node)) {
189
+ formatter.properties('exceptions').prepend(Formatting.indent());
190
+ formatter.keyword('DomainExceptions').append(Formatting.oneSpace());
191
+ }
192
+ else if (ast.isDomainException(node)) {
193
+ formatter.property('name').append(Formatting.oneSpace());
194
+ }
195
+ }
196
+ }
197
+ //# sourceMappingURL=domain-design-language-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-design-language-formatter.js","sourceRoot":"","sources":["../src/domain-design-language-formatter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,MAAM,OAAO,6BAA8B,SAAQ,iBAAiB;IACxD,MAAM,CAAC,IAAa;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3C,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5C,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7C,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAC3B,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACrD,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9C,CAAC;YACF,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,SAAS;iBACN,UAAU,CACT,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,UAAU,EACV,eAAe,CAChB;iBACA,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAChC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,GAAG,CAAC,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,SAAS;iBACN,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC;iBACnC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;iBAC5B,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC9D,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,SAAS;iBACN,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;iBACpC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;iBAC5B,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjC,SAAS;iBACN,UAAU,CAAC,kBAAkB,EAAE,aAAa,CAAC;iBAC7C,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChE,SAAS;iBACN,QAAQ,CAAC,SAAS,CAAC;iBACnB,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;iBAC5B,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzD,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjE,SAAS;iBACN,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;iBACtD,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;iBAC5B,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjC,SAAS;iBACN,UAAU,CACT,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,SAAS,EACT,YAAY,CACb;iBACA,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,SAAS;iBACN,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;iBACxC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;iBAC5B,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/D,SAAS;iBACN,UAAU,CAAC,YAAY,EAAE,aAAa,CAAC;iBACvC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAChC,SAAS;iBACN,QAAQ,CAAC,qBAAqB,CAAC;iBAC/B,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;iBAC5B,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YACzE,SAAS;iBACN,OAAO,CAAC,GAAG,CAAC;iBACZ,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;iBAC7B,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YACjC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,IAAI,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YACzE,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1D,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACtE,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5D,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzD,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/D,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1D,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/D,SAAS;iBACN,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC;iBACnD,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;iBAC5B,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjC,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,IACL,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAC9B,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC;YACjC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YACpB,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EACvB,CAAC;YACD,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxD,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,GAAG,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjE,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,IAAI,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3D,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/D,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/D,SAAS;iBACN,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC;iBAC3C,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzD,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvD,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1D,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5D,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5D,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1D,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/D,SAAS;iBACN,QAAQ,CAAC,SAAS,CAAC;iBACnB,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;iBAC5B,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3D,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YACxD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,SAAS;iBACN,UAAU,CAAC,aAAa,CAAC;iBACzB,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7D,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAChE,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ import { type Module } from 'langium';
2
+ import { type DefaultSharedModuleContext, type LangiumServices, type LangiumSharedServices, type PartialLangiumServices } from 'langium/lsp';
3
+ import { DomainDesignLanguageValidator } from './domain-design-language-validator.js';
4
+ /**
5
+ * Declaration of custom services - add your own service classes here.
6
+ */
7
+ export type DomainDesignLanguageAddedServices = {
8
+ validation: {
9
+ DomainDesignLanguageValidator: DomainDesignLanguageValidator;
10
+ };
11
+ };
12
+ /**
13
+ * Union of Langium default services and your custom services - use this as constructor parameter
14
+ * of custom service classes.
15
+ */
16
+ export type DomainDesignLanguageServices = LangiumServices & DomainDesignLanguageAddedServices;
17
+ /**
18
+ * Dependency injection module that overrides Langium default services and contributes the
19
+ * declared custom services. The Langium defaults can be partially specified to override only
20
+ * selected services, while the custom services must be fully specified.
21
+ */
22
+ export declare const DomainDesignLanguageModule: Module<DomainDesignLanguageServices, PartialLangiumServices & DomainDesignLanguageAddedServices>;
23
+ /**
24
+ * Create the full set of services required by Langium.
25
+ *
26
+ * First inject the shared services by merging two modules:
27
+ * - Langium default shared services
28
+ * - Services generated by langium-cli
29
+ *
30
+ * Then inject the language-specific services by merging three modules:
31
+ * - Langium default language-specific services
32
+ * - Services generated by langium-cli
33
+ * - Services specified in this file
34
+ *
35
+ * @param context Optional module context with the LSP connection
36
+ * @returns An object wrapping the shared services and the language-specific services
37
+ */
38
+ export declare function createDomainDesignLanguageServices(context: DefaultSharedModuleContext): {
39
+ shared: LangiumSharedServices;
40
+ DomainDesignLanguage: DomainDesignLanguageServices;
41
+ };
@@ -0,0 +1,50 @@
1
+ import { inject } from 'langium';
2
+ import { createDefaultModule, createDefaultSharedModule, } from 'langium/lsp';
3
+ import { DomainDesignLanguageGeneratedModule, DomainDesignLanguageGeneratedSharedModule, } from './generated/module.js';
4
+ import { DomainDesignLanguageValidator, registerValidationChecks, } from './domain-design-language-validator.js';
5
+ import { DomainDesignLanguageFormatter } from './domain-design-language-formatter.js';
6
+ import { DomainDesignLanguageScopeProvider } from './domain-design-language-scope.js';
7
+ /**
8
+ * Dependency injection module that overrides Langium default services and contributes the
9
+ * declared custom services. The Langium defaults can be partially specified to override only
10
+ * selected services, while the custom services must be fully specified.
11
+ */
12
+ export const DomainDesignLanguageModule = {
13
+ validation: {
14
+ DomainDesignLanguageValidator: () => new DomainDesignLanguageValidator(),
15
+ },
16
+ lsp: {
17
+ Formatter: () => new DomainDesignLanguageFormatter(),
18
+ },
19
+ references: {
20
+ ScopeProvider: (services) => new DomainDesignLanguageScopeProvider(services),
21
+ },
22
+ };
23
+ /**
24
+ * Create the full set of services required by Langium.
25
+ *
26
+ * First inject the shared services by merging two modules:
27
+ * - Langium default shared services
28
+ * - Services generated by langium-cli
29
+ *
30
+ * Then inject the language-specific services by merging three modules:
31
+ * - Langium default language-specific services
32
+ * - Services generated by langium-cli
33
+ * - Services specified in this file
34
+ *
35
+ * @param context Optional module context with the LSP connection
36
+ * @returns An object wrapping the shared services and the language-specific services
37
+ */
38
+ export function createDomainDesignLanguageServices(context) {
39
+ const shared = inject(createDefaultSharedModule(context), DomainDesignLanguageGeneratedSharedModule);
40
+ const DomainDesignLanguage = inject(createDefaultModule({ shared }), DomainDesignLanguageGeneratedModule, DomainDesignLanguageModule);
41
+ shared.ServiceRegistry.register(DomainDesignLanguage);
42
+ registerValidationChecks(DomainDesignLanguage);
43
+ if (!context.connection) {
44
+ // We don't run inside a language server
45
+ // Therefore, initialize the configuration provider instantly
46
+ shared.workspace.ConfigurationProvider.initialized({});
47
+ }
48
+ return { shared, DomainDesignLanguage };
49
+ }
50
+ //# sourceMappingURL=domain-design-language-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-design-language-module.js","sourceRoot":"","sources":["../src/domain-design-language-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,MAAM,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,yBAAyB,GAK1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mCAAmC,EACnC,yCAAyC,GAC1C,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,iCAAiC,EAAE,MAAM,mCAAmC,CAAC;AAkBtF;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAGnC;IACF,UAAU,EAAE;QACV,6BAA6B,EAAE,GAAG,EAAE,CAAC,IAAI,6BAA6B,EAAE;KACzE;IACD,GAAG,EAAE;QACH,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,6BAA6B,EAAE;KACrD;IACD,UAAU,EAAE;QACV,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC1B,IAAI,iCAAiC,CAAC,QAAQ,CAAC;KAClD;CACF,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kCAAkC,CAChD,OAAmC;IAKnC,MAAM,MAAM,GAAG,MAAM,CACnB,yBAAyB,CAAC,OAAO,CAAC,EAClC,yCAAyC,CAC1C,CAAC;IACF,MAAM,oBAAoB,GAAG,MAAM,CACjC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC,EAC/B,mCAAmC,EACnC,0BAA0B,CAC3B,CAAC;IACF,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACtD,wBAAwB,CAAC,oBAAoB,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACxB,wCAAwC;QACxC,6DAA6D;QAC7D,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { DefaultScopeProvider, ReferenceInfo, Scope } from 'langium';
2
+ export declare class DomainDesignLanguageScopeProvider extends DefaultScopeProvider {
3
+ getScope(context: ReferenceInfo): Scope;
4
+ private searchParent;
5
+ private getBoundedContextsFromGlobalScope;
6
+ private getScopeForDomainAttribute;
7
+ private getScopeForDomainEvents;
8
+ }
@@ -0,0 +1,79 @@
1
+ import { DefaultScopeProvider, URI, } from 'langium';
2
+ import { isCommand, isAsymmetricRelationship, isBoundedContext, isDomainAttribute, isEntity, isPolicyTrigger, isProcessFlow, isReactionStep, isSymmetricRelationship, isValueObject, } from './generated/ast.js';
3
+ import { glob } from 'glob';
4
+ export class DomainDesignLanguageScopeProvider extends DefaultScopeProvider {
5
+ getScope(context) {
6
+ if (isDomainAttribute(context.container) && context.property === 'type')
7
+ return this.getScopeForDomainAttribute(context);
8
+ if ((isCommand(context.container) && context.property === 'events') ||
9
+ (isReactionStep(context.container) && context.property === 'trigger'))
10
+ return this.getScopeForDomainEvents(context);
11
+ if (isAsymmetricRelationship(context.container) &&
12
+ (context.property === 'upstream' || context.property === 'downstream'))
13
+ return this.getBoundedContextsFromGlobalScope();
14
+ if (isSymmetricRelationship(context.container) &&
15
+ (context.property === 'participant1' ||
16
+ context.property === 'participant2'))
17
+ return this.getBoundedContextsFromGlobalScope();
18
+ return super.getScope(context);
19
+ }
20
+ searchParent(context, predicate) {
21
+ let node = context.container;
22
+ while (node.$container && !predicate(node))
23
+ node = node.$container;
24
+ return predicate(node) ? node : undefined;
25
+ }
26
+ getBoundedContextsFromGlobalScope() {
27
+ const files = glob.sync('./boundedContexts/*.ddd', { absolute: true });
28
+ const uris = new Set();
29
+ for (const filePath of files)
30
+ uris.add(URI.file(filePath).toString());
31
+ const astNodeDescriptions = this.indexManager
32
+ .allElements('BoundedContext', uris)
33
+ .toArray();
34
+ return this.createScope(astNodeDescriptions);
35
+ }
36
+ getScopeForDomainAttribute(context) {
37
+ const boundedContext = this.searchParent(context, isBoundedContext);
38
+ const validReferences = new Set();
39
+ if (boundedContext) {
40
+ boundedContext.aggregates.forEach((aggregate) => {
41
+ validReferences.add(this.descriptions.createDescription(aggregate, aggregate.name));
42
+ aggregate.attributes.forEach((attr) => {
43
+ if (isValueObject(attr.type) || isEntity(attr.type))
44
+ validReferences.add(this.descriptions.createDescription(attr.type, `${aggregate.name}.${attr.type.name}`));
45
+ });
46
+ });
47
+ }
48
+ return this.createScope(validReferences);
49
+ }
50
+ getScopeForDomainEvents(context) {
51
+ const validReferences = new Set();
52
+ if (isReactionStep(context.container)) {
53
+ const isFirstReactionStep = context.container.$containerIndex === 0;
54
+ const flow = this.searchParent(context, isProcessFlow);
55
+ const events = [];
56
+ if (isFirstReactionStep) {
57
+ events.push(...(flow?.command.command.ref?.events.map((e) => e.ref) ?? []).filter((e) => !!e));
58
+ }
59
+ else {
60
+ const policyEvents = flow?.reactions[(context.container.$containerIndex ?? 1) - 1].outcomes.flatMap((o) => isPolicyTrigger(o) && o.policy.command.ref?.events
61
+ ? o.policy.command.ref?.events
62
+ .map((e) => e.ref)
63
+ .filter((e) => !!e)
64
+ : []) ?? [];
65
+ events.push(...policyEvents);
66
+ }
67
+ events.forEach((event) => {
68
+ validReferences.add(this.descriptions.createDescription(event, event.name));
69
+ });
70
+ }
71
+ else if (isCommand(context.container)) {
72
+ context.container.aggregate.ref?.events?.events.forEach((event) => {
73
+ validReferences.add(this.descriptions.createDescription(event, event.name));
74
+ });
75
+ }
76
+ return this.createScope(validReferences);
77
+ }
78
+ }
79
+ //# sourceMappingURL=domain-design-language-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-design-language-scope.js","sourceRoot":"","sources":["../src/domain-design-language-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,oBAAoB,EAGpB,GAAG,GACJ,MAAM,SAAS,CAAC;AACjB,OAAO,EAGL,SAAS,EACT,wBAAwB,EACxB,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,eAAe,EACf,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,aAAa,GAEd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,OAAO,iCAAkC,SAAQ,oBAAoB;IAChE,QAAQ,CAAC,OAAsB;QACtC,IAAI,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM;YACrE,OAAO,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAClD,IACE,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;YAC/D,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC;YAErE,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC/C,IACE,wBAAwB,CAAC,OAAO,CAAC,SAAS,CAAC;YAC3C,CAAC,OAAO,CAAC,QAAQ,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC;YAEtE,OAAO,IAAI,CAAC,iCAAiC,EAAE,CAAC;QAClD,IACE,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC;YAC1C,CAAC,OAAO,CAAC,QAAQ,KAAK,cAAc;gBAClC,OAAO,CAAC,QAAQ,KAAK,cAAc,CAAC;YAEtC,OAAO,IAAI,CAAC,iCAAiC,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAEO,YAAY,CAClB,OAAsB,EACtB,SAAqC;QAErC,IAAI,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;QAC7B,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QACnE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,CAAC;IAEO,iCAAiC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,QAAQ,IAAI,KAAK;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtE,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY;aAC1C,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC;aACnC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAC/C,CAAC;IAEO,0BAA0B,CAAC,OAAsB;QACvD,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CACtC,OAAO,EACP,gBAAgB,CACjB,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAsB,CAAC;QACtD,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC9C,eAAe,CAAC,GAAG,CACjB,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAC/D,CAAC;gBACF,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBACpC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;wBACjD,eAAe,CAAC,GAAG,CACjB,IAAI,CAAC,YAAY,CAAC,iBAAiB,CACjC,IAAI,CAAC,IAAI,EACT,GAAG,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CACtC,CACF,CAAC;gBACN,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAC3C,CAAC;IAEO,uBAAuB,CAAC,OAAsB;QACpD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAsB,CAAC;QACtD,IAAI,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACtC,MAAM,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,eAAe,KAAK,CAAC,CAAC;YACpE,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAc,OAAO,EAAE,aAAa,CAAC,CAAC;YACpE,MAAM,MAAM,GAAkB,EAAE,CAAC;YACjC,IAAI,mBAAmB,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CACT,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CACnE,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAC7B,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,GAChB,IAAI,EAAE,SAAS,CACb,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,CAC7C,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACvB,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM;oBAChD,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM;yBACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;yBACjB,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzC,CAAC,CAAC,EAAE,CACP,IAAI,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YAC/B,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACvB,eAAe,CAAC,GAAG,CACjB,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CACvD,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAChE,eAAe,CAAC,GAAG,CACjB,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CACvD,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,39 @@
1
+ import type { AstNode, ValidationAcceptor } from 'langium';
2
+ import { AggregateRoot, Command, AsymmetricRelationship, BoundedContext, DomainEvent, DomainEventsDeclaration, DomainModel, DomainService, Entity, Enum, EventStormingDeclaration, Payload, ProcessFlow, ReactionStep, Relationship, UbiquitousLanguageDeclaration, ValueObject, type ContextMap, MethodsDeclaration, Method, ExceptionsDeclaration } from './generated/ast.js';
3
+ import type { DomainDesignLanguageServices } from './domain-design-language-module.js';
4
+ /**
5
+ * Register custom validation checks.
6
+ */
7
+ export declare function registerValidationChecks(services: DomainDesignLanguageServices): void;
8
+ /**
9
+ * Implementation of custom validations.
10
+ */
11
+ export declare class DomainDesignLanguageValidator {
12
+ checkUniquePurpose(model: DomainModel, accept: ValidationAcceptor): void;
13
+ checkUniqueTerms(ubiquitousLanguage: UbiquitousLanguageDeclaration, accept: ValidationAcceptor): void;
14
+ checkUniqueAggregates(boundedContext: BoundedContext, accept: ValidationAcceptor): void;
15
+ checkUniqueDomainServices(boundedContext: BoundedContext, accept: ValidationAcceptor): void;
16
+ checkUniquePorts(boundedContext: BoundedContext, accept: ValidationAcceptor): void;
17
+ checkUniqueCommands(boundedContext: BoundedContext, accept: ValidationAcceptor): void;
18
+ checkUniqueEventStormingElements(eventStormingDeclaration: EventStormingDeclaration, accept: ValidationAcceptor): void;
19
+ checkUniquePolicies(processFlow: ProcessFlow, accept: ValidationAcceptor): void;
20
+ checkUniqueOutcomes(step: ReactionStep, accept: ValidationAcceptor): void;
21
+ checkUniqueDomainEvents(declaration: DomainEventsDeclaration, accept: ValidationAcceptor): void;
22
+ checkUniqueMethods(declaration: MethodsDeclaration, accept: ValidationAcceptor): void;
23
+ checkUniqueExceptions(declaration: ExceptionsDeclaration, accept: ValidationAcceptor): void;
24
+ checkUniqueAttributes(entity: Entity | AggregateRoot, accept: ValidationAcceptor): void;
25
+ checkUniquePrimitiveAttributes(node: ValueObject | Payload, accept: ValidationAcceptor): void;
26
+ checkUniqueDtoAttributes(service: DomainService | Command | Method, accept: ValidationAcceptor): void;
27
+ checkUniqueCommandElements(service: Command, accept: ValidationAcceptor): void;
28
+ checkUniqueRelationships(contextMap: ContextMap, accept: ValidationAcceptor): void;
29
+ checkSelfRelationships(relationship: Relationship, accept: ValidationAcceptor): void;
30
+ checkRelationshipRoles(relationship: AsymmetricRelationship, accept: ValidationAcceptor): void;
31
+ checkUniqueValues(enumDefinition: Enum, accept: ValidationAcceptor): void;
32
+ checkNameIsInPastTense(event: DomainEvent, accept: ValidationAcceptor): void;
33
+ checkNameStartsWithCapital(node: AstNode & {
34
+ name?: string;
35
+ }, accept: ValidationAcceptor): void;
36
+ checkNameIsCamelCase(node: AstNode & {
37
+ name?: string;
38
+ }, accept: ValidationAcceptor): void;
39
+ }