123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.MsgPackDecoderFast = void 0;
- const tslib_1 = require("tslib");
- const JsonPackExtension_1 = require("../JsonPackExtension");
- const Reader_1 = require("@jsonjoy.com/util/lib/buffers/Reader");
- const sharedCachedUtf8Decoder_1 = tslib_1.__importDefault(require("@jsonjoy.com/util/lib/buffers/utf8/sharedCachedUtf8Decoder"));
- class MsgPackDecoderFast {
- constructor(reader = new Reader_1.Reader(), keyDecoder = sharedCachedUtf8Decoder_1.default) {
- this.reader = reader;
- this.keyDecoder = keyDecoder;
- }
- decode(uint8) {
- this.reader.reset(uint8);
- return this.val();
- }
- read(uint8) {
- this.reader.reset(uint8);
- return this.val();
- }
- val() {
- const reader = this.reader;
- const byte = reader.u8();
- if (byte >= 0xe0)
- return byte - 0x100;
- if (byte <= 0xbf) {
- if (byte < 0x90) {
- if (byte <= 0b1111111)
- return byte;
- return this.obj(byte & 0b1111);
- }
- else {
- if (byte < 0xa0)
- return this.arr(byte & 0b1111);
- else
- return reader.utf8(byte & 0b11111);
- }
- }
- if (byte <= 0xd0) {
- if (byte <= 0xc8) {
- if (byte <= 0xc4) {
- if (byte <= 0xc2)
- return byte === 0xc2 ? false : byte === 0xc0 ? null : undefined;
- else
- return byte === 0xc4 ? reader.buf(reader.u8()) : true;
- }
- else {
- if (byte <= 0xc6)
- return byte === 0xc6 ? reader.buf(reader.u32()) : reader.buf(reader.u16());
- else
- return byte === 0xc8 ? this.ext(reader.u16()) : this.ext(reader.u8());
- }
- }
- else {
- return byte <= 0xcc
- ? byte <= 0xca
- ? byte === 0xca
- ? reader.f32()
- : this.ext(reader.u32())
- : byte === 0xcc
- ? reader.u8()
- : reader.f64()
- : byte <= 0xce
- ? byte === 0xce
- ? reader.u32()
- : reader.u16()
- : byte === 0xd0
- ? reader.i8()
- : reader.u32() * 4294967296 + reader.u32();
- }
- }
- else if (byte <= 0xd8) {
- return byte <= 0xd4
- ? byte <= 0xd2
- ? byte === 0xd2
- ? reader.i32()
- : reader.i16()
- : byte === 0xd4
- ? this.ext(1)
- : reader.i32() * 4294967296 + reader.u32()
- : byte <= 0xd6
- ? byte === 0xd6
- ? this.ext(4)
- : this.ext(2)
- : byte === 0xd8
- ? this.ext(16)
- : this.ext(8);
- }
- else {
- switch (byte) {
- case 0xd9:
- return reader.utf8(reader.u8());
- case 0xda:
- return reader.utf8(reader.u16());
- case 0xdb:
- return reader.utf8(reader.u32());
- case 0xdc:
- return this.arr(reader.u16());
- case 0xdd:
- return this.arr(reader.u32());
- case 0xde:
- return this.obj(reader.u16());
- case 0xdf:
- return this.obj(reader.u32());
- }
- }
- return undefined;
- }
- str() {
- const reader = this.reader;
- const byte = reader.u8();
- if (byte >> 5 === 0b101)
- return reader.utf8(byte & 0b11111);
- switch (byte) {
- case 0xd9:
- return reader.utf8(reader.u8());
- case 0xda:
- return reader.utf8(reader.u16());
- case 0xdb:
- return reader.utf8(reader.u32());
- }
- return undefined;
- }
- obj(size) {
- const obj = {};
- for (let i = 0; i < size; i++) {
- const key = this.key();
- if (key === '__proto__')
- throw 6;
- obj[key] = this.val();
- }
- return obj;
- }
- key() {
- const reader = this.reader;
- const byte = reader.view.getUint8(reader.x);
- if (byte >= 0b10100000 && byte <= 0b10111111) {
- const size = byte & 0b11111;
- const key = this.keyDecoder.decode(reader.uint8, reader.x + 1, size);
- reader.x += 1 + size;
- return key;
- }
- else if (byte === 0xd9) {
- const size = reader.view.getUint8(reader.x + 1);
- if (size < 32) {
- const key = this.keyDecoder.decode(reader.uint8, reader.x + 2, size);
- reader.x += 2 + size;
- return key;
- }
- }
- reader.x++;
- switch (byte) {
- case 0xd9:
- return reader.utf8(reader.u8());
- case 0xda:
- return reader.utf8(reader.u16());
- case 0xdb:
- return reader.utf8(reader.u32());
- default:
- return '';
- }
- }
- arr(size) {
- const arr = [];
- for (let i = 0; i < size; i++)
- arr.push(this.val());
- return arr;
- }
- ext(size) {
- const reader = this.reader;
- const type = reader.u8();
- const end = reader.x + size;
- const buf = reader.uint8.subarray(reader.x, end);
- reader.x = end;
- return new JsonPackExtension_1.JsonPackExtension(type, buf);
- }
- back(bytes) {
- this.reader.x -= bytes;
- }
- }
- exports.MsgPackDecoderFast = MsgPackDecoderFast;
- //# sourceMappingURL=MsgPackDecoderFast.js.map
|