{
  "version": 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/index.ts", "../src/rotate.worker.ts", "../src/bridge.ts", "../src/index.ts"],
  "sourcesContent": [
    "/**\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",
    "/**\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",
    "/**\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 type CreateWorkerOptions = {\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 browser environments, uses relative paths within node_modules that Vite can resolve.\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 browser contexts, use relative paths within the installed packages\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      // If a custom asset path is provided, use it directly\n      if (options?.assetPath) {\n        // Normalize the asset path - ensure it starts with / and ends without /\n        let normalizedAssetPath = options.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 provided 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",
    "/**\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",
    "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",
    "/**\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",
    "/**\n * Rotate processor - raw WASM instantiation (no JS glue)\n */\n\nimport { loadWasmBinary } from '@squoosh-kit/runtime';\nimport type {\n  WorkerRequest,\n  WorkerResponse,\n  ImageInput,\n} from '@squoosh-kit/runtime';\nimport type { RotateOptions } from './types';\n\nlet wasmInstance: WebAssembly.Instance | null = null;\nlet initPromise: Promise<void> | null = null;\n\nasync function initRotate(): Promise<void> {\n  if (wasmInstance) return;\n  if (initPromise) return initPromise;\n\n  initPromise = (async () => {\n    try {\n      const workerBaseUrl = new URL('.', import.meta.url);\n      const isSource = import.meta.url.includes('/src/');\n      const wasmPaths = isSource\n        ? ['../wasm/rotate/rotate.wasm', './wasm/rotate/rotate.wasm']\n        : ['./wasm/rotate/rotate.wasm', '../wasm/rotate/rotate.wasm'];\n\n      let wasmBuffer: ArrayBuffer | null = null;\n      let lastError: Error | null = null;\n      for (const path of wasmPaths) {\n        try {\n          wasmBuffer = await loadWasmBinary(path, workerBaseUrl);\n          break;\n        } catch (error) {\n          lastError = error instanceof Error ? error : new Error(String(error));\n        }\n      }\n      if (!wasmBuffer) {\n        throw lastError || new Error('Could not load rotate WASM');\n      }\n\n      const { instance } = await WebAssembly.instantiate(wasmBuffer);\n      wasmInstance = instance;\n      initPromise = null;\n    } catch (error) {\n      initPromise = null;\n      throw new Error(\n        `Failed to initialize rotate WASM module: ${error instanceof Error ? error.message : String(error)}`,\n        { cause: error }\n      );\n    }\n  })();\n\n  return initPromise;\n}\n\nexport async function rotateClient(\n  image: ImageInput,\n  options?: RotateOptions,\n  signal?: AbortSignal\n): Promise<ImageInput> {\n  if (signal?.aborted) {\n    throw new DOMException('Aborted', 'AbortError');\n  }\n\n  await initRotate();\n\n  if (signal?.aborted) {\n    throw new DOMException('Aborted', 'AbortError');\n  }\n\n  if (!wasmInstance) {\n    throw new Error('Rotate module not initialized');\n  }\n\n  const degrees = options?.rotate ?? 0;\n  const { data, width, height } = image;\n  const n = width * height;\n\n  // Calculate output dimensions\n  const outW = degrees === 90 || degrees === 270 ? height : width;\n  const outH = degrees === 90 || degrees === 270 ? width : height;\n\n  const memory = wasmInstance.exports.memory as WebAssembly.Memory;\n  const rotate = wasmInstance.exports.rotate as (\n    width: number,\n    height: number,\n    degrees: number\n  ) => void;\n\n  // Ensure enough memory: need n*4*2 bytes (input + output) + some buffer\n  const needed = n * 4 * 2 + 65536;\n  while (memory.buffer.byteLength < needed) {\n    memory.grow(1);\n  }\n\n  // Write input pixels at offset 0\n  const uint32Input = new Uint32Array(\n    data instanceof Uint8ClampedArray\n      ? (data.buffer as ArrayBuffer)\n      : (data.buffer as ArrayBuffer),\n    data.byteOffset,\n    n\n  );\n  new Uint32Array(memory.buffer).set(uint32Input, 0);\n\n  // Execute rotation\n  rotate(width, height, degrees);\n\n  // Read output starting at offset n*4 (bytes)\n  const outputData = new Uint8ClampedArray(\n    memory.buffer.slice(n * 4, n * 4 + outW * outH * 4)\n  );\n\n  return { data: outputData, width: outW, height: outH };\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    // Handle worker ping for initialization\n    if (data?.type === 'worker:ping') {\n      self.postMessage({ type: 'worker:ready' });\n      return;\n    }\n\n    const request = data as WorkerRequest<{\n      image: ImageInput;\n      options?: RotateOptions;\n    }>;\n    const response: WorkerResponse<ImageInput> = { id: request.id, ok: false };\n\n    try {\n      if (request.type === 'rotate:run') {\n        const result = await rotateClient(\n          request.payload.image,\n          request.payload.options\n        );\n        response.ok = true;\n        response.data = result;\n        self.postMessage(response);\n      } else {\n        response.error = `Unknown message type: ${request.type}`;\n        self.postMessage(response);\n      }\n    } catch (error) {\n      response.error = error instanceof Error ? error.message : String(error);\n      self.postMessage(response);\n    }\n  };\n}\n",
    "/**\n * Bridge implementation for the rotate package, handling worker and client modes.\n */\n\nimport {\n  callWorker,\n  createReadyWorker,\n  type ImageInput,\n  validateImageInput,\n} from '@squoosh-kit/runtime';\nimport type { RotateOptions } from './types';\n\nexport type BridgeOptions = {\n  assetPath?: string;\n};\n\ninterface RotateBridge {\n  rotate(\n    image: ImageInput,\n    options?: RotateOptions,\n    signal?: AbortSignal\n  ): Promise<ImageInput>;\n  terminate(): Promise<void>;\n}\n\nclass RotateClientBridge implements RotateBridge {\n  async rotate(\n    image: ImageInput,\n    options?: RotateOptions,\n    signal?: AbortSignal\n  ): Promise<ImageInput> {\n    const module = await import('./rotate.worker.js');\n    const rotateClient = module.rotateClient as (\n      image: ImageInput,\n      options?: RotateOptions,\n      signal?: AbortSignal\n    ) => Promise<ImageInput>;\n    return rotateClient(image, options, signal);\n  }\n\n  async terminate(): Promise<void> {\n    // Client mode has nothing to terminate\n  }\n}\n\nclass RotateWorkerBridge implements RotateBridge {\n  private worker: Worker | null = null;\n  private workerReady: Promise<Worker> | null = null;\n  private options?: BridgeOptions;\n\n  constructor(options?: BridgeOptions) {\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    this.worker = await createReadyWorker('rotate.worker.js', this.options);\n    return this.worker;\n  }\n\n  async rotate(\n    image: ImageInput,\n    options?: RotateOptions,\n    signal?: AbortSignal\n  ): Promise<ImageInput> {\n    const worker = await this.getWorker();\n    validateImageInput(image);\n    return callWorker(worker, 'rotate:run', { image, options }, 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): RotateBridge {\n  if (mode === 'worker') {\n    return new RotateWorkerBridge(options);\n  }\n  return new RotateClientBridge();\n}\n",
    "/**\n * @squoosh-kit/rotate public API\n */\n\nimport type { ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge, type BridgeOptions } from './bridge';\nimport type { RotateOptions } from './types';\n\nexport type { ImageInput, RotateOptions };\n\n// Global bridge instance for reuse\nlet globalBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A reusable image rotator function.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type RotatorFactory = ((\n  image: ImageInput,\n  options?: RotateOptions,\n  signal?: AbortSignal\n) => Promise<ImageInput>) & {\n  /**\n   * Terminates the rotator and cleans up resources.\n   * Important for worker mode to prevent memory leaks.\n   *\n   * @example\n   * const rotator = createRotator('worker');\n   * try {\n   *   const result = await rotator(image, { rotate: 90 });\n   * } finally {\n   *   await rotator.terminate();\n   * }\n   */\n  terminate(): Promise<void>;\n};\n\n/**\n * Rotates an image by the given number of degrees. Uses worker mode for UI responsiveness.\n *\n * @param image - The image data to rotate.\n * @param options - Rotate options (rotate: 0, 90, 180, or 270).\n * @param signal - (Optional) AbortSignal to cancel the operation.\n * @returns A Promise resolving to the rotated image.\n *\n * @example\n * const result = await rotate(image, { rotate: 90 });\n */\nexport async function rotate(\n  image: ImageInput,\n  options?: RotateOptions,\n  signal?: AbortSignal\n): Promise<ImageInput> {\n  if (!globalBridge) {\n    globalBridge = createBridge('worker');\n  }\n  return globalBridge.rotate(image, options, signal);\n}\n\n/**\n * Creates a reusable image rotator 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 rotates images with optional AbortSignal.\n *\n * @example\n * const rotator = createRotator('client');\n * const result = await rotator(image, { rotate: 180 });\n * await rotator.terminate();\n */\nexport function createRotator(\n  mode: 'worker' | 'client' = 'worker',\n  options?: BridgeOptions\n): RotatorFactory {\n  const bridge = createBridge(mode, options);\n\n  return Object.assign(\n    (image: ImageInput, opts?: RotateOptions, signal?: AbortSignal) => {\n      return bridge.rotate(image, opts, signal);\n    },\n    {\n      terminate: async () => {\n        await bridge.terminate();\n      },\n    }\n  );\n}\n"
  ],
  "mappings": "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",
  "debugId": "5ADCA9486AA3154564756E2164756E21",
  "names": []
}