{"version":3,"sources":["../lib/stable/index.ts","../node_modules/.pnpm/tsup@8.5.1_postcss@8.5.26_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","../lib/stable/errors.ts","../lib/stable/lifecycle.ts","../lib/stable/mirror.ts","../lib/stable/native.ts","../lib/stable/workflows.ts"],"sourcesContent":["import { EventEmitter } from \"node:events\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { Worker } from \"node:worker_threads\";\nimport sharp from \"sharp\";\n\nimport { LibRawError, normalizeError } from \"./errors\";\nimport {\n  abortError,\n  restoreBuffers,\n  stateAfterFailure,\n  stateAfterOperation,\n  stateAfterThumbnail,\n} from \"./lifecycle\";\nimport { installForwardedOperations } from \"./mirror\";\nimport { findPackageRoot, loadNativeAddon } from \"./native\";\nimport type {\n  BayerDescriptor,\n  DataErrorEvent,\n  DecoderInfo,\n  EncodedImageResult,\n  ExifTagEvent,\n  LibRawImageDataSnapshot,\n  LibRawOptions,\n  JPEGUsage,\n  MakerNoteEvent,\n  MemoryImageFormat,\n  OperationOptions,\n  OptimalJPEGSettings,\n  ProcessedImage,\n  ProcessorState,\n  ProgressEvent,\n} from \"./types\";\nimport {\n  createPpmResult,\n  optimalJpegSettings,\n  sharpInput,\n  type RenderOptions,\n} from \"./workflows\";\n\nexport * from \"./errors\";\nexport type * from \"./types\";\n\ninterface WorkerResponse {\n  id?: number;\n  event?: { name: string; [key: string]: unknown };\n  result?: unknown;\n  error?: Error & { code?: string; librawCode?: number };\n}\n\ninterface PendingRequest {\n  resolve(value: unknown): void;\n  reject(error: unknown): void;\n}\n\nexport class LibRaw extends EventEmitter {\n  readonly flags: number;\n  private readonly worker: Worker;\n  private readonly cancellationBuffer = new SharedArrayBuffer(4);\n  private readonly cancellation: Int32Array;\n  private readonly pending = new Map<number, PendingRequest>();\n  private nextRequestId = 1;\n  private tail: Promise<void> = Promise.resolve();\n  private closePromise?: Promise<void>;\n  private closeRequested = false;\n  private workerFailure?: Error;\n  private _state: ProcessorState = \"idle\";\n\n  constructor(options: LibRawOptions = {}) {\n    super();\n    this.flags = options.flags ?? 0;\n    this.cancellation = new Int32Array(this.cancellationBuffer);\n    this.worker = new Worker(\n      path.join(findPackageRoot(), \"dist\", \"processor-worker.cjs\"),\n      {\n        workerData: {\n          flags: this.flags,\n          cancellationBuffer: this.cancellationBuffer,\n        },\n      },\n    );\n    this.worker.on(\"message\", (message: WorkerResponse) => {\n      if (message.event) {\n        const { name, ...event } = message.event;\n        this.emit(name, event);\n        return;\n      }\n      if (message.id === undefined) return;\n      const pending = this.pending.get(message.id);\n      if (!pending) return;\n      this.pending.delete(message.id);\n      if (message.error) pending.reject(message.error);\n      else pending.resolve(restoreBuffers(message.result));\n    });\n    const failWorker = (error: Error) => {\n      this.workerFailure ??= error;\n      for (const pending of this.pending.values()) pending.reject(error);\n      this.pending.clear();\n      if (this._state !== \"closing\" && this._state !== \"closed\") {\n        this._state = \"error\";\n      }\n    };\n    this.worker.on(\"error\", failWorker);\n    this.worker.on(\"exit\", (code) => {\n      if (this._state !== \"closing\" && this._state !== \"closed\") {\n        failWorker(new Error(`LibRaw processor worker exited with code ${code}`));\n      }\n    });\n  }\n\n  get state(): ProcessorState {\n    return this._state;\n  }\n\n  private request(method: string, args: unknown[]): Promise<unknown> {\n    if (this.workerFailure) return Promise.reject(this.workerFailure);\n    const id = this.nextRequestId++;\n    return new Promise((resolve, reject) => {\n      this.pending.set(id, { resolve, reject });\n      try {\n        this.worker.postMessage({ id, method, args });\n      } catch (error) {\n        this.pending.delete(id);\n        reject(error);\n      }\n    });\n  }\n\n  private enqueue<T>(\n    operation: string,\n    args: unknown[] = [],\n    options: OperationOptions = {},\n    nativeOperation = operation,\n  ): Promise<T> {\n    if (this.closeRequested || this._state === \"closing\" || this._state === \"closed\") {\n      return Promise.reject(\n        new LibRawError(\"LibRaw instance is closed\", {\n          code: \"INSTANCE_CLOSED\",\n          operation,\n          state: \"closed\",\n        }),\n      );\n    }\n    if (options.signal?.aborted) {\n      return Promise.reject(\n        abortError(operation, this._state, options.signal.reason),\n      );\n    }\n\n    const queuedState = this._state;\n    const run = this.tail.then(async () => {\n      if (options.signal?.aborted) {\n        throw abortError(operation, queuedState, options.signal.reason);\n      }\n      const before = this._state;\n      Atomics.store(this.cancellation, 0, 0);\n      if (nativeOperation.startsWith(\"open\") || nativeOperation.startsWith(\"load\")) {\n        this._state = \"opening\";\n      }\n      let aborted = false;\n      const onAbort = () => {\n        aborted = true;\n        Atomics.store(this.cancellation, 0, 1);\n      };\n      options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n      try {\n        const value = await this.request(nativeOperation, args);\n        if (aborted) throw abortError(operation, before, options.signal?.reason);\n        if (!this.closeRequested) {\n          if (nativeOperation === \"processRawThumbnailNative\") {\n            this._state = stateAfterThumbnail(value);\n          } else if (\n            nativeOperation === \"freeImage\" ||\n            nativeOperation === \"setOutputParams\"\n          ) {\n            this._state = before === \"processed\" ? \"unpacked\" : before;\n          } else {\n            this._state = stateAfterOperation[nativeOperation] ?? this._state;\n          }\n        }\n        return value as T;\n      } catch (error) {\n        if (aborted) throw abortError(operation, before, options.signal?.reason);\n        if (!this.closeRequested) {\n          this._state = stateAfterFailure[nativeOperation] ?? before;\n        }\n        throw normalizeError(error, operation, before);\n      } finally {\n        options.signal?.removeEventListener(\"abort\", onAbort);\n      }\n    });\n    this.tail = run.then(\n      () => undefined,\n      () => undefined,\n    );\n    return run;\n  }\n\n  openFile(file: string, options?: OperationOptions): Promise<void> {\n    return this.enqueue(\"openFile\", [file], options).then(() => undefined);\n  }\n\n  openBuffer(input: Uint8Array, options?: OperationOptions): Promise<void> {\n    return this.enqueue(\"openBuffer\", [Buffer.from(input)], options).then(\n      () => undefined,\n    );\n  }\n\n  openBayer(\n    input: Uint8Array,\n    descriptor: BayerDescriptor,\n    options?: OperationOptions,\n  ): Promise<void> {\n    return this.enqueue(\n      \"openBayer\",\n      [Buffer.from(input), descriptor],\n      options,\n    ).then(() => undefined);\n  }\n\n  loadFile(file: string, options?: OperationOptions): Promise<void> {\n    return this.enqueue(\"loadFile\", [file], options).then(() => undefined);\n  }\n\n  loadBuffer(input: Uint8Array, options?: OperationOptions): Promise<void> {\n    return this.enqueue(\"loadBuffer\", [Buffer.from(input)], options).then(\n      () => undefined,\n    );\n  }\n\n  loadBayerData(\n    file: string,\n    descriptor: BayerDescriptor,\n    options?: OperationOptions,\n  ): Promise<void> {\n    return this.enqueue(\"loadBayerData\", [file, descriptor], options).then(\n      () => undefined,\n    );\n  }\n\n  recycle(options?: OperationOptions): Promise<void> {\n    return this.enqueue(\"recycle\", [], options).then(() => undefined);\n  }\n\n  async close(): Promise<void> {\n    if (this._state === \"closed\") return;\n    if (this.closePromise) return this.closePromise;\n    this.closeRequested = true;\n    this._state = \"closing\";\n    this.closePromise = this.tail\n      .then(() =>\n        this.workerFailure ? undefined : this.request(\"close\", []),\n      )\n      .then(() => undefined)\n      .finally(async () => {\n        await this.worker.terminate();\n        this._state = \"closed\";\n      });\n    return this.closePromise;\n  }\n\n  getImgData(options?: OperationOptions): Promise<LibRawImageDataSnapshot> {\n    return this.enqueue(\"getImgData\", [], options);\n  }\n\n  unpack(options?: OperationOptions): Promise<void> {\n    return this.enqueue(\"unpack\", [], options).then(() => undefined);\n  }\n\n  unpackThumb(options?: OperationOptions): Promise<void> {\n    return this.enqueue(\"unpackThumb\", [], options).then(() => undefined);\n  }\n\n  unpackThumbEx(index: number, options?: OperationOptions): Promise<void> {\n    return this.enqueue(\"unpackThumbEx\", [index], options).then(() => undefined);\n  }\n\n  dcrawProcess(options?: OperationOptions): Promise<void> {\n    return this.enqueue(\"dcrawProcess\", [], options).then(() => undefined);\n  }\n\n  processImage(options?: OperationOptions): Promise<void> {\n    return this.enqueue(\"processImage\", [], options).then(() => undefined);\n  }\n\n  dcrawMakeMemImage(options?: OperationOptions): Promise<ProcessedImage> {\n    return this.enqueue(\"dcrawMakeMemImage\", [], options);\n  }\n\n  dcrawMakeMemThumb(options?: OperationOptions): Promise<ProcessedImage> {\n    return this.enqueue(\"dcrawMakeMemThumb\", [], options);\n  }\n\n  createMemoryImage(options?: OperationOptions): Promise<ProcessedImage> {\n    return this.dcrawMakeMemImage(options);\n  }\n\n  createMemoryThumbnail(options?: OperationOptions): Promise<ProcessedImage> {\n    return this.dcrawMakeMemThumb(options);\n  }\n\n  setCancelFlag(): void {\n    Atomics.store(this.cancellation, 0, 1);\n  }\n\n  clearCancelFlag(): void {\n    Atomics.store(this.cancellation, 0, 0);\n  }\n\n  async copyMemImage(\n    destination: Buffer,\n    stride: number,\n    bgr = false,\n    options?: OperationOptions,\n  ): Promise<void> {\n    const copy = await this.enqueue<Buffer>(\n      \"copyMemImage\",\n      [destination.length, stride, bgr],\n      options,\n      \"copyMemImageOwned\",\n    );\n    copy.copy(destination);\n  }\n\n  private async runWorkflow<T>(\n    operation: string,\n    work: () => T | Promise<T>,\n  ): Promise<T> {\n    try {\n      return await work();\n    } catch (error) {\n      throw normalizeError(error, operation, this._state);\n    }\n  }\n\n  private async render(\n    format: Exclude<EncodedImageResult[\"format\"], \"ppm\">,\n    options: RenderOptions = {},\n    source: EncodedImageResult[\"source\"] = \"processed\",\n    operation = `create${format.toUpperCase()}Buffer`,\n  ): Promise<EncodedImageResult> {\n    const started = performance.now();\n    const image =\n      source === \"embedded-thumbnail\"\n        ? await this.enqueue<ProcessedImage>(\n            operation,\n            [],\n            options,\n            \"renderThumbnail\",\n          )\n        : await this.enqueue<ProcessedImage>(\n            operation,\n            [],\n            options,\n            \"renderProcessedImage\",\n          );\n    return this.runWorkflow(operation, () =>\n      this.encodeImage(image, format, options, source, started),\n    );\n  }\n\n  private async encodeImage(\n    image: ProcessedImage,\n    format: Exclude<EncodedImageResult[\"format\"], \"ppm\">,\n    options: RenderOptions,\n    source: EncodedImageResult[\"source\"],\n    started = performance.now(),\n  ): Promise<EncodedImageResult> {\n    const sharpData = sharpInput(\n      image,\n      `create${format.toUpperCase()}Buffer`,\n      this._state,\n    );\n    let pipeline =\n      image.type === 1\n        ? sharp(sharpData)\n        : sharp(sharpData, {\n            raw: {\n              width: image.width,\n              height: image.height,\n              channels: image.colors as 1 | 2 | 3 | 4,\n            },\n          });\n    if (options.width || options.height) {\n      pipeline = pipeline.resize(options.width, options.height, { fit: \"inside\" });\n    }\n    if (format === \"jpeg\") {\n      pipeline = pipeline.jpeg({\n        quality: options.quality,\n        progressive: options.progressive,\n        mozjpeg: options.mozjpeg,\n        chromaSubsampling: options.chromaSubsampling,\n        optimizeCoding: options.optimizeCoding,\n        trellisQuantisation: options.trellisQuantisation,\n        optimizeScans: options.optimizeScans,\n      });\n    }\n    if (format === \"png\") {\n      pipeline = pipeline.png({ compressionLevel: options.compressionLevel });\n    }\n    if (format === \"tiff\") pipeline = pipeline.tiff();\n    if (format === \"webp\") pipeline = pipeline.webp({ quality: options.quality });\n    if (format === \"avif\") {\n      pipeline = pipeline.avif({ quality: options.quality, effort: options.effort });\n    }\n    const { data, info } = await pipeline.toBuffer({ resolveWithObject: true });\n    return {\n      data,\n      format,\n      width: info.width,\n      height: info.height,\n      channels: info.channels,\n      size: data.length,\n      processingTimeMs: performance.now() - started,\n      source,\n    };\n  }\n\n  createJPEGBuffer(options?: RenderOptions): Promise<EncodedImageResult> {\n    return this.render(\"jpeg\", options, \"processed\", \"createJPEGBuffer\");\n  }\n  createPNGBuffer(options?: RenderOptions): Promise<EncodedImageResult> {\n    return this.render(\"png\", options, \"processed\", \"createPNGBuffer\");\n  }\n  createTIFFBuffer(options?: RenderOptions): Promise<EncodedImageResult> {\n    return this.render(\"tiff\", options, \"processed\", \"createTIFFBuffer\");\n  }\n  createWebPBuffer(options?: RenderOptions): Promise<EncodedImageResult> {\n    return this.render(\"webp\", options, \"processed\", \"createWebPBuffer\");\n  }\n  createAVIFBuffer(options?: RenderOptions): Promise<EncodedImageResult> {\n    return this.render(\"avif\", options, \"processed\", \"createAVIFBuffer\");\n  }\n  createThumbnailJPEGBuffer(options?: RenderOptions): Promise<EncodedImageResult> {\n    return this.render(\n      \"jpeg\",\n      options,\n      \"embedded-thumbnail\",\n      \"createThumbnailJPEGBuffer\",\n    );\n  }\n\n  async createPPMBuffer(options: OperationOptions = {}): Promise<EncodedImageResult> {\n    const started = performance.now();\n    const image = await this.enqueue<ProcessedImage>(\n      \"createPPMBuffer\",\n      [],\n      options,\n      \"renderProcessedImage\",\n    );\n    return this.runWorkflow(\"createPPMBuffer\", () =>\n      createPpmResult(image, started, this._state),\n    );\n  }\n\n  async convertToJPEG(\n    outputPath: string,\n    options: RenderOptions = {},\n  ): Promise<EncodedImageResult> {\n    return this.writeJPEG(\"convertToJPEG\", outputPath, options);\n  }\n\n  convertToJPEGFast(\n    outputPath: string,\n    options: RenderOptions = {},\n  ): Promise<EncodedImageResult> {\n    return this.writeJPEG(\"convertToJPEGFast\", outputPath, {\n      quality: 80,\n      effort: 1,\n      ...options,\n    });\n  }\n\n  private async writeJPEG(\n    operation: string,\n    outputPath: string,\n    options: RenderOptions,\n  ): Promise<EncodedImageResult> {\n    const result = await this.render(\"jpeg\", options, \"processed\", operation);\n    return this.runWorkflow(operation, async () => {\n      await writeFile(outputPath, result.data);\n      return result;\n    });\n  }\n\n  async convertToJPEGMultiSize(\n    baseOutputPath: string,\n    options: RenderOptions & {\n      sizes?: Array<RenderOptions & { name: string }>;\n    } = {},\n  ): Promise<Record<string, EncodedImageResult>> {\n    const sizes = options.sizes ?? [\n      { name: \"thumb\", width: 400, quality: 85 },\n      { name: \"web\", width: 1920, quality: 80 },\n      { name: \"full\", quality: 85 },\n    ];\n    const image = await this.enqueue<ProcessedImage>(\n      \"convertToJPEGMultiSize\",\n      [],\n      options,\n      \"renderProcessedImage\",\n    );\n    return this.runWorkflow(\"convertToJPEGMultiSize\", async () => {\n      const result: Record<string, EncodedImageResult> = {};\n      for (const size of sizes) {\n        const { name, ...renderOptions } = size;\n        const encoded = await this.encodeImage(\n          image,\n          \"jpeg\",\n          { ...options, ...renderOptions } as RenderOptions,\n          \"processed\",\n        );\n        await writeFile(`${baseOutputPath}_${name}.jpg`, encoded.data);\n        result[name] = encoded;\n      }\n      return result;\n    });\n  }\n\n  batchConvertToJPEG(\n    inputPaths: string[],\n    outputDirectory: string,\n    options: RenderOptions & { maxConcurrency?: number } = {},\n  ): Promise<EncodedImageResult[]> {\n    return LibRaw.batchConvertToJPEGParallel(\n      inputPaths,\n      outputDirectory,\n      options,\n    );\n  }\n\n  async processRawThumbnail(options: {\n    filePath: string;\n    format: \"jpeg\" | \"png\" | \"webp\";\n    maxSize: number;\n    quality?: number;\n    compressionLevel?: number;\n    tryEmbedded?: boolean;\n    signal?: AbortSignal;\n  }): Promise<EncodedImageResult> {\n    const started = performance.now();\n    const native = await this.enqueue<{\n      image: ProcessedImage;\n      source: EncodedImageResult[\"source\"];\n    }>(\n      \"processRawThumbnail\",\n      [{\n        filePath: options.filePath,\n        format: options.format,\n        tryEmbedded: options.tryEmbedded !== false,\n      }],\n      options,\n      \"processRawThumbnailNative\",\n    );\n    const renderOptions = {\n      width: options.maxSize,\n      quality: options.quality,\n      compressionLevel: options.compressionLevel,\n      signal: options.signal,\n    };\n    return this.runWorkflow(\"processRawThumbnail\", () =>\n      this.encodeImage(\n        native.image,\n        options.format,\n        renderOptions,\n        native.source,\n        started,\n      ),\n    );\n  }\n\n  async getOptimalJPEGSettings(\n    options: { usage?: JPEGUsage } = {},\n  ): Promise<OptimalJPEGSettings> {\n    const metadata = await this.getMetadata();\n    return optimalJpegSettings(metadata, options.usage);\n  }\n\n  static async batchConvertToJPEGParallel(\n    inputPaths: string[],\n    outputDirectory: string,\n    options: RenderOptions & { maxConcurrency?: number } = {},\n  ): Promise<EncodedImageResult[]> {\n    try {\n      await mkdir(outputDirectory, { recursive: true });\n      const concurrency = Math.max(\n        1,\n        Math.min(\n          options.maxConcurrency ?? Math.min(os.cpus().length, 4),\n          inputPaths.length || 1,\n        ),\n      );\n      const results = new Array<EncodedImageResult>(inputPaths.length);\n      let nextIndex = 0;\n      await Promise.all(\n        Array.from({ length: concurrency }, async () => {\n          for (;;) {\n            const index = nextIndex++;\n            if (index >= inputPaths.length) return;\n            const input = inputPaths[index]!;\n            const processor = new LibRaw();\n            try {\n              await processor.loadFile(input, options);\n              const filename = path.basename(input, path.extname(input));\n              results[index] = await processor.convertToJPEG(\n                path.join(outputDirectory, `${filename}.jpg`),\n                options,\n              );\n            } finally {\n              await processor.close();\n            }\n          }\n        }),\n      );\n      return results;\n    } catch (error) {\n      throw normalizeError(error, \"batchConvertToJPEGParallel\", \"idle\");\n    }\n  }\n\n  static version(): string {\n    return loadNativeAddon().LibRawWrapper.getVersion().replace(/-.*$/, \"\");\n  }\n  static versionNumber(): number {\n    const [major = 0, minor = 0, patch = 0] = this.version()\n      .split(\".\")\n      .map(Number);\n    return (major << 16) | (minor << 8) | patch;\n  }\n  static capabilities(): number {\n    return loadNativeAddon().LibRawWrapper.getCapabilities();\n  }\n  static cameraList(): readonly string[] {\n    return Object.freeze([...loadNativeAddon().LibRawWrapper.getCameraList()]);\n  }\n  static cameraCount(): number {\n    return loadNativeAddon().LibRawWrapper.getCameraCount();\n  }\n  static strError(code: number): string {\n    const wrapper = new (loadNativeAddon().LibRawWrapper)();\n    try {\n      const strerror = wrapper.strerror;\n      if (!strerror) return `LibRaw error ${code}`;\n      return String(strerror.call(wrapper, code));\n    } finally {\n      wrapper.close();\n    }\n  }\n  static strProgress(progress: number): string {\n    return loadNativeAddon().LibRawWrapper.strProgress(progress);\n  }\n  static cameraMakerIndexToMaker(index: number): string | null {\n    return loadNativeAddon().LibRawWrapper.cameraMakerIndexToMaker(index);\n  }\n  static simplifyMakeModel(\n    makerIndex: number,\n    make: string,\n    model: string,\n  ): { makerIndex: number; make: string; model: string } {\n    const result = loadNativeAddon().LibRawWrapper.simplifyMakeModel(\n      makerIndex,\n      make,\n      model,\n    ) as { makerIndex: number; make: string; model: string };\n    return result;\n  }\n  static powfLimited(base: number, exponent: number, limit: number): number {\n    return exponent > limit || exponent < -limit\n      ? 0\n      : Math.pow(base, exponent);\n  }\n  static powf64Limited(base: number, exponent: number): number {\n    return this.powfLimited(base, exponent, 64);\n  }\n  static readBigEndianUnsigned(length: number, input: Uint8Array): number {\n    if (length < 0 || length > 4 || input.length < length) {\n      throw new RangeError(\"length must be between 0 and 4 and fit input\");\n    }\n    let result = 0;\n    for (let index = 0; index < length; index++) {\n      result = result * 256 + input[index]!;\n    }\n    return result >>> 0;\n  }\n\n  version(): string {\n    return LibRaw.version();\n  }\n  versionNumber(): number {\n    return LibRaw.versionNumber();\n  }\n  static getVersion(): string {\n    return this.version();\n  }\n  static getCapabilities(): number {\n    return this.capabilities();\n  }\n  static getCameraList(): readonly string[] {\n    return this.cameraList();\n  }\n  static getCameraCount(): number {\n    return this.cameraCount();\n  }\n}\n\ninstallForwardedOperations(LibRaw.prototype);\n\nexport interface LibRaw {\n  on(event: \"progress\", listener: (event: ProgressEvent) => void): this;\n  on(event: \"dataError\", listener: (event: DataErrorEvent) => void): this;\n  on(event: \"exifTag\", listener: (event: ExifTagEvent) => void): this;\n  on(event: \"makerNote\", listener: (event: MakerNoteEvent) => void): this;\n  on(event: string | symbol, listener: (...args: any[]) => void): this;\n  errorCount(options?: OperationOptions): Promise<number>;\n  recycleDatastream(options?: OperationOptions): Promise<void>;\n  subtractBlack(options?: OperationOptions): Promise<void>;\n  subtractBlackInternal(options?: OperationOptions): Promise<void>;\n  raw2Image(options?: OperationOptions): Promise<void>;\n  raw2ImageEx(subtractBlack?: boolean, options?: OperationOptions): Promise<void>;\n  raw2ImageStart(options?: OperationOptions): Promise<void>;\n  freeImage(options?: OperationOptions): Promise<void>;\n  adjustMaximum(options?: OperationOptions): Promise<void>;\n  adjustSizesInfoOnly(options?: OperationOptions): Promise<void>;\n  adjustToRawInsetCrop(mask: number, maxCrop?: number, options?: OperationOptions): Promise<void>;\n  setMakeFromIndex(index: number, options?: OperationOptions): Promise<void>;\n  convertFloatToInt(min?: number, max?: number, target?: number, options?: OperationOptions): Promise<void>;\n  dcrawPpmTiffWriter(file: string, options?: OperationOptions): Promise<void>;\n  dcrawThumbWriter(file: string, options?: OperationOptions): Promise<void>;\n  getMemImageFormat(options?: OperationOptions): Promise<MemoryImageFormat>;\n  copyMemImage(destination: Buffer, stride: number, bgr?: boolean, options?: OperationOptions): Promise<void>;\n  colorAt(row: number, column: number, options?: OperationOptions): Promise<number>;\n  filterColorAt(row: number, column: number, options?: OperationOptions): Promise<number>;\n  fcol(row: number, column: number, options?: OperationOptions): Promise<number>;\n  unpackFunctionName(options?: OperationOptions): Promise<string>;\n  getDecoderInfo(options?: OperationOptions): Promise<DecoderInfo>;\n  phaseOneSubtractBlack(source: Buffer, options?: OperationOptions): Promise<Buffer>;\n  phaseOneCorrect(options?: OperationOptions): Promise<void>;\n  adobeCoeff(makerIndex: number, model: string, internalOnly?: boolean, options?: OperationOptions): Promise<void>;\n  thumbOk(maxSize?: number, options?: OperationOptions): Promise<number>;\n  isFujiRotated(options?: OperationOptions): Promise<boolean>;\n  isSraw(options?: OperationOptions): Promise<boolean>;\n  srawMidpoint(options?: OperationOptions): Promise<number>;\n  isNikonSraw(options?: OperationOptions): Promise<boolean>;\n  isCoolscanNef(options?: OperationOptions): Promise<boolean>;\n  isJpegThumb(options?: OperationOptions): Promise<boolean>;\n  isFloatingPoint(options?: OperationOptions): Promise<boolean>;\n  haveFpData(options?: OperationOptions): Promise<boolean>;\n  getMetadata(options?: OperationOptions): Promise<LibRawImageDataSnapshot[\"metadata\"]>;\n  getImageSize(options?: OperationOptions): Promise<LibRawImageDataSnapshot[\"sizes\"]>;\n  getAdvancedMetadata(options?: OperationOptions): Promise<LibRawImageDataSnapshot[\"advanced\"]>;\n  getLensInfo(options?: OperationOptions): Promise<LibRawImageDataSnapshot[\"lens\"]>;\n  getColorInfo(options?: OperationOptions): Promise<LibRawImageDataSnapshot[\"color\"]>;\n  setOutputParams(params: Partial<LibRawImageDataSnapshot[\"params\"]>, options?: OperationOptions): Promise<void>;\n  getOutputParams(options?: OperationOptions): Promise<LibRawImageDataSnapshot[\"params\"]>;\n  getLastError(options?: OperationOptions): Promise<unknown>;\n  strerror(code: number, options?: OperationOptions): Promise<string>;\n  writePPM(file: string, options?: OperationOptions): Promise<void>;\n  writeTIFF(file: string, options?: OperationOptions): Promise<void>;\n  writeThumbnail(file: string, options?: OperationOptions): Promise<void>;\n  getRawImageBuffer(options?: OperationOptions): Promise<Buffer>;\n}\n\nexport default LibRaw;\n","// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n  typeof document === \"undefined\" \n    ? new URL(`file:${__filename}`).href \n    : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n      ? document.currentScript.src \n      : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import type { ProcessorState } from \"./types\";\n\nexport interface LibRawErrorOptions {\n  code: string;\n  operation: string;\n  librawCode?: number | null;\n  state: ProcessorState;\n  cause?: unknown;\n}\n\nexport class LibRawError extends Error {\n  readonly code: string;\n  readonly operation: string;\n  readonly librawCode: number | null;\n  readonly state: ProcessorState;\n  override readonly cause: unknown;\n\n  constructor(message: string, options: LibRawErrorOptions) {\n    super(message, { cause: options.cause });\n    this.name = \"LibRawError\";\n    this.code = options.code;\n    this.operation = options.operation;\n    this.librawCode = options.librawCode ?? null;\n    this.state = options.state;\n    this.cause = options.cause;\n  }\n}\n\nexport function normalizeError(\n  error: unknown,\n  operation: string,\n  state: ProcessorState,\n): LibRawError {\n  if (error instanceof LibRawError) return error;\n  const candidate = error as {\n    message?: string;\n    code?: string;\n    librawCode?: number;\n    cause?: unknown;\n  };\n  return new LibRawError(candidate?.message ?? String(error), {\n    code: candidate?.code ?? \"LIBRAW_ERROR\",\n    operation,\n    librawCode: candidate?.librawCode ?? null,\n    state,\n    cause: candidate?.cause ?? error,\n  });\n}\n","import { LibRawError } from \"./errors\";\nimport type { EncodedImageResult, ProcessorState } from \"./types\";\n\nexport const stateAfterOperation: Partial<Record<string, ProcessorState>> = {\n  openFile: \"opened\",\n  openBuffer: \"opened\",\n  openBayer: \"opened\",\n  loadFile: \"unpacked\",\n  loadBuffer: \"unpacked\",\n  loadBayerData: \"unpacked\",\n  unpack: \"unpacked\",\n  dcrawProcess: \"processed\",\n  processImage: \"processed\",\n  renderProcessedImage: \"processed\",\n  recycle: \"idle\",\n};\n\nexport const stateAfterFailure: Partial<Record<string, ProcessorState>> = {\n  loadFile: \"idle\",\n  loadBuffer: \"idle\",\n  loadBayerData: \"idle\",\n  processRawThumbnailNative: \"idle\",\n};\n\nexport function stateAfterThumbnail(\n  value: unknown,\n): Extract<ProcessorState, \"unpacked\" | \"processed\"> {\n  const source = (value as { source?: EncodedImageResult[\"source\"] })?.source;\n  return source === \"embedded-thumbnail\" ? \"unpacked\" : \"processed\";\n}\n\nexport function restoreBuffers(value: unknown): unknown {\n  if (value instanceof Uint8Array && !Buffer.isBuffer(value)) {\n    return Buffer.from(value);\n  }\n  if (Array.isArray(value)) return value.map(restoreBuffers);\n  if (value && typeof value === \"object\") {\n    return Object.fromEntries(\n      Object.entries(value).map(([key, child]) => [key, restoreBuffers(child)]),\n    );\n  }\n  return value;\n}\n\nexport function abortError(\n  operation: string,\n  state: ProcessorState,\n  cause: unknown,\n): LibRawError {\n  return new LibRawError(`Operation ${operation} was aborted`, {\n    code: \"ABORT_ERR\",\n    operation,\n    state,\n    cause,\n  });\n}\n","import type { OperationOptions } from \"./types\";\n\nexport const forwardedOperations = [\n  \"errorCount\", \"recycleDatastream\", \"subtractBlack\", \"subtractBlackInternal\",\n  \"raw2Image\", \"raw2ImageEx\", \"raw2ImageStart\", \"freeImage\", \"adjustMaximum\",\n  \"adjustSizesInfoOnly\", \"adjustToRawInsetCrop\", \"setMakeFromIndex\",\n  \"convertFloatToInt\", \"dcrawPpmTiffWriter\", \"dcrawThumbWriter\",\n  \"getMemImageFormat\", \"colorAt\", \"filterColorAt\", \"fcol\",\n  \"unpackFunctionName\", \"getDecoderInfo\", \"phaseOneSubtractBlack\",\n  \"phaseOneCorrect\", \"adobeCoeff\", \"thumbOk\",\n  \"isFujiRotated\", \"isSraw\", \"srawMidpoint\", \"isNikonSraw\",\n  \"isCoolscanNef\", \"isJpegThumb\", \"isFloatingPoint\", \"haveFpData\",\n  \"getMetadata\", \"getImageSize\", \"getAdvancedMetadata\", \"getLensInfo\",\n  \"getColorInfo\", \"setOutputParams\", \"getOutputParams\", \"getLastError\",\n  \"strerror\", \"writePPM\", \"writeTIFF\", \"writeThumbnail\",\n  \"getRawImageBuffer\",\n] as const;\n\ninterface QueueTarget {\n  enqueue<T>(\n    name: string,\n    values: unknown[],\n    options?: OperationOptions,\n  ): Promise<T>;\n}\n\nexport function installForwardedOperations(\n  prototype: object,\n): void {\n  for (const operation of forwardedOperations) {\n    Object.defineProperty(prototype, operation, {\n      configurable: true,\n      value: function (this: QueueTarget, ...args: unknown[]) {\n        const maybeOptions = args.at(-1);\n        const options =\n          maybeOptions &&\n          typeof maybeOptions === \"object\" &&\n          \"signal\" in maybeOptions\n            ? (args.pop() as OperationOptions)\n            : undefined;\n        return this.enqueue(operation, args, options);\n      },\n    });\n  }\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport nodeGypBuild from \"node-gyp-build\";\n\nexport interface NativeWrapper {\n  [name: string]: any;\n}\n\nexport interface NativeWrapperConstructor {\n  new (flags?: number): NativeWrapper;\n  getVersion(): string;\n  getCapabilities(): number;\n  getCameraList(): string[];\n  getCameraCount(): number;\n  cameraMakerIndexToMaker(index: number): string | null;\n  simplifyMakeModel(index: number, make: string, model: string): {\n    makerIndex: number;\n    make: string;\n    model: string;\n  };\n  strProgress(progress: number): string;\n}\n\nexport interface NativeAddon {\n  LibRawWrapper: NativeWrapperConstructor;\n}\n\nfunction moduleDirectory(): string {\n  return typeof __dirname === \"string\"\n    ? __dirname\n    : path.dirname(fileURLToPath(import.meta.url));\n}\n\nexport function findPackageRoot(start = moduleDirectory()): string {\n  let current = start;\n  for (;;) {\n    const manifest = path.join(current, \"package.json\");\n    if (existsSync(manifest)) {\n      try {\n        const parsed = JSON.parse(readFileSync(manifest, \"utf8\")) as {\n          name?: string;\n        };\n        if (parsed.name === \"lightdrift-libraw\") return current;\n      } catch {\n        // Keep walking; a parent package may own the bundled file.\n      }\n    }\n    const parent = path.dirname(current);\n    if (parent === current) break;\n    current = parent;\n  }\n  throw new Error(\"Cannot locate the lightdrift-libraw package root\");\n}\n\nlet cachedAddon: NativeAddon | undefined;\n\nexport function loadNativeAddon(): NativeAddon {\n  cachedAddon ??= nodeGypBuild(findPackageRoot()) as NativeAddon;\n  return cachedAddon;\n}\n","import os from \"node:os\";\n\nimport { LibRawError } from \"./errors\";\nimport type { MetadataSnapshot } from \"./metadata\";\nimport type {\n  EncodedImageResult,\n  JPEGUsage,\n  OperationOptions,\n  OptimalJPEGSettings,\n  ProcessedImage,\n  ProcessorState,\n} from \"./types\";\n\nexport interface RenderOptions extends OperationOptions {\n  width?: number;\n  height?: number;\n  quality?: number;\n  compressionLevel?: number;\n  effort?: number;\n  progressive?: boolean;\n  mozjpeg?: boolean;\n  chromaSubsampling?: string;\n  optimizeCoding?: boolean;\n  trellisQuantisation?: boolean;\n  optimizeScans?: boolean;\n}\n\nexport function sharpInput(\n  image: ProcessedImage,\n  operation: string,\n  state: ProcessorState,\n): Buffer {\n  if (image.type === 1) return image.data;\n  if (image.bits !== 8 && image.bits !== 16) {\n    throw new LibRawError(`Unsupported encoded-image bit depth: ${image.bits}`, {\n      code: \"UNSUPPORTED_OUTPUT_BPS\",\n      operation,\n      state,\n    });\n  }\n  if (image.bits === 8) return image.data;\n\n  const samples = image.width * image.height * image.colors;\n  if (image.data.length < samples * 2) {\n    throw new LibRawError(\"Processed 16-bit image Buffer is truncated\", {\n      code: \"INVALID_PROCESSED_IMAGE\",\n      operation,\n      state,\n    });\n  }\n  const output = Buffer.allocUnsafe(samples);\n  const highByte = os.endianness() === \"LE\" ? 1 : 0;\n  for (let sample = 0; sample < samples; sample++) {\n    output[sample] = image.data[sample * 2 + highByte]!;\n  }\n  return output;\n}\n\nexport function createPpmResult(\n  image: ProcessedImage,\n  started: number,\n  state: ProcessorState,\n): EncodedImageResult {\n  if (image.bits !== 8 && image.bits !== 16) {\n    throw new LibRawError(`Unsupported PPM bit depth: ${image.bits}`, {\n      code: \"UNSUPPORTED_OUTPUT_BPS\",\n      operation: \"createPPMBuffer\",\n      state,\n    });\n  }\n  const bytesPerSample = image.bits / 8;\n  const pixels = image.width * image.height;\n  const sourceStride = image.colors * bytesPerSample;\n  if (image.colors < 3 || image.data.length < pixels * sourceStride) {\n    throw new LibRawError(\"Processed image does not contain complete RGB pixels\", {\n      code: \"INVALID_PROCESSED_IMAGE\",\n      operation: \"createPPMBuffer\",\n      state,\n    });\n  }\n  const pixelData = Buffer.allocUnsafe(pixels * 3 * bytesPerSample);\n  for (let pixel = 0; pixel < pixels; pixel++) {\n    const source = pixel * sourceStride;\n    const destination = pixel * 3 * bytesPerSample;\n    for (let channel = 0; channel < 3; channel++) {\n      if (image.bits === 8) {\n        pixelData[destination + channel] = image.data[source + channel]!;\n      } else if (os.endianness() === \"LE\") {\n        pixelData[destination + channel * 2] =\n          image.data[source + channel * 2 + 1]!;\n        pixelData[destination + channel * 2 + 1] =\n          image.data[source + channel * 2]!;\n      } else {\n        pixelData[destination + channel * 2] =\n          image.data[source + channel * 2]!;\n        pixelData[destination + channel * 2 + 1] =\n          image.data[source + channel * 2 + 1]!;\n      }\n    }\n  }\n  const header = Buffer.from(\n    `P6\\n${image.width} ${image.height}\\n${image.bits === 16 ? 65535 : 255}\\n`,\n  );\n  const data = Buffer.concat([header, pixelData]);\n  return {\n    data,\n    format: \"ppm\",\n    width: image.width,\n    height: image.height,\n    channels: 3,\n    size: data.length,\n    processingTimeMs: performance.now() - started,\n    source: \"processed\",\n  };\n}\n\nexport function optimalJpegSettings(\n  metadata: MetadataSnapshot,\n  usage?: JPEGUsage,\n): OptimalJPEGSettings {\n  const area = metadata.width * metadata.height;\n  const category =\n    area > 24_000_000\n      ? \"high-resolution\"\n      : area > 6_000_000\n        ? \"medium-resolution\"\n        : \"low-resolution\";\n  const recommended: OptimalJPEGSettings[\"recommended\"] = {\n    quality: category === \"high-resolution\" ? 80 : category === \"medium-resolution\" ? 85 : 90,\n    progressive: category === \"high-resolution\",\n    mozjpeg: true,\n    chromaSubsampling: category === \"low-resolution\" ? \"4:4:4\" : \"4:2:0\",\n    optimizeCoding: true,\n    trellisQuantisation: category === \"high-resolution\",\n    optimizeScans: false,\n    reasoning: [\n      category === \"high-resolution\"\n        ? \"High resolution image detected - optimizing for file size\"\n        : category === \"medium-resolution\"\n          ? \"Medium resolution image - balanced quality and size\"\n          : \"Lower resolution image - prioritizing quality\",\n    ],\n  };\n  if (usage === \"web\") {\n    recommended.quality = Math.min(recommended.quality, 80);\n    recommended.progressive = true;\n    recommended.optimizeScans = true;\n    recommended.reasoning.push(\"Web usage - optimized for loading speed\");\n  } else if (usage === \"print\") {\n    recommended.quality = Math.max(recommended.quality, 90);\n    recommended.chromaSubsampling = \"4:4:4\";\n    recommended.reasoning.push(\"Print usage - optimized for quality\");\n  } else if (usage === \"archive\") {\n    recommended.quality = 95;\n    recommended.chromaSubsampling = \"4:4:4\";\n    recommended.trellisQuantisation = true;\n    recommended.reasoning.push(\"Archive usage - maximum quality preservation\");\n  }\n  if (metadata.make && /canon|nikon/i.test(metadata.make)) {\n    recommended.reasoning.push(`${metadata.make} camera detected`);\n  }\n  return {\n    recommended,\n    imageAnalysis: {\n      dimensions: { width: metadata.width, height: metadata.height, area },\n      category,\n      camera: { make: metadata.make, model: metadata.model },\n    },\n  };\n}\n"],"mappings":"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","names":["import_node_os","import_node_path","path","nodeGypBuild","os","path","sharp","os"]}