{"version":3,"file":"image.cjs","names":[],"sources":["../../../src/vision/io/image.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Image loading utilities — convert any supported source into the canonical\n * {@link RGBImage} format.\n *\n * Browser-only: uses `fetch`, `createImageBitmap`, and a Canvas 2D context to\n * decode arbitrary inputs into a tightly-packed `Uint8Array` of HWC RGB pixels.\n */\n\nimport { createCanvas, get2DContext, imageDataToRGB } from \"../core/canvas\";\nimport { ImageLoadError } from \"../core/exceptions\";\nimport { RGBImage } from \"../types\";\n\n/** Anything {@link loadImage} accepts as an image input. */\nexport type ImageInput =\n    | string\n    | Blob\n    | HTMLImageElement\n    | HTMLCanvasElement\n    | OffscreenCanvas\n    | ImageBitmap\n    | ImageData\n    | RGBImage;\n\n/**\n * Load an image from any supported source into a HWC uint8 RGB array.\n *\n * @throws {@link ImageLoadError} if the source cannot be decoded or has an unsupported shape.\n */\nexport async function loadImage(source: ImageInput): Promise<RGBImage> {\n    if (source instanceof RGBImage) {\n        return source;\n    }\n\n    if (typeof ImageData !== \"undefined\" && source instanceof ImageData) {\n        return imageDataToRGB(source);\n    }\n\n    if (typeof source === \"string\") {\n        return loadFromUrl(source);\n    }\n\n    if (typeof Blob !== \"undefined\" && source instanceof Blob) {\n        return loadFromBlob(source);\n    }\n\n    if (typeof HTMLImageElement !== \"undefined\" && source instanceof HTMLImageElement) {\n        await waitForImageElement(source);\n        return drawableToRGB(source, source.naturalWidth, source.naturalHeight);\n    }\n\n    if (typeof HTMLCanvasElement !== \"undefined\" && source instanceof HTMLCanvasElement) {\n        return drawableToRGB(source, source.width, source.height);\n    }\n\n    if (typeof OffscreenCanvas !== \"undefined\" && source instanceof OffscreenCanvas) {\n        return drawableToRGB(source, source.width, source.height);\n    }\n\n    if (typeof ImageBitmap !== \"undefined\" && source instanceof ImageBitmap) {\n        return drawableToRGB(source, source.width, source.height);\n    }\n\n    throw new ImageLoadError(\n        `Unsupported image source type: ${Object.prototype.toString.call(source)}`,\n    );\n}\n\nasync function loadFromUrl(url: string): Promise<RGBImage> {\n    let response: Response;\n    try {\n        response = await fetch(url);\n    } catch (err) {\n        throw new ImageLoadError(`Failed to fetch image from ${url}: ${(err as Error).message}`, {\n            cause: err,\n        });\n    }\n    if (!response.ok) {\n        throw new ImageLoadError(\n            `Failed to fetch image from ${url}: HTTP ${response.status} ${response.statusText}`,\n        );\n    }\n    const blob = await response.blob();\n    return loadFromBlob(blob);\n}\n\nasync function loadFromBlob(blob: Blob): Promise<RGBImage> {\n    let bitmap: ImageBitmap;\n    try {\n        bitmap = await createImageBitmap(blob);\n    } catch (err) {\n        throw new ImageLoadError(`Failed to decode image blob: ${(err as Error).message}`, {\n            cause: err,\n        });\n    }\n    try {\n        return drawableToRGB(bitmap, bitmap.width, bitmap.height);\n    } finally {\n        bitmap.close();\n    }\n}\n\nfunction waitForImageElement(img: HTMLImageElement): Promise<void> {\n    if (img.complete && img.naturalWidth > 0) {\n        return Promise.resolve();\n    }\n    return new Promise<void>((resolve, reject) => {\n        const onLoad = (): void => {\n            cleanup();\n            resolve();\n        };\n        const onError = (): void => {\n            cleanup();\n            reject(new ImageLoadError(\"Failed to load HTMLImageElement (load event errored)\"));\n        };\n        const cleanup = (): void => {\n            img.removeEventListener(\"load\", onLoad);\n            img.removeEventListener(\"error\", onError);\n        };\n        img.addEventListener(\"load\", onLoad, { once: true });\n        img.addEventListener(\"error\", onError, { once: true });\n    });\n}\n\nfunction drawableToRGB(drawable: CanvasImageSource, width: number, height: number): RGBImage {\n    if (width === 0 || height === 0) {\n        throw new ImageLoadError(`Cannot load image with zero dimension (${width}x${height}).`);\n    }\n    const canvas = createCanvas(width, height);\n    const ctx = get2DContext(canvas);\n    ctx.drawImage(drawable, 0, 0);\n    const imageData = ctx.getImageData(0, 0, width, height);\n    return imageDataToRGB(imageData);\n}\n"],"mappings":"oGA6BA,eAAsB,EAAU,EAAuC,CACnE,GAAI,aAAkB,EAAA,SAClB,OAAO,EAGX,GAAI,OAAO,UAAc,KAAe,aAAkB,UACtD,OAAO,EAAA,eAAe,CAAM,EAGhC,GAAI,OAAO,GAAW,SAClB,OAAO,EAAY,CAAM,EAG7B,GAAI,OAAO,KAAS,KAAe,aAAkB,KACjD,OAAO,EAAa,CAAM,EAG9B,GAAI,OAAO,iBAAqB,KAAe,aAAkB,iBAE7D,OADA,MAAM,EAAoB,CAAM,EACzB,EAAc,EAAQ,EAAO,aAAc,EAAO,aAAa,EAW1E,GARI,OAAO,kBAAsB,KAAe,aAAkB,mBAI9D,OAAO,gBAAoB,KAAe,aAAkB,iBAI5D,OAAO,YAAgB,KAAe,aAAkB,YACxD,OAAO,EAAc,EAAQ,EAAO,MAAO,EAAO,MAAM,EAG5D,MAAM,IAAI,EAAA,eACN,kCAAkC,OAAO,UAAU,SAAS,KAAK,CAAM,GAC3E,CACJ,CAEA,eAAe,EAAY,EAAgC,CACvD,IAAI,EACJ,GAAI,CACA,EAAW,MAAM,MAAM,CAAG,CAC9B,OAAS,EAAK,CACV,MAAM,IAAI,EAAA,eAAe,8BAA8B,EAAI,IAAK,EAAc,UAAW,CACrF,MAAO,CACX,CAAC,CACL,CACA,GAAI,CAAC,EAAS,GACV,MAAM,IAAI,EAAA,eACN,8BAA8B,EAAI,SAAS,EAAS,OAAO,GAAG,EAAS,YAC3E,EAGJ,OAAO,EAAa,MADD,EAAS,KAAK,CACT,CAC5B,CAEA,eAAe,EAAa,EAA+B,CACvD,IAAI,EACJ,GAAI,CACA,EAAS,MAAM,kBAAkB,CAAI,CACzC,OAAS,EAAK,CACV,MAAM,IAAI,EAAA,eAAe,gCAAiC,EAAc,UAAW,CAC/E,MAAO,CACX,CAAC,CACL,CACA,GAAI,CACA,OAAO,EAAc,EAAQ,EAAO,MAAO,EAAO,MAAM,CAC5D,QAAU,CACN,EAAO,MAAM,CACjB,CACJ,CAEA,SAAS,EAAoB,EAAsC,CAI/D,OAHI,EAAI,UAAY,EAAI,aAAe,EAC5B,QAAQ,QAAQ,EAEpB,IAAI,SAAe,EAAS,IAAW,CAC1C,IAAM,MAAqB,CACvB,EAAQ,EACR,EAAQ,CACZ,EACM,MAAsB,CACxB,EAAQ,EACR,EAAO,IAAI,EAAA,eAAe,sDAAsD,CAAC,CACrF,EACM,MAAsB,CACxB,EAAI,oBAAoB,OAAQ,CAAM,EACtC,EAAI,oBAAoB,QAAS,CAAO,CAC5C,EACA,EAAI,iBAAiB,OAAQ,EAAQ,CAAE,KAAM,EAAK,CAAC,EACnD,EAAI,iBAAiB,QAAS,EAAS,CAAE,KAAM,EAAK,CAAC,CACzD,CAAC,CACL,CAEA,SAAS,EAAc,EAA6B,EAAe,EAA0B,CACzF,GAAI,IAAU,GAAK,IAAW,EAC1B,MAAM,IAAI,EAAA,eAAe,0CAA0C,EAAM,GAAG,EAAO,GAAG,EAE1F,IAAM,EAAS,EAAA,aAAa,EAAO,CAAM,EACnC,EAAM,EAAA,aAAa,CAAM,EAC/B,EAAI,UAAU,EAAU,EAAG,CAAC,EAC5B,IAAM,EAAY,EAAI,aAAa,EAAG,EAAG,EAAO,CAAM,EACtD,OAAO,EAAA,eAAe,CAAS,CACnC"}