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