node-ejs-renderer/node_modules/@jsonjoy.com/json-pack/lib/ubjson/UbjsonDecoder.js

128 lines
4.1 KiB
JavaScript
Raw Permalink Normal View History

2024-06-09 13:55:01 -04:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UbjsonDecoder = void 0;
const Reader_1 = require("@jsonjoy.com/util/lib/buffers/Reader");
const JsonPackExtension_1 = require("../JsonPackExtension");
class UbjsonDecoder {
constructor() {
this.reader = new Reader_1.Reader();
}
read(uint8) {
this.reader.reset(uint8);
return this.readAny();
}
decode(uint8) {
this.reader.reset(uint8);
return this.readAny();
}
readAny() {
const reader = this.reader;
const octet = reader.u8();
switch (octet) {
case 0x5a:
return null;
case 0x54:
return true;
case 0x46:
return false;
case 0x55:
return reader.u8();
case 0x69:
return reader.i8();
case 0x49: {
const int = reader.view.getInt16(reader.x, false);
reader.x += 2;
return int;
}
case 0x6c: {
const int = reader.view.getInt32(reader.x, false);
reader.x += 4;
return int;
}
case 0x64: {
const num = reader.view.getFloat32(reader.x, false);
reader.x += 4;
return num;
}
case 0x44: {
const num = reader.view.getFloat64(reader.x, false);
reader.x += 8;
return num;
}
case 0x4c: {
const num = reader.view.getBigInt64(reader.x, false);
reader.x += 8;
return num;
}
case 0x53:
return reader.utf8(+this.readAny());
case 0x43:
return String.fromCharCode(reader.u8());
case 0x5b: {
const uint8 = reader.uint8;
const x = reader.x;
if (uint8[x] === 0x24 && uint8[x + 1] === 0x55 && uint8[x + 2] === 0x23) {
reader.x += 3;
const size = +this.readAny();
return reader.buf(size);
}
let type = -1;
if (uint8[x] === 0x24) {
reader.x++;
type = reader.u8();
}
let count = -1;
if (uint8[x] === 0x23) {
reader.x++;
count = reader.u8();
}
if (uint8[x] === 0x24) {
reader.x++;
type = reader.u8();
}
if (count >= 0) {
let wordSize = 1;
switch (type) {
case 0x49:
wordSize = 2;
break;
case 0x6c:
case 0x64:
wordSize = 4;
break;
case 0x44:
case 0x4c:
wordSize = 8;
break;
}
return new JsonPackExtension_1.JsonPackExtension(type, reader.buf(count * wordSize));
}
else {
const arr = [];
while (uint8[reader.x] !== 0x5d)
arr.push(this.readAny());
reader.x++;
return arr;
}
}
case 0x7b: {
const uint8 = reader.uint8;
const obj = {};
while (uint8[reader.x] !== 0x7d) {
const keySize = +this.readAny();
const key = reader.utf8(keySize);
if (key === '__proto__')
throw 6;
obj[key] = this.readAny();
}
reader.x++;
return obj;
}
case 0x4e:
return undefined;
}
return;
}
}
exports.UbjsonDecoder = UbjsonDecoder;
//# sourceMappingURL=UbjsonDecoder.js.map