seroval 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/cjs/development/index.cjs +157 -117
  2. package/dist/cjs/development/index.cjs.map +2 -2
  3. package/dist/cjs/production/index.cjs +3 -3
  4. package/dist/esm/development/index.mjs +157 -117
  5. package/dist/esm/development/index.mjs.map +2 -2
  6. package/dist/esm/production/index.mjs +3 -3
  7. package/dist/types/core/base-primitives.d.ts +3 -3
  8. package/dist/types/core/base-primitives.d.ts.map +1 -1
  9. package/dist/types/core/constants.d.ts +2 -3
  10. package/dist/types/core/constants.d.ts.map +1 -1
  11. package/dist/types/core/context/deserializer.d.ts.map +1 -1
  12. package/dist/types/core/context/parser/stream.d.ts.map +1 -1
  13. package/dist/types/core/context/parser.d.ts +3 -3
  14. package/dist/types/core/context/parser.d.ts.map +1 -1
  15. package/dist/types/core/context/serializer.d.ts +11 -10
  16. package/dist/types/core/context/serializer.d.ts.map +1 -1
  17. package/dist/types/core/cross/index.d.ts.map +1 -1
  18. package/dist/types/core/cross/serializer.d.ts +1 -8
  19. package/dist/types/core/cross/serializer.d.ts.map +1 -1
  20. package/dist/types/core/keys.d.ts +0 -12
  21. package/dist/types/core/keys.d.ts.map +1 -1
  22. package/dist/types/core/plugin.d.ts.map +1 -1
  23. package/dist/types/core/special-reference.d.ts +13 -3
  24. package/dist/types/core/special-reference.d.ts.map +1 -1
  25. package/dist/types/core/types.d.ts +33 -20
  26. package/dist/types/core/types.d.ts.map +1 -1
  27. package/dist/types/core/web-api.d.ts +2 -2
  28. package/dist/types/core/web-api.d.ts.map +1 -1
  29. package/dist/types/index.d.ts +0 -1
  30. package/dist/types/index.d.ts.map +1 -1
  31. package/package.json +2 -2
  32. package/src/core/base-primitives.ts +3 -2
  33. package/src/core/constants.ts +1 -2
  34. package/src/core/context/deserializer.ts +6 -7
  35. package/src/core/context/parser/async.ts +2 -2
  36. package/src/core/context/parser/stream.ts +29 -13
  37. package/src/core/context/parser.ts +12 -36
  38. package/src/core/context/serializer.ts +105 -44
  39. package/src/core/cross/index.ts +11 -2
  40. package/src/core/cross/serializer.ts +0 -57
  41. package/src/core/keys.ts +2 -38
  42. package/src/core/plugin.ts +0 -2
  43. package/src/core/special-reference.ts +23 -3
  44. package/src/core/types.ts +33 -24
  45. package/src/core/web-api.ts +2 -1
  46. package/src/index.ts +0 -2
  47. package/src/core/is-serializable.new.ts +0 -208
@@ -21,7 +21,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
23
  Feature: () => Feature,
24
- GLOBAL_CONTEXT_API_SCRIPT: () => GLOBAL_CONTEXT_API_SCRIPT,
25
24
  Serializer: () => Serializer,
26
25
  compileJSON: () => compileJSON,
27
26
  createPlugin: () => createPlugin,
@@ -33,7 +32,6 @@ __export(src_exports, {
33
32
  deserialize: () => deserialize,
34
33
  fromCrossJSON: () => fromCrossJSON,
35
34
  fromJSON: () => fromJSON,
36
- getCrossReferenceHeader: () => getCrossReferenceHeader,
37
35
  serialize: () => serialize,
38
36
  serializeAsync: () => serializeAsync,
39
37
  toCrossJSON: () => toCrossJSON,
@@ -222,26 +220,13 @@ function deserializeString(str) {
222
220
 
223
221
  // src/core/keys.ts
224
222
  var REFERENCES_KEY = "__SEROVAL_REFS__";
225
- var GLOBAL_CONTEXT_API = "_$";
226
223
  var GLOBAL_CONTEXT_REFERENCES = "$R";
227
- var LOCAL_CONTEXT_PROMISE_RESOLVE = "s";
228
- var LOCAL_CONTEXT_PROMISE_REJECT = "f";
229
- var GLOBAL_CONTEXT_PROMISE_CONSTRUCTOR = "P";
230
- var GLOBAL_CONTEXT_PROMISE_RESOLVE = "Ps";
231
- var GLOBAL_CONTEXT_PROMISE_REJECT = "Pf";
232
- var LOCAL_CONTEXT_STREAM_CONTROLLER = "c";
233
- var GLOBAL_CONTEXT_STREAM_CONSTRUCTOR = "S";
234
- var GLOBAL_CONTEXT_STREAM_ENQUEUE = "Se";
235
- var GLOBAL_CONTEXT_STREAM_ERROR = "St";
236
- var GLOBAL_CONTEXT_STREAM_CLOSE = "Sc";
237
- var GLOBAL_CONTEXT_API_REF = `self.${GLOBAL_CONTEXT_API}`;
238
- 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}}`;
239
224
  var GLOBAL_CONTEXT_R = `self.${GLOBAL_CONTEXT_REFERENCES}`;
240
225
  function getCrossReferenceHeader(id) {
241
226
  if (id == null) {
242
- return `${GLOBAL_CONTEXT_R}=${GLOBAL_CONTEXT_R}||[];`;
227
+ return `${GLOBAL_CONTEXT_R}=${GLOBAL_CONTEXT_R}||[]`;
243
228
  }
244
- return `(${GLOBAL_CONTEXT_R}=${GLOBAL_CONTEXT_R}||{})["${serializeString(id)}"]=[];`;
229
+ return `(${GLOBAL_CONTEXT_R}=${GLOBAL_CONTEXT_R}||{})["${serializeString(id)}"]=[]`;
245
230
  }
246
231
 
247
232
  // src/core/reference.ts
@@ -960,11 +945,20 @@ function sequenceToReadableStream(sequence) {
960
945
  }
961
946
 
962
947
  // src/core/special-reference.ts
963
- var MAP_SENTINEL = {};
948
+ var UNIVERSAL_SENTINEL = {};
964
949
  var ITERATOR = {};
965
950
  var ASYNC_ITERATOR = {};
966
- var READABLE_STREAM = {};
967
- var UNIVERSAL_SENTINEL = {};
951
+ var SPECIAL_REFS = {
952
+ [0 /* MapSentinel */]: {},
953
+ [1 /* ReadableStream */]: {},
954
+ [2 /* PromiseConstructor */]: {},
955
+ [3 /* PromiseResolve */]: {},
956
+ [4 /* PromiseReject */]: {},
957
+ [5 /* ReadableStreamConstructor */]: {},
958
+ [6 /* ReadableStreamEnqueue */]: {},
959
+ [7 /* ReadableStreamError */]: {},
960
+ [8 /* ReadableStreamClose */]: {}
961
+ };
968
962
 
969
963
  // src/core/context/parser.ts
970
964
  var BaseParserContext = class {
@@ -1024,18 +1018,19 @@ var BaseParserContext = class {
1024
1018
  }
1025
1019
  return createReferenceNode(id, current);
1026
1020
  }
1027
- parseMapSentinel() {
1028
- const registeredID = this.refs.get(MAP_SENTINEL);
1021
+ parseSpecialReference(ref) {
1022
+ const specialRef = SPECIAL_REFS[ref];
1023
+ const registeredID = this.refs.get(specialRef);
1029
1024
  if (registeredID != null) {
1030
1025
  this.markRef(registeredID);
1031
1026
  return createIndexedValueNode(registeredID);
1032
1027
  }
1033
1028
  const id = this.refs.size;
1034
- this.refs.set(MAP_SENTINEL, id);
1029
+ this.refs.set(specialRef, id);
1035
1030
  return {
1036
- t: 41 /* MapSentinel */,
1031
+ t: 41 /* SpecialReference */,
1037
1032
  i: id,
1038
- s: void 0,
1033
+ s: ref,
1039
1034
  l: void 0,
1040
1035
  c: void 0,
1041
1036
  m: void 0,
@@ -1120,30 +1115,7 @@ var BaseParserContext = class {
1120
1115
  p: void 0,
1121
1116
  e: { k, v, s },
1122
1117
  a: void 0,
1123
- f: this.parseMapSentinel(),
1124
- b: void 0,
1125
- o: void 0
1126
- };
1127
- }
1128
- parseReadableStreamFactory() {
1129
- const registeredID = this.refs.get(READABLE_STREAM);
1130
- if (registeredID != null) {
1131
- this.markRef(registeredID);
1132
- return createIndexedValueNode(registeredID);
1133
- }
1134
- const id = this.refs.size;
1135
- this.refs.set(READABLE_STREAM, id);
1136
- return {
1137
- t: 47 /* ReadableStreamFactory */,
1138
- i: id,
1139
- s: void 0,
1140
- l: void 0,
1141
- c: void 0,
1142
- m: void 0,
1143
- p: void 0,
1144
- e: void 0,
1145
- a: void 0,
1146
- f: void 0,
1118
+ f: this.parseSpecialReference(0 /* MapSentinel */),
1147
1119
  b: void 0,
1148
1120
  o: void 0
1149
1121
  };
@@ -1560,7 +1532,7 @@ var BaseAsyncParserContext = class extends BaseParserContext {
1560
1532
  async parseReadableStream(id, current) {
1561
1533
  return createReadableStreamNode(
1562
1534
  id,
1563
- this.parseReadableStreamFactory(),
1535
+ this.parseSpecialReference(1 /* ReadableStream */),
1564
1536
  await this.parse(
1565
1537
  await readableStreamToSequence(current)
1566
1538
  )
@@ -2074,7 +2046,7 @@ var BaseDeserializerContext = class {
2074
2046
  const deferred = this.refs.get(node.i);
2075
2047
  assert(deferred, new Error("Missing Promise instance."));
2076
2048
  deferred.resolve(
2077
- this.deserialize(node.f)
2049
+ this.deserialize(node.a[1])
2078
2050
  );
2079
2051
  return void 0;
2080
2052
  }
@@ -2082,7 +2054,7 @@ var BaseDeserializerContext = class {
2082
2054
  const deferred = this.refs.get(node.i);
2083
2055
  assert(deferred, new Error("Missing Promise instance."));
2084
2056
  deferred.reject(
2085
- this.deserialize(node.f)
2057
+ this.deserialize(node.a[1])
2086
2058
  );
2087
2059
  return void 0;
2088
2060
  }
@@ -2096,7 +2068,7 @@ var BaseDeserializerContext = class {
2096
2068
  const deferred = this.refs.get(node.i);
2097
2069
  assert(deferred, new Error("Missing ReadableStream instance."));
2098
2070
  deferred.enqueue(
2099
- this.deserialize(node.f)
2071
+ this.deserialize(node.a[1])
2100
2072
  );
2101
2073
  return void 0;
2102
2074
  }
@@ -2104,7 +2076,7 @@ var BaseDeserializerContext = class {
2104
2076
  const deferred = this.refs.get(node.i);
2105
2077
  assert(deferred, new Error("Missing Promise instance."));
2106
2078
  deferred.error(
2107
- this.deserialize(node.f)
2079
+ this.deserialize(node.a[1])
2108
2080
  );
2109
2081
  return void 0;
2110
2082
  }
@@ -2120,7 +2092,7 @@ var BaseDeserializerContext = class {
2120
2092
  }
2121
2093
  deserializeAsyncIteratorFactoryInstance(node) {
2122
2094
  const source = this.deserialize(node.a[1]);
2123
- if (source.constructor === ReadableStream) {
2095
+ if (node.s) {
2124
2096
  return readableStreamToAsyncIterator(
2125
2097
  source
2126
2098
  );
@@ -2223,10 +2195,9 @@ var BaseDeserializerContext = class {
2223
2195
  return this.deserializeAsyncIteratorFactoryInstance(node);
2224
2196
  case 46 /* ReadableStream */:
2225
2197
  return this.deserializeReadableStream(node);
2226
- case 41 /* MapSentinel */:
2198
+ case 41 /* SpecialReference */:
2227
2199
  case 42 /* IteratorFactory */:
2228
2200
  case 44 /* AsyncIteratorFactory */:
2229
- case 47 /* ReadableStreamFactory */:
2230
2201
  default:
2231
2202
  throw new Error("invariant");
2232
2203
  }
@@ -2699,7 +2670,7 @@ var BaseSerializerContext = class {
2699
2670
  serialized += "([" + result + "])";
2700
2671
  }
2701
2672
  }
2702
- if (sentinel.t === 41 /* MapSentinel */) {
2673
+ if (sentinel.t === 41 /* SpecialReference */) {
2703
2674
  this.markRef(sentinel.i);
2704
2675
  serialized = "(" + this.serialize(sentinel) + "," + serialized + ")";
2705
2676
  }
@@ -2859,10 +2830,95 @@ var BaseSerializerContext = class {
2859
2830
  }
2860
2831
  throw new Error('Missing plugin for tag "' + node.c + '".');
2861
2832
  }
2862
- serializeMapSentinel(node) {
2833
+ getConstructor(node) {
2834
+ const constructor = this.serialize(node);
2835
+ return constructor === this.getRefParam(node.i) ? constructor : "(" + constructor + ")";
2836
+ }
2837
+ serializePromiseConstructor(node) {
2838
+ return this.assignIndexedValue(
2839
+ node.i,
2840
+ this.getConstructor(node.f) + "()"
2841
+ );
2842
+ }
2843
+ serializePromiseResolve(node) {
2844
+ return this.getConstructor(node.a[0]) + "(" + this.getRefParam(node.i) + "," + this.serialize(node.a[1]) + ")";
2845
+ }
2846
+ serializePromiseReject(node) {
2847
+ return this.getConstructor(node.a[0]) + "(" + this.getRefParam(node.i) + "," + this.serialize(node.a[1]) + ")";
2848
+ }
2849
+ serializeReadableStreamConstructor(node) {
2850
+ return this.assignIndexedValue(
2851
+ node.i,
2852
+ this.getConstructor(node.f) + "()"
2853
+ );
2854
+ }
2855
+ serializeReadableStreamEnqueue(node) {
2856
+ return this.getConstructor(node.a[0]) + "(" + this.getRefParam(node.i) + "," + this.serialize(node.a[1]) + ")";
2857
+ }
2858
+ serializeReadableStreamError(node) {
2859
+ return this.getConstructor(node.a[0]) + "(" + this.getRefParam(node.i) + "," + this.serialize(node.a[1]) + ")";
2860
+ }
2861
+ serializeReadableStreamClose(node) {
2862
+ return this.getConstructor(node.f) + "(" + this.getRefParam(node.i) + ")";
2863
+ }
2864
+ serializeSpecialReferenceValue(ref) {
2865
+ switch (ref) {
2866
+ case 0 /* MapSentinel */:
2867
+ return "[]";
2868
+ case 1 /* ReadableStream */:
2869
+ return this.createFunction(
2870
+ ["s"],
2871
+ "new ReadableStream({start:" + this.createFunction(
2872
+ ["c"],
2873
+ "Promise.resolve().then(" + this.createEffectfulFunction(
2874
+ ["i", "v"],
2875
+ "for(i=0;i<s.d;i++)c.enqueue(s.v[i]);(s.t===-1)?c.close():c.error(s.v[i])"
2876
+ ) + ")"
2877
+ ) + "})"
2878
+ );
2879
+ case 2 /* PromiseConstructor */:
2880
+ return this.createFunction(
2881
+ ["s", "f", "p"],
2882
+ "((p=new Promise(" + this.createEffectfulFunction(["a", "b"], "s=a,f=b") + ")).s=s,p.f=f,p)"
2883
+ );
2884
+ case 3 /* PromiseResolve */:
2885
+ return this.createEffectfulFunction(
2886
+ ["p", "d"],
2887
+ 'p.s(d),p.status="success",p.value=d;delete p.s;delete p.f'
2888
+ );
2889
+ case 4 /* PromiseReject */:
2890
+ return this.createEffectfulFunction(
2891
+ ["p", "d"],
2892
+ 'p.f(d),p.status="failure",p.value=d;delete p.s;delete p.f'
2893
+ );
2894
+ case 5 /* ReadableStreamConstructor */:
2895
+ return this.createFunction(
2896
+ ["s", "c"],
2897
+ "((s=new ReadableStream({start:" + this.createEffectfulFunction(["x"], "c=x") + "})).c=c,s)"
2898
+ );
2899
+ case 6 /* ReadableStreamEnqueue */:
2900
+ return this.createEffectfulFunction(
2901
+ ["s", "d"],
2902
+ "s.c.enqueue(d)"
2903
+ );
2904
+ case 7 /* ReadableStreamError */:
2905
+ return this.createEffectfulFunction(
2906
+ ["s", "d"],
2907
+ "s.c.error(d);delete s.c"
2908
+ );
2909
+ case 8 /* ReadableStreamClose */:
2910
+ return this.createEffectfulFunction(
2911
+ ["s"],
2912
+ "s.c.close();delete s.c"
2913
+ );
2914
+ default:
2915
+ return "";
2916
+ }
2917
+ }
2918
+ serializeSpecialReference(node) {
2863
2919
  return this.assignIndexedValue(
2864
2920
  node.i,
2865
- "[]"
2921
+ this.serializeSpecialReferenceValue(node.s)
2866
2922
  );
2867
2923
  }
2868
2924
  serializeIteratorFactory(node) {
@@ -2878,7 +2934,7 @@ var BaseSerializerContext = class {
2878
2934
  );
2879
2935
  }
2880
2936
  serializeIteratorFactoryInstance(node) {
2881
- return "(" + this.serialize(node.a[0]) + ")(" + this.serialize(node.a[1]) + ")";
2937
+ return this.getConstructor(node.a[0]) + "(" + this.serialize(node.a[1]) + ")";
2882
2938
  }
2883
2939
  getStreamingAsyncIteratorFactory(node) {
2884
2940
  return this.createFunction(
@@ -2917,32 +2973,17 @@ var BaseSerializerContext = class {
2917
2973
  );
2918
2974
  }
2919
2975
  serializeAsyncIteratorFactoryInstance(node) {
2920
- return "(" + this.serialize(node.a[0]) + ")(" + this.serialize(node.a[1]) + ")";
2976
+ return this.getConstructor(node.a[0]) + "(" + this.serialize(node.a[1]) + ")";
2921
2977
  }
2922
2978
  serializeReadableStream(node) {
2923
2979
  this.stack.push(node.i);
2924
- const result = "(" + this.serialize(node.a[0]) + ")(" + this.serialize(node.a[1]) + ")";
2980
+ const result = this.getConstructor(node.a[0]) + "(" + this.serialize(node.a[1]) + ")";
2925
2981
  this.stack.pop();
2926
2982
  return this.assignIndexedValue(
2927
2983
  node.i,
2928
2984
  result
2929
2985
  );
2930
2986
  }
2931
- serializeReadableStreamFactory(node) {
2932
- return this.assignIndexedValue(
2933
- node.i,
2934
- this.createFunction(
2935
- ["s"],
2936
- "new ReadableStream({start:" + this.createFunction(
2937
- ["c"],
2938
- "Promise.resolve().then(" + this.createEffectfulFunction(
2939
- ["i", "v"],
2940
- "for(i=0;i<s.d;i++)c.enqueue(s.v[i]);(s.t===-1)?c.close():c.error(s.v[i])"
2941
- ) + ")"
2942
- ) + "})"
2943
- )
2944
- );
2945
- }
2946
2987
  serialize(node) {
2947
2988
  switch (node.t) {
2948
2989
  case 2 /* Constant */:
@@ -3026,8 +3067,8 @@ var BaseSerializerContext = class {
3026
3067
  return this.serializeDOMException(node);
3027
3068
  case 40 /* Plugin */:
3028
3069
  return this.serializePlugin(node);
3029
- case 41 /* MapSentinel */:
3030
- return this.serializeMapSentinel(node);
3070
+ case 41 /* SpecialReference */:
3071
+ return this.serializeSpecialReference(node);
3031
3072
  case 42 /* IteratorFactory */:
3032
3073
  return this.serializeIteratorFactory(node);
3033
3074
  case 43 /* IteratorFactoryInstance */:
@@ -3038,8 +3079,6 @@ var BaseSerializerContext = class {
3038
3079
  return this.serializeAsyncIteratorFactoryInstance(node);
3039
3080
  case 46 /* ReadableStream */:
3040
3081
  return this.serializeReadableStream(node);
3041
- case 47 /* ReadableStreamFactory */:
3042
- return this.serializeReadableStreamFactory(node);
3043
3082
  default:
3044
3083
  throw new Error("invariant");
3045
3084
  }
@@ -3611,27 +3650,6 @@ var CrossSerializerContext = class extends BaseSerializerContext {
3611
3650
  assignIndexedValue(index, value) {
3612
3651
  return this.getRefParam(index) + "=" + value;
3613
3652
  }
3614
- serializePromiseConstructor(node) {
3615
- return this.assignIndexedValue(node.i, GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_PROMISE_CONSTRUCTOR + "()");
3616
- }
3617
- serializePromiseResolve(node) {
3618
- return GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_PROMISE_RESOLVE + "(" + this.getRefParam(node.i) + "," + this.serialize(node.f) + ")";
3619
- }
3620
- serializePromiseReject(node) {
3621
- return GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_PROMISE_REJECT + "(" + this.getRefParam(node.i) + "," + this.serialize(node.f) + ")";
3622
- }
3623
- serializeReadableStreamConstructor(node) {
3624
- return this.assignIndexedValue(node.i, GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_STREAM_CONSTRUCTOR + "()");
3625
- }
3626
- serializeReadableStreamEnqueue(node) {
3627
- return GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_STREAM_ENQUEUE + "(" + this.getRefParam(node.i) + "," + this.serialize(node.f) + ")";
3628
- }
3629
- serializeReadableStreamError(node) {
3630
- return GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_STREAM_ERROR + "(" + this.getRefParam(node.i) + "," + this.serialize(node.f) + ")";
3631
- }
3632
- serializeReadableStreamClose(node) {
3633
- return GLOBAL_CONTEXT_API + "." + GLOBAL_CONTEXT_STREAM_CLOSE + "(" + this.getRefParam(node.i) + ")";
3634
- }
3635
3653
  serializeTop(tree) {
3636
3654
  const result = this.serialize(tree);
3637
3655
  const id = tree.i;
@@ -3664,7 +3682,11 @@ var BaseStreamParserContext = class extends BaseSyncParserContext {
3664
3682
  this.onDoneCallback = options.onDone;
3665
3683
  }
3666
3684
  onParse(node, initial) {
3667
- this.onParseCallback(node, initial);
3685
+ try {
3686
+ this.onParseCallback(node, initial);
3687
+ } catch (error) {
3688
+ this.onError(error);
3689
+ }
3668
3690
  }
3669
3691
  onError(error) {
3670
3692
  if (this.onErrorCallback) {
@@ -3764,7 +3786,7 @@ var BaseStreamParserContext = class extends BaseSyncParserContext {
3764
3786
  p: void 0,
3765
3787
  e: void 0,
3766
3788
  a: void 0,
3767
- f: void 0,
3789
+ f: this.parseSpecialReference(8 /* ReadableStreamClose */),
3768
3790
  b: void 0,
3769
3791
  o: void 0
3770
3792
  }, false);
@@ -3781,8 +3803,11 @@ var BaseStreamParserContext = class extends BaseSyncParserContext {
3781
3803
  m: void 0,
3782
3804
  p: void 0,
3783
3805
  e: void 0,
3784
- a: void 0,
3785
- f: parsed,
3806
+ a: [
3807
+ this.parseSpecialReference(6 /* ReadableStreamEnqueue */),
3808
+ parsed
3809
+ ],
3810
+ f: void 0,
3786
3811
  b: void 0,
3787
3812
  o: void 0
3788
3813
  }, false);
@@ -3804,8 +3829,11 @@ var BaseStreamParserContext = class extends BaseSyncParserContext {
3804
3829
  m: void 0,
3805
3830
  p: void 0,
3806
3831
  e: void 0,
3807
- a: void 0,
3808
- f: parsed,
3832
+ a: [
3833
+ this.parseSpecialReference(7 /* ReadableStreamError */),
3834
+ parsed
3835
+ ],
3836
+ f: void 0,
3809
3837
  b: void 0,
3810
3838
  o: void 0
3811
3839
  }, false);
@@ -3829,7 +3857,7 @@ var BaseStreamParserContext = class extends BaseSyncParserContext {
3829
3857
  p: void 0,
3830
3858
  e: void 0,
3831
3859
  a: void 0,
3832
- f: void 0,
3860
+ f: this.parseSpecialReference(5 /* ReadableStreamConstructor */),
3833
3861
  b: void 0,
3834
3862
  o: void 0
3835
3863
  };
@@ -3885,8 +3913,11 @@ var BaseStreamParserContext = class extends BaseSyncParserContext {
3885
3913
  m: void 0,
3886
3914
  p: void 0,
3887
3915
  e: void 0,
3888
- a: void 0,
3889
- f: parsed,
3916
+ a: [
3917
+ this.parseSpecialReference(3 /* PromiseResolve */),
3918
+ parsed
3919
+ ],
3920
+ f: void 0,
3890
3921
  b: void 0,
3891
3922
  o: void 0
3892
3923
  }, false);
@@ -3906,8 +3937,11 @@ var BaseStreamParserContext = class extends BaseSyncParserContext {
3906
3937
  m: void 0,
3907
3938
  p: void 0,
3908
3939
  e: void 0,
3909
- a: void 0,
3910
- f: parsed,
3940
+ a: [
3941
+ this.parseSpecialReference(4 /* PromiseReject */),
3942
+ parsed
3943
+ ],
3944
+ f: void 0,
3911
3945
  b: void 0,
3912
3946
  o: void 0
3913
3947
  }, false);
@@ -3927,7 +3961,7 @@ var BaseStreamParserContext = class extends BaseSyncParserContext {
3927
3961
  p: void 0,
3928
3962
  e: void 0,
3929
3963
  a: void 0,
3930
- f: void 0,
3964
+ f: this.parseSpecialReference(2 /* PromiseConstructor */),
3931
3965
  b: void 0,
3932
3966
  o: void 0
3933
3967
  };
@@ -4125,6 +4159,9 @@ var CrossSyncParserContext = class extends BaseSyncParserContext {
4125
4159
  };
4126
4160
 
4127
4161
  // src/core/cross/index.ts
4162
+ function insertCrossReferenceHeader(scopeId, value) {
4163
+ return "(" + getCrossReferenceHeader(scopeId) + "," + value + ")";
4164
+ }
4128
4165
  function crossSerialize(source, options = {}) {
4129
4166
  const ctx = new CrossSyncParserContext({
4130
4167
  plugins: options.plugins,
@@ -4138,7 +4175,7 @@ function crossSerialize(source, options = {}) {
4138
4175
  scopeId: options.scopeId,
4139
4176
  markedRefs: ctx.marked
4140
4177
  });
4141
- return serial.serializeTop(tree);
4178
+ return insertCrossReferenceHeader(options.scopeId, serial.serializeTop(tree));
4142
4179
  }
4143
4180
  async function crossSerializeAsync(source, options = {}) {
4144
4181
  const ctx = new CrossAsyncParserContext({
@@ -4153,7 +4190,7 @@ async function crossSerializeAsync(source, options = {}) {
4153
4190
  scopeId: options.scopeId,
4154
4191
  markedRefs: ctx.marked
4155
4192
  });
4156
- return serial.serializeTop(tree);
4193
+ return insertCrossReferenceHeader(options.scopeId, serial.serializeTop(tree));
4157
4194
  }
4158
4195
  function toCrossJSON(source, options = {}) {
4159
4196
  const ctx = new CrossSyncParserContext({
@@ -4192,6 +4229,9 @@ function crossSerializeStream(source, options) {
4192
4229
  }
4193
4230
  return;
4194
4231
  }
4232
+ if (initial) {
4233
+ serialized = insertCrossReferenceHeader(options.scopeId, serialized);
4234
+ }
4195
4235
  options.onSerialize(
4196
4236
  serialized,
4197
4237
  initial