node-ejs-renderer/node_modules/@jsonjoy.com/json-pack/lib/util/DecompressionTable.js

96 lines
3.3 KiB
JavaScript
Raw Permalink Normal View History

2024-06-09 13:55:01 -04:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DecompressionTable = void 0;
const JsonPackExtension_1 = require("../JsonPackExtension");
const isSafeInteger = Number.isSafeInteger;
class DecompressionTable {
constructor() {
this.table = [];
}
importTable(rleTable) {
const length = rleTable.length;
if (!length)
return;
const table = this.table;
const first = rleTable[0];
table.push(first);
let i = 1;
if (isSafeInteger(first)) {
let prev = first;
let value;
while (i < length) {
value = rleTable[i];
if (isSafeInteger(value)) {
prev = prev + value;
table.push(prev);
i++;
}
else {
break;
}
}
}
while (i < length)
table.push(rleTable[i++]);
}
getLiteral(index) {
const table = this.table;
return table[index];
}
decompress(value) {
switch (typeof value) {
case 'number': {
return this.getLiteral(value);
}
case 'object': {
if (!value)
return null;
const constructor = value.constructor;
switch (constructor) {
case Object: {
const obj = value;
const newObj = {};
for (const key in obj)
newObj[String(this.getLiteral(Number(key)))] = this.decompress(obj[key]);
return newObj;
}
case Array: {
const arr = value;
const newArr = [];
const len = arr.length;
for (let i = 0; i < len; i++)
newArr.push(this.decompress(arr[i]));
return newArr;
}
case Map: {
const map = value;
const newMap = new Map();
map.forEach((value, key) => {
newMap.set(this.decompress(key), this.decompress(value));
});
return newMap;
}
case Set: {
const set = value;
const newSet = new Set();
set.forEach((value) => {
newSet.add(this.decompress(value));
});
break;
}
case JsonPackExtension_1.JsonPackExtension: {
const ext = value;
const newExt = new JsonPackExtension_1.JsonPackExtension(Number(this.getLiteral(ext.tag)), this.decompress(ext.val));
return newExt;
}
}
return value;
}
default: {
return value;
}
}
}
}
exports.DecompressionTable = DecompressionTable;
//# sourceMappingURL=DecompressionTable.js.map