{"version":3,"sources":["../typescript/src/toon/index.ts"],"names":["encode","toon","decode"],"mappings":"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","file":"toon.cjs","sourcesContent":["/**\n * TOON Serialization for SemanticDOM\n * Token-Oriented Object Notation for LLM-efficient semantic document encoding\n *\n * TOON reduces token usage by ~40-50% compared to JSON, making it ideal\n * for passing SemanticDOM documents to AI agents.\n *\n * @packageDocumentation\n */\n\nimport { encode, decode, type EncodeOptions, type DecodeOptions } from '@toon-format/toon';\nimport type {\n  SemanticDocument,\n  SemanticNode,\n  SemanticId,\n  SSGNode,\n  AgentCertification,\n} from '../core/types.js';\n\n/**\n * Serializable representation of SemanticNode (without circular refs)\n */\ninterface SerializableNode {\n  id: string;\n  role: string;\n  label: string;\n  intent?: string;\n  state: string;\n  selector: string;\n  xpath: string;\n  a11y: {\n    name: string;\n    focusable: boolean;\n    inTabOrder: boolean;\n    level?: number;\n  };\n  children: SerializableNode[];\n  value?: string | number | boolean;\n}\n\n/**\n * Serializable document format for TOON encoding\n */\ninterface SerializableDocument {\n  version: string;\n  standard: string;\n  url: string;\n  title: string;\n  language: string;\n  generatedAt: number;\n  agentReady: {\n    level: string;\n    score: number;\n    checks: Array<{ id: string; name: string; passed: boolean }>;\n    failures: Array<{ id: string; name: string; message: string; severity?: string }>;\n  };\n  root: SerializableNode;\n  landmarks: Array<{ id: string; role: string; label: string }>;\n  interactables: Array<{ id: string; role: string; label: string; intent?: string }>;\n  stateGraph: Array<{\n    id: string;\n    state: string;\n    transitions: Array<{ from: string; to: string; trigger: string }>;\n  }>;\n}\n\n/**\n * Convert SemanticNode to serializable format\n */\nfunction serializeNode(node: SemanticNode): SerializableNode {\n  return {\n    id: node.id,\n    role: node.role,\n    label: node.label,\n    intent: node.intent,\n    state: node.state,\n    selector: node.selector,\n    xpath: node.xpath,\n    a11y: {\n      name: node.a11y.name,\n      focusable: node.a11y.focusable,\n      inTabOrder: node.a11y.inTabOrder,\n      level: node.a11y.level,\n    },\n    children: node.children.map(serializeNode),\n    value: node.value,\n  };\n}\n\n/**\n * Convert SemanticDocument to serializable format\n */\nfunction serializeDocument(doc: SemanticDocument): SerializableDocument {\n  const stateGraphArray: SerializableDocument['stateGraph'] = [];\n\n  doc.stateGraph.forEach((ssgNode, id) => {\n    stateGraphArray.push({\n      id,\n      state: ssgNode.currentState,\n      transitions: ssgNode.transitions.map((t) => ({\n        from: t.from,\n        to: t.to,\n        trigger: typeof t.trigger === 'string' ? t.trigger : String(t.trigger),\n      })),\n    });\n  });\n\n  return {\n    version: doc.version,\n    standard: doc.standard,\n    url: doc.url,\n    title: doc.title,\n    language: doc.language,\n    generatedAt: doc.generatedAt,\n    agentReady: {\n      level: doc.agentReady.level,\n      score: doc.agentReady.score,\n      checks: doc.agentReady.checks.map((c) => ({\n        id: c.id,\n        name: c.name,\n        passed: c.passed,\n      })),\n      failures: doc.agentReady.failures.map((f) => ({\n        id: f.id,\n        name: f.name,\n        message: f.message,\n        severity: f.severity,\n      })),\n    },\n    root: serializeNode(doc.root),\n    landmarks: doc.landmarks.map((l) => ({\n      id: l.id,\n      role: l.role,\n      label: l.label,\n    })),\n    interactables: doc.interactables.map((i) => ({\n      id: i.id,\n      role: i.role,\n      label: i.label,\n      intent: i.intent,\n    })),\n    stateGraph: stateGraphArray,\n  };\n}\n\n/**\n * Encode SemanticDocument to TOON format\n *\n * @param document - SemanticDocument to encode\n * @param options - TOON encoding options\n * @returns TOON formatted string\n *\n * @example\n * ```ts\n * const toon = toTOON(document);\n * // Saves ~40-50% tokens vs JSON\n * ```\n */\nexport function toTOON(document: SemanticDocument, options?: EncodeOptions): string {\n  const serializable = serializeDocument(document);\n  return encode(serializable, {\n    indent: 2,\n    keyFolding: 'safe',\n    ...options,\n  });\n}\n\n/**\n * Decode TOON string to partial SemanticDocument data\n *\n * Note: Returns plain object structure, not full SemanticDocument with Map indexes.\n * Use this for reading TOON data; create fresh SemanticDocument via parse() for full functionality.\n *\n * @param toon - TOON formatted string\n * @param options - TOON decoding options\n * @returns Decoded document data\n */\nexport function fromTOON(toon: string, options?: DecodeOptions): SerializableDocument {\n  return decode(toon, {\n    strict: true,\n    expandPaths: 'safe',\n    ...options,\n  }) as unknown as SerializableDocument;\n}\n\n/**\n * Encode just the semantic tree (nodes only) to TOON\n * Useful for passing to LLMs when you only need structure\n *\n * @param root - Root SemanticNode\n * @returns TOON formatted string of just the tree\n */\nexport function treeToTOON(root: SemanticNode, options?: EncodeOptions): string {\n  return encode(serializeNode(root), {\n    indent: 2,\n    keyFolding: 'safe',\n    ...options,\n  });\n}\n\n/**\n * Encode landmarks array to TOON (compact format)\n *\n * @param landmarks - Array of landmark nodes\n * @returns TOON formatted string\n */\nexport function landmarksToTOON(landmarks: SemanticNode[], options?: EncodeOptions): string {\n  const data = landmarks.map((l) => ({\n    id: l.id,\n    role: l.role,\n    label: l.label,\n    selector: l.selector,\n  }));\n  return encode({ landmarks: data }, options);\n}\n\n/**\n * Encode interactables array to TOON (compact format)\n *\n * @param interactables - Array of interactive nodes\n * @returns TOON formatted string\n */\nexport function interactablesToTOON(interactables: SemanticNode[], options?: EncodeOptions): string {\n  const data = interactables.map((i) => ({\n    id: i.id,\n    role: i.role,\n    label: i.label,\n    intent: i.intent,\n    state: i.state,\n    selector: i.selector,\n  }));\n  return encode({ interactables: data }, options);\n}\n\n/**\n * Encode state graph to TOON\n *\n * @param stateGraph - Map of SSG nodes\n * @returns TOON formatted string\n */\nexport function stateGraphToTOON(\n  stateGraph: Map<SemanticId, SSGNode>,\n  options?: EncodeOptions\n): string {\n  const nodes: Array<{\n    id: string;\n    state: string;\n    transitions: Array<{ from: string; to: string; trigger: string }>;\n  }> = [];\n\n  stateGraph.forEach((node, id) => {\n    nodes.push({\n      id,\n      state: node.currentState,\n      transitions: node.transitions.map((t) => ({\n        from: t.from,\n        to: t.to,\n        trigger: String(t.trigger),\n      })),\n    });\n  });\n\n  return encode({ stateGraph: nodes }, options);\n}\n\n/**\n * Encode certification report to TOON\n *\n * @param certification - AgentCertification object\n * @returns TOON formatted string\n */\nexport function certificationToTOON(\n  certification: AgentCertification,\n  options?: EncodeOptions\n): string {\n  return encode(\n    {\n      level: certification.level,\n      score: certification.score,\n      passed: certification.checks.map((c) => c.name),\n      failed: certification.failures.map((f) => ({\n        name: f.name,\n        severity: f.severity,\n        message: f.message,\n      })),\n    },\n    options\n  );\n}\n\n/**\n * Calculate token savings estimate\n *\n * @param document - SemanticDocument to analyze\n * @returns Token comparison stats\n */\nexport function estimateTokenSavings(document: SemanticDocument): {\n  jsonTokens: number;\n  toonTokens: number;\n  savings: number;\n  savingsPercent: number;\n} {\n  const serializable = serializeDocument(document);\n  const jsonStr = JSON.stringify(serializable, null, 2);\n  const toonStr = toTOON(document);\n\n  // Rough token estimate: ~4 chars per token for English text\n  const jsonTokens = Math.ceil(jsonStr.length / 4);\n  const toonTokens = Math.ceil(toonStr.length / 4);\n  const savings = jsonTokens - toonTokens;\n  const savingsPercent = Math.round((savings / jsonTokens) * 100);\n\n  return {\n    jsonTokens,\n    toonTokens,\n    savings,\n    savingsPercent,\n  };\n}\n\n// Re-export TOON types for convenience\nexport type { EncodeOptions, DecodeOptions } from '@toon-format/toon';\n"]}