@syncropel/projections 0.7.1 → 0.9.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Runtime validators for SRP v0.1 – v0.7 documents.\n *\n * Pure functions — no dependencies. Return a ValidationResult with either a\n * `valid: true` flag or a list of errors keyed by path.\n */\n\nimport type { SRPDocument, SRPNode } from \"./schema.js\";\nimport { NODE_TYPES } from \"./schema.js\";\n\n// ---------------------------------------------------------------------------\n// Result types\n// ---------------------------------------------------------------------------\n\nexport interface ValidationError {\n /** JSON-pointer-style path to the offending node, e.g. \"/root/children/0\". */\n path: string;\n /** Human-readable message. */\n message: string;\n /** Machine-readable code for programmatic handling. */\n code: ValidationErrorCode;\n}\n\nexport type ValidationErrorCode =\n | \"SRP_VERSION_INVALID\"\n | \"ROOT_MISSING\"\n | \"NODE_NOT_OBJECT\"\n | \"NODE_TYPE_MISSING\"\n | \"NODE_TYPE_UNKNOWN\"\n | \"PROPS_MISSING_REQUIRED\"\n | \"PROPS_INVALID_VALUE\"\n | \"CHILDREN_NOT_ARRAY\"\n | \"CHILDREN_NOT_ALLOWED\"\n | \"BIND_MISSING_REQUIRED\"\n | \"BIND_INVALID_SHAPE\";\n\nexport type ValidationResult =\n | { valid: true }\n | { valid: false; errors: ValidationError[] };\n\nclass Collector {\n errors: ValidationError[] = [];\n add(path: string, code: ValidationErrorCode, message: string): void {\n this.errors.push({ path, code, message });\n }\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Validate a full SRP document.\n *\n * Returns `{ valid: true }` when the document conforms to SRP v0.1.\n * Returns `{ valid: false, errors }` with every violation keyed by a\n * JSON-pointer-style path when it doesn't.\n */\nexport function validateSRP(doc: unknown): ValidationResult {\n const c = new Collector();\n\n if (typeof doc !== \"object\" || doc === null) {\n c.add(\"\", \"NODE_NOT_OBJECT\", \"SRP document must be an object\");\n return { valid: false, errors: c.errors };\n }\n\n const d = doc as Record<string, unknown>;\n\n if (\n d.srp !== \"0.1\" &&\n d.srp !== \"0.2\" &&\n d.srp !== \"0.3\" &&\n d.srp !== \"0.4\" &&\n d.srp !== \"0.5\" &&\n d.srp !== \"0.6\" &&\n d.srp !== \"0.7\"\n ) {\n c.add(\n \"/srp\",\n \"SRP_VERSION_INVALID\",\n `srp field must be \"0.1\"–\"0.7\", got ${JSON.stringify(d.srp)}`,\n );\n }\n\n if (!(\"root\" in d)) {\n c.add(\"/root\", \"ROOT_MISSING\", \"SRP document must have a root node\");\n return { valid: false, errors: c.errors };\n }\n\n validateNodeInto(d.root, \"/root\", c);\n\n return c.errors.length === 0\n ? { valid: true }\n : { valid: false, errors: c.errors };\n}\n\n/**\n * Validate a single node (used internally and useful standalone for\n * incremental SRP authoring).\n */\nexport function validateNode(node: unknown, path: string): ValidationResult {\n const c = new Collector();\n validateNodeInto(node, path, c);\n return c.errors.length === 0\n ? { valid: true }\n : { valid: false, errors: c.errors };\n}\n\nfunction validateNodeInto(\n node: unknown,\n path: string,\n c: Collector,\n): void {\n if (typeof node !== \"object\" || node === null) {\n c.add(path, \"NODE_NOT_OBJECT\", `Node at ${path} must be an object`);\n return;\n }\n\n const n = node as Record<string, unknown>;\n\n if (typeof n.type !== \"string\") {\n c.add(\n `${path}/type`,\n \"NODE_TYPE_MISSING\",\n `Node at ${path} must have a string \"type\" field`,\n );\n return;\n }\n\n if (!(NODE_TYPES as readonly string[]).includes(n.type)) {\n c.add(\n `${path}/type`,\n \"NODE_TYPE_UNKNOWN\",\n `Unknown node type \"${n.type}\" at ${path}. Allowed: ${NODE_TYPES.join(\", \")}`,\n );\n return;\n }\n\n // Per-type validation dispatched below\n switch (n.type) {\n case \"column\":\n case \"row\":\n case \"card\":\n validateContainer(n, path, c);\n break;\n case \"grid\":\n validateGrid(n, path, c);\n break;\n case \"divider\":\n validateDivider(n, path, c);\n break;\n case \"record-line\":\n validateRecordLine(n, path, c);\n break;\n case \"record-line-list\":\n validateRecordLineList(n, path, c);\n break;\n case \"chip\":\n validateChip(n, path, c);\n break;\n case \"heading\":\n validateHeading(n, path, c);\n break;\n case \"text\":\n validateText(n, path, c);\n break;\n case \"stat\":\n validateStat(n, path, c);\n break;\n case \"key-value\":\n validateKeyValue(n, path, c);\n break;\n case \"button\":\n validateButton(n, path, c);\n break;\n case \"icon-button\":\n validateIconButton(n, path, c);\n break;\n case \"copy-button\":\n validateCopyButton(n, path, c);\n break;\n case \"select\":\n validateSelect(n, path, c);\n break;\n case \"empty-state\":\n validateEmptyState(n, path, c);\n break;\n case \"error-state\":\n validateErrorState(n, path, c);\n break;\n case \"skeleton\":\n validateSkeleton(n, path, c);\n break;\n case \"tabs\":\n validateTabs(n, path, c);\n break;\n case \"data-table\":\n validateDataTable(n, path, c);\n break;\n case \"board\":\n validateBoard(n, path, c);\n break;\n case \"text-input\":\n validateTextInput(n, path, c);\n break;\n case \"form\":\n validateForm(n, path, c);\n break;\n case \"segmented\":\n validateSegmented(n, path, c);\n break;\n case \"meter\":\n validateMeter(n, path, c);\n break;\n case \"gauge\":\n validateGauge(n, path, c);\n break;\n case \"avatar\":\n validateAvatar(n, path, c);\n break;\n case \"progress\":\n validateProgress(n, path, c);\n break;\n case \"sparkline\":\n validateSparkline(n, path, c);\n break;\n case \"chart\":\n validateChart(n, path, c);\n break;\n case \"tree\":\n validateTree(n, path, c);\n break;\n case \"tag-input\":\n validateTagInput(n, path, c);\n break;\n case \"popover\":\n validatePopover(n, path, c);\n break;\n case \"slider\":\n validateSlider(n, path, c);\n break;\n case \"rating\":\n validateRating(n, path, c);\n break;\n case \"thumbnail\":\n validateThumbnail(n, path, c);\n break;\n case \"facet-grid\":\n validateFacetGrid(n, path, c);\n break;\n case \"column-config\":\n validateColumnConfig(n, path, c);\n break;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Per-node validators\n// ---------------------------------------------------------------------------\n\nfunction validateContainer(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n if (\"children\" in n && n.children !== undefined) {\n if (!Array.isArray(n.children)) {\n c.add(\n `${path}/children`,\n \"CHILDREN_NOT_ARRAY\",\n `${n.type} \"children\" must be an array`,\n );\n } else {\n n.children.forEach((child, i) => {\n validateNodeInto(child, `${path}/children/${i}`, c);\n });\n }\n }\n}\n\nfunction validateGrid(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.cols !== \"number\" || !Number.isInteger(props.cols)) {\n c.add(\n `${path}/props/cols`,\n \"PROPS_MISSING_REQUIRED\",\n `grid requires \"props.cols\" to be an integer`,\n );\n } else if (props.cols < 1 || props.cols > 12) {\n c.add(\n `${path}/props/cols`,\n \"PROPS_INVALID_VALUE\",\n `grid \"props.cols\" must be between 1 and 12, got ${props.cols}`,\n );\n }\n validateContainer(n, path, c);\n}\n\nfunction validateDivider(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n if (\"children\" in n) {\n c.add(\n `${path}/children`,\n \"CHILDREN_NOT_ALLOWED\",\n `divider cannot have children`,\n );\n }\n}\n\nfunction validateRecordLine(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.variant !== \"string\") {\n c.add(\n `${path}/props/variant`,\n \"PROPS_MISSING_REQUIRED\",\n `record-line requires \"props.variant\"`,\n );\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.record !== \"string\") {\n c.add(\n `${path}/bind/record`,\n \"BIND_MISSING_REQUIRED\",\n `record-line requires \"bind.record\" (a record id string)`,\n );\n }\n}\n\nfunction validateRecordLineList(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.variant !== \"string\") {\n c.add(\n `${path}/props/variant`,\n \"PROPS_MISSING_REQUIRED\",\n `record-line-list requires \"props.variant\"`,\n );\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind) {\n c.add(\n `${path}/bind`,\n \"BIND_MISSING_REQUIRED\",\n `record-line-list requires \"bind.query\" or \"bind.items\"`,\n );\n return;\n }\n\n const hasQuery = \"query\" in bind;\n const hasItems = \"items\" in bind;\n if (!hasQuery && !hasItems) {\n c.add(\n `${path}/bind`,\n \"BIND_INVALID_SHAPE\",\n `record-line-list \"bind\" must contain either \"query\" or \"items\"`,\n );\n } else if (hasQuery && hasItems) {\n c.add(\n `${path}/bind`,\n \"BIND_INVALID_SHAPE\",\n `record-line-list \"bind\" cannot contain both \"query\" and \"items\"`,\n );\n } else if (hasItems && !Array.isArray(bind.items)) {\n c.add(\n `${path}/bind/items`,\n \"BIND_INVALID_SHAPE\",\n `record-line-list \"bind.items\" must be an array of record ids`,\n );\n }\n}\n\nfunction validateChip(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.label !== \"string\") {\n c.add(\n `${path}/props/label`,\n \"PROPS_MISSING_REQUIRED\",\n `chip requires \"props.label\"`,\n );\n }\n}\n\nfunction validateHeading(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.level !== \"number\" || !Number.isInteger(props.level)) {\n c.add(\n `${path}/props/level`,\n \"PROPS_MISSING_REQUIRED\",\n `heading requires \"props.level\" to be an integer`,\n );\n } else if (props.level < 1 || props.level > 6) {\n c.add(\n `${path}/props/level`,\n \"PROPS_INVALID_VALUE\",\n `heading \"props.level\" must be 1-6, got ${props.level}`,\n );\n }\n if (typeof props.text !== \"string\") {\n c.add(\n `${path}/props/text`,\n \"PROPS_MISSING_REQUIRED\",\n `heading requires \"props.text\"`,\n );\n }\n}\n\nfunction validateText(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.text !== \"string\") {\n c.add(\n `${path}/props/text`,\n \"PROPS_MISSING_REQUIRED\",\n `text requires \"props.text\"`,\n );\n }\n}\n\nfunction validateStat(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.label !== \"string\") {\n c.add(\n `${path}/props/label`,\n \"PROPS_MISSING_REQUIRED\",\n `stat requires \"props.label\"`,\n );\n }\n if (typeof props.value !== \"string\" && typeof props.value !== \"number\") {\n c.add(\n `${path}/props/value`,\n \"PROPS_MISSING_REQUIRED\",\n `stat requires \"props.value\" (string or number)`,\n );\n }\n}\n\nfunction validateKeyValue(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.label !== \"string\") {\n c.add(\n `${path}/props/label`,\n \"PROPS_MISSING_REQUIRED\",\n `key-value requires \"props.label\"`,\n );\n }\n if (typeof props.value !== \"string\") {\n c.add(\n `${path}/props/value`,\n \"PROPS_MISSING_REQUIRED\",\n `key-value requires \"props.value\"`,\n );\n }\n}\n\nfunction validateButton(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.label !== \"string\") {\n c.add(\n `${path}/props/label`,\n \"PROPS_MISSING_REQUIRED\",\n `button requires \"props.label\"`,\n );\n }\n}\n\nfunction validateIconButton(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.glyph !== \"string\") {\n c.add(\n `${path}/props/glyph`,\n \"PROPS_MISSING_REQUIRED\",\n `icon-button requires \"props.glyph\" (Glyph kind string)`,\n );\n }\n if (typeof props.ariaLabel !== \"string\" || props.ariaLabel.length === 0) {\n c.add(\n `${path}/props/ariaLabel`,\n \"PROPS_MISSING_REQUIRED\",\n `icon-button requires a non-empty \"props.ariaLabel\" (WCAG 2.1 AA)`,\n );\n }\n}\n\nfunction validateCopyButton(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.value !== \"string\") {\n c.add(\n `${path}/props/value`,\n \"PROPS_MISSING_REQUIRED\",\n `copy-button requires \"props.value\"`,\n );\n }\n}\n\nfunction validateSelect(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.options)) {\n c.add(\n `${path}/props/options`,\n \"PROPS_MISSING_REQUIRED\",\n `select requires \"props.options\" (array of {label, value})`,\n );\n return;\n }\n props.options.forEach((opt, i) => {\n if (typeof opt !== \"object\" || opt === null) {\n c.add(\n `${path}/props/options/${i}`,\n \"PROPS_INVALID_VALUE\",\n `select option must be an object`,\n );\n return;\n }\n const o = opt as Record<string, unknown>;\n if (typeof o.label !== \"string\" || typeof o.value !== \"string\") {\n c.add(\n `${path}/props/options/${i}`,\n \"PROPS_INVALID_VALUE\",\n `select option must have string \"label\" and \"value\"`,\n );\n }\n });\n}\n\nfunction validateEmptyState(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.message !== \"string\") {\n c.add(\n `${path}/props/message`,\n \"PROPS_MISSING_REQUIRED\",\n `empty-state requires \"props.message\"`,\n );\n }\n}\n\nfunction validateErrorState(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.message !== \"string\") {\n c.add(\n `${path}/props/message`,\n \"PROPS_MISSING_REQUIRED\",\n `error-state requires \"props.message\"`,\n );\n }\n}\n\nfunction validateSkeleton(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown> | undefined;\n if (props && typeof props.shape === \"string\") {\n const allowed = [\"rect\", \"circle\", \"text\"];\n if (!allowed.includes(props.shape)) {\n c.add(\n `${path}/props/shape`,\n \"PROPS_INVALID_VALUE\",\n `skeleton \"props.shape\" must be one of ${allowed.join(\" | \")}, got ${props.shape}`,\n );\n }\n if (\n props.shape === \"rect\" &&\n props.height === undefined\n ) {\n c.add(\n `${path}/props/height`,\n \"PROPS_MISSING_REQUIRED\",\n `skeleton shape='rect' requires \"props.height\"`,\n );\n }\n }\n\n // Returned silently — suppress unused-param warning\n void n;\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.2 node validators\n// ---------------------------------------------------------------------------\n\nfunction validateTabs(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.tabs) || props.tabs.length === 0) {\n c.add(\n `${path}/props/tabs`,\n \"PROPS_MISSING_REQUIRED\",\n `tabs requires a non-empty \"props.tabs\" array`,\n );\n } else {\n props.tabs.forEach((tab, i) => {\n if (typeof tab !== \"object\" || tab === null) {\n c.add(\n `${path}/props/tabs/${i}`,\n \"PROPS_INVALID_VALUE\",\n `tab must be an object`,\n );\n return;\n }\n const t = tab as Record<string, unknown>;\n if (typeof t.id !== \"string\" || typeof t.label !== \"string\") {\n c.add(\n `${path}/props/tabs/${i}`,\n \"PROPS_INVALID_VALUE\",\n `tab must have string \"id\" and \"label\"`,\n );\n }\n });\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.active !== \"string\") {\n c.add(\n `${path}/bind/active`,\n \"BIND_MISSING_REQUIRED\",\n `tabs requires \"bind.active\" (a tab id string)`,\n );\n }\n\n // Children are the panels — validated recursively.\n validateContainer(n, path, c);\n}\n\nfunction validateDataTable(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.columns) || props.columns.length === 0) {\n c.add(\n `${path}/props/columns`,\n \"PROPS_MISSING_REQUIRED\",\n `data-table requires a non-empty \"props.columns\" array`,\n );\n } else {\n props.columns.forEach((col, i) => {\n if (typeof col !== \"object\" || col === null) {\n c.add(\n `${path}/props/columns/${i}`,\n \"PROPS_INVALID_VALUE\",\n `data-table column must be an object`,\n );\n return;\n }\n const o = col as Record<string, unknown>;\n if (typeof o.key !== \"string\" || typeof o.label !== \"string\") {\n c.add(\n `${path}/props/columns/${i}`,\n \"PROPS_INVALID_VALUE\",\n `data-table column must have string \"key\" and \"label\"`,\n );\n }\n if (\n o.kind !== undefined &&\n o.kind !== \"text\" &&\n o.kind !== \"chip\" &&\n o.kind !== \"lines\" &&\n o.kind !== \"meter\" &&\n o.kind !== \"rating\" &&\n o.kind !== \"thumbnail\"\n ) {\n c.add(\n `${path}/props/columns/${i}/kind`,\n \"PROPS_INVALID_VALUE\",\n `data-table column \"kind\" must be one of text | chip | lines | meter | rating | thumbnail`,\n );\n }\n if (o.thresholds !== undefined && !Array.isArray(o.thresholds)) {\n c.add(\n `${path}/props/columns/${i}/thresholds`,\n \"PROPS_INVALID_VALUE\",\n `data-table column \"thresholds\" must be an array of {at, tone}`,\n );\n }\n if (o.max !== undefined && typeof o.max !== \"number\") {\n c.add(\n `${path}/props/columns/${i}/max`,\n \"PROPS_INVALID_VALUE\",\n `data-table column \"max\" must be a number`,\n );\n }\n if (o.subKey !== undefined && typeof o.subKey !== \"string\") {\n c.add(\n `${path}/props/columns/${i}/subKey`,\n \"PROPS_INVALID_VALUE\",\n `data-table column \"subKey\" must be a string`,\n );\n }\n // SRP v0.3 — optional column props.\n if (\n o.tones !== undefined &&\n (typeof o.tones !== \"object\" ||\n o.tones === null ||\n Array.isArray(o.tones))\n ) {\n c.add(\n `${path}/props/columns/${i}/tones`,\n \"PROPS_INVALID_VALUE\",\n `data-table column \"tones\" must be an object mapping value → tone`,\n );\n }\n if (\n o.order !== undefined &&\n (!Array.isArray(o.order) ||\n !o.order.every((v) => typeof v === \"string\"))\n ) {\n c.add(\n `${path}/props/columns/${i}/order`,\n \"PROPS_INVALID_VALUE\",\n `data-table column \"order\" must be an array of strings`,\n );\n }\n });\n }\n\n // SRP v0.3 — optional data-grid props.\n validateDataTableV3Props(props, path, c);\n\n // SRP v0.5 — sticky columns.\n if (\n props.stickyColumns !== undefined &&\n (typeof props.stickyColumns !== \"number\" || props.stickyColumns < 0)\n ) {\n c.add(\n `${path}/props/stickyColumns`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"stickyColumns\" must be a non-negative number`,\n );\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind) {\n c.add(\n `${path}/bind`,\n \"BIND_MISSING_REQUIRED\",\n `data-table requires \"bind.query\" or \"bind.rows\"`,\n );\n return;\n }\n const hasQuery = \"query\" in bind;\n const hasRows = \"rows\" in bind;\n if (!hasQuery && !hasRows) {\n c.add(\n `${path}/bind`,\n \"BIND_INVALID_SHAPE\",\n `data-table \"bind\" must contain either \"query\" or \"rows\"`,\n );\n } else if (hasQuery && hasRows) {\n c.add(\n `${path}/bind`,\n \"BIND_INVALID_SHAPE\",\n `data-table \"bind\" cannot contain both \"query\" and \"rows\"`,\n );\n } else if (hasRows && !Array.isArray(bind.rows)) {\n c.add(\n `${path}/bind/rows`,\n \"BIND_INVALID_SHAPE\",\n `data-table \"bind.rows\" must be an array of row objects`,\n );\n }\n}\n\nfunction validateBoard(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.columns) || props.columns.length === 0) {\n c.add(\n `${path}/props/columns`,\n \"PROPS_MISSING_REQUIRED\",\n `board requires a non-empty \"props.columns\" array`,\n );\n } else {\n props.columns.forEach((col, i) => {\n if (typeof col !== \"object\" || col === null) {\n c.add(\n `${path}/props/columns/${i}`,\n \"PROPS_INVALID_VALUE\",\n `board column must be an object`,\n );\n return;\n }\n const o = col as Record<string, unknown>;\n if (typeof o.id !== \"string\" || typeof o.label !== \"string\") {\n c.add(\n `${path}/props/columns/${i}`,\n \"PROPS_INVALID_VALUE\",\n `board column must have string \"id\" and \"label\"`,\n );\n }\n });\n }\n\n if (typeof props.groupBy !== \"string\") {\n c.add(\n `${path}/props/groupBy`,\n \"PROPS_MISSING_REQUIRED\",\n `board requires \"props.groupBy\" (a record field name)`,\n );\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.query !== \"object\" || bind.query === null) {\n c.add(\n `${path}/bind/query`,\n \"BIND_MISSING_REQUIRED\",\n `board requires \"bind.query\" (a VQL query object)`,\n );\n }\n}\n\nfunction validateTextInput(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.value !== \"string\") {\n c.add(\n `${path}/bind/value`,\n \"BIND_MISSING_REQUIRED\",\n `text-input requires \"bind.value\" (a string)`,\n );\n }\n\n const props = n.props as Record<string, unknown> | undefined;\n if (props && props.inputKind !== undefined) {\n const allowed = [\"text\", \"search\"];\n if (\n typeof props.inputKind !== \"string\" ||\n !allowed.includes(props.inputKind)\n ) {\n c.add(\n `${path}/props/inputKind`,\n \"PROPS_INVALID_VALUE\",\n `text-input \"props.inputKind\" must be one of ${allowed.join(\" | \")}`,\n );\n }\n }\n}\n\nfunction validateForm(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n // A form is a pure container — its inputs are validated recursively.\n validateContainer(n, path, c);\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.3 node validators\n// ---------------------------------------------------------------------------\n\n/** Validate the optional SRP v0.3 props on a `data-table`. */\nfunction validateDataTableV3Props(\n props: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n if (props.defaultSort !== undefined) {\n const ds = props.defaultSort as Record<string, unknown>;\n if (typeof ds !== \"object\" || ds === null) {\n c.add(\n `${path}/props/defaultSort`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"defaultSort\" must be an object {key, direction}`,\n );\n } else {\n if (typeof ds.key !== \"string\") {\n c.add(\n `${path}/props/defaultSort/key`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"defaultSort.key\" must be a string`,\n );\n }\n if (ds.direction !== \"asc\" && ds.direction !== \"desc\") {\n c.add(\n `${path}/props/defaultSort/direction`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"defaultSort.direction\" must be \"asc\" or \"desc\"`,\n );\n }\n }\n }\n\n if (props.rowActions !== undefined) {\n if (!Array.isArray(props.rowActions)) {\n c.add(\n `${path}/props/rowActions`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"rowActions\" must be an array`,\n );\n } else {\n props.rowActions.forEach((action, i) => {\n if (typeof action !== \"object\" || action === null) {\n c.add(\n `${path}/props/rowActions/${i}`,\n \"PROPS_INVALID_VALUE\",\n `data-table rowAction must be an object`,\n );\n return;\n }\n const a = action as Record<string, unknown>;\n if (typeof a.intent !== \"string\") {\n c.add(\n `${path}/props/rowActions/${i}/intent`,\n \"PROPS_INVALID_VALUE\",\n `data-table rowAction requires a string \"intent\"`,\n );\n }\n if (\n a.position !== undefined &&\n a.position !== \"leading\" &&\n a.position !== \"trailing\"\n ) {\n c.add(\n `${path}/props/rowActions/${i}/position`,\n \"PROPS_INVALID_VALUE\",\n `data-table rowAction \"position\" must be \"leading\" or \"trailing\"`,\n );\n }\n });\n }\n }\n\n if (props.rowTone !== undefined) {\n const rt = props.rowTone as Record<string, unknown>;\n if (typeof rt !== \"object\" || rt === null) {\n c.add(\n `${path}/props/rowTone`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"rowTone\" must be an object {key, tones}`,\n );\n } else {\n if (typeof rt.key !== \"string\") {\n c.add(\n `${path}/props/rowTone/key`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"rowTone.key\" must be a string`,\n );\n }\n if (\n typeof rt.tones !== \"object\" ||\n rt.tones === null ||\n Array.isArray(rt.tones)\n ) {\n c.add(\n `${path}/props/rowTone/tones`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"rowTone.tones\" must be an object mapping value → tone`,\n );\n }\n }\n }\n}\n\nfunction validateSegmented(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.options) || props.options.length === 0) {\n c.add(\n `${path}/props/options`,\n \"PROPS_MISSING_REQUIRED\",\n `segmented requires a non-empty \"props.options\" array`,\n );\n } else {\n props.options.forEach((opt, i) => {\n if (typeof opt !== \"object\" || opt === null) {\n c.add(\n `${path}/props/options/${i}`,\n \"PROPS_INVALID_VALUE\",\n `segmented option must be an object`,\n );\n return;\n }\n const o = opt as Record<string, unknown>;\n if (typeof o.value !== \"string\" || typeof o.label !== \"string\") {\n c.add(\n `${path}/props/options/${i}`,\n \"PROPS_INVALID_VALUE\",\n `segmented option must have string \"value\" and \"label\"`,\n );\n }\n });\n }\n\n if (props.variant !== undefined &&\n props.variant !== \"solid\" &&\n props.variant !== \"underline\") {\n c.add(\n `${path}/props/variant`,\n \"PROPS_INVALID_VALUE\",\n `segmented \"props.variant\" must be \"solid\" or \"underline\"`,\n );\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.value !== \"string\") {\n c.add(\n `${path}/bind/value`,\n \"BIND_MISSING_REQUIRED\",\n `segmented requires \"bind.value\" (a string)`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.4 node validators\n// ---------------------------------------------------------------------------\n\nconst VIZ_TONES = [\"neutral\", \"accent\", \"success\", \"warn\", \"error\", \"info\"];\n\nfunction validateMeter(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.value !== \"number\") {\n c.add(\n `${path}/props/value`,\n \"PROPS_MISSING_REQUIRED\",\n `meter requires \"props.value\" (a number 0..1)`,\n );\n }\n if (\n props.variant !== undefined &&\n props.variant !== \"continuous\" &&\n props.variant !== \"segmented\"\n ) {\n c.add(\n `${path}/props/variant`,\n \"PROPS_INVALID_VALUE\",\n `meter \"props.variant\" must be \"continuous\" or \"segmented\"`,\n );\n }\n if (props.thresholds !== undefined && !Array.isArray(props.thresholds)) {\n c.add(\n `${path}/props/thresholds`,\n \"PROPS_INVALID_VALUE\",\n `meter \"props.thresholds\" must be an array of {at, tone}`,\n );\n }\n if (\n props.tone !== undefined &&\n (typeof props.tone !== \"string\" || !VIZ_TONES.includes(props.tone))\n ) {\n c.add(\n `${path}/props/tone`,\n \"PROPS_INVALID_VALUE\",\n `meter \"props.tone\" must be one of ${VIZ_TONES.join(\" | \")}`,\n );\n }\n}\n\nfunction validateGauge(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.value !== \"number\") {\n c.add(\n `${path}/props/value`,\n \"PROPS_MISSING_REQUIRED\",\n `gauge requires \"props.value\" (a number 0..1)`,\n );\n }\n if (props.zones !== undefined && !Array.isArray(props.zones)) {\n c.add(\n `${path}/props/zones`,\n \"PROPS_INVALID_VALUE\",\n `gauge \"props.zones\" must be an array of {from, to, tone}`,\n );\n }\n if (\n props.format !== undefined &&\n props.format !== \"percent\" &&\n props.format !== \"decimal\"\n ) {\n c.add(\n `${path}/props/format`,\n \"PROPS_INVALID_VALUE\",\n `gauge \"props.format\" must be \"percent\" or \"decimal\"`,\n );\n }\n}\n\nfunction validateAvatar(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.name !== \"string\" || props.name.length === 0) {\n c.add(\n `${path}/props/name`,\n \"PROPS_MISSING_REQUIRED\",\n `avatar requires a non-empty \"props.name\"`,\n );\n }\n}\n\nfunction validateProgress(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = n.props as Record<string, unknown> | undefined;\n if (props && props.value !== undefined && typeof props.value !== \"number\") {\n c.add(\n `${path}/props/value`,\n \"PROPS_INVALID_VALUE\",\n `progress \"props.value\" must be a number 0..1`,\n );\n }\n}\n\nfunction validateSparkline(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (\n !Array.isArray(props.values) ||\n !props.values.every((v) => typeof v === \"number\")\n ) {\n c.add(\n `${path}/props/values`,\n \"PROPS_MISSING_REQUIRED\",\n `sparkline requires \"props.values\" (an array of numbers)`,\n );\n }\n if (\n props.variant !== undefined &&\n props.variant !== \"line\" &&\n props.variant !== \"bar\"\n ) {\n c.add(\n `${path}/props/variant`,\n \"PROPS_INVALID_VALUE\",\n `sparkline \"props.variant\" must be \"line\" or \"bar\"`,\n );\n }\n}\n\nfunction validateChart(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n const kinds = [\"line\", \"area\", \"bar\", \"pie\"];\n if (typeof props.kind !== \"string\" || !kinds.includes(props.kind)) {\n c.add(\n `${path}/props/kind`,\n \"PROPS_MISSING_REQUIRED\",\n `chart requires \"props.kind\" — one of ${kinds.join(\" | \")}`,\n );\n }\n if (!Array.isArray(props.series) || props.series.length === 0) {\n c.add(\n `${path}/props/series`,\n \"PROPS_MISSING_REQUIRED\",\n `chart requires a non-empty \"props.series\" array`,\n );\n return;\n }\n props.series.forEach((s, i) => {\n if (typeof s !== \"object\" || s === null) {\n c.add(\n `${path}/props/series/${i}`,\n \"PROPS_INVALID_VALUE\",\n `chart series must be an object`,\n );\n return;\n }\n if (!Array.isArray((s as Record<string, unknown>).points)) {\n c.add(\n `${path}/props/series/${i}/points`,\n \"PROPS_INVALID_VALUE\",\n `chart series requires a \"points\" array`,\n );\n }\n });\n}\n\nfunction validateTreeItems(\n items: unknown[],\n path: string,\n c: Collector,\n): void {\n items.forEach((item, i) => {\n if (typeof item !== \"object\" || item === null) {\n c.add(\n `${path}/${i}`,\n \"PROPS_INVALID_VALUE\",\n `tree item must be an object`,\n );\n return;\n }\n const it = item as Record<string, unknown>;\n if (typeof it.id !== \"string\" || typeof it.label !== \"string\") {\n c.add(\n `${path}/${i}`,\n \"PROPS_INVALID_VALUE\",\n `tree item must have string \"id\" and \"label\"`,\n );\n }\n if (it.children !== undefined) {\n if (!Array.isArray(it.children)) {\n c.add(\n `${path}/${i}/children`,\n \"PROPS_INVALID_VALUE\",\n `tree item \"children\" must be an array`,\n );\n } else {\n validateTreeItems(it.children, `${path}/${i}/children`, c);\n }\n }\n });\n}\n\nfunction validateTree(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.items)) {\n c.add(\n `${path}/props/items`,\n \"PROPS_MISSING_REQUIRED\",\n `tree requires \"props.items\" (an array of tree items)`,\n );\n return;\n }\n validateTreeItems(props.items, `${path}/props/items`, c);\n}\n\nfunction validateTagInput(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const bind = n.bind as Record<string, unknown> | undefined;\n if (\n !bind ||\n !Array.isArray(bind.tags) ||\n !bind.tags.every((t) => typeof t === \"string\")\n ) {\n c.add(\n `${path}/bind/tags`,\n \"BIND_MISSING_REQUIRED\",\n `tag-input requires \"bind.tags\" (an array of strings)`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.5 node validators\n// ---------------------------------------------------------------------------\n\nconst POPOVER_ALIGNS = [\"start\", \"center\", \"end\"];\nconst THUMBNAIL_RADII = [\"none\", \"sm\", \"md\", \"lg\", \"full\"];\nconst THUMBNAIL_ASPECTS = [\"square\", \"video\", \"wide\"];\n\nfunction validatePopover(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.label !== \"string\" || props.label.length === 0) {\n c.add(\n `${path}/props/label`,\n \"PROPS_MISSING_REQUIRED\",\n `popover requires a non-empty \"props.label\"`,\n );\n }\n if (\n props.align !== undefined &&\n (typeof props.align !== \"string\" ||\n !POPOVER_ALIGNS.includes(props.align))\n ) {\n c.add(\n `${path}/props/align`,\n \"PROPS_INVALID_VALUE\",\n `popover \"props.align\" must be one of ${POPOVER_ALIGNS.join(\" | \")}`,\n );\n }\n if (\"children\" in n && n.children !== undefined && !Array.isArray(n.children)) {\n c.add(\n `${path}/children`,\n \"CHILDREN_NOT_ARRAY\",\n `popover \"children\" must be an array`,\n );\n }\n}\n\nfunction validateSlider(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.min !== \"number\" || typeof props.max !== \"number\") {\n c.add(\n `${path}/props`,\n \"PROPS_MISSING_REQUIRED\",\n `slider requires numeric \"props.min\" and \"props.max\"`,\n );\n }\n if (\n props.tone !== undefined &&\n (typeof props.tone !== \"string\" || !VIZ_TONES.includes(props.tone))\n ) {\n c.add(\n `${path}/props/tone`,\n \"PROPS_INVALID_VALUE\",\n `slider \"props.tone\" must be one of ${VIZ_TONES.join(\" | \")}`,\n );\n }\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.value !== \"number\") {\n c.add(\n `${path}/bind/value`,\n \"BIND_MISSING_REQUIRED\",\n `slider requires \"bind.value\" (a number)`,\n );\n }\n}\n\nfunction validateRating(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (props.max !== undefined && typeof props.max !== \"number\") {\n c.add(\n `${path}/props/max`,\n \"PROPS_INVALID_VALUE\",\n `rating \"props.max\" must be a number`,\n );\n }\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.value !== \"number\") {\n c.add(\n `${path}/bind/value`,\n \"BIND_MISSING_REQUIRED\",\n `rating requires \"bind.value\" (a number)`,\n );\n }\n}\n\nfunction validateThumbnail(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.alt !== \"string\" || props.alt.length === 0) {\n c.add(\n `${path}/props/alt`,\n \"PROPS_MISSING_REQUIRED\",\n `thumbnail requires a non-empty \"props.alt\"`,\n );\n }\n if (\n props.radius !== undefined &&\n (typeof props.radius !== \"string\" ||\n !THUMBNAIL_RADII.includes(props.radius))\n ) {\n c.add(\n `${path}/props/radius`,\n \"PROPS_INVALID_VALUE\",\n `thumbnail \"props.radius\" must be one of ${THUMBNAIL_RADII.join(\" | \")}`,\n );\n }\n if (\n props.aspect !== undefined &&\n (typeof props.aspect !== \"string\" ||\n !THUMBNAIL_ASPECTS.includes(props.aspect))\n ) {\n c.add(\n `${path}/props/aspect`,\n \"PROPS_INVALID_VALUE\",\n `thumbnail \"props.aspect\" must be one of ${THUMBNAIL_ASPECTS.join(\" | \")}`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.6 node validators\n// ---------------------------------------------------------------------------\n\nfunction validateFacetGrid(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.facets) || props.facets.length === 0) {\n c.add(\n `${path}/props/facets`,\n \"PROPS_MISSING_REQUIRED\",\n `facet-grid requires a non-empty \"props.facets\" array`,\n );\n } else {\n props.facets.forEach((facet, i) => {\n if (typeof facet !== \"object\" || facet === null) {\n c.add(\n `${path}/props/facets/${i}`,\n \"PROPS_INVALID_VALUE\",\n `facet-grid facet must be an object`,\n );\n return;\n }\n const f = facet as Record<string, unknown>;\n if (typeof f.id !== \"string\" || typeof f.label !== \"string\") {\n c.add(\n `${path}/props/facets/${i}`,\n \"PROPS_INVALID_VALUE\",\n `facet-grid facet must have string \"id\" and \"label\"`,\n );\n }\n if (!Array.isArray(f.options)) {\n c.add(\n `${path}/props/facets/${i}/options`,\n \"PROPS_INVALID_VALUE\",\n `facet-grid facet \"options\" must be an array`,\n );\n }\n });\n }\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.active !== \"string\") {\n c.add(\n `${path}/bind/active`,\n \"BIND_MISSING_REQUIRED\",\n `facet-grid requires \"bind.active\" (the active category id)`,\n );\n }\n}\n\nfunction validateColumnConfig(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.columns) || props.columns.length === 0) {\n c.add(\n `${path}/props/columns`,\n \"PROPS_MISSING_REQUIRED\",\n `column-config requires a non-empty \"props.columns\" array`,\n );\n } else {\n props.columns.forEach((col, i) => {\n if (\n typeof col !== \"object\" ||\n col === null ||\n typeof (col as Record<string, unknown>).id !== \"string\" ||\n typeof (col as Record<string, unknown>).label !== \"string\"\n ) {\n c.add(\n `${path}/props/columns/${i}`,\n \"PROPS_INVALID_VALUE\",\n `column-config column must have string \"id\" and \"label\"`,\n );\n }\n });\n }\n if (props.presets !== undefined && !Array.isArray(props.presets)) {\n c.add(\n `${path}/props/presets`,\n \"PROPS_INVALID_VALUE\",\n `column-config \"props.presets\" must be an array`,\n );\n }\n const bind = n.bind as Record<string, unknown> | undefined;\n if (\n !bind ||\n !Array.isArray(bind.visible) ||\n !bind.visible.every((v) => typeof v === \"string\")\n ) {\n c.add(\n `${path}/bind/visible`,\n \"BIND_MISSING_REQUIRED\",\n `column-config requires \"bind.visible\" (an array of column ids)`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers for library consumers\n// ---------------------------------------------------------------------------\n\n/**\n * Type guard: true when `doc` is a well-formed SRP document.\n * Useful in adapter code that receives untrusted JSON.\n */\nexport function isSRPDocument(doc: unknown): doc is SRPDocument {\n const result = validateSRP(doc);\n return result.valid;\n}\n\n/**\n * Type guard: true when `node` is a well-formed SRP node.\n */\nexport function isSRPNode(node: unknown): node is SRPNode {\n const result = validateNode(node, \"\");\n return result.valid;\n}\n"]}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Runtime validators for SRP v0.1 – v0.8 documents.\n *\n * Pure functions — no dependencies. Return a ValidationResult with either a\n * `valid: true` flag or a list of errors keyed by path. v0.8 adds five\n * visual-atom validators (glyph, status-dot, pulse, link, code) — per\n * ADR-119; all additive.\n */\n\nimport type { SRPDocument, SRPNode } from \"./schema.js\";\nimport { NODE_TYPES } from \"./schema.js\";\n\n// ---------------------------------------------------------------------------\n// Result types\n// ---------------------------------------------------------------------------\n\nexport interface ValidationError {\n /** JSON-pointer-style path to the offending node, e.g. \"/root/children/0\". */\n path: string;\n /** Human-readable message. */\n message: string;\n /** Machine-readable code for programmatic handling. */\n code: ValidationErrorCode;\n}\n\nexport type ValidationErrorCode =\n | \"SRP_VERSION_INVALID\"\n | \"ROOT_MISSING\"\n | \"NODE_NOT_OBJECT\"\n | \"NODE_TYPE_MISSING\"\n | \"NODE_TYPE_UNKNOWN\"\n | \"PROPS_MISSING_REQUIRED\"\n | \"PROPS_INVALID_VALUE\"\n | \"CHILDREN_NOT_ARRAY\"\n | \"CHILDREN_NOT_ALLOWED\"\n | \"BIND_MISSING_REQUIRED\"\n | \"BIND_INVALID_SHAPE\";\n\nexport type ValidationResult =\n | { valid: true }\n | { valid: false; errors: ValidationError[] };\n\nclass Collector {\n errors: ValidationError[] = [];\n add(path: string, code: ValidationErrorCode, message: string): void {\n this.errors.push({ path, code, message });\n }\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Validate a full SRP document.\n *\n * Returns `{ valid: true }` when the document conforms to SRP v0.1.\n * Returns `{ valid: false, errors }` with every violation keyed by a\n * JSON-pointer-style path when it doesn't.\n */\nexport function validateSRP(doc: unknown): ValidationResult {\n const c = new Collector();\n\n if (typeof doc !== \"object\" || doc === null) {\n c.add(\"\", \"NODE_NOT_OBJECT\", \"SRP document must be an object\");\n return { valid: false, errors: c.errors };\n }\n\n const d = doc as Record<string, unknown>;\n\n if (\n d.srp !== \"0.1\" &&\n d.srp !== \"0.2\" &&\n d.srp !== \"0.3\" &&\n d.srp !== \"0.4\" &&\n d.srp !== \"0.5\" &&\n d.srp !== \"0.6\" &&\n d.srp !== \"0.7\" &&\n d.srp !== \"0.8\" &&\n d.srp !== \"0.9\"\n ) {\n c.add(\n \"/srp\",\n \"SRP_VERSION_INVALID\",\n `srp field must be \"0.1\"–\"0.9\", got ${JSON.stringify(d.srp)}`,\n );\n }\n\n if (!(\"root\" in d)) {\n c.add(\"/root\", \"ROOT_MISSING\", \"SRP document must have a root node\");\n return { valid: false, errors: c.errors };\n }\n\n validateNodeInto(d.root, \"/root\", c);\n\n return c.errors.length === 0\n ? { valid: true }\n : { valid: false, errors: c.errors };\n}\n\n/**\n * Validate a single node (used internally and useful standalone for\n * incremental SRP authoring).\n */\nexport function validateNode(node: unknown, path: string): ValidationResult {\n const c = new Collector();\n validateNodeInto(node, path, c);\n return c.errors.length === 0\n ? { valid: true }\n : { valid: false, errors: c.errors };\n}\n\nfunction validateNodeInto(\n node: unknown,\n path: string,\n c: Collector,\n): void {\n if (typeof node !== \"object\" || node === null) {\n c.add(path, \"NODE_NOT_OBJECT\", `Node at ${path} must be an object`);\n return;\n }\n\n const n = node as Record<string, unknown>;\n\n if (typeof n.type !== \"string\") {\n c.add(\n `${path}/type`,\n \"NODE_TYPE_MISSING\",\n `Node at ${path} must have a string \"type\" field`,\n );\n return;\n }\n\n if (!(NODE_TYPES as readonly string[]).includes(n.type)) {\n c.add(\n `${path}/type`,\n \"NODE_TYPE_UNKNOWN\",\n `Unknown node type \"${n.type}\" at ${path}. Allowed: ${NODE_TYPES.join(\", \")}`,\n );\n return;\n }\n\n // Per-type validation dispatched below\n switch (n.type) {\n case \"column\":\n case \"row\":\n case \"card\":\n validateContainer(n, path, c);\n break;\n case \"grid\":\n validateGrid(n, path, c);\n break;\n case \"divider\":\n validateDivider(n, path, c);\n break;\n case \"record-line\":\n validateRecordLine(n, path, c);\n break;\n case \"record-line-list\":\n validateRecordLineList(n, path, c);\n break;\n case \"chip\":\n validateChip(n, path, c);\n break;\n case \"heading\":\n validateHeading(n, path, c);\n break;\n case \"text\":\n validateText(n, path, c);\n break;\n case \"stat\":\n validateStat(n, path, c);\n break;\n case \"key-value\":\n validateKeyValue(n, path, c);\n break;\n case \"button\":\n validateButton(n, path, c);\n break;\n case \"icon-button\":\n validateIconButton(n, path, c);\n break;\n case \"copy-button\":\n validateCopyButton(n, path, c);\n break;\n case \"select\":\n validateSelect(n, path, c);\n break;\n case \"empty-state\":\n validateEmptyState(n, path, c);\n break;\n case \"error-state\":\n validateErrorState(n, path, c);\n break;\n case \"skeleton\":\n validateSkeleton(n, path, c);\n break;\n case \"tabs\":\n validateTabs(n, path, c);\n break;\n case \"data-table\":\n validateDataTable(n, path, c);\n break;\n case \"board\":\n validateBoard(n, path, c);\n break;\n case \"text-input\":\n validateTextInput(n, path, c);\n break;\n case \"form\":\n validateForm(n, path, c);\n break;\n case \"segmented\":\n validateSegmented(n, path, c);\n break;\n case \"meter\":\n validateMeter(n, path, c);\n break;\n case \"gauge\":\n validateGauge(n, path, c);\n break;\n case \"avatar\":\n validateAvatar(n, path, c);\n break;\n case \"progress\":\n validateProgress(n, path, c);\n break;\n case \"sparkline\":\n validateSparkline(n, path, c);\n break;\n case \"chart\":\n validateChart(n, path, c);\n break;\n case \"tree\":\n validateTree(n, path, c);\n break;\n case \"tag-input\":\n validateTagInput(n, path, c);\n break;\n case \"popover\":\n validatePopover(n, path, c);\n break;\n case \"slider\":\n validateSlider(n, path, c);\n break;\n case \"rating\":\n validateRating(n, path, c);\n break;\n case \"thumbnail\":\n validateThumbnail(n, path, c);\n break;\n case \"facet-grid\":\n validateFacetGrid(n, path, c);\n break;\n case \"column-config\":\n validateColumnConfig(n, path, c);\n break;\n // SRP v0.8 — visual atoms\n case \"glyph\":\n validateGlyph(n, path, c);\n break;\n case \"status-dot\":\n validateStatusDot(n, path, c);\n break;\n case \"pulse\":\n validatePulse(n, path, c);\n break;\n case \"link\":\n validateLink(n, path, c);\n break;\n case \"code\":\n validateCode(n, path, c);\n break;\n case \"toggle\":\n validateToggle(n, path, c);\n break;\n case \"accordion\":\n validateAccordion(n, path, c);\n break;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Per-node validators\n// ---------------------------------------------------------------------------\n\nfunction validateContainer(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n if (\"children\" in n && n.children !== undefined) {\n if (!Array.isArray(n.children)) {\n c.add(\n `${path}/children`,\n \"CHILDREN_NOT_ARRAY\",\n `${n.type} \"children\" must be an array`,\n );\n } else {\n n.children.forEach((child, i) => {\n validateNodeInto(child, `${path}/children/${i}`, c);\n });\n }\n }\n}\n\nfunction validateGrid(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.cols !== \"number\" || !Number.isInteger(props.cols)) {\n c.add(\n `${path}/props/cols`,\n \"PROPS_MISSING_REQUIRED\",\n `grid requires \"props.cols\" to be an integer`,\n );\n } else if (props.cols < 1 || props.cols > 12) {\n c.add(\n `${path}/props/cols`,\n \"PROPS_INVALID_VALUE\",\n `grid \"props.cols\" must be between 1 and 12, got ${props.cols}`,\n );\n }\n validateContainer(n, path, c);\n}\n\nfunction validateDivider(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n if (\"children\" in n) {\n c.add(\n `${path}/children`,\n \"CHILDREN_NOT_ALLOWED\",\n `divider cannot have children`,\n );\n }\n}\n\nfunction validateRecordLine(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.variant !== \"string\") {\n c.add(\n `${path}/props/variant`,\n \"PROPS_MISSING_REQUIRED\",\n `record-line requires \"props.variant\"`,\n );\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.record !== \"string\") {\n c.add(\n `${path}/bind/record`,\n \"BIND_MISSING_REQUIRED\",\n `record-line requires \"bind.record\" (a record id string)`,\n );\n }\n}\n\nfunction validateRecordLineList(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.variant !== \"string\") {\n c.add(\n `${path}/props/variant`,\n \"PROPS_MISSING_REQUIRED\",\n `record-line-list requires \"props.variant\"`,\n );\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind) {\n c.add(\n `${path}/bind`,\n \"BIND_MISSING_REQUIRED\",\n `record-line-list requires \"bind.query\" or \"bind.items\"`,\n );\n return;\n }\n\n const hasQuery = \"query\" in bind;\n const hasItems = \"items\" in bind;\n if (!hasQuery && !hasItems) {\n c.add(\n `${path}/bind`,\n \"BIND_INVALID_SHAPE\",\n `record-line-list \"bind\" must contain either \"query\" or \"items\"`,\n );\n } else if (hasQuery && hasItems) {\n c.add(\n `${path}/bind`,\n \"BIND_INVALID_SHAPE\",\n `record-line-list \"bind\" cannot contain both \"query\" and \"items\"`,\n );\n } else if (hasItems && !Array.isArray(bind.items)) {\n c.add(\n `${path}/bind/items`,\n \"BIND_INVALID_SHAPE\",\n `record-line-list \"bind.items\" must be an array of record ids`,\n );\n }\n}\n\nfunction validateChip(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.label !== \"string\") {\n c.add(\n `${path}/props/label`,\n \"PROPS_MISSING_REQUIRED\",\n `chip requires \"props.label\"`,\n );\n }\n}\n\nfunction validateHeading(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.level !== \"number\" || !Number.isInteger(props.level)) {\n c.add(\n `${path}/props/level`,\n \"PROPS_MISSING_REQUIRED\",\n `heading requires \"props.level\" to be an integer`,\n );\n } else if (props.level < 1 || props.level > 6) {\n c.add(\n `${path}/props/level`,\n \"PROPS_INVALID_VALUE\",\n `heading \"props.level\" must be 1-6, got ${props.level}`,\n );\n }\n if (typeof props.text !== \"string\") {\n c.add(\n `${path}/props/text`,\n \"PROPS_MISSING_REQUIRED\",\n `heading requires \"props.text\"`,\n );\n }\n}\n\nfunction validateText(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.text !== \"string\") {\n c.add(\n `${path}/props/text`,\n \"PROPS_MISSING_REQUIRED\",\n `text requires \"props.text\"`,\n );\n }\n}\n\nfunction validateStat(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.label !== \"string\") {\n c.add(\n `${path}/props/label`,\n \"PROPS_MISSING_REQUIRED\",\n `stat requires \"props.label\"`,\n );\n }\n if (typeof props.value !== \"string\" && typeof props.value !== \"number\") {\n c.add(\n `${path}/props/value`,\n \"PROPS_MISSING_REQUIRED\",\n `stat requires \"props.value\" (string or number)`,\n );\n }\n}\n\nfunction validateKeyValue(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.label !== \"string\") {\n c.add(\n `${path}/props/label`,\n \"PROPS_MISSING_REQUIRED\",\n `key-value requires \"props.label\"`,\n );\n }\n if (typeof props.value !== \"string\") {\n c.add(\n `${path}/props/value`,\n \"PROPS_MISSING_REQUIRED\",\n `key-value requires \"props.value\"`,\n );\n }\n}\n\nfunction validateButton(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.label !== \"string\") {\n c.add(\n `${path}/props/label`,\n \"PROPS_MISSING_REQUIRED\",\n `button requires \"props.label\"`,\n );\n }\n}\n\nfunction validateIconButton(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.glyph !== \"string\") {\n c.add(\n `${path}/props/glyph`,\n \"PROPS_MISSING_REQUIRED\",\n `icon-button requires \"props.glyph\" (Glyph kind string)`,\n );\n }\n if (typeof props.ariaLabel !== \"string\" || props.ariaLabel.length === 0) {\n c.add(\n `${path}/props/ariaLabel`,\n \"PROPS_MISSING_REQUIRED\",\n `icon-button requires a non-empty \"props.ariaLabel\" (WCAG 2.1 AA)`,\n );\n }\n}\n\nfunction validateCopyButton(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.value !== \"string\") {\n c.add(\n `${path}/props/value`,\n \"PROPS_MISSING_REQUIRED\",\n `copy-button requires \"props.value\"`,\n );\n }\n}\n\nfunction validateSelect(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.options)) {\n c.add(\n `${path}/props/options`,\n \"PROPS_MISSING_REQUIRED\",\n `select requires \"props.options\" (array of {label, value})`,\n );\n return;\n }\n props.options.forEach((opt, i) => {\n if (typeof opt !== \"object\" || opt === null) {\n c.add(\n `${path}/props/options/${i}`,\n \"PROPS_INVALID_VALUE\",\n `select option must be an object`,\n );\n return;\n }\n const o = opt as Record<string, unknown>;\n if (typeof o.label !== \"string\" || typeof o.value !== \"string\") {\n c.add(\n `${path}/props/options/${i}`,\n \"PROPS_INVALID_VALUE\",\n `select option must have string \"label\" and \"value\"`,\n );\n }\n });\n}\n\nfunction validateEmptyState(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.message !== \"string\") {\n c.add(\n `${path}/props/message`,\n \"PROPS_MISSING_REQUIRED\",\n `empty-state requires \"props.message\"`,\n );\n }\n}\n\nfunction validateErrorState(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.message !== \"string\") {\n c.add(\n `${path}/props/message`,\n \"PROPS_MISSING_REQUIRED\",\n `error-state requires \"props.message\"`,\n );\n }\n}\n\nfunction validateSkeleton(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown> | undefined;\n if (props && typeof props.shape === \"string\") {\n const allowed = [\"rect\", \"circle\", \"text\"];\n if (!allowed.includes(props.shape)) {\n c.add(\n `${path}/props/shape`,\n \"PROPS_INVALID_VALUE\",\n `skeleton \"props.shape\" must be one of ${allowed.join(\" | \")}, got ${props.shape}`,\n );\n }\n if (\n props.shape === \"rect\" &&\n props.height === undefined\n ) {\n c.add(\n `${path}/props/height`,\n \"PROPS_MISSING_REQUIRED\",\n `skeleton shape='rect' requires \"props.height\"`,\n );\n }\n }\n\n // Returned silently — suppress unused-param warning\n void n;\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.2 node validators\n// ---------------------------------------------------------------------------\n\nfunction validateTabs(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.tabs) || props.tabs.length === 0) {\n c.add(\n `${path}/props/tabs`,\n \"PROPS_MISSING_REQUIRED\",\n `tabs requires a non-empty \"props.tabs\" array`,\n );\n } else {\n props.tabs.forEach((tab, i) => {\n if (typeof tab !== \"object\" || tab === null) {\n c.add(\n `${path}/props/tabs/${i}`,\n \"PROPS_INVALID_VALUE\",\n `tab must be an object`,\n );\n return;\n }\n const t = tab as Record<string, unknown>;\n if (typeof t.id !== \"string\" || typeof t.label !== \"string\") {\n c.add(\n `${path}/props/tabs/${i}`,\n \"PROPS_INVALID_VALUE\",\n `tab must have string \"id\" and \"label\"`,\n );\n }\n });\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.active !== \"string\") {\n c.add(\n `${path}/bind/active`,\n \"BIND_MISSING_REQUIRED\",\n `tabs requires \"bind.active\" (a tab id string)`,\n );\n }\n\n // Children are the panels — validated recursively.\n validateContainer(n, path, c);\n}\n\nfunction validateDataTable(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.columns) || props.columns.length === 0) {\n c.add(\n `${path}/props/columns`,\n \"PROPS_MISSING_REQUIRED\",\n `data-table requires a non-empty \"props.columns\" array`,\n );\n } else {\n props.columns.forEach((col, i) => {\n if (typeof col !== \"object\" || col === null) {\n c.add(\n `${path}/props/columns/${i}`,\n \"PROPS_INVALID_VALUE\",\n `data-table column must be an object`,\n );\n return;\n }\n const o = col as Record<string, unknown>;\n if (typeof o.key !== \"string\" || typeof o.label !== \"string\") {\n c.add(\n `${path}/props/columns/${i}`,\n \"PROPS_INVALID_VALUE\",\n `data-table column must have string \"key\" and \"label\"`,\n );\n }\n if (\n o.kind !== undefined &&\n o.kind !== \"text\" &&\n o.kind !== \"chip\" &&\n o.kind !== \"lines\" &&\n o.kind !== \"meter\" &&\n o.kind !== \"rating\" &&\n o.kind !== \"thumbnail\"\n ) {\n c.add(\n `${path}/props/columns/${i}/kind`,\n \"PROPS_INVALID_VALUE\",\n `data-table column \"kind\" must be one of text | chip | lines | meter | rating | thumbnail`,\n );\n }\n if (o.thresholds !== undefined && !Array.isArray(o.thresholds)) {\n c.add(\n `${path}/props/columns/${i}/thresholds`,\n \"PROPS_INVALID_VALUE\",\n `data-table column \"thresholds\" must be an array of {at, tone}`,\n );\n }\n if (o.max !== undefined && typeof o.max !== \"number\") {\n c.add(\n `${path}/props/columns/${i}/max`,\n \"PROPS_INVALID_VALUE\",\n `data-table column \"max\" must be a number`,\n );\n }\n if (o.subKey !== undefined && typeof o.subKey !== \"string\") {\n c.add(\n `${path}/props/columns/${i}/subKey`,\n \"PROPS_INVALID_VALUE\",\n `data-table column \"subKey\" must be a string`,\n );\n }\n // SRP v0.3 — optional column props.\n if (\n o.tones !== undefined &&\n (typeof o.tones !== \"object\" ||\n o.tones === null ||\n Array.isArray(o.tones))\n ) {\n c.add(\n `${path}/props/columns/${i}/tones`,\n \"PROPS_INVALID_VALUE\",\n `data-table column \"tones\" must be an object mapping value → tone`,\n );\n }\n if (\n o.order !== undefined &&\n (!Array.isArray(o.order) ||\n !o.order.every((v) => typeof v === \"string\"))\n ) {\n c.add(\n `${path}/props/columns/${i}/order`,\n \"PROPS_INVALID_VALUE\",\n `data-table column \"order\" must be an array of strings`,\n );\n }\n });\n }\n\n // SRP v0.3 — optional data-grid props.\n validateDataTableV3Props(props, path, c);\n\n // SRP v0.5 — sticky columns.\n if (\n props.stickyColumns !== undefined &&\n (typeof props.stickyColumns !== \"number\" || props.stickyColumns < 0)\n ) {\n c.add(\n `${path}/props/stickyColumns`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"stickyColumns\" must be a non-negative number`,\n );\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind) {\n c.add(\n `${path}/bind`,\n \"BIND_MISSING_REQUIRED\",\n `data-table requires \"bind.query\" or \"bind.rows\"`,\n );\n return;\n }\n const hasQuery = \"query\" in bind;\n const hasRows = \"rows\" in bind;\n if (!hasQuery && !hasRows) {\n c.add(\n `${path}/bind`,\n \"BIND_INVALID_SHAPE\",\n `data-table \"bind\" must contain either \"query\" or \"rows\"`,\n );\n } else if (hasQuery && hasRows) {\n c.add(\n `${path}/bind`,\n \"BIND_INVALID_SHAPE\",\n `data-table \"bind\" cannot contain both \"query\" and \"rows\"`,\n );\n } else if (hasRows && !Array.isArray(bind.rows)) {\n c.add(\n `${path}/bind/rows`,\n \"BIND_INVALID_SHAPE\",\n `data-table \"bind.rows\" must be an array of row objects`,\n );\n }\n}\n\nfunction validateBoard(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.columns) || props.columns.length === 0) {\n c.add(\n `${path}/props/columns`,\n \"PROPS_MISSING_REQUIRED\",\n `board requires a non-empty \"props.columns\" array`,\n );\n } else {\n props.columns.forEach((col, i) => {\n if (typeof col !== \"object\" || col === null) {\n c.add(\n `${path}/props/columns/${i}`,\n \"PROPS_INVALID_VALUE\",\n `board column must be an object`,\n );\n return;\n }\n const o = col as Record<string, unknown>;\n if (typeof o.id !== \"string\" || typeof o.label !== \"string\") {\n c.add(\n `${path}/props/columns/${i}`,\n \"PROPS_INVALID_VALUE\",\n `board column must have string \"id\" and \"label\"`,\n );\n }\n });\n }\n\n if (typeof props.groupBy !== \"string\") {\n c.add(\n `${path}/props/groupBy`,\n \"PROPS_MISSING_REQUIRED\",\n `board requires \"props.groupBy\" (a record field name)`,\n );\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.query !== \"object\" || bind.query === null) {\n c.add(\n `${path}/bind/query`,\n \"BIND_MISSING_REQUIRED\",\n `board requires \"bind.query\" (a VQL query object)`,\n );\n }\n}\n\nfunction validateTextInput(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.value !== \"string\") {\n c.add(\n `${path}/bind/value`,\n \"BIND_MISSING_REQUIRED\",\n `text-input requires \"bind.value\" (a string)`,\n );\n }\n\n const props = n.props as Record<string, unknown> | undefined;\n if (props && props.inputKind !== undefined) {\n const allowed = [\"text\", \"search\", \"secret\"];\n if (\n typeof props.inputKind !== \"string\" ||\n !allowed.includes(props.inputKind)\n ) {\n c.add(\n `${path}/props/inputKind`,\n \"PROPS_INVALID_VALUE\",\n `text-input \"props.inputKind\" must be one of ${allowed.join(\" | \")}`,\n );\n }\n }\n}\n\nfunction validateForm(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n // A form is a pure container — its inputs are validated recursively.\n validateContainer(n, path, c);\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.3 node validators\n// ---------------------------------------------------------------------------\n\n/** Validate the optional SRP v0.3 props on a `data-table`. */\nfunction validateDataTableV3Props(\n props: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n if (props.defaultSort !== undefined) {\n const ds = props.defaultSort as Record<string, unknown>;\n if (typeof ds !== \"object\" || ds === null) {\n c.add(\n `${path}/props/defaultSort`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"defaultSort\" must be an object {key, direction}`,\n );\n } else {\n if (typeof ds.key !== \"string\") {\n c.add(\n `${path}/props/defaultSort/key`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"defaultSort.key\" must be a string`,\n );\n }\n if (ds.direction !== \"asc\" && ds.direction !== \"desc\") {\n c.add(\n `${path}/props/defaultSort/direction`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"defaultSort.direction\" must be \"asc\" or \"desc\"`,\n );\n }\n }\n }\n\n if (props.rowActions !== undefined) {\n if (!Array.isArray(props.rowActions)) {\n c.add(\n `${path}/props/rowActions`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"rowActions\" must be an array`,\n );\n } else {\n props.rowActions.forEach((action, i) => {\n if (typeof action !== \"object\" || action === null) {\n c.add(\n `${path}/props/rowActions/${i}`,\n \"PROPS_INVALID_VALUE\",\n `data-table rowAction must be an object`,\n );\n return;\n }\n const a = action as Record<string, unknown>;\n if (typeof a.intent !== \"string\") {\n c.add(\n `${path}/props/rowActions/${i}/intent`,\n \"PROPS_INVALID_VALUE\",\n `data-table rowAction requires a string \"intent\"`,\n );\n }\n if (\n a.position !== undefined &&\n a.position !== \"leading\" &&\n a.position !== \"trailing\"\n ) {\n c.add(\n `${path}/props/rowActions/${i}/position`,\n \"PROPS_INVALID_VALUE\",\n `data-table rowAction \"position\" must be \"leading\" or \"trailing\"`,\n );\n }\n });\n }\n }\n\n if (props.rowTone !== undefined) {\n const rt = props.rowTone as Record<string, unknown>;\n if (typeof rt !== \"object\" || rt === null) {\n c.add(\n `${path}/props/rowTone`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"rowTone\" must be an object {key, tones}`,\n );\n } else {\n if (typeof rt.key !== \"string\") {\n c.add(\n `${path}/props/rowTone/key`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"rowTone.key\" must be a string`,\n );\n }\n if (\n typeof rt.tones !== \"object\" ||\n rt.tones === null ||\n Array.isArray(rt.tones)\n ) {\n c.add(\n `${path}/props/rowTone/tones`,\n \"PROPS_INVALID_VALUE\",\n `data-table \"rowTone.tones\" must be an object mapping value → tone`,\n );\n }\n }\n }\n}\n\nfunction validateSegmented(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.options) || props.options.length === 0) {\n c.add(\n `${path}/props/options`,\n \"PROPS_MISSING_REQUIRED\",\n `segmented requires a non-empty \"props.options\" array`,\n );\n } else {\n props.options.forEach((opt, i) => {\n if (typeof opt !== \"object\" || opt === null) {\n c.add(\n `${path}/props/options/${i}`,\n \"PROPS_INVALID_VALUE\",\n `segmented option must be an object`,\n );\n return;\n }\n const o = opt as Record<string, unknown>;\n if (typeof o.value !== \"string\" || typeof o.label !== \"string\") {\n c.add(\n `${path}/props/options/${i}`,\n \"PROPS_INVALID_VALUE\",\n `segmented option must have string \"value\" and \"label\"`,\n );\n }\n });\n }\n\n if (props.variant !== undefined &&\n props.variant !== \"solid\" &&\n props.variant !== \"underline\") {\n c.add(\n `${path}/props/variant`,\n \"PROPS_INVALID_VALUE\",\n `segmented \"props.variant\" must be \"solid\" or \"underline\"`,\n );\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.value !== \"string\") {\n c.add(\n `${path}/bind/value`,\n \"BIND_MISSING_REQUIRED\",\n `segmented requires \"bind.value\" (a string)`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.4 node validators\n// ---------------------------------------------------------------------------\n\nconst VIZ_TONES = [\"neutral\", \"accent\", \"success\", \"warn\", \"error\", \"info\"];\n\nfunction validateMeter(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.value !== \"number\") {\n c.add(\n `${path}/props/value`,\n \"PROPS_MISSING_REQUIRED\",\n `meter requires \"props.value\" (a number 0..1)`,\n );\n }\n if (\n props.variant !== undefined &&\n props.variant !== \"continuous\" &&\n props.variant !== \"segmented\"\n ) {\n c.add(\n `${path}/props/variant`,\n \"PROPS_INVALID_VALUE\",\n `meter \"props.variant\" must be \"continuous\" or \"segmented\"`,\n );\n }\n if (props.thresholds !== undefined && !Array.isArray(props.thresholds)) {\n c.add(\n `${path}/props/thresholds`,\n \"PROPS_INVALID_VALUE\",\n `meter \"props.thresholds\" must be an array of {at, tone}`,\n );\n }\n if (\n props.tone !== undefined &&\n (typeof props.tone !== \"string\" || !VIZ_TONES.includes(props.tone))\n ) {\n c.add(\n `${path}/props/tone`,\n \"PROPS_INVALID_VALUE\",\n `meter \"props.tone\" must be one of ${VIZ_TONES.join(\" | \")}`,\n );\n }\n}\n\nfunction validateGauge(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.value !== \"number\") {\n c.add(\n `${path}/props/value`,\n \"PROPS_MISSING_REQUIRED\",\n `gauge requires \"props.value\" (a number 0..1)`,\n );\n }\n if (props.zones !== undefined && !Array.isArray(props.zones)) {\n c.add(\n `${path}/props/zones`,\n \"PROPS_INVALID_VALUE\",\n `gauge \"props.zones\" must be an array of {from, to, tone}`,\n );\n }\n if (\n props.format !== undefined &&\n props.format !== \"percent\" &&\n props.format !== \"decimal\"\n ) {\n c.add(\n `${path}/props/format`,\n \"PROPS_INVALID_VALUE\",\n `gauge \"props.format\" must be \"percent\" or \"decimal\"`,\n );\n }\n}\n\nfunction validateAvatar(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.name !== \"string\" || props.name.length === 0) {\n c.add(\n `${path}/props/name`,\n \"PROPS_MISSING_REQUIRED\",\n `avatar requires a non-empty \"props.name\"`,\n );\n }\n}\n\nfunction validateProgress(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = n.props as Record<string, unknown> | undefined;\n if (props && props.value !== undefined && typeof props.value !== \"number\") {\n c.add(\n `${path}/props/value`,\n \"PROPS_INVALID_VALUE\",\n `progress \"props.value\" must be a number 0..1`,\n );\n }\n}\n\nfunction validateSparkline(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (\n !Array.isArray(props.values) ||\n !props.values.every((v) => typeof v === \"number\")\n ) {\n c.add(\n `${path}/props/values`,\n \"PROPS_MISSING_REQUIRED\",\n `sparkline requires \"props.values\" (an array of numbers)`,\n );\n }\n if (\n props.variant !== undefined &&\n props.variant !== \"line\" &&\n props.variant !== \"bar\"\n ) {\n c.add(\n `${path}/props/variant`,\n \"PROPS_INVALID_VALUE\",\n `sparkline \"props.variant\" must be \"line\" or \"bar\"`,\n );\n }\n}\n\nfunction validateChart(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n const kinds = [\"line\", \"area\", \"bar\", \"pie\"];\n if (typeof props.kind !== \"string\" || !kinds.includes(props.kind)) {\n c.add(\n `${path}/props/kind`,\n \"PROPS_MISSING_REQUIRED\",\n `chart requires \"props.kind\" — one of ${kinds.join(\" | \")}`,\n );\n }\n if (!Array.isArray(props.series) || props.series.length === 0) {\n c.add(\n `${path}/props/series`,\n \"PROPS_MISSING_REQUIRED\",\n `chart requires a non-empty \"props.series\" array`,\n );\n return;\n }\n props.series.forEach((s, i) => {\n if (typeof s !== \"object\" || s === null) {\n c.add(\n `${path}/props/series/${i}`,\n \"PROPS_INVALID_VALUE\",\n `chart series must be an object`,\n );\n return;\n }\n if (!Array.isArray((s as Record<string, unknown>).points)) {\n c.add(\n `${path}/props/series/${i}/points`,\n \"PROPS_INVALID_VALUE\",\n `chart series requires a \"points\" array`,\n );\n }\n });\n}\n\nfunction validateTreeItems(\n items: unknown[],\n path: string,\n c: Collector,\n): void {\n items.forEach((item, i) => {\n if (typeof item !== \"object\" || item === null) {\n c.add(\n `${path}/${i}`,\n \"PROPS_INVALID_VALUE\",\n `tree item must be an object`,\n );\n return;\n }\n const it = item as Record<string, unknown>;\n if (typeof it.id !== \"string\" || typeof it.label !== \"string\") {\n c.add(\n `${path}/${i}`,\n \"PROPS_INVALID_VALUE\",\n `tree item must have string \"id\" and \"label\"`,\n );\n }\n if (it.children !== undefined) {\n if (!Array.isArray(it.children)) {\n c.add(\n `${path}/${i}/children`,\n \"PROPS_INVALID_VALUE\",\n `tree item \"children\" must be an array`,\n );\n } else {\n validateTreeItems(it.children, `${path}/${i}/children`, c);\n }\n }\n });\n}\n\nfunction validateTree(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.items)) {\n c.add(\n `${path}/props/items`,\n \"PROPS_MISSING_REQUIRED\",\n `tree requires \"props.items\" (an array of tree items)`,\n );\n return;\n }\n validateTreeItems(props.items, `${path}/props/items`, c);\n}\n\nfunction validateTagInput(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const bind = n.bind as Record<string, unknown> | undefined;\n if (\n !bind ||\n !Array.isArray(bind.tags) ||\n !bind.tags.every((t) => typeof t === \"string\")\n ) {\n c.add(\n `${path}/bind/tags`,\n \"BIND_MISSING_REQUIRED\",\n `tag-input requires \"bind.tags\" (an array of strings)`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.5 node validators\n// ---------------------------------------------------------------------------\n\nconst POPOVER_ALIGNS = [\"start\", \"center\", \"end\"];\nconst THUMBNAIL_RADII = [\"none\", \"sm\", \"md\", \"lg\", \"full\"];\nconst THUMBNAIL_ASPECTS = [\"square\", \"video\", \"wide\"];\n\nfunction validatePopover(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.label !== \"string\" || props.label.length === 0) {\n c.add(\n `${path}/props/label`,\n \"PROPS_MISSING_REQUIRED\",\n `popover requires a non-empty \"props.label\"`,\n );\n }\n if (\n props.align !== undefined &&\n (typeof props.align !== \"string\" ||\n !POPOVER_ALIGNS.includes(props.align))\n ) {\n c.add(\n `${path}/props/align`,\n \"PROPS_INVALID_VALUE\",\n `popover \"props.align\" must be one of ${POPOVER_ALIGNS.join(\" | \")}`,\n );\n }\n if (\"children\" in n && n.children !== undefined && !Array.isArray(n.children)) {\n c.add(\n `${path}/children`,\n \"CHILDREN_NOT_ARRAY\",\n `popover \"children\" must be an array`,\n );\n }\n}\n\nfunction validateSlider(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.min !== \"number\" || typeof props.max !== \"number\") {\n c.add(\n `${path}/props`,\n \"PROPS_MISSING_REQUIRED\",\n `slider requires numeric \"props.min\" and \"props.max\"`,\n );\n }\n if (\n props.tone !== undefined &&\n (typeof props.tone !== \"string\" || !VIZ_TONES.includes(props.tone))\n ) {\n c.add(\n `${path}/props/tone`,\n \"PROPS_INVALID_VALUE\",\n `slider \"props.tone\" must be one of ${VIZ_TONES.join(\" | \")}`,\n );\n }\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.value !== \"number\") {\n c.add(\n `${path}/bind/value`,\n \"BIND_MISSING_REQUIRED\",\n `slider requires \"bind.value\" (a number)`,\n );\n }\n}\n\nfunction validateRating(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (props.max !== undefined && typeof props.max !== \"number\") {\n c.add(\n `${path}/props/max`,\n \"PROPS_INVALID_VALUE\",\n `rating \"props.max\" must be a number`,\n );\n }\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.value !== \"number\") {\n c.add(\n `${path}/bind/value`,\n \"BIND_MISSING_REQUIRED\",\n `rating requires \"bind.value\" (a number)`,\n );\n }\n}\n\nfunction validateThumbnail(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (typeof props.alt !== \"string\" || props.alt.length === 0) {\n c.add(\n `${path}/props/alt`,\n \"PROPS_MISSING_REQUIRED\",\n `thumbnail requires a non-empty \"props.alt\"`,\n );\n }\n if (\n props.radius !== undefined &&\n (typeof props.radius !== \"string\" ||\n !THUMBNAIL_RADII.includes(props.radius))\n ) {\n c.add(\n `${path}/props/radius`,\n \"PROPS_INVALID_VALUE\",\n `thumbnail \"props.radius\" must be one of ${THUMBNAIL_RADII.join(\" | \")}`,\n );\n }\n if (\n props.aspect !== undefined &&\n (typeof props.aspect !== \"string\" ||\n !THUMBNAIL_ASPECTS.includes(props.aspect))\n ) {\n c.add(\n `${path}/props/aspect`,\n \"PROPS_INVALID_VALUE\",\n `thumbnail \"props.aspect\" must be one of ${THUMBNAIL_ASPECTS.join(\" | \")}`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.6 node validators\n// ---------------------------------------------------------------------------\n\nfunction validateFacetGrid(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.facets) || props.facets.length === 0) {\n c.add(\n `${path}/props/facets`,\n \"PROPS_MISSING_REQUIRED\",\n `facet-grid requires a non-empty \"props.facets\" array`,\n );\n } else {\n props.facets.forEach((facet, i) => {\n if (typeof facet !== \"object\" || facet === null) {\n c.add(\n `${path}/props/facets/${i}`,\n \"PROPS_INVALID_VALUE\",\n `facet-grid facet must be an object`,\n );\n return;\n }\n const f = facet as Record<string, unknown>;\n if (typeof f.id !== \"string\" || typeof f.label !== \"string\") {\n c.add(\n `${path}/props/facets/${i}`,\n \"PROPS_INVALID_VALUE\",\n `facet-grid facet must have string \"id\" and \"label\"`,\n );\n }\n if (!Array.isArray(f.options)) {\n c.add(\n `${path}/props/facets/${i}/options`,\n \"PROPS_INVALID_VALUE\",\n `facet-grid facet \"options\" must be an array`,\n );\n }\n });\n }\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.active !== \"string\") {\n c.add(\n `${path}/bind/active`,\n \"BIND_MISSING_REQUIRED\",\n `facet-grid requires \"bind.active\" (the active category id)`,\n );\n }\n}\n\nfunction validateColumnConfig(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n if (!Array.isArray(props.columns) || props.columns.length === 0) {\n c.add(\n `${path}/props/columns`,\n \"PROPS_MISSING_REQUIRED\",\n `column-config requires a non-empty \"props.columns\" array`,\n );\n } else {\n props.columns.forEach((col, i) => {\n if (\n typeof col !== \"object\" ||\n col === null ||\n typeof (col as Record<string, unknown>).id !== \"string\" ||\n typeof (col as Record<string, unknown>).label !== \"string\"\n ) {\n c.add(\n `${path}/props/columns/${i}`,\n \"PROPS_INVALID_VALUE\",\n `column-config column must have string \"id\" and \"label\"`,\n );\n }\n });\n }\n if (props.presets !== undefined && !Array.isArray(props.presets)) {\n c.add(\n `${path}/props/presets`,\n \"PROPS_INVALID_VALUE\",\n `column-config \"props.presets\" must be an array`,\n );\n }\n const bind = n.bind as Record<string, unknown> | undefined;\n if (\n !bind ||\n !Array.isArray(bind.visible) ||\n !bind.visible.every((v) => typeof v === \"string\")\n ) {\n c.add(\n `${path}/bind/visible`,\n \"BIND_MISSING_REQUIRED\",\n `column-config requires \"bind.visible\" (an array of column ids)`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers for library consumers\n// ---------------------------------------------------------------------------\n\n/**\n * Type guard: true when `doc` is a well-formed SRP document.\n * Useful in adapter code that receives untrusted JSON.\n */\nexport function isSRPDocument(doc: unknown): doc is SRPDocument {\n const result = validateSRP(doc);\n return result.valid;\n}\n\n/**\n * Type guard: true when `node` is a well-formed SRP node.\n */\nexport function isSRPNode(node: unknown): node is SRPNode {\n const result = validateNode(node, \"\");\n return result.valid;\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.8 — visual-atom validators (5)\n// ---------------------------------------------------------------------------\n\nconst VALID_GLYPH_KINDS = new Set([\n // Act types (coordination)\n \"INTEND\", \"DO\", \"KNOW\", \"LEARN\",\n // Act types (effects)\n \"GET\", \"PUT\", \"CALL\", \"MAP\",\n // AITL marker\n \"AITL\",\n // Domain objects\n \"thread\", \"fork\", \"record-parent\", \"namespace\", \"actor\", \"file\", \"pattern\", \"page\", \"view\",\n // Thread states\n \"state-open\", \"state-active\", \"state-converged\", \"state-closed\", \"state-abandoned\",\n]);\n\nconst VALID_GLYPH_SIZES = new Set([\"xs\", \"sm\", \"md\"]);\nconst VALID_STATUS_DOT_STATES = new Set([\n \"active\", \"idle\", \"blocked\", \"error\", \"success\", \"warning\", \"muted\",\n]);\nconst VALID_STATUS_DOT_SIZES = new Set([\"xs\", \"sm\"]);\nconst VALID_LINK_TARGETS = new Set([\"_self\", \"_blank\"]);\nconst VALID_LINK_TONES = new Set([\"accent\", \"primary\", \"muted\"]);\n\nfunction validateGlyph(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n\n if (typeof props.kind !== \"string\") {\n c.add(\n `${path}/props/kind`,\n \"PROPS_MISSING_REQUIRED\",\n `glyph requires \"props.kind\" (a string)`,\n );\n } else if (!VALID_GLYPH_KINDS.has(props.kind)) {\n c.add(\n `${path}/props/kind`,\n \"PROPS_INVALID_VALUE\",\n `glyph \"props.kind\" must be a known GlyphKind; got \"${props.kind}\"`,\n );\n }\n\n if (props.size !== undefined && (typeof props.size !== \"string\" || !VALID_GLYPH_SIZES.has(props.size))) {\n c.add(\n `${path}/props/size`,\n \"PROPS_INVALID_VALUE\",\n `glyph \"props.size\" must be \"xs\"|\"sm\"|\"md\"`,\n );\n }\n\n if (props.colored !== undefined && typeof props.colored !== \"boolean\") {\n c.add(\n `${path}/props/colored`,\n \"PROPS_INVALID_VALUE\",\n `glyph \"props.colored\" must be a boolean`,\n );\n }\n\n if (props.label !== undefined && typeof props.label !== \"string\") {\n c.add(\n `${path}/props/label`,\n \"PROPS_INVALID_VALUE\",\n `glyph \"props.label\" must be a string when provided`,\n );\n }\n}\n\nfunction validateStatusDot(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n\n if (typeof props.state !== \"string\") {\n c.add(\n `${path}/props/state`,\n \"PROPS_MISSING_REQUIRED\",\n `status-dot requires \"props.state\" (a string)`,\n );\n } else if (!VALID_STATUS_DOT_STATES.has(props.state)) {\n c.add(\n `${path}/props/state`,\n \"PROPS_INVALID_VALUE\",\n `status-dot \"props.state\" must be one of: active, idle, blocked, error, success, warning, muted`,\n );\n }\n\n if (props.size !== undefined && (typeof props.size !== \"string\" || !VALID_STATUS_DOT_SIZES.has(props.size))) {\n c.add(\n `${path}/props/size`,\n \"PROPS_INVALID_VALUE\",\n `status-dot \"props.size\" must be \"xs\"|\"sm\"`,\n );\n }\n\n if (props.pulse !== undefined && typeof props.pulse !== \"boolean\") {\n c.add(\n `${path}/props/pulse`,\n \"PROPS_INVALID_VALUE\",\n `status-dot \"props.pulse\" must be a boolean`,\n );\n }\n\n if (props.label !== undefined && typeof props.label !== \"string\") {\n c.add(\n `${path}/props/label`,\n \"PROPS_INVALID_VALUE\",\n `status-dot \"props.label\" must be a string when provided`,\n );\n }\n}\n\nfunction validatePulse(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n // `props` is entirely optional for pulse.\n if (n.props !== undefined) {\n const props = n.props as Record<string, unknown>;\n if (props.label !== undefined && typeof props.label !== \"string\") {\n c.add(\n `${path}/props/label`,\n \"PROPS_INVALID_VALUE\",\n `pulse \"props.label\" must be a string when provided`,\n );\n }\n }\n}\n\nfunction validateLink(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n\n if (typeof props.href !== \"string\" || props.href.length === 0) {\n c.add(\n `${path}/props/href`,\n \"PROPS_MISSING_REQUIRED\",\n `link requires \"props.href\" (a non-empty string)`,\n );\n }\n\n if (typeof props.text !== \"string\" || props.text.length === 0) {\n c.add(\n `${path}/props/text`,\n \"PROPS_MISSING_REQUIRED\",\n `link requires \"props.text\" (a non-empty string)`,\n );\n }\n\n if (props.target !== undefined && (typeof props.target !== \"string\" || !VALID_LINK_TARGETS.has(props.target))) {\n c.add(\n `${path}/props/target`,\n \"PROPS_INVALID_VALUE\",\n `link \"props.target\" must be \"_self\"|\"_blank\"`,\n );\n }\n\n if (props.tone !== undefined && (typeof props.tone !== \"string\" || !VALID_LINK_TONES.has(props.tone))) {\n c.add(\n `${path}/props/tone`,\n \"PROPS_INVALID_VALUE\",\n `link \"props.tone\" must be \"accent\"|\"primary\"|\"muted\"`,\n );\n }\n}\n\nfunction validateCode(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n\n if (typeof props.text !== \"string\") {\n c.add(\n `${path}/props/text`,\n \"PROPS_MISSING_REQUIRED\",\n `code requires \"props.text\" (a string)`,\n );\n }\n\n if (props.inline !== undefined && typeof props.inline !== \"boolean\") {\n c.add(\n `${path}/props/inline`,\n \"PROPS_INVALID_VALUE\",\n `code \"props.inline\" must be a boolean when provided`,\n );\n }\n\n if (props.title !== undefined && typeof props.title !== \"string\") {\n c.add(\n `${path}/props/title`,\n \"PROPS_INVALID_VALUE\",\n `code \"props.title\" must be a string when provided`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.9 node validators — settings/config input atoms\n// ---------------------------------------------------------------------------\n\nfunction validateToggle(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n\n if (typeof props.label !== \"string\" || props.label.length === 0) {\n c.add(\n `${path}/props/label`,\n \"PROPS_MISSING_REQUIRED\",\n `toggle requires a non-empty \"props.label\"`,\n );\n }\n\n if (props.description !== undefined && typeof props.description !== \"string\") {\n c.add(\n `${path}/props/description`,\n \"PROPS_INVALID_VALUE\",\n `toggle \"props.description\" must be a string when provided`,\n );\n }\n\n if (props.disabled !== undefined && typeof props.disabled !== \"boolean\") {\n c.add(\n `${path}/props/disabled`,\n \"PROPS_INVALID_VALUE\",\n `toggle \"props.disabled\" must be a boolean when provided`,\n );\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (!bind || typeof bind.value !== \"boolean\") {\n c.add(\n `${path}/bind/value`,\n \"BIND_MISSING_REQUIRED\",\n `toggle requires \"bind.value\" (a boolean — the host owns the state)`,\n );\n }\n}\n\nfunction validateAccordion(\n n: Record<string, unknown>,\n path: string,\n c: Collector,\n): void {\n const props = (n.props ?? {}) as Record<string, unknown>;\n\n if (typeof props.title !== \"string\" || props.title.length === 0) {\n c.add(\n `${path}/props/title`,\n \"PROPS_MISSING_REQUIRED\",\n `accordion requires a non-empty \"props.title\"`,\n );\n }\n\n if (props.subtitle !== undefined && typeof props.subtitle !== \"string\") {\n c.add(\n `${path}/props/subtitle`,\n \"PROPS_INVALID_VALUE\",\n `accordion \"props.subtitle\" must be a string when provided`,\n );\n }\n\n if (props.defaultOpen !== undefined && typeof props.defaultOpen !== \"boolean\") {\n c.add(\n `${path}/props/defaultOpen`,\n \"PROPS_INVALID_VALUE\",\n `accordion \"props.defaultOpen\" must be a boolean when provided`,\n );\n }\n\n const bind = n.bind as Record<string, unknown> | undefined;\n if (bind && bind.open !== undefined && typeof bind.open !== \"boolean\") {\n c.add(\n `${path}/bind/open`,\n \"BIND_INVALID_SHAPE\",\n `accordion \"bind.open\" must be a boolean when provided`,\n );\n }\n\n // Children are validated recursively (it is a structural container).\n validateContainer(n, path, c);\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@syncropel/projections",
3
- "version": "0.7.1",
4
- "description": "TypeScript schema + validators for the Syncropel Rendering Protocol (SRP v0.2) — declarative UI documents for query-driven and AI-generated interfaces.",
3
+ "version": "0.9.0",
4
+ "description": "TypeScript schema + validators for the Syncropel Rendering Protocol (SRP v0.9) — declarative UI documents for query-driven and AI-generated interfaces. v0.9 adds two settings/config input atoms (toggle, accordion) + the secret text-input kind for faculty-declared settings_ui projections (44 → 46 node types).",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",