@tokenizer/range
Version:
Range-request tokenizer adapter
53 lines (52 loc) • 2.31 kB
TypeScript
import { AbstractTokenizer, type IRandomAccessTokenizer, type IReadChunkOptions, type IRandomAccessFileInfo } from 'strtok3';
import type { IContentRangeType, IHeadRequestInfo, IRangeRequestClient } from './types.js';
interface IRangeRequestTokenizerOptions {
fileInfo: IHeadRequestInfo;
minimumChunkSize: number;
abortSignal?: AbortSignal;
}
/**
* RangeRequestTokenizer is tokenizer which is an adapter for range-request clients.
* Typically, HTTP clients implementing the HTTP Range Requests (https://tools.ietf.org/html/rfc7233)
*
* Inspired by "XHR Reader" written by António Afonso
* https://github.com/aadsm/jsmediatags/blob/master/src/XhrFileReader.js
*/
export declare class RangeRequestTokenizer extends AbstractTokenizer implements IRandomAccessTokenizer {
private rangeRequestClient;
private options;
private _fileData;
readonly fileInfo: IRandomAccessFileInfo;
constructor(rangeRequestClient: IRangeRequestClient, options: IRangeRequestTokenizerOptions);
setPosition(position: number): void;
/**
* Read portion from stream
* @param uint8array - Target `Uint8Array`
* @param options - Additional read options
* @returns Promise with number of bytes read
*/
readBuffer(uint8array: Uint8Array, options?: IReadChunkOptions): Promise<number>;
/**
* Peek (read ahead) buffer from tokenizer
* @param uint8array - Target `Uint8Array` to fill with data peek from the tokenizer-stream
* @param options - Additional read options
* @returns Promise with number of bytes read
*/
peekBuffer(uint8array: Uint8Array, options?: IReadChunkOptions): Promise<number>;
/**
* Ignore number of bytes, advances the pointer in under tokenizer-stream.
* @param length - Number of bytes to skip (ignore)
* @return actual number of bytes ignored
*/
ignore(length: number): Promise<number>;
abort(): Promise<void>;
supportsRandomAccess(): boolean;
private loadRange;
}
export declare function roundRange(range: [number, number], minimumChunkSize: number): [number, number];
/**
* Convert HTTP range header value to IContentRangeType
* @param contentRange - content range
*/
export declare function parseContentRange(contentRange: string): IContentRangeType;
export {};