{"version":3,"file":"lazy.mjs","names":[],"sources":["../src/lazy.ts"],"sourcesContent":["import { FormatDetectionError, ParseError } from \"./errors\";\nimport { getOrderedFormatsToTry } from \"./detect\";\nimport type { Puzzle, ParseOptions } from \"./types\";\n\n/**\n * Parse a crossword puzzle asynchronously with dynamic imports for smaller bundle size.\n * Parsers are loaded only when needed, reducing initial bundle size.\n *\n * @param data - The puzzle data as string, Buffer, or ArrayBuffer\n * @param options - Optional parsing options\n * @param options.filename - Filename hint to improve format detection\n * @param options.encoding - Character encoding for text formats (default: 'utf-8')\n * @param options.maxGridSize - Maximum allowed grid dimensions\n * @returns A Promise that resolves to a unified Puzzle object\n * @throws {FormatDetectionError} When the format cannot be detected\n * @throws {ParseError} When parsing fails for the detected format\n *\n * @example\n * ```typescript\n * import { parseLazy } from 'xword-parser/lazy';\n * import { readFileSync } from 'fs';\n *\n * const content = readFileSync('puzzle.ipuz');\n * const puzzle = await parseLazy(content, { filename: 'puzzle.ipuz' });\n * console.log(puzzle.title);\n * ```\n */\nexport async function parseLazy(\n  data: string | Buffer | ArrayBuffer,\n  options?: ParseOptions,\n): Promise<Puzzle> {\n  let content: string | Buffer;\n  if (data instanceof ArrayBuffer) {\n    content = Buffer.from(data);\n  } else {\n    content = data;\n  }\n\n  const formatsToTry = getOrderedFormatsToTry(content, options?.filename);\n  let lastError: unknown;\n\n  for (const format of formatsToTry) {\n    try {\n      switch (format) {\n        case \"ipuz\": {\n          const textContent =\n            typeof content === \"string\"\n              ? content\n              : content.toString(options?.encoding || \"utf-8\");\n          const { parseIpuz, convertIpuzToUnified } = await import(\"./ipuz\");\n          const puzzle = parseIpuz(textContent, options);\n          return convertIpuzToUnified(puzzle);\n        }\n        case \"puz\": {\n          if (typeof content !== \"string\") {\n            const { parsePuz, convertPuzToUnified } = await import(\"./puz\");\n            const puzzle = parsePuz(content, options);\n            return convertPuzToUnified(puzzle);\n          }\n          break;\n        }\n        case \"jpz\": {\n          const textContent =\n            typeof content === \"string\"\n              ? content\n              : content.toString(options?.encoding || \"utf-8\");\n          const { parseJpz, convertJpzToUnified } = await import(\"./jpz\");\n          const puzzle = parseJpz(textContent, options);\n          return convertJpzToUnified(puzzle);\n        }\n        case \"xd\": {\n          const textContent =\n            typeof content === \"string\"\n              ? content\n              : content.toString(options?.encoding || \"utf-8\");\n          const { parseXd, convertXdToUnified } = await import(\"./xd\");\n          const puzzle = parseXd(textContent, options);\n          return convertXdToUnified(puzzle);\n        }\n      }\n    } catch (e) {\n      lastError = e;\n      // Only continue trying other formats if this is a format mismatch\n      if (e instanceof ParseError && !e.isFormatMismatch()) {\n        throw e;\n      }\n    }\n  }\n\n  // If we get here, no format worked\n  // Only throw lastError if it was NOT a format mismatch (i.e., a real parse error)\n  if (\n    lastError &&\n    !(lastError instanceof ParseError && lastError.isFormatMismatch())\n  ) {\n    if (lastError instanceof Error) {\n      throw lastError;\n    }\n    throw new FormatDetectionError(\n      \"Unable to detect puzzle format. Supported formats: iPUZ, PUZ, JPZ, XD\",\n      undefined,\n      lastError,\n    );\n  }\n\n  // Otherwise, we couldn't detect the format\n  throw new FormatDetectionError(\n    \"Unable to detect puzzle format. Supported formats: iPUZ, PUZ, JPZ, XD\",\n  );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,eAAsB,UACpB,MACA,SACiB;CACjB,IAAI;AACJ,KAAI,gBAAgB,YAClB,WAAU,OAAO,KAAK,KAAK;KAE3B,WAAU;CAGZ,MAAM,eAAe,uBAAuB,SAAS,SAAS,SAAS;CACvE,IAAI;AAEJ,MAAK,MAAM,UAAU,aACnB,KAAI;AACF,UAAQ,QAAR;GACE,KAAK,QAAQ;IACX,MAAM,cACJ,OAAO,YAAY,WACf,UACA,QAAQ,SAAS,SAAS,YAAY,QAAQ;IACpD,MAAM,EAAE,WAAW,yBAAyB,MAAM,OAAO;AAEzD,WAAO,qBADQ,UAAU,aAAa,QAAQ,CACX;;GAErC,KAAK;AACH,QAAI,OAAO,YAAY,UAAU;KAC/B,MAAM,EAAE,UAAU,wBAAwB,MAAM,OAAO;AAEvD,YAAO,oBADQ,SAAS,SAAS,QAAQ,CACP;;AAEpC;GAEF,KAAK,OAAO;IACV,MAAM,cACJ,OAAO,YAAY,WACf,UACA,QAAQ,SAAS,SAAS,YAAY,QAAQ;IACpD,MAAM,EAAE,UAAU,wBAAwB,MAAM,OAAO;AAEvD,WAAO,oBADQ,SAAS,aAAa,QAAQ,CACX;;GAEpC,KAAK,MAAM;IACT,MAAM,cACJ,OAAO,YAAY,WACf,UACA,QAAQ,SAAS,SAAS,YAAY,QAAQ;IACpD,MAAM,EAAE,SAAS,uBAAuB,MAAM,OAAO;AAErD,WAAO,mBADQ,QAAQ,aAAa,QAAQ,CACX;;;UAG9B,GAAG;AACV,cAAY;AAEZ,MAAI,aAAa,cAAc,CAAC,EAAE,kBAAkB,CAClD,OAAM;;AAOZ,KACE,aACA,EAAE,qBAAqB,cAAc,UAAU,kBAAkB,GACjE;AACA,MAAI,qBAAqB,MACvB,OAAM;AAER,QAAM,IAAI,qBACR,yEACA,QACA,UACD;;AAIH,OAAM,IAAI,qBACR,wEACD"}