seroval 1.4.2 → 1.5.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 (40) hide show
  1. package/dist/cjs/development/index.cjs +133 -34
  2. package/dist/cjs/development/index.cjs.map +4 -4
  3. package/dist/cjs/production/index.cjs +3 -3
  4. package/dist/esm/development/index.mjs +133 -34
  5. package/dist/esm/development/index.mjs.map +4 -4
  6. package/dist/esm/production/index.mjs +3 -3
  7. package/dist/types/core/base-primitives.d.ts +5 -4
  8. package/dist/types/core/base-primitives.d.ts.map +1 -1
  9. package/dist/types/core/constants.d.ts +2 -1
  10. package/dist/types/core/constants.d.ts.map +1 -1
  11. package/dist/types/core/constructors.d.ts +1 -5
  12. package/dist/types/core/constructors.d.ts.map +1 -1
  13. package/dist/types/core/context/async-parser.d.ts.map +1 -1
  14. package/dist/types/core/context/deserializer.d.ts.map +1 -1
  15. package/dist/types/core/context/serializer.d.ts.map +1 -1
  16. package/dist/types/core/context/sync-parser.d.ts.map +1 -1
  17. package/dist/types/core/cross/index.d.ts.map +1 -1
  18. package/dist/types/core/errors.d.ts +5 -5
  19. package/dist/types/core/errors.d.ts.map +1 -1
  20. package/dist/types/core/plugin.d.ts +11 -7
  21. package/dist/types/core/plugin.d.ts.map +1 -1
  22. package/dist/types/core/sequence.d.ts +11 -0
  23. package/dist/types/core/sequence.d.ts.map +1 -0
  24. package/dist/types/core/types.d.ts +11 -4
  25. package/dist/types/core/types.d.ts.map +1 -1
  26. package/package.json +1 -1
  27. package/src/core/base-primitives.ts +26 -3
  28. package/src/core/constants.ts +1 -0
  29. package/src/core/constructors.ts +1 -6
  30. package/src/core/context/async-parser.ts +31 -6
  31. package/src/core/context/deserializer.ts +20 -2
  32. package/src/core/context/serializer.ts +54 -0
  33. package/src/core/context/sync-parser.ts +29 -4
  34. package/src/core/cross/index.ts +2 -0
  35. package/src/core/errors.ts +6 -6
  36. package/src/core/plugin.ts +14 -9
  37. package/src/core/{utils/iterator-to-sequence.ts → sequence.ts} +20 -9
  38. package/src/core/types.ts +15 -4
  39. package/dist/types/core/utils/iterator-to-sequence.d.ts +0 -8
  40. package/dist/types/core/utils/iterator-to-sequence.d.ts.map +0 -1
@@ -826,13 +826,29 @@ function createStreamReturnNode(id, parsed) {
826
826
  NIL
827
827
  );
828
828
  }
829
+ function createSequenceNode(id, sequence, throwAt, doneAt) {
830
+ return createSerovalNode(
831
+ 35 /* Sequence */,
832
+ id,
833
+ throwAt,
834
+ NIL,
835
+ NIL,
836
+ NIL,
837
+ NIL,
838
+ sequence,
839
+ NIL,
840
+ NIL,
841
+ NIL,
842
+ doneAt
843
+ );
844
+ }
829
845
 
830
846
  // src/core/errors.ts
831
847
  var { toString: objectToString } = Object.prototype;
832
848
  function getErrorMessageDev(type, cause) {
833
849
  if (cause instanceof Error) {
834
850
  return `Seroval caught an error during the ${type} process.
835
-
851
+
836
852
  ${cause.name}
837
853
  ${cause.message}
838
854
 
@@ -1163,6 +1179,43 @@ var ARRAY_BUFFER_CONSTRUCTOR = (b64) => {
1163
1179
  };
1164
1180
  var SERIALIZED_ARRAY_BUFFER_CONSTRUCTOR = /* @__PURE__ */ ARRAY_BUFFER_CONSTRUCTOR.toString();
1165
1181
 
1182
+ // src/core/sequence.ts
1183
+ function isSequence(value) {
1184
+ return "__SEROVAL_SEQUENCE__" in value;
1185
+ }
1186
+ function createSequence(values, throwAt, doneAt) {
1187
+ return {
1188
+ __SEROVAL_SEQUENCE__: true,
1189
+ v: values,
1190
+ t: throwAt,
1191
+ d: doneAt
1192
+ };
1193
+ }
1194
+ function createSequenceFromIterable(source) {
1195
+ const values = [];
1196
+ let throwsAt = -1;
1197
+ let doneAt = -1;
1198
+ const iterator = source[SYM_ITERATOR]();
1199
+ while (true) {
1200
+ try {
1201
+ const value = iterator.next();
1202
+ values.push(value.value);
1203
+ if (value.done) {
1204
+ doneAt = values.length - 1;
1205
+ break;
1206
+ }
1207
+ } catch (error) {
1208
+ throwsAt = values.length;
1209
+ values.push(error);
1210
+ }
1211
+ }
1212
+ return createSequence(values, throwsAt, doneAt);
1213
+ }
1214
+ var createIterator = ITERATOR_CONSTRUCTOR(SYM_ITERATOR);
1215
+ function sequenceToIterator(sequence) {
1216
+ return createIterator(sequence);
1217
+ }
1218
+
1166
1219
  // src/core/special-reference.ts
1167
1220
  var ITERATOR = {};
1168
1221
  var ASYNC_ITERATOR = {};
@@ -1220,36 +1273,6 @@ function streamToAsyncIterable(stream) {
1220
1273
  );
1221
1274
  }
1222
1275
 
1223
- // src/core/utils/iterator-to-sequence.ts
1224
- function iteratorToSequence(source) {
1225
- const values = [];
1226
- let throwsAt = -1;
1227
- let doneAt = -1;
1228
- const iterator = source[SYM_ITERATOR]();
1229
- while (true) {
1230
- try {
1231
- const value = iterator.next();
1232
- values.push(value.value);
1233
- if (value.done) {
1234
- doneAt = values.length - 1;
1235
- break;
1236
- }
1237
- } catch (error) {
1238
- throwsAt = values.length;
1239
- values.push(error);
1240
- }
1241
- }
1242
- return {
1243
- v: values,
1244
- t: throwsAt,
1245
- d: doneAt
1246
- };
1247
- }
1248
- var createIterator = ITERATOR_CONSTRUCTOR(SYM_ITERATOR);
1249
- function sequenceToIterator(sequence) {
1250
- return createIterator(sequence);
1251
- }
1252
-
1253
1276
  // src/core/utils/promise-to-result.ts
1254
1277
  async function promiseToResult(current) {
1255
1278
  try {
@@ -1494,7 +1517,9 @@ async function parseProperties(ctx, depth, properties) {
1494
1517
  await parseAsync(
1495
1518
  ctx,
1496
1519
  depth,
1497
- iteratorToSequence(properties)
1520
+ createSequenceFromIterable(
1521
+ properties
1522
+ )
1498
1523
  )
1499
1524
  )
1500
1525
  );
@@ -1686,6 +1711,13 @@ async function parseStream(ctx, depth, id, current) {
1686
1711
  )
1687
1712
  );
1688
1713
  }
1714
+ async function parseSequence(ctx, depth, id, current) {
1715
+ const nodes = [];
1716
+ for (let i = 0, len = current.v.length; i < len; i++) {
1717
+ nodes[i] = await parseAsync(ctx, depth, current.v[i]);
1718
+ }
1719
+ return createSequenceNode(id, nodes, current.t, current.d);
1720
+ }
1689
1721
  async function parseObjectAsync(ctx, depth, id, current) {
1690
1722
  if (Array.isArray(current)) {
1691
1723
  return parseArray(ctx, depth, id, current);
@@ -1693,6 +1725,9 @@ async function parseObjectAsync(ctx, depth, id, current) {
1693
1725
  if (isStream(current)) {
1694
1726
  return parseStream(ctx, depth, id, current);
1695
1727
  }
1728
+ if (isSequence(current)) {
1729
+ return parseSequence(ctx, depth, id, current);
1730
+ }
1696
1731
  const currentClass = current.constructor;
1697
1732
  if (currentClass === OpaqueReference) {
1698
1733
  return parseAsync(
@@ -2307,6 +2342,17 @@ function deserializeAsyncIteratorFactory(ctx, depth, node) {
2307
2342
  deserialize(ctx, depth, node.a[1]);
2308
2343
  return NIL;
2309
2344
  }
2345
+ function deserializeSequence(ctx, depth, node) {
2346
+ const result = assignIndexedValue(
2347
+ ctx,
2348
+ node.i,
2349
+ createSequence([], node.s, node.l)
2350
+ );
2351
+ for (let i = 0, len = node.a.length; i < len; i++) {
2352
+ result.v[i] = deserialize(ctx, depth, node.a[i]);
2353
+ }
2354
+ return result;
2355
+ }
2310
2356
  function deserialize(ctx, depth, node) {
2311
2357
  if (depth > ctx.base.depthLimit) {
2312
2358
  throw new SerovalDepthLimitError(ctx.base.depthLimit);
@@ -2383,6 +2429,8 @@ function deserialize(ctx, depth, node) {
2383
2429
  case 29 /* AsyncIteratorFactory */:
2384
2430
  return deserializeAsyncIteratorFactory(ctx, depth, node);
2385
2431
  // case SerovalNodeType.SpecialReference:
2432
+ case 35 /* Sequence */:
2433
+ return deserializeSequence(ctx, depth, node);
2386
2434
  default:
2387
2435
  throw new SerovalUnsupportedNodeError(node);
2388
2436
  }
@@ -2647,6 +2695,9 @@ function createArrayAssign(ctx, ref, index, value) {
2647
2695
  function createObjectAssign(ctx, ref, key, value) {
2648
2696
  createAssignment(ctx.base, getRefParam(ctx, ref) + "." + key, value);
2649
2697
  }
2698
+ function createSequenceAssign(ctx, ref, index, value) {
2699
+ createAssignment(ctx.base, getRefParam(ctx, ref) + ".v[" + index + "]", value);
2700
+ }
2650
2701
  function isIndexedValueInStack(ctx, node) {
2651
2702
  return node.t === 4 /* IndexedValue */ && ctx.stack.includes(node.i);
2652
2703
  }
@@ -3120,6 +3171,38 @@ function serializeStreamThrow(ctx, node) {
3120
3171
  function serializeStreamReturn(ctx, node) {
3121
3172
  return getRefParam(ctx, node.i) + ".return(" + serialize(ctx, node.f) + ")";
3122
3173
  }
3174
+ function serializeSequenceItem(ctx, id, index, item) {
3175
+ const base = ctx.base;
3176
+ if (isIndexedValueInStack(base, item)) {
3177
+ markSerializerRef(base, id);
3178
+ createSequenceAssign(
3179
+ ctx,
3180
+ id,
3181
+ index,
3182
+ getRefParam(ctx, item.i)
3183
+ );
3184
+ return "";
3185
+ }
3186
+ return serialize(ctx, item);
3187
+ }
3188
+ function serializeSequence(ctx, node) {
3189
+ const items = node.a;
3190
+ const size = items.length;
3191
+ const id = node.i;
3192
+ if (size > 0) {
3193
+ ctx.base.stack.push(id);
3194
+ let result = serializeSequenceItem(ctx, id, 0, items[0]);
3195
+ for (let i = 1, item = result; i < size; i++) {
3196
+ item = serializeSequenceItem(ctx, id, i, items[i]);
3197
+ result += (item && result && ",") + item;
3198
+ }
3199
+ ctx.base.stack.pop();
3200
+ if (result) {
3201
+ return "{__SEROVAL_SEQUENCE__:!0,v:[" + result + "],t:" + node.s + ",d:" + node.l + "}";
3202
+ }
3203
+ }
3204
+ return "{__SEROVAL_SEQUENCE__:!0,v:[],t:-1,d:0}";
3205
+ }
3123
3206
  function serializeAssignable(ctx, node) {
3124
3207
  switch (node.t) {
3125
3208
  case 17 /* WKSymbol */:
@@ -3161,6 +3244,8 @@ function serializeAssignable(ctx, node) {
3161
3244
  return serializePlugin(ctx, node);
3162
3245
  case 26 /* SpecialReference */:
3163
3246
  return SPECIAL_REF_STRING[node.s];
3247
+ case 35 /* Sequence */:
3248
+ return serializeSequence(ctx, node);
3164
3249
  default:
3165
3250
  throw new SerovalUnsupportedNodeError(node);
3166
3251
  }
@@ -3334,7 +3419,9 @@ function parseProperties2(ctx, depth, properties) {
3334
3419
  parseSOS(
3335
3420
  ctx,
3336
3421
  depth,
3337
- iteratorToSequence(properties)
3422
+ createSequenceFromIterable(
3423
+ properties
3424
+ )
3338
3425
  )
3339
3426
  )
3340
3427
  );
@@ -3573,6 +3660,13 @@ function parsePlugin2(ctx, depth, id, current) {
3573
3660
  }
3574
3661
  return NIL;
3575
3662
  }
3663
+ function parseSequence2(ctx, depth, id, current) {
3664
+ const nodes = [];
3665
+ for (let i = 0, len = current.v.length; i < len; i++) {
3666
+ nodes[i] = parseSOS(ctx, depth, current.v[i]);
3667
+ }
3668
+ return createSequenceNode(id, nodes, current.t, current.d);
3669
+ }
3576
3670
  function parseObjectPhase2(ctx, depth, id, current, currentClass) {
3577
3671
  switch (currentClass) {
3578
3672
  case Object:
@@ -3685,6 +3779,9 @@ function parseObject(ctx, depth, id, current) {
3685
3779
  if (isStream(current)) {
3686
3780
  return parseStream2(ctx, depth, id, current);
3687
3781
  }
3782
+ if (isSequence(current)) {
3783
+ return parseSequence2(ctx, depth, id, current);
3784
+ }
3688
3785
  const currentClass = current.constructor;
3689
3786
  if (currentClass === OpaqueReference) {
3690
3787
  return parseSOS(
@@ -3900,6 +3997,7 @@ function toCrossJSONStream(source, options) {
3900
3997
  plugins,
3901
3998
  refs: options.refs,
3902
3999
  disabledFeatures: options.disabledFeatures,
4000
+ depthLimit: options.depthLimit,
3903
4001
  onParse: options.onParse,
3904
4002
  onError: options.onError,
3905
4003
  onDone: options.onDone
@@ -3913,7 +4011,8 @@ function fromCrossJSON(source, options) {
3913
4011
  plugins,
3914
4012
  refs: options.refs,
3915
4013
  features: options.features,
3916
- disabledFeatures: options.disabledFeatures
4014
+ disabledFeatures: options.disabledFeatures,
4015
+ depthLimit: options.depthLimit
3917
4016
  });
3918
4017
  return deserializeTop(ctx, source);
3919
4018
  }