context-mapper-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +238 -0
- package/dist/generators/plantuml.d.ts +17 -0
- package/dist/generators/plantuml.d.ts.map +1 -0
- package/dist/generators/plantuml.js +244 -0
- package/dist/generators/plantuml.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +897 -0
- package/dist/index.js.map +1 -0
- package/dist/model/parser.d.ts +51 -0
- package/dist/model/parser.d.ts.map +1 -0
- package/dist/model/parser.js +934 -0
- package/dist/model/parser.js.map +1 -0
- package/dist/model/types.d.ts +121 -0
- package/dist/model/types.d.ts.map +1 -0
- package/dist/model/types.js +12 -0
- package/dist/model/types.js.map +1 -0
- package/dist/model/validation.d.ts +36 -0
- package/dist/model/validation.d.ts.map +1 -0
- package/dist/model/validation.js +411 -0
- package/dist/model/validation.js.map +1 -0
- package/dist/model/writer.d.ts +30 -0
- package/dist/model/writer.d.ts.map +1 -0
- package/dist/model/writer.js +305 -0
- package/dist/model/writer.js.map +1 -0
- package/dist/tools/aggregate-tools.d.ts +295 -0
- package/dist/tools/aggregate-tools.d.ts.map +1 -0
- package/dist/tools/aggregate-tools.js +965 -0
- package/dist/tools/aggregate-tools.js.map +1 -0
- package/dist/tools/context-tools.d.ts +60 -0
- package/dist/tools/context-tools.d.ts.map +1 -0
- package/dist/tools/context-tools.js +166 -0
- package/dist/tools/context-tools.js.map +1 -0
- package/dist/tools/generation-tools.d.ts +29 -0
- package/dist/tools/generation-tools.d.ts.map +1 -0
- package/dist/tools/generation-tools.js +62 -0
- package/dist/tools/generation-tools.js.map +1 -0
- package/dist/tools/model-tools.d.ts +72 -0
- package/dist/tools/model-tools.d.ts.map +1 -0
- package/dist/tools/model-tools.js +186 -0
- package/dist/tools/model-tools.js.map +1 -0
- package/dist/tools/query-tools.d.ts +170 -0
- package/dist/tools/query-tools.d.ts.map +1 -0
- package/dist/tools/query-tools.js +322 -0
- package/dist/tools/query-tools.js.map +1 -0
- package/dist/tools/relationship-tools.d.ts +68 -0
- package/dist/tools/relationship-tools.d.ts.map +1 -0
- package/dist/tools/relationship-tools.js +178 -0
- package/dist/tools/relationship-tools.js.map +1 -0
- package/package.json +52 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 thijs-hakkenberg
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# Context Mapper MCP Server
|
|
2
|
+
|
|
3
|
+
An MCP (Model Context Protocol) server that enables AI assistants to work with Domain-Driven Design models using Context Mapper's CML (Context Mapping Language).
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Parse and serialize CML files** - Full support for Context Mapper's CML syntax
|
|
8
|
+
- **Manage bounded contexts** - Create, update, delete bounded contexts
|
|
9
|
+
- **Work with aggregates** - Define entities, value objects, domain events, commands, and services
|
|
10
|
+
- **Context map relationships** - Define and manage relationships between bounded contexts (Partnership, SharedKernel, Upstream-Downstream with patterns like OHS, PL, ACL, CF)
|
|
11
|
+
- **Generate PlantUML diagrams** - Visualize context maps and aggregate structures
|
|
12
|
+
- **Real-time validation** - Catch errors at creation time, not at save time
|
|
13
|
+
- **ID Value Objects** - Dedicated tool for creating DDD-compliant identifier types
|
|
14
|
+
|
|
15
|
+
## Validation Features
|
|
16
|
+
|
|
17
|
+
The server validates models in real-time to prevent common CML errors:
|
|
18
|
+
|
|
19
|
+
| Validation | When | Example Error |
|
|
20
|
+
|------------|------|---------------|
|
|
21
|
+
| Duplicate names | On create | `'AgentId' already exists in ContextA...` |
|
|
22
|
+
| Invalid types | On create | `Map<K,V> is not supported in CML...` |
|
|
23
|
+
| Reserved names | On create | `'Resource' is a reserved keyword...` |
|
|
24
|
+
| Reserved attributes | On save | Auto-escaped with `^` prefix |
|
|
25
|
+
|
|
26
|
+
### Valid Attribute Types
|
|
27
|
+
|
|
28
|
+
- **Primitives**: `String`, `int`, `long`, `boolean`, `DateTime`, `BigDecimal`, `UUID`
|
|
29
|
+
- **Collections**: `List<Type>`, `Set<Type>`
|
|
30
|
+
- **References**: `- TypeName` (reference to domain objects)
|
|
31
|
+
|
|
32
|
+
### Invalid Types (Rejected)
|
|
33
|
+
|
|
34
|
+
- `Map<K,V>`, `Any`, `Tuple`, `Runnable`, `Callbacks`, nested generics
|
|
35
|
+
|
|
36
|
+
## Installation
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm install
|
|
40
|
+
npm run build
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Usage
|
|
44
|
+
|
|
45
|
+
### As MCP Server
|
|
46
|
+
|
|
47
|
+
Add to your Claude Desktop configuration (`claude_desktop_config.json`):
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"mcpServers": {
|
|
52
|
+
"context-mapper": {
|
|
53
|
+
"command": "node",
|
|
54
|
+
"args": ["/path/to/context_mapper_mcp/dist/index.js"]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Available Tools
|
|
61
|
+
|
|
62
|
+
#### Model Management
|
|
63
|
+
| Tool | Description |
|
|
64
|
+
|------|-------------|
|
|
65
|
+
| `cml_create_model` | Create a new empty CML model |
|
|
66
|
+
| `cml_load_model` | Load a CML file |
|
|
67
|
+
| `cml_save_model` | Save model to disk |
|
|
68
|
+
| `cml_validate_model` | Validate CML syntax and semantics |
|
|
69
|
+
| `cml_get_model_info` | Get model statistics |
|
|
70
|
+
|
|
71
|
+
#### Query Tools
|
|
72
|
+
| Tool | Description |
|
|
73
|
+
|------|-------------|
|
|
74
|
+
| `cml_list_bounded_contexts` | List all bounded contexts |
|
|
75
|
+
| `cml_get_bounded_context` | Get context details |
|
|
76
|
+
| `cml_list_aggregates` | List aggregates (optionally filtered by context) |
|
|
77
|
+
| `cml_get_aggregate` | Get aggregate with all its elements |
|
|
78
|
+
| `cml_find_elements` | Search by name pattern (regex) |
|
|
79
|
+
| `cml_list_relationships` | List context map relationships |
|
|
80
|
+
|
|
81
|
+
#### Context Tools
|
|
82
|
+
| Tool | Description |
|
|
83
|
+
|------|-------------|
|
|
84
|
+
| `cml_create_context_map` | Create a context map |
|
|
85
|
+
| `cml_create_bounded_context` | Create a bounded context |
|
|
86
|
+
| `cml_update_bounded_context` | Update a bounded context |
|
|
87
|
+
| `cml_delete_bounded_context` | Delete a bounded context |
|
|
88
|
+
|
|
89
|
+
#### Aggregate Tools
|
|
90
|
+
| Tool | Description |
|
|
91
|
+
|------|-------------|
|
|
92
|
+
| `cml_create_aggregate` | Create an aggregate |
|
|
93
|
+
| `cml_update_aggregate` | Update an aggregate |
|
|
94
|
+
| `cml_delete_aggregate` | Delete an aggregate |
|
|
95
|
+
| `cml_add_entity` | Add entity to aggregate |
|
|
96
|
+
| `cml_add_value_object` | Add value object |
|
|
97
|
+
| `cml_add_identifier` | Add ID value object (DDD best practice) |
|
|
98
|
+
| `cml_add_domain_event` | Add domain event |
|
|
99
|
+
| `cml_add_command` | Add command |
|
|
100
|
+
| `cml_add_service` | Add domain service |
|
|
101
|
+
| `cml_batch_add_elements` | **Batch create** multiple domain objects in one call |
|
|
102
|
+
| `cml_delete_entity` | Delete entity |
|
|
103
|
+
| `cml_delete_value_object` | Delete value object |
|
|
104
|
+
| `cml_delete_domain_event` | Delete domain event |
|
|
105
|
+
| `cml_delete_command` | Delete command |
|
|
106
|
+
| `cml_delete_service` | Delete service |
|
|
107
|
+
|
|
108
|
+
##### Batch Creation (`cml_batch_add_elements`)
|
|
109
|
+
|
|
110
|
+
Create multiple domain objects in a single call for improved efficiency:
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"contextName": "CustomerManagement",
|
|
115
|
+
"aggregateName": "Customer",
|
|
116
|
+
"identifiers": [
|
|
117
|
+
{ "name": "CustomerId" }
|
|
118
|
+
],
|
|
119
|
+
"entities": [
|
|
120
|
+
{
|
|
121
|
+
"name": "Customer",
|
|
122
|
+
"aggregateRoot": true,
|
|
123
|
+
"attributes": [
|
|
124
|
+
{ "name": "id", "type": "- CustomerId", "key": true },
|
|
125
|
+
{ "name": "email", "type": "String" }
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"valueObjects": [
|
|
130
|
+
{
|
|
131
|
+
"name": "Address",
|
|
132
|
+
"attributes": [
|
|
133
|
+
{ "name": "street", "type": "String" },
|
|
134
|
+
{ "name": "city", "type": "String" }
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
],
|
|
138
|
+
"domainEvents": [
|
|
139
|
+
{ "name": "CustomerRegistered", "attributes": [{ "name": "customerId", "type": "- CustomerId" }] }
|
|
140
|
+
],
|
|
141
|
+
"commands": [
|
|
142
|
+
{ "name": "RegisterCustomer", "attributes": [{ "name": "email", "type": "String" }] }
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Benefits:**
|
|
148
|
+
- **Faster**: Single round-trip instead of 8+ individual calls
|
|
149
|
+
- **Atomic validation**: All elements validated before any are created
|
|
150
|
+
- **Error handling**: Use `failFast: false` to collect all errors at once
|
|
151
|
+
|
|
152
|
+
#### Relationship Tools
|
|
153
|
+
| Tool | Description |
|
|
154
|
+
|------|-------------|
|
|
155
|
+
| `cml_create_relationship` | Create context map relationship |
|
|
156
|
+
| `cml_update_relationship` | Update relationship |
|
|
157
|
+
| `cml_delete_relationship` | Delete relationship |
|
|
158
|
+
| `cml_get_relationship` | Get relationship details |
|
|
159
|
+
|
|
160
|
+
Supported relationship types:
|
|
161
|
+
- **Partnership** - Symmetric, both contexts cooperate
|
|
162
|
+
- **SharedKernel** - Symmetric, shared code/models
|
|
163
|
+
- **UpstreamDownstream** - Asymmetric with patterns:
|
|
164
|
+
- Upstream: OHS (Open Host Service), PL (Published Language)
|
|
165
|
+
- Downstream: ACL (Anticorruption Layer), CF (Conformist)
|
|
166
|
+
|
|
167
|
+
#### Generation Tools
|
|
168
|
+
| Tool | Description |
|
|
169
|
+
|------|-------------|
|
|
170
|
+
| `cml_generate_context_map_diagram` | Generate PlantUML context map |
|
|
171
|
+
| `cml_generate_aggregate_diagram` | Generate aggregate class diagram |
|
|
172
|
+
| `cml_generate_full_diagram` | Generate full model diagram |
|
|
173
|
+
|
|
174
|
+
## Example CML File
|
|
175
|
+
|
|
176
|
+
```cml
|
|
177
|
+
ContextMap ECommerceContextMap {
|
|
178
|
+
type = AS_IS
|
|
179
|
+
contains CustomerManagement, OrderManagement, Inventory
|
|
180
|
+
|
|
181
|
+
CustomerManagement [U,OHS,PL] -> [D,ACL] OrderManagement
|
|
182
|
+
OrderManagement [U] -> [D,CF] Inventory
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
BoundedContext CustomerManagement {
|
|
186
|
+
domainVisionStatement = "Manages customer data"
|
|
187
|
+
implementationTechnology = "TypeScript"
|
|
188
|
+
|
|
189
|
+
Aggregate Customer {
|
|
190
|
+
Entity Customer {
|
|
191
|
+
aggregateRoot
|
|
192
|
+
key String customerId
|
|
193
|
+
String email
|
|
194
|
+
String firstName
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
ValueObject Address {
|
|
198
|
+
String street
|
|
199
|
+
String city
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
DomainEvent CustomerRegistered {
|
|
203
|
+
String customerId
|
|
204
|
+
Date registeredAt
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
Command RegisterCustomer {
|
|
208
|
+
String email
|
|
209
|
+
String firstName
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Development
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
# Build
|
|
219
|
+
npm run build
|
|
220
|
+
|
|
221
|
+
# Watch mode
|
|
222
|
+
npm run dev
|
|
223
|
+
|
|
224
|
+
# Run tests
|
|
225
|
+
node test-run.mjs
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Architecture
|
|
229
|
+
|
|
230
|
+
- **Parser**: Chevrotain-based lexer and parser for CML syntax
|
|
231
|
+
- **Writer**: Serializes model back to CML format
|
|
232
|
+
- **Validation**: Checks model consistency and semantic rules
|
|
233
|
+
- **Tools**: MCP tool implementations for all operations
|
|
234
|
+
- **Generators**: PlantUML diagram generators
|
|
235
|
+
|
|
236
|
+
## License
|
|
237
|
+
|
|
238
|
+
MIT
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlantUML Generator for CML models
|
|
3
|
+
*/
|
|
4
|
+
import type { CMLModel, Aggregate } from '../model/types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Generate a PlantUML context map diagram
|
|
7
|
+
*/
|
|
8
|
+
export declare function generateContextMapDiagram(model: CMLModel, includeAggregates?: boolean): string;
|
|
9
|
+
/**
|
|
10
|
+
* Generate a PlantUML class diagram for an aggregate
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateAggregateDiagram(aggregate: Aggregate): string;
|
|
13
|
+
/**
|
|
14
|
+
* Generate a full model diagram with all contexts and their aggregates
|
|
15
|
+
*/
|
|
16
|
+
export declare function generateFullModelDiagram(model: CMLModel): string;
|
|
17
|
+
//# sourceMappingURL=plantuml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plantuml.d.ts","sourceRoot":"","sources":["../../src/generators/plantuml.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EAQV,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,UAAQ,GAAG,MAAM,CAuD5F;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CA4HrE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAyFhE"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlantUML Generator for CML models
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Generate a PlantUML context map diagram
|
|
6
|
+
*/
|
|
7
|
+
export function generateContextMapDiagram(model, includeAggregates = false) {
|
|
8
|
+
const lines = [];
|
|
9
|
+
lines.push('@startuml');
|
|
10
|
+
lines.push('!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml');
|
|
11
|
+
lines.push('');
|
|
12
|
+
lines.push(`title Context Map: ${model.name}`);
|
|
13
|
+
lines.push('');
|
|
14
|
+
// Define bounded contexts as rectangles
|
|
15
|
+
for (const bc of model.boundedContexts) {
|
|
16
|
+
const stereotype = bc.implementationTechnology ? `<<${bc.implementationTechnology}>>` : '';
|
|
17
|
+
lines.push(`rectangle "${bc.name}" as ${sanitizeId(bc.name)} ${stereotype} {`);
|
|
18
|
+
if (includeAggregates && bc.aggregates.length > 0) {
|
|
19
|
+
for (const agg of bc.aggregates) {
|
|
20
|
+
lines.push(` card "${agg.name}" as ${sanitizeId(bc.name)}_${sanitizeId(agg.name)}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
lines.push('}');
|
|
24
|
+
lines.push('');
|
|
25
|
+
}
|
|
26
|
+
// Add relationships
|
|
27
|
+
if (model.contextMap) {
|
|
28
|
+
lines.push("' Relationships");
|
|
29
|
+
for (const rel of model.contextMap.relationships) {
|
|
30
|
+
if (rel.type === 'Partnership') {
|
|
31
|
+
const symRel = rel;
|
|
32
|
+
lines.push(`${sanitizeId(symRel.participant1)} <--> ${sanitizeId(symRel.participant2)} : Partnership`);
|
|
33
|
+
}
|
|
34
|
+
else if (rel.type === 'SharedKernel') {
|
|
35
|
+
const symRel = rel;
|
|
36
|
+
lines.push(`${sanitizeId(symRel.participant1)} <--> ${sanitizeId(symRel.participant2)} : Shared Kernel`);
|
|
37
|
+
}
|
|
38
|
+
else if (rel.type === 'UpstreamDownstream') {
|
|
39
|
+
const udRel = rel;
|
|
40
|
+
let label = '';
|
|
41
|
+
if (udRel.upstreamPatterns && udRel.upstreamPatterns.length > 0) {
|
|
42
|
+
label += `[${udRel.upstreamPatterns.join(',')}] `;
|
|
43
|
+
}
|
|
44
|
+
label += 'U→D';
|
|
45
|
+
if (udRel.downstreamPatterns && udRel.downstreamPatterns.length > 0) {
|
|
46
|
+
label += ` [${udRel.downstreamPatterns.join(',')}]`;
|
|
47
|
+
}
|
|
48
|
+
lines.push(`${sanitizeId(udRel.upstream)} --> ${sanitizeId(udRel.downstream)} : ${label}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
lines.push('');
|
|
53
|
+
lines.push('@enduml');
|
|
54
|
+
return lines.join('\n');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Generate a PlantUML class diagram for an aggregate
|
|
58
|
+
*/
|
|
59
|
+
export function generateAggregateDiagram(aggregate) {
|
|
60
|
+
const lines = [];
|
|
61
|
+
lines.push('@startuml');
|
|
62
|
+
lines.push(`title Aggregate: ${aggregate.name}`);
|
|
63
|
+
lines.push('');
|
|
64
|
+
lines.push('skinparam classAttributeIconSize 0');
|
|
65
|
+
lines.push('skinparam class {');
|
|
66
|
+
lines.push(' BackgroundColor<<AggregateRoot>> LightGreen');
|
|
67
|
+
lines.push(' BackgroundColor<<Entity>> LightBlue');
|
|
68
|
+
lines.push(' BackgroundColor<<ValueObject>> LightYellow');
|
|
69
|
+
lines.push(' BackgroundColor<<DomainEvent>> LightCoral');
|
|
70
|
+
lines.push(' BackgroundColor<<Command>> LightGray');
|
|
71
|
+
lines.push(' BackgroundColor<<Service>> LightPink');
|
|
72
|
+
lines.push('}');
|
|
73
|
+
lines.push('');
|
|
74
|
+
// Package for the aggregate
|
|
75
|
+
lines.push(`package "${aggregate.name}" {`);
|
|
76
|
+
lines.push('');
|
|
77
|
+
// Entities
|
|
78
|
+
for (const entity of aggregate.entities) {
|
|
79
|
+
const stereotype = entity.aggregateRoot ? 'AggregateRoot' : 'Entity';
|
|
80
|
+
lines.push(` class ${sanitizeId(entity.name)} <<${stereotype}>> {`);
|
|
81
|
+
for (const attr of entity.attributes) {
|
|
82
|
+
const prefix = attr.key ? '+' : '-';
|
|
83
|
+
const nullable = attr.nullable ? '?' : '';
|
|
84
|
+
lines.push(` ${prefix}${attr.name}: ${attr.type}${nullable}`);
|
|
85
|
+
}
|
|
86
|
+
if (entity.operations && entity.operations.length > 0) {
|
|
87
|
+
lines.push(' --');
|
|
88
|
+
for (const op of entity.operations) {
|
|
89
|
+
const params = op.parameters.map(p => `${p.name}: ${p.type}`).join(', ');
|
|
90
|
+
lines.push(` +${op.name}(${params}): ${op.returnType || 'void'}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
lines.push(' }');
|
|
94
|
+
lines.push('');
|
|
95
|
+
}
|
|
96
|
+
// Value Objects
|
|
97
|
+
for (const vo of aggregate.valueObjects) {
|
|
98
|
+
lines.push(` class ${sanitizeId(vo.name)} <<ValueObject>> {`);
|
|
99
|
+
for (const attr of vo.attributes) {
|
|
100
|
+
lines.push(` -${attr.name}: ${attr.type}`);
|
|
101
|
+
}
|
|
102
|
+
lines.push(' }');
|
|
103
|
+
lines.push('');
|
|
104
|
+
}
|
|
105
|
+
// Domain Events
|
|
106
|
+
for (const event of aggregate.domainEvents) {
|
|
107
|
+
lines.push(` class ${sanitizeId(event.name)} <<DomainEvent>> {`);
|
|
108
|
+
for (const attr of event.attributes) {
|
|
109
|
+
lines.push(` -${attr.name}: ${attr.type}`);
|
|
110
|
+
}
|
|
111
|
+
lines.push(' }');
|
|
112
|
+
lines.push('');
|
|
113
|
+
}
|
|
114
|
+
// Commands
|
|
115
|
+
for (const cmd of aggregate.commands) {
|
|
116
|
+
lines.push(` class ${sanitizeId(cmd.name)} <<Command>> {`);
|
|
117
|
+
for (const attr of cmd.attributes) {
|
|
118
|
+
lines.push(` -${attr.name}: ${attr.type}`);
|
|
119
|
+
}
|
|
120
|
+
lines.push(' }');
|
|
121
|
+
lines.push('');
|
|
122
|
+
}
|
|
123
|
+
// Services
|
|
124
|
+
for (const svc of aggregate.services) {
|
|
125
|
+
lines.push(` class ${sanitizeId(svc.name)} <<Service>> {`);
|
|
126
|
+
for (const op of svc.operations) {
|
|
127
|
+
const params = op.parameters.map(p => `${p.name}: ${p.type}`).join(', ');
|
|
128
|
+
lines.push(` +${op.name}(${params}): ${op.returnType || 'void'}`);
|
|
129
|
+
}
|
|
130
|
+
lines.push(' }');
|
|
131
|
+
lines.push('');
|
|
132
|
+
}
|
|
133
|
+
lines.push('}');
|
|
134
|
+
// Add relationships between entities and value objects
|
|
135
|
+
// Aggregate root owns entities
|
|
136
|
+
if (aggregate.aggregateRoot) {
|
|
137
|
+
for (const entity of aggregate.entities) {
|
|
138
|
+
if (!entity.aggregateRoot) {
|
|
139
|
+
lines.push(`${sanitizeId(aggregate.aggregateRoot.name)} *-- ${sanitizeId(entity.name)}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Aggregate root uses value objects
|
|
143
|
+
for (const vo of aggregate.valueObjects) {
|
|
144
|
+
lines.push(`${sanitizeId(aggregate.aggregateRoot.name)} o-- ${sanitizeId(vo.name)}`);
|
|
145
|
+
}
|
|
146
|
+
// Aggregate root publishes events
|
|
147
|
+
for (const event of aggregate.domainEvents) {
|
|
148
|
+
lines.push(`${sanitizeId(aggregate.aggregateRoot.name)} ..> ${sanitizeId(event.name)} : publishes`);
|
|
149
|
+
}
|
|
150
|
+
// Commands target aggregate root
|
|
151
|
+
for (const cmd of aggregate.commands) {
|
|
152
|
+
lines.push(`${sanitizeId(cmd.name)} ..> ${sanitizeId(aggregate.aggregateRoot.name)} : targets`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
lines.push('');
|
|
156
|
+
lines.push('@enduml');
|
|
157
|
+
return lines.join('\n');
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Generate a full model diagram with all contexts and their aggregates
|
|
161
|
+
*/
|
|
162
|
+
export function generateFullModelDiagram(model) {
|
|
163
|
+
const lines = [];
|
|
164
|
+
lines.push('@startuml');
|
|
165
|
+
lines.push(`title Domain Model: ${model.name}`);
|
|
166
|
+
lines.push('');
|
|
167
|
+
lines.push('skinparam packageStyle rectangle');
|
|
168
|
+
lines.push('skinparam package {');
|
|
169
|
+
lines.push(' BackgroundColor<<BoundedContext>> LightBlue');
|
|
170
|
+
lines.push('}');
|
|
171
|
+
lines.push('');
|
|
172
|
+
// Each bounded context as a package
|
|
173
|
+
for (const bc of model.boundedContexts) {
|
|
174
|
+
lines.push(`package "${bc.name}" <<BoundedContext>> {`);
|
|
175
|
+
// Aggregates as packages within
|
|
176
|
+
for (const agg of bc.aggregates) {
|
|
177
|
+
lines.push(` package "${agg.name}" <<Aggregate>> {`);
|
|
178
|
+
// Aggregate root entity
|
|
179
|
+
if (agg.aggregateRoot) {
|
|
180
|
+
lines.push(` class ${sanitizeId(agg.aggregateRoot.name)} <<AggregateRoot>>`);
|
|
181
|
+
}
|
|
182
|
+
// Other entities
|
|
183
|
+
for (const entity of agg.entities) {
|
|
184
|
+
if (!entity.aggregateRoot) {
|
|
185
|
+
lines.push(` class ${sanitizeId(entity.name)} <<Entity>>`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Value objects
|
|
189
|
+
for (const vo of agg.valueObjects) {
|
|
190
|
+
lines.push(` class ${sanitizeId(vo.name)} <<ValueObject>>`);
|
|
191
|
+
}
|
|
192
|
+
lines.push(' }');
|
|
193
|
+
}
|
|
194
|
+
// Module aggregates
|
|
195
|
+
for (const mod of bc.modules) {
|
|
196
|
+
lines.push(` package "${mod.name}" <<Module>> {`);
|
|
197
|
+
for (const agg of mod.aggregates) {
|
|
198
|
+
lines.push(` package "${agg.name}" <<Aggregate>> {`);
|
|
199
|
+
if (agg.aggregateRoot) {
|
|
200
|
+
lines.push(` class ${sanitizeId(agg.aggregateRoot.name)} <<AggregateRoot>>`);
|
|
201
|
+
}
|
|
202
|
+
lines.push(' }');
|
|
203
|
+
}
|
|
204
|
+
lines.push(' }');
|
|
205
|
+
}
|
|
206
|
+
lines.push('}');
|
|
207
|
+
lines.push('');
|
|
208
|
+
}
|
|
209
|
+
// Add context map relationships
|
|
210
|
+
if (model.contextMap) {
|
|
211
|
+
lines.push("' Context Map Relationships");
|
|
212
|
+
for (const rel of model.contextMap.relationships) {
|
|
213
|
+
if (rel.type === 'Partnership') {
|
|
214
|
+
const symRel = rel;
|
|
215
|
+
lines.push(`"${symRel.participant1}" <..> "${symRel.participant2}" : Partnership`);
|
|
216
|
+
}
|
|
217
|
+
else if (rel.type === 'SharedKernel') {
|
|
218
|
+
const symRel = rel;
|
|
219
|
+
lines.push(`"${symRel.participant1}" <..> "${symRel.participant2}" : Shared Kernel`);
|
|
220
|
+
}
|
|
221
|
+
else if (rel.type === 'UpstreamDownstream') {
|
|
222
|
+
const udRel = rel;
|
|
223
|
+
let label = 'U→D';
|
|
224
|
+
if (udRel.upstreamPatterns && udRel.upstreamPatterns.length > 0) {
|
|
225
|
+
label = `[${udRel.upstreamPatterns.join(',')}] ${label}`;
|
|
226
|
+
}
|
|
227
|
+
if (udRel.downstreamPatterns && udRel.downstreamPatterns.length > 0) {
|
|
228
|
+
label = `${label} [${udRel.downstreamPatterns.join(',')}]`;
|
|
229
|
+
}
|
|
230
|
+
lines.push(`"${udRel.upstream}" ..> "${udRel.downstream}" : ${label}`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
lines.push('');
|
|
235
|
+
lines.push('@enduml');
|
|
236
|
+
return lines.join('\n');
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Sanitize a name to be a valid PlantUML identifier
|
|
240
|
+
*/
|
|
241
|
+
function sanitizeId(name) {
|
|
242
|
+
return name.replace(/[^a-zA-Z0-9_]/g, '_');
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=plantuml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plantuml.js","sourceRoot":"","sources":["../../src/generators/plantuml.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}
|