{"version":3,"file":"index.cjs","names":["DEFAULT_INTERACTION_EVENT_TYPE","escapeHtml","ISLAND_METADATA_ATTRIBUTE","ISLAND_VALUE_METADATA_ATTRIBUTE","CLIENT_ACTIONS_METADATA_ATTRIBUTE","CLIENT_TARGET_METADATA_ATTRIBUTE","CLIENT_STRATEGY_METADATA_ATTRIBUTE","CLIENT_EVENT_METADATA_ATTRIBUTE","COLOCATED_CLIENT_STRATEGIES","collectBindingNames","isESTNode","isComputedProperty","containsJSXNode","isJSXElement","isJSXFragment","DEFAULT_INTERACTION_EVENT_TYPE","ISLAND_METADATA_ATTRIBUTE"],"sources":["../src/transform/ast/implementation.ts","../src/transform/jsx/implementation.ts","../src/transform/navigation/implementation.ts","../src/transform/state/implementation.ts","../src/transform/staticTree/implementation.ts","../src/transform/tree/implementation.ts","../src/transform/mode-csr/implementation.ts","../src/transform/mode-ssr/implementation.ts","../src/transform/runtimeImports/implementation.ts","../src/transform/implementation.ts","../src/ssr/implementation.ts"],"sourcesContent":["/** A generic ESTree node with a `type` discriminant. */\ninterface ESTNode {\n  type: string;\n  [key: string]: unknown;\n}\n\n/** ESTree Literal (string, number, boolean, null). */\ninterface Literal extends ESTNode {\n  type: \"Literal\";\n  value: string | number | boolean | null;\n  raw: string;\n}\n\n/** ESTree Identifier. */\ninterface Identifier extends ESTNode {\n  type: \"Identifier\";\n  name: string;\n}\n\n/** ESTree CallExpression. */\ninterface CallExpression extends ESTNode {\n  type: \"CallExpression\";\n  callee: ESTNode;\n  arguments: ESTNode[];\n  optional: boolean;\n}\n\n/** ESTree MemberExpression. */\ninterface MemberExpression extends ESTNode {\n  type: \"MemberExpression\";\n  object: ESTNode;\n  property: ESTNode;\n  computed: boolean;\n  optional: boolean;\n}\n\n/** ESTree ArrowFunctionExpression. */\ninterface ArrowFunctionExpression extends ESTNode {\n  type: \"ArrowFunctionExpression\";\n  params: ESTNode[];\n  body: ESTNode;\n  expression: boolean;\n}\n\n/** ESTree BlockStatement. */\ninterface BlockStatement extends ESTNode {\n  type: \"BlockStatement\";\n  body: ESTNode[];\n}\n\n/** ESTree VariableDeclarator. */\ninterface VariableDeclarator extends ESTNode {\n  type: \"VariableDeclarator\";\n  id: Identifier;\n  init: ESTNode | null;\n}\n\n/** ESTree VariableDeclaration. */\ninterface VariableDeclaration extends ESTNode {\n  type: \"VariableDeclaration\";\n  kind: \"const\" | \"let\" | \"var\";\n  declarations: VariableDeclarator[];\n}\n\n/** ESTree ReturnStatement. */\ninterface ReturnStatement extends ESTNode {\n  type: \"ReturnStatement\";\n  argument: ESTNode | null;\n}\n\n/** ESTree Program. */\ninterface Program extends ESTNode {\n  type: \"Program\";\n  body: ESTNode[];\n}\n\n/** Build a Literal node. */\nfunction nLit(value: string | number | boolean | null): Literal {\n  if (value === null) return { type: \"Literal\", value: null, raw: \"null\" };\n  if (typeof value === \"string\") {\n    return { type: \"Literal\", value, raw: JSON.stringify(value) };\n  }\n  return { type: \"Literal\", value, raw: String(value) };\n}\n\n/** Build an Identifier node. */\nfunction nId(name: string): Identifier {\n  return { type: \"Identifier\", name };\n}\n\n/** Build a CallExpression node. */\nfunction nCall(callee: ESTNode, args: ESTNode[]): CallExpression {\n  return { type: \"CallExpression\", callee, arguments: args, optional: false };\n}\n\n/** Build an ArrayExpression node. */\nfunction nArr(elements: (ESTNode | null)[]): ESTNode {\n  return { type: \"ArrayExpression\", elements };\n}\n\n/** Build an ObjectExpression node. */\nfunction nObj(properties: ESTNode[]): ESTNode {\n  return { type: \"ObjectExpression\", properties };\n}\n\n/**\n * Build a Property node (ESTree object property).\n * @param key The key node (Identifier or Literal).\n * @param value The value node.\n * @param computed Whether the key is a computed expression.\n */\nfunction nProp(key: ESTNode, value: ESTNode, computed = false): ESTNode {\n  return {\n    type: \"Property\",\n    key,\n    value,\n    kind: \"init\",\n    computed,\n    method: false,\n    shorthand: false,\n  };\n}\n\n/** Build an ArrowFunctionExpression with block body. */\nfunction nArrowBlock(\n  params: ESTNode[],\n  body: BlockStatement,\n): ArrowFunctionExpression {\n  return {\n    type: \"ArrowFunctionExpression\",\n    params,\n    body,\n    expression: false,\n  };\n}\n\n/** Build a BlockStatement. */\nfunction nBlock(stmts: ESTNode[]): BlockStatement {\n  return { type: \"BlockStatement\", body: stmts };\n}\n\n/** Build a const VariableDeclaration. */\nfunction nConst(id: Identifier, init: ESTNode): VariableDeclaration {\n  return {\n    type: \"VariableDeclaration\",\n    kind: \"const\",\n    declarations: [{ type: \"VariableDeclarator\", id, init }],\n  };\n}\n\n/** Build an ExpressionStatement. */\nfunction nExprStmt(expr: ESTNode): ESTNode {\n  return { type: \"ExpressionStatement\", expression: expr };\n}\n\n/** Build a ReturnStatement. */\nfunction nReturn(arg: ESTNode): ReturnStatement {\n  return { type: \"ReturnStatement\", argument: arg };\n}\n\n/** Build a SpreadElement (for array spread / function spread). */\nfunction nSpread(arg: ESTNode): ESTNode {\n  return { type: \"SpreadElement\", argument: arg };\n}\n\n/** Build a MemberExpression. */\nfunction nMember(\n  object: ESTNode,\n  property: ESTNode,\n  computed = false,\n): MemberExpression {\n  return {\n    type: \"MemberExpression\",\n    object,\n    property,\n    computed,\n    optional: false,\n  };\n}\n\n/** Build a NewExpression. */\nfunction nNew(callee: ESTNode, args: ESTNode[]): ESTNode {\n  return { type: \"NewExpression\", callee, arguments: args };\n}\n\n/** Build an ImportDeclaration. */\nfunction nImport(specifiers: ESTNode[], source: string): ESTNode {\n  return {\n    type: \"ImportDeclaration\",\n    specifiers,\n    source: nLit(source),\n    importKind: \"value\",\n  };\n}\n\n/** Build an ImportSpecifier (named import). */\nfunction nImportSpecifier(name: string): ESTNode {\n  return {\n    type: \"ImportSpecifier\",\n    imported: nId(name),\n    local: nId(name),\n    importKind: \"value\",\n  };\n}\n\n/** Type guard for MemberExpression nodes. */\nfunction isMemberExpression(node: ESTNode): node is MemberExpression {\n  return node.type === \"MemberExpression\";\n}\n\n/** Type guard for Identifier nodes. */\nfunction isIdentifier(node: ESTNode): node is Identifier {\n  return node.type === \"Identifier\";\n}\n\n/** Type guard for CallExpression nodes. */\nfunction isCallExpression(node: ESTNode): node is CallExpression {\n  return node.type === \"CallExpression\";\n}\n\n/** Type guard for VariableDeclaration nodes. */\nfunction isVariableDeclaration(node: ESTNode): node is VariableDeclaration {\n  return node.type === \"VariableDeclaration\";\n}\n\n/** Type guard for string Literal nodes. */\nfunction isStringLiteral(node: ESTNode | null): node is Literal {\n  return (\n    node !== null &&\n    node.type === \"Literal\" &&\n    typeof node[\"value\"] === \"string\"\n  );\n}\n\nexport {\n  isCallExpression,\n  isIdentifier,\n  isMemberExpression,\n  isStringLiteral,\n  isVariableDeclaration,\n  nArr,\n  nArrowBlock,\n  nBlock,\n  nCall,\n  nConst,\n  nExprStmt,\n  nId,\n  nImport,\n  nImportSpecifier,\n  nLit,\n  nMember,\n  nNew,\n  nObj,\n  nProp,\n  nReturn,\n  nSpread,\n};\nexport type {\n  ArrowFunctionExpression,\n  BlockStatement,\n  CallExpression,\n  ESTNode,\n  Identifier,\n  Literal,\n  MemberExpression,\n  Program,\n  ReturnStatement,\n  VariableDeclaration,\n  VariableDeclarator,\n};\n","import {\n  type COLOCATED_CLIENT_STRATEGIES,\n  DEFAULT_INTERACTION_EVENT_TYPE,\n  type ISLAND_STRATEGIES,\n  isColocatedClientStrategyName,\n} from \"@dathra/shared\";\nimport {\n  nId,\n  nLit,\n  nMember,\n  type ESTNode,\n} from \"@/transform/ast/implementation\";\n\ninterface JSXIdentifier {\n  type: \"JSXIdentifier\";\n  name: string;\n}\n\ninterface JSXMemberExpression {\n  type: \"JSXMemberExpression\";\n  object: JSXIdentifier | JSXMemberExpression;\n  property: JSXIdentifier;\n}\n\ninterface JSXNamespacedName {\n  type: \"JSXNamespacedName\";\n  namespace: JSXIdentifier;\n  name: JSXIdentifier;\n}\n\ntype JSXName = JSXIdentifier | JSXMemberExpression | JSXNamespacedName;\ntype IslandsDirectiveName = (typeof ISLAND_STRATEGIES)[number];\ntype ColocatedClientStrategyName = (typeof COLOCATED_CLIENT_STRATEGIES)[number];\n\ninterface JSXOpeningElement {\n  type: \"JSXOpeningElement\";\n  name: JSXName;\n  attributes: (JSXAttribute | JSXSpreadAttribute)[];\n  selfClosing: boolean;\n}\n\ninterface JSXAttribute extends ESTNode {\n  type: \"JSXAttribute\";\n  name: JSXIdentifier | JSXNamespacedName;\n  value: ESTNode | null;\n}\n\ninterface JSXSpreadAttribute extends ESTNode {\n  type: \"JSXSpreadAttribute\";\n  argument: ESTNode;\n}\n\ninterface JSXElement extends ESTNode {\n  type: \"JSXElement\";\n  openingElement: JSXOpeningElement;\n  children: JSXChild[];\n  closingElement: ESTNode | null;\n}\n\ninterface JSXFragment extends ESTNode {\n  type: \"JSXFragment\";\n  children: JSXChild[];\n}\n\ninterface JSXText extends ESTNode {\n  type: \"JSXText\";\n  value: string;\n}\n\ninterface JSXExpressionContainer extends ESTNode {\n  type: \"JSXExpressionContainer\";\n  expression: ESTNode;\n}\n\ninterface JSXEmptyExpression extends ESTNode {\n  type: \"JSXEmptyExpression\";\n}\n\ninterface JSXSpreadChild extends ESTNode {\n  type: \"JSXSpreadChild\";\n  expression: ESTNode;\n}\n\ntype JSXChild =\n  | JSXElement\n  | JSXFragment\n  | JSXText\n  | JSXExpressionContainer\n  | JSXSpreadChild;\n\n/**\n * Check if a string is a valid JavaScript identifier.\n */\nfunction isValidIdentifier(name: string): boolean {\n  return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);\n}\n\n/**\n * Check if a JSX element name represents a component.\n * Per JSX convention: uppercase = component, lowercase = HTML element.\n */\nfunction isComponentTag(name: JSXName): boolean {\n  if (name.type === \"JSXIdentifier\") {\n    return /^[A-Z]/.test(name.name);\n  }\n  if (name.type === \"JSXMemberExpression\") {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Convert a JSX element name to an ESTree expression node for function call.\n */\nfunction jsxNameToExpression(name: JSXName): ESTNode {\n  if (name.type === \"JSXIdentifier\") {\n    return nId(name.name);\n  }\n  if (name.type === \"JSXMemberExpression\") {\n    return nMember(jsxNameToExpression(name.object), nId(name.property.name));\n  }\n  return nId(`${name.namespace.name}_${name.name.name}`);\n}\n\n/**\n * Get tag name string from JSX name node.\n */\nfunction getTagName(name: JSXName): string {\n  if (name.type === \"JSXIdentifier\") {\n    return name.name;\n  }\n  if (name.type === \"JSXMemberExpression\") {\n    return `${getTagName(name.object)}.${name.property.name}`;\n  }\n  return `${name.namespace.name}:${name.name.name}`;\n}\n\nfunction isClientDirectiveNamespace(name: JSXAttribute[\"name\"]): boolean {\n  return (\n    (name.type === \"JSXNamespacedName\" && name.namespace.name === \"client\") ||\n    (name.type === \"JSXIdentifier\" && name.name.startsWith(\"client:\"))\n  );\n}\n\nfunction getRawAttributeName(name: JSXAttribute[\"name\"]): string {\n  if (name.type === \"JSXNamespacedName\") {\n    return `${name.namespace.name}:${name.name.name}`;\n  }\n\n  return name.name;\n}\n\nfunction isEventHandlerName(name: string): boolean {\n  return (\n    name.startsWith(\"on\") &&\n    name.length > 2 &&\n    name[2] === name[2].toUpperCase()\n  );\n}\n\nfunction getEventTypeFromHandlerName(name: string): string {\n  return name.slice(2).toLowerCase();\n}\n\nfunction getColocatedClientDirective(name: JSXAttribute[\"name\"]): {\n  strategy: ColocatedClientStrategyName;\n  event: string;\n} | null {\n  const rawName = getRawAttributeName(name);\n  const [strategy, event] = rawName.split(\":\");\n  if (!isColocatedClientStrategyName(strategy) || !isEventHandlerName(event)) {\n    return null;\n  }\n\n  return {\n    strategy,\n    event: getEventTypeFromHandlerName(event),\n  };\n}\n\nfunction getIslandsDirectiveName(\n  name: JSXAttribute[\"name\"],\n): IslandsDirectiveName | null {\n  switch (getRawAttributeName(name)) {\n    case \"client:load\":\n      return \"load\";\n    case \"client:visible\":\n      return \"visible\";\n    case \"client:idle\":\n      return \"idle\";\n    case \"client:interaction\":\n      return \"interaction\";\n    case \"client:media\":\n      return \"media\";\n    default:\n      return null;\n  }\n}\n\nfunction normalizeIslandsDirectiveValue(\n  directive: IslandsDirectiveName,\n  value: JSXAttribute[\"value\"],\n): ESTNode | null {\n  const invalidValueError = (message: string) => {\n    throw new Error(`[dathra] ${message}`);\n  };\n\n  if (value === null) {\n    if (directive === \"interaction\") {\n      return nLit(DEFAULT_INTERACTION_EVENT_TYPE);\n    }\n\n    if (directive === \"media\") {\n      invalidValueError(\"client:media requires a string literal media query\");\n    }\n\n    return null;\n  }\n\n  if (directive === \"load\" || directive === \"visible\" || directive === \"idle\") {\n    invalidValueError(`client:${directive} does not accept a value`);\n  }\n\n  let normalizedValue: ESTNode | null = null;\n\n  if (value.type === \"Literal\") {\n    normalizedValue = value;\n  } else if (value.type === \"JSXExpressionContainer\") {\n    const expression = value.expression as ESTNode;\n    normalizedValue =\n      expression.type === \"JSXEmptyExpression\" ? null : expression;\n  }\n\n  if (\n    normalizedValue?.type === \"Literal\" &&\n    typeof normalizedValue.value === \"string\"\n  ) {\n    return normalizedValue;\n  }\n\n  if (directive === \"interaction\") {\n    invalidValueError(\n      \"client:interaction accepts only string literal event types\",\n    );\n  }\n\n  return invalidValueError(\n    \"client:media requires a string literal media query\",\n  );\n}\n\nexport {\n  getColocatedClientDirective,\n  isClientDirectiveNamespace,\n  getIslandsDirectiveName,\n  getTagName,\n  isComponentTag,\n  isValidIdentifier,\n  jsxNameToExpression,\n  normalizeIslandsDirectiveValue,\n};\nexport type {\n  ColocatedClientStrategyName,\n  IslandsDirectiveName,\n  JSXAttribute,\n  JSXChild,\n  JSXElement,\n  JSXEmptyExpression,\n  JSXExpressionContainer,\n  JSXFragment,\n  JSXIdentifier,\n  JSXMemberExpression,\n  JSXName,\n  JSXNamespacedName,\n  JSXOpeningElement,\n  JSXSpreadAttribute,\n  JSXSpreadChild,\n  JSXText,\n};\n","import {\n  nCall,\n  nId,\n  type ESTNode,\n  type Identifier,\n} from \"@/transform/ast/implementation\";\nimport type { TransformState } from \"@/transform/state/implementation\";\n\n/**\n * Generate navigation code to reach a node at a given path.\n */\nfunction generateNavigation(\n  fragmentId: Identifier,\n  path: number[],\n  state: TransformState,\n): ESTNode {\n  state.runtimeImports.add(\"firstChild\");\n\n  let expr: ESTNode = nCall(nId(\"firstChild\"), [fragmentId]);\n\n  for (let i = 0; i < path.length; i++) {\n    const index = path[i];\n\n    if (i === 0 && index === 0) {\n      continue;\n    }\n\n    if (i === 0) {\n      for (let j = 0; j < index; j++) {\n        state.runtimeImports.add(\"nextSibling\");\n        expr = nCall(nId(\"nextSibling\"), [expr]);\n      }\n      continue;\n    }\n\n    expr = nCall(nId(\"firstChild\"), [expr]);\n    for (let j = 0; j < index; j++) {\n      state.runtimeImports.add(\"nextSibling\");\n      expr = nCall(nId(\"nextSibling\"), [expr]);\n    }\n  }\n\n  return expr;\n}\n\nexport { generateNavigation };\n","import {\n  nId,\n  type ESTNode,\n  type Identifier,\n  type VariableDeclaration,\n} from \"@/transform/ast/implementation\";\nimport type { RuntimeImportName } from \"@/transform/runtimeImports/implementation\";\n\ninterface TransformState {\n  templateCount: number;\n  clientTargetCount: number;\n  clientActionCount: number;\n  templates: VariableDeclaration[];\n  runtimeImports: Set<RuntimeImportName>;\n  mode: \"csr\" | \"ssr\";\n  moduleBindings: Set<string>;\n  componentClientActions: Array<{\n    id: string;\n    factory: ESTNode;\n  }>;\n  currentSerializableBindings?: Map<string, ESTNode>;\n  currentColocatedClientState?: {\n    strategy: \"load\" | \"interaction\" | \"visible\" | \"idle\" | null;\n    interactionEventType: string | null;\n  };\n  currentElementNamespace?: \"html\" | \"svg\" | \"math\";\n  currentHostIslandMetadata?: boolean;\n}\n\n/**\n * Build the initial transform state.\n */\nfunction createInitialState(mode: \"csr\" | \"ssr\"): TransformState {\n  return {\n    templateCount: 0,\n    clientTargetCount: 0,\n    clientActionCount: 0,\n    templates: [],\n    runtimeImports: new Set(),\n    mode,\n    moduleBindings: new Set(),\n    componentClientActions: [],\n    currentElementNamespace: \"html\",\n    currentHostIslandMetadata: false,\n  };\n}\n\n/**\n * Create a unique template identifier for the current state.\n */\nfunction createTemplateId(state: TransformState): Identifier {\n  return nId(`_t${++state.templateCount}`);\n}\n\nfunction createClientTargetId(state: TransformState): string {\n  state.clientTargetCount += 1;\n  return `dh-ct-${state.clientTargetCount}`;\n}\n\nfunction createClientActionId(state: TransformState): string {\n  state.clientActionCount += 1;\n  return `dh-ca-${state.clientActionCount}`;\n}\n\nexport {\n  createClientActionId,\n  createClientTargetId,\n  createInitialState,\n  createTemplateId,\n};\nexport type { TransformState };\n","import type { ESTNode } from \"@/transform/ast/implementation\";\n\nconst HTML_VOID_ELEMENTS = new Set([\n  \"area\",\n  \"base\",\n  \"br\",\n  \"col\",\n  \"embed\",\n  \"hr\",\n  \"img\",\n  \"input\",\n  \"link\",\n  \"meta\",\n  \"param\",\n  \"source\",\n  \"track\",\n  \"wbr\",\n]);\n\nfunction isHtmlVoidElement(tag: string): boolean {\n  return HTML_VOID_ELEMENTS.has(tag.toLowerCase());\n}\n\ntype StaticStyleValue = string | number | boolean | null;\n\ntype StaticAttrValue =\n  | string\n  | number\n  | boolean\n  | null\n  | Record<string, StaticStyleValue>;\n\ntype StaticTreeNode =\n  | string\n  | { kind: \"text\" | \"insert\" | \"each\" }\n  | {\n      tag: string;\n      attrs: Record<string, StaticAttrValue> | null;\n      children: StaticTreeNode[];\n    };\n\nfunction getLiteralValue(node: ESTNode): string | number | boolean | null {\n  return node.type === \"Literal\"\n    ? ((node.value as string | number | boolean | null | undefined) ?? null)\n    : null;\n}\n\nfunction stringifyStaticAttrValue(value: StaticAttrValue): string {\n  return typeof value === \"object\" ? JSON.stringify(value) : String(value);\n}\n\nfunction readStyleObject(\n  node: ESTNode,\n): Record<string, StaticStyleValue> | null {\n  if (node.type !== \"ObjectExpression\") {\n    return null;\n  }\n\n  const style: Record<string, StaticStyleValue> = {};\n  for (const property of node.properties as ESTNode[]) {\n    if (property.type !== \"Property\") {\n      return null;\n    }\n\n    const keyNode = property.key as ESTNode;\n    const valueNode = property.value as ESTNode;\n    const key =\n      keyNode.type === \"Identifier\"\n        ? (keyNode.name as string)\n        : typeof keyNode.value === \"string\"\n          ? keyNode.value\n          : null;\n    if (key === null) {\n      return null;\n    }\n\n    if (valueNode.type !== \"Literal\") {\n      return null;\n    }\n\n    style[key] = (valueNode.value as StaticStyleValue | undefined) ?? null;\n  }\n\n  return style;\n}\n\nfunction readAttrs(node: ESTNode): Record<string, StaticAttrValue> | null {\n  if (node.type === \"Literal\" && node.value === null) {\n    return null;\n  }\n\n  if (node.type !== \"ObjectExpression\") {\n    return null;\n  }\n\n  const attrs: Record<string, StaticAttrValue> = {};\n  for (const property of node.properties as ESTNode[]) {\n    if (property.type !== \"Property\") {\n      return null;\n    }\n\n    const keyNode = property.key as ESTNode;\n    const valueNode = property.value as ESTNode;\n    const key =\n      keyNode.type === \"Identifier\"\n        ? (keyNode.name as string)\n        : typeof keyNode.value === \"string\"\n          ? keyNode.value\n          : null;\n    if (key === null) {\n      return null;\n    }\n\n    const literalValue = getLiteralValue(valueNode);\n    if (valueNode.type === \"Literal\") {\n      attrs[key] = literalValue;\n      continue;\n    }\n\n    const styleObject = readStyleObject(valueNode);\n    if (styleObject === null) {\n      return null;\n    }\n\n    attrs[key] = styleObject;\n  }\n\n  return attrs;\n}\n\nfunction readStaticTreeNode(node: ESTNode): StaticTreeNode | null {\n  if (node.type === \"Literal\" && typeof node.value === \"string\") {\n    return node.value;\n  }\n\n  if (node.type !== \"ArrayExpression\") {\n    return null;\n  }\n\n  const elements = node.elements as Array<ESTNode | null | undefined>;\n  const [tagNode, attrsNode, ...childNodes] = elements;\n  if (\n    tagNode?.type === \"Literal\" &&\n    typeof tagNode.value === \"string\" &&\n    attrsNode?.type === \"Literal\" &&\n    attrsNode.value === null &&\n    elements.length === 2 &&\n    tagNode.value.startsWith(\"{\")\n  ) {\n    if (tagNode.value === \"{text}\") {\n      return { kind: \"text\" };\n    }\n\n    if (tagNode.value === \"{insert}\") {\n      return { kind: \"insert\" };\n    }\n\n    if (tagNode.value === \"{each}\") {\n      return { kind: \"each\" };\n    }\n\n    return null;\n  }\n\n  if (!(tagNode?.type === \"Literal\" && typeof tagNode.value === \"string\")) {\n    return null;\n  }\n\n  const attrs = attrsNode == null ? null : readAttrs(attrsNode);\n  if (\n    attrsNode != null &&\n    attrs === null &&\n    !(attrsNode.type === \"Literal\" && attrsNode.value === null)\n  ) {\n    return null;\n  }\n\n  const children: StaticTreeNode[] = [];\n  for (const childNode of childNodes) {\n    if (childNode == null) {\n      return null;\n    }\n\n    const child = readStaticTreeNode(childNode);\n    if (child === null) {\n      return null;\n    }\n\n    children.push(child);\n  }\n\n  return {\n    tag: tagNode.value,\n    attrs,\n    children,\n  };\n}\n\nfunction readStaticTreeRoots(tree: ESTNode): StaticTreeNode[] | null {\n  if (tree.type !== \"ArrayExpression\") {\n    return null;\n  }\n\n  const roots: StaticTreeNode[] = [];\n  for (const element of tree.elements as Array<ESTNode | null | undefined>) {\n    if (element == null) {\n      return null;\n    }\n\n    const root = readStaticTreeNode(element);\n    if (root === null) {\n      return null;\n    }\n\n    roots.push(root);\n  }\n\n  return roots;\n}\n\nfunction hasCustomElement(node: StaticTreeNode): boolean {\n  if (typeof node === \"string\" || \"kind\" in node) {\n    return false;\n  }\n\n  if (node.tag.includes(\"-\")) {\n    return true;\n  }\n\n  return node.children.some(hasCustomElement);\n}\n\nfunction escapeHtml(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\");\n}\n\nfunction escapeAttr(value: string): string {\n  return value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\");\n}\n\nfunction camelToKebab(value: string): string {\n  return value.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);\n}\n\nfunction serializeStyleObject(value: Record<string, StaticStyleValue>): string {\n  const parts: string[] = [];\n  for (const [key, entry] of Object.entries(value)) {\n    if (entry == null || entry === \"\") {\n      continue;\n    }\n\n    parts.push(`${camelToKebab(key)}: ${String(entry)}`);\n  }\n\n  return parts.join(\"; \");\n}\n\nfunction serializeStaticAttrs(\n  attrs: Record<string, StaticAttrValue> | null,\n): string {\n  if (attrs === null) {\n    return \"\";\n  }\n\n  const parts: string[] = [];\n  for (const [key, value] of Object.entries(attrs)) {\n    if (value === null || value === false) {\n      continue;\n    }\n\n    if (value === true) {\n      parts.push(` ${key}`);\n      continue;\n    }\n\n    if (key === \"style\" && typeof value === \"object\") {\n      const cssText = serializeStyleObject(value);\n      if (cssText !== \"\") {\n        parts.push(` style=\"${escapeAttr(cssText)}\"`);\n      }\n      continue;\n    }\n\n    parts.push(` ${key}=\"${escapeAttr(stringifyStaticAttrValue(value))}\"`);\n  }\n\n  return parts.join(\"\");\n}\n\nfunction serializeMarkupNode(\n  node: StaticTreeNode,\n  namespace: \"html\" | \"svg\" | \"math\",\n  textPlaceholderId: { current: number },\n): string {\n  if (typeof node === \"string\") {\n    return escapeHtml(node);\n  }\n\n  if (\"kind\" in node) {\n    if (node.kind === \"text\") {\n      const markerId = textPlaceholderId.current;\n      textPlaceholderId.current += 1;\n      return `<!--dh-csr:text:${markerId}-->`;\n    }\n\n    return `<!--${node.kind === \"insert\" ? \"{insert}\" : \"{each}\"}-->`;\n  }\n\n  const nextNamespace =\n    node.tag === \"svg\" ? \"svg\" : node.tag === \"math\" ? \"math\" : namespace;\n  const openingTag = `<${node.tag}${serializeStaticAttrs(node.attrs)}>`;\n  const children = node.children\n    .map((child) =>\n      serializeMarkupNode(child, nextNamespace, textPlaceholderId),\n    )\n    .join(\"\");\n\n  if (namespace === \"html\" && HTML_VOID_ELEMENTS.has(node.tag.toLowerCase())) {\n    return `<${node.tag}${serializeStaticAttrs(node.attrs)} />`;\n  }\n\n  return `${openingTag}${children}</${node.tag}>`;\n}\n\nexport {\n  hasCustomElement,\n  isHtmlVoidElement,\n  readStaticTreeRoots,\n  serializeMarkupNode,\n  serializeStaticAttrs,\n};\nexport type { StaticAttrValue, StaticStyleValue, StaticTreeNode };\n","import { walk } from \"zimmerframe\";\nimport {\n  COLOCATED_CLIENT_STRATEGIES,\n  CLIENT_ACTIONS_METADATA_ATTRIBUTE,\n  CLIENT_EVENT_METADATA_ATTRIBUTE,\n  CLIENT_STRATEGY_METADATA_ATTRIBUTE,\n  CLIENT_TARGET_METADATA_ATTRIBUTE,\n  DEFAULT_INTERACTION_EVENT_TYPE,\n  ISLAND_METADATA_ATTRIBUTE,\n  ISLAND_VALUE_METADATA_ATTRIBUTE,\n  type ColocatedClientStrategyName,\n} from \"@dathra/shared\";\n\nimport {\n  isCallExpression,\n  isIdentifier,\n  isMemberExpression,\n  isStringLiteral,\n  nArr,\n  nArrowBlock,\n  nBlock,\n  nCall,\n  nConst,\n  nId,\n  nLit,\n  nMember,\n  nObj,\n  nProp,\n  nReturn,\n  nSpread,\n  type CallExpression,\n  type ESTNode,\n} from \"@/transform/ast/implementation\";\nimport {\n  getColocatedClientDirective,\n  getIslandsDirectiveName,\n  getTagName,\n  isClientDirectiveNamespace,\n  isComponentTag,\n  isValidIdentifier,\n  jsxNameToExpression,\n  normalizeIslandsDirectiveValue,\n  type IslandsDirectiveName,\n  type JSXAttribute,\n  type JSXChild,\n  type JSXElement,\n  type JSXEmptyExpression,\n  type JSXExpressionContainer,\n  type JSXFragment,\n  type JSXSpreadAttribute,\n  type JSXSpreadChild,\n} from \"@/transform/jsx/implementation\";\nimport {\n  createClientActionId,\n  createClientTargetId,\n  type TransformState,\n} from \"@/transform/state/implementation\";\n\ntype DynamicPart =\n  | {\n      type: \"text\" | \"spread\";\n      path: number[];\n      expression: ESTNode;\n    }\n  | {\n      type: \"attr\" | \"event\";\n      path: number[];\n      expression: ESTNode;\n      key: string;\n    }\n  | {\n      type: \"insert\";\n      path: number[];\n      expression: ESTNode;\n      isComponent?: boolean;\n    };\n\ninterface TreeResult {\n  tree: ESTNode;\n  dynamicParts: DynamicPart[];\n}\n\ninterface ProcessedAttributes {\n  attrs: ESTNode;\n  events: { type: string; handler: ESTNode }[];\n}\n\ninterface ColocatedClientState {\n  strategy: ColocatedClientStrategyName | null;\n  interactionEventType: string | null;\n}\n\ninterface IslandsDirectiveMetadata {\n  strategy: IslandsDirectiveName;\n  value: ESTNode | null;\n}\n\nconst RESERVED_ISLAND_METADATA_KEYS = new Set([\n  ISLAND_METADATA_ATTRIBUTE,\n  ISLAND_VALUE_METADATA_ATTRIBUTE,\n]);\n\nconst RESERVED_CLIENT_METADATA_KEYS = new Set([\n  CLIENT_ACTIONS_METADATA_ATTRIBUTE,\n  CLIENT_TARGET_METADATA_ATTRIBUTE,\n  CLIENT_STRATEGY_METADATA_ATTRIBUTE,\n  CLIENT_EVENT_METADATA_ATTRIBUTE,\n]);\n\nconst colocatedDirectivePrefixes = new Set(\n  COLOCATED_CLIENT_STRATEGIES.map((strategy) => `${strategy}:`),\n);\n\nfunction collectBindingNames(pattern: ESTNode, names: Set<string>): void {\n  if (isIdentifier(pattern)) {\n    names.add(pattern.name);\n    return;\n  }\n\n  if (pattern.type === \"ObjectPattern\") {\n    for (const property of pattern.properties as ESTNode[]) {\n      if (property.type === \"Property\") {\n        collectBindingNames(property.value as ESTNode, names);\n      } else if (property.type === \"RestElement\") {\n        collectBindingNames(property.argument as ESTNode, names);\n      }\n    }\n    return;\n  }\n\n  if (pattern.type === \"ArrayPattern\") {\n    for (const element of pattern.elements as Array<ESTNode | null>) {\n      if (element !== null) {\n        collectBindingNames(element, names);\n      }\n    }\n    return;\n  }\n\n  if (pattern.type === \"AssignmentPattern\") {\n    collectBindingNames(pattern.left as ESTNode, names);\n    return;\n  }\n\n  if (pattern.type === \"RestElement\") {\n    collectBindingNames(pattern.argument as ESTNode, names);\n  }\n}\n\nfunction throwUnknownClientDirective(name: JSXAttribute[\"name\"]): never {\n  if (name.type !== \"JSXNamespacedName\") {\n    throw new Error(\"[dathra] Unknown client:* directive\");\n  }\n\n  throw new Error(\n    `[dathra] Unknown client:* directive: client:${name.name.name}`,\n  );\n}\n\nfunction getRawAttributeNameForDiagnostics(name: JSXAttribute[\"name\"]): string {\n  if (name.type === \"JSXIdentifier\") {\n    return name.name;\n  }\n\n  return `${name.namespace.name}:${name.name.name}`;\n}\n\nfunction getUnsupportedColocatedDirectiveError(\n  name: JSXAttribute[\"name\"],\n): string | null {\n  const rawName = getRawAttributeNameForDiagnostics(name);\n\n  if (\n    Array.from(colocatedDirectivePrefixes).some((prefix) =>\n      rawName.startsWith(prefix),\n    )\n  ) {\n    return `Unsupported colocated client directive: ${rawName}`;\n  }\n\n  return null;\n}\n\nconst KNOWN_COMPONENT_ACTION_GLOBALS = new Set([\n  \"console\",\n  \"Math\",\n  \"JSON\",\n  \"Number\",\n  \"String\",\n  \"Boolean\",\n  \"Object\",\n  \"Array\",\n]);\n\nconst UNSUPPORTED_COMPONENT_TARGET_EVENTS = new Set([\n  \"focus\",\n  \"blur\",\n  \"mouseenter\",\n  \"mouseleave\",\n  \"scroll\",\n]);\n\nfunction isESTNode(value: unknown): value is ESTNode {\n  return typeof value === \"object\" && value !== null && \"type\" in value;\n}\n\nfunction isComputedProperty(value: unknown): value is true {\n  return value === true;\n}\n\nfunction collectBlockBindingNames(body: ESTNode[], names: Set<string>): void {\n  for (const statement of body) {\n    if (statement.type === \"VariableDeclaration\") {\n      for (const declaration of statement.declarations as Array<{\n        id: ESTNode;\n      }>) {\n        collectBindingNames(declaration.id, names);\n      }\n      continue;\n    }\n\n    if (statement.type === \"FunctionDeclaration\" && isESTNode(statement.id)) {\n      collectBindingNames(statement.id, names);\n    }\n  }\n}\n\nfunction collectFreeIdentifiers(\n  node: ESTNode | null | undefined,\n  available: Set<string>,\n  free: Set<string>,\n): boolean {\n  if (node === null || node === undefined) {\n    return true;\n  }\n\n  if (isIdentifier(node)) {\n    if (!available.has(node.name)) {\n      free.add(node.name);\n    }\n    return true;\n  }\n\n  switch (node.type) {\n    case \"Literal\":\n    case \"ThisExpression\":\n      return true;\n    case \"MemberExpression\":\n      return (\n        collectFreeIdentifiers(node.object as ESTNode, available, free) &&\n        (!isComputedProperty(node.computed) ||\n          collectFreeIdentifiers(node.property as ESTNode, available, free))\n      );\n    case \"CallExpression\":\n    case \"NewExpression\":\n      return [node.callee as ESTNode, ...(node.arguments as ESTNode[])].every(\n        (part) => collectFreeIdentifiers(part, available, free),\n      );\n    case \"ArrowFunctionExpression\":\n    case \"FunctionExpression\": {\n      const nextAvailable = new Set(available);\n      if (node.type === \"FunctionExpression\" && isESTNode(node.id)) {\n        collectBindingNames(node.id, nextAvailable);\n      }\n      for (const param of (node.params ?? []) as ESTNode[]) {\n        collectBindingNames(param, nextAvailable);\n      }\n      const functionBody = node.body as ESTNode;\n      if (functionBody.type === \"BlockStatement\") {\n        collectBlockBindingNames(functionBody.body as ESTNode[], nextAvailable);\n      }\n      return collectFreeIdentifiers(functionBody, nextAvailable, free);\n    }\n    case \"BlockStatement\": {\n      const nextAvailable = new Set(available);\n      collectBlockBindingNames(node.body as ESTNode[], nextAvailable);\n      return (node.body as ESTNode[]).every((statement) =>\n        collectFreeIdentifiers(statement, nextAvailable, free),\n      );\n    }\n    case \"ExpressionStatement\":\n      return collectFreeIdentifiers(\n        node.expression as ESTNode,\n        available,\n        free,\n      );\n    case \"ReturnStatement\":\n    case \"AwaitExpression\":\n    case \"YieldExpression\":\n      return collectFreeIdentifiers(node.argument as ESTNode, available, free);\n    case \"UnaryExpression\":\n    case \"UpdateExpression\":\n      return collectFreeIdentifiers(node.argument as ESTNode, available, free);\n    case \"BinaryExpression\":\n    case \"LogicalExpression\":\n    case \"AssignmentExpression\":\n      return (\n        collectFreeIdentifiers(node.left as ESTNode, available, free) &&\n        collectFreeIdentifiers(node.right as ESTNode, available, free)\n      );\n    case \"ConditionalExpression\":\n      return (\n        collectFreeIdentifiers(node.test as ESTNode, available, free) &&\n        collectFreeIdentifiers(node.consequent as ESTNode, available, free) &&\n        collectFreeIdentifiers(node.alternate as ESTNode, available, free)\n      );\n    case \"SequenceExpression\":\n      return (node.expressions as ESTNode[]).every((expression) =>\n        collectFreeIdentifiers(expression, available, free),\n      );\n    case \"ArrayExpression\":\n      return (node.elements as Array<ESTNode | null>).every((element) =>\n        collectFreeIdentifiers(element, available, free),\n      );\n    case \"ObjectExpression\":\n      return (node.properties as ESTNode[]).every((property) => {\n        if (property.type === \"SpreadElement\") {\n          return collectFreeIdentifiers(\n            property.argument as ESTNode,\n            available,\n            free,\n          );\n        }\n\n        return (\n          (!isComputedProperty(property.computed) ||\n            collectFreeIdentifiers(property.key as ESTNode, available, free)) &&\n          collectFreeIdentifiers(property.value as ESTNode, available, free)\n        );\n      });\n    case \"TemplateLiteral\":\n      return (node.expressions as ESTNode[]).every((expression) =>\n        collectFreeIdentifiers(expression, available, free),\n      );\n    case \"IfStatement\":\n      return (\n        collectFreeIdentifiers(node.test as ESTNode, available, free) &&\n        collectFreeIdentifiers(node.consequent as ESTNode, available, free) &&\n        collectFreeIdentifiers(node.alternate as ESTNode, available, free)\n      );\n    case \"VariableDeclaration\":\n      return (node.declarations as Array<{ init?: ESTNode | null }>).every(\n        (declaration) =>\n          collectFreeIdentifiers(declaration.init ?? null, available, free),\n      );\n    default:\n      return false;\n  }\n}\n\nfunction isSerializableCaptureExpression(\n  node: ESTNode | undefined,\n  serializableBindings: ReadonlyMap<string, ESTNode>,\n  visited: Set<string> = new Set(),\n): boolean {\n  if (node === undefined) {\n    return false;\n  }\n\n  if (node.type === \"Literal\") {\n    return (\n      node.value === null ||\n      typeof node.value === \"string\" ||\n      typeof node.value === \"number\" ||\n      typeof node.value === \"boolean\"\n    );\n  }\n\n  if (isIdentifier(node)) {\n    if (visited.has(node.name)) {\n      return false;\n    }\n    const binding = serializableBindings.get(node.name);\n    if (binding === undefined) {\n      return false;\n    }\n    visited.add(node.name);\n    const result = isSerializableCaptureExpression(\n      binding,\n      serializableBindings,\n      visited,\n    );\n    visited.delete(node.name);\n    return result;\n  }\n\n  if (node.type === \"TemplateLiteral\") {\n    return (node.expressions as ESTNode[]).every((expression) =>\n      isSerializableCaptureExpression(\n        expression,\n        serializableBindings,\n        visited,\n      ),\n    );\n  }\n\n  if (node.type === \"ArrayExpression\") {\n    return (node.elements as Array<ESTNode | null>).every(\n      (element) =>\n        element === null ||\n        isSerializableCaptureExpression(element, serializableBindings, visited),\n    );\n  }\n\n  if (node.type === \"ObjectExpression\") {\n    return (node.properties as ESTNode[]).every((property) => {\n      if (property.type === \"SpreadElement\") {\n        return false;\n      }\n\n      return (\n        (!isComputedProperty(property.computed) ||\n          isSerializableCaptureExpression(\n            property.key as ESTNode,\n            serializableBindings,\n            visited,\n          )) &&\n        isSerializableCaptureExpression(\n          property.value as ESTNode,\n          serializableBindings,\n          visited,\n        )\n      );\n    });\n  }\n\n  return false;\n}\n\nfunction analyzeComponentActionHandler(\n  handler: ESTNode,\n  moduleBindings: ReadonlySet<string>,\n  serializableBindings: ReadonlyMap<string, ESTNode> | undefined,\n): { captures: string[] } | { error: string } {\n  if (\n    handler.type !== \"Identifier\" &&\n    handler.type !== \"MemberExpression\" &&\n    handler.type !== \"ArrowFunctionExpression\" &&\n    handler.type !== \"FunctionExpression\"\n  ) {\n    return {\n      error:\n        \"component-target colocated handlers must be a function reference or inline function expression\",\n    };\n  }\n\n  const available = new Set<string>([\n    ...moduleBindings,\n    ...KNOWN_COMPONENT_ACTION_GLOBALS,\n  ]);\n  const free = new Set<string>();\n  if (!collectFreeIdentifiers(handler, available, free)) {\n    return {\n      error:\n        \"component-target colocated handlers must be module-scoped and use only supported expression syntax\",\n    };\n  }\n\n  const captures = Array.from(free).sort();\n  if (captures.length === 0) {\n    return { captures: [] };\n  }\n\n  const currentSerializableBindings: ReadonlyMap<string, ESTNode> =\n    serializableBindings ?? new Map<string, ESTNode>();\n  for (const capture of captures) {\n    if (\n      !isSerializableCaptureExpression(\n        currentSerializableBindings.get(capture),\n        currentSerializableBindings,\n      )\n    ) {\n      return {\n        error: `component-target colocated handlers cannot capture local bindings: ${captures.join(\", \")}`,\n      };\n    }\n  }\n\n  return { captures };\n}\n\nfunction buildComponentActionPayloadExpression(\n  captureNames: readonly string[],\n  serializableBindings: ReadonlyMap<string, ESTNode> | undefined,\n): ESTNode {\n  const properties = captureNames.map((name) =>\n    nProp(\n      isValidIdentifier(name) ? nId(name) : nLit(name),\n      serializableBindings?.get(name) ?? nId(name),\n      !isValidIdentifier(name),\n    ),\n  );\n  return nObj(properties);\n}\n\nfunction buildComponentActionFactory(\n  handler: ESTNode,\n  captureNames: readonly string[],\n): ESTNode {\n  const statements: ESTNode[] = captureNames.map((name) =>\n    nConst(nId(name), nMember(nId(\"__dh_payload\"), nLit(name), true)),\n  );\n  statements.push(nReturn(handler));\n\n  return nArrowBlock(\n    [nId(\"__dh_payload\"), nId(\"__dh_host\")],\n    nBlock(statements),\n  );\n}\n\nfunction getElementNamespace(tagName: string): \"html\" | \"svg\" | \"math\" {\n  if (tagName === \"svg\") {\n    return \"svg\";\n  }\n\n  if (tagName === \"math\") {\n    return \"math\";\n  }\n\n  return \"html\";\n}\n\nfunction shouldRejectColocatedDirectiveInNamespace(\n  namespace: \"html\" | \"svg\" | \"math\" | undefined,\n): boolean {\n  return namespace === \"svg\" || namespace === \"math\";\n}\n\nfunction getReservedClientMetadataError(key: string): string | null {\n  if (!RESERVED_CLIENT_METADATA_KEYS.has(key as never)) {\n    return null;\n  }\n\n  return `[dathra] ${key} is compiler-reserved metadata and cannot be authored directly`;\n}\n\nfunction assertNoHostIslandsMixing(\n  hasHostIslandMetadata: boolean | undefined,\n  strategy: ColocatedClientState[\"strategy\"],\n): void {\n  if (hasHostIslandMetadata !== true || strategy === null) {\n    return;\n  }\n\n  throw new Error(\n    \"[dathra] host-level client:* directives or data-dh-island metadata cannot be combined with colocated client directives in the same component render subtree\",\n  );\n}\n\ninterface NestedTransformers {\n  transformJSXNode: (\n    node: JSXElement | JSXFragment,\n    state: TransformState,\n    nested: NestedTransformers,\n  ) => ESTNode;\n  transformJSXForSSRNode: (\n    node: JSXElement | JSXFragment,\n    state: TransformState,\n    nested: NestedTransformers,\n  ) => ESTNode;\n}\n\n/**\n * Check if a node contains reactive access (.value).\n */\nfunction containsReactiveAccess(node: ESTNode): boolean {\n  if (\n    isMemberExpression(node) &&\n    isIdentifier(node.property) &&\n    node.property.name === \"value\"\n  ) {\n    return true;\n  }\n\n  let found = false;\n  walk(node, null, {\n    MemberExpression(n: ESTNode, { next }: { next: () => void }) {\n      if (\n        isMemberExpression(n) &&\n        isIdentifier(n.property) &&\n        n.property.name === \"value\"\n      ) {\n        found = true;\n      }\n      if (!found) next();\n    },\n  });\n  return found;\n}\n\n/**\n * Build a component function call expression from a JSX element.\n */\nfunction buildComponentCall(\n  node: JSXElement,\n  state: TransformState,\n  nested: NestedTransformers,\n): ESTNode {\n  const opening = node.openingElement;\n  const componentRef = jsxNameToExpression(opening.name);\n\n  const propsProperties: ESTNode[] = [];\n  let islandsDirective: IslandsDirectiveMetadata | null = null;\n  let colocatedDirectiveStrategy: ColocatedClientStrategyName | null = null;\n  let colocatedInteractionEventType: string | null = null;\n  const componentActionBindings = new Map<\n    string,\n    { id: string; captureNames: string[] }\n  >();\n  let hasExplicitReservedIslandMetadata = false;\n  let hasExplicitHostIslandMetadata = false;\n\n  for (const attr of opening.attributes) {\n    if (attr.type === \"JSXSpreadAttribute\") {\n      propsProperties.push(nSpread(attr.argument));\n      continue;\n    }\n\n    const directiveName = getIslandsDirectiveName(attr.name);\n    if (directiveName !== null) {\n      if (islandsDirective !== null) {\n        throw new Error(\n          `[dathra] Multiple client:* directives are not allowed on a single component: <${getTagName(opening.name)}>`,\n        );\n      }\n\n      islandsDirective = {\n        strategy: directiveName,\n        value: normalizeIslandsDirectiveValue(directiveName, attr.value),\n      };\n      continue;\n    }\n\n    const colocatedDirective = getColocatedClientDirective(attr.name);\n    if (colocatedDirective !== null) {\n      const rawName = getRawAttributeNameForDiagnostics(attr.name);\n      const value = attr.value;\n      if (\n        value === null ||\n        !isJSXExpressionContainer(value) ||\n        isJSXEmptyExpression(value.expression)\n      ) {\n        throw new Error(\n          `[dathra] ${rawName} requires an inline handler expression`,\n        );\n      }\n\n      if (UNSUPPORTED_COMPONENT_TARGET_EVENTS.has(colocatedDirective.event)) {\n        throw new Error(\n          `[dathra] ${rawName} is not supported on component targets because the child host cannot observe that event without an explicit host re-emit`,\n        );\n      }\n\n      assertNoHostIslandsMixing(\n        state.currentHostIslandMetadata,\n        colocatedDirective.strategy,\n      );\n\n      const colocatedClientState = state.currentColocatedClientState ?? {\n        strategy: null,\n        interactionEventType: null,\n      };\n      if (\n        colocatedClientState.strategy !== null &&\n        colocatedClientState.strategy !== colocatedDirective.strategy\n      ) {\n        throw new Error(\n          \"[dathra] Mixed colocated client strategies are not supported in one JSX root\",\n        );\n      }\n      if (\n        colocatedDirective.strategy === \"interaction\" &&\n        colocatedClientState.interactionEventType !== null &&\n        colocatedClientState.interactionEventType !== colocatedDirective.event\n      ) {\n        throw new Error(\n          \"[dathra] Mixed colocated interaction event types are not supported in one JSX root\",\n        );\n      }\n      colocatedClientState.strategy = colocatedDirective.strategy;\n      if (colocatedDirective.strategy === \"interaction\") {\n        colocatedClientState.interactionEventType = colocatedDirective.event;\n      }\n      state.currentColocatedClientState = colocatedClientState;\n\n      if (\n        colocatedDirectiveStrategy !== null &&\n        colocatedDirectiveStrategy !== colocatedDirective.strategy\n      ) {\n        throw new Error(\n          \"[dathra] Mixed colocated client strategies are not supported in one JSX root\",\n        );\n      }\n      if (\n        colocatedDirective.strategy === \"interaction\" &&\n        colocatedInteractionEventType !== null &&\n        colocatedInteractionEventType !== colocatedDirective.event\n      ) {\n        throw new Error(\n          \"[dathra] Mixed colocated interaction event types are not supported in one JSX root\",\n        );\n      }\n\n      const analysis = analyzeComponentActionHandler(\n        value.expression,\n        state.moduleBindings,\n        state.currentSerializableBindings,\n      );\n      if (\"error\" in analysis) {\n        throw new Error(`[dathra] ${rawName} ${analysis.error}`);\n      }\n\n      colocatedDirectiveStrategy = colocatedDirective.strategy;\n      if (colocatedDirective.strategy === \"interaction\") {\n        colocatedInteractionEventType = colocatedDirective.event;\n      }\n\n      const actionId = createClientActionId(state);\n      componentActionBindings.set(colocatedDirective.event, {\n        id: actionId,\n        captureNames: analysis.captures,\n      });\n      state.componentClientActions.push({\n        id: actionId,\n        factory: buildComponentActionFactory(\n          value.expression,\n          analysis.captures,\n        ),\n      });\n      state.runtimeImports.add(\"registerClientAction\");\n      continue;\n    }\n\n    const unsupportedColocatedDirectiveError =\n      getUnsupportedColocatedDirectiveError(attr.name);\n    if (unsupportedColocatedDirectiveError !== null) {\n      throw new Error(`[dathra] ${unsupportedColocatedDirectiveError}`);\n    }\n\n    if (isClientDirectiveNamespace(attr.name)) {\n      throwUnknownClientDirective(attr.name);\n    }\n\n    const key = getAttributeName(attr.name);\n\n    if (RESERVED_ISLAND_METADATA_KEYS.has(key as never)) {\n      hasExplicitReservedIslandMetadata = true;\n      hasExplicitHostIslandMetadata = true;\n    }\n\n    const reservedClientMetadataError = getReservedClientMetadataError(key);\n    if (reservedClientMetadataError !== null) {\n      throw new Error(reservedClientMetadataError);\n    }\n\n    const keyNode = isValidIdentifier(key) ? nId(key) : nLit(key);\n    const computed = !isValidIdentifier(key);\n    let value: ESTNode;\n\n    if (attr.value === null) {\n      value = nLit(true);\n    } else if (isStringLiteral(attr.value)) {\n      value = attr.value;\n    } else if (isJSXExpressionContainer(attr.value)) {\n      if (isJSXEmptyExpression(attr.value.expression)) continue;\n      value = containsJSXNode(attr.value.expression)\n        ? transformNestedJSX(attr.value.expression, state, nested)\n        : attr.value.expression;\n    } else {\n      continue;\n    }\n\n    propsProperties.push(nProp(keyNode, value, computed));\n  }\n\n  if (islandsDirective !== null) {\n    if (colocatedDirectiveStrategy !== null) {\n      throw new Error(\n        \"[dathra] host-level client:* directives or data-dh-island metadata cannot be combined with colocated client directives in the same component render subtree\",\n      );\n    }\n\n    if (hasExplicitReservedIslandMetadata) {\n      throw new Error(\n        `[dathra] client:* directives cannot be combined with explicit data-dh-island metadata on <${getTagName(opening.name)}>`,\n      );\n    }\n\n    propsProperties.push(\n      nProp(nLit(ISLAND_METADATA_ATTRIBUTE), nLit(islandsDirective.strategy)),\n    );\n\n    if (islandsDirective.value !== null) {\n      propsProperties.push(\n        nProp(nLit(ISLAND_VALUE_METADATA_ATTRIBUTE), islandsDirective.value),\n      );\n    }\n  }\n\n  if (colocatedDirectiveStrategy !== null) {\n    if (hasExplicitHostIslandMetadata) {\n      throw new Error(\n        \"[dathra] host-level client:* directives or data-dh-island metadata cannot be combined with colocated client directives in the same component render subtree\",\n      );\n    }\n\n    const clientActionMetadata = nObj(\n      Array.from(componentActionBindings.entries()).map(\n        ([eventType, binding]) =>\n          nProp(\n            nLit(eventType),\n            nObj([\n              nProp(nId(\"id\"), nLit(binding.id)),\n              nProp(\n                nId(\"payload\"),\n                buildComponentActionPayloadExpression(\n                  binding.captureNames,\n                  state.currentSerializableBindings,\n                ),\n              ),\n            ]),\n          ),\n      ),\n    );\n\n    propsProperties.push(\n      nProp(nLit(ISLAND_METADATA_ATTRIBUTE), nLit(colocatedDirectiveStrategy)),\n      nProp(\n        nLit(CLIENT_ACTIONS_METADATA_ATTRIBUTE),\n        nCall(nMember(nId(\"JSON\"), nId(\"stringify\")), [clientActionMetadata]),\n      ),\n    );\n\n    if (\n      colocatedDirectiveStrategy === \"interaction\" &&\n      colocatedInteractionEventType !== null\n    ) {\n      propsProperties.push(\n        nProp(\n          nLit(ISLAND_VALUE_METADATA_ATTRIBUTE),\n          nLit(colocatedInteractionEventType),\n        ),\n      );\n    }\n  }\n\n  const previousHostIslandMetadata = state.currentHostIslandMetadata;\n  const nextHostIslandMetadata =\n    previousHostIslandMetadata === true ||\n    islandsDirective !== null ||\n    colocatedDirectiveStrategy !== null ||\n    hasExplicitHostIslandMetadata;\n  state.currentHostIslandMetadata = nextHostIslandMetadata;\n\n  try {\n    const significantChildren = node.children.filter((child) => {\n      if (child.type === \"JSXText\") return child.value.trim() !== \"\";\n      if (isJSXExpressionContainer(child)) {\n        return !isJSXEmptyExpression(child.expression);\n      }\n      return true;\n    });\n\n    if (significantChildren.length > 0) {\n      const childExprs: ESTNode[] = [];\n\n      for (const child of significantChildren) {\n        if (child.type === \"JSXText\") {\n          const text = child.value.trim();\n          if (text !== \"\") childExprs.push(nLit(text));\n          continue;\n        }\n\n        if (isJSXExpressionContainer(child)) {\n          if (!isJSXEmptyExpression(child.expression)) {\n            childExprs.push(\n              containsJSXNode(child.expression)\n                ? transformNestedJSX(child.expression, state, nested)\n                : child.expression,\n            );\n          }\n          continue;\n        }\n\n        if (isJSXSpreadChild(child)) {\n          childExprs.push(transformNestedJSX(child.expression, state, nested));\n          continue;\n        }\n\n        if (isJSXElement(child)) {\n          if (isComponentTag(child.openingElement.name)) {\n            childExprs.push(buildComponentCall(child, state, nested));\n          } else {\n            childExprs.push(\n              state.mode === \"ssr\"\n                ? nested.transformJSXForSSRNode(child, state, nested)\n                : nested.transformJSXNode(child, state, nested),\n            );\n          }\n          continue;\n        }\n\n        if (isJSXFragment(child)) {\n          for (const fragChild of child.children) {\n            if (fragChild.type === \"JSXText\") {\n              const text = fragChild.value.trim();\n              if (text !== \"\") childExprs.push(nLit(text));\n              continue;\n            }\n\n            if (isJSXExpressionContainer(fragChild)) {\n              if (!isJSXEmptyExpression(fragChild.expression)) {\n                childExprs.push(\n                  containsJSXNode(fragChild.expression)\n                    ? transformNestedJSX(fragChild.expression, state, nested)\n                    : fragChild.expression,\n                );\n              }\n              continue;\n            }\n\n            if (isJSXSpreadChild(fragChild)) {\n              childExprs.push(\n                transformNestedJSX(fragChild.expression, state, nested),\n              );\n              continue;\n            }\n\n            if (isJSXElement(fragChild)) {\n              if (isComponentTag(fragChild.openingElement.name)) {\n                childExprs.push(buildComponentCall(fragChild, state, nested));\n              } else {\n                childExprs.push(\n                  state.mode === \"ssr\"\n                    ? nested.transformJSXForSSRNode(fragChild, state, nested)\n                    : nested.transformJSXNode(fragChild, state, nested),\n                );\n              }\n            }\n          }\n        }\n      }\n\n      const onlyChild = childExprs[0];\n      if (childExprs.length === 1) {\n        propsProperties.push(nProp(nId(\"children\"), onlyChild));\n      } else if (childExprs.length > 1) {\n        propsProperties.push(nProp(nId(\"children\"), nArr(childExprs)));\n      }\n    }\n\n    return {\n      type: \"CallExpression\",\n      callee: componentRef,\n      arguments: [nObj(propsProperties)],\n      optional: false,\n    };\n  } finally {\n    state.currentHostIslandMetadata = previousHostIslandMetadata;\n  }\n}\n\n/**\n * Recursively transform any JSX nodes embedded within an arbitrary expression.\n */\nfunction transformNestedJSX(\n  expr: ESTNode,\n  state: TransformState,\n  nested: NestedTransformers,\n): ESTNode {\n  return walk(expr, null, {\n    JSXElement(node: ESTNode) {\n      const el = node as JSXElement;\n      if (isComponentTag(el.openingElement.name)) {\n        return buildComponentCall(el, state, nested);\n      }\n      if (state.mode === \"ssr\") {\n        return nested.transformJSXForSSRNode(el, state, nested);\n      }\n      return nested.transformJSXNode(el, state, nested);\n    },\n    JSXFragment(node: ESTNode) {\n      if (state.mode === \"ssr\") {\n        return nested.transformJSXForSSRNode(\n          node as JSXFragment,\n          state,\n          nested,\n        );\n      }\n      return nested.transformJSXNode(node as JSXFragment, state, nested);\n    },\n  });\n}\n\n/**\n * Check if a key is an event handler.\n */\nfunction isEventHandlerKey(key: string): boolean {\n  return (\n    key.startsWith(\"on\") && key.length > 2 && key[2] === key[2].toUpperCase()\n  );\n}\n\n/**\n * Convert event key to event type.\n */\nfunction getEventType(key: string): string {\n  return key.slice(2).toLowerCase();\n}\n\n/**\n * Process JSX attributes.\n */\nfunction processAttributes(\n  attributes: (JSXAttribute | JSXSpreadAttribute)[],\n  dynamicParts: DynamicPart[],\n  path: number[],\n  state: TransformState,\n  colocatedClientState: ColocatedClientState,\n): ProcessedAttributes {\n  const staticProps: ESTNode[] = [];\n  const events: { type: string; handler: ESTNode }[] = [];\n\n  for (const attr of attributes) {\n    if (attr.type === \"JSXSpreadAttribute\") {\n      dynamicParts.push({ type: \"spread\", path, expression: attr.argument });\n      continue;\n    }\n\n    if (getIslandsDirectiveName(attr.name) !== null) {\n      throw new Error(\n        \"[dathra] client:* directives are only supported on component elements\",\n      );\n    }\n\n    const colocatedClientDirective = getColocatedClientDirective(attr.name);\n    if (colocatedClientDirective !== null) {\n      const value = attr.value;\n      const rawName = getRawAttributeNameForDiagnostics(attr.name);\n      if (\n        shouldRejectColocatedDirectiveInNamespace(state.currentElementNamespace)\n      ) {\n        throw new Error(\n          `[dathra] ${getRawAttributeNameForDiagnostics(attr.name)} is only supported on HTML elements`,\n        );\n      }\n\n      if (\n        value === null ||\n        !isJSXExpressionContainer(value) ||\n        isJSXEmptyExpression(value.expression)\n      ) {\n        throw new Error(\n          `[dathra] ${rawName} requires an inline handler expression`,\n        );\n      }\n\n      assertNoHostIslandsMixing(\n        state.currentHostIslandMetadata,\n        colocatedClientDirective.strategy,\n      );\n\n      if (\n        colocatedClientState.strategy !== null &&\n        colocatedClientState.strategy !== colocatedClientDirective.strategy\n      ) {\n        throw new Error(\n          \"[dathra] Mixed colocated client strategies are not supported in one JSX root\",\n        );\n      }\n\n      if (\n        colocatedClientDirective.strategy === \"interaction\" &&\n        colocatedClientState.interactionEventType !== null &&\n        colocatedClientState.interactionEventType !==\n          colocatedClientDirective.event\n      ) {\n        throw new Error(\n          \"[dathra] Mixed colocated interaction event types are not supported in one JSX root\",\n        );\n      }\n\n      colocatedClientState.strategy = colocatedClientDirective.strategy;\n      if (colocatedClientDirective.strategy === \"interaction\") {\n        colocatedClientState.interactionEventType =\n          colocatedClientDirective.event;\n      }\n      const targetId = createClientTargetId(state);\n      staticProps.push(\n        nProp(nLit(CLIENT_TARGET_METADATA_ATTRIBUTE), nLit(targetId)),\n        nProp(\n          nLit(CLIENT_STRATEGY_METADATA_ATTRIBUTE),\n          nLit(colocatedClientDirective.strategy),\n        ),\n      );\n      if (\n        colocatedClientDirective.strategy === \"interaction\" &&\n        colocatedClientDirective.event !== DEFAULT_INTERACTION_EVENT_TYPE\n      ) {\n        staticProps.push(\n          nProp(\n            nLit(CLIENT_EVENT_METADATA_ATTRIBUTE),\n            nLit(colocatedClientDirective.event),\n          ),\n        );\n      }\n      events.push({\n        type: colocatedClientDirective.event,\n        handler: value.expression,\n      });\n      continue;\n    }\n\n    const unsupportedColocatedDirectiveError =\n      getUnsupportedColocatedDirectiveError(attr.name);\n    if (unsupportedColocatedDirectiveError !== null) {\n      throw new Error(`[dathra] ${unsupportedColocatedDirectiveError}`);\n    }\n\n    if (isClientDirectiveNamespace(attr.name)) {\n      throwUnknownClientDirective(attr.name);\n    }\n\n    const key = getAttributeName(attr.name);\n\n    const reservedClientMetadataError = getReservedClientMetadataError(key);\n    if (reservedClientMetadataError !== null) {\n      throw new Error(reservedClientMetadataError);\n    }\n\n    const keyNode = isValidIdentifier(key) ? nId(key) : nLit(key);\n    const computed = !isValidIdentifier(key);\n    const value = attr.value;\n\n    if (value === null) {\n      staticProps.push(nProp(keyNode, nLit(true), computed));\n      continue;\n    }\n\n    if (isStringLiteral(value)) {\n      staticProps.push(nProp(keyNode, value, computed));\n      continue;\n    }\n\n    if (isJSXExpressionContainer(value)) {\n      const expr = value.expression;\n      if (isJSXEmptyExpression(expr)) continue;\n\n      if (isEventHandlerKey(key)) {\n        events.push({ type: getEventType(key), handler: expr });\n      } else if (containsReactiveAccess(expr)) {\n        dynamicParts.push({ type: \"attr\", path, expression: expr, key });\n      } else {\n        dynamicParts.push({ type: \"attr\", path, expression: expr, key });\n      }\n    }\n  }\n\n  return {\n    attrs: staticProps.length > 0 ? nObj(staticProps) : nLit(null),\n    events,\n  };\n}\n\n/**\n * Convert a single JSX element to a tree node result.\n */\nfunction jsxElementToTree(\n  node: JSXElement,\n  state: TransformState,\n  dynamicParts: DynamicPart[],\n  path: number[],\n  nested: NestedTransformers,\n): TreeResult {\n  const opening = node.openingElement;\n  const tagName = getTagName(opening.name);\n  const previousElementNamespace = state.currentElementNamespace;\n  const nextElementNamespace =\n    previousElementNamespace === \"html\"\n      ? getElementNamespace(tagName)\n      : previousElementNamespace;\n  state.currentElementNamespace = nextElementNamespace;\n\n  try {\n    const { attrs, events } = processAttributes(\n      opening.attributes,\n      dynamicParts,\n      path,\n      state,\n      state.currentColocatedClientState ?? {\n        strategy: null,\n        interactionEventType: null,\n      },\n    );\n\n    const children = processChildren(\n      node.children,\n      state,\n      dynamicParts,\n      path,\n      nested,\n    );\n\n    const treeElements: ESTNode[] = [\n      nLit(tagName),\n      attrs,\n      ...children.map((c) => c.tree),\n    ];\n\n    for (const evt of events) {\n      dynamicParts.push({\n        type: \"event\",\n        path,\n        expression: evt.handler,\n        key: evt.type,\n      });\n    }\n\n    return {\n      tree: nArr(treeElements),\n      // Dynamic parts are collected via the `dynamicParts` parameter (by reference).\n      // The returned array is unused by callers; kept empty for TreeResult conformance.\n      dynamicParts: [],\n    };\n  } finally {\n    state.currentElementNamespace = previousElementNamespace;\n  }\n}\n\n/**\n * Process JSX children into tree results.\n */\nfunction processChildren(\n  children: JSXChild[],\n  state: TransformState,\n  dynamicParts: DynamicPart[],\n  parentPath: number[],\n  nested: NestedTransformers,\n): TreeResult[] {\n  const results: TreeResult[] = [];\n  let childIndex = 0;\n\n  for (const child of children) {\n    if (child.type === \"JSXText\") {\n      const text = child.value.trim();\n      if (text !== \"\") {\n        results.push({ tree: nLit(text), dynamicParts: [] });\n        childIndex++;\n      }\n      continue;\n    }\n\n    if (isJSXElement(child)) {\n      if (isComponentTag(child.openingElement.name)) {\n        dynamicParts.push({\n          type: \"insert\",\n          isComponent: true,\n          path: [...parentPath, childIndex],\n          expression: buildComponentCall(child, state, nested),\n        });\n        results.push({\n          tree: nArr([nLit(\"{insert}\"), nLit(null)]),\n          dynamicParts: [],\n        });\n        childIndex++;\n        continue;\n      }\n\n      const childPath = [...parentPath, childIndex];\n      results.push(\n        jsxElementToTree(child, state, dynamicParts, childPath, nested),\n      );\n      childIndex++;\n      continue;\n    }\n\n    if (isJSXFragment(child)) {\n      const processed = processChildren(\n        child.children,\n        state,\n        dynamicParts,\n        parentPath,\n        nested,\n      );\n      results.push(...processed);\n      childIndex += processed.length;\n      continue;\n    }\n\n    if (isJSXSpreadChild(child)) {\n      dynamicParts.push({\n        type: \"insert\",\n        path: [...parentPath, childIndex],\n        expression: transformNestedJSX(child.expression, state, nested),\n      });\n      results.push({\n        tree: nArr([nLit(\"{insert}\"), nLit(null)]),\n        dynamicParts: [],\n      });\n      childIndex++;\n      continue;\n    }\n\n    if (isJSXExpressionContainer(child)) {\n      const expr = child.expression;\n      if (isJSXEmptyExpression(expr)) continue;\n\n      if (isMapCallExpression(expr)) {\n        dynamicParts.push({\n          type: \"insert\",\n          path: [...parentPath, childIndex],\n          expression: transformNestedJSX(expr, state, nested),\n        });\n        results.push({\n          tree: nArr([nLit(\"{each}\"), nLit(null)]),\n          dynamicParts: [],\n        });\n        childIndex++;\n        continue;\n      }\n\n      if (isCallExpression(expr) || expr.type === \"ConditionalExpression\") {\n        dynamicParts.push({\n          type: \"insert\",\n          path: [...parentPath, childIndex],\n          expression: transformNestedJSX(expr, state, nested),\n        });\n        results.push({\n          tree: nArr([nLit(\"{insert}\"), nLit(null)]),\n          dynamicParts: [],\n        });\n        childIndex++;\n        continue;\n      }\n\n      if (expr.type === \"LogicalExpression\" || containsJSXNode(expr)) {\n        dynamicParts.push({\n          type: \"insert\",\n          path: [...parentPath, childIndex],\n          expression: transformNestedJSX(expr, state, nested),\n        });\n        results.push({\n          tree: nArr([nLit(\"{insert}\"), nLit(null)]),\n          dynamicParts: [],\n        });\n        childIndex++;\n        continue;\n      }\n\n      dynamicParts.push({\n        type: \"text\",\n        path: [...parentPath, childIndex],\n        expression: expr,\n      });\n      results.push({\n        tree: nArr([nLit(\"{text}\"), nLit(null)]),\n        dynamicParts: [],\n      });\n      childIndex++;\n    }\n  }\n\n  return results;\n}\n\n/**\n * Convert JSX element/fragment to structured array tree.\n */\nfunction jsxToTree(\n  node: JSXElement | JSXFragment,\n  state: TransformState,\n  nested: NestedTransformers,\n): { tree: ESTNode; dynamicParts: DynamicPart[] } {\n  const dynamicParts: DynamicPart[] = [];\n  const scopedState = state;\n  const previousColocatedClientState = scopedState.currentColocatedClientState;\n  const previousHostIslandMetadata = scopedState.currentHostIslandMetadata;\n  const previousElementNamespace = scopedState.currentElementNamespace;\n  const colocatedClientState = previousColocatedClientState ?? {\n    strategy: null,\n    interactionEventType: null,\n  };\n  scopedState.currentColocatedClientState = colocatedClientState;\n  scopedState.currentHostIslandMetadata = previousHostIslandMetadata ?? false;\n  scopedState.currentElementNamespace = previousElementNamespace ?? \"html\";\n\n  if (node.type === \"JSXFragment\") {\n    const children = processChildren(\n      node.children,\n      scopedState,\n      dynamicParts,\n      [],\n      nested,\n    );\n    const result = {\n      tree: nArr(children.map((c) => c.tree)),\n      dynamicParts,\n    };\n    scopedState.currentColocatedClientState = previousColocatedClientState;\n    scopedState.currentHostIslandMetadata = previousHostIslandMetadata;\n    scopedState.currentElementNamespace = previousElementNamespace;\n    return result;\n  }\n\n  const result = jsxElementToTree(node, scopedState, dynamicParts, [0], nested);\n  scopedState.currentColocatedClientState = previousColocatedClientState;\n  scopedState.currentHostIslandMetadata = previousHostIslandMetadata;\n  scopedState.currentElementNamespace = previousElementNamespace;\n  return { tree: nArr([result.tree]), dynamicParts };\n}\n\nfunction isMapCallExpression(expr: ESTNode): expr is CallExpression {\n  if (!isCallExpression(expr)) return false;\n  if (!isMemberExpression(expr.callee)) return false;\n  const method = expr.callee.property;\n  return isIdentifier(method) && method.name === \"map\";\n}\n\nfunction containsJSXNode(expr: ESTNode): boolean {\n  if (expr.type === \"JSXElement\" || expr.type === \"JSXFragment\") {\n    return true;\n  }\n\n  let found = false;\n  walk(expr, null, {\n    JSXElement() {\n      found = true;\n    },\n    JSXFragment() {\n      found = true;\n    },\n  });\n\n  return found;\n}\n\nfunction getAttributeName(name: JSXAttribute[\"name\"]): string {\n  if (name.type === \"JSXIdentifier\") {\n    return name.name;\n  }\n\n  return `${name.namespace.name}:${name.name.name}`;\n}\n\nfunction isJSXElement(node: ESTNode): node is JSXElement {\n  return node.type === \"JSXElement\";\n}\n\nfunction isJSXFragment(node: ESTNode): node is JSXFragment {\n  return node.type === \"JSXFragment\";\n}\n\nfunction isJSXExpressionContainer(\n  node: ESTNode,\n): node is JSXExpressionContainer {\n  return node.type === \"JSXExpressionContainer\";\n}\n\nfunction isJSXEmptyExpression(node: ESTNode): node is JSXEmptyExpression {\n  return node.type === \"JSXEmptyExpression\";\n}\n\nfunction isJSXSpreadChild(node: ESTNode): node is JSXSpreadChild {\n  return node.type === \"JSXSpreadChild\";\n}\n\nexport {\n  buildComponentCall,\n  containsReactiveAccess,\n  jsxElementToTree,\n  jsxToTree,\n  processAttributes,\n  processChildren,\n};\nexport type {\n  DynamicPart,\n  NestedTransformers,\n  ProcessedAttributes,\n  TreeResult,\n};\n","import {\n  nArrowBlock,\n  nBlock,\n  nCall,\n  nConst,\n  nExprStmt,\n  nId,\n  nLit,\n  nMember,\n  nObj,\n  nProp,\n  nReturn,\n  type ESTNode,\n} from \"@/transform/ast/implementation\";\nimport {\n  getTagName,\n  type JSXElement,\n  type JSXFragment,\n} from \"@/transform/jsx/implementation\";\nimport { generateNavigation } from \"@/transform/navigation/implementation\";\nimport {\n  createTemplateId,\n  type TransformState,\n} from \"@/transform/state/implementation\";\nimport {\n  readStaticTreeRoots,\n  serializeMarkupNode,\n} from \"@/transform/staticTree/implementation\";\nimport {\n  containsReactiveAccess,\n  jsxToTree,\n  type NestedTransformers,\n} from \"@/transform/tree/implementation\";\n\n/**\n * Namespace enum values matching @dathra/runtime Namespace const enum.\n * Duplicated here to avoid a runtime dependency from transformer.\n */\ntype Namespace = 0 | 1 | 2;\n\nfunction getTemplateNamespace(\n  node: JSXElement | JSXFragment,\n  inheritedNamespace: \"html\" | \"svg\" | \"math\",\n): Namespace {\n  if (node.type === \"JSXFragment\") {\n    return inheritedNamespace === \"svg\"\n      ? 1\n      : inheritedNamespace === \"math\"\n        ? 2\n        : 0;\n  }\n\n  const tagName = getTagName(node.openingElement.name);\n  if (tagName === \"svg\") {\n    return 1;\n  }\n\n  if (tagName === \"math\") {\n    return 2;\n  }\n\n  return inheritedNamespace === \"svg\"\n    ? 1\n    : inheritedNamespace === \"math\"\n      ? 2\n      : 0;\n}\n\nfunction buildCompiledTemplateDescriptor(\n  tree: ESTNode,\n  namespace: Namespace,\n): ESTNode | null {\n  const roots = readStaticTreeRoots(tree);\n  if (roots === null) {\n    return null;\n  }\n\n  const textPlaceholderId = { current: 0 };\n  const markup = roots\n    .map((root) =>\n      serializeMarkupNode(\n        root,\n        namespace === 1 ? \"svg\" : namespace === 2 ? \"math\" : \"html\",\n        textPlaceholderId,\n      ),\n    )\n    .join(\"\");\n\n  return nObj([\n    nProp(nId(\"kind\"), nLit(\"compiled\")),\n    nProp(nId(\"markup\"), nLit(markup)),\n    nProp(nId(\"namespace\"), nLit(namespace)),\n  ]);\n}\n\n/**\n * Transform a JSX element/fragment node to CSR DOM code.\n */\nfunction transformJSXNode(\n  node: JSXElement | JSXFragment,\n  state: TransformState,\n  nested: NestedTransformers,\n): ESTNode {\n  const inheritedNamespace = state.currentElementNamespace ?? \"html\";\n  const { tree, dynamicParts } = jsxToTree(node, state, nested);\n\n  const templateId = createTemplateId(state);\n  state.runtimeImports.add(\"fromTree\");\n\n  const compiledTemplateDescriptor = buildCompiledTemplateDescriptor(\n    tree,\n    getTemplateNamespace(node, inheritedNamespace),\n  );\n\n  state.templates.push(\n    nConst(\n      templateId,\n      nCall(nId(\"fromTree\"), [compiledTemplateDescriptor ?? tree, nLit(0)]),\n    ),\n  );\n\n  const setupStatements: ESTNode[] = [];\n  const fragmentId = nId(\"_f\");\n  setupStatements.push(nConst(fragmentId, nCall(templateId, [])));\n\n  const nodeDeclarations: ESTNode[] = [];\n  const updateStatements: ESTNode[] = [];\n  const declaredNodeIds = new Set<string>();\n\n  function ensureNodeDeclaration(path: number[]): ESTNode {\n    const nodeName = `_n${path.join(\"_\")}`;\n    const nodeId = nId(nodeName);\n\n    if (!declaredNodeIds.has(nodeName)) {\n      declaredNodeIds.add(nodeName);\n      nodeDeclarations.push(\n        nConst(nodeId, generateNavigation(fragmentId, path, state)),\n      );\n    }\n\n    return nodeId;\n  }\n\n  for (const part of dynamicParts) {\n    const nodeId = ensureNodeDeclaration(part.path);\n\n    switch (part.type) {\n      case \"text\": {\n        state.runtimeImports.add(\"setText\");\n        state.runtimeImports.add(\"templateEffect\");\n\n        updateStatements.push(\n          nExprStmt(\n            nCall(nId(\"templateEffect\"), [\n              nArrowBlock(\n                [],\n                nBlock([\n                  nExprStmt(nCall(nId(\"setText\"), [nodeId, part.expression])),\n                ]),\n              ),\n            ]),\n          ),\n        );\n        break;\n      }\n\n      case \"attr\": {\n        state.runtimeImports.add(\"setAttr\");\n\n        const attrUpdate = nExprStmt(\n          nCall(nId(\"setAttr\"), [nodeId, nLit(part.key), part.expression]),\n        );\n\n        if (containsReactiveAccess(part.expression)) {\n          state.runtimeImports.add(\"templateEffect\");\n          updateStatements.push(\n            nExprStmt(\n              nCall(nId(\"templateEffect\"), [\n                nArrowBlock([], nBlock([attrUpdate])),\n              ]),\n            ),\n          );\n        } else {\n          updateStatements.push(attrUpdate);\n        }\n        break;\n      }\n\n      case \"event\": {\n        state.runtimeImports.add(\"event\");\n\n        updateStatements.push(\n          nExprStmt(\n            nCall(nId(\"event\"), [nLit(part.key), nodeId, part.expression]),\n          ),\n        );\n        break;\n      }\n\n      case \"insert\": {\n        state.runtimeImports.add(\"insert\");\n\n        if (part.isComponent === true) {\n          updateStatements.push(\n            nExprStmt(\n              nCall(nId(\"insert\"), [\n                nMember(nodeId, nId(\"parentNode\")),\n                part.expression,\n                nodeId,\n              ]),\n            ),\n          );\n        } else {\n          state.runtimeImports.add(\"templateEffect\");\n          updateStatements.push(\n            nExprStmt(\n              nCall(nId(\"templateEffect\"), [\n                nArrowBlock(\n                  [],\n                  nBlock([\n                    nExprStmt(\n                      nCall(nId(\"insert\"), [\n                        nMember(nodeId, nId(\"parentNode\")),\n                        part.expression,\n                        nodeId,\n                      ]),\n                    ),\n                  ]),\n                ),\n              ]),\n            ),\n          );\n        }\n        break;\n      }\n\n      case \"spread\": {\n        state.runtimeImports.add(\"spread\");\n        state.runtimeImports.add(\"templateEffect\");\n\n        updateStatements.push(\n          nExprStmt(\n            nCall(nId(\"templateEffect\"), [\n              nArrowBlock(\n                [],\n                nBlock([\n                  nExprStmt(nCall(nId(\"spread\"), [nodeId, part.expression])),\n                ]),\n              ),\n            ]),\n          ),\n        );\n        break;\n      }\n    }\n  }\n\n  setupStatements.push(...nodeDeclarations);\n  setupStatements.push(...updateStatements);\n  setupStatements.push(nReturn(fragmentId));\n  return nCall(nArrowBlock([], nBlock(setupStatements)), []);\n}\n\nexport { transformJSXNode };\n","import {\n  nArr,\n  nCall,\n  nId,\n  nLit,\n  nMember,\n  nNew,\n  nObj,\n  type ESTNode,\n} from \"@/transform/ast/implementation\";\nimport type { JSXElement, JSXFragment } from \"@/transform/jsx/implementation\";\nimport type { TransformState } from \"@/transform/state/implementation\";\nimport {\n  hasCustomElement,\n  isHtmlVoidElement,\n  readStaticTreeRoots,\n  serializeStaticAttrs,\n  type StaticTreeNode,\n} from \"@/transform/staticTree/implementation\";\nimport {\n  jsxToTree,\n  type NestedTransformers,\n} from \"@/transform/tree/implementation\";\n\nfunction escapeHtml(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\");\n}\n\nfunction mergeStaticPart(parts: ESTNode[], value: string): void {\n  if (value === \"\") {\n    return;\n  }\n\n  const previous = parts.at(-1);\n  if (\n    previous?.type === \"Literal\" &&\n    typeof previous.value === \"string\" &&\n    typeof previous.raw === \"string\"\n  ) {\n    previous.value += value;\n    previous.raw = JSON.stringify(previous.value);\n    return;\n  }\n\n  parts.push(nLit(value));\n}\n\nfunction buildJoinedExpression(parts: ESTNode[]): ESTNode {\n  if (parts.length === 0) {\n    return nLit(\"\");\n  }\n\n  if (parts.length === 1) {\n    return parts[0];\n  }\n\n  return nCall(nMember(nArr(parts), nId(\"join\")), [nLit(\"\")]);\n}\n\nfunction buildLegacyRenderCall(\n  tree: ESTNode,\n  dynamicParts: Array<{ type: string; expression: ESTNode }>,\n  state: TransformState,\n): ESTNode {\n  state.runtimeImports.add(\"renderToString\");\n\n  const markerDynamicParts = dynamicParts.filter(\n    (part) => part.type === \"text\" || part.type === \"insert\",\n  );\n  const nonMarkerDynamicParts = dynamicParts.filter(\n    (part) => part.type === \"attr\" || part.type === \"spread\",\n  );\n\n  const dynamicValueEntries: ESTNode[] = [];\n  let dynamicId = 1;\n\n  for (const part of markerDynamicParts) {\n    dynamicValueEntries.push(nArr([nLit(dynamicId), part.expression]));\n    dynamicId += 1;\n  }\n\n  for (const part of nonMarkerDynamicParts) {\n    dynamicValueEntries.push(nArr([nLit(dynamicId), part.expression]));\n    dynamicId += 1;\n  }\n\n  const dynamicValuesMap = nNew(nId(\"Map\"), [nArr(dynamicValueEntries)]);\n  return nCall(nId(\"renderToString\"), [tree, nObj([]), dynamicValuesMap]);\n}\n\nfunction transformJSXForSSRNode(\n  node: JSXElement | JSXFragment,\n  state: TransformState,\n  nested: NestedTransformers,\n): ESTNode {\n  const inheritedNamespace = state.currentElementNamespace ?? \"html\";\n  const { tree, dynamicParts } = jsxToTree(node, state, nested);\n  const roots = readStaticTreeRoots(tree);\n  if (roots === null || roots.some(hasCustomElement)) {\n    return buildLegacyRenderCall(tree, dynamicParts, state);\n  }\n\n  const markerDynamicParts = dynamicParts.filter(\n    (part) => part.type === \"text\" || part.type === \"insert\",\n  );\n  let markerIndex = 0;\n  let markerId = 1;\n  const parts: ESTNode[] = [];\n\n  function serializeNode(\n    currentNode: StaticTreeNode,\n    path: number[],\n    namespace: \"html\" | \"svg\" | \"math\",\n  ): void {\n    if (typeof currentNode === \"string\") {\n      mergeStaticPart(parts, escapeHtml(currentNode));\n      return;\n    }\n\n    if (\"kind\" in currentNode) {\n      const currentMarkerId = markerId;\n      markerId += 1;\n      const binding = markerDynamicParts[markerIndex];\n      markerIndex += 1;\n\n      if (currentNode.kind === \"text\") {\n        if (binding.type !== \"text\") {\n          return;\n        }\n\n        state.runtimeImports.add(\"renderDynamicText\");\n        mergeStaticPart(parts, `<!--dh:t:${currentMarkerId}-->`);\n        parts.push(nCall(nId(\"renderDynamicText\"), [binding.expression]));\n        mergeStaticPart(parts, \"<!---->\");\n        return;\n      }\n\n      if (binding.type !== \"insert\") {\n        return;\n      }\n\n      if (currentNode.kind === \"each\") {\n        state.runtimeImports.add(\"renderDynamicEach\");\n        mergeStaticPart(parts, `<!--dh:b:${currentMarkerId}-->`);\n        parts.push(nCall(nId(\"renderDynamicEach\"), [binding.expression]));\n        mergeStaticPart(parts, \"<!--/dh:b-->\");\n        return;\n      }\n\n      state.runtimeImports.add(\"renderDynamicInsert\");\n      mergeStaticPart(parts, `<!--dh:i:${currentMarkerId}-->`);\n      parts.push(nCall(nId(\"renderDynamicInsert\"), [binding.expression]));\n      mergeStaticPart(parts, \"<!--/dh:i-->\");\n      return;\n    }\n\n    const nextNamespace =\n      currentNode.tag === \"svg\"\n        ? \"svg\"\n        : currentNode.tag === \"math\"\n          ? \"math\"\n          : namespace;\n\n    mergeStaticPart(\n      parts,\n      `<${currentNode.tag}${serializeStaticAttrs(currentNode.attrs)}`,\n    );\n\n    for (const dynamicPart of dynamicParts) {\n      if (dynamicPart.path.join(\".\") !== path.join(\".\")) {\n        continue;\n      }\n\n      if (dynamicPart.type === \"attr\") {\n        state.runtimeImports.add(\"renderDynamicAttr\");\n        parts.push(\n          nCall(nId(\"renderDynamicAttr\"), [\n            nLit(dynamicPart.key),\n            dynamicPart.expression,\n          ]),\n        );\n      }\n\n      if (dynamicPart.type === \"spread\") {\n        state.runtimeImports.add(\"renderDynamicSpread\");\n        parts.push(nCall(nId(\"renderDynamicSpread\"), [dynamicPart.expression]));\n      }\n    }\n\n    if (namespace === \"html\" && isHtmlVoidElement(currentNode.tag)) {\n      mergeStaticPart(parts, \" />\");\n      return;\n    }\n\n    mergeStaticPart(parts, \">\");\n    currentNode.children.forEach((child, index) => {\n      serializeNode(child, [...path, index], nextNamespace);\n    });\n    mergeStaticPart(parts, `</${currentNode.tag}>`);\n  }\n\n  roots.forEach((root, index) => {\n    serializeNode(root, [index], inheritedNamespace);\n  });\n\n  return buildJoinedExpression(parts);\n}\n\nexport { transformJSXForSSRNode };\n","import {\n  nImport,\n  nImportSpecifier,\n  type Program,\n} from \"@/transform/ast/implementation\";\n\ntype RuntimeImportName =\n  | \"fromTree\"\n  | \"firstChild\"\n  | \"nextSibling\"\n  | \"setText\"\n  | \"setAttr\"\n  | \"setProp\"\n  | \"spread\"\n  | \"event\"\n  | \"templateEffect\"\n  | \"createRoot\"\n  | \"reconcile\"\n  | \"insert\"\n  | \"renderToString\"\n  | \"renderTree\"\n  | \"renderDynamicAttr\"\n  | \"renderDynamicEach\"\n  | \"renderDynamicInsert\"\n  | \"renderDynamicSpread\"\n  | \"renderDynamicText\"\n  | \"serializeState\"\n  | \"registerClientAction\"\n  | \"createMarker\"\n  | \"MarkerType\";\n\n/**\n * Add runtime imports to the program body.\n */\nfunction addRuntimeImports(\n  program: Program,\n  imports: Set<RuntimeImportName>,\n  runtimeModule: string,\n): void {\n  if (imports.size === 0) return;\n\n  const specifiers = Array.from(imports).map((name) => nImportSpecifier(name));\n  const importDecl = nImport(specifiers, runtimeModule);\n\n  let insertIndex = 0;\n  for (let i = 0; i < program.body.length; i++) {\n    const statement = program.body[i];\n    if (statement.type === \"ImportDeclaration\") {\n      insertIndex = i + 1;\n    } else {\n      break;\n    }\n  }\n\n  program.body.splice(insertIndex, 0, importDecl);\n}\n\nexport { addRuntimeImports };\nexport type { RuntimeImportName };\n","import { parseSync } from \"oxc-parser\";\nimport { print } from \"esrap\";\nimport ts from \"esrap/languages/ts\";\nimport { walk } from \"zimmerframe\";\nimport { ISLAND_METADATA_ATTRIBUTE } from \"@dathra/shared\";\n\nimport {\n  isCallExpression,\n  isIdentifier,\n  isMemberExpression,\n  isStringLiteral,\n  nArr,\n  nArrowBlock,\n  nBlock,\n  nCall,\n  nExprStmt,\n  nId,\n  nLit,\n  nMember,\n  nObj,\n  nProp,\n  nReturn,\n  type ESTNode,\n  type Program,\n} from \"@/transform/ast/implementation\";\nimport {\n  getColocatedClientDirective,\n  getTagName,\n  isComponentTag,\n  type JSXElement,\n  type JSXFragment,\n} from \"@/transform/jsx/implementation\";\nimport { transformJSXNode } from \"@/transform/mode-csr/implementation\";\nimport { transformJSXForSSRNode } from \"@/transform/mode-ssr/implementation\";\nimport { addRuntimeImports } from \"@/transform/runtimeImports/implementation\";\nimport { createInitialState } from \"@/transform/state/implementation\";\nimport {\n  buildComponentCall,\n  jsxToTree,\n  type DynamicPart,\n  type NestedTransformers,\n} from \"@/transform/tree/implementation\";\n\nimport type { TransformOptions, TransformResult } from \"../types\";\n\nconst RESERVED_BINDING_NAMES = new Set([\"__dh_host\", \"__dh_ctx\"]);\n\ninterface FunctionLikeNode extends ESTNode {\n  params?: ESTNode[];\n  body: ESTNode;\n}\n\ninterface CollectedComponentPlan {\n  bodyIndex: number;\n  declarationIndex: number;\n  metadata: ESTNode;\n}\n\ninterface ComponentRenderAnalysis {\n  jsxRoot: JSXElement | JSXFragment;\n  paramPattern: ESTNode | null;\n  preludeStatements: ESTNode[];\n}\n\ninterface FunctionRenderFrame {\n  paramPatterns: ESTNode[];\n  preludeStatements: ESTNode[];\n  returnExpression: ESTNode | null;\n}\n\ninterface ComponentHydrationBuildResult {\n  metadata: ESTNode;\n}\n\ntype HelperLookup = ReadonlyMap<string, ESTNode>;\n\ninterface ResolvedHelperCall {\n  helperName: string;\n  helperNode: ESTNode;\n  helperFrame: FunctionRenderFrame;\n  callArguments: ESTNode[];\n}\n\ninterface TransparentThunkWrapperResolution {\n  readonly thunkArgumentIndex: number;\n  readonly thunkFunction: ESTNode;\n}\n\ninterface HelperChainResolution {\n  rootFrame: FunctionRenderFrame;\n  helperFrames: Array<{\n    helperName: string;\n    helperFrame: FunctionRenderFrame;\n    callArguments: ESTNode[];\n  }>;\n}\n\ninterface RenameState {\n  usedNames: Set<string>;\n}\n\ninterface ResolvedRenderAnalysis {\n  analysis: ComponentRenderAnalysis;\n  usedHelper: boolean;\n}\n\ninterface WalkTransformState {\n  inJSX: boolean;\n  serializableBindings: Map<string, ESTNode>;\n}\n\nconst KNOWN_IMPORTED_TRANSPARENT_THUNK_WRAPPERS = new Map<\n  string,\n  ReadonlySet<string>\n>([\n  [\"@dathra/core\", new Set([\"withStore\"])],\n  [\"@dathra/store\", new Set([\"withStore\"])],\n]);\n\n/**\n * Adapt an oxc-parser Program to our internal ESTNode representation.\n *\n * oxc-parser outputs `@oxc-project/types.Program` which is structurally\n * compatible with `ESTNode` at runtime but lacks the index signature\n * `[key: string]: unknown`.  We validate the structural contract and\n * return the same object typed as `ESTNode`.\n */\nfunction adaptParsedProgram(\n  program: ReturnType<typeof parseSync>[\"program\"],\n): ESTNode {\n  /* c8 ignore next @preserve -- defensive guard: oxc-parser always returns a valid Program node */\n  if (!(\"type\" in program)) {\n    throw new TypeError(\"Expected an ESTree-compatible Program node\");\n  }\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- boundary between oxc-parser types and internal ESTNode\n  return program as unknown as ESTNode;\n}\n\nfunction toPrintableProgram(program: Program): Parameters<typeof print>[0] {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- internal ESTree-like program is structurally compatible with esrap's expected node type\n  return program as unknown as Parameters<typeof print>[0];\n}\n\nfunction isJSXElement(node: ESTNode): node is JSXElement {\n  return node.type === \"JSXElement\";\n}\n\nfunction isJSXFragment(node: ESTNode): node is JSXFragment {\n  return node.type === \"JSXFragment\";\n}\n\nfunction isFunctionLikeNode(\n  node: ESTNode | null | undefined,\n): node is FunctionLikeNode {\n  return (\n    node?.type === \"ArrowFunctionExpression\" ||\n    node?.type === \"FunctionExpression\"\n  );\n}\n\nfunction isBlockStatement(\n  node: ESTNode | null | undefined,\n): node is ESTNode & { body: ESTNode[] } {\n  return node?.type === \"BlockStatement\" && Array.isArray(node.body);\n}\n\nfunction isIfStatement(node: ESTNode | null | undefined): node is ESTNode & {\n  test: ESTNode | null;\n  consequent: ESTNode;\n  alternate: ESTNode | null;\n} {\n  return node?.type === \"IfStatement\";\n}\n\nfunction isReturnStatement(\n  node: ESTNode | null | undefined,\n): node is ESTNode & { argument: ESTNode | null } {\n  return node?.type === \"ReturnStatement\";\n}\n\nfunction isVariableDeclaration(\n  node: ESTNode | null | undefined,\n): node is ESTNode & {\n  declarations: Array<{ id: ESTNode; init?: ESTNode | null }>;\n} {\n  return (\n    node?.type === \"VariableDeclaration\" && Array.isArray(node.declarations)\n  );\n}\n\nfunction isExportNamedDeclaration(\n  node: ESTNode | null | undefined,\n): node is ESTNode & {\n  declaration?: ESTNode | null;\n} {\n  return node?.type === \"ExportNamedDeclaration\";\n}\n\nfunction isFunctionDeclaration(\n  node: ESTNode | null | undefined,\n): node is ESTNode & {\n  id?: ESTNode | null;\n  params?: ESTNode[];\n  body: ESTNode;\n} {\n  return node?.type === \"FunctionDeclaration\";\n}\n\nfunction isDefineComponentCall(\n  node: ESTNode | null | undefined,\n): node is ESTNode & {\n  arguments: ESTNode[];\n} {\n  if (node === null || node === undefined || !isCallExpression(node)) {\n    return false;\n  }\n\n  return isIdentifier(node.callee) && node.callee.name === \"defineComponent\";\n}\n\nfunction cloneNode<T>(value: T): T {\n  return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction isVariableDeclarationStatement(node: ESTNode): node is ESTNode & {\n  declarations: Array<{ id: ESTNode; init?: ESTNode | null }>;\n} {\n  return (\n    node.type === \"VariableDeclaration\" && Array.isArray(node.declarations)\n  );\n}\n\nfunction isFunctionDeclarationStatement(node: ESTNode): node is ESTNode & {\n  id?: ESTNode | null;\n  params?: ESTNode[];\n  body: ESTNode;\n} {\n  return node.type === \"FunctionDeclaration\";\n}\n\nfunction isImportDeclaration(\n  node: ESTNode | null | undefined,\n): node is ESTNode & {\n  specifiers?: ESTNode[];\n  source: ESTNode;\n} {\n  return node?.type === \"ImportDeclaration\";\n}\n\nfunction isESTNode(value: unknown): value is ESTNode {\n  return typeof value === \"object\" && value !== null && \"type\" in value;\n}\n\nfunction isComputedProperty(value: unknown): value is true {\n  return value === true;\n}\n\nfunction isParenthesizedExpression(node: ESTNode): node is ESTNode & {\n  expression: ESTNode;\n} {\n  return node.type === \"ParenthesizedExpression\" && isESTNode(node.expression);\n}\n\nfunction collectBindingNames(\n  pattern: ESTNode,\n  names: Set<string> = new Set(),\n): Set<string> {\n  if (isIdentifier(pattern)) {\n    names.add(pattern.name);\n    return names;\n  }\n\n  if (pattern.type === \"ObjectPattern\") {\n    for (const property of pattern.properties as ESTNode[]) {\n      if (property.type === \"Property\") {\n        collectBindingNames(property.value as ESTNode, names);\n      } else if (property.type === \"RestElement\") {\n        collectBindingNames(property.argument as ESTNode, names);\n      }\n    }\n    return names;\n  }\n\n  if (pattern.type === \"ArrayPattern\") {\n    for (const element of pattern.elements as Array<ESTNode | null>) {\n      if (element !== null) {\n        collectBindingNames(element, names);\n      }\n    }\n    return names;\n  }\n\n  if (pattern.type === \"AssignmentPattern\") {\n    collectBindingNames(pattern.left as ESTNode, names);\n    return names;\n  }\n\n  if (pattern.type === \"RestElement\") {\n    collectBindingNames(pattern.argument as ESTNode, names);\n  }\n\n  return names;\n}\n\nfunction cloneWithRenames<T extends ESTNode>(\n  node: T,\n  renameMap: ReadonlyMap<string, string>,\n): T {\n  if (renameMap.size === 0) {\n    return cloneNode(node);\n  }\n\n  const cloned = cloneNode(node) as ESTNode;\n  for (const [from, to] of renameMap) {\n    replaceIdentifierName(cloned, from, to);\n  }\n\n  return cloned as T;\n}\n\nfunction replaceIdentifierName(node: ESTNode, from: string, to: string): void {\n  if (isIdentifier(node) && node.name === from) {\n    node.name = to;\n  }\n\n  for (const value of Object.values(node)) {\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        if (isESTNode(item)) {\n          replaceIdentifierName(item, from, to);\n        }\n      }\n      continue;\n    }\n\n    if (isESTNode(value)) {\n      replaceIdentifierName(value, from, to);\n    }\n  }\n}\n\nfunction createUniqueName(baseName: string, usedNames: Set<string>): string {\n  let candidate = baseName;\n  let index = 1;\n\n  while (usedNames.has(candidate)) {\n    candidate = `${baseName}_${index}`;\n    index += 1;\n  }\n\n  usedNames.add(candidate);\n  return candidate;\n}\n\nfunction renamePatternWithCollisions(\n  pattern: ESTNode,\n  state: RenameState,\n): {\n  pattern: ESTNode;\n  renameMap: Map<string, string>;\n} {\n  const renameMap = new Map<string, string>();\n  const usedLocalNames = new Set<string>();\n\n  for (const name of collectBindingNames(pattern)) {\n    /* c8 ignore next @preserve -- defensive guard: collectBindingNames produces unique names */\n    if (usedLocalNames.has(name)) {\n      continue;\n    }\n\n    usedLocalNames.add(name);\n    const nextName =\n      state.usedNames.has(name) || RESERVED_BINDING_NAMES.has(name)\n        ? createUniqueName(name, state.usedNames)\n        : (state.usedNames.add(name), name);\n\n    if (nextName !== name) {\n      renameMap.set(name, nextName);\n    }\n  }\n\n  return {\n    pattern: cloneWithRenames(pattern, renameMap),\n    renameMap,\n  };\n}\n\ninterface ObjectLiteralHelperResolution {\n  helperName: string;\n  helperNode: ESTNode;\n}\n\nfunction renameStatementWithCollisions(\n  statement: ESTNode,\n  state: RenameState,\n): ESTNode {\n  if (\n    isFunctionDeclarationStatement(statement) &&\n    statement.id !== null &&\n    statement.id !== undefined &&\n    isIdentifier(statement.id)\n  ) {\n    const renameMap = new Map<string, string>();\n    const nextName =\n      state.usedNames.has(statement.id.name) ||\n      RESERVED_BINDING_NAMES.has(statement.id.name)\n        ? createUniqueName(statement.id.name, state.usedNames)\n        : (state.usedNames.add(statement.id.name), statement.id.name);\n\n    if (nextName !== statement.id.name) {\n      renameMap.set(statement.id.name, nextName);\n    }\n\n    return cloneWithRenames(statement, renameMap);\n  }\n\n  /* c8 ignore next @preserve -- defensive guard: only called with VariableDeclaration/FunctionDeclaration prelude statements */\n  return cloneNode(statement);\n}\n\nfunction applyRenameMapToStatementReferences(\n  statement: ESTNode,\n  renameMap: ReadonlyMap<string, string>,\n): ESTNode {\n  if (isVariableDeclarationStatement(statement)) {\n    const cloned = cloneNode(statement);\n    for (const declarator of cloned.declarations) {\n      if (declarator.init !== null && declarator.init !== undefined) {\n        declarator.init = cloneWithRenames(declarator.init, renameMap);\n      }\n    }\n    return cloned;\n  }\n\n  if (isFunctionDeclarationStatement(statement)) {\n    const cloned = cloneNode(statement);\n    cloned.body = cloneWithRenames(cloned.body, renameMap);\n    if (Array.isArray(cloned.params)) {\n      cloned.params = cloned.params.map((param) => cloneNode(param));\n    }\n    return cloned;\n  }\n\n  /* c8 ignore next @preserve -- defensive guard: only called with prelude statements already filtered */\n  return cloneWithRenames(statement, renameMap);\n}\n\nfunction buildCollisionSafePlanAnalysis(\n  setupParamPattern: ESTNode | null,\n  analysisPreludeStatements: readonly ESTNode[],\n  jsxRoot: JSXElement | JSXFragment,\n): { preludeStatements: ESTNode[]; jsxRoot: JSXElement | JSXFragment } {\n  const state: RenameState = {\n    usedNames: new Set(RESERVED_BINDING_NAMES),\n  };\n\n  let activeRenameMap = new Map<string, string>();\n  const statements: ESTNode[] = [];\n  if (setupParamPattern !== null) {\n    const { pattern, renameMap } = renamePatternWithCollisions(\n      setupParamPattern,\n      state,\n    );\n    activeRenameMap = new Map([...activeRenameMap, ...renameMap]);\n    statements.push(createConstDeclaration(pattern, nId(\"__dh_ctx\")));\n  }\n\n  for (const statement of analysisPreludeStatements) {\n    const withPriorRefs = applyRenameMapToStatementReferences(\n      statement,\n      activeRenameMap,\n    );\n\n    if (isVariableDeclarationStatement(withPriorRefs)) {\n      const localRenameMap = new Map<string, string>();\n      for (const declarator of withPriorRefs.declarations) {\n        if (declarator.init !== null && declarator.init !== undefined) {\n          declarator.init = cloneWithRenames(declarator.init, localRenameMap);\n        }\n\n        const { pattern, renameMap } = renamePatternWithCollisions(\n          declarator.id,\n          state,\n        );\n        declarator.id = pattern;\n        for (const [from, to] of renameMap) {\n          localRenameMap.set(from, to);\n        }\n      }\n\n      activeRenameMap = new Map([...activeRenameMap, ...localRenameMap]);\n      statements.push(withPriorRefs);\n      continue;\n    }\n\n    const renamedStatement = renameStatementWithCollisions(\n      withPriorRefs,\n      state,\n    );\n    if (\n      isFunctionDeclarationStatement(renamedStatement) &&\n      renamedStatement.id !== null &&\n      renamedStatement.id !== undefined &&\n      isIdentifier(renamedStatement.id)\n    ) {\n      const originalName =\n        isFunctionDeclarationStatement(statement) &&\n        statement.id !== null &&\n        statement.id !== undefined &&\n        isIdentifier(statement.id)\n          ? statement.id.name\n          : renamedStatement.id.name;\n      activeRenameMap.set(originalName, renamedStatement.id.name);\n    }\n    statements.push(renamedStatement);\n  }\n\n  return {\n    preludeStatements: statements,\n    jsxRoot: cloneWithRenames(jsxRoot, activeRenameMap),\n  };\n}\n\nfunction containsJSXNode(node: ESTNode): boolean {\n  /* c8 ignore next @preserve -- defensive guard: only called with prelude statements, never JSX directly */\n  if (node.type === \"JSXElement\" || node.type === \"JSXFragment\") {\n    return true;\n  }\n\n  let found = false;\n  walk(node, null, {\n    JSXElement() {\n      found = true;\n    },\n    JSXFragment() {\n      found = true;\n    },\n  });\n  return found;\n}\n\n/**\n * Detect whether the given AST node contains any colocated client\n * directive (e.g. `load:onClick`, `interaction:onClick`) on a\n * JSX attribute. This is a lightweight scan used to guard against\n * the combination of unsupported hydration patterns and colocated\n * directives — which would silently fall back to a full rerender\n * (Path B) and lose SSR state.\n */\nfunction containsColocatedDirective(node: ESTNode): boolean {\n  let found = false;\n  walk(node, null, {\n    JSXAttribute(attr: ESTNode) {\n      if (\n        attr.type === \"JSXAttribute\" &&\n        getColocatedClientDirective(\n          attr.name as Parameters<typeof getColocatedClientDirective>[0],\n        ) !== null\n      ) {\n        found = true;\n      }\n    },\n  });\n  return found;\n}\n\ntype ScopedBinding = {\n  init: ESTNode | null;\n  kind: \"param\" | \"decl\";\n};\n\nfunction resolveScopedBinding(\n  scopes: readonly ReadonlyMap<string, ScopedBinding>[],\n  name: string,\n): ScopedBinding | undefined {\n  for (let index = scopes.length - 1; index >= 0; index -= 1) {\n    const binding = scopes[index]?.get(name);\n    if (binding !== undefined) {\n      return binding;\n    }\n  }\n\n  return undefined;\n}\n\nfunction collectScopedBindingsFromStatements(\n  statements: readonly ESTNode[],\n): Map<string, ScopedBinding> {\n  const bindings = new Map<string, ScopedBinding>();\n\n  for (const statement of statements) {\n    if (statement.type === \"VariableDeclaration\") {\n      for (const declarator of statement.declarations as ESTNode[]) {\n        const variableDeclarator = declarator as ESTNode & {\n          id: ESTNode;\n          init: ESTNode | null;\n        };\n        if (isIdentifier(variableDeclarator.id)) {\n          bindings.set(variableDeclarator.id.name, {\n            init: variableDeclarator.init,\n            kind: \"decl\",\n          });\n          continue;\n        }\n\n        for (const name of collectBindingNames(variableDeclarator.id)) {\n          bindings.set(name, { init: null, kind: \"decl\" });\n        }\n      }\n      continue;\n    }\n\n    if (statement.type === \"FunctionDeclaration\" && statement.id) {\n      for (const name of collectBindingNames(statement.id as ESTNode)) {\n        bindings.set(name, { init: null, kind: \"decl\" });\n      }\n      continue;\n    }\n\n    if (statement.type === \"ClassDeclaration\" && statement.id) {\n      for (const name of collectBindingNames(statement.id as ESTNode)) {\n        bindings.set(name, { init: null, kind: \"decl\" });\n      }\n    }\n  }\n\n  return bindings;\n}\n\nfunction createFunctionScope(\n  node: FunctionLikeNode | ESTNode,\n): Map<string, ScopedBinding> {\n  const scope = new Map<string, ScopedBinding>();\n\n  if (\n    node.type === \"FunctionExpression\" &&\n    node.id &&\n    isIdentifier(node.id as ESTNode)\n  ) {\n    scope.set((node.id as ESTNode & { name: string }).name, {\n      init: null,\n      kind: \"decl\",\n    });\n  }\n\n  if (\n    node.type === \"FunctionDeclaration\" &&\n    node.id &&\n    isIdentifier(node.id as ESTNode)\n  ) {\n    scope.set((node.id as ESTNode & { name: string }).name, {\n      init: null,\n      kind: \"decl\",\n    });\n  }\n\n  for (const param of (node.params ?? []) as ESTNode[]) {\n    if (isIdentifier(param)) {\n      scope.set(param.name, { init: null, kind: \"param\" });\n      continue;\n    }\n\n    for (const name of collectBindingNames(param)) {\n      scope.set(name, { init: null, kind: \"param\" });\n    }\n  }\n\n  const body = (node as FunctionLikeNode).body;\n  if (isBlockStatement(body)) {\n    for (const [name, binding] of collectScopedBindingsFromStatements(\n      body.body,\n    )) {\n      scope.set(name, binding);\n    }\n  }\n\n  return scope;\n}\n\nfunction isGlobalAliasExpression(\n  node: ESTNode | null | undefined,\n  target: \"document\" | \"window\" | \"Text\" | \"Comment\" | \"DocumentFragment\",\n  scopes: readonly ReadonlyMap<string, ScopedBinding>[],\n  visited: Set<string> = new Set(),\n): boolean {\n  if (node == null) {\n    return false;\n  }\n\n  const current = unwrapParenthesizedExpression(node);\n  if (isIdentifier(current)) {\n    if (current.name === target) {\n      const binding = resolveScopedBinding(scopes, current.name);\n      return binding === undefined;\n    }\n\n    if (target === \"window\" && current.name === \"globalThis\") {\n      return resolveScopedBinding(scopes, current.name) === undefined;\n    }\n\n    if (visited.has(current.name)) {\n      return false;\n    }\n\n    const binding = resolveScopedBinding(scopes, current.name);\n    if (binding === undefined) {\n      return false;\n    }\n\n    visited.add(current.name);\n    return isGlobalAliasExpression(binding.init, target, scopes, visited);\n  }\n\n  if (isMemberExpression(current)) {\n    if (current.computed) {\n      return false;\n    }\n\n    if (isIdentifier(current.object) && isIdentifier(current.property)) {\n      const objectName = current.object.name;\n      const propertyName = current.property.name;\n\n      if (\n        objectName === \"globalThis\" &&\n        resolveScopedBinding(scopes, objectName) === undefined\n      ) {\n        if (target === \"window\" && propertyName === \"window\") {\n          return true;\n        }\n\n        if (propertyName === target) {\n          return true;\n        }\n      }\n\n      if (target === \"document\" && propertyName === \"document\") {\n        return isGlobalAliasExpression(\n          current.object as ESTNode,\n          \"window\",\n          scopes,\n          visited,\n        );\n      }\n\n      if (\n        [\"Text\", \"Comment\", \"DocumentFragment\"].includes(target) &&\n        propertyName === target\n      ) {\n        return isGlobalAliasExpression(\n          current.object as ESTNode,\n          \"window\",\n          scopes,\n          visited,\n        );\n      }\n    }\n  }\n\n  return false;\n}\n\nfunction containsImperativeDomQuery(\n  node: ESTNode | null | undefined,\n  trackedParams: ReadonlySet<string>,\n  scopes: readonly ReadonlyMap<string, ScopedBinding>[] = [],\n): boolean {\n  if (!isESTNode(node)) {\n    return false;\n  }\n\n  if (isIdentifier(node)) {\n    if (node.name === \"document\" || node.name === \"window\") {\n      const binding = resolveScopedBinding(scopes, node.name);\n      return (\n        binding === undefined ||\n        isGlobalAliasExpression(binding.init, node.name, scopes)\n      );\n    }\n\n    if (\n      (node.name === \"host\" || node.name === \"shadowRoot\") &&\n      trackedParams.has(node.name)\n    ) {\n      const binding = resolveScopedBinding(scopes, node.name);\n      return binding?.kind === \"param\";\n    }\n\n    return false;\n  }\n\n  if (node.type === \"UnaryExpression\" && node.operator === \"typeof\") {\n    return false;\n  }\n\n  if (\n    node.type === \"FunctionDeclaration\" ||\n    node.type === \"FunctionExpression\" ||\n    node.type === \"ArrowFunctionExpression\"\n  ) {\n    const nextScopes = [\n      ...scopes,\n      createFunctionScope(node as FunctionLikeNode | ESTNode),\n    ];\n    const body = (node as FunctionLikeNode).body;\n    return containsImperativeDomQuery(body, trackedParams, nextScopes);\n  }\n\n  if (isBlockStatement(node)) {\n    const nextScopes = [\n      ...scopes,\n      collectScopedBindingsFromStatements(node.body as ESTNode[]),\n    ];\n    return (node.body as ESTNode[]).some((statement) =>\n      containsImperativeDomQuery(statement, trackedParams, nextScopes),\n    );\n  }\n\n  if (node.type === \"VariableDeclaration\") {\n    return (node.declarations as ESTNode[]).some((declarator) =>\n      containsImperativeDomQuery(\n        ((declarator as ESTNode & { init: ESTNode | null }).init ??\n          null) as ESTNode,\n        trackedParams,\n        scopes,\n      ),\n    );\n  }\n\n  if (node.type === \"Property\" && !node.computed) {\n    return containsImperativeDomQuery(\n      node.value as ESTNode,\n      trackedParams,\n      scopes,\n    );\n  }\n\n  if (node.type === \"JSXAttribute\") {\n    if (node.value && isESTNode(node.value)) {\n      return containsImperativeDomQuery(node.value, trackedParams, scopes);\n    }\n    return false;\n  }\n\n  for (const value of Object.values(node)) {\n    if (Array.isArray(value)) {\n      if (\n        value.some(\n          (item) =>\n            isESTNode(item) &&\n            containsImperativeDomQuery(item, trackedParams, scopes),\n        )\n      ) {\n        return true;\n      }\n      continue;\n    }\n\n    if (\n      isESTNode(value) &&\n      containsImperativeDomQuery(value, trackedParams, scopes)\n    ) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectExpression(\n  node: ESTNode | null | undefined,\n): node is ESTNode & { properties: ESTNode[] } {\n  return node?.type === \"ObjectExpression\" && Array.isArray(node.properties);\n}\n\nfunction isNewExpression(node: ESTNode | null | undefined): node is ESTNode & {\n  callee: ESTNode;\n} {\n  return node?.type === \"NewExpression\";\n}\n\nfunction unwrapParenthesizedExpression(node: ESTNode): ESTNode {\n  let current = node;\n  while (isParenthesizedExpression(current)) {\n    current = current.expression;\n  }\n  return current;\n}\n\nfunction getReturnedExpression(componentArg: ESTNode): ESTNode | null {\n  if (!isFunctionLikeNode(componentArg)) {\n    return null;\n  }\n\n  if (!isBlockStatement(componentArg.body)) {\n    return unwrapParenthesizedExpression(componentArg.body);\n  }\n\n  for (const statement of componentArg.body.body) {\n    if (isReturnStatement(statement)) {\n      return statement.argument ?? null;\n    }\n  }\n\n  return null;\n}\n\nfunction isZeroArgThunkFunction(node: ESTNode | null | undefined): boolean {\n  return (\n    (isFunctionLikeNode(node) || isFunctionDeclaration(node)) &&\n    (node.params?.length ?? 0) === 0\n  );\n}\n\nfunction isTransparentThunkWrapperFunction(\n  helperNode: ESTNode,\n): TransparentThunkWrapperResolution | null {\n  /* c8 ignore next @preserve -- defensive guard: only called with function-like nodes from helper lookup */\n  if (!isFunctionLikeNode(helperNode) && !isFunctionDeclaration(helperNode)) {\n    return null;\n  }\n\n  const params = helperNode.params ?? [];\n  for (let index = 0; index < params.length; index += 1) {\n    const param = params[index];\n    if (!isIdentifier(param)) {\n      continue;\n    }\n\n    const returnedExpression = getReturnedExpression(helperNode);\n    if (\n      returnedExpression !== null &&\n      isCallExpression(returnedExpression) &&\n      isIdentifier(returnedExpression.callee) &&\n      returnedExpression.callee.name === param.name &&\n      returnedExpression.arguments.length === 0\n    ) {\n      return {\n        thunkArgumentIndex: index,\n        thunkFunction: helperNode,\n      };\n    }\n  }\n\n  return null;\n}\n\nfunction collectImportedTransparentThunkWrappers(\n  program: Program,\n): ReadonlySet<string> {\n  const imported = new Set<string>();\n\n  for (const statement of program.body) {\n    if (!isImportDeclaration(statement)) {\n      continue;\n    }\n\n    const source = isStringLiteral(statement.source)\n      ? String(statement.source.value)\n      : null;\n    /* c8 ignore next @preserve -- defensive guard: ImportDeclaration always has a valid string source */\n    if (source === null) {\n      continue;\n    }\n\n    const allowedNames = KNOWN_IMPORTED_TRANSPARENT_THUNK_WRAPPERS.get(source);\n    if (allowedNames === undefined) {\n      continue;\n    }\n\n    for (const specifier of statement.specifiers ?? []) {\n      /* c8 ignore next @preserve -- defensive guard: import specifiers always have proper structure */\n      if (!isESTNode(specifier)) {\n        continue;\n      }\n\n      const importSpecifier = specifier as ESTNode & {\n        local?: ESTNode;\n        imported?: ESTNode;\n      };\n      const localSpecifier = importSpecifier.local;\n      const importedSpecifier = importSpecifier.imported;\n      if (\n        importSpecifier.type === \"ImportSpecifier\" &&\n        localSpecifier !== undefined &&\n        isIdentifier(localSpecifier) &&\n        importedSpecifier !== undefined &&\n        isIdentifier(importedSpecifier) &&\n        allowedNames.has(importedSpecifier.name)\n      ) {\n        imported.add(localSpecifier.name);\n      }\n    }\n  }\n\n  return imported;\n}\n\nfunction resolveTransparentThunkWrapperCall(\n  callExpression: ESTNode,\n  helperLookup: HelperLookup,\n  importedTransparentThunkWrappers: ReadonlySet<string>,\n): ESTNode | null {\n  if (\n    !isCallExpression(callExpression) ||\n    !isIdentifier(callExpression.callee)\n  ) {\n    return null;\n  }\n\n  const helperNode = helperLookup.get(callExpression.callee.name);\n  if (helperNode !== undefined) {\n    const transparentWrapper = isTransparentThunkWrapperFunction(helperNode);\n    if (transparentWrapper === null) {\n      return null;\n    }\n\n    const thunkArgument =\n      callExpression.arguments[transparentWrapper.thunkArgumentIndex];\n    if (!isZeroArgThunkFunction(thunkArgument)) {\n      return null;\n    }\n\n    return thunkArgument;\n  }\n\n  if (!importedTransparentThunkWrappers.has(callExpression.callee.name)) {\n    return null;\n  }\n\n  const thunkArgument = callExpression.arguments.at(-1) ?? null;\n  if (!isZeroArgThunkFunction(thunkArgument)) {\n    return null;\n  }\n\n  return thunkArgument;\n}\n\nfunction resolveObjectLiteralHelperMethod(\n  callee: ESTNode,\n  helperLookup: HelperLookup,\n): ObjectLiteralHelperResolution | null {\n  if (\n    !isMemberExpression(callee) ||\n    !isIdentifier(callee.object) ||\n    !isObjectExpression(helperLookup.get(callee.object.name))\n  ) {\n    return null;\n  }\n\n  const helperObject = helperLookup.get(callee.object.name);\n  if (!isObjectExpression(helperObject)) {\n    return null;\n  }\n\n  const propertyName =\n    isIdentifier(callee.property) && !callee.computed\n      ? callee.property.name\n      : isStringLiteral(callee.property)\n        ? String(callee.property.value)\n        : null;\n  if (propertyName === null) {\n    return null;\n  }\n\n  for (const property of helperObject.properties) {\n    if (property.type !== \"Property\") {\n      continue;\n    }\n\n    const keyNode = property.key as ESTNode;\n    const valueNode = property.value as ESTNode;\n    const keyName = isIdentifier(keyNode)\n      ? keyNode.name\n      : isStringLiteral(keyNode)\n        ? String(keyNode.value)\n        : null;\n    if (keyName !== propertyName) {\n      continue;\n    }\n\n    if (!isFunctionLikeNode(valueNode) && !isFunctionDeclaration(valueNode)) {\n      return null;\n    }\n\n    return {\n      helperName: `${callee.object.name}.${propertyName}`,\n      helperNode: valueNode,\n    };\n  }\n\n  return null;\n}\n\nfunction resolveTopLevelHelperNode(\n  callExpression: ESTNode,\n  helperLookup: HelperLookup,\n  visitedHelpers: ReadonlySet<string>,\n  importedTransparentThunkWrappers: ReadonlySet<string>,\n): ResolvedHelperCall | null {\n  /* c8 ignore next @preserve -- defensive guard: only called from resolveHelperChain which pre-checks isCallExpression */\n  if (!isCallExpression(callExpression)) {\n    return null;\n  }\n\n  const transparentThunk = resolveTransparentThunkWrapperCall(\n    callExpression,\n    helperLookup,\n    importedTransparentThunkWrappers,\n  );\n  if (transparentThunk !== null) {\n    const helperFrame = extractFunctionRenderFrame(transparentThunk);\n    if (helperFrame === null) {\n      return null;\n    }\n\n    return {\n      helperName: isIdentifier(callExpression.callee)\n        ? callExpression.callee.name\n        : \"transparent-wrapper\",\n      helperNode: transparentThunk,\n      helperFrame,\n      callArguments: [],\n    };\n  }\n\n  const objectLiteralHelper = resolveObjectLiteralHelperMethod(\n    callExpression.callee,\n    helperLookup,\n  );\n  if (objectLiteralHelper !== null) {\n    const helperFrame = extractFunctionRenderFrame(\n      objectLiteralHelper.helperNode,\n    );\n    if (helperFrame === null) {\n      return null;\n    }\n\n    if (callExpression.arguments.length !== helperFrame.paramPatterns.length) {\n      return null;\n    }\n\n    return {\n      helperName: objectLiteralHelper.helperName,\n      helperNode: objectLiteralHelper.helperNode,\n      helperFrame,\n      callArguments: callExpression.arguments,\n    };\n  }\n\n  if (!isIdentifier(callExpression.callee)) {\n    return null;\n  }\n\n  const helperName = callExpression.callee.name;\n  if (visitedHelpers.has(helperName)) {\n    return null;\n  }\n\n  const helperNode = helperLookup.get(helperName);\n  if (!isFunctionLikeNode(helperNode) && !isFunctionDeclaration(helperNode)) {\n    return null;\n  }\n\n  const helperFrame = extractFunctionRenderFrame(helperNode);\n  if (helperFrame === null) {\n    return null;\n  }\n\n  if (callExpression.arguments.length !== helperFrame.paramPatterns.length) {\n    return null;\n  }\n\n  return {\n    helperName,\n    helperNode,\n    helperFrame,\n    callArguments: callExpression.arguments,\n  };\n}\n\nfunction containsNodeIdentityCreationWithBindings(\n  node: ESTNode | null | undefined,\n  scopes: readonly ReadonlyMap<string, ScopedBinding>[],\n): boolean {\n  if (!isESTNode(node)) {\n    return false;\n  }\n\n  const documentFactoryNames = [\n    \"createElement\",\n    \"createTextNode\",\n    \"createComment\",\n    \"createDocumentFragment\",\n  ];\n  const domConstructors = [\"Text\", \"Comment\", \"DocumentFragment\"];\n\n  if (\n    isCallExpression(node) &&\n    isMemberExpression(node.callee) &&\n    isIdentifier(node.callee.object) &&\n    isIdentifier(node.callee.property) &&\n    documentFactoryNames.includes(node.callee.property.name) &&\n    ((node.callee.object.name === \"document\" &&\n      (resolveScopedBinding(scopes, \"document\") === undefined ||\n        isGlobalAliasExpression(\n          resolveScopedBinding(scopes, \"document\")?.init,\n          \"document\",\n          scopes,\n        ))) ||\n      isGlobalAliasExpression(\n        node.callee.object as ESTNode,\n        \"document\",\n        scopes,\n      ))\n  ) {\n    return true;\n  }\n\n  if (\n    isNewExpression(node) &&\n    isIdentifier(node.callee) &&\n    domConstructors.includes(node.callee.name) &&\n    (resolveScopedBinding(scopes, node.callee.name) === undefined ||\n      isGlobalAliasExpression(\n        resolveScopedBinding(scopes, node.callee.name)?.init,\n        node.callee.name as \"Text\" | \"Comment\" | \"DocumentFragment\",\n        scopes,\n      ))\n  ) {\n    return true;\n  }\n\n  if (\n    node.type === \"FunctionDeclaration\" ||\n    node.type === \"FunctionExpression\" ||\n    node.type === \"ArrowFunctionExpression\"\n  ) {\n    return containsNodeIdentityCreationWithBindings(node.body as ESTNode, [\n      ...scopes,\n      createFunctionScope(node as FunctionLikeNode | ESTNode),\n    ]);\n  }\n\n  if (isBlockStatement(node)) {\n    const nextScopes = [\n      ...scopes,\n      collectScopedBindingsFromStatements(node.body as ESTNode[]),\n    ];\n    return (node.body as ESTNode[]).some((statement) =>\n      containsNodeIdentityCreationWithBindings(statement, nextScopes),\n    );\n  }\n\n  if (node.type === \"VariableDeclaration\") {\n    return (node.declarations as ESTNode[]).some((declarator) =>\n      containsNodeIdentityCreationWithBindings(\n        (declarator as ESTNode & { init: ESTNode | null }).init,\n        scopes,\n      ),\n    );\n  }\n\n  if (node.type === \"Property\" && !node.computed) {\n    return containsNodeIdentityCreationWithBindings(\n      node.value as ESTNode,\n      scopes,\n    );\n  }\n\n  for (const value of Object.values(node)) {\n    if (Array.isArray(value)) {\n      if (\n        value.some(\n          (item) =>\n            isESTNode(item) &&\n            containsNodeIdentityCreationWithBindings(item, scopes),\n        )\n      ) {\n        return true;\n      }\n      continue;\n    }\n\n    if (\n      isESTNode(value) &&\n      containsNodeIdentityCreationWithBindings(value, scopes)\n    ) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction collectFunctionParameterBindings(componentArg: ESTNode): Set<string> {\n  const names = new Set<string>();\n\n  if (\n    !isFunctionLikeNode(componentArg) &&\n    !isFunctionDeclaration(componentArg)\n  ) {\n    return names;\n  }\n\n  for (const param of componentArg.params ?? []) {\n    collectBindingNames(param, names);\n  }\n\n  return names;\n}\n\nfunction hasNonNormalizableSpread(\n  componentArg: ESTNode,\n  availableBindings: ReadonlyMap<string, ESTNode>,\n): boolean {\n  const returnedExpression = getReturnedExpression(componentArg);\n  if (\n    returnedExpression === null ||\n    (!isJSXElement(returnedExpression) && !isJSXFragment(returnedExpression))\n  ) {\n    return false;\n  }\n\n  const hasSpreadInNode = (node: JSXElement | JSXFragment): boolean => {\n    if (node.type === \"JSXElement\") {\n      for (const attribute of node.openingElement.attributes as ESTNode[]) {\n        if (attribute.type !== \"JSXSpreadAttribute\") {\n          continue;\n        }\n\n        const argument = unwrapParenthesizedExpression(\n          attribute.argument as ESTNode,\n        );\n        if (\n          isObjectExpression(argument) &&\n          argument.properties.some(\n            (property) => property.type === \"SpreadElement\",\n          )\n        ) {\n          return !isNormalizableSpreadArgument(argument, availableBindings);\n        }\n      }\n\n      for (const child of node.children) {\n        if (child.type === \"JSXElement\" || child.type === \"JSXFragment\") {\n          if (hasSpreadInNode(child)) {\n            return true;\n          }\n        }\n      }\n\n      return false;\n    }\n\n    for (const child of node.children) {\n      if (child.type === \"JSXElement\" || child.type === \"JSXFragment\") {\n        if (hasSpreadInNode(child)) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  };\n\n  return hasSpreadInNode(returnedExpression);\n}\n\nfunction isNormalizableSpreadArgument(\n  node: ESTNode | null | undefined,\n  availableBindings: ReadonlyMap<string, ESTNode>,\n  visitedBindings: Set<string> = new Set(),\n): boolean {\n  if (node === null || node === undefined) {\n    return false;\n  }\n\n  const unwrapped = unwrapParenthesizedExpression(node);\n  if (isIdentifier(unwrapped)) {\n    const binding = availableBindings.get(unwrapped.name);\n    if (binding === undefined || visitedBindings.has(unwrapped.name)) {\n      return false;\n    }\n\n    visitedBindings.add(unwrapped.name);\n    return isNormalizableSpreadArgument(\n      binding,\n      availableBindings,\n      visitedBindings,\n    );\n  }\n\n  if (!isObjectExpression(unwrapped)) {\n    return false;\n  }\n\n  return unwrapped.properties.every((property) => {\n    if (property.type === \"SpreadElement\") {\n      return isNormalizableSpreadArgument(\n        property.argument as ESTNode,\n        availableBindings,\n        new Set(visitedBindings),\n      );\n    }\n\n    return (\n      (!isComputedProperty(property.computed) ||\n        isSerializableBindingExpression(\n          property.key as ESTNode,\n          availableBindings,\n        )) &&\n      isSerializableBindingExpression(\n        property.value as ESTNode,\n        availableBindings,\n      )\n    );\n  });\n}\n\nfunction hasRuntimeBranching(componentArg: ESTNode): boolean {\n  /* c8 ignore next @preserve -- defensive guard: callers always pass function-like nodes */\n  if (!isFunctionLikeNode(componentArg)) {\n    return false;\n  }\n\n  const unwrappedBody = unwrapParenthesizedExpression(componentArg.body);\n  if (\n    unwrappedBody.type === \"ConditionalExpression\" ||\n    unwrappedBody.type === \"LogicalExpression\"\n  ) {\n    return true;\n  }\n\n  if (!isBlockStatement(componentArg.body)) {\n    return false;\n  }\n\n  for (const statement of componentArg.body.body) {\n    if (\n      statement.type === \"IfStatement\" ||\n      statement.type === \"SwitchStatement\"\n    ) {\n      return true;\n    }\n\n    if (\n      isReturnStatement(statement) &&\n      statement.argument !== null &&\n      (() => {\n        const returnedExpression = unwrapParenthesizedExpression(\n          statement.argument,\n        );\n        return (\n          returnedExpression.type === \"ConditionalExpression\" ||\n          returnedExpression.type === \"LogicalExpression\"\n        );\n      })()\n    ) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction hasOpaqueHelperReturn(\n  componentArg: ESTNode,\n  helperLookup: HelperLookup,\n  visitedHelpers: ReadonlySet<string>,\n  importedTransparentThunkWrappers: ReadonlySet<string>,\n): boolean {\n  const finalExpression = resolveFinalHelperExpression(\n    componentArg,\n    helperLookup,\n    visitedHelpers,\n    importedTransparentThunkWrappers,\n  );\n  if (finalExpression === null) {\n    return false;\n  }\n\n  return isCallExpression(finalExpression);\n}\n\nfunction isSupportedPlanPreludeStatement(node: ESTNode): boolean {\n  return (\n    node.type === \"VariableDeclaration\" || node.type === \"FunctionDeclaration\"\n  );\n}\n\nfunction extractFunctionRenderFrame(\n  componentArg: ESTNode,\n): FunctionRenderFrame | null {\n  if (\n    !isFunctionLikeNode(componentArg) &&\n    !isFunctionDeclaration(componentArg)\n  ) {\n    return null;\n  }\n\n  if (componentArg.async === true || componentArg.generator === true) {\n    return null;\n  }\n\n  const paramPatterns = (componentArg.params ?? []).map((param) =>\n    cloneNode(param),\n  );\n  const directBody = unwrapParenthesizedExpression(componentArg.body);\n  if (\n    isJSXElement(directBody) ||\n    isJSXFragment(directBody) ||\n    isCallExpression(directBody)\n  ) {\n    return {\n      paramPatterns,\n      preludeStatements: [],\n      returnExpression: directBody,\n    };\n  }\n\n  if (!isBlockStatement(componentArg.body)) {\n    return null;\n  }\n\n  const statements = componentArg.body.body;\n  const preludeStatements: ESTNode[] = [];\n  let returnExpression: ESTNode | null = null;\n\n  for (let index = 0; index < statements.length; index += 1) {\n    const statement = statements[index];\n    if (isReturnStatement(statement)) {\n      if (statement.argument === null) {\n        return null;\n      }\n\n      if (index !== statements.length - 1) {\n        return null;\n      }\n\n      returnExpression = unwrapParenthesizedExpression(statement.argument);\n      break;\n    }\n\n    if (\n      !isSupportedPlanPreludeStatement(statement) ||\n      containsJSXNode(statement)\n    ) {\n      return null;\n    }\n\n    preludeStatements.push(cloneNode(statement));\n  }\n\n  if (returnExpression === null) {\n    return null;\n  }\n\n  return {\n    paramPatterns,\n    preludeStatements,\n    returnExpression,\n  };\n}\n\nfunction getRootNamespace(\n  node: JSXElement | JSXFragment,\n): \"html\" | \"svg\" | \"math\" {\n  if (node.type === \"JSXFragment\") {\n    return \"html\";\n  }\n\n  const tagName = getTagName(node.openingElement.name);\n  if (tagName === \"svg\") {\n    return \"svg\";\n  }\n  if (tagName === \"math\") {\n    return \"math\";\n  }\n  return \"html\";\n}\n\nfunction createArrowExpression(params: ESTNode[], body: ESTNode): ESTNode {\n  return {\n    type: \"ArrowFunctionExpression\",\n    params,\n    body,\n    expression: true,\n  };\n}\n\nfunction createConstDeclaration(id: ESTNode, init: ESTNode): ESTNode {\n  return {\n    type: \"VariableDeclaration\",\n    kind: \"const\",\n    declarations: [\n      {\n        type: \"VariableDeclarator\",\n        id,\n        init,\n      },\n    ],\n  };\n}\n\nfunction getComponentDisplayName(node: ESTNode): string {\n  if (isIdentifier(node)) {\n    return node.name;\n  }\n\n  if (isMemberExpression(node) && isIdentifier(node.property)) {\n    return `${getComponentDisplayName(node.object)}.${node.property.name}`;\n  }\n\n  /* c8 ignore next @preserve -- defensive guard: callee is always Identifier or MemberExpression */\n  return \"unknown-component\";\n}\n\nfunction getExplicitNestedBoundary(part: DynamicPart): ESTNode | null {\n  if (part.type !== \"insert\" || part.isComponent !== true) {\n    return null;\n  }\n\n  /* c8 ignore next @preserve -- defensive guard: component insert always produces a CallExpression via buildComponentCall */\n  if (!isCallExpression(part.expression)) {\n    return null;\n  }\n\n  const props = part.expression.arguments[0];\n  /* c8 ignore next @preserve -- defensive guard: buildComponentCall always produces ObjectExpression as first arg */\n  if (props.type !== \"ObjectExpression\") {\n    return null;\n  }\n\n  for (const property of props.properties as ESTNode[]) {\n    if (property.type !== \"Property\") {\n      continue;\n    }\n\n    const propertyKey = property.key as ESTNode;\n    const propertyValue = property.value as ESTNode;\n    const matchesKey =\n      (isIdentifier(propertyKey) &&\n        propertyKey.name === ISLAND_METADATA_ATTRIBUTE) ||\n      (isStringLiteral(propertyKey) &&\n        propertyKey.value === ISLAND_METADATA_ATTRIBUTE);\n\n    if (!matchesKey || !isStringLiteral(propertyValue)) {\n      continue;\n    }\n\n    return nObj([\n      nProp(nId(\"path\"), nArr(part.path.map((segment) => nLit(segment)))),\n      nProp(\n        nId(\"tagName\"),\n        nLit(getComponentDisplayName(part.expression.callee)),\n      ),\n      nProp(nId(\"islandStrategy\"), nLit(propertyValue.value)),\n    ]);\n  }\n\n  return null;\n}\n\nfunction createPlanBinding(\n  part: DynamicPart,\n  markerId: number | null,\n): ESTNode {\n  const sharedProperties = [\n    nProp(nId(\"kind\"), nLit(part.type)),\n    nProp(nId(\"path\"), nArr(part.path.map((segment) => nLit(segment)))),\n  ];\n\n  switch (part.type) {\n    case \"text\":\n      return nObj([\n        nProp(nId(\"kind\"), nLit(\"text\")),\n        nProp(nId(\"markerId\"), nLit(markerId ?? 0)),\n        nProp(\n          nId(\"expression\"),\n          createArrowExpression([], cloneNode(part.expression)),\n        ),\n      ]);\n    case \"attr\":\n      return nObj([\n        ...sharedProperties,\n        nProp(nId(\"key\"), nLit(part.key)),\n        nProp(\n          nId(\"expression\"),\n          createArrowExpression([], cloneNode(part.expression)),\n        ),\n      ]);\n    case \"event\":\n      return nObj([\n        ...sharedProperties,\n        nProp(nId(\"eventType\"), nLit(part.key)),\n        nProp(nId(\"expression\"), cloneNode(part.expression)),\n      ]);\n    case \"insert\":\n      return nObj([\n        ...sharedProperties,\n        nProp(nId(\"markerId\"), nLit(markerId ?? 0)),\n        nProp(\n          nId(\"expression\"),\n          createArrowExpression([], cloneNode(part.expression)),\n        ),\n        nProp(nId(\"isComponent\"), nLit(part.isComponent === true)),\n      ]);\n    case \"spread\":\n      return nObj([\n        ...sharedProperties,\n        nProp(\n          nId(\"expression\"),\n          createArrowExpression([], cloneNode(part.expression)),\n        ),\n      ]);\n  }\n}\n\ninterface DispatchBranch {\n  condition: ESTNode | null;\n  jsxRoot: JSXElement | JSXFragment;\n  preludeStatements: ESTNode[];\n}\n\ninterface DispatchPlanAnalysis {\n  branches: DispatchBranch[];\n  sharedPrelude: ESTNode[];\n}\n\nfunction isStaticJSXNode(node: ESTNode): node is JSXElement | JSXFragment {\n  return isJSXElement(node) || isJSXFragment(node);\n}\n\nfunction extractJSXFromExpression(\n  expr: ESTNode,\n): JSXElement | JSXFragment | null {\n  const unwrapped = unwrapParenthesizedExpression(expr);\n  if (isStaticJSXNode(unwrapped)) {\n    return unwrapped;\n  }\n  return null;\n}\n\nfunction andConditions(a: ESTNode, b: ESTNode): ESTNode {\n  return {\n    type: \"LogicalExpression\",\n    operator: \"&&\",\n    left: cloneNode(a),\n    right: cloneNode(b),\n  } as ESTNode;\n}\n\ninterface BranchAccumulator {\n  condition: ESTNode | null;\n  jsxRoot: JSXElement | JSXFragment;\n}\n\nfunction createEmptyJSXFragment(): JSXFragment {\n  return {\n    type: \"JSXFragment\",\n    children: [],\n  };\n}\n\n/**\n * Flatten a branching construct (if/else chain, switch, ternary chain)\n * into a linear list of (condition, JSX) pairs.\n *\n * Returns null if any branch contains non-static JSX or unsupported nesting.\n */\nfunction flattenBranches(\n  node: ESTNode,\n  accumulatedCondition: ESTNode | null,\n): BranchAccumulator[] | null {\n  // Case 1: Direct JSX\n  if (isStaticJSXNode(node)) {\n    return [\n      {\n        condition: accumulatedCondition,\n        jsxRoot: node,\n      },\n    ];\n  }\n\n  // Case 2: Return statement\n  if (isReturnStatement(node)) {\n    if (node.argument === null) {\n      return null;\n    }\n    const unwrapped = unwrapParenthesizedExpression(node.argument);\n    // If the return contains ternary/logical, flatten it recursively\n    if (\n      unwrapped.type === \"ConditionalExpression\" ||\n      unwrapped.type === \"LogicalExpression\"\n    ) {\n      return flattenBranches(unwrapped, accumulatedCondition);\n    }\n    const jsx = extractJSXFromExpression(node.argument);\n    if (jsx === null) {\n      return null;\n    }\n    return [\n      {\n        condition: accumulatedCondition,\n        jsxRoot: jsx,\n      },\n    ];\n  }\n\n  // Case 3: BlockStatement — flatten each statement\n  if (isBlockStatement(node)) {\n    const results: BranchAccumulator[] = [];\n    for (const stmt of node.body) {\n      const flattened = flattenBranches(stmt, accumulatedCondition);\n      if (flattened === null) {\n        return null;\n      }\n      results.push(...flattened);\n    }\n    return results;\n  }\n\n  // Case 4: IfStatement\n  if (isIfStatement(node)) {\n    if (node.test === null) {\n      return null;\n    }\n\n    const newCondition =\n      accumulatedCondition !== null\n        ? andConditions(accumulatedCondition, node.test)\n        : cloneNode(node.test);\n\n    // Flatten consequent\n    const consequentBranches = flattenBranches(node.consequent, newCondition);\n    if (consequentBranches === null) {\n      return null;\n    }\n\n    // Flatten alternate\n    if (node.alternate === null) {\n      // No alternate — just return consequent branches\n      return consequentBranches;\n    }\n\n    const alternateBranches = flattenBranches(\n      node.alternate,\n      accumulatedCondition,\n    );\n    if (alternateBranches === null) {\n      return null;\n    }\n\n    return [...consequentBranches, ...alternateBranches];\n  }\n\n  // Case 5: ConditionalExpression (ternary)\n  if (node.type === \"ConditionalExpression\") {\n    const condNode = node as ESTNode & {\n      test: ESTNode;\n      consequent: ESTNode;\n      alternate: ESTNode;\n    };\n    const newCondition =\n      accumulatedCondition !== null\n        ? andConditions(accumulatedCondition, condNode.test)\n        : cloneNode(condNode.test);\n\n    const trueBranches = flattenBranches(\n      unwrapParenthesizedExpression(condNode.consequent),\n      newCondition,\n    );\n    if (trueBranches === null) {\n      return null;\n    }\n\n    const falseBranches = flattenBranches(\n      unwrapParenthesizedExpression(condNode.alternate),\n      accumulatedCondition,\n    );\n    if (falseBranches === null) {\n      return null;\n    }\n\n    return [...trueBranches, ...falseBranches];\n  }\n\n  // Case 5.5: LogicalExpression guard pattern\n  if (node.type === \"LogicalExpression\") {\n    const logicalNode = node as ESTNode & {\n      operator: string;\n      left: ESTNode;\n      right: ESTNode;\n    };\n\n    if (logicalNode.operator !== \"&&\") {\n      return null;\n    }\n\n    const guardedJsx = extractJSXFromExpression(logicalNode.right);\n    if (guardedJsx === null) {\n      return null;\n    }\n\n    const truthyCondition =\n      accumulatedCondition !== null\n        ? andConditions(accumulatedCondition, logicalNode.left)\n        : cloneNode(logicalNode.left);\n\n    return [\n      {\n        condition: truthyCondition,\n        jsxRoot: guardedJsx,\n      },\n      {\n        condition: accumulatedCondition,\n        jsxRoot: createEmptyJSXFragment(),\n      },\n    ];\n  }\n\n  // Case 6: SwitchStatement\n  if (node.type === \"SwitchStatement\") {\n    const switchNode = node as ESTNode & {\n      discriminant: ESTNode;\n      cases: Array<{\n        type: string;\n        test: ESTNode | null;\n        consequent: ESTNode[];\n      }>;\n    };\n    const discriminant = switchNode.discriminant;\n    const cases = switchNode.cases;\n    const results: BranchAccumulator[] = [];\n\n    for (const caseNode of cases) {\n      if (caseNode.type !== \"SwitchCase\") {\n        return null;\n      }\n\n      let caseCondition: ESTNode | null;\n      if (caseNode.test === null) {\n        // default case\n        caseCondition = accumulatedCondition;\n      } else {\n        const testExpr = {\n          type: \"BinaryExpression\",\n          operator: \"===\",\n          left: cloneNode(discriminant),\n          right: cloneNode(caseNode.test),\n        } as ESTNode;\n        caseCondition =\n          accumulatedCondition !== null\n            ? andConditions(accumulatedCondition, testExpr)\n            : testExpr;\n      }\n\n      // Flatten all consequents of this case\n      for (const stmt of caseNode.consequent) {\n        const flattened = flattenBranches(stmt, caseCondition);\n        if (flattened === null) {\n          return null;\n        }\n        results.push(...flattened);\n      }\n    }\n\n    return results;\n  }\n\n  // Unsupported node type\n  return null;\n}\n\nfunction tryExtractDispatchBranches(\n  componentArg: ESTNode,\n): DispatchPlanAnalysis | null {\n  if (\n    !isFunctionLikeNode(componentArg) &&\n    !isFunctionDeclaration(componentArg)\n  ) {\n    return null;\n  }\n\n  const directBody = unwrapParenthesizedExpression(componentArg.body);\n\n  // Direct ternary/conditional at body level — handle as dispatch\n  if (\n    directBody.type === \"ConditionalExpression\" ||\n    directBody.type === \"LogicalExpression\"\n  ) {\n    const branches = flattenBranches(directBody, null);\n    if (branches === null || branches.length < 2) {\n      return null;\n    }\n    return {\n      branches: branches.map((b) => ({\n        condition: b.condition,\n        jsxRoot: b.jsxRoot,\n        preludeStatements: [],\n      })),\n      sharedPrelude: [],\n    };\n  }\n\n  if (!isBlockStatement(componentArg.body)) {\n    return null;\n  }\n\n  const statements = componentArg.body.body;\n\n  // Collect prelude statements\n  const preludeStatements: ESTNode[] = [];\n  let branchStartIndex = -1;\n\n  for (let i = 0; i < statements.length; i++) {\n    const stmt = statements[i];\n    if (\n      isIfStatement(stmt) ||\n      stmt.type === \"SwitchStatement\" ||\n      (isReturnStatement(stmt) && i === statements.length - 1)\n    ) {\n      branchStartIndex = i;\n      break;\n    }\n    if (isSupportedPlanPreludeStatement(stmt) && !containsJSXNode(stmt)) {\n      preludeStatements.push(cloneNode(stmt));\n    } else {\n      return null;\n    }\n  }\n\n  if (branchStartIndex < 0) {\n    return null;\n  }\n\n  const branchStatements = statements.slice(branchStartIndex);\n\n  // Try to flatten all branch statements\n  const results: BranchAccumulator[] = [];\n  for (const stmt of branchStatements) {\n    const flattened = flattenBranches(stmt, null);\n    if (flattened === null) {\n      return null;\n    }\n    results.push(...flattened);\n  }\n\n  if (results.length < 2) {\n    return null;\n  }\n\n  return {\n    branches: results.map((b) => ({\n      condition: b.condition,\n      jsxRoot: b.jsxRoot,\n      preludeStatements: [],\n    })),\n    sharedPrelude: preludeStatements,\n  };\n}\n\nfunction computeShapeHash(node: JSXElement | JSXFragment): string {\n  if (node.type === \"JSXFragment\") {\n    return `fragment:${node.children.length}`;\n  }\n\n  const nameNode = node.openingElement.name;\n  let tagName: string;\n  if (nameNode.type === \"JSXIdentifier\") {\n    tagName = nameNode.name;\n  } else if (nameNode.type === \"JSXMemberExpression\") {\n    tagName = `${nameNode.property.name}`;\n  } else {\n    // JSXNamespacedName\n    tagName = `${nameNode.namespace.name}_${nameNode.name.name}`;\n  }\n  const attrCount = node.openingElement.attributes.length;\n  const childCount = node.children.length;\n  return `${tagName}:${attrCount}:${childCount}`;\n}\n\nfunction buildDispatchPlanMetadata(\n  dispatchAnalysis: DispatchPlanAnalysis,\n  nested: NestedTransformers,\n  preludeStatements: ESTNode[],\n): ESTNode {\n  const branchPlans: ESTNode[] = [];\n\n  for (const branch of dispatchAnalysis.branches) {\n    const analysisState = createInitialState(\"csr\");\n    const { dynamicParts } = jsxToTree(branch.jsxRoot, analysisState, nested);\n\n    const planBindings: ESTNode[] = [];\n    const nestedBoundaries: ESTNode[] = [];\n    let markerId = 1;\n\n    for (const part of dynamicParts) {\n      const currentMarkerId =\n        part.type === \"text\" || part.type === \"insert\" ? markerId++ : null;\n      planBindings.push(createPlanBinding(part, currentMarkerId));\n\n      const nestedBoundary = getExplicitNestedBoundary(part);\n      if (nestedBoundary !== null) {\n        nestedBoundaries.push(nestedBoundary);\n      }\n    }\n\n    const planFactoryStatements: ESTNode[] = [\n      ...preludeStatements,\n      ...branch.preludeStatements,\n    ];\n    planFactoryStatements.push(\n      nReturn(\n        nObj([\n          nProp(nId(\"namespace\"), nLit(getRootNamespace(branch.jsxRoot))),\n          nProp(nId(\"bindings\"), nArr(planBindings)),\n          nProp(nId(\"nestedBoundaries\"), nArr(nestedBoundaries)),\n        ]),\n      ),\n    );\n\n    const branchProps = [\n      nProp(\n        nId(\"planFactory\"),\n        nArrowBlock(\n          [nId(\"__dh_host\"), nId(\"__dh_ctx\")],\n          nBlock(planFactoryStatements),\n        ),\n      ),\n      nProp(nId(\"shapeHash\"), nLit(computeShapeHash(branch.jsxRoot))),\n    ];\n\n    if (branch.condition !== null) {\n      branchProps.unshift(\n        nProp(\n          nId(\"condition\"),\n          createArrowExpression([], cloneNode(branch.condition)),\n        ),\n      );\n    } else {\n      branchProps.unshift(\n        nProp(nId(\"condition\"), nArrowBlock([], nBlock([nReturn(nLit(true))]))),\n      );\n    }\n\n    branchPlans.push(nObj(branchProps));\n  }\n\n  return nObj([\n    nProp(nId(\"kind\"), nLit(\"dispatch\")),\n    nProp(nId(\"plans\"), nArr(branchPlans)),\n    nProp(nId(\"nestedBoundaries\"), nArr([])),\n  ]);\n}\n\nfunction createUnsupportedHydrationMetadata(reason: string): ESTNode {\n  return nObj([\n    nProp(nId(\"kind\"), nLit(\"generic-plan\")),\n    nProp(nId(\"unsupportedReason\"), nLit(reason)),\n  ]);\n}\n\nfunction getSpecificUnsupportedHydrationReason(\n  componentArg: ESTNode,\n  helperLookup: HelperLookup,\n  visitedHelpers: ReadonlySet<string>,\n  importedTransparentThunkWrappers: ReadonlySet<string>,\n  availableBindings: ReadonlyMap<string, ESTNode>,\n): string | null {\n  if (\n    !isFunctionLikeNode(componentArg) &&\n    !isFunctionDeclaration(componentArg)\n  ) {\n    return null;\n  }\n\n  const bodyToInspect = componentArg.body;\n  const parameterBindings = collectFunctionParameterBindings(componentArg);\n  const rootScope = isBlockStatement(bodyToInspect)\n    ? collectScopedBindingsFromStatements(bodyToInspect.body as ESTNode[])\n    : new Map<string, ScopedBinding>();\n\n  for (const param of (componentArg.params ?? []) as ESTNode[]) {\n    if (isIdentifier(param)) {\n      rootScope.set(param.name, { init: null, kind: \"param\" });\n      continue;\n    }\n\n    for (const name of collectBindingNames(param)) {\n      rootScope.set(name, { init: null, kind: \"param\" });\n    }\n  }\n\n  const scopes = [rootScope];\n\n  if (containsNodeIdentityCreationWithBindings(bodyToInspect, scopes)) {\n    return \"node-identity-reuse\";\n  }\n\n  if (hasNonNormalizableSpread(componentArg, availableBindings)) {\n    return \"non-normalizable-spread\";\n  }\n\n  if (containsImperativeDomQuery(bodyToInspect, parameterBindings, scopes)) {\n    return \"imperative-dom-query\";\n  }\n\n  if (hasRuntimeBranching(componentArg)) {\n    // Check if this is a supported dispatch pattern\n    const dispatchAnalysis = tryExtractDispatchBranches(componentArg);\n    if (dispatchAnalysis === null) {\n      return \"runtime-branching\";\n    }\n    // Supported dispatch pattern — don't mark as unsupported\n  }\n\n  if (\n    hasOpaqueHelperReturn(\n      componentArg,\n      helperLookup,\n      visitedHelpers,\n      importedTransparentThunkWrappers,\n    )\n  ) {\n    return \"opaque-helper-call\";\n  }\n\n  return null;\n}\n\nfunction getUnsupportedHydrationReason(\n  componentArg: ESTNode,\n  helperLookup: HelperLookup,\n  visitedHelpers: ReadonlySet<string>,\n  importedTransparentThunkWrappers: ReadonlySet<string>,\n  availableBindings: ReadonlyMap<string, ESTNode>,\n): string | null {\n  const specificReason = getSpecificUnsupportedHydrationReason(\n    componentArg,\n    helperLookup,\n    visitedHelpers,\n    importedTransparentThunkWrappers,\n    availableBindings,\n  );\n  /* c8 ignore next @preserve -- structurally unreachable: buildComponentHydrationMetadata checks getSpecific first with same args */\n  if (specificReason !== null) {\n    return specificReason;\n  }\n\n  if (\n    !isFunctionLikeNode(componentArg) &&\n    !isFunctionDeclaration(componentArg)\n  ) {\n    return null;\n  }\n\n  return \"unsupported-component-body\";\n}\n\nfunction resolveHelperChain(\n  componentArg: ESTNode,\n  helperLookup: HelperLookup,\n  visitedHelpers: ReadonlySet<string>,\n  importedTransparentThunkWrappers: ReadonlySet<string>,\n): HelperChainResolution | null {\n  const rootFrame = extractFunctionRenderFrame(componentArg);\n  if (rootFrame === null || rootFrame.returnExpression === null) {\n    return null;\n  }\n\n  const helperFrames: HelperChainResolution[\"helperFrames\"] = [];\n  let currentExpression: ESTNode | null = rootFrame.returnExpression;\n  let localVisited = new Set(visitedHelpers);\n\n  while (currentExpression !== null && isCallExpression(currentExpression)) {\n    const helperResolution = resolveTopLevelHelperNode(\n      currentExpression,\n      helperLookup,\n      localVisited,\n      importedTransparentThunkWrappers,\n    );\n    if (helperResolution === null) {\n      break;\n    }\n\n    helperFrames.push({\n      helperName: helperResolution.helperName,\n      helperFrame: helperResolution.helperFrame,\n      callArguments: helperResolution.callArguments,\n    });\n    localVisited = new Set([...localVisited, helperResolution.helperName]);\n    currentExpression = helperResolution.helperFrame.returnExpression;\n  }\n\n  return {\n    rootFrame,\n    helperFrames,\n  };\n}\n\nfunction resolveFinalHelperExpression(\n  componentArg: ESTNode,\n  helperLookup: HelperLookup,\n  visitedHelpers: ReadonlySet<string>,\n  importedTransparentThunkWrappers: ReadonlySet<string>,\n): ESTNode | null {\n  const resolvedChain = resolveHelperChain(\n    componentArg,\n    helperLookup,\n    visitedHelpers,\n    importedTransparentThunkWrappers,\n  );\n  if (resolvedChain === null) {\n    return null;\n  }\n\n  return (\n    resolvedChain.helperFrames.at(-1)?.helperFrame.returnExpression ??\n    resolvedChain.rootFrame.returnExpression\n  );\n}\n\nfunction resolveComponentRenderAnalysis(\n  componentArg: ESTNode,\n  helperLookup: HelperLookup,\n  importedTransparentThunkWrappers: ReadonlySet<string>,\n  visitedHelpers: ReadonlySet<string> = new Set(),\n): ResolvedRenderAnalysis | null {\n  const resolvedChain = resolveHelperChain(\n    componentArg,\n    helperLookup,\n    visitedHelpers,\n    importedTransparentThunkWrappers,\n  );\n  if (resolvedChain === null) {\n    return null;\n  }\n\n  const { rootFrame, helperFrames } = resolvedChain;\n  const finalFrame = helperFrames.at(-1)?.helperFrame ?? rootFrame;\n\n  /* c8 ignore next @preserve -- defensive guard: resolved helper frames always expose a non-null returnExpression */\n  if (finalFrame.returnExpression === null) {\n    return null;\n  }\n\n  if (\n    !isJSXElement(finalFrame.returnExpression) &&\n    !isJSXFragment(finalFrame.returnExpression)\n  ) {\n    return null;\n  }\n\n  const preludeStatements = [...rootFrame.preludeStatements];\n  for (const helper of helperFrames) {\n    const helperParamBindings = helper.helperFrame.paramPatterns.map(\n      (paramPattern, index) =>\n        createConstDeclaration(\n          paramPattern,\n          cloneNode(helper.callArguments[index] ?? nLit(null)),\n        ),\n    );\n\n    preludeStatements.push(\n      ...helperParamBindings,\n      ...helper.helperFrame.preludeStatements,\n    );\n  }\n\n  return {\n    analysis: {\n      jsxRoot: finalFrame.returnExpression,\n      paramPattern: rootFrame.paramPatterns[0] ?? null,\n      preludeStatements,\n    },\n    usedHelper: helperFrames.length > 0,\n  };\n}\n\nfunction collectTopLevelHelpers(program: Program): HelperLookup {\n  const helpers = new Map<string, ESTNode>();\n\n  for (const statement of program.body) {\n    const declaration =\n      isExportNamedDeclaration(statement) &&\n      statement.declaration !== null &&\n      statement.declaration !== undefined\n        ? statement.declaration\n        : statement;\n\n    if (\n      isFunctionDeclaration(declaration) &&\n      declaration.id !== null &&\n      declaration.id !== undefined &&\n      isIdentifier(declaration.id)\n    ) {\n      helpers.set(declaration.id.name, declaration);\n      continue;\n    }\n\n    if (!isVariableDeclaration(declaration)) {\n      continue;\n    }\n\n    for (const declarator of declaration.declarations) {\n      if (\n        isIdentifier(declarator.id) &&\n        declarator.init !== null &&\n        (isFunctionLikeNode(declarator.init) ||\n          isFunctionDeclaration(declarator.init) ||\n          isObjectExpression(declarator.init))\n      ) {\n        helpers.set(declarator.id.name, declarator.init);\n      }\n    }\n  }\n\n  return helpers;\n}\n\nfunction collectTopLevelBindings(program: Program): Set<string> {\n  const bindings = new Set<string>();\n\n  for (const statement of program.body) {\n    if (isImportDeclaration(statement)) {\n      for (const specifier of statement.specifiers ?? []) {\n        const local = specifier.local;\n        if (isESTNode(local) && isIdentifier(local)) {\n          bindings.add(local.name);\n        }\n      }\n      continue;\n    }\n\n    const declaration =\n      isExportNamedDeclaration(statement) &&\n      statement.declaration !== null &&\n      statement.declaration !== undefined\n        ? statement.declaration\n        : statement;\n\n    if (\n      isFunctionDeclaration(declaration) &&\n      declaration.id !== null &&\n      declaration.id !== undefined &&\n      isIdentifier(declaration.id)\n    ) {\n      bindings.add(declaration.id.name);\n      continue;\n    }\n\n    if (!isVariableDeclaration(declaration)) {\n      continue;\n    }\n\n    for (const declarator of declaration.declarations) {\n      collectBindingNames(declarator.id, bindings);\n    }\n  }\n\n  return bindings;\n}\n\nfunction isSerializableBindingExpression(\n  node: ESTNode | null | undefined,\n  availableBindings: ReadonlyMap<string, ESTNode>,\n): boolean {\n  if (node === null || node === undefined) {\n    return false;\n  }\n\n  if (node.type === \"Literal\") {\n    return (\n      node.value === null ||\n      typeof node.value === \"string\" ||\n      typeof node.value === \"number\" ||\n      typeof node.value === \"boolean\"\n    );\n  }\n\n  if (isIdentifier(node)) {\n    return availableBindings.has(node.name);\n  }\n\n  if (node.type === \"TemplateLiteral\") {\n    return (node.expressions as ESTNode[]).every((expression) =>\n      isSerializableBindingExpression(expression, availableBindings),\n    );\n  }\n\n  if (node.type === \"ArrayExpression\") {\n    return (node.elements as Array<ESTNode | null>).every(\n      (element) =>\n        element === null ||\n        isSerializableBindingExpression(element, availableBindings),\n    );\n  }\n\n  if (node.type === \"ObjectExpression\") {\n    return (node.properties as ESTNode[]).every((property) => {\n      if (property.type === \"SpreadElement\") {\n        return false;\n      }\n\n      return (\n        (!isComputedProperty(property.computed) ||\n          isSerializableBindingExpression(\n            property.key as ESTNode,\n            availableBindings,\n          )) &&\n        isSerializableBindingExpression(\n          property.value as ESTNode,\n          availableBindings,\n        )\n      );\n    });\n  }\n\n  return false;\n}\n\nfunction collectSerializableBindingsFromStatements(\n  statements: readonly ESTNode[],\n  inherited: ReadonlyMap<string, ESTNode>,\n): Map<string, ESTNode> {\n  const bindings = new Map(inherited);\n\n  for (const statement of statements) {\n    const declaration =\n      isVariableDeclaration(statement) && statement.kind === \"const\"\n        ? statement\n        : isExportNamedDeclaration(statement) &&\n            statement.declaration !== null &&\n            statement.declaration !== undefined &&\n            isVariableDeclaration(statement.declaration) &&\n            statement.declaration.kind === \"const\"\n          ? statement.declaration\n          : null;\n    if (declaration === null) {\n      continue;\n    }\n\n    for (const declarator of declaration.declarations) {\n      if (!isIdentifier(declarator.id) || declarator.init == null) {\n        continue;\n      }\n\n      if (isSerializableBindingExpression(declarator.init, bindings)) {\n        bindings.set(declarator.id.name, declarator.init);\n      }\n    }\n  }\n\n  return bindings;\n}\n\nfunction collectTopLevelSerializableBindings(\n  program: Program,\n): Map<string, ESTNode> {\n  return collectSerializableBindingsFromStatements(program.body, new Map());\n}\n\n/**\n * Guard: throw if the component body contains colocated client\n * directives while its setup pattern is unsupported for hydration\n * plan generation.  This combination would silently fall back to a\n * full rerender (Path B), destroying SSR state and making the\n * colocated handler capture stale values.\n */\nfunction assertNoUnsupportedColocatedCombination(\n  componentArg: ESTNode,\n  unsupportedReason: string,\n): void {\n  if (containsColocatedDirective(componentArg)) {\n    throw new Error(\n      `[dathra] Colocated client directives (e.g. load:onClick) cannot be used in a component whose setup is unsupported for hydration plan generation (reason: ${unsupportedReason}). The component would fall back to a full rerender, losing SSR state captured by the handler. Simplify the setup function or remove the colocated directive.`,\n    );\n  }\n}\n\nfunction buildComponentHydrationMetadata(\n  componentArg: ESTNode,\n  nested: NestedTransformers,\n  helperLookup: HelperLookup,\n  importedTransparentThunkWrappers: ReadonlySet<string>,\n  moduleBindings: ReadonlySet<string>,\n  topLevelSerializableBindings: ReadonlyMap<string, ESTNode>,\n): ComponentHydrationBuildResult | null {\n  const specificUnsupportedReason = getSpecificUnsupportedHydrationReason(\n    componentArg,\n    helperLookup,\n    new Set(),\n    importedTransparentThunkWrappers,\n    topLevelSerializableBindings,\n  );\n  if (specificUnsupportedReason !== null) {\n    assertNoUnsupportedColocatedCombination(\n      componentArg,\n      specificUnsupportedReason,\n    );\n    return {\n      metadata: createUnsupportedHydrationMetadata(specificUnsupportedReason),\n    };\n  }\n\n  // Check for supported dispatch pattern (guard-return or if/else)\n  const dispatchAnalysis = tryExtractDispatchBranches(componentArg);\n  if (dispatchAnalysis !== null) {\n    // Extract shared prelude from component setup\n    const frame = extractFunctionRenderFrame(componentArg);\n    const sharedPrelude = frame !== null ? frame.preludeStatements : [];\n    return {\n      metadata: buildDispatchPlanMetadata(\n        dispatchAnalysis,\n        nested,\n        sharedPrelude,\n      ),\n    };\n  }\n\n  const resolvedAnalysis = resolveComponentRenderAnalysis(\n    componentArg,\n    helperLookup,\n    importedTransparentThunkWrappers,\n  );\n  if (resolvedAnalysis === null) {\n    const unsupportedReason = getUnsupportedHydrationReason(\n      componentArg,\n      helperLookup,\n      new Set(),\n      importedTransparentThunkWrappers,\n      topLevelSerializableBindings,\n    );\n    if (unsupportedReason === null) {\n      return null;\n    }\n\n    assertNoUnsupportedColocatedCombination(componentArg, unsupportedReason);\n    return {\n      metadata: createUnsupportedHydrationMetadata(unsupportedReason),\n    };\n  }\n\n  const analysis = resolvedAnalysis.analysis;\n  const setupParamPattern =\n    isFunctionLikeNode(componentArg) || isFunctionDeclaration(componentArg)\n      ? (componentArg.params?.[0] ?? null)\n      : null;\n\n  const collisionSafeAnalysis = buildCollisionSafePlanAnalysis(\n    setupParamPattern,\n    analysis.preludeStatements,\n    analysis.jsxRoot,\n  );\n\n  const analysisState = createInitialState(\"csr\");\n  analysisState.moduleBindings = new Set(moduleBindings);\n  analysisState.currentSerializableBindings =\n    collectSerializableBindingsFromStatements(\n      collisionSafeAnalysis.preludeStatements,\n      topLevelSerializableBindings,\n    );\n  const { dynamicParts } = jsxToTree(\n    collisionSafeAnalysis.jsxRoot,\n    analysisState,\n    nested,\n  );\n\n  const planBindings: ESTNode[] = [];\n  const nestedBoundaries: ESTNode[] = [];\n  let markerId = 1;\n\n  for (const part of dynamicParts) {\n    const currentMarkerId =\n      part.type === \"text\" || part.type === \"insert\" ? markerId++ : null;\n    planBindings.push(createPlanBinding(part, currentMarkerId));\n\n    const nestedBoundary = getExplicitNestedBoundary(part);\n    if (nestedBoundary !== null) {\n      nestedBoundaries.push(nestedBoundary);\n    }\n  }\n\n  const planFactoryStatements: ESTNode[] = [\n    ...collisionSafeAnalysis.preludeStatements,\n  ];\n  planFactoryStatements.push(\n    nReturn(\n      nObj([\n        nProp(\n          nId(\"namespace\"),\n          nLit(getRootNamespace(collisionSafeAnalysis.jsxRoot)),\n        ),\n        nProp(nId(\"bindings\"), nArr(planBindings)),\n        nProp(nId(\"nestedBoundaries\"), nArr(nestedBoundaries)),\n      ]),\n    ),\n  );\n\n  return {\n    metadata: nObj([\n      nProp(nId(\"kind\"), nLit(\"generic-plan\")),\n      nProp(\n        nId(\"planFactory\"),\n        nArrowBlock(\n          [nId(\"__dh_host\"), nId(\"__dh_ctx\")],\n          nBlock(planFactoryStatements),\n        ),\n      ),\n    ]),\n  };\n}\n\nfunction collectComponentPlans(\n  program: Program,\n  nested: NestedTransformers,\n  moduleBindings: ReadonlySet<string>,\n): CollectedComponentPlan[] {\n  const plans: CollectedComponentPlan[] = [];\n  const helperLookup = collectTopLevelHelpers(program);\n  const topLevelSerializableBindings =\n    collectTopLevelSerializableBindings(program);\n  const importedTransparentThunkWrappers =\n    collectImportedTransparentThunkWrappers(program);\n\n  for (let bodyIndex = 0; bodyIndex < program.body.length; bodyIndex += 1) {\n    const statement = program.body[bodyIndex];\n    const declaration = isVariableDeclaration(statement)\n      ? statement\n      : isExportNamedDeclaration(statement) &&\n          statement.declaration !== null &&\n          statement.declaration !== undefined &&\n          isVariableDeclaration(statement.declaration)\n        ? statement.declaration\n        : null;\n\n    if (declaration === null) {\n      continue;\n    }\n\n    for (\n      let declarationIndex = 0;\n      declarationIndex < declaration.declarations.length;\n      declarationIndex += 1\n    ) {\n      const declarator = declaration.declarations[declarationIndex];\n      const init = declarator.init;\n      if (!isDefineComponentCall(init)) {\n        continue;\n      }\n\n      const componentArg = init.arguments[1];\n      const buildResult = buildComponentHydrationMetadata(\n        componentArg,\n        nested,\n        helperLookup,\n        importedTransparentThunkWrappers,\n        moduleBindings,\n        topLevelSerializableBindings,\n      );\n      if (buildResult === null) {\n        continue;\n      }\n\n      plans.push({\n        bodyIndex,\n        declarationIndex,\n        metadata: buildResult.metadata,\n      });\n    }\n  }\n\n  return plans;\n}\n\nfunction applyComponentPlans(\n  program: Program,\n  plans: readonly CollectedComponentPlan[],\n): void {\n  for (const plan of plans) {\n    const statement = program.body[plan.bodyIndex];\n    const declaration = isVariableDeclaration(statement)\n      ? statement\n      : isExportNamedDeclaration(statement) &&\n          statement.declaration !== null &&\n          statement.declaration !== undefined &&\n          isVariableDeclaration(statement.declaration)\n        ? statement.declaration\n        : null;\n\n    const declarator = declaration?.declarations[plan.declarationIndex];\n    const init = declarator?.init;\n    /* c8 ignore next @preserve -- defensive guard: plans are collected only from defineComponent initializers */\n    if (!isDefineComponentCall(init)) {\n      continue;\n    }\n\n    const componentArg = init.arguments[1];\n\n    init.arguments[1] = nCall(nMember(nId(\"Object\"), nId(\"assign\")), [\n      componentArg,\n      nObj([nProp(nId(\"__hydrationMetadata__\"), cloneNode(plan.metadata))]),\n    ]);\n  }\n}\n\n/**\n * Transform source code containing JSX.\n */\nfunction transform(\n  code: string,\n  options: TransformOptions = {},\n): TransformResult {\n  const {\n    mode = \"csr\",\n    sourceMap = false,\n    filename = \"unknown.tsx\",\n    runtimeModule = \"@dathra/runtime\",\n  } = options;\n\n  const parsed = parseSync(filename, code, { sourceType: \"module\" });\n  const state = createInitialState(mode);\n  state.moduleBindings = collectTopLevelBindings(\n    adaptParsedProgram(parsed.program) as Program,\n  );\n\n  const nested = {\n    transformJSXNode,\n    transformJSXForSSRNode,\n  };\n\n  const componentPlans = collectComponentPlans(\n    adaptParsedProgram(parsed.program) as Program,\n    nested,\n    state.moduleBindings,\n  );\n\n  const topLevelSerializableBindings = collectTopLevelSerializableBindings(\n    adaptParsedProgram(parsed.program) as Program,\n  );\n\n  const transformedProgram = walk(\n    adaptParsedProgram(parsed.program),\n    { inJSX: false, serializableBindings: topLevelSerializableBindings },\n    {\n      ArrowFunctionExpression(\n        node: ESTNode,\n        {\n          state: walkState,\n          next,\n        }: {\n          state: WalkTransformState;\n          next: (s?: WalkTransformState) => void;\n        },\n      ) {\n        const body = (node as FunctionLikeNode).body;\n        const serializableBindings = isBlockStatement(body)\n          ? collectSerializableBindingsFromStatements(\n              body.body,\n              walkState.serializableBindings,\n            )\n          : new Map(walkState.serializableBindings);\n        next({ inJSX: false, serializableBindings });\n      },\n      FunctionExpression(\n        node: ESTNode,\n        {\n          state: walkState,\n          next,\n        }: {\n          state: WalkTransformState;\n          next: (s?: WalkTransformState) => void;\n        },\n      ) {\n        const body = (node as FunctionLikeNode).body;\n        const serializableBindings = isBlockStatement(body)\n          ? collectSerializableBindingsFromStatements(\n              body.body,\n              walkState.serializableBindings,\n            )\n          : new Map(walkState.serializableBindings);\n        next({ inJSX: false, serializableBindings });\n      },\n      FunctionDeclaration(\n        node: ESTNode,\n        {\n          state: walkState,\n          next,\n        }: {\n          state: WalkTransformState;\n          next: (s?: WalkTransformState) => void;\n        },\n      ) {\n        const body = (node as unknown as { body: ESTNode }).body;\n        const serializableBindings = isBlockStatement(body)\n          ? collectSerializableBindingsFromStatements(\n              body.body,\n              walkState.serializableBindings,\n            )\n          : new Map(walkState.serializableBindings);\n        next({ inJSX: false, serializableBindings });\n      },\n      JSXElement(\n        node: ESTNode,\n        {\n          state: walkState,\n          next,\n        }: {\n          state: WalkTransformState;\n          next: (s?: WalkTransformState) => void;\n        },\n      ) {\n        /* c8 ignore next @preserve -- structurally unreachable: replacing a JSXElement prevents visiting nested original JSX nodes */\n        if (walkState.inJSX) {\n          next({\n            inJSX: true,\n            serializableBindings: walkState.serializableBindings,\n          });\n          return;\n        }\n\n        /* c8 ignore next @preserve -- defensive guard: typed JSXElement visitor only receives JSXElement nodes */\n        if (!isJSXElement(node)) return;\n\n        const previousSerializableBindings = state.currentSerializableBindings;\n        state.currentSerializableBindings = walkState.serializableBindings;\n        try {\n          if (isComponentTag(node.openingElement.name)) {\n            return buildComponentCall(node, state, nested);\n          }\n\n          if (mode === \"ssr\") {\n            return transformJSXForSSRNode(node, state, nested);\n          }\n\n          return transformJSXNode(node, state, nested);\n        } finally {\n          state.currentSerializableBindings = previousSerializableBindings;\n        }\n      },\n      JSXFragment(\n        node: ESTNode,\n        {\n          state: walkState,\n          next,\n        }: {\n          state: WalkTransformState;\n          next: (s?: WalkTransformState) => void;\n        },\n      ) {\n        /* c8 ignore next @preserve -- structurally unreachable: replacing a JSXFragment prevents visiting nested original JSX nodes */\n        if (walkState.inJSX) {\n          next({\n            inJSX: true,\n            serializableBindings: walkState.serializableBindings,\n          });\n          return;\n        }\n\n        /* c8 ignore next @preserve -- defensive guard: typed JSXFragment visitor only receives JSXFragment nodes */\n        if (!isJSXFragment(node)) return;\n\n        const previousSerializableBindings = state.currentSerializableBindings;\n        state.currentSerializableBindings = walkState.serializableBindings;\n        try {\n          if (mode === \"ssr\") {\n            return transformJSXForSSRNode(node, state, nested);\n          }\n\n          return transformJSXNode(node, state, nested);\n        } finally {\n          state.currentSerializableBindings = previousSerializableBindings;\n        }\n      },\n    },\n  ) as Program;\n\n  applyComponentPlans(transformedProgram, componentPlans);\n\n  if (state.componentClientActions.length > 0) {\n    let insertIndex = 0;\n    for (let i = 0; i < transformedProgram.body.length; i++) {\n      const statement = transformedProgram.body[i];\n      if (statement.type === \"ImportDeclaration\") {\n        insertIndex = i + 1;\n      } else {\n        break;\n      }\n    }\n\n    const registrations = state.componentClientActions.map((action) =>\n      nExprStmt(\n        nCall(nId(\"registerClientAction\"), [\n          nLit(action.id),\n          cloneNode(action.factory),\n        ]),\n      ),\n    );\n    transformedProgram.body.splice(insertIndex, 0, ...registrations);\n  }\n\n  if (state.templates.length > 0) {\n    let insertIndex = 0;\n    for (let i = 0; i < transformedProgram.body.length; i++) {\n      const statement = transformedProgram.body[i];\n      if (statement.type === \"ImportDeclaration\") {\n        insertIndex = i + 1;\n      } else {\n        break;\n      }\n    }\n\n    transformedProgram.body.splice(insertIndex, 0, ...state.templates);\n  }\n\n  addRuntimeImports(transformedProgram, state.runtimeImports, runtimeModule);\n\n  const printableProgram = toPrintableProgram(transformedProgram);\n\n  const printed = print(\n    printableProgram as never,\n    ts(),\n    sourceMap\n      ? { sourceMapSource: filename, sourceMapContent: code }\n      : undefined,\n  ) as unknown as {\n    code: string;\n    map?: unknown;\n  };\n\n  return {\n    code: printed.code,\n    map:\n      sourceMap === true && printed.map !== undefined\n        ? JSON.stringify(printed.map)\n        : undefined,\n  };\n}\n\nexport { transform };\nexport type { TransformOptions, TransformResult };\n","/**\n * SSR code generation utilities for the transformer.\n *\n * Per SPEC.typ:\n * - Generates code that renders to HTML strings with markers\n * - Uses renderToString from @dathra/runtime\n * - Serializes Signal initial values\n *\n * Note: The main SSR transformation is handled in transform.ts\n * This file contains utility functions for SSR-specific operations.\n *\n * Uses the shared ESTree node builders from @/transform/ast.\n */\n\nimport {\n  nArr,\n  nCall,\n  nId,\n  nLit,\n  nNew,\n  nObj,\n  nProp,\n  type ESTNode,\n} from \"@/transform/ast/implementation\";\n\n// ---------------------------------------------------------------------------\n// SSR utilities\n// ---------------------------------------------------------------------------\n\n/**\n * Runtime imports specific to SSR.\n */\nconst SSR_IMPORTS = [\n  \"renderToString\",\n  \"renderTree\",\n  \"serializeState\",\n  \"createMarker\",\n  \"MarkerType\",\n] as const;\n\ntype SSRImport = (typeof SSR_IMPORTS)[number];\n\n/**\n * Check if an import is an SSR-specific import.\n */\nfunction isSSRImport(name: string): name is SSRImport {\n  return SSR_IMPORTS.includes(name as SSRImport);\n}\n\n/**\n * Generate SSR render code for a tree.\n *\n * Produces: renderToString([tree], state, new Map([[1, v1], [2, v2], ...]))\n */\nfunction generateSSRRender(\n  tree: ESTNode,\n  dynamicValues: ESTNode[],\n  stateExpr: ESTNode | null,\n): ESTNode {\n  // Build indexed map entries: [[1, val1], [2, val2], ...]\n  const mapEntries = dynamicValues.map((value, index) =>\n    nArr([nLit(index + 1), value]),\n  );\n\n  const dynamicValuesMap = nNew(nId(\"Map\"), [nArr(mapEntries)]);\n\n  // renderToString([tree], state, dynamicValuesMap)\n  return nCall(nId(\"renderToString\"), [\n    nArr([tree]),\n    stateExpr ?? nObj([]),\n    dynamicValuesMap,\n  ]);\n}\n\n/**\n * Generate state object expression from Signals.\n */\nfunction generateStateObject(signals: Map<string, ESTNode>): ESTNode {\n  if (signals.size === 0) {\n    return nObj([]);\n  }\n\n  const properties = Array.from(signals.entries()).map(([name, expr]) =>\n    nProp(nId(name), expr),\n  );\n\n  return nObj(properties);\n}\n\nexport { generateSSRRender, generateStateObject, isSSRImport, SSR_IMPORTS };\nexport type { SSRImport };\n"],"mappings":"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"}