@squoosh-kit/qoi 0.2.7 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,19 +1,20 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../runtime/src/env.ts", "../../runtime/src/worker-call.ts", "../../runtime/src/worker-helper.ts", "../../runtime/src/wasm-loader.ts", "../../runtime/src/validators.ts", "../../runtime/src/image-data-polyfill.ts", "../../runtime/src/index.ts", "../src/qoi.worker.ts", "../src/bridge.ts", "../src/index.ts"],
3
+ "sources": ["../../runtime/src/env.ts", "../../runtime/src/bridge-mode.ts", "../../runtime/src/worker-call.ts", "../../runtime/src/worker-helper.ts", "../../runtime/src/wasm-loader.ts", "../../runtime/src/validators.ts", "../../runtime/src/image-data-polyfill.ts", "../../runtime/src/index.ts", "../src/qoi.worker.ts", "../src/bridge.ts", "../src/index.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * Runtime environment detection utilities\n */\n\n/**\n * Detect if running in a Web Worker context\n */\nexport function isWorker(): boolean {\n return (\n typeof self !== 'undefined' &&\n typeof (globalThis as unknown as { DedicatedWorkerGlobalScope?: unknown })\n .DedicatedWorkerGlobalScope !== 'undefined'\n );\n}\n\n/**\n * Detect if running in a browser context\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * Detect if running in Bun\n */\nexport function isBun(): boolean {\n return typeof Bun !== 'undefined';\n}\n\n/**\n * Detect if running in Node.js\n */\nexport function isNode(): boolean {\n return (\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null\n );\n}\n\n/**\n * Check if ImageData is available in the current environment\n */\nexport function hasImageData(): boolean {\n return typeof ImageData !== 'undefined';\n}\n",
6
+ "import { isBrowser, isWorker } from './env';\n\nexport type BridgeMode = 'worker' | 'client' | 'auto';\n\nexport type ResolvedBridgeMode = 'worker' | 'client';\n\nexport function resolveBridgeMode(\n mode: BridgeMode = 'auto'\n): ResolvedBridgeMode {\n if (mode === 'worker' || mode === 'client') {\n return mode;\n }\n\n if (isBrowser() && !isWorker()) {\n return 'worker';\n }\n\n return 'client';\n}\n",
6
7
  "/**\n * Generic worker communication helper with support for transferables and AbortSignal\n */\n\nexport interface WorkerRequest<T = unknown> {\n type: string;\n id: number;\n payload: T;\n}\n\nexport interface WorkerResponse<T = unknown> {\n id: number;\n ok: boolean;\n data?: T;\n error?: string;\n}\n\nlet requestId = 0;\n\n/**\n * Call a worker with a typed request and wait for response\n *\n * @param worker - The worker instance to call\n * @param type - The message type\n * @param payload - The payload to send\n * @param signal - Optional AbortSignal to cancel the operation\n * @param transfer - Optional list of Transferable objects to transfer\n * @returns Promise that resolves with the worker's response data\n */\nexport async function callWorker<TPayload, TResponse>(\n worker: Worker,\n type: string,\n payload: TPayload,\n signal?: AbortSignal,\n transfer?: Transferable[]\n): Promise<TResponse> {\n return new Promise<TResponse>((resolve, reject) => {\n const id = ++requestId;\n\n // Check if already aborted\n if (signal?.aborted) {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n\n const handleMessage = (event: MessageEvent) => {\n const response = event.data as WorkerResponse<TResponse>;\n if (response.id !== id) return;\n\n cleanup();\n\n if (response.ok && response.data !== undefined) {\n resolve(response.data);\n } else {\n reject(new Error(response.error || 'Unknown worker error'));\n }\n };\n\n const handleError = (error: ErrorEvent) => {\n cleanup();\n reject(new Error(`Worker error: ${error.message}`));\n };\n\n const handleAbort = () => {\n cleanup();\n reject(new DOMException('Aborted', 'AbortError'));\n };\n\n const cleanup = () => {\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n signal?.removeEventListener('abort', handleAbort);\n };\n\n // Set up listeners\n worker.addEventListener('message', handleMessage);\n worker.addEventListener('error', handleError);\n signal?.addEventListener('abort', handleAbort);\n\n // Send the request\n const request: WorkerRequest<TPayload> = { type, id, payload };\n\n if (transfer && transfer.length > 0) {\n worker.postMessage(request, transfer);\n } else {\n worker.postMessage(request);\n }\n });\n}\n",
7
- "/**\n * Worker helper utilities for creating and managing Web Workers\n *\n * This module provides centralized logic for creating worker instances\n * in different environments (browser, Node.js, Bun) using import.meta.resolve\n * for server-side and package-relative paths for browsers.\n */\n\nimport { isBun } from './env';\n\nexport const DEFAULT_BROWSER_ASSET_PATH = '/squoosh-kit';\n\nexport type CreateWorkerOptions = {\n /**\n * Public URL prefix for worker and WASM files.\n * Defaults to `/squoosh-kit` in the browser (the path used by\n * `@squoosh-kit/vite-plugin`). Pass an empty string to resolve workers\n * relative to the installed package instead.\n */\n assetPath?: string;\n};\n\n/**\n * Create a Web Worker for a specific codec\n *\n * In Node.js/Bun environments, uses import.meta.resolve to locate worker files.\n * In browsers, workers load from `/squoosh-kit/{package}/` by default.\n *\n * @param workerFilename - The name of the worker file (e.g., 'resize.worker' or 'webp.worker')\n * @returns Worker instance\n * @throws Error if worker creation fails with detailed error message\n */\nexport function createCodecWorker(\n workerFilename: string,\n options?: CreateWorkerOptions\n): Worker {\n // Ensure filename has correct format\n const normalizedName = workerFilename.endsWith('.js')\n ? workerFilename\n : `${workerFilename}.js`;\n\n // Map worker filenames to their package and export\n const workerMap: Record<string, { package: string; specifier: string }> = {\n 'resize.worker.js': {\n package: '@squoosh-kit/resize',\n specifier: 'resize.worker.js',\n },\n 'webp.worker.js': {\n package: '@squoosh-kit/webp',\n specifier: 'webp.worker.js',\n },\n 'avif.worker.js': {\n package: '@squoosh-kit/avif',\n specifier: 'avif.worker.js',\n },\n 'mozjpeg.worker.js': {\n package: '@squoosh-kit/mozjpeg',\n specifier: 'mozjpeg.worker.js',\n },\n 'jxl.worker.js': {\n package: '@squoosh-kit/jxl',\n specifier: 'jxl.worker.js',\n },\n 'oxipng.worker.js': {\n package: '@squoosh-kit/oxipng',\n specifier: 'oxipng.worker.js',\n },\n 'png.worker.js': {\n package: '@squoosh-kit/png',\n specifier: 'png.worker.js',\n },\n 'imagequant.worker.js': {\n package: '@squoosh-kit/imagequant',\n specifier: 'imagequant.worker.js',\n },\n 'qoi.worker.js': {\n package: '@squoosh-kit/qoi',\n specifier: 'qoi.worker.js',\n },\n 'wp2.worker.js': {\n package: '@squoosh-kit/wp2',\n specifier: 'wp2.worker.js',\n },\n 'hqx.worker.js': {\n package: '@squoosh-kit/hqx',\n specifier: 'hqx.worker.js',\n },\n 'rotate.worker.js': {\n package: '@squoosh-kit/rotate',\n specifier: 'rotate.worker.js',\n },\n 'visdif.worker.js': {\n package: '@squoosh-kit/visdif',\n specifier: 'visdif.worker.js',\n },\n };\n\n const workerConfig = workerMap[normalizedName];\n if (!workerConfig) {\n throw new Error(\n `Unknown worker: ${normalizedName}. ` +\n `Supported workers: ${Object.keys(workerMap).join(', ')}`\n );\n }\n\n try {\n // In browsers, workers load from /squoosh-kit by default\n if (typeof window !== 'undefined') {\n const packageName = workerConfig.package.split('/')[1]; // Extract 'resize' or 'webp'\n const workerFile = normalizedName.replace('.js', '.browser.mjs');\n\n console.log(\n `[worker-helper] In browser environment. Trying to create worker:`\n );\n console.log(`[worker-helper] - Package Name: ${packageName}`);\n console.log(`[worker-helper] - Worker File: ${workerFile}`);\n\n const assetPath =\n options?.assetPath === undefined\n ? DEFAULT_BROWSER_ASSET_PATH\n : options.assetPath;\n\n if (assetPath) {\n let normalizedAssetPath = assetPath;\n if (!normalizedAssetPath.startsWith('/')) {\n normalizedAssetPath = '/' + normalizedAssetPath;\n }\n if (normalizedAssetPath.endsWith('/')) {\n normalizedAssetPath = normalizedAssetPath.slice(0, -1);\n }\n\n // Construct absolute URL: {origin}{assetPath}/{package}/{workerFile}\n const workerPath = `${normalizedAssetPath}/${packageName}/${workerFile}`;\n const workerUrl = new URL(workerPath, window.location.origin).href;\n\n console.log(\n `[worker-helper] Using assetPath. Full Worker URL: ${workerUrl}`\n );\n try {\n const worker = new Worker(workerUrl, { type: 'module' });\n console.log(\n `[worker-helper] Successfully created worker with assetPath: ${workerUrl}`\n );\n return worker;\n } catch (e) {\n console.error(\n `[worker-helper] Failed to load worker from assetPath URL: ${workerUrl}`,\n e\n );\n throw new Error(\n `Worker failed to load from ${workerUrl}: ${e instanceof Error ? e.message : String(e)}`,\n { cause: e }\n );\n }\n }\n\n // Try multiple path strategies to support both:\n // 1. Monorepo development structure: ../../{package}/dist/{workerFile}\n // 2. npm installed structure: ../../../{package}/dist/{workerFile}\n const pathStrategies = [\n // First try monorepo structure (when runtime is at packages/runtime/src)\n `../../${packageName}/dist/${workerFile}`,\n // Then try npm structure (when runtime is at node_modules/@squoosh-kit/runtime)\n `../../../node_modules/@squoosh-kit/${packageName}/dist/${workerFile}`,\n // Alternative npm structure for cases where packages are flattened\n `../../../${packageName}/dist/${workerFile}`,\n ];\n\n let lastError: Error | null = null;\n\n for (const relPath of pathStrategies) {\n console.log('relPath:', relPath);\n console.log('import.meta.url:', import.meta.url);\n try {\n const workerUrl = new URL(relPath, import.meta.url);\n console.log(\n `[worker-helper] Trying path strategy. Full Worker URL: ${workerUrl.href}`\n );\n const worker = new Worker(workerUrl, {\n type: 'module',\n });\n console.log(\n `[worker-helper] Successfully created worker with URL: ${workerUrl.href}`\n );\n return worker;\n } catch (error) {\n console.warn(\n `[worker-helper] Path strategy failed for ${relPath}:`,\n error\n );\n lastError = error instanceof Error ? error : new Error(String(error));\n // Continue to next strategy\n }\n }\n\n // If all strategies failed, throw the last error\n if (lastError) {\n console.error('[worker-helper] All path strategies failed.', lastError);\n throw lastError;\n }\n throw new Error(\n `Could not resolve worker ${normalizedName} using any available path strategy`\n );\n }\n\n // Fallbacks for monorepo/dev without build artifacts\n const platformExt = isBun() ? '.bun.js' : '.node.mjs';\n const baseName = normalizedName.replace('.js', '');\n const pkgName = workerConfig.package.split('/')[1]; // e.g. 'avif', 'webp', 'resize'\n\n // 1) Try TypeScript source first (Bun can transpile TS, works in dev)\n const srcRelPath = `../../${pkgName}/src/${baseName}.ts`;\n\n console.log('srcRelPath:', srcRelPath);\n console.log('import.meta.url:', import.meta.url);\n try {\n return new Worker(new URL(srcRelPath, import.meta.url), {\n type: 'module',\n });\n } catch {\n // 2) Try dist output (if already built)\n const distRelPath = `../../${pkgName}/dist/${baseName}.${platformExt.slice(1)}`;\n\n console.log('distRelPath:', distRelPath);\n console.log('import.meta.url:', import.meta.url);\n try {\n return new Worker(new URL(distRelPath, import.meta.url), {\n type: 'module',\n });\n } catch {\n // 3) Try import.meta.resolve as last resort\n if (typeof import.meta.resolve === 'function') {\n try {\n const resolved = import.meta.resolve(\n `${workerConfig.package}/${workerConfig.specifier}`\n );\n console.log('resolved:', resolved);\n return new Worker(resolved, { type: 'module' });\n } catch {\n // Continue to error below\n }\n }\n }\n }\n\n // If we get here, all fallbacks failed\n throw new Error(\n `Failed to create worker from ${normalizedName}. ` +\n `Tried TypeScript source, dist output, and import.meta.resolve. ` +\n `Ensure the @squoosh-kit/resize and @squoosh-kit/webp packages are installed.`\n );\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Failed to create worker from ${normalizedName}: ${errorMessage}. ` +\n `Ensure the @squoosh-kit/resize and @squoosh-kit/webp packages are installed. ` +\n `If you're using Vite, ensure the worker files are not being optimized as dependencies.`,\n { cause: error }\n );\n }\n}\n\n/**\n * Create a worker with initialization timeout and ready signal handling\n *\n * This is a higher-level function that creates a worker and waits for it\n * to signal that it's ready to receive messages.\n *\n * @param workerFilename - The name of the worker file\n * @param timeoutMs - Timeout in milliseconds (default: 10000)\n * @returns Promise that resolves to a ready Worker instance\n * @throws Error if worker creation fails or times out\n */\nexport function createReadyWorker(\n workerFilename: string,\n options?: CreateWorkerOptions,\n timeoutMs: number = 10000\n): Promise<Worker> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(\n new Error(\n `Worker initialization timeout after ${timeoutMs}ms. Worker file: ${workerFilename}`\n )\n );\n }, timeoutMs);\n\n let worker: Worker;\n try {\n worker = createCodecWorker(workerFilename, options);\n } catch (error) {\n clearTimeout(timeout);\n reject(error);\n return;\n }\n\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === 'worker:ready') {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n resolve(worker);\n }\n };\n\n const handleError = (event: ErrorEvent) => {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n reject(\n new Error(\n `Worker failed to start: ${event?.message || 'Unknown error'}. Worker file: ${workerFilename}`\n )\n );\n };\n\n const handleMessageError = () => {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n reject(\n new Error(\n `Worker message error during initialization. Worker file: ${workerFilename}`\n )\n );\n };\n\n worker.addEventListener('message', handleMessage);\n worker.addEventListener('error', handleError);\n worker.addEventListener('messageerror', handleMessageError);\n worker.postMessage({ type: 'worker:ping' });\n });\n}\n",
8
+ "/**\n * Worker helper utilities for creating and managing Web Workers\n *\n * This module provides centralized logic for creating worker instances\n * in different environments (browser, Node.js, Bun) using import.meta.resolve\n * for server-side and package-relative paths for browsers.\n */\n\nimport { isBun } from './env';\n\nexport const DEFAULT_BROWSER_ASSET_PATH = '/squoosh-kit';\n\ntype WorkerPackageConfig = {\n package: string;\n specifier: string;\n};\n\nfunction scriptUrlToPath(scriptUrl: string | URL): string {\n const href = typeof scriptUrl === 'string' ? scriptUrl : scriptUrl.href;\n if (href.startsWith('file://')) {\n return decodeURIComponent(\n href.startsWith('file:///') ? href.slice(7) : href.slice(5)\n );\n }\n return href;\n}\n\nfunction workerScriptExists(scriptUrl: string | URL): boolean {\n if (typeof window !== 'undefined') {\n return false;\n }\n\n const path = scriptUrlToPath(scriptUrl);\n\n if (typeof Bun !== 'undefined') {\n return (\n Bun.spawnSync(['test', '-f', path], {\n stdout: 'ignore',\n stderr: 'ignore',\n }).exitCode === 0\n );\n }\n\n try {\n const existsSync = Function('return require(\"node:fs\").existsSync')() as (\n filePath: string\n ) => boolean;\n return existsSync(path);\n } catch {\n return false;\n }\n}\n\nexport function resolveServerWorkerScript(\n workerConfig: WorkerPackageConfig,\n normalizedName: string\n): string | URL {\n const platformExt = isBun() ? 'bun.js' : 'node.mjs';\n const baseName = normalizedName.replace('.js', '');\n const pkgName = workerConfig.package.split('/')[1];\n\n if (typeof import.meta.resolve === 'function') {\n try {\n const resolved = import.meta.resolve(\n `${workerConfig.package}/${workerConfig.specifier}`\n );\n if (workerScriptExists(resolved)) {\n return resolved;\n }\n } catch {\n // Continue to monorepo fallbacks\n }\n }\n\n const candidates = [\n new URL(\n `../../${pkgName}/dist/${baseName}.${platformExt}`,\n import.meta.url\n ),\n new URL(`../../${pkgName}/src/${baseName}.ts`, import.meta.url),\n ];\n\n for (const candidate of candidates) {\n if (workerScriptExists(candidate)) {\n return candidate;\n }\n }\n\n throw new Error(\n `Failed to resolve worker script for ${normalizedName}. ` +\n `Tried import.meta.resolve, dist output, and TypeScript source. ` +\n `Ensure ${workerConfig.package} is installed.`\n );\n}\n\nexport type CreateWorkerOptions = {\n /**\n * Public URL prefix for worker and WASM files.\n * Defaults to `/squoosh-kit` in the browser (the path used by\n * `@squoosh-kit/vite-plugin`). Pass an empty string to resolve workers\n * relative to the installed package instead.\n */\n assetPath?: string;\n};\n\n/**\n * Create a Web Worker for a specific codec\n *\n * In Node.js/Bun environments, uses import.meta.resolve to locate worker files.\n * In browsers, workers load from `/squoosh-kit/{package}/` by default.\n *\n * @param workerFilename - The name of the worker file (e.g., 'resize.worker' or 'webp.worker')\n * @returns Worker instance\n * @throws Error if worker creation fails with detailed error message\n */\nexport function createCodecWorker(\n workerFilename: string,\n options?: CreateWorkerOptions\n): Worker {\n // Ensure filename has correct format\n const normalizedName = workerFilename.endsWith('.js')\n ? workerFilename\n : `${workerFilename}.js`;\n\n // Map worker filenames to their package and export\n const workerMap: Record<string, { package: string; specifier: string }> = {\n 'resize.worker.js': {\n package: '@squoosh-kit/resize',\n specifier: 'resize.worker.js',\n },\n 'webp.worker.js': {\n package: '@squoosh-kit/webp',\n specifier: 'webp.worker.js',\n },\n 'avif.worker.js': {\n package: '@squoosh-kit/avif',\n specifier: 'avif.worker.js',\n },\n 'mozjpeg.worker.js': {\n package: '@squoosh-kit/mozjpeg',\n specifier: 'mozjpeg.worker.js',\n },\n 'jxl.worker.js': {\n package: '@squoosh-kit/jxl',\n specifier: 'jxl.worker.js',\n },\n 'oxipng.worker.js': {\n package: '@squoosh-kit/oxipng',\n specifier: 'oxipng.worker.js',\n },\n 'png.worker.js': {\n package: '@squoosh-kit/png',\n specifier: 'png.worker.js',\n },\n 'imagequant.worker.js': {\n package: '@squoosh-kit/imagequant',\n specifier: 'imagequant.worker.js',\n },\n 'qoi.worker.js': {\n package: '@squoosh-kit/qoi',\n specifier: 'qoi.worker.js',\n },\n 'wp2.worker.js': {\n package: '@squoosh-kit/wp2',\n specifier: 'wp2.worker.js',\n },\n 'hqx.worker.js': {\n package: '@squoosh-kit/hqx',\n specifier: 'hqx.worker.js',\n },\n 'rotate.worker.js': {\n package: '@squoosh-kit/rotate',\n specifier: 'rotate.worker.js',\n },\n 'visdif.worker.js': {\n package: '@squoosh-kit/visdif',\n specifier: 'visdif.worker.js',\n },\n };\n\n const workerConfig = workerMap[normalizedName];\n if (!workerConfig) {\n throw new Error(\n `Unknown worker: ${normalizedName}. ` +\n `Supported workers: ${Object.keys(workerMap).join(', ')}`\n );\n }\n\n try {\n // In browsers, workers load from /squoosh-kit by default\n if (typeof window !== 'undefined') {\n const packageName = workerConfig.package.split('/')[1]; // Extract 'resize' or 'webp'\n const workerFile = normalizedName.replace('.js', '.browser.mjs');\n\n console.log(\n `[worker-helper] In browser environment. Trying to create worker:`\n );\n console.log(`[worker-helper] - Package Name: ${packageName}`);\n console.log(`[worker-helper] - Worker File: ${workerFile}`);\n\n const assetPath =\n options?.assetPath === undefined\n ? DEFAULT_BROWSER_ASSET_PATH\n : options.assetPath;\n\n if (assetPath) {\n let normalizedAssetPath = assetPath;\n if (!normalizedAssetPath.startsWith('/')) {\n normalizedAssetPath = '/' + normalizedAssetPath;\n }\n if (normalizedAssetPath.endsWith('/')) {\n normalizedAssetPath = normalizedAssetPath.slice(0, -1);\n }\n\n // Construct absolute URL: {origin}{assetPath}/{package}/{workerFile}\n const workerPath = `${normalizedAssetPath}/${packageName}/${workerFile}`;\n const workerUrl = new URL(workerPath, window.location.origin).href;\n\n console.log(\n `[worker-helper] Using assetPath. Full Worker URL: ${workerUrl}`\n );\n try {\n const worker = new Worker(workerUrl, { type: 'module' });\n console.log(\n `[worker-helper] Successfully created worker with assetPath: ${workerUrl}`\n );\n return worker;\n } catch (e) {\n console.error(\n `[worker-helper] Failed to load worker from assetPath URL: ${workerUrl}`,\n e\n );\n throw new Error(\n `Worker failed to load from ${workerUrl}: ${e instanceof Error ? e.message : String(e)}`,\n { cause: e }\n );\n }\n }\n\n // Try multiple path strategies to support both:\n // 1. Monorepo development structure: ../../{package}/dist/{workerFile}\n // 2. npm installed structure: ../../../{package}/dist/{workerFile}\n const pathStrategies = [\n // First try monorepo structure (when runtime is at packages/runtime/src)\n `../../${packageName}/dist/${workerFile}`,\n // Then try npm structure (when runtime is at node_modules/@squoosh-kit/runtime)\n `../../../node_modules/@squoosh-kit/${packageName}/dist/${workerFile}`,\n // Alternative npm structure for cases where packages are flattened\n `../../../${packageName}/dist/${workerFile}`,\n ];\n\n let lastError: Error | null = null;\n\n for (const relPath of pathStrategies) {\n console.log('relPath:', relPath);\n console.log('import.meta.url:', import.meta.url);\n try {\n const workerUrl = new URL(relPath, import.meta.url);\n console.log(\n `[worker-helper] Trying path strategy. Full Worker URL: ${workerUrl.href}`\n );\n const worker = new Worker(workerUrl, {\n type: 'module',\n });\n console.log(\n `[worker-helper] Successfully created worker with URL: ${workerUrl.href}`\n );\n return worker;\n } catch (error) {\n console.warn(\n `[worker-helper] Path strategy failed for ${relPath}:`,\n error\n );\n lastError = error instanceof Error ? error : new Error(String(error));\n // Continue to next strategy\n }\n }\n\n // If all strategies failed, throw the last error\n if (lastError) {\n console.error('[worker-helper] All path strategies failed.', lastError);\n throw lastError;\n }\n throw new Error(\n `Could not resolve worker ${normalizedName} using any available path strategy`\n );\n }\n\n const workerScript = resolveServerWorkerScript(\n workerConfig,\n normalizedName\n );\n return new Worker(workerScript, { type: 'module' });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Failed to create worker from ${normalizedName}: ${errorMessage}. ` +\n `Ensure the @squoosh-kit/resize and @squoosh-kit/webp packages are installed. ` +\n `If you're using Vite, ensure the worker files are not being optimized as dependencies.`,\n { cause: error }\n );\n }\n}\n\n/**\n * Create a worker with initialization timeout and ready signal handling\n *\n * This is a higher-level function that creates a worker and waits for it\n * to signal that it's ready to receive messages.\n *\n * @param workerFilename - The name of the worker file\n * @param timeoutMs - Timeout in milliseconds (default: 10000)\n * @returns Promise that resolves to a ready Worker instance\n * @throws Error if worker creation fails or times out\n */\nexport function createReadyWorker(\n workerFilename: string,\n options?: CreateWorkerOptions,\n timeoutMs: number = 10000\n): Promise<Worker> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(\n new Error(\n `Worker initialization timeout after ${timeoutMs}ms. Worker file: ${workerFilename}`\n )\n );\n }, timeoutMs);\n\n let worker: Worker;\n try {\n worker = createCodecWorker(workerFilename, options);\n } catch (error) {\n clearTimeout(timeout);\n reject(error);\n return;\n }\n\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === 'worker:ready') {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n resolve(worker);\n }\n };\n\n const handleError = (event: ErrorEvent) => {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n reject(\n new Error(\n `Worker failed to start: ${event?.message || 'Unknown error'}. Worker file: ${workerFilename}`\n )\n );\n };\n\n const handleMessageError = () => {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n reject(\n new Error(\n `Worker message error during initialization. Worker file: ${workerFilename}`\n )\n );\n };\n\n worker.addEventListener('message', handleMessage);\n worker.addEventListener('error', handleError);\n worker.addEventListener('messageerror', handleMessageError);\n worker.postMessage({ type: 'worker:ping' });\n });\n}\n",
8
9
  "/**\n * Load WASM binary from various sources with fallback strategies\n *\n * Supports:\n * - Node.js (fs/promises)\n * - Browsers (fetch)\n * - Workers (fetch)\n */\nexport async function loadWasmBinary(\n relativePath: string,\n baseUrlOverride?: string | URL\n): Promise<ArrayBuffer> {\n // Get the base URL depending on the environment (worker or main thread)\n // If a base URL is provided, use it; otherwise use import.meta.url from this module\n // In a worker, import.meta.url is the worker's own URL.\n // In the main thread, it's the URL of the current module.\n const baseUrl = baseUrlOverride\n ? typeof baseUrlOverride === 'string'\n ? new URL('.', baseUrlOverride)\n : new URL('.', baseUrlOverride.href)\n : new URL('.', import.meta.url);\n const fullUrl = new URL(relativePath, baseUrl);\n\n console.log(`[WasmLoader] Loading WASM from relative path: ${relativePath}`);\n console.log(`[WasmLoader] Base URL (import.meta.url): ${baseUrl.href}`);\n console.log(`[WasmLoader] Constructed full URL: ${fullUrl.href}`);\n\n try {\n const response = await fetch(fullUrl.href);\n\n console.log(\n `[WasmLoader] Fetch response status for ${fullUrl.href}: ${response.status}`\n );\n\n if (!response.ok) {\n const responseText = await response.text();\n console.error(\n `[WasmLoader] Fetch response text (first 500 chars):`,\n responseText.substring(0, 500)\n );\n throw new Error(\n `Failed to fetch WASM module at ${fullUrl.href}: ${response.status} ${response.statusText}`\n );\n }\n\n const contentType = response.headers.get('content-type');\n console.log(`[WasmLoader] Response Content-Type: ${contentType}`);\n if (!contentType || !contentType.includes('application/wasm')) {\n console.warn(\n `[WasmLoader] Warning: WASM module at ${fullUrl.href} served with incorrect MIME type: \"${contentType}\". Should be \"application/wasm\".`\n );\n }\n\n return await response.arrayBuffer();\n } catch (error) {\n console.error(\n `[WasmLoader] CRITICAL: Fetching WASM binary from ${fullUrl.href} failed.`,\n error\n );\n throw error;\n }\n}\n\n/**\n * Load WASM JavaScript module with fallback strategies\n *\n * Strategy 1: Static relative import (works everywhere)\n * Strategy 2: import.meta.resolve (Node.js 22+)\n * Strategy 3: URL-based import (browsers/workers)\n */\nexport async function loadWasmModule(\n modulePath: string\n): Promise<WebAssembly.Module> {\n // Strategy 1: Try direct static import\n try {\n return await import(/* @vite-ignore */ modulePath);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e1) {\n // Continue to next strategy\n }\n\n // Strategy 2: Try import.meta.resolve (Node.js 22+)\n try {\n const resolvedPath = await import.meta.resolve(modulePath);\n\n return await import(/* @vite-ignore */ resolvedPath);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e2) {\n // Continue to next strategy\n }\n\n // Strategy 3: Try URL-based import\n try {\n const url = new URL(/* @vite-ignore */ modulePath, import.meta.url);\n\n return await import(/* @vite-ignore */ url.href);\n } catch (e3) {\n throw new Error(\n `Failed to load WASM module from \"${modulePath}\". ` +\n `Ensure WASM files are in the expected location and the module can be resolved.`,\n { cause: e3 }\n );\n }\n}\n",
9
10
  "import type { ImageInput } from './types.js';\n\nexport function validateArrayBuffer(\n buffer: unknown\n): asserts buffer is ArrayBuffer {\n // Check if SharedArrayBuffer is defined in the current environment before using it\n if (\n typeof SharedArrayBuffer !== 'undefined' &&\n buffer instanceof SharedArrayBuffer\n ) {\n throw new Error(\n 'SharedArrayBuffer is not supported. ' +\n 'Use regular ArrayBuffer or Uint8Array instead.'\n );\n }\n\n if (!(buffer instanceof ArrayBuffer)) {\n throw new TypeError('image.data.buffer must be an ArrayBuffer');\n }\n}\n\nexport function validateImageInput(\n image: unknown\n): asserts image is ImageInput {\n if (!image || typeof image !== 'object') {\n throw new TypeError('image must be an object');\n }\n\n const imageObj = image as Record<string, unknown>;\n\n if (!('data' in imageObj)) {\n throw new TypeError('image.data is required');\n }\n\n const { data } = imageObj;\n if (!(data instanceof Uint8Array || data instanceof Uint8ClampedArray)) {\n throw new TypeError('image.data must be Uint8Array or Uint8ClampedArray');\n }\n\n if (!('width' in imageObj) || !('height' in imageObj)) {\n throw new TypeError('image.width and image.height are required');\n }\n\n const { width, height } = imageObj;\n\n if (typeof width !== 'number' || !Number.isInteger(width) || width <= 0) {\n throw new RangeError(\n `image.width must be a positive integer, got ${width}`\n );\n }\n\n if (typeof height !== 'number' || !Number.isInteger(height) || height <= 0) {\n throw new RangeError(\n `image.height must be a positive integer, got ${height}`\n );\n }\n\n const expectedSize = width * height * 4;\n if (data.length < expectedSize) {\n throw new RangeError(\n `image.data too small: ${data.length} bytes, expected at least ${expectedSize} bytes for ${width}x${height} RGBA image`\n );\n }\n}\n",
10
11
  "/**\n * Polyfill for ImageData in Node/Bun environments where it's not available.\n * Must be called before any WASM decode operation that returns ImageData.\n */\nexport function polyfillImageData(): void {\n if (typeof ImageData === 'undefined') {\n (\n globalThis as {\n ImageData?: new (\n data: Uint8ClampedArray,\n width: number,\n height: number\n ) => ImageData;\n }\n ).ImageData = class {\n data: Uint8ClampedArray;\n width: number;\n height: number;\n colorSpace: PredefinedColorSpace = 'srgb';\n constructor(data: Uint8ClampedArray, width: number, height: number) {\n this.data = data;\n this.width = width;\n this.height = height;\n }\n } as unknown as typeof ImageData;\n }\n}\n",
11
- "/**\n * @squoosh-kit/runtime\n *\n * Core runtime logic for squoosh-kit, including environment utilities\n * and worker communication helpers.\n */\n\nexport * from './env.js';\nexport * from './worker-call.js';\nexport * from './types.js';\nexport * from './worker-helper.js';\nexport * from './wasm-loader.js';\nexport * from './validators.js';\nexport * from './simd-detector.js';\nexport * from './image-data-polyfill.js';\n",
12
+ "/**\n * @squoosh-kit/runtime\n *\n * Core runtime logic for squoosh-kit, including environment utilities\n * and worker communication helpers.\n */\n\nexport * from './bridge-mode.js';\nexport * from './env.js';\nexport * from './worker-call.js';\nexport * from './types.js';\nexport * from './worker-helper.js';\nexport * from './wasm-loader.js';\nexport * from './validators.js';\nexport * from './simd-detector.js';\nexport * from './image-data-polyfill.js';\n",
12
13
  "/**\n * QOI encoder/decoder - single-source worker/client implementation\n */\n\nimport {\n type WorkerRequest,\n type WorkerResponse,\n type ImageInput,\n loadWasmBinary,\n validateImageInput,\n polyfillImageData,\n} from '@squoosh-kit/runtime';\nimport type { QoiModule, QOIModule, EncodeOptions } from './types';\n\nlet cachedEncModule: QoiModule | null = null;\nlet cachedDecModule: QOIModule | null = null;\n\nasync function loadQoiEncModule(): Promise<QoiModule> {\n if (cachedEncModule) {\n return cachedEncModule;\n }\n\n const globalSelf = typeof self !== 'undefined' ? self : globalThis;\n if (!globalSelf.location) {\n (globalSelf as { location?: { href: string } }).location = {\n href: import.meta.url,\n };\n }\n if (typeof self === 'undefined' && typeof globalThis !== 'undefined') {\n (globalThis as { self?: typeof globalThis }).self = globalThis;\n }\n\n const modulePath = 'qoi-enc/qoi_enc.js';\n\n console.log('[QOI Worker] Loading encoder module.');\n console.log(\n `[QOI Worker] Attempting to import encoder module from path: ${modulePath}`\n );\n\n let moduleFactory;\n const isSource = import.meta.url.includes('/src/');\n const pathsToTry = isSource\n ? ['../wasm/' + modulePath, './wasm/' + modulePath]\n : ['./wasm/' + modulePath, '../wasm/' + modulePath];\n\n let lastError: Error | null = null;\n for (const importPath of pathsToTry) {\n try {\n moduleFactory = (await import(/* @vite-ignore */ importPath)).default;\n console.log(\n `[QOI Worker] Successfully loaded encoder module from: ${importPath}`\n );\n break;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n console.warn(\n `[QOI Worker] Failed to load encoder from ${importPath}, trying next path...`\n );\n }\n }\n\n if (!moduleFactory) {\n throw (\n lastError || new Error('Could not load QOI encoder module from any path')\n );\n }\n\n console.log('[QOI Worker] Encoder module factory loaded successfully.');\n\n const wasmFile = 'qoi-enc/qoi_enc.wasm';\n const wasmPathsToTry = isSource\n ? ['../wasm/' + wasmFile, './wasm/' + wasmFile]\n : ['./wasm/' + wasmFile, '../wasm/' + wasmFile];\n\n console.log(\n `[QOI Worker] Preparing to load encoder WASM binary. Will try paths: ${wasmPathsToTry.join(', ')}`\n );\n\n const workerBaseUrl = new URL('.', import.meta.url);\n let wasmLastError: Error | null = null;\n\n for (const wasmPath of wasmPathsToTry) {\n try {\n console.log(`[QOI Worker] Calling loadWasmBinary with path: ${wasmPath}`);\n const wasmBinary = await loadWasmBinary(wasmPath, workerBaseUrl);\n console.log(\n `[QOI Worker] Successfully fetched encoder WASM binary from ${wasmPath}. Size: ${wasmBinary.byteLength} bytes.`\n );\n\n const globalSelf2 = typeof self !== 'undefined' ? self : globalThis;\n if (!globalSelf2.location) {\n (globalSelf2 as { location?: { href: string } }).location = {\n href: import.meta.url,\n };\n }\n if (typeof self === 'undefined' && typeof globalThis !== 'undefined') {\n (globalThis as { self?: typeof globalThis }).self = globalThis;\n }\n\n cachedEncModule = await (\n moduleFactory as (config: {\n noInitialRun: boolean;\n wasmBinary?: ArrayBuffer;\n }) => Promise<QoiModule>\n )({\n noInitialRun: true,\n wasmBinary,\n });\n console.log('[QOI Worker] QOI encoder module initialized successfully.');\n return cachedEncModule;\n } catch (err) {\n wasmLastError = err instanceof Error ? err : new Error(String(err));\n console.warn(\n `[QOI Worker] Failed to load encoder WASM from ${wasmPath}, trying next path...`\n );\n }\n }\n\n throw (\n wasmLastError ||\n new Error(\n 'Could not load encoder WASM binary from any of the attempted paths'\n )\n );\n}\n\nasync function loadQoiDecModule(): Promise<QOIModule> {\n if (cachedDecModule) {\n return cachedDecModule;\n }\n\n const globalSelf = typeof self !== 'undefined' ? self : globalThis;\n if (!globalSelf.location) {\n (globalSelf as { location?: { href: string } }).location = {\n href: import.meta.url,\n };\n }\n if (typeof self === 'undefined' && typeof globalThis !== 'undefined') {\n (globalThis as { self?: typeof globalThis }).self = globalThis;\n }\n\n // Polyfill ImageData for Node/Bun environments\n polyfillImageData();\n\n const modulePath = 'qoi-dec/qoi_dec.js';\n\n console.log('[QOI Worker] Loading decoder module.');\n console.log(\n `[QOI Worker] Attempting to import decoder module from path: ${modulePath}`\n );\n\n let moduleFactory;\n const isSource = import.meta.url.includes('/src/');\n const pathsToTry = isSource\n ? ['../wasm/' + modulePath, './wasm/' + modulePath]\n : ['./wasm/' + modulePath, '../wasm/' + modulePath];\n\n let lastError: Error | null = null;\n for (const importPath of pathsToTry) {\n try {\n moduleFactory = (await import(/* @vite-ignore */ importPath)).default;\n console.log(\n `[QOI Worker] Successfully loaded decoder module from: ${importPath}`\n );\n break;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n console.warn(\n `[QOI Worker] Failed to load decoder from ${importPath}, trying next path...`\n );\n }\n }\n\n if (!moduleFactory) {\n throw (\n lastError || new Error('Could not load QOI decoder module from any path')\n );\n }\n\n console.log('[QOI Worker] Decoder module factory loaded successfully.');\n\n const wasmFile = 'qoi-dec/qoi_dec.wasm';\n const wasmPathsToTry = isSource\n ? ['../wasm/' + wasmFile, './wasm/' + wasmFile]\n : ['./wasm/' + wasmFile, '../wasm/' + wasmFile];\n\n console.log(\n `[QOI Worker] Preparing to load decoder WASM binary. Will try paths: ${wasmPathsToTry.join(', ')}`\n );\n\n const workerBaseUrl = new URL('.', import.meta.url);\n let wasmLastError: Error | null = null;\n\n for (const wasmPath of wasmPathsToTry) {\n try {\n console.log(`[QOI Worker] Calling loadWasmBinary with path: ${wasmPath}`);\n const wasmBinary = await loadWasmBinary(wasmPath, workerBaseUrl);\n console.log(\n `[QOI Worker] Successfully fetched decoder WASM binary from ${wasmPath}. Size: ${wasmBinary.byteLength} bytes.`\n );\n\n const globalSelf2 = typeof self !== 'undefined' ? self : globalThis;\n if (!globalSelf2.location) {\n (globalSelf2 as { location?: { href: string } }).location = {\n href: import.meta.url,\n };\n }\n if (typeof self === 'undefined' && typeof globalThis !== 'undefined') {\n (globalThis as { self?: typeof globalThis }).self = globalThis;\n }\n\n cachedDecModule = await (\n moduleFactory as (config: {\n noInitialRun: boolean;\n wasmBinary?: ArrayBuffer;\n }) => Promise<QOIModule>\n )({\n noInitialRun: true,\n wasmBinary,\n });\n console.log('[QOI Worker] QOI decoder module initialized successfully.');\n return cachedDecModule;\n } catch (err) {\n wasmLastError = err instanceof Error ? err : new Error(String(err));\n console.warn(\n `[QOI Worker] Failed to load decoder WASM from ${wasmPath}, trying next path...`\n );\n }\n }\n\n throw (\n wasmLastError ||\n new Error(\n 'Could not load decoder WASM binary from any of the attempted paths'\n )\n );\n}\n\n/**\n * Client-mode QOI encoder (exported for direct use)\n */\nexport async function qoiEncodeClient(\n image: ImageInput,\n signal?: AbortSignal\n): Promise<Uint8Array> {\n validateImageInput(image);\n\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n const width = image.width;\n const height = image.height;\n const data = image.data;\n\n if (!(data instanceof Uint8Array) && !(data instanceof Uint8ClampedArray)) {\n throw new Error('Image data must be Uint8Array or Uint8ClampedArray');\n }\n\n const module = await loadQoiEncModule();\n\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n const dataBuffer =\n data instanceof Uint8ClampedArray\n ? new Uint8Array(data.buffer as ArrayBuffer, data.byteOffset, data.length)\n : new Uint8Array(\n data.buffer as ArrayBuffer,\n data.byteOffset,\n data.length\n );\n\n const options: EncodeOptions = {};\n const result = module.encode(dataBuffer, width, height, options);\n\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n if (!result) {\n throw new Error('QOI encoding failed');\n }\n\n return result;\n}\n\n/**\n * Client-mode QOI decoder (exported for direct use)\n */\nexport async function qoiDecodeClient(\n data: BufferSource,\n signal?: AbortSignal\n): Promise<ImageData> {\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n const module = await loadQoiDecModule();\n\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n const result = module.decode(data);\n\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n if (!result) {\n throw new Error('QOI decoding failed');\n }\n\n return result;\n}\n\n/**\n * Worker message handler\n */\nif (typeof self !== 'undefined') {\n self.onmessage = async (event: MessageEvent) => {\n const data = event.data;\n\n if (data?.type === 'worker:ping') {\n self.postMessage({ type: 'worker:ready' });\n return;\n }\n\n if (data?.type === 'qoi:encode') {\n const request = data as WorkerRequest<{ image: ImageInput }>;\n\n const response: WorkerResponse<Uint8Array> = {\n id: request.id,\n ok: false,\n };\n\n try {\n const { image } = request.payload;\n const result = await qoiEncodeClient(image);\n response.ok = true;\n response.data = result;\n self.postMessage(response);\n } catch (error) {\n response.error = error instanceof Error ? error.message : String(error);\n self.postMessage(response);\n }\n return;\n }\n\n if (data?.type === 'qoi:decode') {\n const request = data as WorkerRequest<{ data: BufferSource }>;\n\n const response: WorkerResponse<ImageData> = {\n id: request.id,\n ok: false,\n };\n\n try {\n const result = await qoiDecodeClient(request.payload.data);\n response.ok = true;\n response.data = result;\n self.postMessage(response);\n } catch (error) {\n response.error = error instanceof Error ? error.message : String(error);\n self.postMessage(response);\n }\n return;\n }\n\n // Unknown message type\n const request = data as WorkerRequest<unknown>;\n const response: WorkerResponse<never> = {\n id: request.id,\n ok: false,\n error: `Unknown message type: ${data?.type}`,\n };\n self.postMessage(response);\n };\n}\n",
13
- "/**\n * Bridge implementation for the QOI package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n validateImageInput,\n} from '@squoosh-kit/runtime';\n\nexport type BridgeOptions = {\n /**\n * Public URL prefix for worker and WASM files.\n * Defaults to `/squoosh-kit` in the browser.\n */\n assetPath?: string;\n};\n\ninterface QoiBridge {\n encode(image: ImageInput, signal?: AbortSignal): Promise<Uint8Array>;\n decode(data: BufferSource, signal?: AbortSignal): Promise<ImageData>;\n terminate(): Promise<void>;\n}\n\nclass QoiClientBridge implements QoiBridge {\n async encode(image: ImageInput, signal?: AbortSignal): Promise<Uint8Array> {\n const module = await import('./qoi.worker.js');\n const qoiEncodeClient = module.qoiEncodeClient as (\n image: ImageInput,\n signal?: AbortSignal\n ) => Promise<Uint8Array>;\n return qoiEncodeClient(image, signal);\n }\n\n async decode(data: BufferSource, signal?: AbortSignal): Promise<ImageData> {\n const module = await import('./qoi.worker.js');\n const qoiDecodeClient = module.qoiDecodeClient as (\n data: BufferSource,\n signal?: AbortSignal\n ) => Promise<ImageData>;\n return qoiDecodeClient(data, signal);\n }\n\n async terminate(): Promise<void> {\n // Client mode has nothing to terminate\n }\n}\n\nclass QoiWorkerBridge implements QoiBridge {\n private worker: Worker | null = null;\n private workerReady: Promise<Worker> | null = null;\n private options?: BridgeOptions;\n\n constructor(options?: BridgeOptions) {\n console.log(\n '[qoi/bridge] QoiWorkerBridge constructor called with options:',\n options\n );\n this.options = options;\n }\n\n private async getWorker(): Promise<Worker> {\n if (!this.workerReady) {\n this.workerReady = this.createWorker();\n }\n return this.workerReady;\n }\n\n private async createWorker(): Promise<Worker> {\n console.log('[qoi/bridge] createWorker called. Creating ready worker...');\n this.worker = await createReadyWorker('qoi.worker.js', this.options);\n console.log(\n '[qoi/bridge] createWorker: Ready worker created successfully.'\n );\n return this.worker;\n }\n\n async encode(image: ImageInput, signal?: AbortSignal): Promise<Uint8Array> {\n const worker = await this.getWorker();\n validateImageInput(image);\n return callWorker(worker, 'qoi:encode', { image }, signal);\n }\n\n async decode(data: BufferSource, signal?: AbortSignal): Promise<ImageData> {\n const worker = await this.getWorker();\n return callWorker(worker, 'qoi:decode', { data }, signal);\n }\n\n async terminate(): Promise<void> {\n if (this.worker) {\n this.worker.terminate();\n this.worker = null;\n this.workerReady = null;\n }\n }\n}\n\nexport function createBridge(\n mode: 'worker' | 'client',\n options?: BridgeOptions\n): QoiBridge {\n console.log(`[qoi/bridge] createBridge called with mode: ${mode}`);\n if (mode === 'worker') {\n return new QoiWorkerBridge(options);\n }\n return new QoiClientBridge();\n}\n",
14
- "/**\n * @squoosh-kit/qoi public API\n */\n\nimport type { ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge, type BridgeOptions } from './bridge';\n\nexport type { ImageInput };\n\n// Global bridge instance for reuse\nlet globalClientBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A reusable QOI encoder function.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type QoiEncoderFactory = ((\n image: ImageInput,\n signal?: AbortSignal\n) => Promise<Uint8Array>) & {\n /**\n * Terminates the encoder and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const encoder = createQoiEncoder('worker');\n * try {\n * const result = await encoder(imageData);\n * } finally {\n * await encoder.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * A reusable QOI decoder function.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type QoiDecoderFactory = ((\n data: BufferSource,\n signal?: AbortSignal\n) => Promise<ImageData>) & {\n /**\n * Terminates the decoder and cleans up resources.\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Encodes an image to QOI format. Uses worker mode for UI responsiveness.\n *\n * @param image - The image data to encode.\n * @param signal - (Optional) AbortSignal to cancel the operation.\n * @returns A Promise resolving to the encoded QOI data as a Uint8Array.\n *\n * @example\n * const result = await encode(imageData);\n */\nexport async function encode(\n image: ImageInput,\n signal?: AbortSignal\n): Promise<Uint8Array> {\n if (!globalClientBridge) {\n globalClientBridge = createBridge('worker');\n }\n\n return globalClientBridge.encode(image, signal);\n}\n\n/**\n * Decodes a QOI image to raw ImageData. Uses worker mode for UI responsiveness.\n *\n * @param data - The QOI data to decode.\n * @param signal - (Optional) AbortSignal to cancel the operation.\n * @returns A Promise resolving to an ImageData object with the decoded pixel data.\n */\nexport async function decode(\n data: BufferSource,\n signal?: AbortSignal\n): Promise<ImageData> {\n if (!globalClientBridge) {\n globalClientBridge = createBridge('worker');\n }\n\n return globalClientBridge.decode(data, signal);\n}\n\n/**\n * Creates a reusable QOI encoder function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @param options - Optional bridge options.\n * @returns A function that encodes an image to QOI format with optional AbortSignal.\n */\nexport function createQoiEncoder(\n mode: 'worker' | 'client' = 'worker',\n options?: BridgeOptions\n): QoiEncoderFactory {\n const bridge = createBridge(mode, options);\n\n return Object.assign(\n (image: ImageInput, signal?: AbortSignal) => {\n return bridge.encode(image, signal);\n },\n {\n terminate: async () => {\n await bridge.terminate();\n },\n }\n );\n}\n\n/**\n * Creates a reusable QOI decoder function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @param options - Optional bridge options.\n * @returns A function that decodes QOI data to ImageData with optional AbortSignal.\n */\nexport function createQoiDecoder(\n mode: 'worker' | 'client' = 'worker',\n options?: BridgeOptions\n): QoiDecoderFactory {\n const bridge = createBridge(mode, options);\n\n return Object.assign(\n (data: BufferSource, signal?: AbortSignal) => {\n return bridge.decode(data, signal);\n },\n {\n terminate: async () => {\n await bridge.terminate();\n },\n }\n );\n}\n"
14
+ "/**\n * Bridge implementation for the QOI package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n validateImageInput,\n resolveBridgeMode,\n type BridgeMode,\n} from '@squoosh-kit/runtime';\n\nexport type BridgeOptions = {\n /**\n * Public URL prefix for worker and WASM files.\n * Defaults to `/squoosh-kit` in the browser.\n */\n assetPath?: string;\n};\n\ninterface QoiBridge {\n encode(image: ImageInput, signal?: AbortSignal): Promise<Uint8Array>;\n decode(data: BufferSource, signal?: AbortSignal): Promise<ImageData>;\n terminate(): Promise<void>;\n}\n\nclass QoiClientBridge implements QoiBridge {\n async encode(image: ImageInput, signal?: AbortSignal): Promise<Uint8Array> {\n const module = await import('./qoi.worker.js');\n const qoiEncodeClient = module.qoiEncodeClient as (\n image: ImageInput,\n signal?: AbortSignal\n ) => Promise<Uint8Array>;\n return qoiEncodeClient(image, signal);\n }\n\n async decode(data: BufferSource, signal?: AbortSignal): Promise<ImageData> {\n const module = await import('./qoi.worker.js');\n const qoiDecodeClient = module.qoiDecodeClient as (\n data: BufferSource,\n signal?: AbortSignal\n ) => Promise<ImageData>;\n return qoiDecodeClient(data, signal);\n }\n\n async terminate(): Promise<void> {\n // Client mode has nothing to terminate\n }\n}\n\nclass QoiWorkerBridge implements QoiBridge {\n private worker: Worker | null = null;\n private workerReady: Promise<Worker> | null = null;\n private options?: BridgeOptions;\n\n constructor(options?: BridgeOptions) {\n console.log(\n '[qoi/bridge] QoiWorkerBridge constructor called with options:',\n options\n );\n this.options = options;\n }\n\n private async getWorker(): Promise<Worker> {\n if (!this.workerReady) {\n this.workerReady = this.createWorker();\n }\n return this.workerReady;\n }\n\n private async createWorker(): Promise<Worker> {\n console.log('[qoi/bridge] createWorker called. Creating ready worker...');\n this.worker = await createReadyWorker('qoi.worker.js', this.options);\n console.log(\n '[qoi/bridge] createWorker: Ready worker created successfully.'\n );\n return this.worker;\n }\n\n async encode(image: ImageInput, signal?: AbortSignal): Promise<Uint8Array> {\n const worker = await this.getWorker();\n validateImageInput(image);\n return callWorker(worker, 'qoi:encode', { image }, signal);\n }\n\n async decode(data: BufferSource, signal?: AbortSignal): Promise<ImageData> {\n const worker = await this.getWorker();\n return callWorker(worker, 'qoi:decode', { data }, signal);\n }\n\n async terminate(): Promise<void> {\n if (this.worker) {\n this.worker.terminate();\n this.worker = null;\n this.workerReady = null;\n }\n }\n}\n\nexport function createBridge(\n mode: BridgeMode = 'auto',\n options?: BridgeOptions\n): QoiBridge {\n const resolvedMode = resolveBridgeMode(mode);\n console.log(`[qoi/bridge] createBridge called with mode: ${resolvedMode}`);\n if (resolvedMode === 'worker') {\n return new QoiWorkerBridge(options);\n }\n return new QoiClientBridge();\n}\n",
15
+ "/**\n * @squoosh-kit/qoi public API\n */\n\nimport type { BridgeMode, ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge, type BridgeOptions } from './bridge';\n\nexport type { ImageInput };\n\n// Global bridge instance for reuse\nlet globalClientBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A reusable QOI encoder function.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type QoiEncoderFactory = ((\n image: ImageInput,\n signal?: AbortSignal\n) => Promise<Uint8Array>) & {\n /**\n * Terminates the encoder and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const encoder = createQoiEncoder('worker');\n * try {\n * const result = await encoder(imageData);\n * } finally {\n * await encoder.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * A reusable QOI decoder function.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type QoiDecoderFactory = ((\n data: BufferSource,\n signal?: AbortSignal\n) => Promise<ImageData>) & {\n /**\n * Terminates the decoder and cleans up resources.\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Encodes an image to QOI format. Uses worker mode for UI responsiveness.\n *\n * @param image - The image data to encode.\n * @param signal - (Optional) AbortSignal to cancel the operation.\n * @returns A Promise resolving to the encoded QOI data as a Uint8Array.\n *\n * @example\n * const result = await encode(imageData);\n */\nexport async function encode(\n image: ImageInput,\n signal?: AbortSignal\n): Promise<Uint8Array> {\n if (!globalClientBridge) {\n globalClientBridge = createBridge('auto');\n }\n\n return globalClientBridge.encode(image, signal);\n}\n\n/**\n * Decodes a QOI image to raw ImageData. Uses worker mode for UI responsiveness.\n *\n * @param data - The QOI data to decode.\n * @param signal - (Optional) AbortSignal to cancel the operation.\n * @returns A Promise resolving to an ImageData object with the decoded pixel data.\n */\nexport async function decode(\n data: BufferSource,\n signal?: AbortSignal\n): Promise<ImageData> {\n if (!globalClientBridge) {\n globalClientBridge = createBridge('auto');\n }\n\n return globalClientBridge.decode(data, signal);\n}\n\n/**\n * Creates a reusable QOI encoder function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @param options - Optional bridge options.\n * @returns A function that encodes an image to QOI format with optional AbortSignal.\n */\nexport function createQoiEncoder(\n mode: BridgeMode = 'auto',\n options?: BridgeOptions\n): QoiEncoderFactory {\n const bridge = createBridge(mode, options);\n\n return Object.assign(\n (image: ImageInput, signal?: AbortSignal) => {\n return bridge.encode(image, signal);\n },\n {\n terminate: async () => {\n await bridge.terminate();\n },\n }\n );\n}\n\n/**\n * Creates a reusable QOI decoder function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @param options - Optional bridge options.\n * @returns A function that decodes QOI data to ImageData with optional AbortSignal.\n */\nexport function createQoiDecoder(\n mode: BridgeMode = 'auto',\n options?: BridgeOptions\n): QoiDecoderFactory {\n const bridge = createBridge(mode, options);\n\n return Object.assign(\n (data: BufferSource, signal?: AbortSignal) => {\n return bridge.decode(data, signal);\n },\n {\n terminate: async () => {\n await bridge.terminate();\n },\n }\n );\n}\n"
15
16
  ],
16
- "mappings": "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",
17
- "debugId": "ED69C213A2388EBF64756E2164756E21",
17
+ "mappings": ";;;;;;;;;;;;;;;;;;AAOO,SAAS,QAAQ,GAAY;AAAA,EAClC,OACE,OAAO,SAAS,eAChB,OAAQ,WACL,+BAA+B;AAAA;AAO/B,SAAS,SAAS,GAAY;AAAA,EACnC,OAAO,OAAO,WAAW,eAAe,OAAO,aAAa;AAAA;AAMvD,SAAS,KAAK,GAAY;AAAA,EAC/B,OAAO,OAAO,QAAQ;AAAA;;;ACpBjB,SAAS,iBAAiB,CAC/B,OAAmB,QACC;AAAA,EACpB,IAAI,SAAS,YAAY,SAAS,UAAU;AAAA,IAC1C,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAAU,KAAK,CAAC,SAAS,GAAG;AAAA,IAC9B,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;AAAA;;;ACYT,eAAsB,UAA+B,CACnD,QACA,MACA,SACA,QACA,UACoB;AAAA,EACpB,OAAO,IAAI,QAAmB,CAAC,SAAS,WAAW;AAAA,IACjD,MAAM,KAAK,EAAE;AAAA,IAGb,IAAI,QAAQ,SAAS;AAAA,MACnB,OAAO,IAAI,aAAa,WAAW,YAAY,CAAC;AAAA,MAChD;AAAA,IACF;AAAA,IAEA,MAAM,gBAAgB,CAAC,UAAwB;AAAA,MAC7C,MAAM,WAAW,MAAM;AAAA,MACvB,IAAI,SAAS,OAAO;AAAA,QAAI;AAAA,MAExB,QAAQ;AAAA,MAER,IAAI,SAAS,MAAM,SAAS,SAAS,WAAW;AAAA,QAC9C,QAAQ,SAAS,IAAI;AAAA,MACvB,EAAO;AAAA,QACL,OAAO,IAAI,MAAM,SAAS,SAAS,sBAAsB,CAAC;AAAA;AAAA;AAAA,IAI9D,MAAM,cAAc,CAAC,UAAsB;AAAA,MACzC,QAAQ;AAAA,MACR,OAAO,IAAI,MAAM,iBAAiB,MAAM,SAAS,CAAC;AAAA;AAAA,IAGpD,MAAM,cAAc,MAAM;AAAA,MACxB,QAAQ;AAAA,MACR,OAAO,IAAI,aAAa,WAAW,YAAY,CAAC;AAAA;AAAA,IAGlD,MAAM,UAAU,MAAM;AAAA,MACpB,OAAO,oBAAoB,WAAW,aAAa;AAAA,MACnD,OAAO,oBAAoB,SAAS,WAAW;AAAA,MAC/C,QAAQ,oBAAoB,SAAS,WAAW;AAAA;AAAA,IAIlD,OAAO,iBAAiB,WAAW,aAAa;AAAA,IAChD,OAAO,iBAAiB,SAAS,WAAW;AAAA,IAC5C,QAAQ,iBAAiB,SAAS,WAAW;AAAA,IAG7C,MAAM,UAAmC,EAAE,MAAM,IAAI,QAAQ;AAAA,IAE7D,IAAI,YAAY,SAAS,SAAS,GAAG;AAAA,MACnC,OAAO,YAAY,SAAS,QAAQ;AAAA,IACtC,EAAO;AAAA,MACL,OAAO,YAAY,OAAO;AAAA;AAAA,GAE7B;AAAA;AAAA,IAtEC,YAAY;;;ACAhB,SAAS,eAAe,CAAC,WAAiC;AAAA,EACxD,MAAM,OAAO,OAAO,cAAc,WAAW,YAAY,UAAU;AAAA,EACnE,IAAI,KAAK,WAAW,SAAS,GAAG;AAAA,IAC9B,OAAO,mBACL,KAAK,WAAW,UAAU,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAC5D;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,kBAAkB,CAAC,WAAkC;AAAA,EAC5D,IAAI,OAAO,WAAW,aAAa;AAAA,IACjC,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,gBAAgB,SAAS;AAAA,EAEtC,IAAI,OAAO,QAAQ,aAAa;AAAA,IAC9B,OACE,IAAI,UAAU,CAAC,QAAQ,MAAM,IAAI,GAAG;AAAA,MAClC,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV,CAAC,EAAE,aAAa;AAAA,EAEpB;AAAA,EAEA,IAAI;AAAA,IACF,MAAM,aAAa,SAAS,sCAAsC,EAAE;AAAA,IAGpE,OAAO,WAAW,IAAI;AAAA,IACtB,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIJ,SAAS,yBAAyB,CACvC,cACA,gBACc;AAAA,EACd,MAAM,cAAc,MAAM,IAAI,WAAW;AAAA,EACzC,MAAM,WAAW,eAAe,QAAQ,OAAO,EAAE;AAAA,EACjD,MAAM,UAAU,aAAa,QAAQ,MAAM,GAAG,EAAE;AAAA,EAEhD,IAAI,OAAO,YAAY,YAAY,YAAY;AAAA,IAC7C,IAAI;AAAA,MACF,MAAM,WAAW,YAAY,QAC3B,GAAG,aAAa,WAAW,aAAa,WAC1C;AAAA,MACA,IAAI,mBAAmB,QAAQ,GAAG;AAAA,QAChC,OAAO;AAAA,MACT;AAAA,MACA,MAAM;AAAA,EAGV;AAAA,EAEA,MAAM,aAAa;AAAA,IACjB,IAAI,IACF,SAAS,gBAAgB,YAAY,eACrC,YAAY,GACd;AAAA,IACA,IAAI,IAAI,SAAS,eAAe,eAAe,YAAY,GAAG;AAAA,EAChE;AAAA,EAEA,WAAW,aAAa,YAAY;AAAA,IAClC,IAAI,mBAAmB,SAAS,GAAG;AAAA,MACjC,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,MACR,uCAAuC,qBACrC,oEACA,UAAU,aAAa,uBAC3B;AAAA;AAuBK,SAAS,iBAAiB,CAC/B,gBACA,SACQ;AAAA,EAER,MAAM,iBAAiB,eAAe,SAAS,KAAK,IAChD,iBACA,GAAG;AAAA,EAGP,MAAM,YAAoE;AAAA,IACxE,oBAAoB;AAAA,MAClB,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,kBAAkB;AAAA,MAChB,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,kBAAkB;AAAA,MAChB,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,qBAAqB;AAAA,MACnB,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,oBAAoB;AAAA,MAClB,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,wBAAwB;AAAA,MACtB,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,oBAAoB;AAAA,MAClB,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,oBAAoB;AAAA,MAClB,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,UAAU;AAAA,EAC/B,IAAI,CAAC,cAAc;AAAA,IACjB,MAAM,IAAI,MACR,mBAAmB,qBACjB,sBAAsB,OAAO,KAAK,SAAS,EAAE,KAAK,IAAI,GAC1D;AAAA,EACF;AAAA,EAEA,IAAI;AAAA,IAEF,IAAI,OAAO,WAAW,aAAa;AAAA,MACjC,MAAM,cAAc,aAAa,QAAQ,MAAM,GAAG,EAAE;AAAA,MACpD,MAAM,aAAa,eAAe,QAAQ,OAAO,cAAc;AAAA,MAE/D,QAAQ,IACN,kEACF;AAAA,MACA,QAAQ,IAAI,qCAAqC,aAAa;AAAA,MAC9D,QAAQ,IAAI,oCAAoC,YAAY;AAAA,MAE5D,MAAM,YACJ,SAAS,cAAc,YACnB,6BACA,QAAQ;AAAA,MAEd,IAAI,WAAW;AAAA,QACb,IAAI,sBAAsB;AAAA,QAC1B,IAAI,CAAC,oBAAoB,WAAW,GAAG,GAAG;AAAA,UACxC,sBAAsB,MAAM;AAAA,QAC9B;AAAA,QACA,IAAI,oBAAoB,SAAS,GAAG,GAAG;AAAA,UACrC,sBAAsB,oBAAoB,MAAM,GAAG,EAAE;AAAA,QACvD;AAAA,QAGA,MAAM,aAAa,GAAG,uBAAuB,eAAe;AAAA,QAC5D,MAAM,YAAY,IAAI,IAAI,YAAY,OAAO,SAAS,MAAM,EAAE;AAAA,QAE9D,QAAQ,IACN,qDAAqD,WACvD;AAAA,QACA,IAAI;AAAA,UACF,MAAM,SAAS,IAAI,OAAO,WAAW,EAAE,MAAM,SAAS,CAAC;AAAA,UACvD,QAAQ,IACN,+DAA+D,WACjE;AAAA,UACA,OAAO;AAAA,UACP,OAAO,GAAG;AAAA,UACV,QAAQ,MACN,6DAA6D,aAC7D,CACF;AAAA,UACA,MAAM,IAAI,MACR,8BAA8B,cAAc,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,KACrF,EAAE,OAAO,EAAE,CACb;AAAA;AAAA,MAEJ;AAAA,MAKA,MAAM,iBAAiB;AAAA,QAErB,SAAS,oBAAoB;AAAA,QAE7B,sCAAsC,oBAAoB;AAAA,QAE1D,YAAY,oBAAoB;AAAA,MAClC;AAAA,MAEA,IAAI,YAA0B;AAAA,MAE9B,WAAW,WAAW,gBAAgB;AAAA,QACpC,QAAQ,IAAI,YAAY,OAAO;AAAA,QAC/B,QAAQ,IAAI,oBAAoB,YAAY,GAAG;AAAA,QAC/C,IAAI;AAAA,UACF,MAAM,YAAY,IAAI,IAAI,SAAS,YAAY,GAAG;AAAA,UAClD,QAAQ,IACN,0DAA0D,UAAU,MACtE;AAAA,UACA,MAAM,SAAS,IAAI,OAAO,WAAW;AAAA,YACnC,MAAM;AAAA,UACR,CAAC;AAAA,UACD,QAAQ,IACN,yDAAyD,UAAU,MACrE;AAAA,UACA,OAAO;AAAA,UACP,OAAO,OAAO;AAAA,UACd,QAAQ,KACN,4CAA4C,YAC5C,KACF;AAAA,UACA,YAAY,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA;AAAA,MAGxE;AAAA,MAGA,IAAI,WAAW;AAAA,QACb,QAAQ,MAAM,+CAA+C,SAAS;AAAA,QACtE,MAAM;AAAA,MACR;AAAA,MACA,MAAM,IAAI,MACR,4BAA4B,kDAC9B;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,0BACnB,cACA,cACF;AAAA,IACA,OAAO,IAAI,OAAO,cAAc,EAAE,MAAM,SAAS,CAAC;AAAA,IAClD,OAAO,OAAO;AAAA,IACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC1E,MAAM,IAAI,MACR,gCAAgC,mBAAmB,mBACjD,kFACA,0FACF,EAAE,OAAO,MAAM,CACjB;AAAA;AAAA;AAeG,SAAS,iBAAiB,CAC/B,gBACA,SACA,YAAoB,KACH;AAAA,EACjB,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,IACtC,MAAM,UAAU,WAAW,MAAM;AAAA,MAC/B,OACE,IAAI,MACF,uCAAuC,6BAA6B,gBACtE,CACF;AAAA,OACC,SAAS;AAAA,IAEZ,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,SAAS,kBAAkB,gBAAgB,OAAO;AAAA,MAClD,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,OAAO,KAAK;AAAA,MACZ;AAAA;AAAA,IAGF,MAAM,gBAAgB,CAAC,UAAwB;AAAA,MAC7C,IAAI,MAAM,MAAM,SAAS,gBAAgB;AAAA,QACvC,aAAa,OAAO;AAAA,QACpB,OAAO,oBAAoB,WAAW,aAAa;AAAA,QACnD,OAAO,oBAAoB,SAAS,WAAW;AAAA,QAC/C,OAAO,oBAAoB,gBAAgB,kBAAkB;AAAA,QAC7D,QAAQ,MAAM;AAAA,MAChB;AAAA;AAAA,IAGF,MAAM,cAAc,CAAC,UAAsB;AAAA,MACzC,aAAa,OAAO;AAAA,MACpB,OAAO,oBAAoB,WAAW,aAAa;AAAA,MACnD,OAAO,oBAAoB,SAAS,WAAW;AAAA,MAC/C,OAAO,oBAAoB,gBAAgB,kBAAkB;AAAA,MAC7D,OACE,IAAI,MACF,2BAA2B,OAAO,WAAW,iCAAiC,gBAChF,CACF;AAAA;AAAA,IAGF,MAAM,qBAAqB,MAAM;AAAA,MAC/B,aAAa,OAAO;AAAA,MACpB,OAAO,oBAAoB,WAAW,aAAa;AAAA,MACnD,OAAO,oBAAoB,SAAS,WAAW;AAAA,MAC/C,OAAO,oBAAoB,gBAAgB,kBAAkB;AAAA,MAC7D,OACE,IAAI,MACF,4DAA4D,gBAC9D,CACF;AAAA;AAAA,IAGF,OAAO,iBAAiB,WAAW,aAAa;AAAA,IAChD,OAAO,iBAAiB,SAAS,WAAW;AAAA,IAC5C,OAAO,iBAAiB,gBAAgB,kBAAkB;AAAA,IAC1D,OAAO,YAAY,EAAE,MAAM,cAAc,CAAC;AAAA,GAC3C;AAAA;AAAA,IA9WU,6BAA6B;AAAA;;;ACF1C,eAAsB,cAAc,CAClC,cACA,iBACsB;AAAA,EAKtB,MAAM,UAAU,kBACZ,OAAO,oBAAoB,WACzB,IAAI,IAAI,KAAK,eAAe,IAC5B,IAAI,IAAI,KAAK,gBAAgB,IAAI,IACnC,IAAI,IAAI,KAAK,YAAY,GAAG;AAAA,EAChC,MAAM,UAAU,IAAI,IAAI,cAAc,OAAO;AAAA,EAE7C,QAAQ,IAAI,iDAAiD,cAAc;AAAA,EAC3E,QAAQ,IAAI,4CAA4C,QAAQ,MAAM;AAAA,EACtE,QAAQ,IAAI,sCAAsC,QAAQ,MAAM;AAAA,EAEhE,IAAI;AAAA,IACF,MAAM,WAAW,MAAM,MAAM,QAAQ,IAAI;AAAA,IAEzC,QAAQ,IACN,0CAA0C,QAAQ,SAAS,SAAS,QACtE;AAAA,IAEA,IAAI,CAAC,SAAS,IAAI;AAAA,MAChB,MAAM,eAAe,MAAM,SAAS,KAAK;AAAA,MACzC,QAAQ,MACN,uDACA,aAAa,UAAU,GAAG,GAAG,CAC/B;AAAA,MACA,MAAM,IAAI,MACR,kCAAkC,QAAQ,SAAS,SAAS,UAAU,SAAS,YACjF;AAAA,IACF;AAAA,IAEA,MAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AAAA,IACvD,QAAQ,IAAI,uCAAuC,aAAa;AAAA,IAChE,IAAI,CAAC,eAAe,CAAC,YAAY,SAAS,kBAAkB,GAAG;AAAA,MAC7D,QAAQ,KACN,wCAAwC,QAAQ,0CAA0C,6CAC5F;AAAA,IACF;AAAA,IAEA,OAAO,MAAM,SAAS,YAAY;AAAA,IAClC,OAAO,OAAO;AAAA,IACd,QAAQ,MACN,oDAAoD,QAAQ,gBAC5D,KACF;AAAA,IACA,MAAM;AAAA;AAAA;;;ACtCH,SAAS,kBAAkB,CAChC,OAC6B;AAAA,EAC7B,IAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AAAA,IACvC,MAAM,IAAI,UAAU,yBAAyB;AAAA,EAC/C;AAAA,EAEA,MAAM,WAAW;AAAA,EAEjB,IAAI,EAAE,UAAU,WAAW;AAAA,IACzB,MAAM,IAAI,UAAU,wBAAwB;AAAA,EAC9C;AAAA,EAEA,QAAQ,SAAS;AAAA,EACjB,IAAI,EAAE,gBAAgB,cAAc,gBAAgB,oBAAoB;AAAA,IACtE,MAAM,IAAI,UAAU,oDAAoD;AAAA,EAC1E;AAAA,EAEA,IAAI,EAAE,WAAW,aAAa,EAAE,YAAY,WAAW;AAAA,IACrD,MAAM,IAAI,UAAU,2CAA2C;AAAA,EACjE;AAAA,EAEA,QAAQ,OAAO,WAAW;AAAA,EAE1B,IAAI,OAAO,UAAU,YAAY,CAAC,OAAO,UAAU,KAAK,KAAK,SAAS,GAAG;AAAA,IACvE,MAAM,IAAI,WACR,+CAA+C,OACjD;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,WAAW,YAAY,CAAC,OAAO,UAAU,MAAM,KAAK,UAAU,GAAG;AAAA,IAC1E,MAAM,IAAI,WACR,gDAAgD,QAClD;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,QAAQ,SAAS;AAAA,EACtC,IAAI,KAAK,SAAS,cAAc;AAAA,IAC9B,MAAM,IAAI,WACR,yBAAyB,KAAK,mCAAmC,0BAA0B,SAAS,mBACtG;AAAA,EACF;AAAA;;;;;AC1DK,SAAS,iBAAiB,GAAS;AAAA,EACxC,IAAI,OAAO,cAAc,aAAa;AAAA,IAElC,WAOA,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAmC;AAAA,MACnC,WAAW,CAAC,MAAyB,OAAe,QAAgB;AAAA,QAClE,KAAK,OAAO;AAAA,QACZ,KAAK,QAAQ;AAAA,QACb,KAAK,SAAS;AAAA;AAAA,IAElB;AAAA,EACF;AAAA;;;;EClBF;AAAA,EAIA;AAAA,EAGA;AAAA;;;;;;;;ACGA,eAAe,gBAAgB,GAAuB;AAAA,EACpD,IAAI,iBAAiB;AAAA,IACnB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,OAAO,SAAS,cAAc,OAAO;AAAA,EACxD,IAAI,CAAC,WAAW,UAAU;AAAA,IACvB,WAA+C,WAAW;AAAA,MACzD,MAAM,YAAY;AAAA,IACpB;AAAA,EACF;AAAA,EACA,IAAI,OAAO,SAAS,eAAe,OAAO,eAAe,aAAa;AAAA,IACnE,WAA4C,OAAO;AAAA,EACtD;AAAA,EAEA,MAAM,aAAa;AAAA,EAEnB,QAAQ,IAAI,sCAAsC;AAAA,EAClD,QAAQ,IACN,+DAA+D,YACjE;AAAA,EAEA,IAAI;AAAA,EACJ,MAAM,WAAW,YAAY,IAAI,SAAS,OAAO;AAAA,EACjD,MAAM,aAAa,WACf,CAAC,aAAa,YAAY,YAAY,UAAU,IAChD,CAAC,YAAY,YAAY,aAAa,UAAU;AAAA,EAEpD,IAAI,YAA0B;AAAA,EAC9B,WAAW,cAAc,YAAY;AAAA,IACnC,IAAI;AAAA,MACF,iBAAiB,MAAgC,oBAAa;AAAA,MAC9D,QAAQ,IACN,yDAAyD,YAC3D;AAAA,MACA;AAAA,MACA,OAAO,OAAO;AAAA,MACd,YAAY,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,MACpE,QAAQ,KACN,4CAA4C,iCAC9C;AAAA;AAAA,EAEJ;AAAA,EAEA,IAAI,CAAC,eAAe;AAAA,IAClB,MACE,aAAa,IAAI,MAAM,iDAAiD;AAAA,EAE5E;AAAA,EAEA,QAAQ,IAAI,0DAA0D;AAAA,EAEtE,MAAM,WAAW;AAAA,EACjB,MAAM,iBAAiB,WACnB,CAAC,aAAa,UAAU,YAAY,QAAQ,IAC5C,CAAC,YAAY,UAAU,aAAa,QAAQ;AAAA,EAEhD,QAAQ,IACN,uEAAuE,eAAe,KAAK,IAAI,GACjG;AAAA,EAEA,MAAM,gBAAgB,IAAI,IAAI,KAAK,YAAY,GAAG;AAAA,EAClD,IAAI,gBAA8B;AAAA,EAElC,WAAW,YAAY,gBAAgB;AAAA,IACrC,IAAI;AAAA,MACF,QAAQ,IAAI,kDAAkD,UAAU;AAAA,MACxE,MAAM,aAAa,MAAM,eAAe,UAAU,aAAa;AAAA,MAC/D,QAAQ,IACN,8DAA8D,mBAAmB,WAAW,mBAC9F;AAAA,MAEA,MAAM,cAAc,OAAO,SAAS,cAAc,OAAO;AAAA,MACzD,IAAI,CAAC,YAAY,UAAU;AAAA,QACxB,YAAgD,WAAW;AAAA,UAC1D,MAAM,YAAY;AAAA,QACpB;AAAA,MACF;AAAA,MACA,IAAI,OAAO,SAAS,eAAe,OAAO,eAAe,aAAa;AAAA,QACnE,WAA4C,OAAO;AAAA,MACtD;AAAA,MAEA,kBAAkB,MAChB,cAIA;AAAA,QACA,cAAc;AAAA,QACd;AAAA,MACF,CAAC;AAAA,MACD,QAAQ,IAAI,2DAA2D;AAAA,MACvE,OAAO;AAAA,MACP,OAAO,KAAK;AAAA,MACZ,gBAAgB,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAAA,MAClE,QAAQ,KACN,iDAAiD,+BACnD;AAAA;AAAA,EAEJ;AAAA,EAEA,MACE,iBACA,IAAI,MACF,oEACF;AAAA;AAIJ,eAAe,gBAAgB,GAAuB;AAAA,EACpD,IAAI,iBAAiB;AAAA,IACnB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,OAAO,SAAS,cAAc,OAAO;AAAA,EACxD,IAAI,CAAC,WAAW,UAAU;AAAA,IACvB,WAA+C,WAAW;AAAA,MACzD,MAAM,YAAY;AAAA,IACpB;AAAA,EACF;AAAA,EACA,IAAI,OAAO,SAAS,eAAe,OAAO,eAAe,aAAa;AAAA,IACnE,WAA4C,OAAO;AAAA,EACtD;AAAA,EAGA,kBAAkB;AAAA,EAElB,MAAM,aAAa;AAAA,EAEnB,QAAQ,IAAI,sCAAsC;AAAA,EAClD,QAAQ,IACN,+DAA+D,YACjE;AAAA,EAEA,IAAI;AAAA,EACJ,MAAM,WAAW,YAAY,IAAI,SAAS,OAAO;AAAA,EACjD,MAAM,aAAa,WACf,CAAC,aAAa,YAAY,YAAY,UAAU,IAChD,CAAC,YAAY,YAAY,aAAa,UAAU;AAAA,EAEpD,IAAI,YAA0B;AAAA,EAC9B,WAAW,cAAc,YAAY;AAAA,IACnC,IAAI;AAAA,MACF,iBAAiB,MAAgC,oBAAa;AAAA,MAC9D,QAAQ,IACN,yDAAyD,YAC3D;AAAA,MACA;AAAA,MACA,OAAO,OAAO;AAAA,MACd,YAAY,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,MACpE,QAAQ,KACN,4CAA4C,iCAC9C;AAAA;AAAA,EAEJ;AAAA,EAEA,IAAI,CAAC,eAAe;AAAA,IAClB,MACE,aAAa,IAAI,MAAM,iDAAiD;AAAA,EAE5E;AAAA,EAEA,QAAQ,IAAI,0DAA0D;AAAA,EAEtE,MAAM,WAAW;AAAA,EACjB,MAAM,iBAAiB,WACnB,CAAC,aAAa,UAAU,YAAY,QAAQ,IAC5C,CAAC,YAAY,UAAU,aAAa,QAAQ;AAAA,EAEhD,QAAQ,IACN,uEAAuE,eAAe,KAAK,IAAI,GACjG;AAAA,EAEA,MAAM,gBAAgB,IAAI,IAAI,KAAK,YAAY,GAAG;AAAA,EAClD,IAAI,gBAA8B;AAAA,EAElC,WAAW,YAAY,gBAAgB;AAAA,IACrC,IAAI;AAAA,MACF,QAAQ,IAAI,kDAAkD,UAAU;AAAA,MACxE,MAAM,aAAa,MAAM,eAAe,UAAU,aAAa;AAAA,MAC/D,QAAQ,IACN,8DAA8D,mBAAmB,WAAW,mBAC9F;AAAA,MAEA,MAAM,cAAc,OAAO,SAAS,cAAc,OAAO;AAAA,MACzD,IAAI,CAAC,YAAY,UAAU;AAAA,QACxB,YAAgD,WAAW;AAAA,UAC1D,MAAM,YAAY;AAAA,QACpB;AAAA,MACF;AAAA,MACA,IAAI,OAAO,SAAS,eAAe,OAAO,eAAe,aAAa;AAAA,QACnE,WAA4C,OAAO;AAAA,MACtD;AAAA,MAEA,kBAAkB,MAChB,cAIA;AAAA,QACA,cAAc;AAAA,QACd;AAAA,MACF,CAAC;AAAA,MACD,QAAQ,IAAI,2DAA2D;AAAA,MACvE,OAAO;AAAA,MACP,OAAO,KAAK;AAAA,MACZ,gBAAgB,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAAA,MAClE,QAAQ,KACN,iDAAiD,+BACnD;AAAA;AAAA,EAEJ;AAAA,EAEA,MACE,iBACA,IAAI,MACF,oEACF;AAAA;AAOJ,eAAsB,eAAe,CACnC,OACA,QACqB;AAAA,EACrB,mBAAmB,KAAK;AAAA,EAExB,IAAI,QAAQ,SAAS;AAAA,IACnB,MAAM,IAAI,aAAa,WAAW,YAAY;AAAA,EAChD;AAAA,EAEA,MAAM,QAAQ,MAAM;AAAA,EACpB,MAAM,SAAS,MAAM;AAAA,EACrB,MAAM,OAAO,MAAM;AAAA,EAEnB,IAAI,EAAE,gBAAgB,eAAe,EAAE,gBAAgB,oBAAoB;AAAA,IACzE,MAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAAA,EAEA,MAAM,SAAS,MAAM,iBAAiB;AAAA,EAEtC,IAAI,QAAQ,SAAS;AAAA,IACnB,MAAM,IAAI,aAAa,WAAW,YAAY;AAAA,EAChD;AAAA,EAEA,MAAM,aACJ,gBAAgB,oBACZ,IAAI,WAAW,KAAK,QAAuB,KAAK,YAAY,KAAK,MAAM,IACvE,IAAI,WACF,KAAK,QACL,KAAK,YACL,KAAK,MACP;AAAA,EAEN,MAAM,UAAyB,CAAC;AAAA,EAChC,MAAM,SAAS,OAAO,OAAO,YAAY,OAAO,QAAQ,OAAO;AAAA,EAE/D,IAAI,QAAQ,SAAS;AAAA,IACnB,MAAM,IAAI,aAAa,WAAW,YAAY;AAAA,EAChD;AAAA,EAEA,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AAAA,EAEA,OAAO;AAAA;AAMT,eAAsB,eAAe,CACnC,MACA,QACoB;AAAA,EACpB,IAAI,QAAQ,SAAS;AAAA,IACnB,MAAM,IAAI,aAAa,WAAW,YAAY;AAAA,EAChD;AAAA,EAEA,MAAM,SAAS,MAAM,iBAAiB;AAAA,EAEtC,IAAI,QAAQ,SAAS;AAAA,IACnB,MAAM,IAAI,aAAa,WAAW,YAAY;AAAA,EAChD;AAAA,EAEA,MAAM,SAAS,OAAO,OAAO,IAAI;AAAA,EAEjC,IAAI,QAAQ,SAAS;AAAA,IACnB,MAAM,IAAI,aAAa,WAAW,YAAY;AAAA,EAChD;AAAA,EAEA,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AAAA,EAEA,OAAO;AAAA;AAAA,IA7SL,kBAAoC,MACpC,kBAAoC;AAAA;AAAA,EAXxC;AAAA,EA6TA,IAAI,OAAO,SAAS,aAAa;AAAA,IAC/B,KAAK,YAAY,OAAO,UAAwB;AAAA,MAC9C,MAAM,OAAO,MAAM;AAAA,MAEnB,IAAI,MAAM,SAAS,eAAe;AAAA,QAChC,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAAA,QACzC;AAAA,MACF;AAAA,MAEA,IAAI,MAAM,SAAS,cAAc;AAAA,QAC/B,MAAM,WAAU;AAAA,QAEhB,MAAM,YAAuC;AAAA,UAC3C,IAAI,SAAQ;AAAA,UACZ,IAAI;AAAA,QACN;AAAA,QAEA,IAAI;AAAA,UACF,QAAQ,UAAU,SAAQ;AAAA,UAC1B,MAAM,SAAS,MAAM,gBAAgB,KAAK;AAAA,UAC1C,UAAS,KAAK;AAAA,UACd,UAAS,OAAO;AAAA,UAChB,KAAK,YAAY,SAAQ;AAAA,UACzB,OAAO,OAAO;AAAA,UACd,UAAS,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UACtE,KAAK,YAAY,SAAQ;AAAA;AAAA,QAE3B;AAAA,MACF;AAAA,MAEA,IAAI,MAAM,SAAS,cAAc;AAAA,QAC/B,MAAM,WAAU;AAAA,QAEhB,MAAM,YAAsC;AAAA,UAC1C,IAAI,SAAQ;AAAA,UACZ,IAAI;AAAA,QACN;AAAA,QAEA,IAAI;AAAA,UACF,MAAM,SAAS,MAAM,gBAAgB,SAAQ,QAAQ,IAAI;AAAA,UACzD,UAAS,KAAK;AAAA,UACd,UAAS,OAAO;AAAA,UAChB,KAAK,YAAY,SAAQ;AAAA,UACzB,OAAO,OAAO;AAAA,UACd,UAAS,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UACtE,KAAK,YAAY,SAAQ;AAAA;AAAA,QAE3B;AAAA,MACF;AAAA,MAGA,MAAM,UAAU;AAAA,MAChB,MAAM,WAAkC;AAAA,QACtC,IAAI,QAAQ;AAAA,QACZ,IAAI;AAAA,QACJ,OAAO,yBAAyB,MAAM;AAAA,MACxC;AAAA,MACA,KAAK,YAAY,QAAQ;AAAA;AAAA,EAE7B;AAAA;;;ACxXA;AAAA;AAuBA,MAAM,gBAAqC;AAAA,OACnC,OAAM,CAAC,OAAmB,QAA2C;AAAA,IACzE,MAAM,SAAS;AAAA,IACf,MAAM,mBAAkB,OAAO;AAAA,IAI/B,OAAO,iBAAgB,OAAO,MAAM;AAAA;AAAA,OAGhC,OAAM,CAAC,MAAoB,QAA0C;AAAA,IACzE,MAAM,SAAS;AAAA,IACf,MAAM,mBAAkB,OAAO;AAAA,IAI/B,OAAO,iBAAgB,MAAM,MAAM;AAAA;AAAA,OAG/B,UAAS,GAAkB;AAGnC;AAAA;AAEA,MAAM,gBAAqC;AAAA,EACjC,SAAwB;AAAA,EACxB,cAAsC;AAAA,EACtC;AAAA,EAER,WAAW,CAAC,SAAyB;AAAA,IACnC,QAAQ,IACN,iEACA,OACF;AAAA,IACA,KAAK,UAAU;AAAA;AAAA,OAGH,UAAS,GAAoB;AAAA,IACzC,IAAI,CAAC,KAAK,aAAa;AAAA,MACrB,KAAK,cAAc,KAAK,aAAa;AAAA,IACvC;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,OAGA,aAAY,GAAoB;AAAA,IAC5C,QAAQ,IAAI,4DAA4D;AAAA,IACxE,KAAK,SAAS,MAAM,kBAAkB,iBAAiB,KAAK,OAAO;AAAA,IACnE,QAAQ,IACN,+DACF;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,OAGR,OAAM,CAAC,OAAmB,QAA2C;AAAA,IACzE,MAAM,SAAS,MAAM,KAAK,UAAU;AAAA,IACpC,mBAAmB,KAAK;AAAA,IACxB,OAAO,WAAW,QAAQ,cAAc,EAAE,MAAM,GAAG,MAAM;AAAA;AAAA,OAGrD,OAAM,CAAC,MAAoB,QAA0C;AAAA,IACzE,MAAM,SAAS,MAAM,KAAK,UAAU;AAAA,IACpC,OAAO,WAAW,QAAQ,cAAc,EAAE,KAAK,GAAG,MAAM;AAAA;AAAA,OAGpD,UAAS,GAAkB;AAAA,IAC/B,IAAI,KAAK,QAAQ;AAAA,MACf,KAAK,OAAO,UAAU;AAAA,MACtB,KAAK,SAAS;AAAA,MACd,KAAK,cAAc;AAAA,IACrB;AAAA;AAEJ;AAEO,SAAS,YAAY,CAC1B,OAAmB,QACnB,SACW;AAAA,EACX,MAAM,eAAe,kBAAkB,IAAI;AAAA,EAC3C,QAAQ,IAAI,+CAA+C,cAAc;AAAA,EACzE,IAAI,iBAAiB,UAAU;AAAA,IAC7B,OAAO,IAAI,gBAAgB,OAAO;AAAA,EACpC;AAAA,EACA,OAAO,IAAI;AAAA;;;ACnGb,IAAI,qBAA6D;AAiDjE,eAAsB,MAAM,CAC1B,OACA,QACqB;AAAA,EACrB,IAAI,CAAC,oBAAoB;AAAA,IACvB,qBAAqB,aAAa,MAAM;AAAA,EAC1C;AAAA,EAEA,OAAO,mBAAmB,OAAO,OAAO,MAAM;AAAA;AAUhD,eAAsB,MAAM,CAC1B,MACA,QACoB;AAAA,EACpB,IAAI,CAAC,oBAAoB;AAAA,IACvB,qBAAqB,aAAa,MAAM;AAAA,EAC1C;AAAA,EAEA,OAAO,mBAAmB,OAAO,MAAM,MAAM;AAAA;AAUxC,SAAS,gBAAgB,CAC9B,OAAmB,QACnB,SACmB;AAAA,EACnB,MAAM,SAAS,aAAa,MAAM,OAAO;AAAA,EAEzC,OAAO,OAAO,OACZ,CAAC,OAAmB,WAAyB;AAAA,IAC3C,OAAO,OAAO,OAAO,OAAO,MAAM;AAAA,KAEpC;AAAA,IACE,WAAW,YAAY;AAAA,MACrB,MAAM,OAAO,UAAU;AAAA;AAAA,EAE3B,CACF;AAAA;AAUK,SAAS,gBAAgB,CAC9B,OAAmB,QACnB,SACmB;AAAA,EACnB,MAAM,SAAS,aAAa,MAAM,OAAO;AAAA,EAEzC,OAAO,OAAO,OACZ,CAAC,MAAoB,WAAyB;AAAA,IAC5C,OAAO,OAAO,OAAO,MAAM,MAAM;AAAA,KAEnC;AAAA,IACE,WAAW,YAAY;AAAA,MACrB,MAAM,OAAO,UAAU;AAAA;AAAA,EAE3B,CACF;AAAA;",
18
+ "debugId": "F66BC8BDFC71153D64756E2164756E21",
18
19
  "names": []
19
20
  }
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @squoosh-kit/qoi public API
3
3
  */
4
- import type { ImageInput } from '@squoosh-kit/runtime';
4
+ import type { BridgeMode, ImageInput } from '@squoosh-kit/runtime';
5
5
  import { type BridgeOptions } from './bridge';
6
6
  export type { ImageInput };
7
7
  /**
@@ -59,7 +59,7 @@ export declare function decode(data: BufferSource, signal?: AbortSignal): Promis
59
59
  * @param options - Optional bridge options.
60
60
  * @returns A function that encodes an image to QOI format with optional AbortSignal.
61
61
  */
62
- export declare function createQoiEncoder(mode?: 'worker' | 'client', options?: BridgeOptions): QoiEncoderFactory;
62
+ export declare function createQoiEncoder(mode?: BridgeMode, options?: BridgeOptions): QoiEncoderFactory;
63
63
  /**
64
64
  * Creates a reusable QOI decoder function for a specific execution mode.
65
65
  *
@@ -67,5 +67,5 @@ export declare function createQoiEncoder(mode?: 'worker' | 'client', options?: B
67
67
  * @param options - Optional bridge options.
68
68
  * @returns A function that decodes QOI data to ImageData with optional AbortSignal.
69
69
  */
70
- export declare function createQoiDecoder(mode?: 'worker' | 'client', options?: BridgeOptions): QoiDecoderFactory;
70
+ export declare function createQoiDecoder(mode?: BridgeMode, options?: BridgeOptions): QoiDecoderFactory;
71
71
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAE5D,YAAY,EAAE,UAAU,EAAE,CAAC;AAK3B;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAC/B,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG;IAC1B;;;;;;;;;;;OAWG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAC/B,IAAI,EAAE,YAAY,EAClB,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG;IACzB;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAMrB;AAED;;;;;;GAMG;AACH,wBAAsB,MAAM,CAC1B,IAAI,EAAE,YAAY,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC,CAMpB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,GAAE,QAAQ,GAAG,QAAmB,EACpC,OAAO,CAAC,EAAE,aAAa,GACtB,iBAAiB,CAanB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,GAAE,QAAQ,GAAG,QAAmB,EACpC,OAAO,CAAC,EAAE,aAAa,GACtB,iBAAiB,CAanB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAE5D,YAAY,EAAE,UAAU,EAAE,CAAC;AAK3B;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAC/B,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG;IAC1B;;;;;;;;;;;OAWG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAC/B,IAAI,EAAE,YAAY,EAClB,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG;IACzB;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAMrB;AAED;;;;;;GAMG;AACH,wBAAsB,MAAM,CAC1B,IAAI,EAAE,YAAY,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC,CAMpB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,GAAE,UAAmB,EACzB,OAAO,CAAC,EAAE,aAAa,GACtB,iBAAiB,CAanB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,GAAE,UAAmB,EACzB,OAAO,CAAC,EAAE,aAAa,GACtB,iBAAiB,CAanB"}
@@ -38,10 +38,28 @@ var __export = (target, all) => {
38
38
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
39
39
 
40
40
  // ../runtime/src/env.ts
41
+ function isWorker() {
42
+ return typeof self !== "undefined" && typeof globalThis.DedicatedWorkerGlobalScope !== "undefined";
43
+ }
44
+ function isBrowser() {
45
+ return typeof window !== "undefined" && typeof document !== "undefined";
46
+ }
41
47
  function isBun() {
42
48
  return typeof Bun !== "undefined";
43
49
  }
44
50
 
51
+ // ../runtime/src/bridge-mode.ts
52
+ function resolveBridgeMode(mode = "auto") {
53
+ if (mode === "worker" || mode === "client") {
54
+ return mode;
55
+ }
56
+ if (isBrowser() && !isWorker()) {
57
+ return "worker";
58
+ }
59
+ return "client";
60
+ }
61
+ var init_bridge_mode = () => {};
62
+
45
63
  // ../runtime/src/worker-call.ts
46
64
  async function callWorker(worker, type, payload, signal, transfer) {
47
65
  return new Promise((resolve, reject) => {
@@ -88,6 +106,54 @@ async function callWorker(worker, type, payload, signal, transfer) {
88
106
  var requestId = 0;
89
107
 
90
108
  // ../runtime/src/worker-helper.ts
109
+ function scriptUrlToPath(scriptUrl) {
110
+ const href = typeof scriptUrl === "string" ? scriptUrl : scriptUrl.href;
111
+ if (href.startsWith("file://")) {
112
+ return decodeURIComponent(href.startsWith("file:///") ? href.slice(7) : href.slice(5));
113
+ }
114
+ return href;
115
+ }
116
+ function workerScriptExists(scriptUrl) {
117
+ if (typeof window !== "undefined") {
118
+ return false;
119
+ }
120
+ const path = scriptUrlToPath(scriptUrl);
121
+ if (typeof Bun !== "undefined") {
122
+ return Bun.spawnSync(["test", "-f", path], {
123
+ stdout: "ignore",
124
+ stderr: "ignore"
125
+ }).exitCode === 0;
126
+ }
127
+ try {
128
+ const existsSync = Function('return require("node:fs").existsSync')();
129
+ return existsSync(path);
130
+ } catch {
131
+ return false;
132
+ }
133
+ }
134
+ function resolveServerWorkerScript(workerConfig, normalizedName) {
135
+ const platformExt = isBun() ? "bun.js" : "node.mjs";
136
+ const baseName = normalizedName.replace(".js", "");
137
+ const pkgName = workerConfig.package.split("/")[1];
138
+ if (typeof import.meta.resolve === "function") {
139
+ try {
140
+ const resolved = import.meta.resolve(`${workerConfig.package}/${workerConfig.specifier}`);
141
+ if (workerScriptExists(resolved)) {
142
+ return resolved;
143
+ }
144
+ } catch {}
145
+ }
146
+ const candidates = [
147
+ new URL(`../../${pkgName}/dist/${baseName}.${platformExt}`, "file:///home/runner/work/squoosh-kit/squoosh-kit/packages/runtime/src/worker-helper.ts"),
148
+ new URL(`../../${pkgName}/src/${baseName}.ts`, "file:///home/runner/work/squoosh-kit/squoosh-kit/packages/runtime/src/worker-helper.ts")
149
+ ];
150
+ for (const candidate of candidates) {
151
+ if (workerScriptExists(candidate)) {
152
+ return candidate;
153
+ }
154
+ }
155
+ throw new Error(`Failed to resolve worker script for ${normalizedName}. ` + `Tried import.meta.resolve, dist output, and TypeScript source. ` + `Ensure ${workerConfig.package} is installed.`);
156
+ }
91
157
  function createCodecWorker(workerFilename, options) {
92
158
  const normalizedName = workerFilename.endsWith(".js") ? workerFilename : `${workerFilename}.js`;
93
159
  const workerMap = {
@@ -204,35 +270,8 @@ function createCodecWorker(workerFilename, options) {
204
270
  }
205
271
  throw new Error(`Could not resolve worker ${normalizedName} using any available path strategy`);
206
272
  }
207
- const platformExt = isBun() ? ".bun.js" : ".node.mjs";
208
- const baseName = normalizedName.replace(".js", "");
209
- const pkgName = workerConfig.package.split("/")[1];
210
- const srcRelPath = `../../${pkgName}/src/${baseName}.ts`;
211
- console.log("srcRelPath:", srcRelPath);
212
- console.log("import.meta.url:", "file:///home/runner/work/squoosh-kit/squoosh-kit/packages/runtime/src/worker-helper.ts");
213
- try {
214
- return new Worker(new URL(srcRelPath, "file:///home/runner/work/squoosh-kit/squoosh-kit/packages/runtime/src/worker-helper.ts"), {
215
- type: "module"
216
- });
217
- } catch {
218
- const distRelPath = `../../${pkgName}/dist/${baseName}.${platformExt.slice(1)}`;
219
- console.log("distRelPath:", distRelPath);
220
- console.log("import.meta.url:", "file:///home/runner/work/squoosh-kit/squoosh-kit/packages/runtime/src/worker-helper.ts");
221
- try {
222
- return new Worker(new URL(distRelPath, "file:///home/runner/work/squoosh-kit/squoosh-kit/packages/runtime/src/worker-helper.ts"), {
223
- type: "module"
224
- });
225
- } catch {
226
- if (typeof import.meta.resolve === "function") {
227
- try {
228
- const resolved = import.meta.resolve(`${workerConfig.package}/${workerConfig.specifier}`);
229
- console.log("resolved:", resolved);
230
- return new Worker(resolved, { type: "module" });
231
- } catch {}
232
- }
233
- }
234
- }
235
- throw new Error(`Failed to create worker from ${normalizedName}. ` + `Tried TypeScript source, dist output, and import.meta.resolve. ` + `Ensure the @squoosh-kit/resize and @squoosh-kit/webp packages are installed.`);
273
+ const workerScript = resolveServerWorkerScript(workerConfig, normalizedName);
274
+ return new Worker(workerScript, { type: "module" });
236
275
  } catch (error) {
237
276
  const errorMessage = error instanceof Error ? error.message : String(error);
238
277
  throw new Error(`Failed to create worker from ${normalizedName}: ${errorMessage}. ` + `Ensure the @squoosh-kit/resize and @squoosh-kit/webp packages are installed. ` + `If you're using Vite, ensure the worker files are not being optimized as dependencies.`, { cause: error });
@@ -360,6 +399,7 @@ function polyfillImageData() {
360
399
 
361
400
  // ../runtime/src/index.ts
362
401
  var init_src = __esm(() => {
402
+ init_bridge_mode();
363
403
  init_worker_helper();
364
404
  init_simd_detector();
365
405
  });
@@ -667,9 +707,10 @@ class QoiWorkerBridge {
667
707
  }
668
708
  }
669
709
  }
670
- function createBridge(mode, options) {
671
- console.log(`[qoi/bridge] createBridge called with mode: ${mode}`);
672
- if (mode === "worker") {
710
+ function createBridge(mode = "auto", options) {
711
+ const resolvedMode = resolveBridgeMode(mode);
712
+ console.log(`[qoi/bridge] createBridge called with mode: ${resolvedMode}`);
713
+ if (resolvedMode === "worker") {
673
714
  return new QoiWorkerBridge(options);
674
715
  }
675
716
  return new QoiClientBridge;
@@ -679,17 +720,17 @@ function createBridge(mode, options) {
679
720
  var globalClientBridge = null;
680
721
  async function encode(image, signal) {
681
722
  if (!globalClientBridge) {
682
- globalClientBridge = createBridge("worker");
723
+ globalClientBridge = createBridge("auto");
683
724
  }
684
725
  return globalClientBridge.encode(image, signal);
685
726
  }
686
727
  async function decode(data, signal) {
687
728
  if (!globalClientBridge) {
688
- globalClientBridge = createBridge("worker");
729
+ globalClientBridge = createBridge("auto");
689
730
  }
690
731
  return globalClientBridge.decode(data, signal);
691
732
  }
692
- function createQoiEncoder(mode = "worker", options) {
733
+ function createQoiEncoder(mode = "auto", options) {
693
734
  const bridge = createBridge(mode, options);
694
735
  return Object.assign((image, signal) => {
695
736
  return bridge.encode(image, signal);
@@ -699,7 +740,7 @@ function createQoiEncoder(mode = "worker", options) {
699
740
  }
700
741
  });
701
742
  }
702
- function createQoiDecoder(mode = "worker", options) {
743
+ function createQoiDecoder(mode = "auto", options) {
703
744
  const bridge = createBridge(mode, options);
704
745
  return Object.assign((data, signal) => {
705
746
  return bridge.decode(data, signal);
@@ -710,4 +751,4 @@ function createQoiDecoder(mode = "worker", options) {
710
751
  });
711
752
  }
712
753
 
713
- //# debugId=727824CB93F3C2DD64756E2164756E21
754
+ //# debugId=6E8B7A64B338854864756E2164756E21