@simway/spica 0.0.0-stage → 0.1.2
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 +190 -0
- package/dist/admValidator.d.ts +28 -0
- package/dist/admValidator.d.ts.map +1 -0
- package/dist/admValidator.js +233 -0
- package/dist/admValidator.js.map +1 -0
- package/dist/contractProjector.d.ts +23 -0
- package/dist/contractProjector.d.ts.map +1 -0
- package/dist/contractProjector.js +269 -0
- package/dist/contractProjector.js.map +1 -0
- package/dist/dddCrewParser.d.ts +11 -0
- package/dist/dddCrewParser.d.ts.map +1 -0
- package/dist/dddCrewParser.js +519 -0
- package/dist/dddCrewParser.js.map +1 -0
- package/dist/dddCrewProjector.d.ts +16 -0
- package/dist/dddCrewProjector.d.ts.map +1 -0
- package/dist/dddCrewProjector.js +227 -0
- package/dist/dddCrewProjector.js.map +1 -0
- package/dist/defaultTemplate.d.ts +3 -0
- package/dist/defaultTemplate.d.ts.map +1 -0
- package/dist/defaultTemplate.js +1442 -0
- package/dist/defaultTemplate.js.map +1 -0
- package/dist/excalidrawProjector.d.ts +56 -0
- package/dist/excalidrawProjector.d.ts.map +1 -0
- package/dist/excalidrawProjector.js +235 -0
- package/dist/excalidrawProjector.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/openApiProjector.d.ts +17 -0
- package/dist/openApiProjector.d.ts.map +1 -0
- package/dist/openApiProjector.js +298 -0
- package/dist/openApiProjector.js.map +1 -0
- package/dist/schema.d.ts +670 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +296 -0
- package/dist/schema.js.map +1 -0
- package/dist/templates/aggregate-design-canvas-v1.1.excalidraw.json +1441 -0
- package/package.json +24 -3
- package/README.md +0 -3
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { idFieldToEntityName } from "./admValidator.js";
|
|
2
|
+
/**
|
|
3
|
+
* Projects a validated AstRoot into a visual Mermaid Domain AggregateNode Map (graph TD).
|
|
4
|
+
* Renders aggregate subgraphs, internal commands/states, entity foreign-key dependencies,
|
|
5
|
+
* and cross-aggregate domain event flow edges.
|
|
6
|
+
*/
|
|
7
|
+
export function projectDomainAggregateMap(model) {
|
|
8
|
+
const lines = ["graph TD"];
|
|
9
|
+
const foreignKeyEdges = [];
|
|
10
|
+
const eventFlowEdges = [];
|
|
11
|
+
const aggregateNames = new Set(model.aggregates.map((a) => a.name));
|
|
12
|
+
for (const agg of model.aggregates) {
|
|
13
|
+
const states = agg.states || [];
|
|
14
|
+
const stateStr = states.length > 0 ? states.join(" | ") : "Unspecified";
|
|
15
|
+
lines.push(` subgraph ${agg.name} [AggregateNode: ${agg.name}]`);
|
|
16
|
+
lines.push(` ${agg.name}_States["States: ${stateStr}"]`);
|
|
17
|
+
for (const cmd of agg.commands ?? []) {
|
|
18
|
+
lines.push(` ${cmd.name}["CommandNode: ${cmd.name}"] --> ${agg.name}_States`);
|
|
19
|
+
}
|
|
20
|
+
lines.push(" end");
|
|
21
|
+
// Collect cross-aggregate references from entity fields (Foreign Keys)
|
|
22
|
+
for (const ent of agg.entities ?? []) {
|
|
23
|
+
for (const field of ent.fields) {
|
|
24
|
+
const targetEntity = idFieldToEntityName(field.name);
|
|
25
|
+
if (targetEntity && targetEntity !== agg.name && targetEntity !== agg.rootEntity) {
|
|
26
|
+
const cardinality = field.isList ? "1..*" : field.required ? "1..1" : "0..1";
|
|
27
|
+
foreignKeyEdges.push(` ${targetEntity} -.->|"${field.name} (${cardinality})"| ${agg.name}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Collect cross-aggregate domain event flow edges
|
|
32
|
+
for (const cmd of agg.commands ?? []) {
|
|
33
|
+
// 1. Explicit triggerEvent: e.g. "Loan.BookReturned" or "BookReturned"
|
|
34
|
+
if (cmd.triggerEvent) {
|
|
35
|
+
const parts = cmd.triggerEvent.split(".");
|
|
36
|
+
if (parts.length === 2 && aggregateNames.has(parts[0])) {
|
|
37
|
+
eventFlowEdges.push(` ${parts[0]} ==>|"triggers on ${parts[1]}"| ${agg.name}`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// If triggerEvent doesn't specify source aggregate prefix, search all aggregates for matching command/emits
|
|
41
|
+
for (const otherAgg of model.aggregates) {
|
|
42
|
+
if (otherAgg.name === agg.name)
|
|
43
|
+
continue;
|
|
44
|
+
const matches = (otherAgg.commands ?? []).some((c) => c.emits === cmd.triggerEvent || `${c.name}Event` === cmd.triggerEvent);
|
|
45
|
+
if (matches) {
|
|
46
|
+
eventFlowEdges.push(` ${otherAgg.name} ==>|"triggers on ${cmd.triggerEvent}"| ${agg.name}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// 2. Policies declaring cross-aggregate source
|
|
52
|
+
for (const policyName of cmd.policies || []) {
|
|
53
|
+
const policy = (agg.policies || []).find((p) => p.name === policyName);
|
|
54
|
+
if (!policy)
|
|
55
|
+
continue;
|
|
56
|
+
if (policy.sourceAggregate && aggregateNames.has(policy.sourceAggregate) && policy.sourceAggregate !== agg.name) {
|
|
57
|
+
const eventLabel = policy.sourceEvent || policy.name;
|
|
58
|
+
eventFlowEdges.push(` ${policy.sourceAggregate} ==>|"triggers on ${eventLabel}"| ${agg.name}`);
|
|
59
|
+
}
|
|
60
|
+
else if (policy.intentTrace || policy.description) {
|
|
61
|
+
const text = `${policy.intentTrace || ""} ${policy.description || ""}`;
|
|
62
|
+
// Match patterns like: "on Loan.BookReturned" or "when Loan emits ReturnBook"
|
|
63
|
+
const match = text.match(/(?:on|when|from)\s+([A-Z][a-zA-Z0-9]+)\.([A-Z][a-zA-Z0-9]+)/);
|
|
64
|
+
if (match && aggregateNames.has(match[1]) && match[1] !== agg.name) {
|
|
65
|
+
eventFlowEdges.push(` ${match[1]} ==>|"triggers on ${match[2]}"| ${agg.name}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Append structural foreign-key edges
|
|
72
|
+
if (foreignKeyEdges.length > 0) {
|
|
73
|
+
lines.push("");
|
|
74
|
+
const uniqueFkEdges = Array.from(new Set(foreignKeyEdges));
|
|
75
|
+
lines.push(...uniqueFkEdges);
|
|
76
|
+
}
|
|
77
|
+
// Append reactive event-flow edges
|
|
78
|
+
if (eventFlowEdges.length > 0) {
|
|
79
|
+
lines.push("");
|
|
80
|
+
const uniqueEventEdges = Array.from(new Set(eventFlowEdges));
|
|
81
|
+
lines.push(...uniqueEventEdges);
|
|
82
|
+
}
|
|
83
|
+
return lines.join("\n");
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Projects a validated AstRoot into a formal UML Class Diagram (Mermaid classDiagram)
|
|
87
|
+
* with explicit composition (*--) and association (-->) semantics.
|
|
88
|
+
*/
|
|
89
|
+
export function projectClassDiagram(model) {
|
|
90
|
+
const lines = ["classDiagram"];
|
|
91
|
+
for (const agg of model.aggregates) {
|
|
92
|
+
for (const ent of agg.entities ?? []) {
|
|
93
|
+
lines.push(` class ${ent.name} {`);
|
|
94
|
+
for (const field of ent.fields) {
|
|
95
|
+
const listMarker = field.isList ? "[]" : "";
|
|
96
|
+
lines.push(` +${field.type}${listMarker} ${field.name}`);
|
|
97
|
+
}
|
|
98
|
+
lines.push(" }");
|
|
99
|
+
// Internal aggregate composition (rootEntity owns child entities)
|
|
100
|
+
if (ent.name !== agg.rootEntity) {
|
|
101
|
+
lines.push(` ${agg.rootEntity} "1" *-- "0..*" ${ent.name} : contains`);
|
|
102
|
+
}
|
|
103
|
+
// Foreign entity associations
|
|
104
|
+
for (const field of ent.fields) {
|
|
105
|
+
const targetEntity = idFieldToEntityName(field.name);
|
|
106
|
+
if (targetEntity && targetEntity !== ent.name) {
|
|
107
|
+
const cardinality = field.isList ? "\"0..*\"" : field.required ? "\"1\"" : "\"0..1\"";
|
|
108
|
+
lines.push(` ${ent.name} --> ${cardinality} ${targetEntity} : ${field.name}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
for (const vo of agg.valueObjects || []) {
|
|
113
|
+
lines.push(` class ${vo.name} {`);
|
|
114
|
+
lines.push(" <<ValueObjectNode>>");
|
|
115
|
+
if (vo.fields && vo.fields.length > 0) {
|
|
116
|
+
for (const field of vo.fields) {
|
|
117
|
+
const listMarker = field.isList ? "[]" : "";
|
|
118
|
+
lines.push(` +${field.type}${listMarker} ${field.name}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else if (vo.values && vo.values.length > 0) {
|
|
122
|
+
for (const val of vo.values) {
|
|
123
|
+
lines.push(` +${val}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
lines.push(" }");
|
|
127
|
+
lines.push(` ${agg.rootEntity} ..> ${vo.name} : uses`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return lines.join("\n");
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Projects a validated AstRoot into a formal UML State Machine Diagram (Mermaid stateDiagram-v2)
|
|
134
|
+
* for lifecycle soundness, state reachability, guard evaluation, and command triggers.
|
|
135
|
+
*/
|
|
136
|
+
export function projectStateMachineDiagram(model) {
|
|
137
|
+
const lines = ["stateDiagram-v2"];
|
|
138
|
+
for (const agg of model.aggregates) {
|
|
139
|
+
const states = agg.states || [];
|
|
140
|
+
if (states.length === 0)
|
|
141
|
+
continue;
|
|
142
|
+
lines.push(` state "${agg.name} Lifecycle" as ${agg.name}Lifecycle {`);
|
|
143
|
+
// Process explicit transitions if present
|
|
144
|
+
const explicitTransitions = agg.transitions ?? [];
|
|
145
|
+
if (explicitTransitions.length > 0) {
|
|
146
|
+
for (const tr of explicitTransitions) {
|
|
147
|
+
const guard = tr.guardCondition ? ` [${tr.guardCondition}]` : "";
|
|
148
|
+
const from = tr.fromState === "" || tr.fromState === "[*]" ? "[*]" : tr.fromState;
|
|
149
|
+
lines.push(` ${from} --> ${tr.toState} : ${tr.trigger}${guard}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
// Derive transitions deterministically from commands
|
|
154
|
+
for (const cmd of agg.commands ?? []) {
|
|
155
|
+
const isCreation = cmd.isCreation ?? (cmd.requiredState === "");
|
|
156
|
+
const policies = cmd.policies || [];
|
|
157
|
+
const guard = policies.length > 0 ? ` [${policies.join(", ")}]` : "";
|
|
158
|
+
if (isCreation && cmd.targetState) {
|
|
159
|
+
lines.push(` [*] --> ${cmd.targetState} : ${cmd.name}${guard}`);
|
|
160
|
+
}
|
|
161
|
+
else if (cmd.requiredState && cmd.targetState) {
|
|
162
|
+
lines.push(` ${cmd.requiredState} --> ${cmd.targetState} : ${cmd.name}${guard}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
lines.push(" }");
|
|
167
|
+
}
|
|
168
|
+
return lines.join("\n");
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Helper to produce a valid Mermaid identifier from arbitrary strings.
|
|
172
|
+
*/
|
|
173
|
+
function toMermaidId(str) {
|
|
174
|
+
const sanitized = str.replace(/[^a-zA-Z0-9]/g, "");
|
|
175
|
+
if (!sanitized)
|
|
176
|
+
return "systemObj";
|
|
177
|
+
return sanitized.charAt(0).toLowerCase() + sanitized.slice(1);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Projects a validated AstRoot into Simon Brown's C4 Model Level 1 (System Context Diagram)
|
|
181
|
+
* using Mermaid's native C4Context syntax with explicit integration transport protocols.
|
|
182
|
+
*/
|
|
183
|
+
export function projectSystemContextDiagram(model) {
|
|
184
|
+
const lines = ["C4Context"];
|
|
185
|
+
const rawDomain = model.domainName || "System";
|
|
186
|
+
const systemName = model.systemName || `${rawDomain} System`;
|
|
187
|
+
const systemId = toMermaidId(systemName);
|
|
188
|
+
const systemDesc = model.systemDescription || `Core domain platform for ${rawDomain}`;
|
|
189
|
+
lines.push(` title System Context: ${systemName}`);
|
|
190
|
+
// Resolve Human Actors (from explicit model.actors or dynamically extracted from commands)
|
|
191
|
+
const actorMap = new Map();
|
|
192
|
+
for (const act of model.actors || []) {
|
|
193
|
+
if (/^(system|internal|cron|scheduler|timer)$/i.test(act.name))
|
|
194
|
+
continue;
|
|
195
|
+
actorMap.set(act.name, act.description || `User interacting with ${systemName}`);
|
|
196
|
+
}
|
|
197
|
+
// Extract from commands only if model.actors was not provided, ignoring internal automated processes
|
|
198
|
+
if (!model.actors || model.actors.length === 0) {
|
|
199
|
+
for (const agg of model.aggregates) {
|
|
200
|
+
for (const cmd of agg.commands ?? []) {
|
|
201
|
+
if (cmd.actor && !/^(system|internal|cron|scheduler|timer)$/i.test(cmd.actor) && !actorMap.has(cmd.actor)) {
|
|
202
|
+
actorMap.set(cmd.actor, `ActorNode executing ${cmd.name} operations`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// If still no actors, scan aggregates for human persona names (e.g. Patron, User, Customer, Member, Admin)
|
|
208
|
+
if (actorMap.size === 0) {
|
|
209
|
+
for (const agg of model.aggregates) {
|
|
210
|
+
if (/user|member|customer|patron|operator|admin|client|guest|buyer|seller|driver|passenger|patient|doctor|student|teacher/i.test(agg.name)) {
|
|
211
|
+
actorMap.set(agg.name, `Primary human persona for ${agg.name}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Fallback if no human personas detected
|
|
216
|
+
if (actorMap.size === 0) {
|
|
217
|
+
actorMap.set("User", `Primary user interacting with ${systemName}`);
|
|
218
|
+
}
|
|
219
|
+
// Emit Person definitions
|
|
220
|
+
for (const [name, desc] of actorMap.entries()) {
|
|
221
|
+
const actId = toMermaidId(name);
|
|
222
|
+
lines.push(` Person(${actId}, "${name}", "${desc}")`);
|
|
223
|
+
}
|
|
224
|
+
// Emit Primary System definition
|
|
225
|
+
lines.push(` System(${systemId}, "${systemName}", "${systemDesc}")`);
|
|
226
|
+
// Emit External Systems
|
|
227
|
+
const extSystems = model.externalSystems || [];
|
|
228
|
+
for (const ext of extSystems) {
|
|
229
|
+
const extId = toMermaidId(ext.name);
|
|
230
|
+
const desc = ext.description || "External third-party service or bounded context";
|
|
231
|
+
lines.push(` System_Ext(${extId}, "${ext.name}", "${desc}")`);
|
|
232
|
+
}
|
|
233
|
+
// Relationships: Actors -> System (with standard C4 transport technology)
|
|
234
|
+
for (const [name] of actorMap.entries()) {
|
|
235
|
+
const actId = toMermaidId(name);
|
|
236
|
+
lines.push(` Rel(${actId}, ${systemId}, "Interacts with", "Web UI / API")`);
|
|
237
|
+
}
|
|
238
|
+
// Relationships: System -> External Systems (with parsed or derived technology badge)
|
|
239
|
+
for (const ext of extSystems) {
|
|
240
|
+
const extId = toMermaidId(ext.name);
|
|
241
|
+
const rawRel = ext.relationship || "Integrates with";
|
|
242
|
+
let label = rawRel;
|
|
243
|
+
let tech = ext.technology || "";
|
|
244
|
+
if (!tech) {
|
|
245
|
+
// Check for bracketed technology hint: "Sends pickup notices [Async/Kafka]"
|
|
246
|
+
const bracketMatch = rawRel.match(/^(.*?)\s*\[(.*?)\]$/);
|
|
247
|
+
if (bracketMatch) {
|
|
248
|
+
label = bracketMatch[1].trim();
|
|
249
|
+
tech = bracketMatch[2].trim();
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
// Derive technology from relationship keywords
|
|
253
|
+
const lower = rawRel.toLowerCase();
|
|
254
|
+
if (/event|notify|alert|publish|async|kafka|queue|stream|webhook/i.test(lower)) {
|
|
255
|
+
tech = "Async Event";
|
|
256
|
+
}
|
|
257
|
+
else if (/api|charge|pay|verify|gateway|http|rest/i.test(lower)) {
|
|
258
|
+
tech = "HTTPS/REST";
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
tech = "Integration";
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
lines.push(` Rel(${systemId}, ${extId}, "${label}", "${tech}")`);
|
|
266
|
+
}
|
|
267
|
+
return lines.join("\n");
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=contractProjector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contractProjector.js","sourceRoot":"","sources":["../src/contractProjector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AstRoot } from "./schema.js";
|
|
2
|
+
export declare class DddCrewParseError extends Error {
|
|
3
|
+
readonly code = "E_DDD_CREW_PARSE_ERROR";
|
|
4
|
+
readonly line?: number;
|
|
5
|
+
constructor(message: string, line?: number);
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Parses canonical DDD Crew Aggregate Design Canvas Markdown (v1.1) into a strictly validated AstRoot ADM AST.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseDddCrewMarkdown(markdown: string): AstRoot;
|
|
11
|
+
//# sourceMappingURL=dddCrewParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dddCrewParser.d.ts","sourceRoot":"","sources":["../src/dddCrewParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAmK,MAAM,aAAa,CAAC;AAEvM,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,4BAA4B;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAK3C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CA0a9D"}
|