@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/LICENSE +21 -0
- package/README.md +41 -0
- package/dist/index.d.ts +5566 -0
- package/dist/index.js +1180 -0
- package/dist/index.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/diagnostics.ts","../src/suggest.ts","../src/splitter.ts","../src/yaml.ts","../src/parser.ts","../src/blocks/schemas.ts","../src/blocks/registry.ts","../src/validate.ts","../src/resolve.ts","../src/index.ts"],"names":["yamlParse","parseDocument","z"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Core domain types: block types, segments, documents.\n *\n * These types describe an Avodado document as an in-memory model — a slug, an\n * optional meta header, and an ordered list of segments (prose or typed blocks).\n */\n\n/** The canonical, ordered list of supported block types. */\nexport const BLOCK_TYPES = [\n 'meta',\n 'callout',\n 'table',\n 'sequence',\n 'erd',\n 'userstory',\n 'timeline',\n 'kanban',\n 'tracker',\n // Phase 2 — easy HTML-only blocks (plus pyramid/funnel which are simple SVG)\n 'prose',\n 'glossary',\n 'proscons',\n 'cvt',\n 'stats',\n 'code',\n 'agenda',\n 'tree',\n 'pyramid',\n 'funnel',\n // Phase 3 — medium SVG blocks\n 'flow',\n 'state',\n 'dfd',\n 'journey',\n 'gantt',\n 'graph',\n 'quadrant',\n 'swimlane',\n // Phase 4 — complex SVG blocks\n 'c4',\n 'uml',\n 'mece',\n 'frontend',\n 'cluster',\n // Phase 5 — layout engines (block / infra) + felogic + aliases\n 'block',\n 'infra',\n 'felogic',\n 'belogic',\n 'event',\n 'ddd',\n 'network',\n 'dag',\n // Phase 6 — UI mockups\n 'wireframe',\n] as const;\n\n/** A block type literal. Adding a new type here is a one-place change. */\nexport type BlockType = (typeof BLOCK_TYPES)[number];\n\n/** Runtime set for fast membership checks during parsing. */\nexport const BLOCK_TYPE_SET: ReadonlySet<string> = new Set(BLOCK_TYPES);\n\n/**\n * A run of plain Markdown prose between typed blocks.\n *\n * Note: the discriminator is `'markdown'` (not `'prose'`) because `prose` is\n * also a typed block type. Keeping them distinct lets TypeScript narrow the\n * {@link Segment} union cleanly.\n */\nexport interface ProseSegment {\n readonly kind: 'markdown';\n /** Raw Markdown text (joined newlines, no trailing newline normalization). */\n readonly text: string;\n /** 1-based line number of the first line of this prose run. */\n readonly line: number;\n}\n\n/**\n * A typed fenced block. `data` is the parsed YAML/JSON body (or `undefined` if\n * the body failed to parse — `parseError` carries the message in that case).\n *\n * The union is keyed by `kind` so consumers can narrow on it.\n */\nexport type TypedSegment = {\n [K in BlockType]: {\n readonly kind: K;\n /** Raw block body text (between the fences, no trailing newline). */\n readonly raw: string;\n /** Parsed YAML/JSON data, or `undefined` if `parseError` is set. */\n readonly data: unknown;\n /** 1-based line number of the opening fence. */\n readonly line: number;\n /** Optional human-readable id slug, extracted from the body's `id` field. */\n readonly id?: string;\n /** YAML parse error message, if the body failed to parse. */\n readonly parseError?: string;\n /** 1-based parse-error line within the block body, if known. */\n readonly parseErrorLine?: number;\n /** 1-based parse-error column within the block body, if known. */\n readonly parseErrorColumn?: number;\n };\n}[BlockType];\n\n/** A segment is either a prose run or a typed block. */\nexport type Segment = ProseSegment | TypedSegment;\n\n/** Document-level meta extracted from a leading `meta` block. */\nexport interface MetaData {\n readonly title?: string;\n readonly subtitle?: string;\n readonly tag?: string;\n}\n\n/** A fence whose tag looks like a typo of a real block type. */\nexport interface SuspectFence {\n /** 1-based line of the opening fence. */\n readonly line: number;\n /** The tag the author wrote (not a known block type). */\n readonly tag: string;\n /** The closest real block type — a likely intended value. */\n readonly suggestion: BlockType;\n}\n\n/** A parsed Avodado document. */\nexport interface Document {\n /** Document slug, typically the path under the docs root without `.md`. */\n readonly slug: string;\n /** Document-level meta from a leading `meta` block, if present. */\n readonly meta?: MetaData;\n /** Ordered segments — prose and typed blocks, in source order. */\n readonly segments: readonly Segment[];\n /**\n * Fence tags that look like typos of real block types (e.g. ` ```sequnce `).\n * Surfaced as `W_SUSPECT_BLOCK` warnings by {@link validateDocument}.\n */\n readonly suspectFences?: readonly SuspectFence[];\n}\n","/**\n * Diagnostic taxonomy.\n *\n * Library functions return `Diagnostic[]` rather than throwing for expected\n * conditions (parse, validation, resolution). The CLI maps these to console\n * output and exit codes.\n */\n\n/** Severity level of a diagnostic. */\nexport type DiagnosticLevel = 'error' | 'warn';\n\n/** Stable diagnostic code — useful for CI filters and machine consumers. */\nexport type DiagnosticCode =\n | 'E_PARSE_YAML'\n | 'E_SCHEMA'\n | 'E_DUP_ID'\n | 'E_DANGLING_REF'\n | 'E_BAD_REF_FORMAT'\n | 'E_UNKNOWN_BLOCK'\n | 'W_EMPTY_BLOCK'\n | 'W_SUSPECT_BLOCK';\n\n/**\n * Uniform diagnostic shape.\n *\n * Positions are 1-based. `line`/`column` point at the start of the offending\n * token; `endLine`/`endColumn` bound it when known (for editor underlines).\n * `hint` is a one-line, actionable fix; `suggestions` are \"did you mean?\"\n * candidates a tool can offer as quick-fixes. All position/help fields are\n * optional so older consumers keep working.\n */\nexport interface Diagnostic {\n /** File path the diagnostic refers to. */\n readonly file: string;\n /** 1-based line number, if applicable. */\n readonly line?: number;\n /** 1-based column number, if applicable. */\n readonly column?: number;\n /** 1-based end line, if the offending span is known. */\n readonly endLine?: number;\n /** 1-based exclusive end column, if the offending span is known. */\n readonly endColumn?: number;\n readonly level: DiagnosticLevel;\n readonly code: DiagnosticCode;\n /** Human-readable message. */\n readonly message: string;\n /** Offending raw value, where useful (e.g. the bad ref string). */\n readonly value?: string;\n /** One-line actionable fix, shown beneath the message. */\n readonly hint?: string;\n /** \"Did you mean?\" candidates — a tool may offer these as quick-fixes. */\n readonly suggestions?: readonly string[];\n}\n\n/** Base URL for per-code error documentation. */\nconst ERRORS_BASE = 'https://avodado.dev/errors';\n\n/**\n * Returns the documentation URL for a diagnostic code.\n *\n * @param code - The diagnostic code.\n * @returns A stable help URL, e.g. `https://avodado.dev/errors/e_schema`.\n */\nexport function helpUrl(code: DiagnosticCode): string {\n return `${ERRORS_BASE}/${code.toLowerCase()}`;\n}\n\n/**\n * Exhaustiveness helper for `switch`/`if-else` chains over discriminated unions.\n * The compiler proves a branch is unreachable; calling this throws at runtime if\n * the proof fails.\n */\nexport function assertNever(x: never): never {\n throw new Error(`Unhandled case: ${JSON.stringify(x)}`);\n}\n","/**\n * \"Did you mean?\" suggestions — a tiny dependency-free fuzzy matcher used to\n * turn a typo'd block type, field name, or enum value into an actionable hint.\n */\n\n/**\n * Levenshtein edit distance between two strings (insert / delete / substitute,\n * cost 1 each). Iterative two-row implementation — O(a·b) time, O(b) space.\n *\n * @param a - First string.\n * @param b - Second string.\n * @returns The minimum number of single-character edits to turn `a` into `b`.\n */\nexport function levenshtein(a: string, b: string): number {\n if (a === b) return 0;\n if (a.length === 0) return b.length;\n if (b.length === 0) return a.length;\n\n let prev = new Array<number>(b.length + 1);\n let curr = new Array<number>(b.length + 1);\n for (let j = 0; j <= b.length; j++) prev[j] = j;\n\n for (let i = 1; i <= a.length; i++) {\n curr[0] = i;\n const ai = a.charCodeAt(i - 1);\n for (let j = 1; j <= b.length; j++) {\n const cost = ai === b.charCodeAt(j - 1) ? 0 : 1;\n // prev[j] = delete, curr[j-1] = insert, prev[j-1] = substitute\n const del = (prev[j] ?? 0) + 1;\n const ins = (curr[j - 1] ?? 0) + 1;\n const sub = (prev[j - 1] ?? 0) + cost;\n curr[j] = del < ins ? (del < sub ? del : sub) : ins < sub ? ins : sub;\n }\n [prev, curr] = [curr, prev];\n }\n return prev[b.length] ?? 0;\n}\n\n/**\n * Returns the candidates closest to `input`, nearest first, within\n * `maxDistance` edits. Case-insensitive. Empty when nothing is close enough —\n * so a wildly wrong value yields no (misleading) suggestion.\n *\n * @param input - The value the author wrote.\n * @param candidates - The set of valid values.\n * @param maxDistance - Maximum edit distance to consider a match (default 2).\n * @returns Up to 3 closest candidates, nearest first.\n *\n * @example\n * ```ts\n * closest('sequnce', ['sequence', 'state', 'erd']); // → ['sequence']\n * ```\n */\nexport function closest(\n input: string,\n candidates: readonly string[],\n maxDistance = 2,\n): string[] {\n const needle = input.toLowerCase();\n const scored: Array<{ value: string; dist: number }> = [];\n for (const c of candidates) {\n const dist = levenshtein(needle, c.toLowerCase());\n if (dist <= maxDistance) scored.push({ value: c, dist });\n }\n scored.sort((x, y) => x.dist - y.dist || x.value.localeCompare(y.value));\n return scored.slice(0, 3).map((s) => s.value);\n}\n","/**\n * Splits a Markdown source string into prose runs and typed fenced blocks.\n *\n * The splitter only recognises fences whose info-string is a known\n * {@link BlockType}. Other fenced code blocks (e.g. ```` ```ts ````) fall through\n * to prose and are rendered by the Markdown pipeline.\n */\n\nimport { BLOCK_TYPES, BLOCK_TYPE_SET, type BlockType, type SuspectFence } from './types.js';\nimport { closest } from './suggest.js';\n\nconst OPEN_FENCE_RE = /^```([A-Za-z][\\w-]*)\\s*$/;\nconst CLOSE_FENCE_RE = /^```\\s*$/;\n\n/**\n * A raw segment before YAML parsing.\n *\n * The free-form Markdown variant uses `kind: 'markdown'` so the discriminator\n * stays distinct from the typed `prose` block.\n */\nexport type RawSegment =\n | { readonly kind: 'markdown'; readonly text: string; readonly line: number }\n | { readonly kind: BlockType; readonly raw: string; readonly line: number };\n\n/**\n * Splits Markdown into prose and typed-block segments.\n *\n * - Line endings (`\\r\\n`, `\\r`) are normalised to `\\n` first.\n * - Only fences whose tag is in {@link BLOCK_TYPE_SET} are extracted as typed\n * blocks; others remain in prose.\n * - Each segment captures its 1-based starting line number.\n * - If an opening fence is never closed, the block extends to EOF.\n *\n * @param md - The Markdown source.\n * @returns Ordered raw segments.\n *\n * @example\n * ```ts\n * splitMarkdown('## Intro\\n\\n```callout\\nkind: note\\n```\\n');\n * // → [{ kind: 'prose', ... }, { kind: 'callout', raw: 'kind: note', line: 3 }]\n * ```\n */\nexport function splitMarkdown(md: string): RawSegment[] {\n const normalised = md.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n const lines = normalised.split('\\n');\n const segments: RawSegment[] = [];\n\n let proseBuf: string[] = [];\n let proseStart = 1;\n let i = 0;\n\n const flushProse = (): void => {\n if (proseBuf.length === 0) return;\n const text = proseBuf.join('\\n');\n if (text.trim().length > 0) {\n segments.push({ kind: 'markdown', text, line: proseStart });\n }\n proseBuf = [];\n };\n\n while (i < lines.length) {\n const line = lines[i] ?? '';\n const openMatch = OPEN_FENCE_RE.exec(line);\n const tag = openMatch?.[1];\n\n if (tag !== undefined && BLOCK_TYPE_SET.has(tag)) {\n flushProse();\n const blockStart = i + 1;\n const bodyLines: string[] = [];\n i++;\n while (i < lines.length && !CLOSE_FENCE_RE.test(lines[i] ?? '')) {\n bodyLines.push(lines[i] ?? '');\n i++;\n }\n segments.push({\n kind: tag as BlockType,\n raw: bodyLines.join('\\n'),\n line: blockStart,\n });\n if (i < lines.length) i++;\n proseStart = i + 1;\n } else {\n if (proseBuf.length === 0) proseStart = i + 1;\n proseBuf.push(line);\n i++;\n }\n }\n\n flushProse();\n return segments;\n}\n\n/**\n * Scans for fence tags that aren't a known block type but are within edit\n * distance of one — i.e. likely typos (` ```sequnce ` for ` ```sequence `).\n * These would otherwise fall through to prose and render as an inert code\n * block, a silent authoring failure. Fences with known tags are skipped along\n * with their bodies, so interior lines are never mis-flagged.\n *\n * @param md - The Markdown source.\n * @returns The suspect fences found, in document order.\n */\nexport function detectSuspectFences(md: string): SuspectFence[] {\n const lines = md.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n').split('\\n');\n const out: SuspectFence[] = [];\n let i = 0;\n while (i < lines.length) {\n const line = lines[i] ?? '';\n const tag = OPEN_FENCE_RE.exec(line)?.[1];\n if (tag !== undefined && BLOCK_TYPE_SET.has(tag)) {\n // Skip a known typed block in full so we don't inspect its body.\n i++;\n while (i < lines.length && !CLOSE_FENCE_RE.test(lines[i] ?? '')) i++;\n if (i < lines.length) i++;\n continue;\n }\n if (tag !== undefined) {\n // Candidates come from BLOCK_TYPES, so a match is a BlockType.\n const [suggestion] = closest(tag, BLOCK_TYPES, 2) as BlockType[];\n if (suggestion !== undefined) {\n out.push({ line: i + 1, tag, suggestion });\n }\n }\n i++;\n }\n return out;\n}\n","/**\n * YAML body parsing for typed blocks. YAML is a superset of JSON, so a single\n * YAML parse covers both the YAML and JSON cases described in the format spec.\n */\n\nimport { parse as yamlParse, parseDocument, LineCounter, isNode } from 'yaml';\n\n/** Result of parsing a block body. */\nexport type YamlParseResult =\n | { readonly ok: true; readonly data: unknown }\n | {\n readonly ok: false;\n readonly message: string;\n /** 1-based line of the parse error within the block body, if known. */\n readonly line?: number;\n /** 1-based column of the parse error within the block body, if known. */\n readonly column?: number;\n };\n\ninterface YamlError extends Error {\n readonly linePos?: ReadonlyArray<{ readonly line: number; readonly col: number }>;\n}\n\n/**\n * Parses a YAML (or JSON) block body. An empty body parses to `null` data and\n * still counts as a success — callers can treat that as an empty block.\n *\n * @param raw - The raw body text between fences.\n * @returns A successful parse with `data`, or a failure with `message` and an\n * optional body-relative `line` / `column`.\n */\nexport function parseBlockBody(raw: string): YamlParseResult {\n try {\n const data = yamlParse(raw) as unknown;\n return { ok: true, data };\n } catch (err) {\n const e = err as YamlError;\n const pos = e.linePos?.[0];\n if (pos !== undefined) {\n return { ok: false, message: e.message, line: pos.line, column: pos.col };\n }\n return { ok: false, message: e.message };\n }\n}\n\n/** A resolved source position within a block body (1-based line/column). */\nexport interface YamlLocation {\n /** 1-based line within the block body. */\n readonly line: number;\n /** 1-based column within the block body. */\n readonly column: number;\n /** 1-based exclusive end column when the node ends on the same line. */\n readonly endColumn?: number;\n}\n\n/**\n * Resolves the source position of a value at `path` inside a YAML block body.\n *\n * Used to point a schema diagnostic at the exact offending token (e.g. the\n * `kind:` value of `messages[2]`) rather than at the block's opening fence.\n * Returns the position of the value node when the path resolves to a scalar,\n * falling back to the containing node. Returns `undefined` if the path can't be\n * resolved (e.g. the body failed to parse) — callers should degrade to the\n * block's fence line.\n *\n * @param raw - The raw block body (between fences).\n * @param path - A zod-style path, e.g. `['messages', 2, 'kind']`.\n * @returns The body-relative location, or `undefined`.\n *\n * @example\n * ```ts\n * locateYamlPath('messages:\\n - { from: A, kind: bogus }', ['messages', 0, 'kind']);\n * // → { line: 2, column: 19, endColumn: 23 }\n * ```\n */\nexport function locateYamlPath(\n raw: string,\n path: ReadonlyArray<string | number>,\n): YamlLocation | undefined {\n let doc;\n const lineCounter = new LineCounter();\n try {\n doc = parseDocument(raw, { lineCounter });\n } catch {\n return undefined;\n }\n if (doc.errors.length > 0 && doc.contents === null) return undefined;\n\n const node: unknown = path.length === 0 ? doc.contents : doc.getIn(path, true);\n if (!isNode(node) || node.range === null || node.range === undefined) return undefined;\n\n const [start, valueEnd] = node.range;\n const startPos = lineCounter.linePos(start);\n const endPos = lineCounter.linePos(valueEnd);\n const loc: { line: number; column: number; endColumn?: number } = {\n line: startPos.line,\n column: startPos.col,\n };\n if (endPos.line === startPos.line) loc.endColumn = endPos.col;\n return loc;\n}\n","/**\n * Document parser — turns a Markdown string into a {@link Document}.\n *\n * Errors (YAML parse failures, schema problems) are deferred to\n * {@link validateDocument}. The parser's job is to produce a model; validation's\n * job is to report problems with that model.\n */\n\nimport { splitMarkdown, detectSuspectFences } from './splitter.js';\nimport { parseBlockBody } from './yaml.js';\nimport type { Document, MetaData, Segment, TypedSegment } from './types.js';\n\nfunction extractId(data: unknown): string | undefined {\n if (data === null || typeof data !== 'object' || Array.isArray(data)) return undefined;\n const id = (data as { id?: unknown }).id;\n return typeof id === 'string' && id.length > 0 ? id : undefined;\n}\n\nfunction extractMeta(data: unknown): MetaData | undefined {\n if (data === null || typeof data !== 'object' || Array.isArray(data)) return undefined;\n const d = data as { title?: unknown; subtitle?: unknown; tag?: unknown };\n const meta: { -readonly [K in keyof MetaData]: MetaData[K] } = {};\n if (typeof d.title === 'string') meta.title = d.title;\n if (typeof d.subtitle === 'string') meta.subtitle = d.subtitle;\n if (typeof d.tag === 'string') meta.tag = d.tag;\n return Object.keys(meta).length > 0 ? meta : undefined;\n}\n\n/**\n * Parses an Avodado Markdown document.\n *\n * @param markdown - The document source.\n * @param slug - The document slug (typically the path under the docs root,\n * stripped of `.md`).\n * @returns A {@link Document} ready to validate, resolve, and render.\n *\n * @example\n * ```ts\n * const doc = parseDocument(await readFile('docs/orders.md', 'utf8'), 'orders');\n * ```\n */\nexport function parseDocument(markdown: string, slug: string): Document {\n const raws = splitMarkdown(markdown);\n const segments: Segment[] = [];\n let meta: MetaData | undefined;\n // Tracks how many typed (non-prose) blocks we've seen, so meta-detection\n // (\"is this the document's first block?\") is O(1) per block, not O(n).\n let typedBlockCount = 0;\n\n for (const r of raws) {\n if (r.kind === 'markdown') {\n segments.push({ kind: 'markdown', text: r.text, line: r.line });\n continue;\n }\n typedBlockCount += 1;\n\n const parsed = parseBlockBody(r.raw);\n const id = parsed.ok ? extractId(parsed.data) : undefined;\n\n const seg = {\n kind: r.kind,\n raw: r.raw,\n line: r.line,\n data: parsed.ok ? parsed.data : undefined,\n ...(id !== undefined ? { id } : {}),\n ...(parsed.ok\n ? {}\n : {\n parseError: parsed.message,\n ...(parsed.line !== undefined ? { parseErrorLine: parsed.line } : {}),\n ...(parsed.column !== undefined ? { parseErrorColumn: parsed.column } : {}),\n }),\n } as TypedSegment;\n segments.push(seg);\n\n // `meta` is only meaningful as the document's very first typed block.\n if (r.kind === 'meta' && meta === undefined && typedBlockCount === 1 && parsed.ok) {\n meta = extractMeta(parsed.data);\n }\n }\n\n const suspectFences = detectSuspectFences(markdown);\n\n return {\n slug,\n segments,\n ...(meta !== undefined ? { meta } : {}),\n ...(suspectFences.length > 0 ? { suspectFences } : {}),\n };\n}\n","/**\n * Zod schemas for every Avodado block type.\n *\n * These schemas are the single source of truth for each block's shape. TS types\n * are derived via `z.infer` in {@link BlockDataMap}, so validation and types\n * cannot drift apart.\n *\n * Shapes match `resources/doc-studio.jsx` (v1 grammar). Where doc-studio\n * differed from the earlier `resources/avodado-renderer.html` reference, the\n * doc-studio shape wins.\n *\n * Note: every schema is `.strict()` so unknown fields surface as diagnostics.\n * Top-level `id` is handled separately by the parser and is intentionally NOT\n * a field of any per-type schema.\n */\n\nimport { z } from 'zod';\nimport type { BlockType } from '../types.js';\n\n// ─── meta ───────────────────────────────────────────────────────────────────\nexport const metaSchema = z\n .object({\n title: z.string().optional(),\n subtitle: z.string().optional(),\n tag: z.string().optional(),\n })\n .strict();\n\n// ─── callout ────────────────────────────────────────────────────────────────\n// doc-studio: `tone` instead of `kind`. Optional title + body.\nexport const calloutSchema = z\n .object({\n tone: z.enum(['note', 'tip', 'warn', 'danger']).optional(),\n title: z.string().optional(),\n body: z.string().optional(),\n })\n .strict();\n\n// ─── table ──────────────────────────────────────────────────────────────────\n// doc-studio: columns can be strings OR `{ label, align?, highlight? }`.\n// Cells can be `string | number | { v, tone }`.\nconst tableColumnSchema = z.union([\n z.string(),\n z\n .object({\n label: z.string(),\n align: z.enum(['l', 'c', 'r']).optional(),\n highlight: z.boolean().optional(),\n })\n .strict(),\n]);\nconst tableCellSchema = z.union([\n z.string(),\n z.number(),\n z\n .object({\n v: z.union([z.string(), z.number()]),\n tone: z.enum(['pos', 'neg', 'warn', 'muted']).optional(),\n lead: z.boolean().optional(),\n highlight: z.boolean().optional(),\n })\n .strict(),\n]);\nexport const tableSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n columns: z.array(tableColumnSchema).optional(),\n rows: z.array(z.array(tableCellSchema)).optional(),\n note: z.string().optional(),\n })\n .strict();\n\n// ─── sequence ───────────────────────────────────────────────────────────────\n// doc-studio actors are objects (id, name, sub?, external?). Messages have\n// `kind: sync | response | async | error | note`. `note` is a numbered\n// inline annotation on the from-actor's lane, with no arrow.\n//\n// Sample-orders-api extras: per-message `summary` (longer description for the\n// step list), `code` (snippet inside the step list item), `note` (italic gray\n// caption below the step), plus a top-level `lede` (intro paragraph above the\n// diagram), `endpoint` (method + path for the tag pill and title), and `foot`\n// (key/value metadata pills below the diagram).\nconst sequenceActorSchema = z\n .object({\n id: z.string(),\n name: z.string(),\n sub: z.string().optional(),\n external: z.boolean().optional(),\n })\n .strict();\nconst sequenceMessageSchema = z\n .object({\n from: z.string(),\n to: z.string(),\n label: z.string().optional(),\n kind: z.enum(['sync', 'response', 'async', 'error', 'note']).optional(),\n summary: z.string().optional(),\n code: z.string().optional(),\n note: z.string().optional(),\n })\n .strict();\nconst sequenceEndpointSchema = z\n .object({\n method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']),\n path: z.string(),\n status: z.string().optional(),\n })\n .strict();\nconst sequenceFootSchema = z\n .object({\n label: z.string(),\n value: z.string(),\n })\n .strict();\nexport const sequenceSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n endpoint: sequenceEndpointSchema.optional(),\n actors: z.array(sequenceActorSchema).optional(),\n messages: z.array(sequenceMessageSchema).optional(),\n foot: z.array(sequenceFootSchema).optional(),\n })\n .strict();\n\n// ─── erd ────────────────────────────────────────────────────────────────────\n// doc-studio: entities `{name, columns: [{name, type?, pk?: boolean, fk?: boolean}]}`,\n// relations `{from, to, label?, card?: '1:1'|'1:N'|'N:M'}`.\nconst erdColumnSchema = z\n .object({\n name: z.string(),\n type: z.string().optional(),\n pk: z.boolean().optional(),\n fk: z.boolean().optional(),\n })\n .strict();\nconst erdEntitySchema = z\n .object({\n name: z.string(),\n columns: z.array(erdColumnSchema).optional(),\n })\n .strict();\nconst erdRelationSchema = z\n .object({\n from: z.string(),\n to: z.string(),\n label: z.string().optional(),\n card: z.enum(['1:1', '1:N', 'N:M']).optional(),\n })\n .strict();\nexport const erdSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n entities: z.array(erdEntitySchema).optional(),\n relations: z.array(erdRelationSchema).optional(),\n })\n .strict();\n\n// ─── userstory ──────────────────────────────────────────────────────────────\n// Unchanged from the previous shape (doc-studio uses the same userstory).\nconst criterionSchema = z\n .object({\n given: z.string().optional(),\n when: z.string().optional(),\n then: z.string().optional(),\n })\n .strict();\nconst linkSchema = z\n .object({\n ref: z.string().optional(),\n mode: z.string().optional(),\n label: z.string().optional(),\n })\n .strict();\nexport const userstorySchema = z\n .object({\n role: z.string().optional(),\n want: z.string().optional(),\n soThat: z.string().optional(),\n priority: z.string().optional(),\n points: z.number().optional(),\n criteria: z.array(criterionSchema).optional(),\n links: z.array(linkSchema).optional(),\n })\n .strict();\n\n// ─── timeline ───────────────────────────────────────────────────────────────\n// doc-studio: items `{label, date?, desc?, status?: 'done'|'current'|'next'|'future'}`.\nconst timelineItemSchema = z\n .object({\n label: z.string(),\n date: z.string().optional(),\n desc: z.string().optional(),\n status: z.enum(['done', 'current', 'next', 'future']).optional(),\n })\n .strict();\nexport const timelineSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n items: z.array(timelineItemSchema).optional(),\n })\n .strict();\n\n// ─── kanban ─────────────────────────────────────────────────────────────────\n// doc-studio: `columns: [{label, cards: [{title, tag?}]}]`.\nconst kanbanCardSchema = z\n .object({\n title: z.string(),\n tag: z.string().optional(),\n })\n .strict();\nconst kanbanColumnSchema = z\n .object({\n label: z.string(),\n cards: z.array(kanbanCardSchema).optional(),\n })\n .strict();\nexport const kanbanSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n columns: z.array(kanbanColumnSchema).optional(),\n })\n .strict();\n\n// ─── tracker ────────────────────────────────────────────────────────────────\n// doc-studio: items add optional `owner`, `due`.\nconst trackerItemSchema = z\n .object({\n task: z.string(),\n status: z.enum(['todo', 'doing', 'done', 'blocked']).optional(),\n priority: z.enum(['high', 'med', 'low']).optional(),\n owner: z.string().optional(),\n due: z.string().optional(),\n })\n .strict();\nexport const trackerSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n items: z.array(trackerItemSchema).optional(),\n })\n .strict();\n\n// ─── prose ──────────────────────────────────────────────────────────────────\n// Structured prose: a list of typed sub-blocks (heading / paragraph / list /\n// quote). Use this when you want a section's body to be more structured than\n// raw markdown allows.\nconst proseBlockSchema = z\n .object({\n type: z.enum(['h', 'p', 'ul', 'ol', 'quote']).optional(),\n text: z.string().optional(),\n items: z.array(z.string()).optional(),\n })\n .strict();\nexport const proseSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n blocks: z.array(proseBlockSchema).optional(),\n })\n .strict();\n\n// ─── glossary ───────────────────────────────────────────────────────────────\nconst glossaryTermSchema = z.object({ term: z.string(), def: z.string() }).strict();\nexport const glossarySchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n terms: z.array(glossaryTermSchema).optional(),\n })\n .strict();\n\n// ─── proscons ───────────────────────────────────────────────────────────────\nexport const prosconsSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n prosLabel: z.string().optional(),\n consLabel: z.string().optional(),\n pros: z.array(z.string()).optional(),\n cons: z.array(z.string()).optional(),\n })\n .strict();\n\n// ─── cvt (current vs target) ────────────────────────────────────────────────\nconst cvtPanelSchema = z\n .object({\n label: z.string().optional(),\n items: z.array(z.string()).optional(),\n })\n .strict();\nexport const cvtSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n current: cvtPanelSchema.optional(),\n target: cvtPanelSchema.optional(),\n note: z.string().optional(),\n })\n .strict();\n\n// ─── stats (KPI cards) ──────────────────────────────────────────────────────\nconst statSchema = z\n .object({\n value: z.union([z.string(), z.number()]),\n label: z.string(),\n delta: z.string().optional(),\n trend: z.enum(['up', 'down', 'flat']).optional(),\n accent: z.string().optional(),\n })\n .strict();\nexport const statsSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n stats: z.array(statSchema).optional(),\n })\n .strict();\n\n// ─── code (one or more code blocks) ─────────────────────────────────────────\nconst codeEntrySchema = z\n .object({\n title: z.string().optional(),\n lang: z.string().optional(),\n code: z.string(),\n })\n .strict();\nexport const codeSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n blocks: z.array(codeEntrySchema).optional(),\n })\n .strict();\n\n// ─── agenda ─────────────────────────────────────────────────────────────────\nconst agendaItemSchema = z\n .object({\n time: z.string().optional(),\n duration: z.string().optional(),\n title: z.string(),\n owner: z.string().optional(),\n desc: z.string().optional(),\n })\n .strict();\nexport const agendaSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n items: z.array(agendaItemSchema).optional(),\n })\n .strict();\n\n// ─── tree (indented hierarchy) ──────────────────────────────────────────────\nconst treeNodeSchema = z\n .object({\n id: z.string(),\n parent: z.string().optional(),\n label: z.string(),\n note: z.string().optional(),\n })\n .strict();\nexport const treeSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n nodes: z.array(treeNodeSchema).optional(),\n })\n .strict();\n\n// ─── pyramid ────────────────────────────────────────────────────────────────\nconst pyramidLevelSchema = z\n .object({ label: z.string(), desc: z.string().optional() })\n .strict();\nexport const pyramidSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n levels: z.array(pyramidLevelSchema).optional(),\n })\n .strict();\n\n// ─── funnel ─────────────────────────────────────────────────────────────────\nconst funnelStageSchema = z\n .object({ label: z.string(), value: z.union([z.string(), z.number()]) })\n .strict();\nexport const funnelSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n stages: z.array(funnelStageSchema).optional(),\n })\n .strict();\n\n// ─── flow (flowchart) ───────────────────────────────────────────────────────\nconst flowNodeSchema = z\n .object({\n id: z.string(),\n col: z.number(),\n row: z.number(),\n w: z.number().optional(),\n label: z.string(),\n kind: z.enum(['start', 'end', 'decision', 'process']).optional(),\n })\n .strict();\nconst flowEdgeSchema = z\n .object({\n from: z.string(),\n to: z.string(),\n label: z.string().optional(),\n kind: z.enum(['error']).optional(),\n })\n .strict();\nexport const flowSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n nodes: z.array(flowNodeSchema).optional(),\n edges: z.array(flowEdgeSchema).optional(),\n })\n .strict();\n\n// ─── state machine ──────────────────────────────────────────────────────────\nconst stateNodeSchema = z\n .object({\n id: z.string(),\n col: z.number(),\n row: z.number(),\n name: z.string().optional(),\n kind: z.enum(['start', 'terminal', 'active', 'wait']).optional(),\n })\n .strict();\nconst stateTransitionSchema = z\n .object({\n from: z.string(),\n to: z.string(),\n event: z.string(),\n guard: z.string().optional(),\n })\n .strict();\nexport const stateSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n states: z.array(stateNodeSchema).optional(),\n transitions: z.array(stateTransitionSchema).optional(),\n })\n .strict();\n\n// ─── dfd (data-flow diagram) ────────────────────────────────────────────────\nconst dfdNodeSchema = z\n .object({\n id: z.string(),\n col: z.number(),\n row: z.number(),\n name: z.string(),\n kind: z.enum(['process', 'external', 'store', 'datastore']).optional(),\n num: z.union([z.string(), z.number()]).optional(),\n })\n .strict();\nconst dfdEdgeSchema = z\n .object({\n from: z.string(),\n to: z.string(),\n label: z.string().optional(),\n })\n .strict();\nexport const dfdSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n nodes: z.array(dfdNodeSchema).optional(),\n edges: z.array(dfdEdgeSchema).optional(),\n })\n .strict();\n\n// ─── journey map ────────────────────────────────────────────────────────────\nconst journeyStageSchema = z.object({ label: z.string() }).strict();\nconst journeyRowSchema = z\n .object({\n label: z.string(),\n cells: z.array(z.string()).optional(),\n })\n .strict();\nexport const journeySchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n stages: z.array(journeyStageSchema).optional(),\n rows: z.array(journeyRowSchema).optional(),\n emotion: z.array(z.number()).optional(),\n })\n .strict();\n\n// ─── gantt ──────────────────────────────────────────────────────────────────\nconst ganttTaskSchema = z\n .object({\n label: z.string(),\n start: z.number().optional(),\n span: z.number().optional(),\n kind: z.enum(['done', 'active', 'current', 'milestone']).optional(),\n })\n .strict();\nexport const ganttSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n periods: z.array(z.string()).optional(),\n tasks: z.array(ganttTaskSchema).optional(),\n })\n .strict();\n\n// ─── graph (node-link) ──────────────────────────────────────────────────────\nconst graphNodeSchema = z\n .object({\n id: z.string(),\n col: z.number(),\n row: z.number(),\n label: z.string(),\n group: z.number().optional(),\n })\n .strict();\nconst graphEdgeSchema = z\n .object({\n from: z.string(),\n to: z.string(),\n label: z.string().optional(),\n dir: z.enum(['directed', 'undirected']).optional(),\n })\n .strict();\nexport const graphSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n nodes: z.array(graphNodeSchema).optional(),\n edges: z.array(graphEdgeSchema).optional(),\n })\n .strict();\n\n// ─── quadrant (2x2 matrix) ──────────────────────────────────────────────────\nconst quadrantAxisSchema = z\n .object({\n label: z.string().optional(),\n low: z.string().optional(),\n high: z.string().optional(),\n })\n .strict();\nconst quadrantItemSchema = z\n .object({\n x: z.number(),\n y: z.number(),\n label: z.string(),\n })\n .strict();\nexport const quadrantSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n xAxis: quadrantAxisSchema.optional(),\n yAxis: quadrantAxisSchema.optional(),\n items: z.array(quadrantItemSchema).optional(),\n })\n .strict();\n\n// ─── swimlane (cross-functional process) ────────────────────────────────────\nconst swimlaneLaneSchema = z.object({ label: z.string() }).strict();\nconst swimlaneStepSchema = z\n .object({\n id: z.string(),\n col: z.number(),\n lane: z.number(),\n label: z.string(),\n kind: z.enum(['action', 'decision', 'start', 'end', 'wait']).optional(),\n })\n .strict();\nconst swimlaneLinkSchema = z\n .object({\n from: z.string(),\n to: z.string(),\n label: z.string().optional(),\n })\n .strict();\nexport const swimlaneSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n lanes: z.array(swimlaneLaneSchema).optional(),\n steps: z.array(swimlaneStepSchema).optional(),\n links: z.array(swimlaneLinkSchema).optional(),\n })\n .strict();\n\n// ─── c4 (context / container / component) ───────────────────────────────────\nconst c4NodeSchema = z\n .object({\n id: z.string(),\n col: z.number(),\n row: z.number(),\n w: z.number().optional(),\n kind: z.enum(['person', 'system', 'external', 'store', 'container', 'component']),\n family: z.string().optional(),\n name: z.string(),\n tech: z.string().optional(),\n desc: z.string().optional(),\n })\n .strict();\nconst c4EdgeSchema = z\n .object({\n from: z.string(),\n to: z.string(),\n label: z.string().optional(),\n kind: z.enum(['solid', 'dashed', 'forbidden', 'error']).optional(),\n })\n .strict();\nconst c4BoundarySchema = z.object({ label: z.string() }).strict();\nexport const c4Schema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n level: z.enum(['context', 'container', 'component']).optional(),\n boundary: c4BoundarySchema.optional(),\n nodes: z.array(c4NodeSchema).optional(),\n edges: z.array(c4EdgeSchema).optional(),\n })\n .strict();\n\n// ─── uml class diagram ──────────────────────────────────────────────────────\nconst umlClassSchema = z\n .object({\n id: z.string(),\n col: z.number(),\n row: z.number(),\n name: z.string(),\n stereotype: z.string().optional(),\n attrs: z.array(z.string()).optional(),\n methods: z.array(z.string()).optional(),\n })\n .strict();\nconst umlRelSchema = z\n .object({\n from: z.string(),\n to: z.string(),\n label: z.string().optional(),\n kind: z\n .enum([\n 'inheritance',\n 'extends',\n 'implementation',\n 'implements',\n 'composition',\n 'aggregation',\n 'dependency',\n 'association',\n ])\n .optional(),\n })\n .strict();\nexport const umlSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n classes: z.array(umlClassSchema).optional(),\n rels: z.array(umlRelSchema).optional(),\n })\n .strict();\n\n// ─── mece (issue tree) ──────────────────────────────────────────────────────\nconst meceNodeSchema = z\n .object({\n id: z.string(),\n parent: z.string().optional(),\n label: z.string(),\n note: z.string().optional(),\n })\n .strict();\nexport const meceSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n nodes: z.array(meceNodeSchema).optional(),\n })\n .strict();\n\n// ─── frontend (component tree) ──────────────────────────────────────────────\nconst ftNodeSchema = z\n .object({\n id: z.string(),\n parent: z.string().optional(),\n name: z.string(),\n kind: z\n .enum([\n 'root',\n 'layout',\n 'page',\n 'component',\n 'leaf',\n 'provider',\n 'context',\n 'hook',\n 'store',\n 'state',\n ])\n .optional(),\n note: z.string().optional(),\n })\n .strict();\nexport const frontendSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n nodes: z.array(ftNodeSchema).optional(),\n })\n .strict();\n\n// ─── cluster (Kubernetes-style) ─────────────────────────────────────────────\nconst clusterClusterSchema = z\n .object({\n id: z.string(),\n label: z.string(),\n kind: z.string().optional(),\n })\n .strict();\nconst clusterServiceSchema = z\n .object({\n id: z.string(),\n cluster: z.string(),\n label: z.string(),\n kind: z.string().optional(),\n tech: z.string().optional(),\n replicas: z.number().optional(),\n })\n .strict();\nconst clusterEdgeSchema = z\n .object({\n from: z.string(),\n to: z.string(),\n label: z.string().optional(),\n kind: z.enum(['solid', 'dashed', 'forbidden', 'error']).optional(),\n })\n .strict();\nexport const clusterSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n clusters: z.array(clusterClusterSchema).optional(),\n services: z.array(clusterServiceSchema).optional(),\n edges: z.array(clusterEdgeSchema).optional(),\n })\n .strict();\n\n// ─── block-graph (block / infra / event / ddd / network) ────────────────────\n// Two layout modes share one schema: if `layers` is present, nodes use `layer`\n// to indicate which horizontal band they belong to; otherwise the grid layout\n// uses `col` + `row` (+ optional `w` span).\nconst blockGraphGroupSchema = z\n .object({\n id: z.string().optional(),\n col: z.number(),\n row: z.number(),\n cols: z.number().optional(),\n rows: z.number().optional(),\n label: z.string(),\n color: z.string().optional(),\n })\n .strict();\nconst blockGraphLayerSchema = z.object({ label: z.string() }).strict();\nconst blockGraphNodeSchema = z\n .object({\n id: z.string(),\n col: z.number().optional(),\n row: z.number().optional(),\n layer: z.number().optional(),\n w: z.number().optional(),\n kind: z.string().optional(),\n name: z.string(),\n tech: z.string().optional(),\n })\n .strict();\nconst blockGraphEdgeSchema = z\n .object({\n from: z.string(),\n to: z.string(),\n label: z.string().optional(),\n kind: z.enum(['solid', 'dashed', 'forbidden', 'error']).optional(),\n })\n .strict();\nexport const blockGraphSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n systemLabel: z.string().optional(),\n layers: z.array(blockGraphLayerSchema).optional(),\n groups: z.array(blockGraphGroupSchema).optional(),\n nodes: z.array(blockGraphNodeSchema).optional(),\n edges: z.array(blockGraphEdgeSchema).optional(),\n })\n .strict();\n\n// ─── felogic (frontend/backend module graph) ────────────────────────────────\nconst feLogicNodeSchema = z\n .object({\n id: z.string(),\n col: z.number(),\n row: z.number(),\n w: z.number().optional(),\n kind: z.string().optional(),\n name: z.string(),\n note: z.string().optional(),\n })\n .strict();\nconst feLogicEdgeSchema = z\n .object({\n from: z.string(),\n to: z.string(),\n label: z.string().optional(),\n kind: z\n .enum(['uses', 'implements', 'reads', 'egress', 'https', 'api', 'dashed', 'async'])\n .optional(),\n })\n .strict();\nexport const felogicSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n groups: z.array(blockGraphGroupSchema).optional(),\n nodes: z.array(feLogicNodeSchema).optional(),\n edges: z.array(feLogicEdgeSchema).optional(),\n })\n .strict();\n\n// `dag` reuses the flow schema (same shape, different visual frame).\nexport const dagSchema = flowSchema;\n\n// ─── wireframe (UI mockups: desktop / browser / phone) ──────────────────────\n// A vertical stack of low-fidelity UI elements inside a device frame. Each\n// screen picks a `device` frame; `elements` are laid out top-to-bottom.\nconst wireframeElementSchema = z\n .object({\n type: z\n .enum([\n 'header',\n 'subheader',\n 'text',\n 'button',\n 'input',\n 'search',\n 'image',\n 'avatar',\n 'card',\n 'list',\n 'nav',\n 'tabs',\n 'divider',\n 'badge',\n 'toggle',\n 'spacer',\n ])\n .optional(),\n label: z.string().optional(),\n rows: z.number().optional(),\n align: z.enum(['l', 'c', 'r']).optional(),\n tone: z.enum(['accent', 'muted', 'danger']).optional(),\n })\n .strict();\nconst wireframeScreenSchema = z\n .object({\n device: z.enum(['desktop', 'browser', 'phone']).optional(),\n title: z.string().optional(),\n url: z.string().optional(),\n label: z.string().optional(),\n elements: z.array(wireframeElementSchema).optional(),\n })\n .strict();\nexport const wireframeSchema = z\n .object({\n title: z.string().optional(),\n description: z.string().optional(),\n lede: z.string().optional(),\n screens: z.array(wireframeScreenSchema).optional(),\n })\n .strict();\n\n// ─── registry source-of-truth ───────────────────────────────────────────────\n/**\n * The schema map. `as const satisfies Record<BlockType, ...>` enforces that\n * every {@link BlockType} has an entry — omitting one is a compile error.\n */\nexport const blockSchemas = {\n meta: metaSchema,\n callout: calloutSchema,\n table: tableSchema,\n sequence: sequenceSchema,\n erd: erdSchema,\n userstory: userstorySchema,\n timeline: timelineSchema,\n kanban: kanbanSchema,\n tracker: trackerSchema,\n prose: proseSchema,\n glossary: glossarySchema,\n proscons: prosconsSchema,\n cvt: cvtSchema,\n stats: statsSchema,\n code: codeSchema,\n agenda: agendaSchema,\n tree: treeSchema,\n pyramid: pyramidSchema,\n funnel: funnelSchema,\n flow: flowSchema,\n state: stateSchema,\n dfd: dfdSchema,\n journey: journeySchema,\n gantt: ganttSchema,\n graph: graphSchema,\n quadrant: quadrantSchema,\n swimlane: swimlaneSchema,\n c4: c4Schema,\n uml: umlSchema,\n mece: meceSchema,\n frontend: frontendSchema,\n cluster: clusterSchema,\n block: blockGraphSchema,\n infra: blockGraphSchema,\n event: blockGraphSchema,\n ddd: blockGraphSchema,\n network: blockGraphSchema,\n felogic: felogicSchema,\n belogic: felogicSchema,\n dag: dagSchema,\n wireframe: wireframeSchema,\n} as const satisfies Record<BlockType, z.ZodTypeAny>;\n\n/** Per-block data types, derived from the schemas above. */\nexport type BlockDataMap = {\n [K in BlockType]: z.infer<(typeof blockSchemas)[K]>;\n};\n","/**\n * Block registry — the architectural backbone.\n *\n * A {@link BlockDef} ties a block type to its schema and an optional reference\n * extractor. The registry itself is a mapped type over {@link BlockType}, so\n * adding a new block type without an entry is a compile error.\n *\n * Downstream rendering targets (HTML renderer, etc.) follow the same\n * `Record<BlockType, …>` pattern to inherit the same exhaustiveness guarantee.\n */\n\nimport type { BlockType } from '../types.js';\nimport { blockSchemas, type BlockDataMap } from './schemas.js';\n\n/** Definition of one block type: its schema plus optional ref extraction. */\nexport interface BlockDef<K extends BlockType> {\n readonly type: K;\n readonly schema: (typeof blockSchemas)[K];\n /**\n * Extracts the reference strings (`doc#id` or `#id`) carried by this block's\n * data, if any. Only blocks that can reference other blocks define this.\n */\n readonly extractRefs?: (data: BlockDataMap[K]) => readonly string[];\n}\n\n/** Mapped registry type — adding a new {@link BlockType} without an entry fails tsc. */\nexport type BlockRegistry = { readonly [K in BlockType]: BlockDef<K> };\n\n/** The block registry. */\nexport const blockRegistry: BlockRegistry = {\n meta: { type: 'meta', schema: blockSchemas.meta },\n callout: { type: 'callout', schema: blockSchemas.callout },\n table: { type: 'table', schema: blockSchemas.table },\n sequence: { type: 'sequence', schema: blockSchemas.sequence },\n erd: { type: 'erd', schema: blockSchemas.erd },\n userstory: {\n type: 'userstory',\n schema: blockSchemas.userstory,\n extractRefs: (data) => {\n const links = data.links;\n if (!Array.isArray(links)) return [];\n const refs: string[] = [];\n for (const link of links) {\n if (typeof link.ref === 'string' && link.ref.length > 0) refs.push(link.ref);\n }\n return refs;\n },\n },\n timeline: { type: 'timeline', schema: blockSchemas.timeline },\n kanban: { type: 'kanban', schema: blockSchemas.kanban },\n tracker: { type: 'tracker', schema: blockSchemas.tracker },\n prose: { type: 'prose', schema: blockSchemas.prose },\n glossary: { type: 'glossary', schema: blockSchemas.glossary },\n proscons: { type: 'proscons', schema: blockSchemas.proscons },\n cvt: { type: 'cvt', schema: blockSchemas.cvt },\n stats: { type: 'stats', schema: blockSchemas.stats },\n code: { type: 'code', schema: blockSchemas.code },\n agenda: { type: 'agenda', schema: blockSchemas.agenda },\n tree: { type: 'tree', schema: blockSchemas.tree },\n pyramid: { type: 'pyramid', schema: blockSchemas.pyramid },\n funnel: { type: 'funnel', schema: blockSchemas.funnel },\n flow: { type: 'flow', schema: blockSchemas.flow },\n state: { type: 'state', schema: blockSchemas.state },\n dfd: { type: 'dfd', schema: blockSchemas.dfd },\n journey: { type: 'journey', schema: blockSchemas.journey },\n gantt: { type: 'gantt', schema: blockSchemas.gantt },\n graph: { type: 'graph', schema: blockSchemas.graph },\n quadrant: { type: 'quadrant', schema: blockSchemas.quadrant },\n swimlane: { type: 'swimlane', schema: blockSchemas.swimlane },\n c4: { type: 'c4', schema: blockSchemas.c4 },\n uml: { type: 'uml', schema: blockSchemas.uml },\n mece: { type: 'mece', schema: blockSchemas.mece },\n frontend: { type: 'frontend', schema: blockSchemas.frontend },\n cluster: { type: 'cluster', schema: blockSchemas.cluster },\n block: { type: 'block', schema: blockSchemas.block },\n infra: { type: 'infra', schema: blockSchemas.infra },\n event: { type: 'event', schema: blockSchemas.event },\n ddd: { type: 'ddd', schema: blockSchemas.ddd },\n network: { type: 'network', schema: blockSchemas.network },\n felogic: { type: 'felogic', schema: blockSchemas.felogic },\n belogic: { type: 'belogic', schema: blockSchemas.belogic },\n dag: { type: 'dag', schema: blockSchemas.dag },\n wireframe: { type: 'wireframe', schema: blockSchemas.wireframe },\n};\n","/**\n * Validates a parsed {@link Document} against the block schemas and reports\n * structured {@link Diagnostic}s for malformed YAML, schema violations, suspect\n * fence tags, and empty bodies.\n *\n * Diagnostics carry precise positions (line + column within the document),\n * a one-line actionable `hint`, and \"did you mean?\" `suggestions` where a fix\n * is mechanically derivable — so the CLI and editors can show teachable errors\n * and offer quick-fixes.\n */\n\nimport { z } from 'zod';\nimport type { Diagnostic } from './diagnostics.js';\nimport type { Document } from './types.js';\nimport { blockRegistry } from './blocks/registry.js';\nimport { blockSchemas } from './blocks/schemas.js';\nimport { locateYamlPath } from './yaml.js';\nimport { closest } from './suggest.js';\nimport type { BlockType } from './types.js';\n\n/** Strips wrappers (optional / nullable / default) to reach the inner schema. */\nfunction unwrap(schema: z.ZodTypeAny): z.ZodTypeAny {\n let cur = schema;\n for (;;) {\n if (cur instanceof z.ZodOptional || cur instanceof z.ZodNullable) cur = cur.unwrap();\n else if (cur instanceof z.ZodDefault) cur = cur._def.innerType as z.ZodTypeAny;\n else return cur;\n }\n}\n\n/**\n * Resolves the schema node at a zod issue path, walking objects by key and\n * arrays by index. Returns `undefined` if the path leaves the known shape.\n */\nfunction schemaAt(kind: BlockType, path: ReadonlyArray<string | number>): z.ZodTypeAny | undefined {\n let cur: z.ZodTypeAny = blockSchemas[kind];\n for (const seg of path) {\n cur = unwrap(cur);\n if (typeof seg === 'number') {\n if (!(cur instanceof z.ZodArray)) return undefined;\n cur = cur.element as z.ZodTypeAny;\n } else {\n if (!(cur instanceof z.ZodObject)) return undefined;\n const next = (cur.shape as Record<string, z.ZodTypeAny>)[seg];\n if (next === undefined) return undefined;\n cur = next;\n }\n }\n return unwrap(cur);\n}\n\n/**\n * Field names valid at a given path. For `unrecognized_keys`, the issue path is\n * the *object that owns the bad key*, so this returns that object's fields —\n * giving accurate \"did you mean?\" suggestions even for nested records.\n */\nfunction fieldNamesAt(kind: BlockType, path: ReadonlyArray<string | number>): string[] {\n const schema = schemaAt(kind, path) ?? blockSchemas[kind];\n return schema instanceof z.ZodObject\n ? Object.keys(schema.shape as Record<string, unknown>)\n : [];\n}\n\ninterface IssueRender {\n readonly message: string;\n readonly hint?: string;\n readonly suggestions?: readonly string[];\n}\n\n/**\n * Turns a single zod issue into a message + actionable hint + suggestions.\n * Handles the common cases precisely; everything else falls back to the zod\n * message with a generic hint.\n */\nfunction renderIssue(kind: BlockType, issue: z.ZodIssue): IssueRender {\n const path = issue.path.join('.');\n const at = path.length > 0 ? `${path}: ` : '';\n\n if (issue.code === 'unrecognized_keys') {\n const bad = issue.keys[0] ?? '';\n const valid = fieldNamesAt(kind, issue.path);\n const suggestions = closest(bad, valid, 3);\n const did = suggestions.length > 0 ? `Did you mean \\`${suggestions[0]}\\`? ` : '';\n return {\n message: `${kind}: unknown field${issue.keys.length > 1 ? 's' : ''} ${issue.keys.map((k) => `'${k}'`).join(', ')}`,\n hint: `${did}Valid fields: ${valid.join(', ')}.`,\n ...(suggestions.length > 0 ? { suggestions } : {}),\n };\n }\n\n if (issue.code === 'invalid_enum_value') {\n const options = issue.options.map(String);\n const received = String(issue.received);\n const suggestions = closest(received, options, 3);\n const did = suggestions.length > 0 ? ` Did you mean \\`${suggestions[0]}\\`?` : '';\n return {\n message: `${kind}: ${at}invalid value \"${received}\"`,\n hint: `Use one of: ${options.join(' | ')}.${did}`,\n ...(suggestions.length > 0 ? { suggestions } : {}),\n };\n }\n\n if (issue.code === 'invalid_type') {\n // The classic \"I wrote a number, the schema wants a string\" trap.\n if (issue.expected === 'string' && issue.received === 'number') {\n return {\n message: `${kind}: ${at}expected a string but got a number`,\n hint: 'Quote the value to keep it a string (e.g. tech: \"16\").',\n };\n }\n return {\n message: `${kind}: ${at}expected ${issue.expected}, got ${issue.received}`,\n };\n }\n\n return { message: `${kind}: ${at}${issue.message}` };\n}\n\n/**\n * Validates a document. Returns diagnostics — never throws for expected failures.\n *\n * @param doc - The parsed document.\n * @param file - The file path to use in diagnostics.\n */\nexport function validateDocument(doc: Document, file: string): Diagnostic[] {\n const diagnostics: Diagnostic[] = [];\n\n // Suspect fence tags (typos of real block types) → warnings.\n for (const sf of doc.suspectFences ?? []) {\n diagnostics.push({\n file,\n line: sf.line,\n column: 1,\n level: 'warn',\n code: 'W_SUSPECT_BLOCK',\n message: `Unknown block type \"${sf.tag}\" — rendered as plain text`,\n hint: `Did you mean \\`\\`\\`${sf.suggestion}? Use one of the documented block types.`,\n value: sf.tag,\n suggestions: [sf.suggestion],\n });\n }\n\n for (const seg of doc.segments) {\n if (seg.kind === 'markdown') continue;\n\n if (seg.parseError !== undefined) {\n // Translate body-relative parse position to a document-absolute one.\n const line =\n seg.parseErrorLine !== undefined ? seg.line + seg.parseErrorLine : seg.line;\n diagnostics.push({\n file,\n line,\n ...(seg.parseErrorColumn !== undefined ? { column: seg.parseErrorColumn } : {}),\n level: 'error',\n code: 'E_PARSE_YAML',\n message: `${seg.kind}: ${seg.parseError}`,\n hint: 'Often an unquoted special character (, : # | & *). Wrap the value in quotes.',\n });\n continue;\n }\n\n if (seg.data === null || seg.data === undefined) {\n diagnostics.push({\n file,\n line: seg.line,\n level: 'warn',\n code: 'W_EMPTY_BLOCK',\n message: `${seg.kind}: empty body`,\n hint: 'Add the fields this block needs, or remove the block.',\n });\n continue;\n }\n\n const def = blockRegistry[seg.kind];\n // `id` is an envelope concern handled by the parser; strip it before\n // per-schema validation so strict schemas don't flag it as unknown.\n const dataForSchema =\n typeof seg.data === 'object' && !Array.isArray(seg.data) && 'id' in seg.data\n ? Object.fromEntries(\n Object.entries(seg.data as Record<string, unknown>).filter(([k]) => k !== 'id'),\n )\n : seg.data;\n const result = def.schema.safeParse(dataForSchema);\n if (!result.success) {\n for (const issue of result.error.issues) {\n const rendered = renderIssue(seg.kind, issue);\n // Point at the offending token. For a missing required field the exact\n // path won't resolve, so fall back to the containing object/array.\n const loc =\n locateYamlPath(seg.raw, issue.path) ??\n (issue.path.length > 0\n ? locateYamlPath(seg.raw, issue.path.slice(0, -1))\n : undefined);\n const position =\n loc !== undefined\n ? {\n line: seg.line + loc.line,\n column: loc.column,\n ...(loc.endColumn !== undefined ? { endColumn: loc.endColumn } : {}),\n }\n : { line: seg.line };\n diagnostics.push({\n file,\n ...position,\n level: 'error',\n code: 'E_SCHEMA',\n message: rendered.message,\n ...(rendered.hint !== undefined ? { hint: rendered.hint } : {}),\n ...(rendered.suggestions !== undefined ? { suggestions: rendered.suggestions } : {}),\n });\n }\n }\n }\n\n return diagnostics;\n}\n","/**\n * Resolves cross-document references across a set of {@link Document}s.\n *\n * - Ids are repo-global unique slugs. Duplicate ids produce `E_DUP_ID`.\n * - References are `doc#id` (absolute) or `#id` (within the current document).\n * Targets that don't exist produce `E_DANGLING_REF`.\n * - The {@link RefGraph} maps id → block and lists edges from referencing to\n * referenced blocks.\n */\n\nimport type { Diagnostic } from './diagnostics.js';\nimport type { Document, Segment, TypedSegment } from './types.js';\nimport { blockRegistry } from './blocks/registry.js';\nimport type { BlockDataMap } from './blocks/schemas.js';\nimport type { BlockType } from './types.js';\n\n/** A graph of resolved blocks and the edges between them. */\nexport interface RefGraph {\n /** Map from id to the block it identifies (and the doc slug it lives in). */\n readonly nodes: ReadonlyMap<string, { readonly doc: string; readonly block: Segment }>;\n /** Directed edges; `from`/`to` are `doc#id` strings (or `doc@line` if the source has no id). */\n readonly edges: ReadonlyArray<{ readonly from: string; readonly to: string }>;\n}\n\n/** A document paired with its source file path (used for diagnostic locations). */\nexport interface InputDocument {\n readonly doc: Document;\n readonly file: string;\n}\n\n// A reference is `doc#id` or a bare `#id` (current document).\n// doc — a slug: path segments under the docs root, so word chars plus `/`,\n// `.`, and `-` (e.g. `api/v2.0`, `architecture/overview`).\n// id — a block id slug: word chars, `-`, and `.`.\nconst REF_RE = /^(?:([\\w/.-]+))?#([\\w.-]+)$/;\n\nfunction callExtractRefs<K extends BlockType>(kind: K, data: BlockDataMap[K]): readonly string[] {\n const def = blockRegistry[kind];\n return def.extractRefs ? def.extractRefs(data) : [];\n}\n\n/**\n * Resolves references across multiple documents.\n *\n * @param inputs - The documents (and their file paths) to resolve as a set.\n * @returns The reference graph plus any duplicate-id or dangling-ref diagnostics.\n *\n * @example\n * ```ts\n * const { graph, diagnostics } = resolveRefs([{ doc, file: 'docs/orders.md' }]);\n * ```\n */\nexport function resolveRefs(inputs: readonly InputDocument[]): {\n graph: RefGraph;\n diagnostics: Diagnostic[];\n} {\n const diagnostics: Diagnostic[] = [];\n const nodes = new Map<string, { doc: string; block: Segment; file: string; line: number }>();\n\n for (const { doc, file } of inputs) {\n for (const seg of doc.segments) {\n if (seg.kind === 'markdown' || seg.id === undefined) continue;\n const existing = nodes.get(seg.id);\n if (existing) {\n diagnostics.push({\n file,\n line: seg.line,\n level: 'error',\n code: 'E_DUP_ID',\n message: `Duplicate id \"${seg.id}\" (first defined in ${existing.file}:${existing.line})`,\n value: seg.id,\n });\n continue;\n }\n nodes.set(seg.id, { doc: doc.slug, block: seg, file, line: seg.line });\n }\n }\n\n const edges: Array<{ from: string; to: string }> = [];\n\n for (const { doc, file } of inputs) {\n for (const seg of doc.segments) {\n if (seg.kind === 'markdown' || seg.parseError !== undefined || seg.data === undefined) continue;\n const typedSeg = seg as TypedSegment;\n // Safe: we've narrowed away prose; `data` is the parsed YAML and may not\n // strictly match the schema (validation is a separate concern). The\n // extractor is defensive — it only reads `links[].ref` and tolerates\n // missing/oddly-typed values.\n const refs = callExtractRefs(typedSeg.kind, typedSeg.data as BlockDataMap[typeof typedSeg.kind]);\n for (const ref of refs) {\n const match = REF_RE.exec(ref);\n if (!match) {\n diagnostics.push({\n file,\n line: seg.line,\n level: 'error',\n code: 'E_BAD_REF_FORMAT',\n message: `Invalid reference format: \"${ref}\" (expected doc#id or #id)`,\n value: ref,\n });\n continue;\n }\n const targetDoc = match[1] ?? doc.slug;\n const targetId = match[2];\n if (targetId === undefined) continue;\n const node = nodes.get(targetId);\n if (!node || node.doc !== targetDoc) {\n diagnostics.push({\n file,\n line: seg.line,\n level: 'error',\n code: 'E_DANGLING_REF',\n message: `Dangling reference: \"${ref}\" (target not found)`,\n value: ref,\n });\n continue;\n }\n const from = seg.id !== undefined ? `${doc.slug}#${seg.id}` : `${doc.slug}@${seg.line}`;\n edges.push({ from, to: `${targetDoc}#${targetId}` });\n }\n }\n }\n\n const publicNodes = new Map<string, { doc: string; block: Segment }>();\n for (const [id, { doc, block }] of nodes) publicNodes.set(id, { doc, block });\n\n return { graph: { nodes: publicNodes, edges }, diagnostics };\n}\n","/**\n * Avodado core: parser, block schemas, validation, and reference resolver.\n *\n * Pure library — no I/O. Reads strings, returns models and diagnostics.\n *\n * @packageDocumentation\n */\n\nexport const version = '0.0.0';\n\nexport {\n BLOCK_TYPES,\n BLOCK_TYPE_SET,\n type BlockType,\n type Document,\n type MetaData,\n type ProseSegment,\n type Segment,\n type TypedSegment,\n} from './types.js';\n\nexport {\n type Diagnostic,\n type DiagnosticCode,\n type DiagnosticLevel,\n assertNever,\n helpUrl,\n} from './diagnostics.js';\n\nexport { levenshtein, closest } from './suggest.js';\nexport { splitMarkdown, type RawSegment } from './splitter.js';\nexport {\n parseBlockBody,\n locateYamlPath,\n type YamlParseResult,\n type YamlLocation,\n} from './yaml.js';\nexport { parseDocument } from './parser.js';\nexport { validateDocument } from './validate.js';\nexport { resolveRefs, type RefGraph, type InputDocument } from './resolve.js';\n\nexport {\n blockSchemas,\n type BlockDataMap,\n metaSchema,\n calloutSchema,\n tableSchema,\n sequenceSchema,\n erdSchema,\n userstorySchema,\n timelineSchema,\n kanbanSchema,\n trackerSchema,\n proseSchema,\n glossarySchema,\n prosconsSchema,\n cvtSchema,\n statsSchema,\n codeSchema,\n agendaSchema,\n treeSchema,\n pyramidSchema,\n funnelSchema,\n flowSchema,\n stateSchema,\n dfdSchema,\n journeySchema,\n ganttSchema,\n graphSchema,\n quadrantSchema,\n swimlaneSchema,\n c4Schema,\n umlSchema,\n meceSchema,\n frontendSchema,\n clusterSchema,\n blockGraphSchema,\n felogicSchema,\n dagSchema,\n} from './blocks/schemas.js';\n\nexport { blockRegistry, type BlockDef, type BlockRegistry } from './blocks/registry.js';\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@avodado/core",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Avodado core: parser, block schemas, validation, and reference resolver.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md"
|
|
18
|
+
],
|
|
19
|
+
"sideEffects": false,
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"yaml": "^2.6.1",
|
|
22
|
+
"zod": "^3.24.1"
|
|
23
|
+
},
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public",
|
|
26
|
+
"provenance": true
|
|
27
|
+
},
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "git+https://github.com/jdiejim/avodado.git",
|
|
31
|
+
"directory": "packages/core"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://github.com/jdiejim/avodado#readme",
|
|
34
|
+
"bugs": "https://github.com/jdiejim/avodado/issues",
|
|
35
|
+
"keywords": [
|
|
36
|
+
"avodado",
|
|
37
|
+
"documentation",
|
|
38
|
+
"docs-as-code",
|
|
39
|
+
"markdown",
|
|
40
|
+
"yaml",
|
|
41
|
+
"diagrams",
|
|
42
|
+
"parser",
|
|
43
|
+
"schema",
|
|
44
|
+
"zod",
|
|
45
|
+
"validation"
|
|
46
|
+
],
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=20"
|
|
49
|
+
},
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "tsup",
|
|
52
|
+
"typecheck": "tsc --noEmit"
|
|
53
|
+
}
|
|
54
|
+
}
|