seroval 1.4.2 → 1.5.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.
- package/dist/cjs/development/index.cjs +130 -33
- package/dist/cjs/development/index.cjs.map +4 -4
- package/dist/cjs/production/index.cjs +3 -3
- package/dist/esm/development/index.mjs +130 -33
- package/dist/esm/development/index.mjs.map +4 -4
- package/dist/esm/production/index.mjs +3 -3
- package/dist/types/core/base-primitives.d.ts +5 -4
- package/dist/types/core/base-primitives.d.ts.map +1 -1
- package/dist/types/core/constants.d.ts +2 -1
- package/dist/types/core/constants.d.ts.map +1 -1
- package/dist/types/core/constructors.d.ts +1 -5
- package/dist/types/core/constructors.d.ts.map +1 -1
- package/dist/types/core/context/async-parser.d.ts.map +1 -1
- package/dist/types/core/context/deserializer.d.ts.map +1 -1
- package/dist/types/core/context/serializer.d.ts.map +1 -1
- package/dist/types/core/context/sync-parser.d.ts.map +1 -1
- package/dist/types/core/errors.d.ts +5 -5
- package/dist/types/core/errors.d.ts.map +1 -1
- package/dist/types/core/plugin.d.ts +11 -7
- package/dist/types/core/plugin.d.ts.map +1 -1
- package/dist/types/core/sequence.d.ts +11 -0
- package/dist/types/core/sequence.d.ts.map +1 -0
- package/dist/types/core/types.d.ts +11 -4
- package/dist/types/core/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/base-primitives.ts +26 -3
- package/src/core/constants.ts +1 -0
- package/src/core/constructors.ts +1 -6
- package/src/core/context/async-parser.ts +31 -6
- package/src/core/context/deserializer.ts +20 -2
- package/src/core/context/serializer.ts +54 -0
- package/src/core/context/sync-parser.ts +29 -4
- package/src/core/errors.ts +6 -6
- package/src/core/plugin.ts +14 -9
- package/src/core/{utils/iterator-to-sequence.ts → sequence.ts} +20 -9
- package/src/core/types.ts +15 -4
- package/dist/types/core/utils/iterator-to-sequence.d.ts +0 -8
- 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
|
-
|
|
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
|
-
|
|
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(
|