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/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,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
- var ta= this[hint.r](rng);
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
- //----仅测试,此接口速度很慢,应该显式调用 this.rxxx([si,ei])
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
- 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
- };
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 = DEBUG_TBRIEF_TO_MTHD_HINT[T];
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
- if(WELLKNOWN_SYM_ST.has(o)) {
444
- return ["ly",this.wstr(o.description.split(".")[1])];
445
- } else if(o.description !== undefined) {
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
- 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)) {
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
- 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
- ) {
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,wstr,rjson,wjson,rta,wta,ro,wo,
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) {