@jsonjoy.com/json-pack 1.13.0 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,10 @@
1
+ import { StreamingOctetReader } from '@jsonjoy.com/util/lib/buffers/StreamingOctetReader';
2
+ import { WsCloseFrame, WsFrameHeader } from './frames';
3
+ export declare class WsFrameDecoder {
4
+ readonly reader: StreamingOctetReader;
5
+ push(uint8: Uint8Array): void;
6
+ readFrameHeader(): WsFrameHeader | undefined;
7
+ readFrameData(frame: WsFrameHeader, remaining: number, dst: Uint8Array, pos: number): number;
8
+ copyFrameData(frame: WsFrameHeader, dst: Uint8Array, pos: number): void;
9
+ readCloseFrameData(frame: WsCloseFrame): void;
10
+ }
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WsFrameDecoder = void 0;
4
+ const StreamingOctetReader_1 = require("@jsonjoy.com/util/lib/buffers/StreamingOctetReader");
5
+ const constants_1 = require("./constants");
6
+ const errors_1 = require("./errors");
7
+ const frames_1 = require("./frames");
8
+ class WsFrameDecoder {
9
+ constructor() {
10
+ this.reader = new StreamingOctetReader_1.StreamingOctetReader();
11
+ }
12
+ push(uint8) {
13
+ this.reader.push(uint8);
14
+ }
15
+ readFrameHeader() {
16
+ try {
17
+ const reader = this.reader;
18
+ if (reader.size() < 2)
19
+ return undefined;
20
+ const b0 = reader.u8();
21
+ const b1 = reader.u8();
22
+ const fin = (b0 >>> 7);
23
+ const opcode = b0 & 0b1111;
24
+ const maskBit = b1 >>> 7;
25
+ let length = b1 & 0b01111111;
26
+ if (length === 126) {
27
+ if (reader.size() < 2)
28
+ return undefined;
29
+ length = (reader.u8() << 8) | reader.u8();
30
+ }
31
+ else if (length === 127) {
32
+ if (reader.size() < 8)
33
+ return undefined;
34
+ reader.skip(4);
35
+ length = reader.u32();
36
+ }
37
+ let mask;
38
+ if (maskBit) {
39
+ if (reader.size() < 4)
40
+ return undefined;
41
+ mask = [reader.u8(), reader.u8(), reader.u8(), reader.u8()];
42
+ }
43
+ if (opcode >= constants_1.WsFrameOpcode.MIN_CONTROL_OPCODE) {
44
+ switch (opcode) {
45
+ case constants_1.WsFrameOpcode.CLOSE: {
46
+ return new frames_1.WsCloseFrame(fin, opcode, length, mask, 0, '');
47
+ }
48
+ case constants_1.WsFrameOpcode.PING: {
49
+ if (length > 125)
50
+ throw new errors_1.WsFrameDecodingError();
51
+ const data = mask ? reader.bufXor(length, mask, 0) : reader.buf(length);
52
+ return new frames_1.WsPingFrame(fin, opcode, length, mask, data);
53
+ }
54
+ case constants_1.WsFrameOpcode.PONG: {
55
+ if (length > 125)
56
+ throw new errors_1.WsFrameDecodingError();
57
+ const data = mask ? reader.bufXor(length, mask, 0) : reader.buf(length);
58
+ return new frames_1.WsPongFrame(fin, opcode, length, mask, data);
59
+ }
60
+ default: {
61
+ throw new errors_1.WsFrameDecodingError();
62
+ }
63
+ }
64
+ }
65
+ return new frames_1.WsFrameHeader(fin, opcode, length, mask);
66
+ }
67
+ catch (err) {
68
+ if (err instanceof RangeError)
69
+ return undefined;
70
+ throw err;
71
+ }
72
+ }
73
+ readFrameData(frame, remaining, dst, pos) {
74
+ const reader = this.reader;
75
+ const mask = frame.mask;
76
+ const readSize = Math.min(reader.size(), remaining);
77
+ if (!mask)
78
+ reader.copy(readSize, dst, pos);
79
+ else {
80
+ const alreadyRead = frame.length - remaining;
81
+ reader.copyXor(readSize, dst, pos, mask, alreadyRead);
82
+ }
83
+ return remaining - readSize;
84
+ }
85
+ copyFrameData(frame, dst, pos) {
86
+ const reader = this.reader;
87
+ const mask = frame.mask;
88
+ const readSize = frame.length;
89
+ if (!mask)
90
+ reader.copy(readSize, dst, pos);
91
+ else
92
+ reader.copyXor(readSize, dst, pos, mask, 0);
93
+ }
94
+ readCloseFrameData(frame) {
95
+ let length = frame.length;
96
+ if (length > 125)
97
+ throw new errors_1.WsFrameDecodingError();
98
+ let code = 0;
99
+ let reason = '';
100
+ if (length > 0) {
101
+ if (length < 2)
102
+ throw new errors_1.WsFrameDecodingError();
103
+ const reader = this.reader;
104
+ const mask = frame.mask;
105
+ const octet1 = reader.u8() ^ (mask ? mask[0] : 0);
106
+ const octet2 = reader.u8() ^ (mask ? mask[1] : 0);
107
+ code = (octet1 << 8) | octet2;
108
+ length -= 2;
109
+ if (length)
110
+ reason = reader.utf8(length, mask ?? [0, 0, 0, 0], 2);
111
+ }
112
+ frame.code = code;
113
+ frame.reason = reason;
114
+ }
115
+ }
116
+ exports.WsFrameDecoder = WsFrameDecoder;
117
+ //# sourceMappingURL=WsFrameDecoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WsFrameDecoder.js","sourceRoot":"","sources":["../../src/ws/WsFrameDecoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { WsFrameOpcode } from './constants';
2
+ import type { IWriter, IWriterGrowable } from '@jsonjoy.com/util/lib/buffers';
3
+ export declare class WsFrameEncoder<W extends IWriter & IWriterGrowable = IWriter & IWriterGrowable> {
4
+ readonly writer: W;
5
+ constructor(writer?: W);
6
+ encodePing(data: Uint8Array | null): Uint8Array;
7
+ encodePong(data: Uint8Array | null): Uint8Array;
8
+ encodeClose(reason: string, code?: number): Uint8Array;
9
+ encodeHdr(fin: 0 | 1, opcode: WsFrameOpcode, length: number, mask: number): Uint8Array;
10
+ encodeDataMsgHdrFast(length: number): Uint8Array;
11
+ writePing(data: Uint8Array | null): void;
12
+ writePong(data: Uint8Array | null): void;
13
+ writeClose(reason: string, code?: number): void;
14
+ writeHdr(fin: 0 | 1, opcode: WsFrameOpcode, length: number, mask: number): void;
15
+ writeDataMsgHdrFast(length: number): void;
16
+ writeBufXor(buf: Uint8Array, mask: number): void;
17
+ }
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WsFrameEncoder = void 0;
4
+ const Writer_1 = require("@jsonjoy.com/util/lib/buffers/Writer");
5
+ const constants_1 = require("./constants");
6
+ const errors_1 = require("./errors");
7
+ const maskBuf = new Uint8Array(4);
8
+ const maskBufView = new DataView(maskBuf.buffer, maskBuf.byteOffset, maskBuf.byteLength);
9
+ class WsFrameEncoder {
10
+ constructor(writer = new Writer_1.Writer()) {
11
+ this.writer = writer;
12
+ }
13
+ encodePing(data) {
14
+ this.writePing(data);
15
+ return this.writer.flush();
16
+ }
17
+ encodePong(data) {
18
+ this.writePong(data);
19
+ return this.writer.flush();
20
+ }
21
+ encodeClose(reason, code = 0) {
22
+ this.writeClose(reason, code);
23
+ return this.writer.flush();
24
+ }
25
+ encodeHdr(fin, opcode, length, mask) {
26
+ this.writeHdr(fin, opcode, length, mask);
27
+ return this.writer.flush();
28
+ }
29
+ encodeDataMsgHdrFast(length) {
30
+ this.writeDataMsgHdrFast(length);
31
+ return this.writer.flush();
32
+ }
33
+ writePing(data) {
34
+ let length = 0;
35
+ if (data && (length = data.length)) {
36
+ this.writeHdr(1, constants_1.WsFrameOpcode.PING, length, 0);
37
+ this.writer.buf(data, length);
38
+ }
39
+ else {
40
+ this.writeHdr(1, constants_1.WsFrameOpcode.PING, 0, 0);
41
+ }
42
+ }
43
+ writePong(data) {
44
+ let length = 0;
45
+ if (data && (length = data.length)) {
46
+ this.writeHdr(1, constants_1.WsFrameOpcode.PONG, length, 0);
47
+ this.writer.buf(data, length);
48
+ }
49
+ else {
50
+ this.writeHdr(1, constants_1.WsFrameOpcode.PONG, 0, 0);
51
+ }
52
+ }
53
+ writeClose(reason, code = 0) {
54
+ if (reason || code) {
55
+ const reasonLength = reason.length;
56
+ const length = 2 + reasonLength;
57
+ const writer = this.writer;
58
+ writer.ensureCapacity(2 +
59
+ 2 +
60
+ reasonLength * 4);
61
+ const lengthX = writer.x + 1;
62
+ this.writeHdr(1, constants_1.WsFrameOpcode.CLOSE, length, 0);
63
+ writer.u16(code);
64
+ if (reasonLength) {
65
+ const utf8Length = writer.utf8(reason);
66
+ if (utf8Length !== reasonLength) {
67
+ if (utf8Length > 126 - 2)
68
+ throw new errors_1.WsFrameEncodingError();
69
+ writer.uint8[lengthX] = (writer.uint8[lengthX] & 0b10000000) | (utf8Length + 2);
70
+ }
71
+ }
72
+ }
73
+ else {
74
+ this.writeHdr(1, constants_1.WsFrameOpcode.CLOSE, 0, 0);
75
+ }
76
+ }
77
+ writeHdr(fin, opcode, length, mask) {
78
+ const octet1 = (fin << 7) | opcode;
79
+ const maskBit = mask ? 0b10000000 : 0b00000000;
80
+ const writer = this.writer;
81
+ if (length < 126) {
82
+ const octet2 = maskBit | length;
83
+ writer.u16((octet1 << 8) | octet2);
84
+ }
85
+ else if (length < 0x10000) {
86
+ const octet2 = maskBit | 126;
87
+ writer.u32(((octet1 << 8) | octet2) * 0x10000 + length);
88
+ }
89
+ else {
90
+ const octet2 = maskBit | 127;
91
+ writer.u16((octet1 << 8) | octet2);
92
+ writer.u32(0);
93
+ writer.u32(length);
94
+ }
95
+ if (mask)
96
+ writer.u32(mask);
97
+ }
98
+ writeDataMsgHdrFast(length) {
99
+ const writer = this.writer;
100
+ if (length < 126) {
101
+ writer.u16(33280 + length);
102
+ return;
103
+ }
104
+ if (length < 0x10000) {
105
+ writer.u32(2189295616 + length);
106
+ return;
107
+ }
108
+ writer.u16(33407);
109
+ writer.u32(0);
110
+ writer.u32(length);
111
+ }
112
+ writeBufXor(buf, mask) {
113
+ maskBufView.setUint32(0, mask, false);
114
+ const writer = this.writer;
115
+ const length = buf.length;
116
+ writer.ensureCapacity(length);
117
+ let x = writer.x;
118
+ const uint8 = writer.uint8;
119
+ for (let i = 0; i < length; i++)
120
+ uint8[x++] = buf[i] ^ maskBuf[i & 3];
121
+ writer.x = x;
122
+ }
123
+ }
124
+ exports.WsFrameEncoder = WsFrameEncoder;
125
+ //# sourceMappingURL=WsFrameEncoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WsFrameEncoder.js","sourceRoot":"","sources":["../../src/ws/WsFrameEncoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare enum WsFrameOpcode {
2
+ CONTINUE = 0,
3
+ TEXT = 1,
4
+ BINARY = 2,
5
+ MIN_CONTROL_OPCODE = 8,
6
+ CLOSE = 8,
7
+ PING = 9,
8
+ PONG = 10
9
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WsFrameOpcode = void 0;
4
+ var WsFrameOpcode;
5
+ (function (WsFrameOpcode) {
6
+ WsFrameOpcode[WsFrameOpcode["CONTINUE"] = 0] = "CONTINUE";
7
+ WsFrameOpcode[WsFrameOpcode["TEXT"] = 1] = "TEXT";
8
+ WsFrameOpcode[WsFrameOpcode["BINARY"] = 2] = "BINARY";
9
+ WsFrameOpcode[WsFrameOpcode["MIN_CONTROL_OPCODE"] = 8] = "MIN_CONTROL_OPCODE";
10
+ WsFrameOpcode[WsFrameOpcode["CLOSE"] = 8] = "CLOSE";
11
+ WsFrameOpcode[WsFrameOpcode["PING"] = 9] = "PING";
12
+ WsFrameOpcode[WsFrameOpcode["PONG"] = 10] = "PONG";
13
+ })(WsFrameOpcode || (exports.WsFrameOpcode = WsFrameOpcode = {}));
14
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/ws/constants.ts"],"names":[],"mappings":";;;AAAA,IAAY,aAeX;AAfD,WAAY,aAAa;IAEvB,yDAAY,CAAA;IAGZ,iDAAQ,CAAA;IACR,qDAAU,CAAA;IAIV,6EAAsB,CAAA;IAEtB,mDAAS,CAAA;IACT,iDAAQ,CAAA;IACR,kDAAS,CAAA;AACX,CAAC,EAfW,aAAa,6BAAb,aAAa,QAexB"}
@@ -0,0 +1,6 @@
1
+ export declare class WsFrameDecodingError extends Error {
2
+ constructor();
3
+ }
4
+ export declare class WsFrameEncodingError extends Error {
5
+ constructor();
6
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WsFrameEncodingError = exports.WsFrameDecodingError = void 0;
4
+ class WsFrameDecodingError extends Error {
5
+ constructor() {
6
+ super('WS_FRAME_DECODING');
7
+ }
8
+ }
9
+ exports.WsFrameDecodingError = WsFrameDecodingError;
10
+ class WsFrameEncodingError extends Error {
11
+ constructor() {
12
+ super('WS_FRAME_ENCODING');
13
+ }
14
+ }
15
+ exports.WsFrameEncodingError = WsFrameEncodingError;
16
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/ws/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,oBAAqB,SAAQ,KAAK;IAC7C;QACE,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC7B,CAAC;CACF;AAJD,oDAIC;AAED,MAAa,oBAAqB,SAAQ,KAAK;IAC7C;QACE,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC7B,CAAC;CACF;AAJD,oDAIC"}
@@ -0,0 +1,20 @@
1
+ export declare class WsFrameHeader {
2
+ readonly fin: 0 | 1;
3
+ readonly opcode: number;
4
+ readonly length: number;
5
+ readonly mask: undefined | [number, number, number, number];
6
+ constructor(fin: 0 | 1, opcode: number, length: number, mask: undefined | [number, number, number, number]);
7
+ }
8
+ export declare class WsPingFrame extends WsFrameHeader {
9
+ readonly data: Uint8Array;
10
+ constructor(fin: 0 | 1, opcode: number, length: number, mask: undefined | [number, number, number, number], data: Uint8Array);
11
+ }
12
+ export declare class WsPongFrame extends WsFrameHeader {
13
+ readonly data: Uint8Array;
14
+ constructor(fin: 0 | 1, opcode: number, length: number, mask: undefined | [number, number, number, number], data: Uint8Array);
15
+ }
16
+ export declare class WsCloseFrame extends WsFrameHeader {
17
+ code: number;
18
+ reason: string;
19
+ constructor(fin: 0 | 1, opcode: number, length: number, mask: undefined | [number, number, number, number], code: number, reason: string);
20
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WsCloseFrame = exports.WsPongFrame = exports.WsPingFrame = exports.WsFrameHeader = void 0;
4
+ class WsFrameHeader {
5
+ constructor(fin, opcode, length, mask) {
6
+ this.fin = fin;
7
+ this.opcode = opcode;
8
+ this.length = length;
9
+ this.mask = mask;
10
+ }
11
+ }
12
+ exports.WsFrameHeader = WsFrameHeader;
13
+ class WsPingFrame extends WsFrameHeader {
14
+ constructor(fin, opcode, length, mask, data) {
15
+ super(fin, opcode, length, mask);
16
+ this.data = data;
17
+ }
18
+ }
19
+ exports.WsPingFrame = WsPingFrame;
20
+ class WsPongFrame extends WsFrameHeader {
21
+ constructor(fin, opcode, length, mask, data) {
22
+ super(fin, opcode, length, mask);
23
+ this.data = data;
24
+ }
25
+ }
26
+ exports.WsPongFrame = WsPongFrame;
27
+ class WsCloseFrame extends WsFrameHeader {
28
+ constructor(fin, opcode, length, mask, code, reason) {
29
+ super(fin, opcode, length, mask);
30
+ this.code = code;
31
+ this.reason = reason;
32
+ }
33
+ }
34
+ exports.WsCloseFrame = WsCloseFrame;
35
+ //# sourceMappingURL=frames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.js","sourceRoot":"","sources":["../../src/ws/frames.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;IACxB,YACkB,GAAU,EACV,MAAc,EACd,MAAc,EACd,IAAkD;QAHlD,QAAG,GAAH,GAAG,CAAO;QACV,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAA8C;IACjE,CAAC;CACL;AAPD,sCAOC;AAED,MAAa,WAAY,SAAQ,aAAa;IAC5C,YACE,GAAU,EACV,MAAc,EACd,MAAc,EACd,IAAkD,EAClC,IAAgB;QAEhC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAFjB,SAAI,GAAJ,IAAI,CAAY;IAGlC,CAAC;CACF;AAVD,kCAUC;AAED,MAAa,WAAY,SAAQ,aAAa;IAC5C,YACE,GAAU,EACV,MAAc,EACd,MAAc,EACd,IAAkD,EAClC,IAAgB;QAEhC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAFjB,SAAI,GAAJ,IAAI,CAAY;IAGlC,CAAC;CACF;AAVD,kCAUC;AAED,MAAa,YAAa,SAAQ,aAAa;IAC7C,YACE,GAAU,EACV,MAAc,EACd,MAAc,EACd,IAAkD,EAC3C,IAAY,EACZ,MAAc;QAErB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAH1B,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;IAGvB,CAAC;CACF;AAXD,oCAWC"}
@@ -0,0 +1,4 @@
1
+ export * from './constants';
2
+ export * from './errors';
3
+ export * from './frames';
4
+ export * from './WsFrameDecoder';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./constants"), exports);
5
+ tslib_1.__exportStar(require("./errors"), exports);
6
+ tslib_1.__exportStar(require("./frames"), exports);
7
+ tslib_1.__exportStar(require("./WsFrameDecoder"), exports);
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ws/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B;AAC5B,mDAAyB;AACzB,mDAAyB;AACzB,2DAAiC"}
@@ -0,0 +1,24 @@
1
+ import type { IReader, IReaderResettable } from '@jsonjoy.com/buffers/lib';
2
+ import type { BinaryJsonDecoder } from '../types';
3
+ export declare class XdrDecoder<R extends IReader & IReaderResettable = IReader & IReaderResettable> implements BinaryJsonDecoder {
4
+ reader: R;
5
+ constructor(reader?: R);
6
+ read(uint8: Uint8Array): unknown;
7
+ decode(uint8: Uint8Array): unknown;
8
+ readAny(): unknown;
9
+ readVoid(): void;
10
+ readBoolean(): boolean;
11
+ readInt(): number;
12
+ readUnsignedInt(): number;
13
+ readHyper(): bigint;
14
+ readUnsignedHyper(): bigint;
15
+ readFloat(): number;
16
+ readDouble(): number;
17
+ readQuadruple(): number;
18
+ readOpaque(size: number): Uint8Array;
19
+ readVarlenOpaque(): Uint8Array;
20
+ readString(): string;
21
+ readEnum(): number;
22
+ readArray<T>(size: number, elementReader: () => T): T[];
23
+ readVarlenArray<T>(elementReader: () => T): T[];
24
+ }
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XdrDecoder = void 0;
4
+ const Reader_1 = require("@jsonjoy.com/buffers/lib/Reader");
5
+ class XdrDecoder {
6
+ constructor(reader = new Reader_1.Reader()) {
7
+ this.reader = reader;
8
+ }
9
+ read(uint8) {
10
+ this.reader.reset(uint8);
11
+ return this.readAny();
12
+ }
13
+ decode(uint8) {
14
+ this.reader.reset(uint8);
15
+ return this.readAny();
16
+ }
17
+ readAny() {
18
+ throw new Error('XdrDecoder.readAny() requires explicit type methods or use XdrSchemaDecoder');
19
+ }
20
+ readVoid() {
21
+ }
22
+ readBoolean() {
23
+ return this.readInt() !== 0;
24
+ }
25
+ readInt() {
26
+ const reader = this.reader;
27
+ const value = reader.view.getInt32(reader.x, false);
28
+ reader.x += 4;
29
+ return value;
30
+ }
31
+ readUnsignedInt() {
32
+ const reader = this.reader;
33
+ const value = reader.view.getUint32(reader.x, false);
34
+ reader.x += 4;
35
+ return value;
36
+ }
37
+ readHyper() {
38
+ const reader = this.reader;
39
+ const value = reader.view.getBigInt64(reader.x, false);
40
+ reader.x += 8;
41
+ return value;
42
+ }
43
+ readUnsignedHyper() {
44
+ const reader = this.reader;
45
+ const value = reader.view.getBigUint64(reader.x, false);
46
+ reader.x += 8;
47
+ return value;
48
+ }
49
+ readFloat() {
50
+ const reader = this.reader;
51
+ const value = reader.view.getFloat32(reader.x, false);
52
+ reader.x += 4;
53
+ return value;
54
+ }
55
+ readDouble() {
56
+ const reader = this.reader;
57
+ const value = reader.view.getFloat64(reader.x, false);
58
+ reader.x += 8;
59
+ return value;
60
+ }
61
+ readQuadruple() {
62
+ throw new Error('not implemented');
63
+ }
64
+ readOpaque(size) {
65
+ const reader = this.reader;
66
+ const data = new Uint8Array(size);
67
+ for (let i = 0; i < size; i++) {
68
+ data[i] = reader.u8();
69
+ }
70
+ const paddedSize = Math.ceil(size / 4) * 4;
71
+ const padding = paddedSize - size;
72
+ reader.skip(padding);
73
+ return data;
74
+ }
75
+ readVarlenOpaque() {
76
+ const size = this.readUnsignedInt();
77
+ return this.readOpaque(size);
78
+ }
79
+ readString() {
80
+ const size = this.readUnsignedInt();
81
+ const reader = this.reader;
82
+ const utf8Bytes = new Uint8Array(size);
83
+ for (let i = 0; i < size; i++) {
84
+ utf8Bytes[i] = reader.u8();
85
+ }
86
+ const paddedSize = Math.ceil(size / 4) * 4;
87
+ const padding = paddedSize - size;
88
+ reader.skip(padding);
89
+ return new TextDecoder('utf-8').decode(utf8Bytes);
90
+ }
91
+ readEnum() {
92
+ return this.readInt();
93
+ }
94
+ readArray(size, elementReader) {
95
+ const array = [];
96
+ for (let i = 0; i < size; i++) {
97
+ array.push(elementReader());
98
+ }
99
+ return array;
100
+ }
101
+ readVarlenArray(elementReader) {
102
+ const size = this.readUnsignedInt();
103
+ return this.readArray(size, elementReader);
104
+ }
105
+ }
106
+ exports.XdrDecoder = XdrDecoder;
107
+ //# sourceMappingURL=XdrDecoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XdrDecoder.js","sourceRoot":"","sources":["../../src/xdr/XdrDecoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { IReader, IReaderResettable } from '@jsonjoy.com/buffers/lib';
2
+ import type { XdrSchema } from './types';
3
+ export declare class XdrSchemaDecoder {
4
+ readonly reader: IReader & IReaderResettable;
5
+ private decoder;
6
+ constructor(reader?: IReader & IReaderResettable);
7
+ decode(data: Uint8Array, schema: XdrSchema): unknown;
8
+ private readValue;
9
+ private readEnum;
10
+ private readOpaque;
11
+ private readVarlenOpaque;
12
+ private readString;
13
+ private readArray;
14
+ private readVarlenArray;
15
+ private readStruct;
16
+ private readUnion;
17
+ }
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XdrSchemaDecoder = void 0;
4
+ const Reader_1 = require("@jsonjoy.com/buffers/lib/Reader");
5
+ const XdrDecoder_1 = require("./XdrDecoder");
6
+ const XdrUnion_1 = require("./XdrUnion");
7
+ class XdrSchemaDecoder {
8
+ constructor(reader = new Reader_1.Reader()) {
9
+ this.reader = reader;
10
+ this.decoder = new XdrDecoder_1.XdrDecoder(reader);
11
+ }
12
+ decode(data, schema) {
13
+ this.reader.reset(data);
14
+ return this.readValue(schema);
15
+ }
16
+ readValue(schema) {
17
+ switch (schema.type) {
18
+ case 'void':
19
+ return this.decoder.readVoid();
20
+ case 'int':
21
+ return this.decoder.readInt();
22
+ case 'unsigned_int':
23
+ return this.decoder.readUnsignedInt();
24
+ case 'boolean':
25
+ return this.decoder.readBoolean();
26
+ case 'hyper':
27
+ return this.decoder.readHyper();
28
+ case 'unsigned_hyper':
29
+ return this.decoder.readUnsignedHyper();
30
+ case 'float':
31
+ return this.decoder.readFloat();
32
+ case 'double':
33
+ return this.decoder.readDouble();
34
+ case 'quadruple':
35
+ return this.decoder.readQuadruple();
36
+ case 'enum':
37
+ return this.readEnum(schema);
38
+ case 'opaque':
39
+ return this.readOpaque(schema);
40
+ case 'vopaque':
41
+ return this.readVarlenOpaque(schema);
42
+ case 'string':
43
+ return this.readString(schema);
44
+ case 'array':
45
+ return this.readArray(schema);
46
+ case 'varray':
47
+ return this.readVarlenArray(schema);
48
+ case 'struct':
49
+ return this.readStruct(schema);
50
+ case 'union':
51
+ return this.readUnion(schema);
52
+ default:
53
+ throw new Error(`Unknown schema type: ${schema.type}`);
54
+ }
55
+ }
56
+ readEnum(schema) {
57
+ const value = this.decoder.readEnum();
58
+ for (const [name, enumValue] of Object.entries(schema.values)) {
59
+ if (enumValue === value) {
60
+ return name;
61
+ }
62
+ }
63
+ return value;
64
+ }
65
+ readOpaque(schema) {
66
+ return this.decoder.readOpaque(schema.size);
67
+ }
68
+ readVarlenOpaque(schema) {
69
+ const data = this.decoder.readVarlenOpaque();
70
+ if (schema.size !== undefined && data.length > schema.size) {
71
+ throw new Error(`Variable-length opaque data size ${data.length} exceeds maximum ${schema.size}`);
72
+ }
73
+ return data;
74
+ }
75
+ readString(schema) {
76
+ const str = this.decoder.readString();
77
+ if (schema.size !== undefined && str.length > schema.size) {
78
+ throw new Error(`String length ${str.length} exceeds maximum ${schema.size}`);
79
+ }
80
+ return str;
81
+ }
82
+ readArray(schema) {
83
+ return this.decoder.readArray(schema.size, () => this.readValue(schema.elements));
84
+ }
85
+ readVarlenArray(schema) {
86
+ const array = this.decoder.readVarlenArray(() => this.readValue(schema.elements));
87
+ if (schema.size !== undefined && array.length > schema.size) {
88
+ throw new Error(`Variable-length array size ${array.length} exceeds maximum ${schema.size}`);
89
+ }
90
+ return array;
91
+ }
92
+ readStruct(schema) {
93
+ const struct = {};
94
+ for (const [fieldSchema, fieldName] of schema.fields) {
95
+ struct[fieldName] = this.readValue(fieldSchema);
96
+ }
97
+ return struct;
98
+ }
99
+ readUnion(schema) {
100
+ const discriminant = this.decoder.readInt();
101
+ for (const [armDiscriminant, armSchema] of schema.arms) {
102
+ if (armDiscriminant === discriminant) {
103
+ const value = this.readValue(armSchema);
104
+ return new XdrUnion_1.XdrUnion(discriminant, value);
105
+ }
106
+ }
107
+ if (schema.default) {
108
+ const value = this.readValue(schema.default);
109
+ return new XdrUnion_1.XdrUnion(discriminant, value);
110
+ }
111
+ throw new Error(`No matching union arm for discriminant: ${discriminant}`);
112
+ }
113
+ }
114
+ exports.XdrSchemaDecoder = XdrSchemaDecoder;
115
+ //# sourceMappingURL=XdrSchemaDecoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XdrSchemaDecoder.js","sourceRoot":"","sources":["../../src/xdr/XdrSchemaDecoder.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  export * from './types';
2
2
  export * from './XdrEncoder';
3
+ export * from './XdrDecoder';
3
4
  export * from './XdrSchemaEncoder';
5
+ export * from './XdrSchemaDecoder';
4
6
  export * from './XdrSchemaValidator';
5
7
  export * from './XdrUnion';
package/lib/xdr/index.js CHANGED
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./types"), exports);
5
5
  tslib_1.__exportStar(require("./XdrEncoder"), exports);
6
+ tslib_1.__exportStar(require("./XdrDecoder"), exports);
6
7
  tslib_1.__exportStar(require("./XdrSchemaEncoder"), exports);
8
+ tslib_1.__exportStar(require("./XdrSchemaDecoder"), exports);
7
9
  tslib_1.__exportStar(require("./XdrSchemaValidator"), exports);
8
10
  tslib_1.__exportStar(require("./XdrUnion"), exports);
9
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/xdr/index.ts"],"names":[],"mappings":";;;AAOA,kDAAwB;AACxB,uDAA6B;AAC7B,6DAAmC;AACnC,+DAAqC;AACrC,qDAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/xdr/index.ts"],"names":[],"mappings":";;;AAOA,kDAAwB;AACxB,uDAA6B;AAC7B,uDAA6B;AAC7B,6DAAmC;AACnC,6DAAmC;AACnC,+DAAqC;AACrC,qDAA2B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsonjoy.com/json-pack",
3
- "version": "1.13.0",
3
+ "version": "1.15.0",
4
4
  "description": "High-performance JSON serialization library",
5
5
  "author": {
6
6
  "name": "streamich",
@@ -115,7 +115,8 @@
115
115
  "tslint": "^6.1.3",
116
116
  "tslint-config-common": "^1.6.2",
117
117
  "typedoc": "^0.25.12",
118
- "typescript": "^5.3.3"
118
+ "typescript": "^5.3.3",
119
+ "websocket": "^1.0.35"
119
120
  },
120
121
  "jest": {
121
122
  "verbose": true,