{"version":3,"sources":["../src/domain/types.ts","../src/infrastructure/adapters/stream-adapter.ts","../src/infrastructure/adapters/xml-adapter.ts","../src/infrastructure/adapters/zip-adapter.ts","../src/infrastructure/repositories/docx-repository.ts","../src/application/use-cases/parse-document.use-case.ts","../src/application/use-cases/extract-content.use-case.ts","../src/application/use-cases/validate-document.use-case.ts","../src/application/use-cases/parse-document-to-array.use-case.ts","../src/interfaces/docx-parser.ts","../src/index.ts"],"names":["ReadableStream","JSZip","createReadStream"],"mappings":"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","file":"index.cjs","sourcesContent":["export interface BaseElement {\n  type: string;\n  id?: string;\n  position: { page: number; section: number; order: number };\n  error?: {\n    type: 'warning' | 'error';\n    message: string;\n    recoverable: boolean;\n  };\n}\n\nexport interface MetadataElement extends BaseElement {\n  type: 'metadata';\n  content: {\n    title?: string;\n    author?: string;\n    subject?: string;\n    keywords?: string[];\n    created?: Date;\n    modified?: Date;\n    pages?: number;\n    words?: number;\n  };\n}\n\nexport interface ParagraphElement extends BaseElement {\n  type: 'paragraph';\n  content: string;\n  formatting?: {\n    bold?: boolean;\n    italic?: boolean;\n    underline?: boolean;\n    fontSize?: number;\n    fontFamily?: string;\n    color?: string;\n    alignment?: 'left' | 'center' | 'right' | 'justify';\n    indent?: number;\n    lineSpacing?: number;\n  };\n  hyperlinks?: Array<{\n    text: string;\n    url: string;\n    start: number;\n    end: number;\n  }>;\n}\n\nexport interface ImageElement extends BaseElement {\n  type: 'image';\n  content: Buffer;\n  metadata: {\n    filename?: string;\n    format: 'png' | 'jpg' | 'gif' | 'svg' | 'wmf' | 'emf';\n    width: number;\n    height: number;\n    dpi?: number;\n  };\n  positioning?: {\n    inline: boolean;\n    x?: number;\n    y?: number;\n    wrap?: 'square' | 'tight' | 'through' | 'topBottom';\n  };\n}\n\nexport interface TableRow {\n  cells: TableCell[];\n  height?: number;\n  isHeader?: boolean;\n}\n\nexport interface TableCell {\n  content: string;\n  colspan?: number;\n  rowspan?: number;\n  formatting?: {\n    backgroundColor?: string;\n    textAlign?: 'left' | 'center' | 'right';\n    verticalAlign?: 'top' | 'middle' | 'bottom';\n  };\n}\n\nexport interface TableElement extends BaseElement {\n  type: 'table';\n  content: TableRow[];\n  formatting?: {\n    borders?: boolean;\n    borderStyle?: string;\n    width?: number | 'auto';\n    alignment?: 'left' | 'center' | 'right';\n  };\n}\n\nexport interface ListElement extends BaseElement {\n  type: 'list';\n  content: string[];\n  listType: 'bullet' | 'number';\n  level: number;\n}\n\nexport interface HeaderElement extends BaseElement {\n  type: 'header';\n  content: string;\n  level: 1 | 2 | 3 | 4 | 5 | 6;\n}\n\nexport interface FooterElement extends BaseElement {\n  type: 'footer';\n  content: string;\n}\n\nexport interface PageBreakElement extends BaseElement {\n  type: 'pageBreak';\n  content: null;\n}\n\nexport interface SectionElement extends BaseElement {\n  type: 'section';\n  content: string;\n  sectionType: 'header' | 'footer' | 'body';\n}\n\nexport type DocumentElement =\n  | MetadataElement\n  | ParagraphElement\n  | ImageElement\n  | TableElement\n  | ListElement\n  | HeaderElement\n  | FooterElement\n  | PageBreakElement\n  | SectionElement;\n\nexport interface ParseOptions {\n  // Content filtering\n  includeMetadata?: boolean; // default: true\n  includeImages?: boolean;   // default: true\n  includeTables?: boolean;   // default: true\n  includeHeaders?: boolean;  // default: false\n  includeFooters?: boolean;  // default: false\n\n  // Image handling\n  imageFormat?: 'buffer' | 'base64' | 'stream'; // default: 'buffer'\n  maxImageSize?: number; // bytes, default: 10MB\n\n  // Text processing\n  preserveFormatting?: boolean; // default: true\n  normalizeWhitespace?: boolean; // default: true\n\n  // Performance\n  chunkSize?: number; // for stream processing, default: 64KB\n  concurrent?: boolean; // process elements concurrently, default: false\n}\n\nexport interface ValidationResult {\n  isValid: boolean;\n  errors: Array<{\n    code: string;\n    message: string;\n    severity: 'error' | 'warning';\n    position?: { line: number; column: number };\n  }>;\n}\n\nexport class DocxParseError extends Error {\n  constructor(\n    message: string,\n    public readonly position?: { line: number; column: number },\n    public readonly code?: string\n  ) {\n    super(message);\n    this.name = 'DocxParseError';\n  }\n}\n","import type { ReadStream } from 'node:fs';\nimport type { Readable } from 'node:stream';\nimport { ReadableStream } from 'node:stream/web';\n\n/**\n * StreamAdapter - Class for converting normal ReadStream to web ReadableStream\n */\nexport class StreamAdapter {\n  /**\n   * Converts a Node.js ReadStream to web ReadableStream\n   * @param readStream - Node.js read stream (fs.ReadStream)\n   * @returns Web API ReadableStream\n   */\n  static toWebStream(readStream: ReadStream): ReadableStream<Uint8Array> {\n    return new ReadableStream<Uint8Array>({\n      start(controller) {\n        readStream.on('data', (chunk: string | Buffer) => {\n          // Efficiently converts Buffer to Uint8Array\n          const buffer = chunk instanceof Buffer ? chunk : Buffer.from(chunk);\n          const uint8Array = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\n          controller.enqueue(uint8Array);\n        });\n\n        readStream.on('end', () => {\n          controller.close();\n        });\n\n        readStream.on('error', (error) => {\n          controller.error(error);\n        });\n      },\n\n      cancel() {\n        // Cleans up the stream if cancelled\n        readStream.destroy();\n      }\n    });\n  }\n\n  /**\n   * Checks if it's a Web ReadableStream\n   */\n  private static isWebReadableStream(stream: any): stream is ReadableStream<Uint8Array> {\n    return stream && typeof stream.getReader === 'function';\n  }\n\n  /**\n   * Checks if it's a Node.js Readable stream\n   */\n  private static isNodeReadableStream(stream: any): stream is Readable {\n    return stream && typeof stream.read === 'function' && typeof stream.on === 'function';\n  }\n\n  /**\n   * Converts Node.js Readable stream to Buffer\n   */\n  private static async nodeStreamToBuffer(stream: Readable): Promise<Buffer> {\n    const chunks: Buffer[] = [];\n\n    return new Promise((resolve, reject) => {\n      stream.on('data', (chunk: Buffer) => {\n        chunks.push(chunk);\n      });\n\n      stream.on('end', () => {\n        resolve(Buffer.concat(chunks));\n      });\n\n      stream.on('error', (error) => {\n        reject(error);\n      });\n    });\n  }\n\n  /**\n   * Converts Web ReadableStream to Buffer\n   */\n  private static async webStreamToBuffer(stream: ReadableStream<Uint8Array>): Promise<Buffer> {\n    const chunks: Uint8Array[] = [];\n    const reader = stream.getReader();\n\n    try {\n      let done = false;\n      while (!done) {\n        const result = await reader.read();\n        done = result.done;\n        if (result.value) {\n          chunks.push(result.value);\n        }\n      }\n    } finally {\n      reader.releaseLock();\n    }\n\n    return Buffer.concat(chunks);\n  }\n\n  /**\n   * Converts ReadableStream (Web or Node.js) to Buffer\n   * Automatically detects stream type and uses appropriate conversion\n   * @param stream - Web ReadableStream or Node.js Readable stream\n   * @returns Promise that resolves to Buffer\n   */\n  static async toBuffer(stream: ReadableStream<Uint8Array> | Readable): Promise<Buffer> {\n    if (this.isWebReadableStream(stream)) {\n      return this.webStreamToBuffer(stream);\n    } else if (this.isNodeReadableStream(stream)) {\n      return this.nodeStreamToBuffer(stream);\n    } else {\n      throw new Error('Stream type not supported. Expected Web ReadableStream or Node.js Readable stream.');\n    }\n  }\n\n  /**\n   * Creates a web ReadableStream from a Buffer\n   * @param buffer - Buffer to be converted\n   * @returns Web ReadableStream\n   */\n  static fromBuffer(buffer: Buffer): ReadableStream<Uint8Array> {\n    let position = 0;\n    const chunkSize = 64 * 1024; // 64KB chunks\n\n    return new ReadableStream<Uint8Array>({\n      pull(controller) {\n        if (position >= buffer.length) {\n          controller.close();\n          return;\n        }\n\n        const chunk = buffer.subarray(position, Math.min(position + chunkSize, buffer.length));\n        const uint8Array = new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n\n        controller.enqueue(uint8Array);\n        position += chunk.length;\n      }\n    });\n  }\n\n  /**\n   * Converts Node.js Readable stream to Web ReadableStream\n   * Useful for HTTP requests (axios, fetch, etc)\n   * @param nodeStream - Node.js Readable stream\n   * @returns Web API ReadableStream\n   */\n  static nodeToWebStream(nodeStream: Readable): ReadableStream<Uint8Array> {\n    return new ReadableStream<Uint8Array>({\n      start(controller) {\n        nodeStream.on('data', (chunk: Buffer) => {\n          const uint8Array = new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n          controller.enqueue(uint8Array);\n        });\n\n        nodeStream.on('end', () => {\n          controller.close();\n        });\n\n        nodeStream.on('error', (error) => {\n          controller.error(error);\n        });\n      },\n\n      cancel() {\n        if (nodeStream.destroy) {\n          nodeStream.destroy();\n        }\n      }\n    });\n  }\n}\n","import type { XmlRepository } from '../../domain/repositories';\nimport { DocxParseError } from '../../domain/types';\n\nexport class XmlAdapter implements XmlRepository {\n  parseXml(xmlContent: string): globalThis.Document {\n    // For now, we'll create a simple mock Document\n    // In a real implementation, you'd use a proper XML parser like 'fast-xml-parser'\n    console.log('XML content length:', xmlContent.length);\n    throw new DocxParseError('XML parsing not implemented - use a proper XML parser library');\n  }\n\n  extractText(xmlDoc: globalThis.Document): string {\n    console.log('XML doc:', xmlDoc);\n    throw new DocxParseError('XML text extraction not implemented');\n  }\n\n  extractElements(xmlDoc: globalThis.Document, tagName: string): globalThis.Element[] {\n    console.log('XML doc:', xmlDoc, 'Tag name:', tagName);\n    throw new DocxParseError('XML element extraction not implemented');\n  }\n\n  // Simple regex-based text extraction for basic functionality\n  extractTextFromXml(xmlContent: string): string {\n    try {\n      // Remove XML tags and extract text content\n      const textContent = xmlContent\n        .replace(/<[^>]*>/g, ' ') // Remove all XML tags\n        .replace(/\\s+/g, ' ') // Normalize whitespace\n        .trim();\n\n      return textContent;\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract text from XML: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  // Extract paragraph content using regex\n  extractParagraphsFromXml(xmlContent: string): string[] {\n    try {\n      const paragraphs: string[] = [];\n      const paragraphRegex = /<w:p[^>]*>(.*?)<\\/w:p>/gs;\n      let match;\n\n      while ((match = paragraphRegex.exec(xmlContent)) !== null) {\n        const paragraphXml = match[1];\n        if (paragraphXml) {\n          const text = this.extractTextFromXml(paragraphXml);\n          if (text.trim()) {\n            paragraphs.push(text);\n          }\n        }\n      }\n\n      return paragraphs;\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract paragraphs: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  // Extract paragraphs with style information to detect headers\n  extractParagraphsWithStyleFromXml(xmlContent: string): Array<{ text: string; type: 'paragraph' | 'header'; level?: number }> {\n    try {\n      const elements: Array<{ text: string; type: 'paragraph' | 'header'; level?: number }> = [];\n      const paragraphRegex = /<w:p[^>]*>(.*?)<\\/w:p>/gs;\n      let match;\n\n      while ((match = paragraphRegex.exec(xmlContent)) !== null) {\n        const paragraphXml = match[1];\n        if (paragraphXml) {\n          const text = this.extractTextFromXml(paragraphXml);\n          if (text.trim()) {\n            // Check if it's a header based on style or formatting\n            const styleInfo = this.analyzeStyleForHeader(paragraphXml);\n            const element: { text: string; type: 'paragraph' | 'header'; level?: number } = {\n              text: text.trim(),\n              type: styleInfo.isHeader ? 'header' : 'paragraph'\n            };\n\n            if (styleInfo.level !== undefined) {\n              element.level = styleInfo.level;\n            }\n\n            elements.push(element);\n          }\n        }\n      }\n\n      return elements;\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract paragraphs with style: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  // Extract paragraphs with formatting information (including strike for checkboxes)\n  extractParagraphsWithFormattingFromXml(xmlContent: string): Array<{\n    text: string;\n    type: 'paragraph' | 'header';\n    level?: number;\n    formatting?: {\n      bold?: boolean;\n      italic?: boolean;\n      underline?: boolean;\n      strike?: boolean; // For checked checkboxes\n    };\n  }> {\n    try {\n      const elements: Array<{\n        text: string;\n        type: 'paragraph' | 'header';\n        level?: number;\n        formatting?: {\n          bold?: boolean;\n          italic?: boolean;\n          underline?: boolean;\n          strike?: boolean;\n        };\n      }> = [];\n      const paragraphRegex = /<w:p[^>]*>(.*?)<\\/w:p>/gs;\n      let match;\n\n      while ((match = paragraphRegex.exec(xmlContent)) !== null) {\n        const paragraphXml = match[1];\n        if (paragraphXml) {\n          const text = this.extractTextFromXml(paragraphXml);\n          if (text.trim()) {\n            // Check if it's a header based on style or formatting\n            const styleInfo = this.analyzeStyleForHeader(paragraphXml);\n            const formattingInfo = this.extractFormattingInfo(paragraphXml);\n\n            const element: {\n              text: string;\n              type: 'paragraph' | 'header';\n              level?: number;\n              formatting?: {\n                bold?: boolean;\n                italic?: boolean;\n                underline?: boolean;\n                strike?: boolean;\n              };\n            } = {\n              text: text.trim(),\n              type: styleInfo.isHeader ? 'header' : 'paragraph'\n            };\n\n            if (styleInfo.level !== undefined) {\n              element.level = styleInfo.level;\n            }\n\n            if (Object.keys(formattingInfo).length > 0) {\n              element.formatting = formattingInfo;\n            }\n\n            elements.push(element);\n          }\n        }\n      }\n\n      return elements;\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract paragraphs with formatting: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  // Extract formatting information from paragraph XML\n  private extractFormattingInfo(paragraphXml: string): {\n    bold?: boolean;\n    italic?: boolean;\n    underline?: boolean;\n    strike?: boolean;\n  } {\n    const formatting: {\n      bold?: boolean;\n      italic?: boolean;\n      underline?: boolean;\n      strike?: boolean;\n    } = {};\n\n    // Check for bold\n    if (/<w:b\\b[^>]*\\/?>/.test(paragraphXml)) {\n      formatting.bold = true;\n    }\n\n    // Check for italic\n    if (/<w:i\\b[^>]*\\/?>/.test(paragraphXml)) {\n      formatting.italic = true;\n    }\n\n    // Check for underline\n    if (/<w:u\\b[^>]*\\/?>/.test(paragraphXml)) {\n      formatting.underline = true;\n    }\n\n    // Check for strike (indicates checked checkbox)\n    if (/<w:strike\\s+w:val=[\"']1[\"'][^>]*\\/?>/.test(paragraphXml)) {\n      formatting.strike = true;\n    }\n\n    return formatting;\n  }\n\n  // Analyze paragraph style to determine if it's a header\n  private analyzeStyleForHeader(paragraphXml: string): { isHeader: boolean; level?: number } {\n    // Check for heading styles (w:pStyle with heading values)\n    const headingStyleRegex = /<w:pStyle[^>]*w:val=[\"']([^\"']*heading[^\"']*)[\"'][^>]*>/i;\n    const headingMatch = paragraphXml.match(headingStyleRegex);\n\n    if (headingMatch && headingMatch[1]) {\n      const style = headingMatch[1].toLowerCase();\n      const levelMatch = style.match(/heading(\\d+)|h(\\d+)/);\n      const level = levelMatch ? parseInt(levelMatch[1] || levelMatch[2] || '1') : 1;\n      return { isHeader: true, level };\n    }\n\n    // Check for Title style\n    const titleStyleRegex = /<w:pStyle[^>]*w:val=[\"']([^\"']*title[^\"']*)[\"'][^>]*>/i;\n    if (titleStyleRegex.test(paragraphXml)) {\n      return { isHeader: true, level: 1 };\n    }\n\n    // Check for subtitle style\n    const subtitleStyleRegex = /<w:pStyle[^>]*w:val=[\"']([^\"']*subtitle[^\"']*)[\"'][^>]*>/i;\n    if (subtitleStyleRegex.test(paragraphXml)) {\n      return { isHeader: true, level: 2 };\n    }\n\n    // For now, we'll be very conservative and only detect explicitly styled headers\n    // No heuristics - only official Word styles are detected as headers\n    return { isHeader: false };\n  }\n\n  // Extract table content using regex\n  extractTablesFromXml(xmlContent: string): Array<{ rows: Array<{ cells: string[] }> }> {\n    try {\n      const tables: Array<{ rows: Array<{ cells: string[] }> }> = [];\n      const tableRegex = /<w:tbl[^>]*>(.*?)<\\/w:tbl>/gs;\n      let tableMatch;\n\n      while ((tableMatch = tableRegex.exec(xmlContent)) !== null) {\n        const tableXml = tableMatch[1];\n        if (!tableXml) continue;\n\n        const rows: Array<{ cells: string[] }> = [];\n\n        const rowRegex = /<w:tr[^>]*>(.*?)<\\/w:tr>/gs;\n        let rowMatch;\n\n        while ((rowMatch = rowRegex.exec(tableXml)) !== null) {\n          const rowXml = rowMatch[1];\n          if (!rowXml) continue;\n\n          const cells: string[] = [];\n\n          const cellRegex = /<w:tc[^>]*>(.*?)<\\/w:tc>/gs;\n          let cellMatch;\n\n          while ((cellMatch = cellRegex.exec(rowXml)) !== null) {\n            const cellXml = cellMatch[1];\n            if (cellXml) {\n              const cellText = this.extractTextFromXml(cellXml);\n              cells.push(cellText);\n            }\n          }\n\n          if (cells.length > 0) {\n            rows.push({ cells });\n          }\n        }\n\n        if (rows.length > 0) {\n          tables.push({ rows });\n        }\n      }\n\n      return tables;\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract tables: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  // Extract header content from XML\n  extractHeaderFromXml(xmlContent: string): { text: string; hasPageNumber: boolean; watermark?: string } | null {\n    try {\n      const textContent = this.extractTextFromXml(xmlContent);\n\n      // Check for PAGE field (page number)\n      const hasPageNumber = /<w:instrText[^>]*>PAGE<\\/w:instrText>/.test(xmlContent);\n\n      // Check for watermark - more flexible pattern\n      const watermarkMatch = xmlContent.match(/string=\"([^\"]*)\"[^>]*>.*?<v:textpath/) ||\n                           xmlContent.match(/string=\"([^\"]*)\".*?fitshape=\"t\"/);\n      const watermark = watermarkMatch ? watermarkMatch[1] : undefined;\n\n      if (textContent.trim() || hasPageNumber || watermark) {\n        const result: { text: string; hasPageNumber: boolean; watermark?: string } = {\n          text: textContent.trim(),\n          hasPageNumber\n        };\n\n        if (watermark) {\n          result.watermark = watermark;\n        }\n\n        return result;\n      }\n\n      return null;\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract header: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  // Extract footer content from XML\n  extractFooterFromXml(xmlContent: string): { text: string; hasPageNumber: boolean } | null {\n    try {\n      const textContent = this.extractTextFromXml(xmlContent);\n\n      // Check for PAGE field (page number)\n      const hasPageNumber = /<w:instrText[^>]*>PAGE<\\/w:instrText>/.test(xmlContent);\n\n      if (textContent.trim() || hasPageNumber) {\n        return {\n          text: textContent.trim(),\n          hasPageNumber\n        };\n      }\n\n      return null;\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract footer: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  // Extract footnotes from XML\n  extractFootnotesFromXml(xmlContent: string): Array<{ id: string; text: string }> {\n    try {\n      const footnotes: Array<{ id: string; text: string }> = [];\n      const footnoteRegex = /<w:footnote[^>]*w:id=\"([^\"]*)\"[^>]*>(.*?)<\\/w:footnote>/gs;\n      let match;\n\n      while ((match = footnoteRegex.exec(xmlContent)) !== null) {\n        const id = match[1];\n        const footnoteXml = match[2];\n\n        if (id && footnoteXml && id !== \"0\") { // Skip the default footnote with id=\"0\"\n          const text = this.extractTextFromXml(footnoteXml);\n          if (text.trim()) {\n            footnotes.push({\n              id,\n              text: text.trim()\n            });\n          }\n        } else if (id === \"0\" && footnoteXml) {\n          // Special handling for the default footnote\n          const text = this.extractTextFromXml(footnoteXml);\n          if (text.trim()) {\n            footnotes.push({\n              id,\n              text: text.trim()\n            });\n          }\n        }\n      }\n\n      return footnotes;\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract footnotes: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n}\n","import JSZip from 'jszip';\n\nimport type { ZipRepository } from '../../domain/repositories';\nimport { DocxParseError } from '../../domain/types';\n\nexport class ZipAdapter implements ZipRepository {\n  async extractFile(buffer: Buffer, filename: string): Promise<Buffer | null> {\n    try {\n      const zip = new JSZip();\n      const zipData = await zip.loadAsync(buffer);\n\n      const file = zipData.file(filename);\n      if (!file) {\n        return null;\n      }\n\n      const content = await file.async('uint8array');\n      return Buffer.from(content);\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract file ${filename}: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  async extractFiles(buffer: Buffer, pattern: RegExp): Promise<Map<string, Buffer>> {\n    try {\n      const zip = new JSZip();\n      const zipData = await zip.loadAsync(buffer);\n\n      const files = new Map<string, Buffer>();\n\n      for (const [filename, file] of Object.entries(zipData.files)) {\n        if (file && !file.dir && pattern.test(filename)) {\n          const content = await file.async('uint8array');\n          files.set(filename, Buffer.from(content));\n        }\n      }\n\n      return files;\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract files with pattern ${pattern}: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n}\n","import type { ReadableStream } from 'node:stream/web';\n\nimport type { DocumentRepository } from '../../domain/repositories';\nimport { type DocumentElement, DocxParseError, type ParseOptions } from '../../domain/types';\nimport { StreamAdapter } from '../adapters/stream-adapter';\nimport { XmlAdapter } from '../adapters/xml-adapter';\nimport { ZipAdapter } from '../adapters/zip-adapter';\n\nexport class DocxRepository implements DocumentRepository {\n  private zipAdapter: ZipAdapter;\n  private xmlAdapter: XmlAdapter;\n\n  constructor() {\n    this.zipAdapter = new ZipAdapter();\n    this.xmlAdapter = new XmlAdapter();\n  }\n\n  async* parse(\n    source: Buffer | ReadableStream,\n    options: ParseOptions = {}\n  ): AsyncGenerator<DocumentElement> {\n    try {\n      // Convert ReadableStream to Buffer if needed\n      const buffer = source instanceof Buffer\n        ? source\n        : await StreamAdapter.toBuffer(source as ReadableStream);\n\n      // Set default options\n      const opts: Required<ParseOptions> = {\n        includeMetadata: options.includeMetadata ?? true,\n        includeImages: options.includeImages ?? true,\n        includeTables: options.includeTables ?? true,\n        includeHeaders: options.includeHeaders ?? false,\n        includeFooters: options.includeFooters ?? false,\n        imageFormat: options.imageFormat ?? 'buffer',\n        maxImageSize: options.maxImageSize ?? 10 * 1024 * 1024, // 10MB\n        preserveFormatting: options.preserveFormatting ?? true,\n        normalizeWhitespace: options.normalizeWhitespace ?? true,\n        chunkSize: options.chunkSize ?? 64 * 1024, // 64KB\n        concurrent: options.concurrent ?? false,\n      };\n\n      let elementId = 0;\n      const getNextId = () => `element_${++elementId}`;\n\n      // Extract metadata first if requested\n      if (opts.includeMetadata) {\n        yield* this.extractMetadata(buffer, getNextId);\n      }\n\n      // Extract document content\n      yield* this.extractContent(buffer, opts, getNextId);\n\n      // Extract headers if requested\n      if (opts.includeHeaders) {\n        yield* this.extractHeaders(buffer, getNextId);\n      }\n\n      // Extract footers if requested\n      if (opts.includeFooters) {\n        yield* this.extractFooters(buffer, getNextId);\n      }\n\n      // Extract footnotes\n      yield* this.extractFootnotes(buffer, getNextId);\n\n      // Extract images if requested\n      if (opts.includeImages) {\n        yield* this.extractImages(buffer, opts, getNextId);\n      }\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to parse DOCX document: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  private async* extractMetadata(\n    buffer: Buffer,\n    getNextId: () => string\n  ): AsyncGenerator<DocumentElement> {\n    try {\n      // Extract core properties (metadata)\n      const corePropsBuffer = await this.zipAdapter.extractFile(buffer, 'docProps/core.xml');\n\n      if (corePropsBuffer) {\n        const corePropsXml = corePropsBuffer.toString('utf-8');\n\n        // Simple regex-based metadata extraction\n        const title = this.extractMetadataValue(corePropsXml, 'dc:title');\n        const author = this.extractMetadataValue(corePropsXml, 'dc:creator');\n        const subject = this.extractMetadataValue(corePropsXml, 'dc:subject');\n        const created = this.extractMetadataDate(corePropsXml, 'dcterms:created');\n        const modified = this.extractMetadataDate(corePropsXml, 'dcterms:modified');\n\n        yield {\n          type: 'metadata',\n          id: getNextId(),\n          position: { page: 0, section: 0, order: 0 },\n          content: {\n            title: title || undefined,\n            author: author || undefined,\n            subject: subject || undefined,\n            created: created || undefined,\n            modified: modified || undefined,\n          },\n        } as DocumentElement;\n      } else {\n        // Fallback metadata\n        yield {\n          type: 'metadata',\n          id: getNextId(),\n          position: { page: 0, section: 0, order: 0 },\n          content: {\n            title: 'Unknown Document',\n            author: 'Unknown',\n          },\n        } as DocumentElement;\n      }\n    } catch (error) {\n      // If metadata extraction fails, yield empty metadata\n      yield {\n        type: 'metadata',\n        id: getNextId(),\n        position: { page: 0, section: 0, order: 0 },\n        content: {},\n      } as DocumentElement;\n    }\n  }\n\n  private async* extractContent(\n    buffer: Buffer,\n    options: Required<ParseOptions>,\n    getNextId: () => string\n  ): AsyncGenerator<DocumentElement> {\n    try {\n      const documentBuffer = await this.zipAdapter.extractFile(buffer, 'word/document.xml');\n\n      if (!documentBuffer) {\n        throw new DocxParseError('Main document XML not found');\n      }\n\n      const documentXml = documentBuffer.toString('utf-8');\n\n      // Extract paragraphs with formatting information to detect headers and checkboxes\n      const elements = this.xmlAdapter.extractParagraphsWithFormattingFromXml(documentXml);\n      let order = 1;\n\n      for (const element of elements) {\n        const content = options.normalizeWhitespace\n          ? element.text.replace(/\\s+/g, ' ').trim()\n          : element.text;\n\n        if (element.type === 'header') {\n          yield {\n            type: 'header',\n            id: getNextId(),\n            position: { page: 1, section: 1, order: order++ },\n            content,\n            level: element.level || 1,\n            formatting: {\n              fontFamily: 'Calibri',\n              fontSize: 12,\n              ...element.formatting,\n            },\n          } as DocumentElement;\n        } else {\n          const documentElement: DocumentElement = {\n            type: 'paragraph',\n            id: getNextId(),\n            position: { page: 1, section: 1, order: order++ },\n            content,\n            formatting: {\n              fontFamily: 'Calibri',\n              fontSize: 12,\n              ...element.formatting,\n            },\n          };\n\n          // Add checkbox information if strike formatting is present\n          if (element.formatting?.strike) {\n            (documentElement as any).checkbox = {\n              checked: true\n            };\n          }\n\n          yield documentElement;\n        }\n      }\n\n      // Extract tables if requested\n      if (options.includeTables) {\n        yield* this.extractTables(documentXml, options, getNextId, order);\n      }\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract content: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  private async* extractTables(\n    documentXml: string,\n    options: Required<ParseOptions>,\n    getNextId: () => string,\n    startOrder: number\n  ): AsyncGenerator<DocumentElement> {\n    try {\n      const tables = this.xmlAdapter.extractTablesFromXml(documentXml);\n      let order = startOrder;\n\n      for (const table of tables) {\n        const tableRows = table.rows.map(row => ({\n          cells: row.cells.map(cellText => ({\n            content: options.normalizeWhitespace\n              ? cellText.replace(/\\s+/g, ' ').trim()\n              : cellText,\n          })),\n          isHeader: false,\n        }));\n\n        yield {\n          type: 'table',\n          id: getNextId(),\n          position: { page: 1, section: 1, order: order++ },\n          content: tableRows,\n        } as DocumentElement;\n      }\n    } catch (error) {\n      // If table extraction fails, continue without tables\n      console.warn('Failed to extract tables:', error);\n    }\n  }\n\n  private async* extractImages(\n    buffer: Buffer,\n    options: Required<ParseOptions>,\n    getNextId: () => string\n  ): AsyncGenerator<DocumentElement> {\n    try {\n      // Extract media files (images)\n      const mediaFiles = await this.zipAdapter.extractFiles(buffer, /^word\\/media\\//);\n      let order = 1000; // Start images at higher order\n\n      for (const [filename, imageBuffer] of mediaFiles) {\n        if (imageBuffer.length > options.maxImageSize) {\n          continue; // Skip large images\n        }\n\n        const format = this.getImageFormat(filename);\n        if (!format) continue;\n\n        const filenameOnly = filename.split('/').pop() || 'unknown.img';\n\n        yield {\n          type: 'image',\n          id: getNextId(),\n          position: { page: 1, section: 1, order: order++ },\n          content: imageBuffer,\n          metadata: {\n            filename: filenameOnly,\n            format,\n            width: 0, // TODO: Extract actual dimensions\n            height: 0,\n          },\n          positioning: {\n            inline: true,\n          },\n        } as DocumentElement;\n      }\n    } catch (error) {\n      // If image extraction fails, continue without images\n      console.warn('Failed to extract images:', error);\n    }\n  }\n\n  private extractMetadataValue(xml: string, tagName: string): string | null {\n    const regex = new RegExp(`<${tagName}[^>]*>([^<]*)</${tagName}>`, 'i');\n    const match = xml.match(regex);\n    return match?.[1]?.trim() || null;\n  }\n\n  private extractMetadataDate(xml: string, tagName: string): Date | null {\n    const dateStr = this.extractMetadataValue(xml, tagName);\n    return dateStr ? new Date(dateStr) : null;\n  }\n\n  private getImageFormat(filename: string): 'png' | 'jpg' | 'gif' | 'svg' | 'wmf' | 'emf' | null {\n    const ext = filename.toLowerCase().split('.').pop();\n    switch (ext) {\n      case 'png': return 'png';\n      case 'jpg':\n      case 'jpeg': return 'jpg';\n      case 'gif': return 'gif';\n      case 'svg': return 'svg';\n      case 'wmf': return 'wmf';\n      case 'emf': return 'emf';\n      default: return null;\n    }\n  }\n\n  private async* extractHeaders(\n    buffer: Buffer,\n    getNextId: () => string\n  ): AsyncGenerator<DocumentElement> {\n    try {\n      // Extract header files\n      const headerFiles = await this.zipAdapter.extractFiles(buffer, /^word\\/header\\d*\\.xml$/);\n      let order = 2000; // Start headers at higher order\n\n      for (const [, headerBuffer] of headerFiles) {\n        const headerXml = headerBuffer.toString('utf-8');\n        const headerInfo = this.xmlAdapter.extractHeaderFromXml(headerXml);\n\n        if (headerInfo) {\n          const element: DocumentElement = {\n            type: 'header',\n            id: getNextId(),\n            position: { page: 1, section: 1, order: order++ },\n            content: headerInfo.text,\n            level: 1,\n          };\n\n          // Add additional properties\n          if (headerInfo.hasPageNumber) {\n            (element as any).hasPageNumber = true;\n          }\n          if (headerInfo.watermark) {\n            (element as any).watermark = headerInfo.watermark;\n          }\n\n          yield element;\n        }\n      }\n    } catch (error) {\n      // If header extraction fails, continue without headers\n      console.warn('Failed to extract headers:', error);\n    }\n  }\n\n  private async* extractFooters(\n    buffer: Buffer,\n    getNextId: () => string\n  ): AsyncGenerator<DocumentElement> {\n    try {\n      // Extract footer files\n      const footerFiles = await this.zipAdapter.extractFiles(buffer, /^word\\/footer\\d*\\.xml$/);\n      let order = 3000; // Start footers at higher order\n\n      for (const [, footerBuffer] of footerFiles) {\n        const footerXml = footerBuffer.toString('utf-8');\n        const footerInfo = this.xmlAdapter.extractFooterFromXml(footerXml);\n\n        if (footerInfo) {\n          const element: DocumentElement = {\n            type: 'footer',\n            id: getNextId(),\n            position: { page: 1, section: 1, order: order++ },\n            content: footerInfo.text,\n          };\n\n          // Add additional properties\n          if (footerInfo.hasPageNumber) {\n            (element as any).hasPageNumber = true;\n          }\n\n          yield element;\n        }\n      }\n    } catch (error) {\n      // If footer extraction fails, continue without footers\n      console.warn('Failed to extract footers:', error);\n    }\n  }\n\n  private async* extractFootnotes(\n    buffer: Buffer,\n    getNextId: () => string\n  ): AsyncGenerator<DocumentElement> {\n    try {\n      // Extract footnotes file\n      const footnotesBuffer = await this.zipAdapter.extractFile(buffer, 'word/footnotes.xml');\n\n      if (footnotesBuffer) {\n        const footnotesXml = footnotesBuffer.toString('utf-8');\n        const footnotes = this.xmlAdapter.extractFootnotesFromXml(footnotesXml);\n        let order = 4000; // Start footnotes at higher order\n\n        for (const footnote of footnotes) {\n          // Use paragraph type for footnotes since footnote type doesn't exist in DocumentElement\n          const element: DocumentElement = {\n            type: 'paragraph',\n            id: getNextId(),\n            position: { page: 1, section: 1, order: order++ },\n            content: footnote.text,\n            formatting: {\n              fontFamily: 'Calibri',\n              fontSize: 10,\n            },\n          };\n\n          // Add footnote metadata\n          (element as any).footnoteId = footnote.id;\n          (element as any).isFootnote = true;\n\n          yield element;\n        }\n      }\n    } catch (error) {\n      // If footnote extraction fails, continue without footnotes\n      console.warn('Failed to extract footnotes:', error);\n    }\n  }\n}\n","import type { ReadableStream } from 'node:stream/web';\n\nimport { type DocumentElement, DocxParseError, type ParseOptions } from '../../domain/types';\nimport { DocxRepository } from '../../infrastructure/repositories/docx-repository';\nimport type { ParseDocumentUseCase } from '../interfaces/use-cases';\n\nexport class ParseDocumentUseCaseImpl implements ParseDocumentUseCase {\n  private docxRepository: DocxRepository;\n\n  constructor(docxRepository?: DocxRepository) {\n    this.docxRepository = docxRepository || new DocxRepository();\n  }\n\n  async* execute(\n    source: Buffer | ReadableStream,\n    options: ParseOptions = {}\n  ): AsyncGenerator<DocumentElement> {\n    try {\n      // Validate source\n      if (!source) {\n        throw new DocxParseError('Source cannot be null or undefined');\n      }\n\n      // Delegate to repository\n      yield* this.docxRepository.parse(source, options);\n    } catch (error) {\n      if (error instanceof DocxParseError) {\n        throw error;\n      }\n      throw new DocxParseError(\n        `Failed to parse document: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n}\n","import type { ReadableStream } from 'node:stream/web';\n\nimport { type DocumentElement, DocxParseError } from '../../domain/types';\nimport type { ExtractContentUseCase } from '../interfaces/use-cases';\n\nimport { ParseDocumentUseCaseImpl } from './parse-document.use-case';\n\n\nexport class ExtractContentUseCaseImpl implements ExtractContentUseCase {\n  private parseDocumentUseCase: ParseDocumentUseCaseImpl;\n\n  constructor() {\n    this.parseDocumentUseCase = new ParseDocumentUseCaseImpl();\n  }\n\n  async extractText(\n    source: Buffer | ReadableStream,\n    options: { preserveFormatting?: boolean } = {}\n  ): Promise<string> {\n    try {\n      const textParts: string[] = [];\n\n      const parseOptions = {\n        includeMetadata: false,\n        includeImages: false,\n        includeTables: true,\n        preserveFormatting: options.preserveFormatting ?? false,\n      };\n\n      for await (const element of this.parseDocumentUseCase.execute(source, parseOptions)) {\n        if (element.type === 'paragraph') {\n          textParts.push(element.content);\n        } else if (element.type === 'table') {\n          // Extract text from table cells\n          const tableText = element.content\n            .map(row => row.cells.map(cell => cell.content).join('\\t'))\n            .join('\\n');\n          textParts.push(tableText);\n        } else if (element.type === 'header') {\n          textParts.push(element.content);\n        }\n      }\n\n      return textParts.join('\\n');\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract text: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  async* extractImages(\n    source: Buffer | ReadableStream\n  ): AsyncGenerator<DocumentElement> {\n    try {\n      const parseOptions = {\n        includeMetadata: false,\n        includeImages: true,\n        includeTables: false,\n        includeHeaders: false,\n        includeFooters: false,\n      };\n\n      for await (const element of this.parseDocumentUseCase.execute(source, parseOptions)) {\n        if (element.type === 'image') {\n          yield element;\n        }\n      }\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract images: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  async extractMetadata(\n    source: Buffer | ReadableStream\n  ): Promise<DocumentElement['content']> {\n    try {\n      const parseOptions = {\n        includeMetadata: true,\n        includeImages: false,\n        includeTables: false,\n        includeHeaders: false,\n        includeFooters: false,\n      };\n\n      for await (const element of this.parseDocumentUseCase.execute(source, parseOptions)) {\n        if (element.type === 'metadata') {\n          return element.content;\n        }\n      }\n\n      // Return empty metadata if none found\n      return {};\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to extract metadata: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n}\n","import type { ReadableStream } from 'node:stream/web';\n\nimport { DocxParseError, type ValidationResult } from '../../domain/types';\nimport type { ValidateDocumentUseCase } from '../interfaces/use-cases';\n\n\nexport class ValidateDocumentUseCaseImpl implements ValidateDocumentUseCase {\n  async validate(source: Buffer | ReadableStream): Promise<ValidationResult> {\n    try {\n      const errors: ValidationResult['errors'] = [];\n\n      // Basic validation\n      if (!source) {\n        errors.push({\n          code: 'INVALID_SOURCE',\n          message: 'Source cannot be null or undefined',\n          severity: 'error',\n        });\n      }\n\n      // Validate buffer size if it's a Buffer\n      if (source instanceof Buffer) {\n        if (source.length === 0) {\n          errors.push({\n            code: 'EMPTY_BUFFER',\n            message: 'Buffer is empty',\n            severity: 'error',\n          });\n        }\n\n        if (source.length > 100 * 1024 * 1024) { // 100MB\n          errors.push({\n            code: 'LARGE_FILE',\n            message: 'File size exceeds 100MB limit',\n            severity: 'warning',\n          });\n        }\n\n        // Check for ZIP signature (DOCX is a ZIP file)\n        if (!this.hasValidZipSignature(source)) {\n          errors.push({\n            code: 'INVALID_ZIP_SIGNATURE',\n            message: 'File does not appear to be a valid ZIP archive',\n            severity: 'error',\n          });\n        }\n      }\n\n      // TODO: Add more sophisticated validation\n      // - Check for required DOCX structure (/word/document.xml, etc.)\n      // - Validate XML content\n      // - Check for corrupted entries\n\n      return {\n        isValid: errors.filter(e => e.severity === 'error').length === 0,\n        errors,\n      };\n    } catch (error) {\n      throw new DocxParseError(\n        `Validation failed: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  private hasValidZipSignature(buffer: Buffer): boolean {\n    if (buffer.length < 4) return false;\n\n    // Check for ZIP local file header signature (PK\\x03\\x04)\n    return (\n      buffer[0] === 0x50 && // P\n      buffer[1] === 0x4B && // K\n      buffer[2] === 0x03 &&\n      buffer[3] === 0x04\n    );\n  }\n}\n","import type { ReadableStream } from 'node:stream/web';\n\nimport { type DocumentElement, DocxParseError, type ParseOptions } from '../../domain/types';\nimport type { ParseDocumentToArrayUseCase } from '../interfaces/use-cases';\n\nimport { ParseDocumentUseCaseImpl } from './parse-document.use-case';\n\n\nexport class ParseDocumentToArrayUseCaseImpl implements ParseDocumentToArrayUseCase {\n  private parseDocumentUseCase: ParseDocumentUseCaseImpl;\n\n  constructor() {\n    this.parseDocumentUseCase = new ParseDocumentUseCaseImpl();\n  }\n\n  async execute(\n    source: Buffer | ReadableStream,\n    options?: ParseOptions\n  ): Promise<DocumentElement[]> {\n    try {\n      const elements: DocumentElement[] = [];\n\n      for await (const element of this.parseDocumentUseCase.execute(source, options)) {\n        elements.push(element);\n      }\n\n      return elements;\n    } catch (error) {\n      throw new DocxParseError(\n        `Failed to parse document to array: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n}\n","import { createReadStream, type ReadStream } from 'node:fs';\nimport type { Readable } from 'node:stream';\nimport type { ReadableStream } from 'node:stream/web';\n\nimport { ExtractContentUseCaseImpl, ParseDocumentToArrayUseCaseImpl, ParseDocumentUseCaseImpl } from '../application/use-cases';\nimport type { DocumentElement, ParseOptions } from '../domain/types';\nimport { StreamAdapter } from '../infrastructure/adapters/stream-adapter';\n\n// Main parser functions following the API specified in REQUIREMENTS.md\n\n/**\n * Parse a DOCX document from a Buffer, yielding elements incrementally\n */\nexport async function* parseDocx(\n  buffer: Buffer,\n  options?: ParseOptions\n): AsyncGenerator<DocumentElement> {\n  const useCase = new ParseDocumentUseCaseImpl();\n  yield* useCase.execute(buffer, options);\n}\n\n/**\n * Parse a DOCX document from a ReadStream (Node.js), yielding elements incrementally\n */\nexport async function* parseDocxStream(\n  stream: ReadStream,\n  options?: ParseOptions\n): AsyncGenerator<DocumentElement> {\n  const useCase = new ParseDocumentUseCaseImpl();\n  const webStream = StreamAdapter.toWebStream(stream);\n  yield* useCase.execute(webStream, options);\n}\n\n/**\n * Parse a DOCX document from a Node.js Readable stream (from HTTP requests), yielding elements incrementally\n */\nexport async function* parseDocxHttpStream(\n  stream: Readable,\n  options?: ParseOptions\n): AsyncGenerator<DocumentElement> {\n  const useCase = new ParseDocumentUseCaseImpl();\n  const webStream = StreamAdapter.nodeToWebStream(stream);\n  yield* useCase.execute(webStream, options);\n}\n\n/**\n * Parse a DOCX document from a ReadableStream (Web API), yielding elements incrementally\n */\nexport async function* parseDocxWebStream(\n  stream: ReadableStream,\n  options?: ParseOptions\n): AsyncGenerator<DocumentElement> {\n  const useCase = new ParseDocumentUseCaseImpl();\n  yield* useCase.execute(stream, options);\n}\n\n/**\n * Parse a DOCX document from a file path, yielding elements incrementally\n */\nexport async function* parseDocxFile(\n  filePath: string,\n  options?: ParseOptions\n): AsyncGenerator<DocumentElement> {\n  const stream = createReadStream(filePath);\n  yield* parseDocxStream(stream, options);\n}\n\n/**\n * Parse a DOCX document and return all elements as an array (non-streaming)\n */\nexport async function parseDocxToArray(\n  source: Buffer | ReadStream | ReadableStream | Readable,\n  options?: ParseOptions\n): Promise<DocumentElement[]> {\n  const useCase = new ParseDocumentToArrayUseCaseImpl();\n\n  if (source instanceof Buffer) {\n    return useCase.execute(source, options);\n  } else if ('readable' in source && 'path' in source) {\n    // Node.js ReadStream (file)\n    const webStream = StreamAdapter.toWebStream(source as ReadStream);\n    return useCase.execute(webStream, options);\n  } else if (typeof (source as any).getReader === 'function') {\n    // Web ReadableStream\n    return useCase.execute(source as ReadableStream, options);\n  } else if (typeof (source as any).read === 'function' && typeof (source as any).on === 'function') {\n    // Node.js Readable stream (HTTP requests, etc)\n    const webStream = StreamAdapter.nodeToWebStream(source as Readable);\n    return useCase.execute(webStream, options);\n  } else {\n    throw new Error('Unsupported source type');\n  }\n}\n\n/**\n * Extract only text content from a DOCX document\n */\nexport async function extractText(\n  source: Buffer | ReadStream | ReadableStream | Readable,\n  options?: { preserveFormatting?: boolean }\n): Promise<string> {\n  const useCase = new ExtractContentUseCaseImpl();\n\n  if (source instanceof Buffer) {\n    return useCase.extractText(source, options);\n  } else if ('readable' in source && 'path' in source) {\n    // Node.js ReadStream (file)\n    const webStream = StreamAdapter.toWebStream(source as ReadStream);\n    return useCase.extractText(webStream, options);\n  } else if (typeof (source as any).getReader === 'function') {\n    // Web ReadableStream\n    return useCase.extractText(source as ReadableStream, options);\n  } else if (typeof (source as any).read === 'function' && typeof (source as any).on === 'function') {\n    // Node.js Readable stream (HTTP requests, etc)\n    const webStream = StreamAdapter.nodeToWebStream(source as Readable);\n    return useCase.extractText(webStream, options);\n  } else {\n    throw new Error('Unsupported source type');\n  }\n}\n\n/**\n * Extract only images from a DOCX document\n */\nexport async function* extractImages(\n  source: Buffer | ReadStream | ReadableStream | Readable\n): AsyncGenerator<DocumentElement> {\n  const useCase = new ExtractContentUseCaseImpl();\n\n  if (source instanceof Buffer) {\n    yield* useCase.extractImages(source);\n  } else if ('readable' in source && 'path' in source) {\n    // Node.js ReadStream (file)\n    const webStream = StreamAdapter.toWebStream(source as ReadStream);\n    yield* useCase.extractImages(webStream);\n  } else if (typeof (source as any).getReader === 'function') {\n    // Web ReadableStream\n    yield* useCase.extractImages(source as ReadableStream);\n  } else if (typeof (source as any).read === 'function' && typeof (source as any).on === 'function') {\n    // Node.js Readable stream (HTTP requests, etc)\n    const webStream = StreamAdapter.nodeToWebStream(source as Readable);\n    yield* useCase.extractImages(webStream);\n  } else {\n    throw new Error('Unsupported source type');\n  }\n}\n\n/**\n * Get document metadata only\n */\nexport async function getMetadata(\n  source: Buffer | ReadStream | ReadableStream | Readable\n): Promise<DocumentElement['content']> {\n  const useCase = new ExtractContentUseCaseImpl();\n\n  if (source instanceof Buffer) {\n    return useCase.extractMetadata(source);\n  } else if ('readable' in source && 'path' in source) {\n    // Node.js ReadStream (file)\n    const webStream = StreamAdapter.toWebStream(source as ReadStream);\n    return useCase.extractMetadata(webStream);\n  } else if (typeof (source as any).getReader === 'function') {\n    // Web ReadableStream\n    return useCase.extractMetadata(source as ReadableStream);\n  } else if (typeof (source as any).read === 'function' && typeof (source as any).on === 'function') {\n    // Node.js Readable stream (HTTP requests, etc)\n    const webStream = StreamAdapter.nodeToWebStream(source as Readable);\n    return useCase.extractMetadata(webStream);\n  } else {\n    throw new Error('Unsupported source type');\n  }\n}\n\n/**\n * Parse a DOCX document from a Node.js Readable stream (from stream module), yielding elements incrementally\n * This is a generic function for any Node.js Readable stream, including custom streams, transformed streams, etc.\n */\nexport async function* parseDocxReadable(\n  stream: Readable,\n  options?: ParseOptions\n): AsyncGenerator<DocumentElement> {\n  const useCase = new ParseDocumentUseCaseImpl();\n  const webStream = StreamAdapter.nodeToWebStream(stream);\n  yield* useCase.execute(webStream, options);\n}\n","// Main entry point for DOCX Parser library\n\n// Version export\nexport const VERSION = '1.0.0';\n\n// Main parsing functions (Primary API)\nexport {\n  parseDocx,\n  parseDocxStream,\n  parseDocxHttpStream,\n  parseDocxReadable,\n  parseDocxWebStream,\n  parseDocxFile,\n  parseDocxToArray,\n  extractText,\n  extractImages,\n  getMetadata,\n} from './interfaces/docx-parser';\n\n// Essential types for TypeScript users\nexport type {\n  DocumentElement,\n  ParseOptions,\n  ValidationResult,\n  MetadataElement,\n  ParagraphElement,\n  ImageElement,\n  TableElement,\n  HeaderElement,\n  FooterElement,\n  ListElement,\n  PageBreakElement,\n  SectionElement,\n} from './domain/types';\n\n// Error handling\nexport { DocxParseError } from './domain/types';\n\n// Utility for advanced users\nexport { StreamAdapter } from './infrastructure/adapters/stream-adapter';\n\n// Validation utility\nexport { ValidateDocumentUseCaseImpl } from './application/use-cases/validate-document.use-case';\n"]}