zlib-streams-ts
Version:
TypeScript-based Compression Streams API implementation using zlib, with support for deflate64 decompression.
235 lines (219 loc) • 4.66 kB
text/typescript
export interface Stream {
_state: DeflateState | InflateState | undefined;
next_in: Uint8Array;
next_in_index: number;
avail_in: number;
total_in: number;
next_out: Uint8Array;
next_out_index: number;
avail_out: number;
total_out: number;
msg: string;
_adler: number;
_data_type: number;
_reserved: number;
}
export interface DeflateStream extends Stream {
_state: DeflateState;
}
export interface InflateStream extends Stream {
_state: InflateState;
}
export interface State {
_strm: InflateStream | DeflateStream;
_window: Uint8Array;
_gzhead?: GzipHeader;
_w_size: number;
_w_bits: number;
_w_have: number;
_wrap: number;
_bit_buffer: number;
_bit_count: number;
}
export interface DeflateState extends State {
_strm: DeflateStream;
_status: DeflateStatus;
_pending_buffer: Uint8Array;
_pending_buffer_index: number;
_pending_bit_buffer_size: number;
_pending: number;
_pending_out_index: number;
_gzindex: number;
_method: number;
_last_flush: number;
_w_mask: number;
_window_buffer_size: number;
_prev: Uint16Array;
_head: Uint16Array;
_ins_h: number;
_hash_size: number;
_hash_bits: number;
_hash_mask: number;
_hash_shift: number;
_block_start: number;
_match_length: number;
_prev_match: number;
_match_available: number;
_strstart: number;
_match_start: number;
_lookahead: number;
_prev_length: number;
_max_chain_length: number;
_max_lazy_match: number;
_level: number;
_strategy: number;
_good_match: number;
_nice_match: number;
_dyn_ltree: HuffmanTreeNode[];
_dyn_dtree: HuffmanTreeNode[];
_bl_tree: HuffmanTreeNode[];
_l_desc: TreeDescription;
_d_desc: TreeDescription;
_bl_desc: TreeDescription;
_bl_count: Uint16Array;
_heap: Int32Array;
_heap_len: number;
_heap_max: number;
_depth: Uint8Array;
_opt_len: number;
_static_len: number;
_sym_buf: Uint8Array;
_sym_next: number;
_sym_end: number;
_sym_buf_index: number;
_bit_used: number;
_insert: number;
_lit_bufsize: number;
_matches: number;
}
export interface InflateState extends State {
_strm: InflateStream;
_mode: InflateMode;
_last: boolean;
_havedict: boolean;
_flags: number;
_dmax: number;
_check: number;
_total: number;
_w_next: number;
_length: number;
_offset: number;
_extra: number;
_lencode: HuffmanCode[];
_distcode: HuffmanCode[];
_lenbits: number;
_distbits: number;
_ncode: number;
_nlen: number;
_ndist: number;
_have: number;
_next: HuffmanCode[];
_lens: Uint16Array;
_work: Uint16Array;
_codes: HuffmanCode[];
_next_index: number;
_sane: boolean;
_back: number;
_was: number;
_deflate64: boolean;
}
export enum DeflateStatus {
INIT_STATE = 42,
BUSY_STATE = 113,
EXTRA_STATE = 69,
NAME_STATE = 73,
COMMENT_STATE = 91,
HCRC_STATE = 103,
FINISH_STATE = 666,
GZIP_STATE = 57,
}
export interface GzipHeader {
_text: number;
_time: number;
_xflags: number;
_os: number;
_extra: Uint8Array;
_extra_max?: number;
_extra_len: number;
_name: Uint8Array;
_name_max?: number;
_comment: Uint8Array;
_comm_max?: number;
_hcrc: number;
_done: number;
}
export class TreeDescription {
_dyn_tree: ReadonlyArray<HuffmanTreeNode>;
_stat_desc: StaticTreeDescription;
_max_code: number;
constructor(dyn_tree: ReadonlyArray<HuffmanTreeNode>, stat_desc: StaticTreeDescription) {
this._dyn_tree = dyn_tree;
this._stat_desc = stat_desc;
this._max_code = 0;
}
}
export enum InflateMode {
HEAD = 16180,
FLAGS,
TIME,
OS,
EXLEN,
EXTRA,
NAME,
COMMENT,
HCRC,
DICTID,
DICT,
TYPE,
TYPEDO,
STORED,
COPY_,
COPY,
TABLE,
LENLENS,
CODELENS,
LEN_,
LEN,
LENEXT,
DIST,
DISTEXT,
MATCH,
LIT,
CHECK,
LENGTH,
DONE,
BAD,
MEM,
SYNC,
}
export class StaticTreeDescription {
readonly _static_tree: ReadonlyArray<HuffmanTreeNode> | null;
readonly _extra_bits: ArrayLike<number>;
readonly _extra_base: number;
readonly _elems: number;
readonly _max_length: number;
constructor(
static_tree: ReadonlyArray<HuffmanTreeNode> | null,
extra_bits: ArrayLike<number>,
extra_base: number,
elems: number,
max_length: number,
) {
this._static_tree = static_tree;
this._extra_bits = extra_bits;
this._extra_base = extra_base;
this._elems = elems;
this._max_length = max_length;
}
}
export interface HuffmanCode {
_op: number;
_bits: number;
_val: number;
}
export type HuffmanTreeNode = { _freq: number; _code: number; _dad: number; _len: number };
export enum CodeType {
CODES = 0,
LENS = 1,
DISTS = 2,
}