seroval 0.4.0-alpha.8 → 0.4.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/src/tree/types.ts CHANGED
@@ -19,72 +19,150 @@ export const enum SerovalNodeType {
19
19
  BigIntTypedArray,
20
20
  }
21
21
 
22
- export type SerovalPrimitiveNode = [
23
- type: SerovalNodeType.Primitive,
24
- value: PrimitiveValue,
25
- ];
26
- export type SerovalReferenceNode = [type: SerovalNodeType.Reference, value: number];
22
+ export interface SerovalBaseNode {
23
+ // Type of the node
24
+ t: SerovalNodeType;
25
+ // Serialized value
26
+ s: PrimitiveValue | undefined;
27
+ // Reference ID
28
+ i: number | undefined;
29
+ // Size/Byte offset
30
+ l: number | undefined;
31
+ // Constructor name
32
+ c: string | undefined;
33
+ // dictionary
34
+ d: SerovalDictionaryNode | undefined;
35
+ // message
36
+ m: string | undefined;
37
+ // next node
38
+ n: SerovalNode | undefined;
39
+ // array of nodes
40
+ a: SerovalNode[] | undefined;
41
+ }
42
+
43
+ export interface SerovalObjectRecordNode {
44
+ k: string[];
45
+ v: SerovalNode[];
46
+ s: number;
47
+ }
48
+
49
+ export interface SerovalMapRecordNode {
50
+ k: SerovalNode[];
51
+ v: SerovalNode[];
52
+ s: number;
53
+ }
54
+
55
+ export type SerovalDictionaryNode =
56
+ | SerovalObjectRecordNode
57
+ | SerovalMapRecordNode;
58
+
59
+ export interface SerovalPrimitiveNode extends SerovalBaseNode {
60
+ t: SerovalNodeType.Primitive;
61
+ }
62
+
63
+ export interface SerovalReferenceNode extends SerovalBaseNode {
64
+ t: SerovalNodeType.Reference;
65
+ i: number;
66
+ }
67
+
68
+ export interface SerovalBigIntNode extends SerovalBaseNode {
69
+ t: SerovalNodeType.BigInt;
70
+ s: string;
71
+ }
72
+
73
+ export interface SerovalDateNode extends SerovalBaseNode {
74
+ t: SerovalNodeType.Date;
75
+ i: number;
76
+ s: string;
77
+ }
78
+
79
+ export interface SerovalRegExpNode extends SerovalBaseNode {
80
+ t: SerovalNodeType.RegExp;
81
+ i: number;
82
+ s: string;
83
+ }
84
+
85
+ export interface SerovalTypedArrayNode extends SerovalBaseNode {
86
+ t: SerovalNodeType.TypedArray;
87
+ i: number;
88
+ s: string;
89
+ l: number;
90
+ c: string;
91
+ }
92
+
93
+ export interface SerovalBigIntTypedArrayNode extends SerovalBaseNode {
94
+ t: SerovalNodeType.BigIntTypedArray;
95
+ i: number;
96
+ s: string;
97
+ l: number;
98
+ c: string;
99
+ }
100
+
27
101
  export type SerovalSemiPrimitiveNode =
28
- | [type: SerovalNodeType.BigInt, value: string]
29
- | [type: SerovalNodeType.Date, value: string, id: number]
30
- | [type: SerovalNodeType.RegExp, value: string, id: number]
31
- | [
32
- type: SerovalNodeType.TypedArray,
33
- value: [constructor: string, array: string, byteOffset: number],
34
- id: number
35
- ]
36
- | [
37
- type: SerovalNodeType.BigIntTypedArray,
38
- value: [constructor: string, array: string, byteOffset: number],
39
- id: number
40
- ];
41
-
42
- export type SerovalDictionaryNode = [key: string[], value: SerovalNode[], size: number];
43
- export type SerovalSetNode = [type: SerovalNodeType.Set, value: SerovalNode[], id: number];
44
- export type SerovalMapNode = [
45
- type: SerovalNodeType.Map,
46
- value: [key: SerovalNode[], value: SerovalNode[], size: number],
47
- id: number
48
- ];
49
- export type SerovalArrayNode = [type: SerovalNodeType.Array, value: SerovalNode[], id: number];
50
- export type SerovalObjectNode = [
51
- type: SerovalNodeType.Object,
52
- value: SerovalDictionaryNode,
53
- id: number
54
- ];
55
- export type SerovalNullConstructorNode = [
56
- type: SerovalNodeType.NullConstructor,
57
- value: SerovalDictionaryNode,
58
- id: number,
59
- ];
60
- export type SerovalPromiseNode = [type: SerovalNodeType.Promise, value: SerovalNode, id: number];
61
- export type SerovalErrorNode = [
62
- type: SerovalNodeType.Error,
63
- value: [
64
- constructor: string,
65
- message: string,
66
- options?: SerovalDictionaryNode,
67
- ],
68
- id: number
69
- ];
70
- export type SerovalAggregateErrorNode = [
71
- type: SerovalNodeType.AggregateError,
72
- value: [
73
- message: string,
74
- options: SerovalDictionaryNode | undefined,
75
- errors: SerovalNode,
76
- ],
77
- id: number
78
- ];
79
-
80
- export type SerovalIterableNode = [
81
- type: SerovalNodeType.Iterable,
82
- value: [
83
- options: SerovalDictionaryNode | undefined,
84
- items: SerovalNode[],
85
- ],
86
- id: number,
87
- ];
102
+ | SerovalBigIntNode
103
+ | SerovalDateNode
104
+ | SerovalRegExpNode
105
+ | SerovalTypedArrayNode
106
+ | SerovalBigIntTypedArrayNode;
107
+
108
+ export interface SerovalSetNode extends SerovalBaseNode {
109
+ t: SerovalNodeType.Set;
110
+ a: SerovalNode[];
111
+ i: number;
112
+ }
113
+
114
+ export interface SerovalMapNode extends SerovalBaseNode {
115
+ t: SerovalNodeType.Map;
116
+ d: SerovalMapRecordNode;
117
+ i: number;
118
+ }
119
+
120
+ export interface SerovalArrayNode extends SerovalBaseNode {
121
+ t: SerovalNodeType.Array;
122
+ a: SerovalNode[];
123
+ i: number;
124
+ }
125
+
126
+ export interface SerovalObjectNode extends SerovalBaseNode {
127
+ t: SerovalNodeType.Object;
128
+ d: SerovalObjectRecordNode;
129
+ i: number;
130
+ }
131
+
132
+ export interface SerovalNullConstructorNode extends SerovalBaseNode {
133
+ t: SerovalNodeType.NullConstructor;
134
+ d: SerovalObjectRecordNode;
135
+ i: number;
136
+ }
137
+
138
+ export interface SerovalPromiseNode extends SerovalBaseNode {
139
+ t: SerovalNodeType.Promise;
140
+ n: SerovalNode;
141
+ i: number;
142
+ }
143
+
144
+ export interface SerovalErrorNode extends SerovalBaseNode {
145
+ t: SerovalNodeType.Error;
146
+ c: string;
147
+ m: string;
148
+ d: SerovalObjectRecordNode | undefined;
149
+ i: number;
150
+ }
151
+
152
+ export interface SerovalAggregateErrorNode extends SerovalBaseNode {
153
+ t: SerovalNodeType.AggregateError;
154
+ m: string;
155
+ d: SerovalObjectRecordNode | undefined;
156
+ n: SerovalNode;
157
+ i: number;
158
+ }
159
+
160
+ export interface SerovalIterableNode extends SerovalBaseNode {
161
+ t: SerovalNodeType.Iterable;
162
+ d: SerovalObjectRecordNode | undefined;
163
+ a: SerovalNode[];
164
+ i: number;
165
+ }
88
166
 
89
167
  export type SerovalNode =
90
168
  | SerovalPrimitiveNode
package/src/types.ts CHANGED
@@ -25,7 +25,9 @@ export type TypedArrayValue =
25
25
  | Uint32Array
26
26
  | Uint8ClampedArray
27
27
  | Float32Array
28
- | Float64Array
28
+ | Float64Array;
29
+
30
+ export type BigIntTypedArrayValue =
29
31
  | BigInt64Array
30
32
  | BigUint64Array;
31
33
 
@@ -33,6 +35,7 @@ export type SemiPrimitiveValue =
33
35
  | RegExp
34
36
  | Date
35
37
  | TypedArrayValue
38
+ | BigIntTypedArrayValue
36
39
  | bigint;
37
40
 
38
41
  export type CommonServerValue =
@@ -1,5 +0,0 @@
1
- import { AsyncServerValue, PrimitiveValue } from './types';
2
- export declare function isPrimitive(current: unknown): current is PrimitiveValue;
3
- export declare function isPromise<T>(obj: unknown): obj is PromiseLike<T>;
4
- export declare function constructorCheck<T extends NonNullable<AsyncServerValue>>(value: unknown, constructor: unknown): value is T;
5
- export declare function isIterable<T>(obj: unknown): obj is Iterable<T>;
package/src/checks.ts DELETED
@@ -1,40 +0,0 @@
1
- import { AsyncServerValue, PrimitiveValue } from './types';
2
-
3
- export function isPrimitive(current: unknown): current is PrimitiveValue {
4
- if (!current || current === true) {
5
- return true;
6
- }
7
- const type = typeof current;
8
- return type === 'number'
9
- || type === 'string';
10
- }
11
-
12
- export function isPromise<T>(obj: unknown): obj is PromiseLike<T> {
13
- return !!obj
14
- && (typeof obj === 'object' || typeof obj === 'function')
15
- && 'then' in obj
16
- && typeof obj.then === 'function';
17
- }
18
-
19
- export function constructorCheck<T extends NonNullable<AsyncServerValue>>(
20
- value: unknown,
21
- constructor: unknown,
22
- ): value is T {
23
- return (value as { constructor: unknown }).constructor === constructor;
24
- }
25
-
26
- function isIterableBuiltin(obj: unknown) {
27
- return (
28
- Array.isArray(obj)
29
- || constructorCheck<Set<any>>(obj, Set)
30
- || constructorCheck<Map<any, any>>(obj, Map)
31
- );
32
- }
33
-
34
- export function isIterable<T>(obj: unknown): obj is Iterable<T> {
35
- return !!obj
36
- && typeof obj === 'object'
37
- && !isIterableBuiltin(obj)
38
- && Symbol.iterator in obj
39
- && typeof obj[Symbol.iterator] === 'function';
40
- }