123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- "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
|