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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | 21x 348x 348x 348x 348x 348x 348x | import { detectValue } from '../detectors/index';
import { EncodeContext } from '../encode';
import { ValueType } from '../types';
import { encodeArray } from './array';
import { encodeArrayBuffer } from './array-buffer';
import { encodeBigint } from './bigint';
import { encodeFalse, encodeTrue } from './boolean';
import { encodeDate } from './date';
import { encodeFunction } from './function';
import { encodeLinkIndex, encodeLinkIndexLast } from './link';
import { encodeMap } from './map';
import { encodeNull } from './null';
import {
encodeFloat,
encodeInt,
encodeNaN,
encodeNegativeInfinity,
encodePositiveInfinity,
} from './number';
import { encodeObject } from './object';
import { encodeRegExp } from './regexp';
import { encodeSet } from './set';
import { encodeString } from './string';
import { encodeSymbol } from './symbol';
import { encodeTypedArray } from './typed-array';
import { encodeUndefined } from './undefined';
import { encodeValueIndex, encodeValueIndexLast } from './value';
export type EncodeMethod = (value: any, context: EncodeContext) => void;
export const ENCODERS = new Map<ValueType, EncodeMethod>([
// eslint-disable-next-line no-use-before-define
[ValueType.ANY, encodeValue],
[ValueType.VALUE_INDEX, encodeValueIndex],
[ValueType.VALUE_INDEX_LAST, encodeValueIndexLast],
[ValueType.LINK_INDEX, encodeLinkIndex],
[ValueType.LINK_INDEX_LAST, encodeLinkIndexLast],
[ValueType.NULL, encodeNull],
[ValueType.UNDEFINED, encodeUndefined],
[ValueType.TRUE, encodeTrue],
[ValueType.FALSE, encodeFalse],
[ValueType.NAN, encodeNaN],
[ValueType.POSITIVE_INFINITY, encodePositiveInfinity],
[ValueType.NEGATIVE_INFINITY, encodeNegativeInfinity],
[ValueType.INT, encodeInt],
[ValueType.FLOAT, encodeFloat],
[ValueType.BIGINT, encodeBigint],
[ValueType.STRING, encodeString],
[ValueType.ARRAY, encodeArray],
[ValueType.OBJECT, encodeObject],
[ValueType.SYMBOL, encodeSymbol],
[ValueType.FUNCTION, encodeFunction],
[ValueType.SET, encodeSet],
[ValueType.MAP, encodeMap],
[ValueType.ARRAY_BUFFER, encodeArrayBuffer],
[ValueType.UINT8_CLAMPED_ARRAY, encodeTypedArray],
[ValueType.UINT8_ARRAY, encodeTypedArray],
[ValueType.UINT16_ARRAY, encodeTypedArray],
[ValueType.UINT32_ARRAY, encodeTypedArray],
[ValueType.INT8_ARRAY, encodeTypedArray],
[ValueType.INT16_ARRAY, encodeTypedArray],
[ValueType.INT32_ARRAY, encodeTypedArray],
[ValueType.FLOAT32_ARRAY, encodeTypedArray],
[ValueType.FLOAT64_ARRAY, encodeTypedArray],
[ValueType.DATA_VIEW, encodeTypedArray],
[ValueType.DATE, encodeDate],
[ValueType.REG_EXP, encodeRegExp],
]);
export function encodeValue(value: any, context: EncodeContext) {
const { writer, encoders, replacer } = context;
value = replacer(value);
const type = detectValue(value, context);
writer.writeUintVar(type);
const encodeMethod = encoders.get(type);
/* istanbul ignore next */
if (!encodeMethod) {
/* istanbul ignore next */
throw `Encoder method not found for type: ${type}`;
}
encodeMethod(value, context);
}
|