seroval 1.3.2 → 1.4.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.
- package/dist/cjs/development/index.cjs +2817 -2700
- package/dist/cjs/development/index.cjs.map +4 -4
- package/dist/cjs/production/index.cjs +3 -17
- package/dist/esm/development/index.mjs +2817 -2700
- package/dist/esm/development/index.mjs.map +4 -4
- package/dist/esm/production/index.mjs +3 -17
- package/dist/types/core/base-primitives.d.ts +3 -4
- package/dist/types/core/base-primitives.d.ts.map +1 -1
- package/dist/types/core/compat.d.ts +3 -2
- package/dist/types/core/compat.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 +54 -0
- package/dist/types/core/constructors.d.ts.map +1 -0
- package/dist/types/core/context/async-parser.d.ts +20 -0
- package/dist/types/core/context/async-parser.d.ts.map +1 -0
- package/dist/types/core/context/deserializer.d.ts +40 -38
- package/dist/types/core/context/deserializer.d.ts.map +1 -1
- package/dist/types/core/context/parser.d.ts +34 -19
- package/dist/types/core/context/parser.d.ts.map +1 -1
- package/dist/types/core/context/serializer.d.ts +38 -99
- package/dist/types/core/context/serializer.d.ts.map +1 -1
- package/dist/types/core/context/sync-parser.d.ts +59 -0
- package/dist/types/core/context/sync-parser.d.ts.map +1 -0
- package/dist/types/core/cross/index.d.ts +12 -13
- package/dist/types/core/cross/index.d.ts.map +1 -1
- package/dist/types/core/errors.d.ts +9 -0
- package/dist/types/core/errors.d.ts.map +1 -1
- package/dist/types/core/function-string.d.ts +2 -2
- package/dist/types/core/function-string.d.ts.map +1 -1
- package/dist/types/core/literals.d.ts.map +1 -1
- package/dist/types/core/node.d.ts +1 -1
- package/dist/types/core/node.d.ts.map +1 -1
- package/dist/types/core/plugin.d.ts +13 -11
- package/dist/types/core/plugin.d.ts.map +1 -1
- package/dist/types/core/reference.d.ts.map +1 -1
- package/dist/types/core/special-reference.d.ts +3 -2
- package/dist/types/core/special-reference.d.ts.map +1 -1
- package/dist/types/core/stream.d.ts +1 -2
- package/dist/types/core/stream.d.ts.map +1 -1
- package/dist/types/core/string.d.ts.map +1 -1
- package/dist/types/core/symbols.d.ts +14 -0
- package/dist/types/core/symbols.d.ts.map +1 -0
- package/dist/types/core/tree/index.d.ts +7 -3
- package/dist/types/core/tree/index.d.ts.map +1 -1
- package/dist/types/core/types.d.ts +4 -11
- package/dist/types/core/types.d.ts.map +1 -1
- package/dist/types/core/utils/iterator-to-sequence.d.ts.map +1 -1
- package/dist/types/index.d.ts +10 -5
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +18 -21
- package/dist/types/core/context/parser/async.d.ts +0 -24
- package/dist/types/core/context/parser/async.d.ts.map +0 -1
- package/dist/types/core/context/parser/stream.d.ts +0 -43
- package/dist/types/core/context/parser/stream.d.ts.map +0 -1
- package/dist/types/core/context/parser/sync.d.ts +0 -30
- package/dist/types/core/context/parser/sync.d.ts.map +0 -1
- package/dist/types/core/cross/async.d.ts +0 -8
- package/dist/types/core/cross/async.d.ts.map +0 -1
- package/dist/types/core/cross/deserializer.d.ts +0 -9
- package/dist/types/core/cross/deserializer.d.ts.map +0 -1
- package/dist/types/core/cross/parser.d.ts +0 -6
- package/dist/types/core/cross/parser.d.ts.map +0 -1
- package/dist/types/core/cross/serializer.d.ts +0 -16
- package/dist/types/core/cross/serializer.d.ts.map +0 -1
- package/dist/types/core/cross/stream.d.ts +0 -8
- package/dist/types/core/cross/stream.d.ts.map +0 -1
- package/dist/types/core/cross/sync.d.ts +0 -8
- package/dist/types/core/cross/sync.d.ts.map +0 -1
- package/dist/types/core/tree/async.d.ts +0 -8
- package/dist/types/core/tree/async.d.ts.map +0 -1
- package/dist/types/core/tree/deserializer.d.ts +0 -13
- package/dist/types/core/tree/deserializer.d.ts.map +0 -1
- package/dist/types/core/tree/serializer.d.ts +0 -29
- package/dist/types/core/tree/serializer.d.ts.map +0 -1
- package/dist/types/core/tree/sync.d.ts +0 -8
- package/dist/types/core/tree/sync.d.ts.map +0 -1
- package/dist/types/core/utils/assert.d.ts +0 -2
- package/dist/types/core/utils/assert.d.ts.map +0 -1
- package/dist/types/core/utils/deferred.d.ts +0 -7
- package/dist/types/core/utils/deferred.d.ts.map +0 -1
- package/src/core/Serializer.ts +0 -119
- package/src/core/base-primitives.ts +0 -542
- package/src/core/compat.ts +0 -20
- package/src/core/constants.ts +0 -185
- package/src/core/context/deserializer.ts +0 -456
- package/src/core/context/parser/async.ts +0 -495
- package/src/core/context/parser/stream.ts +0 -323
- package/src/core/context/parser/sync.ts +0 -404
- package/src/core/context/parser.ts +0 -270
- package/src/core/context/serializer.ts +0 -1180
- package/src/core/cross/async.ts +0 -9
- package/src/core/cross/deserializer.ts +0 -16
- package/src/core/cross/index.ts +0 -170
- package/src/core/cross/parser.ts +0 -7
- package/src/core/cross/serializer.ts +0 -72
- package/src/core/cross/stream.ts +0 -9
- package/src/core/cross/sync.ts +0 -9
- package/src/core/errors.ts +0 -102
- package/src/core/function-string.ts +0 -31
- package/src/core/keys.ts +0 -17
- package/src/core/literals.ts +0 -43
- package/src/core/node.ts +0 -40
- package/src/core/opaque-reference.ts +0 -9
- package/src/core/plugin.ts +0 -91
- package/src/core/reference.ts +0 -63
- package/src/core/special-reference.ts +0 -114
- package/src/core/stream.ts +0 -205
- package/src/core/string.ts +0 -84
- package/src/core/tree/async.ts +0 -9
- package/src/core/tree/deserializer.ts +0 -26
- package/src/core/tree/index.ts +0 -111
- package/src/core/tree/serializer.ts +0 -98
- package/src/core/tree/sync.ts +0 -9
- package/src/core/types.ts +0 -370
- package/src/core/utils/assert.ts +0 -5
- package/src/core/utils/deferred.ts +0 -22
- package/src/core/utils/error.ts +0 -73
- package/src/core/utils/get-identifier.ts +0 -18
- package/src/core/utils/get-object-flag.ts +0 -14
- package/src/core/utils/is-valid-identifier.ts +0 -12
- package/src/core/utils/iterator-to-sequence.ts +0 -66
- package/src/core/utils/promise-to-result.ts +0 -9
- package/src/core/utils/typed-array.ts +0 -56
- package/src/index.ts +0 -18
package/src/core/constants.ts
DELETED
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
export const enum SerovalConstant {
|
|
2
|
-
Null = 0,
|
|
3
|
-
Undefined = 1,
|
|
4
|
-
True = 2,
|
|
5
|
-
False = 3,
|
|
6
|
-
NegZero = 4,
|
|
7
|
-
Inf = 5,
|
|
8
|
-
NegInf = 6,
|
|
9
|
-
Nan = 7,
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export const enum SerovalNodeType {
|
|
13
|
-
Number = 0,
|
|
14
|
-
String = 1,
|
|
15
|
-
Constant = 2,
|
|
16
|
-
BigInt = 3,
|
|
17
|
-
IndexedValue = 4,
|
|
18
|
-
Date = 5,
|
|
19
|
-
RegExp = 6,
|
|
20
|
-
Set = 7,
|
|
21
|
-
Map = 8,
|
|
22
|
-
Array = 9,
|
|
23
|
-
Object = 10,
|
|
24
|
-
NullConstructor = 11,
|
|
25
|
-
Promise = 12,
|
|
26
|
-
Error = 13,
|
|
27
|
-
AggregateError = 14,
|
|
28
|
-
TypedArray = 15,
|
|
29
|
-
BigIntTypedArray = 16,
|
|
30
|
-
WKSymbol = 17,
|
|
31
|
-
Reference = 18,
|
|
32
|
-
ArrayBuffer = 19,
|
|
33
|
-
DataView = 20,
|
|
34
|
-
Boxed = 21,
|
|
35
|
-
PromiseConstructor = 22,
|
|
36
|
-
PromiseSuccess = 23,
|
|
37
|
-
PromiseFailure = 24,
|
|
38
|
-
Plugin = 25,
|
|
39
|
-
SpecialReference = 26,
|
|
40
|
-
IteratorFactory = 27,
|
|
41
|
-
IteratorFactoryInstance = 28,
|
|
42
|
-
AsyncIteratorFactory = 29,
|
|
43
|
-
AsyncIteratorFactoryInstance = 30,
|
|
44
|
-
StreamConstructor = 31,
|
|
45
|
-
StreamNext = 32,
|
|
46
|
-
StreamThrow = 33,
|
|
47
|
-
StreamReturn = 34,
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export const enum SerovalObjectFlags {
|
|
51
|
-
None = 0,
|
|
52
|
-
NonExtensible = 1,
|
|
53
|
-
Sealed = 2,
|
|
54
|
-
Frozen = 3,
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export const enum Symbols {
|
|
58
|
-
AsyncIterator = 0,
|
|
59
|
-
HasInstance = 1,
|
|
60
|
-
IsConcatSpreadable = 2,
|
|
61
|
-
Iterator = 3,
|
|
62
|
-
Match = 4,
|
|
63
|
-
MatchAll = 5,
|
|
64
|
-
Replace = 6,
|
|
65
|
-
Search = 7,
|
|
66
|
-
Species = 8,
|
|
67
|
-
Split = 9,
|
|
68
|
-
ToPrimitive = 10,
|
|
69
|
-
ToStringTag = 11,
|
|
70
|
-
Unscopables = 12,
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export const SYMBOL_STRING: Record<Symbols, string> = {
|
|
74
|
-
[Symbols.AsyncIterator]: 'Symbol.asyncIterator',
|
|
75
|
-
[Symbols.HasInstance]: 'Symbol.hasInstance',
|
|
76
|
-
[Symbols.IsConcatSpreadable]: 'Symbol.isConcatSpreadable',
|
|
77
|
-
[Symbols.Iterator]: 'Symbol.iterator',
|
|
78
|
-
[Symbols.Match]: 'Symbol.match',
|
|
79
|
-
[Symbols.MatchAll]: 'Symbol.matchAll',
|
|
80
|
-
[Symbols.Replace]: 'Symbol.replace',
|
|
81
|
-
[Symbols.Search]: 'Symbol.search',
|
|
82
|
-
[Symbols.Species]: 'Symbol.species',
|
|
83
|
-
[Symbols.Split]: 'Symbol.split',
|
|
84
|
-
[Symbols.ToPrimitive]: 'Symbol.toPrimitive',
|
|
85
|
-
[Symbols.ToStringTag]: 'Symbol.toStringTag',
|
|
86
|
-
[Symbols.Unscopables]: 'Symbol.unscopables',
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
export const INV_SYMBOL_REF = /* @__PURE__ */ {
|
|
90
|
-
[Symbol.asyncIterator]: Symbols.AsyncIterator,
|
|
91
|
-
[Symbol.hasInstance]: Symbols.HasInstance,
|
|
92
|
-
[Symbol.isConcatSpreadable]: Symbols.IsConcatSpreadable,
|
|
93
|
-
[Symbol.iterator]: Symbols.Iterator,
|
|
94
|
-
[Symbol.match]: Symbols.Match,
|
|
95
|
-
[Symbol.matchAll]: Symbols.MatchAll,
|
|
96
|
-
[Symbol.replace]: Symbols.Replace,
|
|
97
|
-
[Symbol.search]: Symbols.Search,
|
|
98
|
-
[Symbol.species]: Symbols.Species,
|
|
99
|
-
[Symbol.split]: Symbols.Split,
|
|
100
|
-
[Symbol.toPrimitive]: Symbols.ToPrimitive,
|
|
101
|
-
[Symbol.toStringTag]: Symbols.ToStringTag,
|
|
102
|
-
[Symbol.unscopables]: Symbols.Unscopables,
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
export type WellKnownSymbols = keyof typeof INV_SYMBOL_REF;
|
|
106
|
-
|
|
107
|
-
export const SYMBOL_REF: Record<Symbols, WellKnownSymbols> = {
|
|
108
|
-
[Symbols.AsyncIterator]: Symbol.asyncIterator,
|
|
109
|
-
[Symbols.HasInstance]: Symbol.hasInstance,
|
|
110
|
-
[Symbols.IsConcatSpreadable]: Symbol.isConcatSpreadable,
|
|
111
|
-
[Symbols.Iterator]: Symbol.iterator,
|
|
112
|
-
[Symbols.Match]: Symbol.match,
|
|
113
|
-
[Symbols.MatchAll]: Symbol.matchAll,
|
|
114
|
-
[Symbols.Replace]: Symbol.replace,
|
|
115
|
-
[Symbols.Search]: Symbol.search,
|
|
116
|
-
[Symbols.Species]: Symbol.species,
|
|
117
|
-
[Symbols.Split]: Symbol.split,
|
|
118
|
-
[Symbols.ToPrimitive]: Symbol.toPrimitive,
|
|
119
|
-
[Symbols.ToStringTag]: Symbol.toStringTag,
|
|
120
|
-
[Symbols.Unscopables]: Symbol.unscopables,
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
export const CONSTANT_STRING: Record<SerovalConstant, string> = {
|
|
124
|
-
[SerovalConstant.True]: '!0',
|
|
125
|
-
[SerovalConstant.False]: '!1',
|
|
126
|
-
[SerovalConstant.Undefined]: 'void 0',
|
|
127
|
-
[SerovalConstant.Null]: 'null',
|
|
128
|
-
[SerovalConstant.NegZero]: '-0',
|
|
129
|
-
[SerovalConstant.Inf]: '1/0',
|
|
130
|
-
[SerovalConstant.NegInf]: '-1/0',
|
|
131
|
-
[SerovalConstant.Nan]: '0/0',
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
export const CONSTANT_VAL: Record<SerovalConstant, unknown> = {
|
|
135
|
-
[SerovalConstant.True]: true,
|
|
136
|
-
[SerovalConstant.False]: false,
|
|
137
|
-
[SerovalConstant.Undefined]: undefined,
|
|
138
|
-
[SerovalConstant.Null]: null,
|
|
139
|
-
[SerovalConstant.NegZero]: -0,
|
|
140
|
-
[SerovalConstant.Inf]: Number.POSITIVE_INFINITY,
|
|
141
|
-
[SerovalConstant.NegInf]: Number.NEGATIVE_INFINITY,
|
|
142
|
-
[SerovalConstant.Nan]: Number.NaN,
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
export const enum ErrorConstructorTag {
|
|
146
|
-
Error = 0,
|
|
147
|
-
EvalError = 1,
|
|
148
|
-
RangeError = 2,
|
|
149
|
-
ReferenceError = 3,
|
|
150
|
-
SyntaxError = 4,
|
|
151
|
-
TypeError = 5,
|
|
152
|
-
URIError = 6,
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export const ERROR_CONSTRUCTOR_STRING: Record<ErrorConstructorTag, string> = {
|
|
156
|
-
[ErrorConstructorTag.Error]: 'Error',
|
|
157
|
-
[ErrorConstructorTag.EvalError]: 'EvalError',
|
|
158
|
-
[ErrorConstructorTag.RangeError]: 'RangeError',
|
|
159
|
-
[ErrorConstructorTag.ReferenceError]: 'ReferenceError',
|
|
160
|
-
[ErrorConstructorTag.SyntaxError]: 'SyntaxError',
|
|
161
|
-
[ErrorConstructorTag.TypeError]: 'TypeError',
|
|
162
|
-
[ErrorConstructorTag.URIError]: 'URIError',
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
type ErrorConstructors =
|
|
166
|
-
| ErrorConstructor
|
|
167
|
-
| EvalErrorConstructor
|
|
168
|
-
| RangeErrorConstructor
|
|
169
|
-
| ReferenceErrorConstructor
|
|
170
|
-
| SyntaxErrorConstructor
|
|
171
|
-
| TypeErrorConstructor
|
|
172
|
-
| URIErrorConstructor;
|
|
173
|
-
|
|
174
|
-
export const ERROR_CONSTRUCTOR: Record<ErrorConstructorTag, ErrorConstructors> =
|
|
175
|
-
{
|
|
176
|
-
[ErrorConstructorTag.Error]: Error,
|
|
177
|
-
[ErrorConstructorTag.EvalError]: EvalError,
|
|
178
|
-
[ErrorConstructorTag.RangeError]: RangeError,
|
|
179
|
-
[ErrorConstructorTag.ReferenceError]: ReferenceError,
|
|
180
|
-
[ErrorConstructorTag.SyntaxError]: SyntaxError,
|
|
181
|
-
[ErrorConstructorTag.TypeError]: TypeError,
|
|
182
|
-
[ErrorConstructorTag.URIError]: URIError,
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
export const NIL = undefined;
|
|
@@ -1,456 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CONSTANT_VAL,
|
|
3
|
-
ERROR_CONSTRUCTOR,
|
|
4
|
-
SYMBOL_REF,
|
|
5
|
-
SerovalNodeType,
|
|
6
|
-
SerovalObjectFlags,
|
|
7
|
-
} from '../constants';
|
|
8
|
-
import {
|
|
9
|
-
SerovalDeserializationError,
|
|
10
|
-
SerovalMissingInstanceError,
|
|
11
|
-
SerovalMissingPluginError,
|
|
12
|
-
SerovalUnsupportedNodeError,
|
|
13
|
-
} from '../errors';
|
|
14
|
-
import type { Plugin, PluginAccessOptions, SerovalMode } from '../plugin';
|
|
15
|
-
import { getReference } from '../reference';
|
|
16
|
-
import type { Stream } from '../stream';
|
|
17
|
-
import { createStream, streamToAsyncIterable } from '../stream';
|
|
18
|
-
import { deserializeString } from '../string';
|
|
19
|
-
import type {
|
|
20
|
-
SerovalAggregateErrorNode,
|
|
21
|
-
SerovalArrayBufferNode,
|
|
22
|
-
SerovalArrayNode,
|
|
23
|
-
SerovalAsyncIteratorFactoryInstanceNode,
|
|
24
|
-
SerovalAsyncIteratorFactoryNode,
|
|
25
|
-
SerovalBigIntTypedArrayNode,
|
|
26
|
-
SerovalBoxedNode,
|
|
27
|
-
SerovalDataViewNode,
|
|
28
|
-
SerovalDateNode,
|
|
29
|
-
SerovalErrorNode,
|
|
30
|
-
SerovalIteratorFactoryInstanceNode,
|
|
31
|
-
SerovalIteratorFactoryNode,
|
|
32
|
-
SerovalMapNode,
|
|
33
|
-
SerovalNode,
|
|
34
|
-
SerovalNullConstructorNode,
|
|
35
|
-
SerovalObjectNode,
|
|
36
|
-
SerovalObjectRecordKey,
|
|
37
|
-
SerovalObjectRecordNode,
|
|
38
|
-
SerovalPluginNode,
|
|
39
|
-
SerovalPromiseConstructorNode,
|
|
40
|
-
SerovalPromiseNode,
|
|
41
|
-
SerovalPromiseRejectNode,
|
|
42
|
-
SerovalPromiseResolveNode,
|
|
43
|
-
SerovalReferenceNode,
|
|
44
|
-
SerovalRegExpNode,
|
|
45
|
-
SerovalSetNode,
|
|
46
|
-
SerovalStreamConstructorNode,
|
|
47
|
-
SerovalStreamNextNode,
|
|
48
|
-
SerovalStreamReturnNode,
|
|
49
|
-
SerovalStreamThrowNode,
|
|
50
|
-
SerovalTypedArrayNode,
|
|
51
|
-
} from '../types';
|
|
52
|
-
import assert from '../utils/assert';
|
|
53
|
-
import type { Deferred } from '../utils/deferred';
|
|
54
|
-
import { createDeferred } from '../utils/deferred';
|
|
55
|
-
import type { Sequence } from '../utils/iterator-to-sequence';
|
|
56
|
-
import { sequenceToIterator } from '../utils/iterator-to-sequence';
|
|
57
|
-
import type {
|
|
58
|
-
BigIntTypedArrayValue,
|
|
59
|
-
TypedArrayValue,
|
|
60
|
-
} from '../utils/typed-array';
|
|
61
|
-
import { getTypedArrayConstructor } from '../utils/typed-array';
|
|
62
|
-
|
|
63
|
-
function applyObjectFlag(obj: unknown, flag: SerovalObjectFlags): unknown {
|
|
64
|
-
switch (flag) {
|
|
65
|
-
case SerovalObjectFlags.Frozen:
|
|
66
|
-
return Object.freeze(obj);
|
|
67
|
-
case SerovalObjectFlags.NonExtensible:
|
|
68
|
-
return Object.preventExtensions(obj);
|
|
69
|
-
case SerovalObjectFlags.Sealed:
|
|
70
|
-
return Object.seal(obj);
|
|
71
|
-
default:
|
|
72
|
-
return obj;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
type AssignableValue = AggregateError | Error | Iterable<unknown>;
|
|
77
|
-
type AssignableNode = SerovalAggregateErrorNode | SerovalErrorNode;
|
|
78
|
-
|
|
79
|
-
export interface BaseDeserializerOptions extends PluginAccessOptions {
|
|
80
|
-
refs?: Map<number, unknown>;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export default abstract class BaseDeserializerContext
|
|
84
|
-
implements PluginAccessOptions
|
|
85
|
-
{
|
|
86
|
-
abstract readonly mode: SerovalMode;
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Mapping ids to values
|
|
90
|
-
* @private
|
|
91
|
-
*/
|
|
92
|
-
refs: Map<number, unknown>;
|
|
93
|
-
|
|
94
|
-
plugins?: Plugin<any, any>[] | undefined;
|
|
95
|
-
|
|
96
|
-
constructor(options: BaseDeserializerOptions) {
|
|
97
|
-
this.plugins = options.plugins;
|
|
98
|
-
this.refs = options.refs || new Map<number, unknown>();
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
protected abstract assignIndexedValue<T>(id: number, value: T): T;
|
|
102
|
-
|
|
103
|
-
private deserializeReference(node: SerovalReferenceNode): unknown {
|
|
104
|
-
return this.assignIndexedValue(
|
|
105
|
-
node.i,
|
|
106
|
-
getReference(deserializeString(node.s)),
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
private deserializeArray(node: SerovalArrayNode): unknown[] {
|
|
111
|
-
const len = node.l;
|
|
112
|
-
const result: unknown[] = this.assignIndexedValue(
|
|
113
|
-
node.i,
|
|
114
|
-
new Array<unknown>(len),
|
|
115
|
-
);
|
|
116
|
-
let item: SerovalNode | undefined;
|
|
117
|
-
for (let i = 0; i < len; i++) {
|
|
118
|
-
item = node.a[i];
|
|
119
|
-
if (item) {
|
|
120
|
-
result[i] = this.deserialize(item);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
applyObjectFlag(result, node.o);
|
|
124
|
-
return result;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
private deserializeProperties(
|
|
128
|
-
node: SerovalObjectRecordNode,
|
|
129
|
-
result: Record<string | symbol, unknown>,
|
|
130
|
-
): Record<string | symbol, unknown> {
|
|
131
|
-
const len = node.s;
|
|
132
|
-
if (len) {
|
|
133
|
-
const keys = node.k;
|
|
134
|
-
const vals = node.v;
|
|
135
|
-
for (let i = 0, key: SerovalObjectRecordKey; i < len; i++) {
|
|
136
|
-
key = keys[i];
|
|
137
|
-
if (typeof key === 'string') {
|
|
138
|
-
result[deserializeString(key)] = this.deserialize(vals[i]);
|
|
139
|
-
} else {
|
|
140
|
-
result[this.deserialize(key) as symbol] = this.deserialize(vals[i]);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return result;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
private deserializeObject(
|
|
148
|
-
node: SerovalObjectNode | SerovalNullConstructorNode,
|
|
149
|
-
): Record<string, unknown> {
|
|
150
|
-
const result = this.assignIndexedValue(
|
|
151
|
-
node.i,
|
|
152
|
-
(node.t === SerovalNodeType.Object ? {} : Object.create(null)) as Record<
|
|
153
|
-
string,
|
|
154
|
-
unknown
|
|
155
|
-
>,
|
|
156
|
-
);
|
|
157
|
-
this.deserializeProperties(node.p, result);
|
|
158
|
-
applyObjectFlag(result, node.o);
|
|
159
|
-
return result;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
private deserializeDate(node: SerovalDateNode): Date {
|
|
163
|
-
return this.assignIndexedValue(node.i, new Date(node.s));
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
private deserializeRegExp(node: SerovalRegExpNode): RegExp {
|
|
167
|
-
return this.assignIndexedValue(
|
|
168
|
-
node.i,
|
|
169
|
-
new RegExp(deserializeString(node.c), node.m),
|
|
170
|
-
);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
private deserializeSet(node: SerovalSetNode): Set<unknown> {
|
|
174
|
-
const result = this.assignIndexedValue(node.i, new Set<unknown>());
|
|
175
|
-
const items = node.a;
|
|
176
|
-
for (let i = 0, len = node.l; i < len; i++) {
|
|
177
|
-
result.add(this.deserialize(items[i]));
|
|
178
|
-
}
|
|
179
|
-
return result;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
private deserializeMap(node: SerovalMapNode): Map<unknown, unknown> {
|
|
183
|
-
const result = this.assignIndexedValue(node.i, new Map<unknown, unknown>());
|
|
184
|
-
const keys = node.e.k;
|
|
185
|
-
const vals = node.e.v;
|
|
186
|
-
for (let i = 0, len = node.e.s; i < len; i++) {
|
|
187
|
-
result.set(this.deserialize(keys[i]), this.deserialize(vals[i]));
|
|
188
|
-
}
|
|
189
|
-
return result;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
private deserializeArrayBuffer(node: SerovalArrayBufferNode): ArrayBuffer {
|
|
193
|
-
const bytes = new Uint8Array(node.s);
|
|
194
|
-
const result = this.assignIndexedValue(node.i, bytes.buffer);
|
|
195
|
-
return result;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
private deserializeTypedArray(
|
|
199
|
-
node: SerovalTypedArrayNode | SerovalBigIntTypedArrayNode,
|
|
200
|
-
): TypedArrayValue | BigIntTypedArrayValue {
|
|
201
|
-
const construct = getTypedArrayConstructor(node.c) as Int8ArrayConstructor;
|
|
202
|
-
const source = this.deserialize(node.f) as ArrayBuffer;
|
|
203
|
-
const result = this.assignIndexedValue(
|
|
204
|
-
node.i,
|
|
205
|
-
new construct(source, node.b, node.l),
|
|
206
|
-
);
|
|
207
|
-
return result;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
private deserializeDataView(node: SerovalDataViewNode): DataView {
|
|
211
|
-
const source = this.deserialize(node.f) as ArrayBuffer;
|
|
212
|
-
const result = this.assignIndexedValue(
|
|
213
|
-
node.i,
|
|
214
|
-
new DataView(source, node.b, node.l),
|
|
215
|
-
);
|
|
216
|
-
return result;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
private deserializeDictionary<T extends AssignableValue>(
|
|
220
|
-
node: AssignableNode,
|
|
221
|
-
result: T,
|
|
222
|
-
): T {
|
|
223
|
-
if (node.p) {
|
|
224
|
-
const fields = this.deserializeProperties(node.p, {});
|
|
225
|
-
Object.assign(result, fields);
|
|
226
|
-
}
|
|
227
|
-
return result;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
private deserializeAggregateError(
|
|
231
|
-
node: SerovalAggregateErrorNode,
|
|
232
|
-
): AggregateError {
|
|
233
|
-
// Serialize the required arguments
|
|
234
|
-
const result = this.assignIndexedValue(
|
|
235
|
-
node.i,
|
|
236
|
-
new AggregateError([], deserializeString(node.m)),
|
|
237
|
-
);
|
|
238
|
-
// `AggregateError` might've been extended
|
|
239
|
-
// either through class or custom properties
|
|
240
|
-
// Make sure to assign extra properties
|
|
241
|
-
return this.deserializeDictionary(node, result);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
private deserializeError(node: SerovalErrorNode): Error {
|
|
245
|
-
const construct = ERROR_CONSTRUCTOR[node.s];
|
|
246
|
-
const result = this.assignIndexedValue(
|
|
247
|
-
node.i,
|
|
248
|
-
new construct(deserializeString(node.m)),
|
|
249
|
-
);
|
|
250
|
-
return this.deserializeDictionary(node, result);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
private deserializePromise(node: SerovalPromiseNode): Promise<unknown> {
|
|
254
|
-
const deferred = createDeferred();
|
|
255
|
-
const result = this.assignIndexedValue(node.i, deferred);
|
|
256
|
-
const deserialized = this.deserialize(node.f);
|
|
257
|
-
if (node.s) {
|
|
258
|
-
deferred.resolve(deserialized);
|
|
259
|
-
} else {
|
|
260
|
-
deferred.reject(deserialized);
|
|
261
|
-
}
|
|
262
|
-
return result.promise;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
private deserializeBoxed(node: SerovalBoxedNode): unknown {
|
|
266
|
-
return this.assignIndexedValue(node.i, Object(this.deserialize(node.f)));
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
private deserializePlugin(node: SerovalPluginNode): unknown {
|
|
270
|
-
const currentPlugins = this.plugins;
|
|
271
|
-
if (currentPlugins) {
|
|
272
|
-
const tag = deserializeString(node.c);
|
|
273
|
-
for (let i = 0, len = currentPlugins.length; i < len; i++) {
|
|
274
|
-
const plugin = currentPlugins[i];
|
|
275
|
-
if (plugin.tag === tag) {
|
|
276
|
-
return this.assignIndexedValue(
|
|
277
|
-
node.i,
|
|
278
|
-
plugin.deserialize(node.s, this, {
|
|
279
|
-
id: node.i,
|
|
280
|
-
}),
|
|
281
|
-
);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
throw new SerovalMissingPluginError(node.c);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
private deserializePromiseConstructor(
|
|
289
|
-
node: SerovalPromiseConstructorNode,
|
|
290
|
-
): unknown {
|
|
291
|
-
return this.assignIndexedValue(
|
|
292
|
-
node.i,
|
|
293
|
-
this.assignIndexedValue(node.s, createDeferred()).promise,
|
|
294
|
-
);
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
private deserializePromiseResolve(node: SerovalPromiseResolveNode): unknown {
|
|
298
|
-
const deferred = this.refs.get(node.i) as Deferred | undefined;
|
|
299
|
-
assert(deferred, new SerovalMissingInstanceError('Promise'));
|
|
300
|
-
deferred.resolve(this.deserialize(node.a[1]));
|
|
301
|
-
return undefined;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
private deserializePromiseReject(node: SerovalPromiseRejectNode): unknown {
|
|
305
|
-
const deferred = this.refs.get(node.i) as Deferred | undefined;
|
|
306
|
-
assert(deferred, new SerovalMissingInstanceError('Promise'));
|
|
307
|
-
deferred.reject(this.deserialize(node.a[1]));
|
|
308
|
-
return undefined;
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
private deserializeIteratorFactoryInstance(
|
|
312
|
-
node: SerovalIteratorFactoryInstanceNode,
|
|
313
|
-
): unknown {
|
|
314
|
-
this.deserialize(node.a[0]);
|
|
315
|
-
const source = this.deserialize(node.a[1]);
|
|
316
|
-
return sequenceToIterator(source as Sequence);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
private deserializeAsyncIteratorFactoryInstance(
|
|
320
|
-
node: SerovalAsyncIteratorFactoryInstanceNode,
|
|
321
|
-
): unknown {
|
|
322
|
-
this.deserialize(node.a[0]);
|
|
323
|
-
const source = this.deserialize(node.a[1]);
|
|
324
|
-
return streamToAsyncIterable(source as Stream<any>);
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
private deserializeStreamConstructor(
|
|
328
|
-
node: SerovalStreamConstructorNode,
|
|
329
|
-
): unknown {
|
|
330
|
-
const result = this.assignIndexedValue(node.i, createStream());
|
|
331
|
-
const len = node.a.length;
|
|
332
|
-
if (len) {
|
|
333
|
-
for (let i = 0; i < len; i++) {
|
|
334
|
-
this.deserialize(node.a[i]);
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
return result;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
private deserializeStreamNext(node: SerovalStreamNextNode): unknown {
|
|
341
|
-
const deferred = this.refs.get(node.i) as Stream<unknown> | undefined;
|
|
342
|
-
assert(deferred, new SerovalMissingInstanceError('Stream'));
|
|
343
|
-
deferred.next(this.deserialize(node.f));
|
|
344
|
-
return undefined;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
private deserializeStreamThrow(node: SerovalStreamThrowNode): unknown {
|
|
348
|
-
const deferred = this.refs.get(node.i) as Stream<unknown> | undefined;
|
|
349
|
-
assert(deferred, new SerovalMissingInstanceError('Stream'));
|
|
350
|
-
deferred.throw(this.deserialize(node.f));
|
|
351
|
-
return undefined;
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
private deserializeStreamReturn(node: SerovalStreamReturnNode): unknown {
|
|
355
|
-
const deferred = this.refs.get(node.i) as Stream<unknown> | undefined;
|
|
356
|
-
assert(deferred, new SerovalMissingInstanceError('Stream'));
|
|
357
|
-
deferred.return(this.deserialize(node.f));
|
|
358
|
-
return undefined;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
private deserializeIteratorFactory(
|
|
362
|
-
node: SerovalIteratorFactoryNode,
|
|
363
|
-
): unknown {
|
|
364
|
-
this.deserialize(node.f);
|
|
365
|
-
return undefined;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
private deserializeAsyncIteratorFactory(
|
|
369
|
-
node: SerovalAsyncIteratorFactoryNode,
|
|
370
|
-
): unknown {
|
|
371
|
-
this.deserialize(node.a[1]);
|
|
372
|
-
return undefined;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
deserializeTop(node: SerovalNode): unknown {
|
|
376
|
-
try {
|
|
377
|
-
return this.deserialize(node);
|
|
378
|
-
} catch (error) {
|
|
379
|
-
throw new SerovalDeserializationError(error);
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
deserialize(node: SerovalNode): unknown {
|
|
384
|
-
switch (node.t) {
|
|
385
|
-
case SerovalNodeType.Constant:
|
|
386
|
-
return CONSTANT_VAL[node.s];
|
|
387
|
-
case SerovalNodeType.Number:
|
|
388
|
-
return node.s;
|
|
389
|
-
case SerovalNodeType.String:
|
|
390
|
-
return deserializeString(node.s);
|
|
391
|
-
case SerovalNodeType.BigInt:
|
|
392
|
-
return BigInt(node.s);
|
|
393
|
-
case SerovalNodeType.IndexedValue:
|
|
394
|
-
return this.refs.get(node.i);
|
|
395
|
-
case SerovalNodeType.Reference:
|
|
396
|
-
return this.deserializeReference(node);
|
|
397
|
-
case SerovalNodeType.Array:
|
|
398
|
-
return this.deserializeArray(node);
|
|
399
|
-
case SerovalNodeType.Object:
|
|
400
|
-
case SerovalNodeType.NullConstructor:
|
|
401
|
-
return this.deserializeObject(node);
|
|
402
|
-
case SerovalNodeType.Date:
|
|
403
|
-
return this.deserializeDate(node);
|
|
404
|
-
case SerovalNodeType.RegExp:
|
|
405
|
-
return this.deserializeRegExp(node);
|
|
406
|
-
case SerovalNodeType.Set:
|
|
407
|
-
return this.deserializeSet(node);
|
|
408
|
-
case SerovalNodeType.Map:
|
|
409
|
-
return this.deserializeMap(node);
|
|
410
|
-
case SerovalNodeType.ArrayBuffer:
|
|
411
|
-
return this.deserializeArrayBuffer(node);
|
|
412
|
-
case SerovalNodeType.BigIntTypedArray:
|
|
413
|
-
case SerovalNodeType.TypedArray:
|
|
414
|
-
return this.deserializeTypedArray(node);
|
|
415
|
-
case SerovalNodeType.DataView:
|
|
416
|
-
return this.deserializeDataView(node);
|
|
417
|
-
case SerovalNodeType.AggregateError:
|
|
418
|
-
return this.deserializeAggregateError(node);
|
|
419
|
-
case SerovalNodeType.Error:
|
|
420
|
-
return this.deserializeError(node);
|
|
421
|
-
case SerovalNodeType.Promise:
|
|
422
|
-
return this.deserializePromise(node);
|
|
423
|
-
case SerovalNodeType.WKSymbol:
|
|
424
|
-
return SYMBOL_REF[node.s];
|
|
425
|
-
case SerovalNodeType.Boxed:
|
|
426
|
-
return this.deserializeBoxed(node);
|
|
427
|
-
case SerovalNodeType.Plugin:
|
|
428
|
-
return this.deserializePlugin(node);
|
|
429
|
-
case SerovalNodeType.PromiseConstructor:
|
|
430
|
-
return this.deserializePromiseConstructor(node);
|
|
431
|
-
case SerovalNodeType.PromiseSuccess:
|
|
432
|
-
return this.deserializePromiseResolve(node);
|
|
433
|
-
case SerovalNodeType.PromiseFailure:
|
|
434
|
-
return this.deserializePromiseReject(node);
|
|
435
|
-
case SerovalNodeType.IteratorFactoryInstance:
|
|
436
|
-
return this.deserializeIteratorFactoryInstance(node);
|
|
437
|
-
case SerovalNodeType.AsyncIteratorFactoryInstance:
|
|
438
|
-
return this.deserializeAsyncIteratorFactoryInstance(node);
|
|
439
|
-
case SerovalNodeType.StreamConstructor:
|
|
440
|
-
return this.deserializeStreamConstructor(node);
|
|
441
|
-
case SerovalNodeType.StreamNext:
|
|
442
|
-
return this.deserializeStreamNext(node);
|
|
443
|
-
case SerovalNodeType.StreamThrow:
|
|
444
|
-
return this.deserializeStreamThrow(node);
|
|
445
|
-
case SerovalNodeType.StreamReturn:
|
|
446
|
-
return this.deserializeStreamReturn(node);
|
|
447
|
-
case SerovalNodeType.IteratorFactory:
|
|
448
|
-
return this.deserializeIteratorFactory(node);
|
|
449
|
-
case SerovalNodeType.AsyncIteratorFactory:
|
|
450
|
-
return this.deserializeAsyncIteratorFactory(node);
|
|
451
|
-
// case SerovalNodeType.SpecialReference:
|
|
452
|
-
default:
|
|
453
|
-
throw new SerovalUnsupportedNodeError(node);
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
}
|