@covenant-rpc/ion 1.0.4 → 1.2.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,6 @@
1
+ declare const ION: {
2
+ parse(ionExpression: string): unknown;
3
+ stringify(object: unknown): string;
4
+ };
5
+ export default ION;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,GAAG;yBACc,MAAM,GAAG,OAAO;sBAqgBnB,OAAO,GAAG,MAAM;CA8KnC,CAAA;AAED,eAAe,GAAG,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,607 @@
1
+ const ION = {
2
+ parse(ionExpression) {
3
+ class Tokenizer {
4
+ pos = 0;
5
+ input;
6
+ len;
7
+ constructor(input) {
8
+ this.input = input;
9
+ this.len = input.length;
10
+ }
11
+ skipWhitespace() {
12
+ const input = this.input;
13
+ const len = this.len;
14
+ let pos = this.pos;
15
+ while (pos < len) {
16
+ const ch = input.charCodeAt(pos);
17
+ // Check for common whitespace: space(32), tab(9), newline(10), carriage return(13)
18
+ if (ch === 32 || ch === 9 || ch === 10 || ch === 13) {
19
+ pos++;
20
+ }
21
+ else {
22
+ break;
23
+ }
24
+ }
25
+ this.pos = pos;
26
+ }
27
+ scanString() {
28
+ const input = this.input;
29
+ const len = this.len;
30
+ let pos = this.pos + 1; // skip opening quote
31
+ let start = pos;
32
+ // Fast path: scan for simple string without escapes
33
+ while (pos < len) {
34
+ const ch = input.charCodeAt(pos);
35
+ if (ch === 34) { // '"'
36
+ this.pos = pos + 1;
37
+ return input.slice(start, pos);
38
+ }
39
+ if (ch === 92) { // '\\'
40
+ // Found escape, switch to slow path
41
+ break;
42
+ }
43
+ pos++;
44
+ }
45
+ // Slow path: handle escapes
46
+ const parts = [];
47
+ if (pos > start) {
48
+ parts.push(input.slice(start, pos));
49
+ }
50
+ while (pos < len) {
51
+ const ch = input.charCodeAt(pos);
52
+ if (ch === 34) { // '"'
53
+ this.pos = pos + 1;
54
+ return parts.join('');
55
+ }
56
+ if (ch === 92) { // '\\'
57
+ pos++;
58
+ const escaped = input.charCodeAt(pos);
59
+ pos++;
60
+ switch (escaped) {
61
+ case 110:
62
+ parts.push('\n');
63
+ break; // 'n'
64
+ case 116:
65
+ parts.push('\t');
66
+ break; // 't'
67
+ case 114:
68
+ parts.push('\r');
69
+ break; // 'r'
70
+ case 92:
71
+ parts.push('\\');
72
+ break; // '\\'
73
+ case 34:
74
+ parts.push('"');
75
+ break; // '"'
76
+ case 47:
77
+ parts.push('/');
78
+ break; // '/'
79
+ case 98:
80
+ parts.push('\b');
81
+ break; // 'b'
82
+ case 102:
83
+ parts.push('\f');
84
+ break; // 'f'
85
+ case 117: { // 'u'
86
+ const hex = input.slice(pos, pos + 4);
87
+ pos += 4;
88
+ parts.push(String.fromCharCode(parseInt(hex, 16)));
89
+ break;
90
+ }
91
+ default:
92
+ throw new Error(`Invalid escape sequence at position ${pos}`);
93
+ }
94
+ start = pos;
95
+ }
96
+ else {
97
+ // Accumulate unescaped chars
98
+ const chunkStart = pos;
99
+ pos++;
100
+ while (pos < len) {
101
+ const c = input.charCodeAt(pos);
102
+ if (c === 34 || c === 92)
103
+ break;
104
+ pos++;
105
+ }
106
+ parts.push(input.slice(chunkStart, pos));
107
+ }
108
+ }
109
+ throw new Error(`Unterminated string at position ${pos}`);
110
+ }
111
+ scanNumber() {
112
+ const input = this.input;
113
+ const len = this.len;
114
+ let pos = this.pos;
115
+ const start = pos;
116
+ // Check for negative
117
+ if (input.charCodeAt(pos) === 45) { // '-'
118
+ pos++;
119
+ }
120
+ // Scan integer part
121
+ const firstDigit = input.charCodeAt(pos);
122
+ if (firstDigit === 48) { // '0'
123
+ pos++;
124
+ }
125
+ else if (firstDigit >= 49 && firstDigit <= 57) { // '1'-'9'
126
+ pos++;
127
+ while (pos < len && input.charCodeAt(pos) >= 48 && input.charCodeAt(pos) <= 57) {
128
+ pos++;
129
+ }
130
+ }
131
+ // Check for decimal
132
+ let hasDot = false;
133
+ if (pos < len && input.charCodeAt(pos) === 46) { // '.'
134
+ hasDot = true;
135
+ pos++;
136
+ while (pos < len && input.charCodeAt(pos) >= 48 && input.charCodeAt(pos) <= 57) {
137
+ pos++;
138
+ }
139
+ }
140
+ // Check for exponent
141
+ let hasExp = false;
142
+ if (pos < len) {
143
+ const ch = input.charCodeAt(pos);
144
+ if (ch === 101 || ch === 69) { // 'e' or 'E'
145
+ hasExp = true;
146
+ pos++;
147
+ if (pos < len) {
148
+ const sign = input.charCodeAt(pos);
149
+ if (sign === 43 || sign === 45) { // '+' or '-'
150
+ pos++;
151
+ }
152
+ }
153
+ while (pos < len && input.charCodeAt(pos) >= 48 && input.charCodeAt(pos) <= 57) {
154
+ pos++;
155
+ }
156
+ }
157
+ }
158
+ this.pos = pos;
159
+ // Fast path for simple integers
160
+ if (!hasDot && !hasExp) {
161
+ const numStr = input.slice(start, pos);
162
+ const num = parseInt(numStr, 10);
163
+ if (num.toString() === numStr) {
164
+ return num;
165
+ }
166
+ }
167
+ return parseFloat(input.slice(start, pos));
168
+ }
169
+ nextToken() {
170
+ this.skipWhitespace();
171
+ const pos = this.pos;
172
+ if (pos >= this.len) {
173
+ return { type: 'EOF', position: pos };
174
+ }
175
+ const input = this.input;
176
+ const ch = input.charCodeAt(pos);
177
+ // Single character tokens (using charCode for speed)
178
+ switch (ch) {
179
+ case 123: // '{'
180
+ this.pos = pos + 1;
181
+ return { type: 'LBRACE', position: pos };
182
+ case 125: // '}'
183
+ this.pos = pos + 1;
184
+ return { type: 'RBRACE', position: pos };
185
+ case 91: // '['
186
+ this.pos = pos + 1;
187
+ return { type: 'LBRACKET', position: pos };
188
+ case 93: // ']'
189
+ this.pos = pos + 1;
190
+ return { type: 'RBRACKET', position: pos };
191
+ case 44: // ','
192
+ this.pos = pos + 1;
193
+ return { type: 'COMMA', position: pos };
194
+ case 58: // ':'
195
+ this.pos = pos + 1;
196
+ return { type: 'COLON', position: pos };
197
+ case 34: // '"'
198
+ return { type: 'STRING', value: this.scanString(), position: pos };
199
+ }
200
+ // Number or -Infinity
201
+ if (ch === 45 || (ch >= 48 && ch <= 57)) { // '-' or '0'-'9'
202
+ // Check for -Infinity
203
+ if (ch === 45 && input.slice(pos, pos + 9) === '-Infinity') {
204
+ this.pos = pos + 9;
205
+ return { type: 'NEG_INFINITY', position: pos };
206
+ }
207
+ return { type: 'NUMBER', value: this.scanNumber(), position: pos };
208
+ }
209
+ // Keywords - check first character for fast path
210
+ const remaining = input.slice(pos);
211
+ if (ch === 73) { // 'I'
212
+ if (remaining.startsWith('Infinity')) {
213
+ this.pos = pos + 8;
214
+ return { type: 'INFINITY', position: pos };
215
+ }
216
+ }
217
+ else if (ch === 78) { // 'N'
218
+ if (remaining.startsWith('NaN')) {
219
+ this.pos = pos + 3;
220
+ return { type: 'NAN', position: pos };
221
+ }
222
+ }
223
+ else if (ch === 116) { // 't'
224
+ if (remaining.startsWith('true')) {
225
+ this.pos = pos + 4;
226
+ return { type: 'TRUE', position: pos };
227
+ }
228
+ }
229
+ else if (ch === 102) { // 'f'
230
+ if (remaining.startsWith('false')) {
231
+ this.pos = pos + 5;
232
+ return { type: 'FALSE', position: pos };
233
+ }
234
+ }
235
+ else if (ch === 110) { // 'n'
236
+ if (remaining.startsWith('null')) {
237
+ this.pos = pos + 4;
238
+ return { type: 'NULL', position: pos };
239
+ }
240
+ }
241
+ else if (ch === 100) { // 'd'
242
+ if (remaining.startsWith('date:')) {
243
+ this.pos = pos + 5;
244
+ const start = this.pos;
245
+ // Scan until whitespace or delimiter
246
+ while (this.pos < this.len) {
247
+ const c = input.charCodeAt(this.pos);
248
+ if (c === 32 || c === 9 || c === 10 || c === 13 || c === 44 || c === 125 || c === 93) { // whitespace or , } ]
249
+ break;
250
+ }
251
+ this.pos++;
252
+ }
253
+ const dateStr = input.slice(start, this.pos);
254
+ return { type: 'DATE', value: dateStr, position: pos };
255
+ }
256
+ }
257
+ else if (ch === 109) { // 'm'
258
+ if (remaining.startsWith('map')) {
259
+ this.pos = pos + 3;
260
+ return { type: 'MAP', position: pos };
261
+ }
262
+ }
263
+ else if (ch === 115) { // 's'
264
+ if (remaining.startsWith('set')) {
265
+ this.pos = pos + 3;
266
+ return { type: 'SET', position: pos };
267
+ }
268
+ }
269
+ throw new Error(`Unexpected character '${input[pos]}' at position ${pos}`);
270
+ }
271
+ }
272
+ class Parser {
273
+ tokenizer;
274
+ currentToken;
275
+ constructor(input) {
276
+ this.tokenizer = new Tokenizer(input);
277
+ this.currentToken = this.tokenizer.nextToken();
278
+ }
279
+ advance() {
280
+ this.currentToken = this.tokenizer.nextToken();
281
+ }
282
+ expect(type) {
283
+ const token = this.currentToken;
284
+ if (token.type !== type) {
285
+ throw new Error(`Expected ${type} but got ${token.type} at position ${token.position}`);
286
+ }
287
+ this.advance();
288
+ return token;
289
+ }
290
+ parseValue() {
291
+ const token = this.currentToken;
292
+ const type = token.type;
293
+ // Inline simple cases for speed
294
+ switch (type) {
295
+ case 'STRING':
296
+ this.advance();
297
+ return token.value;
298
+ case 'NUMBER':
299
+ this.advance();
300
+ return token.value;
301
+ case 'TRUE':
302
+ this.advance();
303
+ return true;
304
+ case 'FALSE':
305
+ this.advance();
306
+ return false;
307
+ case 'NULL':
308
+ this.advance();
309
+ return null;
310
+ case 'NAN':
311
+ this.advance();
312
+ return NaN;
313
+ case 'INFINITY':
314
+ this.advance();
315
+ return Infinity;
316
+ case 'NEG_INFINITY':
317
+ this.advance();
318
+ return -Infinity;
319
+ case 'DATE': {
320
+ this.advance();
321
+ const dateStr = token.value;
322
+ const date = new Date(dateStr);
323
+ const time = date.getTime();
324
+ if (time !== time) { // isNaN check
325
+ throw new Error(`Invalid date string "${dateStr}" at position ${token.position}`);
326
+ }
327
+ return date;
328
+ }
329
+ case 'LBRACKET': {
330
+ this.advance(); // consume '['
331
+ const arr = [];
332
+ if (this.currentToken.type === 'RBRACKET') {
333
+ this.advance();
334
+ return arr;
335
+ }
336
+ while (true) {
337
+ arr.push(this.parseValue());
338
+ const currentType = this.currentToken.type;
339
+ if (currentType === 'COMMA') {
340
+ this.advance();
341
+ continue;
342
+ }
343
+ if (currentType === 'RBRACKET') {
344
+ this.advance();
345
+ break;
346
+ }
347
+ throw new Error(`Expected COMMA or RBRACKET but got ${currentType} at position ${this.currentToken.position}`);
348
+ }
349
+ return arr;
350
+ }
351
+ case 'LBRACE': {
352
+ this.advance(); // consume '{'
353
+ const obj = {};
354
+ if (this.currentToken.type === 'RBRACE') {
355
+ this.advance();
356
+ return obj;
357
+ }
358
+ while (true) {
359
+ const keyToken = this.currentToken;
360
+ if (keyToken.type !== 'STRING') {
361
+ throw new Error(`Expected STRING but got ${keyToken.type} at position ${keyToken.position}`);
362
+ }
363
+ this.advance();
364
+ const key = keyToken.value;
365
+ this.expect('COLON');
366
+ obj[key] = this.parseValue();
367
+ const currentType = this.currentToken.type;
368
+ if (currentType === 'COMMA') {
369
+ this.advance();
370
+ continue;
371
+ }
372
+ if (currentType === 'RBRACE') {
373
+ this.advance();
374
+ break;
375
+ }
376
+ throw new Error(`Expected COMMA or RBRACE but got ${currentType} at position ${this.currentToken.position}`);
377
+ }
378
+ return obj;
379
+ }
380
+ case 'MAP': {
381
+ this.advance(); // consume 'map'
382
+ this.expect('LBRACE');
383
+ const map = new Map();
384
+ if (this.currentToken.type === 'RBRACE') {
385
+ this.advance();
386
+ return map;
387
+ }
388
+ while (true) {
389
+ const key = this.parseValue();
390
+ this.expect('COLON');
391
+ const value = this.parseValue();
392
+ map.set(key, value);
393
+ const currentType = this.currentToken.type;
394
+ if (currentType === 'COMMA') {
395
+ this.advance();
396
+ continue;
397
+ }
398
+ if (currentType === 'RBRACE') {
399
+ this.advance();
400
+ break;
401
+ }
402
+ throw new Error(`Expected COMMA or RBRACE but got ${currentType} at position ${this.currentToken.position}`);
403
+ }
404
+ return map;
405
+ }
406
+ case 'SET': {
407
+ this.advance(); // consume 'set'
408
+ this.expect('LBRACE');
409
+ const set = new Set();
410
+ if (this.currentToken.type === 'RBRACE') {
411
+ this.advance();
412
+ return set;
413
+ }
414
+ while (true) {
415
+ set.add(this.parseValue());
416
+ const currentType = this.currentToken.type;
417
+ if (currentType === 'COMMA') {
418
+ this.advance();
419
+ continue;
420
+ }
421
+ if (currentType === 'RBRACE') {
422
+ this.advance();
423
+ break;
424
+ }
425
+ throw new Error(`Expected COMMA or RBRACE but got ${currentType} at position ${this.currentToken.position}`);
426
+ }
427
+ return set;
428
+ }
429
+ default:
430
+ throw new Error(`Unexpected token ${type} at position ${token.position}`);
431
+ }
432
+ }
433
+ parse() {
434
+ const value = this.parseValue();
435
+ if (this.currentToken.type !== 'EOF') {
436
+ throw new Error(`Expected EOF but got ${this.currentToken.type} at position ${this.currentToken.position}`);
437
+ }
438
+ return value;
439
+ }
440
+ }
441
+ const parser = new Parser(ionExpression);
442
+ return parser.parse();
443
+ },
444
+ stringify(object) {
445
+ const seen = new WeakSet();
446
+ function stringifyValue(value) {
447
+ // Handle null first (most common primitive in many use cases)
448
+ if (value === null)
449
+ return 'null';
450
+ const type = typeof value;
451
+ // Handle primitives (optimized order: most common first)
452
+ if (type === 'string') {
453
+ // Inline simple string escaping for common cases
454
+ const len = value.length;
455
+ let needsEscape = false;
456
+ for (let i = 0; i < len; i++) {
457
+ const ch = value.charCodeAt(i);
458
+ if (ch === 34 || ch === 92 || ch < 32) {
459
+ needsEscape = true;
460
+ break;
461
+ }
462
+ }
463
+ if (!needsEscape) {
464
+ return `"${value}"`;
465
+ }
466
+ return JSON.stringify(value);
467
+ }
468
+ if (type === 'number') {
469
+ // Fast path for normal numbers
470
+ if (value === value) { // NaN check (NaN !== NaN)
471
+ if (isFinite(value)) {
472
+ return String(value);
473
+ }
474
+ // Handle Infinity
475
+ return value === Infinity ? 'Infinity' : '-Infinity';
476
+ }
477
+ return 'NaN';
478
+ }
479
+ if (type === 'boolean') {
480
+ return value ? 'true' : 'false';
481
+ }
482
+ if (value === undefined) {
483
+ throw new Error('Cannot serialize undefined');
484
+ }
485
+ // Handle unsupported primitives early
486
+ if (type === 'bigint') {
487
+ throw new Error('Cannot serialize BigInt');
488
+ }
489
+ if (type === 'function') {
490
+ throw new Error('Cannot serialize function');
491
+ }
492
+ if (type === 'symbol') {
493
+ throw new Error('Cannot serialize symbol');
494
+ }
495
+ // Handle objects - type === 'object' at this point
496
+ // Circular reference check
497
+ if (seen.has(value)) {
498
+ throw new Error('Circular reference detected');
499
+ }
500
+ seen.add(value);
501
+ try {
502
+ // Order by frequency: Array -> Plain Object -> Date -> Map -> Set -> Unsupported
503
+ // Handle Array (very common)
504
+ if (Array.isArray(value)) {
505
+ const len = value.length;
506
+ if (len === 0)
507
+ return '[]';
508
+ let result = '[';
509
+ for (let i = 0; i < len; i++) {
510
+ if (i > 0)
511
+ result += ', ';
512
+ result += stringifyValue(value[i]);
513
+ }
514
+ result += ']';
515
+ return result;
516
+ }
517
+ // Handle Date before checking for plain objects
518
+ if (value instanceof Date) {
519
+ const time = value.getTime();
520
+ if (time !== time) { // isNaN check
521
+ throw new Error('Invalid Date');
522
+ }
523
+ return `date:${value.toISOString()}`;
524
+ }
525
+ // Handle Map
526
+ if (value instanceof Map) {
527
+ if (value.size === 0)
528
+ return 'map { }';
529
+ let result = 'map { ';
530
+ let first = true;
531
+ for (const [k, v] of value) {
532
+ if (!first)
533
+ result += ', ';
534
+ first = false;
535
+ result += stringifyValue(k);
536
+ result += ': ';
537
+ result += stringifyValue(v);
538
+ }
539
+ result += ' }';
540
+ return result;
541
+ }
542
+ // Handle Set
543
+ if (value instanceof Set) {
544
+ if (value.size === 0)
545
+ return 'set { }';
546
+ let result = 'set { ';
547
+ let first = true;
548
+ for (const v of value) {
549
+ if (!first)
550
+ result += ', ';
551
+ first = false;
552
+ result += stringifyValue(v);
553
+ }
554
+ result += ' }';
555
+ return result;
556
+ }
557
+ // Handle WeakMap/WeakSet (must check before plain objects)
558
+ if (value instanceof WeakMap) {
559
+ throw new Error('Cannot serialize WeakMap');
560
+ }
561
+ if (value instanceof WeakSet) {
562
+ throw new Error('Cannot serialize WeakSet');
563
+ }
564
+ // Handle plain objects (most common object type)
565
+ const keys = Object.keys(value);
566
+ const len = keys.length;
567
+ if (len === 0)
568
+ return '{}';
569
+ let result = '{ ';
570
+ let first = true;
571
+ for (let i = 0; i < len; i++) {
572
+ const key = keys[i];
573
+ const val = value[key];
574
+ // Skip undefined properties
575
+ if (val === undefined)
576
+ continue;
577
+ if (!first)
578
+ result += ', ';
579
+ first = false;
580
+ // Inline string key escaping
581
+ let keyStr;
582
+ const keyLen = key.length;
583
+ let needsEscape = false;
584
+ for (let j = 0; j < keyLen; j++) {
585
+ const ch = key.charCodeAt(j);
586
+ if (ch === 34 || ch === 92 || ch < 32) {
587
+ needsEscape = true;
588
+ break;
589
+ }
590
+ }
591
+ keyStr = needsEscape ? JSON.stringify(key) : `"${key}"`;
592
+ result += keyStr;
593
+ result += ': ';
594
+ result += stringifyValue(val);
595
+ }
596
+ result += ' }';
597
+ return result;
598
+ }
599
+ finally {
600
+ seen.delete(value);
601
+ }
602
+ }
603
+ return stringifyValue(object);
604
+ },
605
+ };
606
+ export default ION;
607
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}