123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.MsgPackToJsonConverter = void 0;
- const asString_1 = require("@jsonjoy.com/util/lib/strings/asString");
- const toDataUri_1 = require("../util/buffers/toDataUri");
- class MsgPackToJsonConverter {
- constructor() {
- this.uint8 = new Uint8Array([]);
- this.view = new DataView(this.uint8.buffer);
- this.x = 0;
- }
- reset(uint8) {
- this.x = 0;
- this.uint8 = uint8;
- this.view = new DataView(uint8.buffer, uint8.byteOffset, uint8.length);
- }
- convert(uint8) {
- this.reset(uint8);
- return this.val();
- }
- val() {
- const byte = this.u8();
- if (byte >= 0xe0)
- return (byte - 0x100).toString();
- if (byte <= 0xbf) {
- if (byte < 0x90) {
- if (byte <= 0b1111111)
- return byte.toString();
- return this.obj(byte & 0b1111);
- }
- else {
- if (byte < 0xa0)
- return this.arr(byte & 0b1111);
- else
- return this.str(byte & 0b11111);
- }
- }
- if (byte <= 0xd0) {
- if (byte <= 0xc8) {
- if (byte <= 0xc4) {
- if (byte <= 0xc2)
- return byte === 0xc2 ? 'false' : 'null';
- else
- return byte === 0xc4 ? this.bin(this.u8()) : 'true';
- }
- else {
- if (byte <= 0xc6)
- return byte === 0xc6 ? this.bin(this.u32()) : this.bin(this.u16());
- else
- return byte === 0xc8 ? this.ext(this.u16()) : this.ext(this.u8());
- }
- }
- else {
- return byte <= 0xcc
- ? byte <= 0xca
- ? byte === 0xca
- ? this.f32().toString()
- : this.ext(this.u32())
- : byte === 0xcc
- ? this.u8().toString()
- : this.f64().toString()
- : byte <= 0xce
- ? byte === 0xce
- ? this.u32().toString()
- : this.u16().toString()
- : byte === 0xd0
- ? this.i8().toString()
- : (this.u32() * 4294967296 + this.u32()).toString();
- }
- }
- else if (byte <= 0xd8) {
- return byte <= 0xd4
- ? byte <= 0xd2
- ? byte === 0xd2
- ? this.i32().toString()
- : this.i16().toString()
- : byte === 0xd4
- ? this.ext(1)
- : (this.i32() * 4294967296 + this.i32()).toString()
- : byte <= 0xd6
- ? byte === 0xd6
- ? this.ext(4)
- : this.ext(2)
- : byte === 0xd8
- ? this.ext(16)
- : this.ext(8);
- }
- else {
- switch (byte) {
- case 0xd9:
- return this.str(this.u8());
- case 0xda:
- return this.str(this.u16());
- case 0xdb:
- return this.str(this.u32());
- case 0xdc:
- return this.arr(this.u16());
- case 0xdd:
- return this.arr(this.u32());
- case 0xde:
- return this.obj(this.u16());
- case 0xdf:
- return this.obj(this.u32());
- }
- }
- return '';
- }
- str(size) {
- const uint8 = this.uint8;
- const end = this.x + size;
- let x = this.x;
- let str = '';
- while (x < end) {
- const b1 = uint8[x++];
- if ((b1 & 0x80) === 0) {
- str += String.fromCharCode(b1);
- continue;
- }
- else if ((b1 & 0xe0) === 0xc0) {
- str += String.fromCharCode(((b1 & 0x1f) << 6) | (uint8[x++] & 0x3f));
- }
- else if ((b1 & 0xf0) === 0xe0) {
- str += String.fromCharCode(((b1 & 0x1f) << 12) | ((uint8[x++] & 0x3f) << 6) | (uint8[x++] & 0x3f));
- }
- else if ((b1 & 0xf8) === 0xf0) {
- const b2 = uint8[x++] & 0x3f;
- const b3 = uint8[x++] & 0x3f;
- const b4 = uint8[x++] & 0x3f;
- let code = ((b1 & 0x07) << 0x12) | (b2 << 0x0c) | (b3 << 0x06) | b4;
- if (code > 0xffff) {
- code -= 0x10000;
- str += String.fromCharCode(((code >>> 10) & 0x3ff) | 0xd800);
- code = 0xdc00 | (code & 0x3ff);
- }
- str += String.fromCharCode(code);
- }
- else {
- str += String.fromCharCode(b1);
- }
- }
- this.x = end;
- return (0, asString_1.asString)(str);
- }
- obj(size) {
- let str = '{';
- for (let i = 0; i < size; i++) {
- if (i > 0)
- str += ',';
- str += this.key();
- str += ':';
- str += this.val();
- }
- return (str + '}');
- }
- key() {
- return this.val();
- }
- arr(size) {
- let str = '[';
- for (let i = 0; i < size; i++) {
- if (i > 0)
- str += ',';
- str += this.val();
- }
- return (str + ']');
- }
- bin(size) {
- const end = this.x + size;
- const buf = this.uint8.subarray(this.x, end);
- this.x = end;
- return '"' + (0, toDataUri_1.toDataUri)(buf) + '"';
- }
- ext(size) {
- const ext = this.u8();
- const end = this.x + size;
- const buf = this.uint8.subarray(this.x, end);
- this.x = end;
- return '"' + (0, toDataUri_1.toDataUri)(buf, { ext }) + '"';
- }
- u8() {
- return this.view.getUint8(this.x++);
- }
- u16() {
- const num = this.view.getUint16(this.x);
- this.x += 2;
- return num;
- }
- u32() {
- const num = this.view.getUint32(this.x);
- this.x += 4;
- return num;
- }
- i8() {
- return this.view.getInt8(this.x++);
- }
- i16() {
- const num = this.view.getInt16(this.x);
- this.x += 2;
- return num;
- }
- i32() {
- const num = this.view.getInt32(this.x);
- this.x += 4;
- return num;
- }
- f32() {
- const pos = this.x;
- this.x += 4;
- return this.view.getFloat32(pos);
- }
- f64() {
- const pos = this.x;
- this.x += 8;
- return this.view.getFloat64(pos);
- }
- }
- exports.MsgPackToJsonConverter = MsgPackToJsonConverter;
- //# sourceMappingURL=MsgPackToJsonConverter.js.map
|