@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.
Files changed (40) hide show
  1. package/LICENSE +190 -0
  2. package/dist/admValidator.d.ts +28 -0
  3. package/dist/admValidator.d.ts.map +1 -0
  4. package/dist/admValidator.js +233 -0
  5. package/dist/admValidator.js.map +1 -0
  6. package/dist/contractProjector.d.ts +23 -0
  7. package/dist/contractProjector.d.ts.map +1 -0
  8. package/dist/contractProjector.js +269 -0
  9. package/dist/contractProjector.js.map +1 -0
  10. package/dist/dddCrewParser.d.ts +11 -0
  11. package/dist/dddCrewParser.d.ts.map +1 -0
  12. package/dist/dddCrewParser.js +519 -0
  13. package/dist/dddCrewParser.js.map +1 -0
  14. package/dist/dddCrewProjector.d.ts +16 -0
  15. package/dist/dddCrewProjector.d.ts.map +1 -0
  16. package/dist/dddCrewProjector.js +227 -0
  17. package/dist/dddCrewProjector.js.map +1 -0
  18. package/dist/defaultTemplate.d.ts +3 -0
  19. package/dist/defaultTemplate.d.ts.map +1 -0
  20. package/dist/defaultTemplate.js +1442 -0
  21. package/dist/defaultTemplate.js.map +1 -0
  22. package/dist/excalidrawProjector.d.ts +56 -0
  23. package/dist/excalidrawProjector.d.ts.map +1 -0
  24. package/dist/excalidrawProjector.js +235 -0
  25. package/dist/excalidrawProjector.js.map +1 -0
  26. package/dist/index.d.ts +8 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +8 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/openApiProjector.d.ts +17 -0
  31. package/dist/openApiProjector.d.ts.map +1 -0
  32. package/dist/openApiProjector.js +298 -0
  33. package/dist/openApiProjector.js.map +1 -0
  34. package/dist/schema.d.ts +670 -0
  35. package/dist/schema.d.ts.map +1 -0
  36. package/dist/schema.js +296 -0
  37. package/dist/schema.js.map +1 -0
  38. package/dist/templates/aggregate-design-canvas-v1.1.excalidraw.json +1441 -0
  39. package/package.json +24 -3
  40. 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"}