{"version":3,"file":"index.browser.cjs","sources":["../../src/lib/types.ts","../../src/lib/wasm.ts","../../src/lib/OmFileReader.ts","../../src/lib/backends/FileBackend.ts","../../src/lib/backends/MemoryHttpBackend.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 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  | Float32Array\n  | Float64Array;\n// | BigInt64Array\n// | BigUint64Array;\n","export interface WasmModule {\n  _malloc(size: number): number;\n  _free(ptr: number): void;\n  setValue(ptr: number, value: any, type: string): void;\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_dimension_count(variable: number): number;\n  om_variable_get_dimension_value(variable: number, index: bigint): number;\n  om_variable_get_chunk_count(variable: number): number;\n  om_variable_get_chunk_value(variable: number, index: bigint): number;\n  om_variable_get_name_count(variable: number): number;\n  om_variable_get_name_ptr(variable: 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 (estimate, will be updated during init)\nconst SIZEOF_DECODER = 256;\n\nlet wasmModuleRaw: any = null;\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-ignore\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\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_dimension_count: rawModule._om_variable_get_dimension_count,\n    om_variable_get_dimension_value: rawModule._om_variable_get_dimension_value,\n    om_variable_get_chunk_count: rawModule._om_variable_get_chunk_count,\n    om_variable_get_chunk_value: rawModule._om_variable_get_chunk_value,\n    om_variable_get_name_count: rawModule._om_variable_get_name_count,\n    om_variable_get_name_ptr: rawModule._om_variable_get_name_ptr,\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, // We could try to determine this dynamically if there's a C API for it\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 { OffsetSize, OmDataType, TypedArray, Range } from \"./types\";\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 verbose: boolean;\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.verbose = false;\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    // Similar to the 'new' method in Rust\n    const headerSize = this.wasm.om_header_size();\n\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    const headerType = this.wasm.om_header_type(headerPtr);\n\n    if (headerType === this.wasm.OM_HEADER_INVALID) {\n      this.wasm._free(headerPtr);\n      throw new Error(\"Not a valid OM file\");\n    }\n\n    let variableData: Uint8Array;\n\n    if (headerType === this.wasm.OM_HEADER_LEGACY) {\n      variableData = headerData;\n    } else if (headerType === this.wasm.OM_HEADER_READ_TRAILER) {\n      const fileSize = await this.backend.count();\n      const trailerSize = this.wasm.om_trailer_size();\n      const trailerOffset = fileSize - trailerSize;\n\n      const trailerPtr = await this.readDataBlock(trailerOffset, trailerSize);\n\n      // Create pointers for offset and size (out parameters)\n      const offsetPtr = this.wasm._malloc(8); // 64-bit value = 8 bytes\n      const sizePtr = this.wasm._malloc(8);\n\n      const success = this.wasm.om_trailer_read(trailerPtr, offsetPtr, sizePtr);\n\n      if (!success) {\n        this.wasm._free(headerPtr);\n        this.wasm._free(trailerPtr);\n        this.wasm._free(offsetPtr);\n        this.wasm._free(sizePtr);\n        throw new Error(\"Failed to read trailer\");\n      }\n\n      // Read values from memory\n      const offset = Number(this.wasm.getValue(offsetPtr, \"i64\"));\n      const size = Number(this.wasm.getValue(sizePtr, \"i64\"));\n\n      // Free memory\n      this.wasm._free(trailerPtr);\n      this.wasm._free(offsetPtr);\n      this.wasm._free(sizePtr);\n\n      // Get variable data\n      variableData = await this.backend.getBytes(offset, size);\n    } else {\n      this.wasm._free(headerPtr);\n      throw new Error(\"Unknown header type\");\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    this.variableDataPtr = variableDataPtr;\n\n    this.wasm._free(headerPtr);\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    // Get count using the wrapper function\n    const count = Number(this.wasm.om_variable_get_dimension_count(this.variable));\n\n    // Get each dimension individually\n    const dimensions: number[] = [];\n    for (let i = 0; i < count; i++) {\n      dimensions.push(Number(this.wasm.om_variable_get_dimension_value(this.variable, BigInt(i))));\n    }\n\n    return dimensions;\n  }\n\n  getChunkDimensions(): number[] {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n\n    // Get count using the wrapper function\n    const count = Number(this.wasm.om_variable_get_chunk_count(this.variable));\n\n    // Get each chunk dimension individually\n    const chunks: number[] = [];\n    for (let i = 0; i < count; i++) {\n      chunks.push(Number(this.wasm.om_variable_get_chunk_value(this.variable, BigInt(i))));\n    }\n\n    return chunks;\n  }\n\n  getName(): string | null {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n\n    const size = this.wasm.om_variable_get_name_count(this.variable);\n    if (size === 0) {\n      return null;\n    }\n\n    const valuePtr = this.wasm.om_variable_get_name_ptr(this.variable);\n    if (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  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  // 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      const size = Number(this.wasm.getValue(sizePtr, \"i64\"));\n\n      if (dataPtr === 0) {\n        return null;\n      }\n\n      // Read data based on type\n      let result: any;\n\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;\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;\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;\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        default:\n          result = null;\n      }\n\n      return result as T;\n    } finally {\n      this.wasm._free(ptrPtr);\n      this.wasm._free(sizePtr);\n    }\n  }\n\n  private newIndexRead(decoderPtr: number): number {\n    // Calculate proper size for 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 and zero the memory\n    const indexReadPtr = this.wasm._malloc(sizeOfIndexRead);\n\n    // Zero out the memory (equivalent to std::mem::zeroed())\n    const zeroBuffer = new Uint8Array(sizeOfIndexRead);\n    this.wasm.HEAPU8.set(zeroBuffer, indexReadPtr);\n\n    // Initialize the structure using C function\n    this.wasm.om_decoder_init_index_read(decoderPtr, indexReadPtr);\n\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 and zero the memory\n    const dataReadPtr = this.wasm._malloc(sizeOfDataRead);\n\n    // Zero out the memory (equivalent to std::mem::zeroed())\n    const zeroBuffer = new Uint8Array(sizeOfDataRead);\n    this.wasm.HEAPU8.set(zeroBuffer, dataReadPtr);\n\n    // Initialize the structure using C function\n    this.wasm.om_decoder_init_data_read(dataReadPtr, indexReadPtr);\n\n    return dataReadPtr;\n  }\n\n  async read(\n    dataType: OmDataType,\n    dimRanges: Range[],\n    ioSizeMax: bigint = BigInt(65536),\n    ioSizeMerge: bigint = BigInt(512)\n  ): Promise<TypedArray> {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n\n    if (this.dataType() !== dataType) {\n      throw new Error(`Invalid data type: expected ${this.dataType()}, got ${dataType}`);\n    }\n\n    // Calculate output dimensions\n    const outDims = dimRanges.map((range) => Number(range.end - range.start));\n    const totalSize = outDims.reduce((a, b) => a * b, 1);\n\n    // Create output TypedArray based on data type\n    let output: TypedArray;\n    switch (dataType) {\n      case this.wasm.DATA_TYPE_INT8_ARRAY:\n        output = new Int8Array(totalSize);\n        break;\n      case this.wasm.DATA_TYPE_UINT8_ARRAY:\n        output = new Uint8Array(totalSize);\n        break;\n      case this.wasm.DATA_TYPE_INT16_ARRAY:\n        output = new Int16Array(totalSize);\n        break;\n      case this.wasm.DATA_TYPE_UINT16_ARRAY:\n        output = new Uint16Array(totalSize);\n        break;\n      case this.wasm.DATA_TYPE_INT32_ARRAY:\n        output = new Int32Array(totalSize);\n        break;\n      case this.wasm.DATA_TYPE_UINT32_ARRAY:\n        output = new Uint32Array(totalSize);\n        break;\n      case this.wasm.DATA_TYPE_FLOAT_ARRAY:\n        output = new Float32Array(totalSize);\n        break;\n      case this.wasm.DATA_TYPE_DOUBLE_ARRAY:\n        output = new Float64Array(totalSize);\n        break;\n      default:\n        throw new Error(\"Unsupported data type\");\n    }\n\n    await this.readInto(dataType, output, dimRanges, ioSizeMax, ioSizeMerge);\n    return output;\n  }\n\n  /**\n   * Read data into an existing TypedArray with specified dimension ranges\n   * @param dataType The data type to read\n   * @param output The TypedArray to read data into\n   * @param dimRanges Ranges for each dimension to read\n   * @param ioSizeMax Maximum I/O size (default: 65536)\n   * @param ioSizeMerge Merge threshold for I/O operations (default: 512)\n   */\n  async readInto(\n    dataType: OmDataType,\n    output: TypedArray,\n    dimRanges: Range[],\n    ioSizeMax: bigint = BigInt(65536),\n    ioSizeMerge: bigint = BigInt(512)\n  ): Promise<void> {\n    if (this.variable === null) throw new Error(\"Reader not initialized\");\n\n    if (this.dataType() !== dataType) {\n      throw new Error(`Invalid data type: expected ${this.dataType()}, got ${dataType}`);\n    }\n\n    const nDims = dimRanges.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 = dimRanges.map((range) => range.end - range.start);\n    const intoCubeOffset = new Array(nDims).fill(0);\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 (dimRanges[i].start < 0 || dimRanges[i].end > fileDims[i] || dimRanges[i].start >= dimRanges[i].end) {\n          throw new Error(`Invalid range for dimension ${i}: ${JSON.stringify(dimRanges[i])}`);\n        }\n\n        this.wasm.setValue(readOffsetPtr + i * 8, BigInt(dimRanges[i].start), \"i64\");\n        this.wasm.setValue(readCountPtr + i * 8, BigInt(outDims[i]), \"i64\");\n        this.wasm.setValue(intoCubeOffsetPtr + i * 8, BigInt(intoCubeOffset[i]), \"i64\");\n        this.wasm.setValue(intoCubeDimensionPtr + i * 8, BigInt(outDims[i]), \"i64\");\n      }\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        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  private async decode(decoderPtr: number, outputArray: TypedArray): Promise<void> {\n    if (this.verbose){\n    \tconsole.log(`Starting decode with ${outputArray.constructor.name}, length=${outputArray.length}`);\n    }\n\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      let indexBlockCount = 0;\n      while (this.wasm.om_decoder_next_index_read(decoderPtr, indexReadPtr)) {\n        indexBlockCount++;\n\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\n        if (this.verbose){\n          console.log(`Index block #${indexBlockCount}: offset=${indexOffset}, count=${indexCount}`);\n        }\n\n        // Get bytes for index-read\n        const indexDataPtr = await this.readDataBlock(indexOffset, indexCount);\n\n        // Create data_read struct\n        let dataReadPtr = this.newDataRead(indexReadPtr);\n\n        try {\n          // Loop over data blocks and read compressed data chunks\n          // Loop over data blocks\n          let dataBlockCount = 0;\n          while (\n            this.wasm.om_decoder_next_data_read(decoderPtr, dataReadPtr, indexDataPtr, BigInt(indexCount), errorPtr)\n          ) {\n            dataBlockCount++;\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            if (this.verbose) {\n              console.log(\n                `  Data block #${dataBlockCount}: offset=${dataOffset}, count=${dataCount}, chunkIndexPtr=${chunkIndexPtr}`\n              );\n            }\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        const f32Array = new Float32Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length);\n        (targetArray as Float32Array).set(f32Array);\n        break;\n      case Float64Array:\n        const f64Array = new Float64Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length);\n        (targetArray as Float64Array).set(f64Array);\n        break;\n      case Int8Array:\n        const i8Array = new Int8Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length);\n        (targetArray as Int8Array).set(i8Array);\n        break;\n      case Uint8Array:\n        const u8Array = new Uint8Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length);\n        (targetArray as Uint8Array).set(u8Array);\n        break;\n      case Int16Array:\n        const i16Array = new Int16Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length);\n        (targetArray as Int16Array).set(i16Array);\n        break;\n      case Uint16Array:\n        const u16Array = new Uint16Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length);\n        (targetArray as Uint16Array).set(u16Array);\n        break;\n      case Int32Array:\n        const i32Array = new Int32Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length);\n        (targetArray as Int32Array).set(i32Array);\n        break;\n      case Uint32Array:\n        const u32Array = new Uint32Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.length);\n        (targetArray as Uint32Array).set(u32Array);\n        break;\n      default:\n        // Fallback to byte-by-byte copy\n        const byteArray = new Uint8Array(this.wasm.HEAPU8.buffer, sourcePtr, targetArray.byteLength);\n        new Uint8Array(targetArray.buffer).set(byteArray);\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\";\n\nexport class FileBackend implements OmFileReaderBackend {\n  private fileObj: File | Blob | null = null;\n  private memory: Uint8Array | null = null;\n  private fileSize: number = 0;\n\n  constructor(source: File | Blob | Uint8Array | ArrayBuffer) {\n    if (typeof File !== \"undefined\" && source instanceof File) {\n      this.fileObj = source;\n      this.fileSize = source.size;\n    } else if (typeof Blob !== \"undefined\" && source instanceof Blob) {\n      this.fileObj = source;\n      this.fileSize = source.size;\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 browser FileBackend\");\n    }\n  }\n\n  async count(): Promise<number> {\n    return this.fileSize;\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.fileObj) {\n      const blob = this.fileObj.slice(offset, offset + size);\n      const buffer = await blob.arrayBuffer();\n      return new Uint8Array(buffer);\n    }\n    throw new Error(\"No file or memory buffer available\");\n  }\n\n  async close(): Promise<void> {\n    // Nothing to clean up in browser\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  /**\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"],"names":["CompressionType","OmDataType"],"mappings":"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"}