{"version":3,"file":"index.cjs","sources":["../../src/lib/types.ts","../../src/lib/utils.ts","../../src/lib/wasm.ts","../../src/lib/OmFileReader.ts","../../src/lib/backends/FileBackendNode.ts","../../src/lib/backends/MemoryHttpBackend.ts","../../src/lib/BlockCache.ts","../../src/lib/backends/BlockCacheBackend.ts","../../src/lib/backends/OmHttpBackend.ts"],"sourcesContent":["export interface Range {\n  start: number;\n  end: number;\n}\n\nexport interface OffsetSize {\n  offset: number;\n  size: number;\n}\n\nexport interface OmFileReadBaseOptions<T extends keyof OmDataTypeToTypedArray> {\n  type: T;\n  ranges: Range[];\n  prefetch?: boolean;\n  ioSizeMax?: bigint;\n  ioSizeMerge?: bigint;\n}\n\nexport interface OmFileReadOptions<T extends keyof OmDataTypeToTypedArray> extends OmFileReadBaseOptions<T> {\n  intoSAB?: boolean;\n}\n\nexport interface OmFileReadIntoOptions<T extends keyof OmDataTypeToTypedArray> extends OmFileReadBaseOptions<T> {\n  output: OmDataTypeToTypedArray[T];\n}\n\nexport enum CompressionType {\n  /// Lossy compression using 2D delta coding and scale-factor.\n  /// Only supports float and scales to 16-bit signed integer.\n  PforDelta2dInt16 = 0,\n  /// Lossless float/double compression using 2D xor coding.\n  FpxXor2d = 1,\n  /// PFor integer compression.\n  /// f32 values are scaled to u32, f64 are scaled to u64.\n  PforDelta2d = 2,\n  /// Similar to `PforDelta2dInt16` but applies `log10(1+x)` before.\n  PforDelta2dInt16Logarithmic = 3,\n  None = 4,\n}\n\nexport enum OmDataType {\n  None = 0,\n  Int8 = 1,\n  Uint8 = 2,\n  Int16 = 3,\n  Uint16 = 4,\n  Int32 = 5,\n  Uint32 = 6,\n  Int64 = 7,\n  Uint64 = 8,\n  Float = 9,\n  Double = 10,\n  String = 11,\n  Int8Array = 12,\n  Uint8Array = 13,\n  Int16Array = 14,\n  Uint16Array = 15,\n  Int32Array = 16,\n  Uint32Array = 17,\n  Int64Array = 18,\n  Uint64Array = 19,\n  FloatArray = 20,\n  DoubleArray = 21,\n  StringArray = 22,\n}\n\nexport type TypedArray =\n  | Int8Array\n  | Uint8Array\n  | Int16Array\n  | Uint16Array\n  | Int32Array\n  | Uint32Array\n  | BigInt64Array\n  | BigUint64Array\n  | Float32Array\n  | Float64Array;\n\nexport type OmDataTypeToTypedArray = {\n  [OmDataType.Int8Array]: Int8Array;\n  [OmDataType.Uint8Array]: Uint8Array;\n  [OmDataType.Int16Array]: Int16Array;\n  [OmDataType.Uint16Array]: Uint16Array;\n  [OmDataType.Int32Array]: Int32Array;\n  [OmDataType.Uint32Array]: Uint32Array;\n  [OmDataType.Int64Array]: BigInt64Array;\n  [OmDataType.Uint64Array]: BigUint64Array;\n  [OmDataType.FloatArray]: Float32Array;\n  [OmDataType.DoubleArray]: Float64Array;\n};\n","/**\n * FNV-1a 64-bit hash implementation\n */\nexport function fnv1aHash64(str: string): bigint {\n  const FNV_OFFSET_BASIS = 0xcbf29ce484222325n;\n  const FNV_PRIME = 0x100000001b3n;\n\n  let hash = FNV_OFFSET_BASIS;\n  const bytes = new TextEncoder().encode(str);\n\n  for (const byte of bytes) {\n    hash ^= BigInt(byte);\n    hash = (hash * FNV_PRIME) & 0xffffffffffffffffn;\n  }\n\n  return hash;\n}\n\n/**\n * Fetch with exponential backoff retry on server-side errors (HTTP 5xx) and per-attempt timeout.\n */\nexport async function fetchRetry(\n  input: RequestInfo,\n  init?: RequestInit,\n  timeoutMs: number = 5000,\n  retries: number = 3\n): Promise<Response> {\n  let lastError: Error;\n\n  function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {\n    return Promise.race([\n      promise,\n      new Promise<T>((_, reject) => setTimeout(() => reject(new Error(`Timeout after ${ms}ms`)), ms)),\n    ]);\n  }\n\n  for (let attempt = 0; attempt < retries; attempt++) {\n    try {\n      const response = await withTimeout(fetch(input, init), timeoutMs);\n      if (response.status >= 500 && response.status < 600) {\n        throw new Error(`Server error: ${response.status}`);\n      }\n      return response;\n    } catch (error) {\n      lastError = error instanceof Error ? error : new Error(String(error));\n      if (attempt < retries - 1) {\n        const delay = Math.min(500 * Math.pow(2, attempt), 5000);\n        console.debug(`Attempt ${attempt + 1} failed, retrying in ${delay}ms: ${lastError.message}`);\n        await new Promise((resolve) => setTimeout(resolve, delay));\n      }\n    }\n  }\n  throw lastError!;\n}\n\nexport async function runLimited<T>(tasks: (() => Promise<T>)[], limit: number): Promise<T[]> {\n  const results: T[] = new Array(tasks.length);\n\n  for (let i = 0; i < tasks.length; i += limit) {\n    const batch = tasks.slice(i, i + limit);\n    const batchResults = await Promise.all(batch.map((task) => task()));\n\n    for (let j = 0; j < batchResults.length; j++) {\n      results[i + j] = batchResults[j];\n    }\n  }\n\n  return results;\n}\n","export interface WasmModule {\n  _malloc(size: number): number;\n  _free(ptr: number): void;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  setValue(ptr: number, value: any, type: string): void;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  getValue(ptr: number, type: string): any;\n  HEAPU8: Uint8Array;\n\n  // C-API functions\n  om_header_size(): number;\n  om_header_type(ptr: number): number;\n  om_trailer_size(): number;\n  om_trailer_read(trailerPtr: number, offsetPtr: number, sizePtr: number): boolean;\n  om_variable_init(dataPtr: number): number;\n  om_variable_get_type(variable: number): number;\n  om_variable_get_compression(variable: number): number;\n  om_variable_get_scale_factor(variable: number): number;\n  om_variable_get_add_offset(variable: number): number;\n  om_variable_get_dimensions_count(variable: number): number;\n  om_variable_get_dimensions_ptr(variable: number): number;\n  om_variable_get_chunks_ptr(variable: number): number;\n  om_variable_get_name_ptr(variable: number, length: number): number;\n  om_variable_get_children_count(variable: number): number;\n  om_variable_get_children(variable: number, index: number, count: number, offsetPtr: number, sizePtr: number): boolean;\n  om_variable_get_scalar(variable: number, ptrPtr: number, sizePtr: number): number;\n  om_decoder_init(\n    decoderPtr: number,\n    variable: number,\n    nDims: bigint,\n    readOffsetPtr: number,\n    readCountPtr: number,\n    intoCubeOffsetPtr: number,\n    intoCubeDimensionPtr: number,\n    ioSizeMerge: bigint,\n    ioSizeMax: bigint\n  ): number;\n  om_decoder_init_index_read(decoder: number, indexReadPtr: number): void;\n  om_decoder_init_data_read(dataReadPtr: number, indexReadPtr: number): void;\n  om_decoder_read_buffer_size(decoderPtr: number): number;\n  om_decoder_next_index_read(decoder: number, indexRead: number): boolean;\n  om_decoder_next_data_read(\n    decoder: number,\n    dataRead: number,\n    indexData: number,\n    indexCount: bigint,\n    error: number\n  ): boolean;\n  om_decoder_decode_chunks(\n    decoder: number,\n    chunkIndex: number,\n    data: number,\n    count: bigint,\n    output: number,\n    chunkBuffer: number,\n    error: number\n  ): boolean;\n\n  // Constants\n  OM_HEADER_INVALID: number;\n  OM_HEADER_LEGACY: number;\n  OM_HEADER_READ_TRAILER: number;\n  ERROR_OK: number;\n  DATA_TYPE_INT8_ARRAY: number;\n  DATA_TYPE_UINT8_ARRAY: number;\n  DATA_TYPE_INT16_ARRAY: number;\n  DATA_TYPE_UINT16_ARRAY: number;\n  DATA_TYPE_INT32_ARRAY: number;\n  DATA_TYPE_UINT32_ARRAY: number;\n  DATA_TYPE_INT64_ARRAY: number;\n  DATA_TYPE_UINT64_ARRAY: number;\n  DATA_TYPE_FLOAT_ARRAY: number;\n  DATA_TYPE_DOUBLE_ARRAY: number;\n\n  // Additional info\n  sizeof_decoder: number;\n}\n\n// Constants mapping\nconst DATA_TYPES = {\n  DATA_TYPE_NONE: 0,\n  DATA_TYPE_INT8: 1,\n  DATA_TYPE_UINT8: 2,\n  DATA_TYPE_INT16: 3,\n  DATA_TYPE_UINT16: 4,\n  DATA_TYPE_INT32: 5,\n  DATA_TYPE_UINT32: 6,\n  DATA_TYPE_INT64: 7,\n  DATA_TYPE_UINT64: 8,\n  DATA_TYPE_FLOAT: 9,\n  DATA_TYPE_DOUBLE: 10,\n  DATA_TYPE_STRING: 11,\n  DATA_TYPE_INT8_ARRAY: 12,\n  DATA_TYPE_UINT8_ARRAY: 13,\n  DATA_TYPE_INT16_ARRAY: 14,\n  DATA_TYPE_UINT16_ARRAY: 15,\n  DATA_TYPE_INT32_ARRAY: 16,\n  DATA_TYPE_UINT32_ARRAY: 17,\n  DATA_TYPE_INT64_ARRAY: 18,\n  DATA_TYPE_UINT64_ARRAY: 19,\n  DATA_TYPE_FLOAT_ARRAY: 20,\n  DATA_TYPE_DOUBLE_ARRAY: 21,\n  DATA_TYPE_STRING_ARRAY: 22,\n};\n\nconst HEADER_TYPES = {\n  OM_HEADER_INVALID: 0,\n  OM_HEADER_LEGACY: 1,\n  OM_HEADER_READ_TRAILER: 2,\n};\n\nconst ERROR_CODES = {\n  ERROR_OK: 0,\n};\n\n// Size of the decoder structure\nconst SIZEOF_DECODER = 104;\n\nlet wasmModuleWrapped: WasmModule | null = null;\n\nexport async function initWasm(): Promise<WasmModule> {\n  if (wasmModuleWrapped) return wasmModuleWrapped;\n\n  try {\n    // Import the factory function that creates the module\n    // @ts-expect-error module not found\n    const OmFileFormat = await import(\"@openmeteo/file-format-wasm\");\n    // Initialize the module by calling the factory function\n    const wasmModuleRaw = await OmFileFormat.default();\n\n    // Create our wrapped module with the expected interface\n    wasmModuleWrapped = createWrappedModule(wasmModuleRaw);\n\n    return wasmModuleWrapped;\n  } catch (error) {\n    throw new Error(`Failed to initialize WASM module: ${error}`);\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createWrappedModule(rawModule: any): WasmModule {\n  // Create a wrapper that maps the prefixed function names to our interface\n  return {\n    // Memory management functions\n    _malloc: rawModule._malloc,\n    _free: rawModule._free,\n    setValue: rawModule.setValue,\n    getValue: rawModule.getValue,\n    HEAPU8: rawModule.HEAPU8,\n\n    // Map all the C functions to their prefixed versions\n    om_header_size: rawModule._om_header_size,\n    om_header_type: rawModule._om_header_type,\n    om_trailer_size: rawModule._om_trailer_size,\n    om_trailer_read: rawModule._om_trailer_read,\n    om_variable_init: rawModule._om_variable_init,\n    om_variable_get_type: rawModule._om_variable_get_type,\n    om_variable_get_compression: rawModule._om_variable_get_compression,\n    om_variable_get_scale_factor: rawModule._om_variable_get_scale_factor,\n    om_variable_get_add_offset: rawModule._om_variable_get_add_offset,\n    om_variable_get_dimensions_count: rawModule._om_variable_get_dimensions_count,\n    om_variable_get_dimensions_ptr: rawModule._om_variable_get_dimensions,\n    om_variable_get_chunks_ptr: rawModule._om_variable_get_chunks,\n    om_variable_get_name_ptr: rawModule._om_variable_get_name,\n    om_variable_get_children_count: rawModule._om_variable_get_children_count,\n    om_variable_get_children: rawModule._om_variable_get_children,\n    om_variable_get_scalar: rawModule._om_variable_get_scalar,\n    om_decoder_init: rawModule._om_decoder_init,\n    om_decoder_init_index_read: rawModule._om_decoder_init_index_read,\n    om_decoder_init_data_read: rawModule._om_decoder_init_data_read,\n    om_decoder_read_buffer_size: rawModule._om_decoder_read_buffer_size,\n    om_decoder_next_index_read: rawModule._om_decoder_next_index_read,\n    om_decoder_next_data_read: rawModule._om_decoder_next_data_read,\n    om_decoder_decode_chunks: rawModule._om_decoder_decode_chunks,\n\n    // Constants\n    ...HEADER_TYPES,\n    ...ERROR_CODES,\n    ...DATA_TYPES,\n\n    // Additional info\n    sizeof_decoder: SIZEOF_DECODER,\n  };\n}\n\nexport function getWasmModule() {\n  if (!wasmModuleWrapped) {\n    throw new Error(\"WASM module not initialized. Call initWasm() first.\");\n  }\n  return wasmModuleWrapped;\n}\n","import { OmFileReaderBackend } from \"./backends/OmFileReaderBackend\";\nimport {\n  OffsetSize,\n  OmDataType,\n  TypedArray,\n  OmDataTypeToTypedArray,\n  OmFileReadOptions,\n  OmFileReadIntoOptions,\n} from \"./types\";\nimport { runLimited } from \"./utils\";\nimport { WasmModule, initWasm, getWasmModule } from \"./wasm\";\n\nexport class OmFileReader {\n  private backend: OmFileReaderBackend;\n  private wasm: WasmModule;\n  private variable: number | null;\n  private variableDataPtr: number | null;\n  private metadataCache: Map<string, OffsetSize | null>;\n\n  constructor(backend: OmFileReaderBackend, wasm?: WasmModule) {\n    this.backend = backend;\n    this.wasm = wasm || getWasmModule();\n    this.variable = null;\n    this.variableDataPtr = null;\n    this.metadataCache = new Map();\n  }\n\n  /**\n   * Static factory method to create and initialize an OmFileReader\n   */\n  static async create(backend: OmFileReaderBackend): Promise<OmFileReader> {\n    // Make sure WASM is initialized\n    const wasm = await initWasm();\n    const reader = new OmFileReader(backend, wasm);\n    await reader.initialize();\n    return reader;\n  }\n\n  async initialize(): Promise<OmFileReader> {\n    let variableData: Uint8Array | undefined;\n\n    // First, try to read the trailer\n    const fileSize = await this.backend.count();\n    const trailerSize = this.wasm.om_trailer_size();\n\n    if (fileSize >= trailerSize) {\n      const trailerOffset = fileSize - trailerSize;\n      const trailerPtr = await this.readDataBlock(trailerOffset, trailerSize);\n\n      const offsetPtr = this.wasm._malloc(8); // 64-bit value\n      const sizePtr = this.wasm._malloc(8);\n\n      try {\n        const success = this.wasm.om_trailer_read(trailerPtr, offsetPtr, sizePtr);\n\n        if (success) {\n          const offset = Number(this.wasm.getValue(offsetPtr, \"i64\"));\n          const size = Number(this.wasm.getValue(sizePtr, \"i64\"));\n          variableData = await this.backend.getBytes(offset, size);\n        }\n      } finally {\n        this.wasm._free(trailerPtr);\n        this.wasm._free(offsetPtr);\n        this.wasm._free(sizePtr);\n      }\n    }\n\n    // Fallback to legacy header if trailer reading fails\n    if (!variableData) {\n      const headerSize = this.wasm.om_header_size();\n      const headerData = await this.backend.getBytes(0, headerSize);\n      const headerPtr = this.wasm._malloc(headerData.length);\n      this.wasm.HEAPU8.set(headerData, headerPtr);\n\n      try {\n        const headerType = this.wasm.om_header_type(headerPtr);\n        if (headerType === this.wasm.OM_HEADER_LEGACY) {\n          variableData = headerData;\n        }\n      } finally {\n        this.wasm._free(headerPtr);\n      }\n    }\n\n    if (!variableData) {\n      throw new Error(\"Not a valid OM file\");\n    }\n\n    // Initialize variable\n    const variableDataPtr = this.wasm._malloc(variableData.length);\n    this.wasm.HEAPU8.set(variableData, variableDataPtr);\n    this.variable = this.wasm.om_variable_init(variableDataPtr);\n\n    if (!this.variable) {\n      this.wasm._free(variableDataPtr);\n      throw new Error(\"Failed to initialize variable\");\n    }\n\n    this.variableDataPtr = variableDataPtr;\n\n    return this;\n  }\n\n  // Helper method to convert C strings to JS strings\n  private _getString(strPtr: number, strLen: number): string {\n    const bytes = this.wasm.HEAPU8.subarray(strPtr, strPtr + strLen);\n    return new TextDecoder(\"utf8\").decode(bytes);\n  }\n\n  dataType(): number {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n    return this.wasm.om_variable_get_type(this.variable);\n  }\n\n  compression(): number {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n    return this.wasm.om_variable_get_compression(this.variable);\n  }\n\n  scaleFactor(): number {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n    return this.wasm.om_variable_get_scale_factor(this.variable);\n  }\n\n  addOffset(): number {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n    return this.wasm.om_variable_get_add_offset(this.variable);\n  }\n\n  getDimensions(): number[] {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n\n    const count = Number(this.wasm.om_variable_get_dimensions_count(this.variable));\n    const dimensionsPtr = this.wasm.om_variable_get_dimensions_ptr(this.variable);\n\n    // Create view directly into WASM memory\n    const int64View = new BigInt64Array(this.wasm.HEAPU8.buffer, dimensionsPtr, count);\n    return Array.from(int64View, (bigIntVal) => Number(bigIntVal));\n  }\n\n  getChunkDimensions(): number[] {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n\n    const count = Number(this.wasm.om_variable_get_dimensions_count(this.variable));\n    const chunksPtr = this.wasm.om_variable_get_chunks_ptr(this.variable);\n\n    // Create view directly into WASM memory\n    const int64View = new BigInt64Array(this.wasm.HEAPU8.buffer, chunksPtr, count);\n    return Array.from(int64View, (bigIntVal) => Number(bigIntVal));\n  }\n\n  getName(): string | null {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n\n    // string length is i16\n    const lengthPtr = this.wasm._malloc(2);\n    const valuePtr = this.wasm.om_variable_get_name_ptr(this.variable, lengthPtr);\n    const size = this.wasm.getValue(lengthPtr, \"i16\");\n    this.wasm._free(lengthPtr);\n    if (size === 0 || valuePtr === 0) {\n      return null;\n    }\n    return this._getString(valuePtr, size);\n  }\n\n  numberOfChildren(): number {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n    return this.wasm.om_variable_get_children_count(this.variable);\n  }\n\n  async getChild(index: number): Promise<OmFileReader | null> {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n\n    // Allocate memory for the output parameters\n    const offsetPtr = this.wasm._malloc(8);\n    const sizePtr = this.wasm._malloc(8);\n\n    const success = this.wasm.om_variable_get_children(this.variable, index, 1, offsetPtr, sizePtr);\n\n    if (!success) {\n      this.wasm._free(offsetPtr);\n      this.wasm._free(sizePtr);\n      return null;\n    }\n\n    const offset = Number(this.wasm.getValue(offsetPtr, \"i64\"));\n    const size = Number(this.wasm.getValue(sizePtr, \"i64\"));\n\n    this.wasm._free(offsetPtr);\n    this.wasm._free(sizePtr);\n\n    return this.initChildFromOffsetSize({ offset, size });\n  }\n\n  /**\n   * Searches direct children by name. Does not search recursively.\n   */\n  async getChildByName(name: string): Promise<OmFileReader | null> {\n    // Check cache first\n    const cachedMetadata = this.metadataCache.get(name);\n    if (cachedMetadata === null) {\n      return null;\n    }\n    if (cachedMetadata) {\n      return await this.initChildFromOffsetSize(cachedMetadata);\n    }\n\n    // Search through children and cache metadata\n    const numChildren = this.numberOfChildren();\n    for (let i = 0; i < numChildren; i++) {\n      const metadata = this._getChildMetadata(i);\n      if (metadata) {\n        const child = await this.initChildFromOffsetSize(metadata);\n        const childName = child.getName();\n        if (childName) {\n          this.metadataCache.set(childName, metadata);\n          if (childName === name) {\n            return child; // keep this one\n          }\n        }\n        child.dispose();\n      }\n    }\n    // also remember invalid names\n    this.metadataCache.set(name, null);\n    return null;\n  }\n\n  async initChildFromOffsetSize(offsetSize: OffsetSize): Promise<OmFileReader> {\n    const childDataPtr = await this.readDataBlock(offsetSize.offset, offsetSize.size);\n\n    const childReader = new OmFileReader(this.backend, this.wasm);\n\n    childReader.variable = this.wasm.om_variable_init(childDataPtr);\n    childReader.variableDataPtr = childDataPtr;\n\n    return childReader;\n  }\n\n  /**\n   * Get child metadata by index.\n   */\n  _getChildMetadata(index: number): OffsetSize | null {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n\n    // Allocate memory for the output parameters\n    const offsetPtr = this.wasm._malloc(8);\n    const sizePtr = this.wasm._malloc(8);\n\n    const success = this.wasm.om_variable_get_children(this.variable, index, 1, offsetPtr, sizePtr);\n\n    if (!success) {\n      this.wasm._free(offsetPtr);\n      this.wasm._free(sizePtr);\n      return null;\n    }\n\n    const offset = Number(this.wasm.getValue(offsetPtr, \"i64\"));\n    const size = Number(this.wasm.getValue(sizePtr, \"i64\"));\n\n    this.wasm._free(offsetPtr);\n    this.wasm._free(sizePtr);\n\n    return { offset, size };\n  }\n\n  /**\n   * Find a variable by its path (e.g., \"parent/child/grandchild\")\n   */\n  async findByPath(path: string): Promise<OmFileReader | null> {\n    const parts = path.split(\"/\").filter((s) => s.length > 0);\n    return await this.navigatePath(parts);\n  }\n\n  /**\n   * Navigate through a path recursively\n   */\n  async navigatePath(parts: string[]): Promise<OmFileReader | null> {\n    if (parts.length === 0) {\n      return null;\n    }\n\n    const child = await this.getChildByName(parts[0]);\n    if (child) {\n      if (parts.length === 1) {\n        return child;\n      } else {\n        return await child.navigatePath(parts.slice(1));\n      }\n    }\n    return null;\n  }\n\n  // Method to read scalar values\n  readScalar<T>(dataType: OmDataType): T | null {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n\n    if (this.dataType() !== dataType) {\n      return null;\n    }\n\n    // Allocate memory for output parameters\n    const ptrPtr = this.wasm._malloc(4); // pointer to pointer\n    const sizePtr = this.wasm._malloc(8); // u64\n\n    try {\n      const error = this.wasm.om_variable_get_scalar(this.variable, ptrPtr, sizePtr);\n\n      if (error !== this.wasm.ERROR_OK) {\n        return null;\n      }\n\n      const dataPtr = this.wasm.getValue(ptrPtr, \"*\");\n\n      if (dataPtr === 0) {\n        return null;\n      }\n\n      // Read data based on type\n      let result: T | null;\n\n      // TODO: Support Int64 and Uint64\n      switch (dataType) {\n        case OmDataType.Int8:\n          result = this.wasm.getValue(dataPtr, \"i8\");\n          break;\n        case OmDataType.Uint8:\n          result = (this.wasm.getValue(dataPtr, \"i8\") & 0xff) as T;\n          break;\n        case OmDataType.Int16:\n          result = this.wasm.getValue(dataPtr, \"i16\");\n          break;\n        case OmDataType.Uint16:\n          result = (this.wasm.getValue(dataPtr, \"i16\") & 0xffff) as T;\n          break;\n        case OmDataType.Int32:\n          result = this.wasm.getValue(dataPtr, \"i32\");\n          break;\n        case OmDataType.Uint32:\n          result = (this.wasm.getValue(dataPtr, \"i32\") >>> 0) as T;\n          break;\n        case OmDataType.Int64:\n          result = this.wasm.getValue(dataPtr, \"i64\");\n          break;\n        case OmDataType.Uint64:\n          // convert to unsigned BigInt\n          {\n            const val = this.wasm.getValue(dataPtr, \"i64\");\n            result = (val & BigInt(\"0xFFFFFFFFFFFFFFFF\")) as T;\n          }\n          break;\n        case OmDataType.Float:\n          result = this.wasm.getValue(dataPtr, \"float\");\n          break;\n        case OmDataType.Double:\n          result = this.wasm.getValue(dataPtr, \"double\");\n          break;\n        case OmDataType.String:\n          {\n            const size = Number(this.wasm.getValue(sizePtr, \"i64\"));\n            if (size === 0) {\n              return null;\n            }\n            result = this._getString(dataPtr, size) as T;\n          }\n          break;\n        default:\n          result = null;\n      }\n      return result;\n    } finally {\n      this.wasm._free(ptrPtr);\n      this.wasm._free(sizePtr);\n    }\n  }\n\n  private newIndexRead(decoderPtr: number): number {\n    // Size of OmDecoder_indexRead_t\n    const sizeOfRange = 16; // 8 bytes for lowerBound + 8 bytes for upperBound\n    const sizeOfIndexRead = 8 + 8 + sizeOfRange * 3; // offset + count + 3 range structs\n\n    // Allocate the memory\n    const indexReadPtr = this.wasm._malloc(sizeOfIndexRead);\n    this.wasm.om_decoder_init_index_read(decoderPtr, indexReadPtr);\n    return indexReadPtr;\n  }\n\n  private newDataRead(indexReadPtr: number): number {\n    // Size of OmDecoder_dataRead_t\n    const sizeOfRange = 16; // 8 bytes for lowerBound + 8 bytes for upperBound\n    const sizeOfDataRead = 8 + 8 + sizeOfRange * 3; // offset + count + 3 range structs\n\n    // Allocate the memory\n    const dataReadPtr = this.wasm._malloc(sizeOfDataRead);\n    this.wasm.om_decoder_init_data_read(dataReadPtr, indexReadPtr);\n    return dataReadPtr;\n  }\n\n  private allocateTypedArray<T extends keyof OmDataTypeToTypedArray>(\n    dataType: T,\n    size: number,\n    useSharedBuffer: boolean = false\n  ): OmDataTypeToTypedArray[T] {\n    if (useSharedBuffer && typeof SharedArrayBuffer === \"undefined\") {\n      throw new Error(\"SharedArrayBuffer is not available in this environment\");\n    }\n\n    // Type-safe mapping of data types to their constructors and byte sizes\n    const typeInfo = {\n      [this.wasm.DATA_TYPE_INT8_ARRAY]: { constructor: Int8Array<ArrayBufferLike>, bytes: 1 },\n      [this.wasm.DATA_TYPE_UINT8_ARRAY]: { constructor: Uint8Array<ArrayBufferLike>, bytes: 1 },\n      [this.wasm.DATA_TYPE_INT16_ARRAY]: { constructor: Int16Array<ArrayBufferLike>, bytes: 2 },\n      [this.wasm.DATA_TYPE_UINT16_ARRAY]: { constructor: Uint16Array<ArrayBufferLike>, bytes: 2 },\n      [this.wasm.DATA_TYPE_INT32_ARRAY]: { constructor: Int32Array<ArrayBufferLike>, bytes: 4 },\n      [this.wasm.DATA_TYPE_UINT32_ARRAY]: { constructor: Uint32Array<ArrayBufferLike>, bytes: 4 },\n      [this.wasm.DATA_TYPE_INT64_ARRAY]: { constructor: BigInt64Array<ArrayBufferLike>, bytes: 8 },\n      [this.wasm.DATA_TYPE_UINT64_ARRAY]: { constructor: BigUint64Array<ArrayBufferLike>, bytes: 8 },\n      [this.wasm.DATA_TYPE_FLOAT_ARRAY]: { constructor: Float32Array<ArrayBufferLike>, bytes: 4 },\n      [this.wasm.DATA_TYPE_DOUBLE_ARRAY]: { constructor: Float64Array<ArrayBufferLike>, bytes: 8 },\n    } as const;\n\n    const info = typeInfo[dataType];\n    if (!info) {\n      throw new Error(\"Unsupported data type\");\n    }\n    const byteLength = size * info.bytes;\n\n    if (useSharedBuffer) {\n      // In browsers, crossOriginIsolated must be true; in Node, it's undefined (so skip check)\n      if (\n        typeof SharedArrayBuffer === \"undefined\" ||\n        (typeof crossOriginIsolated !== \"undefined\" && !crossOriginIsolated)\n      ) {\n        throw new Error(\"SharedArrayBuffer is not available in this environment\");\n      }\n      const sharedBuffer = new SharedArrayBuffer(byteLength);\n      return new info.constructor(sharedBuffer) as OmDataTypeToTypedArray[T];\n    } else {\n      const normalBuffer = new ArrayBuffer(byteLength);\n      return new info.constructor(normalBuffer) as OmDataTypeToTypedArray[T];\n    }\n  }\n\n  /**\n   * Reads data from the file and returns a new TypedArray of the requested type.\n   *\n   * @param options Options for reading, including:\n   *   - type: The data type to read.\n   *   - ranges: Array of dimension ranges to read.\n   *   - prefetch: Whether to prefetch data (default: true).\n   *   - intoSAB: Use SharedArrayBuffer for output (default: false).\n   *   - ioSizeMax: Maximum I/O size (default: 65536).\n   *   - ioSizeMerge: Merge threshold for I/O operations (default: 2048).\n   */\n  async read<T extends keyof OmDataTypeToTypedArray>(\n    options: OmFileReadOptions<T>\n  ): Promise<OmDataTypeToTypedArray[T]> {\n    const {\n      type,\n      ranges,\n      prefetch = true,\n      intoSAB = false,\n      ioSizeMax = BigInt(65536),\n      ioSizeMerge = BigInt(2048),\n    } = options;\n\n    // Calculate output dimensions\n    const outDims = ranges.map((range) => Number(range.end - range.start));\n    const totalSize = outDims.reduce((a, b) => a * b, 1);\n\n    const output = this.allocateTypedArray(type, totalSize, intoSAB);\n\n    await this.readInto({ type, output, ranges, ioSizeMax, ioSizeMerge, prefetch });\n    return output;\n  }\n\n  /**\n   * Reads data into an existing TypedArray with specified dimension ranges.\n   *\n   * @param options Options for reading, including:\n   *   - type: The data type to read.\n   *   - output: The TypedArray to read data into.\n   *   - ranges: Array of dimension ranges to read.\n   *   - prefetch: Whether to prefetch data (default: true).\n   *   - ioSizeMax: Maximum I/O size (default: 65536).\n   *   - ioSizeMerge: Merge threshold for I/O operations (default: 2048).\n   */\n  async readInto<T extends keyof OmDataTypeToTypedArray>(options: OmFileReadIntoOptions<T>): Promise<void> {\n    const { type, output, ranges, prefetch = true, ioSizeMax = BigInt(65536), ioSizeMerge = BigInt(2048) } = options;\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n\n    if (this.dataType() !== type) {\n      throw new Error(`Invalid data type: expected ${this.dataType()}, got ${type}`);\n    }\n\n    const nDims = ranges.length;\n    const fileDims = this.getDimensions();\n\n    // Validate dimension counts\n    if (fileDims.length !== nDims) {\n      throw new Error(`Mismatched dimensions: file has ${fileDims.length}, request has ${nDims}`);\n    }\n\n    // Calculate output dimensions and prepare arrays for WASM\n    const outDims = ranges.map((range) => range.end - range.start);\n\n    // Calculate total elements to ensure output array has correct size\n    const totalElements = outDims.reduce((a, b) => a * Number(b), 1);\n    if (output.length < totalElements) {\n      throw new Error(`Output array is too small: needs ${totalElements} elements, has ${output.length}`);\n    }\n\n    // Allocate memory for arrays\n    const readOffsetPtr = this.wasm._malloc(nDims * 8); // u64 array\n    const readCountPtr = this.wasm._malloc(nDims * 8);\n    const intoCubeOffsetPtr = this.wasm._malloc(nDims * 8);\n    const intoCubeDimensionPtr = this.wasm._malloc(nDims * 8);\n\n    try {\n      // Fill arrays\n      for (let i = 0; i < nDims; i++) {\n        // Validate ranges\n        if (ranges[i].start < 0 || ranges[i].end > fileDims[i] || ranges[i].start >= ranges[i].end) {\n          throw new Error(`Invalid range for dimension ${i}: ${JSON.stringify(ranges[i])}`);\n        }\n\n        this.wasm.setValue(readOffsetPtr + i * 8, BigInt(ranges[i].start), \"i64\");\n        this.wasm.setValue(readCountPtr + i * 8, BigInt(outDims[i]), \"i64\");\n        this.wasm.setValue(intoCubeOffsetPtr + i * 8, BigInt(0), \"i64\");\n        this.wasm.setValue(intoCubeDimensionPtr + i * 8, BigInt(outDims[i]), \"i64\");\n      }\n      // Create decoder\n      const decoderPtr = this.wasm._malloc(this.wasm.sizeof_decoder);\n\n      try {\n        // Initialize decoder\n        const error = this.wasm.om_decoder_init(\n          decoderPtr,\n          this.variable,\n          BigInt(nDims),\n          readOffsetPtr,\n          readCountPtr,\n          intoCubeOffsetPtr,\n          intoCubeDimensionPtr,\n          ioSizeMerge,\n          ioSizeMax\n        );\n\n        if (error !== this.wasm.ERROR_OK) {\n          throw new Error(`Decoder initialization failed: error code ${error}`);\n        }\n        if (prefetch) {\n          await this.decodePrefetch(decoderPtr);\n        }\n        await this.decode(decoderPtr, output);\n      } finally {\n        this.wasm._free(decoderPtr);\n      }\n    } finally {\n      // Clean up input arrays\n      this.wasm._free(readOffsetPtr);\n      this.wasm._free(readCountPtr);\n      this.wasm._free(intoCubeOffsetPtr);\n      this.wasm._free(intoCubeDimensionPtr);\n    }\n  }\n\n  async decodePrefetch(decoderPtr: number): Promise<void> {\n    if (!this.backend.prefetchData) {\n      // Prefetch not supported by backend\n      return;\n    }\n\n    const indexReadPtr = this.newIndexRead(decoderPtr);\n    const errorPtr = this.wasm._malloc(4);\n    this.wasm.setValue(errorPtr, this.wasm.ERROR_OK, \"i32\");\n\n    try {\n      // Loop over index blocks\n      while (this.wasm.om_decoder_next_index_read(decoderPtr, indexReadPtr)) {\n        const indexOffset = Number(this.wasm.getValue(indexReadPtr, \"i64\"));\n        const indexCount = Number(this.wasm.getValue(indexReadPtr + 8, \"i64\"));\n\n        // Get bytes for index-read\n        const indexDataPtr = await this.readDataBlock(indexOffset, indexCount);\n        const dataReadPtr = this.newDataRead(indexReadPtr);\n\n        try {\n          // Collect prefetch tasks\n          const prefetchTasks: (() => Promise<void>)[] = [];\n          while (\n            this.wasm.om_decoder_next_data_read(decoderPtr, dataReadPtr, indexDataPtr, BigInt(indexCount), errorPtr)\n          ) {\n            const dataOffset = Number(this.wasm.getValue(dataReadPtr, \"i64\"));\n            const dataCount = Number(this.wasm.getValue(dataReadPtr + 8, \"i64\"));\n            prefetchTasks.push(() => this.backend.prefetchData(dataOffset, dataCount));\n          }\n\n          // Run prefetches in parallel\n          await runLimited(prefetchTasks, 5000);\n\n          // Check for errors after data_read loop\n          const error = this.wasm.getValue(errorPtr, \"i32\");\n          if (error !== this.wasm.ERROR_OK) {\n            throw new Error(`Data read error: ${error}`);\n          }\n        } finally {\n          this.wasm._free(dataReadPtr);\n          this.wasm._free(indexDataPtr);\n        }\n      }\n    } finally {\n      this.wasm._free(indexReadPtr);\n      this.wasm._free(errorPtr);\n    }\n  }\n\n  private async decode(decoderPtr: number, outputArray: TypedArray): Promise<void> {\n    const outputPtr = this.wasm._malloc(outputArray.byteLength);\n    const chunkBufferSize = Number(this.wasm.om_decoder_read_buffer_size(decoderPtr));\n    const chunkBufferPtr = this.wasm._malloc(chunkBufferSize);\n    // Create index_read struct\n    const indexReadPtr = this.newIndexRead(decoderPtr);\n    const errorPtr = this.wasm._malloc(4);\n    // Initialize error to OK\n    this.wasm.setValue(errorPtr, this.wasm.ERROR_OK, \"i32\");\n\n    try {\n      // Loop over index blocks\n      while (this.wasm.om_decoder_next_index_read(decoderPtr, indexReadPtr)) {\n        // Get index_read parameters\n        const indexOffset = Number(this.wasm.getValue(indexReadPtr, \"i64\"));\n        const indexCount = Number(this.wasm.getValue(indexReadPtr + 8, \"i64\"));\n        // Get bytes for index-read\n        const indexDataPtr = await this.readDataBlock(indexOffset, indexCount);\n        const dataReadPtr = this.newDataRead(indexReadPtr);\n\n        try {\n          // Loop over data blocks and read compressed data chunks\n          while (\n            this.wasm.om_decoder_next_data_read(decoderPtr, dataReadPtr, indexDataPtr, BigInt(indexCount), errorPtr)\n          ) {\n            // Get data_read parameters\n            const dataOffset = Number(this.wasm.getValue(dataReadPtr, \"i64\"));\n            const dataCount = Number(this.wasm.getValue(dataReadPtr + 8, \"i64\"));\n            const chunkIndexPtr = dataReadPtr + 32; // offset(8), count(8), indexRange(16)\n\n            // Get bytes for data-read\n            const dataBlockPtr = await this.readDataBlock(dataOffset, dataCount);\n\n            try {\n              // Decode chunks\n              const success = this.wasm.om_decoder_decode_chunks(\n                decoderPtr,\n                chunkIndexPtr,\n                dataBlockPtr,\n                BigInt(dataCount),\n                outputPtr,\n                chunkBufferPtr,\n                errorPtr\n              );\n\n              // Check for error\n              if (!success) {\n                const error = this.wasm.getValue(errorPtr, \"i32\");\n                throw new Error(`Decoder failed to decode chunks: error ${error}`);\n              }\n            } finally {\n              this.wasm._free(dataBlockPtr);\n            }\n          }\n\n          // Check for errors after data_read loop\n          const error = this.wasm.getValue(errorPtr, \"i32\");\n          if (error !== this.wasm.ERROR_OK) {\n            throw new Error(`Data read error: ${error}`);\n          }\n        } finally {\n          this.wasm._free(dataReadPtr);\n          this.wasm._free(indexDataPtr);\n        }\n      }\n\n      // Copy the data back to the output array with the correct type\n      this.copyToTypedArray(outputPtr, outputArray);\n    } finally {\n      this.wasm._free(errorPtr);\n      this.wasm._free(indexReadPtr);\n      this.wasm._free(chunkBufferPtr);\n      this.wasm._free(outputPtr);\n    }\n  }\n\n  private async readDataBlock(offset: number, size: number): Promise<number> {\n    const data = await this.backend.getBytes(offset, size);\n    const ptr = this.wasm._malloc(data.length);\n    this.wasm.HEAPU8.set(data, ptr);\n    return ptr;\n  }\n\n  /**\n   * Helper method to copy data from WASM memory to a TypedArray with the correct type\n   */\n  private copyToTypedArray(sourcePtr: number, targetArray: TypedArray): void {\n    switch (targetArray.constructor) {\n      case Float32Array:\n        (targetArray as Float32Array).set(new Float32Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length));\n        break;\n      case Float64Array:\n        (targetArray as Float64Array).set(new Float64Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length));\n        break;\n      case Int8Array:\n        (targetArray as Int8Array).set(new Int8Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length));\n        break;\n      case Uint8Array:\n        (targetArray as Uint8Array).set(new Uint8Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length));\n        break;\n      case Int16Array:\n        (targetArray as Int16Array).set(new Int16Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length));\n        break;\n      case Uint16Array:\n        (targetArray as Uint16Array).set(new Uint16Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length));\n        break;\n      case Int32Array:\n        (targetArray as Int32Array).set(new Int32Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length));\n        break;\n      case Uint32Array:\n        (targetArray as Uint32Array).set(new Uint32Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length));\n        break;\n      case BigInt64Array:\n        (targetArray as BigInt64Array).set(new BigInt64Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length));\n        break;\n      case BigUint64Array:\n        (targetArray as BigUint64Array).set(new BigUint64Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length));\n        break;\n      default:\n        throw new Error(\"Unsupported TypedArray type in copyToTypedArray\");\n    }\n  }\n\n  // Clean up resources when done\n  dispose(): void {\n    if (this.variableDataPtr !== null) {\n      this.wasm._free(this.variableDataPtr);\n      this.variableDataPtr = null;\n    }\n    this.variable = null;\n  }\n}\n","import { OmFileReaderBackend } from \"./OmFileReaderBackend\";\nimport fs from \"node:fs/promises\";\n\nexport class FileBackendNode implements OmFileReaderBackend {\n  private filePath: string | null = null;\n  private memory: Uint8Array | null = null;\n  private fileSize: number = 0;\n  private fileHandle: fs.FileHandle | null = null;\n\n  constructor(source: string | Uint8Array | ArrayBuffer) {\n    if (typeof source === \"string\") {\n      this.filePath = source;\n    } else if (source instanceof ArrayBuffer) {\n      this.memory = new Uint8Array(source);\n      this.fileSize = this.memory.length;\n    } else if (source instanceof Uint8Array) {\n      this.memory = source;\n      this.fileSize = source.length;\n    } else {\n      throw new Error(\"Unsupported file source type for Node.js FileBackendNode\");\n    }\n  }\n\n  async count(): Promise<number> {\n    if (this.memory) {\n      return this.fileSize;\n    }\n    if (this.filePath) {\n      if (this.fileSize > 0) return this.fileSize;\n      const stats = await fs.stat(this.filePath);\n      this.fileSize = stats.size;\n      return this.fileSize;\n    }\n    throw new Error(\"Unable to determine file size\");\n  }\n\n  async getBytes(offset: number, size: number): Promise<Uint8Array> {\n    if (this.memory) {\n      return this.memory.slice(offset, offset + size);\n    }\n    if (this.filePath) {\n      if (!this.fileHandle) {\n        this.fileHandle = await fs.open(this.filePath, \"r\");\n      }\n      const buffer = new Uint8Array(size);\n      const { bytesRead } = await this.fileHandle.read(buffer, 0, size, offset);\n      if (bytesRead !== size) {\n        throw new Error(`Expected to read ${size} bytes but got ${bytesRead}`);\n      }\n      return buffer;\n    }\n    throw new Error(\"No file or memory buffer available\");\n  }\n\n  async prefetchData(_offset: number, _bytes: number): Promise<void> {\n    // No-op for now!\n  }\n\n  async close(): Promise<void> {\n    if (this.fileHandle) {\n      await this.fileHandle.close();\n      this.fileHandle = null;\n    }\n  }\n}\n","import { OmFileReaderBackend } from \"./OmFileReaderBackend\";\n\nexport class MemoryHttpBackend implements OmFileReaderBackend {\n  private url: string;\n  private fileSize: number | null = null;\n  private fileData: Uint8Array | null = null;\n  private loadPromise: Promise<void> | null = null;\n  private countPromise: Promise<number> | null = null;\n  private maxFileSize: number;\n  private onProgress?: (loaded: number, total: number) => void;\n  private debug: boolean;\n\n  /**\n   * Create a new MemoryHttpBackend\n   * @param options Configuration options\n   */\n  constructor(options: {\n    url: string;\n    maxFileSize?: number;\n    onProgress?: (loaded: number, total: number) => void;\n    debug?: boolean;\n  }) {\n    this.url = options.url;\n    this.maxFileSize = options.maxFileSize ?? 200 * 1024 * 1024; // 200 MB default\n    this.onProgress = options.onProgress;\n    this.debug = options.debug ?? false;\n\n    // Start loading the file in the background\n    this.loadFile().catch((err) => {\n      if (this.debug) console.error(\"Background file load failed:\", err);\n    });\n  }\n\n  /**\n   * Get the total size of the file\n   */\n  async count(): Promise<number> {\n    if (this.fileSize !== null) {\n      return this.fileSize;\n    }\n\n    if (!this.countPromise) {\n      if (this.debug) console.log(`Making HEAD request to ${this.url}`);\n\n      this.countPromise = (async () => {\n        try {\n          const response = await fetch(this.url, {\n            method: \"HEAD\",\n          });\n\n          if (!response.ok) {\n            throw new Error(`HTTP error: ${response.status}`);\n          }\n\n          const contentLength = response.headers.get(\"content-length\");\n          if (!contentLength) {\n            throw new Error(\"Content-Length header not available\");\n          }\n\n          this.fileSize = parseInt(contentLength, 10);\n\n          if (this.fileSize > this.maxFileSize) {\n            throw new Error(\n              `File size (${this.fileSize} bytes) exceeds maximum allowed size (${this.maxFileSize} bytes)`\n            );\n          }\n\n          if (this.debug) console.log(`File size: ${this.fileSize} bytes`);\n          return this.fileSize;\n        } catch (error) {\n          this.countPromise = null;\n          throw new Error(`Failed to get file size: ${error instanceof Error ? error.message : String(error)}`);\n        }\n      })();\n    }\n\n    return this.countPromise;\n  }\n\n  /**\n   * Load the entire file into memory\n   */\n  async loadFile(): Promise<void> {\n    // If already loaded or loading, return that promise\n    if (this.fileData) {\n      return Promise.resolve();\n    }\n\n    if (this.loadPromise) {\n      return this.loadPromise;\n    }\n\n    this.loadPromise = (async () => {\n      try {\n        // First get the file size\n        const size = await this.count();\n\n        if (this.debug) console.log(`Fetching entire file (${size} bytes) from ${this.url}`);\n\n        // Use fetch with streaming and progress tracking\n        const response = await fetch(this.url);\n\n        if (!response.ok) {\n          throw new Error(`HTTP error: ${response.status}`);\n        }\n\n        // Check if ReadableStream is supported and if progress tracking is needed\n        if (this.onProgress && response.body && \"getReader\" in response.body) {\n          // Stream the response with progress tracking\n          const contentLength = Number(response.headers.get(\"content-length\") || size);\n          const reader = response.body.getReader();\n          const chunks: Uint8Array[] = [];\n\n          let receivedLength = 0;\n          let lastProgressUpdate = 0;\n\n          while (true) {\n            const { done, value } = await reader.read();\n\n            if (done) {\n              break;\n            }\n\n            chunks.push(value);\n            receivedLength += value.length;\n\n            // Don't update progress too frequently (throttle updates)\n            const now = Date.now();\n            if (now - lastProgressUpdate > 100) {\n              // update every 100ms\n              this.onProgress(receivedLength, contentLength);\n              lastProgressUpdate = now;\n            }\n          }\n\n          // Concatenate chunks into a single Uint8Array\n          this.fileData = new Uint8Array(receivedLength);\n          let position = 0;\n          for (const chunk of chunks) {\n            this.fileData.set(chunk, position);\n            position += chunk.length;\n          }\n\n          // Final progress update\n          this.onProgress(receivedLength, contentLength);\n        } else {\n          // Simple approach without streaming\n          const buffer = await response.arrayBuffer();\n          this.fileData = new Uint8Array(buffer);\n\n          if (this.onProgress) {\n            this.onProgress(this.fileData.length, size);\n          }\n        }\n\n        if (this.debug) console.log(`File loaded successfully (${this.fileData.length} bytes)`);\n        return;\n      } catch (error) {\n        this.loadPromise = null;\n        throw new Error(`Failed to load file: ${error instanceof Error ? error.message : String(error)}`);\n      }\n    })();\n\n    return this.loadPromise;\n  }\n\n  /**\n   * Get bytes from the file\n   * @param offset The starting position in the file\n   * @param size The number of bytes to read\n   */\n  async getBytes(offset: number, size: number): Promise<Uint8Array> {\n    try {\n      // Make sure the file is loaded\n      if (!this.fileData) {\n        if (this.debug) console.log(`getBytes(${offset}, ${size}): Waiting for file to load...`);\n        await this.loadFile();\n        if (this.debug) console.log(`getBytes(${offset}, ${size}): File loaded`);\n      }\n\n      // At this point, fileData should be available\n      if (!this.fileData) {\n        throw new Error(\"File data is not available after load\");\n      }\n\n      // Bounds check\n      if (offset < 0 || offset + size > this.fileData.length) {\n        throw new Error(`Requested range (${offset}:${offset + size}) is out of bounds (0:${this.fileData.length})`);\n      }\n\n      if (this.debug) console.log(`Serving ${size} bytes from offset ${offset} from memory`);\n\n      // Return the requested slice of data\n      return this.fileData.slice(offset, offset + size);\n    } catch (error) {\n      throw new Error(`Error in getBytes: ${error instanceof Error ? error.message : String(error)}`);\n    }\n  }\n\n  /**\n   * Check if the file is fully loaded\n   */\n  isLoaded(): boolean {\n    return !!this.fileData;\n  }\n\n  /**\n   * Get the current loaded data or null if not loaded\n   */\n  getFileData(): Uint8Array | null {\n    return this.fileData;\n  }\n\n  /**\n   * Force a reload of the file\n   */\n  async reload(): Promise<void> {\n    this.fileData = null;\n    this.loadPromise = null;\n    return this.loadFile();\n  }\n\n  async prefetchData(_offset: number, _bytes: number): Promise<void> {\n    // No-op for now!\n  }\n\n  /**\n   * Close the backend and release any resources\n   */\n  async close(): Promise<void> {\n    this.fileData = null;\n    this.loadPromise = null;\n  }\n}\n","type BlockKey = bigint;\n\nexport class BlockCacheCoordinator {\n  private cache: SharedBlockCache;\n\n  constructor(blockSize: number, maxBlocks: number) {\n    this.cache = new SharedBlockCache(blockSize, maxBlocks);\n  }\n\n  blockSize(): number {\n    return this.cache.blockSize;\n  }\n\n  maxBlocks(): number {\n    return this.cache.maxBlocks;\n  }\n\n  async get(key: BlockKey, fetchFn: () => Promise<Uint8Array>): Promise<Uint8Array> {\n    const cached = this.cache.get(key);\n    if (cached) return cached;\n\n    let inflight = this.cache.getInflight(key);\n    if (!inflight) {\n      inflight = fetchFn();\n      this.cache.setInflight(key, inflight);\n      inflight.then((data) => this.cache.set(key, data));\n    }\n    return inflight;\n  }\n\n  prefetch(key: BlockKey, fetchFn: () => Promise<Uint8Array>) {\n    if (!this.cache.get(key) && !this.cache.getInflight(key)) {\n      const inflight = fetchFn();\n      this.cache.setInflight(key, inflight);\n      inflight.then((data) => this.cache.set(key, data));\n    }\n  }\n\n  clear() {\n    this.cache.clear();\n  }\n}\n\ninterface BlockEntry {\n  data: Uint8Array;\n  timestamp: number;\n}\n\nexport class SharedBlockCache {\n  blockSize: number;\n  maxBlocks: number;\n  private cache: Map<BlockKey, BlockEntry>;\n  private lru: BlockKey[];\n  private inflight: Map<BlockKey, Promise<Uint8Array>>;\n\n  constructor(blockSize: number, maxBlocks: number) {\n    this.blockSize = blockSize;\n    this.maxBlocks = maxBlocks;\n    this.cache = new Map();\n    this.lru = [];\n    this.inflight = new Map();\n  }\n\n  get(key: BlockKey): Uint8Array | undefined {\n    const entry = this.cache.get(key);\n    if (entry) {\n      entry.timestamp = Date.now();\n      // Move to end of LRU\n      this.lru = this.lru.filter((k) => k !== key);\n      this.lru.push(key);\n      return entry.data;\n    }\n    return undefined;\n  }\n\n  set(key: BlockKey, data: Uint8Array) {\n    if (this.cache.size >= this.maxBlocks) {\n      // Evict LRU\n      const oldestKey = this.lru.shift();\n      if (oldestKey !== undefined) this.cache.delete(oldestKey);\n    }\n    this.cache.set(key, { data, timestamp: Date.now() });\n    this.lru.push(key);\n  }\n\n  getInflight(key: BlockKey): Promise<Uint8Array> | undefined {\n    return this.inflight.get(key);\n  }\n\n  setInflight(key: BlockKey, promise: Promise<Uint8Array>) {\n    this.inflight.set(key, promise);\n    promise.finally(() => this.inflight.delete(key));\n  }\n\n  clear() {\n    this.cache.clear();\n    this.lru = [];\n    this.inflight.clear();\n  }\n}\n","import { BlockCacheCoordinator } from \"../BlockCache\";\nimport { OmFileReaderBackend } from \"./OmFileReaderBackend\";\n\n/**\n * Wraps a backend for caching blocks of data.\n */\nexport class BlockCacheBackend implements OmFileReaderBackend {\n  private backend: OmFileReaderBackend;\n  private cacheCoordinator: BlockCacheCoordinator;\n  private cacheKey: bigint;\n\n  constructor(backend: OmFileReaderBackend, cacheCoordinator: BlockCacheCoordinator, cacheKey: bigint) {\n    this.backend = backend;\n    this.cacheKey = cacheKey;\n    this.cacheCoordinator = cacheCoordinator;\n  }\n\n  async count(): Promise<number> {\n    return this.backend.count();\n  }\n\n  async prefetchData(offset: number, count: number): Promise<void> {\n    const blockSize = this.cacheCoordinator.blockSize();\n    const fileSize = await this.count();\n    const startBlock = Math.floor(offset / blockSize);\n    const endBlock = Math.floor((offset + count - 1) / blockSize);\n\n    for (let blockIdx = startBlock; blockIdx <= endBlock; blockIdx++) {\n      const blockKey = this.cacheKey + BigInt(blockIdx);\n      this.cacheCoordinator.prefetch(blockKey, () =>\n        this.backend.getBytes(blockIdx * blockSize, Math.min(blockSize, fileSize - blockIdx * blockSize))\n      );\n    }\n  }\n\n  async getBytes(offset: number, size: number): Promise<Uint8Array> {\n    const blockSize = this.cacheCoordinator.blockSize();\n    const fileSize = await this.count();\n    const startBlock = Math.floor(offset / blockSize);\n    const endBlock = Math.floor((offset + size - 1) / blockSize);\n\n    const output = new Uint8Array(size);\n\n    // Fetch all blocks in parallel\n    const tasks: (() => Promise<{ blockIdx: number; block: Uint8Array }>)[] = [];\n    for (let blockIdx = startBlock; blockIdx <= endBlock; blockIdx++) {\n      const blockKey = this.cacheKey + BigInt(blockIdx);\n      tasks.push(async () => {\n        const blockStart = blockIdx * blockSize;\n        const blockEnd = Math.min(blockStart + blockSize, fileSize);\n        const block = await this.cacheCoordinator.get(blockKey, () =>\n          this.backend.getBytes(blockStart, blockEnd - blockStart)\n        );\n        return { blockIdx, block };\n      });\n    }\n\n    const fetchedBlocks = await Promise.all(tasks.map((task) => task()));\n\n    const blocks = new Map<number, Uint8Array>();\n    for (const { blockIdx, block } of fetchedBlocks) {\n      blocks.set(blockIdx, block);\n    }\n\n    // Copy relevant parts of each block to output\n    for (let blockIdx = startBlock; blockIdx <= endBlock; blockIdx++) {\n      const block = blocks.get(blockIdx)!;\n      const blockOffset = Math.max(offset, blockIdx * blockSize) - blockIdx * blockSize;\n      const outOffset = Math.max(blockIdx * blockSize, offset) - offset;\n      const copyLen = Math.min(blockSize - blockOffset, size - outOffset);\n\n      output.set(block.subarray(blockOffset, blockOffset + copyLen), outOffset);\n    }\n\n    return output;\n  }\n\n  async close(): Promise<void> {\n    this.cacheCoordinator.clear();\n    await this.backend.close();\n  }\n}\n","import { BlockCacheCoordinator } from \"../BlockCache\";\nimport { OmFileReader } from \"../OmFileReader\";\nimport { fetchRetry, fnv1aHash64 } from \"../utils\";\nimport { BlockCacheBackend } from \"./BlockCacheBackend\";\nimport { OmFileReaderBackend } from \"./OmFileReaderBackend\";\n\nlet globalCache: BlockCacheCoordinator | null = null;\n\nexport function setupGlobalCache(blockSize: number = 64 * 1024, maxBlocks: number = 256) {\n  if (!globalCache) {\n    globalCache = new BlockCacheCoordinator(blockSize, maxBlocks);\n  } else {\n    if (globalCache.blockSize() !== blockSize || globalCache.maxBlocks() !== maxBlocks) {\n      throw new Error(\"Global cache already set up with configuration \" + blockSize + \" \" + maxBlocks);\n    }\n  }\n}\n\nexport interface OmHttpBackendOptions {\n  url: string;\n  eTagValidation?: boolean;\n  debug?: boolean;\n  timeoutMs?: number;\n  retries?: number;\n}\n\nexport class OmHttpBackendError extends Error {\n  constructor(\n    message: string,\n    public readonly statusCode?: number\n  ) {\n    super(message);\n    this.name = \"OmHttpBackendError\";\n  }\n}\n\n/**\n * Backend for reading from HTTP servers with partial read support using Range requests.\n * Checks last modified header and ETag.\n */\nexport class OmHttpBackend implements OmFileReaderBackend {\n  private readonly url: string;\n  private readonly debug: boolean;\n  private readonly timeoutMs: number;\n  private readonly retries: number;\n\n  private eTagValidation: boolean;\n  private fileSize: number | null = null;\n  private lastModified: string | null = null;\n  private eTag: string | null = null;\n  private metadataPromise: Promise<void> | null = null;\n\n  constructor(options: OmHttpBackendOptions) {\n    this.url = options.url;\n    this.debug = options.debug ?? false;\n    this.timeoutMs = options.timeoutMs ?? 30000;\n    this.retries = options.retries ?? 1;\n    this.eTagValidation = options.eTagValidation ?? true;\n  }\n\n  /**\n   * Returns a cache key that uniquely identifies the file based on its URL, ETag, and Last-Modified headers.\n   * The ETag is only included if validation is enabled.\n   */\n  get cacheKey(): bigint {\n    const urlHash = fnv1aHash64(this.url);\n    const lastModifiedHash = this.lastModified ? fnv1aHash64(this.lastModified) : 0n;\n    // Only include the eTag in the cache key if we are actually validating against it.\n    const eTagHash = this.eTag && this.eTagValidation ? fnv1aHash64(this.eTag) : 0n;\n\n    return urlHash ^ eTagHash ^ lastModifiedHash;\n  }\n\n  /**\n   * Fetch metadata using HEAD request\n   */\n  private async fetchMetadata(): Promise<void> {\n    if (this.metadataPromise) {\n      return this.metadataPromise;\n    }\n\n    this.metadataPromise = (async () => {\n      const response = await fetchRetry(this.url, { method: \"HEAD\" }, this.timeoutMs ?? 5000, this.retries);\n\n      if (!response.ok) {\n        throw new OmHttpBackendError(\n          response.status === 404 ? \"File not found\" : `HTTP error: ${response.status}`,\n          response.status\n        );\n      }\n\n      const contentLength = response.headers.get(\"content-length\");\n      if (!contentLength) throw new OmHttpBackendError(\"Content-Length header missing\");\n\n      this.fileSize = parseInt(contentLength, 10);\n      this.lastModified = response.headers.get(\"last-modified\");\n      this.eTag = response.headers.get(\"etag\");\n    })();\n\n    return this.metadataPromise;\n  }\n\n  /**\n   * Get the total size of the file\n   */\n  async count(): Promise<number> {\n    if (this.fileSize !== null) {\n      return this.fileSize;\n    }\n\n    await this.fetchMetadata();\n    return this.fileSize!;\n  }\n\n  /**\n   * Get bytes from the file using Range requests\n   */\n  async getBytes(offset: number, size: number): Promise<Uint8Array> {\n    if (offset < 0 || size <= 0) {\n      throw new OmHttpBackendError(\"Invalid offset or size\");\n    }\n\n    // Ensure we have metadata\n    await this.fetchMetadata();\n\n    if (offset + size > this.fileSize!) {\n      throw new OmHttpBackendError(`Requested range (${offset}:${offset + size}) exceeds file size (${this.fileSize})`);\n    }\n\n    // Prepare request\n    const headers: Record<string, string> = {\n      Range: `bytes=${offset}-${offset + size - 1}`,\n    };\n\n    if (this.eTagValidation) {\n      // Add conditional headers for cache validation\n      if (this.lastModified) {\n        headers[\"If-Unmodified-Since\"] = this.lastModified;\n      }\n      if (this.eTag) {\n        headers[\"If-Match\"] = this.eTag;\n      }\n    }\n\n    if (this.debug) {\n      console.log(`Getting data range ${offset}-${offset + size - 1} from ${this.url}`);\n    }\n\n    const response = await fetchRetry(this.url, { headers }, this.timeoutMs, this.retries);\n\n    const buffer = await response.arrayBuffer();\n    const data = new Uint8Array(buffer);\n\n    if (data.length !== size) {\n      throw new OmHttpBackendError(`Received ${data.length} bytes, expected ${size}`);\n    }\n    return data;\n  }\n\n  async prefetchData(_offset: number, _bytes: number): Promise<void> {\n    // No-op for now!\n  }\n\n  async asCachedReader(): Promise<OmFileReader> {\n    if (!globalCache) {\n      throw new OmHttpBackendError(\"No global cache set up! Configure it with setupGlobalCache first!\");\n    }\n\n    // Ensure metadata is fetched so cacheKey is valid\n    await this.fetchMetadata();\n    const cachedBackend = new BlockCacheBackend(this, globalCache, this.cacheKey);\n    return await OmFileReader.create(cachedBackend);\n  }\n\n  /**\n   * Close the backend and release resources\n   */\n  async close(): Promise<void> {\n    this.metadataPromise = null;\n    this.fileSize = null;\n    this.lastModified = null;\n    this.eTag = null;\n  }\n}\n"],"names":["CompressionType","OmDataType"],"mappings":"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"}