123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.stringify = exports.wrapBinary = exports.stringifyBinary = exports.parse = exports.unwrapBinary = void 0;
- const msgpack_1 = require("../msgpack");
- const fromBase64_1 = require("@jsonjoy.com/base64/lib/fromBase64");
- const toBase64_1 = require("@jsonjoy.com/base64/lib/toBase64");
- const isUint8Array_1 = require("@jsonjoy.com/util/lib/buffers/isUint8Array");
- const constants_1 = require("./constants");
- const binUriStartLength = constants_1.binUriStart.length;
- const msgPackUriStartLength = constants_1.msgPackUriStart.length;
- const msgPackExtStartLength = constants_1.msgPackExtStart.length;
- const minDataUri = Math.min(binUriStartLength, msgPackUriStartLength);
- const parseExtDataUri = (uri) => {
- uri = uri.substring(msgPackExtStartLength);
- const commaIndex = uri.indexOf(',');
- if (commaIndex === -1)
- throw new Error('INVALID_EXT_DATA_URI');
- const typeString = uri.substring(0, commaIndex);
- const buf = (0, fromBase64_1.fromBase64)(uri.substring(commaIndex + 1));
- return new msgpack_1.JsonPackExtension(Number(typeString), buf);
- };
- const unwrapBinary = (value) => {
- if (!value)
- return value;
- if (value instanceof Array) {
- const len = value.length;
- for (let i = 0; i < len; i++) {
- const item = value[i];
- switch (typeof item) {
- case 'object': {
- (0, exports.unwrapBinary)(item);
- continue;
- }
- case 'string': {
- if (item.length < minDataUri)
- continue;
- if (item.substring(0, binUriStartLength) === constants_1.binUriStart)
- value[i] = (0, fromBase64_1.fromBase64)(item.substring(binUriStartLength));
- else if (item.substring(0, msgPackUriStartLength) === constants_1.msgPackUriStart)
- value[i] = new msgpack_1.JsonPackValue((0, fromBase64_1.fromBase64)(item.substring(msgPackUriStartLength)));
- else if (item.substring(0, msgPackExtStartLength) === constants_1.msgPackExtStart)
- value[i] = parseExtDataUri(item);
- }
- }
- }
- return value;
- }
- if (typeof value === 'object') {
- for (const key in value) {
- const item = value[key];
- switch (typeof item) {
- case 'object': {
- (0, exports.unwrapBinary)(item);
- continue;
- }
- case 'string': {
- if (item.length < minDataUri)
- continue;
- if (item.substring(0, binUriStartLength) === constants_1.binUriStart) {
- const buf = (0, fromBase64_1.fromBase64)(item.substring(binUriStartLength));
- value[key] = buf;
- }
- else if (item.substring(0, msgPackUriStartLength) === constants_1.msgPackUriStart) {
- value[key] = new msgpack_1.JsonPackValue((0, fromBase64_1.fromBase64)(item.substring(msgPackUriStartLength)));
- }
- else if (item.substring(0, msgPackExtStartLength) === constants_1.msgPackExtStart)
- value[key] = parseExtDataUri(item);
- }
- }
- }
- return value;
- }
- if (typeof value === 'string') {
- if (value.length < minDataUri)
- return value;
- if (value.substring(0, binUriStartLength) === constants_1.binUriStart)
- return (0, fromBase64_1.fromBase64)(value.substring(binUriStartLength));
- if (value.substring(0, msgPackUriStartLength) === constants_1.msgPackUriStart)
- return new msgpack_1.JsonPackValue((0, fromBase64_1.fromBase64)(value.substring(msgPackUriStartLength)));
- if (value.substring(0, msgPackExtStartLength) === constants_1.msgPackExtStart)
- return parseExtDataUri(value);
- else
- return value;
- }
- return value;
- };
- exports.unwrapBinary = unwrapBinary;
- const parse = (json) => {
- const parsed = JSON.parse(json);
- return (0, exports.unwrapBinary)(parsed);
- };
- exports.parse = parse;
- const stringifyBinary = (value) => (constants_1.binUriStart + (0, toBase64_1.toBase64)(value));
- exports.stringifyBinary = stringifyBinary;
- const wrapBinary = (value) => {
- if (!value)
- return value;
- if ((0, isUint8Array_1.isUint8Array)(value))
- return (0, exports.stringifyBinary)(value);
- if (value instanceof Array) {
- const out = [];
- const len = value.length;
- for (let i = 0; i < len; i++) {
- const item = value[i];
- out.push(!item || typeof item !== 'object' ? item : (0, exports.wrapBinary)(item));
- }
- return out;
- }
- if (value instanceof msgpack_1.JsonPackValue)
- return constants_1.msgPackUriStart + (0, toBase64_1.toBase64)(value.val);
- if (value instanceof msgpack_1.JsonPackExtension)
- return constants_1.msgPackExtStart + value.tag + ',' + (0, toBase64_1.toBase64)(value.val);
- if (typeof value === 'object') {
- const out = {};
- for (const key in value) {
- const item = value[key];
- out[key] = !item || typeof item !== 'object' ? item : (0, exports.wrapBinary)(item);
- }
- return out;
- }
- return value;
- };
- exports.wrapBinary = wrapBinary;
- const stringify = (value, replacer, space) => {
- const wrapped = (0, exports.wrapBinary)(value);
- return JSON.stringify(wrapped, replacer, space);
- };
- exports.stringify = stringify;
- //# sourceMappingURL=codec.js.map
|