@jsonjoy.com/json-pack 1.2.0 → 1.4.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,449 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EjsonDecoder = void 0;
4
+ const values_1 = require("../bson/values");
5
+ const JsonDecoder_1 = require("../json/JsonDecoder");
6
+ const JsonDecoder_2 = require("../json/JsonDecoder");
7
+ class EjsonDecoder extends JsonDecoder_1.JsonDecoder {
8
+ constructor(options = {}) {
9
+ super();
10
+ this.options = options;
11
+ }
12
+ decodeFromString(json) {
13
+ const bytes = new TextEncoder().encode(json);
14
+ return this.decode(bytes);
15
+ }
16
+ readAny() {
17
+ this.skipWhitespace();
18
+ const reader = this.reader;
19
+ const uint8 = reader.uint8;
20
+ const char = uint8[reader.x];
21
+ switch (char) {
22
+ case 34:
23
+ return this.readStr();
24
+ case 91:
25
+ return this.readArr();
26
+ case 102:
27
+ return this.readFalse();
28
+ case 110:
29
+ return this.readNull();
30
+ case 116:
31
+ return this.readTrue();
32
+ case 123:
33
+ return this.readObjWithEjsonSupport();
34
+ default:
35
+ if ((char >= 48 && char <= 57) || char === 45)
36
+ return this.readNum();
37
+ throw new Error('Invalid JSON');
38
+ }
39
+ }
40
+ readArr() {
41
+ const reader = this.reader;
42
+ if (reader.u8() !== 0x5b)
43
+ throw new Error('Invalid JSON');
44
+ const arr = [];
45
+ const uint8 = reader.uint8;
46
+ let first = true;
47
+ while (true) {
48
+ this.skipWhitespace();
49
+ const char = uint8[reader.x];
50
+ if (char === 0x5d)
51
+ return reader.x++, arr;
52
+ if (char === 0x2c)
53
+ reader.x++;
54
+ else if (!first)
55
+ throw new Error('Invalid JSON');
56
+ this.skipWhitespace();
57
+ arr.push(this.readAny());
58
+ first = false;
59
+ }
60
+ }
61
+ readObjWithEjsonSupport() {
62
+ const reader = this.reader;
63
+ if (reader.u8() !== 0x7b)
64
+ throw new Error('Invalid JSON');
65
+ const obj = {};
66
+ const uint8 = reader.uint8;
67
+ let first = true;
68
+ while (true) {
69
+ this.skipWhitespace();
70
+ let char = uint8[reader.x];
71
+ if (char === 0x7d) {
72
+ reader.x++;
73
+ return this.transformEjsonObject(obj);
74
+ }
75
+ if (char === 0x2c)
76
+ reader.x++;
77
+ else if (!first)
78
+ throw new Error('Invalid JSON');
79
+ this.skipWhitespace();
80
+ char = uint8[reader.x++];
81
+ if (char !== 0x22)
82
+ throw new Error('Invalid JSON');
83
+ const key = (0, JsonDecoder_2.readKey)(reader);
84
+ if (key === '__proto__')
85
+ throw new Error('Invalid JSON');
86
+ this.skipWhitespace();
87
+ if (reader.u8() !== 0x3a)
88
+ throw new Error('Invalid JSON');
89
+ this.skipWhitespace();
90
+ obj[key] = this.readValue();
91
+ first = false;
92
+ }
93
+ }
94
+ readValue() {
95
+ this.skipWhitespace();
96
+ const reader = this.reader;
97
+ const uint8 = reader.uint8;
98
+ const char = uint8[reader.x];
99
+ switch (char) {
100
+ case 34:
101
+ return this.readStr();
102
+ case 91:
103
+ return this.readArr();
104
+ case 102:
105
+ return this.readFalse();
106
+ case 110:
107
+ return this.readNull();
108
+ case 116:
109
+ return this.readTrue();
110
+ case 123:
111
+ return this.readRawObj();
112
+ default:
113
+ if ((char >= 48 && char <= 57) || char === 45)
114
+ return this.readNum();
115
+ throw new Error('Invalid JSON');
116
+ }
117
+ }
118
+ readRawObj() {
119
+ const reader = this.reader;
120
+ if (reader.u8() !== 0x7b)
121
+ throw new Error('Invalid JSON');
122
+ const obj = {};
123
+ const uint8 = reader.uint8;
124
+ let first = true;
125
+ while (true) {
126
+ this.skipWhitespace();
127
+ let char = uint8[reader.x];
128
+ if (char === 0x7d) {
129
+ reader.x++;
130
+ return obj;
131
+ }
132
+ if (char === 0x2c)
133
+ reader.x++;
134
+ else if (!first)
135
+ throw new Error('Invalid JSON');
136
+ this.skipWhitespace();
137
+ char = uint8[reader.x++];
138
+ if (char !== 0x22)
139
+ throw new Error('Invalid JSON');
140
+ const key = (0, JsonDecoder_2.readKey)(reader);
141
+ if (key === '__proto__')
142
+ throw new Error('Invalid JSON');
143
+ this.skipWhitespace();
144
+ if (reader.u8() !== 0x3a)
145
+ throw new Error('Invalid JSON');
146
+ this.skipWhitespace();
147
+ obj[key] = this.readValue();
148
+ first = false;
149
+ }
150
+ }
151
+ transformEjsonObject(obj) {
152
+ const keys = Object.keys(obj);
153
+ const hasExactKeys = (expectedKeys) => {
154
+ if (keys.length !== expectedKeys.length)
155
+ return false;
156
+ return expectedKeys.every((key) => keys.includes(key));
157
+ };
158
+ const specialKeys = keys.filter((key) => key.startsWith('$'));
159
+ if (specialKeys.length > 0) {
160
+ if (specialKeys.includes('$oid')) {
161
+ if (!hasExactKeys(['$oid'])) {
162
+ throw new Error('Invalid ObjectId format: extra keys not allowed');
163
+ }
164
+ const oidStr = obj.$oid;
165
+ if (typeof oidStr === 'string' && /^[0-9a-fA-F]{24}$/.test(oidStr)) {
166
+ return this.parseObjectId(oidStr);
167
+ }
168
+ throw new Error('Invalid ObjectId format');
169
+ }
170
+ if (specialKeys.includes('$numberInt')) {
171
+ if (!hasExactKeys(['$numberInt'])) {
172
+ throw new Error('Invalid Int32 format: extra keys not allowed');
173
+ }
174
+ const intStr = obj.$numberInt;
175
+ if (typeof intStr === 'string') {
176
+ const value = parseInt(intStr, 10);
177
+ if (!isNaN(value) && value >= -2147483648 && value <= 2147483647) {
178
+ return new values_1.BsonInt32(value);
179
+ }
180
+ }
181
+ throw new Error('Invalid Int32 format');
182
+ }
183
+ if (specialKeys.includes('$numberLong')) {
184
+ if (!hasExactKeys(['$numberLong'])) {
185
+ throw new Error('Invalid Int64 format: extra keys not allowed');
186
+ }
187
+ const longStr = obj.$numberLong;
188
+ if (typeof longStr === 'string') {
189
+ const value = parseFloat(longStr);
190
+ if (!isNaN(value)) {
191
+ return new values_1.BsonInt64(value);
192
+ }
193
+ }
194
+ throw new Error('Invalid Int64 format');
195
+ }
196
+ if (specialKeys.includes('$numberDouble')) {
197
+ if (!hasExactKeys(['$numberDouble'])) {
198
+ throw new Error('Invalid Double format: extra keys not allowed');
199
+ }
200
+ const doubleStr = obj.$numberDouble;
201
+ if (typeof doubleStr === 'string') {
202
+ if (doubleStr === 'Infinity')
203
+ return new values_1.BsonFloat(Infinity);
204
+ if (doubleStr === '-Infinity')
205
+ return new values_1.BsonFloat(-Infinity);
206
+ if (doubleStr === 'NaN')
207
+ return new values_1.BsonFloat(NaN);
208
+ const value = parseFloat(doubleStr);
209
+ if (!isNaN(value)) {
210
+ return new values_1.BsonFloat(value);
211
+ }
212
+ }
213
+ throw new Error('Invalid Double format');
214
+ }
215
+ if (specialKeys.includes('$numberDecimal')) {
216
+ if (!hasExactKeys(['$numberDecimal'])) {
217
+ throw new Error('Invalid Decimal128 format: extra keys not allowed');
218
+ }
219
+ const decimalStr = obj.$numberDecimal;
220
+ if (typeof decimalStr === 'string') {
221
+ return new values_1.BsonDecimal128(new Uint8Array(16));
222
+ }
223
+ throw new Error('Invalid Decimal128 format');
224
+ }
225
+ if (specialKeys.includes('$binary')) {
226
+ if (!hasExactKeys(['$binary'])) {
227
+ throw new Error('Invalid Binary format: extra keys not allowed');
228
+ }
229
+ const binaryObj = obj.$binary;
230
+ if (typeof binaryObj === 'object' && binaryObj !== null) {
231
+ const binaryKeys = Object.keys(binaryObj);
232
+ if (binaryKeys.length === 2 && binaryKeys.includes('base64') && binaryKeys.includes('subType')) {
233
+ const base64 = binaryObj.base64;
234
+ const subType = binaryObj.subType;
235
+ if (typeof base64 === 'string' && typeof subType === 'string') {
236
+ const data = this.base64ToUint8Array(base64);
237
+ const subtype = parseInt(subType, 16);
238
+ return new values_1.BsonBinary(subtype, data);
239
+ }
240
+ }
241
+ }
242
+ throw new Error('Invalid Binary format');
243
+ }
244
+ if (specialKeys.includes('$uuid')) {
245
+ if (!hasExactKeys(['$uuid'])) {
246
+ throw new Error('Invalid UUID format: extra keys not allowed');
247
+ }
248
+ const uuidStr = obj.$uuid;
249
+ if (typeof uuidStr === 'string' && this.isValidUuid(uuidStr)) {
250
+ const data = this.uuidToBytes(uuidStr);
251
+ return new values_1.BsonBinary(4, data);
252
+ }
253
+ throw new Error('Invalid UUID format');
254
+ }
255
+ if (specialKeys.includes('$code') && !specialKeys.includes('$scope')) {
256
+ if (!hasExactKeys(['$code'])) {
257
+ throw new Error('Invalid Code format: extra keys not allowed');
258
+ }
259
+ const code = obj.$code;
260
+ if (typeof code === 'string') {
261
+ return new values_1.BsonJavascriptCode(code);
262
+ }
263
+ throw new Error('Invalid Code format');
264
+ }
265
+ if (specialKeys.includes('$code') && specialKeys.includes('$scope')) {
266
+ if (!hasExactKeys(['$code', '$scope'])) {
267
+ throw new Error('Invalid CodeWScope format: extra keys not allowed');
268
+ }
269
+ const code = obj.$code;
270
+ const scope = obj.$scope;
271
+ if (typeof code === 'string' && typeof scope === 'object' && scope !== null) {
272
+ return new values_1.BsonJavascriptCodeWithScope(code, this.transformEjsonObject(scope));
273
+ }
274
+ throw new Error('Invalid CodeWScope format');
275
+ }
276
+ if (specialKeys.includes('$symbol')) {
277
+ if (!hasExactKeys(['$symbol'])) {
278
+ throw new Error('Invalid Symbol format: extra keys not allowed');
279
+ }
280
+ const symbol = obj.$symbol;
281
+ if (typeof symbol === 'string') {
282
+ return new values_1.BsonSymbol(symbol);
283
+ }
284
+ throw new Error('Invalid Symbol format');
285
+ }
286
+ if (specialKeys.includes('$timestamp')) {
287
+ if (!hasExactKeys(['$timestamp'])) {
288
+ throw new Error('Invalid Timestamp format: extra keys not allowed');
289
+ }
290
+ const timestampObj = obj.$timestamp;
291
+ if (typeof timestampObj === 'object' && timestampObj !== null) {
292
+ const timestampKeys = Object.keys(timestampObj);
293
+ if (timestampKeys.length === 2 && timestampKeys.includes('t') && timestampKeys.includes('i')) {
294
+ const t = timestampObj.t;
295
+ const i = timestampObj.i;
296
+ if (typeof t === 'number' && typeof i === 'number' && t >= 0 && i >= 0) {
297
+ return new values_1.BsonTimestamp(i, t);
298
+ }
299
+ }
300
+ }
301
+ throw new Error('Invalid Timestamp format');
302
+ }
303
+ if (specialKeys.includes('$regularExpression')) {
304
+ if (!hasExactKeys(['$regularExpression'])) {
305
+ throw new Error('Invalid RegularExpression format: extra keys not allowed');
306
+ }
307
+ const regexObj = obj.$regularExpression;
308
+ if (typeof regexObj === 'object' && regexObj !== null) {
309
+ const regexKeys = Object.keys(regexObj);
310
+ if (regexKeys.length === 2 && regexKeys.includes('pattern') && regexKeys.includes('options')) {
311
+ const pattern = regexObj.pattern;
312
+ const options = regexObj.options;
313
+ if (typeof pattern === 'string' && typeof options === 'string') {
314
+ return new RegExp(pattern, options);
315
+ }
316
+ }
317
+ }
318
+ throw new Error('Invalid RegularExpression format');
319
+ }
320
+ if (specialKeys.includes('$dbPointer')) {
321
+ if (!hasExactKeys(['$dbPointer'])) {
322
+ throw new Error('Invalid DBPointer format: extra keys not allowed');
323
+ }
324
+ const dbPointerObj = obj.$dbPointer;
325
+ if (typeof dbPointerObj === 'object' && dbPointerObj !== null) {
326
+ const dbPointerKeys = Object.keys(dbPointerObj);
327
+ if (dbPointerKeys.length === 2 && dbPointerKeys.includes('$ref') && dbPointerKeys.includes('$id')) {
328
+ const ref = dbPointerObj.$ref;
329
+ const id = dbPointerObj.$id;
330
+ if (typeof ref === 'string' && id !== undefined) {
331
+ const transformedId = this.transformEjsonObject(id);
332
+ if (transformedId instanceof values_1.BsonObjectId) {
333
+ return new values_1.BsonDbPointer(ref, transformedId);
334
+ }
335
+ }
336
+ }
337
+ }
338
+ throw new Error('Invalid DBPointer format');
339
+ }
340
+ if (specialKeys.includes('$date')) {
341
+ if (!hasExactKeys(['$date'])) {
342
+ throw new Error('Invalid Date format: extra keys not allowed');
343
+ }
344
+ const dateValue = obj.$date;
345
+ if (typeof dateValue === 'string') {
346
+ const date = new Date(dateValue);
347
+ if (!isNaN(date.getTime())) {
348
+ return date;
349
+ }
350
+ }
351
+ else if (typeof dateValue === 'object' && dateValue !== null) {
352
+ const longObj = dateValue;
353
+ const longKeys = Object.keys(longObj);
354
+ if (longKeys.length === 1 && longKeys[0] === '$numberLong' && typeof longObj.$numberLong === 'string') {
355
+ const timestamp = parseFloat(longObj.$numberLong);
356
+ if (!isNaN(timestamp)) {
357
+ return new Date(timestamp);
358
+ }
359
+ }
360
+ }
361
+ throw new Error('Invalid Date format');
362
+ }
363
+ if (specialKeys.includes('$minKey')) {
364
+ if (!hasExactKeys(['$minKey'])) {
365
+ throw new Error('Invalid MinKey format: extra keys not allowed');
366
+ }
367
+ if (obj.$minKey === 1) {
368
+ return new values_1.BsonMinKey();
369
+ }
370
+ throw new Error('Invalid MinKey format');
371
+ }
372
+ if (specialKeys.includes('$maxKey')) {
373
+ if (!hasExactKeys(['$maxKey'])) {
374
+ throw new Error('Invalid MaxKey format: extra keys not allowed');
375
+ }
376
+ if (obj.$maxKey === 1) {
377
+ return new values_1.BsonMaxKey();
378
+ }
379
+ throw new Error('Invalid MaxKey format');
380
+ }
381
+ if (specialKeys.includes('$undefined')) {
382
+ if (!hasExactKeys(['$undefined'])) {
383
+ throw new Error('Invalid Undefined format: extra keys not allowed');
384
+ }
385
+ if (obj.$undefined === true) {
386
+ return undefined;
387
+ }
388
+ throw new Error('Invalid Undefined format');
389
+ }
390
+ }
391
+ if (keys.includes('$ref') && keys.includes('$id')) {
392
+ const ref = obj.$ref;
393
+ const id = this.transformEjsonObject(obj.$id);
394
+ const result = { $ref: ref, $id: id };
395
+ if (keys.includes('$db')) {
396
+ result.$db = obj.$db;
397
+ }
398
+ for (const key of keys) {
399
+ if (key !== '$ref' && key !== '$id' && key !== '$db') {
400
+ result[key] = this.transformEjsonObject(obj[key]);
401
+ }
402
+ }
403
+ return result;
404
+ }
405
+ const result = {};
406
+ for (const [key, val] of Object.entries(obj)) {
407
+ if (typeof val === 'object' && val !== null && !Array.isArray(val)) {
408
+ result[key] = this.transformEjsonObject(val);
409
+ }
410
+ else if (Array.isArray(val)) {
411
+ result[key] = val.map((item) => typeof item === 'object' && item !== null && !Array.isArray(item)
412
+ ? this.transformEjsonObject(item)
413
+ : item);
414
+ }
415
+ else {
416
+ result[key] = val;
417
+ }
418
+ }
419
+ return result;
420
+ }
421
+ parseObjectId(hex) {
422
+ const timestamp = parseInt(hex.slice(0, 8), 16);
423
+ const process = parseInt(hex.slice(8, 18), 16);
424
+ const counter = parseInt(hex.slice(18, 24), 16);
425
+ return new values_1.BsonObjectId(timestamp, process, counter);
426
+ }
427
+ base64ToUint8Array(base64) {
428
+ const binary = atob(base64);
429
+ const bytes = new Uint8Array(binary.length);
430
+ for (let i = 0; i < binary.length; i++) {
431
+ bytes[i] = binary.charCodeAt(i);
432
+ }
433
+ return bytes;
434
+ }
435
+ isValidUuid(uuid) {
436
+ const uuidPattern = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
437
+ return uuidPattern.test(uuid);
438
+ }
439
+ uuidToBytes(uuid) {
440
+ const hex = uuid.replace(/-/g, '');
441
+ const bytes = new Uint8Array(16);
442
+ for (let i = 0; i < 16; i++) {
443
+ bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
444
+ }
445
+ return bytes;
446
+ }
447
+ }
448
+ exports.EjsonDecoder = EjsonDecoder;
449
+ //# sourceMappingURL=EjsonDecoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EjsonDecoder.js","sourceRoot":"","sources":["../../src/ejson/EjsonDecoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { JsonEncoder } from '../json/JsonEncoder';
2
+ import type { IWriter, IWriterGrowable } from '@jsonjoy.com/util/lib/buffers';
3
+ export interface EjsonEncoderOptions {
4
+ canonical?: boolean;
5
+ }
6
+ export declare class EjsonEncoder extends JsonEncoder {
7
+ private options;
8
+ constructor(writer: IWriter & IWriterGrowable, options?: EjsonEncoderOptions);
9
+ encodeToString(value: unknown): string;
10
+ writeUnknown(value: unknown): void;
11
+ writeAny(value: unknown): void;
12
+ writeBin(buf: Uint8Array): void;
13
+ writeStr(str: string): void;
14
+ writeAsciiStr(str: string): void;
15
+ writeArr(arr: unknown[]): void;
16
+ writeObj(obj: Record<string, unknown>): void;
17
+ private writeUndefinedWrapper;
18
+ private writeNumberAsEjson;
19
+ private writeNumberIntWrapper;
20
+ private writeNumberLongWrapper;
21
+ private writeNumberDoubleWrapper;
22
+ private writeDateAsEjson;
23
+ private writeRegExpAsEjson;
24
+ private writeObjectIdAsEjson;
25
+ private writeBsonInt32AsEjson;
26
+ private writeBsonInt64AsEjson;
27
+ private writeBsonFloatAsEjson;
28
+ private writeBsonDecimal128AsEjson;
29
+ private writeBsonBinaryAsEjson;
30
+ private writeBsonCodeAsEjson;
31
+ private writeBsonCodeWScopeAsEjson;
32
+ private writeBsonSymbolAsEjson;
33
+ private writeBsonTimestampAsEjson;
34
+ private writeBsonDbPointerAsEjson;
35
+ private writeBsonMinKeyAsEjson;
36
+ private writeBsonMaxKeyAsEjson;
37
+ private formatNonFinite;
38
+ private objectIdToHex;
39
+ private uint8ArrayToBase64;
40
+ private decimal128ToString;
41
+ }