@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,519 @@
1
+ import { AstRootSchema } from "./schema.js";
2
+ export class DddCrewParseError extends Error {
3
+ code = "E_DDD_CREW_PARSE_ERROR";
4
+ line;
5
+ constructor(message, line) {
6
+ super(`[E_DDD_CREW_PARSE_ERROR] ${line !== undefined ? `Line ${line}: ` : ""}${message}`);
7
+ this.name = "DddCrewParseError";
8
+ this.line = line;
9
+ }
10
+ }
11
+ /**
12
+ * Parses canonical DDD Crew Aggregate Design Canvas Markdown (v1.1) into a strictly validated AstRoot ADM AST.
13
+ */
14
+ export function parseDddCrewMarkdown(markdown) {
15
+ if (!markdown || !markdown.trim()) {
16
+ throw new DddCrewParseError("Markdown input cannot be empty", 1);
17
+ }
18
+ const rawLines = markdown.split(/\r?\n/);
19
+ // Extract top-level domain metadata
20
+ let domain = "";
21
+ let systemName;
22
+ let systemDescription;
23
+ let createdAt;
24
+ let virgoVersion;
25
+ const actors = [];
26
+ const externalSystems = [];
27
+ const aggregates = [];
28
+ // Split markdown into header lines and aggregate blocks
29
+ let currentAggregateBlock = null;
30
+ const aggregateBlocks = [];
31
+ const headerLines = [];
32
+ for (let i = 0; i < rawLines.length; i++) {
33
+ const lineNum = i + 1;
34
+ const line = rawLines[i];
35
+ const trimmed = line.trim();
36
+ const aggMatch = trimmed.match(/^#+\s*AggregateNode:\s*(.+)$/i);
37
+ if (aggMatch) {
38
+ if (currentAggregateBlock) {
39
+ aggregateBlocks.push(currentAggregateBlock);
40
+ }
41
+ currentAggregateBlock = {
42
+ name: aggMatch[1].trim(),
43
+ lines: []
44
+ };
45
+ continue;
46
+ }
47
+ if (currentAggregateBlock) {
48
+ currentAggregateBlock.lines.push({ line, lineNum });
49
+ }
50
+ else {
51
+ headerLines.push({ line, lineNum });
52
+ }
53
+ }
54
+ if (currentAggregateBlock) {
55
+ aggregateBlocks.push(currentAggregateBlock);
56
+ }
57
+ // Parse Header / Top Metadata
58
+ for (const { line } of headerLines) {
59
+ const trimmed = line.trim();
60
+ const titleMatch = trimmed.match(/^#+\s*(?:Aggregate Design Canvas|Application Domain Model):\s*(.+)$/i);
61
+ if (titleMatch && !domain) {
62
+ domain = titleMatch[1].trim();
63
+ continue;
64
+ }
65
+ const domainBullet = trimmed.match(/^-\s*\*\*Domain:\*\*\s*(.+)$/i);
66
+ if (domainBullet) {
67
+ domain = domainBullet[1].trim();
68
+ continue;
69
+ }
70
+ const sysNameBullet = trimmed.match(/^-\s*\*\*System Name:\*\*\s*(.+)$/i);
71
+ if (sysNameBullet) {
72
+ systemName = sysNameBullet[1].trim();
73
+ continue;
74
+ }
75
+ const sysDescBullet = trimmed.match(/^-\s*\*\*System Description:\*\*\s*(.+)$/i);
76
+ if (sysDescBullet) {
77
+ systemDescription = sysDescBullet[1].trim();
78
+ continue;
79
+ }
80
+ const createdBullet = trimmed.match(/^-\s*\*\*Created At:\*\*\s*(.+)$/i);
81
+ if (createdBullet) {
82
+ createdAt = createdBullet[1].trim();
83
+ continue;
84
+ }
85
+ const versionBullet = trimmed.match(/^-\s*\*\*Virgo Version:\*\*\s*(.+)$/i);
86
+ if (versionBullet) {
87
+ virgoVersion = versionBullet[1].trim();
88
+ continue;
89
+ }
90
+ }
91
+ // Fallback defaults for metadata if omitted in simplified DDD Crew markdown
92
+ if (!domain) {
93
+ if (aggregateBlocks.length > 0) {
94
+ domain = `${aggregateBlocks[0].name}Domain`;
95
+ }
96
+ else {
97
+ throw new DddCrewParseError("Missing Domain identifier in markdown header", 1);
98
+ }
99
+ }
100
+ if (!createdAt) {
101
+ createdAt = new Date().toISOString();
102
+ }
103
+ if (!virgoVersion) {
104
+ const now = new Date();
105
+ const pad = (n) => String(n).padStart(2, "0");
106
+ virgoVersion = `${now.getFullYear()}.${pad(now.getMonth() + 1)}.${pad(now.getDate())}-${pad(now.getHours())}${pad(now.getMinutes())}`;
107
+ }
108
+ // Parse System Actors & External Systems from headerLines
109
+ const headerTables = extractMarkdownTables(headerLines);
110
+ for (const table of headerTables) {
111
+ if (table.headers.includes("actor") && table.headers.includes("description")) {
112
+ for (const row of table.rows) {
113
+ const actorName = row["actor"] || "";
114
+ if (actorName) {
115
+ actors.push({
116
+ name: actorName,
117
+ description: row["description"] || undefined
118
+ });
119
+ }
120
+ }
121
+ }
122
+ else if (table.headers.includes("system") && table.headers.includes("relationship")) {
123
+ for (const row of table.rows) {
124
+ const extName = row["system"] || "";
125
+ if (extName) {
126
+ externalSystems.push({
127
+ name: extName,
128
+ description: row["description"] || undefined,
129
+ relationship: row["relationship"] || undefined,
130
+ technology: row["technology"] || undefined
131
+ });
132
+ }
133
+ }
134
+ }
135
+ }
136
+ // Parse Aggregates
137
+ if (aggregateBlocks.length === 0) {
138
+ throw new DddCrewParseError("Markdown does not contain any '# AggregateNode: <Name>' definitions", 1);
139
+ }
140
+ for (const block of aggregateBlocks) {
141
+ let rootEntity = block.name;
142
+ const states = [];
143
+ // Look for root entity and states bullets
144
+ for (const { line } of block.lines) {
145
+ const trimmed = line.trim();
146
+ const rootMatch = trimmed.match(/^-\s*\*\*Root EntityNode:\*\*\s*(.+)$/i);
147
+ if (rootMatch) {
148
+ rootEntity = rootMatch[1].trim();
149
+ }
150
+ const statesMatch = trimmed.match(/^-\s*\*\*Lifecycle States:\*\*\s*(.+)$/i);
151
+ if (statesMatch) {
152
+ const parsedStates = statesMatch[1]
153
+ .split(",")
154
+ .map((s) => s.trim())
155
+ .filter(Boolean);
156
+ states.push(...parsedStates);
157
+ }
158
+ }
159
+ const tables = extractMarkdownTables(block.lines);
160
+ const entitiesMap = new Map();
161
+ const valueObjectsMap = new Map();
162
+ const commands = [];
163
+ const reducers = [];
164
+ const transitions = [];
165
+ const invariantsList = [];
166
+ const policiesList = [];
167
+ for (const table of tables) {
168
+ // 1. Entities & Fields (Box 1)
169
+ if (table.headers.includes("entity") && table.headers.includes("field")) {
170
+ for (const row of table.rows) {
171
+ const entName = row["entity"];
172
+ const fieldName = row["field"];
173
+ const fieldType = row["type"] || "string";
174
+ const reqStr = (row["required"] || "yes").toLowerCase();
175
+ const listStr = (row["islist"] || "no").toLowerCase();
176
+ const desc = row["description"] || undefined;
177
+ if (!entName || !fieldName)
178
+ continue;
179
+ if (!entitiesMap.has(entName)) {
180
+ entitiesMap.set(entName, []);
181
+ }
182
+ entitiesMap.get(entName).push({
183
+ name: fieldName,
184
+ type: fieldType,
185
+ required: reqStr === "yes" || reqStr === "true",
186
+ isList: listStr === "yes" || listStr === "true",
187
+ description: desc || undefined
188
+ });
189
+ }
190
+ }
191
+ // 2. Value Objects (Box 1)
192
+ else if (table.headers.includes("valueobject") && table.headers.includes("field")) {
193
+ for (const row of table.rows) {
194
+ const voName = row["valueobject"];
195
+ const fieldName = row["field"];
196
+ const fieldType = row["type"] || "string";
197
+ const reqStr = (row["required"] || "yes").toLowerCase();
198
+ const listStr = (row["islist"] || "no").toLowerCase();
199
+ if (!voName || !fieldName)
200
+ continue;
201
+ if (!valueObjectsMap.has(voName)) {
202
+ valueObjectsMap.set(voName, []);
203
+ }
204
+ valueObjectsMap.get(voName).push({
205
+ name: fieldName,
206
+ type: fieldType,
207
+ required: reqStr === "yes" || reqStr === "true",
208
+ isList: listStr === "yes" || listStr === "true"
209
+ });
210
+ }
211
+ }
212
+ // 3. State Transitions Table (Box 3)
213
+ else if (table.headers.includes("trigger") && table.headers.includes("from state") && table.headers.includes("to state")) {
214
+ for (const row of table.rows) {
215
+ const trigger = row["trigger"];
216
+ const fromState = row["from state"];
217
+ const toState = row["to state"];
218
+ const guard = row["guard condition"] || row["guard"] || "-";
219
+ if (trigger && fromState && toState) {
220
+ transitions.push({
221
+ trigger,
222
+ fromState,
223
+ toState,
224
+ guardCondition: guard === "-" ? undefined : guard
225
+ });
226
+ }
227
+ }
228
+ }
229
+ // 4. Enforced Invariants (Box 4)
230
+ else if ((table.headers.includes("invariant / policy") || table.headers.includes("invariant") || table.headers.includes("policy")) &&
231
+ table.headers.includes("description")) {
232
+ for (const row of table.rows) {
233
+ const name = row["invariant / policy"] || row["invariant"] || row["policy"];
234
+ const desc = row["description"] || "";
235
+ const trace = row["intent trace"] || "-";
236
+ if (name) {
237
+ invariantsList.push({
238
+ name,
239
+ description: desc,
240
+ intentTrace: trace === "-" ? undefined : trace
241
+ });
242
+ }
243
+ }
244
+ }
245
+ // 5. Reducers / Corrective Policies (Box 5)
246
+ else if (table.headers.includes("command") && table.headers.includes("target field") && table.headers.includes("operation")) {
247
+ for (const row of table.rows) {
248
+ const cmd = row["command"];
249
+ const targetField = row["target field"];
250
+ const op = (row["operation"] || "SET").toUpperCase();
251
+ const sourceParam = row["source parameter"] || "";
252
+ if (cmd && targetField && sourceParam) {
253
+ reducers.push({
254
+ commandName: cmd,
255
+ targetField,
256
+ operation: op,
257
+ sourceParameter: sourceParam
258
+ });
259
+ }
260
+ }
261
+ }
262
+ // 6. Handled Commands (Box 6)
263
+ else if (table.headers.includes("command") && table.headers.includes("actor")) {
264
+ for (const row of table.rows) {
265
+ const rawCmd = row["command"];
266
+ if (!rawCmd)
267
+ continue;
268
+ const isCreationBadge = /\[Creation\]/i.test(rawCmd);
269
+ const creationCol = (row["creation"] || "").toLowerCase();
270
+ const isCreation = isCreationBadge || creationCol === "yes" || creationCol === "true";
271
+ const cmdName = rawCmd.replace(/\[Creation\]/i, "").trim();
272
+ const actor = row["actor"] || "User";
273
+ const paramsStr = row["parameters"] || "-";
274
+ const parameters = parseParameters(paramsStr);
275
+ const reqStateRaw = row["required state"] || "-";
276
+ const requiredState = reqStateRaw === "-" ? "" : reqStateRaw;
277
+ const targetStateRaw = row["target state"] || "-";
278
+ const targetState = targetStateRaw === "-" ? "" : targetStateRaw;
279
+ const emitsRaw = row["emits event"] || row["emits"] || "-";
280
+ const emits = emitsRaw === "-" ? undefined : emitsRaw;
281
+ const triggerRaw = row["trigger event"] || row["trigger"] || "-";
282
+ const triggerEvent = triggerRaw === "-" ? undefined : triggerRaw;
283
+ const policiesRaw = row["policies / invariants"] || row["invariants"] || "-";
284
+ const policyObjs = parsePolicies(policiesRaw);
285
+ policiesList.push(...policyObjs);
286
+ const policies = policyObjs.map((p) => p.name);
287
+ commands.push({
288
+ name: cmdName,
289
+ actor,
290
+ isCreation: isCreation || undefined,
291
+ requiredState,
292
+ targetState,
293
+ parameters,
294
+ emits,
295
+ triggerEvent,
296
+ policies
297
+ });
298
+ }
299
+ }
300
+ }
301
+ // Also extract Mermaid stateDiagram-v2 transitions if explicit transition table was not present
302
+ if (transitions.length === 0) {
303
+ let inMermaid = false;
304
+ for (const { line } of block.lines) {
305
+ const trimmed = line.trim();
306
+ if (trimmed.startsWith("```mermaid")) {
307
+ inMermaid = true;
308
+ continue;
309
+ }
310
+ if (inMermaid && trimmed.startsWith("```")) {
311
+ inMermaid = false;
312
+ continue;
313
+ }
314
+ if (inMermaid) {
315
+ const transMatch = trimmed.match(/([A-Za-z0-9_\[\*\]]+)\s*-->\s*([A-Za-z0-9_]+)\s*:\s*(.+)$/);
316
+ if (transMatch) {
317
+ const fromState = transMatch[1].trim();
318
+ const toState = transMatch[2].trim();
319
+ const trigger = transMatch[3].trim();
320
+ if (fromState === "[*]") {
321
+ const matchedCmd = commands.find((c) => c.name === trigger);
322
+ if (matchedCmd) {
323
+ matchedCmd.isCreation = true;
324
+ matchedCmd.targetState = toState;
325
+ }
326
+ }
327
+ else {
328
+ transitions.push({
329
+ trigger,
330
+ fromState,
331
+ toState
332
+ });
333
+ if (!states.includes(fromState)) {
334
+ states.push(fromState);
335
+ }
336
+ if (!states.includes(toState)) {
337
+ states.push(toState);
338
+ }
339
+ }
340
+ }
341
+ }
342
+ }
343
+ }
344
+ // Assemble entities
345
+ const entities = [];
346
+ if (entitiesMap.size > 0) {
347
+ for (const [name, fields] of entitiesMap.entries()) {
348
+ entities.push({
349
+ name,
350
+ fields,
351
+ relationships: []
352
+ });
353
+ }
354
+ }
355
+ else {
356
+ entities.push({
357
+ name: rootEntity,
358
+ fields: [{ name: "$id", type: "string", required: true, isList: false }],
359
+ relationships: []
360
+ });
361
+ }
362
+ // Assemble value objects
363
+ const valueObjects = [];
364
+ for (const [name, fields] of valueObjectsMap.entries()) {
365
+ valueObjects.push({ name, type: "object", fields });
366
+ }
367
+ // Fallback states if omitted in bullets
368
+ if (states.length === 0) {
369
+ states.push("Active");
370
+ }
371
+ aggregates.push({
372
+ name: block.name,
373
+ rootEntity,
374
+ states: states,
375
+ entities,
376
+ valueObjects,
377
+ commands,
378
+ reducers,
379
+ ...(policiesList.length > 0 ? { policies: policiesList } : {}),
380
+ ...(transitions.length > 0 ? { transitions: transitions } : {})
381
+ });
382
+ }
383
+ const rawModel = {
384
+ domain,
385
+ systemName,
386
+ systemDescription,
387
+ createdAt,
388
+ virgoVersion,
389
+ actors: actors.length > 0 ? actors : undefined,
390
+ externalSystems: externalSystems.length > 0 ? externalSystems : undefined,
391
+ aggregates
392
+ };
393
+ try {
394
+ return AstRootSchema.parse(rawModel);
395
+ }
396
+ catch (err) {
397
+ throw new DddCrewParseError(`Schema validation failed on parsed model: ${err.message}`);
398
+ }
399
+ }
400
+ function extractMarkdownTables(lines) {
401
+ const tables = [];
402
+ let currentHeader = null;
403
+ let currentRows = [];
404
+ for (let i = 0; i < lines.length; i++) {
405
+ const raw = lines[i].line.trim();
406
+ if (raw.startsWith("|") && raw.endsWith("|")) {
407
+ const cells = splitTableRow(raw);
408
+ if (!currentHeader) {
409
+ if (i + 1 < lines.length && isTableSeparator(lines[i + 1].line.trim())) {
410
+ currentHeader = cells.map((c) => c.toLowerCase());
411
+ i++; // Skip separator line
412
+ currentRows = [];
413
+ }
414
+ }
415
+ else {
416
+ const rowData = {};
417
+ for (let j = 0; j < currentHeader.length; j++) {
418
+ rowData[currentHeader[j]] = cells[j] || "";
419
+ }
420
+ currentRows.push(rowData);
421
+ }
422
+ }
423
+ else {
424
+ if (currentHeader && currentRows.length > 0) {
425
+ tables.push({ headers: currentHeader, rows: currentRows });
426
+ }
427
+ currentHeader = null;
428
+ currentRows = [];
429
+ }
430
+ }
431
+ if (currentHeader && currentRows.length > 0) {
432
+ tables.push({ headers: currentHeader, rows: currentRows });
433
+ }
434
+ return tables;
435
+ }
436
+ function splitTableRow(row) {
437
+ const inner = row.slice(1, -1);
438
+ const cells = [];
439
+ let current = "";
440
+ let escaped = false;
441
+ for (let i = 0; i < inner.length; i++) {
442
+ const ch = inner[i];
443
+ if (escaped) {
444
+ current += ch;
445
+ escaped = false;
446
+ }
447
+ else if (ch === "\\") {
448
+ escaped = true;
449
+ }
450
+ else if (ch === "|") {
451
+ cells.push(current.trim());
452
+ current = "";
453
+ }
454
+ else {
455
+ current += ch;
456
+ }
457
+ }
458
+ cells.push(current.trim());
459
+ return cells;
460
+ }
461
+ function isTableSeparator(row) {
462
+ if (!row.startsWith("|") || !row.endsWith("|"))
463
+ return false;
464
+ const inner = row.slice(1, -1);
465
+ return /^[\s|:-]+$/.test(inner);
466
+ }
467
+ function parseParameters(paramStr) {
468
+ if (!paramStr || paramStr.trim() === "-")
469
+ return [];
470
+ const items = paramStr.split(",").map((s) => s.trim()).filter(Boolean);
471
+ const fields = [];
472
+ for (const item of items) {
473
+ const parts = item.split(":").map((s) => s.trim());
474
+ if (parts.length >= 2) {
475
+ let name = parts[0];
476
+ let rawType = parts[1];
477
+ let required = true;
478
+ let isList = false;
479
+ if (name.endsWith("?")) {
480
+ name = name.slice(0, -1).trim();
481
+ required = false;
482
+ }
483
+ if (rawType.endsWith("[]")) {
484
+ rawType = rawType.slice(0, -2).trim();
485
+ isList = true;
486
+ }
487
+ fields.push({
488
+ name,
489
+ type: rawType || "string",
490
+ required,
491
+ isList
492
+ });
493
+ }
494
+ }
495
+ return fields;
496
+ }
497
+ function parsePolicies(policyStr) {
498
+ if (!policyStr || policyStr.trim() === "-")
499
+ return [];
500
+ const items = policyStr.split(";").map((s) => s.trim()).filter(Boolean);
501
+ const policies = [];
502
+ for (const item of items) {
503
+ const parts = item.split(":").map((s) => s.trim());
504
+ if (parts.length >= 2) {
505
+ policies.push({
506
+ name: parts[0],
507
+ description: parts.slice(1).join(":").trim()
508
+ });
509
+ }
510
+ else if (parts.length === 1 && parts[0]) {
511
+ policies.push({
512
+ name: parts[0],
513
+ description: parts[0]
514
+ });
515
+ }
516
+ }
517
+ return policies;
518
+ }
519
+ //# sourceMappingURL=dddCrewParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dddCrewParser.js","sourceRoot":"","sources":["../src/dddCrewParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { AstRoot } from "./schema.js";
2
+ /**
3
+ * Projects a validated AstRoot into the canonical DDD Crew Aggregate Design Canvas Markdown format (v1.1).
4
+ * Follows the official 9-box structure:
5
+ * 1. Name
6
+ * 2. Description
7
+ * 3. State Transitions (with Mermaid state diagram)
8
+ * 4. Enforced Invariants
9
+ * 5. Corrective Policies
10
+ * 6. Handled Commands
11
+ * 7. Created Events
12
+ * 8. Throughput
13
+ * 9. Size
14
+ */
15
+ export declare function projectDddCrewMarkdown(model: AstRoot): string;
16
+ //# sourceMappingURL=dddCrewProjector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dddCrewProjector.d.ts","sourceRoot":"","sources":["../src/dddCrewProjector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAC;AA6CrD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA6M7D"}