nv-buf-serde 0.0.9 → 0.0.12
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/dist.js +7 -2
- package/package.json +1 -1
- package/r.js +502 -502
- package/w.js +4 -4
package/r.js
CHANGED
|
@@ -9,95 +9,96 @@ const {SerializationTag,ErrorTag,ArrayBufferViewIndexToCtor,CreatUnknown} = requ
|
|
|
9
9
|
const { creat_rctx } = require("./ctx");
|
|
10
10
|
|
|
11
11
|
const ERRD = {
|
|
12
|
-
|
|
12
|
+
must_be_str:"must_be_str"
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
const ReadVarintLoopIfLshiftWork = (u8a,si,ctx) => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
17
|
+
let old_si = si;
|
|
18
|
+
let v = 0;
|
|
19
|
+
let shift = 0;
|
|
20
|
+
let has_another_byte = _f;
|
|
21
|
+
do {
|
|
22
|
+
let byte = u8a[si];
|
|
23
|
+
has_another_byte = byte & 0x80;
|
|
24
|
+
if(shift < 32) {
|
|
25
|
+
v |= (byte & 0x7F) << shift;
|
|
26
|
+
shift = shift +7;
|
|
27
|
+
} else {
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
++si;
|
|
31
|
+
} while(has_another_byte);
|
|
32
|
+
return([v,si-old_si,si])
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
const ReadVarintLoop = (u8a,si,ctx) => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
36
|
+
let old_si = si;
|
|
37
|
+
let v = 0n;
|
|
38
|
+
let shift = 0n;
|
|
39
|
+
let has_another_byte = _f;
|
|
40
|
+
do {
|
|
41
|
+
let byte = BigInt(u8a[si]);
|
|
42
|
+
has_another_byte = byte & 0x80n;
|
|
43
|
+
if(shift < 32n) {
|
|
44
|
+
v |= (byte & 0x7Fn) << shift;
|
|
45
|
+
shift = shift +7n;
|
|
46
|
+
} else {
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
++si;
|
|
50
|
+
} while(has_another_byte);
|
|
51
|
+
return([Number(v),si-old_si,si])
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
const ReadVarint = ReadVarintLoop; // in js-layer no need unroll
|
|
55
55
|
|
|
56
56
|
const ReadHeader = (u8a,si,ctx) => {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
57
|
+
let old_si = si;
|
|
58
|
+
++si; // tag
|
|
59
|
+
let kLatestVersion = u8a[si];
|
|
60
|
+
++si;
|
|
61
|
+
return([kLatestVersion,si-old_si,si])
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
const ReadTag = (u8a,si,ctx) => {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
65
|
+
let old_si = si;
|
|
66
|
+
let tag;
|
|
67
|
+
do {
|
|
68
|
+
tag = u8a[si];
|
|
69
|
+
++si;
|
|
70
|
+
} while(tag === SerializationTag.kPadding);
|
|
71
|
+
return([tag,si-old_si,si])
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
const ReadZigZag = (u8a,si,ctx,decode=_zigzag.decd) => {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
let old_si = si;
|
|
76
|
+
let a3 = ReadVarint(u8a,si,ctx);
|
|
77
|
+
let unsigned = a3[0];
|
|
78
|
+
si = a3[2];
|
|
79
|
+
let v = decode(unsigned);
|
|
80
|
+
return([v,si-old_si,si])
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
|
|
84
84
|
const ReadDouble = (u8a,si,ctx) => {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
let dv = new DataView(u8a.buffer,u8a.byteOffset,u8a.byteLength);
|
|
86
|
+
let v = dv.getFloat64(si,_t);
|
|
87
|
+
si = si+8;
|
|
88
|
+
return([v,8,si])
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
const ReadRawBytes = (u8a,si,sz,ctx) => {
|
|
92
92
|
let old_si = si;
|
|
93
|
-
let nu8a = new Uint8Array(u8a.buffer,si,sz);
|
|
93
|
+
let nu8a = new Uint8Array(u8a.buffer, u8a.byteOffset+si,sz);
|
|
94
94
|
si = si + sz;
|
|
95
|
-
return([nu8a,sz,si])
|
|
96
|
-
}
|
|
95
|
+
return([nu8a,sz,si])
|
|
96
|
+
}
|
|
97
|
+
|
|
97
98
|
|
|
98
99
|
const ReadByte = (u8a,si,ctx) => {
|
|
99
|
-
|
|
100
|
-
|
|
100
|
+
++si;
|
|
101
|
+
return([u8a[i],1,si])
|
|
101
102
|
}
|
|
102
103
|
|
|
103
104
|
const ReadUint32 = (u8a,si,ctx) => ReadVarint(u8a,si,ctx);
|
|
@@ -112,492 +113,491 @@ const ReadBigInt = (u8a,si,ctx) => {
|
|
|
112
113
|
let byte_len = bitfield >> 1;
|
|
113
114
|
si = a3[2];
|
|
114
115
|
////
|
|
115
|
-
let data_si = si;
|
|
116
116
|
a3 = ReadRawBytes(u8a,si,byte_len,ctx);
|
|
117
117
|
let nu8a = a3[0];
|
|
118
|
-
let dv = new DataView(nu8a.buffer);
|
|
118
|
+
let dv = new DataView(nu8a.buffer,nu8a.byteOffset,nu8a.byteLength);
|
|
119
119
|
let bi = 0n;
|
|
120
120
|
let mul = 1n;
|
|
121
121
|
let bi_len = byte_len /8;
|
|
122
122
|
for(let i =0;i<bi_len;++i) {
|
|
123
|
-
let nbi = dv.getBigUint64(
|
|
123
|
+
let nbi = dv.getBigUint64(8*i,_t);
|
|
124
124
|
bi = bi + (nbi * mul);
|
|
125
125
|
mul = mul * BI_MUL;
|
|
126
|
-
data_si = data_si + 8;
|
|
127
126
|
}
|
|
128
127
|
if(sign === 1) { bi = -bi;} else {}
|
|
129
128
|
si = a3[2];
|
|
130
129
|
return([bi,si-old_si,si])
|
|
131
130
|
}
|
|
132
131
|
|
|
132
|
+
|
|
133
133
|
const ReadOneByteString = (u8a,si,ctx) => {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
134
|
+
let old_si = si;
|
|
135
|
+
let a3 = ReadVarint(u8a,si,ctx);
|
|
136
|
+
let blen = a3[0];
|
|
137
|
+
si = a3[2];
|
|
138
|
+
let s = _misc.Latin1U8aToStr(u8a,si,blen);
|
|
139
|
+
si += blen;
|
|
140
|
+
return([s,si-old_si,si])
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
const ReadTwoByteString = (u8a,si,ctx) => {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
144
|
+
let old_si = si;
|
|
145
|
+
let a3 = ReadVarint(u8a,si,ctx);
|
|
146
|
+
let blen = a3[0];
|
|
147
|
+
si = a3[2];
|
|
148
|
+
let s = _misc.JstrU8aToStr(u8a,si,blen);
|
|
149
|
+
si += blen;
|
|
150
|
+
return([s,si-old_si,si])
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
const ReadUtf8String = (u8a,si,ctx) => {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
154
|
+
let old_si = si;
|
|
155
|
+
let a3 = ReadVarint(u8a,si,ctx);
|
|
156
|
+
let blen = a3[0];
|
|
157
|
+
si = a3[2];
|
|
158
|
+
let s = _misc.Utf8U8aToStr(u8a,si,blen);
|
|
159
|
+
si += blen;
|
|
160
|
+
return([s,si-old_si,si])
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
|
|
164
164
|
|
|
165
165
|
const ReadJSDate = (u8a,si,ctx) => {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
166
|
+
let old_si = si;
|
|
167
|
+
let a3 = ReadDouble(u8a,si,ctx);
|
|
168
|
+
let v = a3[0];
|
|
169
|
+
let dt = new Date(v);
|
|
170
|
+
si = a3[2];
|
|
171
|
+
ctx.AddObjectWithID(dt);
|
|
172
|
+
return([dt,si-old_si,si])
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
|
|
176
176
|
const ReadJSPrimitiveWrapper = (u8a,si,tag,ctx) => {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
177
|
+
let old_si = si;
|
|
178
|
+
let v;
|
|
179
|
+
switch (tag) {
|
|
180
|
+
case SerializationTag.kTrueObject: {v = new Boolean(_t);break;}
|
|
181
|
+
case SerializationTag.kFalseObject: {v = new Boolean(_f);break;}
|
|
182
|
+
case SerializationTag.kNumberObject: {
|
|
183
|
+
let a3 = ReadDouble(u8a,si,ctx);
|
|
184
|
+
let num = a3[0];
|
|
185
|
+
si = a3[2];
|
|
186
|
+
v = new Number(num);
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
case SerializationTag.kStringObject: {
|
|
190
|
+
let a3 = ReadString(u8a,si,ctx);
|
|
191
|
+
let s = a3[0];
|
|
192
|
+
si = a3[2];
|
|
193
|
+
v = new String(s);
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
case SerializationTag.kBigIntObject: {
|
|
197
|
+
let a3 = ReadBigInt(u8a,si,ctx);
|
|
198
|
+
let bi = a3[0];
|
|
199
|
+
si = a3[2];
|
|
200
|
+
// this is impossible in js-layer
|
|
201
|
+
//v = new BigInt(bi);
|
|
202
|
+
v = CreatFakeCantBeSered("BigInt",bi);
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
default: {}
|
|
206
|
+
}
|
|
207
|
+
ctx.AddObjectWithID(v);
|
|
208
|
+
return([v,si-old_si,si])
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
|
|
212
212
|
const ReadJSError = (u8a,si,ctx) => {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
213
|
+
let old_si = si;
|
|
214
|
+
let message = _u;
|
|
215
|
+
let stack = _u;
|
|
216
|
+
let cause = _u;
|
|
217
|
+
let done = _f;
|
|
218
|
+
let ctor = Error;
|
|
219
|
+
////
|
|
220
|
+
while (!done) {
|
|
221
|
+
let a3 = ReadVarint(u8a,si,ctx);
|
|
222
|
+
let tag = a3[0];
|
|
223
|
+
si = a3[2];
|
|
224
|
+
switch (tag) {
|
|
225
|
+
case ErrorTag.kEvalErrorPrototype: {ctor=EvalError; break;}
|
|
226
|
+
case ErrorTag.kRangeErrorPrototype: {ctor=RangeError; break;}
|
|
227
|
+
case ErrorTag.kReferenceErrorPrototype: {ctor=ReferenceError; break;}
|
|
228
|
+
case ErrorTag.kSyntaxErrorPrototype: {ctor=SyntaxError; break;}
|
|
229
|
+
case ErrorTag.kTypeErrorPrototype: {ctor=TypeError; break;}
|
|
230
|
+
case ErrorTag.kUriErrorPrototype: {ctor=URIError; break;}
|
|
231
|
+
case ErrorTag.kMessage: {
|
|
232
|
+
let a3 = ReadString(u8a,si,ctx);
|
|
233
|
+
message = a3[0];
|
|
234
|
+
si = a3[2];
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
case ErrorTag.kCause: {
|
|
238
|
+
let a3 = ReadObject(u8a,si,ctx);
|
|
239
|
+
cause = a3[0];
|
|
240
|
+
si = a3[2];
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
case ErrorTag.kStack: {
|
|
244
|
+
let a3 = ReadString(u8a,si,ctx);
|
|
245
|
+
stack = a3[0];
|
|
246
|
+
si = a3[2];
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
case ErrorTag.kEnd: {
|
|
250
|
+
done = _t;
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
default:{}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
let err;
|
|
258
|
+
if(cause) {
|
|
259
|
+
err = new ctor(message,{cause})
|
|
260
|
+
} else {
|
|
261
|
+
err = new ctor(message)
|
|
262
|
+
}
|
|
263
|
+
err.stack = stack;
|
|
264
|
+
ctx.AddObjectWithID(err);
|
|
265
|
+
return([err,si-old_si,si])
|
|
266
266
|
}
|
|
267
267
|
|
|
268
268
|
const ReadString = (u8a,si,ctx) => {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
269
|
+
let old_si = si;
|
|
270
|
+
let a3 = ReadTag(u8a,si,ctx);
|
|
271
|
+
let tag = a3[0];
|
|
272
|
+
si = a3[2];
|
|
273
|
+
switch(tag) {
|
|
274
|
+
case SerializationTag.kOneByteString: {
|
|
275
|
+
a3 = ReadOneByteString(u8a,si,ctx);
|
|
276
|
+
si = a3[2];
|
|
277
|
+
return([a3[0],si-old_si,si]);
|
|
278
|
+
}
|
|
279
|
+
case SerializationTag.kTwoByteString: {
|
|
280
|
+
a3 = ReadTwoByteString(u8a,si,ctx);
|
|
281
|
+
si = a3[2];
|
|
282
|
+
return([a3[0],si-old_si,si]);
|
|
283
|
+
}
|
|
284
|
+
case SerializationTag.kUtf8String: {
|
|
285
|
+
a3 = ReadUtf8String(u8a,si,ctx);
|
|
286
|
+
si = a3[2];
|
|
287
|
+
return([a3[0],si-old_si,si]);
|
|
288
|
+
}
|
|
289
|
+
default: {
|
|
290
|
+
thrw_str(ERRD.must_be_str)
|
|
291
|
+
}
|
|
291
292
|
}
|
|
292
|
-
}
|
|
293
293
|
}
|
|
294
294
|
|
|
295
295
|
|
|
296
296
|
const ReadJSRegExp = (u8a,si,ctx) => {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
297
|
+
let old_si = si;
|
|
298
|
+
let a3 = ReadString(u8a,si,ctx);
|
|
299
|
+
let ptrn = a3[0];
|
|
300
|
+
si = a3[2];
|
|
301
|
+
a3 = ReadVarint(u8a,si,ctx);
|
|
302
|
+
let flags = a3[0];
|
|
303
|
+
flags = _rgx_flag.n2s(flags);
|
|
304
|
+
si = a3[2];
|
|
305
|
+
let rgx = new RegExp(ptrn,flags);
|
|
306
|
+
ctx.AddObjectWithID(rgx);
|
|
307
|
+
return([rgx,si-old_si,si])
|
|
308
308
|
}
|
|
309
309
|
|
|
310
310
|
const ReadJSSet = (u8a,si,ctx)=> {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
311
|
+
let old_si = si;
|
|
312
|
+
let st = new Set();
|
|
313
|
+
ctx.AddObjectWithID(st);
|
|
314
|
+
let sz = 0;
|
|
315
|
+
while (_t) {
|
|
316
|
+
let rtrn_si = si;
|
|
317
|
+
let a3 = ReadTag(u8a,si,ctx);
|
|
318
|
+
let tag = a3[0];
|
|
319
|
+
si = a3[2];
|
|
320
|
+
if (tag === SerializationTag.kEndJSSet) {
|
|
321
|
+
break;
|
|
322
|
+
} else {
|
|
323
|
+
si = rtrn_si;
|
|
324
|
+
a3 = ReadObject(u8a,si,ctx);
|
|
325
|
+
st.add(a3[0]);
|
|
326
|
+
si = a3[2];
|
|
327
|
+
}
|
|
328
|
+
sz++;
|
|
329
|
+
}
|
|
330
|
+
let a3 = ReadVarint(u8a,si,ctx); // in js-layer no-need to check
|
|
331
|
+
si = a3[2];
|
|
332
|
+
return([st,si-old_si,si,a3[0]/*just for check*/])
|
|
333
333
|
}
|
|
334
334
|
|
|
335
335
|
const ReadJSMap = (u8a,si,ctx) => {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
336
|
+
let old_si = si;
|
|
337
|
+
let mp = new Map();
|
|
338
|
+
ctx.AddObjectWithID(mp);
|
|
339
|
+
let sz = 0;
|
|
340
|
+
while (_t) {
|
|
341
|
+
let rtrn_si = si;
|
|
342
|
+
let a3 = ReadTag(u8a,si,ctx);
|
|
343
|
+
si = a3[2];
|
|
344
|
+
let tag = a3[0];
|
|
345
|
+
if (tag === SerializationTag.kEndJSMap) {
|
|
346
|
+
break;
|
|
347
|
+
} else {
|
|
348
|
+
si = rtrn_si;
|
|
349
|
+
a3 = ReadObject(u8a,si,ctx);
|
|
350
|
+
let mpk = a3[0];
|
|
351
|
+
si = a3[2];
|
|
352
|
+
a3 = ReadObject(u8a,si,ctx);
|
|
353
|
+
let mpv = a3[0];
|
|
354
|
+
si = a3[2];
|
|
355
|
+
mp.set(mpk,mpv);
|
|
356
|
+
sz = sz+2;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
let a3 = ReadVarint(u8a,si,ctx);
|
|
360
|
+
si = a3[2];
|
|
361
|
+
return([mp,si-old_si,si,a3[0]/*just for check*/])
|
|
362
362
|
}
|
|
363
363
|
|
|
364
364
|
const ReadHostObject = (u8a,si,ctx) => {
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
365
|
+
let old_si = si;
|
|
366
|
+
let a3 = ReadUint32(u8a,si,ctx);
|
|
367
|
+
let typeIndex = a3[0];
|
|
368
|
+
let ctor = ArrayBufferViewIndexToCtor[typeIndex];
|
|
369
|
+
let BYTES_PER_ELEMENT = ctor.BYTES_PER_ELEMENT ;
|
|
370
370
|
|
|
371
|
-
|
|
372
|
-
|
|
371
|
+
si = a3[2];
|
|
372
|
+
a3 = ReadUint32(u8a,si,ctx);
|
|
373
373
|
|
|
374
374
|
|
|
375
375
|
let byteLength = a3[0];
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
376
|
+
si = a3[2];
|
|
377
|
+
let offset = si;
|
|
378
|
+
a3 = ReadRawBytes(u8a,si,byteLength,ctx);
|
|
379
|
+
|
|
380
|
+
|
|
381
381
|
let buf;
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
382
|
+
if(si%BYTES_PER_ELEMENT === 0) {
|
|
383
|
+
buf = new ctor(a3[0].buffer,si,byteLength);
|
|
384
|
+
} else {
|
|
385
|
+
//need copy
|
|
386
|
+
buf = new ctor(a3[0].buffer.slice(si,si+byteLength));
|
|
387
|
+
}
|
|
388
|
+
si = a3[2];
|
|
389
|
+
ctx.AddObjectWithID(buf);
|
|
390
|
+
return([buf,si-old_si,si])
|
|
391
391
|
}
|
|
392
392
|
|
|
393
393
|
const ReadJSArrayBufferView = ReadHostObject; //compatible to nodejs
|
|
394
394
|
|
|
395
395
|
|
|
396
396
|
const ReadJSArrayBuffer = (u8a,si,is_resizable,ctx) => {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
397
|
+
let old_si = si;
|
|
398
|
+
let a3 = ReadVarint(u8a,si,ctx);
|
|
399
|
+
let byte_length = a3[0];
|
|
400
|
+
si = a3[2];
|
|
401
|
+
let max_byte_length = byte_length;
|
|
402
|
+
let ab;
|
|
403
|
+
if(is_resizable) {
|
|
404
|
+
let a3 = ReadVarint(u8a,si,ctx);
|
|
405
|
+
max_byte_length = a3[0];
|
|
406
|
+
ab = new ArrayBuffer(byte_length,{maxByteLength:max_byte_length});
|
|
407
|
+
si = a3[2];
|
|
408
|
+
_ab._cp(u8a.buffer,si,byte_length,ab,0);
|
|
409
|
+
si = si + byte_length;
|
|
410
|
+
} else {
|
|
411
|
+
let total_ab = u8a.buffer;
|
|
412
|
+
ab = total_ab.slice(si,si+byte_length);
|
|
413
|
+
si = si + byte_length;
|
|
414
|
+
}
|
|
415
|
+
ctx.AddObjectWithID(ab);
|
|
416
|
+
return([ab,si-old_si,si])
|
|
417
417
|
}
|
|
418
418
|
|
|
419
419
|
const ReadJSObjectProperties = (u8a,si,o,end_tag,is_ary,ctx) => {
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
420
|
+
let old_si = si;
|
|
421
|
+
let num_properties = 0;
|
|
422
|
+
while(_t) {
|
|
423
423
|
let rtrn_si = si;
|
|
424
424
|
let a3 = ReadTag(u8a,si,ctx);
|
|
425
425
|
let tag = a3[0];
|
|
426
426
|
si = a3[2];
|
|
427
427
|
if(tag !== end_tag) {
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
428
|
+
si = rtrn_si;
|
|
429
|
+
a3 = ReadObject(u8a,si,ctx);
|
|
430
|
+
let key = a3[0];
|
|
431
|
+
si = a3[2];
|
|
432
|
+
a3 = ReadObject(u8a,si,ctx);
|
|
433
|
+
let val = a3[0];
|
|
434
|
+
si = a3[2];
|
|
435
|
+
o[key] = val;
|
|
436
|
+
++num_properties;
|
|
437
437
|
} else {
|
|
438
|
-
|
|
438
|
+
return([num_properties,si-old_si,si])
|
|
439
439
|
}
|
|
440
|
-
|
|
440
|
+
}
|
|
441
441
|
}
|
|
442
442
|
|
|
443
443
|
const ReadJSObject = (u8a,si,ctx) => {
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
444
|
+
let old_si = si;
|
|
445
|
+
let o = {};
|
|
446
|
+
ctx.AddObjectWithID(o);
|
|
447
|
+
let a3 = ReadJSObjectProperties(u8a,si,o,SerializationTag.kEndJSObject,_f,ctx);
|
|
448
|
+
let num_properties = a3[0];
|
|
449
|
+
si = a3[2];
|
|
450
|
+
a3 = ReadVarint(u8a,si,ctx); // expected_num_properties
|
|
451
|
+
si = a3[2];
|
|
452
|
+
return([o,si-old_si,si]) // we dont verify expected_num_properties
|
|
453
453
|
}
|
|
454
454
|
|
|
455
455
|
const ReadJSArray = (u8a,si,begin_tag,ctx) => {
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
456
|
+
let old_si = si;
|
|
457
|
+
let a3 = ReadVarint(u8a,si,ctx);
|
|
458
|
+
let length = a3[0];
|
|
459
|
+
si = a3[2];
|
|
460
|
+
let a = [];
|
|
461
|
+
ctx.AddObjectWithID(a);
|
|
462
|
+
for(let i=0;i<length;++i) {
|
|
463
|
+
a3 = ReadObject(u8a,si,ctx);
|
|
464
|
+
a.push(a3[0]);
|
|
465
|
+
si = a3[2];
|
|
466
|
+
}
|
|
467
|
+
/////
|
|
468
|
+
let end_tag = (begin_tag === SerializationTag.kBeginDenseJSArray)?SerializationTag.kEndDenseJSArray:SerializationTag.kEndSparseJSArray;
|
|
469
|
+
a3 = ReadJSObjectProperties(u8a,si,a, end_tag, _t,ctx);
|
|
470
|
+
si = a3[2];
|
|
471
|
+
a3 = ReadVarint(u8a,si,ctx); // we dont check expected_num_properties
|
|
472
|
+
si = a3[2];
|
|
473
|
+
a3 = ReadVarint(u8a,si,ctx); // we dont check expected_length
|
|
474
|
+
si = a3[2];
|
|
475
|
+
return([a,si-old_si,si])
|
|
476
476
|
}
|
|
477
477
|
|
|
478
478
|
|
|
479
479
|
const ReadObjectInternal = (u8a,si,ctx) => {
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
480
|
+
let old_si = si;
|
|
481
|
+
let a3 = ReadTag(u8a,si,ctx);
|
|
482
|
+
let tag = a3[0];
|
|
483
|
+
si = a3[2];
|
|
484
|
+
switch (tag) {
|
|
485
|
+
case SerializationTag.kTheHole: {return([_u,si-old_si,si]);}
|
|
486
|
+
case SerializationTag.kUndefined: {return([_u,si-old_si,si]);}
|
|
487
|
+
case SerializationTag.kNull: {return([_n,si-old_si,si]);}
|
|
488
|
+
case SerializationTag.kTrue: {return([_t,si-old_si,si]);}
|
|
489
|
+
case SerializationTag.kFalse: {return([_f,si-old_si,si]);}
|
|
490
|
+
case SerializationTag.kInt32: {
|
|
491
|
+
a3 = ReadZigZag(u8a,si,ctx);
|
|
492
|
+
si = a3[2];
|
|
493
|
+
return([a3[0],si-old_si,si]);
|
|
494
|
+
}
|
|
495
|
+
case SerializationTag.kUint32: {
|
|
496
|
+
a3 = ReadVarint(u8a,si,ctx);
|
|
497
|
+
si = a3[2];
|
|
498
|
+
return([a3[0],si-old_si,si]);
|
|
499
|
+
}
|
|
500
|
+
case SerializationTag.kDouble: {
|
|
501
|
+
a3 = ReadDouble(u8a,si,ctx);
|
|
502
|
+
si = a3[2];
|
|
503
|
+
return([a3[0],si-old_si,si]);
|
|
504
|
+
}
|
|
505
|
+
case SerializationTag.kBigInt: {
|
|
506
|
+
a3 = ReadBigInt(u8a,si,ctx);
|
|
507
|
+
si = a3[2];
|
|
508
|
+
return([a3[0],si-old_si,si]);
|
|
509
|
+
}
|
|
510
|
+
case SerializationTag.kOneByteString: {
|
|
511
|
+
a3 = ReadOneByteString(u8a,si,ctx);
|
|
512
|
+
si = a3[2];
|
|
513
|
+
return([a3[0],si-old_si,si]);
|
|
514
|
+
}
|
|
515
|
+
case SerializationTag.kTwoByteString: {
|
|
516
|
+
a3 = ReadTwoByteString(u8a,si,ctx);
|
|
517
|
+
si = a3[2];
|
|
518
|
+
return([a3[0],si-old_si,si]);
|
|
519
|
+
}
|
|
520
|
+
case SerializationTag.kUtf8String: {
|
|
521
|
+
a3 = ReadUtf8String(u8a,si,ctx);
|
|
522
|
+
si = a3[2];
|
|
523
|
+
return([a3[0],si-old_si,si]);
|
|
524
|
+
}
|
|
525
|
+
case SerializationTag.kBeginJSObject: {
|
|
526
|
+
a3 = ReadJSObject(u8a,si,ctx);
|
|
527
|
+
si = a3[2];
|
|
528
|
+
return([a3[0],si-old_si,si]);
|
|
529
|
+
}
|
|
530
|
+
case SerializationTag.kBeginDenseJSArray :
|
|
531
|
+
case SerializationTag.kBeginSparseJSArray: { // treat sparse same as dense
|
|
532
|
+
a3 = ReadJSArray(u8a,si,tag,ctx);
|
|
533
|
+
si = a3[2];
|
|
534
|
+
return([a3[0],si-old_si,si]);
|
|
535
|
+
}
|
|
536
|
+
case SerializationTag.kDate: {
|
|
537
|
+
a3 = ReadJSDate(u8a,si,ctx);
|
|
538
|
+
si = a3[2];
|
|
539
|
+
return([a3[0],si-old_si,si]);
|
|
540
|
+
}
|
|
541
|
+
case SerializationTag.kBeginJSMap: {
|
|
542
|
+
a3 = ReadJSMap(u8a,si,ctx);
|
|
543
|
+
si = a3[2];
|
|
544
|
+
return([a3[0],si-old_si,si]);
|
|
545
|
+
}
|
|
546
|
+
case SerializationTag.kBeginJSSet: {
|
|
547
|
+
a3 = ReadJSSet(u8a,si,ctx);
|
|
548
|
+
si = a3[2];
|
|
549
|
+
return([a3[0],si-old_si,si]);
|
|
550
|
+
}
|
|
551
|
+
case SerializationTag.kObjectReference: {
|
|
552
|
+
a3 = ReadVarint(u8a,si,ctx);
|
|
553
|
+
let id = a3[0];
|
|
554
|
+
si = a3[2];
|
|
555
|
+
let v = ctx.GetObjectWithID(id);
|
|
556
|
+
return([v,si-old_si,si]);
|
|
557
|
+
}
|
|
558
|
+
case SerializationTag.kRegExp: {
|
|
559
|
+
a3 = ReadJSRegExp(u8a,si,ctx);
|
|
560
|
+
si = a3[2];
|
|
561
|
+
return([a3[0],si-old_si,si]);
|
|
562
|
+
}
|
|
563
|
+
case SerializationTag.kSharedArrayBuffer: //treat sab as normal ab
|
|
564
|
+
case SerializationTag.kArrayBuffer: {
|
|
565
|
+
let is_resizable = _f;
|
|
566
|
+
a3 = ReadJSArrayBuffer(u8a,si,is_resizable,ctx);
|
|
567
|
+
si = a3[2];
|
|
568
|
+
return([a3[0],si-old_si,si]);
|
|
569
|
+
}
|
|
570
|
+
case SerializationTag.kResizableArrayBuffer: {
|
|
571
|
+
let is_resizable = _t;
|
|
572
|
+
a3 = ReadJSArrayBuffer(u8a,si,is_resizable,ctx);
|
|
573
|
+
si = a3[2];
|
|
574
|
+
return([a3[0],si-old_si,si]);
|
|
575
|
+
}
|
|
576
|
+
case SerializationTag.kError: {
|
|
577
|
+
a3 = ReadJSError(u8a,si,ctx);
|
|
578
|
+
si = a3[2];
|
|
579
|
+
return([a3[0],si-old_si,si]);
|
|
580
|
+
}
|
|
581
|
+
case SerializationTag.kArrayBufferView: //corresponding to nodejs
|
|
582
|
+
case SerializationTag.kHostObject: {
|
|
583
|
+
a3 = ReadHostObject(u8a,si,ctx);
|
|
584
|
+
si = a3[2];
|
|
585
|
+
return([a3[0],si-old_si,si]);
|
|
586
|
+
}
|
|
587
|
+
case SerializationTag.kTrueObject:
|
|
588
|
+
case SerializationTag.kFalseObject:
|
|
589
|
+
case SerializationTag.kNumberObject:
|
|
590
|
+
case SerializationTag.kBigIntObject:
|
|
591
|
+
case SerializationTag.kStringObject: {
|
|
592
|
+
a3 = ReadJSPrimitiveWrapper(u8a,si,tag,ctx);
|
|
593
|
+
si = a3[2];
|
|
594
|
+
return([a3[0],si-old_si,si]);
|
|
595
|
+
}
|
|
596
|
+
default: {
|
|
597
|
+
console.log("why unknown",tag,si,u8a);
|
|
598
|
+
return([CreatUnknown(),si-old_si,si])
|
|
599
|
+
}
|
|
595
600
|
}
|
|
596
|
-
default: {
|
|
597
|
-
console.log("why unknown",tag,si,u8a);
|
|
598
|
-
return([CreatUnknown(),si-old_si,si])
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
601
|
}
|
|
602
602
|
|
|
603
603
|
|
|
@@ -605,47 +605,47 @@ const ReadObjectInternal = (u8a,si,ctx) => {
|
|
|
605
605
|
const ReadObject = (u8a,si,ctx) => ReadObjectInternal(u8a,si,ctx); //same as ReadObjectInternal , coz ArrayBufferView AS HostObject
|
|
606
606
|
|
|
607
607
|
|
|
608
|
-
const decd = (
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
608
|
+
const decd = (o) => { //o: arraybuffer OR uint8array
|
|
609
|
+
let u8a = (o.buffer!== undefined)? o : new Uint8Array(o);
|
|
610
|
+
let ctx = creat_rctx();
|
|
611
|
+
let si = 0;
|
|
612
|
+
let a3 = ReadHeader(u8a,si,ctx);
|
|
613
|
+
si = a3[2];
|
|
614
|
+
a3 = ReadObject(u8a,si,ctx);
|
|
615
|
+
return(a3[0])
|
|
616
616
|
}
|
|
617
617
|
|
|
618
618
|
|
|
619
619
|
module.exports = {
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
620
|
+
ERRD,
|
|
621
|
+
////
|
|
622
|
+
ReadVarintLoopIfLshiftWork,
|
|
623
|
+
ReadVarint,
|
|
624
|
+
ReadHeader,
|
|
625
|
+
ReadTag,
|
|
626
|
+
ReadZigZag,
|
|
627
|
+
ReadDouble,
|
|
628
|
+
ReadRawBytes,
|
|
629
|
+
ReadByte,
|
|
630
|
+
ReadUint32,
|
|
631
|
+
ReadBigInt,BI_MUL,
|
|
632
|
+
ReadOneByteString,
|
|
633
|
+
ReadTwoByteString,
|
|
634
|
+
ReadUtf8String,
|
|
635
|
+
ReadJSDate,
|
|
636
|
+
ReadString,
|
|
637
|
+
ReadJSRegExp,
|
|
638
|
+
ReadJSError,
|
|
639
|
+
ReadJSSet,
|
|
640
|
+
ReadJSMap,
|
|
641
|
+
ReadHostObject,
|
|
642
|
+
ReadJSArrayBufferView,
|
|
643
|
+
ReadJSArrayBuffer,
|
|
644
|
+
ReadJSObjectProperties,
|
|
645
|
+
ReadObjectInternal,
|
|
646
|
+
ReadObject,
|
|
647
|
+
ReadJSObject,
|
|
648
|
+
ReadJSArray,
|
|
649
|
+
////
|
|
650
|
+
decd
|
|
651
651
|
}
|