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.
Files changed (4) hide show
  1. package/DIST/dist.js +7 -2
  2. package/package.json +1 -1
  3. package/r.js +502 -502
  4. 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
- must_be_str:"must_be_str"
12
+ must_be_str:"must_be_str"
13
13
  }
14
14
 
15
15
 
16
16
  const ReadVarintLoopIfLshiftWork = (u8a,si,ctx) => {
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])
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
- 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])
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
- let old_si = si;
58
- ++si; // tag
59
- let kLatestVersion = u8a[si];
60
- ++si;
61
- return([kLatestVersion,si-old_si,si])
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
- 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])
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
- 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])
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
- let dv = new DataView(u8a.buffer);
86
- let v = dv.getFloat64(si,_t);
87
- si = si+8;
88
- return([v,8,si])
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
- ++si;
100
- return([u8a[i],1,si])
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(data_si,_t);
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
- 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])
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
- 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])
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
- 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])
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
- 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])
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
- 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])
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
- 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])
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
- 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)
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
- 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])
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
- 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*/])
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
- 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*/])
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
- 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 ;
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
- si = a3[2];
372
- a3 = ReadUint32(u8a,si,ctx);
371
+ si = a3[2];
372
+ a3 = ReadUint32(u8a,si,ctx);
373
373
 
374
374
 
375
375
  let byteLength = a3[0];
376
- si = a3[2];
377
- let offset = si;
378
- a3 = ReadRawBytes(u8a,si,byteLength,ctx);
379
-
380
-
376
+ si = a3[2];
377
+ let offset = si;
378
+ a3 = ReadRawBytes(u8a,si,byteLength,ctx);
379
+
380
+
381
381
  let buf;
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])
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
- 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])
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
- let old_si = si;
421
- let num_properties = 0;
422
- while(_t) {
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
- 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;
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
- return([num_properties,si-old_si,si])
438
+ return([num_properties,si-old_si,si])
439
439
  }
440
- }
440
+ }
441
441
  }
442
442
 
443
443
  const ReadJSObject = (u8a,si,ctx) => {
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
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
- 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])
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
- 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]);
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 = (ab) => {
609
- let u8a = new Uint8Array(ab);
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])
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
- 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
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
  }