@jsonjoy.com/json-pack 1.12.0 → 1.14.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,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,29 @@
1
+ import type { IWriter, IWriterGrowable } from '@jsonjoy.com/buffers/lib';
2
+ import type { BinaryJsonEncoder } from '../types';
3
+ export declare class XdrEncoder implements BinaryJsonEncoder {
4
+ readonly writer: IWriter & IWriterGrowable;
5
+ constructor(writer: IWriter & IWriterGrowable);
6
+ encode(value: unknown): Uint8Array;
7
+ writeUnknown(value: unknown): void;
8
+ writeAny(value: unknown): void;
9
+ writeVoid(): void;
10
+ writeNull(): void;
11
+ writeBoolean(bool: boolean): void;
12
+ writeInt(int: number): void;
13
+ writeUnsignedInt(uint: number): void;
14
+ writeHyper(hyper: number | bigint): void;
15
+ writeUnsignedHyper(uhyper: number | bigint): void;
16
+ writeFloat(float: number): void;
17
+ writeDouble(double: number): void;
18
+ writeQuadruple(quad: number): void;
19
+ writeOpaque(data: Uint8Array): void;
20
+ writeVarlenOpaque(data: Uint8Array): void;
21
+ writeStr(str: string): void;
22
+ writeArr(arr: unknown[]): void;
23
+ writeObj(obj: Record<string, unknown>): void;
24
+ writeNumber(num: number): void;
25
+ writeInteger(int: number): void;
26
+ writeUInteger(uint: number): void;
27
+ writeBin(buf: Uint8Array): void;
28
+ writeAsciiStr(str: string): void;
29
+ }
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XdrEncoder = void 0;
4
+ class XdrEncoder {
5
+ constructor(writer) {
6
+ this.writer = writer;
7
+ }
8
+ encode(value) {
9
+ const writer = this.writer;
10
+ writer.reset();
11
+ this.writeAny(value);
12
+ return writer.flush();
13
+ }
14
+ writeUnknown(value) {
15
+ this.writeVoid();
16
+ }
17
+ writeAny(value) {
18
+ switch (typeof value) {
19
+ case 'boolean':
20
+ return this.writeBoolean(value);
21
+ case 'number':
22
+ return this.writeNumber(value);
23
+ case 'string':
24
+ return this.writeStr(value);
25
+ case 'object': {
26
+ if (value === null)
27
+ return this.writeVoid();
28
+ const constructor = value.constructor;
29
+ switch (constructor) {
30
+ case Uint8Array:
31
+ return this.writeBin(value);
32
+ default:
33
+ return this.writeUnknown(value);
34
+ }
35
+ }
36
+ case 'bigint':
37
+ return this.writeHyper(value);
38
+ case 'undefined':
39
+ return this.writeVoid();
40
+ default:
41
+ return this.writeUnknown(value);
42
+ }
43
+ }
44
+ writeVoid() {
45
+ }
46
+ writeNull() {
47
+ this.writeVoid();
48
+ }
49
+ writeBoolean(bool) {
50
+ this.writeInt(bool ? 1 : 0);
51
+ }
52
+ writeInt(int) {
53
+ const writer = this.writer;
54
+ writer.ensureCapacity(4);
55
+ writer.view.setInt32(writer.x, Math.trunc(int), false);
56
+ writer.move(4);
57
+ }
58
+ writeUnsignedInt(uint) {
59
+ const writer = this.writer;
60
+ writer.ensureCapacity(4);
61
+ writer.view.setUint32(writer.x, Math.trunc(uint) >>> 0, false);
62
+ writer.move(4);
63
+ }
64
+ writeHyper(hyper) {
65
+ const writer = this.writer;
66
+ writer.ensureCapacity(8);
67
+ if (typeof hyper === 'bigint') {
68
+ writer.view.setBigInt64(writer.x, hyper, false);
69
+ }
70
+ else {
71
+ const truncated = Math.trunc(hyper);
72
+ const high = Math.floor(truncated / 0x100000000);
73
+ const low = truncated >>> 0;
74
+ writer.view.setInt32(writer.x, high, false);
75
+ writer.view.setUint32(writer.x + 4, low, false);
76
+ }
77
+ writer.move(8);
78
+ }
79
+ writeUnsignedHyper(uhyper) {
80
+ const writer = this.writer;
81
+ writer.ensureCapacity(8);
82
+ if (typeof uhyper === 'bigint') {
83
+ writer.view.setBigUint64(writer.x, uhyper, false);
84
+ }
85
+ else {
86
+ const truncated = Math.trunc(Math.abs(uhyper));
87
+ const high = Math.floor(truncated / 0x100000000);
88
+ const low = truncated >>> 0;
89
+ writer.view.setUint32(writer.x, high, false);
90
+ writer.view.setUint32(writer.x + 4, low, false);
91
+ }
92
+ writer.move(8);
93
+ }
94
+ writeFloat(float) {
95
+ const writer = this.writer;
96
+ writer.ensureCapacity(4);
97
+ writer.view.setFloat32(writer.x, float, false);
98
+ writer.move(4);
99
+ }
100
+ writeDouble(double) {
101
+ const writer = this.writer;
102
+ writer.ensureCapacity(8);
103
+ writer.view.setFloat64(writer.x, double, false);
104
+ writer.move(8);
105
+ }
106
+ writeQuadruple(quad) {
107
+ throw new Error('not implemented');
108
+ }
109
+ writeOpaque(data) {
110
+ const size = data.length;
111
+ const writer = this.writer;
112
+ const paddedSize = Math.ceil(size / 4) * 4;
113
+ writer.ensureCapacity(paddedSize);
114
+ writer.buf(data, size);
115
+ const padding = paddedSize - size;
116
+ for (let i = 0; i < padding; i++) {
117
+ writer.u8(0);
118
+ }
119
+ }
120
+ writeVarlenOpaque(data) {
121
+ this.writeUnsignedInt(data.length);
122
+ this.writeOpaque(data);
123
+ }
124
+ writeStr(str) {
125
+ const writer = this.writer;
126
+ const lengthOffset = writer.x;
127
+ writer.x += 4;
128
+ const bytesWritten = writer.utf8(str);
129
+ const paddedSize = Math.ceil(bytesWritten / 4) * 4;
130
+ const padding = paddedSize - bytesWritten;
131
+ for (let i = 0; i < padding; i++) {
132
+ writer.u8(0);
133
+ }
134
+ const currentPos = writer.x;
135
+ writer.x = lengthOffset;
136
+ this.writeUnsignedInt(bytesWritten);
137
+ writer.x = currentPos;
138
+ }
139
+ writeArr(arr) {
140
+ throw new Error('not implemented');
141
+ }
142
+ writeObj(obj) {
143
+ throw new Error('not implemented');
144
+ }
145
+ writeNumber(num) {
146
+ if (Number.isInteger(num)) {
147
+ if (num >= -2147483648 && num <= 2147483647) {
148
+ this.writeInt(num);
149
+ }
150
+ else {
151
+ this.writeHyper(num);
152
+ }
153
+ }
154
+ else {
155
+ this.writeDouble(num);
156
+ }
157
+ }
158
+ writeInteger(int) {
159
+ this.writeInt(int);
160
+ }
161
+ writeUInteger(uint) {
162
+ this.writeUnsignedInt(uint);
163
+ }
164
+ writeBin(buf) {
165
+ this.writeVarlenOpaque(buf);
166
+ }
167
+ writeAsciiStr(str) {
168
+ this.writeStr(str);
169
+ }
170
+ }
171
+ exports.XdrEncoder = XdrEncoder;
172
+ //# sourceMappingURL=XdrEncoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XdrEncoder.js","sourceRoot":"","sources":["../../src/xdr/XdrEncoder.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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"}
@@ -0,0 +1,29 @@
1
+ import type { IWriter, IWriterGrowable } from '@jsonjoy.com/buffers/lib';
2
+ import type { XdrSchema, XdrEnumSchema, XdrOpaqueSchema, XdrVarlenOpaqueSchema, XdrStringSchema, XdrArraySchema, XdrVarlenArraySchema, XdrStructSchema, XdrUnionSchema } from './types';
3
+ export declare class XdrSchemaEncoder {
4
+ readonly writer: IWriter & IWriterGrowable;
5
+ private encoder;
6
+ constructor(writer: IWriter & IWriterGrowable);
7
+ encode(value: unknown, schema: XdrSchema): Uint8Array;
8
+ writeVoid(schema: XdrSchema): void;
9
+ writeInt(value: number, schema: XdrSchema): void;
10
+ writeUnsignedInt(value: number, schema: XdrSchema): void;
11
+ writeBoolean(value: boolean, schema: XdrSchema): void;
12
+ writeHyper(value: number | bigint, schema: XdrSchema): void;
13
+ writeUnsignedHyper(value: number | bigint, schema: XdrSchema): void;
14
+ writeFloat(value: number, schema: XdrSchema): void;
15
+ writeDouble(value: number, schema: XdrSchema): void;
16
+ writeQuadruple(value: number, schema: XdrSchema): void;
17
+ writeEnum(value: string, schema: XdrEnumSchema): void;
18
+ writeOpaque(value: Uint8Array, schema: XdrOpaqueSchema): void;
19
+ writeVarlenOpaque(value: Uint8Array, schema: XdrVarlenOpaqueSchema): void;
20
+ writeString(value: string, schema: XdrStringSchema): void;
21
+ writeArray(value: unknown[], schema: XdrArraySchema): void;
22
+ writeVarlenArray(value: unknown[], schema: XdrVarlenArraySchema): void;
23
+ writeStruct(value: Record<string, unknown>, schema: XdrStructSchema): void;
24
+ writeUnion(value: unknown, schema: XdrUnionSchema, discriminant: number | string | boolean): void;
25
+ writeNumber(value: number, schema: XdrSchema): void;
26
+ private writeValue;
27
+ private validateSchemaType;
28
+ private writeDiscriminant;
29
+ }
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XdrSchemaEncoder = void 0;
4
+ const XdrEncoder_1 = require("./XdrEncoder");
5
+ const XdrUnion_1 = require("./XdrUnion");
6
+ class XdrSchemaEncoder {
7
+ constructor(writer) {
8
+ this.writer = writer;
9
+ this.encoder = new XdrEncoder_1.XdrEncoder(writer);
10
+ }
11
+ encode(value, schema) {
12
+ this.writer.reset();
13
+ this.writeValue(value, schema);
14
+ return this.writer.flush();
15
+ }
16
+ writeVoid(schema) {
17
+ this.validateSchemaType(schema, 'void');
18
+ this.encoder.writeVoid();
19
+ }
20
+ writeInt(value, schema) {
21
+ this.validateSchemaType(schema, 'int');
22
+ if (!Number.isInteger(value) || value < -2147483648 || value > 2147483647) {
23
+ throw new Error('Value is not a valid 32-bit signed integer');
24
+ }
25
+ this.encoder.writeInt(value);
26
+ }
27
+ writeUnsignedInt(value, schema) {
28
+ this.validateSchemaType(schema, 'unsigned_int');
29
+ if (!Number.isInteger(value) || value < 0 || value > 4294967295) {
30
+ throw new Error('Value is not a valid 32-bit unsigned integer');
31
+ }
32
+ this.encoder.writeUnsignedInt(value);
33
+ }
34
+ writeBoolean(value, schema) {
35
+ this.validateSchemaType(schema, 'boolean');
36
+ this.encoder.writeBoolean(value);
37
+ }
38
+ writeHyper(value, schema) {
39
+ this.validateSchemaType(schema, 'hyper');
40
+ this.encoder.writeHyper(value);
41
+ }
42
+ writeUnsignedHyper(value, schema) {
43
+ this.validateSchemaType(schema, 'unsigned_hyper');
44
+ if ((typeof value === 'number' && value < 0) || (typeof value === 'bigint' && value < BigInt(0))) {
45
+ throw new Error('Value is not a valid unsigned integer');
46
+ }
47
+ this.encoder.writeUnsignedHyper(value);
48
+ }
49
+ writeFloat(value, schema) {
50
+ this.validateSchemaType(schema, 'float');
51
+ this.encoder.writeFloat(value);
52
+ }
53
+ writeDouble(value, schema) {
54
+ this.validateSchemaType(schema, 'double');
55
+ this.encoder.writeDouble(value);
56
+ }
57
+ writeQuadruple(value, schema) {
58
+ this.validateSchemaType(schema, 'quadruple');
59
+ this.encoder.writeQuadruple(value);
60
+ }
61
+ writeEnum(value, schema) {
62
+ if (schema.type !== 'enum') {
63
+ throw new Error('Schema is not an enum schema');
64
+ }
65
+ if (!(value in schema.values)) {
66
+ throw new Error(`Invalid enum value: ${value}`);
67
+ }
68
+ this.encoder.writeInt(schema.values[value]);
69
+ }
70
+ writeOpaque(value, schema) {
71
+ if (schema.type !== 'opaque') {
72
+ throw new Error('Schema is not an opaque schema');
73
+ }
74
+ if (value.length !== schema.size) {
75
+ throw new Error(`Opaque data length ${value.length} does not match schema size ${schema.size}`);
76
+ }
77
+ this.encoder.writeOpaque(value);
78
+ }
79
+ writeVarlenOpaque(value, schema) {
80
+ if (schema.type !== 'vopaque') {
81
+ throw new Error('Schema is not a variable-length opaque schema');
82
+ }
83
+ if (schema.size !== undefined && value.length > schema.size) {
84
+ throw new Error(`Opaque data length ${value.length} exceeds maximum size ${schema.size}`);
85
+ }
86
+ this.encoder.writeVarlenOpaque(value);
87
+ }
88
+ writeString(value, schema) {
89
+ if (schema.type !== 'string') {
90
+ throw new Error('Schema is not a string schema');
91
+ }
92
+ if (schema.size !== undefined && value.length > schema.size) {
93
+ throw new Error(`String length ${value.length} exceeds maximum size ${schema.size}`);
94
+ }
95
+ this.encoder.writeStr(value);
96
+ }
97
+ writeArray(value, schema) {
98
+ if (schema.type !== 'array') {
99
+ throw new Error('Schema is not an array schema');
100
+ }
101
+ if (value.length !== schema.size) {
102
+ throw new Error(`Array length ${value.length} does not match schema size ${schema.size}`);
103
+ }
104
+ for (const item of value) {
105
+ this.writeValue(item, schema.elements);
106
+ }
107
+ }
108
+ writeVarlenArray(value, schema) {
109
+ if (schema.type !== 'varray') {
110
+ throw new Error('Schema is not a variable-length array schema');
111
+ }
112
+ if (schema.size !== undefined && value.length > schema.size) {
113
+ throw new Error(`Array length ${value.length} exceeds maximum size ${schema.size}`);
114
+ }
115
+ this.encoder.writeUnsignedInt(value.length);
116
+ for (const item of value) {
117
+ this.writeValue(item, schema.elements);
118
+ }
119
+ }
120
+ writeStruct(value, schema) {
121
+ if (schema.type !== 'struct') {
122
+ throw new Error('Schema is not a struct schema');
123
+ }
124
+ for (const [fieldSchema, fieldName] of schema.fields) {
125
+ if (!(fieldName in value)) {
126
+ throw new Error(`Missing required field: ${fieldName}`);
127
+ }
128
+ this.writeValue(value[fieldName], fieldSchema);
129
+ }
130
+ }
131
+ writeUnion(value, schema, discriminant) {
132
+ if (schema.type !== 'union') {
133
+ throw new Error('Schema is not a union schema');
134
+ }
135
+ const arm = schema.arms.find(([armDiscriminant]) => armDiscriminant === discriminant);
136
+ if (!arm) {
137
+ if (schema.default) {
138
+ this.writeDiscriminant(discriminant);
139
+ this.writeValue(value, schema.default);
140
+ }
141
+ else {
142
+ throw new Error(`No matching arm found for discriminant: ${discriminant}`);
143
+ }
144
+ }
145
+ else {
146
+ this.writeDiscriminant(discriminant);
147
+ this.writeValue(value, arm[1]);
148
+ }
149
+ }
150
+ writeNumber(value, schema) {
151
+ switch (schema.type) {
152
+ case 'int':
153
+ this.writeInt(value, schema);
154
+ break;
155
+ case 'unsigned_int':
156
+ this.writeUnsignedInt(value, schema);
157
+ break;
158
+ case 'hyper':
159
+ this.writeHyper(value, schema);
160
+ break;
161
+ case 'unsigned_hyper':
162
+ this.writeUnsignedHyper(value, schema);
163
+ break;
164
+ case 'float':
165
+ this.writeFloat(value, schema);
166
+ break;
167
+ case 'double':
168
+ this.writeDouble(value, schema);
169
+ break;
170
+ case 'quadruple':
171
+ this.writeQuadruple(value, schema);
172
+ break;
173
+ default:
174
+ throw new Error(`Schema type ${schema.type} is not a numeric type`);
175
+ }
176
+ }
177
+ writeValue(value, schema) {
178
+ switch (schema.type) {
179
+ case 'void':
180
+ this.encoder.writeVoid();
181
+ break;
182
+ case 'int':
183
+ this.encoder.writeInt(value);
184
+ break;
185
+ case 'unsigned_int':
186
+ this.encoder.writeUnsignedInt(value);
187
+ break;
188
+ case 'boolean':
189
+ this.encoder.writeBoolean(value);
190
+ break;
191
+ case 'hyper':
192
+ this.encoder.writeHyper(value);
193
+ break;
194
+ case 'unsigned_hyper':
195
+ this.encoder.writeUnsignedHyper(value);
196
+ break;
197
+ case 'float':
198
+ this.encoder.writeFloat(value);
199
+ break;
200
+ case 'double':
201
+ this.encoder.writeDouble(value);
202
+ break;
203
+ case 'quadruple':
204
+ this.encoder.writeQuadruple(value);
205
+ break;
206
+ case 'enum':
207
+ this.writeEnum(value, schema);
208
+ break;
209
+ case 'opaque':
210
+ this.writeOpaque(value, schema);
211
+ break;
212
+ case 'vopaque':
213
+ this.writeVarlenOpaque(value, schema);
214
+ break;
215
+ case 'string':
216
+ this.writeString(value, schema);
217
+ break;
218
+ case 'array':
219
+ this.writeArray(value, schema);
220
+ break;
221
+ case 'varray':
222
+ this.writeVarlenArray(value, schema);
223
+ break;
224
+ case 'struct':
225
+ this.writeStruct(value, schema);
226
+ break;
227
+ case 'union':
228
+ if (value instanceof XdrUnion_1.XdrUnion) {
229
+ this.writeUnion(value.value, schema, value.discriminant);
230
+ }
231
+ else {
232
+ throw new Error('Union values must be wrapped in XdrUnion class');
233
+ }
234
+ break;
235
+ default:
236
+ throw new Error(`Unknown schema type: ${schema.type}`);
237
+ }
238
+ }
239
+ validateSchemaType(schema, expectedType) {
240
+ if (schema.type !== expectedType) {
241
+ throw new Error(`Expected schema type ${expectedType}, got ${schema.type}`);
242
+ }
243
+ }
244
+ writeDiscriminant(discriminant) {
245
+ if (typeof discriminant === 'number') {
246
+ this.encoder.writeInt(discriminant);
247
+ }
248
+ else if (typeof discriminant === 'boolean') {
249
+ this.encoder.writeBoolean(discriminant);
250
+ }
251
+ else {
252
+ throw new Error('String discriminants require enum schema context');
253
+ }
254
+ }
255
+ }
256
+ exports.XdrSchemaEncoder = XdrSchemaEncoder;
257
+ //# sourceMappingURL=XdrSchemaEncoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XdrSchemaEncoder.js","sourceRoot":"","sources":["../../src/xdr/XdrSchemaEncoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { XdrSchema } from './types';
2
+ export declare class XdrSchemaValidator {
3
+ validateSchema(schema: XdrSchema): boolean;
4
+ validateValue(value: unknown, schema: XdrSchema): boolean;
5
+ private validateSchemaInternal;
6
+ private validateEnumSchema;
7
+ private validateOpaqueSchema;
8
+ private validateVarlenOpaqueSchema;
9
+ private validateStringSchema;
10
+ private validateArraySchema;
11
+ private validateVarlenArraySchema;
12
+ private validateStructSchema;
13
+ private validateUnionSchema;
14
+ private validateValueInternal;
15
+ }
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XdrSchemaValidator = void 0;
4
+ class XdrSchemaValidator {
5
+ validateSchema(schema) {
6
+ try {
7
+ return this.validateSchemaInternal(schema);
8
+ }
9
+ catch {
10
+ return false;
11
+ }
12
+ }
13
+ validateValue(value, schema) {
14
+ try {
15
+ return this.validateValueInternal(value, schema);
16
+ }
17
+ catch {
18
+ return false;
19
+ }
20
+ }
21
+ validateSchemaInternal(schema) {
22
+ if (!schema || typeof schema !== 'object' || !schema.type) {
23
+ return false;
24
+ }
25
+ switch (schema.type) {
26
+ case 'void':
27
+ case 'int':
28
+ case 'unsigned_int':
29
+ case 'boolean':
30
+ case 'hyper':
31
+ case 'unsigned_hyper':
32
+ case 'float':
33
+ case 'double':
34
+ case 'quadruple':
35
+ return true;
36
+ case 'enum':
37
+ return this.validateEnumSchema(schema);
38
+ case 'opaque':
39
+ return this.validateOpaqueSchema(schema);
40
+ case 'vopaque':
41
+ return this.validateVarlenOpaqueSchema(schema);
42
+ case 'string':
43
+ return this.validateStringSchema(schema);
44
+ case 'array':
45
+ return this.validateArraySchema(schema);
46
+ case 'varray':
47
+ return this.validateVarlenArraySchema(schema);
48
+ case 'struct':
49
+ return this.validateStructSchema(schema);
50
+ case 'union':
51
+ return this.validateUnionSchema(schema);
52
+ default:
53
+ return false;
54
+ }
55
+ }
56
+ validateEnumSchema(schema) {
57
+ if (!schema.values || typeof schema.values !== 'object') {
58
+ return false;
59
+ }
60
+ const values = Object.values(schema.values);
61
+ const uniqueValues = new Set(values);
62
+ if (values.length !== uniqueValues.size) {
63
+ return false;
64
+ }
65
+ return values.every((value) => Number.isInteger(value));
66
+ }
67
+ validateOpaqueSchema(schema) {
68
+ return typeof schema.size === 'number' && Number.isInteger(schema.size) && schema.size >= 0;
69
+ }
70
+ validateVarlenOpaqueSchema(schema) {
71
+ return !schema.size || (typeof schema.size === 'number' && Number.isInteger(schema.size) && schema.size >= 0);
72
+ }
73
+ validateStringSchema(schema) {
74
+ return !schema.size || (typeof schema.size === 'number' && Number.isInteger(schema.size) && schema.size >= 0);
75
+ }
76
+ validateArraySchema(schema) {
77
+ if (!schema.elements || typeof schema.size !== 'number' || !Number.isInteger(schema.size) || schema.size < 0) {
78
+ return false;
79
+ }
80
+ return this.validateSchemaInternal(schema.elements);
81
+ }
82
+ validateVarlenArraySchema(schema) {
83
+ if (!schema.elements) {
84
+ return false;
85
+ }
86
+ if (schema.size !== undefined) {
87
+ if (typeof schema.size !== 'number' || !Number.isInteger(schema.size) || schema.size < 0) {
88
+ return false;
89
+ }
90
+ }
91
+ return this.validateSchemaInternal(schema.elements);
92
+ }
93
+ validateStructSchema(schema) {
94
+ if (!Array.isArray(schema.fields)) {
95
+ return false;
96
+ }
97
+ const fieldNames = new Set();
98
+ for (const field of schema.fields) {
99
+ if (!Array.isArray(field) || field.length !== 2) {
100
+ return false;
101
+ }
102
+ const [fieldSchema, fieldName] = field;
103
+ if (typeof fieldName !== 'string' || fieldName === '') {
104
+ return false;
105
+ }
106
+ if (fieldNames.has(fieldName)) {
107
+ return false;
108
+ }
109
+ fieldNames.add(fieldName);
110
+ if (!this.validateSchemaInternal(fieldSchema)) {
111
+ return false;
112
+ }
113
+ }
114
+ return true;
115
+ }
116
+ validateUnionSchema(schema) {
117
+ if (!Array.isArray(schema.arms) || schema.arms.length === 0) {
118
+ return false;
119
+ }
120
+ const discriminants = new Set();
121
+ for (const arm of schema.arms) {
122
+ if (!Array.isArray(arm) || arm.length !== 2) {
123
+ return false;
124
+ }
125
+ const [discriminant, armSchema] = arm;
126
+ if (discriminants.has(discriminant)) {
127
+ return false;
128
+ }
129
+ discriminants.add(discriminant);
130
+ if (typeof discriminant !== 'number' && typeof discriminant !== 'string' && typeof discriminant !== 'boolean') {
131
+ return false;
132
+ }
133
+ if (!this.validateSchemaInternal(armSchema)) {
134
+ return false;
135
+ }
136
+ }
137
+ if (schema.default && !this.validateSchemaInternal(schema.default)) {
138
+ return false;
139
+ }
140
+ return true;
141
+ }
142
+ validateValueInternal(value, schema) {
143
+ switch (schema.type) {
144
+ case 'void':
145
+ return value === null || value === undefined;
146
+ case 'int':
147
+ return typeof value === 'number' && Number.isInteger(value) && value >= -2147483648 && value <= 2147483647;
148
+ case 'unsigned_int':
149
+ return typeof value === 'number' && Number.isInteger(value) && value >= 0 && value <= 4294967295;
150
+ case 'boolean':
151
+ return typeof value === 'boolean';
152
+ case 'hyper':
153
+ return (typeof value === 'number' && Number.isInteger(value)) || typeof value === 'bigint';
154
+ case 'unsigned_hyper':
155
+ return ((typeof value === 'number' && Number.isInteger(value) && value >= 0) ||
156
+ (typeof value === 'bigint' && value >= BigInt(0)));
157
+ case 'float':
158
+ case 'double':
159
+ case 'quadruple':
160
+ return typeof value === 'number';
161
+ case 'enum':
162
+ const enumSchema = schema;
163
+ return typeof value === 'string' && value in enumSchema.values;
164
+ case 'opaque':
165
+ const opaqueSchema = schema;
166
+ return value instanceof Uint8Array && value.length === opaqueSchema.size;
167
+ case 'vopaque':
168
+ const vopaqueSchema = schema;
169
+ return value instanceof Uint8Array && (!vopaqueSchema.size || value.length <= vopaqueSchema.size);
170
+ case 'string':
171
+ const stringSchema = schema;
172
+ return typeof value === 'string' && (!stringSchema.size || value.length <= stringSchema.size);
173
+ case 'array':
174
+ const arraySchema = schema;
175
+ return (Array.isArray(value) &&
176
+ value.length === arraySchema.size &&
177
+ value.every((item) => this.validateValueInternal(item, arraySchema.elements)));
178
+ case 'varray':
179
+ const varraySchema = schema;
180
+ return (Array.isArray(value) &&
181
+ (!varraySchema.size || value.length <= varraySchema.size) &&
182
+ value.every((item) => this.validateValueInternal(item, varraySchema.elements)));
183
+ case 'struct':
184
+ const structSchema = schema;
185
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
186
+ return false;
187
+ }
188
+ const valueObj = value;
189
+ return structSchema.fields.every(([fieldSchema, fieldName]) => fieldName in valueObj && this.validateValueInternal(valueObj[fieldName], fieldSchema));
190
+ case 'union':
191
+ const unionSchema = schema;
192
+ const matchesArm = unionSchema.arms.some(([, armSchema]) => this.validateValueInternal(value, armSchema));
193
+ const matchesDefault = unionSchema.default ? this.validateValueInternal(value, unionSchema.default) : false;
194
+ return matchesArm || matchesDefault;
195
+ default:
196
+ return false;
197
+ }
198
+ }
199
+ }
200
+ exports.XdrSchemaValidator = XdrSchemaValidator;
201
+ //# sourceMappingURL=XdrSchemaValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XdrSchemaValidator.js","sourceRoot":"","sources":["../../src/xdr/XdrSchemaValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare class XdrUnion<T = unknown> {
2
+ readonly discriminant: number | string | boolean;
3
+ readonly value: T;
4
+ constructor(discriminant: number | string | boolean, value: T);
5
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XdrUnion = void 0;
4
+ class XdrUnion {
5
+ constructor(discriminant, value) {
6
+ this.discriminant = discriminant;
7
+ this.value = value;
8
+ }
9
+ }
10
+ exports.XdrUnion = XdrUnion;
11
+ //# sourceMappingURL=XdrUnion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XdrUnion.js","sourceRoot":"","sources":["../../src/xdr/XdrUnion.ts"],"names":[],"mappings":";;;AAKA,MAAa,QAAQ;IACnB,YACkB,YAAuC,EACvC,KAAQ;QADR,iBAAY,GAAZ,YAAY,CAA2B;QACvC,UAAK,GAAL,KAAK,CAAG;IACvB,CAAC;CACL;AALD,4BAKC"}
@@ -1 +1,7 @@
1
1
  export * from './types';
2
+ export * from './XdrEncoder';
3
+ export * from './XdrDecoder';
4
+ export * from './XdrSchemaEncoder';
5
+ export * from './XdrSchemaDecoder';
6
+ export * from './XdrSchemaValidator';
7
+ export * from './XdrUnion';
package/lib/xdr/index.js CHANGED
@@ -2,4 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./types"), exports);
5
+ tslib_1.__exportStar(require("./XdrEncoder"), exports);
6
+ tslib_1.__exportStar(require("./XdrDecoder"), exports);
7
+ tslib_1.__exportStar(require("./XdrSchemaEncoder"), exports);
8
+ tslib_1.__exportStar(require("./XdrSchemaDecoder"), exports);
9
+ tslib_1.__exportStar(require("./XdrSchemaValidator"), exports);
10
+ tslib_1.__exportStar(require("./XdrUnion"), exports);
5
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/xdr/index.ts"],"names":[],"mappings":";;;AAOA,kDAAwB"}
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.12.0",
3
+ "version": "1.14.0",
4
4
  "description": "High-performance JSON serialization library",
5
5
  "author": {
6
6
  "name": "streamich",