nv-buf-storage 1.3.4 → 1.3.6
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/nv-buf-storage-bw.js +11 -7
- package/README.md +34 -0
- package/TEST/check-blob.js +19 -0
- package/TEST/check-ta.js +1 -1
- package/TEST/check-tenum-k.js +22 -0
- package/const.js +97 -0
- package/index.d.ts +18 -0
- package/index.js +9 -6
- package/mthds/cmmn.js +519 -112
- package/package.json +5 -3
- package/util.js +3 -3
package/mthds/cmmn.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
const _TD = new TextDecoder();
|
|
2
2
|
const _TE = new TextEncoder();
|
|
3
3
|
const {tacls_or_abcls_to_mthd_hint,taclsnm_to_tbrief} = require("nv-facutil-slct-ta");
|
|
4
|
-
const _v8serde
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
4
|
+
const _v8serde = require("nv-buf-serde");
|
|
5
|
+
const _tname = require("nv-type-name");
|
|
6
|
+
const { TBRIEF_TO_MTHD_HINT,_COND_IS_NODE_ENV,WELLKNOWN_SYM_ST,V8_SERIALABLE_NONTA_OBJ_CLSNMS,V8_UNSERIALABLE_OBJ_CLSNMS} = require("../const");
|
|
7
|
+
const { creat_sz_buf_for_dump,is_g} = require("../util");
|
|
8
8
|
|
|
9
9
|
function _calc_datasz_for_dump(compress=true) {
|
|
10
10
|
var datasz;
|
|
@@ -76,9 +76,8 @@ async function dump (dst_fn,compress=true) {
|
|
|
76
76
|
}
|
|
77
77
|
dump.HELP = ["flsz(f64le)","fl(u8a)","datasz(f64le)","data(u8a)"];
|
|
78
78
|
|
|
79
|
-
function dloc([si,ei]) {
|
|
80
|
-
|
|
81
|
-
}
|
|
79
|
+
function dloc([si,ei]) {return this._fl.dloc(si,ei);}
|
|
80
|
+
|
|
82
81
|
function rstr([si,ei]) {return _TD.decode(this._data.subarray(si,ei))}
|
|
83
82
|
function wstr(s) {
|
|
84
83
|
var mx_sz = s.length*3;
|
|
@@ -94,7 +93,80 @@ function wstr(s) {
|
|
|
94
93
|
function rjson([si,ei]) {return JSON.parse(this.rstr([si,ei]));}
|
|
95
94
|
function wjson(j) {return this.wstr(JSON.stringify(j) );}
|
|
96
95
|
|
|
96
|
+
function _w_tenum_key(si,ei,tenum,k) {
|
|
97
|
+
this._dv.setUint16(si,tenum,true);
|
|
98
|
+
var {__,written} = _TE.encodeInto(k,this._data.subarray(si+2,ei));
|
|
99
|
+
this._fl.dloc(si+2+written,ei);
|
|
100
|
+
return [si,si+2+written];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function w_tenum_key(tenum,k) {
|
|
104
|
+
var mx_sz = 2+k.length*3;
|
|
105
|
+
var [si,ei] = this.aloc(mx_sz);
|
|
106
|
+
if(ei!== 0) {
|
|
107
|
+
return this._w_tenum_key(si,ei,tenum,k);
|
|
108
|
+
} else {
|
|
109
|
+
return [0,0]
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function r_tenum_key([si,ei]) {
|
|
114
|
+
var tenum = this._dv.getUint16(si,true);
|
|
115
|
+
var k = this.rstr([si+2,ei]);
|
|
116
|
+
return [tenum,k];
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function r_tenum_kutfu8a([si,ei]) {
|
|
120
|
+
var tenum = this._dv.getUint16(si,true);
|
|
121
|
+
var ku8a = this.ru8a([si+2,ei]);
|
|
122
|
+
return [tenum,ku8a];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
function _w_tenum_kutf8u8a(si,ei,tenum,ku8a) {
|
|
127
|
+
this._dv.setUint16(si,tenum,true);
|
|
128
|
+
this._data.set(ku8a,si+2);
|
|
129
|
+
return [si,ei];
|
|
130
|
+
}
|
|
131
|
+
function w_tenum_kutf8u8a(tenum,ku8a) {
|
|
132
|
+
var [si,ei] = this.aloc(2+ku8a.byteLength);
|
|
133
|
+
if(ei!== 0) {
|
|
134
|
+
return this._w_tenum_kutf8u8a(si,ei,tenum,ku8a);
|
|
135
|
+
} else {
|
|
136
|
+
return [0,0]
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
function rgy(rng) { return Symbol.for(this.rstr(rng));}
|
|
143
|
+
function rly_wn(rng) { return Symbol[this.rstr(rng)];}
|
|
144
|
+
|
|
145
|
+
function rsym(T,rng) {
|
|
146
|
+
if(T === "gy") {
|
|
147
|
+
return Symbol.for(this.rstr(rng));
|
|
148
|
+
} else {
|
|
149
|
+
//ly_wn
|
|
150
|
+
return Symbol[this.rstr(rng)];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function wgy(o) { return this.wstr(o.description);}
|
|
155
|
+
function wly_wn(o) { return this.wstr(o.description.split(".")[1]);}
|
|
156
|
+
function wsym(o,T) {
|
|
157
|
+
if(T === "gy") {
|
|
158
|
+
return this.wstr(o.description);
|
|
159
|
+
} else if(T === "ly_wn") {
|
|
160
|
+
return this.wstr(o.description.split(".")[1]);
|
|
161
|
+
} else {
|
|
162
|
+
//不支持存储 local-symbol
|
|
163
|
+
return [0,0]
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
|
|
97
168
|
|
|
169
|
+
////
|
|
98
170
|
function wta(ta,include_ab=true) {
|
|
99
171
|
var hint = tacls_or_abcls_to_mthd_hint(ta.constructor);
|
|
100
172
|
if(hint["?"]) {
|
|
@@ -109,16 +181,102 @@ function rta(Cls,rng) {
|
|
|
109
181
|
if(hint["?"]) {
|
|
110
182
|
return this?.[hint.r]?.(rng);
|
|
111
183
|
} else {
|
|
112
|
-
|
|
113
|
-
if(Cls === globalThis.Buffer){
|
|
114
|
-
return globalThis.Buffer.from(ta);
|
|
115
|
-
} else {
|
|
116
|
-
return ta;
|
|
117
|
-
}
|
|
184
|
+
return this[hint.r](rng);
|
|
118
185
|
}
|
|
119
186
|
}
|
|
120
187
|
|
|
121
188
|
|
|
189
|
+
|
|
190
|
+
async function wbwstream(rs$,offset) {
|
|
191
|
+
var reader = rs$.getReader();
|
|
192
|
+
while(true) {
|
|
193
|
+
const { value, done } = await reader.read();
|
|
194
|
+
if(done) {
|
|
195
|
+
return offset;
|
|
196
|
+
} else {
|
|
197
|
+
var u8a = value;
|
|
198
|
+
this._data.set(u8a,offset);
|
|
199
|
+
offset += u8a.byteLength;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
async function wblob(blob) {
|
|
205
|
+
var tstr = blob.type;
|
|
206
|
+
var tu8a = _TE.encode(tstr)
|
|
207
|
+
var tsz = tu8a.byteLength; //固定1字节
|
|
208
|
+
if(tsz>255) {return [0,0]} //type最大长度255
|
|
209
|
+
var data_sz = blob.size;
|
|
210
|
+
if(data_sz>2**53) {return [0,0]}
|
|
211
|
+
var sz = 1/*tsz*/ + tsz/*type-str*/ + 8/*data_sz*/ + data_sz;
|
|
212
|
+
var [si,ei] = this.aloc(sz);
|
|
213
|
+
if(ei!==0) {
|
|
214
|
+
var offset = si;
|
|
215
|
+
this._dv.setUint8(offset,tsz,true); offset+=1;
|
|
216
|
+
this._data.set(tu8a,offset); offset+=tsz;
|
|
217
|
+
this._dv.setFloat64(offset,data_sz,true); offset+=8;
|
|
218
|
+
var rs$ = blob.stream();
|
|
219
|
+
await this.wbwstream(rs$,offset);
|
|
220
|
+
return [si,ei]
|
|
221
|
+
} else {
|
|
222
|
+
return [0,0]
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function rblob([si,ei]) {
|
|
227
|
+
var offset = si;
|
|
228
|
+
var tsz = this._dv.getUint8(offset,true); offset+=1;
|
|
229
|
+
var tstr = this.rstr([offset,offset+tsz]); offset+=tsz;
|
|
230
|
+
var data_sz = this._dv.getFloat64(offset,true); offset+=8;
|
|
231
|
+
var u8a = this._data.subarray(offset,ei);
|
|
232
|
+
return new Blob([u8a],{type:tstr});
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
async function wfile(file) {
|
|
236
|
+
var tstr = file.type;
|
|
237
|
+
var tu8a = _TE.encode(tstr);
|
|
238
|
+
var tsz = tu8a.byteLength; //固定1字节
|
|
239
|
+
if(tsz>255) {return [0,0]} //type最大长度255
|
|
240
|
+
var nmstr = file.name;
|
|
241
|
+
var nmu8a = _TE.encode(nmstr);
|
|
242
|
+
var nmsz = nmu8a.byteLength; //固定2字节
|
|
243
|
+
if(nmsz>65535) {return [0,0]} //name最大长度65536
|
|
244
|
+
var mts = file.lastModified;
|
|
245
|
+
if(mts>2**53) {return [0,0]}
|
|
246
|
+
var data_sz = file.size;
|
|
247
|
+
if(data_sz>2**53) {return [0,0]}
|
|
248
|
+
var sz = 1/*tsz*/ + tsz/*type-str*/+ 2/*nmsz*/+ nmsz+ 8/*mts*/ + 8/*data_sz*/ + data_sz;
|
|
249
|
+
var [si,ei] = this.aloc(sz);
|
|
250
|
+
if(ei!==0) {
|
|
251
|
+
var offset = si;
|
|
252
|
+
this._dv.setUint8(offset,tsz,true); offset += 1;
|
|
253
|
+
this._data.set(tu8a,offset); offset += tsz;
|
|
254
|
+
this._dv.setUint16(offset,nmsz,true); offset += 2;
|
|
255
|
+
this._data.set(nmu8a,offset); offset += nmsz;
|
|
256
|
+
this._dv.setFloat64(offset,mts,true); offset += 8;
|
|
257
|
+
this._dv.setFloat64(offset,data_sz,true); offset += 8;
|
|
258
|
+
var rs$ = file.stream();
|
|
259
|
+
await this.wbwstream(rs$,offset);
|
|
260
|
+
return [si,ei]
|
|
261
|
+
} else {
|
|
262
|
+
return [0,0]
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
function rfile([si,ei]) {
|
|
267
|
+
var offset = si;
|
|
268
|
+
var tsz = this._dv.getUint8(offset,true); offset+=1;
|
|
269
|
+
var tstr = this.rstr([offset,offset+tsz]); offset+=tsz;
|
|
270
|
+
var nmsz = this._dv.getUint16(offset,true); offset+=2;
|
|
271
|
+
var nmstr = this.rstr([offset,offset+nmsz]); offset+=nmsz;
|
|
272
|
+
var mts = this._dv.getFloat64(offset,true); offset+=8;
|
|
273
|
+
var data_sz = this._dv.getFloat64(offset,true); offset+=8;
|
|
274
|
+
var u8a = this._data.subarray(offset,ei);
|
|
275
|
+
return new File([u8a],nmstr,{type:tstr,lastModified:mts});
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
|
|
122
280
|
function wo(o) {
|
|
123
281
|
var ab = _v8serde.ser(o);
|
|
124
282
|
var u8a = new Uint8Array(ab);
|
|
@@ -160,8 +318,6 @@ function wu8(num) {
|
|
|
160
318
|
return [0,0]
|
|
161
319
|
}
|
|
162
320
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
321
|
function wu16(num,algn=false) {
|
|
166
322
|
var si=0;ei=0;
|
|
167
323
|
if(algn) {
|
|
@@ -289,9 +445,17 @@ function wf64(num,algn=false) {
|
|
|
289
445
|
} else {
|
|
290
446
|
return [0,0]
|
|
291
447
|
}
|
|
448
|
+
}
|
|
292
449
|
|
|
450
|
+
function wmts(dt,algn=false) {
|
|
451
|
+
return this.wf64(dt.getTime(),algn);
|
|
452
|
+
}
|
|
453
|
+
function rmts(rng) {
|
|
454
|
+
var mts = this.rf64(rng);
|
|
455
|
+
return new Date(mts);
|
|
293
456
|
}
|
|
294
457
|
|
|
458
|
+
|
|
295
459
|
////typed-array
|
|
296
460
|
function ru8a([si,ei]) {return new Uint8Array (this._data.buffer,this._data.byteOffset+si, ei-si) ;}
|
|
297
461
|
function ru8ca([si,ei]) {return new Uint8ClampedArray (this._data.buffer,this._data.byteOffset+si, ei-si) ;}
|
|
@@ -305,6 +469,7 @@ function ri64a([si,ei]) {return new BigInt64Array (this._data.buffer,th
|
|
|
305
469
|
function rf32a([si,ei]) {return new globalThis.Float32Array(this._data.buffer,this._data.byteOffset+si,(ei-si)/4);}
|
|
306
470
|
function rf64a([si,ei]) {return new globalThis.Float64Array(this._data.buffer,this._data.byteOffset+si,(ei-si)/8);}
|
|
307
471
|
function rdv([si,ei]) {return new DataView (this._data.buffer,this._data.byteOffset+si, ei-si) ;}
|
|
472
|
+
function rbuf([si,ei]) {return globalThis.Buffer.from(this._data.buffer,this._data.byteOffset+si, ei-si)}
|
|
308
473
|
function _write_no_need_algn_typed_array(ta1b) {
|
|
309
474
|
var [si,ei] = this.aloc(ta1b.byteLength);
|
|
310
475
|
if(ei !== 0) {
|
|
@@ -314,7 +479,7 @@ function _write_no_need_algn_typed_array(ta1b) {
|
|
|
314
479
|
} else {
|
|
315
480
|
return [0,0];
|
|
316
481
|
}
|
|
317
|
-
}
|
|
482
|
+
}
|
|
318
483
|
function _write_need_algn_typed_array(ta) {
|
|
319
484
|
var [si,ei]= this.algn_aloc(ta.byteLength,ta.constructor.BYTES_PER_ELEMENT);
|
|
320
485
|
if(ei!== 0) {
|
|
@@ -324,61 +489,290 @@ function _write_need_algn_typed_array(ta) {
|
|
|
324
489
|
} else {
|
|
325
490
|
return [0,0]
|
|
326
491
|
}
|
|
492
|
+
}
|
|
493
|
+
function wbuf(buf) {return this._write_no_need_algn_typed_array(buf);}
|
|
494
|
+
//
|
|
495
|
+
|
|
496
|
+
function _w_tenum_ko(tenum,k,v) {
|
|
497
|
+
var [ksi,kei] = this.w_tenum_key(tenum,k);
|
|
498
|
+
if(kei !== 0) {
|
|
499
|
+
var [vsi,vei] = this.wo(v);
|
|
500
|
+
if(vei !==0) {
|
|
501
|
+
return [ksi,kei,vsi,vei];
|
|
502
|
+
} else {
|
|
503
|
+
this._fl.dloc(ksi,kei);
|
|
504
|
+
return [0,0,0,0]
|
|
505
|
+
}
|
|
506
|
+
} else {
|
|
507
|
+
return [0,0,0,0]
|
|
508
|
+
}
|
|
327
509
|
}
|
|
328
510
|
|
|
329
|
-
|
|
511
|
+
function w_tenum_kabvw(k,v) {
|
|
512
|
+
var tnm = _tname.tya(v);
|
|
513
|
+
var tenum = _tname.nm2em(tnm);
|
|
514
|
+
var [ksi,kei] = this.w_tenum_key(tenum,k);
|
|
515
|
+
if(kei !== 0) {
|
|
516
|
+
if(v.byteLengh >0) {
|
|
517
|
+
var [vsi,vei] = this["w"+tnm](v);
|
|
518
|
+
if(vei !==0) {
|
|
519
|
+
return [ksi,kei,vsi,vei];
|
|
520
|
+
} else {
|
|
521
|
+
this._fl.dloc(ksi,kei);
|
|
522
|
+
return [0,0,0,0]
|
|
523
|
+
}
|
|
524
|
+
} else {
|
|
525
|
+
return [ksi,kei,0,0]
|
|
526
|
+
}
|
|
527
|
+
} else {
|
|
528
|
+
return [0,0,0,0]
|
|
529
|
+
}
|
|
530
|
+
}
|
|
330
531
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
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
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
532
|
+
function _w_tenum_kf64like(tenum,k,v) {
|
|
533
|
+
var [ksi,kei] = this.w_tenum_key(tenum,k);
|
|
534
|
+
if(kei !== 0) {
|
|
535
|
+
var [vsi,vei] = this.wf64(v);
|
|
536
|
+
if(vei !==0) {
|
|
537
|
+
return [ksi,kei,vsi,vei];
|
|
538
|
+
} else {
|
|
539
|
+
this._fl.dloc(ksi,kei);
|
|
540
|
+
return [0,0,0,0]
|
|
541
|
+
}
|
|
542
|
+
} else {
|
|
543
|
+
return [0,0,0,0]
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
function _w_tenum_kslike(tenum,k,v) {
|
|
548
|
+
var [ksi,kei] = this.w_tenum_key(tenum,k);
|
|
549
|
+
if(kei !== 0) {
|
|
550
|
+
var [vsi,vei] = this.wstr(v);
|
|
551
|
+
if(vei !==0) {
|
|
552
|
+
return [ksi,kei,vsi,vei];
|
|
553
|
+
} else {
|
|
554
|
+
this._fl.dloc(ksi,kei);
|
|
555
|
+
return [0,0,0,0]
|
|
556
|
+
}
|
|
557
|
+
} else {
|
|
558
|
+
return [0,0,0,0]
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
async function w_tenum_kv(k,v) {
|
|
563
|
+
if(ArrayBuffer.isView(v)) { return this.w_tenum_kabvw(k,v);//TypedArray | Buffer
|
|
564
|
+
} else if(v === undefined) { var [ksi,kei] = this.w_tenum_key(_tname.nm2em("u"),k); return [ksi,kei,0,0];
|
|
565
|
+
} else if(v === null) { var [ksi,kei] = this.w_tenum_key(_tname.nm2em("n"),k); return [ksi,kei,0,0];
|
|
566
|
+
} else if(v === true) { var [ksi,kei] = this.w_tenum_key(_tname.nm2em("t"),k); return [ksi,kei,0,0];
|
|
567
|
+
} else if(v === false) { var [ksi,kei] = this.w_tenum_key(_tname.nm2em("f"),k); return [ksi,kei,0,0];
|
|
568
|
+
var typnm = typeof(v);
|
|
569
|
+
if(typnm === "object") {
|
|
570
|
+
var clsnm = v.constructor.name;
|
|
571
|
+
if(clsnm === "Date") { return this._w_tenum_kf64like(_tname.nm2em("mts"),k,v.getTime());
|
|
572
|
+
} else if(V8_MP_ST_RGX_PRIMO_CLSNMS.has(clsnm)) { return this._w_tenum_ko(_tname.clsnm2em(clsnm),k,v); //Map Set RegExp StringObject BooleanObject NumberObject
|
|
573
|
+
} else if(V8_UNSERIALABLE_OBJ_CLSNMS.has(clsnm) || is_g(v)) { return [0,0,0,0];//"WeakSet","WeakMap","WeakRef","Promise","Iterator"
|
|
574
|
+
} else {
|
|
575
|
+
var tnm = _type.buf(v); //ArrayBuffer SharedArrayBuffer Blob Flie
|
|
576
|
+
if(tnm === undefined) {
|
|
577
|
+
tnm = _type.err(v); //Error....
|
|
578
|
+
if(tnm === undefined) {
|
|
579
|
+
try { //no-circular Array | Dict
|
|
580
|
+
var jstr = JSON.stringify(v);
|
|
581
|
+
return this._w_tenum_kslike(_tname.nm2em("json"),k,jstr); // 65534:json
|
|
582
|
+
} catch(e) {
|
|
583
|
+
//has circular;
|
|
584
|
+
if(Array.isArray(v)) {
|
|
585
|
+
return this._w_tenum_ko(_tname.nm2em("a"),k,v);
|
|
586
|
+
} else {
|
|
587
|
+
return this._w_tenum_ko(_tname.nm2em("d"),k,v);
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
} else {
|
|
591
|
+
return this._w_tenum_ko(_tname.nm2em(tnm),k,v); //Error
|
|
592
|
+
}
|
|
593
|
+
} else {
|
|
594
|
+
if(tnm === "blob" || tnm === "file") { //blob 和 file 只能异步写入
|
|
595
|
+
var [ksi,kei] = this.w_tenum_key(_tname.nm2em(tnm),k);
|
|
596
|
+
if(kei!==0) {
|
|
597
|
+
var [vsi,vei] = await this["w"+tnm](v);
|
|
598
|
+
if(vei !==0) { return [ksi,kei,vsi,vei]; } else {this._fl.dloc(ksi,kei);return [0,0,0,0]}
|
|
599
|
+
} else {
|
|
600
|
+
return [0,0,0,0];
|
|
601
|
+
}
|
|
602
|
+
} else {
|
|
603
|
+
return this._w_tenum_ko(_tname.nm2em(tnm),k,v);
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
} else if(typnm === "string") { return this._w_tenum_kslike(_tname.nm2em("s"), k,v);
|
|
608
|
+
} else if(typnm === "number") { return this._w_tenum_kf64like(_tname.nm2em("f64"),k,v);
|
|
609
|
+
} else if(typnm === "bigint") { return this._w_tenum_ko(_tname.nm2em("bi"),k,v);
|
|
610
|
+
} else if(typnm === "symbol") {
|
|
611
|
+
var tnm = _type.sym(v);
|
|
612
|
+
if(tnm === "gy") {
|
|
613
|
+
v = v.description;
|
|
614
|
+
} else if(tnm === "ly_wn") {
|
|
615
|
+
v = v.description.split(".")[1];
|
|
616
|
+
} else {
|
|
617
|
+
return [0,0,0,0];
|
|
618
|
+
}
|
|
619
|
+
return this._w_tenum_kslike(_tname.nm2em(tnm), k,v);
|
|
620
|
+
} else {
|
|
621
|
+
return [0,0,0,0];
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
function w_tenum_kutf8u8a_abvw(ku8a,v) {
|
|
627
|
+
var tnm = _tname.tya(v);
|
|
628
|
+
var tenum = _tname.nm2em(tnm);
|
|
629
|
+
var [ksi,kei] = this.w_tenum_kutf8u8a(tenum,ku8a);
|
|
630
|
+
if(kei !== 0) {
|
|
631
|
+
if(v.byteLengh >0) {
|
|
632
|
+
var [vsi,vei] = this["w"+tnm](v);
|
|
633
|
+
if(vei !==0) {
|
|
634
|
+
return [ksi,kei,vsi,vei];
|
|
635
|
+
} else {
|
|
636
|
+
this._fl.dloc(ksi,kei);
|
|
637
|
+
return [0,0,0,0]
|
|
638
|
+
}
|
|
639
|
+
} else {
|
|
640
|
+
return [ksi,kei,0,0]
|
|
641
|
+
}
|
|
642
|
+
} else {
|
|
643
|
+
return [0,0,0,0]
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
function _w_tenum_kutf8u8a_f64like(tenum,ku8a,v) {
|
|
648
|
+
var [ksi,kei] = this.w_tenum_kutf8u8a(tenum,ku8a);
|
|
649
|
+
if(kei !== 0) {
|
|
650
|
+
var [vsi,vei] = this.wf64(v);
|
|
651
|
+
if(vei !==0) {
|
|
652
|
+
return [ksi,kei,vsi,vei];
|
|
653
|
+
} else {
|
|
654
|
+
this._fl.dloc(ksi,kei);
|
|
655
|
+
return [0,0,0,0]
|
|
656
|
+
}
|
|
657
|
+
} else {
|
|
658
|
+
return [0,0,0,0]
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
function _w_tenum_kutf8u8a_slike(tenum,ku8a,v) {
|
|
663
|
+
var [ksi,kei] = this.w_tenum_kutf8u8a(tenum,ku8a);
|
|
664
|
+
if(kei !== 0) {
|
|
665
|
+
var [vsi,vei] = this.wstr(v);
|
|
666
|
+
if(vei !==0) {
|
|
667
|
+
return [ksi,kei,vsi,vei];
|
|
668
|
+
} else {
|
|
669
|
+
this._fl.dloc(ksi,kei);
|
|
670
|
+
return [0,0,0,0]
|
|
671
|
+
}
|
|
672
|
+
} else {
|
|
673
|
+
return [0,0,0,0]
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
function _w_tenum_kutf8u8a_other(tenum,ku8a,v) {
|
|
678
|
+
var [ksi,kei] = this.w_tenum_kutf8u8a(tenum,ku8a);
|
|
679
|
+
if(kei !== 0) {
|
|
680
|
+
var [vsi,vei] = this.wo(v);
|
|
681
|
+
if(vei !==0) {
|
|
682
|
+
return [ksi,kei,vsi,vei];
|
|
683
|
+
} else {
|
|
684
|
+
this._fl.dloc(ksi,kei);
|
|
685
|
+
return [0,0,0,0]
|
|
686
|
+
}
|
|
687
|
+
} else {
|
|
688
|
+
return [0,0,0,0]
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
async function w_tenum_kutf8u8a_val(ku8a,v) {
|
|
693
|
+
if(ArrayBuffer.isView(v)) { return this.w_tenum_kutf8u8a_abvw(k,v);//TypedArray | Buffer
|
|
694
|
+
} else if(v === undefined) { var [ksi,kei] = this.w_tenum_kutf8u8a(_tname.nm2em("u"),ku8a); return [ksi,kei,0,0];
|
|
695
|
+
} else if(v === null) { var [ksi,kei] = this.w_tenum_kutf8u8a(_tname.nm2em("n"),ku8a); return [ksi,kei,0,0];
|
|
696
|
+
} else if(v === true) { var [ksi,kei] = this.w_tenum_kutf8u8a(_tname.nm2em("t"),ku8a); return [ksi,kei,0,0];
|
|
697
|
+
} else if(v === false) { var [ksi,kei] = this.w_tenum_kutf8u8a(_tname.nm2em("f"),ku8a); return [ksi,kei,0,0];
|
|
698
|
+
var typnm = typeof(v);
|
|
699
|
+
if(typnm === "object") {
|
|
700
|
+
var clsnm = v.constructor.name;
|
|
701
|
+
if(clsnm === "Date") { return this._w_tenum_kutf8u8a_f64like(_tname.nm2em("mts"),ku8a,v.getTime());
|
|
702
|
+
} else if(V8_MP_ST_RGX_PRIMO_CLSNMS.has(clsnm)) { return this._w_tenum_kutf8u8a_other(_tname.clsnm2em(clsnm),ku8a,v); //Map Set RegExp StringObject BooleanObject NumberObject
|
|
703
|
+
} else if(V8_UNSERIALABLE_OBJ_CLSNMS.has(clsnm) || is_g(v)) { return [0,0,0,0];//"WeakSet","WeakMap","WeakRef","Promise","Iterator"
|
|
704
|
+
} else {
|
|
705
|
+
var tnm = _type.buf(v); //ArrayBuffer SharedArrayBuffer Blob Flie
|
|
706
|
+
if(tnm === undefined) {
|
|
707
|
+
tnm = _type.err(v); //Error....
|
|
708
|
+
if(tnm === undefined) {
|
|
709
|
+
try { //no-circular Array | Dict
|
|
710
|
+
var jstr = JSON.stringify(v);
|
|
711
|
+
return this._w_tenum_kutf8u8a_slike(_tname.nm2em("json"),ku8a,jstr); // 65534:json
|
|
712
|
+
} catch(e) {
|
|
713
|
+
//has circular;
|
|
714
|
+
if(Array.isArray(v)) {
|
|
715
|
+
return this._w_tenum_kutf8u8a_other(_tname.nm2em("a"),ku8a,v);
|
|
716
|
+
} else {
|
|
717
|
+
return this._w_tenum_kutf8u8a_other(_tname.nm2em("d"),ku8a,v);
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
} else {
|
|
721
|
+
return this._w_tenum_kutf8u8a_other(_tname.nm2em(tnm),ku8a,v); //Error
|
|
722
|
+
}
|
|
723
|
+
} else {
|
|
724
|
+
if(tnm === "blob" || tnm === "file") { //blob 和 file 只能异步写入
|
|
725
|
+
var [ksi,kei] = this.w_tenum_kutf8u8a(_tname.nm2em(tnm),ku8a);
|
|
726
|
+
if(kei!==0) {
|
|
727
|
+
var [vsi,vei] = await this["w"+tnm](v);
|
|
728
|
+
if(vei !==0) { return [ksi,kei,vsi,vei]; } else {this._fl.dloc(ksi,kei);return [0,0,0,0]}
|
|
729
|
+
} else {
|
|
730
|
+
return [0,0,0,0];
|
|
731
|
+
}
|
|
732
|
+
} else {
|
|
733
|
+
return this._w_tenum_kutf8u8a_other(_tname.nm2em(tnm),ku8a,v);
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
} else if(typnm === "string") { return this._w_tenum_kutf8u8a_slike(_tname.nm2em("s"), ku8a,v);
|
|
738
|
+
} else if(typnm === "number") { return this._w_tenum_kutf8u8a_f64like(_tname.nm2em("f64"),ku8a,v);
|
|
739
|
+
} else if(typnm === "bigint") { return this._w_tenum_kutf8u8a_other(_tname.nm2em("bi"),ku8a,v);
|
|
740
|
+
} else if(typnm === "symbol") {
|
|
741
|
+
var tnm = _type.sym(v);
|
|
742
|
+
if(tnm === "gy") {
|
|
743
|
+
v = v.description;
|
|
744
|
+
} else if(tnm === "ly_wn") {
|
|
745
|
+
v = v.description.split(".")[1];
|
|
746
|
+
} else {
|
|
747
|
+
return [0,0,0,0];
|
|
748
|
+
}
|
|
749
|
+
return this._w_tenum_kutf8u8a_slike(_tname.nm2em(tnm), ku8a,v);
|
|
750
|
+
} else {
|
|
751
|
+
return [0,0,0,0];
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
|
|
757
|
+
function r_tenum_v(tenum,vsi,vei) {
|
|
758
|
+
var tnm = _tname.em2nm(tenum);
|
|
759
|
+
return this["r"+tnm]([vsi,vei]);
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
function r_tenum_kv(ksi,kei,vsi,vei) {
|
|
763
|
+
var [tenum,k] = this.r_tenum_key([ksi,kei]);
|
|
764
|
+
var tnm = _tname.em2nm(tenum);
|
|
765
|
+
return [k,this["r"+tnm]([vsi,vei])];
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
|
|
769
|
+
|
|
770
|
+
|
|
771
|
+
|
|
772
|
+
//----仅测试,此接口速度很慢,应该显式调用 this.rxxx([si,ei])
|
|
379
773
|
|
|
380
774
|
function debug_read(T,[si,ei]) {
|
|
381
|
-
var instruction =
|
|
775
|
+
var instruction = TBRIEF_TO_MTHD_HINT[T];
|
|
382
776
|
if(instruction?.r!== undefined) {
|
|
383
777
|
if(instruction["?"]) {
|
|
384
778
|
return this?.[instruction.r]?.([si,ei]);
|
|
@@ -440,9 +834,9 @@ function debug_wsym(o) {
|
|
|
440
834
|
if(key_for !== undefined) {
|
|
441
835
|
return ["gy",this.wstr(o.description)];
|
|
442
836
|
} else {
|
|
443
|
-
|
|
444
|
-
return ["
|
|
445
|
-
|
|
837
|
+
if(WELLKNOWN_SYM_ST.has(o)) {
|
|
838
|
+
return ["ly_wn",this.wstr(o.description.split(".")[1])];
|
|
839
|
+
} else if(o.description !== undefined) {
|
|
446
840
|
return ["ly",this.wstr(o.description)];
|
|
447
841
|
} else {
|
|
448
842
|
return ["ly_un",[0,0]];
|
|
@@ -450,25 +844,6 @@ function debug_wsym(o) {
|
|
|
450
844
|
}
|
|
451
845
|
}
|
|
452
846
|
|
|
453
|
-
const V8SERIALABLE_NONTA_OBJ_CLSNMS = [
|
|
454
|
-
"ArrayBuffer" ,
|
|
455
|
-
"SharedArrayBuffer" ,
|
|
456
|
-
"Map" ,
|
|
457
|
-
"Set" ,
|
|
458
|
-
"Date" ,
|
|
459
|
-
"RegExp" ,
|
|
460
|
-
"String" ,
|
|
461
|
-
"Number" ,
|
|
462
|
-
"Boolean" ,
|
|
463
|
-
"Error" ,
|
|
464
|
-
"AggregateError" ,
|
|
465
|
-
"EvalError" ,
|
|
466
|
-
"RangeError" ,
|
|
467
|
-
"ReferenceError" ,
|
|
468
|
-
"URIError" ,
|
|
469
|
-
"TypeError" ,
|
|
470
|
-
"SyntaxError" ,
|
|
471
|
-
];
|
|
472
847
|
|
|
473
848
|
function debug_write(o) {
|
|
474
849
|
if(o === undefined) {
|
|
@@ -479,6 +854,11 @@ function debug_write(o) {
|
|
|
479
854
|
return ['t',[0,0]];
|
|
480
855
|
} else if(o === false) {
|
|
481
856
|
return ['f',[0,0]];
|
|
857
|
+
} else if(ArrayBuffer.isView(o)) {
|
|
858
|
+
var clsnm = o.constructor.name;
|
|
859
|
+
var tbrief = taclsnm_to_tbrief(clsnm);
|
|
860
|
+
var hint = TBRIEF_TO_MTHD_HINT[tbrief];
|
|
861
|
+
if(hint["?"]) { [tbrief,this?.[hint.w]?.(o)];} else {return [tbrief,this[hint.w](o)];}
|
|
482
862
|
} else {
|
|
483
863
|
var tnm = typeof(o);
|
|
484
864
|
if(tnm === "string") {
|
|
@@ -493,25 +873,15 @@ function debug_write(o) {
|
|
|
493
873
|
return ["flike",[0,0]];
|
|
494
874
|
} else if(tnm === "object") {
|
|
495
875
|
var clsnm = o.constructor.name;
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
} else {
|
|
502
|
-
return [tbrief,this[hint.w](o)];
|
|
503
|
-
}
|
|
504
|
-
} else if(V8SERIALABLE_NONTA_OBJ_CLSNMS.includes(clsnm)) {
|
|
876
|
+
if (clsnm === "Blob") {
|
|
877
|
+
return ["blob",this.wblob(o)/*Promise*/];
|
|
878
|
+
} else if(clsnm === "File") {
|
|
879
|
+
return ["file",this.wfile(o)/*Promise*/];
|
|
880
|
+
} else if(V8_SERIALABLE_NONTA_OBJ_CLSNMS.has(clsnm)) {
|
|
505
881
|
return ["other",this.wo(o)]
|
|
506
|
-
} else if(
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
clsnm === "Promise" ||
|
|
510
|
-
clsnm === "Iterator" ||
|
|
511
|
-
clsnm === "WeakRef" ||
|
|
512
|
-
o[Symbol.toStringTag] === "Generator" ||
|
|
513
|
-
o[Symbol.toStringTag] === "AyncGenerator"
|
|
514
|
-
) {
|
|
882
|
+
} else if(V8_UNSERIALABLE_OBJ_CLSNMS.has(clsnm)) {
|
|
883
|
+
return ["unsupported",[0,0]]
|
|
884
|
+
} else if(is_g(o)) {
|
|
515
885
|
return ["unsupported",[0,0]]
|
|
516
886
|
} else {
|
|
517
887
|
return ["other",this.wo(o)]
|
|
@@ -526,8 +896,40 @@ module.exports = {
|
|
|
526
896
|
_calc_datasz_for_dump,
|
|
527
897
|
seperated_dump, dump,
|
|
528
898
|
dloc,
|
|
529
|
-
////
|
|
530
|
-
rstr,
|
|
899
|
+
////
|
|
900
|
+
rstr, rs:rstr, //alias
|
|
901
|
+
wstr, ws:wstr, //alias
|
|
902
|
+
////
|
|
903
|
+
rjson,wjson,
|
|
904
|
+
rsym, rgy,rly_wn,
|
|
905
|
+
wsym, wgy,wly_wn,
|
|
906
|
+
rta,wta,
|
|
907
|
+
////
|
|
908
|
+
ro, rbi:ro,rdt:ro,rrgx:ro,rst:ro,rmp:ro,rbolo:ro,rnumo:ro,rstro:ro, //alias
|
|
909
|
+
rerrerr:ro,raggerr:ro,revlerr:ro,rrngerr:ro,rreferr:ro,rurierr:ro,rtyperr:ro,rstxerr:ro,
|
|
910
|
+
ra:ro,rd:ro,
|
|
911
|
+
wo, wbi:wo,wdt:wo,wrgx:wo,wst:wo,wmp:wo,wbolo:wo,wnumo:wo,wstro:wo, //alias
|
|
912
|
+
werrerr:wo,waggerr:wo,wevlerr:wo,wrngerr:wo,wreferr:wo,wurierr:wo,wtyperr:wo,wstxerr:wo,
|
|
913
|
+
wa:wo,wd:wo,
|
|
914
|
+
////
|
|
915
|
+
r_tenum_key,
|
|
916
|
+
r_tenum_kutfu8a,
|
|
917
|
+
w_tenum_key,_w_tenum_key,
|
|
918
|
+
w_tenum_kutf8u8a, _w_tenum_kutf8u8a,
|
|
919
|
+
|
|
920
|
+
_w_tenum_kf64like,
|
|
921
|
+
_w_tenum_kslike,
|
|
922
|
+
_w_tenum_ko,
|
|
923
|
+
w_tenum_kabvw,
|
|
924
|
+
w_tenum_kv,
|
|
925
|
+
|
|
926
|
+
_w_tenum_kutf8u8a_f64like,
|
|
927
|
+
_w_tenum_kutf8u8a_slike,
|
|
928
|
+
_w_tenum_kutf8u8a_other,
|
|
929
|
+
w_tenum_kutf8u8a_abvw,
|
|
930
|
+
w_tenum_kutf8u8a_val,
|
|
931
|
+
r_tenum_v,
|
|
932
|
+
r_tenum_kv,
|
|
531
933
|
////
|
|
532
934
|
ru8,ru16,ru32,ru64,
|
|
533
935
|
ri8,ri16,ri32,ri64,
|
|
@@ -535,7 +937,10 @@ module.exports = {
|
|
|
535
937
|
wi8,wi16,wi32,wi64,
|
|
536
938
|
rf32,rf64,
|
|
537
939
|
wf32,wf64,
|
|
940
|
+
rmts,wmts,
|
|
538
941
|
////
|
|
942
|
+
_write_no_need_algn_typed_array,
|
|
943
|
+
_write_need_algn_typed_array,
|
|
539
944
|
ru8a,ru8ca,ru16a,ru32a,ru64a,
|
|
540
945
|
ri8a, ri16a,ri32a,ri64a,
|
|
541
946
|
rf32a,rf64a,
|
|
@@ -551,14 +956,16 @@ module.exports = {
|
|
|
551
956
|
wi32a:_write_need_algn_typed_array,
|
|
552
957
|
wi64a:_write_need_algn_typed_array,
|
|
553
958
|
wf32a:_write_need_algn_typed_array,
|
|
554
|
-
wf64a:_write_need_algn_typed_array,
|
|
959
|
+
wf64a:_write_need_algn_typed_array,
|
|
960
|
+
////
|
|
961
|
+
wbwstream,
|
|
962
|
+
rbuf, wbuf,
|
|
963
|
+
rblob,wblob,
|
|
964
|
+
rfile,wfile,
|
|
555
965
|
////
|
|
556
966
|
debug_read,
|
|
557
967
|
debug_wnum,debug_wbi,debug_wsym,
|
|
558
968
|
debug_write,
|
|
559
|
-
WELLKNOWN_SYM_ST,
|
|
560
|
-
WELLKNOWN_SYMS,
|
|
561
|
-
V8SERIALABLE_NONTA_OBJ_CLSNMS,
|
|
562
969
|
}
|
|
563
970
|
|
|
564
971
|
if(DataView.prototype.getFloat16 !== undefined) {
|