edinburgh 0.1.2 → 0.3.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,620 @@
1
+ const encoder = new TextEncoder();
2
+ const decoder = new TextDecoder('utf-8', { fatal: true });
3
+ // EOD marker for container parsing
4
+ const EOD = Symbol('EOD');
5
+ const BASE64_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$';
6
+ const BASE64_LOOKUP = new Uint8Array(128).fill(255); // Use 255 as invalid marker;
7
+ for (let i = 0; i < BASE64_CHARS.length; ++i)
8
+ BASE64_LOOKUP[BASE64_CHARS.charCodeAt(i)] = i;
9
+ const COLORS = ['\x1b[32m', '\x1b[33m', '\x1b[34m', '\x1b[35m']; // green, yellow, blue, magenta
10
+ const RESET_COLOR = '\x1b[0m';
11
+ const ERROR_COLOR = '\x1b[31m'; // red
12
+ let toStringTermCount = 0;
13
+ let useExtendedLogging = !!process.env.DATAPACK_EXTENDED_LOGGING;
14
+ /**
15
+ * A byte buffer for efficient reading and writing of primitive values and bit sequences.
16
+ *
17
+ * The DataPack class provides methods for serializing and deserializing various data types
18
+ * including numbers, strings, bit sequences, and other primitive values to/from byte buffers.
19
+ * It supports both reading and writing operations with automatic buffer management.
20
+ */
21
+ export class DataPack {
22
+ buffer;
23
+ dataView;
24
+ readPos = 0;
25
+ writePos = 0;
26
+ /**
27
+ * Backward compatibility: Access to the internal buffer
28
+ */
29
+ get _buffer() {
30
+ return this.buffer;
31
+ }
32
+ /**
33
+ * Create a new DataPack instance.
34
+ * @param data - Optional initial data as Uint8Array or buffer size as number.
35
+ */
36
+ constructor(data = 3900) {
37
+ if (data instanceof Uint8Array) {
38
+ this.buffer = data;
39
+ this.writePos = data.length;
40
+ }
41
+ else {
42
+ this.buffer = new Uint8Array(data);
43
+ }
44
+ }
45
+ /**
46
+ * Helper function to write a multi-byte integer with length prefix
47
+ * @param value - The value to write
48
+ * @param headerType - The type bits (0-7) for the header
49
+ * @param invertBytes - Whether to invert bytes (for negative numbers)
50
+ * @param invertByteCount - Whether to invert the byte count (for type 0)
51
+ */
52
+ writeMultiByteNumber(value, headerType, invertBytes = false, invertByteCount = false) {
53
+ let byteCount = 0;
54
+ let temp = value;
55
+ while (temp > 0) {
56
+ byteCount++;
57
+ temp = Math.floor(temp / 256);
58
+ }
59
+ const encodedByteCount = invertByteCount ? ((~byteCount) & 0x1F) : byteCount;
60
+ this.buffer[this.writePos++] = (headerType << 5) | encodedByteCount;
61
+ let max = 1;
62
+ for (let j = 0; j < byteCount; j++)
63
+ max *= 256;
64
+ for (let i = 0; i < byteCount; i++) {
65
+ max = Math.floor(max / 256);
66
+ let byte = Math.floor(value / max) % 256;
67
+ if (invertBytes)
68
+ byte ^= 0xFF;
69
+ this.buffer[this.writePos++] = byte;
70
+ }
71
+ }
72
+ /**
73
+ * Helper function to read a multi-byte integer with length prefix
74
+ * @param byteCount - Number of bytes to read
75
+ * @param invertBytes - Whether to invert bytes (for negative numbers)
76
+ * @returns The read value
77
+ */
78
+ readMultiByteNumber(byteCount, invertBytes = false) {
79
+ if (this.readPos + byteCount > this.writePos)
80
+ this.notEnoughData('number');
81
+ let value = 0;
82
+ let multiplier = 1;
83
+ for (let i = byteCount - 1; i >= 0; i--) {
84
+ let byte = this.buffer[this.readPos + i];
85
+ if (invertBytes)
86
+ byte ^= 0xFF;
87
+ value += byte * multiplier;
88
+ multiplier *= 256;
89
+ }
90
+ this.readPos += byteCount;
91
+ return value;
92
+ }
93
+ notEnoughData(type) {
94
+ throw new Error(`Not enough data to read a ${type} at position ${this.readPos} in\n${this.toString(true)}`);
95
+ }
96
+ /**
97
+ * Each data item starts with a single byte. The high 3 bits indicate the type.
98
+ * The low 5 bits indicate a size or a subtype, depending on the type.
99
+ *
100
+ * 0: negative integer (byte count encoded as bitwise NOT in lower bits)
101
+ * 1: small integer 0..31 (encoded in lower bits)
102
+ * 2: small integer 32...63 (encoded in lower bits)
103
+ * 3: integer (byte count encoded in lower bits)
104
+ * 4:
105
+ * 0: float64 (8 bytes follow)
106
+ * 1: undefined
107
+ * 2: null
108
+ * 3: true
109
+ * 4: false
110
+ * 5: array start (followed by a items until EOD)
111
+ * 6: object start (followed by key+value pairs until EOD)
112
+ * 7: map start (followed by key+value pairs until EOD)
113
+ * 8: set start (followed by items until EOD)
114
+ * 9: EOD
115
+ * 10: identifier (6 byte positive int follows, represented as a base64 string of length 8)
116
+ * 11: null-terminated string
117
+ * 5: short string (length in lower bits, 0-31)
118
+ * 6: string (byte count of length in lower bits)
119
+ * 7: blob (byte count of length in lower bits)
120
+ */
121
+ write(data) {
122
+ // Pessimistic capacity allocation - covers most cases
123
+ this.ensureCapacity(33); // 1 byte header + up to 32 bytes for large integers/length encoding
124
+ if (typeof data === 'number') {
125
+ if (Number.isInteger(data) && data <= Number.MAX_SAFE_INTEGER && data >= Number.MIN_SAFE_INTEGER) {
126
+ if (data >= 0) {
127
+ if (data < 32) { // Type 1: small positive integer 0...31
128
+ this.buffer[this.writePos++] = (1 << 5) | data;
129
+ }
130
+ else if (data < 64) { // Type 2: small positive integer 32...63
131
+ this.buffer[this.writePos++] = (2 << 5) | (data - 32);
132
+ }
133
+ else { // Type 3: positive integer (byte count in lower bits)
134
+ this.writeMultiByteNumber(data - 64, 3);
135
+ }
136
+ }
137
+ else {
138
+ // Type 0: negative integer (byte count as bitwise NOT in lower bits)
139
+ this.writeMultiByteNumber(-data, 0, true, true);
140
+ }
141
+ }
142
+ else {
143
+ // Type 4, subtype 0: float64
144
+ this.buffer[this.writePos++] = (4 << 5) | 0;
145
+ this.dataView ||= new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
146
+ this.dataView.setFloat64(this.writePos, data);
147
+ this.writePos += 8;
148
+ }
149
+ }
150
+ else if (data === undefined) {
151
+ this.buffer[this.writePos++] = (4 << 5) | 1;
152
+ }
153
+ else if (data === null) {
154
+ this.buffer[this.writePos++] = (4 << 5) | 2;
155
+ }
156
+ else if (data === true) {
157
+ this.buffer[this.writePos++] = (4 << 5) | 3;
158
+ }
159
+ else if (data === false) {
160
+ this.buffer[this.writePos++] = (4 << 5) | 4;
161
+ }
162
+ else if (typeof data === 'string') {
163
+ const encoded = encoder.encode(data);
164
+ if (encoded.length < 32) {
165
+ // Type 5: short string (length in lower bits, 0-31)
166
+ this.buffer[this.writePos++] = (5 << 5) | encoded.length;
167
+ }
168
+ else {
169
+ // Type 6: string (byte count of length in lower bits)
170
+ this.writeMultiByteNumber(encoded.length, 6);
171
+ }
172
+ this.ensureCapacity(encoded.length);
173
+ this.buffer.set(encoded, this.writePos);
174
+ this.writePos += encoded.length;
175
+ }
176
+ else if (data instanceof Uint8Array) {
177
+ // Type 7: blob (byte count of length in lower bits)
178
+ this.writeMultiByteNumber(data.length, 7);
179
+ this.ensureCapacity(data.length);
180
+ this.buffer.set(data, this.writePos);
181
+ this.writePos += data.length;
182
+ }
183
+ else if (Array.isArray(data)) {
184
+ // Type 4, subtype 5: array start
185
+ this.buffer[this.writePos++] = (4 << 5) | 5;
186
+ for (const item of data) {
187
+ this.write(item);
188
+ }
189
+ this.buffer[this.writePos++] = (4 << 5) | 9; // EOD
190
+ }
191
+ else if (data instanceof Map) {
192
+ // Type 4, subtype 7: map start
193
+ this.buffer[this.writePos++] = (4 << 5) | 7;
194
+ for (const [key, value] of data) {
195
+ this.write(key);
196
+ this.write(value);
197
+ }
198
+ this.buffer[this.writePos++] = (4 << 5) | 9; // EOD
199
+ }
200
+ else if (data instanceof Set) {
201
+ // Type 4, subtype 8: set start
202
+ this.buffer[this.writePos++] = (4 << 5) | 8;
203
+ for (const item of data) {
204
+ this.write(item);
205
+ }
206
+ this.buffer[this.writePos++] = (4 << 5) | 9; // EOD
207
+ }
208
+ else if (data instanceof Date) {
209
+ // Type 4, subtype 12: Date/Time
210
+ this.buffer[this.writePos++] = (4 << 5) | 12;
211
+ // Write a varint -- whole seconds should be plenty of resolution
212
+ this.write(Math.floor(data.getTime() / 1000));
213
+ }
214
+ else if (typeof data === 'object' && data.constructor === Object) {
215
+ // Type 4, subtype 6: object start
216
+ this.buffer[this.writePos++] = (4 << 5) | 6;
217
+ for (const [key, value] of Object.entries(data)) {
218
+ this.write(key);
219
+ this.write(value);
220
+ }
221
+ this.buffer[this.writePos++] = (4 << 5) | 9; // EOD
222
+ }
223
+ else {
224
+ throw new Error(`Unsupported data type: ${typeof data}`);
225
+ }
226
+ return this;
227
+ }
228
+ read() {
229
+ if (this.readPos > this.writePos) {
230
+ throw new Error('Not enough data');
231
+ }
232
+ const header = this.buffer[this.readPos++];
233
+ const type = (header >> 5) & 0x07;
234
+ const subtype = header & 0x1F;
235
+ switch (type) {
236
+ case 0: {
237
+ // Negative integer (byte count as bitwise NOT in lower bits)
238
+ const byteCount = (~subtype) & 0x1F;
239
+ return -this.readMultiByteNumber(byteCount, true);
240
+ }
241
+ case 1: {
242
+ // Small positive integer 0...31
243
+ return subtype;
244
+ }
245
+ case 2: {
246
+ // Small positive integer 32..63
247
+ return subtype + 32;
248
+ }
249
+ case 3: {
250
+ // Positive integer (byte count in lower bits)
251
+ return this.readMultiByteNumber(subtype) + 64;
252
+ }
253
+ case 4: {
254
+ // Special values and container starts
255
+ switch (subtype) {
256
+ case 0: {
257
+ // float64
258
+ if (this.readPos + 8 > this.writePos)
259
+ this.notEnoughData('float64');
260
+ this.dataView ||= new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
261
+ const result = this.dataView.getFloat64(this.readPos);
262
+ this.readPos += 8;
263
+ return result;
264
+ }
265
+ case 1: return undefined;
266
+ case 2: return null;
267
+ case 3: return true;
268
+ case 4: return false;
269
+ case 5: {
270
+ // Array start
271
+ const result = [];
272
+ while (true) {
273
+ const nextValue = this.read();
274
+ if (nextValue === EOD)
275
+ break;
276
+ result.push(nextValue);
277
+ }
278
+ return result;
279
+ }
280
+ case 6: {
281
+ // Object start
282
+ const result = {};
283
+ while (true) {
284
+ const key = this.read();
285
+ if (key === EOD)
286
+ break;
287
+ const value = this.read();
288
+ result[key] = value;
289
+ }
290
+ return result;
291
+ }
292
+ case 7: {
293
+ // Map start
294
+ const result = new Map();
295
+ while (true) {
296
+ const key = this.read();
297
+ if (key === EOD)
298
+ break;
299
+ const value = this.read();
300
+ result.set(key, value);
301
+ }
302
+ return result;
303
+ }
304
+ case 8: {
305
+ // Set start
306
+ const result = new Set();
307
+ while (true) {
308
+ const value = this.read();
309
+ if (value === EOD)
310
+ break;
311
+ result.add(value);
312
+ }
313
+ return result;
314
+ }
315
+ case 9: return EOD;
316
+ case 10: {
317
+ // Identifier (6 byte positive int follows, represented as a base64 string of length 8)
318
+ --this.readPos;
319
+ return this.readIdentifier();
320
+ }
321
+ case 11: {
322
+ // Null-terminated string
323
+ const start = this.readPos;
324
+ let end = start;
325
+ while (true) {
326
+ if (end >= this.writePos)
327
+ this.notEnoughData('null-terminated string');
328
+ if (this.buffer[end] === 0)
329
+ break;
330
+ end++;
331
+ }
332
+ this.readPos = end + 1; // Skip the null terminator
333
+ return decoder.decode(this.buffer.subarray(start, end));
334
+ }
335
+ case 12: {
336
+ // Date/Time (varint with whole seconds since epoch follows)
337
+ const seconds = this.readPositiveInt();
338
+ return new Date(seconds * 1000);
339
+ }
340
+ default: throw new Error(`Unknown type 4 subtype: ${subtype}`);
341
+ }
342
+ }
343
+ case 5: {
344
+ // Short string (length in lower bits, 0-31)
345
+ const length = subtype;
346
+ if (this.readPos + length > this.writePos)
347
+ this.notEnoughData('short string');
348
+ const bytes = this.buffer.subarray(this.readPos, this.readPos + length);
349
+ this.readPos += length;
350
+ return decoder.decode(bytes);
351
+ }
352
+ case 6: {
353
+ // String (byte count of length in lower bits)
354
+ const length = this.readMultiByteNumber(subtype);
355
+ if (this.readPos + length > this.writePos)
356
+ this.notEnoughData('string');
357
+ const bytes = this.buffer.subarray(this.readPos, this.readPos + length);
358
+ this.readPos += length;
359
+ return decoder.decode(bytes);
360
+ }
361
+ case 7: {
362
+ // Blob (byte count of length in lower bits)
363
+ const length = this.readMultiByteNumber(subtype);
364
+ if (this.readPos + length > this.writePos)
365
+ this.notEnoughData('blob');
366
+ // This makes an actual copy of the underlying buffer data
367
+ const result = this.buffer.slice(this.readPos, this.readPos + length);
368
+ this.readPos += length;
369
+ return new Uint8Array(result); // Return a copy
370
+ }
371
+ default: throw new Error(`Unknown type: ${type}`);
372
+ }
373
+ }
374
+ /**
375
+ * Ensure the buffer has capacity for additional bytes.
376
+ * @param bytesNeeded - Number of additional bytes needed.
377
+ */
378
+ ensureCapacity(bytesNeeded) {
379
+ const needed = this.writePos + bytesNeeded;
380
+ if (needed <= this.buffer.length)
381
+ return;
382
+ // Grow by 1.5x or the needed amount, whichever is larger
383
+ const newCapacity = Math.max(needed, Math.floor(this.buffer.length * 1.5));
384
+ const newBuffer = new Uint8Array(newCapacity);
385
+ newBuffer.set(this.buffer.subarray(0, this.writePos));
386
+ this.buffer = newBuffer;
387
+ delete this.dataView;
388
+ }
389
+ readNumber() {
390
+ const result = this.read();
391
+ if (typeof result !== 'number') {
392
+ throw new Error('Expected number but got ' + typeof result);
393
+ }
394
+ return result;
395
+ }
396
+ readDate() {
397
+ const result = this.read();
398
+ if (!(result instanceof Date)) {
399
+ throw new Error('Expected Date but got ' + typeof result);
400
+ }
401
+ return result;
402
+ }
403
+ readPositiveInt(limit) {
404
+ const result = this.read();
405
+ if (typeof result !== 'number' || !Number.isInteger(result) || result < 0 || (limit !== undefined && result >= limit)) {
406
+ throw new Error(`Expected positive integer < ${limit} but got ${result}`);
407
+ }
408
+ return result;
409
+ }
410
+ readBoolean() {
411
+ const result = this.read();
412
+ if (typeof result !== 'boolean') {
413
+ throw new Error('Expected boolean but got ' + typeof result);
414
+ }
415
+ return result;
416
+ }
417
+ readUint8Array() {
418
+ const result = this.read();
419
+ if (!(result instanceof Uint8Array)) {
420
+ throw new Error('Expected Uint8Array but got ' + typeof result);
421
+ }
422
+ return result;
423
+ }
424
+ readString() {
425
+ const result = this.read();
426
+ if (typeof result !== 'string') {
427
+ throw new Error('Expected string but got ' + typeof result);
428
+ }
429
+ return result;
430
+ }
431
+ writeIdentifier(id) {
432
+ if (id.length !== 8) {
433
+ throw new Error(`Identifier must be exactly 8 characters, got ${id.length}`);
434
+ }
435
+ // Convert base64 string to 48-bit number
436
+ let value, num = 0;
437
+ for (let i = 0; i < 8; i++) {
438
+ const char = id.charCodeAt(i);
439
+ if (char > 127 || (value = BASE64_LOOKUP[char]) === 255) {
440
+ throw new Error(`Invalid base64 character: ${id[i]}`);
441
+ }
442
+ num = num * 64 + value;
443
+ }
444
+ // Write type 4, subtype 10 header
445
+ this.ensureCapacity(7); // 1 byte header + 6 bytes for the number
446
+ this.buffer[this.writePos++] = (4 << 5) | 10;
447
+ // Write the 6-byte number in big-endian format
448
+ for (let i = 5; i >= 0; i--) {
449
+ this.buffer[this.writePos++] = Math.floor(num / Math.pow(256, i)) & 0xFF;
450
+ }
451
+ return this;
452
+ }
453
+ readIdentifier() {
454
+ // Read the 6-byte number in big-endian format
455
+ if (this.readPos + 7 > this.writePos)
456
+ this.notEnoughData('identifier');
457
+ const header = this.buffer[this.readPos++];
458
+ if (header !== ((4 << 5) | 10)) {
459
+ throw new Error('Invalid identifier header');
460
+ }
461
+ let num = 0;
462
+ for (let i = 0; i < 6; i++) {
463
+ num = (num * 256) + this.buffer[this.readPos++];
464
+ }
465
+ // Convert 48-bit number back to 8-character base64 string
466
+ let id = '';
467
+ for (let i = 0; i < 8; i++) {
468
+ id = BASE64_CHARS[num % 64] + id;
469
+ num = Math.floor(num / 64);
470
+ }
471
+ return id;
472
+ }
473
+ /**
474
+ * Like writeString but writes without a length prefix and with a null terminator, for ordered storage.
475
+ * Can be read with {@link read} or {@link readString} just like any other string.
476
+ * @param str - The string to write. May not contain null characters.
477
+ */
478
+ writeOrderedString(str) {
479
+ const utf8Bytes = new TextEncoder().encode(str);
480
+ if (utf8Bytes.includes(0)) {
481
+ throw new Error('String contains null character');
482
+ }
483
+ this.ensureCapacity(utf8Bytes.length + 2);
484
+ this.buffer[this.writePos++] = (4 << 5) | 11; // Null-terminated string
485
+ this.buffer.set(utf8Bytes, this.writePos);
486
+ this.writePos += utf8Bytes.length;
487
+ this.buffer[this.writePos++] = 0; // Null terminator
488
+ return this;
489
+ }
490
+ toUint8Array(copyBuffer = true, startPos = 0, endPos = this.writePos) {
491
+ return copyBuffer ? this.buffer.slice(startPos, endPos) : this.buffer.subarray(startPos, endPos);
492
+ }
493
+ clone(copyBuffer, readPos = 0, writePos = this.writePos) {
494
+ if (copyBuffer) {
495
+ return new DataPack(this.buffer.slice(readPos, writePos));
496
+ }
497
+ else {
498
+ const pack = new DataPack(this.buffer);
499
+ pack.readPos = readPos;
500
+ pack.writePos = writePos;
501
+ return pack;
502
+ }
503
+ }
504
+ writeCollection(type, bodyFunc) {
505
+ let subType = { 'array': 5, 'object': 6, 'map': 7, 'set': 8 }[type];
506
+ if (!subType)
507
+ throw new Error(`Invalid collection type: ${type}`);
508
+ this.buffer[this.writePos++] = (4 << 5) | subType; // Collection start
509
+ bodyFunc((type === 'array' || type === 'set') ? (value) => {
510
+ this.write(value);
511
+ } : (name, value) => {
512
+ this.write(name);
513
+ this.write(value);
514
+ });
515
+ this.buffer[this.writePos++] = (4 << 5) | 9; // EOD
516
+ return this;
517
+ }
518
+ /**
519
+ * Increment the last byte of the buffer. If it was already 255 set it to 0 and
520
+ * increment the previous byte, and so on. If all bytes were 255, return undefined.
521
+ * This is useful for creating an exclusive end key for range scans.
522
+ * This may result in a DataPack instance that cannot be parsed (or represented by
523
+ * {@link toString}).
524
+ */
525
+ increment() {
526
+ for (let byte = this.writePos - 1; byte >= 0; byte--) {
527
+ if (this.buffer[byte] === 255) {
528
+ // Byte is all 1s, set to 0 and continue
529
+ this.buffer[byte] = 0;
530
+ }
531
+ else {
532
+ this.buffer[byte]++;
533
+ return this;
534
+ }
535
+ }
536
+ return undefined; // All bytes were 255 (and are now 0)
537
+ }
538
+ toString(extended = undefined, startPos = 0, endPos = this.writePos) {
539
+ if (extended === undefined)
540
+ extended = useExtendedLogging;
541
+ let oldReadPos = this.readPos;
542
+ this.readPos = startPos;
543
+ let lastPos = 0;
544
+ let vals = '';
545
+ let hexs = '';
546
+ const orgTermCount = toStringTermCount;
547
+ const resetColor = orgTermCount > 0 ? COLORS[(orgTermCount - 1) % COLORS.length] : RESET_COLOR;
548
+ try {
549
+ while (this.readPos < endPos) {
550
+ const color = COLORS[toStringTermCount++ % COLORS.length];
551
+ vals += color + toText(this.read()) + ' ';
552
+ if (extended) {
553
+ hexs += color;
554
+ while (lastPos < this.readPos) {
555
+ hexs += this.buffer[lastPos].toString(16).padStart(2, '0') + ' ';
556
+ lastPos++;
557
+ }
558
+ }
559
+ }
560
+ }
561
+ catch (e) {
562
+ if (!extended) {
563
+ this.readPos = oldReadPos;
564
+ toStringTermCount = orgTermCount;
565
+ return this.toString(true, startPos, endPos);
566
+ }
567
+ vals += ERROR_COLOR + "ERROR ";
568
+ hexs += ERROR_COLOR;
569
+ while (lastPos < this.writePos) {
570
+ hexs += this.buffer[lastPos].toString(16).padStart(2, '0') + ' ';
571
+ lastPos++;
572
+ }
573
+ }
574
+ this.readPos = oldReadPos;
575
+ if (!orgTermCount)
576
+ toStringTermCount = 0;
577
+ if (extended) {
578
+ return "DataPack{" + hexs + resetColor + "→ " + vals.trimEnd() + resetColor + "}";
579
+ }
580
+ else {
581
+ return "DataPack{" + vals.trimEnd() + resetColor + "}";
582
+ }
583
+ }
584
+ [Symbol.for('nodejs.util.inspect.custom')]() {
585
+ return this.toString();
586
+ }
587
+ readAvailable() {
588
+ return this.readPos < this.writePos;
589
+ }
590
+ static generateIdentifier() {
591
+ // Combine a timestamp with randomness, to create locality of reference as well as a high chance of uniqueness.
592
+ // Bits 9...48 are the date in ms (wrapping about every 34 years), providing some `locality of reference
593
+ // Bit 0...14 are random bits (partly overlapping with the date, adding up to 62ms of jitter)
594
+ let num = Math.floor(+new Date() * (1 << 8) + Math.random() * (1 << 14));
595
+ let id = '';
596
+ for (let i = 0; i < 8; i++) {
597
+ id = BASE64_CHARS[num & 0x3f] + id;
598
+ num = Math.floor(num / 64);
599
+ }
600
+ return id;
601
+ }
602
+ }
603
+ function toText(v) {
604
+ if (v === undefined)
605
+ return 'undefined';
606
+ if (typeof v === 'object' && v !== null) {
607
+ if (v instanceof Uint8Array)
608
+ return new DataPack(v).toString();
609
+ if (v instanceof Array)
610
+ return '[' + v.map(vv => toText(vv)).join(', ') + ']';
611
+ if (v instanceof Map)
612
+ return 'Map{' + Array.from(v.entries()).map(([k, val]) => `${toText(k)}=>${toText(val)}`).join(', ') + '}';
613
+ if (v instanceof Set)
614
+ return 'Set{' + Array.from(v.values()).map(vv => toText(vv)).join(', ') + '}';
615
+ if (typeof v === 'object' && v !== null)
616
+ return '{' + Object.entries(v).map(([k, val]) => `${k}:${toText(val)}`).join(', ') + '}';
617
+ }
618
+ return JSON.stringify(v);
619
+ }
620
+ //# sourceMappingURL=datapack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datapack.js","sourceRoot":"","sources":["../../src/datapack.ts"],"names":[],"mappings":"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"}