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); } |