{"version":3,"sources":["../src/encode/router.ts"],"names":["EncodeError"],"mappings":";;;;;AAQA,IAAM,WAAA,GAA6C;AAAA,EACjD,GAAA,EAAK,MAAM,OAAO,kBAAU,CAAA;AAAA,EAC5B,IAAA,EAAM,MAAM,OAAO,kBAAU,CAAA;AAAA,EAC7B,IAAA,EAAM,MAAM,OAAO,kBAAU,CAAA;AAAA,EAC7B,GAAA,EAAK,MAAM,OAAO,kBAAU,CAAA;AAAA,EAC5B,IAAA,EAAM,MAAM,OAAO,mBAAW,CAAA;AAAA,EAC9B,IAAA,EAAM,MAAM,OAAO,mBAAW,CAAA;AAAA,EAC9B,GAAA,EAAK,MAAM,OAAO,kBAAU,CAAA;AAAA,EAC5B,GAAA,EAAK,MAAM,OAAO,kBAAU,CAAA;AAAA,EAC5B,IAAA,EAAM,MAAM,OAAO,mBAAW,CAAA;AAAA,EAC9B,GAAA,EAAK,MAAM,OAAO,mBAAW,CAAA;AAAA,EAC7B,GAAA,EAAK,MAAM,OAAO,kBAAU,CAAA;AAAA,EAC5B,GAAA,EAAK,MAAM,OAAO,kBAAU,CAAA;AAAA,EAC5B,GAAA,EAAK,MAAM,OAAO,kBAAU,CAAA;AAAA,EAC5B,GAAA,EAAK,MAAM,OAAO,kBAAU;AAC9B,CAAA;AAGA,IAAM,KAAA,uBAAY,GAAA,EAA2B;AAQ7C,eAAsB,WAAW,SAAA,EAA2C;AAC1E,EAAA,MAAM,GAAA,GAAM,UAAU,WAAA,EAAY;AAClC,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAC5B,EAAA,IAAI,QAAQ,OAAO,MAAA;AAEnB,EAAA,MAAM,MAAA,GAAS,YAAY,GAAG,CAAA;AAC9B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAIA,6BAAA,CAAY,oBAAA,EAAsB,CAAA,uBAAA,EAA0B,GAAG,CAAA,CAAE,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,GAAA,GAAM,MAAM,MAAA,EAAO;AACzB,EAAA,KAAA,CAAM,GAAA,CAAI,KAAK,GAAG,CAAA;AAClB,EAAA,OAAO,GAAA;AACT;AAMA,eAAsB,MAAA,CACpB,QACA,OAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA;AAC/C,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,MAAA,EAAQ,OAAO,CAAA;AACvC;AAKA,eAAsB,cAAc,SAAA,EAAwC;AAC1E,EAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,SAAS,CAAA;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA;AACjB;AAMA,eAAsB,mBAAA,GAA6C;AAEjE,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA;AACrG,EAAA,MAAM,UAAwB,EAAC;AAE/B,EAAA,KAAA,MAAW,OAAO,aAAA,EAAe;AAC/B,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,GAAG,CAAA;AACpC,IAAA,OAAA,CAAQ,IAAA,CAAK,QAAQ,IAAI,CAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,OAAA;AACT;AAKO,SAAS,UAAU,SAAA,EAA4B;AACpD,EAAA,OAAO,SAAA,CAAU,aAAY,IAAK,WAAA;AACpC","file":"chunk-WZRTXLPB.cjs","sourcesContent":["import type { FormatKey, FormatMeta, EncodeOptions, EncoderModule } from '../types.js';\n\nimport { EncodeError } from '../errors.js';\n\n// ─── Encoder Registry ────────────────────────────────────────\n\ntype EncoderLoader = () => Promise<EncoderModule>;\n\nconst ENCODER_MAP: Record<string, EncoderLoader> = {\n  jpg: () => import('./jpg.js'),\n  jpeg: () => import('./jpg.js'),\n  jfif: () => import('./jpg.js'),\n  png: () => import('./png.js'),\n  webp: () => import('./webp.js'),\n  avif: () => import('./avif.js'),\n  gif: () => import('./gif.js'),\n  bmp: () => import('./bmp.js'),\n  tiff: () => import('./tiff.js'),\n  tif: () => import('./tiff.js'),\n  psd: () => import('./psd.js'),\n  tga: () => import('./tga.js'),\n  ppm: () => import('./ppm.js'),\n  ico: () => import('./ico.js'),\n};\n\n/** Cached encoder modules (loaded once, reused) */\nconst cache = new Map<string, EncoderModule>();\n\n// ─── Public API ──────────────────────────────────────────────\n\n/**\n * Get the encoder module for a given format key.\n * Lazy-loads on first access, cached thereafter.\n */\nexport async function getEncoder(formatKey: string): Promise<EncoderModule> {\n  const key = formatKey.toLowerCase();\n  const cached = cache.get(key);\n  if (cached) return cached;\n\n  const loader = ENCODER_MAP[key];\n  if (!loader) {\n    throw new EncodeError('UNSUPPORTED_FORMAT', `No encoder for format: ${key}`);\n  }\n\n  const mod = await loader();\n  cache.set(key, mod);\n  return mod;\n}\n\n/**\n * Encode a Canvas to the specified format.\n * Convenience wrapper: loads the encoder and calls encode().\n */\nexport async function encode(\n  canvas: HTMLCanvasElement | OffscreenCanvas,\n  options: { format: FormatKey } & EncodeOptions,\n): Promise<Blob> {\n  const encoder = await getEncoder(options.format);\n  return encoder.encode(canvas, options);\n}\n\n/**\n * Get format metadata for a specific format key.\n */\nexport async function getFormatInfo(formatKey: string): Promise<FormatMeta> {\n  const encoder = await getEncoder(formatKey);\n  return encoder.meta;\n}\n\n/**\n * Get metadata for all supported formats.\n * Returns one entry per canonical format (no alias duplicates).\n */\nexport async function getSupportedFormats(): Promise<FormatMeta[]> {\n  // Canonical keys only (skip aliases like jpeg, jfif, tif)\n  const canonicalKeys = ['jpg', 'png', 'webp', 'avif', 'gif', 'bmp', 'tiff', 'psd', 'tga', 'ppm', 'ico'];\n  const formats: FormatMeta[] = [];\n\n  for (const key of canonicalKeys) {\n    const encoder = await getEncoder(key);\n    formats.push(encoder.meta);\n  }\n\n  return formats;\n}\n\n/**\n * Check if a format key is supported.\n */\nexport function canEncode(formatKey: string): boolean {\n  return formatKey.toLowerCase() in ENCODER_MAP;\n}\n"]}