/** * @module vim-ts */ import { RemoteBuffer } from './http/remoteBuffer'; export declare type BFastSource = { url?: string; headers?: Record; buffer?: RemoteBuffer | ArrayBuffer; }; declare type NumericArrayConstructor = Int8ArrayConstructor | Uint8ArrayConstructor | Int16ArrayConstructor | Uint16ArrayConstructor | Int32ArrayConstructor | Uint32ArrayConstructor | BigInt64ArrayConstructor | BigUint64ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor; export declare type NumericArray = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array; export declare class Range { start: number; end: number; get length(): number; constructor(start: number, end: number); offset(offset: number): Range; } /** * Returns -1 size for undefined attributes. */ export declare function parseName(name: string): [number, NumericArrayConstructor]; export declare function typeSize(type: string): 1 | 2 | 4 | 8; /** * Bfast header, mainly for validation. * See https://github.com/vimaec/bfast */ export declare class BFastHeader { magic: number; dataStart: number; dataEnd: number; numArrays: number; constructor(magic: number, dataStart: number, dataEnd: number, numArrays: number); static createFromArray(array: Uint32Array): BFastHeader; static createFromBuffer(array: ArrayBuffer): BFastHeader; } /** * See https://github.com/vimaec/bfast for bfast format spec * This implementation can either lazily request content as needed from http * Or it can serve the data directly from an ArrayBuffer * Remote mode can transition to buffer mode if server doesnt support partial http request */ export declare class BFast { source: RemoteBuffer | ArrayBuffer; offset: number; name: string; private _header; private _ranges; private _children; constructor(source: BFastSource, offset?: number, name?: string); /** * @returns url of the underlying RemoteBuffer if available */ get url(): string; /** * Aborts all downloads from the underlying RemoteBuffer */ abort(): void; /** * @returns Bfast Header */ getHeader(): Promise; /** * @returns a map of all buffers by names */ getRanges(): Promise>; /** * Returns the buffer associated with name as a new bfast. * This value is cached for future requests. * @param name buffer name */ getBfast(name: string): Promise; getLocalBfast(name: string, inflate?: boolean): Promise; /** * Returns the raw buffer associated with a name * This value is not cached. * @param name buffer name */ getBuffer(name: string): Promise; /** * Returns a number array from the buffer associated with name * @param name buffer name */ getArray(name: string): Promise; getInt32Array(name: string): Promise; getFloat32Array(name: string): Promise; getBigInt64Array(name: string): Promise; getUint16Array(name: string): Promise; /** * Returns a single value from given buffer name * @param name buffer name * @param index row index */ getValue(name: string, index: number): Promise; getRange(name: string): Promise; /** * Returns count subsequent values from given buffer name. * @param name buffer name * @param index row index * @param count count of values to return */ getValues(name: string, index: number, count: number): Promise; /** * Returns the buffer with given name as a byte array * @param name buffer name */ getBytes(name: string): Promise; /** * Returns a map of name-values with the same index from all buffers. * @param name buffer name */ getRow(index: number): Promise | undefined>; /** * Forces download of the full underlying buffer, from now on all calls will be local. */ forceDownload(): Promise; /** * Downloads the appropriate range and cast it as a new sub bfast. */ private requestBfast; /** * Downloads and parses ranges as a map of name->range */ private requestRanges; /** * Downloads and parse names from remote. */ private requestNames; /** * Downloads and parse header from remote. */ private requestHeader; /** * Gets array buffer from from cache, or partial http, fallback to full http * @param range range to get, or get full resource if undefined * @param label label for logs */ private request; /** * returns requested range from cache. */ private local; /** * returns requested range from remote. */ private remote; /** * Returns a new local bfast equivalent to this bfast. */ getSelf(): Promise; } export {};