@avodado/core 0.0.1

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/dist/index.js ADDED
@@ -0,0 +1,1180 @@
1
+ import { parse, LineCounter, parseDocument, isNode } from 'yaml';
2
+ import { z } from 'zod';
3
+
4
+ // src/types.ts
5
+ var BLOCK_TYPES = [
6
+ "meta",
7
+ "callout",
8
+ "table",
9
+ "sequence",
10
+ "erd",
11
+ "userstory",
12
+ "timeline",
13
+ "kanban",
14
+ "tracker",
15
+ // Phase 2 — easy HTML-only blocks (plus pyramid/funnel which are simple SVG)
16
+ "prose",
17
+ "glossary",
18
+ "proscons",
19
+ "cvt",
20
+ "stats",
21
+ "code",
22
+ "agenda",
23
+ "tree",
24
+ "pyramid",
25
+ "funnel",
26
+ // Phase 3 — medium SVG blocks
27
+ "flow",
28
+ "state",
29
+ "dfd",
30
+ "journey",
31
+ "gantt",
32
+ "graph",
33
+ "quadrant",
34
+ "swimlane",
35
+ // Phase 4 — complex SVG blocks
36
+ "c4",
37
+ "uml",
38
+ "mece",
39
+ "frontend",
40
+ "cluster",
41
+ // Phase 5 — layout engines (block / infra) + felogic + aliases
42
+ "block",
43
+ "infra",
44
+ "felogic",
45
+ "belogic",
46
+ "event",
47
+ "ddd",
48
+ "network",
49
+ "dag",
50
+ // Phase 6 — UI mockups
51
+ "wireframe"
52
+ ];
53
+ var BLOCK_TYPE_SET = new Set(BLOCK_TYPES);
54
+
55
+ // src/diagnostics.ts
56
+ var ERRORS_BASE = "https://avodado.dev/errors";
57
+ function helpUrl(code) {
58
+ return `${ERRORS_BASE}/${code.toLowerCase()}`;
59
+ }
60
+ function assertNever(x) {
61
+ throw new Error(`Unhandled case: ${JSON.stringify(x)}`);
62
+ }
63
+
64
+ // src/suggest.ts
65
+ function levenshtein(a, b) {
66
+ if (a === b) return 0;
67
+ if (a.length === 0) return b.length;
68
+ if (b.length === 0) return a.length;
69
+ let prev = new Array(b.length + 1);
70
+ let curr = new Array(b.length + 1);
71
+ for (let j = 0; j <= b.length; j++) prev[j] = j;
72
+ for (let i = 1; i <= a.length; i++) {
73
+ curr[0] = i;
74
+ const ai = a.charCodeAt(i - 1);
75
+ for (let j = 1; j <= b.length; j++) {
76
+ const cost = ai === b.charCodeAt(j - 1) ? 0 : 1;
77
+ const del = (prev[j] ?? 0) + 1;
78
+ const ins = (curr[j - 1] ?? 0) + 1;
79
+ const sub = (prev[j - 1] ?? 0) + cost;
80
+ curr[j] = del < ins ? del < sub ? del : sub : ins < sub ? ins : sub;
81
+ }
82
+ [prev, curr] = [curr, prev];
83
+ }
84
+ return prev[b.length] ?? 0;
85
+ }
86
+ function closest(input, candidates, maxDistance = 2) {
87
+ const needle = input.toLowerCase();
88
+ const scored = [];
89
+ for (const c of candidates) {
90
+ const dist = levenshtein(needle, c.toLowerCase());
91
+ if (dist <= maxDistance) scored.push({ value: c, dist });
92
+ }
93
+ scored.sort((x, y) => x.dist - y.dist || x.value.localeCompare(y.value));
94
+ return scored.slice(0, 3).map((s) => s.value);
95
+ }
96
+
97
+ // src/splitter.ts
98
+ var OPEN_FENCE_RE = /^```([A-Za-z][\w-]*)\s*$/;
99
+ var CLOSE_FENCE_RE = /^```\s*$/;
100
+ function splitMarkdown(md) {
101
+ const normalised = md.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
102
+ const lines = normalised.split("\n");
103
+ const segments = [];
104
+ let proseBuf = [];
105
+ let proseStart = 1;
106
+ let i = 0;
107
+ const flushProse = () => {
108
+ if (proseBuf.length === 0) return;
109
+ const text = proseBuf.join("\n");
110
+ if (text.trim().length > 0) {
111
+ segments.push({ kind: "markdown", text, line: proseStart });
112
+ }
113
+ proseBuf = [];
114
+ };
115
+ while (i < lines.length) {
116
+ const line = lines[i] ?? "";
117
+ const openMatch = OPEN_FENCE_RE.exec(line);
118
+ const tag = openMatch?.[1];
119
+ if (tag !== void 0 && BLOCK_TYPE_SET.has(tag)) {
120
+ flushProse();
121
+ const blockStart = i + 1;
122
+ const bodyLines = [];
123
+ i++;
124
+ while (i < lines.length && !CLOSE_FENCE_RE.test(lines[i] ?? "")) {
125
+ bodyLines.push(lines[i] ?? "");
126
+ i++;
127
+ }
128
+ segments.push({
129
+ kind: tag,
130
+ raw: bodyLines.join("\n"),
131
+ line: blockStart
132
+ });
133
+ if (i < lines.length) i++;
134
+ proseStart = i + 1;
135
+ } else {
136
+ if (proseBuf.length === 0) proseStart = i + 1;
137
+ proseBuf.push(line);
138
+ i++;
139
+ }
140
+ }
141
+ flushProse();
142
+ return segments;
143
+ }
144
+ function detectSuspectFences(md) {
145
+ const lines = md.replace(/\r\n/g, "\n").replace(/\r/g, "\n").split("\n");
146
+ const out = [];
147
+ let i = 0;
148
+ while (i < lines.length) {
149
+ const line = lines[i] ?? "";
150
+ const tag = OPEN_FENCE_RE.exec(line)?.[1];
151
+ if (tag !== void 0 && BLOCK_TYPE_SET.has(tag)) {
152
+ i++;
153
+ while (i < lines.length && !CLOSE_FENCE_RE.test(lines[i] ?? "")) i++;
154
+ if (i < lines.length) i++;
155
+ continue;
156
+ }
157
+ if (tag !== void 0) {
158
+ const [suggestion] = closest(tag, BLOCK_TYPES, 2);
159
+ if (suggestion !== void 0) {
160
+ out.push({ line: i + 1, tag, suggestion });
161
+ }
162
+ }
163
+ i++;
164
+ }
165
+ return out;
166
+ }
167
+ function parseBlockBody(raw) {
168
+ try {
169
+ const data = parse(raw);
170
+ return { ok: true, data };
171
+ } catch (err) {
172
+ const e = err;
173
+ const pos = e.linePos?.[0];
174
+ if (pos !== void 0) {
175
+ return { ok: false, message: e.message, line: pos.line, column: pos.col };
176
+ }
177
+ return { ok: false, message: e.message };
178
+ }
179
+ }
180
+ function locateYamlPath(raw, path) {
181
+ let doc;
182
+ const lineCounter = new LineCounter();
183
+ try {
184
+ doc = parseDocument(raw, { lineCounter });
185
+ } catch {
186
+ return void 0;
187
+ }
188
+ if (doc.errors.length > 0 && doc.contents === null) return void 0;
189
+ const node = path.length === 0 ? doc.contents : doc.getIn(path, true);
190
+ if (!isNode(node) || node.range === null || node.range === void 0) return void 0;
191
+ const [start, valueEnd] = node.range;
192
+ const startPos = lineCounter.linePos(start);
193
+ const endPos = lineCounter.linePos(valueEnd);
194
+ const loc = {
195
+ line: startPos.line,
196
+ column: startPos.col
197
+ };
198
+ if (endPos.line === startPos.line) loc.endColumn = endPos.col;
199
+ return loc;
200
+ }
201
+
202
+ // src/parser.ts
203
+ function extractId(data) {
204
+ if (data === null || typeof data !== "object" || Array.isArray(data)) return void 0;
205
+ const id = data.id;
206
+ return typeof id === "string" && id.length > 0 ? id : void 0;
207
+ }
208
+ function extractMeta(data) {
209
+ if (data === null || typeof data !== "object" || Array.isArray(data)) return void 0;
210
+ const d = data;
211
+ const meta = {};
212
+ if (typeof d.title === "string") meta.title = d.title;
213
+ if (typeof d.subtitle === "string") meta.subtitle = d.subtitle;
214
+ if (typeof d.tag === "string") meta.tag = d.tag;
215
+ return Object.keys(meta).length > 0 ? meta : void 0;
216
+ }
217
+ function parseDocument2(markdown, slug) {
218
+ const raws = splitMarkdown(markdown);
219
+ const segments = [];
220
+ let meta;
221
+ let typedBlockCount = 0;
222
+ for (const r of raws) {
223
+ if (r.kind === "markdown") {
224
+ segments.push({ kind: "markdown", text: r.text, line: r.line });
225
+ continue;
226
+ }
227
+ typedBlockCount += 1;
228
+ const parsed = parseBlockBody(r.raw);
229
+ const id = parsed.ok ? extractId(parsed.data) : void 0;
230
+ const seg = {
231
+ kind: r.kind,
232
+ raw: r.raw,
233
+ line: r.line,
234
+ data: parsed.ok ? parsed.data : void 0,
235
+ ...id !== void 0 ? { id } : {},
236
+ ...parsed.ok ? {} : {
237
+ parseError: parsed.message,
238
+ ...parsed.line !== void 0 ? { parseErrorLine: parsed.line } : {},
239
+ ...parsed.column !== void 0 ? { parseErrorColumn: parsed.column } : {}
240
+ }
241
+ };
242
+ segments.push(seg);
243
+ if (r.kind === "meta" && meta === void 0 && typedBlockCount === 1 && parsed.ok) {
244
+ meta = extractMeta(parsed.data);
245
+ }
246
+ }
247
+ const suspectFences = detectSuspectFences(markdown);
248
+ return {
249
+ slug,
250
+ segments,
251
+ ...meta !== void 0 ? { meta } : {},
252
+ ...suspectFences.length > 0 ? { suspectFences } : {}
253
+ };
254
+ }
255
+ var metaSchema = z.object({
256
+ title: z.string().optional(),
257
+ subtitle: z.string().optional(),
258
+ tag: z.string().optional()
259
+ }).strict();
260
+ var calloutSchema = z.object({
261
+ tone: z.enum(["note", "tip", "warn", "danger"]).optional(),
262
+ title: z.string().optional(),
263
+ body: z.string().optional()
264
+ }).strict();
265
+ var tableColumnSchema = z.union([
266
+ z.string(),
267
+ z.object({
268
+ label: z.string(),
269
+ align: z.enum(["l", "c", "r"]).optional(),
270
+ highlight: z.boolean().optional()
271
+ }).strict()
272
+ ]);
273
+ var tableCellSchema = z.union([
274
+ z.string(),
275
+ z.number(),
276
+ z.object({
277
+ v: z.union([z.string(), z.number()]),
278
+ tone: z.enum(["pos", "neg", "warn", "muted"]).optional(),
279
+ lead: z.boolean().optional(),
280
+ highlight: z.boolean().optional()
281
+ }).strict()
282
+ ]);
283
+ var tableSchema = z.object({
284
+ title: z.string().optional(),
285
+ description: z.string().optional(),
286
+ columns: z.array(tableColumnSchema).optional(),
287
+ rows: z.array(z.array(tableCellSchema)).optional(),
288
+ note: z.string().optional()
289
+ }).strict();
290
+ var sequenceActorSchema = z.object({
291
+ id: z.string(),
292
+ name: z.string(),
293
+ sub: z.string().optional(),
294
+ external: z.boolean().optional()
295
+ }).strict();
296
+ var sequenceMessageSchema = z.object({
297
+ from: z.string(),
298
+ to: z.string(),
299
+ label: z.string().optional(),
300
+ kind: z.enum(["sync", "response", "async", "error", "note"]).optional(),
301
+ summary: z.string().optional(),
302
+ code: z.string().optional(),
303
+ note: z.string().optional()
304
+ }).strict();
305
+ var sequenceEndpointSchema = z.object({
306
+ method: z.enum(["GET", "POST", "PUT", "PATCH", "DELETE"]),
307
+ path: z.string(),
308
+ status: z.string().optional()
309
+ }).strict();
310
+ var sequenceFootSchema = z.object({
311
+ label: z.string(),
312
+ value: z.string()
313
+ }).strict();
314
+ var sequenceSchema = z.object({
315
+ title: z.string().optional(),
316
+ description: z.string().optional(),
317
+ lede: z.string().optional(),
318
+ endpoint: sequenceEndpointSchema.optional(),
319
+ actors: z.array(sequenceActorSchema).optional(),
320
+ messages: z.array(sequenceMessageSchema).optional(),
321
+ foot: z.array(sequenceFootSchema).optional()
322
+ }).strict();
323
+ var erdColumnSchema = z.object({
324
+ name: z.string(),
325
+ type: z.string().optional(),
326
+ pk: z.boolean().optional(),
327
+ fk: z.boolean().optional()
328
+ }).strict();
329
+ var erdEntitySchema = z.object({
330
+ name: z.string(),
331
+ columns: z.array(erdColumnSchema).optional()
332
+ }).strict();
333
+ var erdRelationSchema = z.object({
334
+ from: z.string(),
335
+ to: z.string(),
336
+ label: z.string().optional(),
337
+ card: z.enum(["1:1", "1:N", "N:M"]).optional()
338
+ }).strict();
339
+ var erdSchema = z.object({
340
+ title: z.string().optional(),
341
+ description: z.string().optional(),
342
+ entities: z.array(erdEntitySchema).optional(),
343
+ relations: z.array(erdRelationSchema).optional()
344
+ }).strict();
345
+ var criterionSchema = z.object({
346
+ given: z.string().optional(),
347
+ when: z.string().optional(),
348
+ then: z.string().optional()
349
+ }).strict();
350
+ var linkSchema = z.object({
351
+ ref: z.string().optional(),
352
+ mode: z.string().optional(),
353
+ label: z.string().optional()
354
+ }).strict();
355
+ var userstorySchema = z.object({
356
+ role: z.string().optional(),
357
+ want: z.string().optional(),
358
+ soThat: z.string().optional(),
359
+ priority: z.string().optional(),
360
+ points: z.number().optional(),
361
+ criteria: z.array(criterionSchema).optional(),
362
+ links: z.array(linkSchema).optional()
363
+ }).strict();
364
+ var timelineItemSchema = z.object({
365
+ label: z.string(),
366
+ date: z.string().optional(),
367
+ desc: z.string().optional(),
368
+ status: z.enum(["done", "current", "next", "future"]).optional()
369
+ }).strict();
370
+ var timelineSchema = z.object({
371
+ title: z.string().optional(),
372
+ description: z.string().optional(),
373
+ items: z.array(timelineItemSchema).optional()
374
+ }).strict();
375
+ var kanbanCardSchema = z.object({
376
+ title: z.string(),
377
+ tag: z.string().optional()
378
+ }).strict();
379
+ var kanbanColumnSchema = z.object({
380
+ label: z.string(),
381
+ cards: z.array(kanbanCardSchema).optional()
382
+ }).strict();
383
+ var kanbanSchema = z.object({
384
+ title: z.string().optional(),
385
+ description: z.string().optional(),
386
+ columns: z.array(kanbanColumnSchema).optional()
387
+ }).strict();
388
+ var trackerItemSchema = z.object({
389
+ task: z.string(),
390
+ status: z.enum(["todo", "doing", "done", "blocked"]).optional(),
391
+ priority: z.enum(["high", "med", "low"]).optional(),
392
+ owner: z.string().optional(),
393
+ due: z.string().optional()
394
+ }).strict();
395
+ var trackerSchema = z.object({
396
+ title: z.string().optional(),
397
+ description: z.string().optional(),
398
+ items: z.array(trackerItemSchema).optional()
399
+ }).strict();
400
+ var proseBlockSchema = z.object({
401
+ type: z.enum(["h", "p", "ul", "ol", "quote"]).optional(),
402
+ text: z.string().optional(),
403
+ items: z.array(z.string()).optional()
404
+ }).strict();
405
+ var proseSchema = z.object({
406
+ title: z.string().optional(),
407
+ description: z.string().optional(),
408
+ lede: z.string().optional(),
409
+ blocks: z.array(proseBlockSchema).optional()
410
+ }).strict();
411
+ var glossaryTermSchema = z.object({ term: z.string(), def: z.string() }).strict();
412
+ var glossarySchema = z.object({
413
+ title: z.string().optional(),
414
+ description: z.string().optional(),
415
+ lede: z.string().optional(),
416
+ terms: z.array(glossaryTermSchema).optional()
417
+ }).strict();
418
+ var prosconsSchema = z.object({
419
+ title: z.string().optional(),
420
+ description: z.string().optional(),
421
+ lede: z.string().optional(),
422
+ prosLabel: z.string().optional(),
423
+ consLabel: z.string().optional(),
424
+ pros: z.array(z.string()).optional(),
425
+ cons: z.array(z.string()).optional()
426
+ }).strict();
427
+ var cvtPanelSchema = z.object({
428
+ label: z.string().optional(),
429
+ items: z.array(z.string()).optional()
430
+ }).strict();
431
+ var cvtSchema = z.object({
432
+ title: z.string().optional(),
433
+ description: z.string().optional(),
434
+ lede: z.string().optional(),
435
+ current: cvtPanelSchema.optional(),
436
+ target: cvtPanelSchema.optional(),
437
+ note: z.string().optional()
438
+ }).strict();
439
+ var statSchema = z.object({
440
+ value: z.union([z.string(), z.number()]),
441
+ label: z.string(),
442
+ delta: z.string().optional(),
443
+ trend: z.enum(["up", "down", "flat"]).optional(),
444
+ accent: z.string().optional()
445
+ }).strict();
446
+ var statsSchema = z.object({
447
+ title: z.string().optional(),
448
+ description: z.string().optional(),
449
+ lede: z.string().optional(),
450
+ stats: z.array(statSchema).optional()
451
+ }).strict();
452
+ var codeEntrySchema = z.object({
453
+ title: z.string().optional(),
454
+ lang: z.string().optional(),
455
+ code: z.string()
456
+ }).strict();
457
+ var codeSchema = z.object({
458
+ title: z.string().optional(),
459
+ description: z.string().optional(),
460
+ lede: z.string().optional(),
461
+ blocks: z.array(codeEntrySchema).optional()
462
+ }).strict();
463
+ var agendaItemSchema = z.object({
464
+ time: z.string().optional(),
465
+ duration: z.string().optional(),
466
+ title: z.string(),
467
+ owner: z.string().optional(),
468
+ desc: z.string().optional()
469
+ }).strict();
470
+ var agendaSchema = z.object({
471
+ title: z.string().optional(),
472
+ description: z.string().optional(),
473
+ lede: z.string().optional(),
474
+ items: z.array(agendaItemSchema).optional()
475
+ }).strict();
476
+ var treeNodeSchema = z.object({
477
+ id: z.string(),
478
+ parent: z.string().optional(),
479
+ label: z.string(),
480
+ note: z.string().optional()
481
+ }).strict();
482
+ var treeSchema = z.object({
483
+ title: z.string().optional(),
484
+ description: z.string().optional(),
485
+ lede: z.string().optional(),
486
+ nodes: z.array(treeNodeSchema).optional()
487
+ }).strict();
488
+ var pyramidLevelSchema = z.object({ label: z.string(), desc: z.string().optional() }).strict();
489
+ var pyramidSchema = z.object({
490
+ title: z.string().optional(),
491
+ description: z.string().optional(),
492
+ lede: z.string().optional(),
493
+ levels: z.array(pyramidLevelSchema).optional()
494
+ }).strict();
495
+ var funnelStageSchema = z.object({ label: z.string(), value: z.union([z.string(), z.number()]) }).strict();
496
+ var funnelSchema = z.object({
497
+ title: z.string().optional(),
498
+ description: z.string().optional(),
499
+ lede: z.string().optional(),
500
+ stages: z.array(funnelStageSchema).optional()
501
+ }).strict();
502
+ var flowNodeSchema = z.object({
503
+ id: z.string(),
504
+ col: z.number(),
505
+ row: z.number(),
506
+ w: z.number().optional(),
507
+ label: z.string(),
508
+ kind: z.enum(["start", "end", "decision", "process"]).optional()
509
+ }).strict();
510
+ var flowEdgeSchema = z.object({
511
+ from: z.string(),
512
+ to: z.string(),
513
+ label: z.string().optional(),
514
+ kind: z.enum(["error"]).optional()
515
+ }).strict();
516
+ var flowSchema = z.object({
517
+ title: z.string().optional(),
518
+ description: z.string().optional(),
519
+ lede: z.string().optional(),
520
+ nodes: z.array(flowNodeSchema).optional(),
521
+ edges: z.array(flowEdgeSchema).optional()
522
+ }).strict();
523
+ var stateNodeSchema = z.object({
524
+ id: z.string(),
525
+ col: z.number(),
526
+ row: z.number(),
527
+ name: z.string().optional(),
528
+ kind: z.enum(["start", "terminal", "active", "wait"]).optional()
529
+ }).strict();
530
+ var stateTransitionSchema = z.object({
531
+ from: z.string(),
532
+ to: z.string(),
533
+ event: z.string(),
534
+ guard: z.string().optional()
535
+ }).strict();
536
+ var stateSchema = z.object({
537
+ title: z.string().optional(),
538
+ description: z.string().optional(),
539
+ lede: z.string().optional(),
540
+ states: z.array(stateNodeSchema).optional(),
541
+ transitions: z.array(stateTransitionSchema).optional()
542
+ }).strict();
543
+ var dfdNodeSchema = z.object({
544
+ id: z.string(),
545
+ col: z.number(),
546
+ row: z.number(),
547
+ name: z.string(),
548
+ kind: z.enum(["process", "external", "store", "datastore"]).optional(),
549
+ num: z.union([z.string(), z.number()]).optional()
550
+ }).strict();
551
+ var dfdEdgeSchema = z.object({
552
+ from: z.string(),
553
+ to: z.string(),
554
+ label: z.string().optional()
555
+ }).strict();
556
+ var dfdSchema = z.object({
557
+ title: z.string().optional(),
558
+ description: z.string().optional(),
559
+ lede: z.string().optional(),
560
+ nodes: z.array(dfdNodeSchema).optional(),
561
+ edges: z.array(dfdEdgeSchema).optional()
562
+ }).strict();
563
+ var journeyStageSchema = z.object({ label: z.string() }).strict();
564
+ var journeyRowSchema = z.object({
565
+ label: z.string(),
566
+ cells: z.array(z.string()).optional()
567
+ }).strict();
568
+ var journeySchema = z.object({
569
+ title: z.string().optional(),
570
+ description: z.string().optional(),
571
+ lede: z.string().optional(),
572
+ stages: z.array(journeyStageSchema).optional(),
573
+ rows: z.array(journeyRowSchema).optional(),
574
+ emotion: z.array(z.number()).optional()
575
+ }).strict();
576
+ var ganttTaskSchema = z.object({
577
+ label: z.string(),
578
+ start: z.number().optional(),
579
+ span: z.number().optional(),
580
+ kind: z.enum(["done", "active", "current", "milestone"]).optional()
581
+ }).strict();
582
+ var ganttSchema = z.object({
583
+ title: z.string().optional(),
584
+ description: z.string().optional(),
585
+ lede: z.string().optional(),
586
+ periods: z.array(z.string()).optional(),
587
+ tasks: z.array(ganttTaskSchema).optional()
588
+ }).strict();
589
+ var graphNodeSchema = z.object({
590
+ id: z.string(),
591
+ col: z.number(),
592
+ row: z.number(),
593
+ label: z.string(),
594
+ group: z.number().optional()
595
+ }).strict();
596
+ var graphEdgeSchema = z.object({
597
+ from: z.string(),
598
+ to: z.string(),
599
+ label: z.string().optional(),
600
+ dir: z.enum(["directed", "undirected"]).optional()
601
+ }).strict();
602
+ var graphSchema = z.object({
603
+ title: z.string().optional(),
604
+ description: z.string().optional(),
605
+ lede: z.string().optional(),
606
+ nodes: z.array(graphNodeSchema).optional(),
607
+ edges: z.array(graphEdgeSchema).optional()
608
+ }).strict();
609
+ var quadrantAxisSchema = z.object({
610
+ label: z.string().optional(),
611
+ low: z.string().optional(),
612
+ high: z.string().optional()
613
+ }).strict();
614
+ var quadrantItemSchema = z.object({
615
+ x: z.number(),
616
+ y: z.number(),
617
+ label: z.string()
618
+ }).strict();
619
+ var quadrantSchema = z.object({
620
+ title: z.string().optional(),
621
+ description: z.string().optional(),
622
+ lede: z.string().optional(),
623
+ xAxis: quadrantAxisSchema.optional(),
624
+ yAxis: quadrantAxisSchema.optional(),
625
+ items: z.array(quadrantItemSchema).optional()
626
+ }).strict();
627
+ var swimlaneLaneSchema = z.object({ label: z.string() }).strict();
628
+ var swimlaneStepSchema = z.object({
629
+ id: z.string(),
630
+ col: z.number(),
631
+ lane: z.number(),
632
+ label: z.string(),
633
+ kind: z.enum(["action", "decision", "start", "end", "wait"]).optional()
634
+ }).strict();
635
+ var swimlaneLinkSchema = z.object({
636
+ from: z.string(),
637
+ to: z.string(),
638
+ label: z.string().optional()
639
+ }).strict();
640
+ var swimlaneSchema = z.object({
641
+ title: z.string().optional(),
642
+ description: z.string().optional(),
643
+ lede: z.string().optional(),
644
+ lanes: z.array(swimlaneLaneSchema).optional(),
645
+ steps: z.array(swimlaneStepSchema).optional(),
646
+ links: z.array(swimlaneLinkSchema).optional()
647
+ }).strict();
648
+ var c4NodeSchema = z.object({
649
+ id: z.string(),
650
+ col: z.number(),
651
+ row: z.number(),
652
+ w: z.number().optional(),
653
+ kind: z.enum(["person", "system", "external", "store", "container", "component"]),
654
+ family: z.string().optional(),
655
+ name: z.string(),
656
+ tech: z.string().optional(),
657
+ desc: z.string().optional()
658
+ }).strict();
659
+ var c4EdgeSchema = z.object({
660
+ from: z.string(),
661
+ to: z.string(),
662
+ label: z.string().optional(),
663
+ kind: z.enum(["solid", "dashed", "forbidden", "error"]).optional()
664
+ }).strict();
665
+ var c4BoundarySchema = z.object({ label: z.string() }).strict();
666
+ var c4Schema = z.object({
667
+ title: z.string().optional(),
668
+ description: z.string().optional(),
669
+ lede: z.string().optional(),
670
+ level: z.enum(["context", "container", "component"]).optional(),
671
+ boundary: c4BoundarySchema.optional(),
672
+ nodes: z.array(c4NodeSchema).optional(),
673
+ edges: z.array(c4EdgeSchema).optional()
674
+ }).strict();
675
+ var umlClassSchema = z.object({
676
+ id: z.string(),
677
+ col: z.number(),
678
+ row: z.number(),
679
+ name: z.string(),
680
+ stereotype: z.string().optional(),
681
+ attrs: z.array(z.string()).optional(),
682
+ methods: z.array(z.string()).optional()
683
+ }).strict();
684
+ var umlRelSchema = z.object({
685
+ from: z.string(),
686
+ to: z.string(),
687
+ label: z.string().optional(),
688
+ kind: z.enum([
689
+ "inheritance",
690
+ "extends",
691
+ "implementation",
692
+ "implements",
693
+ "composition",
694
+ "aggregation",
695
+ "dependency",
696
+ "association"
697
+ ]).optional()
698
+ }).strict();
699
+ var umlSchema = z.object({
700
+ title: z.string().optional(),
701
+ description: z.string().optional(),
702
+ lede: z.string().optional(),
703
+ classes: z.array(umlClassSchema).optional(),
704
+ rels: z.array(umlRelSchema).optional()
705
+ }).strict();
706
+ var meceNodeSchema = z.object({
707
+ id: z.string(),
708
+ parent: z.string().optional(),
709
+ label: z.string(),
710
+ note: z.string().optional()
711
+ }).strict();
712
+ var meceSchema = z.object({
713
+ title: z.string().optional(),
714
+ description: z.string().optional(),
715
+ lede: z.string().optional(),
716
+ nodes: z.array(meceNodeSchema).optional()
717
+ }).strict();
718
+ var ftNodeSchema = z.object({
719
+ id: z.string(),
720
+ parent: z.string().optional(),
721
+ name: z.string(),
722
+ kind: z.enum([
723
+ "root",
724
+ "layout",
725
+ "page",
726
+ "component",
727
+ "leaf",
728
+ "provider",
729
+ "context",
730
+ "hook",
731
+ "store",
732
+ "state"
733
+ ]).optional(),
734
+ note: z.string().optional()
735
+ }).strict();
736
+ var frontendSchema = z.object({
737
+ title: z.string().optional(),
738
+ description: z.string().optional(),
739
+ lede: z.string().optional(),
740
+ nodes: z.array(ftNodeSchema).optional()
741
+ }).strict();
742
+ var clusterClusterSchema = z.object({
743
+ id: z.string(),
744
+ label: z.string(),
745
+ kind: z.string().optional()
746
+ }).strict();
747
+ var clusterServiceSchema = z.object({
748
+ id: z.string(),
749
+ cluster: z.string(),
750
+ label: z.string(),
751
+ kind: z.string().optional(),
752
+ tech: z.string().optional(),
753
+ replicas: z.number().optional()
754
+ }).strict();
755
+ var clusterEdgeSchema = z.object({
756
+ from: z.string(),
757
+ to: z.string(),
758
+ label: z.string().optional(),
759
+ kind: z.enum(["solid", "dashed", "forbidden", "error"]).optional()
760
+ }).strict();
761
+ var clusterSchema = z.object({
762
+ title: z.string().optional(),
763
+ description: z.string().optional(),
764
+ lede: z.string().optional(),
765
+ clusters: z.array(clusterClusterSchema).optional(),
766
+ services: z.array(clusterServiceSchema).optional(),
767
+ edges: z.array(clusterEdgeSchema).optional()
768
+ }).strict();
769
+ var blockGraphGroupSchema = z.object({
770
+ id: z.string().optional(),
771
+ col: z.number(),
772
+ row: z.number(),
773
+ cols: z.number().optional(),
774
+ rows: z.number().optional(),
775
+ label: z.string(),
776
+ color: z.string().optional()
777
+ }).strict();
778
+ var blockGraphLayerSchema = z.object({ label: z.string() }).strict();
779
+ var blockGraphNodeSchema = z.object({
780
+ id: z.string(),
781
+ col: z.number().optional(),
782
+ row: z.number().optional(),
783
+ layer: z.number().optional(),
784
+ w: z.number().optional(),
785
+ kind: z.string().optional(),
786
+ name: z.string(),
787
+ tech: z.string().optional()
788
+ }).strict();
789
+ var blockGraphEdgeSchema = z.object({
790
+ from: z.string(),
791
+ to: z.string(),
792
+ label: z.string().optional(),
793
+ kind: z.enum(["solid", "dashed", "forbidden", "error"]).optional()
794
+ }).strict();
795
+ var blockGraphSchema = z.object({
796
+ title: z.string().optional(),
797
+ description: z.string().optional(),
798
+ lede: z.string().optional(),
799
+ systemLabel: z.string().optional(),
800
+ layers: z.array(blockGraphLayerSchema).optional(),
801
+ groups: z.array(blockGraphGroupSchema).optional(),
802
+ nodes: z.array(blockGraphNodeSchema).optional(),
803
+ edges: z.array(blockGraphEdgeSchema).optional()
804
+ }).strict();
805
+ var feLogicNodeSchema = z.object({
806
+ id: z.string(),
807
+ col: z.number(),
808
+ row: z.number(),
809
+ w: z.number().optional(),
810
+ kind: z.string().optional(),
811
+ name: z.string(),
812
+ note: z.string().optional()
813
+ }).strict();
814
+ var feLogicEdgeSchema = z.object({
815
+ from: z.string(),
816
+ to: z.string(),
817
+ label: z.string().optional(),
818
+ kind: z.enum(["uses", "implements", "reads", "egress", "https", "api", "dashed", "async"]).optional()
819
+ }).strict();
820
+ var felogicSchema = z.object({
821
+ title: z.string().optional(),
822
+ description: z.string().optional(),
823
+ lede: z.string().optional(),
824
+ groups: z.array(blockGraphGroupSchema).optional(),
825
+ nodes: z.array(feLogicNodeSchema).optional(),
826
+ edges: z.array(feLogicEdgeSchema).optional()
827
+ }).strict();
828
+ var dagSchema = flowSchema;
829
+ var wireframeElementSchema = z.object({
830
+ type: z.enum([
831
+ "header",
832
+ "subheader",
833
+ "text",
834
+ "button",
835
+ "input",
836
+ "search",
837
+ "image",
838
+ "avatar",
839
+ "card",
840
+ "list",
841
+ "nav",
842
+ "tabs",
843
+ "divider",
844
+ "badge",
845
+ "toggle",
846
+ "spacer"
847
+ ]).optional(),
848
+ label: z.string().optional(),
849
+ rows: z.number().optional(),
850
+ align: z.enum(["l", "c", "r"]).optional(),
851
+ tone: z.enum(["accent", "muted", "danger"]).optional()
852
+ }).strict();
853
+ var wireframeScreenSchema = z.object({
854
+ device: z.enum(["desktop", "browser", "phone"]).optional(),
855
+ title: z.string().optional(),
856
+ url: z.string().optional(),
857
+ label: z.string().optional(),
858
+ elements: z.array(wireframeElementSchema).optional()
859
+ }).strict();
860
+ var wireframeSchema = z.object({
861
+ title: z.string().optional(),
862
+ description: z.string().optional(),
863
+ lede: z.string().optional(),
864
+ screens: z.array(wireframeScreenSchema).optional()
865
+ }).strict();
866
+ var blockSchemas = {
867
+ meta: metaSchema,
868
+ callout: calloutSchema,
869
+ table: tableSchema,
870
+ sequence: sequenceSchema,
871
+ erd: erdSchema,
872
+ userstory: userstorySchema,
873
+ timeline: timelineSchema,
874
+ kanban: kanbanSchema,
875
+ tracker: trackerSchema,
876
+ prose: proseSchema,
877
+ glossary: glossarySchema,
878
+ proscons: prosconsSchema,
879
+ cvt: cvtSchema,
880
+ stats: statsSchema,
881
+ code: codeSchema,
882
+ agenda: agendaSchema,
883
+ tree: treeSchema,
884
+ pyramid: pyramidSchema,
885
+ funnel: funnelSchema,
886
+ flow: flowSchema,
887
+ state: stateSchema,
888
+ dfd: dfdSchema,
889
+ journey: journeySchema,
890
+ gantt: ganttSchema,
891
+ graph: graphSchema,
892
+ quadrant: quadrantSchema,
893
+ swimlane: swimlaneSchema,
894
+ c4: c4Schema,
895
+ uml: umlSchema,
896
+ mece: meceSchema,
897
+ frontend: frontendSchema,
898
+ cluster: clusterSchema,
899
+ block: blockGraphSchema,
900
+ infra: blockGraphSchema,
901
+ event: blockGraphSchema,
902
+ ddd: blockGraphSchema,
903
+ network: blockGraphSchema,
904
+ felogic: felogicSchema,
905
+ belogic: felogicSchema,
906
+ dag: dagSchema,
907
+ wireframe: wireframeSchema
908
+ };
909
+
910
+ // src/blocks/registry.ts
911
+ var blockRegistry = {
912
+ meta: { type: "meta", schema: blockSchemas.meta },
913
+ callout: { type: "callout", schema: blockSchemas.callout },
914
+ table: { type: "table", schema: blockSchemas.table },
915
+ sequence: { type: "sequence", schema: blockSchemas.sequence },
916
+ erd: { type: "erd", schema: blockSchemas.erd },
917
+ userstory: {
918
+ type: "userstory",
919
+ schema: blockSchemas.userstory,
920
+ extractRefs: (data) => {
921
+ const links = data.links;
922
+ if (!Array.isArray(links)) return [];
923
+ const refs = [];
924
+ for (const link of links) {
925
+ if (typeof link.ref === "string" && link.ref.length > 0) refs.push(link.ref);
926
+ }
927
+ return refs;
928
+ }
929
+ },
930
+ timeline: { type: "timeline", schema: blockSchemas.timeline },
931
+ kanban: { type: "kanban", schema: blockSchemas.kanban },
932
+ tracker: { type: "tracker", schema: blockSchemas.tracker },
933
+ prose: { type: "prose", schema: blockSchemas.prose },
934
+ glossary: { type: "glossary", schema: blockSchemas.glossary },
935
+ proscons: { type: "proscons", schema: blockSchemas.proscons },
936
+ cvt: { type: "cvt", schema: blockSchemas.cvt },
937
+ stats: { type: "stats", schema: blockSchemas.stats },
938
+ code: { type: "code", schema: blockSchemas.code },
939
+ agenda: { type: "agenda", schema: blockSchemas.agenda },
940
+ tree: { type: "tree", schema: blockSchemas.tree },
941
+ pyramid: { type: "pyramid", schema: blockSchemas.pyramid },
942
+ funnel: { type: "funnel", schema: blockSchemas.funnel },
943
+ flow: { type: "flow", schema: blockSchemas.flow },
944
+ state: { type: "state", schema: blockSchemas.state },
945
+ dfd: { type: "dfd", schema: blockSchemas.dfd },
946
+ journey: { type: "journey", schema: blockSchemas.journey },
947
+ gantt: { type: "gantt", schema: blockSchemas.gantt },
948
+ graph: { type: "graph", schema: blockSchemas.graph },
949
+ quadrant: { type: "quadrant", schema: blockSchemas.quadrant },
950
+ swimlane: { type: "swimlane", schema: blockSchemas.swimlane },
951
+ c4: { type: "c4", schema: blockSchemas.c4 },
952
+ uml: { type: "uml", schema: blockSchemas.uml },
953
+ mece: { type: "mece", schema: blockSchemas.mece },
954
+ frontend: { type: "frontend", schema: blockSchemas.frontend },
955
+ cluster: { type: "cluster", schema: blockSchemas.cluster },
956
+ block: { type: "block", schema: blockSchemas.block },
957
+ infra: { type: "infra", schema: blockSchemas.infra },
958
+ event: { type: "event", schema: blockSchemas.event },
959
+ ddd: { type: "ddd", schema: blockSchemas.ddd },
960
+ network: { type: "network", schema: blockSchemas.network },
961
+ felogic: { type: "felogic", schema: blockSchemas.felogic },
962
+ belogic: { type: "belogic", schema: blockSchemas.belogic },
963
+ dag: { type: "dag", schema: blockSchemas.dag },
964
+ wireframe: { type: "wireframe", schema: blockSchemas.wireframe }
965
+ };
966
+
967
+ // src/validate.ts
968
+ function unwrap(schema) {
969
+ let cur = schema;
970
+ for (; ; ) {
971
+ if (cur instanceof z.ZodOptional || cur instanceof z.ZodNullable) cur = cur.unwrap();
972
+ else if (cur instanceof z.ZodDefault) cur = cur._def.innerType;
973
+ else return cur;
974
+ }
975
+ }
976
+ function schemaAt(kind, path) {
977
+ let cur = blockSchemas[kind];
978
+ for (const seg of path) {
979
+ cur = unwrap(cur);
980
+ if (typeof seg === "number") {
981
+ if (!(cur instanceof z.ZodArray)) return void 0;
982
+ cur = cur.element;
983
+ } else {
984
+ if (!(cur instanceof z.ZodObject)) return void 0;
985
+ const next = cur.shape[seg];
986
+ if (next === void 0) return void 0;
987
+ cur = next;
988
+ }
989
+ }
990
+ return unwrap(cur);
991
+ }
992
+ function fieldNamesAt(kind, path) {
993
+ const schema = schemaAt(kind, path) ?? blockSchemas[kind];
994
+ return schema instanceof z.ZodObject ? Object.keys(schema.shape) : [];
995
+ }
996
+ function renderIssue(kind, issue) {
997
+ const path = issue.path.join(".");
998
+ const at = path.length > 0 ? `${path}: ` : "";
999
+ if (issue.code === "unrecognized_keys") {
1000
+ const bad = issue.keys[0] ?? "";
1001
+ const valid = fieldNamesAt(kind, issue.path);
1002
+ const suggestions = closest(bad, valid, 3);
1003
+ const did = suggestions.length > 0 ? `Did you mean \`${suggestions[0]}\`? ` : "";
1004
+ return {
1005
+ message: `${kind}: unknown field${issue.keys.length > 1 ? "s" : ""} ${issue.keys.map((k) => `'${k}'`).join(", ")}`,
1006
+ hint: `${did}Valid fields: ${valid.join(", ")}.`,
1007
+ ...suggestions.length > 0 ? { suggestions } : {}
1008
+ };
1009
+ }
1010
+ if (issue.code === "invalid_enum_value") {
1011
+ const options = issue.options.map(String);
1012
+ const received = String(issue.received);
1013
+ const suggestions = closest(received, options, 3);
1014
+ const did = suggestions.length > 0 ? ` Did you mean \`${suggestions[0]}\`?` : "";
1015
+ return {
1016
+ message: `${kind}: ${at}invalid value "${received}"`,
1017
+ hint: `Use one of: ${options.join(" | ")}.${did}`,
1018
+ ...suggestions.length > 0 ? { suggestions } : {}
1019
+ };
1020
+ }
1021
+ if (issue.code === "invalid_type") {
1022
+ if (issue.expected === "string" && issue.received === "number") {
1023
+ return {
1024
+ message: `${kind}: ${at}expected a string but got a number`,
1025
+ hint: 'Quote the value to keep it a string (e.g. tech: "16").'
1026
+ };
1027
+ }
1028
+ return {
1029
+ message: `${kind}: ${at}expected ${issue.expected}, got ${issue.received}`
1030
+ };
1031
+ }
1032
+ return { message: `${kind}: ${at}${issue.message}` };
1033
+ }
1034
+ function validateDocument(doc, file) {
1035
+ const diagnostics = [];
1036
+ for (const sf of doc.suspectFences ?? []) {
1037
+ diagnostics.push({
1038
+ file,
1039
+ line: sf.line,
1040
+ column: 1,
1041
+ level: "warn",
1042
+ code: "W_SUSPECT_BLOCK",
1043
+ message: `Unknown block type "${sf.tag}" \u2014 rendered as plain text`,
1044
+ hint: `Did you mean \`\`\`${sf.suggestion}? Use one of the documented block types.`,
1045
+ value: sf.tag,
1046
+ suggestions: [sf.suggestion]
1047
+ });
1048
+ }
1049
+ for (const seg of doc.segments) {
1050
+ if (seg.kind === "markdown") continue;
1051
+ if (seg.parseError !== void 0) {
1052
+ const line = seg.parseErrorLine !== void 0 ? seg.line + seg.parseErrorLine : seg.line;
1053
+ diagnostics.push({
1054
+ file,
1055
+ line,
1056
+ ...seg.parseErrorColumn !== void 0 ? { column: seg.parseErrorColumn } : {},
1057
+ level: "error",
1058
+ code: "E_PARSE_YAML",
1059
+ message: `${seg.kind}: ${seg.parseError}`,
1060
+ hint: "Often an unquoted special character (, : # | & *). Wrap the value in quotes."
1061
+ });
1062
+ continue;
1063
+ }
1064
+ if (seg.data === null || seg.data === void 0) {
1065
+ diagnostics.push({
1066
+ file,
1067
+ line: seg.line,
1068
+ level: "warn",
1069
+ code: "W_EMPTY_BLOCK",
1070
+ message: `${seg.kind}: empty body`,
1071
+ hint: "Add the fields this block needs, or remove the block."
1072
+ });
1073
+ continue;
1074
+ }
1075
+ const def = blockRegistry[seg.kind];
1076
+ const dataForSchema = typeof seg.data === "object" && !Array.isArray(seg.data) && "id" in seg.data ? Object.fromEntries(
1077
+ Object.entries(seg.data).filter(([k]) => k !== "id")
1078
+ ) : seg.data;
1079
+ const result = def.schema.safeParse(dataForSchema);
1080
+ if (!result.success) {
1081
+ for (const issue of result.error.issues) {
1082
+ const rendered = renderIssue(seg.kind, issue);
1083
+ const loc = locateYamlPath(seg.raw, issue.path) ?? (issue.path.length > 0 ? locateYamlPath(seg.raw, issue.path.slice(0, -1)) : void 0);
1084
+ const position = loc !== void 0 ? {
1085
+ line: seg.line + loc.line,
1086
+ column: loc.column,
1087
+ ...loc.endColumn !== void 0 ? { endColumn: loc.endColumn } : {}
1088
+ } : { line: seg.line };
1089
+ diagnostics.push({
1090
+ file,
1091
+ ...position,
1092
+ level: "error",
1093
+ code: "E_SCHEMA",
1094
+ message: rendered.message,
1095
+ ...rendered.hint !== void 0 ? { hint: rendered.hint } : {},
1096
+ ...rendered.suggestions !== void 0 ? { suggestions: rendered.suggestions } : {}
1097
+ });
1098
+ }
1099
+ }
1100
+ }
1101
+ return diagnostics;
1102
+ }
1103
+
1104
+ // src/resolve.ts
1105
+ var REF_RE = /^(?:([\w/.-]+))?#([\w.-]+)$/;
1106
+ function callExtractRefs(kind, data) {
1107
+ const def = blockRegistry[kind];
1108
+ return def.extractRefs ? def.extractRefs(data) : [];
1109
+ }
1110
+ function resolveRefs(inputs) {
1111
+ const diagnostics = [];
1112
+ const nodes = /* @__PURE__ */ new Map();
1113
+ for (const { doc, file } of inputs) {
1114
+ for (const seg of doc.segments) {
1115
+ if (seg.kind === "markdown" || seg.id === void 0) continue;
1116
+ const existing = nodes.get(seg.id);
1117
+ if (existing) {
1118
+ diagnostics.push({
1119
+ file,
1120
+ line: seg.line,
1121
+ level: "error",
1122
+ code: "E_DUP_ID",
1123
+ message: `Duplicate id "${seg.id}" (first defined in ${existing.file}:${existing.line})`,
1124
+ value: seg.id
1125
+ });
1126
+ continue;
1127
+ }
1128
+ nodes.set(seg.id, { doc: doc.slug, block: seg, file, line: seg.line });
1129
+ }
1130
+ }
1131
+ const edges = [];
1132
+ for (const { doc, file } of inputs) {
1133
+ for (const seg of doc.segments) {
1134
+ if (seg.kind === "markdown" || seg.parseError !== void 0 || seg.data === void 0) continue;
1135
+ const typedSeg = seg;
1136
+ const refs = callExtractRefs(typedSeg.kind, typedSeg.data);
1137
+ for (const ref of refs) {
1138
+ const match = REF_RE.exec(ref);
1139
+ if (!match) {
1140
+ diagnostics.push({
1141
+ file,
1142
+ line: seg.line,
1143
+ level: "error",
1144
+ code: "E_BAD_REF_FORMAT",
1145
+ message: `Invalid reference format: "${ref}" (expected doc#id or #id)`,
1146
+ value: ref
1147
+ });
1148
+ continue;
1149
+ }
1150
+ const targetDoc = match[1] ?? doc.slug;
1151
+ const targetId = match[2];
1152
+ if (targetId === void 0) continue;
1153
+ const node = nodes.get(targetId);
1154
+ if (!node || node.doc !== targetDoc) {
1155
+ diagnostics.push({
1156
+ file,
1157
+ line: seg.line,
1158
+ level: "error",
1159
+ code: "E_DANGLING_REF",
1160
+ message: `Dangling reference: "${ref}" (target not found)`,
1161
+ value: ref
1162
+ });
1163
+ continue;
1164
+ }
1165
+ const from = seg.id !== void 0 ? `${doc.slug}#${seg.id}` : `${doc.slug}@${seg.line}`;
1166
+ edges.push({ from, to: `${targetDoc}#${targetId}` });
1167
+ }
1168
+ }
1169
+ }
1170
+ const publicNodes = /* @__PURE__ */ new Map();
1171
+ for (const [id, { doc, block }] of nodes) publicNodes.set(id, { doc, block });
1172
+ return { graph: { nodes: publicNodes, edges }, diagnostics };
1173
+ }
1174
+
1175
+ // src/index.ts
1176
+ var version = "0.0.0";
1177
+
1178
+ export { BLOCK_TYPES, BLOCK_TYPE_SET, agendaSchema, assertNever, blockGraphSchema, blockRegistry, blockSchemas, c4Schema, calloutSchema, closest, clusterSchema, codeSchema, cvtSchema, dagSchema, dfdSchema, erdSchema, felogicSchema, flowSchema, frontendSchema, funnelSchema, ganttSchema, glossarySchema, graphSchema, helpUrl, journeySchema, kanbanSchema, levenshtein, locateYamlPath, meceSchema, metaSchema, parseBlockBody, parseDocument2 as parseDocument, prosconsSchema, proseSchema, pyramidSchema, quadrantSchema, resolveRefs, sequenceSchema, splitMarkdown, stateSchema, statsSchema, swimlaneSchema, tableSchema, timelineSchema, trackerSchema, treeSchema, umlSchema, userstorySchema, validateDocument, version };
1179
+ //# sourceMappingURL=index.js.map
1180
+ //# sourceMappingURL=index.js.map