{
  "version": 3,
  "sources": ["../src/jxl-polyfill.js"],
  "sourcesContent": ["/**\n * JXL Polyfill - JPEG XL support for browsers without native support\n *\n * @example\n * // ESM import\n * import { JXLPolyfill, decodeJxlToPng } from 'jxl-rs-polyfill';\n *\n * // Start automatic polyfill\n * const polyfill = new JXLPolyfill();\n * await polyfill.start();\n *\n * // Or decode manually\n * const pngBytes = await decodeJxlToPng(jxlBytes);\n */\n\nimport init, { decode_jxl_to_png, get_jxl_info } from './jxl_wasm.js';\n\nlet wasmInitialized = false;\nlet initPromise = null;\n\n/**\n * Initialize the WASM module\n * @param {string | URL | Request | BufferSource | WebAssembly.Module} [moduleOrPath] - Custom WASM source\n * @returns {Promise<void>}\n */\nexport async function initWasm(moduleOrPath) {\n  if (wasmInitialized) return;\n  if (initPromise) return initPromise;\n\n  initPromise = (async () => {\n    await init(moduleOrPath);\n    wasmInitialized = true;\n  })();\n\n  return initPromise;\n}\n\n/**\n * Check if the current browser natively supports JXL\n * @returns {Promise<boolean>}\n */\nexport async function checkNativeJxlSupport() {\n  return new Promise((resolve) => {\n    const img = new Image();\n    img.onload = () => resolve(img.width === 1);\n    img.onerror = () => resolve(false);\n    // Minimal 1x1 JXL image\n    img.src = 'data:image/jxl;base64,/woIAAAMABKIAgC4AF3lEgA=';\n  });\n}\n\n/**\n * Decode a JXL image to PNG\n * @param {Uint8Array} jxlData - The JXL image bytes\n * @returns {Promise<Uint8Array>} - The PNG image bytes\n */\nexport async function decodeJxlToPng(jxlData) {\n  await initWasm();\n  return decode_jxl_to_png(jxlData);\n}\n\n/**\n * Get information about a JXL image\n * @param {Uint8Array} jxlData - The JXL image bytes\n * @returns {Promise<{width: number, height: number, numFrames: number, hasAlpha: boolean}>}\n */\nexport async function getJxlInfo(jxlData) {\n  await initWasm();\n  const info = get_jxl_info(jxlData);\n  return {\n    width: info.width,\n    height: info.height,\n    numFrames: info.num_frames,\n    hasAlpha: info.has_alpha,\n  };\n}\n\n/**\n * Decode a JXL image from a URL\n * @param {string} url - URL to the JXL image\n * @returns {Promise<Blob>} - PNG blob\n */\nexport async function decodeJxlFromUrl(url) {\n  const response = await fetch(url);\n  if (!response.ok) {\n    throw new Error(`Failed to fetch ${url}: ${response.status}`);\n  }\n  const jxlData = new Uint8Array(await response.arrayBuffer());\n  const pngData = await decodeJxlToPng(jxlData);\n  return new Blob([pngData], { type: 'image/png' });\n}\n\n/**\n * JXL Polyfill class for automatic image conversion\n */\nexport class JXLPolyfill {\n  /**\n   * @param {Object} options\n   * @param {boolean} [options.patchImageConstructor=true] - Intercept new Image()\n   * @param {boolean} [options.handleCSSBackgrounds=true] - Convert CSS background-image\n   * @param {boolean} [options.handleSourceElements=true] - Convert <source srcset>\n   * @param {boolean} [options.handleSVGElements=true] - Convert SVG <image>/<feImage>\n   * @param {boolean} [options.cacheDecoded=true] - Cache decoded images\n   * @param {boolean} [options.showLoadingState=false] - Show loading indicator\n   * @param {boolean} [options.verbose=false] - Enable debug logging\n   */\n  constructor(options = {}) {\n    this.options = {\n      patchImageConstructor: true,\n      handleCSSBackgrounds: true,\n      handleSourceElements: true,\n      handleSVGElements: true,\n      cacheDecoded: true,\n      showLoadingState: false,\n      verbose: false,\n      ...options,\n    };\n\n    this.cache = new Map();\n    this.observer = null;\n    this.started = false;\n    this.hasNativeSupport = null;\n    this.stats = {\n      imagesConverted: 0,\n      bytesSaved: 0,\n      cacheHits: 0,\n    };\n  }\n\n  log(...args) {\n    if (this.options.verbose) {\n      console.log('[JXL Polyfill]', ...args);\n    }\n  }\n\n  /**\n   * Start the polyfill\n   * @returns {Promise<void>}\n   */\n  async start() {\n    if (this.started) return;\n\n    // Check for native support\n    this.hasNativeSupport = await checkNativeJxlSupport();\n    if (this.hasNativeSupport) {\n      this.log('Native JXL support detected, polyfill not needed');\n      return;\n    }\n\n    // Initialize WASM\n    await initWasm();\n    this.log('WASM module initialized');\n\n    // Patch Image constructor\n    if (this.options.patchImageConstructor) {\n      this.patchImageConstructor();\n    }\n\n    // Process existing elements\n    this.processExistingElements();\n\n    // Start observing DOM changes\n    this.startObserver();\n\n    this.started = true;\n    this.log('Polyfill started');\n  }\n\n  /**\n   * Stop the polyfill\n   */\n  stop() {\n    if (this.observer) {\n      this.observer.disconnect();\n      this.observer = null;\n    }\n    this.started = false;\n    this.log('Polyfill stopped');\n  }\n\n  /**\n   * Get polyfill statistics\n   * @returns {{imagesConverted: number, bytesSaved: number, cacheHits: number, cacheSize: number}}\n   */\n  getStats() {\n    return {\n      ...this.stats,\n      cacheSize: this.cache.size,\n    };\n  }\n\n  isJxlUrl(url) {\n    if (!url) return false;\n    const lower = url.toLowerCase();\n    return lower.endsWith('.jxl') || lower.includes('.jxl?') || lower.includes('.jxl#');\n  }\n\n  async getCachedOrDecode(url) {\n    if (this.options.cacheDecoded && this.cache.has(url)) {\n      this.stats.cacheHits++;\n      return this.cache.get(url);\n    }\n\n    const pngBlob = await decodeJxlFromUrl(url);\n    const objectUrl = URL.createObjectURL(pngBlob);\n\n    if (this.options.cacheDecoded) {\n      this.cache.set(url, objectUrl);\n    }\n\n    this.stats.imagesConverted++;\n    return objectUrl;\n  }\n\n  patchImageConstructor() {\n    const polyfill = this;\n    const OriginalImage = window.Image;\n\n    window.Image = function(width, height) {\n      const img = new OriginalImage(width, height);\n\n      const originalSrcDescriptor = Object.getOwnPropertyDescriptor(\n        HTMLImageElement.prototype,\n        'src'\n      );\n\n      Object.defineProperty(img, 'src', {\n        get() {\n          return originalSrcDescriptor.get.call(this);\n        },\n        set(value) {\n          if (polyfill.isJxlUrl(value)) {\n            polyfill.log('Intercepted Image.src:', value);\n            polyfill.getCachedOrDecode(value).then((pngUrl) => {\n              originalSrcDescriptor.set.call(this, pngUrl);\n            }).catch((err) => {\n              console.error('[JXL Polyfill] Failed to decode:', err);\n              originalSrcDescriptor.set.call(this, value);\n            });\n          } else {\n            originalSrcDescriptor.set.call(this, value);\n          }\n        },\n        configurable: true,\n      });\n\n      return img;\n    };\n\n    window.Image.prototype = OriginalImage.prototype;\n  }\n\n  async processImgElement(img) {\n    const src = img.getAttribute('src');\n    if (!this.isJxlUrl(src)) return;\n    if (img.dataset.jxlProcessed) return;\n\n    img.dataset.jxlProcessed = 'true';\n    this.log('Processing <img>:', src);\n\n    if (this.options.showLoadingState) {\n      img.style.opacity = '0.5';\n    }\n\n    try {\n      const pngUrl = await this.getCachedOrDecode(src);\n      img.src = pngUrl;\n    } catch (err) {\n      console.error('[JXL Polyfill] Failed to decode:', src, err);\n    } finally {\n      if (this.options.showLoadingState) {\n        img.style.opacity = '';\n      }\n    }\n  }\n\n  async processBackgroundImage(element) {\n    const style = getComputedStyle(element);\n    const bgImage = style.backgroundImage;\n\n    if (!bgImage || bgImage === 'none') return;\n\n    const urlMatch = bgImage.match(/url\\(['\"]?([^'\"()]+\\.jxl[^'\"()]*)['\"]?\\)/i);\n    if (!urlMatch) return;\n    if (element.dataset.jxlBgProcessed) return;\n\n    element.dataset.jxlBgProcessed = 'true';\n    const jxlUrl = urlMatch[1];\n    this.log('Processing background-image:', jxlUrl);\n\n    try {\n      const pngUrl = await this.getCachedOrDecode(jxlUrl);\n      element.style.backgroundImage = bgImage.replace(urlMatch[0], `url(\"${pngUrl}\")`);\n    } catch (err) {\n      console.error('[JXL Polyfill] Failed to decode background:', jxlUrl, err);\n    }\n  }\n\n  async processSourceElement(source) {\n    const srcset = source.getAttribute('srcset');\n    if (!this.isJxlUrl(srcset)) return;\n    if (source.dataset.jxlProcessed) return;\n\n    source.dataset.jxlProcessed = 'true';\n    this.log('Processing <source srcset>:', srcset);\n\n    try {\n      const pngUrl = await this.getCachedOrDecode(srcset);\n      source.srcset = pngUrl;\n      source.type = 'image/png';\n    } catch (err) {\n      console.error('[JXL Polyfill] Failed to decode source:', srcset, err);\n    }\n  }\n\n  async processSVGImage(element) {\n    const href = element.getAttribute('href') || element.getAttributeNS('http://www.w3.org/1999/xlink', 'href');\n    if (!this.isJxlUrl(href)) return;\n    if (element.dataset.jxlProcessed) return;\n\n    element.dataset.jxlProcessed = 'true';\n    this.log('Processing SVG image:', href);\n\n    try {\n      const pngUrl = await this.getCachedOrDecode(href);\n      element.setAttribute('href', pngUrl);\n    } catch (err) {\n      console.error('[JXL Polyfill] Failed to decode SVG image:', href, err);\n    }\n  }\n\n  processExistingElements() {\n    // Process <img> elements\n    document.querySelectorAll('img').forEach((img) => this.processImgElement(img));\n\n    // Process CSS backgrounds\n    if (this.options.handleCSSBackgrounds) {\n      document.querySelectorAll('*').forEach((el) => this.processBackgroundImage(el));\n    }\n\n    // Process <source> elements\n    if (this.options.handleSourceElements) {\n      document.querySelectorAll('source[srcset]').forEach((source) =>\n        this.processSourceElement(source)\n      );\n    }\n\n    // Process SVG elements\n    if (this.options.handleSVGElements) {\n      document.querySelectorAll('image, feImage').forEach((el) =>\n        this.processSVGImage(el)\n      );\n    }\n  }\n\n  startObserver() {\n    this.observer = new MutationObserver((mutations) => {\n      for (const mutation of mutations) {\n        // Handle added nodes\n        for (const node of mutation.addedNodes) {\n          if (node.nodeType !== Node.ELEMENT_NODE) continue;\n\n          if (node.tagName === 'IMG') {\n            this.processImgElement(node);\n          } else if (node.tagName === 'SOURCE') {\n            this.processSourceElement(node);\n          } else if (node.tagName === 'IMAGE' || node.tagName === 'FEIMAGE') {\n            this.processSVGImage(node);\n          }\n\n          // Check descendants\n          node.querySelectorAll?.('img')?.forEach((img) => this.processImgElement(img));\n\n          if (this.options.handleSourceElements) {\n            node.querySelectorAll?.('source[srcset]')?.forEach((source) =>\n              this.processSourceElement(source)\n            );\n          }\n\n          if (this.options.handleSVGElements) {\n            node.querySelectorAll?.('image, feImage')?.forEach((el) =>\n              this.processSVGImage(el)\n            );\n          }\n\n          if (this.options.handleCSSBackgrounds) {\n            this.processBackgroundImage(node);\n          }\n        }\n\n        // Handle attribute changes\n        if (mutation.type === 'attributes') {\n          const target = mutation.target;\n          if (mutation.attributeName === 'src' && target.tagName === 'IMG') {\n            delete target.dataset.jxlProcessed;\n            this.processImgElement(target);\n          } else if (mutation.attributeName === 'srcset' && target.tagName === 'SOURCE') {\n            delete target.dataset.jxlProcessed;\n            this.processSourceElement(target);\n          } else if (\n            (mutation.attributeName === 'href' || mutation.attributeName === 'xlink:href') &&\n            (target.tagName === 'IMAGE' || target.tagName === 'FEIMAGE')\n          ) {\n            delete target.dataset.jxlProcessed;\n            this.processSVGImage(target);\n          } else if (mutation.attributeName === 'style') {\n            delete target.dataset.jxlBgProcessed;\n            this.processBackgroundImage(target);\n          }\n        }\n      }\n    });\n\n    this.observer.observe(document.documentElement, {\n      childList: true,\n      subtree: true,\n      attributes: true,\n      attributeFilter: ['src', 'srcset', 'href', 'xlink:href', 'style'],\n    });\n  }\n}\n\n// Default export\nexport default JXLPolyfill;\n"],
  "mappings": "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",
  "names": ["init"]
}
