@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.
- package/README.md +24 -0
- package/out/domain-design-language-formatter.d.ts +5 -0
- package/out/domain-design-language-formatter.js +197 -0
- package/out/domain-design-language-formatter.js.map +1 -0
- package/out/domain-design-language-module.d.ts +41 -0
- package/out/domain-design-language-module.js +50 -0
- package/out/domain-design-language-module.js.map +1 -0
- package/out/domain-design-language-scope.d.ts +8 -0
- package/out/domain-design-language-scope.js +79 -0
- package/out/domain-design-language-scope.js.map +1 -0
- package/out/domain-design-language-validator.d.ts +39 -0
- package/out/domain-design-language-validator.js +468 -0
- package/out/domain-design-language-validator.js.map +1 -0
- package/out/generated/ast.d.ts +1393 -0
- package/out/generated/ast.js +1147 -0
- package/out/generated/ast.js.map +1 -0
- package/out/generated/grammar.d.ts +6 -0
- package/out/generated/grammar.js +3430 -0
- package/out/generated/grammar.js.map +1 -0
- package/out/generated/module.d.ts +13 -0
- package/out/generated/module.js +21 -0
- package/out/generated/module.js.map +1 -0
- package/out/index.d.ts +5 -0
- package/out/index.js +6 -0
- package/out/index.js.map +1 -0
- package/package.json +49 -0
- package/src/domain-design-language-formatter.ts +186 -0
- package/src/domain-design-language-module.ts +96 -0
- package/src/domain-design-language-scope.ts +132 -0
- package/src/domain-design-language-validator.ts +699 -0
- package/src/domain-design-language.langium +299 -0
- package/src/generated/ast.ts +1737 -0
- package/src/generated/grammar.ts +3432 -0
- package/src/generated/module.ts +25 -0
- 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,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":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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
|
+
}
|