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 54 55 56 57 58 59 60 61 62 | 73x 73x 73x 73x 2x 73x 73x 2x 73x 73x 73x 73x 73x 73x | /* eslint-disable no-use-before-define */ import { BufferWriter, IBufferWriter } from '@xobj/buffer'; import { DetectMethod, DETECTORS } from './detectors/index'; import { EncodeMethod, ENCODERS, encodeValue } from './encoders/index'; import { encodeHeader } from './encoders/header'; import { FloatQuality, ValueType } from './types'; import { getReplacer, ReplacerMethod, ReplacerType } from './replacer'; export interface EncodeContext { readonly writer: IBufferWriter, readonly values: any[]; readonly links: any[]; readonly detectors: DetectMethod[]; readonly encoders: Map<ValueType, EncodeMethod>, readonly floatQuality: FloatQuality; readonly replacer: ReplacerMethod; } export interface EncodeOptions { readonly bufferSize?: number; readonly customDetect?: DetectMethod; readonly customEncode?: EncodeMethod; readonly floatQuality?: FloatQuality; readonly replacer?: ReplacerType; } export function encode(value: any, options?: EncodeOptions): ArrayBuffer { const bufferSize = options?.bufferSize ?? 1024; const writer = new BufferWriter(bufferSize); const detectors = DETECTORS.slice(); if (options?.customDetect) { detectors.unshift(options.customDetect); } const encoders = new Map(ENCODERS); if (options?.customEncode) { encoders.set(ValueType.CUSTOM, options?.customEncode); } const floatQuality = options?.floatQuality ?? 'double'; const replacer = getReplacer(options?.replacer); const context: EncodeContext = { writer, values: [], links: [], detectors, encoders, floatQuality, replacer, }; encodeHeader(context); encodeValue(value, context); return writer.buffer; } |