nv-buf-storage 1.3.4 → 1.3.5

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/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 = require("nv-buf-serde");
5
- const { creat_sz_buf_for_dump,_COND_IS_NODE_ENV } = require("../util");
6
- const WELLKNOWN_SYMS = Object.values(Object.getOwnPropertyDescriptors(Symbol)).map(r=>r.value).filter(r=>typeof(r)==="symbol");
7
- const WELLKNOWN_SYM_ST = new Set(WELLKNOWN_SYMS);
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
- return this._fl.dloc(si,ei);
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,73 @@ 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 _w_tenum_kutf8u8a(si,ei,tenum,ku8a) {
120
+ this._dv.setUint16(si,tenum,true);
121
+ this._data.set(ku8a,si+2);
122
+ return [si,ei];
123
+ }
124
+ function w_tenum_kutf8u8a(tenum,ku8a) {
125
+ var [si,ei] = this.aloc(2+ku8a.byteLength);
126
+ if(ei!== 0) {
127
+ return this._w_tenum_kutf8u8a(si,ei,tenum,ku8a);
128
+ } else {
129
+ return [0,0]
130
+ }
131
+ }
132
+
133
+
134
+
135
+ function rgy(rng) { return Symbol.for(this.rstr(rng));}
136
+ function rly_wn(rng) { return Symbol[this.rstr(rng)];}
137
+
138
+ function rsym(T,rng) {
139
+ if(T === "gy") {
140
+ return Symbol.for(this.rstr(rng));
141
+ } else {
142
+ //ly_wn
143
+ return Symbol[this.rstr(rng)];
144
+ }
145
+ }
146
+
147
+ function wgy(o) { return this.wstr(o.description);}
148
+ function wly_wn(o) { return this.wstr(o.description.split(".")[1]);}
149
+ function wsym(o,T) {
150
+ if(T === "gy") {
151
+ return this.wstr(o.description);
152
+ } else if(T === "ly_wn") {
153
+ return this.wstr(o.description.split(".")[1]);
154
+ } else {
155
+ //不支持存储 local-symbol
156
+ return [0,0]
157
+ }
158
+ }
159
+
160
+
97
161
 
162
+ ////
98
163
  function wta(ta,include_ab=true) {
99
164
  var hint = tacls_or_abcls_to_mthd_hint(ta.constructor);
100
165
  if(hint["?"]) {
@@ -109,16 +174,102 @@ function rta(Cls,rng) {
109
174
  if(hint["?"]) {
110
175
  return this?.[hint.r]?.(rng);
111
176
  } else {
112
- var ta= this[hint.r](rng);
113
- if(Cls === globalThis.Buffer){
114
- return globalThis.Buffer.from(ta);
115
- } else {
116
- return ta;
117
- }
177
+ return this[hint.r](rng);
118
178
  }
119
179
  }
120
180
 
121
181
 
182
+
183
+ async function wbwstream(rs$,offset) {
184
+ var reader = rs$.getReader();
185
+ while(true) {
186
+ const { value, done } = await reader.read();
187
+ if(done) {
188
+ return offset;
189
+ } else {
190
+ var u8a = value;
191
+ this._data.set(u8a,offset);
192
+ offset += u8a.byteLength;
193
+ }
194
+ }
195
+ }
196
+
197
+ async function wblob(blob) {
198
+ var tstr = blob.type;
199
+ var tu8a = _TE.encode(tstr)
200
+ var tsz = tu8a.byteLength; //固定1字节
201
+ if(tsz>255) {return [0,0]} //type最大长度255
202
+ var data_sz = blob.size;
203
+ if(data_sz>2**53) {return [0,0]}
204
+ var sz = 1/*tsz*/ + tsz/*type-str*/ + 8/*data_sz*/ + data_sz;
205
+ var [si,ei] = this.aloc(sz);
206
+ if(ei!==0) {
207
+ var offset = si;
208
+ this._dv.setUint8(offset,tsz,true); offset+=1;
209
+ this._data.set(tu8a,offset); offset+=tsz;
210
+ this._dv.setFloat64(offset,data_sz,true); offset+=8;
211
+ var rs$ = blob.stream();
212
+ await this.wbwstream(rs$,offset);
213
+ return [si,ei]
214
+ } else {
215
+ return [0,0]
216
+ }
217
+ }
218
+
219
+ function rblob([si,ei]) {
220
+ var offset = si;
221
+ var tsz = this._dv.getUint8(offset,true); offset+=1;
222
+ var tstr = this.rstr([offset,offset+tsz]); offset+=tsz;
223
+ var data_sz = this._dv.getFloat64(offset,true); offset+=8;
224
+ var u8a = this._data.subarray(offset,ei);
225
+ return new Blob([u8a],{type:tstr});
226
+ }
227
+
228
+ async function wfile(file) {
229
+ var tstr = file.type;
230
+ var tu8a = _TE.encode(tstr);
231
+ var tsz = tu8a.byteLength; //固定1字节
232
+ if(tsz>255) {return [0,0]} //type最大长度255
233
+ var nmstr = file.name;
234
+ var nmu8a = _TE.encode(nmstr);
235
+ var nmsz = nmu8a.byteLength; //固定2字节
236
+ if(nmsz>65535) {return [0,0]} //name最大长度65536
237
+ var mts = file.lastModified;
238
+ if(mts>2**53) {return [0,0]}
239
+ var data_sz = file.size;
240
+ if(data_sz>2**53) {return [0,0]}
241
+ var sz = 1/*tsz*/ + tsz/*type-str*/+ 2/*nmsz*/+ nmsz+ 8/*mts*/ + 8/*data_sz*/ + data_sz;
242
+ var [si,ei] = this.aloc(sz);
243
+ if(ei!==0) {
244
+ var offset = si;
245
+ this._dv.setUint8(offset,tsz,true); offset += 1;
246
+ this._data.set(tu8a,offset); offset += tsz;
247
+ this._dv.setUint16(offset,nmsz,true); offset += 2;
248
+ this._data.set(nmu8a,offset); offset += nmsz;
249
+ this._dv.setFloat64(offset,mts,true); offset += 8;
250
+ this._dv.setFloat64(offset,data_sz,true); offset += 8;
251
+ var rs$ = file.stream();
252
+ await this.wbwstream(rs$,offset);
253
+ return [si,ei]
254
+ } else {
255
+ return [0,0]
256
+ }
257
+ }
258
+
259
+ function rfile([si,ei]) {
260
+ var offset = si;
261
+ var tsz = this._dv.getUint8(offset,true); offset+=1;
262
+ var tstr = this.rstr([offset,offset+tsz]); offset+=tsz;
263
+ var nmsz = this._dv.getUint16(offset,true); offset+=2;
264
+ var nmstr = this.rstr([offset,offset+nmsz]); offset+=nmsz;
265
+ var mts = this._dv.getFloat64(offset,true); offset+=8;
266
+ var data_sz = this._dv.getFloat64(offset,true); offset+=8;
267
+ var u8a = this._data.subarray(offset,ei);
268
+ return new File([u8a],nmstr,{type:tstr,lastModified:mts});
269
+ }
270
+
271
+
272
+
122
273
  function wo(o) {
123
274
  var ab = _v8serde.ser(o);
124
275
  var u8a = new Uint8Array(ab);
@@ -160,8 +311,6 @@ function wu8(num) {
160
311
  return [0,0]
161
312
  }
162
313
  }
163
-
164
-
165
314
  function wu16(num,algn=false) {
166
315
  var si=0;ei=0;
167
316
  if(algn) {
@@ -289,8 +438,16 @@ function wf64(num,algn=false) {
289
438
  } else {
290
439
  return [0,0]
291
440
  }
441
+ }
292
442
 
443
+ function wmts(dt,algn=false) {
444
+ return this.wf64(dt.getTime(),algn);
293
445
  }
446
+ function rmts(rng) {
447
+ var mts = this.rf64(rng);
448
+ return new Date(mts);
449
+ }
450
+
294
451
 
295
452
  ////typed-array
296
453
  function ru8a([si,ei]) {return new Uint8Array (this._data.buffer,this._data.byteOffset+si, ei-si) ;}
@@ -305,6 +462,7 @@ function ri64a([si,ei]) {return new BigInt64Array (this._data.buffer,th
305
462
  function rf32a([si,ei]) {return new globalThis.Float32Array(this._data.buffer,this._data.byteOffset+si,(ei-si)/4);}
306
463
  function rf64a([si,ei]) {return new globalThis.Float64Array(this._data.buffer,this._data.byteOffset+si,(ei-si)/8);}
307
464
  function rdv([si,ei]) {return new DataView (this._data.buffer,this._data.byteOffset+si, ei-si) ;}
465
+ function rbuf([si,ei]) {return globalThis.Buffer.from(this._data.buffer,this._data.byteOffset+si, ei-si)}
308
466
  function _write_no_need_algn_typed_array(ta1b) {
309
467
  var [si,ei] = this.aloc(ta1b.byteLength);
310
468
  if(ei !== 0) {
@@ -314,7 +472,7 @@ function _write_no_need_algn_typed_array(ta1b) {
314
472
  } else {
315
473
  return [0,0];
316
474
  }
317
- }
475
+ }
318
476
  function _write_need_algn_typed_array(ta) {
319
477
  var [si,ei]= this.algn_aloc(ta.byteLength,ta.constructor.BYTES_PER_ELEMENT);
320
478
  if(ei!== 0) {
@@ -324,61 +482,286 @@ function _write_need_algn_typed_array(ta) {
324
482
  } else {
325
483
  return [0,0]
326
484
  }
485
+ }
486
+ function wbuf(buf) {return this._write_no_need_algn_typed_array(buf);}
487
+ //
488
+
489
+ function _w_tenum_ko(tenum,k,v) {
490
+ var [ksi,kei] = this.w_tenum_key(tenum,k);
491
+ if(kei !== 0) {
492
+ var [vsi,vei] = this.wo(v);
493
+ if(vei !==0) {
494
+ return [ksi,kei,vsi,vei];
495
+ } else {
496
+ this._fl.dloc(ksi,kei);
497
+ return [0,0,0,0]
498
+ }
499
+ } else {
500
+ return [0,0,0,0]
501
+ }
327
502
  }
328
503
 
329
- //----仅测试,此接口速度很慢,应该显式调用 this.rxxx([si,ei])
504
+ function w_tenum_kabvw(k,v) {
505
+ var tnm = _tname.tya(v);
506
+ var tenum = _tname.nm2em(tnm);
507
+ var [ksi,kei] = this.w_tenum_key(tenum,k);
508
+ if(kei !== 0) {
509
+ if(v.byteLengh >0) {
510
+ var [vsi,vei] = this["w"+tnm](v);
511
+ if(vei !==0) {
512
+ return [ksi,kei,vsi,vei];
513
+ } else {
514
+ this._fl.dloc(ksi,kei);
515
+ return [0,0,0,0]
516
+ }
517
+ } else {
518
+ return [ksi,kei,0,0]
519
+ }
520
+ } else {
521
+ return [0,0,0,0]
522
+ }
523
+ }
330
524
 
331
- const DEBUG_TBRIEF_TO_MTHD_HINT = {
332
- "s": { r: "rstr", w: "wstr", "?": false },
333
- "json": { r: "rjson", w: "wjson", "?": false },
334
- "f16": { r: "rf16", w: "wf16", "?": true },
335
- "f32": { r: "rf32", w: "wf32", "?": false },
336
- "f64": { r: "rf64", w: "wf64", "?": false },
337
- "u8": { r: "ru8", w: "wu8", "?": false },
338
- "u16": { r: "ru16", w: "wu16", "?": false },
339
- "u32": { r: "ru32", w: "wu32", "?": false },
340
- "u64": { r: "ru64", w: "wu64", "?": false },
341
- "i8": { r: "ri8", w: "wi8", "?": false },
342
- "i16": { r: "ri16", w: "wi16", "?": false },
343
- "i32": { r: "ri32", w: "wi32", "?": false },
344
- "i64": { r: "ri64", w: "wi64", "?": false },
345
- "u8a": { r: "ru8a", w: "wu8a", "?": false },
346
- "u8ca": { r: "ru8ca", w: "wu8ca", "?": false },
347
- "u16a": { r: "ru16a", w: "wu16a", "?": false },
348
- "u32a": { r: "ru32a", w: "wu32a", "?": false },
349
- "u64a": { r: "ru64a", w: "wu64a", "?": false },
350
- "i8a": { r: "ri8a", w: "wi8a", "?": false },
351
- "i16a": { r: "ri16a", w: "wi16a", "?": false },
352
- "i32a": { r: "ri32a", w: "wi32a", "?": false },
353
- "i64a": { r: "ri64a", w: "wi64a", "?": false },
354
- "f16a": { r: "rf16a", w: "wf16a", "?": true },
355
- "f32a": { r: "rf32a", w: "wf32a", "?": false },
356
- "f64a": { r: "rf64a", w: "wf64a", "?": false },
357
- "dv": { r: "rdv", w: "wdv", "?": false } ,
358
- ////
359
- "u": {v:undefined},
360
- "n": {v:null},
361
- "t": {v:true},
362
- "f": {v:false},
363
- "gy":{f:(self,si,ei)=>Symbol.for(self.rstr([si,ei]))},
364
- "ly_wn" : {f:(self,si,ei)=>Symbol[self.rstr([si,ei])]},
365
- "ly_un" : {v:Symbol()},
366
- "ly":{f:(self,si,ei)=>Symbol(self.rstr([si,ei]))},
367
- ////
368
- "flike":{unsupported:true},
369
- "wkst":{unsupported:true},
370
- "wkmp":{unsupported:true},
371
- "wkref":{unsupported:true},
372
- "prms":{unsupported:true},
373
- "iter":{unsupported:true},
374
- "sg":{unsupported:true},
375
- "ag":{unsupported:true},
376
- "unsupported":{unsupported:true},
377
- ////
378
- };
525
+ function _w_tenum_kf64like(tenum,k,v) {
526
+ var [ksi,kei] = this.w_tenum_key(tenum,k);
527
+ if(kei !== 0) {
528
+ var [vsi,vei] = this.wf64(v);
529
+ if(vei !==0) {
530
+ return [ksi,kei,vsi,vei];
531
+ } else {
532
+ this._fl.dloc(ksi,kei);
533
+ return [0,0,0,0]
534
+ }
535
+ } else {
536
+ return [0,0,0,0]
537
+ }
538
+ }
539
+
540
+ function _w_tenum_kslike(tenum,k,v) {
541
+ var [ksi,kei] = this.w_tenum_key(tenum,k);
542
+ if(kei !== 0) {
543
+ var [vsi,vei] = this.wstr(v);
544
+ if(vei !==0) {
545
+ return [ksi,kei,vsi,vei];
546
+ } else {
547
+ this._fl.dloc(ksi,kei);
548
+ return [0,0,0,0]
549
+ }
550
+ } else {
551
+ return [0,0,0,0]
552
+ }
553
+ }
554
+
555
+ async function w_tenum_kv(k,v) {
556
+ if(ArrayBuffer.isView(v)) { return this.w_tenum_kabvw(k,v);//TypedArray | Buffer
557
+ } else if(v === undefined) { var [ksi,kei] = this.w_tenum_key(_tname.nm2em("u"),k); return [ksi,kei,0,0];
558
+ } else if(v === null) { var [ksi,kei] = this.w_tenum_key(_tname.nm2em("n"),k); return [ksi,kei,0,0];
559
+ } else if(v === true) { var [ksi,kei] = this.w_tenum_key(_tname.nm2em("t"),k); return [ksi,kei,0,0];
560
+ } else if(v === false) { var [ksi,kei] = this.w_tenum_key(_tname.nm2em("f"),k); return [ksi,kei,0,0];
561
+ var typnm = typeof(v);
562
+ if(typnm === "object") {
563
+ var clsnm = v.constructor.name;
564
+ if(clsnm === "Date") { return this._w_tenum_kf64like(_tname.nm2em("mts"),k,v.getTime());
565
+ } 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
566
+ } else if(V8_UNSERIALABLE_OBJ_CLSNMS.has(clsnm) || is_g(v)) { return [0,0,0,0];//"WeakSet","WeakMap","WeakRef","Promise","Iterator"
567
+ } else {
568
+ var tnm = _type.buf(v); //ArrayBuffer SharedArrayBuffer Blob Flie
569
+ if(tnm === undefined) {
570
+ tnm = _type.err(v); //Error....
571
+ if(tnm === undefined) {
572
+ try { //no-circular Array | Dict
573
+ var jstr = JSON.stringify(v);
574
+ return this._w_tenum_kslike(_tname.nm2em("json"),k,jstr); // 65534:json
575
+ } catch(e) {
576
+ //has circular;
577
+ if(Array.isArray(v)) {
578
+ return this._w_tenum_ko(_tname.nm2em("a"),k,v);
579
+ } else {
580
+ return this._w_tenum_ko(_tname.nm2em("d"),k,v);
581
+ }
582
+ }
583
+ } else {
584
+ return this._w_tenum_ko(_tname.nm2em(tnm),k,v); //Error
585
+ }
586
+ } else {
587
+ if(tnm === "blob" || tnm === "file") { //blob 和 file 只能异步写入
588
+ var [ksi,kei] = this.w_tenum_key(_tname.nm2em(tnm),k);
589
+ if(kei!==0) {
590
+ var [vsi,vei] = await this["w"+tnm](v);
591
+ if(vei !==0) { return [ksi,kei,vsi,vei]; } else {this._fl.dloc(ksi,kei);return [0,0,0,0]}
592
+ } else {
593
+ return [0,0,0,0];
594
+ }
595
+ } else {
596
+ return this._w_tenum_ko(_tname.nm2em(tnm),k,v);
597
+ }
598
+ }
599
+ }
600
+ } else if(typnm === "string") { return this._w_tenum_kslike(_tname.nm2em("s"), k,v);
601
+ } else if(typnm === "number") { return this._w_tenum_kf64like(_tname.nm2em("f64"),k,v);
602
+ } else if(typnm === "bigint") { return this._w_tenum_ko(_tname.nm2em("bi"),k,v);
603
+ } else if(typnm === "symbol") {
604
+ var tnm = _type.sym(v);
605
+ if(tnm === "gy") {
606
+ v = v.description;
607
+ } else if(tnm === "ly_wn") {
608
+ v = v.description.split(".")[1];
609
+ } else {
610
+ return [0,0,0,0];
611
+ }
612
+ return this._w_tenum_kslike(_tname.nm2em(tnm), k,v);
613
+ } else {
614
+ return [0,0,0,0];
615
+ }
616
+ }
617
+ }
618
+
619
+ function w_tenum_kutf8u8a_abvw(ku8a,v) {
620
+ var tnm = _tname.tya(v);
621
+ var tenum = _tname.nm2em(tnm);
622
+ var [ksi,kei] = this.w_tenum_kutf8u8a(tenum,ku8a);
623
+ if(kei !== 0) {
624
+ if(v.byteLengh >0) {
625
+ var [vsi,vei] = this["w"+tnm](v);
626
+ if(vei !==0) {
627
+ return [ksi,kei,vsi,vei];
628
+ } else {
629
+ this._fl.dloc(ksi,kei);
630
+ return [0,0,0,0]
631
+ }
632
+ } else {
633
+ return [ksi,kei,0,0]
634
+ }
635
+ } else {
636
+ return [0,0,0,0]
637
+ }
638
+ }
639
+
640
+ function _w_tenum_kutf8u8a_f64like(tenum,ku8a,v) {
641
+ var [ksi,kei] = this.w_tenum_kutf8u8a(tenum,ku8a);
642
+ if(kei !== 0) {
643
+ var [vsi,vei] = this.wf64(v);
644
+ if(vei !==0) {
645
+ return [ksi,kei,vsi,vei];
646
+ } else {
647
+ this._fl.dloc(ksi,kei);
648
+ return [0,0,0,0]
649
+ }
650
+ } else {
651
+ return [0,0,0,0]
652
+ }
653
+ }
654
+
655
+ function _w_tenum_kutf8u8a_slike(tenum,ku8a,v) {
656
+ var [ksi,kei] = this.w_tenum_kutf8u8a(tenum,ku8a);
657
+ if(kei !== 0) {
658
+ var [vsi,vei] = this.wstr(v);
659
+ if(vei !==0) {
660
+ return [ksi,kei,vsi,vei];
661
+ } else {
662
+ this._fl.dloc(ksi,kei);
663
+ return [0,0,0,0]
664
+ }
665
+ } else {
666
+ return [0,0,0,0]
667
+ }
668
+ }
669
+
670
+ function _w_tenum_kutf8u8a_other(tenum,ku8a,v) {
671
+ var [ksi,kei] = this.w_tenum_kutf8u8a(tenum,ku8a);
672
+ if(kei !== 0) {
673
+ var [vsi,vei] = this.wo(v);
674
+ if(vei !==0) {
675
+ return [ksi,kei,vsi,vei];
676
+ } else {
677
+ this._fl.dloc(ksi,kei);
678
+ return [0,0,0,0]
679
+ }
680
+ } else {
681
+ return [0,0,0,0]
682
+ }
683
+ }
684
+
685
+ async function w_tenum_kutf8u8a_val(ku8a,v) {
686
+ if(ArrayBuffer.isView(v)) { return this.w_tenum_kutf8u8a_abvw(k,v);//TypedArray | Buffer
687
+ } else if(v === undefined) { var [ksi,kei] = this.w_tenum_kutf8u8a(_tname.nm2em("u"),ku8a); return [ksi,kei,0,0];
688
+ } else if(v === null) { var [ksi,kei] = this.w_tenum_kutf8u8a(_tname.nm2em("n"),ku8a); return [ksi,kei,0,0];
689
+ } else if(v === true) { var [ksi,kei] = this.w_tenum_kutf8u8a(_tname.nm2em("t"),ku8a); return [ksi,kei,0,0];
690
+ } else if(v === false) { var [ksi,kei] = this.w_tenum_kutf8u8a(_tname.nm2em("f"),ku8a); return [ksi,kei,0,0];
691
+ var typnm = typeof(v);
692
+ if(typnm === "object") {
693
+ var clsnm = v.constructor.name;
694
+ if(clsnm === "Date") { return this._w_tenum_kutf8u8a_f64like(_tname.nm2em("mts"),ku8a,v.getTime());
695
+ } 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
696
+ } else if(V8_UNSERIALABLE_OBJ_CLSNMS.has(clsnm) || is_g(v)) { return [0,0,0,0];//"WeakSet","WeakMap","WeakRef","Promise","Iterator"
697
+ } else {
698
+ var tnm = _type.buf(v); //ArrayBuffer SharedArrayBuffer Blob Flie
699
+ if(tnm === undefined) {
700
+ tnm = _type.err(v); //Error....
701
+ if(tnm === undefined) {
702
+ try { //no-circular Array | Dict
703
+ var jstr = JSON.stringify(v);
704
+ return this._w_tenum_kutf8u8a_slike(_tname.nm2em("json"),ku8a,jstr); // 65534:json
705
+ } catch(e) {
706
+ //has circular;
707
+ if(Array.isArray(v)) {
708
+ return this._w_tenum_kutf8u8a_other(_tname.nm2em("a"),ku8a,v);
709
+ } else {
710
+ return this._w_tenum_kutf8u8a_other(_tname.nm2em("d"),ku8a,v);
711
+ }
712
+ }
713
+ } else {
714
+ return this._w_tenum_kutf8u8a_other(_tname.nm2em(tnm),ku8a,v); //Error
715
+ }
716
+ } else {
717
+ if(tnm === "blob" || tnm === "file") { //blob 和 file 只能异步写入
718
+ var [ksi,kei] = this.w_tenum_kutf8u8a(_tname.nm2em(tnm),ku8a);
719
+ if(kei!==0) {
720
+ var [vsi,vei] = await this["w"+tnm](v);
721
+ if(vei !==0) { return [ksi,kei,vsi,vei]; } else {this._fl.dloc(ksi,kei);return [0,0,0,0]}
722
+ } else {
723
+ return [0,0,0,0];
724
+ }
725
+ } else {
726
+ return this._w_tenum_kutf8u8a_other(_tname.nm2em(tnm),ku8a,v);
727
+ }
728
+ }
729
+ }
730
+ } else if(typnm === "string") { return this._w_tenum_kutf8u8a_slike(_tname.nm2em("s"), ku8a,v);
731
+ } else if(typnm === "number") { return this._w_tenum_kutf8u8a_f64like(_tname.nm2em("f64"),ku8a,v);
732
+ } else if(typnm === "bigint") { return this._w_tenum_kutf8u8a_other(_tname.nm2em("bi"),ku8a,v);
733
+ } else if(typnm === "symbol") {
734
+ var tnm = _type.sym(v);
735
+ if(tnm === "gy") {
736
+ v = v.description;
737
+ } else if(tnm === "ly_wn") {
738
+ v = v.description.split(".")[1];
739
+ } else {
740
+ return [0,0,0,0];
741
+ }
742
+ return this._w_tenum_kutf8u8a_slike(_tname.nm2em(tnm), ku8a,v);
743
+ } else {
744
+ return [0,0,0,0];
745
+ }
746
+ }
747
+ }
748
+
749
+
750
+
751
+ function r_tenum_kv(ksi,kei,vsi,vei) {
752
+ var [tenum,k] = this.r_tenum_key([ksi,kei]);
753
+ var tnm = _tname.em2nm(tenum);
754
+ return [k,this["r"+tnm]([vsi,vei])];
755
+ }
756
+
757
+
758
+
759
+
760
+
761
+ //----仅测试,此接口速度很慢,应该显式调用 this.rxxx([si,ei])
379
762
 
380
763
  function debug_read(T,[si,ei]) {
381
- var instruction = DEBUG_TBRIEF_TO_MTHD_HINT[T];
764
+ var instruction = TBRIEF_TO_MTHD_HINT[T];
382
765
  if(instruction?.r!== undefined) {
383
766
  if(instruction["?"]) {
384
767
  return this?.[instruction.r]?.([si,ei]);
@@ -440,9 +823,9 @@ function debug_wsym(o) {
440
823
  if(key_for !== undefined) {
441
824
  return ["gy",this.wstr(o.description)];
442
825
  } else {
443
- if(WELLKNOWN_SYM_ST.has(o)) {
444
- return ["ly",this.wstr(o.description.split(".")[1])];
445
- } else if(o.description !== undefined) {
826
+ if(WELLKNOWN_SYM_ST.has(o)) {
827
+ return ["ly_wn",this.wstr(o.description.split(".")[1])];
828
+ } else if(o.description !== undefined) {
446
829
  return ["ly",this.wstr(o.description)];
447
830
  } else {
448
831
  return ["ly_un",[0,0]];
@@ -450,25 +833,6 @@ function debug_wsym(o) {
450
833
  }
451
834
  }
452
835
 
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
836
 
473
837
  function debug_write(o) {
474
838
  if(o === undefined) {
@@ -479,6 +843,11 @@ function debug_write(o) {
479
843
  return ['t',[0,0]];
480
844
  } else if(o === false) {
481
845
  return ['f',[0,0]];
846
+ } else if(ArrayBuffer.isView(o)) {
847
+ var clsnm = o.constructor.name;
848
+ var tbrief = taclsnm_to_tbrief(clsnm);
849
+ var hint = TBRIEF_TO_MTHD_HINT[tbrief];
850
+ if(hint["?"]) { [tbrief,this?.[hint.w]?.(o)];} else {return [tbrief,this[hint.w](o)];}
482
851
  } else {
483
852
  var tnm = typeof(o);
484
853
  if(tnm === "string") {
@@ -493,25 +862,15 @@ function debug_write(o) {
493
862
  return ["flike",[0,0]];
494
863
  } else if(tnm === "object") {
495
864
  var clsnm = o.constructor.name;
496
- var tbrief = taclsnm_to_tbrief(clsnm);
497
- if(tbrief !== undefined) {
498
- var hint = DEBUG_TBRIEF_TO_MTHD_HINT[tbrief];
499
- if(hint["?"]) {
500
- return [tbrief,this?.[hint.w]?.(o)];
501
- } else {
502
- return [tbrief,this[hint.w](o)];
503
- }
504
- } else if(V8SERIALABLE_NONTA_OBJ_CLSNMS.includes(clsnm)) {
865
+ if (clsnm === "Blob") {
866
+ return ["blob",this.wblob(o)/*Promise*/];
867
+ } else if(clsnm === "File") {
868
+ return ["file",this.wfile(o)/*Promise*/];
869
+ } else if(V8_SERIALABLE_NONTA_OBJ_CLSNMS.has(clsnm)) {
505
870
  return ["other",this.wo(o)]
506
- } else if(
507
- clsnm === "WeakSet" ||
508
- clsnm === "WeakMap" ||
509
- clsnm === "Promise" ||
510
- clsnm === "Iterator" ||
511
- clsnm === "WeakRef" ||
512
- o[Symbol.toStringTag] === "Generator" ||
513
- o[Symbol.toStringTag] === "AyncGenerator"
514
- ) {
871
+ } else if(V8_UNSERIALABLE_OBJ_CLSNMS.has(clsnm)) {
872
+ return ["unsupported",[0,0]]
873
+ } else if(is_g(o)) {
515
874
  return ["unsupported",[0,0]]
516
875
  } else {
517
876
  return ["other",this.wo(o)]
@@ -526,8 +885,39 @@ module.exports = {
526
885
  _calc_datasz_for_dump,
527
886
  seperated_dump, dump,
528
887
  dloc,
529
- ////
530
- rstr,wstr,rjson,wjson,rta,wta,ro,wo,
888
+ ////
889
+ rstr, rs:rstr, //alias
890
+ wstr, ws:wstr, //alias
891
+ ////
892
+ rjson,wjson,
893
+ rsym, rgy,rly_wn,
894
+ wsym, wgy,wly_wn,
895
+ rta,wta,
896
+ ////
897
+ ro, rbi:ro,rdt:ro,rrgx:ro,rst:ro,rmp:ro,rbolo:ro,rnumo:ro,rstro:ro, //alias
898
+ rerrerr:ro,raggerr:ro,revlerr:ro,rrngerr:ro,rreferr:ro,rurierr:ro,rtyperr:ro,rstxerr:ro,
899
+ ra:ro,rd:ro,
900
+ wo, wbi:wo,wdt:wo,wrgx:wo,wst:wo,wmp:wo,wbolo:wo,wnumo:wo,wstro:wo, //alias
901
+ werrerr:wo,waggerr:wo,wevlerr:wo,wrngerr:wo,wreferr:wo,wurierr:wo,wtyperr:wo,wstxerr:wo,
902
+ wa:wo,wd:wo,
903
+ ////
904
+ r_tenum_key,
905
+ w_tenum_key,_w_tenum_key,
906
+ w_tenum_kutf8u8a, _w_tenum_kutf8u8a,
907
+
908
+ _w_tenum_kf64like,
909
+ _w_tenum_kslike,
910
+ _w_tenum_ko,
911
+ w_tenum_kabvw,
912
+ w_tenum_kv,
913
+
914
+ _w_tenum_kutf8u8a_f64like,
915
+ _w_tenum_kutf8u8a_slike,
916
+ _w_tenum_kutf8u8a_other,
917
+ w_tenum_kutf8u8a_abvw,
918
+ w_tenum_kutf8u8a_val,
919
+
920
+ r_tenum_kv,
531
921
  ////
532
922
  ru8,ru16,ru32,ru64,
533
923
  ri8,ri16,ri32,ri64,
@@ -535,7 +925,10 @@ module.exports = {
535
925
  wi8,wi16,wi32,wi64,
536
926
  rf32,rf64,
537
927
  wf32,wf64,
928
+ rmts,wmts,
538
929
  ////
930
+ _write_no_need_algn_typed_array,
931
+ _write_need_algn_typed_array,
539
932
  ru8a,ru8ca,ru16a,ru32a,ru64a,
540
933
  ri8a, ri16a,ri32a,ri64a,
541
934
  rf32a,rf64a,
@@ -551,14 +944,16 @@ module.exports = {
551
944
  wi32a:_write_need_algn_typed_array,
552
945
  wi64a:_write_need_algn_typed_array,
553
946
  wf32a:_write_need_algn_typed_array,
554
- wf64a:_write_need_algn_typed_array,
947
+ wf64a:_write_need_algn_typed_array,
948
+ ////
949
+ wbwstream,
950
+ rbuf, wbuf,
951
+ rblob,wblob,
952
+ rfile,wfile,
555
953
  ////
556
954
  debug_read,
557
955
  debug_wnum,debug_wbi,debug_wsym,
558
956
  debug_write,
559
- WELLKNOWN_SYM_ST,
560
- WELLKNOWN_SYMS,
561
- V8SERIALABLE_NONTA_OBJ_CLSNMS,
562
957
  }
563
958
 
564
959
  if(DataView.prototype.getFloat16 !== undefined) {