@jsonjoy.com/json-pack 1.11.0 → 1.13.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,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,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"}
@@ -0,0 +1,5 @@
1
+ export * from './types';
2
+ export * from './XdrEncoder';
3
+ export * from './XdrSchemaEncoder';
4
+ export * from './XdrSchemaValidator';
5
+ export * from './XdrUnion';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./types"), exports);
5
+ tslib_1.__exportStar(require("./XdrEncoder"), exports);
6
+ tslib_1.__exportStar(require("./XdrSchemaEncoder"), exports);
7
+ tslib_1.__exportStar(require("./XdrSchemaValidator"), exports);
8
+ tslib_1.__exportStar(require("./XdrUnion"), exports);
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,44 @@
1
+ export type XdrSchema = XdrPrimitiveSchema | XdrWidePrimitiveSchema | XdrCompositeSchema;
2
+ export type XdrPrimitiveSchema = XdrVoidSchema | XdrIntSchema | XdrUnsignedIntSchema | XdrEnumSchema | XdrBooleanSchema | XdrHyperSchema | XdrUnsignedHyperSchema | XdrFloatSchema | XdrDoubleSchema | XdrQuadrupleSchema;
3
+ export type XdrVoidSchema = XdrBaseSchema<'void'>;
4
+ export type XdrIntSchema = XdrBaseSchema<'int'>;
5
+ export type XdrUnsignedIntSchema = XdrBaseSchema<'unsigned_int'>;
6
+ export interface XdrEnumSchema extends XdrBaseSchema<'enum'> {
7
+ values: Record<string, number>;
8
+ }
9
+ export type XdrBooleanSchema = XdrBaseSchema<'boolean'>;
10
+ export type XdrHyperSchema = XdrBaseSchema<'hyper'>;
11
+ export type XdrUnsignedHyperSchema = XdrBaseSchema<'unsigned_hyper'>;
12
+ export type XdrFloatSchema = XdrBaseSchema<'float'>;
13
+ export type XdrDoubleSchema = XdrBaseSchema<'double'>;
14
+ export type XdrQuadrupleSchema = XdrBaseSchema<'quadruple'>;
15
+ export type XdrWidePrimitiveSchema = XdrOpaqueSchema | XdrVarlenOpaqueSchema | XdrStringSchema;
16
+ export interface XdrOpaqueSchema extends XdrBaseSchema<'opaque'> {
17
+ size: number;
18
+ }
19
+ export interface XdrVarlenOpaqueSchema extends XdrBaseSchema<'vopaque'> {
20
+ size?: number;
21
+ }
22
+ export interface XdrStringSchema extends XdrBaseSchema<'string'> {
23
+ size?: number;
24
+ }
25
+ export type XdrCompositeSchema = XdrArraySchema | XdrVarlenArraySchema | XdrStructSchema | XdrUnionSchema;
26
+ export interface XdrArraySchema extends XdrBaseSchema<'array'> {
27
+ elements: XdrSchema;
28
+ size: number;
29
+ }
30
+ export interface XdrVarlenArraySchema extends XdrBaseSchema<'varray'> {
31
+ elements: XdrSchema;
32
+ size?: number;
33
+ }
34
+ export interface XdrStructSchema extends XdrBaseSchema<'struct'> {
35
+ fields: [schema: XdrSchema, name: string][];
36
+ }
37
+ export interface XdrUnionSchema extends XdrBaseSchema<'union'> {
38
+ type: 'union';
39
+ arms: [discriminant: number | string | boolean, schema: XdrSchema][];
40
+ default?: XdrSchema;
41
+ }
42
+ export interface XdrBaseSchema<Type extends string> {
43
+ type: Type;
44
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/xdr/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsonjoy.com/json-pack",
3
- "version": "1.11.0",
3
+ "version": "1.13.0",
4
4
  "description": "High-performance JSON serialization library",
5
5
  "author": {
6
6
  "name": "streamich",