Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 73x 73x 73x 2x 73x 72x 72x 71x 1x 70x | /* eslint-disable no-use-before-define */
import { BufferReader } from '@xobj/buffer';
import { decodeHeader } from './decoders/header';
import { DecodeMethod, DECODERS, decodeValue } from './decoders/index';
import { getReplacer, ReplacerMethod, ReplacerType } from './replacer';
import { FloatQuality, ValueType } from './types';
import { VERSION } from './version';
export interface DecodeContext {
readonly reader: BufferReader;
readonly values: any[];
readonly links: any[];
readonly decoders: Map<ValueType, DecodeMethod>;
readonly version: number;
readonly floatQuality: FloatQuality;
readonly replacer: ReplacerMethod;
}
export interface DecodeOptions {
readonly customDecode?: DecodeMethod;
readonly replacer?: ReplacerType;
}
export function decode(buffer: ArrayBuffer, options?: DecodeOptions): any {
const reader = new BufferReader(buffer);
const decoders = new Map(DECODERS);
if (options?.customDecode) {
decoders.set(ValueType.CUSTOM, options.customDecode);
}
const replacer = getReplacer(options?.replacer);
const context: DecodeContext = {
reader,
values: [],
links: [],
decoders,
version: 0,
floatQuality: 'double',
replacer,
};
decodeHeader(context);
if (context.version !== VERSION) {
throw `Unexpected version: ${context.version}, required version: ${VERSION}`;
}
return decodeValue(context);
}
|