@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,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"}
|