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/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 +507 -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,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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
444
|
-
return ["
|
|
445
|
-
|
|
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
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
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
|
-
|
|
508
|
-
|
|
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,
|
|
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) {
|