seroval 0.12.4 → 0.13.1

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.
Files changed (138) hide show
  1. package/README.md +17 -15
  2. package/dist/cjs/development/index.cjs +1432 -959
  3. package/dist/cjs/development/index.cjs.map +3 -3
  4. package/dist/cjs/production/index.cjs +3 -3
  5. package/dist/esm/development/index.mjs +1432 -959
  6. package/dist/esm/development/index.mjs.map +3 -3
  7. package/dist/esm/production/index.mjs +3 -3
  8. package/dist/types/core/base-primitives.d.ts +12 -1
  9. package/dist/types/core/base-primitives.d.ts.map +1 -1
  10. package/dist/types/core/compat.d.ts +0 -2
  11. package/dist/types/core/compat.d.ts.map +1 -1
  12. package/dist/types/core/constants.d.ts +8 -2
  13. package/dist/types/core/constants.d.ts.map +1 -1
  14. package/dist/types/core/{tree/deserialize.d.ts → context/deserializer.d.ts} +19 -13
  15. package/dist/types/core/context/deserializer.d.ts.map +1 -0
  16. package/dist/types/core/{base → context/parser}/async.d.ts +6 -5
  17. package/dist/types/core/context/parser/async.d.ts.map +1 -0
  18. package/dist/types/core/{base → context/parser}/stream.d.ts +2 -1
  19. package/dist/types/core/context/parser/stream.d.ts.map +1 -0
  20. package/dist/types/core/{base → context/parser}/sync.d.ts +7 -9
  21. package/dist/types/core/context/parser/sync.d.ts.map +1 -0
  22. package/dist/types/core/context/parser.d.ts +27 -0
  23. package/dist/types/core/context/parser.d.ts.map +1 -0
  24. package/dist/types/core/{serializer-context.old.d.ts → context/serializer.d.ts} +21 -22
  25. package/dist/types/core/context/serializer.d.ts.map +1 -0
  26. package/dist/types/core/cross/async.d.ts +2 -2
  27. package/dist/types/core/cross/async.d.ts.map +1 -1
  28. package/dist/types/core/cross/deserializer.d.ts +9 -0
  29. package/dist/types/core/cross/deserializer.d.ts.map +1 -0
  30. package/dist/types/core/cross/index.d.ts +11 -1
  31. package/dist/types/core/cross/index.d.ts.map +1 -1
  32. package/dist/types/core/cross/parser.d.ts +6 -0
  33. package/dist/types/core/cross/parser.d.ts.map +1 -0
  34. package/dist/types/core/cross/{serialize.d.ts → serializer.d.ts} +6 -5
  35. package/dist/types/core/cross/serializer.d.ts.map +1 -0
  36. package/dist/types/core/cross/stream.d.ts +2 -2
  37. package/dist/types/core/cross/stream.d.ts.map +1 -1
  38. package/dist/types/core/cross/sync.d.ts +2 -2
  39. package/dist/types/core/cross/sync.d.ts.map +1 -1
  40. package/dist/types/core/keys.d.ts +3 -1
  41. package/dist/types/core/keys.d.ts.map +1 -1
  42. package/dist/types/core/plugin.d.ts +6 -7
  43. package/dist/types/core/plugin.d.ts.map +1 -1
  44. package/dist/types/core/special-reference.d.ts +6 -0
  45. package/dist/types/core/special-reference.d.ts.map +1 -0
  46. package/dist/types/core/tree/async.d.ts +2 -2
  47. package/dist/types/core/tree/async.d.ts.map +1 -1
  48. package/dist/types/core/tree/deserializer.d.ts +13 -0
  49. package/dist/types/core/tree/deserializer.d.ts.map +1 -0
  50. package/dist/types/core/tree/{serialize.d.ts → serializer.d.ts} +4 -4
  51. package/dist/types/core/tree/serializer.d.ts.map +1 -0
  52. package/dist/types/core/tree/sync.d.ts +2 -2
  53. package/dist/types/core/tree/sync.d.ts.map +1 -1
  54. package/dist/types/core/types.d.ts +47 -6
  55. package/dist/types/core/types.d.ts.map +1 -1
  56. package/dist/types/core/utils/assert.d.ts.map +1 -0
  57. package/dist/types/core/utils/constructors.d.ts.map +1 -0
  58. package/dist/types/core/utils/deferred.d.ts +14 -0
  59. package/dist/types/core/utils/deferred.d.ts.map +1 -0
  60. package/dist/types/core/utils/error.d.ts +5 -0
  61. package/dist/types/core/utils/error.d.ts.map +1 -0
  62. package/dist/types/core/utils/get-identifier.d.ts.map +1 -0
  63. package/dist/types/core/utils/get-object-flag.d.ts +3 -0
  64. package/dist/types/core/utils/get-object-flag.d.ts.map +1 -0
  65. package/dist/types/core/utils/is-valid-identifier.d.ts +2 -0
  66. package/dist/types/core/utils/is-valid-identifier.d.ts.map +1 -0
  67. package/dist/types/core/utils/iterator-to-sequence.d.ts +20 -0
  68. package/dist/types/core/utils/iterator-to-sequence.d.ts.map +1 -0
  69. package/dist/types/core/utils/promise-to-result.d.ts.map +1 -0
  70. package/dist/types/core/utils/typed-array.d.ts +4 -0
  71. package/dist/types/core/utils/typed-array.d.ts.map +1 -0
  72. package/dist/types/core/web-api.d.ts +4 -1
  73. package/dist/types/core/web-api.d.ts.map +1 -1
  74. package/package.json +3 -3
  75. package/src/core/base-primitives.ts +229 -1
  76. package/src/core/compat.ts +0 -2
  77. package/src/core/constants.ts +7 -2
  78. package/src/core/{tree/deserialize.ts → context/deserializer.ts} +159 -66
  79. package/src/core/{base → context/parser}/async.ts +181 -309
  80. package/src/core/{base → context/parser}/stream.ts +89 -14
  81. package/src/core/{base → context/parser}/sync.ts +120 -281
  82. package/src/core/context/parser.ts +259 -0
  83. package/src/core/{serializer-context.old.ts → context/serializer.ts} +241 -166
  84. package/src/core/cross/async.ts +2 -2
  85. package/src/core/cross/deserializer.ts +19 -0
  86. package/src/core/cross/index.ts +68 -47
  87. package/src/core/cross/parser.ts +7 -0
  88. package/src/core/cross/{serialize.ts → serializer.ts} +31 -12
  89. package/src/core/cross/stream.ts +2 -2
  90. package/src/core/cross/sync.ts +2 -2
  91. package/src/core/is-serializable.new.ts +1 -1
  92. package/src/core/keys.ts +8 -2
  93. package/src/core/plugin.ts +7 -7
  94. package/src/core/reference.ts +1 -1
  95. package/src/core/special-reference.ts +9 -0
  96. package/src/core/tree/async.ts +2 -2
  97. package/src/core/tree/deserializer.ts +31 -0
  98. package/src/core/tree/index.ts +2 -2
  99. package/src/core/tree/{serialize.ts → serializer.ts} +5 -16
  100. package/src/core/tree/sync.ts +2 -2
  101. package/src/core/types.ts +60 -7
  102. package/src/core/utils/deferred.ts +49 -0
  103. package/src/core/{shared.ts → utils/error.ts} +3 -60
  104. package/src/core/utils/get-object-flag.ts +14 -0
  105. package/src/core/utils/is-valid-identifier.ts +11 -0
  106. package/src/core/utils/iterator-to-sequence.ts +238 -0
  107. package/src/core/utils/typed-array.ts +30 -0
  108. package/src/core/web-api.ts +75 -1
  109. package/src/example.ts +0 -3
  110. package/dist/types/core/assert.d.ts.map +0 -1
  111. package/dist/types/core/base/async.d.ts.map +0 -1
  112. package/dist/types/core/base/stream.d.ts.map +0 -1
  113. package/dist/types/core/base/sync.d.ts.map +0 -1
  114. package/dist/types/core/constructors.d.ts.map +0 -1
  115. package/dist/types/core/cross/cross-parser.d.ts +0 -8
  116. package/dist/types/core/cross/cross-parser.d.ts.map +0 -1
  117. package/dist/types/core/cross/serialize.d.ts.map +0 -1
  118. package/dist/types/core/get-identifier.d.ts.map +0 -1
  119. package/dist/types/core/parser-context.d.ts +0 -23
  120. package/dist/types/core/parser-context.d.ts.map +0 -1
  121. package/dist/types/core/promise-to-result.d.ts.map +0 -1
  122. package/dist/types/core/serializer-context.old.d.ts.map +0 -1
  123. package/dist/types/core/shared.d.ts +0 -10
  124. package/dist/types/core/shared.d.ts.map +0 -1
  125. package/dist/types/core/tree/deserialize.d.ts.map +0 -1
  126. package/dist/types/core/tree/serialize.d.ts.map +0 -1
  127. package/src/core/cross/cross-parser.ts +0 -9
  128. package/src/core/parser-context.ts +0 -131
  129. package/src/core/serializer-context.new.ts +0 -1168
  130. package/src/core/tree/parser.ts +0 -45
  131. /package/dist/types/core/{assert.d.ts → utils/assert.d.ts} +0 -0
  132. /package/dist/types/core/{constructors.d.ts → utils/constructors.d.ts} +0 -0
  133. /package/dist/types/core/{get-identifier.d.ts → utils/get-identifier.d.ts} +0 -0
  134. /package/dist/types/core/{promise-to-result.d.ts → utils/promise-to-result.d.ts} +0 -0
  135. /package/src/core/{assert.ts → utils/assert.ts} +0 -0
  136. /package/src/core/{constructors.ts → utils/constructors.ts} +0 -0
  137. /package/src/core/{get-identifier.ts → utils/get-identifier.ts} +0 -0
  138. /package/src/core/{promise-to-result.ts → utils/promise-to-result.ts} +0 -0
@@ -7,7 +7,7 @@ var UnsupportedTypeError = class extends Error {
7
7
  }
8
8
  };
9
9
 
10
- // src/core/assert.ts
10
+ // src/core/utils/assert.ts
11
11
  function assert(cond, error) {
12
12
  if (!cond) {
13
13
  throw error;
@@ -98,7 +98,6 @@ var ERROR_CONSTRUCTOR = {
98
98
  [5 /* TypeError */]: TypeError,
99
99
  [6 /* URIError */]: URIError
100
100
  };
101
- var UNIVERSAL_SENTINEL = Symbol("why");
102
101
 
103
102
  // src/core/literals.ts
104
103
  function createConstantNode(value) {
@@ -186,9 +185,11 @@ var GLOBAL_CONTEXT_PROMISE_RESOLVE = "Ps";
186
185
  var GLOBAL_CONTEXT_PROMISE_REJECT = "Pf";
187
186
  var LOCAL_CONTEXT_STREAM_CONTROLLER = "c";
188
187
  var GLOBAL_CONTEXT_STREAM_CONSTRUCTOR = "S";
189
- var GLOBAL_CONTEXT_STREAM_EMIT = "Se";
188
+ var GLOBAL_CONTEXT_STREAM_ENQUEUE = "Se";
189
+ var GLOBAL_CONTEXT_STREAM_ERROR = "St";
190
+ var GLOBAL_CONTEXT_STREAM_CLOSE = "Sc";
190
191
  var GLOBAL_CONTEXT_API_REF = `self.${GLOBAL_CONTEXT_API}`;
191
- var GLOBAL_CONTEXT_API_SCRIPT = `${GLOBAL_CONTEXT_API_REF}=${GLOBAL_CONTEXT_API_REF}||{${GLOBAL_CONTEXT_PROMISE_CONSTRUCTOR}:function(s,f,p){return(p=new Promise(function(a,b){s=a,f=b})).${LOCAL_CONTEXT_PROMISE_RESOLVE}=s,p.${LOCAL_CONTEXT_PROMISE_REJECT}=f,p},uP:function(p){delete p.${LOCAL_CONTEXT_PROMISE_RESOLVE};delete p.${LOCAL_CONTEXT_PROMISE_REJECT}},${GLOBAL_CONTEXT_PROMISE_RESOLVE}:function(p,d){p.${LOCAL_CONTEXT_PROMISE_RESOLVE}(d),p.status="success",p.value=d,this.uP(p)},${GLOBAL_CONTEXT_PROMISE_REJECT}:function(p,d){p.${LOCAL_CONTEXT_PROMISE_REJECT}(d),p.status="failure",p.value=d,this.uP(p)},uS:function(s){delete s.${LOCAL_CONTEXT_STREAM_CONTROLLER}},${GLOBAL_CONTEXT_STREAM_EMIT}:function(s,t,d,c){switch(c=s.${LOCAL_CONTEXT_STREAM_CONTROLLER},t){case 0:return c.enqueue(d);case 1:return(this.uS(s),c.error(d));case 2:return(this.uS(s),c.close())}},${GLOBAL_CONTEXT_STREAM_CONSTRUCTOR}:function(s,c){return(s=new ReadableStream({start:function(x){c=x}})).${LOCAL_CONTEXT_STREAM_CONTROLLER}=c,s}}`;
192
+ var GLOBAL_CONTEXT_API_SCRIPT = `${GLOBAL_CONTEXT_API_REF}=${GLOBAL_CONTEXT_API_REF}||{${GLOBAL_CONTEXT_PROMISE_CONSTRUCTOR}:function(s,f,p){return(p=new Promise(function(a,b){s=a,f=b})).${LOCAL_CONTEXT_PROMISE_RESOLVE}=s,p.${LOCAL_CONTEXT_PROMISE_REJECT}=f,p},uP:function(p){delete p.${LOCAL_CONTEXT_PROMISE_RESOLVE};delete p.${LOCAL_CONTEXT_PROMISE_REJECT}},${GLOBAL_CONTEXT_PROMISE_RESOLVE}:function(p,d){p.${LOCAL_CONTEXT_PROMISE_RESOLVE}(d),p.status="success",p.value=d,this.uP(p)},${GLOBAL_CONTEXT_PROMISE_REJECT}:function(p,d){p.${LOCAL_CONTEXT_PROMISE_REJECT}(d),p.status="failure",p.value=d,this.uP(p)},uS:function(s){delete s.${LOCAL_CONTEXT_STREAM_CONTROLLER}},${GLOBAL_CONTEXT_STREAM_CLOSE}:function(s){s.${LOCAL_CONTEXT_STREAM_CONTROLLER}.close(),this.uS(s)},${GLOBAL_CONTEXT_STREAM_ERROR}:function(s,e){s.${LOCAL_CONTEXT_STREAM_CONTROLLER}.error(e),this.uS(s)},${GLOBAL_CONTEXT_STREAM_ENQUEUE}:function(s,d){s.${LOCAL_CONTEXT_STREAM_CONTROLLER}.enqueue(d)},${GLOBAL_CONTEXT_STREAM_CONSTRUCTOR}:function(s,c){return(s=new ReadableStream({start:function(x){c=x}})).${LOCAL_CONTEXT_STREAM_CONTROLLER}=c,s}}`;
192
193
  var GLOBAL_CONTEXT_R = `self.${GLOBAL_CONTEXT_REFERENCES}`;
193
194
  function getCrossReferenceHeader(id) {
194
195
  if (id == null) {
@@ -249,6 +250,87 @@ if (typeof globalThis !== void 0) {
249
250
  });
250
251
  }
251
252
 
253
+ // src/core/compat.ts
254
+ var Feature = /* @__PURE__ */ ((Feature2) => {
255
+ Feature2[Feature2["AggregateError"] = 1] = "AggregateError";
256
+ Feature2[Feature2["ArrowFunction"] = 4] = "ArrowFunction";
257
+ Feature2[Feature2["BigInt"] = 8] = "BigInt";
258
+ Feature2[Feature2["ErrorPrototypeStack"] = 16] = "ErrorPrototypeStack";
259
+ Feature2[Feature2["Map"] = 32] = "Map";
260
+ Feature2[Feature2["ObjectAssign"] = 128] = "ObjectAssign";
261
+ Feature2[Feature2["Promise"] = 256] = "Promise";
262
+ Feature2[Feature2["Set"] = 512] = "Set";
263
+ Feature2[Feature2["Symbol"] = 1024] = "Symbol";
264
+ Feature2[Feature2["TypedArray"] = 2048] = "TypedArray";
265
+ Feature2[Feature2["BigIntTypedArray"] = 4096] = "BigIntTypedArray";
266
+ Feature2[Feature2["WebAPI"] = 8192] = "WebAPI";
267
+ return Feature2;
268
+ })(Feature || {});
269
+ var ALL_ENABLED = 16383;
270
+ var BIGINT_FLAG = 4096 /* BigIntTypedArray */ | 8 /* BigInt */;
271
+
272
+ // src/core/utils/error.ts
273
+ function getErrorConstructor(error) {
274
+ if (error instanceof EvalError) {
275
+ return 1 /* EvalError */;
276
+ }
277
+ if (error instanceof RangeError) {
278
+ return 2 /* RangeError */;
279
+ }
280
+ if (error instanceof ReferenceError) {
281
+ return 3 /* ReferenceError */;
282
+ }
283
+ if (error instanceof SyntaxError) {
284
+ return 4 /* SyntaxError */;
285
+ }
286
+ if (error instanceof TypeError) {
287
+ return 5 /* TypeError */;
288
+ }
289
+ if (error instanceof URIError) {
290
+ return 6 /* URIError */;
291
+ }
292
+ return 0 /* Error */;
293
+ }
294
+ function getErrorOptions(error, features) {
295
+ let options;
296
+ const constructor = ERROR_CONSTRUCTOR_STRING[getErrorConstructor(error)];
297
+ if (error.name !== constructor) {
298
+ options = { name: error.name };
299
+ } else if (error.constructor.name !== constructor) {
300
+ options = { name: error.constructor.name };
301
+ }
302
+ const names = Object.getOwnPropertyNames(error);
303
+ for (let i = 0, len = names.length, name; i < len; i++) {
304
+ name = names[i];
305
+ if (name !== "name" && name !== "message") {
306
+ if (name === "stack") {
307
+ if (features & 16 /* ErrorPrototypeStack */) {
308
+ options = options || {};
309
+ options[name] = error[name];
310
+ }
311
+ } else {
312
+ options = options || {};
313
+ options[name] = error[name];
314
+ }
315
+ }
316
+ }
317
+ return options;
318
+ }
319
+
320
+ // src/core/utils/get-object-flag.ts
321
+ function getObjectFlag(obj) {
322
+ if (Object.isFrozen(obj)) {
323
+ return 3 /* Frozen */;
324
+ }
325
+ if (Object.isSealed(obj)) {
326
+ return 2 /* Sealed */;
327
+ }
328
+ if (Object.isExtensible(obj)) {
329
+ return 0 /* None */;
330
+ }
331
+ return 1 /* NonExtensible */;
332
+ }
333
+
252
334
  // src/core/base-primitives.ts
253
335
  function createNumberNode(value) {
254
336
  switch (value) {
@@ -430,29 +512,174 @@ function createPluginNode(id, tag, value) {
430
512
  o: void 0
431
513
  };
432
514
  }
515
+ function createArrayNode(id, current, parsedItems) {
516
+ return {
517
+ t: 9 /* Array */,
518
+ i: id,
519
+ s: void 0,
520
+ l: current.length,
521
+ c: void 0,
522
+ m: void 0,
523
+ p: void 0,
524
+ e: void 0,
525
+ a: parsedItems,
526
+ f: void 0,
527
+ b: void 0,
528
+ o: getObjectFlag(current)
529
+ };
530
+ }
531
+ function createBoxedNode(id, boxed) {
532
+ return {
533
+ t: 27 /* Boxed */,
534
+ i: id,
535
+ s: void 0,
536
+ l: void 0,
537
+ c: void 0,
538
+ m: void 0,
539
+ p: void 0,
540
+ e: void 0,
541
+ a: void 0,
542
+ f: boxed,
543
+ b: void 0,
544
+ o: void 0
545
+ };
546
+ }
547
+ function createTypedArrayNode(id, current, buffer) {
548
+ return {
549
+ t: 15 /* TypedArray */,
550
+ i: id,
551
+ s: void 0,
552
+ l: current.length,
553
+ c: current.constructor.name,
554
+ m: void 0,
555
+ p: void 0,
556
+ e: void 0,
557
+ a: void 0,
558
+ f: buffer,
559
+ b: current.byteOffset,
560
+ o: void 0
561
+ };
562
+ }
563
+ function createBigIntTypedArrayNode(id, current, buffer) {
564
+ return {
565
+ t: 16 /* BigIntTypedArray */,
566
+ i: id,
567
+ s: void 0,
568
+ l: current.length,
569
+ c: current.constructor.name,
570
+ m: void 0,
571
+ p: void 0,
572
+ e: void 0,
573
+ a: void 0,
574
+ f: buffer,
575
+ b: current.byteOffset,
576
+ o: void 0
577
+ };
578
+ }
579
+ function createDataViewNode(id, current, buffer) {
580
+ return {
581
+ t: 22 /* DataView */,
582
+ i: id,
583
+ s: void 0,
584
+ l: current.byteLength,
585
+ c: void 0,
586
+ m: void 0,
587
+ p: void 0,
588
+ e: void 0,
589
+ a: void 0,
590
+ f: buffer,
591
+ b: current.byteOffset,
592
+ o: void 0
593
+ };
594
+ }
595
+ function createErrorNode(id, current, options) {
596
+ return {
597
+ t: 13 /* Error */,
598
+ i: id,
599
+ s: getErrorConstructor(current),
600
+ l: void 0,
601
+ c: void 0,
602
+ m: serializeString(current.message),
603
+ p: options,
604
+ e: void 0,
605
+ a: void 0,
606
+ f: void 0,
607
+ b: void 0,
608
+ o: void 0
609
+ };
610
+ }
611
+ function createAggregateErrorNode(id, current, options) {
612
+ return {
613
+ t: 14 /* AggregateError */,
614
+ i: id,
615
+ s: getErrorConstructor(current),
616
+ l: void 0,
617
+ c: void 0,
618
+ m: serializeString(current.message),
619
+ p: options,
620
+ e: void 0,
621
+ a: void 0,
622
+ f: void 0,
623
+ b: void 0,
624
+ o: void 0
625
+ };
626
+ }
627
+ function createSetNode(id, size, items) {
628
+ return {
629
+ t: 7 /* Set */,
630
+ i: id,
631
+ s: void 0,
632
+ l: size,
633
+ c: void 0,
634
+ m: void 0,
635
+ p: void 0,
636
+ e: void 0,
637
+ a: items,
638
+ f: void 0,
639
+ b: void 0,
640
+ o: void 0
641
+ };
642
+ }
643
+ function createIteratorFactoryInstanceNode(factory, items) {
644
+ return {
645
+ t: 43 /* IteratorFactoryInstance */,
646
+ i: void 0,
647
+ s: void 0,
648
+ l: void 0,
649
+ c: void 0,
650
+ m: void 0,
651
+ p: void 0,
652
+ e: void 0,
653
+ a: [
654
+ factory,
655
+ items
656
+ ],
657
+ f: void 0,
658
+ b: void 0,
659
+ o: void 0
660
+ };
661
+ }
662
+ function createAsyncIteratorFactoryInstanceNode(factory, items) {
663
+ return {
664
+ t: 45 /* AsyncIteratorFactoryInstance */,
665
+ i: void 0,
666
+ s: void 0,
667
+ l: void 0,
668
+ c: void 0,
669
+ m: void 0,
670
+ p: void 0,
671
+ e: void 0,
672
+ a: [
673
+ factory,
674
+ items
675
+ ],
676
+ f: void 0,
677
+ b: void 0,
678
+ o: void 0
679
+ };
680
+ }
433
681
 
434
- // src/core/compat.ts
435
- var Feature = /* @__PURE__ */ ((Feature2) => {
436
- Feature2[Feature2["AggregateError"] = 1] = "AggregateError";
437
- Feature2[Feature2["ArrayPrototypeValues"] = 2] = "ArrayPrototypeValues";
438
- Feature2[Feature2["ArrowFunction"] = 4] = "ArrowFunction";
439
- Feature2[Feature2["BigInt"] = 8] = "BigInt";
440
- Feature2[Feature2["ErrorPrototypeStack"] = 16] = "ErrorPrototypeStack";
441
- Feature2[Feature2["Map"] = 32] = "Map";
442
- Feature2[Feature2["MethodShorthand"] = 64] = "MethodShorthand";
443
- Feature2[Feature2["ObjectAssign"] = 128] = "ObjectAssign";
444
- Feature2[Feature2["Promise"] = 256] = "Promise";
445
- Feature2[Feature2["Set"] = 512] = "Set";
446
- Feature2[Feature2["Symbol"] = 1024] = "Symbol";
447
- Feature2[Feature2["TypedArray"] = 2048] = "TypedArray";
448
- Feature2[Feature2["BigIntTypedArray"] = 4096] = "BigIntTypedArray";
449
- Feature2[Feature2["WebAPI"] = 8192] = "WebAPI";
450
- return Feature2;
451
- })(Feature || {});
452
- var ALL_ENABLED = 16383;
453
- var BIGINT_FLAG = 4096 /* BigIntTypedArray */ | 8 /* BigInt */;
454
-
455
- // src/core/constructors.ts
682
+ // src/core/utils/constructors.ts
456
683
  function createRequestOptions(current, body) {
457
684
  return {
458
685
  body,
@@ -491,210 +718,399 @@ function createCustomEventOptions(current) {
491
718
  };
492
719
  }
493
720
 
494
- // src/core/parser-context.ts
495
- var BaseParserContext = class {
496
- constructor(options) {
497
- this.marked = /* @__PURE__ */ new Set();
498
- this.plugins = options.plugins;
499
- this.features = ALL_ENABLED ^ (options.disabledFeatures || 0);
500
- this.refs = options.refs || /* @__PURE__ */ new Map();
501
- }
502
- markRef(id) {
503
- this.marked.add(id);
504
- }
505
- isMarked(id) {
506
- return this.marked.has(id);
507
- }
508
- getReference(current) {
509
- const registeredID = this.refs.get(current);
510
- if (registeredID != null) {
511
- this.markRef(registeredID);
512
- return createIndexedValueNode(registeredID);
721
+ // src/core/utils/iterator-to-sequence.ts
722
+ function iteratorToSequence(source) {
723
+ const values = [];
724
+ let throwsAt = -1;
725
+ let doneAt = -1;
726
+ const iterator = source[Symbol.iterator]();
727
+ while (true) {
728
+ try {
729
+ const value = iterator.next();
730
+ values.push(value.value);
731
+ if (value.done) {
732
+ doneAt = values.length - 1;
733
+ break;
734
+ }
735
+ } catch (error) {
736
+ throwsAt = values.length;
737
+ values.push(error);
513
738
  }
514
- const id = this.refs.size;
515
- this.refs.set(current, id);
516
- if (hasReferenceID(current)) {
517
- return createReferenceNode(id, current);
739
+ }
740
+ return {
741
+ v: values,
742
+ t: throwsAt,
743
+ d: doneAt
744
+ };
745
+ }
746
+ function sequenceToIterator(sequence) {
747
+ return () => {
748
+ let index = 0;
749
+ return {
750
+ [Symbol.iterator]() {
751
+ return this;
752
+ },
753
+ next() {
754
+ if (index > sequence.d) {
755
+ return {
756
+ done: true,
757
+ value: void 0
758
+ };
759
+ }
760
+ const currentIndex = index++;
761
+ const currentItem = sequence.v[currentIndex];
762
+ if (currentIndex === sequence.t) {
763
+ throw currentItem;
764
+ }
765
+ return {
766
+ done: currentIndex === sequence.d,
767
+ value: currentItem
768
+ };
769
+ }
770
+ };
771
+ };
772
+ }
773
+ async function asyncIteratorToSequence(source) {
774
+ const values = [];
775
+ let throwsAt = -1;
776
+ let doneAt = -1;
777
+ const iterator = source[Symbol.asyncIterator]();
778
+ while (true) {
779
+ try {
780
+ const value = await iterator.next();
781
+ values.push(value.value);
782
+ if (value.done) {
783
+ doneAt = values.length - 1;
784
+ break;
785
+ }
786
+ } catch (error) {
787
+ throwsAt = values.length;
788
+ values.push(error);
518
789
  }
519
- return id;
520
790
  }
521
- getStrictReference(current) {
522
- const registeredID = this.refs.get(current);
523
- if (registeredID != null) {
524
- this.markRef(registeredID);
525
- return createIndexedValueNode(registeredID);
526
- }
527
- const id = this.refs.size;
528
- this.refs.set(current, id);
529
- return createReferenceNode(id, current);
530
- }
531
- /**
532
- * @private
533
- */
534
- isIterable(value) {
535
- if (!value || typeof value !== "object") {
536
- return false;
537
- }
538
- if (Array.isArray(value)) {
539
- return false;
540
- }
541
- const currentClass = value.constructor;
542
- const currentFeatures = this.features;
543
- if (currentFeatures & 2048 /* TypedArray */) {
544
- switch (currentClass) {
545
- case Int8Array:
546
- case Int16Array:
547
- case Int32Array:
548
- case Uint8Array:
549
- case Uint16Array:
550
- case Uint32Array:
551
- case Uint8ClampedArray:
552
- case Float32Array:
553
- case Float64Array:
554
- return false;
555
- default:
556
- break;
791
+ return {
792
+ v: values,
793
+ t: throwsAt,
794
+ d: doneAt
795
+ };
796
+ }
797
+ function sequenceToAsyncIterator(sequence) {
798
+ return () => {
799
+ let index = 0;
800
+ return {
801
+ [Symbol.asyncIterator]() {
802
+ return this;
803
+ },
804
+ async next() {
805
+ if (index > sequence.d) {
806
+ return {
807
+ done: true,
808
+ value: void 0
809
+ };
810
+ }
811
+ const currentIndex = index++;
812
+ const currentItem = sequence.v[currentIndex];
813
+ if (currentIndex === sequence.t) {
814
+ throw currentItem;
815
+ }
816
+ return Promise.resolve({
817
+ done: currentIndex === sequence.d,
818
+ value: currentItem
819
+ });
557
820
  }
558
- }
559
- if ((currentFeatures & BIGINT_FLAG) === BIGINT_FLAG) {
560
- switch (currentClass) {
561
- case BigInt64Array:
562
- case BigUint64Array:
563
- return false;
564
- default:
565
- break;
821
+ };
822
+ };
823
+ }
824
+ function asyncIteratorToReadableStream(source, parser) {
825
+ return new ReadableStream({
826
+ async start(controller) {
827
+ const iterator = source[Symbol.asyncIterator]();
828
+ while (parser.isAlive()) {
829
+ try {
830
+ const result = await iterator.next();
831
+ controller.enqueue([result.done ? 2 : 0, result.value]);
832
+ if (result.done) {
833
+ controller.close();
834
+ return;
835
+ }
836
+ } catch (error) {
837
+ controller.enqueue([1, error]);
838
+ }
566
839
  }
840
+ controller.close();
567
841
  }
568
- if (currentFeatures & 32 /* Map */ && currentClass === Map) {
569
- return false;
570
- }
571
- if (currentFeatures & 512 /* Set */ && currentClass === Set) {
572
- return false;
573
- }
574
- if (currentFeatures & 8192 /* WebAPI */) {
575
- if (typeof Headers !== "undefined" && currentClass === Headers) {
576
- return false;
842
+ });
843
+ }
844
+ function readableStreamToAsyncIterator(source) {
845
+ let current = source;
846
+ return () => {
847
+ const [left, right] = current.tee();
848
+ const clone = left;
849
+ current = right;
850
+ const reader = clone.getReader();
851
+ return {
852
+ [Symbol.asyncIterator]() {
853
+ return this;
854
+ },
855
+ async next() {
856
+ const result = await reader.read();
857
+ if (result.done) {
858
+ return {
859
+ done: true,
860
+ value: void 0
861
+ };
862
+ }
863
+ const [status, value] = result.value;
864
+ if (status === 1) {
865
+ throw value;
866
+ }
867
+ return {
868
+ done: status === 2,
869
+ value
870
+ };
577
871
  }
578
- if (typeof File !== "undefined" && currentClass === File) {
579
- return false;
872
+ };
873
+ };
874
+ }
875
+ async function readableStreamToSequence(stream) {
876
+ const values = [];
877
+ let throwsAt = -1;
878
+ let doneAt = -1;
879
+ const iterator = stream.getReader();
880
+ while (true) {
881
+ try {
882
+ const value = await iterator.read();
883
+ values.push(value.value);
884
+ if (value.done) {
885
+ doneAt = values.length - 1;
886
+ break;
580
887
  }
888
+ } catch (error) {
889
+ throwsAt = values.length;
890
+ doneAt = throwsAt;
891
+ values.push(error);
892
+ break;
581
893
  }
582
- const currentPlugins = this.plugins;
583
- if (currentPlugins) {
584
- for (let i = 0, len = currentPlugins.length; i < len; i++) {
585
- const plugin = currentPlugins[i];
586
- if (plugin.test(value) && plugin.isIterable && plugin.isIterable(value)) {
587
- return false;
588
- }
894
+ }
895
+ return {
896
+ v: values,
897
+ t: throwsAt,
898
+ d: doneAt
899
+ };
900
+ }
901
+ function sequenceToReadableStream(sequence) {
902
+ return new ReadableStream({
903
+ start(controller) {
904
+ for (let i = 0; i < sequence.d; i++) {
905
+ controller.enqueue(sequence.v[i]);
906
+ }
907
+ if (sequence.t === -1) {
908
+ controller.close();
909
+ } else {
910
+ controller.error(sequence.v[sequence.t]);
589
911
  }
590
912
  }
591
- if (currentFeatures & 1024 /* Symbol */) {
592
- return Symbol.iterator in value;
593
- }
594
- return false;
595
- }
596
- };
597
-
598
- // src/core/promise-to-result.ts
599
- async function promiseToResult(current) {
600
- try {
601
- return [1, await current];
602
- } catch (e) {
603
- return [0, e];
604
- }
913
+ });
605
914
  }
606
915
 
607
- // src/core/shared.ts
608
- function getErrorConstructor(error) {
609
- if (error instanceof EvalError) {
610
- return 1 /* EvalError */;
916
+ // src/core/special-reference.ts
917
+ var MAP_SENTINEL = {};
918
+ var ITERATOR = {};
919
+ var ASYNC_ITERATOR = {};
920
+ var READABLE_STREAM = {};
921
+ var UNIVERSAL_SENTINEL = {};
922
+
923
+ // src/core/context/parser.ts
924
+ var BaseParserContext = class {
925
+ constructor(options) {
926
+ this.marked = /* @__PURE__ */ new Set();
927
+ this.plugins = options.plugins;
928
+ this.features = ALL_ENABLED ^ (options.disabledFeatures || 0);
929
+ this.refs = options.refs || /* @__PURE__ */ new Map();
611
930
  }
612
- if (error instanceof RangeError) {
613
- return 2 /* RangeError */;
931
+ markRef(id) {
932
+ this.marked.add(id);
614
933
  }
615
- if (error instanceof ReferenceError) {
616
- return 3 /* ReferenceError */;
934
+ isMarked(id) {
935
+ return this.marked.has(id);
617
936
  }
618
- if (error instanceof SyntaxError) {
619
- return 4 /* SyntaxError */;
937
+ getReference(current) {
938
+ const registeredID = this.refs.get(current);
939
+ if (registeredID != null) {
940
+ this.markRef(registeredID);
941
+ return createIndexedValueNode(registeredID);
942
+ }
943
+ const id = this.refs.size;
944
+ this.refs.set(current, id);
945
+ if (hasReferenceID(current)) {
946
+ return createReferenceNode(id, current);
947
+ }
948
+ return id;
620
949
  }
621
- if (error instanceof TypeError) {
622
- return 5 /* TypeError */;
950
+ getStrictReference(current) {
951
+ const registeredID = this.refs.get(current);
952
+ if (registeredID != null) {
953
+ this.markRef(registeredID);
954
+ return createIndexedValueNode(registeredID);
955
+ }
956
+ const id = this.refs.size;
957
+ this.refs.set(current, id);
958
+ return createReferenceNode(id, current);
623
959
  }
624
- if (error instanceof URIError) {
625
- return 6 /* URIError */;
960
+ // eslint-disable-next-line @typescript-eslint/ban-types
961
+ parseFunction(current) {
962
+ assert(hasReferenceID(current), new Error("Cannot serialize function without reference ID."));
963
+ return this.getStrictReference(current);
626
964
  }
627
- return 0 /* Error */;
628
- }
629
- function getTypedArrayConstructor(name) {
630
- switch (name) {
631
- case "Int8Array":
632
- return Int8Array;
633
- case "Int16Array":
634
- return Int16Array;
635
- case "Int32Array":
636
- return Int32Array;
637
- case "Uint8Array":
638
- return Uint8Array;
639
- case "Uint16Array":
640
- return Uint16Array;
641
- case "Uint32Array":
642
- return Uint32Array;
643
- case "Uint8ClampedArray":
644
- return Uint8ClampedArray;
645
- case "Float32Array":
646
- return Float32Array;
647
- case "Float64Array":
648
- return Float64Array;
649
- case "BigInt64Array":
650
- return BigInt64Array;
651
- case "BigUint64Array":
652
- return BigUint64Array;
653
- default:
654
- throw new Error(`Unknown TypedArray "${name}"`);
965
+ parseWKSymbol(current) {
966
+ assert(this.features & 1024 /* Symbol */, new UnsupportedTypeError(current));
967
+ const registeredID = this.refs.get(current);
968
+ if (registeredID != null) {
969
+ this.markRef(registeredID);
970
+ return createIndexedValueNode(registeredID);
971
+ }
972
+ const isValid = current in INV_SYMBOL_REF;
973
+ assert(current in INV_SYMBOL_REF || hasReferenceID(current), new Error("Cannot serialize symbol without reference ID."));
974
+ const id = this.refs.size;
975
+ this.refs.set(current, id);
976
+ if (isValid) {
977
+ return createWKSymbolNode(id, current);
978
+ }
979
+ return createReferenceNode(id, current);
655
980
  }
656
- }
657
- var IDENTIFIER_CHECK = /^[$A-Z_][0-9A-Z_$]*$/i;
658
- function isValidIdentifier(name) {
659
- const char = name[0];
660
- return (char === "$" || char === "_" || char >= "A" && char <= "Z" || char >= "a" && char <= "z") && IDENTIFIER_CHECK.test(name);
661
- }
662
- function getObjectFlag(obj) {
663
- if (Object.isFrozen(obj)) {
664
- return 3 /* Frozen */;
981
+ parseMapSentinel() {
982
+ const registeredID = this.refs.get(MAP_SENTINEL);
983
+ if (registeredID != null) {
984
+ this.markRef(registeredID);
985
+ return createIndexedValueNode(registeredID);
986
+ }
987
+ const id = this.refs.size;
988
+ this.refs.set(MAP_SENTINEL, id);
989
+ return {
990
+ t: 41 /* MapSentinel */,
991
+ i: id,
992
+ s: void 0,
993
+ l: void 0,
994
+ c: void 0,
995
+ m: void 0,
996
+ p: void 0,
997
+ e: void 0,
998
+ a: void 0,
999
+ f: void 0,
1000
+ b: void 0,
1001
+ o: void 0
1002
+ };
665
1003
  }
666
- if (Object.isSealed(obj)) {
667
- return 2 /* Sealed */;
1004
+ parseIteratorFactory() {
1005
+ const registeredID = this.refs.get(ITERATOR);
1006
+ if (registeredID != null) {
1007
+ this.markRef(registeredID);
1008
+ return createIndexedValueNode(registeredID);
1009
+ }
1010
+ const id = this.refs.size;
1011
+ this.refs.set(ITERATOR, id);
1012
+ return {
1013
+ t: 42 /* IteratorFactory */,
1014
+ i: id,
1015
+ s: void 0,
1016
+ l: void 0,
1017
+ c: void 0,
1018
+ m: void 0,
1019
+ p: void 0,
1020
+ e: void 0,
1021
+ a: void 0,
1022
+ f: this.parseWKSymbol(Symbol.iterator),
1023
+ b: void 0,
1024
+ o: void 0
1025
+ };
668
1026
  }
669
- if (Object.isExtensible(obj)) {
670
- return 0 /* None */;
1027
+ parseAsyncIteratorFactory() {
1028
+ const registeredID = this.refs.get(ASYNC_ITERATOR);
1029
+ if (registeredID != null) {
1030
+ this.markRef(registeredID);
1031
+ return createIndexedValueNode(registeredID);
1032
+ }
1033
+ const id = this.refs.size;
1034
+ this.refs.set(ASYNC_ITERATOR, id);
1035
+ return {
1036
+ t: 44 /* AsyncIteratorFactory */,
1037
+ i: id,
1038
+ s: void 0,
1039
+ l: void 0,
1040
+ c: void 0,
1041
+ m: void 0,
1042
+ p: void 0,
1043
+ e: void 0,
1044
+ a: void 0,
1045
+ f: this.parseWKSymbol(Symbol.asyncIterator),
1046
+ b: void 0,
1047
+ o: void 0
1048
+ };
671
1049
  }
672
- return 1 /* NonExtensible */;
673
- }
674
- function getErrorOptions(error, features) {
675
- let options;
676
- const constructor = ERROR_CONSTRUCTOR_STRING[getErrorConstructor(error)];
677
- if (error.name !== constructor) {
678
- options = { name: error.name };
679
- } else if (error.constructor.name !== constructor) {
680
- options = { name: error.constructor.name };
1050
+ createObjectNode(id, current, empty, record) {
1051
+ return {
1052
+ t: empty ? 11 /* NullConstructor */ : 10 /* Object */,
1053
+ i: id,
1054
+ s: void 0,
1055
+ l: void 0,
1056
+ c: void 0,
1057
+ m: void 0,
1058
+ p: record,
1059
+ e: void 0,
1060
+ a: void 0,
1061
+ f: void 0,
1062
+ b: void 0,
1063
+ o: getObjectFlag(current)
1064
+ };
681
1065
  }
682
- const names = Object.getOwnPropertyNames(error);
683
- for (let i = 0, len = names.length, name; i < len; i++) {
684
- name = names[i];
685
- if (name !== "name" && name !== "message") {
686
- if (name === "stack") {
687
- if (features & 16 /* ErrorPrototypeStack */) {
688
- options = options || {};
689
- options[name] = error[name];
690
- }
691
- } else {
692
- options = options || {};
693
- options[name] = error[name];
694
- }
1066
+ createMapNode(id, k, v, s) {
1067
+ return {
1068
+ t: 8 /* Map */,
1069
+ i: id,
1070
+ s: void 0,
1071
+ l: void 0,
1072
+ c: void 0,
1073
+ m: void 0,
1074
+ p: void 0,
1075
+ e: { k, v, s },
1076
+ a: void 0,
1077
+ f: this.parseMapSentinel(),
1078
+ b: void 0,
1079
+ o: void 0
1080
+ };
1081
+ }
1082
+ parseReadableStreamFactory() {
1083
+ const registeredID = this.refs.get(READABLE_STREAM);
1084
+ if (registeredID != null) {
1085
+ this.markRef(registeredID);
1086
+ return createIndexedValueNode(registeredID);
695
1087
  }
1088
+ const id = this.refs.size;
1089
+ this.refs.set(READABLE_STREAM, id);
1090
+ return {
1091
+ t: 47 /* ReadableStreamFactory */,
1092
+ i: id,
1093
+ s: void 0,
1094
+ l: void 0,
1095
+ c: void 0,
1096
+ m: void 0,
1097
+ p: void 0,
1098
+ e: void 0,
1099
+ a: void 0,
1100
+ f: void 0,
1101
+ b: void 0,
1102
+ o: void 0
1103
+ };
1104
+ }
1105
+ };
1106
+
1107
+ // src/core/utils/promise-to-result.ts
1108
+ async function promiseToResult(current) {
1109
+ try {
1110
+ return [1, await current];
1111
+ } catch (e) {
1112
+ return [0, e];
696
1113
  }
697
- return options;
698
1114
  }
699
1115
 
700
1116
  // src/core/web-api.ts
@@ -746,135 +1162,122 @@ function createDOMExceptionNode(id, current) {
746
1162
  o: void 0
747
1163
  };
748
1164
  }
1165
+ function createEventNode(id, type, options) {
1166
+ return {
1167
+ t: 37 /* Event */,
1168
+ i: id,
1169
+ s: serializeString(type),
1170
+ l: void 0,
1171
+ c: void 0,
1172
+ m: void 0,
1173
+ p: void 0,
1174
+ e: void 0,
1175
+ a: void 0,
1176
+ f: options,
1177
+ b: void 0,
1178
+ o: void 0
1179
+ };
1180
+ }
1181
+ function createCustomEventNode(id, type, options) {
1182
+ return {
1183
+ t: 38 /* CustomEvent */,
1184
+ i: id,
1185
+ s: serializeString(type),
1186
+ l: void 0,
1187
+ c: void 0,
1188
+ m: void 0,
1189
+ p: void 0,
1190
+ e: void 0,
1191
+ a: void 0,
1192
+ f: options,
1193
+ b: void 0,
1194
+ o: void 0
1195
+ };
1196
+ }
1197
+ function createReadableStreamNode(id, factory, items) {
1198
+ return {
1199
+ t: 46 /* ReadableStream */,
1200
+ i: id,
1201
+ s: void 0,
1202
+ l: void 0,
1203
+ c: void 0,
1204
+ m: void 0,
1205
+ p: void 0,
1206
+ e: void 0,
1207
+ a: [
1208
+ factory,
1209
+ items
1210
+ ],
1211
+ f: void 0,
1212
+ b: void 0,
1213
+ o: void 0
1214
+ };
1215
+ }
749
1216
 
750
- // src/core/base/async.ts
1217
+ // src/core/context/parser/async.ts
751
1218
  var BaseAsyncParserContext = class extends BaseParserContext {
752
1219
  async parseItems(current) {
753
- const size = current.length;
754
1220
  const nodes = [];
755
- const deferred = [];
756
- for (let i = 0, item; i < size; i++) {
1221
+ for (let i = 0, len = current.length; i < len; i++) {
757
1222
  if (i in current) {
758
- item = current[i];
759
- if (this.isIterable(item)) {
760
- deferred[i] = item;
761
- } else {
762
- nodes[i] = await this.parse(item);
763
- }
764
- }
765
- }
766
- for (let i = 0; i < size; i++) {
767
- if (i in deferred) {
768
- nodes[i] = await this.parse(deferred[i]);
1223
+ nodes[i] = await this.parse(current[i]);
769
1224
  }
770
1225
  }
771
1226
  return nodes;
772
1227
  }
773
1228
  async parseArray(id, current) {
774
- return {
775
- t: 9 /* Array */,
776
- i: id,
777
- s: void 0,
778
- l: current.length,
779
- c: void 0,
780
- m: void 0,
781
- p: void 0,
782
- e: void 0,
783
- a: await this.parseItems(current),
784
- f: void 0,
785
- b: void 0,
786
- o: getObjectFlag(current)
787
- };
788
- }
789
- async parseBoxed(id, current) {
790
- return {
791
- t: 27 /* Boxed */,
792
- i: id,
793
- s: void 0,
794
- l: void 0,
795
- c: void 0,
796
- m: void 0,
797
- p: void 0,
798
- e: void 0,
799
- a: void 0,
800
- f: await this.parse(current.valueOf()),
801
- b: void 0,
802
- o: void 0
803
- };
804
- }
805
- async parseTypedArray(id, current) {
806
- return {
807
- t: 15 /* TypedArray */,
808
- i: id,
809
- s: void 0,
810
- l: current.length,
811
- c: current.constructor.name,
812
- m: void 0,
813
- p: void 0,
814
- e: void 0,
815
- a: void 0,
816
- f: await this.parse(current.buffer),
817
- b: current.byteOffset,
818
- o: void 0
819
- };
820
- }
821
- async parseBigIntTypedArray(id, current) {
822
- return {
823
- t: 16 /* BigIntTypedArray */,
824
- i: id,
825
- s: void 0,
826
- l: current.length,
827
- c: current.constructor.name,
828
- m: void 0,
829
- p: void 0,
830
- e: void 0,
831
- a: void 0,
832
- f: await this.parse(current.buffer),
833
- b: current.byteOffset,
834
- o: void 0
835
- };
836
- }
837
- async parseDataView(id, current) {
838
- return {
839
- t: 22 /* DataView */,
840
- i: id,
841
- s: void 0,
842
- l: current.byteLength,
843
- c: void 0,
844
- m: void 0,
845
- p: void 0,
846
- e: void 0,
847
- a: void 0,
848
- f: await this.parse(current.buffer),
849
- b: current.byteOffset,
850
- o: void 0
851
- };
1229
+ return createArrayNode(
1230
+ id,
1231
+ current,
1232
+ await this.parseItems(current)
1233
+ );
852
1234
  }
853
1235
  async parseProperties(properties) {
854
1236
  const entries = Object.entries(properties);
855
1237
  const keyNodes = [];
856
1238
  const valueNodes = [];
857
- const deferredKeys = [];
858
- const deferredValues = [];
859
- for (let i = 0, len = entries.length, key, item; i < len; i++) {
860
- key = serializeString(entries[i][0]);
861
- item = entries[i][1];
862
- if (this.isIterable(item)) {
863
- deferredKeys.push(key);
864
- deferredValues.push(item);
865
- } else {
866
- keyNodes.push(key);
867
- valueNodes.push(await this.parse(item));
868
- }
869
- }
870
- for (let i = 0, len = deferredKeys.length; i < len; i++) {
871
- keyNodes.push(deferredKeys[i]);
872
- valueNodes.push(await this.parse(deferredValues[i]));
1239
+ for (let i = 0, len = entries.length; i < len; i++) {
1240
+ keyNodes.push(serializeString(entries[i][0]));
1241
+ valueNodes.push(await this.parse(entries[i][1]));
873
1242
  }
874
1243
  if (this.features & 1024 /* Symbol */) {
875
- if (Symbol.iterator in properties) {
876
- keyNodes.push(0 /* SymbolIterator */);
877
- valueNodes.push(await this.parse(Array.from(properties)));
1244
+ let symbol = Symbol.iterator;
1245
+ if (symbol in properties) {
1246
+ keyNodes.push(
1247
+ this.parseWKSymbol(symbol)
1248
+ );
1249
+ valueNodes.push(
1250
+ createIteratorFactoryInstanceNode(
1251
+ this.parseIteratorFactory(),
1252
+ await this.parse(
1253
+ iteratorToSequence(properties)
1254
+ )
1255
+ )
1256
+ );
1257
+ }
1258
+ symbol = Symbol.asyncIterator;
1259
+ if (symbol in properties) {
1260
+ keyNodes.push(
1261
+ this.parseWKSymbol(symbol)
1262
+ );
1263
+ valueNodes.push(
1264
+ createAsyncIteratorFactoryInstanceNode(
1265
+ this.parseAsyncIteratorFactory(),
1266
+ await this.parse(
1267
+ await asyncIteratorToSequence(properties)
1268
+ )
1269
+ )
1270
+ );
1271
+ }
1272
+ symbol = Symbol.toStringTag;
1273
+ if (symbol in properties) {
1274
+ keyNodes.push(this.parseWKSymbol(symbol));
1275
+ valueNodes.push(createStringNode(properties[symbol]));
1276
+ }
1277
+ symbol = Symbol.isConcatSpreadable;
1278
+ if (symbol in properties) {
1279
+ keyNodes.push(this.parseWKSymbol(symbol));
1280
+ valueNodes.push(properties[symbol] ? TRUE_NODE : FALSE_NODE);
878
1281
  }
879
1282
  }
880
1283
  return {
@@ -884,99 +1287,61 @@ var BaseAsyncParserContext = class extends BaseParserContext {
884
1287
  };
885
1288
  }
886
1289
  async parsePlainObject(id, current, empty) {
887
- return {
888
- t: empty ? 11 /* NullConstructor */ : 10 /* Object */,
889
- i: id,
890
- s: void 0,
891
- l: void 0,
892
- c: void 0,
893
- m: void 0,
894
- p: await this.parseProperties(current),
895
- e: void 0,
896
- a: void 0,
897
- f: void 0,
898
- b: void 0,
899
- o: getObjectFlag(current)
900
- };
1290
+ return this.createObjectNode(
1291
+ id,
1292
+ current,
1293
+ empty,
1294
+ await this.parseProperties(current)
1295
+ );
1296
+ }
1297
+ async parseBoxed(id, current) {
1298
+ return createBoxedNode(id, await this.parse(current.valueOf()));
1299
+ }
1300
+ async parseTypedArray(id, current) {
1301
+ return createTypedArrayNode(id, current, await this.parse(current.buffer));
1302
+ }
1303
+ async parseBigIntTypedArray(id, current) {
1304
+ return createBigIntTypedArrayNode(id, current, await this.parse(current.buffer));
1305
+ }
1306
+ async parseDataView(id, current) {
1307
+ return createDataViewNode(id, current, await this.parse(current.buffer));
901
1308
  }
902
1309
  async parseError(id, current) {
903
1310
  const options = getErrorOptions(current, this.features);
904
- const optionsNode = options ? await this.parseProperties(options) : void 0;
905
- return {
906
- t: 13 /* Error */,
907
- i: id,
908
- s: getErrorConstructor(current),
909
- l: void 0,
910
- c: void 0,
911
- m: serializeString(current.message),
912
- p: optionsNode,
913
- e: void 0,
914
- a: void 0,
915
- f: void 0,
916
- b: void 0,
917
- o: void 0
918
- };
1311
+ return createErrorNode(
1312
+ id,
1313
+ current,
1314
+ options ? await this.parseProperties(options) : void 0
1315
+ );
1316
+ }
1317
+ async parseAggregateError(id, current) {
1318
+ const options = getErrorOptions(current, this.features);
1319
+ return createAggregateErrorNode(
1320
+ id,
1321
+ current,
1322
+ options ? await this.parseProperties(options) : void 0
1323
+ );
919
1324
  }
920
1325
  async parseMap(id, current) {
921
1326
  const keyNodes = [];
922
1327
  const valueNodes = [];
923
- const deferredKey = [];
924
- const deferredValue = [];
925
1328
  for (const [key, value] of current.entries()) {
926
- if (this.isIterable(key) || this.isIterable(value)) {
927
- deferredKey.push(key);
928
- deferredValue.push(value);
929
- } else {
930
- keyNodes.push(await this.parse(key));
931
- valueNodes.push(await this.parse(value));
932
- }
933
- }
934
- for (let i = 0, len = deferredKey.length; i < len; i++) {
935
- keyNodes.push(await this.parse(deferredKey[i]));
936
- valueNodes.push(await this.parse(deferredValue[i]));
937
- }
938
- return {
939
- t: 8 /* Map */,
940
- i: id,
941
- s: void 0,
942
- l: void 0,
943
- c: void 0,
944
- m: void 0,
945
- p: void 0,
946
- e: { k: keyNodes, v: valueNodes, s: current.size },
947
- a: void 0,
948
- f: void 0,
949
- b: void 0,
950
- o: void 0
951
- };
1329
+ keyNodes.push(await this.parse(key));
1330
+ valueNodes.push(await this.parse(value));
1331
+ }
1332
+ return this.createMapNode(
1333
+ id,
1334
+ keyNodes,
1335
+ valueNodes,
1336
+ current.size
1337
+ );
952
1338
  }
953
1339
  async parseSet(id, current) {
954
- const nodes = [];
955
- const deferred = [];
1340
+ const items = [];
956
1341
  for (const item of current.keys()) {
957
- if (this.isIterable(item)) {
958
- deferred.push(item);
959
- } else {
960
- nodes.push(await this.parse(item));
961
- }
962
- }
963
- for (let i = 0, len = deferred.length; i < len; i++) {
964
- nodes.push(await this.parse(deferred[i]));
1342
+ items.push(await this.parse(item));
965
1343
  }
966
- return {
967
- t: 7 /* Set */,
968
- i: id,
969
- s: void 0,
970
- l: current.size,
971
- c: void 0,
972
- m: void 0,
973
- p: void 0,
974
- e: void 0,
975
- a: nodes,
976
- f: void 0,
977
- b: void 0,
978
- o: void 0
979
- };
1344
+ return createSetNode(id, current.size, items);
980
1345
  }
981
1346
  async parseBlob(id, current) {
982
1347
  return {
@@ -1014,22 +1379,9 @@ var BaseAsyncParserContext = class extends BaseParserContext {
1014
1379
  const size = entries.length;
1015
1380
  const keyNodes = [];
1016
1381
  const valueNodes = [];
1017
- const deferredKeys = [];
1018
- const deferredValues = [];
1019
- for (let i = 0, key, item; i < size; i++) {
1020
- key = serializeString(entries[i][0]);
1021
- item = entries[i][1];
1022
- if (this.isIterable(item)) {
1023
- deferredKeys.push(key);
1024
- deferredValues.push(item);
1025
- } else {
1026
- keyNodes.push(key);
1027
- valueNodes.push(await this.parse(item));
1028
- }
1029
- }
1030
- for (let i = 0, len = deferredKeys.length; i < len; i++) {
1031
- keyNodes.push(deferredKeys[i]);
1032
- valueNodes.push(await this.parse(deferredValues[i]));
1382
+ for (let i = 0; i < size; i++) {
1383
+ keyNodes.push(serializeString(entries[i][0]));
1384
+ valueNodes.push(await this.parse(entries[i][1]));
1033
1385
  }
1034
1386
  return {
1035
1387
  k: keyNodes,
@@ -1057,113 +1409,73 @@ var BaseAsyncParserContext = class extends BaseParserContext {
1057
1409
  o: void 0
1058
1410
  };
1059
1411
  }
1060
- async parseFormData(id, current) {
1061
- const items = [];
1062
- current.forEach((value, key) => {
1063
- items.push([key, value]);
1064
- });
1065
- return {
1066
- t: 26 /* FormData */,
1067
- i: id,
1068
- s: void 0,
1069
- l: void 0,
1070
- c: void 0,
1071
- m: void 0,
1072
- p: void 0,
1073
- e: await this.parsePlainProperties(items),
1074
- a: void 0,
1075
- f: void 0,
1076
- b: void 0,
1077
- o: void 0
1078
- };
1079
- }
1080
- async parseRequest(id, current) {
1081
- return {
1082
- t: 35 /* Request */,
1083
- i: id,
1084
- s: serializeString(current.url),
1085
- l: void 0,
1086
- c: void 0,
1087
- m: void 0,
1088
- p: void 0,
1089
- e: void 0,
1090
- f: await this.parse(
1091
- createRequestOptions(current, current.body ? await current.clone().arrayBuffer() : null)
1092
- ),
1093
- a: void 0,
1094
- b: void 0,
1095
- o: void 0
1096
- };
1097
- }
1098
- async parseResponse(id, current) {
1099
- return {
1100
- t: 36 /* Response */,
1101
- i: id,
1102
- s: void 0,
1103
- l: void 0,
1104
- c: void 0,
1105
- m: void 0,
1106
- p: void 0,
1107
- e: void 0,
1108
- f: void 0,
1109
- a: [
1110
- current.body ? await this.parse(await current.clone().arrayBuffer()) : NULL_NODE,
1111
- await this.parse(createResponseOptions(current))
1112
- ],
1113
- b: void 0,
1114
- o: void 0
1115
- };
1116
- }
1117
- async parseEvent(id, current) {
1412
+ async parseFormData(id, current) {
1413
+ const items = [];
1414
+ current.forEach((value, key) => {
1415
+ items.push([key, value]);
1416
+ });
1118
1417
  return {
1119
- t: 37 /* Event */,
1418
+ t: 26 /* FormData */,
1120
1419
  i: id,
1121
- s: serializeString(current.type),
1420
+ s: void 0,
1122
1421
  l: void 0,
1123
1422
  c: void 0,
1124
1423
  m: void 0,
1125
1424
  p: void 0,
1126
- e: void 0,
1425
+ e: await this.parsePlainProperties(items),
1127
1426
  a: void 0,
1128
- f: await this.parse(createEventOptions(current)),
1427
+ f: void 0,
1129
1428
  b: void 0,
1130
1429
  o: void 0
1131
1430
  };
1132
1431
  }
1133
- async parseCustomEvent(id, current) {
1432
+ async parseRequest(id, current) {
1134
1433
  return {
1135
- t: 38 /* CustomEvent */,
1434
+ t: 35 /* Request */,
1136
1435
  i: id,
1137
- s: serializeString(current.type),
1436
+ s: serializeString(current.url),
1138
1437
  l: void 0,
1139
1438
  c: void 0,
1140
1439
  m: void 0,
1141
1440
  p: void 0,
1142
1441
  e: void 0,
1442
+ f: await this.parse(
1443
+ createRequestOptions(current, current.body ? await current.clone().arrayBuffer() : null)
1444
+ ),
1143
1445
  a: void 0,
1144
- f: await this.parse(createCustomEventOptions(current)),
1145
1446
  b: void 0,
1146
1447
  o: void 0
1147
1448
  };
1148
1449
  }
1149
- async parseAggregateError(id, current) {
1150
- const options = getErrorOptions(current, this.features);
1151
- const optionsNode = options ? await this.parseProperties(options) : void 0;
1450
+ async parseResponse(id, current) {
1152
1451
  return {
1153
- t: 14 /* AggregateError */,
1452
+ t: 36 /* Response */,
1154
1453
  i: id,
1155
1454
  s: void 0,
1156
1455
  l: void 0,
1157
1456
  c: void 0,
1158
- m: serializeString(current.message),
1159
- p: optionsNode,
1457
+ m: void 0,
1458
+ p: void 0,
1160
1459
  e: void 0,
1161
- a: void 0,
1162
1460
  f: void 0,
1461
+ a: [
1462
+ current.body ? await this.parse(await current.clone().arrayBuffer()) : NULL_NODE,
1463
+ await this.parse(createResponseOptions(current))
1464
+ ],
1163
1465
  b: void 0,
1164
1466
  o: void 0
1165
1467
  };
1166
1468
  }
1469
+ async parseEvent(id, current) {
1470
+ return createEventNode(id, current.type, await this.parse(createEventOptions(current)));
1471
+ }
1472
+ async parseCustomEvent(id, current) {
1473
+ return createCustomEventNode(
1474
+ id,
1475
+ current.type,
1476
+ await this.parse(createCustomEventOptions(current))
1477
+ );
1478
+ }
1167
1479
  async parsePromise(id, current) {
1168
1480
  const [status, result] = await promiseToResult(current);
1169
1481
  return {
@@ -1199,6 +1511,15 @@ var BaseAsyncParserContext = class extends BaseParserContext {
1199
1511
  }
1200
1512
  return void 0;
1201
1513
  }
1514
+ async parseReadableStream(id, current) {
1515
+ return createReadableStreamNode(
1516
+ id,
1517
+ this.parseReadableStreamFactory(),
1518
+ await this.parse(
1519
+ await readableStreamToSequence(current)
1520
+ )
1521
+ );
1522
+ }
1202
1523
  async parseObject(id, current) {
1203
1524
  if (Array.isArray(current)) {
1204
1525
  return this.parseArray(id, current);
@@ -1306,6 +1627,8 @@ var BaseAsyncParserContext = class extends BaseParserContext {
1306
1627
  return this.parseCustomEvent(id, current);
1307
1628
  case (typeof DOMException !== "undefined" ? DOMException : UNIVERSAL_SENTINEL):
1308
1629
  return createDOMExceptionNode(id, current);
1630
+ case (typeof ReadableStream !== "undefined" ? ReadableStream : UNIVERSAL_SENTINEL):
1631
+ return this.parseReadableStream(id, current);
1309
1632
  default:
1310
1633
  break;
1311
1634
  }
@@ -1320,7 +1643,7 @@ var BaseAsyncParserContext = class extends BaseParserContext {
1320
1643
  if (current instanceof Error) {
1321
1644
  return this.parseError(id, current);
1322
1645
  }
1323
- if (currentFeatures & 1024 /* Symbol */ && Symbol.iterator in current) {
1646
+ if (currentFeatures & 1024 /* Symbol */ && (Symbol.iterator in current || Symbol.asyncIterator in current)) {
1324
1647
  return this.parsePlainObject(id, current, !!currentClass);
1325
1648
  }
1326
1649
  throw new UnsupportedTypeError(current);
@@ -1350,14 +1673,10 @@ var BaseAsyncParserContext = class extends BaseParserContext {
1350
1673
  const id = this.getReference(current);
1351
1674
  return typeof id === "number" ? this.parseObject(id, current) : id;
1352
1675
  }
1353
- case "symbol": {
1354
- assert(this.features & 1024 /* Symbol */, new UnsupportedTypeError(current));
1355
- const id = this.getReference(current);
1356
- return typeof id === "number" ? createWKSymbolNode(id, current) : id;
1357
- }
1676
+ case "symbol":
1677
+ return this.parseWKSymbol(current);
1358
1678
  case "function":
1359
- assert(hasReferenceID(current), new Error("Cannot serialize function without reference ID."));
1360
- return this.getStrictReference(current);
1679
+ return this.parseFunction(current);
1361
1680
  default:
1362
1681
  throw new UnsupportedTypeError(current);
1363
1682
  }
@@ -1372,50 +1691,90 @@ var AsyncParserContext = class extends BaseAsyncParserContext {
1372
1691
  }
1373
1692
  };
1374
1693
 
1375
- // src/core/tree/deserialize.ts
1376
- function applyObjectFlag(obj, flag) {
1377
- switch (flag) {
1378
- case 3 /* Frozen */:
1379
- return Object.freeze(obj);
1380
- case 1 /* NonExtensible */:
1381
- return Object.preventExtensions(obj);
1382
- case 2 /* Sealed */:
1383
- return Object.seal(obj);
1694
+ // src/core/utils/typed-array.ts
1695
+ function getTypedArrayConstructor(name) {
1696
+ switch (name) {
1697
+ case "Int8Array":
1698
+ return Int8Array;
1699
+ case "Int16Array":
1700
+ return Int16Array;
1701
+ case "Int32Array":
1702
+ return Int32Array;
1703
+ case "Uint8Array":
1704
+ return Uint8Array;
1705
+ case "Uint16Array":
1706
+ return Uint16Array;
1707
+ case "Uint32Array":
1708
+ return Uint32Array;
1709
+ case "Uint8ClampedArray":
1710
+ return Uint8ClampedArray;
1711
+ case "Float32Array":
1712
+ return Float32Array;
1713
+ case "Float64Array":
1714
+ return Float64Array;
1715
+ case "BigInt64Array":
1716
+ return BigInt64Array;
1717
+ case "BigUint64Array":
1718
+ return BigUint64Array;
1384
1719
  default:
1385
- return obj;
1720
+ throw new Error(`Unknown TypedArray "${name}"`);
1386
1721
  }
1387
1722
  }
1723
+
1724
+ // src/core/utils/deferred.ts
1388
1725
  function createDeferred() {
1389
1726
  let resolve;
1390
1727
  let reject;
1391
1728
  return {
1392
- resolve(v) {
1393
- resolve(v);
1394
- },
1395
- reject(v) {
1396
- reject(v);
1397
- },
1398
1729
  promise: new Promise((res, rej) => {
1399
1730
  resolve = res;
1400
1731
  reject = rej;
1401
- })
1732
+ }),
1733
+ resolve(value) {
1734
+ resolve(value);
1735
+ },
1736
+ reject(value) {
1737
+ reject(value);
1738
+ }
1739
+ };
1740
+ }
1741
+ function createDeferredStream() {
1742
+ let controller;
1743
+ return {
1744
+ stream: new ReadableStream({
1745
+ start(current) {
1746
+ controller = current;
1747
+ }
1748
+ }),
1749
+ close() {
1750
+ controller.close();
1751
+ },
1752
+ enqueue(data) {
1753
+ controller.enqueue(data);
1754
+ },
1755
+ error(e) {
1756
+ controller.error(e);
1757
+ }
1402
1758
  };
1403
1759
  }
1404
- var VanillaDeserializerContext = class {
1760
+
1761
+ // src/core/context/deserializer.ts
1762
+ function applyObjectFlag(obj, flag) {
1763
+ switch (flag) {
1764
+ case 3 /* Frozen */:
1765
+ return Object.freeze(obj);
1766
+ case 1 /* NonExtensible */:
1767
+ return Object.preventExtensions(obj);
1768
+ case 2 /* Sealed */:
1769
+ return Object.seal(obj);
1770
+ default:
1771
+ return obj;
1772
+ }
1773
+ }
1774
+ var BaseDeserializerContext = class {
1405
1775
  constructor(options) {
1406
- /**
1407
- * Mapping ids to values
1408
- * @private
1409
- */
1410
- this.values = /* @__PURE__ */ new Map();
1411
1776
  this.plugins = options.plugins;
1412
- this.refs = new Set(options.markedRefs);
1413
- }
1414
- assignIndexedValue(index, value) {
1415
- if (this.refs.has(index)) {
1416
- this.values.set(index, value);
1417
- }
1418
- return value;
1777
+ this.refs = options.refs || /* @__PURE__ */ new Map();
1419
1778
  }
1420
1779
  deserializeReference(node) {
1421
1780
  return this.assignIndexedValue(node.i, getReference(deserializeString(node.s)));
@@ -1439,23 +1798,14 @@ var VanillaDeserializerContext = class {
1439
1798
  deserializeProperties(node, result) {
1440
1799
  const len = node.s;
1441
1800
  if (len) {
1442
- let key;
1443
- let value;
1444
1801
  const keys = node.k;
1445
1802
  const vals = node.v;
1446
- for (let i = 0; i < len; i++) {
1803
+ for (let i = 0, key; i < len; i++) {
1447
1804
  key = keys[i];
1448
- value = this.deserialize(vals[i]);
1449
- switch (key) {
1450
- case 0 /* SymbolIterator */:
1451
- {
1452
- const current = value;
1453
- result[Symbol.iterator] = () => current.values();
1454
- }
1455
- break;
1456
- default:
1457
- result[deserializeString(key)] = value;
1458
- break;
1805
+ if (typeof key === "string") {
1806
+ result[deserializeString(key)] = this.deserialize(vals[i]);
1807
+ } else {
1808
+ result[this.deserialize(key)] = this.deserialize(vals[i]);
1459
1809
  }
1460
1810
  }
1461
1811
  }
@@ -1547,14 +1897,14 @@ var VanillaDeserializerContext = class {
1547
1897
  }
1548
1898
  async deserializePromise(node) {
1549
1899
  const deferred = createDeferred();
1550
- const result = this.assignIndexedValue(node.i, deferred.promise);
1900
+ const result = this.assignIndexedValue(node.i, deferred);
1551
1901
  const deserialized = this.deserialize(node.f);
1552
1902
  if (node.s) {
1553
1903
  deferred.resolve(deserialized);
1554
1904
  } else {
1555
1905
  deferred.reject(deserialized);
1556
1906
  }
1557
- return result;
1907
+ return result.promise;
1558
1908
  }
1559
1909
  deserializeURL(node) {
1560
1910
  return this.assignIndexedValue(node.i, new URL(deserializeString(node.s)));
@@ -1657,14 +2007,88 @@ var VanillaDeserializerContext = class {
1657
2007
  for (let i = 0, len = currentPlugins.length; i < len; i++) {
1658
2008
  const plugin = currentPlugins[i];
1659
2009
  if (plugin.tag === node.c) {
1660
- return plugin.deserialize(node.s, this, {
1661
- id: node.i
1662
- });
2010
+ return this.assignIndexedValue(
2011
+ node.i,
2012
+ plugin.deserialize(node.s, this, {
2013
+ id: node.i
2014
+ })
2015
+ );
1663
2016
  }
1664
2017
  }
1665
2018
  }
1666
2019
  throw new Error('Missing plugin for tag "' + node.c + '".');
1667
2020
  }
2021
+ deserializePromiseConstructor(node) {
2022
+ return this.assignIndexedValue(
2023
+ node.i,
2024
+ createDeferred()
2025
+ ).promise;
2026
+ }
2027
+ deserializePromiseResolve(node) {
2028
+ const deferred = this.refs.get(node.i);
2029
+ assert(deferred, new Error("Missing Promise instance."));
2030
+ deferred.resolve(
2031
+ this.deserialize(node.f)
2032
+ );
2033
+ return void 0;
2034
+ }
2035
+ deserializePromiseReject(node) {
2036
+ const deferred = this.refs.get(node.i);
2037
+ assert(deferred, new Error("Missing Promise instance."));
2038
+ deferred.reject(
2039
+ this.deserialize(node.f)
2040
+ );
2041
+ return void 0;
2042
+ }
2043
+ deserializeReadableStreamConstructor(node) {
2044
+ return this.assignIndexedValue(
2045
+ node.i,
2046
+ createDeferredStream()
2047
+ ).stream;
2048
+ }
2049
+ deserializeReadableStreamEnqueue(node) {
2050
+ const deferred = this.refs.get(node.i);
2051
+ assert(deferred, new Error("Missing ReadableStream instance."));
2052
+ deferred.enqueue(
2053
+ this.deserialize(node.f)
2054
+ );
2055
+ return void 0;
2056
+ }
2057
+ deserializeReadableStreamError(node) {
2058
+ const deferred = this.refs.get(node.i);
2059
+ assert(deferred, new Error("Missing Promise instance."));
2060
+ deferred.error(
2061
+ this.deserialize(node.f)
2062
+ );
2063
+ return void 0;
2064
+ }
2065
+ deserializeReadableStreamClose(node) {
2066
+ const deferred = this.refs.get(node.i);
2067
+ assert(deferred, new Error("Missing Promise instance."));
2068
+ deferred.close();
2069
+ return void 0;
2070
+ }
2071
+ deserializeIteratorFactoryInstance(node) {
2072
+ const source = this.deserialize(node.a[1]);
2073
+ return sequenceToIterator(source);
2074
+ }
2075
+ deserializeAsyncIteratorFactoryInstance(node) {
2076
+ const source = this.deserialize(node.a[1]);
2077
+ if (source.constructor === ReadableStream) {
2078
+ return readableStreamToAsyncIterator(
2079
+ source
2080
+ );
2081
+ }
2082
+ return sequenceToAsyncIterator(source);
2083
+ }
2084
+ deserializeReadableStream(node) {
2085
+ return this.assignIndexedValue(
2086
+ node.i,
2087
+ sequenceToReadableStream(
2088
+ this.deserialize(node.a[1])
2089
+ )
2090
+ );
2091
+ }
1668
2092
  deserialize(node) {
1669
2093
  switch (node.t) {
1670
2094
  case 2 /* Constant */:
@@ -1676,7 +2100,7 @@ var VanillaDeserializerContext = class {
1676
2100
  case 3 /* BigInt */:
1677
2101
  return BigInt(node.s);
1678
2102
  case 4 /* IndexedValue */:
1679
- return this.values.get(node.i);
2103
+ return this.refs.get(node.i);
1680
2104
  case 20 /* Reference */:
1681
2105
  return this.deserializeReference(node);
1682
2106
  case 9 /* Array */:
@@ -1733,13 +2157,62 @@ var VanillaDeserializerContext = class {
1733
2157
  return this.deserializeDOMException(node);
1734
2158
  case 40 /* Plugin */:
1735
2159
  return this.deserializePlugin(node);
2160
+ case 28 /* PromiseConstructor */:
2161
+ return this.deserializePromiseConstructor(node);
2162
+ case 29 /* PromiseResolve */:
2163
+ return this.deserializePromiseResolve(node);
2164
+ case 30 /* PromiseReject */:
2165
+ return this.deserializePromiseReject(node);
2166
+ case 31 /* ReadableStreamConstructor */:
2167
+ return this.deserializeReadableStreamConstructor(node);
2168
+ case 32 /* ReadableStreamEnqueue */:
2169
+ return this.deserializeReadableStreamEnqueue(node);
2170
+ case 34 /* ReadableStreamError */:
2171
+ return this.deserializeReadableStreamError(node);
2172
+ case 33 /* ReadableStreamClose */:
2173
+ return this.deserializeReadableStreamClose(node);
2174
+ case 43 /* IteratorFactoryInstance */:
2175
+ return this.deserializeIteratorFactoryInstance(node);
2176
+ case 45 /* AsyncIteratorFactoryInstance */:
2177
+ return this.deserializeAsyncIteratorFactoryInstance(node);
2178
+ case 46 /* ReadableStream */:
2179
+ return this.deserializeReadableStream(node);
2180
+ case 41 /* MapSentinel */:
2181
+ case 42 /* IteratorFactory */:
2182
+ case 44 /* AsyncIteratorFactory */:
2183
+ case 47 /* ReadableStreamFactory */:
1736
2184
  default:
1737
2185
  throw new Error("invariant");
1738
2186
  }
1739
2187
  }
1740
2188
  };
1741
2189
 
1742
- // src/core/serializer-context.old.ts
2190
+ // src/core/tree/deserializer.ts
2191
+ var VanillaDeserializerContext = class extends BaseDeserializerContext {
2192
+ constructor(options) {
2193
+ super({
2194
+ plugins: options.plugins,
2195
+ refs: void 0
2196
+ });
2197
+ this.mode = "vanilla";
2198
+ this.marked = new Set(options.markedRefs);
2199
+ }
2200
+ assignIndexedValue(index, value) {
2201
+ if (this.marked.has(index)) {
2202
+ this.refs.set(index, value);
2203
+ }
2204
+ return value;
2205
+ }
2206
+ };
2207
+
2208
+ // src/core/utils/is-valid-identifier.ts
2209
+ var IDENTIFIER_CHECK = /^[$A-Z_][0-9A-Z_$]*$/i;
2210
+ function isValidIdentifier(name) {
2211
+ const char = name[0];
2212
+ return (char === "$" || char === "_" || char >= "A" && char <= "Z" || char >= "a" && char <= "z") && IDENTIFIER_CHECK.test(name);
2213
+ }
2214
+
2215
+ // src/core/context/serializer.ts
1743
2216
  function getAssignmentExpression(assignment) {
1744
2217
  switch (assignment.t) {
1745
2218
  case "index":
@@ -1812,10 +2285,6 @@ var SET_CONSTRUCTOR = "new Set";
1812
2285
  var MAP_CONSTRUCTOR = "new Map";
1813
2286
  var PROMISE_RESOLVE = "Promise.resolve";
1814
2287
  var PROMISE_REJECT = "Promise.reject";
1815
- var SYMBOL_ITERATOR = "Symbol.iterator";
1816
- var SPECIAL_REFERENCE_VALUE = {
1817
- [0 /* Sentinel */]: "[]"
1818
- };
1819
2288
  var OBJECT_FLAG_CONSTRUCTOR = {
1820
2289
  [3 /* Frozen */]: "Object.freeze",
1821
2290
  [2 /* Sealed */]: "Object.seal",
@@ -1839,11 +2308,24 @@ var BaseSerializerContext = class {
1839
2308
  * @private
1840
2309
  */
1841
2310
  this.assignments = [];
1842
- this.specials = /* @__PURE__ */ new Set();
1843
2311
  this.plugins = options.plugins;
1844
2312
  this.features = options.features;
1845
2313
  this.marked = new Set(options.markedRefs);
1846
2314
  }
2315
+ createFunction(parameters, body) {
2316
+ if (this.features & 4 /* ArrowFunction */) {
2317
+ const joined = parameters.length === 1 ? parameters[0] : "(" + parameters.join(",") + ")";
2318
+ return joined + "=>" + body;
2319
+ }
2320
+ return "function(" + parameters.join(",") + "){return " + body + "}";
2321
+ }
2322
+ createEffectfulFunction(parameters, body) {
2323
+ if (this.features & 4 /* ArrowFunction */) {
2324
+ const joined = parameters.length === 1 ? parameters[0] : "(" + parameters.join(",") + ")";
2325
+ return joined + "=>{" + body + "}";
2326
+ }
2327
+ return "function(" + parameters.join(",") + "){" + body + "}";
2328
+ }
1847
2329
  /**
1848
2330
  * A tiny function that tells if a reference
1849
2331
  * is to be accessed. This is a requirement for
@@ -1856,18 +2338,6 @@ var BaseSerializerContext = class {
1856
2338
  isMarked(id) {
1857
2339
  return this.marked.has(id);
1858
2340
  }
1859
- /**
1860
- * Generates special references that isn't provided by the user
1861
- * but by the script.
1862
- */
1863
- getSpecialReference(ref) {
1864
- const param = this.getRefParam("_" + ref);
1865
- if (this.specials.has(ref)) {
1866
- return param;
1867
- }
1868
- this.specials.add(ref);
1869
- return param + "=" + SPECIAL_REFERENCE_VALUE[ref];
1870
- }
1871
2341
  pushObjectFlag(flag, id) {
1872
2342
  if (flag !== 0 /* None */) {
1873
2343
  this.markRef(id);
@@ -1949,24 +2419,6 @@ var BaseSerializerContext = class {
1949
2419
  serializeReference(node) {
1950
2420
  return this.assignIndexedValue(node.i, REFERENCES_KEY + '.get("' + node.s + '")');
1951
2421
  }
1952
- getIterableAccess() {
1953
- return this.features & 2 /* ArrayPrototypeValues */ ? ".values()" : "[" + SYMBOL_ITERATOR + "]()";
1954
- }
1955
- serializeIterable(node) {
1956
- const key = "[" + SYMBOL_ITERATOR + "]";
1957
- const parent = this.stack;
1958
- this.stack = [];
1959
- let serialized = this.serialize(node) + this.getIterableAccess();
1960
- this.stack = parent;
1961
- if (this.features & 4 /* ArrowFunction */) {
1962
- serialized = ":()=>" + serialized;
1963
- } else if (this.features & 64 /* MethodShorthand */) {
1964
- serialized = "(){return " + serialized + "}";
1965
- } else {
1966
- serialized = ":function(){return " + serialized + "}";
1967
- }
1968
- return key + serialized;
1969
- }
1970
2422
  serializeArrayItem(id, item, index) {
1971
2423
  if (item) {
1972
2424
  if (this.isIndexedValueInStack(item)) {
@@ -1996,36 +2448,33 @@ var BaseSerializerContext = class {
1996
2448
  }
1997
2449
  return this.assignIndexedValue(id, "[]");
1998
2450
  }
1999
- serializeProperty(id, key, val) {
2000
- switch (key) {
2001
- case 0 /* SymbolIterator */:
2002
- return this.serializeIterable(val);
2003
- default: {
2004
- const check = Number(key);
2005
- const isIdentifier = check >= 0 || isValidIdentifier(key);
2006
- if (this.isIndexedValueInStack(val)) {
2007
- const refParam = this.getRefParam(val.i);
2008
- this.markRef(id);
2009
- if (isIdentifier && check !== check) {
2010
- this.createObjectAssign(id, key, refParam);
2011
- } else {
2012
- this.createArrayAssign(id, isIdentifier ? key : '"' + key + '"', refParam);
2013
- }
2014
- return "";
2451
+ serializeProperty(source, key, val) {
2452
+ if (typeof key === "string") {
2453
+ const check = Number(key);
2454
+ const isIdentifier = check >= 0 || isValidIdentifier(key);
2455
+ if (this.isIndexedValueInStack(val)) {
2456
+ const refParam = this.getRefParam(val.i);
2457
+ this.markRef(source.i);
2458
+ if (isIdentifier && check !== check) {
2459
+ this.createObjectAssign(source.i, key, refParam);
2460
+ } else {
2461
+ this.createArrayAssign(source.i, isIdentifier ? key : '"' + key + '"', refParam);
2015
2462
  }
2016
- return (isIdentifier ? key : '"' + key + '"') + ":" + this.serialize(val);
2463
+ return "";
2017
2464
  }
2465
+ return (isIdentifier ? key : '"' + key + '"') + ":" + this.serialize(val);
2018
2466
  }
2467
+ return "[" + this.serialize(key) + "]:" + this.serialize(val);
2019
2468
  }
2020
- serializeProperties(sourceID, node) {
2021
- const len = node.s;
2469
+ serializeProperties(source, record) {
2470
+ const len = record.s;
2022
2471
  if (len) {
2023
- this.stack.push(sourceID);
2024
- const keys = node.k;
2025
- const values = node.v;
2026
- let result = this.serializeProperty(sourceID, keys[0], values[0]);
2472
+ this.stack.push(source.i);
2473
+ const keys = record.k;
2474
+ const values = record.v;
2475
+ let result = this.serializeProperty(source, keys[0], values[0]);
2027
2476
  for (let i = 1, item = result; i < len; i++) {
2028
- item = this.serializeProperty(sourceID, keys[i], values[i]);
2477
+ item = this.serializeProperty(source, keys[i], values[i]);
2029
2478
  result += (item && result && ",") + item;
2030
2479
  }
2031
2480
  this.stack.pop();
@@ -2035,88 +2484,83 @@ var BaseSerializerContext = class {
2035
2484
  }
2036
2485
  serializeObject(node) {
2037
2486
  this.pushObjectFlag(node.o, node.i);
2038
- return this.assignIndexedValue(node.i, this.serializeProperties(node.i, node.p));
2487
+ return this.assignIndexedValue(node.i, this.serializeProperties(node, node.p));
2039
2488
  }
2040
- serializeWithObjectAssign(value, id, serialized) {
2041
- const fields = this.serializeProperties(id, value);
2489
+ serializeWithObjectAssign(source, value, serialized) {
2490
+ const fields = this.serializeProperties(source, value);
2042
2491
  if (fields !== "{}") {
2043
2492
  return "Object.assign(" + serialized + "," + fields + ")";
2044
2493
  }
2045
2494
  return serialized;
2046
2495
  }
2047
- serializeAssignment(sourceID, mainAssignments, key, value) {
2048
- switch (key) {
2049
- case 0 /* SymbolIterator */:
2050
- {
2051
- const parent = this.stack;
2052
- this.stack = [];
2053
- const serialized = this.serialize(value) + this.getIterableAccess();
2054
- this.stack = parent;
2055
- const parentAssignment = this.assignments;
2056
- this.assignments = mainAssignments;
2057
- this.createArrayAssign(
2058
- sourceID,
2059
- this.getSpecialReference(0 /* Sentinel */),
2060
- this.features & 4 /* ArrowFunction */ ? "()=>" + serialized : "function(){return " + serialized + "}"
2061
- );
2062
- this.assignments = parentAssignment;
2496
+ serializeAssignment(source, mainAssignments, key, value) {
2497
+ if (typeof key === "string") {
2498
+ const serialized = this.serialize(value);
2499
+ const check = Number(key);
2500
+ const isIdentifier = check >= 0 || isValidIdentifier(key);
2501
+ if (this.isIndexedValueInStack(value)) {
2502
+ if (isIdentifier && check !== check) {
2503
+ this.createObjectAssign(source.i, key, serialized);
2504
+ } else {
2505
+ this.createArrayAssign(source.i, isIdentifier ? key : '"' + key + '"', serialized);
2063
2506
  }
2064
- break;
2065
- default: {
2066
- const serialized = this.serialize(value);
2067
- const check = Number(key);
2068
- const isIdentifier = check >= 0 || isValidIdentifier(key);
2069
- if (this.isIndexedValueInStack(value)) {
2070
- if (isIdentifier && check !== check) {
2071
- this.createObjectAssign(sourceID, key, serialized);
2072
- } else {
2073
- this.createArrayAssign(sourceID, isIdentifier ? key : '"' + key + '"', serialized);
2074
- }
2507
+ } else {
2508
+ const parentAssignment = this.assignments;
2509
+ this.assignments = mainAssignments;
2510
+ if (isIdentifier) {
2511
+ this.createObjectAssign(source.i, key, serialized);
2075
2512
  } else {
2076
- const parentAssignment = this.assignments;
2077
- this.assignments = mainAssignments;
2078
- if (isIdentifier) {
2079
- this.createObjectAssign(sourceID, key, serialized);
2080
- } else {
2081
- this.createArrayAssign(sourceID, isIdentifier ? key : '"' + key + '"', serialized);
2082
- }
2083
- this.assignments = parentAssignment;
2513
+ this.createArrayAssign(source.i, isIdentifier ? key : '"' + key + '"', serialized);
2084
2514
  }
2515
+ this.assignments = parentAssignment;
2085
2516
  }
2517
+ } else {
2518
+ const parent = this.stack;
2519
+ this.stack = [];
2520
+ const serialized = this.serialize(value);
2521
+ this.stack = parent;
2522
+ const parentAssignment = this.assignments;
2523
+ this.assignments = mainAssignments;
2524
+ this.createArrayAssign(
2525
+ source.i,
2526
+ this.serialize(key),
2527
+ serialized
2528
+ );
2529
+ this.assignments = parentAssignment;
2086
2530
  }
2087
2531
  }
2088
- serializeAssignments(sourceID, node) {
2532
+ serializeAssignments(source, node) {
2089
2533
  const len = node.s;
2090
2534
  if (len) {
2091
- this.stack.push(sourceID);
2535
+ this.stack.push(source.i);
2092
2536
  const mainAssignments = [];
2093
2537
  const keys = node.k;
2094
2538
  const values = node.v;
2095
2539
  for (let i = 0; i < len; i++) {
2096
- this.serializeAssignment(sourceID, mainAssignments, keys[i], values[i]);
2540
+ this.serializeAssignment(source, mainAssignments, keys[i], values[i]);
2097
2541
  }
2098
2542
  this.stack.pop();
2099
2543
  return resolveAssignments(mainAssignments);
2100
2544
  }
2101
2545
  return void 0;
2102
2546
  }
2103
- serializeDictionary(i, p, init) {
2104
- if (p) {
2547
+ serializeDictionary(node, init) {
2548
+ if (node.p) {
2105
2549
  if (this.features & 128 /* ObjectAssign */) {
2106
- init = this.serializeWithObjectAssign(p, i, init);
2550
+ init = this.serializeWithObjectAssign(node, node.p, init);
2107
2551
  } else {
2108
- this.markRef(i);
2109
- const assignments = this.serializeAssignments(i, p);
2552
+ this.markRef(node.i);
2553
+ const assignments = this.serializeAssignments(node, node.p);
2110
2554
  if (assignments) {
2111
- return "(" + this.assignIndexedValue(i, init) + "," + assignments + this.getRefParam(i) + ")";
2555
+ return "(" + this.assignIndexedValue(node.i, init) + "," + assignments + this.getRefParam(node.i) + ")";
2112
2556
  }
2113
2557
  }
2114
2558
  }
2115
- return this.assignIndexedValue(i, init);
2559
+ return this.assignIndexedValue(node.i, init);
2116
2560
  }
2117
2561
  serializeNullConstructor(node) {
2118
2562
  this.pushObjectFlag(node.o, node.i);
2119
- return this.serializeDictionary(node.i, node.p, NULL_CONSTRUCTOR);
2563
+ return this.serializeDictionary(node, NULL_CONSTRUCTOR);
2120
2564
  }
2121
2565
  serializeDate(node) {
2122
2566
  return this.assignIndexedValue(node.i, 'new Date("' + node.s + '")');
@@ -2151,7 +2595,7 @@ var BaseSerializerContext = class {
2151
2595
  }
2152
2596
  return this.assignIndexedValue(id, serialized);
2153
2597
  }
2154
- serializeMapEntry(id, key, val) {
2598
+ serializeMapEntry(id, key, val, sentinel) {
2155
2599
  if (this.isIndexedValueInStack(key)) {
2156
2600
  const keyRef = this.getRefParam(key.i);
2157
2601
  this.markRef(id);
@@ -2161,9 +2605,9 @@ var BaseSerializerContext = class {
2161
2605
  return "";
2162
2606
  }
2163
2607
  if (val.t !== 4 /* IndexedValue */ && val.i != null && this.isMarked(val.i)) {
2164
- const serialized = "(" + this.serialize(val) + ",[" + this.getSpecialReference(0 /* Sentinel */) + "," + this.getSpecialReference(0 /* Sentinel */) + "])";
2608
+ const serialized = "(" + this.serialize(val) + ",[" + sentinel + "," + sentinel + "])";
2165
2609
  this.createSetAssignment(id, keyRef, this.getRefParam(val.i));
2166
- this.createDeleteAssignment(id, this.getSpecialReference(0 /* Sentinel */));
2610
+ this.createDeleteAssignment(id, sentinel);
2167
2611
  return serialized;
2168
2612
  }
2169
2613
  const parent = this.stack;
@@ -2176,9 +2620,9 @@ var BaseSerializerContext = class {
2176
2620
  const valueRef = this.getRefParam(val.i);
2177
2621
  this.markRef(id);
2178
2622
  if (key.t !== 4 /* IndexedValue */ && key.i != null && this.isMarked(key.i)) {
2179
- const serialized = "(" + this.serialize(key) + ",[" + this.getSpecialReference(0 /* Sentinel */) + "," + this.getSpecialReference(0 /* Sentinel */) + "])";
2623
+ const serialized = "(" + this.serialize(key) + ",[" + sentinel + "," + sentinel + "])";
2180
2624
  this.createSetAssignment(id, this.getRefParam(key.i), valueRef);
2181
- this.createDeleteAssignment(id, this.getSpecialReference(0 /* Sentinel */));
2625
+ this.createDeleteAssignment(id, sentinel);
2182
2626
  return serialized;
2183
2627
  }
2184
2628
  const parent = this.stack;
@@ -2193,13 +2637,15 @@ var BaseSerializerContext = class {
2193
2637
  let serialized = MAP_CONSTRUCTOR;
2194
2638
  const size = node.e.s;
2195
2639
  const id = node.i;
2640
+ const sentinel = node.f;
2641
+ const sentinelID = this.getRefParam(sentinel.i);
2196
2642
  if (size) {
2197
2643
  const keys = node.e.k;
2198
2644
  const vals = node.e.v;
2199
2645
  this.stack.push(id);
2200
- let result = this.serializeMapEntry(id, keys[0], vals[0]);
2646
+ let result = this.serializeMapEntry(id, keys[0], vals[0], sentinelID);
2201
2647
  for (let i = 1, item = result; i < size; i++) {
2202
- item = this.serializeMapEntry(id, keys[i], vals[i]);
2648
+ item = this.serializeMapEntry(id, keys[i], vals[i], sentinelID);
2203
2649
  result += (item && result && ",") + item;
2204
2650
  }
2205
2651
  this.stack.pop();
@@ -2207,6 +2653,10 @@ var BaseSerializerContext = class {
2207
2653
  serialized += "([" + result + "])";
2208
2654
  }
2209
2655
  }
2656
+ if (sentinel.t === 41 /* MapSentinel */) {
2657
+ this.markRef(sentinel.i);
2658
+ serialized = "(" + this.serialize(sentinel) + "," + serialized + ")";
2659
+ }
2210
2660
  return this.assignIndexedValue(id, serialized);
2211
2661
  }
2212
2662
  serializeArrayBuffer(node) {
@@ -2239,10 +2689,10 @@ var BaseSerializerContext = class {
2239
2689
  this.stack.push(id);
2240
2690
  const serialized = 'new AggregateError([],"' + node.m + '")';
2241
2691
  this.stack.pop();
2242
- return this.serializeDictionary(id, node.p, serialized);
2692
+ return this.serializeDictionary(node, serialized);
2243
2693
  }
2244
2694
  serializeError(node) {
2245
- return this.serializeDictionary(node.i, node.p, "new " + ERROR_CONSTRUCTOR_STRING[node.s] + '("' + node.m + '")');
2695
+ return this.serializeDictionary(node, "new " + ERROR_CONSTRUCTOR_STRING[node.s] + '("' + node.m + '")');
2246
2696
  }
2247
2697
  serializePromise(node) {
2248
2698
  let serialized;
@@ -2251,17 +2701,7 @@ var BaseSerializerContext = class {
2251
2701
  const constructor = node.s ? PROMISE_RESOLVE : PROMISE_REJECT;
2252
2702
  if (this.isIndexedValueInStack(fulfilled)) {
2253
2703
  const ref = this.getRefParam(fulfilled.i);
2254
- if (this.features & 4 /* ArrowFunction */) {
2255
- if (node.s) {
2256
- serialized = constructor + "().then(()=>" + ref + ")";
2257
- } else {
2258
- serialized = constructor + "().catch(()=>{throw " + ref + "})";
2259
- }
2260
- } else if (node.s) {
2261
- serialized = constructor + "().then(function(){return " + ref + "})";
2262
- } else {
2263
- serialized = constructor + "().catch(function(){throw " + ref + "})";
2264
- }
2704
+ serialized = constructor + (node.s ? "().then(" + this.createFunction([], ref) + ")" : "().catch(" + this.createEffectfulFunction([], "throw " + ref) + ")");
2265
2705
  } else {
2266
2706
  this.stack.push(id);
2267
2707
  const result = this.serialize(fulfilled);
@@ -2297,7 +2737,7 @@ var BaseSerializerContext = class {
2297
2737
  serializeHeaders(node) {
2298
2738
  return this.assignIndexedValue(
2299
2739
  node.i,
2300
- "new Headers(" + this.serializeProperties(node.i, node.e) + ")"
2740
+ "new Headers(" + this.serializeProperties(node, node.e) + ")"
2301
2741
  );
2302
2742
  }
2303
2743
  serializeFormDataEntry(id, key, value) {
@@ -2347,29 +2787,98 @@ var BaseSerializerContext = class {
2347
2787
  serializeCustomEvent(node) {
2348
2788
  return this.assignIndexedValue(
2349
2789
  node.i,
2350
- 'new CustomEvent("' + node.s + '",' + this.serialize(node.f) + ")"
2790
+ 'new CustomEvent("' + node.s + '",' + this.serialize(node.f) + ")"
2791
+ );
2792
+ }
2793
+ serializeDOMException(node) {
2794
+ return this.assignIndexedValue(
2795
+ node.i,
2796
+ 'new DOMException("' + node.s + '","' + node.c + '")'
2797
+ );
2798
+ }
2799
+ serializePlugin(node) {
2800
+ const currentPlugins = this.plugins;
2801
+ if (currentPlugins) {
2802
+ for (let i = 0, len = currentPlugins.length; i < len; i++) {
2803
+ const plugin = currentPlugins[i];
2804
+ if (plugin.tag === node.c) {
2805
+ return this.assignIndexedValue(
2806
+ node.i,
2807
+ plugin.serialize(node.s, this, {
2808
+ id: node.i
2809
+ })
2810
+ );
2811
+ }
2812
+ }
2813
+ }
2814
+ throw new Error('Missing plugin for tag "' + node.c + '".');
2815
+ }
2816
+ serializeMapSentinel(node) {
2817
+ return this.assignIndexedValue(
2818
+ node.i,
2819
+ "[]"
2820
+ );
2821
+ }
2822
+ serializeIteratorFactory(node) {
2823
+ return this.assignIndexedValue(
2824
+ node.i,
2825
+ this.createFunction(
2826
+ ["s"],
2827
+ this.createFunction(
2828
+ ["i", "c", "d", "t"],
2829
+ "(i=0,t={[" + this.serialize(node.f) + "]:" + this.createFunction([], "t") + ",next:" + this.createEffectfulFunction([], "if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}") + "})"
2830
+ )
2831
+ )
2832
+ );
2833
+ }
2834
+ serializeIteratorFactoryInstance(node) {
2835
+ return "(" + this.serialize(node.a[0]) + ")(" + this.serialize(node.a[1]) + ")";
2836
+ }
2837
+ serializeAsyncIteratorFactory(node) {
2838
+ return this.assignIndexedValue(
2839
+ node.i,
2840
+ this.createFunction(
2841
+ ["s"],
2842
+ this.createFunction(
2843
+ ["i", "t"],
2844
+ "(i=0,t={[" + this.serialize(node.f) + "]:" + this.createFunction([], "t") + ",next:" + this.createFunction(
2845
+ [],
2846
+ "Promise.resolve().then(" + this.createEffectfulFunction(
2847
+ ["c", "d"],
2848
+ "if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}"
2849
+ ) + ")"
2850
+ ) + "})"
2851
+ )
2852
+ )
2853
+ );
2854
+ }
2855
+ serializeAsyncIteratorFactoryInstance(node) {
2856
+ return "(" + this.serialize(node.a[0]) + ")(" + this.serialize(node.a[1]) + ")";
2857
+ }
2858
+ serializeReadableStream(node) {
2859
+ this.stack.push(node.i);
2860
+ const result = "(" + this.serialize(node.a[0]) + ")(" + this.serialize(node.a[1]) + ")";
2861
+ this.stack.pop();
2862
+ return this.assignIndexedValue(
2863
+ node.i,
2864
+ result
2351
2865
  );
2352
2866
  }
2353
- serializeDOMException(node) {
2867
+ serializeReadableStreamFactory(node) {
2354
2868
  return this.assignIndexedValue(
2355
2869
  node.i,
2356
- 'new DOMException("' + node.s + '","' + node.c + '")'
2870
+ this.createFunction(
2871
+ ["s"],
2872
+ "new ReadableStream({start:" + this.createFunction(
2873
+ ["c"],
2874
+ "Promise.resolve().then(" + this.createEffectfulFunction(
2875
+ ["i", "v"],
2876
+ "for(i=0;i<s.d;i++)c.enqueue(s.v[i]);(s.t===-1)?c.close():c.error(s.v[i])"
2877
+ ) + ")"
2878
+ ) + "})"
2879
+ )
2357
2880
  );
2358
2881
  }
2359
- serializePlugin(node) {
2360
- const currentPlugins = this.plugins;
2361
- if (currentPlugins) {
2362
- for (let i = 0, len = currentPlugins.length; i < len; i++) {
2363
- const plugin = currentPlugins[i];
2364
- if (plugin.tag === node.c) {
2365
- return plugin.serialize(node.s, this, {
2366
- id: node.i
2367
- });
2368
- }
2369
- }
2370
- }
2371
- throw new Error('Missing plugin for tag "' + node.c + '".');
2372
- }
2373
2882
  serialize(node) {
2374
2883
  switch (node.t) {
2375
2884
  case 2 /* Constant */:
@@ -2453,13 +2962,27 @@ var BaseSerializerContext = class {
2453
2962
  return this.serializeDOMException(node);
2454
2963
  case 40 /* Plugin */:
2455
2964
  return this.serializePlugin(node);
2965
+ case 41 /* MapSentinel */:
2966
+ return this.serializeMapSentinel(node);
2967
+ case 42 /* IteratorFactory */:
2968
+ return this.serializeIteratorFactory(node);
2969
+ case 43 /* IteratorFactoryInstance */:
2970
+ return this.serializeIteratorFactoryInstance(node);
2971
+ case 44 /* AsyncIteratorFactory */:
2972
+ return this.serializeAsyncIteratorFactory(node);
2973
+ case 45 /* AsyncIteratorFactoryInstance */:
2974
+ return this.serializeAsyncIteratorFactoryInstance(node);
2975
+ case 46 /* ReadableStream */:
2976
+ return this.serializeReadableStream(node);
2977
+ case 47 /* ReadableStreamFactory */:
2978
+ return this.serializeReadableStreamFactory(node);
2456
2979
  default:
2457
2980
  throw new Error("invariant");
2458
2981
  }
2459
2982
  }
2460
2983
  };
2461
2984
 
2462
- // src/core/get-identifier.ts
2985
+ // src/core/utils/get-identifier.ts
2463
2986
  var REF_START_CHARS = "hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_";
2464
2987
  var REF_START_CHARS_LEN = REF_START_CHARS.length;
2465
2988
  var REF_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_";
@@ -2476,7 +2999,7 @@ function getIdentifier(index) {
2476
2999
  return ref;
2477
3000
  }
2478
3001
 
2479
- // src/core/tree/serialize.ts
3002
+ // src/core/tree/serializer.ts
2480
3003
  var VanillaSerializerContext = class extends BaseSerializerContext {
2481
3004
  constructor() {
2482
3005
  super(...arguments);
@@ -2554,12 +3077,7 @@ var VanillaSerializerContext = class extends BaseSerializerContext {
2554
3077
  body = index + "=" + body;
2555
3078
  }
2556
3079
  }
2557
- let params = this.vars.length > 1 ? this.vars.join(",") : this.vars[0];
2558
- if (this.features & 4 /* ArrowFunction */) {
2559
- params = this.vars.length > 1 || this.vars.length === 0 ? "(" + params + ")" : params;
2560
- return "(" + params + "=>(" + body + "))()";
2561
- }
2562
- return "(function(" + params + "){return " + body + "})()";
3080
+ return "(" + this.createFunction(this.vars, "(" + body + ")") + ")()";
2563
3081
  }
2564
3082
  if (tree.t === 10 /* Object */) {
2565
3083
  return "(" + result + ")";
@@ -2568,70 +3086,56 @@ var VanillaSerializerContext = class extends BaseSerializerContext {
2568
3086
  }
2569
3087
  };
2570
3088
 
2571
- // src/core/base/sync.ts
3089
+ // src/core/context/parser/sync.ts
2572
3090
  var BaseSyncParserContext = class extends BaseParserContext {
2573
3091
  parseItems(current) {
2574
- const size = current.length;
2575
3092
  const nodes = [];
2576
- const deferred = [];
2577
- for (let i = 0, item; i < size; i++) {
3093
+ for (let i = 0, len = current.length; i < len; i++) {
2578
3094
  if (i in current) {
2579
- item = current[i];
2580
- if (this.isIterable(item)) {
2581
- deferred[i] = item;
2582
- } else {
2583
- nodes[i] = this.parse(item);
2584
- }
2585
- }
2586
- }
2587
- for (let i = 0; i < size; i++) {
2588
- if (i in deferred) {
2589
- nodes[i] = this.parse(deferred[i]);
3095
+ nodes[i] = this.parse(current[i]);
2590
3096
  }
2591
3097
  }
2592
3098
  return nodes;
2593
3099
  }
2594
3100
  parseArray(id, current) {
2595
- return {
2596
- t: 9 /* Array */,
2597
- i: id,
2598
- s: void 0,
2599
- l: current.length,
2600
- c: void 0,
2601
- m: void 0,
2602
- p: void 0,
2603
- e: void 0,
2604
- a: this.parseItems(current),
2605
- f: void 0,
2606
- b: void 0,
2607
- o: getObjectFlag(current)
2608
- };
3101
+ return createArrayNode(
3102
+ id,
3103
+ current,
3104
+ this.parseItems(current)
3105
+ );
2609
3106
  }
2610
3107
  parseProperties(properties) {
2611
3108
  const entries = Object.entries(properties);
2612
3109
  const keyNodes = [];
2613
3110
  const valueNodes = [];
2614
- const deferredKeys = [];
2615
- const deferredValues = [];
2616
- for (let i = 0, len = entries.length, key, item; i < len; i++) {
2617
- key = serializeString(entries[i][0]);
2618
- item = entries[i][1];
2619
- if (this.isIterable(item)) {
2620
- deferredKeys.push(key);
2621
- deferredValues.push(item);
2622
- } else {
2623
- keyNodes.push(key);
2624
- valueNodes.push(this.parse(item));
2625
- }
2626
- }
2627
- for (let i = 0, len = deferredKeys.length; i < len; i++) {
2628
- keyNodes.push(deferredKeys[i]);
2629
- valueNodes.push(this.parse(deferredValues[i]));
3111
+ for (let i = 0, len = entries.length; i < len; i++) {
3112
+ keyNodes.push(serializeString(entries[i][0]));
3113
+ valueNodes.push(this.parse(entries[i][1]));
2630
3114
  }
2631
3115
  if (this.features & 1024 /* Symbol */) {
2632
- if (Symbol.iterator in properties) {
2633
- keyNodes.push(0 /* SymbolIterator */);
2634
- valueNodes.push(this.parse(Array.from(properties)));
3116
+ let symbol = Symbol.iterator;
3117
+ if (symbol in properties) {
3118
+ keyNodes.push(
3119
+ this.parseWKSymbol(symbol)
3120
+ );
3121
+ valueNodes.push(
3122
+ createIteratorFactoryInstanceNode(
3123
+ this.parseIteratorFactory(),
3124
+ this.parse(
3125
+ iteratorToSequence(properties)
3126
+ )
3127
+ )
3128
+ );
3129
+ }
3130
+ symbol = Symbol.toStringTag;
3131
+ if (symbol in properties) {
3132
+ keyNodes.push(this.parseWKSymbol(symbol));
3133
+ valueNodes.push(createStringNode(properties[symbol]));
3134
+ }
3135
+ symbol = Symbol.isConcatSpreadable;
3136
+ if (symbol in properties) {
3137
+ keyNodes.push(this.parseWKSymbol(symbol));
3138
+ valueNodes.push(properties[symbol] ? TRUE_NODE : FALSE_NODE);
2635
3139
  }
2636
3140
  }
2637
3141
  return {
@@ -2641,184 +3145,69 @@ var BaseSyncParserContext = class extends BaseParserContext {
2641
3145
  };
2642
3146
  }
2643
3147
  parsePlainObject(id, current, empty) {
2644
- return {
2645
- t: empty ? 11 /* NullConstructor */ : 10 /* Object */,
2646
- i: id,
2647
- s: void 0,
2648
- l: void 0,
2649
- c: void 0,
2650
- m: void 0,
2651
- p: this.parseProperties(current),
2652
- e: void 0,
2653
- a: void 0,
2654
- f: void 0,
2655
- b: void 0,
2656
- o: getObjectFlag(current)
2657
- };
3148
+ return this.createObjectNode(
3149
+ id,
3150
+ current,
3151
+ empty,
3152
+ this.parseProperties(current)
3153
+ );
2658
3154
  }
2659
3155
  parseBoxed(id, current) {
2660
- return {
2661
- t: 27 /* Boxed */,
2662
- i: id,
2663
- s: void 0,
2664
- l: void 0,
2665
- c: void 0,
2666
- m: void 0,
2667
- p: void 0,
2668
- e: void 0,
2669
- a: void 0,
2670
- f: this.parse(current.valueOf()),
2671
- b: void 0,
2672
- o: void 0
2673
- };
3156
+ return createBoxedNode(id, this.parse(current.valueOf()));
2674
3157
  }
2675
3158
  parseTypedArray(id, current) {
2676
- return {
2677
- t: 15 /* TypedArray */,
2678
- i: id,
2679
- s: void 0,
2680
- l: current.length,
2681
- c: current.constructor.name,
2682
- m: void 0,
2683
- p: void 0,
2684
- e: void 0,
2685
- a: void 0,
2686
- f: this.parse(current.buffer),
2687
- b: current.byteOffset,
2688
- o: void 0
2689
- };
3159
+ return createTypedArrayNode(id, current, this.parse(current.buffer));
2690
3160
  }
2691
3161
  parseBigIntTypedArray(id, current) {
2692
- return {
2693
- t: 16 /* BigIntTypedArray */,
2694
- i: id,
2695
- s: void 0,
2696
- l: current.length,
2697
- c: current.constructor.name,
2698
- m: void 0,
2699
- p: void 0,
2700
- e: void 0,
2701
- a: void 0,
2702
- f: this.parse(current.buffer),
2703
- b: current.byteOffset,
2704
- o: void 0
2705
- };
3162
+ return createBigIntTypedArrayNode(id, current, this.parse(current.buffer));
2706
3163
  }
2707
3164
  parseDataView(id, current) {
2708
- return {
2709
- t: 22 /* DataView */,
2710
- i: id,
2711
- s: void 0,
2712
- l: current.byteLength,
2713
- c: void 0,
2714
- m: void 0,
2715
- p: void 0,
2716
- e: void 0,
2717
- a: void 0,
2718
- f: this.parse(current.buffer),
2719
- b: current.byteOffset,
2720
- o: void 0
2721
- };
3165
+ return createDataViewNode(id, current, this.parse(current.buffer));
2722
3166
  }
2723
3167
  parseError(id, current) {
2724
3168
  const options = getErrorOptions(current, this.features);
2725
- const optionsNode = options ? this.parseProperties(options) : void 0;
2726
- return {
2727
- t: 13 /* Error */,
2728
- i: id,
2729
- s: getErrorConstructor(current),
2730
- l: void 0,
2731
- c: void 0,
2732
- m: serializeString(current.message),
2733
- p: optionsNode,
2734
- e: void 0,
2735
- a: void 0,
2736
- f: void 0,
2737
- b: void 0,
2738
- o: void 0
2739
- };
3169
+ return createErrorNode(
3170
+ id,
3171
+ current,
3172
+ options ? this.parseProperties(options) : void 0
3173
+ );
3174
+ }
3175
+ parseAggregateError(id, current) {
3176
+ const options = getErrorOptions(current, this.features);
3177
+ return createAggregateErrorNode(
3178
+ id,
3179
+ current,
3180
+ options ? this.parseProperties(options) : void 0
3181
+ );
2740
3182
  }
2741
3183
  parseMap(id, current) {
2742
3184
  const keyNodes = [];
2743
3185
  const valueNodes = [];
2744
- const deferredKey = [];
2745
- const deferredValue = [];
2746
3186
  for (const [key, value] of current.entries()) {
2747
- if (this.isIterable(key) || this.isIterable(value)) {
2748
- deferredKey.push(key);
2749
- deferredValue.push(value);
2750
- } else {
2751
- keyNodes.push(this.parse(key));
2752
- valueNodes.push(this.parse(value));
2753
- }
2754
- }
2755
- for (let i = 0, len = deferredKey.length; i < len; i++) {
2756
- keyNodes.push(this.parse(deferredKey[i]));
2757
- valueNodes.push(this.parse(deferredValue[i]));
2758
- }
2759
- return {
2760
- t: 8 /* Map */,
2761
- i: id,
2762
- s: void 0,
2763
- l: void 0,
2764
- c: void 0,
2765
- m: void 0,
2766
- p: void 0,
2767
- e: { k: keyNodes, v: valueNodes, s: current.size },
2768
- a: void 0,
2769
- f: void 0,
2770
- b: void 0,
2771
- o: void 0
2772
- };
3187
+ keyNodes.push(this.parse(key));
3188
+ valueNodes.push(this.parse(value));
3189
+ }
3190
+ return this.createMapNode(
3191
+ id,
3192
+ keyNodes,
3193
+ valueNodes,
3194
+ current.size
3195
+ );
2773
3196
  }
2774
3197
  parseSet(id, current) {
2775
- const nodes = [];
2776
- const deferred = [];
3198
+ const items = [];
2777
3199
  for (const item of current.keys()) {
2778
- if (this.isIterable(item)) {
2779
- deferred.push(item);
2780
- } else {
2781
- nodes.push(this.parse(item));
2782
- }
3200
+ items.push(this.parse(item));
2783
3201
  }
2784
- for (let i = 0, len = deferred.length; i < len; i++) {
2785
- nodes.push(this.parse(deferred[i]));
2786
- }
2787
- return {
2788
- t: 7 /* Set */,
2789
- i: id,
2790
- s: void 0,
2791
- l: current.size,
2792
- c: void 0,
2793
- m: void 0,
2794
- p: void 0,
2795
- e: void 0,
2796
- a: nodes,
2797
- f: void 0,
2798
- b: void 0,
2799
- o: void 0
2800
- };
3202
+ return createSetNode(id, current.size, items);
2801
3203
  }
2802
3204
  parsePlainProperties(entries) {
2803
3205
  const size = entries.length;
2804
3206
  const keyNodes = [];
2805
3207
  const valueNodes = [];
2806
- const deferredKeys = [];
2807
- const deferredValues = [];
2808
- for (let i = 0, key, item; i < size; i++) {
2809
- key = serializeString(entries[i][0]);
2810
- item = entries[i][1];
2811
- if (this.isIterable(item)) {
2812
- deferredKeys.push(key);
2813
- deferredValues.push(item);
2814
- } else {
2815
- keyNodes.push(key);
2816
- valueNodes.push(this.parse(item));
2817
- }
2818
- }
2819
- for (let i = 0, len = deferredKeys.length; i < len; i++) {
2820
- keyNodes.push(deferredKeys[i]);
2821
- valueNodes.push(this.parse(deferredValues[i]));
3208
+ for (let i = 0; i < size; i++) {
3209
+ keyNodes.push(serializeString(entries[i][0]));
3210
+ valueNodes.push(this.parse(entries[i][1]));
2822
3211
  }
2823
3212
  return {
2824
3213
  k: keyNodes,
@@ -2867,54 +3256,10 @@ var BaseSyncParserContext = class extends BaseParserContext {
2867
3256
  };
2868
3257
  }
2869
3258
  parseEvent(id, current) {
2870
- return {
2871
- t: 37 /* Event */,
2872
- i: id,
2873
- s: serializeString(current.type),
2874
- l: void 0,
2875
- c: void 0,
2876
- m: void 0,
2877
- p: void 0,
2878
- e: void 0,
2879
- a: void 0,
2880
- f: this.parse(createEventOptions(current)),
2881
- b: void 0,
2882
- o: void 0
2883
- };
3259
+ return createEventNode(id, current.type, this.parse(createEventOptions(current)));
2884
3260
  }
2885
3261
  parseCustomEvent(id, current) {
2886
- return {
2887
- t: 38 /* CustomEvent */,
2888
- i: id,
2889
- s: serializeString(current.type),
2890
- l: void 0,
2891
- c: void 0,
2892
- m: void 0,
2893
- p: void 0,
2894
- e: void 0,
2895
- a: void 0,
2896
- f: this.parse(createCustomEventOptions(current)),
2897
- b: void 0,
2898
- o: void 0
2899
- };
2900
- }
2901
- parseAggregateError(id, current) {
2902
- const options = getErrorOptions(current, this.features);
2903
- const optionsNode = options ? this.parseProperties(options) : void 0;
2904
- return {
2905
- t: 14 /* AggregateError */,
2906
- i: id,
2907
- s: void 0,
2908
- l: void 0,
2909
- c: void 0,
2910
- m: serializeString(current.message),
2911
- p: optionsNode,
2912
- e: void 0,
2913
- a: void 0,
2914
- f: void 0,
2915
- b: void 0,
2916
- o: void 0
2917
- };
3262
+ return createCustomEventNode(id, current.type, this.parse(createCustomEventOptions(current)));
2918
3263
  }
2919
3264
  parsePlugin(id, current) {
2920
3265
  const currentPlugins = this.plugins;
@@ -3172,7 +3517,21 @@ var CrossAsyncParserContext = class extends BaseAsyncParserContext {
3172
3517
  }
3173
3518
  };
3174
3519
 
3175
- // src/core/cross/serialize.ts
3520
+ // src/core/cross/deserializer.ts
3521
+ var CrossDeserializerContext = class extends BaseDeserializerContext {
3522
+ constructor() {
3523
+ super(...arguments);
3524
+ this.mode = "cross";
3525
+ }
3526
+ assignIndexedValue(index, value) {
3527
+ if (!this.refs.has(index)) {
3528
+ this.refs.set(index, value);
3529
+ }
3530
+ return value;
3531
+ }
3532
+ };
3533
+
3534
+ // src/core/cross/serializer.ts
3176
3535
  var CrossSerializerContext = class extends BaseSerializerContext {
3177
3536
  constructor(options) {
3178
3537
  super(options);
@@ -3201,13 +3560,31 @@ var CrossSerializerContext = class extends BaseSerializerContext {
3201
3560
  return this.assignIndexedValue(node.i, GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_STREAM_CONSTRUCTOR + "()");
3202
3561
  }
3203
3562
  serializeReadableStreamEnqueue(node) {
3204
- return GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_STREAM_EMIT + "(" + this.getRefParam(node.i) + ",0," + this.serialize(node.f) + ")";
3563
+ return GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_STREAM_ENQUEUE + "(" + this.getRefParam(node.i) + "," + this.serialize(node.f) + ")";
3205
3564
  }
3206
3565
  serializeReadableStreamError(node) {
3207
- return GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_STREAM_EMIT + "(" + this.getRefParam(node.i) + ",1," + this.serialize(node.f) + ")";
3566
+ return GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_STREAM_ERROR + "(" + this.getRefParam(node.i) + "," + this.serialize(node.f) + ")";
3208
3567
  }
3209
3568
  serializeReadableStreamClose(node) {
3210
- return GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_STREAM_EMIT + "(" + this.getRefParam(node.i) + ",2)";
3569
+ return GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_STREAM_CLOSE + "(" + this.getRefParam(node.i) + ")";
3570
+ }
3571
+ serializeAsyncIteratorFactory(node) {
3572
+ return this.assignIndexedValue(
3573
+ node.i,
3574
+ this.createFunction(
3575
+ ["s"],
3576
+ this.createFunction(
3577
+ ["b", "t"],
3578
+ "(b=s.tee(),s=b[0],b=b[1].getReader(),t={[" + this.serialize(node.f) + "]:" + this.createFunction([], "t") + ",next:" + this.createFunction(
3579
+ [],
3580
+ "b.read().then(" + this.createEffectfulFunction(
3581
+ ["d"],
3582
+ "if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}"
3583
+ ) + ")"
3584
+ ) + "})"
3585
+ )
3586
+ )
3587
+ );
3211
3588
  }
3212
3589
  serializeTop(tree) {
3213
3590
  const result = this.serialize(tree);
@@ -3224,14 +3601,11 @@ var CrossSerializerContext = class extends BaseSerializerContext {
3224
3601
  }
3225
3602
  const args = this.scopeId == null ? "()" : "(" + GLOBAL_CONTEXT_REFERENCES + '["' + serializeString(this.scopeId) + '"])';
3226
3603
  const body = mainBody + (patches ? ref : "");
3227
- if (this.features & 4 /* ArrowFunction */) {
3228
- return "(" + params + "=>(" + body + "))" + args;
3229
- }
3230
- return "(function(" + params + "){return " + body + "})" + args;
3604
+ return "(" + this.createFunction([params], body) + ")" + args;
3231
3605
  }
3232
3606
  };
3233
3607
 
3234
- // src/core/base/stream.ts
3608
+ // src/core/context/parser/stream.ts
3235
3609
  var BaseStreamParserContext = class extends BaseSyncParserContext {
3236
3610
  constructor(options) {
3237
3611
  super(options);
@@ -3272,6 +3646,63 @@ var BaseStreamParserContext = class extends BaseSyncParserContext {
3272
3646
  this.onDone();
3273
3647
  }
3274
3648
  }
3649
+ parseProperties(properties) {
3650
+ const entries = Object.entries(properties);
3651
+ const keyNodes = [];
3652
+ const valueNodes = [];
3653
+ for (let i = 0, len = entries.length; i < len; i++) {
3654
+ keyNodes.push(serializeString(entries[i][0]));
3655
+ valueNodes.push(this.parse(entries[i][1]));
3656
+ }
3657
+ if (this.features & 1024 /* Symbol */) {
3658
+ let symbol = Symbol.iterator;
3659
+ if (symbol in properties) {
3660
+ keyNodes.push(
3661
+ this.parseWKSymbol(symbol)
3662
+ );
3663
+ valueNodes.push(
3664
+ createIteratorFactoryInstanceNode(
3665
+ this.parseIteratorFactory(),
3666
+ this.parse(
3667
+ iteratorToSequence(properties)
3668
+ )
3669
+ )
3670
+ );
3671
+ }
3672
+ symbol = Symbol.asyncIterator;
3673
+ if (symbol in properties) {
3674
+ keyNodes.push(
3675
+ this.parseWKSymbol(symbol)
3676
+ );
3677
+ valueNodes.push(
3678
+ createAsyncIteratorFactoryInstanceNode(
3679
+ this.parseAsyncIteratorFactory(),
3680
+ this.parse(
3681
+ asyncIteratorToReadableStream(
3682
+ properties,
3683
+ this
3684
+ )
3685
+ )
3686
+ )
3687
+ );
3688
+ }
3689
+ symbol = Symbol.toStringTag;
3690
+ if (symbol in properties) {
3691
+ keyNodes.push(this.parseWKSymbol(symbol));
3692
+ valueNodes.push(createStringNode(properties[symbol]));
3693
+ }
3694
+ symbol = Symbol.isConcatSpreadable;
3695
+ if (symbol in properties) {
3696
+ keyNodes.push(this.parseWKSymbol(symbol));
3697
+ valueNodes.push(properties[symbol] ? TRUE_NODE : FALSE_NODE);
3698
+ }
3699
+ }
3700
+ return {
3701
+ k: keyNodes,
3702
+ v: valueNodes,
3703
+ s: keyNodes.length
3704
+ };
3705
+ }
3275
3706
  pushReadableStreamReader(id, reader) {
3276
3707
  reader.read().then(
3277
3708
  (data) => {
@@ -3332,8 +3763,8 @@ var BaseStreamParserContext = class extends BaseSyncParserContext {
3332
3763
  b: void 0,
3333
3764
  o: void 0
3334
3765
  }, false);
3335
- this.popPendingState();
3336
3766
  }
3767
+ this.popPendingState();
3337
3768
  }
3338
3769
  }
3339
3770
  );
@@ -3413,8 +3844,8 @@ var BaseStreamParserContext = class extends BaseSyncParserContext {
3413
3844
  b: void 0,
3414
3845
  o: void 0
3415
3846
  }, false);
3416
- this.popPendingState();
3417
3847
  }
3848
+ this.popPendingState();
3418
3849
  },
3419
3850
  (data) => {
3420
3851
  if (this.alive) {
@@ -3434,9 +3865,9 @@ var BaseStreamParserContext = class extends BaseSyncParserContext {
3434
3865
  b: void 0,
3435
3866
  o: void 0
3436
3867
  }, false);
3437
- this.popPendingState();
3438
3868
  }
3439
3869
  }
3870
+ this.popPendingState();
3440
3871
  }
3441
3872
  );
3442
3873
  this.pushPendingState();
@@ -3592,7 +4023,7 @@ var BaseStreamParserContext = class extends BaseSyncParserContext {
3592
4023
  if (current instanceof Error) {
3593
4024
  return this.parseError(id, current);
3594
4025
  }
3595
- if (currentFeatures & 1024 /* Symbol */ && Symbol.iterator in current) {
4026
+ if (currentFeatures & 1024 /* Symbol */ && (Symbol.iterator in current || Symbol.asyncIterator in current)) {
3596
4027
  return this.parsePlainObject(id, current, !!currentClass);
3597
4028
  }
3598
4029
  throw new UnsupportedTypeError(current);
@@ -3678,8 +4109,25 @@ async function crossSerializeAsync(source, options = {}) {
3678
4109
  });
3679
4110
  return serial.serializeTop(tree);
3680
4111
  }
4112
+ function toCrossJSON(source, options = {}) {
4113
+ const ctx = new CrossSyncParserContext({
4114
+ plugins: options.plugins,
4115
+ disabledFeatures: options.disabledFeatures,
4116
+ refs: options.refs
4117
+ });
4118
+ return ctx.parse(source);
4119
+ }
4120
+ async function toCrossJSONAsync(source, options = {}) {
4121
+ const ctx = new CrossAsyncParserContext({
4122
+ plugins: options.plugins,
4123
+ disabledFeatures: options.disabledFeatures,
4124
+ refs: options.refs
4125
+ });
4126
+ return ctx.parse(source);
4127
+ }
3681
4128
  function crossSerializeStream(source, options) {
3682
4129
  const ctx = new CrossStreamParserContext({
4130
+ plugins: options.plugins,
3683
4131
  refs: options.refs,
3684
4132
  disabledFeatures: options.disabledFeatures,
3685
4133
  onParse(node, initial) {
@@ -3711,6 +4159,27 @@ function crossSerializeStream(source, options) {
3711
4159
  ctx.destroy();
3712
4160
  };
3713
4161
  }
4162
+ function toCrossJSONStream(source, options) {
4163
+ const ctx = new CrossStreamParserContext({
4164
+ plugins: options.plugins,
4165
+ refs: options.refs,
4166
+ disabledFeatures: options.disabledFeatures,
4167
+ onParse: options.onParse,
4168
+ onError: options.onError,
4169
+ onDone: options.onDone
4170
+ });
4171
+ ctx.start(source);
4172
+ return () => {
4173
+ ctx.destroy();
4174
+ };
4175
+ }
4176
+ function fromCrossJSON(source, options) {
4177
+ const ctx = new CrossDeserializerContext({
4178
+ plugins: options.plugins,
4179
+ refs: options.refs
4180
+ });
4181
+ return ctx.deserialize(source);
4182
+ }
3714
4183
 
3715
4184
  // src/core/Serializer.ts
3716
4185
  var Serializer = class {
@@ -3807,10 +4276,14 @@ export {
3807
4276
  crossSerializeStream,
3808
4277
  src_default as default,
3809
4278
  deserialize,
4279
+ fromCrossJSON,
3810
4280
  fromJSON,
3811
4281
  getCrossReferenceHeader,
3812
4282
  serialize,
3813
4283
  serializeAsync,
4284
+ toCrossJSON,
4285
+ toCrossJSONAsync,
4286
+ toCrossJSONStream,
3814
4287
  toJSON,
3815
4288
  toJSONAsync
3816
4289
  };