{"version":3,"file":"structuredDocuments-C2at_rtq.cjs","names":["createHash","parse","path","SaxesParser","stateOf"],"sources":["../src/models/authorBridgeState.ts","../src/services/structuredDocuments/common.ts","../src/services/structuredDocuments/csv.ts","../src/services/structuredDocuments/markdownSlides.ts","../src/services/structuredDocuments/ooxmlArchive.ts","../src/services/structuredDocuments/xmlText.ts","../src/services/structuredDocuments/pptx.ts","../src/services/structuredDocuments/xlsx.ts","../src/services/structuredDocuments/index.ts"],"sourcesContent":["import type {\n  AuthorToolResult,\n  AuthorViewportCapabilityDescriptor,\n  AuthorViewportCatalogSnapshot,\n  UseAuthorToolInput,\n} from '../types/author';\nimport type { AuthorAcceptedMessage, AuthorCancelMessage, AuthorRequestMessage } from '../types/webAuthor';\n\nexport const AUTHOR_REQUEST_TIMEOUT_MS = 15_000;\nexport const AUTHOR_OWNER_LEASE_MS = 10_000;\n\nexport class AuthorBridgeError extends Error {\n  public constructor(\n    message: string,\n    public readonly status: 400 | 404 | 409 | 503 = 409,\n  ) {\n    super(message);\n  }\n}\n\ninterface Owner {\n  bindingId: string;\n  generation: number;\n  ownerToken: string;\n  expiresAt: number;\n  catalogToken?: string;\n  tools: AuthorViewportCapabilityDescriptor[];\n}\n\ninterface Pending {\n  request: AuthorRequestMessage;\n  resolve(value: AuthorToolResult): void;\n  reject(error: Error): void;\n  cancelTimer(): void;\n  removeAbort?: () => void;\n}\n\ntype Delivery = AuthorRequestMessage | AuthorCancelMessage;\n\nexport interface AuthorBridgeStateOptions {\n  now: () => number;\n  issueToken: () => string;\n  scheduleTimeout: (callback: () => void, delayMs: number) => () => void;\n  requestTimeoutMs?: number;\n  leaseMs?: number;\n}\n\nexport interface AuthorBridgeState {\n  register(bindingId: string, generation: number): AuthorAcceptedMessage;\n  catalog(\n    bindingId: string,\n    generation: number,\n    ownerToken: string,\n    tools: AuthorViewportCapabilityDescriptor[],\n  ): AuthorAcceptedMessage;\n  describe(): AuthorViewportCatalogSnapshot;\n  invoke(input: UseAuthorToolInput, signal?: AbortSignal): Promise<AuthorToolResult>;\n  next(bindingId: string, generation: number, ownerToken: string, signal?: AbortSignal): Promise<Delivery>;\n  result(\n    bindingId: string,\n    generation: number,\n    ownerToken: string,\n    catalogToken: string,\n    requestId: string,\n    result: unknown,\n  ): void;\n  cancelled(bindingId: string, generation: number, ownerToken: string, catalogToken: string, requestId: string): void;\n  disconnect(bindingId: string, generation: number): void;\n  close(): void;\n}\n\nexport function createAuthorBridgeState(options: AuthorBridgeStateOptions): AuthorBridgeState {\n  const { now, issueToken, scheduleTimeout } = options;\n  const timeoutMs = options.requestTimeoutMs ?? AUTHOR_REQUEST_TIMEOUT_MS;\n  const leaseMs = options.leaseMs ?? AUTHOR_OWNER_LEASE_MS;\n  let owner: Owner | undefined;\n  let pending: Pending | undefined;\n  let delivery: Delivery | undefined;\n  let deliveryWaiter: { resolve(value: Delivery): void; reject(error: Error): void } | undefined;\n  const tombstones = new Set<string>();\n\n  const rememberCancellation = (requestId: string): void => {\n    tombstones.add(requestId);\n    if (tombstones.size > 100) tombstones.delete(tombstones.values().next().value!);\n  };\n  const publishDelivery = (value: Delivery): void => {\n    if (deliveryWaiter === undefined) delivery = value;\n    else {\n      const waiter = deliveryWaiter;\n      deliveryWaiter = undefined;\n      waiter.resolve(value);\n    }\n  };\n  const rejectPending = (reason: string, sendCancel: boolean): void => {\n    const current = pending;\n    if (current === undefined) return;\n    pending = undefined;\n    current.cancelTimer();\n    current.removeAbort?.();\n    rememberCancellation(current.request.requestId);\n    if (sendCancel) publishDelivery({ ...current.request, kind: 'cancel' });\n    current.reject(new AuthorBridgeError(reason, 503));\n  };\n  const liveOwner = (): Owner => {\n    if (owner === undefined) throw new AuthorBridgeError('No Author viewport is registered.', 503);\n    if (owner.expiresAt <= now()) {\n      rejectPending('The Author viewport lease expired.', false);\n      owner = undefined;\n      throw new AuthorBridgeError('The Author viewport lease expired.', 503);\n    }\n    return owner;\n  };\n  const assertOwner = (bindingId: string, generation: number, ownerToken: string): Owner => {\n    const current = liveOwner();\n    if (current.bindingId !== bindingId || current.generation !== generation || current.ownerToken !== ownerToken) {\n      throw new AuthorBridgeError('Stale Author viewport binding.');\n    }\n    return current;\n  };\n  const assertRequest = (\n    bindingId: string,\n    generation: number,\n    ownerToken: string,\n    catalogToken: string,\n    requestId: string,\n  ): Pending => {\n    const currentOwner = assertOwner(bindingId, generation, ownerToken);\n    if (currentOwner.catalogToken !== catalogToken) throw new AuthorBridgeError('Stale Author catalog token.');\n    if (tombstones.has(requestId)) throw new AuthorBridgeError('The Author request was already cancelled.');\n    if (pending?.request.requestId !== requestId) throw new AuthorBridgeError('Stale Author request.');\n    return pending;\n  };\n\n  return {\n    register(bindingId, generation) {\n      if (bindingId === '' || !Number.isSafeInteger(generation) || generation < 0) {\n        throw new AuthorBridgeError('Invalid Author registration.', 400);\n      }\n      if (owner !== undefined && owner.expiresAt > now()) {\n        if (owner.bindingId !== bindingId) throw new AuthorBridgeError('Another Author viewport owns the lease.');\n        if (generation < owner.generation) throw new AuthorBridgeError('Stale Author generation.');\n        if (generation === owner.generation) {\n          owner.expiresAt = now() + leaseMs;\n          return {\n            kind: 'accepted',\n            generation,\n            ownerToken: owner.ownerToken,\n            ...(owner.catalogToken === undefined ? {} : { catalogToken: owner.catalogToken }),\n            leaseMs,\n          };\n        }\n      }\n      rejectPending('The Author viewport generation changed.', false);\n      delivery = undefined;\n      const current: Owner = {\n        bindingId,\n        generation,\n        ownerToken: issueToken(),\n        expiresAt: now() + leaseMs,\n        tools: [],\n      };\n      owner = current;\n      return { kind: 'accepted', generation, ownerToken: current.ownerToken, leaseMs };\n    },\n    catalog(bindingId, generation, ownerToken, tools) {\n      const current = assertOwner(bindingId, generation, ownerToken);\n      if (!Array.isArray(tools) || tools.length > 15) throw new AuthorBridgeError('Invalid Author catalog.', 400);\n      const names = new Set<string>();\n      for (const tool of tools) {\n        if (\n          typeof tool !== 'object' ||\n          tool === null ||\n          typeof tool.name !== 'string' ||\n          !/^[a-z][a-z0-9_]{0,29}$/.test(tool.name) ||\n          typeof tool.label !== 'string' ||\n          typeof tool.description !== 'string' ||\n          typeof tool.inputSchema !== 'object' ||\n          tool.inputSchema === null ||\n          Array.isArray(tool.inputSchema) ||\n          names.has(tool.name)\n        ) {\n          throw new AuthorBridgeError('Invalid Author catalog.', 400);\n        }\n        names.add(tool.name);\n      }\n      if (pending !== undefined) throw new AuthorBridgeError('Cannot replace the Author catalog during a request.');\n      current.tools = tools.map((tool) => ({ ...tool, inputSchema: { ...tool.inputSchema } }));\n      current.catalogToken = issueToken();\n      current.expiresAt = now() + leaseMs;\n      return {\n        kind: 'accepted',\n        generation,\n        ownerToken,\n        catalogToken: current.catalogToken,\n        leaseMs,\n      };\n    },\n    describe() {\n      const current = liveOwner();\n      if (current.catalogToken === undefined) throw new AuthorBridgeError('The Author viewport has no catalog.', 503);\n      return { catalogToken: current.catalogToken, tools: current.tools };\n    },\n    invoke(input, signal) {\n      let current: Owner;\n      try {\n        current = liveOwner();\n        if (current.catalogToken !== input.catalogToken)\n          throw new AuthorBridgeError('The Author capability catalog changed.');\n        if (!current.tools.some((tool) => tool.name === input.name)) {\n          throw new AuthorBridgeError(`Unknown Author capability: ${input.name}`, 404);\n        }\n        if (pending !== undefined) throw new AuthorBridgeError('Another Author request is already pending.');\n        if (signal?.aborted)\n          throw signal.reason instanceof Error ? signal.reason : new Error('Author request cancelled.');\n      } catch (error) {\n        return Promise.reject(error);\n      }\n      const request: AuthorRequestMessage = {\n        kind: 'request',\n        generation: current.generation,\n        ownerToken: current.ownerToken,\n        catalogToken: current.catalogToken!,\n        requestId: issueToken(),\n        name: input.name,\n        arguments: input.arguments,\n      };\n      return new Promise<AuthorToolResult>((resolve, reject) => {\n        const cancel = (reason: string): void => rejectPending(reason, true);\n        const cancelTimer = scheduleTimeout(\n          () => cancel('The Author request timed out.'),\n          Math.min(timeoutMs, current.expiresAt - now()),\n        );\n        pending = { request, resolve, reject, cancelTimer };\n        if (signal !== undefined) {\n          const onAbort = () => cancel('The Author request was cancelled.');\n          signal.addEventListener('abort', onAbort, { once: true });\n          pending.removeAbort = () => signal.removeEventListener('abort', onAbort);\n        }\n        publishDelivery(request);\n      });\n    },\n    async next(bindingId, generation, ownerToken, signal) {\n      assertOwner(bindingId, generation, ownerToken);\n      if (delivery !== undefined) {\n        const value = delivery;\n        delivery = undefined;\n        return value;\n      }\n      if (deliveryWaiter !== undefined) throw new AuthorBridgeError('An Author delivery poll is already active.');\n      return await new Promise<Delivery>((resolve, reject) => {\n        let waiter: { resolve(value: Delivery): void; reject(error: Error): void };\n        const onAbort = (): void => {\n          if (deliveryWaiter === waiter) deliveryWaiter = undefined;\n          reject(signal?.reason ?? new Error('Author delivery poll cancelled.'));\n        };\n        waiter = {\n          resolve(value) {\n            signal?.removeEventListener('abort', onAbort);\n            resolve(value);\n          },\n          reject,\n        };\n        deliveryWaiter = waiter;\n        signal?.addEventListener('abort', onAbort, { once: true });\n      });\n    },\n    result(bindingId, generation, ownerToken, catalogToken, requestId, result) {\n      const current = assertRequest(bindingId, generation, ownerToken, catalogToken, requestId);\n      pending = undefined;\n      current.cancelTimer();\n      current.removeAbort?.();\n      current.resolve({ catalogToken, name: current.request.name, result });\n    },\n    cancelled(bindingId, generation, ownerToken, catalogToken, requestId) {\n      const current = assertRequest(bindingId, generation, ownerToken, catalogToken, requestId);\n      pending = undefined;\n      current.cancelTimer();\n      current.removeAbort?.();\n      rememberCancellation(requestId);\n      current.reject(new AuthorBridgeError('The Author viewport cancelled the request.'));\n    },\n    disconnect(bindingId, generation) {\n      if (owner?.bindingId !== bindingId || owner.generation !== generation) return;\n      rejectPending('The Author viewport disconnected.', false);\n      owner = undefined;\n      delivery = undefined;\n    },\n    close() {\n      rejectPending('The Author bridge closed.', false);\n      owner = undefined;\n      delivery = undefined;\n      deliveryWaiter?.reject(new Error('The Author bridge closed.'));\n      deliveryWaiter = undefined;\n    },\n  };\n}\n","import { createHash } from 'node:crypto';\n\nimport type {\n  DocumentFragment,\n  DocumentOperation,\n  DocumentOperationLogEntry,\n  DocumentPreflightIssue,\n  DocumentPreflightReport,\n  DocumentRenderModel,\n  ParsedStructuredDocument,\n  StructuredDocumentFormat,\n} from '../../types/structuredDocuments';\n\n/** A document request the host refuses for a stated reason, carrying the HTTP status it means. */\nexport class DocumentRequestError extends Error {\n  constructor(\n    message: string,\n    readonly status: 403 | 413,\n  ) {\n    super(message);\n    this.name = 'DocumentRequestError';\n  }\n}\n\n/** The input is larger than a document operation accepts. */\nexport const documentTooLarge = (message: string): DocumentRequestError => new DocumentRequestError(message, 413);\n\nexport const MAX_COMPRESSED_BYTES = 25 * 1024 * 1024;\nexport const MAX_EXPANDED_BYTES = 100 * 1024 * 1024;\nexport const MAX_XML_ENTRY_BYTES = 10 * 1024 * 1024;\nexport const MAX_ARCHIVE_ENTRIES = 4096;\nexport const MAX_COMPRESSION_RATIO = 100;\n\nexport function digestOf(value: Uint8Array | string): string {\n  return createHash('sha256').update(value).digest('hex');\n}\n\nexport function parsedDocument(\n  format: StructuredDocumentFormat,\n  bytes: Uint8Array,\n  fragments: DocumentFragment[],\n  metadata: Record<string, string | number | boolean> = {},\n): ParsedStructuredDocument {\n  return {\n    manifest: {\n      format,\n      sourceDigest: digestOf(bytes),\n      byteLength: bytes.byteLength,\n      fragmentCount: fragments.length,\n      metadata,\n    },\n    fragments,\n    renderModel: renderModel(format, fragments),\n  };\n}\n\nfunction renderModel(format: StructuredDocumentFormat, fragments: DocumentFragment[]): DocumentRenderModel {\n  return { format, blocks: fragments.map(({ id, text, readOnly }) => ({ id, text, readOnly: readOnly === true })) };\n}\n\nexport function preflight(\n  document: ParsedStructuredDocument,\n  operations: DocumentOperation[],\n  validate?: (operation: DocumentOperation, fragment: DocumentFragment) => DocumentPreflightIssue | undefined,\n  binding?: unknown,\n): DocumentPreflightReport {\n  const fragments = new Map(document.fragments.map((fragment) => [fragment.id, fragment]));\n  const seen = new Set<string>();\n  const issues: DocumentPreflightIssue[] = [];\n  const log: DocumentOperationLogEntry[] = [];\n  let replacementBytes = 0;\n  for (const operation of operations) {\n    const fragment = fragments.get(operation.fragmentId);\n    if (!fragment) {\n      issues.push({\n        code: 'unknown-fragment',\n        message: 'The operation names an unknown fragment.',\n        fragmentId: operation.fragmentId,\n      });\n      continue;\n    }\n    if (seen.has(operation.fragmentId)) {\n      issues.push({\n        code: 'duplicate-operation',\n        message: 'A fragment may be replaced only once.',\n        fragmentId: operation.fragmentId,\n      });\n      continue;\n    }\n    seen.add(operation.fragmentId);\n    const operationBytes = new TextEncoder().encode(operation.replacement).byteLength;\n    replacementBytes += operationBytes;\n    if (operationBytes > MAX_XML_ENTRY_BYTES || replacementBytes > MAX_EXPANDED_BYTES) {\n      issues.push({\n        code: 'replacement-limit',\n        message: 'Replacement content exceeds the document mutation limits.',\n        fragmentId: operation.fragmentId,\n      });\n      continue;\n    }\n    if (fragment.readOnly === true) {\n      issues.push({ code: 'read-only', message: 'The fragment is read-only.', fragmentId: operation.fragmentId });\n      continue;\n    }\n    const issue = validate?.(operation, fragment);\n    if (issue) issues.push(issue);\n    else log.push({ ...operation, previous: fragment.text });\n  }\n  const digest = digestOf(\n    JSON.stringify({\n      format: document.manifest.format,\n      binding,\n      sourceDigest: document.manifest.sourceDigest,\n      operations: log,\n      issues,\n    }),\n  );\n  return {\n    accepted: issues.length === 0,\n    digest,\n    sourceDigest: document.manifest.sourceDigest,\n    operations: log,\n    issues,\n  };\n}\n\nexport function requireAccepted(report: DocumentPreflightReport, expectedDigest: string): void {\n  if (!report.accepted || report.digest !== expectedDigest)\n    throw new Error('An accepted, current preflight report digest is required.');\n}\n\nexport function decodeUtf8(bytes: Uint8Array): string {\n  const text = new TextDecoder('utf-8', { fatal: true }).decode(bytes);\n  if (text.includes('\\0')) throw new Error('NUL bytes are not supported.');\n  return text;\n}\n","import { parse } from 'csv-parse/sync';\n\nimport type {\n  CsvDialect,\n  DocumentOperation,\n  DocumentPreflightReport,\n  ParsedStructuredDocument,\n  SerializedStructuredDocument,\n} from '../../types/structuredDocuments';\nimport {\n  decodeUtf8,\n  documentTooLarge,\n  MAX_COMPRESSED_BYTES,\n  parsedDocument,\n  preflight,\n  requireAccepted,\n} from './common';\n\nconst FORMULA_TRIGGER = /^\\s*[=+\\-@]/;\nconst MAX_CELLS = 1_000_000;\n\nfunction detectDialect(text: string): CsvDialect {\n  const recordDelimiter = text.includes('\\r\\n') ? '\\r\\n' : '\\n';\n  const firstRecord = text.split(/\\r?\\n/, 1)[0] ?? '';\n  const delimiters: CsvDialect['delimiter'][] = [',', ';', '\\t', '|'];\n  const delimiter = delimiters.reduce((best, candidate) =>\n    firstRecord.split(candidate).length > firstRecord.split(best).length ? candidate : best,\n  );\n  return { delimiter, quote: '\"', recordDelimiter };\n}\n\nfunction normalizeDialect(text: string, requestedDialect?: Partial<CsvDialect>): CsvDialect {\n  if (\n    requestedDialect !== undefined &&\n    (typeof requestedDialect !== 'object' || requestedDialect === null || Array.isArray(requestedDialect))\n  ) {\n    throw new Error('CSV dialect must be an object.');\n  }\n  const dialect = { ...detectDialect(text), ...requestedDialect } as Record<string, unknown>;\n  if (![',', ';', '\\t', '|'].includes(dialect.delimiter as string)) throw new Error('Invalid CSV delimiter.');\n  if (!['\"', \"'\"].includes(dialect.quote as string)) throw new Error('Invalid CSV quote.');\n  if (!['\\n', '\\r\\n'].includes(dialect.recordDelimiter as string)) throw new Error('Invalid CSV record delimiter.');\n  return dialect as unknown as CsvDialect;\n}\n\nexport function parseCsv(\n  source: Uint8Array | string,\n  requestedDialect?: Partial<CsvDialect>,\n): ParsedStructuredDocument {\n  const bytes = typeof source === 'string' ? new TextEncoder().encode(source) : source;\n  if (bytes.byteLength > MAX_COMPRESSED_BYTES) throw documentTooLarge('CSV input exceeds the size limit.');\n  const text = decodeUtf8(bytes);\n  const dialect = normalizeDialect(text, requestedDialect);\n  const records = parse(text, {\n    bom: true,\n    delimiter: dialect.delimiter,\n    quote: dialect.quote,\n    record_delimiter: [dialect.recordDelimiter],\n    relax_column_count: false,\n    skip_empty_lines: false,\n  }) as string[][];\n  const cellCount = records.reduce((total, row) => total + row.length, 0);\n  if (cellCount > MAX_CELLS) throw documentTooLarge('CSV input has too many cells.');\n  const fragments = records.flatMap((row, rowIndex) =>\n    row.map((text, columnIndex) => {\n      if (FORMULA_TRIGGER.test(text)) throw new Error(`CSV formula trigger rejected at row ${rowIndex + 1}.`);\n      return {\n        id: `cell:${rowIndex + 1}:${columnIndex + 1}`,\n        kind: 'cell' as const,\n        text,\n        location: `row ${rowIndex + 1}, column ${columnIndex + 1}`,\n      };\n    }),\n  );\n  return parsedDocument('csv', bytes, fragments, {\n    rows: records.length,\n    columns: records.reduce((maximum, row) => Math.max(maximum, row.length), 0),\n    delimiter: dialect.delimiter,\n    quote: dialect.quote,\n    recordDelimiter: dialect.recordDelimiter,\n  });\n}\n\nexport function preflightCsv(\n  source: Uint8Array | string,\n  operations: DocumentOperation[],\n  dialect?: Partial<CsvDialect>,\n): DocumentPreflightReport {\n  const bytes = typeof source === 'string' ? new TextEncoder().encode(source) : source;\n  const text = decodeUtf8(bytes);\n  const normalizedDialect = normalizeDialect(text, dialect);\n  return preflight(\n    parseCsv(bytes, normalizedDialect),\n    operations,\n    (operation) =>\n      FORMULA_TRIGGER.test(operation.replacement)\n        ? {\n            code: 'formula-trigger',\n            message: 'CSV values may not begin with a formula trigger.',\n            fragmentId: operation.fragmentId,\n          }\n        : undefined,\n    { dialect: normalizedDialect },\n  );\n}\n\nfunction encodeCell(value: string, dialect: CsvDialect): string {\n  const escaped = value.replaceAll(dialect.quote, dialect.quote + dialect.quote);\n  return value.includes(dialect.delimiter) || value.includes(dialect.quote) || /[\\r\\n]/.test(value)\n    ? `${dialect.quote}${escaped}${dialect.quote}`\n    : escaped;\n}\n\nexport function serializeCsv(\n  source: Uint8Array | string,\n  operations: DocumentOperation[],\n  acceptedReportDigest: string,\n  requestedDialect?: Partial<CsvDialect>,\n): SerializedStructuredDocument {\n  const original = typeof source === 'string' ? source : decodeUtf8(source);\n  const dialect = normalizeDialect(original, requestedDialect);\n  const document = parseCsv(source, dialect);\n  const report = preflightCsv(source, operations, dialect);\n  requireAccepted(report, acceptedReportDigest);\n  const replacements = new Map(report.operations.map((operation) => [operation.fragmentId, operation.replacement]));\n  const fragments = new Map(document.fragments.map((fragment) => [fragment.id, fragment]));\n  const rows = Number(document.manifest.metadata.rows);\n  const columns = Number(document.manifest.metadata.columns);\n  const outputRows: string[] = [];\n  for (let row = 1; row <= rows; row += 1) {\n    const values: string[] = [];\n    for (let column = 1; column <= columns; column += 1) {\n      const id = `cell:${row}:${column}`;\n      const fragment = fragments.get(id);\n      if (fragment) values.push(encodeCell(replacements.get(id) ?? fragment.text, dialect));\n    }\n    outputRows.push(values.join(dialect.delimiter));\n  }\n  const bytes = new TextEncoder().encode(outputRows.join(dialect.recordDelimiter));\n  return { bytes, operationLog: report.operations, manifest: parseCsv(bytes, dialect).manifest };\n}\n","import type {\n  DocumentOperation,\n  DocumentPreflightReport,\n  ParsedStructuredDocument,\n  SerializedStructuredDocument,\n} from '../../types/structuredDocuments';\nimport {\n  decodeUtf8,\n  documentTooLarge,\n  MAX_COMPRESSED_BYTES,\n  parsedDocument,\n  preflight,\n  requireAccepted,\n} from './common';\n\nconst SLIDE_SEPARATOR = /^(?:---|\\*\\*\\*)[ \\t]*$/m;\nconst MAX_SLIDES = 1000;\n\nexport function parseMarkdownSlides(source: Uint8Array | string): ParsedStructuredDocument {\n  const bytes = typeof source === 'string' ? new TextEncoder().encode(source) : source;\n  if (bytes.byteLength > MAX_COMPRESSED_BYTES) throw documentTooLarge('Markdown input exceeds the size limit.');\n  const text = decodeUtf8(bytes);\n  const slides = text.split(SLIDE_SEPARATOR);\n  if (slides.length > MAX_SLIDES) throw documentTooLarge('Markdown input has too many slides.');\n  const fragments = slides.map((slide, index) => ({\n    id: `slide:${index + 1}`,\n    kind: 'slide' as const,\n    text: slide.replace(/^\\r?\\n+|\\r?\\n+$/g, ''),\n    location: `slide ${index + 1}`,\n  }));\n  return parsedDocument('markdown-slides', bytes, fragments, { slideCount: fragments.length });\n}\n\nexport function preflightMarkdownSlides(\n  source: Uint8Array | string,\n  operations: DocumentOperation[],\n): DocumentPreflightReport {\n  return preflight(parseMarkdownSlides(source), operations);\n}\n\nexport function serializeMarkdownSlides(\n  source: Uint8Array | string,\n  operations: DocumentOperation[],\n  acceptedReportDigest: string,\n): SerializedStructuredDocument {\n  const document = parseMarkdownSlides(source);\n  const report = preflight(document, operations);\n  requireAccepted(report, acceptedReportDigest);\n  const replacements = new Map(report.operations.map((operation) => [operation.fragmentId, operation.replacement]));\n  const output = document.fragments\n    .map((fragment) => replacements.get(fragment.id) ?? fragment.text)\n    .join('\\n\\n---\\n\\n');\n  const bytes = new TextEncoder().encode(output);\n  return { bytes, operationLog: report.operations, manifest: parseMarkdownSlides(bytes).manifest };\n}\n","import path from 'node:path';\n\nimport { SaxesParser } from 'saxes';\nimport yauzl from 'yauzl';\nimport yazl from 'yazl';\n\nimport {\n  documentTooLarge,\n  MAX_ARCHIVE_ENTRIES,\n  MAX_COMPRESSED_BYTES,\n  MAX_COMPRESSION_RATIO,\n  MAX_EXPANDED_BYTES,\n  MAX_XML_ENTRY_BYTES,\n} from './common';\n\nexport interface OoxmlArchiveEntry {\n  name: string;\n  data: Buffer;\n  compressionMethod: number;\n}\n\nexport interface OoxmlArchive {\n  entries: OoxmlArchiveEntry[];\n  byName: Map<string, OoxmlArchiveEntry>;\n}\n\nfunction normalizedEntryName(name: string): string {\n  const slashName = name.replaceAll('\\\\', '/');\n  if (slashName.startsWith('/') || /^[A-Za-z]:/.test(slashName))\n    throw new Error('Absolute archive entry path rejected.');\n  const normalized = path.posix.normalize(slashName);\n  if (normalized === '..' || normalized.startsWith('..') || normalized.includes('/../')) {\n    throw new Error('Archive path traversal rejected.');\n  }\n  return normalized.replace(/^\\.\\//, '');\n}\n\nfunction openArchive(bytes: Buffer): Promise<yauzl.ZipFile> {\n  return new Promise((resolve, reject) => {\n    yauzl.fromBuffer(bytes, { lazyEntries: true, decodeStrings: true, validateEntrySizes: true }, (error, zipFile) => {\n      if (error || !zipFile) reject(error ?? new Error('Malformed ZIP archive.'));\n      else resolve(zipFile);\n    });\n  });\n}\n\nfunction readEntry(zipFile: yauzl.ZipFile, entry: yauzl.Entry): Promise<Buffer> {\n  return new Promise((resolve, reject) => {\n    zipFile.openReadStream(entry, (error, stream) => {\n      if (error || !stream) {\n        reject(error ?? new Error('Could not read archive entry.'));\n        return;\n      }\n      const chunks: Buffer[] = [];\n      stream.on('data', (chunk: Buffer) => chunks.push(chunk));\n      stream.once('error', reject);\n      stream.once('end', () => resolve(Buffer.concat(chunks)));\n    });\n  });\n}\n\nfunction validateXml(name: string, data: Buffer): void {\n  if (data.byteLength > MAX_XML_ENTRY_BYTES) throw documentTooLarge(`XML entry exceeds its size limit: ${name}`);\n  const xml = new TextDecoder('utf-8', { fatal: true }).decode(data);\n  const withoutDeclaration = xml.replace(/^\\uFEFF?\\s*<\\?xml\\s[^?]*\\?>/i, '');\n  if (/<!DOCTYPE|<!ENTITY|<\\?/i.test(withoutDeclaration)) throw new Error(`Unsafe XML construct rejected: ${name}`);\n  const parser = new SaxesParser({ xmlns: true });\n  let parseError: Error | undefined;\n  parser.on('error', (error: Error) => {\n    parseError = error;\n  });\n  parser.write(xml).close();\n  if (parseError) throw new Error(`Malformed XML entry: ${name}`);\n  if (/TargetMode\\s*=\\s*[\"']External[\"']/i.test(xml)) throw new Error('External OOXML relationship rejected.');\n  if (/<(?:\\w+:)?(?:workbookProtection|sheetProtection|documentProtection|modifyVerifier)\\b/i.test(xml)) {\n    throw new Error('Protected OOXML content rejected.');\n  }\n}\n\nexport async function readOoxmlArchive(source: Uint8Array): Promise<OoxmlArchive> {\n  if (source.byteLength > MAX_COMPRESSED_BYTES)\n    throw documentTooLarge('OOXML archive exceeds the compressed size limit.');\n  const zipFile = await openArchive(Buffer.from(source));\n  return await new Promise<OoxmlArchive>((resolve, reject) => {\n    const entries: OoxmlArchiveEntry[] = [];\n    const names = new Set<string>();\n    let expanded = 0;\n    const fail = (error: unknown): void => {\n      zipFile.close();\n      reject(error instanceof Error ? error : new Error(String(error)));\n    };\n    zipFile.once('error', fail);\n    zipFile.on('entry', (entry: yauzl.Entry) => {\n      void (async () => {\n        if (entries.length >= MAX_ARCHIVE_ENTRIES) throw documentTooLarge('OOXML archive has too many entries.');\n        if ((entry.generalPurposeBitFlag & 1) !== 0) throw new Error('Encrypted OOXML archive rejected.');\n        if (((entry.externalFileAttributes >>> 16) & 0xf000) === 0xa000) throw new Error('Archive symlink rejected.');\n        if (entry.compressionMethod !== 0 && entry.compressionMethod !== 8)\n          throw new Error('Unsupported ZIP compression method.');\n        const name = normalizedEntryName(entry.fileName);\n        if (!name || names.has(name)) throw new Error('Duplicate normalized archive entry rejected.');\n        names.add(name);\n        expanded += entry.uncompressedSize;\n        if (expanded > MAX_EXPANDED_BYTES) throw documentTooLarge('OOXML archive exceeds the expanded size limit.');\n        if (entry.uncompressedSize > Math.max(1, entry.compressedSize) * MAX_COMPRESSION_RATIO) {\n          throw documentTooLarge('OOXML archive compression ratio exceeds the limit.');\n        }\n        const lower = name.toLowerCase();\n        if (\n          lower === 'encryptedpackage' ||\n          lower === 'encryptioninfo' ||\n          lower.includes('vbaproject') ||\n          lower.includes('_xmlsignatures') ||\n          lower.endsWith('.bin')\n        ) {\n          throw new Error('Encrypted, signed, or macro-enabled OOXML content rejected.');\n        }\n        const data = name.endsWith('/') ? Buffer.alloc(0) : await readEntry(zipFile, entry);\n        if (/\\.xml$|\\.rels$/i.test(name)) validateXml(name, data);\n        entries.push({ name, data, compressionMethod: entry.compressionMethod });\n        zipFile.readEntry();\n      })().catch(fail);\n    });\n    zipFile.once('end', () => {\n      if (!names.has('[Content_Types].xml')) {\n        fail(new Error('Unsupported OOXML archive: missing content types.'));\n        return;\n      }\n      resolve({ entries, byName: new Map(entries.map((entry) => [entry.name, entry])) });\n    });\n    zipFile.readEntry();\n  });\n}\n\nexport function assertOoxmlKind(archive: OoxmlArchive, kind: 'pptx' | 'xlsx'): void {\n  const contentTypes = archive.byName.get('[Content_Types].xml')?.data.toString('utf8') ?? '';\n  const required = kind === 'pptx' ? 'presentationml.presentation.main+xml' : 'spreadsheetml.sheet.main+xml';\n  if (!contentTypes.includes(required))\n    throw new Error(`Unsupported OOXML archive: not a ${kind.toUpperCase()} document.`);\n  if (/macroEnabled|vnd\\.ms-office\\.vbaProject/i.test(contentTypes))\n    throw new Error('Macro-enabled OOXML content rejected.');\n}\n\nexport async function writeOoxmlArchive(\n  archive: OoxmlArchive,\n  replacements: ReadonlyMap<string, Buffer>,\n): Promise<Uint8Array> {\n  const zipFile = new yazl.ZipFile();\n  const chunks: Buffer[] = [];\n  const output = new Promise<Buffer>((resolve, reject) => {\n    zipFile.outputStream.on('data', (chunk: Buffer) => chunks.push(chunk));\n    zipFile.outputStream.once('error', reject);\n    zipFile.outputStream.once('end', () => resolve(Buffer.concat(chunks)));\n  });\n  for (const entry of archive.entries) {\n    if (entry.name.endsWith('/')) zipFile.addEmptyDirectory(entry.name);\n    else\n      zipFile.addBuffer(replacements.get(entry.name) ?? entry.data, entry.name, {\n        compress: entry.compressionMethod === 8,\n      });\n  }\n  zipFile.end();\n  return await output;\n}\n","export function decodeXmlText(value: string): string {\n  return value\n    .replaceAll('&lt;', '<')\n    .replaceAll('&gt;', '>')\n    .replaceAll('&quot;', '\"')\n    .replaceAll('&apos;', \"'\")\n    .replaceAll('&amp;', '&');\n}\n\nexport function encodeXmlText(value: string): string {\n  return value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');\n}\n\nexport function replaceRange(source: string, start: number, end: number, replacement: string): string {\n  return source.slice(0, start) + replacement + source.slice(end);\n}\n","import type {\n  DocumentOperation,\n  DocumentPreflightReport,\n  ParsedStructuredDocument,\n  SerializedStructuredDocument,\n} from '../../types/structuredDocuments';\nimport { parsedDocument, preflight, requireAccepted } from './common';\nimport { assertOoxmlKind, readOoxmlArchive, writeOoxmlArchive, type OoxmlArchive } from './ooxmlArchive';\nimport { decodeXmlText, encodeXmlText, replaceRange } from './xmlText';\n\ninterface PptxState {\n  archive: OoxmlArchive;\n  document: ParsedStructuredDocument;\n  ranges: Map<string, { entry: string; start: number; end: number }>;\n}\n\nasync function stateOf(source: Uint8Array): Promise<PptxState> {\n  const archive = await readOoxmlArchive(source);\n  assertOoxmlKind(archive, 'pptx');\n  const fragments: ParsedStructuredDocument['fragments'] = [];\n  const ranges = new Map<string, { entry: string; start: number; end: number }>();\n  const slideEntries = archive.entries\n    .filter((entry) => /^ppt\\/slides\\/slide\\d+\\.xml$/i.test(entry.name))\n    .sort((left, right) => left.name.localeCompare(right.name, undefined, { numeric: true }));\n  for (const entry of slideEntries) {\n    const xml = entry.data.toString('utf8');\n    const paragraphs = xml.matchAll(/<a:p(?:\\s[^>]*)?>([\\s\\S]*?)<\\/a:p>/g);\n    let runIndex = 0;\n    for (const paragraph of paragraphs) {\n      const body = paragraph[1] ?? '';\n      const runCount = (body.match(/<a:r(?:\\s[^>]*)?>/g) ?? []).length;\n      const textCount = (body.match(/<a:t(?:\\s[^>]*)?>/g) ?? []).length;\n      if (textCount === 0) continue;\n      if (runCount !== 1 || textCount !== 1) throw new Error('Unsupported PPTX paragraph with multiple text styles.');\n      const textMatch = /<a:t(?:\\s[^>]*)?>([\\s\\S]*?)<\\/a:t>/.exec(body);\n      if (!textMatch) throw new Error('Malformed PPTX text run.');\n      runIndex += 1;\n      const id = `${entry.name}#text:${runIndex}`;\n      const paragraphStart = paragraph.index ?? 0;\n      const bodyOffset = paragraph[0].indexOf(body);\n      const textOffset = body.indexOf(textMatch[1] ?? '', textMatch.index);\n      const start = paragraphStart + bodyOffset + textOffset;\n      const end = start + (textMatch[1]?.length ?? 0);\n      fragments.push({ id, kind: 'text-run', text: decodeXmlText(textMatch[1] ?? ''), location: entry.name });\n      ranges.set(id, { entry: entry.name, start, end });\n    }\n  }\n  return { archive, document: parsedDocument('pptx', source, fragments, { slides: slideEntries.length }), ranges };\n}\n\nexport async function parsePptx(source: Uint8Array): Promise<ParsedStructuredDocument> {\n  return (await stateOf(source)).document;\n}\n\nexport async function preflightPptx(\n  source: Uint8Array,\n  operations: DocumentOperation[],\n): Promise<DocumentPreflightReport> {\n  return preflight((await stateOf(source)).document, operations);\n}\n\nexport async function serializePptx(\n  source: Uint8Array,\n  operations: DocumentOperation[],\n  acceptedReportDigest: string,\n): Promise<SerializedStructuredDocument> {\n  const state = await stateOf(source);\n  const report = preflight(state.document, operations);\n  requireAccepted(report, acceptedReportDigest);\n  const byEntry = new Map<string, Array<{ start: number; end: number; replacement: string }>>();\n  for (const operation of report.operations) {\n    const range = state.ranges.get(operation.fragmentId);\n    if (!range) throw new Error('PPTX text run changed during serialization.');\n    const list = byEntry.get(range.entry) ?? [];\n    list.push({ start: range.start, end: range.end, replacement: encodeXmlText(operation.replacement) });\n    byEntry.set(range.entry, list);\n  }\n  const replacements = new Map<string, Buffer>();\n  for (const [entryName, edits] of byEntry) {\n    let xml = state.archive.byName.get(entryName)?.data.toString('utf8') ?? '';\n    for (const edit of edits.sort((left, right) => right.start - left.start)) {\n      xml = replaceRange(xml, edit.start, edit.end, edit.replacement);\n    }\n    replacements.set(entryName, Buffer.from(xml));\n  }\n  const bytes = await writeOoxmlArchive(state.archive, replacements);\n  return { bytes, operationLog: report.operations, manifest: (await parsePptx(bytes)).manifest };\n}\n","import type {\n  DocumentOperation,\n  DocumentPreflightReport,\n  ParsedStructuredDocument,\n  SerializedStructuredDocument,\n} from '../../types/structuredDocuments';\nimport { parsedDocument, preflight, requireAccepted } from './common';\nimport { assertOoxmlKind, readOoxmlArchive, writeOoxmlArchive, type OoxmlArchive } from './ooxmlArchive';\nimport { decodeXmlText, encodeXmlText, replaceRange } from './xmlText';\n\ninterface CellRange {\n  entry: string;\n  start: number;\n  end: number;\n  attributes: string;\n}\n\ninterface XlsxState {\n  archive: OoxmlArchive;\n  document: ParsedStructuredDocument;\n  ranges: Map<string, CellRange>;\n}\n\ninterface SharedString {\n  text: string;\n  multiRun: boolean;\n}\n\nfunction textNodes(xml: string): string {\n  return [...xml.matchAll(/<(?:\\w+:)?t(?:\\s[^>]*)?>([\\s\\S]*?)<\\/(?:\\w+:)?t>/g)]\n    .map((match) => decodeXmlText(match[1] ?? ''))\n    .join('');\n}\n\nfunction sharedStrings(archive: OoxmlArchive): SharedString[] {\n  const xml = archive.byName.get('xl/sharedStrings.xml')?.data.toString('utf8');\n  if (!xml) return [];\n  return [...xml.matchAll(/<si(?:\\s[^>]*)?>([\\s\\S]*?)<\\/si>/g)].map((match) => {\n    const body = match[1] ?? '';\n    return { text: textNodes(body), multiRun: [...body.matchAll(/<(?:\\w+:)?r(?:\\s[^>]*)?>/g)].length > 1 };\n  });\n}\n\nfunction attribute(attributes: string, name: string): string | undefined {\n  return new RegExp(`\\\\s${name}=[\"']([^\"']*)[\"']`).exec(attributes)?.[1];\n}\n\nasync function stateOf(source: Uint8Array): Promise<XlsxState> {\n  const archive = await readOoxmlArchive(source);\n  assertOoxmlKind(archive, 'xlsx');\n  const shared = sharedStrings(archive);\n  const fragments: ParsedStructuredDocument['fragments'] = [];\n  const ranges = new Map<string, CellRange>();\n  const worksheets = archive.entries\n    .filter((entry) => /^xl\\/worksheets\\/sheet\\d+\\.xml$/i.test(entry.name))\n    .sort((left, right) => left.name.localeCompare(right.name, undefined, { numeric: true }));\n  for (const entry of worksheets) {\n    const xml = entry.data.toString('utf8');\n    for (const match of xml.matchAll(/<c(\\s[^>]*)>([\\s\\S]*?)<\\/c>/g)) {\n      const attributes = match[1] ?? '';\n      const body = match[2] ?? '';\n      const reference = attribute(attributes, 'r');\n      if (!reference) continue;\n      const type = attribute(attributes, 't');\n      const formula = /<f(?:\\s[^>]*)?>[\\s\\S]*?<\\/f>|<f\\s*\\/>/.test(body);\n      const value = /<v(?:\\s[^>]*)?>([\\s\\S]*?)<\\/v>/.exec(body)?.[1] ?? '';\n      let text: string;\n      let multiRun = false;\n      if (type === 's') {\n        const index = Number(value);\n        const sharedString = shared[index];\n        if (!Number.isInteger(index) || sharedString === undefined)\n          throw new Error(`Malformed shared string cell: ${reference}`);\n        text = sharedString.text;\n        multiRun = sharedString.multiRun;\n      } else if (type === 'inlineStr') {\n        text = textNodes(body);\n        multiRun = [...body.matchAll(/<(?:\\w+:)?r(?:\\s[^>]*)?>/g)].length > 1;\n      } else text = decodeXmlText(value);\n      const id = `${entry.name}#cell:${reference}`;\n      fragments.push({ id, kind: 'cell', text, readOnly: formula || multiRun, location: `${entry.name}!${reference}` });\n      ranges.set(id, {\n        entry: entry.name,\n        start: match.index,\n        end: match.index + match[0].length,\n        attributes,\n      });\n    }\n  }\n  return { archive, document: parsedDocument('xlsx', source, fragments, { worksheets: worksheets.length }), ranges };\n}\n\nexport async function parseXlsx(source: Uint8Array): Promise<ParsedStructuredDocument> {\n  return (await stateOf(source)).document;\n}\n\nexport async function preflightXlsx(\n  source: Uint8Array,\n  operations: DocumentOperation[],\n): Promise<DocumentPreflightReport> {\n  return preflight((await stateOf(source)).document, operations, (operation) =>\n    /^\\s*=/.test(operation.replacement)\n      ? { code: 'formula-input', message: 'Formula input is not accepted.', fragmentId: operation.fragmentId }\n      : undefined,\n  );\n}\n\nexport async function serializeXlsx(\n  source: Uint8Array,\n  operations: DocumentOperation[],\n  acceptedReportDigest: string,\n): Promise<SerializedStructuredDocument> {\n  const state = await stateOf(source);\n  const report = await preflightXlsx(source, operations);\n  requireAccepted(report, acceptedReportDigest);\n  const byEntry = new Map<string, Array<CellRange & { replacement: string }>>();\n  for (const operation of report.operations) {\n    const range = state.ranges.get(operation.fragmentId);\n    if (!range) throw new Error('XLSX cell changed during serialization.');\n    const list = byEntry.get(range.entry) ?? [];\n    list.push({ ...range, replacement: operation.replacement });\n    byEntry.set(range.entry, list);\n  }\n  const replacements = new Map<string, Buffer>();\n  for (const [entryName, edits] of byEntry) {\n    let xml = state.archive.byName.get(entryName)?.data.toString('utf8') ?? '';\n    for (const edit of edits.sort((left, right) => right.start - left.start)) {\n      const attributes = edit.attributes.replace(/\\st=[\"'][^\"']*[\"']/, '') + ' t=\"inlineStr\"';\n      const cell = `<c${attributes}><is><t>${encodeXmlText(edit.replacement)}</t></is></c>`;\n      xml = replaceRange(xml, edit.start, edit.end, cell);\n    }\n    replacements.set(entryName, Buffer.from(xml));\n  }\n  const bytes = await writeOoxmlArchive(state.archive, replacements);\n  return { bytes, operationLog: report.operations, manifest: (await parseXlsx(bytes)).manifest };\n}\n","import type {\n  CsvDialect,\n  DocumentOperation,\n  DocumentPreflightReport,\n  ParsedStructuredDocument,\n  SerializedStructuredDocument,\n  StructuredDocumentFormat,\n} from '../../types/structuredDocuments';\nimport { parseCsv, preflightCsv, serializeCsv } from './csv';\nimport { parseMarkdownSlides, preflightMarkdownSlides, serializeMarkdownSlides } from './markdownSlides';\nimport { parsePptx, preflightPptx, serializePptx } from './pptx';\nimport { parseXlsx, preflightXlsx, serializeXlsx } from './xlsx';\n\nexport async function parseStructuredDocument(\n  format: StructuredDocumentFormat,\n  bytes: Uint8Array,\n  csvDialect?: Partial<CsvDialect>,\n): Promise<ParsedStructuredDocument> {\n  if (format === 'markdown-slides') return parseMarkdownSlides(bytes);\n  if (format === 'csv') return parseCsv(bytes, csvDialect);\n  if (format === 'pptx') return await parsePptx(bytes);\n  return await parseXlsx(bytes);\n}\n\nexport async function preflightStructuredDocument(\n  format: StructuredDocumentFormat,\n  bytes: Uint8Array,\n  operations: DocumentOperation[],\n  csvDialect?: Partial<CsvDialect>,\n): Promise<DocumentPreflightReport> {\n  if (format === 'markdown-slides') return preflightMarkdownSlides(bytes, operations);\n  if (format === 'csv') return preflightCsv(bytes, operations, csvDialect);\n  if (format === 'pptx') return await preflightPptx(bytes, operations);\n  return await preflightXlsx(bytes, operations);\n}\n\nexport async function serializeStructuredDocument(\n  format: StructuredDocumentFormat,\n  bytes: Uint8Array,\n  operations: DocumentOperation[],\n  acceptedReportDigest: string,\n  csvDialect?: Partial<CsvDialect>,\n): Promise<SerializedStructuredDocument> {\n  if (format === 'markdown-slides') return serializeMarkdownSlides(bytes, operations, acceptedReportDigest);\n  if (format === 'csv') return serializeCsv(bytes, operations, acceptedReportDigest, csvDialect);\n  if (format === 'pptx') return await serializePptx(bytes, operations, acceptedReportDigest);\n  return await serializeXlsx(bytes, operations, acceptedReportDigest);\n}\n\nexport { parseCsv, preflightCsv, serializeCsv } from './csv';\nexport { parseMarkdownSlides, preflightMarkdownSlides, serializeMarkdownSlides } from './markdownSlides';\nexport { readOoxmlArchive } from './ooxmlArchive';\nexport { parsePptx, preflightPptx, serializePptx } from './pptx';\nexport { parseXlsx, preflightXlsx, serializeXlsx } from './xlsx';\n"],"mappings":"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"}