@sebastianwessel/isostate 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/dsl/scene-validator.ts","../../src/dsl/compiler.ts","../../src/dsl/scene-parser.ts"],"sourcesContent":["import type {\n\tAmbientAnimation,\n\tConnectionPatch,\n\tConnectionPlacement,\n\tConnectionRemoval,\n\tConnectorEndpointRef,\n\tConnectorRouting,\n\tConnectorStyle,\n\tElementPatch,\n\tElementPlacement,\n\tElementRemoval,\n\tPrimitiveContent,\n\tRuntimeConnectorState,\n\tRuntimeConnectorStyle,\n\tRuntimeElementState,\n\tSceneDocument,\n\tSceneStep,\n\tTextContent,\n\tValidationError,\n\tValidationReport,\n\tValidationWarning,\n} from \"../types/index.ts\";\n\nconst BUILT_IN_TEXT_ASSET_ID = \"text\";\nconst BUILT_IN_PRIMITIVE_ASSET_IDS = new Set([\"rectangle\", \"circle\", \"polygon\", \"line\"]);\nconst MAX_TEXT_CHARACTERS = 1000;\nconst MAX_TEXT_LINES = 20;\nconst MAX_PRIMITIVE_POINTS = 100;\n\nconst VALID_ENTRY_ANIMATIONS: ReadonlySet<string> = new Set([\n\t\"fade-in\",\n\t\"fade-in-grow\",\n\t\"fall-in\",\n\t\"rise-from-ground\",\n\t\"slide-in-left\",\n\t\"slide-in-right\",\n\t\"flip-in\",\n\t\"none\",\n]);\n\nconst VALID_EXIT_ANIMATIONS: ReadonlySet<string> = new Set([\n\t\"fade-out\",\n\t\"fade-out-shrink\",\n\t\"fall-through-ground\",\n\t\"rise-away\",\n\t\"slide-out-left\",\n\t\"slide-out-right\",\n\t\"flip-out\",\n\t\"none\",\n]);\n\nconst VALID_AMBIENT_ANIMATIONS: ReadonlySet<string> = new Set([\n\t\"pulse\",\n\t\"float\",\n\t\"shake\",\n\t\"glow\",\n\t\"spin\",\n\t\"blink\",\n\t\"bounce\",\n]);\nconst VALID_CONNECTOR_AMBIENT_ANIMATIONS: ReadonlySet<string> = new Set([...VALID_AMBIENT_ANIMATIONS, \"flow\"]);\n\nconst VALID_CONNECTOR_PATTERNS: ReadonlySet<string> = new Set([\"solid\", \"dashed\", \"dotted\"]);\nconst VALID_CONNECTOR_VARIANTS: ReadonlySet<string> = new Set([\"line\", \"road\"]);\nconst VALID_CONNECTOR_ENDPOINTS: ReadonlySet<string> = new Set([\"none\", \"arrow\", \"dot\", \"circle\", \"diamond\", \"bar\"]);\nconst VALID_CONNECTOR_DIRECTIONS: ReadonlySet<string> = new Set([\"route\", \"reverse\"]);\nconst VALID_CONNECTOR_SIDES: ReadonlySet<string> = new Set([\"auto\", \"top\", \"right\", \"bottom\", \"left\", \"front\", \"back\"]);\nconst VALID_CONNECTOR_ROUTING_MODES: ReadonlySet<string> = new Set([\"straight\", \"orthogonal\", \"manual\"]);\nconst VALID_CONNECTOR_ROUTING_PREFERENCES: ReadonlySet<string> = new Set([\"direct\", \"fewest-bends\", \"shortest\"]);\nconst VALID_CONNECTOR_LANES: ReadonlySet<string> = new Set([\"none\", \"center-dashed\"]);\n\nconst VALID_TEXT_ALIGN: ReadonlySet<string> = new Set([\"start\", \"middle\", \"end\"]);\nconst VALID_TEXT_WEIGHT: ReadonlySet<string> = new Set([\"normal\", \"bold\"]);\nconst VALID_LINE_CAPS: ReadonlySet<string> = new Set([\"butt\", \"round\", \"square\"]);\nconst VALID_LINE_JOINS: ReadonlySet<string> = new Set([\"miter\", \"round\", \"bevel\"]);\n\ninterface ResolvedElementRecord {\n\tid: string;\n\tasset: string;\n\tat: [number, number];\n\tsize?: number;\n\tlayer?: string;\n\tenter?: ElementPlacement[\"enter\"];\n\texit?: ElementPlacement[\"exit\"];\n\tambient?: AmbientAnimation[];\n\ttext?: TextContent;\n\tprimitive?: PrimitiveContent;\n}\n\nexport interface ResolvedSceneSnapshot {\n\tid: string;\n\tprogress: number;\n\telements: RuntimeElementState[];\n\tconnectors: RuntimeConnectorState[];\n}\n\ninterface ResolvedConnectorRecord {\n\tid: string;\n\troute?: [number, number][];\n\tfrom?: ConnectorEndpointRef;\n\tto?: ConnectorEndpointRef;\n\trouting?: ConnectionPlacement[\"routing\"];\n\tlayer?: string;\n\tstyle?: ConnectorStyle;\n\tstart?: ConnectionPlacement[\"start\"];\n\tend?: ConnectionPlacement[\"end\"];\n\tdirection?: ConnectionPlacement[\"direction\"];\n\tenter?: ConnectionPlacement[\"enter\"];\n\texit?: ConnectionPlacement[\"exit\"];\n\tambient?: AmbientAnimation[];\n}\n\nfunction issue(code: string, message: string, extras: Partial<ValidationError> = {}): ValidationError {\n\treturn { code, message, ...extras };\n}\n\nfunction isValidIdentifier(value: string): boolean {\n\treturn /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(value);\n}\n\nfunction isValidPosition(value: unknown): value is [number, number] {\n\treturn Array.isArray(value) && value.length === 2 && value.every((part) => Number.isFinite(part) && part >= 0);\n}\n\nfunction isValidPositiveNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value > 0;\n}\n\nfunction defaultElementLayer(document: SceneDocument): string {\n\tconst structures = document.header.layers.find((layer) => layer.name === \"structures\");\n\treturn structures?.name ?? document.header.layers[0]?.name ?? \"\";\n}\n\nfunction defaultFloorLayer(document: SceneDocument): string {\n\tconst ground = document.header.layers.find((layer) => layer.name === \"ground\");\n\treturn ground?.name ?? document.header.layers[0]?.name ?? \"\";\n}\n\nfunction defaultConnectorLayer(document: SceneDocument): string {\n\tconst connectors = document.header.layers.find((layer) => layer.name === \"connectors\");\n\tconst ground = document.header.layers.find((layer) => layer.name === \"ground\");\n\treturn connectors?.name ?? ground?.name ?? document.header.layers[0]?.name ?? \"\";\n}\n\nfunction declaredAssetNames(document: SceneDocument): Set<string> {\n\treturn new Set(document.header.assets.map((asset) => asset.id));\n}\n\nfunction hasUrlAssetSource(document: SceneDocument, assetId: string): boolean {\n\treturn Boolean(document.header.assetBaseUrl && document.header.assets.some((asset) => asset.id === assetId));\n}\n\nfunction isBuiltInAsset(assetId: string): boolean {\n\treturn assetId === BUILT_IN_TEXT_ASSET_ID || BUILT_IN_PRIMITIVE_ASSET_IDS.has(assetId);\n}\n\nfunction isPrimitiveAsset(assetId: string): boolean {\n\treturn BUILT_IN_PRIMITIVE_ASSET_IDS.has(assetId);\n}\n\nfunction hasExternalAssetReferences(document: SceneDocument): boolean {\n\tif (document.header.floor?.asset && !isBuiltInAsset(document.header.floor.asset)) {\n\t\treturn true;\n\t}\n\tfor (const scene of document.scenes) {\n\t\tfor (const element of [...(scene.elements ?? []), ...(scene.add?.elements ?? [])]) {\n\t\t\tif (!isBuiltInAsset(element.asset)) return true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction hasBuiltInElements(document: SceneDocument): boolean {\n\tfor (const scene of document.scenes) {\n\t\tfor (const element of [...(scene.elements ?? []), ...(scene.add?.elements ?? [])]) {\n\t\t\tif (isBuiltInAsset(element.asset)) return true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction declaredLayerNames(document: SceneDocument): Set<string> {\n\treturn new Set(document.header.layers.map((layer) => layer.name));\n}\n\nfunction validateHeader(document: SceneDocument, errors: ValidationError[]): void {\n\tconst assets = document.header.assets;\n\tif (assets.length === 0 && (hasExternalAssetReferences(document) || !hasBuiltInElements(document))) {\n\t\terrors.push(issue(\"NO_ASSETS\", \"Header must declare at least one asset\"));\n\t}\n\n\tconst assetNames = new Set<string>();\n\tfor (const asset of assets) {\n\t\tif (!isValidIdentifier(asset.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_IDENTIFIER\", `Asset \"${asset.id}\" must be kebab-case`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (assetNames.has(asset.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_ASSET_ID\", `Duplicate asset \"${asset.id}\"`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tassetNames.add(asset.id);\n\t\tif (isBuiltInAsset(asset.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"BUILTIN_ASSET_ID_RESERVED\", `Asset \"${asset.id}\" is reserved for a built-in asset`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!hasUrlAssetSource(document, asset.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"ASSET_URL_REQUIRED\", `Asset \"${asset.id}\" has no URL source`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tasset.anchor !== undefined &&\n\t\t\t(!isValidPosition(asset.anchor) || asset.anchor.some((part) => part < 0 || part > 1))\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_ASSET_ANCHOR\", `Asset \"${asset.id}\" anchor must use normalized values from 0 to 1`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tconst layers = document.header.layers;\n\tif (layers.length === 0) {\n\t\terrors.push(issue(\"NO_LAYERS\", \"Header must declare at least one layer\"));\n\t}\n\n\tconst layerNames = new Set<string>();\n\tfor (const layer of layers) {\n\t\tif (!isValidIdentifier(layer.name)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_IDENTIFIER\", `Layer \"${layer.name}\" must be kebab-case`, {\n\t\t\t\t\tlayerName: layer.name,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (layerNames.has(layer.name)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_LAYER_NAME\", `Duplicate layer \"${layer.name}\"`, {\n\t\t\t\t\tlayerName: layer.name,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tlayerNames.add(layer.name);\n\t\tif (layer.order !== undefined && (!Number.isFinite(layer.order) || !Number.isInteger(layer.order))) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_LAYER_ORDER\", \"Layer order must be a finite integer\", {\n\t\t\t\t\tlayerName: layer.name,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tconst floor = document.header.floor;\n\tif (floor) {\n\t\tif (floor.size !== undefined && !isValidPositiveTuple(floor.size)) {\n\t\t\terrors.push(issue(\"INVALID_FLOOR_SIZE\", \"Floor size must be positive\"));\n\t\t}\n\t\tif (floor.layer !== undefined && !layerNames.has(floor.layer)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"LAYER_NOT_FOUND\", `Floor layer \"${floor.layer}\" is not declared`, {\n\t\t\t\t\tlayerName: floor.layer,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (floor.asset !== undefined && !assetNames.has(floor.asset)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"ASSET_NOT_DECLARED\", `Floor asset \"${floor.asset}\" is not declared`, {\n\t\t\t\t\tassetName: floor.asset,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (floor.asset !== undefined && isBuiltInAsset(floor.asset)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_FLOOR_ASSET\", \"Floor asset cannot use a built-in generated asset\", { assetName: floor.asset }),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction isValidPositiveTuple(value: unknown): value is [number, number] {\n\treturn Array.isArray(value) && value.length === 2 && value.every((part) => Number.isFinite(part) && part > 0);\n}\n\nfunction validateTimelineShape(document: SceneDocument, errors: ValidationError[]): void {\n\tif (document.scenes.length === 0) {\n\t\terrors.push(issue(\"NO_SCENES\", \"Document must contain at least one scene\"));\n\t\treturn;\n\t}\n\n\tconst sceneIds = new Set<string>();\n\tfor (const scene of document.scenes) {\n\t\tif (!isValidIdentifier(scene.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_IDENTIFIER\", `Scene \"${scene.id}\" must be kebab-case`, {\n\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (sceneIds.has(scene.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_SCENE_ID\", `Duplicate scene \"${scene.id}\"`, {\n\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tsceneIds.add(scene.id);\n\t}\n\n\tconst first = document.scenes[0];\n\tif (\n\t\tfirst.elements === undefined ||\n\t\tfirst.add !== undefined ||\n\t\tfirst.update !== undefined ||\n\t\tfirst.remove !== undefined\n\t) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_INITIAL_SCENE\", \"Initial scene must use elements and no delta operations\", { sceneId: first.id }),\n\t\t);\n\t}\n\n\tfor (const scene of document.scenes.slice(1)) {\n\t\tif (scene.elements !== undefined || scene.connections !== undefined) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_SCENE_DELTA\", \"Delta scenes may not use top-level elements or connections\", {\n\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validatePlacement(\n\tplacement: ElementPlacement,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tvalidateElementCommon(placement, document, errors, sceneId);\n\tvalidateGeneratedContentForAsset(placement, placement.asset, errors, sceneId);\n\tif (!isBuiltInAsset(placement.asset) && !declaredAssetNames(document).has(placement.asset)) {\n\t\terrors.push(\n\t\t\tissue(\"ASSET_NOT_DECLARED\", `Asset \"${placement.asset}\" is not declared`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: placement.id,\n\t\t\t\tassetName: placement.asset,\n\t\t\t}),\n\t\t);\n\t}\n\tif (!isValidPosition(placement.at)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_POSITION\", \"Element at must be finite and non-negative\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: placement.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validatePatch(\n\tpatch: ElementPatch,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n\tcurrentAsset?: string,\n): void {\n\tvalidateElementCommon(patch, document, errors, sceneId);\n\tif (currentAsset !== undefined) {\n\t\tvalidateGeneratedContentForAsset(patch, currentAsset, errors, sceneId);\n\t}\n\tif (patch.at !== undefined && !isValidPosition(patch.at)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_POSITION\", \"Element at must be finite and non-negative\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: patch.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateElementCommon(\n\telement: ElementPlacement | ElementPatch,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tif (!isValidIdentifier(element.id)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_IDENTIFIER\", `Element \"${element.id}\" must be kebab-case`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.size !== undefined && !isValidPositiveNumber(element.size)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_SIZE\", \"Element size must be greater than zero\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.size !== undefined && (!Number.isInteger(element.size) || element.size < 1)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_SIZE\", \"Element size must be a positive whole grid cell count\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.layer !== undefined && !declaredLayerNames(document).has(element.layer)) {\n\t\terrors.push(\n\t\t\tissue(\"LAYER_NOT_FOUND\", `Layer \"${element.layer}\" is not declared`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tlayerName: element.layer,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.enter !== undefined && !VALID_ENTRY_ANIMATIONS.has(element.enter)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown entry animation \"${element.enter}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.exit !== undefined && !VALID_EXIT_ANIMATIONS.has(element.exit)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown exit animation \"${element.exit}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tvalidateAmbient(element.ambient, errors, sceneId, element.id);\n}\n\nfunction validateGeneratedContentForAsset(\n\telement: ElementPlacement | ElementPatch,\n\tassetId: string,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tif (isBuiltInAsset(assetId)) {\n\t\tif (assetId === BUILT_IN_TEXT_ASSET_ID) {\n\t\t\tvalidateTextForAsset(element, errors, sceneId);\n\t\t\treturn;\n\t\t}\n\t\tvalidatePrimitiveForAsset(element, assetId, errors, sceneId);\n\t\treturn;\n\t}\n\n\tif (element.text !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"TEXT_CONTENT_FOR_NON_TEXT_ASSET\", \"Only built-in text elements may define text content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tassetName: assetId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.primitive !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"GENERATED_CONTENT_FOR_EXTERNAL_ASSET\", \"Only built-in generated assets may define primitive content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tassetName: assetId,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateTextForAsset(\n\telement: ElementPlacement | ElementPatch,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tif (!element.text) {\n\t\terrors.push(\n\t\t\tissue(\"TEXT_CONTENT_REQUIRED\", \"Built-in text elements require text content\", { sceneId, elementId: element.id }),\n\t\t);\n\t\treturn;\n\t}\n\tif (element.primitive !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"PRIMITIVE_CONTENT_FOR_TEXT_ASSET\", \"Built-in text elements may not define primitive content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tvalidateTextContent(element.text, errors, sceneId, element.id);\n}\n\nfunction validatePrimitiveForAsset(\n\telement: ElementPlacement | ElementPatch,\n\tassetId: string,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tif (!isPrimitiveAsset(assetId)) return;\n\tif (element.text !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"TEXT_CONTENT_FOR_PRIMITIVE_ASSET\", \"Primitive elements may not define text content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tconst primitive = element.primitive;\n\tif (!primitive) {\n\t\terrors.push(\n\t\t\tissue(\"PRIMITIVE_CONTENT_REQUIRED\", \"Built-in primitive elements require primitive content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tassetName: assetId,\n\t\t\t}),\n\t\t);\n\t\treturn;\n\t}\n\n\tconst activeKeys = Object.entries(primitive)\n\t\t.filter(([, value]) => value !== undefined)\n\t\t.map(([key]) => key);\n\tif (activeKeys.length !== 1 || activeKeys[0] !== assetId) {\n\t\terrors.push(\n\t\t\tissue(\"PRIMITIVE_CONTENT_MISMATCH\", \"Primitive content must define exactly the payload matching its asset id\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tassetName: assetId,\n\t\t\t}),\n\t\t);\n\t\treturn;\n\t}\n\n\tconst payload = primitive[assetId as keyof PrimitiveContent];\n\tvalidatePrimitiveStyle(payload, errors, sceneId, element.id);\n\tif (assetId === \"rectangle\") {\n\t\tconst rx = primitive.rectangle?.rx;\n\t\tif (rx !== undefined && (!Number.isFinite(rx) || rx < 0 || rx > 0.5)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Rectangle rx must be from 0 to 0.5\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: element.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\tif (assetId === \"polygon\") {\n\t\tvalidatePrimitivePoints(primitive.polygon?.points, 3, errors, sceneId, element.id);\n\t}\n\tif (assetId === \"line\") {\n\t\tvalidatePrimitivePoints(primitive.line?.points, 2, errors, sceneId, element.id);\n\t\tif (primitive.line?.lineCap !== undefined && !VALID_LINE_CAPS.has(primitive.line.lineCap)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Line cap is invalid\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: element.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (primitive.line?.lineJoin !== undefined && !VALID_LINE_JOINS.has(primitive.line.lineJoin)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Line join is invalid\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: element.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validatePrimitiveStyle(\n\tstyle: PrimitiveContent[keyof PrimitiveContent] | undefined,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n): void {\n\tif (!style) return;\n\tfor (const token of [style.stroke, \"fill\" in style ? style.fill : undefined]) {\n\t\tif (token !== undefined && !isSafeTextStyleToken(token)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Primitive color token is unsafe\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\tif (style.strokeWidth !== undefined && (!Number.isFinite(style.strokeWidth) || style.strokeWidth < 0)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Primitive strokeWidth is invalid\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (style.opacity !== undefined && (!Number.isFinite(style.opacity) || style.opacity < 0 || style.opacity > 1)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Primitive opacity must be 0..1\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (\n\t\tstyle.dash !== undefined &&\n\t\t(!isValidPositiveTuple(style.dash) || style.dash.some((part) => !Number.isFinite(part)))\n\t) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Primitive dash is invalid\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validatePrimitivePoints(\n\tpoints: [number, number][] | undefined,\n\tminCount: number,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n): void {\n\tif (\n\t\t!points ||\n\t\tpoints.length < minCount ||\n\t\tpoints.length > MAX_PRIMITIVE_POINTS ||\n\t\tpoints.some((point) => !isValidPosition(point) || point.some((part) => part < 0 || part > 1))\n\t) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_PRIMITIVE_POINTS\", \"Primitive points must use normalized coordinates from 0 to 1\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateTextContent(text: TextContent, errors: ValidationError[], sceneId: string, elementId: string): void {\n\tconst value = normalizeTextValue(text.value);\n\tconst lines = value.split(\"\\n\");\n\tif (\n\t\tvalue.length === 0 ||\n\t\tvalue.length > MAX_TEXT_CHARACTERS ||\n\t\tlines.length > MAX_TEXT_LINES ||\n\t\tlines.every((line) => line.trim().length === 0)\n\t) {\n\t\terrors.push(\n\t\t\tissue(\n\t\t\t\t\"INVALID_TEXT_CONTENT\",\n\t\t\t\t`Text content must be non-empty, at most ${MAX_TEXT_CHARACTERS} characters, and at most ${MAX_TEXT_LINES} lines`,\n\t\t\t\t{ sceneId, elementId },\n\t\t\t),\n\t\t);\n\t}\n\n\tif (text.align !== undefined && !VALID_TEXT_ALIGN.has(text.align)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text align must be start, middle, or end\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (text.fontSize !== undefined && !isValidPositiveNumber(text.fontSize)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text fontSize must be greater than zero\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (text.lineHeight !== undefined && !isValidPositiveNumber(text.lineHeight)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text lineHeight must be greater than zero\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (text.fontWeight !== undefined && !isValidTextWeight(text.fontWeight)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text fontWeight must be normal, bold, or a positive finite number\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (text.fill !== undefined && !isSafeTextStyleToken(text.fill)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text fill contains unsafe CSS syntax\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction normalizeTextValue(value: string): string {\n\treturn value.replace(/\\r\\n?/g, \"\\n\");\n}\n\nfunction isValidTextWeight(value: TextContent[\"fontWeight\"]): boolean {\n\tif (typeof value === \"number\") {\n\t\treturn Number.isFinite(value) && value > 0;\n\t}\n\treturn typeof value === \"string\" && VALID_TEXT_WEIGHT.has(value);\n}\n\nfunction isSafeTextStyleToken(value: string): boolean {\n\tconst normalized = value.trim().toLowerCase();\n\treturn (\n\t\tnormalized.length > 0 &&\n\t\t!normalized.includes(\"url(\") &&\n\t\t!normalized.includes(\"javascript:\") &&\n\t\t!value.includes(\"<\") &&\n\t\t!value.includes(\">\") &&\n\t\t!hasControlCharacters(value)\n\t);\n}\n\nfunction hasControlCharacters(value: string): boolean {\n\tfor (const char of value) {\n\t\tconst code = char.charCodeAt(0);\n\t\tif (code < 32 || code === 127) return true;\n\t}\n\treturn false;\n}\n\nfunction validateRemoval(removal: ElementRemoval, errors: ValidationError[], sceneId: string): void {\n\tif (!isValidIdentifier(removal.id)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_IDENTIFIER\", `Element \"${removal.id}\" must be kebab-case`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: removal.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (removal.exit !== undefined && !VALID_EXIT_ANIMATIONS.has(removal.exit)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown exit animation \"${removal.exit}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: removal.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateAmbient(\n\tambient: AmbientAnimation[] | undefined,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n): void {\n\tvalidateAmbientWithSet(ambient, VALID_AMBIENT_ANIMATIONS, errors, sceneId, elementId);\n}\n\nfunction validateAmbientWithSet(\n\tambient: AmbientAnimation[] | undefined,\n\tvalidAnimations: ReadonlySet<string>,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n): void {\n\tfor (const animation of ambient ?? []) {\n\t\tif (!validAnimations.has(animation.name)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"UNKNOWN_AMBIENT_ANIMATION\", `Unknown ambient animation \"${animation.name}\"`, { sceneId, elementId }),\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tanimation.infinite === false &&\n\t\t\t(animation.iterations === undefined || !Number.isInteger(animation.iterations) || animation.iterations <= 0)\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_AMBIENT_ITERATIONS\", \"Ambient iterations must be positive when infinite is false\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateSceneObjectDeltas(document: SceneDocument, errors: ValidationError[]): void {\n\tconst elements = new Map<string, ResolvedElementRecord>();\n\tconst connectors = new Map<string, ResolvedConnectorRecord>();\n\tconst documentElementIds = collectDocumentElementIds(document);\n\tconst first = document.scenes[0];\n\tif (!first?.elements) return;\n\n\tfor (const element of first.elements) {\n\t\tvalidatePlacement(element, document, errors, first.id);\n\t\tif (elements.has(element.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_ELEMENT_ID\", `Duplicate element \"${element.id}\"`, {\n\t\t\t\t\tsceneId: first.id,\n\t\t\t\t\telementId: element.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\telements.set(element.id, normalizePlacement(document, element));\n\t}\n\n\tfor (const connection of first.connections ?? []) {\n\t\tvalidateConnectionPlacement(connection, document, errors, first.id, elements, documentElementIds);\n\t\tif (connectors.has(connection.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_CONNECTOR_ID\", `Duplicate connection \"${connection.id}\"`, {\n\t\t\t\t\tsceneId: first.id,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tconnectors.set(connection.id, normalizeConnectionPlacement(document, connection));\n\t}\n\n\tfor (const scene of document.scenes.slice(1)) {\n\t\tconst updateIds = new Set<string>();\n\t\tfor (const update of scene.update?.elements ?? []) {\n\t\t\tconst existing = elements.get(update.id)?.asset;\n\t\t\tvalidatePatch(update, document, errors, scene.id, existing);\n\t\t\tupdateIds.add(update.id);\n\t\t\tif (!elements.has(update.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ELEMENT_NOT_PRESENT\", `Element \"${update.id}\" is not present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: update.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (const removal of scene.remove?.elements ?? []) {\n\t\t\tvalidateRemoval(removal, errors, scene.id);\n\t\t\tif (updateIds.has(removal.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ELEMENT_DELTA_CONFLICT\", `Element \"${removal.id}\" cannot be updated and removed in one scene`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: removal.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!elements.has(removal.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ELEMENT_NOT_PRESENT\", `Element \"${removal.id}\" is not present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: removal.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (const add of scene.add?.elements ?? []) {\n\t\t\tvalidatePlacement(add, document, errors, scene.id);\n\t\t\tif (elements.has(add.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ELEMENT_ALREADY_PRESENT\", `Element \"${add.id}\" is already present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: add.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst elementsForConnections = new Map(elements);\n\t\tfor (const update of scene.update?.elements ?? []) {\n\t\t\tconst existing = elementsForConnections.get(update.id);\n\t\t\tif (existing) {\n\t\t\t\telementsForConnections.set(update.id, { ...existing, ...update });\n\t\t\t}\n\t\t}\n\t\tfor (const add of scene.add?.elements ?? []) {\n\t\t\telementsForConnections.set(add.id, normalizePlacement(document, add));\n\t\t}\n\n\t\tvalidateEndpointRemovalRule(scene, connectors, errors);\n\n\t\tconst connectorUpdateIds = new Set<string>();\n\t\tfor (const update of scene.update?.connections ?? []) {\n\t\t\tvalidateConnectionRemovalLikeId(update.id, errors, scene.id);\n\t\t\tconnectorUpdateIds.add(update.id);\n\t\t\tconst existing = connectors.get(update.id);\n\t\t\tif (!existing) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"CONNECTOR_NOT_PRESENT\", `Connection \"${update.id}\" is not present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: update.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tvalidateConnectionPatch(update, document, errors, scene.id, elementsForConnections, documentElementIds);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvalidateConnectionPatch(\n\t\t\t\t{\n\t\t\t\t\t...existing,\n\t\t\t\t\t...update,\n\t\t\t\t\tstyle: mergeStyle(existing.style, update.style),\n\t\t\t\t},\n\t\t\t\tdocument,\n\t\t\t\terrors,\n\t\t\t\tscene.id,\n\t\t\t\telementsForConnections,\n\t\t\t\tdocumentElementIds,\n\t\t\t);\n\t\t}\n\n\t\tfor (const removal of scene.remove?.connections ?? []) {\n\t\t\tvalidateConnectionRemoval(removal, errors, scene.id);\n\t\t\tif (connectorUpdateIds.has(removal.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"CONNECTOR_DELTA_CONFLICT\", `Connection \"${removal.id}\" cannot be updated and removed in one scene`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: removal.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!connectors.has(removal.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"CONNECTOR_NOT_PRESENT\", `Connection \"${removal.id}\" is not present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: removal.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (const add of scene.add?.connections ?? []) {\n\t\t\tvalidateConnectionPlacement(add, document, errors, scene.id, elementsForConnections, documentElementIds);\n\t\t\tif (connectors.has(add.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"CONNECTOR_ALREADY_PRESENT\", `Connection \"${add.id}\" is already present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: add.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (const update of scene.update?.elements ?? []) {\n\t\t\tconst existing = elements.get(update.id);\n\t\t\tif (existing) {\n\t\t\t\telements.set(update.id, { ...existing, ...update });\n\t\t\t}\n\t\t}\n\t\tfor (const add of scene.add?.elements ?? []) {\n\t\t\telements.set(add.id, normalizePlacement(document, add));\n\t\t}\n\t\tfor (const update of scene.update?.connections ?? []) {\n\t\t\tconst existing = connectors.get(update.id);\n\t\t\tif (existing) {\n\t\t\t\tconnectors.set(update.id, {\n\t\t\t\t\t...existing,\n\t\t\t\t\t...update,\n\t\t\t\t\tstyle: mergeStyle(existing.style, update.style),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tfor (const add of scene.add?.connections ?? []) {\n\t\t\tconnectors.set(add.id, normalizeConnectionPlacement(document, add));\n\t\t}\n\t\tfor (const removal of scene.remove?.connections ?? []) {\n\t\t\tconnectors.delete(removal.id);\n\t\t}\n\t\tfor (const removal of scene.remove?.elements ?? []) {\n\t\t\telements.delete(removal.id);\n\t\t}\n\t}\n}\n\nfunction collectDocumentElementIds(document: SceneDocument): Set<string> {\n\tconst ids = new Set<string>();\n\tfor (const scene of document.scenes) {\n\t\tfor (const element of scene.elements ?? []) ids.add(element.id);\n\t\tfor (const element of scene.add?.elements ?? []) ids.add(element.id);\n\t}\n\treturn ids;\n}\n\nfunction validateEndpointRemovalRule(\n\tscene: SceneStep,\n\tconnectors: Map<string, ResolvedConnectorRecord>,\n\terrors: ValidationError[],\n): void {\n\tconst removedElements = new Set((scene.remove?.elements ?? []).map((removal) => removal.id));\n\tif (removedElements.size === 0) return;\n\tconst removedConnections = new Set((scene.remove?.connections ?? []).map((removal) => removal.id));\n\tfor (const connection of connectors.values()) {\n\t\tif (removedConnections.has(connection.id)) continue;\n\t\tconst endpointIds = [connection.from?.element, connection.to?.element];\n\t\tif (endpointIds.some((id) => id !== undefined && removedElements.has(id))) {\n\t\t\terrors.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"CONNECTION_ENDPOINT_REMOVED\",\n\t\t\t\t\t`Connection \"${connection.id}\" references an element removed in the same scene`,\n\t\t\t\t\t{ sceneId: scene.id, elementId: connection.id },\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateConnectionPlacement(\n\tconnection: ConnectionPlacement,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telements: Map<string, ResolvedElementRecord>,\n\tdocumentElementIds: Set<string>,\n): void {\n\tvalidateConnectionCommon(connection, document, errors, sceneId, elements, documentElementIds);\n}\n\nfunction validateConnectionPatch(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telements: Map<string, ResolvedElementRecord>,\n\tdocumentElementIds: Set<string>,\n): void {\n\tvalidateConnectionCommon(connection, document, errors, sceneId, elements, documentElementIds);\n}\n\nfunction validateConnectionCommon(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telements: Map<string, ResolvedElementRecord>,\n\tdocumentElementIds: Set<string>,\n): void {\n\tvalidateConnectionRemovalLikeId(connection.id, errors, sceneId);\n\tif (documentElementIds.has(connection.id)) {\n\t\terrors.push(\n\t\t\tissue(\"DUPLICATE_SCENE_OBJECT_ID\", `Connection \"${connection.id}\" collides with an element id`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.layer !== undefined && !declaredLayerNames(document).has(connection.layer)) {\n\t\terrors.push(\n\t\t\tissue(\"LAYER_NOT_FOUND\", `Layer \"${connection.layer}\" is not declared`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t\tlayerName: connection.layer,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.enter !== undefined && !VALID_ENTRY_ANIMATIONS.has(connection.enter)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown entry animation \"${connection.enter}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.exit !== undefined && !VALID_EXIT_ANIMATIONS.has(connection.exit)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown exit animation \"${connection.exit}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tvalidateAmbientWithSet(connection.ambient, VALID_CONNECTOR_AMBIENT_ANIMATIONS, errors, sceneId, connection.id);\n\tvalidateConnectionRouteSource(connection, errors, sceneId);\n\tvalidateConnectionEndpoints(connection, elements, errors, sceneId);\n\tvalidateConnectionRouting(connection, errors, sceneId);\n\tvalidateConnectorStyle(connection.style, errors, sceneId, connection.id);\n\tif (connection.start !== undefined && !VALID_CONNECTOR_ENDPOINTS.has(connection.start)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ENDPOINT\", \"Invalid connector start endpoint\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.end !== undefined && !VALID_CONNECTOR_ENDPOINTS.has(connection.end)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ENDPOINT\", \"Invalid connector end endpoint\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.direction !== undefined && !VALID_CONNECTOR_DIRECTIONS.has(connection.direction)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_DIRECTION\", \"Invalid connector direction\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateConnectionRouteSource(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tconst hasRoute = connection.route !== undefined;\n\tconst hasEndpointRoute = connection.from !== undefined || connection.to !== undefined;\n\tif (hasRoute === hasEndpointRoute || (hasEndpointRoute && (!connection.from || !connection.to))) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Connection must use either route or both from and to\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.route !== undefined) {\n\t\tif (\n\t\t\tconnection.route.length < 2 ||\n\t\t\tconnection.route.some(\n\t\t\t\t(point) => !isValidPosition(point) || point.some((coordinate) => !Number.isInteger(coordinate)),\n\t\t\t)\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Manual connection route must contain at least two whole-grid points\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t} else if (!isGridAxisRoute(connection.route)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Manual connection route segments must follow one grid axis at a time\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateConnectionEndpoints(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\telements: Map<string, ResolvedElementRecord>,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tfor (const key of [\"from\", \"to\"] as const) {\n\t\tconst endpoint = connection[key];\n\t\tif (endpoint === undefined) continue;\n\t\tconst hasElement = endpoint.element !== undefined;\n\t\tconst hasAt = endpoint.at !== undefined;\n\t\tif (hasElement === hasAt) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Connection endpoint must use exactly one of element or at\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (endpoint.element !== undefined && !elements.has(endpoint.element)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"CONNECTOR_ENDPOINT_NOT_FOUND\", `Connection endpoint \"${endpoint.element}\" was not found`, {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (endpoint.at !== undefined && !isValidPosition(endpoint.at)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Endpoint at must be non-negative\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (endpoint.side !== undefined && !VALID_CONNECTOR_SIDES.has(endpoint.side)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Invalid endpoint side\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tendpoint.offset !== undefined &&\n\t\t\t(!Number.isFinite(endpoint.offset) || endpoint.offset < -0.5 || endpoint.offset > 0.5)\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Invalid endpoint offset\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateConnectionRouting(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tconst routing = connection.routing;\n\tif (routing === undefined) return;\n\tif (connection.route !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", \"Routing config is valid only with endpoint-routed connections\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (routing.mode !== undefined && !VALID_CONNECTOR_ROUTING_MODES.has(routing.mode)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", \"Invalid connector routing mode\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (routing.avoid !== undefined) {\n\t\tconst avoid = routing.avoid;\n\t\tif (!(avoid === \"objects\" || avoid === \"none\" || Array.isArray(avoid))) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", \"Invalid connector routing avoid\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\tfor (const [name, value] of [\n\t\t[\"clearance\", routing.clearance],\n\t\t[\"gridStep\", routing.gridStep],\n\t\t[\"maxBends\", routing.maxBends],\n\t] as const) {\n\t\tif (value !== undefined && (!Number.isFinite(value) || value < 0)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", `Invalid connector routing ${name}`, { sceneId, elementId: connection.id }),\n\t\t\t);\n\t\t}\n\t}\n\tif (routing.prefer !== undefined && !VALID_CONNECTOR_ROUTING_PREFERENCES.has(routing.prefer)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", \"Invalid connector routing preference\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateConnectorStyle(\n\tstyle: ConnectorStyle | undefined,\n\terrors: ValidationError[],\n\tsceneId: string,\n\tconnectionId: string,\n): void {\n\tif (style === undefined) return;\n\tif (style.pattern !== undefined && !VALID_CONNECTOR_PATTERNS.has(style.pattern)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Invalid connector pattern\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (style.variant !== undefined && !VALID_CONNECTOR_VARIANTS.has(style.variant)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Invalid connector variant\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (style.lane !== undefined && !VALID_CONNECTOR_LANES.has(style.lane)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Invalid connector lane\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tfor (const [name, value] of [\n\t\t[\"strokeWidth\", style.strokeWidth],\n\t\t[\"outlineWidth\", style.outlineWidth],\n\t] as const) {\n\t\tif (value !== undefined && !isValidPositiveNumber(value)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", `Invalid connector ${name}`, {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connectionId,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\tif (style.opacity !== undefined && (!Number.isFinite(style.opacity) || style.opacity < 0 || style.opacity > 1)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Connector opacity must be 0..1\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (\n\t\tstyle.dash !== undefined &&\n\t\t(!isValidPositiveTuple(style.dash) || style.dash.some((part) => !Number.isFinite(part)))\n\t) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Invalid connector dash\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tfor (const token of [style.stroke, style.outline]) {\n\t\tif (token !== undefined && !isSafeTextStyleToken(token)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Connector color token is unsafe\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connectionId,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateConnectionRemoval(removal: ConnectionRemoval, errors: ValidationError[], sceneId: string): void {\n\tvalidateConnectionRemovalLikeId(removal.id, errors, sceneId);\n\tif (removal.exit !== undefined && !VALID_EXIT_ANIMATIONS.has(removal.exit)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown exit animation \"${removal.exit}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: removal.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateConnectionRemovalLikeId(id: string, errors: ValidationError[], sceneId: string): void {\n\tif (!isValidIdentifier(id)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_IDENTIFIER\", `Connection \"${id}\" must be kebab-case`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction mergeStyle(base: ConnectorStyle | undefined, patch: ConnectorStyle | undefined): ConnectorStyle | undefined {\n\tif (base === undefined) return patch;\n\tif (patch === undefined) return base;\n\treturn { ...base, ...patch };\n}\n\nfunction validateWarnings(document: SceneDocument, warnings: ValidationWarning[]): void {\n\tconst usedAssets = new Set<string>();\n\tconst usedLayers = new Set<string>();\n\tconst snapshots = resolveSceneSnapshots(document);\n\n\tif (document.header.floor?.asset && document.header.floor.visible !== false) {\n\t\tusedAssets.add(document.header.floor.asset);\n\t}\n\n\tfor (const snapshot of snapshots) {\n\t\tfor (const element of snapshot.elements) {\n\t\t\tusedAssets.add(element.asset);\n\t\t\tif (isBuiltInAsset(element.asset)) {\n\t\t\t\tusedAssets.delete(element.asset);\n\t\t\t}\n\t\t\tusedLayers.add(element.layer);\n\t\t\tif (document.header.floor?.size) {\n\t\t\t\tconst [columns, rows] = document.header.floor.size;\n\t\t\t\tif (element.pos[0] + element.size > columns || element.pos[1] + element.size > rows) {\n\t\t\t\t\twarnings.push(\n\t\t\t\t\t\tissue(\"ELEMENT_OUTSIDE_FLOOR\", `Element \"${element.id}\" is outside floor bounds`, {\n\t\t\t\t\t\t\tsceneId: snapshot.id,\n\t\t\t\t\t\t\telementId: element.id,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const connector of snapshot.connectors) {\n\t\t\tusedLayers.add(connector.layer);\n\t\t\tif (document.header.floor?.size) {\n\t\t\t\tconst [columns, rows] = document.header.floor.size;\n\t\t\t\tif (connector.route.some((point) => point[0] > columns || point[1] > rows)) {\n\t\t\t\t\twarnings.push(\n\t\t\t\t\t\tissue(\"CONNECTOR_OUTSIDE_FLOOR\", `Connection \"${connector.id}\" is outside floor bounds`, {\n\t\t\t\t\t\t\tsceneId: snapshot.id,\n\t\t\t\t\t\t\telementId: connector.id,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const asset of document.header.assets) {\n\t\tif (!usedAssets.has(asset.id)) {\n\t\t\twarnings.push(\n\t\t\t\tissue(\"UNREFERENCED_ASSET\", `Asset \"${asset.id}\" is not used`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const layer of document.header.layers) {\n\t\tif (!usedLayers.has(layer.name) && layer.name !== defaultFloorLayer(document)) {\n\t\t\twarnings.push(\n\t\t\t\tissue(\"UNREFERENCED_LAYER\", `Layer \"${layer.name}\" is not used`, {\n\t\t\t\t\tlayerName: layer.name,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport function validateScene(document: SceneDocument): ValidationReport {\n\tconst errors: ValidationError[] = [];\n\tconst warnings: ValidationWarning[] = [];\n\n\tvalidateHeader(document, errors);\n\tvalidateTimelineShape(document, errors);\n\tvalidateSceneObjectDeltas(document, errors);\n\n\tif (errors.length === 0) {\n\t\tvalidateWarnings(document, warnings);\n\t}\n\n\treturn {\n\t\terrors,\n\t\twarnings,\n\t\tisValid: errors.length === 0,\n\t};\n}\n\nexport function resolveSceneSnapshots(document: SceneDocument): ResolvedSceneSnapshot[] {\n\tconst progress = deriveProgresses(document.scenes);\n\tconst currentElements = new Map<string, ResolvedElementRecord>();\n\tconst currentConnectors = new Map<string, ResolvedConnectorRecord>();\n\tconst snapshots: ResolvedSceneSnapshot[] = [];\n\n\tfor (const [index, scene] of document.scenes.entries()) {\n\t\tconst exiting: RuntimeElementState[] = [];\n\t\tconst exitingConnectors: RuntimeConnectorState[] = [];\n\n\t\tif (index === 0) {\n\t\t\tfor (const element of scene.elements ?? []) {\n\t\t\t\tcurrentElements.set(element.id, normalizePlacement(document, element));\n\t\t\t}\n\t\t\tfor (const connection of scene.connections ?? []) {\n\t\t\t\tcurrentConnectors.set(connection.id, normalizeConnectionPlacement(document, connection));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const patch of scene.update?.elements ?? []) {\n\t\t\t\tconst existing = currentElements.get(patch.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\tcurrentElements.set(patch.id, { ...existing, ...patch });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const element of scene.add?.elements ?? []) {\n\t\t\t\tcurrentElements.set(element.id, normalizePlacement(document, element));\n\t\t\t}\n\n\t\t\tfor (const patch of scene.update?.connections ?? []) {\n\t\t\t\tconst existing = currentConnectors.get(patch.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\tcurrentConnectors.set(patch.id, {\n\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t...patch,\n\t\t\t\t\t\tstyle: mergeStyle(existing.style, patch.style),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const connection of scene.add?.connections ?? []) {\n\t\t\t\tcurrentConnectors.set(connection.id, normalizeConnectionPlacement(document, connection));\n\t\t\t}\n\n\t\t\tfor (const removal of scene.remove?.elements ?? []) {\n\t\t\t\tconst existing = currentElements.get(removal.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\texiting.push(toRuntimeState(existing, \"exiting\", removal.exit));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const removal of scene.remove?.connections ?? []) {\n\t\t\t\tconst existing = currentConnectors.get(removal.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\texitingConnectors.push(toRuntimeConnectorState(document, existing, currentElements, \"exiting\", removal.exit));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst addedIds = new Set((scene.add?.elements ?? []).map((element) => element.id));\n\t\tconst addedConnectorIds = new Set((scene.add?.connections ?? []).map((connection) => connection.id));\n\t\tconst snapshotElements = Array.from(currentElements.values()).map((element) =>\n\t\t\ttoRuntimeState(element, index > 0 && addedIds.has(element.id) ? \"entering\" : \"present\"),\n\t\t);\n\t\tconst snapshotConnectors = Array.from(currentConnectors.values()).map((connection) =>\n\t\t\ttoRuntimeConnectorState(\n\t\t\t\tdocument,\n\t\t\t\tconnection,\n\t\t\t\tcurrentElements,\n\t\t\t\tindex > 0 && addedConnectorIds.has(connection.id) ? \"entering\" : \"present\",\n\t\t\t),\n\t\t);\n\t\tfor (const removed of exiting) {\n\t\t\tconst existingIndex = snapshotElements.findIndex((element) => element.id === removed.id);\n\t\t\tif (existingIndex >= 0) {\n\t\t\t\tsnapshotElements[existingIndex] = removed;\n\t\t\t} else {\n\t\t\t\tsnapshotElements.push(removed);\n\t\t\t}\n\t\t}\n\t\tfor (const removed of exitingConnectors) {\n\t\t\tconst existingIndex = snapshotConnectors.findIndex((connector) => connector.id === removed.id);\n\t\t\tif (existingIndex >= 0) {\n\t\t\t\tsnapshotConnectors[existingIndex] = removed;\n\t\t\t} else {\n\t\t\t\tsnapshotConnectors.push(removed);\n\t\t\t}\n\t\t}\n\n\t\tsnapshots.push({\n\t\t\tid: scene.id,\n\t\t\tprogress: progress[index],\n\t\t\telements: snapshotElements,\n\t\t\tconnectors: snapshotConnectors,\n\t\t});\n\n\t\tfor (const removal of scene.remove?.connections ?? []) {\n\t\t\tcurrentConnectors.delete(removal.id);\n\t\t}\n\t\tfor (const removal of scene.remove?.elements ?? []) {\n\t\t\tcurrentElements.delete(removal.id);\n\t\t}\n\t}\n\n\treturn snapshots;\n}\n\nexport function deriveProgresses(scenes: SceneStep[]): number[] {\n\tif (scenes.length <= 1) {\n\t\treturn scenes.map(() => 0);\n\t}\n\treturn scenes.map((_, index) => index / (scenes.length - 1));\n}\n\nfunction normalizePlacement(document: SceneDocument, element: ElementPlacement): ResolvedElementRecord {\n\treturn {\n\t\tid: element.id,\n\t\tasset: element.asset,\n\t\tat: element.at,\n\t\tsize: element.size,\n\t\tlayer: element.layer ?? defaultElementLayer(document),\n\t\tenter: element.enter,\n\t\texit: element.exit,\n\t\tambient: element.ambient,\n\t\ttext: element.text,\n\t\tprimitive: element.primitive,\n\t};\n}\n\nfunction normalizeConnectionPlacement(\n\tdocument: SceneDocument,\n\tconnection: ConnectionPlacement,\n): ResolvedConnectorRecord {\n\treturn {\n\t\tid: connection.id,\n\t\troute: connection.route,\n\t\tfrom: connection.from,\n\t\tto: connection.to,\n\t\trouting: connection.routing,\n\t\tlayer: connection.layer ?? defaultConnectorLayer(document),\n\t\tstyle: connection.style,\n\t\tstart: connection.start,\n\t\tend: connection.end,\n\t\tdirection: connection.direction,\n\t\tenter: connection.enter,\n\t\texit: connection.exit,\n\t\tambient: connection.ambient,\n\t};\n}\n\nfunction toRuntimeState(\n\telement: ResolvedElementRecord,\n\tpresence: RuntimeElementState[\"presence\"],\n\texit?: ElementRemoval[\"exit\"],\n): RuntimeElementState {\n\treturn {\n\t\tid: element.id,\n\t\tasset: element.asset,\n\t\tpos: element.at,\n\t\tsize: element.size ?? 1,\n\t\tlayer: element.layer ?? \"\",\n\t\tpresence,\n\t\tenter: presence === \"entering\" ? (element.enter ?? \"fade-in\") : element.enter,\n\t\texit: presence === \"exiting\" ? (exit ?? element.exit ?? \"fade-out\") : (exit ?? element.exit),\n\t\tambient: element.ambient,\n\t\ttext: element.text,\n\t\tprimitive: element.primitive,\n\t};\n}\n\nfunction toRuntimeConnectorState(\n\tdocument: SceneDocument,\n\tconnection: ResolvedConnectorRecord,\n\telements: Map<string, ResolvedElementRecord>,\n\tpresence: RuntimeConnectorState[\"presence\"],\n\texit?: ConnectionRemoval[\"exit\"],\n): RuntimeConnectorState {\n\treturn {\n\t\tid: connection.id,\n\t\troute: resolveConnectorRoute(connection, elements),\n\t\tlayer: connection.layer ?? defaultConnectorLayer(document),\n\t\tpresence,\n\t\tstyle: resolveConnectorStyle(connection.style),\n\t\tstart: connection.start ?? \"none\",\n\t\tend: connection.end ?? \"arrow\",\n\t\tdirection: connection.direction ?? \"route\",\n\t\tenter: presence === \"entering\" ? (connection.enter ?? \"fade-in\") : (connection.enter ?? \"fade-in\"),\n\t\texit: presence === \"exiting\" ? (exit ?? connection.exit ?? \"fade-out\") : (exit ?? connection.exit ?? \"fade-out\"),\n\t\tambient: connection.ambient,\n\t};\n}\n\nfunction resolveConnectorStyle(style: ConnectorStyle | undefined): RuntimeConnectorStyle {\n\tconst variant = style?.variant ?? \"line\";\n\tconst pattern = style?.pattern ?? \"solid\";\n\tconst resolved: RuntimeConnectorStyle = {\n\t\tvariant,\n\t\tpattern,\n\t\tstroke: style?.stroke ?? \"#2563eb\",\n\t\tstrokeWidth: style?.strokeWidth ?? (variant === \"road\" ? 14 : 3),\n\t\topacity: style?.opacity ?? 1,\n\t\toutlineWidth: style?.outlineWidth ?? (variant === \"road\" ? 2 : 0),\n\t\tlane: style?.lane ?? \"none\",\n\t};\n\tconst dash = style?.dash ?? defaultDash(pattern);\n\tif (dash) {\n\t\tresolved.dash = dash;\n\t}\n\tconst outline = style?.outline ?? (variant === \"road\" ? \"#ffffff\" : undefined);\n\tif (outline) {\n\t\tresolved.outline = outline;\n\t}\n\treturn resolved;\n}\n\nfunction defaultDash(pattern: RuntimeConnectorStyle[\"pattern\"]): [number, number] | undefined {\n\tif (pattern === \"dashed\") return [12, 8];\n\tif (pattern === \"dotted\") return [0, 8];\n\treturn undefined;\n}\n\nfunction resolveConnectorRoute(\n\tconnection: ResolvedConnectorRecord,\n\telements: Map<string, ResolvedElementRecord>,\n): [number, number][] {\n\tif (connection.route) return connection.route;\n\tif (!connection.from || !connection.to) return [];\n\n\tconst routing = connection.routing ?? {};\n\tconst avoid = routing.avoid ?? \"objects\";\n\tconst clearance = routing.clearance ?? 0.5;\n\tconst obstacles =\n\t\tavoid === \"none\" ? [] : collectObstacles(elements, connection.from, connection.to, avoid, clearance);\n\n\tconst starts = endpointCandidates(connection.from, elements);\n\tconst ends = endpointCandidates(connection.to, elements);\n\tlet best: [number, number][] | undefined;\n\tlet bestScore = Number.POSITIVE_INFINITY;\n\tfor (const start of starts) {\n\t\tfor (const end of ends) {\n\t\t\tconst route = routeBetween(start, end, obstacles, routing.mode ?? \"orthogonal\", clearance);\n\t\t\tconst score = routeScore(route, obstacles);\n\t\t\tif (score < bestScore) {\n\t\t\t\tbest = route;\n\t\t\t\tbestScore = score;\n\t\t\t}\n\t\t}\n\t}\n\treturn simplifyRoute(best ?? [starts[0]?.point ?? [0, 0], ends[0]?.point ?? [0, 0]]);\n}\n\ninterface RouteEndpointCandidate {\n\tpoint: [number, number];\n\tnormal?: [number, number];\n\tsideRank: number;\n}\n\ninterface ObstacleRect {\n\tminX: number;\n\tminY: number;\n\tmaxX: number;\n\tmaxY: number;\n}\n\nfunction endpointCandidates(\n\tendpoint: ConnectorEndpointRef,\n\telements: Map<string, ResolvedElementRecord>,\n): RouteEndpointCandidate[] {\n\tif (endpoint.at) return [{ point: endpoint.at, sideRank: 0 }];\n\tconst element = endpoint.element ? elements.get(endpoint.element) : undefined;\n\tif (!element) return [{ point: [0, 0], sideRank: 0 }];\n\tconst sides =\n\t\tendpoint.side && endpoint.side !== \"auto\"\n\t\t\t? [normalizeSide(endpoint.side)]\n\t\t\t: ([\"right\", \"left\", \"bottom\", \"top\"] as const);\n\treturn sides.map((side, index) => ({\n\t\tpoint: portForSide(element, side, endpoint.offset ?? 0),\n\t\tnormal: normalForSide(side),\n\t\tsideRank: index,\n\t}));\n}\n\nfunction normalizeSide(side: NonNullable<ConnectorEndpointRef[\"side\"]>): \"top\" | \"right\" | \"bottom\" | \"left\" {\n\tif (side === \"front\") return \"bottom\";\n\tif (side === \"back\") return \"top\";\n\tif (side === \"auto\") return \"right\";\n\treturn side;\n}\n\nfunction portForSide(\n\telement: ResolvedElementRecord,\n\tside: \"top\" | \"right\" | \"bottom\" | \"left\",\n\toffset: number,\n): [number, number] {\n\tconst x = element.at[0];\n\tconst y = element.at[1];\n\tconst size = element.size ?? 1;\n\tif (side === \"top\") return [x + size * (0.5 + offset), y];\n\tif (side === \"right\") return [x + size, y + size * (0.5 + offset)];\n\tif (side === \"bottom\") return [x + size * (0.5 - offset), y + size];\n\treturn [x, y + size * (0.5 - offset)];\n}\n\nfunction normalForSide(side: \"top\" | \"right\" | \"bottom\" | \"left\"): [number, number] {\n\tif (side === \"top\") return [0, -1];\n\tif (side === \"right\") return [1, 0];\n\tif (side === \"bottom\") return [0, 1];\n\treturn [-1, 0];\n}\n\nfunction collectObstacles(\n\telements: Map<string, ResolvedElementRecord>,\n\tfrom: ConnectorEndpointRef,\n\tto: ConnectorEndpointRef,\n\tavoid: \"objects\" | \"none\" | string[],\n\tclearance: number,\n): ObstacleRect[] {\n\tconst endpointIds = new Set([from.element, to.element].filter(Boolean));\n\tconst avoidIds = Array.isArray(avoid) ? new Set(avoid) : undefined;\n\tconst obstacles: ObstacleRect[] = [];\n\tfor (const element of elements.values()) {\n\t\tif (endpointIds.has(element.id) || element.asset === BUILT_IN_TEXT_ASSET_ID) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (avoidIds && !avoidIds.has(element.id)) continue;\n\t\tconst size = element.size ?? 1;\n\t\tobstacles.push({\n\t\t\tminX: element.at[0] - clearance,\n\t\t\tminY: element.at[1] - clearance,\n\t\t\tmaxX: element.at[0] + size + clearance,\n\t\t\tmaxY: element.at[1] + size + clearance,\n\t\t});\n\t}\n\treturn obstacles;\n}\n\nfunction routeBetween(\n\tstart: RouteEndpointCandidate,\n\tend: RouteEndpointCandidate,\n\tobstacles: ObstacleRect[],\n\tmode: NonNullable<ConnectorRouting[\"mode\"]> = \"orthogonal\",\n\tclearance = 0.5,\n): [number, number][] {\n\tconst startExit = offsetPort(start, clearance);\n\tconst endEntry = offsetPort(end, clearance);\n\tconst direct = [startExit, endEntry] as [number, number][];\n\tif (mode === \"straight\") return direct;\n\tif (isGridAxisRoute(direct) && !routeIntersectsObstacles(direct, obstacles)) {\n\t\treturn withEndpointPorts(start, end, direct);\n\t}\n\n\tconst candidates: [number, number][][] = [\n\t\t[startExit, [endEntry[0], startExit[1]], endEntry],\n\t\t[startExit, [startExit[0], endEntry[1]], endEntry],\n\t];\n\tconst blocking = obstacles.find((obstacle) => segmentIntersectsRect(startExit, endEntry, obstacle));\n\tif (blocking) {\n\t\tconst leftX = Math.max(0, blocking.minX);\n\t\tconst rightX = Math.max(0, blocking.maxX);\n\t\tconst topY = Math.max(0, blocking.minY);\n\t\tconst bottomY = Math.max(0, blocking.maxY);\n\t\tcandidates.push(\n\t\t\t[startExit, [leftX, startExit[1]], [leftX, endEntry[1]], endEntry],\n\t\t\t[startExit, [rightX, startExit[1]], [rightX, endEntry[1]], endEntry],\n\t\t\t[startExit, [startExit[0], topY], [endEntry[0], topY], endEntry],\n\t\t\t[startExit, [startExit[0], bottomY], [endEntry[0], bottomY], endEntry],\n\t\t);\n\t}\n\n\tconst route =\n\t\tcandidates\n\t\t\t.map((route) => simplifyRoute(route))\n\t\t\t.sort((a, b) => routeScore(a, obstacles) - routeScore(b, obstacles) || routeLength(a) - routeLength(b))[0] ??\n\t\tdirect;\n\treturn withEndpointPorts(start, end, route);\n}\n\nfunction offsetPort(endpoint: RouteEndpointCandidate, clearance: number): [number, number] {\n\tif (!endpoint.normal || clearance <= 0) return endpoint.point;\n\treturn [endpoint.point[0] + endpoint.normal[0] * clearance, endpoint.point[1] + endpoint.normal[1] * clearance];\n}\n\nfunction withEndpointPorts(\n\tstart: RouteEndpointCandidate,\n\tend: RouteEndpointCandidate,\n\troute: [number, number][],\n): [number, number][] {\n\treturn simplifyRoute([start.point, ...route, end.point]);\n}\n\nfunction routeScore(route: [number, number][], obstacles: ObstacleRect[]): number {\n\tconst intersections = routeIntersectsObstacles(route, obstacles) ? 1000 : 0;\n\treturn intersections + bendCount(route) * 10 + routeLength(route);\n}\n\nfunction routeLength(route: [number, number][]): number {\n\tlet length = 0;\n\tfor (let index = 1; index < route.length; index += 1) {\n\t\tlength += Math.abs(route[index][0] - route[index - 1][0]) + Math.abs(route[index][1] - route[index - 1][1]);\n\t}\n\treturn length;\n}\n\nfunction bendCount(route: [number, number][]): number {\n\tlet bends = 0;\n\tfor (let index = 2; index < route.length; index += 1) {\n\t\tconst a = route[index - 2];\n\t\tconst b = route[index - 1];\n\t\tconst c = route[index];\n\t\tif ((b[0] - a[0]) * (c[1] - b[1]) !== (b[1] - a[1]) * (c[0] - b[0])) {\n\t\t\tbends += 1;\n\t\t}\n\t}\n\treturn bends;\n}\n\nfunction routeIntersectsObstacles(route: [number, number][], obstacles: ObstacleRect[]): boolean {\n\tfor (let index = 1; index < route.length; index += 1) {\n\t\tif (obstacles.some((obstacle) => segmentIntersectsRect(route[index - 1], route[index], obstacle))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction segmentIntersectsRect(a: [number, number], b: [number, number], rect: ObstacleRect): boolean {\n\tif (\n\t\t(a[0] < rect.minX && b[0] < rect.minX) ||\n\t\t(a[0] > rect.maxX && b[0] > rect.maxX) ||\n\t\t(a[1] < rect.minY && b[1] < rect.minY) ||\n\t\t(a[1] > rect.maxY && b[1] > rect.maxY)\n\t) {\n\t\treturn false;\n\t}\n\tif (pointInsideRect(a, rect) || pointInsideRect(b, rect)) return true;\n\tconst corners: [number, number][] = [\n\t\t[rect.minX, rect.minY],\n\t\t[rect.maxX, rect.minY],\n\t\t[rect.maxX, rect.maxY],\n\t\t[rect.minX, rect.maxY],\n\t];\n\treturn [\n\t\t[corners[0], corners[1]],\n\t\t[corners[1], corners[2]],\n\t\t[corners[2], corners[3]],\n\t\t[corners[3], corners[0]],\n\t].some(([c, d]) => segmentsIntersect(a, b, c, d));\n}\n\nfunction pointInsideRect(point: [number, number], rect: ObstacleRect): boolean {\n\treturn point[0] > rect.minX && point[0] < rect.maxX && point[1] > rect.minY && point[1] < rect.maxY;\n}\n\nfunction segmentsIntersect(\n\ta: [number, number],\n\tb: [number, number],\n\tc: [number, number],\n\td: [number, number],\n): boolean {\n\tconst ccw = (p1: [number, number], p2: [number, number], p3: [number, number]) =>\n\t\t(p3[1] - p1[1]) * (p2[0] - p1[0]) > (p2[1] - p1[1]) * (p3[0] - p1[0]);\n\treturn ccw(a, c, d) !== ccw(b, c, d) && ccw(a, b, c) !== ccw(a, b, d);\n}\n\nfunction simplifyRoute(route: [number, number][]): [number, number][] {\n\tconst simplified: [number, number][] = [];\n\tfor (const point of route) {\n\t\tconst previous = simplified[simplified.length - 1];\n\t\tif (previous && previous[0] === point[0] && previous[1] === point[1]) {\n\t\t\tcontinue;\n\t\t}\n\t\tsimplified.push(point);\n\t\twhile (simplified.length >= 3) {\n\t\t\tconst a = simplified[simplified.length - 3];\n\t\t\tconst b = simplified[simplified.length - 2];\n\t\t\tconst c = simplified[simplified.length - 1];\n\t\t\tif ((b[0] - a[0]) * (c[1] - b[1]) === (b[1] - a[1]) * (c[0] - b[0])) {\n\t\t\t\tsimplified.splice(simplified.length - 2, 1);\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn simplified;\n}\n\nfunction isGridAxisRoute(route: [number, number][]): boolean {\n\tfor (let index = 1; index < route.length; index += 1) {\n\t\tconst previous = route[index - 1];\n\t\tconst current = route[index];\n\t\tif (previous[0] !== current[0] && previous[1] !== current[1]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n","import { createHash } from \"node:crypto\";\nimport type {\n\tCompiledAsset,\n\tCompiledFloor,\n\tCompiledLayer,\n\tLayerDefinition,\n\tResolvedLayoutConfig,\n\tRuntimeBundle,\n\tRuntimeSceneStop,\n\tSceneDocument,\n} from \"../types/index.ts\";\nimport { ValidationErrorClass } from \"../types/index.ts\";\nimport { resolveSceneSnapshots } from \"./scene-validator.ts\";\n\nexport interface CompileOptions {\n\tminify?: boolean;\n\tversion?: string;\n}\n\nconst DEFAULT_VERSION = \"0.1.0\";\nconst RUNTIME_BUNDLE_FORMAT = \"isostate-runtime-bundle\";\nconst BUILT_IN_TEXT_ASSET_ID = \"text\";\nconst BUILT_IN_PRIMITIVE_ASSET_IDS = new Set([\"rectangle\", \"circle\", \"polygon\", \"line\"]);\n\nexport function compileScene(document: SceneDocument, options: CompileOptions = {}): RuntimeBundle {\n\tconst { version = DEFAULT_VERSION } = options;\n\tconst scenes = resolveSceneSnapshots(document).map((scene) => normalizeValue(scene)) as RuntimeSceneStop[];\n\n\tconst bundleWithoutDigest: Omit<RuntimeBundle, \"_digest\"> = {\n\t\t_format: RUNTIME_BUNDLE_FORMAT,\n\t\t_version: version,\n\t\tgrid: { cellSize: document.header.grid?.cellSize ?? 64 },\n\t\tfloor: compileFloor(document, scenes),\n\t\tlayout: compileLayout(),\n\t\ttheme: document.header.theme ?? \"light\",\n\t\tlayers: compileLayers(document.header.layers),\n\t\tscenes,\n\t};\n\n\tif (document.header.className) {\n\t\tbundleWithoutDigest.className = document.header.className;\n\t}\n\n\tconst assets = compileUrlAssets(document, scenes);\n\tif (Object.keys(assets).length > 0) {\n\t\tbundleWithoutDigest.assets = assets;\n\t}\n\n\treturn {\n\t\t...bundleWithoutDigest,\n\t\t_digest: digestBundle(bundleWithoutDigest),\n\t};\n}\n\nfunction compileUrlAssets(document: SceneDocument, scenes: RuntimeSceneStop[]): Record<string, CompiledAsset> {\n\tconst assets: Record<string, CompiledAsset> = {};\n\tfor (const name of uniqueReferencedAssetNames(document, scenes)) {\n\t\tconst url = resolveAssetUrl(document, name);\n\t\tif (!url) {\n\t\t\tthrow new ValidationErrorClass(\"ASSET_URL_REQUIRED\", `Asset \"${name}\" must resolve through header.assetBaseUrl`, {\n\t\t\t\tasset: name,\n\t\t\t});\n\t\t}\n\t\tconst entry = document.header.assets.find((asset) => asset.id === name);\n\t\tassets[name] = normalizeValue({\n\t\t\turl,\n\t\t\t...(entry?.anchor ? { anchor: entry.anchor } : {}),\n\t\t});\n\t}\n\treturn assets;\n}\n\nexport function toJs(bundle: RuntimeBundle, options: { minify?: boolean } = {}): string {\n\tconst { minify = true } = options;\n\tconst json = canonicalStringify(bundle, minify ? undefined : 2);\n\treturn `export default ${json};`;\n}\n\nexport function toJson(bundle: RuntimeBundle): string {\n\treturn canonicalStringify(bundle, 2);\n}\n\nexport function fromJs(moduleString: string): RuntimeBundle {\n\tif (!moduleString.startsWith(\"export default \") || !moduleString.endsWith(\";\")) {\n\t\tthrow new ValidationErrorClass(\"INVALID_RUNTIME_BUNDLE_MODULE\", \"Invalid JS module: expected exact default export\");\n\t}\n\n\tconst jsonString = moduleString.slice(\"export default \".length, -1);\n\tconst bundle = parseRuntimeBundleJson(jsonString, \"INVALID_RUNTIME_BUNDLE_MODULE\");\n\tconst minify = !jsonString.includes(\"\\n\");\n\tif (moduleString !== toJs(bundle, { minify })) {\n\t\tthrow new ValidationErrorClass(\"INVALID_RUNTIME_BUNDLE_MODULE\", \"Invalid JS module: non-canonical bundle export\");\n\t}\n\n\treturn bundle;\n}\n\nexport function fromJson(jsonString: string): RuntimeBundle {\n\tconst bundle = parseRuntimeBundleJson(jsonString, \"INVALID_RUNTIME_BUNDLE_JSON\");\n\tif (jsonString !== toJson(bundle)) {\n\t\tthrow new ValidationErrorClass(\"INVALID_RUNTIME_BUNDLE_JSON\", \"Invalid JSON bundle: non-canonical serialization\");\n\t}\n\n\treturn bundle;\n}\n\nfunction parseRuntimeBundleJson(\n\tjsonString: string,\n\tcode: \"INVALID_RUNTIME_BUNDLE_MODULE\" | \"INVALID_RUNTIME_BUNDLE_JSON\",\n): RuntimeBundle {\n\ttry {\n\t\treturn JSON.parse(jsonString) as RuntimeBundle;\n\t} catch {\n\t\tthrow new ValidationErrorClass(code, \"Invalid runtime bundle: expected valid JSON\");\n\t}\n}\n\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };\n\nfunction compileFloor(document: SceneDocument, scenes: RuntimeSceneStop[]): CompiledFloor {\n\tconst floor = document.header.floor ?? {};\n\tconst origin = floor.origin ?? [0, 0];\n\tconst compiled: CompiledFloor = {\n\t\tsize: floor.size ?? deriveFloorSize(scenes, origin),\n\t\torigin,\n\t\tvisible: floor.visible ?? true,\n\t\tlayer: floor.layer ?? defaultFloorLayer(document),\n\t};\n\tif (floor.asset !== undefined) {\n\t\tcompiled.asset = floor.asset;\n\t}\n\treturn normalizeValue(compiled);\n}\n\nfunction deriveFloorSize(scenes: RuntimeSceneStop[], origin: [number, number]): [number, number] {\n\tlet maxX = origin[0] + 1;\n\tlet maxY = origin[1] + 1;\n\tfor (const scene of scenes) {\n\t\tfor (const element of scene.elements) {\n\t\t\tif (element.presence === \"removed\") continue;\n\t\t\tmaxX = Math.max(maxX, element.pos[0] + element.size);\n\t\t\tmaxY = Math.max(maxY, element.pos[1] + element.size);\n\t\t}\n\t\tfor (const connector of scene.connectors) {\n\t\t\tif (connector.presence === \"removed\") continue;\n\t\t\tfor (const point of connector.route) {\n\t\t\t\tmaxX = Math.max(maxX, point[0]);\n\t\t\t\tmaxY = Math.max(maxY, point[1]);\n\t\t\t}\n\t\t}\n\t}\n\treturn [Math.max(1, Math.ceil(maxX - origin[0])), Math.max(1, Math.ceil(maxY - origin[1]))];\n}\n\nfunction compileLayout(): ResolvedLayoutConfig {\n\treturn normalizeValue({\n\t\tfit: \"contain\",\n\t\talign: [0.5, 0.5],\n\t\tpadding: { x: 64, y: 64 },\n\t\tbounds: \"union\",\n\t});\n}\n\nfunction compileLayers(layers: LayerDefinition[]): CompiledLayer[] {\n\treturn layers\n\t\t.map((layer, index) => ({\n\t\t\tname: layer.name,\n\t\t\torder: layer.order ?? index,\n\t\t}))\n\t\t.sort((a, b) => a.order - b.order || a.name.localeCompare(b.name));\n}\n\nfunction resolveAssetUrl(document: SceneDocument, assetId: string): string | undefined {\n\tconst base = document.header.assetBaseUrl;\n\tconst entry = document.header.assets.find((asset) => asset.id === assetId);\n\tif (!base || !entry) return undefined;\n\n\tconst path = entry.path ?? entry.id;\n\tconst file = path.endsWith(\".svg\") ? path : `${path}.svg`;\n\treturn `${base.replace(/\\/+$/, \"\")}/${file.replace(/^\\/+/, \"\")}`;\n}\n\nfunction uniqueReferencedAssetNames(document: SceneDocument, scenes: RuntimeSceneStop[]): string[] {\n\tconst names = new Set<string>();\n\tif (document.header.floor?.asset && document.header.floor.visible !== false) {\n\t\tnames.add(document.header.floor.asset);\n\t}\n\tfor (const scene of scenes) {\n\t\tfor (const element of scene.elements) {\n\t\t\tif (!isBuiltInGeneratedAsset(element.asset)) {\n\t\t\t\tnames.add(element.asset);\n\t\t\t}\n\t\t}\n\t}\n\treturn Array.from(names).sort();\n}\n\nfunction isBuiltInGeneratedAsset(assetId: string): boolean {\n\treturn assetId === BUILT_IN_TEXT_ASSET_ID || BUILT_IN_PRIMITIVE_ASSET_IDS.has(assetId);\n}\n\nfunction defaultFloorLayer(document: SceneDocument): string {\n\tconst ground = document.header.layers.find((layer) => layer.name === \"ground\");\n\treturn ground?.name ?? document.header.layers[0]?.name ?? \"\";\n}\n\nfunction digestBundle(bundle: Omit<RuntimeBundle, \"_digest\">): string {\n\treturn createHash(\"sha256\").update(canonicalStringify(bundle)).digest(\"hex\");\n}\n\nfunction canonicalStringify(value: unknown, space?: number): string {\n\tconst normalized = normalizeValue(value);\n\treturn JSON.stringify(normalized, null, space);\n}\n\nfunction normalizeValue<T>(value: T): T {\n\tif (Array.isArray(value)) {\n\t\treturn value.map((item) => (item === undefined ? null : normalizeValue(item))) as T;\n\t}\n\n\tif (!isPlainObject(value)) return value;\n\n\tconst normalized: Record<string, JsonValue> = {};\n\tfor (const key of Object.keys(value).sort()) {\n\t\tconst child = (value as Record<string, unknown>)[key];\n\t\tif (child !== undefined) {\n\t\t\tnormalized[key] = normalizeValue(child) as JsonValue;\n\t\t}\n\t}\n\n\treturn normalized as T;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { parse as parseYaml } from \"yaml\";\nimport { ParseError } from \"../types/errors.ts\";\nimport type {\n\tAmbientAnimation,\n\tAssetCatalogEntry,\n\tConnectionPatch,\n\tConnectionPlacement,\n\tConnectionRemoval,\n\tConnectorEndpointRef,\n\tConnectorRouting,\n\tConnectorStyle,\n\tElementPatch,\n\tElementPlacement,\n\tElementRemoval,\n\tFloorConfig,\n\tGridConfig,\n\tLayerDefinition,\n\tLinePrimitive,\n\tPrimitiveContent,\n\tSceneDocument,\n\tSceneHeader,\n\tSceneStep,\n\tTextContent,\n} from \"../types/index.ts\";\n\nconst IDENTIFIER_PATTERN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst ASSET_PATH_PATTERN = /^[a-z0-9][a-z0-9-]*(?:\\/[a-z0-9][a-z0-9-]*)*(?:\\.svg)?$/;\n\nfunction fail(code: string, message: string): never {\n\tthrow new ParseError(code, message, { line: 0, column: 0 });\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction assertKnownFields(obj: Record<string, unknown>, allowed: ReadonlySet<string>, context: string): void {\n\tfor (const field of Object.keys(obj)) {\n\t\tif (!allowed.has(field)) {\n\t\t\tfail(\"UNKNOWN_FIELD\", `Unknown field \"${field}\" in ${context}`);\n\t\t}\n\t}\n}\n\nfunction requireObject(value: unknown, context: string): Record<string, unknown> {\n\tif (!isObject(value)) {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a mapping object`);\n\t}\n\treturn value;\n}\n\nfunction requireArray(value: unknown, context: string): unknown[] {\n\tif (!Array.isArray(value)) {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be an array`);\n\t}\n\treturn value;\n}\n\nfunction requireString(value: unknown, context: string): string {\n\tif (typeof value !== \"string\") {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a string`);\n\t}\n\treturn value;\n}\n\nfunction requireNumber(value: unknown, context: string): number {\n\tif (typeof value !== \"number\" || Number.isNaN(value)) {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a number`);\n\t}\n\treturn value;\n}\n\nfunction requireBoolean(value: unknown, context: string): boolean {\n\tif (typeof value !== \"boolean\") {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a boolean`);\n\t}\n\treturn value;\n}\n\nfunction requireIdentifier(value: unknown, context: string): string {\n\tconst identifier = requireString(value, context);\n\tif (!IDENTIFIER_PATTERN.test(identifier)) {\n\t\tfail(\"INVALID_IDENTIFIER\", `${context} must be kebab-case`);\n\t}\n\treturn identifier;\n}\n\nfunction parseTuple2(value: unknown, context: string): [number, number] {\n\tif (!Array.isArray(value) || value.length !== 2) {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a two-number tuple`);\n\t}\n\treturn [requireNumber(value[0], `${context}[0]`), requireNumber(value[1], `${context}[1]`)];\n}\n\nfunction parseAssets(raw: unknown): AssetCatalogEntry[] {\n\treturn requireArray(raw, \"header.assets\").map((item, index) => {\n\t\tconst asset = requireObject(item, `header.assets[${index}]`);\n\t\tassertKnownFields(asset, new Set([\"id\", \"path\", \"anchor\"]), `header.assets[${index}]`);\n\t\tconst parsed: AssetCatalogEntry = {\n\t\t\tid: requireIdentifier(asset.id, `header.assets[${index}].id`),\n\t\t};\n\t\tif (asset.path !== undefined) {\n\t\t\tconst path = requireString(asset.path, `header.assets[${index}].path`);\n\t\t\tif (!ASSET_PATH_PATTERN.test(path)) {\n\t\t\t\tfail(\"INVALID_ASSET_PATH\", `header.assets[${index}].path must be a relative SVG asset path`);\n\t\t\t}\n\t\t\tparsed.path = path;\n\t\t}\n\t\tif (asset.anchor !== undefined) {\n\t\t\tparsed.anchor = parseTuple2(asset.anchor, `header.assets[${index}].anchor`);\n\t\t}\n\t\treturn parsed;\n\t});\n}\n\nfunction parseGrid(raw: unknown): GridConfig | undefined {\n\tif (raw === undefined) return undefined;\n\tconst grid = requireObject(raw, \"header.grid\");\n\tassertKnownFields(grid, new Set([\"cellSize\"]), \"header.grid\");\n\treturn {\n\t\tcellSize: grid.cellSize === undefined ? undefined : requireNumber(grid.cellSize, \"header.grid.cellSize\"),\n\t};\n}\n\nfunction parseFloor(raw: unknown): FloorConfig | undefined {\n\tif (raw === undefined) return undefined;\n\tconst floor = requireObject(raw, \"header.floor\");\n\tassertKnownFields(floor, new Set([\"size\", \"origin\", \"layer\", \"visible\", \"asset\"]), \"header.floor\");\n\tconst parsed: FloorConfig = {};\n\tif (floor.size !== undefined) {\n\t\tparsed.size = parseTuple2(floor.size, \"header.floor.size\");\n\t}\n\tif (floor.origin !== undefined) {\n\t\tparsed.origin = parseTuple2(floor.origin, \"header.floor.origin\");\n\t}\n\tif (floor.layer !== undefined) {\n\t\tparsed.layer = requireIdentifier(floor.layer, \"header.floor.layer\");\n\t}\n\tif (floor.visible !== undefined) {\n\t\tparsed.visible = requireBoolean(floor.visible, \"header.floor.visible\");\n\t}\n\tif (floor.asset !== undefined) {\n\t\tparsed.asset = requireIdentifier(floor.asset, \"header.floor.asset\");\n\t}\n\treturn parsed;\n}\n\nfunction parseLayers(raw: unknown): LayerDefinition[] {\n\treturn requireArray(raw, \"header.layers\").map((item, index) => {\n\t\tconst layer = requireObject(item, `header.layers[${index}]`);\n\t\tassertKnownFields(layer, new Set([\"name\", \"order\"]), `header.layers[${index}]`);\n\t\tconst parsed: LayerDefinition = {\n\t\t\tname: requireIdentifier(layer.name, `header.layers[${index}].name`),\n\t\t};\n\t\tif (layer.order !== undefined) {\n\t\t\tparsed.order = requireNumber(layer.order, `header.layers[${index}].order`);\n\t\t}\n\t\treturn parsed;\n\t});\n}\n\nfunction parseHeader(raw: unknown): SceneHeader {\n\tconst header = requireObject(raw, \"header\");\n\tassertKnownFields(\n\t\theader,\n\t\tnew Set([\"version\", \"name\", \"className\", \"assetBaseUrl\", \"assets\", \"grid\", \"floor\", \"theme\", \"layers\"]),\n\t\t\"header\",\n\t);\n\n\tconst parsed: SceneHeader = {\n\t\tassets: parseAssets(header.assets),\n\t\tlayers: parseLayers(header.layers),\n\t};\n\tconst floor = parseFloor(header.floor);\n\tif (floor !== undefined) {\n\t\tparsed.floor = floor;\n\t}\n\tif (header.version !== undefined) {\n\t\tparsed.version = requireString(header.version, \"header.version\");\n\t}\n\tif (header.name !== undefined) {\n\t\tparsed.name = requireString(header.name, \"header.name\");\n\t}\n\tif (header.className !== undefined) {\n\t\tparsed.className = requireString(header.className, \"header.className\");\n\t}\n\tif (header.assetBaseUrl !== undefined) {\n\t\tparsed.assetBaseUrl = requireString(header.assetBaseUrl, \"header.assetBaseUrl\");\n\t}\n\tif (header.grid !== undefined) {\n\t\tparsed.grid = parseGrid(header.grid);\n\t}\n\tif (header.theme !== undefined) {\n\t\tparsed.theme = requireString(header.theme, \"header.theme\");\n\t}\n\treturn parsed;\n}\n\nfunction parseAmbient(raw: unknown, context: string): AmbientAnimation[] {\n\treturn requireArray(raw, context).map((item, index) => {\n\t\tconst ambient = requireObject(item, `${context}[${index}]`);\n\t\tassertKnownFields(ambient, new Set([\"name\", \"infinite\", \"iterations\"]), `${context}[${index}]`);\n\t\tconst parsed: AmbientAnimation = {\n\t\t\tname: requireIdentifier(ambient.name, `${context}[${index}].name`),\n\t\t};\n\t\tif (ambient.infinite !== undefined) {\n\t\t\tparsed.infinite = requireBoolean(ambient.infinite, `${context}[${index}].infinite`);\n\t\t}\n\t\tif (ambient.iterations !== undefined) {\n\t\t\tparsed.iterations = requireNumber(ambient.iterations, `${context}[${index}].iterations`);\n\t\t}\n\t\treturn parsed;\n\t});\n}\n\nfunction parsePointArray(raw: unknown, context: string): [number, number][] {\n\treturn requireArray(raw, context).map((point, index) => parseTuple2(point, `${context}[${index}]`));\n}\n\nfunction parseTextContent(raw: unknown, context: string): TextContent {\n\tconst text = requireObject(raw, context);\n\tassertKnownFields(text, new Set([\"value\", \"align\", \"fontSize\", \"fontWeight\", \"lineHeight\", \"fill\"]), context);\n\tconst parsed: TextContent = {\n\t\tvalue: requireString(text.value, `${context}.value`),\n\t};\n\tif (text.align !== undefined) {\n\t\tparsed.align = requireString(text.align, `${context}.align`) as never;\n\t}\n\tif (text.fontSize !== undefined) {\n\t\tparsed.fontSize = requireNumber(text.fontSize, `${context}.fontSize`);\n\t}\n\tif (text.fontWeight !== undefined) {\n\t\tif (typeof text.fontWeight === \"number\") {\n\t\t\tparsed.fontWeight = requireNumber(text.fontWeight, `${context}.fontWeight`);\n\t\t} else {\n\t\t\tparsed.fontWeight = requireString(text.fontWeight, `${context}.fontWeight`) as never;\n\t\t}\n\t}\n\tif (text.lineHeight !== undefined) {\n\t\tparsed.lineHeight = requireNumber(text.lineHeight, `${context}.lineHeight`);\n\t}\n\tif (text.fill !== undefined) {\n\t\tparsed.fill = requireString(text.fill, `${context}.fill`);\n\t}\n\treturn parsed;\n}\n\nfunction parsePrimitiveStyle(\n\traw: Record<string, unknown>,\n\tcontext: string,\n\tallowed: string[],\n): Record<string, unknown> {\n\tassertKnownFields(raw, new Set(allowed), context);\n\tconst parsed: Record<string, unknown> = {};\n\tif (raw.fill !== undefined) parsed.fill = requireString(raw.fill, `${context}.fill`);\n\tif (raw.stroke !== undefined) parsed.stroke = requireString(raw.stroke, `${context}.stroke`);\n\tif (raw.strokeWidth !== undefined) {\n\t\tparsed.strokeWidth = requireNumber(raw.strokeWidth, `${context}.strokeWidth`);\n\t}\n\tif (raw.opacity !== undefined) {\n\t\tparsed.opacity = requireNumber(raw.opacity, `${context}.opacity`);\n\t}\n\tif (raw.dash !== undefined) parsed.dash = parseTuple2(raw.dash, `${context}.dash`);\n\treturn parsed;\n}\n\nfunction parsePrimitiveContent(raw: unknown, context: string): PrimitiveContent {\n\tconst primitive = requireObject(raw, context);\n\tassertKnownFields(primitive, new Set([\"rectangle\", \"circle\", \"polygon\", \"line\"]), context);\n\tconst parsed: PrimitiveContent = {};\n\tif (primitive.rectangle !== undefined) {\n\t\tconst rectangle = requireObject(primitive.rectangle, `${context}.rectangle`);\n\t\tparsed.rectangle = parsePrimitiveStyle(rectangle, `${context}.rectangle`, [\n\t\t\t\"fill\",\n\t\t\t\"stroke\",\n\t\t\t\"strokeWidth\",\n\t\t\t\"opacity\",\n\t\t\t\"dash\",\n\t\t\t\"rx\",\n\t\t]);\n\t\tif (rectangle.rx !== undefined) {\n\t\t\tparsed.rectangle.rx = requireNumber(rectangle.rx, `${context}.rectangle.rx`);\n\t\t}\n\t}\n\tif (primitive.circle !== undefined) {\n\t\tparsed.circle = parsePrimitiveStyle(requireObject(primitive.circle, `${context}.circle`), `${context}.circle`, [\n\t\t\t\"fill\",\n\t\t\t\"stroke\",\n\t\t\t\"strokeWidth\",\n\t\t\t\"opacity\",\n\t\t\t\"dash\",\n\t\t]);\n\t}\n\tif (primitive.polygon !== undefined) {\n\t\tconst polygon = requireObject(primitive.polygon, `${context}.polygon`);\n\t\tparsed.polygon = {\n\t\t\t...parsePrimitiveStyle(polygon, `${context}.polygon`, [\n\t\t\t\t\"points\",\n\t\t\t\t\"fill\",\n\t\t\t\t\"stroke\",\n\t\t\t\t\"strokeWidth\",\n\t\t\t\t\"opacity\",\n\t\t\t\t\"dash\",\n\t\t\t]),\n\t\t\tpoints: parsePointArray(polygon.points, `${context}.polygon.points`),\n\t\t};\n\t}\n\tif (primitive.line !== undefined) {\n\t\tconst line = requireObject(primitive.line, `${context}.line`);\n\t\tconst parsedLine: LinePrimitive = {\n\t\t\t...parsePrimitiveStyle(line, `${context}.line`, [\n\t\t\t\t\"points\",\n\t\t\t\t\"stroke\",\n\t\t\t\t\"strokeWidth\",\n\t\t\t\t\"opacity\",\n\t\t\t\t\"dash\",\n\t\t\t\t\"lineCap\",\n\t\t\t\t\"lineJoin\",\n\t\t\t]),\n\t\t\tpoints: parsePointArray(line.points, `${context}.line.points`),\n\t\t};\n\t\tif (line.lineCap !== undefined) {\n\t\t\tparsedLine.lineCap = requireString(line.lineCap, `${context}.line.lineCap`) as never;\n\t\t}\n\t\tif (line.lineJoin !== undefined) {\n\t\t\tparsedLine.lineJoin = requireString(line.lineJoin, `${context}.line.lineJoin`) as never;\n\t\t}\n\t\tparsed.line = parsedLine;\n\t}\n\treturn parsed;\n}\n\nfunction parsePlacement(raw: unknown, context: string): ElementPlacement {\n\tconst element = requireObject(raw, context);\n\tassertKnownFields(\n\t\telement,\n\t\tnew Set([\"id\", \"asset\", \"at\", \"size\", \"layer\", \"enter\", \"exit\", \"ambient\", \"text\", \"primitive\"]),\n\t\tcontext,\n\t);\n\tconst parsed: ElementPlacement = {\n\t\tid: requireIdentifier(element.id, `${context}.id`),\n\t\tasset: requireIdentifier(element.asset, `${context}.asset`),\n\t\tat: parseTuple2(element.at, `${context}.at`),\n\t};\n\tif (element.size !== undefined) {\n\t\tparsed.size = requireNumber(element.size, `${context}.size`);\n\t}\n\tif (element.layer !== undefined) {\n\t\tparsed.layer = requireIdentifier(element.layer, `${context}.layer`);\n\t}\n\tif (element.enter !== undefined) {\n\t\tparsed.enter = requireString(element.enter, `${context}.enter`) as never;\n\t}\n\tif (element.exit !== undefined) {\n\t\tparsed.exit = requireString(element.exit, `${context}.exit`) as never;\n\t}\n\tif (element.ambient !== undefined) {\n\t\tparsed.ambient = parseAmbient(element.ambient, `${context}.ambient`);\n\t}\n\tif (element.text !== undefined) {\n\t\tparsed.text = parseTextContent(element.text, `${context}.text`);\n\t}\n\tif (element.primitive !== undefined) {\n\t\tparsed.primitive = parsePrimitiveContent(element.primitive, `${context}.primitive`);\n\t}\n\treturn parsed;\n}\n\nfunction parsePatch(raw: unknown, context: string): ElementPatch {\n\tconst patch = requireObject(raw, context);\n\tassertKnownFields(\n\t\tpatch,\n\t\tnew Set([\"id\", \"at\", \"size\", \"layer\", \"enter\", \"exit\", \"ambient\", \"text\", \"primitive\"]),\n\t\tcontext,\n\t);\n\tconst parsed: ElementPatch = {\n\t\tid: requireIdentifier(patch.id, `${context}.id`),\n\t};\n\tif (patch.at !== undefined) {\n\t\tparsed.at = parseTuple2(patch.at, `${context}.at`);\n\t}\n\tif (patch.size !== undefined) {\n\t\tparsed.size = requireNumber(patch.size, `${context}.size`);\n\t}\n\tif (patch.layer !== undefined) {\n\t\tparsed.layer = requireIdentifier(patch.layer, `${context}.layer`);\n\t}\n\tif (patch.enter !== undefined) {\n\t\tparsed.enter = requireString(patch.enter, `${context}.enter`) as never;\n\t}\n\tif (patch.exit !== undefined) {\n\t\tparsed.exit = requireString(patch.exit, `${context}.exit`) as never;\n\t}\n\tif (patch.ambient !== undefined) {\n\t\tparsed.ambient = parseAmbient(patch.ambient, `${context}.ambient`);\n\t}\n\tif (patch.text !== undefined) {\n\t\tparsed.text = parseTextContent(patch.text, `${context}.text`);\n\t}\n\tif (patch.primitive !== undefined) {\n\t\tparsed.primitive = parsePrimitiveContent(patch.primitive, `${context}.primitive`);\n\t}\n\treturn parsed;\n}\n\nfunction parseRemoval(raw: unknown, context: string): ElementRemoval {\n\tconst removal = requireObject(raw, context);\n\tassertKnownFields(removal, new Set([\"id\", \"exit\"]), context);\n\tconst parsed: ElementRemoval = {\n\t\tid: requireIdentifier(removal.id, `${context}.id`),\n\t};\n\tif (removal.exit !== undefined) {\n\t\tparsed.exit = requireString(removal.exit, `${context}.exit`) as never;\n\t}\n\treturn parsed;\n}\n\nfunction parseRoute(raw: unknown, context: string): [number, number][] {\n\treturn requireArray(raw, context).map((point, index) => parseTuple2(point, `${context}[${index}]`));\n}\n\nfunction parseEndpointRef(raw: unknown, context: string): ConnectorEndpointRef {\n\tconst endpoint = requireObject(raw, context);\n\tassertKnownFields(endpoint, new Set([\"element\", \"at\", \"side\", \"offset\"]), context);\n\tconst parsed: ConnectorEndpointRef = {};\n\tif (endpoint.element !== undefined) {\n\t\tparsed.element = requireIdentifier(endpoint.element, `${context}.element`);\n\t}\n\tif (endpoint.at !== undefined) {\n\t\tparsed.at = parseTuple2(endpoint.at, `${context}.at`);\n\t}\n\tif (endpoint.side !== undefined) {\n\t\tparsed.side = requireString(endpoint.side, `${context}.side`) as never;\n\t}\n\tif (endpoint.offset !== undefined) {\n\t\tparsed.offset = requireNumber(endpoint.offset, `${context}.offset`);\n\t}\n\treturn parsed;\n}\n\nfunction parseRouting(raw: unknown, context: string): ConnectorRouting {\n\tconst routing = requireObject(raw, context);\n\tassertKnownFields(routing, new Set([\"mode\", \"avoid\", \"clearance\", \"gridStep\", \"maxBends\", \"prefer\"]), context);\n\tconst parsed: ConnectorRouting = {};\n\tif (routing.mode !== undefined) {\n\t\tparsed.mode = requireString(routing.mode, `${context}.mode`) as never;\n\t}\n\tif (routing.avoid !== undefined) {\n\t\tif (Array.isArray(routing.avoid)) {\n\t\t\tparsed.avoid = requireArray(routing.avoid, `${context}.avoid`).map((item, index) =>\n\t\t\t\trequireIdentifier(item, `${context}.avoid[${index}]`),\n\t\t\t);\n\t\t} else {\n\t\t\tparsed.avoid = requireString(routing.avoid, `${context}.avoid`) as never;\n\t\t}\n\t}\n\tif (routing.clearance !== undefined) {\n\t\tparsed.clearance = requireNumber(routing.clearance, `${context}.clearance`);\n\t}\n\tif (routing.gridStep !== undefined) {\n\t\tparsed.gridStep = requireNumber(routing.gridStep, `${context}.gridStep`);\n\t}\n\tif (routing.maxBends !== undefined) {\n\t\tparsed.maxBends = requireNumber(routing.maxBends, `${context}.maxBends`);\n\t}\n\tif (routing.prefer !== undefined) {\n\t\tparsed.prefer = requireString(routing.prefer, `${context}.prefer`) as never;\n\t}\n\treturn parsed;\n}\n\nfunction parseConnectorStyle(raw: unknown, context: string): ConnectorStyle {\n\tconst style = requireObject(raw, context);\n\tassertKnownFields(\n\t\tstyle,\n\t\tnew Set([\"variant\", \"pattern\", \"stroke\", \"strokeWidth\", \"opacity\", \"dash\", \"outline\", \"outlineWidth\", \"lane\"]),\n\t\tcontext,\n\t);\n\tconst parsed: ConnectorStyle = {};\n\tif (style.variant !== undefined) {\n\t\tparsed.variant = requireString(style.variant, `${context}.variant`) as never;\n\t}\n\tif (style.pattern !== undefined) {\n\t\tparsed.pattern = requireString(style.pattern, `${context}.pattern`) as never;\n\t}\n\tif (style.stroke !== undefined) {\n\t\tparsed.stroke = requireString(style.stroke, `${context}.stroke`);\n\t}\n\tif (style.strokeWidth !== undefined) {\n\t\tparsed.strokeWidth = requireNumber(style.strokeWidth, `${context}.strokeWidth`);\n\t}\n\tif (style.opacity !== undefined) {\n\t\tparsed.opacity = requireNumber(style.opacity, `${context}.opacity`);\n\t}\n\tif (style.dash !== undefined) {\n\t\tparsed.dash = parseTuple2(style.dash, `${context}.dash`);\n\t}\n\tif (style.outline !== undefined) {\n\t\tparsed.outline = requireString(style.outline, `${context}.outline`);\n\t}\n\tif (style.outlineWidth !== undefined) {\n\t\tparsed.outlineWidth = requireNumber(style.outlineWidth, `${context}.outlineWidth`);\n\t}\n\tif (style.lane !== undefined) {\n\t\tparsed.lane = requireString(style.lane, `${context}.lane`) as never;\n\t}\n\treturn parsed;\n}\n\nfunction parseConnectionCommon(raw: unknown, context: string): ConnectionPlacement | ConnectionPatch {\n\tconst connection = requireObject(raw, context);\n\tassertKnownFields(\n\t\tconnection,\n\t\tnew Set([\n\t\t\t\"id\",\n\t\t\t\"route\",\n\t\t\t\"from\",\n\t\t\t\"to\",\n\t\t\t\"routing\",\n\t\t\t\"layer\",\n\t\t\t\"style\",\n\t\t\t\"start\",\n\t\t\t\"end\",\n\t\t\t\"direction\",\n\t\t\t\"enter\",\n\t\t\t\"exit\",\n\t\t\t\"ambient\",\n\t\t]),\n\t\tcontext,\n\t);\n\tconst parsed: ConnectionPlacement | ConnectionPatch = {\n\t\tid: requireIdentifier(connection.id, `${context}.id`),\n\t};\n\tif (connection.route !== undefined) {\n\t\tparsed.route = parseRoute(connection.route, `${context}.route`);\n\t}\n\tif (connection.from !== undefined) {\n\t\tparsed.from = parseEndpointRef(connection.from, `${context}.from`);\n\t}\n\tif (connection.to !== undefined) {\n\t\tparsed.to = parseEndpointRef(connection.to, `${context}.to`);\n\t}\n\tif (connection.routing !== undefined) {\n\t\tparsed.routing = parseRouting(connection.routing, `${context}.routing`);\n\t}\n\tif (connection.layer !== undefined) {\n\t\tparsed.layer = requireIdentifier(connection.layer, `${context}.layer`);\n\t}\n\tif (connection.style !== undefined) {\n\t\tparsed.style = parseConnectorStyle(connection.style, `${context}.style`);\n\t}\n\tif (connection.start !== undefined) {\n\t\tparsed.start = requireString(connection.start, `${context}.start`) as never;\n\t}\n\tif (connection.end !== undefined) {\n\t\tparsed.end = requireString(connection.end, `${context}.end`) as never;\n\t}\n\tif (connection.direction !== undefined) {\n\t\tparsed.direction = requireString(connection.direction, `${context}.direction`) as never;\n\t}\n\tif (connection.enter !== undefined) {\n\t\tparsed.enter = requireString(connection.enter, `${context}.enter`) as never;\n\t}\n\tif (connection.exit !== undefined) {\n\t\tparsed.exit = requireString(connection.exit, `${context}.exit`) as never;\n\t}\n\tif (connection.ambient !== undefined) {\n\t\tparsed.ambient = parseAmbient(connection.ambient, `${context}.ambient`);\n\t}\n\treturn parsed;\n}\n\nfunction parseConnectionPlacement(raw: unknown, context: string): ConnectionPlacement {\n\treturn parseConnectionCommon(raw, context) as ConnectionPlacement;\n}\n\nfunction parseConnectionPatch(raw: unknown, context: string): ConnectionPatch {\n\treturn parseConnectionCommon(raw, context) as ConnectionPatch;\n}\n\nfunction parseConnectionRemoval(raw: unknown, context: string): ConnectionRemoval {\n\tconst removal = requireObject(raw, context);\n\tassertKnownFields(removal, new Set([\"id\", \"exit\"]), context);\n\tconst parsed: ConnectionRemoval = {\n\t\tid: requireIdentifier(removal.id, `${context}.id`),\n\t};\n\tif (removal.exit !== undefined) {\n\t\tparsed.exit = requireString(removal.exit, `${context}.exit`) as never;\n\t}\n\treturn parsed;\n}\n\nfunction parseScenes(raw: unknown): SceneStep[] {\n\treturn requireArray(raw, \"scenes\").map((item, index) => {\n\t\tconst scene = requireObject(item, `scenes[${index}]`);\n\t\tassertKnownFields(scene, new Set([\"id\", \"elements\", \"connections\", \"add\", \"update\", \"remove\"]), `scenes[${index}]`);\n\t\tconst parsed: SceneStep = {\n\t\t\tid: requireIdentifier(scene.id, `scenes[${index}].id`),\n\t\t};\n\t\tif (scene.elements !== undefined) {\n\t\t\tparsed.elements = requireArray(scene.elements, `scenes[${index}].elements`).map((element, elementIndex) =>\n\t\t\t\tparsePlacement(element, `scenes[${index}].elements[${elementIndex}]`),\n\t\t\t);\n\t\t}\n\t\tif (scene.connections !== undefined) {\n\t\t\tparsed.connections = requireArray(scene.connections, `scenes[${index}].connections`).map(\n\t\t\t\t(connection, connectionIndex) =>\n\t\t\t\t\tparseConnectionPlacement(connection, `scenes[${index}].connections[${connectionIndex}]`),\n\t\t\t);\n\t\t}\n\t\tif (scene.add !== undefined) {\n\t\t\tconst add = requireObject(scene.add, `scenes[${index}].add`);\n\t\t\tassertKnownFields(add, new Set([\"elements\", \"connections\"]), `scenes[${index}].add`);\n\t\t\tparsed.add = {};\n\t\t\tif (add.elements !== undefined) {\n\t\t\t\tparsed.add.elements = requireArray(add.elements, `scenes[${index}].add.elements`).map((element, elementIndex) =>\n\t\t\t\t\tparsePlacement(element, `scenes[${index}].add.elements[${elementIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (add.connections !== undefined) {\n\t\t\t\tparsed.add.connections = requireArray(add.connections, `scenes[${index}].add.connections`).map(\n\t\t\t\t\t(connection, connectionIndex) =>\n\t\t\t\t\t\tparseConnectionPlacement(connection, `scenes[${index}].add.connections[${connectionIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (scene.update !== undefined) {\n\t\t\tconst update = requireObject(scene.update, `scenes[${index}].update`);\n\t\t\tassertKnownFields(update, new Set([\"elements\", \"connections\"]), `scenes[${index}].update`);\n\t\t\tparsed.update = {};\n\t\t\tif (update.elements !== undefined) {\n\t\t\t\tparsed.update.elements = requireArray(update.elements, `scenes[${index}].update.elements`).map(\n\t\t\t\t\t(patch, patchIndex) => parsePatch(patch, `scenes[${index}].update.elements[${patchIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (update.connections !== undefined) {\n\t\t\t\tparsed.update.connections = requireArray(update.connections, `scenes[${index}].update.connections`).map(\n\t\t\t\t\t(patch, patchIndex) => parseConnectionPatch(patch, `scenes[${index}].update.connections[${patchIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (scene.remove !== undefined) {\n\t\t\tconst remove = requireObject(scene.remove, `scenes[${index}].remove`);\n\t\t\tassertKnownFields(remove, new Set([\"elements\", \"connections\"]), `scenes[${index}].remove`);\n\t\t\tparsed.remove = {};\n\t\t\tif (remove.elements !== undefined) {\n\t\t\t\tparsed.remove.elements = requireArray(remove.elements, `scenes[${index}].remove.elements`).map(\n\t\t\t\t\t(removal, removalIndex) => parseRemoval(removal, `scenes[${index}].remove.elements[${removalIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (remove.connections !== undefined) {\n\t\t\t\tparsed.remove.connections = requireArray(remove.connections, `scenes[${index}].remove.connections`).map(\n\t\t\t\t\t(removal, removalIndex) =>\n\t\t\t\t\t\tparseConnectionRemoval(removal, `scenes[${index}].remove.connections[${removalIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn parsed;\n\t});\n}\n\n/**\n * Parse authored YAML into the v1 header + scene-delta document contract.\n */\nexport function parseScene(dsl: string): SceneDocument {\n\tlet raw: unknown;\n\ttry {\n\t\traw = parseYaml(dsl);\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tthrow new ParseError(\"DSL_PARSE_SYNTAX_ERROR\", `YAML syntax error: ${message}`, { line: 0, column: 0 });\n\t}\n\n\tif (!isObject(raw)) {\n\t\tfail(\"DSL_PARSE_SYNTAX_ERROR\", \"DSL must be a YAML mapping at the top level\");\n\t}\n\tassertKnownFields(raw, new Set([\"header\", \"scenes\"]), \"top level\");\n\n\treturn {\n\t\theader: parseHeader(raw.header),\n\t\tscenes: parseScenes(raw.scenes),\n\t};\n}\n"],"names":["BUILT_IN_TEXT_ASSET_ID","BUILT_IN_PRIMITIVE_ASSET_IDS","defaultFloorLayer","parseYaml"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/dsl/scene-validator.ts","../../src/dsl/compiler.ts","../../src/dsl/scene-parser.ts"],"sourcesContent":["import type {\n\tAmbientAnimation,\n\tConnectionPatch,\n\tConnectionPlacement,\n\tConnectionRemoval,\n\tConnectorEndpointRef,\n\tConnectorRouting,\n\tConnectorStyle,\n\tElementPatch,\n\tElementPlacement,\n\tElementRemoval,\n\tPrimitiveContent,\n\tRuntimeConnectorState,\n\tRuntimeConnectorStyle,\n\tRuntimeElementState,\n\tSceneDocument,\n\tSceneStep,\n\tTextContent,\n\tValidationError,\n\tValidationReport,\n\tValidationWarning,\n} from \"../types/index.ts\";\n\nconst BUILT_IN_TEXT_ASSET_ID = \"text\";\nconst BUILT_IN_PRIMITIVE_ASSET_IDS = new Set([\"rectangle\", \"circle\", \"polygon\", \"line\"]);\nconst MAX_TEXT_CHARACTERS = 1000;\nconst MAX_TEXT_LINES = 20;\nconst MAX_PRIMITIVE_POINTS = 100;\n\nconst VALID_ENTRY_ANIMATIONS: ReadonlySet<string> = new Set([\n\t\"fade-in\",\n\t\"fade-in-grow\",\n\t\"fall-in\",\n\t\"rise-from-ground\",\n\t\"slide-in-left\",\n\t\"slide-in-right\",\n\t\"flip-in\",\n\t\"none\",\n]);\n\nconst VALID_EXIT_ANIMATIONS: ReadonlySet<string> = new Set([\n\t\"fade-out\",\n\t\"fade-out-shrink\",\n\t\"fall-through-ground\",\n\t\"rise-away\",\n\t\"slide-out-left\",\n\t\"slide-out-right\",\n\t\"flip-out\",\n\t\"none\",\n]);\n\nconst VALID_AMBIENT_ANIMATIONS: ReadonlySet<string> = new Set([\n\t\"pulse\",\n\t\"float\",\n\t\"shake\",\n\t\"glow\",\n\t\"spin\",\n\t\"blink\",\n\t\"bounce\",\n]);\nconst VALID_CONNECTOR_AMBIENT_ANIMATIONS: ReadonlySet<string> = new Set([...VALID_AMBIENT_ANIMATIONS, \"flow\"]);\n\nconst VALID_CONNECTOR_PATTERNS: ReadonlySet<string> = new Set([\"solid\", \"dashed\", \"dotted\"]);\nconst VALID_CONNECTOR_VARIANTS: ReadonlySet<string> = new Set([\"line\", \"road\"]);\nconst VALID_CONNECTOR_ENDPOINTS: ReadonlySet<string> = new Set([\"none\", \"arrow\", \"dot\", \"circle\", \"diamond\", \"bar\"]);\nconst VALID_CONNECTOR_DIRECTIONS: ReadonlySet<string> = new Set([\"route\", \"reverse\"]);\nconst VALID_CONNECTOR_SIDES: ReadonlySet<string> = new Set([\"auto\", \"top\", \"right\", \"bottom\", \"left\", \"front\", \"back\"]);\nconst VALID_CONNECTOR_ROUTING_MODES: ReadonlySet<string> = new Set([\"straight\", \"orthogonal\", \"manual\"]);\nconst VALID_CONNECTOR_ROUTING_PREFERENCES: ReadonlySet<string> = new Set([\"direct\", \"fewest-bends\", \"shortest\"]);\nconst VALID_CONNECTOR_LANES: ReadonlySet<string> = new Set([\"none\", \"center-dashed\"]);\n\nconst VALID_TEXT_ALIGN: ReadonlySet<string> = new Set([\"start\", \"middle\", \"end\"]);\nconst VALID_TEXT_WEIGHT: ReadonlySet<string> = new Set([\"normal\", \"bold\"]);\nconst VALID_LINE_CAPS: ReadonlySet<string> = new Set([\"butt\", \"round\", \"square\"]);\nconst VALID_LINE_JOINS: ReadonlySet<string> = new Set([\"miter\", \"round\", \"bevel\"]);\n\ninterface ResolvedElementRecord {\n\tid: string;\n\tasset: string;\n\tat: [number, number];\n\tsize?: number;\n\tlayer?: string;\n\tenter?: ElementPlacement[\"enter\"];\n\texit?: ElementPlacement[\"exit\"];\n\tambient?: AmbientAnimation[];\n\ttext?: TextContent;\n\tprimitive?: PrimitiveContent;\n}\n\nexport interface ResolvedSceneSnapshot {\n\tid: string;\n\tprogress: number;\n\telements: RuntimeElementState[];\n\tconnectors: RuntimeConnectorState[];\n}\n\ninterface ResolvedConnectorRecord {\n\tid: string;\n\troute?: [number, number][];\n\tfrom?: ConnectorEndpointRef;\n\tto?: ConnectorEndpointRef;\n\trouting?: ConnectionPlacement[\"routing\"];\n\tlayer?: string;\n\tstyle?: ConnectorStyle;\n\tstart?: ConnectionPlacement[\"start\"];\n\tend?: ConnectionPlacement[\"end\"];\n\tdirection?: ConnectionPlacement[\"direction\"];\n\tenter?: ConnectionPlacement[\"enter\"];\n\texit?: ConnectionPlacement[\"exit\"];\n\tambient?: AmbientAnimation[];\n}\n\nfunction issue(code: string, message: string, extras: Partial<ValidationError> = {}): ValidationError {\n\treturn { code, message, ...extras };\n}\n\nfunction isValidIdentifier(value: string): boolean {\n\treturn /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(value);\n}\n\nfunction isValidPosition(value: unknown): value is [number, number] {\n\treturn Array.isArray(value) && value.length === 2 && value.every((part) => Number.isFinite(part) && part >= 0);\n}\n\nfunction isValidPositiveNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value > 0;\n}\n\nfunction defaultElementLayer(document: SceneDocument): string {\n\tconst structures = document.header.layers.find((layer) => layer.name === \"structures\");\n\treturn structures?.name ?? document.header.layers[0]?.name ?? \"\";\n}\n\nfunction defaultFloorLayer(document: SceneDocument): string {\n\tconst ground = document.header.layers.find((layer) => layer.name === \"ground\");\n\treturn ground?.name ?? document.header.layers[0]?.name ?? \"\";\n}\n\nfunction defaultConnectorLayer(document: SceneDocument): string {\n\tconst connectors = document.header.layers.find((layer) => layer.name === \"connectors\");\n\tconst ground = document.header.layers.find((layer) => layer.name === \"ground\");\n\treturn connectors?.name ?? ground?.name ?? document.header.layers[0]?.name ?? \"\";\n}\n\nfunction declaredAssetNames(document: SceneDocument): Set<string> {\n\treturn new Set(document.header.assets.map((asset) => asset.id));\n}\n\nfunction hasUrlAssetSource(document: SceneDocument, assetId: string): boolean {\n\treturn Boolean(document.header.assetBaseUrl && document.header.assets.some((asset) => asset.id === assetId));\n}\n\nfunction isBuiltInAsset(assetId: string): boolean {\n\treturn assetId === BUILT_IN_TEXT_ASSET_ID || BUILT_IN_PRIMITIVE_ASSET_IDS.has(assetId);\n}\n\nfunction isPrimitiveAsset(assetId: string): boolean {\n\treturn BUILT_IN_PRIMITIVE_ASSET_IDS.has(assetId);\n}\n\nfunction hasExternalAssetReferences(document: SceneDocument): boolean {\n\tif (document.header.floor?.asset && !isBuiltInAsset(document.header.floor.asset)) {\n\t\treturn true;\n\t}\n\tfor (const scene of document.scenes) {\n\t\tfor (const element of [...(scene.elements ?? []), ...(scene.add?.elements ?? [])]) {\n\t\t\tif (!isBuiltInAsset(element.asset)) return true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction hasBuiltInElements(document: SceneDocument): boolean {\n\tfor (const scene of document.scenes) {\n\t\tfor (const element of [...(scene.elements ?? []), ...(scene.add?.elements ?? [])]) {\n\t\t\tif (isBuiltInAsset(element.asset)) return true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction declaredLayerNames(document: SceneDocument): Set<string> {\n\treturn new Set(document.header.layers.map((layer) => layer.name));\n}\n\nfunction validateHeader(document: SceneDocument, errors: ValidationError[]): void {\n\tconst assets = document.header.assets;\n\tif (assets.length === 0 && (hasExternalAssetReferences(document) || !hasBuiltInElements(document))) {\n\t\terrors.push(issue(\"NO_ASSETS\", \"Header must declare at least one asset\"));\n\t}\n\n\tconst assetNames = new Set<string>();\n\tfor (const asset of assets) {\n\t\tif (!isValidIdentifier(asset.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_IDENTIFIER\", `Asset \"${asset.id}\" must be kebab-case`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (assetNames.has(asset.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_ASSET_ID\", `Duplicate asset \"${asset.id}\"`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tassetNames.add(asset.id);\n\t\tif (isBuiltInAsset(asset.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"BUILTIN_ASSET_ID_RESERVED\", `Asset \"${asset.id}\" is reserved for a built-in asset`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!hasUrlAssetSource(document, asset.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"ASSET_URL_REQUIRED\", `Asset \"${asset.id}\" has no URL source`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tasset.anchor !== undefined &&\n\t\t\t(!isValidPosition(asset.anchor) || asset.anchor.some((part) => part < 0 || part > 1))\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_ASSET_ANCHOR\", `Asset \"${asset.id}\" anchor must use normalized values from 0 to 1`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tconst layers = document.header.layers;\n\tif (layers.length === 0) {\n\t\terrors.push(issue(\"NO_LAYERS\", \"Header must declare at least one layer\"));\n\t}\n\n\tconst layerNames = new Set<string>();\n\tfor (const layer of layers) {\n\t\tif (!isValidIdentifier(layer.name)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_IDENTIFIER\", `Layer \"${layer.name}\" must be kebab-case`, {\n\t\t\t\t\tlayerName: layer.name,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (layerNames.has(layer.name)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_LAYER_NAME\", `Duplicate layer \"${layer.name}\"`, {\n\t\t\t\t\tlayerName: layer.name,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tlayerNames.add(layer.name);\n\t\tif (layer.order !== undefined && (!Number.isFinite(layer.order) || !Number.isInteger(layer.order))) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_LAYER_ORDER\", \"Layer order must be a finite integer\", {\n\t\t\t\t\tlayerName: layer.name,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tconst floor = document.header.floor;\n\tif (floor) {\n\t\tif (floor.size !== undefined && !isValidPositiveTuple(floor.size)) {\n\t\t\terrors.push(issue(\"INVALID_FLOOR_SIZE\", \"Floor size must be positive\"));\n\t\t}\n\t\tif (floor.layer !== undefined && !layerNames.has(floor.layer)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"LAYER_NOT_FOUND\", `Floor layer \"${floor.layer}\" is not declared`, {\n\t\t\t\t\tlayerName: floor.layer,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (floor.asset !== undefined && !assetNames.has(floor.asset)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"ASSET_NOT_DECLARED\", `Floor asset \"${floor.asset}\" is not declared`, {\n\t\t\t\t\tassetName: floor.asset,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (floor.asset !== undefined && isBuiltInAsset(floor.asset)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_FLOOR_ASSET\", \"Floor asset cannot use a built-in generated asset\", { assetName: floor.asset }),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction isValidPositiveTuple(value: unknown): value is [number, number] {\n\treturn Array.isArray(value) && value.length === 2 && value.every((part) => Number.isFinite(part) && part > 0);\n}\n\nfunction validateTimelineShape(document: SceneDocument, errors: ValidationError[]): void {\n\tif (document.scenes.length === 0) {\n\t\terrors.push(issue(\"NO_SCENES\", \"Document must contain at least one scene\"));\n\t\treturn;\n\t}\n\n\tconst sceneIds = new Set<string>();\n\tfor (const scene of document.scenes) {\n\t\tif (!isValidIdentifier(scene.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_IDENTIFIER\", `Scene \"${scene.id}\" must be kebab-case`, {\n\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (sceneIds.has(scene.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_SCENE_ID\", `Duplicate scene \"${scene.id}\"`, {\n\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tsceneIds.add(scene.id);\n\t}\n\n\tconst first = document.scenes[0];\n\tif (\n\t\tfirst.elements === undefined ||\n\t\tfirst.add !== undefined ||\n\t\tfirst.update !== undefined ||\n\t\tfirst.remove !== undefined\n\t) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_INITIAL_SCENE\", \"Initial scene must use elements and no delta operations\", { sceneId: first.id }),\n\t\t);\n\t}\n\n\tfor (const scene of document.scenes.slice(1)) {\n\t\tif (scene.elements !== undefined || scene.connections !== undefined) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_SCENE_DELTA\", \"Delta scenes may not use top-level elements or connections\", {\n\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validatePlacement(\n\tplacement: ElementPlacement,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tvalidateElementCommon(placement, document, errors, sceneId);\n\tvalidateGeneratedContentForAsset(placement, placement.asset, errors, sceneId);\n\tif (!isBuiltInAsset(placement.asset) && !declaredAssetNames(document).has(placement.asset)) {\n\t\terrors.push(\n\t\t\tissue(\"ASSET_NOT_DECLARED\", `Asset \"${placement.asset}\" is not declared`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: placement.id,\n\t\t\t\tassetName: placement.asset,\n\t\t\t}),\n\t\t);\n\t}\n\tif (!isValidPosition(placement.at)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_POSITION\", \"Element at must be finite and non-negative\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: placement.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validatePatch(\n\tpatch: ElementPatch,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n\tcurrentAsset?: string,\n): void {\n\tvalidateElementCommon(patch, document, errors, sceneId);\n\tif (currentAsset !== undefined) {\n\t\tvalidateGeneratedContentForAsset(patch, currentAsset, errors, sceneId);\n\t}\n\tif (patch.at !== undefined && !isValidPosition(patch.at)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_POSITION\", \"Element at must be finite and non-negative\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: patch.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateElementCommon(\n\telement: ElementPlacement | ElementPatch,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tif (!isValidIdentifier(element.id)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_IDENTIFIER\", `Element \"${element.id}\" must be kebab-case`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.size !== undefined && !isValidPositiveNumber(element.size)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_SIZE\", \"Element size must be greater than zero\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.size !== undefined && (!Number.isInteger(element.size) || element.size < 1)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_SIZE\", \"Element size must be a positive whole grid cell count\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.layer !== undefined && !declaredLayerNames(document).has(element.layer)) {\n\t\terrors.push(\n\t\t\tissue(\"LAYER_NOT_FOUND\", `Layer \"${element.layer}\" is not declared`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tlayerName: element.layer,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.enter !== undefined && !VALID_ENTRY_ANIMATIONS.has(element.enter)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown entry animation \"${element.enter}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.exit !== undefined && !VALID_EXIT_ANIMATIONS.has(element.exit)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown exit animation \"${element.exit}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tvalidateAmbient(element.ambient, errors, sceneId, element.id);\n}\n\nfunction validateGeneratedContentForAsset(\n\telement: ElementPlacement | ElementPatch,\n\tassetId: string,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tif (isBuiltInAsset(assetId)) {\n\t\tif (assetId === BUILT_IN_TEXT_ASSET_ID) {\n\t\t\tvalidateTextForAsset(element, errors, sceneId);\n\t\t\treturn;\n\t\t}\n\t\tvalidatePrimitiveForAsset(element, assetId, errors, sceneId);\n\t\treturn;\n\t}\n\n\tif (element.text !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"TEXT_CONTENT_FOR_NON_TEXT_ASSET\", \"Only built-in text elements may define text content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tassetName: assetId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.primitive !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"GENERATED_CONTENT_FOR_EXTERNAL_ASSET\", \"Only built-in generated assets may define primitive content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tassetName: assetId,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateTextForAsset(\n\telement: ElementPlacement | ElementPatch,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tif (!element.text) {\n\t\terrors.push(\n\t\t\tissue(\"TEXT_CONTENT_REQUIRED\", \"Built-in text elements require text content\", { sceneId, elementId: element.id }),\n\t\t);\n\t\treturn;\n\t}\n\tif (element.primitive !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"PRIMITIVE_CONTENT_FOR_TEXT_ASSET\", \"Built-in text elements may not define primitive content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tvalidateTextContent(element.text, errors, sceneId, element.id);\n}\n\nfunction validatePrimitiveForAsset(\n\telement: ElementPlacement | ElementPatch,\n\tassetId: string,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tif (!isPrimitiveAsset(assetId)) return;\n\tif (element.text !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"TEXT_CONTENT_FOR_PRIMITIVE_ASSET\", \"Primitive elements may not define text content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tconst primitive = element.primitive;\n\tif (!primitive) {\n\t\terrors.push(\n\t\t\tissue(\"PRIMITIVE_CONTENT_REQUIRED\", \"Built-in primitive elements require primitive content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tassetName: assetId,\n\t\t\t}),\n\t\t);\n\t\treturn;\n\t}\n\n\tconst activeKeys = Object.entries(primitive)\n\t\t.filter(([, value]) => value !== undefined)\n\t\t.map(([key]) => key);\n\tif (activeKeys.length !== 1 || activeKeys[0] !== assetId) {\n\t\terrors.push(\n\t\t\tissue(\"PRIMITIVE_CONTENT_MISMATCH\", \"Primitive content must define exactly the payload matching its asset id\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tassetName: assetId,\n\t\t\t}),\n\t\t);\n\t\treturn;\n\t}\n\n\tconst payload = primitive[assetId as keyof PrimitiveContent];\n\tvalidatePrimitiveStyle(payload, errors, sceneId, element.id);\n\tif (assetId === \"rectangle\") {\n\t\tconst rx = primitive.rectangle?.rx;\n\t\tif (rx !== undefined && (!Number.isFinite(rx) || rx < 0 || rx > 0.5)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Rectangle rx must be from 0 to 0.5\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: element.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\tif (assetId === \"polygon\") {\n\t\tvalidatePrimitivePoints(primitive.polygon?.points, 3, errors, sceneId, element.id);\n\t}\n\tif (assetId === \"line\") {\n\t\tvalidatePrimitivePoints(primitive.line?.points, 2, errors, sceneId, element.id);\n\t\tif (primitive.line?.lineCap !== undefined && !VALID_LINE_CAPS.has(primitive.line.lineCap)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Line cap is invalid\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: element.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (primitive.line?.lineJoin !== undefined && !VALID_LINE_JOINS.has(primitive.line.lineJoin)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Line join is invalid\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: element.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validatePrimitiveStyle(\n\tstyle: PrimitiveContent[keyof PrimitiveContent] | undefined,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n): void {\n\tif (!style) return;\n\tfor (const token of [style.stroke, \"fill\" in style ? style.fill : undefined]) {\n\t\tif (token !== undefined && !isSafeTextStyleToken(token)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Primitive color token is unsafe\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\tif (style.strokeWidth !== undefined && (!Number.isFinite(style.strokeWidth) || style.strokeWidth < 0)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Primitive strokeWidth is invalid\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (style.opacity !== undefined && (!Number.isFinite(style.opacity) || style.opacity < 0 || style.opacity > 1)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Primitive opacity must be 0..1\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (\n\t\tstyle.dash !== undefined &&\n\t\t(!isValidPositiveTuple(style.dash) || style.dash.some((part) => !Number.isFinite(part)))\n\t) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Primitive dash is invalid\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validatePrimitivePoints(\n\tpoints: [number, number][] | undefined,\n\tminCount: number,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n): void {\n\tif (\n\t\t!points ||\n\t\tpoints.length < minCount ||\n\t\tpoints.length > MAX_PRIMITIVE_POINTS ||\n\t\tpoints.some((point) => !isValidPosition(point) || point.some((part) => part < 0 || part > 1))\n\t) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_PRIMITIVE_POINTS\", \"Primitive points must use normalized coordinates from 0 to 1\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateTextContent(text: TextContent, errors: ValidationError[], sceneId: string, elementId: string): void {\n\tconst value = normalizeTextValue(text.value);\n\tconst lines = value.split(\"\\n\");\n\tif (\n\t\tvalue.length === 0 ||\n\t\tvalue.length > MAX_TEXT_CHARACTERS ||\n\t\tlines.length > MAX_TEXT_LINES ||\n\t\tlines.every((line) => line.trim().length === 0)\n\t) {\n\t\terrors.push(\n\t\t\tissue(\n\t\t\t\t\"INVALID_TEXT_CONTENT\",\n\t\t\t\t`Text content must be non-empty, at most ${MAX_TEXT_CHARACTERS} characters, and at most ${MAX_TEXT_LINES} lines`,\n\t\t\t\t{ sceneId, elementId },\n\t\t\t),\n\t\t);\n\t}\n\n\tif (text.align !== undefined && !VALID_TEXT_ALIGN.has(text.align)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text align must be start, middle, or end\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (text.fontSize !== undefined && !isValidPositiveNumber(text.fontSize)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text fontSize must be greater than zero\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (text.lineHeight !== undefined && !isValidPositiveNumber(text.lineHeight)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text lineHeight must be greater than zero\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (text.fontWeight !== undefined && !isValidTextWeight(text.fontWeight)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text fontWeight must be normal, bold, or a positive finite number\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (text.fill !== undefined && !isSafeTextStyleToken(text.fill)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text fill contains unsafe CSS syntax\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction normalizeTextValue(value: string): string {\n\treturn value.replace(/\\r\\n?/g, \"\\n\");\n}\n\nfunction isValidTextWeight(value: TextContent[\"fontWeight\"]): boolean {\n\tif (typeof value === \"number\") {\n\t\treturn Number.isFinite(value) && value > 0;\n\t}\n\treturn typeof value === \"string\" && VALID_TEXT_WEIGHT.has(value);\n}\n\nfunction isSafeTextStyleToken(value: string): boolean {\n\tconst normalized = value.trim().toLowerCase();\n\treturn (\n\t\tnormalized.length > 0 &&\n\t\t!normalized.includes(\"url(\") &&\n\t\t!normalized.includes(\"javascript:\") &&\n\t\t!value.includes(\"<\") &&\n\t\t!value.includes(\">\") &&\n\t\t!hasControlCharacters(value)\n\t);\n}\n\nfunction hasControlCharacters(value: string): boolean {\n\tfor (const char of value) {\n\t\tconst code = char.charCodeAt(0);\n\t\tif (code < 32 || code === 127) return true;\n\t}\n\treturn false;\n}\n\nfunction validateRemoval(removal: ElementRemoval, errors: ValidationError[], sceneId: string): void {\n\tif (!isValidIdentifier(removal.id)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_IDENTIFIER\", `Element \"${removal.id}\" must be kebab-case`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: removal.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (removal.exit !== undefined && !VALID_EXIT_ANIMATIONS.has(removal.exit)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown exit animation \"${removal.exit}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: removal.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateAmbient(\n\tambient: AmbientAnimation[] | undefined,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n): void {\n\tvalidateAmbientWithSet(ambient, VALID_AMBIENT_ANIMATIONS, errors, sceneId, elementId);\n}\n\nfunction validateAmbientWithSet(\n\tambient: AmbientAnimation[] | undefined,\n\tvalidAnimations: ReadonlySet<string>,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n): void {\n\tfor (const animation of ambient ?? []) {\n\t\tif (!validAnimations.has(animation.name)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"UNKNOWN_AMBIENT_ANIMATION\", `Unknown ambient animation \"${animation.name}\"`, { sceneId, elementId }),\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tanimation.infinite === false &&\n\t\t\t(animation.iterations === undefined || !Number.isInteger(animation.iterations) || animation.iterations <= 0)\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_AMBIENT_ITERATIONS\", \"Ambient iterations must be positive when infinite is false\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateSceneObjectDeltas(document: SceneDocument, errors: ValidationError[]): void {\n\tconst elements = new Map<string, ResolvedElementRecord>();\n\tconst connectors = new Map<string, ResolvedConnectorRecord>();\n\tconst documentElementIds = collectDocumentElementIds(document);\n\tconst first = document.scenes[0];\n\tif (!first?.elements) return;\n\n\tfor (const element of first.elements) {\n\t\tvalidatePlacement(element, document, errors, first.id);\n\t\tif (elements.has(element.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_ELEMENT_ID\", `Duplicate element \"${element.id}\"`, {\n\t\t\t\t\tsceneId: first.id,\n\t\t\t\t\telementId: element.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\telements.set(element.id, normalizePlacement(document, element));\n\t}\n\n\tfor (const connection of first.connections ?? []) {\n\t\tvalidateConnectionPlacement(connection, document, errors, first.id, elements, documentElementIds);\n\t\tif (connectors.has(connection.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_CONNECTOR_ID\", `Duplicate connection \"${connection.id}\"`, {\n\t\t\t\t\tsceneId: first.id,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tconnectors.set(connection.id, normalizeConnectionPlacement(document, connection));\n\t}\n\n\tfor (const scene of document.scenes.slice(1)) {\n\t\tconst updateIds = new Set<string>();\n\t\tfor (const update of scene.update?.elements ?? []) {\n\t\t\tconst existing = elements.get(update.id)?.asset;\n\t\t\tvalidatePatch(update, document, errors, scene.id, existing);\n\t\t\tupdateIds.add(update.id);\n\t\t\tif (!elements.has(update.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ELEMENT_NOT_PRESENT\", `Element \"${update.id}\" is not present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: update.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (const removal of scene.remove?.elements ?? []) {\n\t\t\tvalidateRemoval(removal, errors, scene.id);\n\t\t\tif (updateIds.has(removal.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ELEMENT_DELTA_CONFLICT\", `Element \"${removal.id}\" cannot be updated and removed in one scene`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: removal.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!elements.has(removal.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ELEMENT_NOT_PRESENT\", `Element \"${removal.id}\" is not present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: removal.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (const add of scene.add?.elements ?? []) {\n\t\t\tvalidatePlacement(add, document, errors, scene.id);\n\t\t\tif (elements.has(add.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ELEMENT_ALREADY_PRESENT\", `Element \"${add.id}\" is already present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: add.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst elementsForConnections = new Map(elements);\n\t\tfor (const update of scene.update?.elements ?? []) {\n\t\t\tconst existing = elementsForConnections.get(update.id);\n\t\t\tif (existing) {\n\t\t\t\telementsForConnections.set(update.id, { ...existing, ...update });\n\t\t\t}\n\t\t}\n\t\tfor (const add of scene.add?.elements ?? []) {\n\t\t\telementsForConnections.set(add.id, normalizePlacement(document, add));\n\t\t}\n\n\t\tvalidateEndpointRemovalRule(scene, connectors, errors);\n\n\t\tconst connectorUpdateIds = new Set<string>();\n\t\tfor (const update of scene.update?.connections ?? []) {\n\t\t\tvalidateConnectionRemovalLikeId(update.id, errors, scene.id);\n\t\t\tconnectorUpdateIds.add(update.id);\n\t\t\tconst existing = connectors.get(update.id);\n\t\t\tif (!existing) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"CONNECTOR_NOT_PRESENT\", `Connection \"${update.id}\" is not present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: update.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tvalidateConnectionPatch(update, document, errors, scene.id, elementsForConnections, documentElementIds);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvalidateConnectionPatch(\n\t\t\t\t{\n\t\t\t\t\t...existing,\n\t\t\t\t\t...update,\n\t\t\t\t\tstyle: mergeStyle(existing.style, update.style),\n\t\t\t\t},\n\t\t\t\tdocument,\n\t\t\t\terrors,\n\t\t\t\tscene.id,\n\t\t\t\telementsForConnections,\n\t\t\t\tdocumentElementIds,\n\t\t\t);\n\t\t}\n\n\t\tfor (const removal of scene.remove?.connections ?? []) {\n\t\t\tvalidateConnectionRemoval(removal, errors, scene.id);\n\t\t\tif (connectorUpdateIds.has(removal.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"CONNECTOR_DELTA_CONFLICT\", `Connection \"${removal.id}\" cannot be updated and removed in one scene`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: removal.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!connectors.has(removal.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"CONNECTOR_NOT_PRESENT\", `Connection \"${removal.id}\" is not present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: removal.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (const add of scene.add?.connections ?? []) {\n\t\t\tvalidateConnectionPlacement(add, document, errors, scene.id, elementsForConnections, documentElementIds);\n\t\t\tif (connectors.has(add.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"CONNECTOR_ALREADY_PRESENT\", `Connection \"${add.id}\" is already present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: add.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (const update of scene.update?.elements ?? []) {\n\t\t\tconst existing = elements.get(update.id);\n\t\t\tif (existing) {\n\t\t\t\telements.set(update.id, { ...existing, ...update });\n\t\t\t}\n\t\t}\n\t\tfor (const add of scene.add?.elements ?? []) {\n\t\t\telements.set(add.id, normalizePlacement(document, add));\n\t\t}\n\t\tfor (const update of scene.update?.connections ?? []) {\n\t\t\tconst existing = connectors.get(update.id);\n\t\t\tif (existing) {\n\t\t\t\tconnectors.set(update.id, {\n\t\t\t\t\t...existing,\n\t\t\t\t\t...update,\n\t\t\t\t\tstyle: mergeStyle(existing.style, update.style),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tfor (const add of scene.add?.connections ?? []) {\n\t\t\tconnectors.set(add.id, normalizeConnectionPlacement(document, add));\n\t\t}\n\t\tfor (const removal of scene.remove?.connections ?? []) {\n\t\t\tconnectors.delete(removal.id);\n\t\t}\n\t\tfor (const removal of scene.remove?.elements ?? []) {\n\t\t\telements.delete(removal.id);\n\t\t}\n\t}\n}\n\nfunction collectDocumentElementIds(document: SceneDocument): Set<string> {\n\tconst ids = new Set<string>();\n\tfor (const scene of document.scenes) {\n\t\tfor (const element of scene.elements ?? []) ids.add(element.id);\n\t\tfor (const element of scene.add?.elements ?? []) ids.add(element.id);\n\t}\n\treturn ids;\n}\n\nfunction validateEndpointRemovalRule(\n\tscene: SceneStep,\n\tconnectors: Map<string, ResolvedConnectorRecord>,\n\terrors: ValidationError[],\n): void {\n\tconst removedElements = new Set((scene.remove?.elements ?? []).map((removal) => removal.id));\n\tif (removedElements.size === 0) return;\n\tconst removedConnections = new Set((scene.remove?.connections ?? []).map((removal) => removal.id));\n\tfor (const connection of connectors.values()) {\n\t\tif (removedConnections.has(connection.id)) continue;\n\t\tconst endpointIds = [connection.from?.element, connection.to?.element];\n\t\tif (endpointIds.some((id) => id !== undefined && removedElements.has(id))) {\n\t\t\terrors.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"CONNECTION_ENDPOINT_REMOVED\",\n\t\t\t\t\t`Connection \"${connection.id}\" references an element removed in the same scene`,\n\t\t\t\t\t{ sceneId: scene.id, elementId: connection.id },\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateConnectionPlacement(\n\tconnection: ConnectionPlacement,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telements: Map<string, ResolvedElementRecord>,\n\tdocumentElementIds: Set<string>,\n): void {\n\tvalidateConnectionCommon(connection, document, errors, sceneId, elements, documentElementIds);\n}\n\nfunction validateConnectionPatch(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telements: Map<string, ResolvedElementRecord>,\n\tdocumentElementIds: Set<string>,\n): void {\n\tvalidateConnectionCommon(connection, document, errors, sceneId, elements, documentElementIds);\n}\n\nfunction validateConnectionCommon(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telements: Map<string, ResolvedElementRecord>,\n\tdocumentElementIds: Set<string>,\n): void {\n\tvalidateConnectionRemovalLikeId(connection.id, errors, sceneId);\n\tif (documentElementIds.has(connection.id)) {\n\t\terrors.push(\n\t\t\tissue(\"DUPLICATE_SCENE_OBJECT_ID\", `Connection \"${connection.id}\" collides with an element id`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.layer !== undefined && !declaredLayerNames(document).has(connection.layer)) {\n\t\terrors.push(\n\t\t\tissue(\"LAYER_NOT_FOUND\", `Layer \"${connection.layer}\" is not declared`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t\tlayerName: connection.layer,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.enter !== undefined && !VALID_ENTRY_ANIMATIONS.has(connection.enter)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown entry animation \"${connection.enter}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.exit !== undefined && !VALID_EXIT_ANIMATIONS.has(connection.exit)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown exit animation \"${connection.exit}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tvalidateAmbientWithSet(connection.ambient, VALID_CONNECTOR_AMBIENT_ANIMATIONS, errors, sceneId, connection.id);\n\tvalidateConnectionRouteSource(connection, errors, sceneId);\n\tvalidateConnectionEndpoints(connection, elements, errors, sceneId);\n\tvalidateConnectionRouting(connection, errors, sceneId);\n\tvalidateConnectorStyle(connection.style, errors, sceneId, connection.id);\n\tif (connection.start !== undefined && !VALID_CONNECTOR_ENDPOINTS.has(connection.start)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ENDPOINT\", \"Invalid connector start endpoint\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.end !== undefined && !VALID_CONNECTOR_ENDPOINTS.has(connection.end)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ENDPOINT\", \"Invalid connector end endpoint\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.direction !== undefined && !VALID_CONNECTOR_DIRECTIONS.has(connection.direction)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_DIRECTION\", \"Invalid connector direction\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateConnectionRouteSource(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tconst hasRoute = connection.route !== undefined;\n\tconst hasEndpointRoute = connection.from !== undefined || connection.to !== undefined;\n\tif (hasRoute === hasEndpointRoute || (hasEndpointRoute && (!connection.from || !connection.to))) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Connection must use either route or both from and to\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.route !== undefined) {\n\t\tif (\n\t\t\tconnection.route.length < 2 ||\n\t\t\tconnection.route.some(\n\t\t\t\t(point) => !isValidPosition(point) || point.some((coordinate) => !Number.isInteger(coordinate)),\n\t\t\t)\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Manual connection route must contain at least two whole-grid points\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t} else if (!isGridAxisRoute(connection.route)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Manual connection route segments must follow one grid axis at a time\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateConnectionEndpoints(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\telements: Map<string, ResolvedElementRecord>,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tfor (const key of [\"from\", \"to\"] as const) {\n\t\tconst endpoint = connection[key];\n\t\tif (endpoint === undefined) continue;\n\t\tconst hasElement = endpoint.element !== undefined;\n\t\tconst hasAt = endpoint.at !== undefined;\n\t\tif (hasElement === hasAt) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Connection endpoint must use exactly one of element or at\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (endpoint.element !== undefined && !elements.has(endpoint.element)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"CONNECTOR_ENDPOINT_NOT_FOUND\", `Connection endpoint \"${endpoint.element}\" was not found`, {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (endpoint.at !== undefined && !isValidPosition(endpoint.at)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Endpoint at must be non-negative\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (endpoint.side !== undefined && !VALID_CONNECTOR_SIDES.has(endpoint.side)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Invalid endpoint side\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tendpoint.offset !== undefined &&\n\t\t\t(!Number.isFinite(endpoint.offset) || endpoint.offset < -0.5 || endpoint.offset > 0.5)\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Invalid endpoint offset\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateConnectionRouting(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tconst routing = connection.routing;\n\tif (routing === undefined) return;\n\tif (connection.route !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", \"Routing config is valid only with endpoint-routed connections\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (routing.mode !== undefined && !VALID_CONNECTOR_ROUTING_MODES.has(routing.mode)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", \"Invalid connector routing mode\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (routing.avoid !== undefined) {\n\t\tconst avoid = routing.avoid;\n\t\tif (!(avoid === \"objects\" || avoid === \"none\" || Array.isArray(avoid))) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", \"Invalid connector routing avoid\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\tfor (const [name, value] of [\n\t\t[\"clearance\", routing.clearance],\n\t\t[\"gridStep\", routing.gridStep],\n\t\t[\"maxBends\", routing.maxBends],\n\t] as const) {\n\t\tif (value !== undefined && (!Number.isFinite(value) || value < 0)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", `Invalid connector routing ${name}`, { sceneId, elementId: connection.id }),\n\t\t\t);\n\t\t}\n\t}\n\tif (routing.prefer !== undefined && !VALID_CONNECTOR_ROUTING_PREFERENCES.has(routing.prefer)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", \"Invalid connector routing preference\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateConnectorStyle(\n\tstyle: ConnectorStyle | undefined,\n\terrors: ValidationError[],\n\tsceneId: string,\n\tconnectionId: string,\n): void {\n\tif (style === undefined) return;\n\tif (style.pattern !== undefined && !VALID_CONNECTOR_PATTERNS.has(style.pattern)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Invalid connector pattern\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (style.variant !== undefined && !VALID_CONNECTOR_VARIANTS.has(style.variant)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Invalid connector variant\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (style.lane !== undefined && !VALID_CONNECTOR_LANES.has(style.lane)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Invalid connector lane\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tfor (const [name, value] of [\n\t\t[\"strokeWidth\", style.strokeWidth],\n\t\t[\"outlineWidth\", style.outlineWidth],\n\t] as const) {\n\t\tif (value !== undefined && !isValidPositiveNumber(value)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", `Invalid connector ${name}`, {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connectionId,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\tif (style.opacity !== undefined && (!Number.isFinite(style.opacity) || style.opacity < 0 || style.opacity > 1)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Connector opacity must be 0..1\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (\n\t\tstyle.dash !== undefined &&\n\t\t(!isValidPositiveTuple(style.dash) || style.dash.some((part) => !Number.isFinite(part)))\n\t) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Invalid connector dash\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tfor (const token of [style.stroke, style.outline]) {\n\t\tif (token !== undefined && !isSafeTextStyleToken(token)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Connector color token is unsafe\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connectionId,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateConnectionRemoval(removal: ConnectionRemoval, errors: ValidationError[], sceneId: string): void {\n\tvalidateConnectionRemovalLikeId(removal.id, errors, sceneId);\n\tif (removal.exit !== undefined && !VALID_EXIT_ANIMATIONS.has(removal.exit)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown exit animation \"${removal.exit}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: removal.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateConnectionRemovalLikeId(id: string, errors: ValidationError[], sceneId: string): void {\n\tif (!isValidIdentifier(id)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_IDENTIFIER\", `Connection \"${id}\" must be kebab-case`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction mergeStyle(base: ConnectorStyle | undefined, patch: ConnectorStyle | undefined): ConnectorStyle | undefined {\n\tif (base === undefined) return patch;\n\tif (patch === undefined) return base;\n\treturn { ...base, ...patch };\n}\n\nfunction validateWarnings(document: SceneDocument, warnings: ValidationWarning[]): void {\n\tconst usedAssets = new Set<string>();\n\tconst usedLayers = new Set<string>();\n\tconst snapshots = resolveSceneSnapshots(document);\n\n\tif (document.header.floor?.asset && document.header.floor.visible !== false) {\n\t\tusedAssets.add(document.header.floor.asset);\n\t}\n\n\tfor (const snapshot of snapshots) {\n\t\tfor (const element of snapshot.elements) {\n\t\t\tusedAssets.add(element.asset);\n\t\t\tif (isBuiltInAsset(element.asset)) {\n\t\t\t\tusedAssets.delete(element.asset);\n\t\t\t}\n\t\t\tusedLayers.add(element.layer);\n\t\t\tif (document.header.floor?.size) {\n\t\t\t\tconst [columns, rows] = document.header.floor.size;\n\t\t\t\tif (element.pos[0] + element.size > columns || element.pos[1] + element.size > rows) {\n\t\t\t\t\twarnings.push(\n\t\t\t\t\t\tissue(\"ELEMENT_OUTSIDE_FLOOR\", `Element \"${element.id}\" is outside floor bounds`, {\n\t\t\t\t\t\t\tsceneId: snapshot.id,\n\t\t\t\t\t\t\telementId: element.id,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const connector of snapshot.connectors) {\n\t\t\tusedLayers.add(connector.layer);\n\t\t\tif (document.header.floor?.size) {\n\t\t\t\tconst [columns, rows] = document.header.floor.size;\n\t\t\t\tif (connector.route.some((point) => point[0] > columns || point[1] > rows)) {\n\t\t\t\t\twarnings.push(\n\t\t\t\t\t\tissue(\"CONNECTOR_OUTSIDE_FLOOR\", `Connection \"${connector.id}\" is outside floor bounds`, {\n\t\t\t\t\t\t\tsceneId: snapshot.id,\n\t\t\t\t\t\t\telementId: connector.id,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const asset of document.header.assets) {\n\t\tif (!usedAssets.has(asset.id)) {\n\t\t\twarnings.push(\n\t\t\t\tissue(\"UNREFERENCED_ASSET\", `Asset \"${asset.id}\" is not used`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const layer of document.header.layers) {\n\t\tif (!usedLayers.has(layer.name) && layer.name !== defaultFloorLayer(document)) {\n\t\t\twarnings.push(\n\t\t\t\tissue(\"UNREFERENCED_LAYER\", `Layer \"${layer.name}\" is not used`, {\n\t\t\t\t\tlayerName: layer.name,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport function validateScene(document: SceneDocument): ValidationReport {\n\tconst errors: ValidationError[] = [];\n\tconst warnings: ValidationWarning[] = [];\n\n\tvalidateHeader(document, errors);\n\tvalidateTimelineShape(document, errors);\n\tvalidateSceneObjectDeltas(document, errors);\n\n\tif (errors.length === 0) {\n\t\tvalidateWarnings(document, warnings);\n\t}\n\n\treturn {\n\t\terrors,\n\t\twarnings,\n\t\tisValid: errors.length === 0,\n\t};\n}\n\nexport function resolveSceneSnapshots(document: SceneDocument): ResolvedSceneSnapshot[] {\n\tconst progress = deriveProgresses(document.scenes);\n\tconst currentElements = new Map<string, ResolvedElementRecord>();\n\tconst currentConnectors = new Map<string, ResolvedConnectorRecord>();\n\tconst snapshots: ResolvedSceneSnapshot[] = [];\n\n\tfor (const [index, scene] of document.scenes.entries()) {\n\t\tconst exiting: RuntimeElementState[] = [];\n\t\tconst exitingConnectors: RuntimeConnectorState[] = [];\n\n\t\tif (index === 0) {\n\t\t\tfor (const element of scene.elements ?? []) {\n\t\t\t\tcurrentElements.set(element.id, normalizePlacement(document, element));\n\t\t\t}\n\t\t\tfor (const connection of scene.connections ?? []) {\n\t\t\t\tcurrentConnectors.set(connection.id, normalizeConnectionPlacement(document, connection));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const patch of scene.update?.elements ?? []) {\n\t\t\t\tconst existing = currentElements.get(patch.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\tcurrentElements.set(patch.id, { ...existing, ...patch });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const element of scene.add?.elements ?? []) {\n\t\t\t\tcurrentElements.set(element.id, normalizePlacement(document, element));\n\t\t\t}\n\n\t\t\tfor (const patch of scene.update?.connections ?? []) {\n\t\t\t\tconst existing = currentConnectors.get(patch.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\tcurrentConnectors.set(patch.id, {\n\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t...patch,\n\t\t\t\t\t\tstyle: mergeStyle(existing.style, patch.style),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const connection of scene.add?.connections ?? []) {\n\t\t\t\tcurrentConnectors.set(connection.id, normalizeConnectionPlacement(document, connection));\n\t\t\t}\n\n\t\t\tfor (const removal of scene.remove?.elements ?? []) {\n\t\t\t\tconst existing = currentElements.get(removal.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\texiting.push(toRuntimeState(existing, \"exiting\", removal.exit));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const removal of scene.remove?.connections ?? []) {\n\t\t\t\tconst existing = currentConnectors.get(removal.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\texitingConnectors.push(toRuntimeConnectorState(document, existing, currentElements, \"exiting\", removal.exit));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst addedIds = new Set((scene.add?.elements ?? []).map((element) => element.id));\n\t\tconst addedConnectorIds = new Set((scene.add?.connections ?? []).map((connection) => connection.id));\n\t\tconst snapshotElements = Array.from(currentElements.values()).map((element) =>\n\t\t\ttoRuntimeState(element, index > 0 && addedIds.has(element.id) ? \"entering\" : \"present\"),\n\t\t);\n\t\tconst snapshotConnectors = Array.from(currentConnectors.values()).map((connection) =>\n\t\t\ttoRuntimeConnectorState(\n\t\t\t\tdocument,\n\t\t\t\tconnection,\n\t\t\t\tcurrentElements,\n\t\t\t\tindex > 0 && addedConnectorIds.has(connection.id) ? \"entering\" : \"present\",\n\t\t\t),\n\t\t);\n\t\tfor (const removed of exiting) {\n\t\t\tconst existingIndex = snapshotElements.findIndex((element) => element.id === removed.id);\n\t\t\tif (existingIndex >= 0) {\n\t\t\t\tsnapshotElements[existingIndex] = removed;\n\t\t\t} else {\n\t\t\t\tsnapshotElements.push(removed);\n\t\t\t}\n\t\t}\n\t\tfor (const removed of exitingConnectors) {\n\t\t\tconst existingIndex = snapshotConnectors.findIndex((connector) => connector.id === removed.id);\n\t\t\tif (existingIndex >= 0) {\n\t\t\t\tsnapshotConnectors[existingIndex] = removed;\n\t\t\t} else {\n\t\t\t\tsnapshotConnectors.push(removed);\n\t\t\t}\n\t\t}\n\n\t\tsnapshots.push({\n\t\t\tid: scene.id,\n\t\t\tprogress: progress[index],\n\t\t\telements: snapshotElements,\n\t\t\tconnectors: snapshotConnectors,\n\t\t});\n\n\t\tfor (const removal of scene.remove?.connections ?? []) {\n\t\t\tcurrentConnectors.delete(removal.id);\n\t\t}\n\t\tfor (const removal of scene.remove?.elements ?? []) {\n\t\t\tcurrentElements.delete(removal.id);\n\t\t}\n\t}\n\n\treturn snapshots;\n}\n\nexport function deriveProgresses(scenes: SceneStep[]): number[] {\n\tif (scenes.length <= 1) {\n\t\treturn scenes.map(() => 0);\n\t}\n\treturn scenes.map((_, index) => index / (scenes.length - 1));\n}\n\nfunction normalizePlacement(document: SceneDocument, element: ElementPlacement): ResolvedElementRecord {\n\treturn {\n\t\tid: element.id,\n\t\tasset: element.asset,\n\t\tat: element.at,\n\t\tsize: element.size,\n\t\tlayer: element.layer ?? defaultElementLayer(document),\n\t\tenter: element.enter,\n\t\texit: element.exit,\n\t\tambient: element.ambient,\n\t\ttext: element.text,\n\t\tprimitive: element.primitive,\n\t};\n}\n\nfunction normalizeConnectionPlacement(\n\tdocument: SceneDocument,\n\tconnection: ConnectionPlacement,\n): ResolvedConnectorRecord {\n\treturn {\n\t\tid: connection.id,\n\t\troute: connection.route,\n\t\tfrom: connection.from,\n\t\tto: connection.to,\n\t\trouting: connection.routing,\n\t\tlayer: connection.layer ?? defaultConnectorLayer(document),\n\t\tstyle: connection.style,\n\t\tstart: connection.start,\n\t\tend: connection.end,\n\t\tdirection: connection.direction,\n\t\tenter: connection.enter,\n\t\texit: connection.exit,\n\t\tambient: connection.ambient,\n\t};\n}\n\nfunction toRuntimeState(\n\telement: ResolvedElementRecord,\n\tpresence: RuntimeElementState[\"presence\"],\n\texit?: ElementRemoval[\"exit\"],\n): RuntimeElementState {\n\treturn {\n\t\tid: element.id,\n\t\tasset: element.asset,\n\t\tpos: element.at,\n\t\tsize: element.size ?? 1,\n\t\tlayer: element.layer ?? \"\",\n\t\tpresence,\n\t\tenter: presence === \"entering\" ? (element.enter ?? \"fade-in\") : element.enter,\n\t\texit: presence === \"exiting\" ? (exit ?? element.exit ?? \"fade-out\") : (exit ?? element.exit),\n\t\tambient: element.ambient,\n\t\ttext: element.text,\n\t\tprimitive: element.primitive,\n\t};\n}\n\nfunction toRuntimeConnectorState(\n\tdocument: SceneDocument,\n\tconnection: ResolvedConnectorRecord,\n\telements: Map<string, ResolvedElementRecord>,\n\tpresence: RuntimeConnectorState[\"presence\"],\n\texit?: ConnectionRemoval[\"exit\"],\n): RuntimeConnectorState {\n\treturn {\n\t\tid: connection.id,\n\t\troute: resolveConnectorRoute(connection, elements),\n\t\tlayer: connection.layer ?? defaultConnectorLayer(document),\n\t\tpresence,\n\t\tstyle: resolveConnectorStyle(connection.style),\n\t\tstart: connection.start ?? \"none\",\n\t\tend: connection.end ?? \"arrow\",\n\t\tdirection: connection.direction ?? \"route\",\n\t\tenter: presence === \"entering\" ? (connection.enter ?? \"fade-in\") : (connection.enter ?? \"fade-in\"),\n\t\texit: presence === \"exiting\" ? (exit ?? connection.exit ?? \"fade-out\") : (exit ?? connection.exit ?? \"fade-out\"),\n\t\tambient: connection.ambient,\n\t};\n}\n\nfunction resolveConnectorStyle(style: ConnectorStyle | undefined): RuntimeConnectorStyle {\n\tconst variant = style?.variant ?? \"line\";\n\tconst pattern = style?.pattern ?? \"solid\";\n\tconst resolved: RuntimeConnectorStyle = {\n\t\tvariant,\n\t\tpattern,\n\t\tstroke: style?.stroke ?? \"#2563eb\",\n\t\tstrokeWidth: style?.strokeWidth ?? (variant === \"road\" ? 14 : 3),\n\t\topacity: style?.opacity ?? 1,\n\t\toutlineWidth: style?.outlineWidth ?? (variant === \"road\" ? 2 : 0),\n\t\tlane: style?.lane ?? \"none\",\n\t};\n\tconst dash = style?.dash ?? defaultDash(pattern);\n\tif (dash) {\n\t\tresolved.dash = dash;\n\t}\n\tconst outline = style?.outline ?? (variant === \"road\" ? \"#ffffff\" : undefined);\n\tif (outline) {\n\t\tresolved.outline = outline;\n\t}\n\treturn resolved;\n}\n\nfunction defaultDash(pattern: RuntimeConnectorStyle[\"pattern\"]): [number, number] | undefined {\n\tif (pattern === \"dashed\") return [12, 8];\n\tif (pattern === \"dotted\") return [0, 8];\n\treturn undefined;\n}\n\nfunction resolveConnectorRoute(\n\tconnection: ResolvedConnectorRecord,\n\telements: Map<string, ResolvedElementRecord>,\n): [number, number][] {\n\tif (connection.route) return connection.route;\n\tif (!connection.from || !connection.to) return [];\n\n\tconst routing = connection.routing ?? {};\n\tconst avoid = routing.avoid ?? \"objects\";\n\tconst clearance = routing.clearance ?? 0.5;\n\tconst obstacles =\n\t\tavoid === \"none\" ? [] : collectObstacles(elements, connection.from, connection.to, avoid, clearance);\n\n\tconst starts = endpointCandidates(connection.from, elements);\n\tconst ends = endpointCandidates(connection.to, elements);\n\tlet best: [number, number][] | undefined;\n\tlet bestScore = Number.POSITIVE_INFINITY;\n\tfor (const start of starts) {\n\t\tfor (const end of ends) {\n\t\t\tconst route = routeBetween(start, end, obstacles, routing.mode ?? \"orthogonal\", clearance);\n\t\t\tconst score = routeScore(route, obstacles);\n\t\t\tif (score < bestScore) {\n\t\t\t\tbest = route;\n\t\t\t\tbestScore = score;\n\t\t\t}\n\t\t}\n\t}\n\treturn simplifyRoute(best ?? [starts[0]?.point ?? [0, 0], ends[0]?.point ?? [0, 0]]);\n}\n\ninterface RouteEndpointCandidate {\n\tpoint: [number, number];\n\tnormal?: [number, number];\n\tsideRank: number;\n}\n\ninterface ObstacleRect {\n\tminX: number;\n\tminY: number;\n\tmaxX: number;\n\tmaxY: number;\n}\n\nfunction endpointCandidates(\n\tendpoint: ConnectorEndpointRef,\n\telements: Map<string, ResolvedElementRecord>,\n): RouteEndpointCandidate[] {\n\tif (endpoint.at) return [{ point: endpoint.at, sideRank: 0 }];\n\tconst element = endpoint.element ? elements.get(endpoint.element) : undefined;\n\tif (!element) return [{ point: [0, 0], sideRank: 0 }];\n\tconst sides =\n\t\tendpoint.side && endpoint.side !== \"auto\"\n\t\t\t? [normalizeSide(endpoint.side)]\n\t\t\t: ([\"right\", \"left\", \"bottom\", \"top\"] as const);\n\treturn sides.map((side, index) => ({\n\t\tpoint: portForSide(element, side, endpoint.offset ?? 0),\n\t\tnormal: normalForSide(side),\n\t\tsideRank: index,\n\t}));\n}\n\nfunction normalizeSide(side: NonNullable<ConnectorEndpointRef[\"side\"]>): \"top\" | \"right\" | \"bottom\" | \"left\" {\n\tif (side === \"front\") return \"bottom\";\n\tif (side === \"back\") return \"top\";\n\tif (side === \"auto\") return \"right\";\n\treturn side;\n}\n\nfunction portForSide(\n\telement: ResolvedElementRecord,\n\tside: \"top\" | \"right\" | \"bottom\" | \"left\",\n\toffset: number,\n): [number, number] {\n\tconst x = element.at[0];\n\tconst y = element.at[1];\n\tconst size = element.size ?? 1;\n\tif (side === \"top\") return [x + size * (0.5 + offset), y];\n\tif (side === \"right\") return [x + size, y + size * (0.5 + offset)];\n\tif (side === \"bottom\") return [x + size * (0.5 - offset), y + size];\n\treturn [x, y + size * (0.5 - offset)];\n}\n\nfunction normalForSide(side: \"top\" | \"right\" | \"bottom\" | \"left\"): [number, number] {\n\tif (side === \"top\") return [0, -1];\n\tif (side === \"right\") return [1, 0];\n\tif (side === \"bottom\") return [0, 1];\n\treturn [-1, 0];\n}\n\nfunction collectObstacles(\n\telements: Map<string, ResolvedElementRecord>,\n\tfrom: ConnectorEndpointRef,\n\tto: ConnectorEndpointRef,\n\tavoid: \"objects\" | \"none\" | string[],\n\tclearance: number,\n): ObstacleRect[] {\n\tconst endpointIds = new Set([from.element, to.element].filter(Boolean));\n\tconst avoidIds = Array.isArray(avoid) ? new Set(avoid) : undefined;\n\tconst obstacles: ObstacleRect[] = [];\n\tfor (const element of elements.values()) {\n\t\tif (endpointIds.has(element.id) || element.asset === BUILT_IN_TEXT_ASSET_ID) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (avoidIds && !avoidIds.has(element.id)) continue;\n\t\tconst size = element.size ?? 1;\n\t\tobstacles.push({\n\t\t\tminX: element.at[0] - clearance,\n\t\t\tminY: element.at[1] - clearance,\n\t\t\tmaxX: element.at[0] + size + clearance,\n\t\t\tmaxY: element.at[1] + size + clearance,\n\t\t});\n\t}\n\treturn obstacles;\n}\n\nfunction routeBetween(\n\tstart: RouteEndpointCandidate,\n\tend: RouteEndpointCandidate,\n\tobstacles: ObstacleRect[],\n\tmode: NonNullable<ConnectorRouting[\"mode\"]> = \"orthogonal\",\n\tclearance = 0.5,\n): [number, number][] {\n\tconst startExit = offsetPort(start, clearance);\n\tconst endEntry = offsetPort(end, clearance);\n\tconst direct = [startExit, endEntry] as [number, number][];\n\tif (mode === \"straight\") return direct;\n\tif (isGridAxisRoute(direct) && !routeIntersectsObstacles(direct, obstacles)) {\n\t\treturn withEndpointPorts(start, end, direct);\n\t}\n\n\tconst candidates: [number, number][][] = [\n\t\t[startExit, [endEntry[0], startExit[1]], endEntry],\n\t\t[startExit, [startExit[0], endEntry[1]], endEntry],\n\t];\n\tconst blocking = obstacles.find((obstacle) => segmentIntersectsRect(startExit, endEntry, obstacle));\n\tif (blocking) {\n\t\tconst leftX = Math.max(0, blocking.minX);\n\t\tconst rightX = Math.max(0, blocking.maxX);\n\t\tconst topY = Math.max(0, blocking.minY);\n\t\tconst bottomY = Math.max(0, blocking.maxY);\n\t\tcandidates.push(\n\t\t\t[startExit, [leftX, startExit[1]], [leftX, endEntry[1]], endEntry],\n\t\t\t[startExit, [rightX, startExit[1]], [rightX, endEntry[1]], endEntry],\n\t\t\t[startExit, [startExit[0], topY], [endEntry[0], topY], endEntry],\n\t\t\t[startExit, [startExit[0], bottomY], [endEntry[0], bottomY], endEntry],\n\t\t);\n\t}\n\n\tconst route =\n\t\tcandidates\n\t\t\t.map((route) => simplifyRoute(route))\n\t\t\t.sort((a, b) => routeScore(a, obstacles) - routeScore(b, obstacles) || routeLength(a) - routeLength(b))[0] ??\n\t\tdirect;\n\treturn withEndpointPorts(start, end, route);\n}\n\nfunction offsetPort(endpoint: RouteEndpointCandidate, clearance: number): [number, number] {\n\tif (!endpoint.normal || clearance <= 0) return endpoint.point;\n\treturn [endpoint.point[0] + endpoint.normal[0] * clearance, endpoint.point[1] + endpoint.normal[1] * clearance];\n}\n\nfunction withEndpointPorts(\n\tstart: RouteEndpointCandidate,\n\tend: RouteEndpointCandidate,\n\troute: [number, number][],\n): [number, number][] {\n\treturn simplifyRoute([start.point, ...route, end.point]);\n}\n\nfunction routeScore(route: [number, number][], obstacles: ObstacleRect[]): number {\n\tconst intersections = routeIntersectsObstacles(route, obstacles) ? 1000 : 0;\n\treturn intersections + bendCount(route) * 10 + routeLength(route);\n}\n\nfunction routeLength(route: [number, number][]): number {\n\tlet length = 0;\n\tfor (let index = 1; index < route.length; index += 1) {\n\t\tlength += Math.abs(route[index][0] - route[index - 1][0]) + Math.abs(route[index][1] - route[index - 1][1]);\n\t}\n\treturn length;\n}\n\nfunction bendCount(route: [number, number][]): number {\n\tlet bends = 0;\n\tfor (let index = 2; index < route.length; index += 1) {\n\t\tconst a = route[index - 2];\n\t\tconst b = route[index - 1];\n\t\tconst c = route[index];\n\t\tif ((b[0] - a[0]) * (c[1] - b[1]) !== (b[1] - a[1]) * (c[0] - b[0])) {\n\t\t\tbends += 1;\n\t\t}\n\t}\n\treturn bends;\n}\n\nfunction routeIntersectsObstacles(route: [number, number][], obstacles: ObstacleRect[]): boolean {\n\tfor (let index = 1; index < route.length; index += 1) {\n\t\tif (obstacles.some((obstacle) => segmentIntersectsRect(route[index - 1], route[index], obstacle))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction segmentIntersectsRect(a: [number, number], b: [number, number], rect: ObstacleRect): boolean {\n\tif (\n\t\t(a[0] < rect.minX && b[0] < rect.minX) ||\n\t\t(a[0] > rect.maxX && b[0] > rect.maxX) ||\n\t\t(a[1] < rect.minY && b[1] < rect.minY) ||\n\t\t(a[1] > rect.maxY && b[1] > rect.maxY)\n\t) {\n\t\treturn false;\n\t}\n\tif (pointInsideRect(a, rect) || pointInsideRect(b, rect)) return true;\n\tconst corners: [number, number][] = [\n\t\t[rect.minX, rect.minY],\n\t\t[rect.maxX, rect.minY],\n\t\t[rect.maxX, rect.maxY],\n\t\t[rect.minX, rect.maxY],\n\t];\n\treturn [\n\t\t[corners[0], corners[1]],\n\t\t[corners[1], corners[2]],\n\t\t[corners[2], corners[3]],\n\t\t[corners[3], corners[0]],\n\t].some(([c, d]) => segmentsIntersect(a, b, c, d));\n}\n\nfunction pointInsideRect(point: [number, number], rect: ObstacleRect): boolean {\n\treturn point[0] > rect.minX && point[0] < rect.maxX && point[1] > rect.minY && point[1] < rect.maxY;\n}\n\nfunction segmentsIntersect(\n\ta: [number, number],\n\tb: [number, number],\n\tc: [number, number],\n\td: [number, number],\n): boolean {\n\tconst ccw = (p1: [number, number], p2: [number, number], p3: [number, number]) =>\n\t\t(p3[1] - p1[1]) * (p2[0] - p1[0]) > (p2[1] - p1[1]) * (p3[0] - p1[0]);\n\treturn ccw(a, c, d) !== ccw(b, c, d) && ccw(a, b, c) !== ccw(a, b, d);\n}\n\nfunction simplifyRoute(route: [number, number][]): [number, number][] {\n\tconst simplified: [number, number][] = [];\n\tfor (const point of route) {\n\t\tconst previous = simplified[simplified.length - 1];\n\t\tif (previous && previous[0] === point[0] && previous[1] === point[1]) {\n\t\t\tcontinue;\n\t\t}\n\t\tsimplified.push(point);\n\t\twhile (simplified.length >= 3) {\n\t\t\tconst a = simplified[simplified.length - 3];\n\t\t\tconst b = simplified[simplified.length - 2];\n\t\t\tconst c = simplified[simplified.length - 1];\n\t\t\tif ((b[0] - a[0]) * (c[1] - b[1]) === (b[1] - a[1]) * (c[0] - b[0])) {\n\t\t\t\tsimplified.splice(simplified.length - 2, 1);\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn simplified;\n}\n\nfunction isGridAxisRoute(route: [number, number][]): boolean {\n\tfor (let index = 1; index < route.length; index += 1) {\n\t\tconst previous = route[index - 1];\n\t\tconst current = route[index];\n\t\tif (previous[0] !== current[0] && previous[1] !== current[1]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n","import { createHash } from \"node:crypto\";\nimport type {\n\tCompiledAsset,\n\tCompiledFloor,\n\tCompiledLayer,\n\tLayerDefinition,\n\tResolvedLayoutConfig,\n\tRuntimeBundle,\n\tRuntimeSceneStop,\n\tSceneDocument,\n} from \"../types/index.ts\";\nimport { ValidationErrorClass } from \"../types/index.ts\";\nimport { resolveSceneSnapshots } from \"./scene-validator.ts\";\n\nexport interface CompileOptions {\n\tminify?: boolean;\n\tversion?: string;\n}\n\nconst DEFAULT_VERSION = \"0.1.2\";\nconst RUNTIME_BUNDLE_FORMAT = \"isostate-runtime-bundle\";\nconst BUILT_IN_TEXT_ASSET_ID = \"text\";\nconst BUILT_IN_PRIMITIVE_ASSET_IDS = new Set([\"rectangle\", \"circle\", \"polygon\", \"line\"]);\n\nexport function compileScene(document: SceneDocument, options: CompileOptions = {}): RuntimeBundle {\n\tconst { version = DEFAULT_VERSION } = options;\n\tconst scenes = resolveSceneSnapshots(document).map((scene) => normalizeValue(scene)) as RuntimeSceneStop[];\n\n\tconst bundleWithoutDigest: Omit<RuntimeBundle, \"_digest\"> = {\n\t\t_format: RUNTIME_BUNDLE_FORMAT,\n\t\t_version: version,\n\t\tgrid: { cellSize: document.header.grid?.cellSize ?? 64 },\n\t\tfloor: compileFloor(document, scenes),\n\t\tlayout: compileLayout(),\n\t\ttheme: document.header.theme ?? \"light\",\n\t\tlayers: compileLayers(document.header.layers),\n\t\tscenes,\n\t};\n\n\tif (document.header.className) {\n\t\tbundleWithoutDigest.className = document.header.className;\n\t}\n\n\tconst assets = compileUrlAssets(document, scenes);\n\tif (Object.keys(assets).length > 0) {\n\t\tbundleWithoutDigest.assets = assets;\n\t}\n\n\treturn {\n\t\t...bundleWithoutDigest,\n\t\t_digest: digestBundle(bundleWithoutDigest),\n\t};\n}\n\nfunction compileUrlAssets(document: SceneDocument, scenes: RuntimeSceneStop[]): Record<string, CompiledAsset> {\n\tconst assets: Record<string, CompiledAsset> = {};\n\tfor (const name of uniqueReferencedAssetNames(document, scenes)) {\n\t\tconst url = resolveAssetUrl(document, name);\n\t\tif (!url) {\n\t\t\tthrow new ValidationErrorClass(\"ASSET_URL_REQUIRED\", `Asset \"${name}\" must resolve through header.assetBaseUrl`, {\n\t\t\t\tasset: name,\n\t\t\t});\n\t\t}\n\t\tconst entry = document.header.assets.find((asset) => asset.id === name);\n\t\tassets[name] = normalizeValue({\n\t\t\turl,\n\t\t\t...(entry?.anchor ? { anchor: entry.anchor } : {}),\n\t\t});\n\t}\n\treturn assets;\n}\n\nexport function toJs(bundle: RuntimeBundle, options: { minify?: boolean } = {}): string {\n\tconst { minify = true } = options;\n\tconst json = canonicalStringify(bundle, minify ? undefined : 2);\n\treturn `export default ${json};`;\n}\n\nexport function toJson(bundle: RuntimeBundle): string {\n\treturn canonicalStringify(bundle, 2);\n}\n\nexport function fromJs(moduleString: string): RuntimeBundle {\n\tif (!moduleString.startsWith(\"export default \") || !moduleString.endsWith(\";\")) {\n\t\tthrow new ValidationErrorClass(\"INVALID_RUNTIME_BUNDLE_MODULE\", \"Invalid JS module: expected exact default export\");\n\t}\n\n\tconst jsonString = moduleString.slice(\"export default \".length, -1);\n\tconst bundle = parseRuntimeBundleJson(jsonString, \"INVALID_RUNTIME_BUNDLE_MODULE\");\n\tconst minify = !jsonString.includes(\"\\n\");\n\tif (moduleString !== toJs(bundle, { minify })) {\n\t\tthrow new ValidationErrorClass(\"INVALID_RUNTIME_BUNDLE_MODULE\", \"Invalid JS module: non-canonical bundle export\");\n\t}\n\n\treturn bundle;\n}\n\nexport function fromJson(jsonString: string): RuntimeBundle {\n\tconst bundle = parseRuntimeBundleJson(jsonString, \"INVALID_RUNTIME_BUNDLE_JSON\");\n\tif (jsonString !== toJson(bundle)) {\n\t\tthrow new ValidationErrorClass(\"INVALID_RUNTIME_BUNDLE_JSON\", \"Invalid JSON bundle: non-canonical serialization\");\n\t}\n\n\treturn bundle;\n}\n\nfunction parseRuntimeBundleJson(\n\tjsonString: string,\n\tcode: \"INVALID_RUNTIME_BUNDLE_MODULE\" | \"INVALID_RUNTIME_BUNDLE_JSON\",\n): RuntimeBundle {\n\ttry {\n\t\treturn JSON.parse(jsonString) as RuntimeBundle;\n\t} catch {\n\t\tthrow new ValidationErrorClass(code, \"Invalid runtime bundle: expected valid JSON\");\n\t}\n}\n\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };\n\nfunction compileFloor(document: SceneDocument, scenes: RuntimeSceneStop[]): CompiledFloor {\n\tconst floor = document.header.floor ?? {};\n\tconst origin = floor.origin ?? [0, 0];\n\tconst compiled: CompiledFloor = {\n\t\tsize: floor.size ?? deriveFloorSize(scenes, origin),\n\t\torigin,\n\t\tvisible: floor.visible ?? true,\n\t\tlayer: floor.layer ?? defaultFloorLayer(document),\n\t};\n\tif (floor.asset !== undefined) {\n\t\tcompiled.asset = floor.asset;\n\t}\n\treturn normalizeValue(compiled);\n}\n\nfunction deriveFloorSize(scenes: RuntimeSceneStop[], origin: [number, number]): [number, number] {\n\tlet maxX = origin[0] + 1;\n\tlet maxY = origin[1] + 1;\n\tfor (const scene of scenes) {\n\t\tfor (const element of scene.elements) {\n\t\t\tif (element.presence === \"removed\") continue;\n\t\t\tmaxX = Math.max(maxX, element.pos[0] + element.size);\n\t\t\tmaxY = Math.max(maxY, element.pos[1] + element.size);\n\t\t}\n\t\tfor (const connector of scene.connectors) {\n\t\t\tif (connector.presence === \"removed\") continue;\n\t\t\tfor (const point of connector.route) {\n\t\t\t\tmaxX = Math.max(maxX, point[0]);\n\t\t\t\tmaxY = Math.max(maxY, point[1]);\n\t\t\t}\n\t\t}\n\t}\n\treturn [Math.max(1, Math.ceil(maxX - origin[0])), Math.max(1, Math.ceil(maxY - origin[1]))];\n}\n\nfunction compileLayout(): ResolvedLayoutConfig {\n\treturn normalizeValue({\n\t\tfit: \"contain\",\n\t\talign: [0.5, 0.5],\n\t\tpadding: { x: 64, y: 64 },\n\t\tbounds: \"union\",\n\t});\n}\n\nfunction compileLayers(layers: LayerDefinition[]): CompiledLayer[] {\n\treturn layers\n\t\t.map((layer, index) => ({\n\t\t\tname: layer.name,\n\t\t\torder: layer.order ?? index,\n\t\t}))\n\t\t.sort((a, b) => a.order - b.order || a.name.localeCompare(b.name));\n}\n\nfunction resolveAssetUrl(document: SceneDocument, assetId: string): string | undefined {\n\tconst base = document.header.assetBaseUrl;\n\tconst entry = document.header.assets.find((asset) => asset.id === assetId);\n\tif (!base || !entry) return undefined;\n\n\tconst path = entry.path ?? entry.id;\n\tconst file = path.endsWith(\".svg\") ? path : `${path}.svg`;\n\treturn `${base.replace(/\\/+$/, \"\")}/${file.replace(/^\\/+/, \"\")}`;\n}\n\nfunction uniqueReferencedAssetNames(document: SceneDocument, scenes: RuntimeSceneStop[]): string[] {\n\tconst names = new Set<string>();\n\tif (document.header.floor?.asset && document.header.floor.visible !== false) {\n\t\tnames.add(document.header.floor.asset);\n\t}\n\tfor (const scene of scenes) {\n\t\tfor (const element of scene.elements) {\n\t\t\tif (!isBuiltInGeneratedAsset(element.asset)) {\n\t\t\t\tnames.add(element.asset);\n\t\t\t}\n\t\t}\n\t}\n\treturn Array.from(names).sort();\n}\n\nfunction isBuiltInGeneratedAsset(assetId: string): boolean {\n\treturn assetId === BUILT_IN_TEXT_ASSET_ID || BUILT_IN_PRIMITIVE_ASSET_IDS.has(assetId);\n}\n\nfunction defaultFloorLayer(document: SceneDocument): string {\n\tconst ground = document.header.layers.find((layer) => layer.name === \"ground\");\n\treturn ground?.name ?? document.header.layers[0]?.name ?? \"\";\n}\n\nfunction digestBundle(bundle: Omit<RuntimeBundle, \"_digest\">): string {\n\treturn createHash(\"sha256\").update(canonicalStringify(bundle)).digest(\"hex\");\n}\n\nfunction canonicalStringify(value: unknown, space?: number): string {\n\tconst normalized = normalizeValue(value);\n\treturn JSON.stringify(normalized, null, space);\n}\n\nfunction normalizeValue<T>(value: T): T {\n\tif (Array.isArray(value)) {\n\t\treturn value.map((item) => (item === undefined ? null : normalizeValue(item))) as T;\n\t}\n\n\tif (!isPlainObject(value)) return value;\n\n\tconst normalized: Record<string, JsonValue> = {};\n\tfor (const key of Object.keys(value).sort()) {\n\t\tconst child = (value as Record<string, unknown>)[key];\n\t\tif (child !== undefined) {\n\t\t\tnormalized[key] = normalizeValue(child) as JsonValue;\n\t\t}\n\t}\n\n\treturn normalized as T;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { parse as parseYaml } from \"yaml\";\nimport { ParseError } from \"../types/errors.ts\";\nimport type {\n\tAmbientAnimation,\n\tAssetCatalogEntry,\n\tConnectionPatch,\n\tConnectionPlacement,\n\tConnectionRemoval,\n\tConnectorEndpointRef,\n\tConnectorRouting,\n\tConnectorStyle,\n\tElementPatch,\n\tElementPlacement,\n\tElementRemoval,\n\tFloorConfig,\n\tGridConfig,\n\tLayerDefinition,\n\tLinePrimitive,\n\tPrimitiveContent,\n\tSceneDocument,\n\tSceneHeader,\n\tSceneStep,\n\tTextContent,\n} from \"../types/index.ts\";\n\nconst IDENTIFIER_PATTERN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst ASSET_PATH_PATTERN = /^[a-z0-9][a-z0-9-]*(?:\\/[a-z0-9][a-z0-9-]*)*(?:\\.svg)?$/;\n\nfunction fail(code: string, message: string): never {\n\tthrow new ParseError(code, message, { line: 0, column: 0 });\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction assertKnownFields(obj: Record<string, unknown>, allowed: ReadonlySet<string>, context: string): void {\n\tfor (const field of Object.keys(obj)) {\n\t\tif (!allowed.has(field)) {\n\t\t\tfail(\"UNKNOWN_FIELD\", `Unknown field \"${field}\" in ${context}`);\n\t\t}\n\t}\n}\n\nfunction requireObject(value: unknown, context: string): Record<string, unknown> {\n\tif (!isObject(value)) {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a mapping object`);\n\t}\n\treturn value;\n}\n\nfunction requireArray(value: unknown, context: string): unknown[] {\n\tif (!Array.isArray(value)) {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be an array`);\n\t}\n\treturn value;\n}\n\nfunction requireString(value: unknown, context: string): string {\n\tif (typeof value !== \"string\") {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a string`);\n\t}\n\treturn value;\n}\n\nfunction requireNumber(value: unknown, context: string): number {\n\tif (typeof value !== \"number\" || Number.isNaN(value)) {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a number`);\n\t}\n\treturn value;\n}\n\nfunction requireBoolean(value: unknown, context: string): boolean {\n\tif (typeof value !== \"boolean\") {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a boolean`);\n\t}\n\treturn value;\n}\n\nfunction requireIdentifier(value: unknown, context: string): string {\n\tconst identifier = requireString(value, context);\n\tif (!IDENTIFIER_PATTERN.test(identifier)) {\n\t\tfail(\"INVALID_IDENTIFIER\", `${context} must be kebab-case`);\n\t}\n\treturn identifier;\n}\n\nfunction parseTuple2(value: unknown, context: string): [number, number] {\n\tif (!Array.isArray(value) || value.length !== 2) {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a two-number tuple`);\n\t}\n\treturn [requireNumber(value[0], `${context}[0]`), requireNumber(value[1], `${context}[1]`)];\n}\n\nfunction parseAssets(raw: unknown): AssetCatalogEntry[] {\n\treturn requireArray(raw, \"header.assets\").map((item, index) => {\n\t\tconst asset = requireObject(item, `header.assets[${index}]`);\n\t\tassertKnownFields(asset, new Set([\"id\", \"path\", \"anchor\"]), `header.assets[${index}]`);\n\t\tconst parsed: AssetCatalogEntry = {\n\t\t\tid: requireIdentifier(asset.id, `header.assets[${index}].id`),\n\t\t};\n\t\tif (asset.path !== undefined) {\n\t\t\tconst path = requireString(asset.path, `header.assets[${index}].path`);\n\t\t\tif (!ASSET_PATH_PATTERN.test(path)) {\n\t\t\t\tfail(\"INVALID_ASSET_PATH\", `header.assets[${index}].path must be a relative SVG asset path`);\n\t\t\t}\n\t\t\tparsed.path = path;\n\t\t}\n\t\tif (asset.anchor !== undefined) {\n\t\t\tparsed.anchor = parseTuple2(asset.anchor, `header.assets[${index}].anchor`);\n\t\t}\n\t\treturn parsed;\n\t});\n}\n\nfunction parseGrid(raw: unknown): GridConfig | undefined {\n\tif (raw === undefined) return undefined;\n\tconst grid = requireObject(raw, \"header.grid\");\n\tassertKnownFields(grid, new Set([\"cellSize\"]), \"header.grid\");\n\treturn {\n\t\tcellSize: grid.cellSize === undefined ? undefined : requireNumber(grid.cellSize, \"header.grid.cellSize\"),\n\t};\n}\n\nfunction parseFloor(raw: unknown): FloorConfig | undefined {\n\tif (raw === undefined) return undefined;\n\tconst floor = requireObject(raw, \"header.floor\");\n\tassertKnownFields(floor, new Set([\"size\", \"origin\", \"layer\", \"visible\", \"asset\"]), \"header.floor\");\n\tconst parsed: FloorConfig = {};\n\tif (floor.size !== undefined) {\n\t\tparsed.size = parseTuple2(floor.size, \"header.floor.size\");\n\t}\n\tif (floor.origin !== undefined) {\n\t\tparsed.origin = parseTuple2(floor.origin, \"header.floor.origin\");\n\t}\n\tif (floor.layer !== undefined) {\n\t\tparsed.layer = requireIdentifier(floor.layer, \"header.floor.layer\");\n\t}\n\tif (floor.visible !== undefined) {\n\t\tparsed.visible = requireBoolean(floor.visible, \"header.floor.visible\");\n\t}\n\tif (floor.asset !== undefined) {\n\t\tparsed.asset = requireIdentifier(floor.asset, \"header.floor.asset\");\n\t}\n\treturn parsed;\n}\n\nfunction parseLayers(raw: unknown): LayerDefinition[] {\n\treturn requireArray(raw, \"header.layers\").map((item, index) => {\n\t\tconst layer = requireObject(item, `header.layers[${index}]`);\n\t\tassertKnownFields(layer, new Set([\"name\", \"order\"]), `header.layers[${index}]`);\n\t\tconst parsed: LayerDefinition = {\n\t\t\tname: requireIdentifier(layer.name, `header.layers[${index}].name`),\n\t\t};\n\t\tif (layer.order !== undefined) {\n\t\t\tparsed.order = requireNumber(layer.order, `header.layers[${index}].order`);\n\t\t}\n\t\treturn parsed;\n\t});\n}\n\nfunction parseHeader(raw: unknown): SceneHeader {\n\tconst header = requireObject(raw, \"header\");\n\tassertKnownFields(\n\t\theader,\n\t\tnew Set([\"version\", \"name\", \"className\", \"assetBaseUrl\", \"assets\", \"grid\", \"floor\", \"theme\", \"layers\"]),\n\t\t\"header\",\n\t);\n\n\tconst parsed: SceneHeader = {\n\t\tassets: parseAssets(header.assets),\n\t\tlayers: parseLayers(header.layers),\n\t};\n\tconst floor = parseFloor(header.floor);\n\tif (floor !== undefined) {\n\t\tparsed.floor = floor;\n\t}\n\tif (header.version !== undefined) {\n\t\tparsed.version = requireString(header.version, \"header.version\");\n\t}\n\tif (header.name !== undefined) {\n\t\tparsed.name = requireString(header.name, \"header.name\");\n\t}\n\tif (header.className !== undefined) {\n\t\tparsed.className = requireString(header.className, \"header.className\");\n\t}\n\tif (header.assetBaseUrl !== undefined) {\n\t\tparsed.assetBaseUrl = requireString(header.assetBaseUrl, \"header.assetBaseUrl\");\n\t}\n\tif (header.grid !== undefined) {\n\t\tparsed.grid = parseGrid(header.grid);\n\t}\n\tif (header.theme !== undefined) {\n\t\tparsed.theme = requireString(header.theme, \"header.theme\");\n\t}\n\treturn parsed;\n}\n\nfunction parseAmbient(raw: unknown, context: string): AmbientAnimation[] {\n\treturn requireArray(raw, context).map((item, index) => {\n\t\tconst ambient = requireObject(item, `${context}[${index}]`);\n\t\tassertKnownFields(ambient, new Set([\"name\", \"infinite\", \"iterations\"]), `${context}[${index}]`);\n\t\tconst parsed: AmbientAnimation = {\n\t\t\tname: requireIdentifier(ambient.name, `${context}[${index}].name`),\n\t\t};\n\t\tif (ambient.infinite !== undefined) {\n\t\t\tparsed.infinite = requireBoolean(ambient.infinite, `${context}[${index}].infinite`);\n\t\t}\n\t\tif (ambient.iterations !== undefined) {\n\t\t\tparsed.iterations = requireNumber(ambient.iterations, `${context}[${index}].iterations`);\n\t\t}\n\t\treturn parsed;\n\t});\n}\n\nfunction parsePointArray(raw: unknown, context: string): [number, number][] {\n\treturn requireArray(raw, context).map((point, index) => parseTuple2(point, `${context}[${index}]`));\n}\n\nfunction parseTextContent(raw: unknown, context: string): TextContent {\n\tconst text = requireObject(raw, context);\n\tassertKnownFields(text, new Set([\"value\", \"align\", \"fontSize\", \"fontWeight\", \"lineHeight\", \"fill\"]), context);\n\tconst parsed: TextContent = {\n\t\tvalue: requireString(text.value, `${context}.value`),\n\t};\n\tif (text.align !== undefined) {\n\t\tparsed.align = requireString(text.align, `${context}.align`) as never;\n\t}\n\tif (text.fontSize !== undefined) {\n\t\tparsed.fontSize = requireNumber(text.fontSize, `${context}.fontSize`);\n\t}\n\tif (text.fontWeight !== undefined) {\n\t\tif (typeof text.fontWeight === \"number\") {\n\t\t\tparsed.fontWeight = requireNumber(text.fontWeight, `${context}.fontWeight`);\n\t\t} else {\n\t\t\tparsed.fontWeight = requireString(text.fontWeight, `${context}.fontWeight`) as never;\n\t\t}\n\t}\n\tif (text.lineHeight !== undefined) {\n\t\tparsed.lineHeight = requireNumber(text.lineHeight, `${context}.lineHeight`);\n\t}\n\tif (text.fill !== undefined) {\n\t\tparsed.fill = requireString(text.fill, `${context}.fill`);\n\t}\n\treturn parsed;\n}\n\nfunction parsePrimitiveStyle(\n\traw: Record<string, unknown>,\n\tcontext: string,\n\tallowed: string[],\n): Record<string, unknown> {\n\tassertKnownFields(raw, new Set(allowed), context);\n\tconst parsed: Record<string, unknown> = {};\n\tif (raw.fill !== undefined) parsed.fill = requireString(raw.fill, `${context}.fill`);\n\tif (raw.stroke !== undefined) parsed.stroke = requireString(raw.stroke, `${context}.stroke`);\n\tif (raw.strokeWidth !== undefined) {\n\t\tparsed.strokeWidth = requireNumber(raw.strokeWidth, `${context}.strokeWidth`);\n\t}\n\tif (raw.opacity !== undefined) {\n\t\tparsed.opacity = requireNumber(raw.opacity, `${context}.opacity`);\n\t}\n\tif (raw.dash !== undefined) parsed.dash = parseTuple2(raw.dash, `${context}.dash`);\n\treturn parsed;\n}\n\nfunction parsePrimitiveContent(raw: unknown, context: string): PrimitiveContent {\n\tconst primitive = requireObject(raw, context);\n\tassertKnownFields(primitive, new Set([\"rectangle\", \"circle\", \"polygon\", \"line\"]), context);\n\tconst parsed: PrimitiveContent = {};\n\tif (primitive.rectangle !== undefined) {\n\t\tconst rectangle = requireObject(primitive.rectangle, `${context}.rectangle`);\n\t\tparsed.rectangle = parsePrimitiveStyle(rectangle, `${context}.rectangle`, [\n\t\t\t\"fill\",\n\t\t\t\"stroke\",\n\t\t\t\"strokeWidth\",\n\t\t\t\"opacity\",\n\t\t\t\"dash\",\n\t\t\t\"rx\",\n\t\t]);\n\t\tif (rectangle.rx !== undefined) {\n\t\t\tparsed.rectangle.rx = requireNumber(rectangle.rx, `${context}.rectangle.rx`);\n\t\t}\n\t}\n\tif (primitive.circle !== undefined) {\n\t\tparsed.circle = parsePrimitiveStyle(requireObject(primitive.circle, `${context}.circle`), `${context}.circle`, [\n\t\t\t\"fill\",\n\t\t\t\"stroke\",\n\t\t\t\"strokeWidth\",\n\t\t\t\"opacity\",\n\t\t\t\"dash\",\n\t\t]);\n\t}\n\tif (primitive.polygon !== undefined) {\n\t\tconst polygon = requireObject(primitive.polygon, `${context}.polygon`);\n\t\tparsed.polygon = {\n\t\t\t...parsePrimitiveStyle(polygon, `${context}.polygon`, [\n\t\t\t\t\"points\",\n\t\t\t\t\"fill\",\n\t\t\t\t\"stroke\",\n\t\t\t\t\"strokeWidth\",\n\t\t\t\t\"opacity\",\n\t\t\t\t\"dash\",\n\t\t\t]),\n\t\t\tpoints: parsePointArray(polygon.points, `${context}.polygon.points`),\n\t\t};\n\t}\n\tif (primitive.line !== undefined) {\n\t\tconst line = requireObject(primitive.line, `${context}.line`);\n\t\tconst parsedLine: LinePrimitive = {\n\t\t\t...parsePrimitiveStyle(line, `${context}.line`, [\n\t\t\t\t\"points\",\n\t\t\t\t\"stroke\",\n\t\t\t\t\"strokeWidth\",\n\t\t\t\t\"opacity\",\n\t\t\t\t\"dash\",\n\t\t\t\t\"lineCap\",\n\t\t\t\t\"lineJoin\",\n\t\t\t]),\n\t\t\tpoints: parsePointArray(line.points, `${context}.line.points`),\n\t\t};\n\t\tif (line.lineCap !== undefined) {\n\t\t\tparsedLine.lineCap = requireString(line.lineCap, `${context}.line.lineCap`) as never;\n\t\t}\n\t\tif (line.lineJoin !== undefined) {\n\t\t\tparsedLine.lineJoin = requireString(line.lineJoin, `${context}.line.lineJoin`) as never;\n\t\t}\n\t\tparsed.line = parsedLine;\n\t}\n\treturn parsed;\n}\n\nfunction parsePlacement(raw: unknown, context: string): ElementPlacement {\n\tconst element = requireObject(raw, context);\n\tassertKnownFields(\n\t\telement,\n\t\tnew Set([\"id\", \"asset\", \"at\", \"size\", \"layer\", \"enter\", \"exit\", \"ambient\", \"text\", \"primitive\"]),\n\t\tcontext,\n\t);\n\tconst parsed: ElementPlacement = {\n\t\tid: requireIdentifier(element.id, `${context}.id`),\n\t\tasset: requireIdentifier(element.asset, `${context}.asset`),\n\t\tat: parseTuple2(element.at, `${context}.at`),\n\t};\n\tif (element.size !== undefined) {\n\t\tparsed.size = requireNumber(element.size, `${context}.size`);\n\t}\n\tif (element.layer !== undefined) {\n\t\tparsed.layer = requireIdentifier(element.layer, `${context}.layer`);\n\t}\n\tif (element.enter !== undefined) {\n\t\tparsed.enter = requireString(element.enter, `${context}.enter`) as never;\n\t}\n\tif (element.exit !== undefined) {\n\t\tparsed.exit = requireString(element.exit, `${context}.exit`) as never;\n\t}\n\tif (element.ambient !== undefined) {\n\t\tparsed.ambient = parseAmbient(element.ambient, `${context}.ambient`);\n\t}\n\tif (element.text !== undefined) {\n\t\tparsed.text = parseTextContent(element.text, `${context}.text`);\n\t}\n\tif (element.primitive !== undefined) {\n\t\tparsed.primitive = parsePrimitiveContent(element.primitive, `${context}.primitive`);\n\t}\n\treturn parsed;\n}\n\nfunction parsePatch(raw: unknown, context: string): ElementPatch {\n\tconst patch = requireObject(raw, context);\n\tassertKnownFields(\n\t\tpatch,\n\t\tnew Set([\"id\", \"at\", \"size\", \"layer\", \"enter\", \"exit\", \"ambient\", \"text\", \"primitive\"]),\n\t\tcontext,\n\t);\n\tconst parsed: ElementPatch = {\n\t\tid: requireIdentifier(patch.id, `${context}.id`),\n\t};\n\tif (patch.at !== undefined) {\n\t\tparsed.at = parseTuple2(patch.at, `${context}.at`);\n\t}\n\tif (patch.size !== undefined) {\n\t\tparsed.size = requireNumber(patch.size, `${context}.size`);\n\t}\n\tif (patch.layer !== undefined) {\n\t\tparsed.layer = requireIdentifier(patch.layer, `${context}.layer`);\n\t}\n\tif (patch.enter !== undefined) {\n\t\tparsed.enter = requireString(patch.enter, `${context}.enter`) as never;\n\t}\n\tif (patch.exit !== undefined) {\n\t\tparsed.exit = requireString(patch.exit, `${context}.exit`) as never;\n\t}\n\tif (patch.ambient !== undefined) {\n\t\tparsed.ambient = parseAmbient(patch.ambient, `${context}.ambient`);\n\t}\n\tif (patch.text !== undefined) {\n\t\tparsed.text = parseTextContent(patch.text, `${context}.text`);\n\t}\n\tif (patch.primitive !== undefined) {\n\t\tparsed.primitive = parsePrimitiveContent(patch.primitive, `${context}.primitive`);\n\t}\n\treturn parsed;\n}\n\nfunction parseRemoval(raw: unknown, context: string): ElementRemoval {\n\tconst removal = requireObject(raw, context);\n\tassertKnownFields(removal, new Set([\"id\", \"exit\"]), context);\n\tconst parsed: ElementRemoval = {\n\t\tid: requireIdentifier(removal.id, `${context}.id`),\n\t};\n\tif (removal.exit !== undefined) {\n\t\tparsed.exit = requireString(removal.exit, `${context}.exit`) as never;\n\t}\n\treturn parsed;\n}\n\nfunction parseRoute(raw: unknown, context: string): [number, number][] {\n\treturn requireArray(raw, context).map((point, index) => parseTuple2(point, `${context}[${index}]`));\n}\n\nfunction parseEndpointRef(raw: unknown, context: string): ConnectorEndpointRef {\n\tconst endpoint = requireObject(raw, context);\n\tassertKnownFields(endpoint, new Set([\"element\", \"at\", \"side\", \"offset\"]), context);\n\tconst parsed: ConnectorEndpointRef = {};\n\tif (endpoint.element !== undefined) {\n\t\tparsed.element = requireIdentifier(endpoint.element, `${context}.element`);\n\t}\n\tif (endpoint.at !== undefined) {\n\t\tparsed.at = parseTuple2(endpoint.at, `${context}.at`);\n\t}\n\tif (endpoint.side !== undefined) {\n\t\tparsed.side = requireString(endpoint.side, `${context}.side`) as never;\n\t}\n\tif (endpoint.offset !== undefined) {\n\t\tparsed.offset = requireNumber(endpoint.offset, `${context}.offset`);\n\t}\n\treturn parsed;\n}\n\nfunction parseRouting(raw: unknown, context: string): ConnectorRouting {\n\tconst routing = requireObject(raw, context);\n\tassertKnownFields(routing, new Set([\"mode\", \"avoid\", \"clearance\", \"gridStep\", \"maxBends\", \"prefer\"]), context);\n\tconst parsed: ConnectorRouting = {};\n\tif (routing.mode !== undefined) {\n\t\tparsed.mode = requireString(routing.mode, `${context}.mode`) as never;\n\t}\n\tif (routing.avoid !== undefined) {\n\t\tif (Array.isArray(routing.avoid)) {\n\t\t\tparsed.avoid = requireArray(routing.avoid, `${context}.avoid`).map((item, index) =>\n\t\t\t\trequireIdentifier(item, `${context}.avoid[${index}]`),\n\t\t\t);\n\t\t} else {\n\t\t\tparsed.avoid = requireString(routing.avoid, `${context}.avoid`) as never;\n\t\t}\n\t}\n\tif (routing.clearance !== undefined) {\n\t\tparsed.clearance = requireNumber(routing.clearance, `${context}.clearance`);\n\t}\n\tif (routing.gridStep !== undefined) {\n\t\tparsed.gridStep = requireNumber(routing.gridStep, `${context}.gridStep`);\n\t}\n\tif (routing.maxBends !== undefined) {\n\t\tparsed.maxBends = requireNumber(routing.maxBends, `${context}.maxBends`);\n\t}\n\tif (routing.prefer !== undefined) {\n\t\tparsed.prefer = requireString(routing.prefer, `${context}.prefer`) as never;\n\t}\n\treturn parsed;\n}\n\nfunction parseConnectorStyle(raw: unknown, context: string): ConnectorStyle {\n\tconst style = requireObject(raw, context);\n\tassertKnownFields(\n\t\tstyle,\n\t\tnew Set([\"variant\", \"pattern\", \"stroke\", \"strokeWidth\", \"opacity\", \"dash\", \"outline\", \"outlineWidth\", \"lane\"]),\n\t\tcontext,\n\t);\n\tconst parsed: ConnectorStyle = {};\n\tif (style.variant !== undefined) {\n\t\tparsed.variant = requireString(style.variant, `${context}.variant`) as never;\n\t}\n\tif (style.pattern !== undefined) {\n\t\tparsed.pattern = requireString(style.pattern, `${context}.pattern`) as never;\n\t}\n\tif (style.stroke !== undefined) {\n\t\tparsed.stroke = requireString(style.stroke, `${context}.stroke`);\n\t}\n\tif (style.strokeWidth !== undefined) {\n\t\tparsed.strokeWidth = requireNumber(style.strokeWidth, `${context}.strokeWidth`);\n\t}\n\tif (style.opacity !== undefined) {\n\t\tparsed.opacity = requireNumber(style.opacity, `${context}.opacity`);\n\t}\n\tif (style.dash !== undefined) {\n\t\tparsed.dash = parseTuple2(style.dash, `${context}.dash`);\n\t}\n\tif (style.outline !== undefined) {\n\t\tparsed.outline = requireString(style.outline, `${context}.outline`);\n\t}\n\tif (style.outlineWidth !== undefined) {\n\t\tparsed.outlineWidth = requireNumber(style.outlineWidth, `${context}.outlineWidth`);\n\t}\n\tif (style.lane !== undefined) {\n\t\tparsed.lane = requireString(style.lane, `${context}.lane`) as never;\n\t}\n\treturn parsed;\n}\n\nfunction parseConnectionCommon(raw: unknown, context: string): ConnectionPlacement | ConnectionPatch {\n\tconst connection = requireObject(raw, context);\n\tassertKnownFields(\n\t\tconnection,\n\t\tnew Set([\n\t\t\t\"id\",\n\t\t\t\"route\",\n\t\t\t\"from\",\n\t\t\t\"to\",\n\t\t\t\"routing\",\n\t\t\t\"layer\",\n\t\t\t\"style\",\n\t\t\t\"start\",\n\t\t\t\"end\",\n\t\t\t\"direction\",\n\t\t\t\"enter\",\n\t\t\t\"exit\",\n\t\t\t\"ambient\",\n\t\t]),\n\t\tcontext,\n\t);\n\tconst parsed: ConnectionPlacement | ConnectionPatch = {\n\t\tid: requireIdentifier(connection.id, `${context}.id`),\n\t};\n\tif (connection.route !== undefined) {\n\t\tparsed.route = parseRoute(connection.route, `${context}.route`);\n\t}\n\tif (connection.from !== undefined) {\n\t\tparsed.from = parseEndpointRef(connection.from, `${context}.from`);\n\t}\n\tif (connection.to !== undefined) {\n\t\tparsed.to = parseEndpointRef(connection.to, `${context}.to`);\n\t}\n\tif (connection.routing !== undefined) {\n\t\tparsed.routing = parseRouting(connection.routing, `${context}.routing`);\n\t}\n\tif (connection.layer !== undefined) {\n\t\tparsed.layer = requireIdentifier(connection.layer, `${context}.layer`);\n\t}\n\tif (connection.style !== undefined) {\n\t\tparsed.style = parseConnectorStyle(connection.style, `${context}.style`);\n\t}\n\tif (connection.start !== undefined) {\n\t\tparsed.start = requireString(connection.start, `${context}.start`) as never;\n\t}\n\tif (connection.end !== undefined) {\n\t\tparsed.end = requireString(connection.end, `${context}.end`) as never;\n\t}\n\tif (connection.direction !== undefined) {\n\t\tparsed.direction = requireString(connection.direction, `${context}.direction`) as never;\n\t}\n\tif (connection.enter !== undefined) {\n\t\tparsed.enter = requireString(connection.enter, `${context}.enter`) as never;\n\t}\n\tif (connection.exit !== undefined) {\n\t\tparsed.exit = requireString(connection.exit, `${context}.exit`) as never;\n\t}\n\tif (connection.ambient !== undefined) {\n\t\tparsed.ambient = parseAmbient(connection.ambient, `${context}.ambient`);\n\t}\n\treturn parsed;\n}\n\nfunction parseConnectionPlacement(raw: unknown, context: string): ConnectionPlacement {\n\treturn parseConnectionCommon(raw, context) as ConnectionPlacement;\n}\n\nfunction parseConnectionPatch(raw: unknown, context: string): ConnectionPatch {\n\treturn parseConnectionCommon(raw, context) as ConnectionPatch;\n}\n\nfunction parseConnectionRemoval(raw: unknown, context: string): ConnectionRemoval {\n\tconst removal = requireObject(raw, context);\n\tassertKnownFields(removal, new Set([\"id\", \"exit\"]), context);\n\tconst parsed: ConnectionRemoval = {\n\t\tid: requireIdentifier(removal.id, `${context}.id`),\n\t};\n\tif (removal.exit !== undefined) {\n\t\tparsed.exit = requireString(removal.exit, `${context}.exit`) as never;\n\t}\n\treturn parsed;\n}\n\nfunction parseScenes(raw: unknown): SceneStep[] {\n\treturn requireArray(raw, \"scenes\").map((item, index) => {\n\t\tconst scene = requireObject(item, `scenes[${index}]`);\n\t\tassertKnownFields(scene, new Set([\"id\", \"elements\", \"connections\", \"add\", \"update\", \"remove\"]), `scenes[${index}]`);\n\t\tconst parsed: SceneStep = {\n\t\t\tid: requireIdentifier(scene.id, `scenes[${index}].id`),\n\t\t};\n\t\tif (scene.elements !== undefined) {\n\t\t\tparsed.elements = requireArray(scene.elements, `scenes[${index}].elements`).map((element, elementIndex) =>\n\t\t\t\tparsePlacement(element, `scenes[${index}].elements[${elementIndex}]`),\n\t\t\t);\n\t\t}\n\t\tif (scene.connections !== undefined) {\n\t\t\tparsed.connections = requireArray(scene.connections, `scenes[${index}].connections`).map(\n\t\t\t\t(connection, connectionIndex) =>\n\t\t\t\t\tparseConnectionPlacement(connection, `scenes[${index}].connections[${connectionIndex}]`),\n\t\t\t);\n\t\t}\n\t\tif (scene.add !== undefined) {\n\t\t\tconst add = requireObject(scene.add, `scenes[${index}].add`);\n\t\t\tassertKnownFields(add, new Set([\"elements\", \"connections\"]), `scenes[${index}].add`);\n\t\t\tparsed.add = {};\n\t\t\tif (add.elements !== undefined) {\n\t\t\t\tparsed.add.elements = requireArray(add.elements, `scenes[${index}].add.elements`).map((element, elementIndex) =>\n\t\t\t\t\tparsePlacement(element, `scenes[${index}].add.elements[${elementIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (add.connections !== undefined) {\n\t\t\t\tparsed.add.connections = requireArray(add.connections, `scenes[${index}].add.connections`).map(\n\t\t\t\t\t(connection, connectionIndex) =>\n\t\t\t\t\t\tparseConnectionPlacement(connection, `scenes[${index}].add.connections[${connectionIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (scene.update !== undefined) {\n\t\t\tconst update = requireObject(scene.update, `scenes[${index}].update`);\n\t\t\tassertKnownFields(update, new Set([\"elements\", \"connections\"]), `scenes[${index}].update`);\n\t\t\tparsed.update = {};\n\t\t\tif (update.elements !== undefined) {\n\t\t\t\tparsed.update.elements = requireArray(update.elements, `scenes[${index}].update.elements`).map(\n\t\t\t\t\t(patch, patchIndex) => parsePatch(patch, `scenes[${index}].update.elements[${patchIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (update.connections !== undefined) {\n\t\t\t\tparsed.update.connections = requireArray(update.connections, `scenes[${index}].update.connections`).map(\n\t\t\t\t\t(patch, patchIndex) => parseConnectionPatch(patch, `scenes[${index}].update.connections[${patchIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (scene.remove !== undefined) {\n\t\t\tconst remove = requireObject(scene.remove, `scenes[${index}].remove`);\n\t\t\tassertKnownFields(remove, new Set([\"elements\", \"connections\"]), `scenes[${index}].remove`);\n\t\t\tparsed.remove = {};\n\t\t\tif (remove.elements !== undefined) {\n\t\t\t\tparsed.remove.elements = requireArray(remove.elements, `scenes[${index}].remove.elements`).map(\n\t\t\t\t\t(removal, removalIndex) => parseRemoval(removal, `scenes[${index}].remove.elements[${removalIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (remove.connections !== undefined) {\n\t\t\t\tparsed.remove.connections = requireArray(remove.connections, `scenes[${index}].remove.connections`).map(\n\t\t\t\t\t(removal, removalIndex) =>\n\t\t\t\t\t\tparseConnectionRemoval(removal, `scenes[${index}].remove.connections[${removalIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn parsed;\n\t});\n}\n\n/**\n * Parse authored YAML into the v1 header + scene-delta document contract.\n */\nexport function parseScene(dsl: string): SceneDocument {\n\tlet raw: unknown;\n\ttry {\n\t\traw = parseYaml(dsl);\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tthrow new ParseError(\"DSL_PARSE_SYNTAX_ERROR\", `YAML syntax error: ${message}`, { line: 0, column: 0 });\n\t}\n\n\tif (!isObject(raw)) {\n\t\tfail(\"DSL_PARSE_SYNTAX_ERROR\", \"DSL must be a YAML mapping at the top level\");\n\t}\n\tassertKnownFields(raw, new Set([\"header\", \"scenes\"]), \"top level\");\n\n\treturn {\n\t\theader: parseHeader(raw.header),\n\t\tscenes: parseScenes(raw.scenes),\n\t};\n}\n"],"names":["BUILT_IN_TEXT_ASSET_ID","BUILT_IN_PRIMITIVE_ASSET_IDS","defaultFloorLayer","parseYaml"],"mappings":"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"}