@cloudpss/ubjson 0.5.38 → 0.5.40
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/base/decoder.d.ts +1 -0
- package/dist/base/decoder.d.ts.map +1 -0
- package/dist/base/encoder.d.ts +3 -1
- package/dist/base/encoder.d.ts.map +1 -0
- package/dist/base/encoder.js +45 -188
- package/dist/base/encoder.js.map +1 -1
- package/dist/decoder.d.ts +1 -0
- package/dist/decoder.d.ts.map +1 -0
- package/dist/encoder.d.ts +5 -0
- package/dist/encoder.d.ts.map +1 -0
- package/dist/encoder.js +22 -14
- package/dist/encoder.js.map +1 -1
- package/dist/helper/constants.d.ts +1 -0
- package/dist/helper/constants.d.ts.map +1 -0
- package/dist/helper/decode.d.ts +6 -3
- package/dist/helper/decode.d.ts.map +1 -0
- package/dist/helper/decode.js +26 -15
- package/dist/helper/decode.js.map +1 -1
- package/dist/helper/encode.d.ts +19 -1
- package/dist/helper/encode.d.ts.map +1 -0
- package/dist/helper/encode.js +138 -16
- package/dist/helper/encode.js.map +1 -1
- package/dist/helper/errors.d.ts +1 -0
- package/dist/helper/errors.d.ts.map +1 -0
- package/dist/helper/string-decoder.d.ts +5 -2
- package/dist/helper/string-decoder.d.ts.map +1 -0
- package/dist/helper/string-decoder.js +10 -38
- package/dist/helper/string-decoder.js.map +1 -1
- package/dist/helper/string-encoder.d.ts +1 -0
- package/dist/helper/string-encoder.d.ts.map +1 -0
- package/dist/helper/utils.d.ts +1 -0
- package/dist/helper/utils.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/rxjs/decoder.d.ts +1 -0
- package/dist/rxjs/decoder.d.ts.map +1 -0
- package/dist/rxjs/encoder.d.ts +1 -0
- package/dist/rxjs/encoder.d.ts.map +1 -0
- package/dist/rxjs/index.d.ts +1 -0
- package/dist/rxjs/index.d.ts.map +1 -0
- package/dist/stream/decoder.d.ts +1 -0
- package/dist/stream/decoder.d.ts.map +1 -0
- package/dist/stream/encoder.d.ts +1 -0
- package/dist/stream/encoder.d.ts.map +1 -0
- package/dist/stream/index.d.ts +1 -0
- package/dist/stream/index.d.ts.map +1 -0
- package/dist/stream-helper/decoder.d.ts +1 -0
- package/dist/stream-helper/decoder.d.ts.map +1 -0
- package/dist/stream-helper/encoder.d.ts +3 -1
- package/dist/stream-helper/encoder.d.ts.map +1 -0
- package/dist/stream-helper/encoder.js +31 -30
- package/dist/stream-helper/encoder.js.map +1 -1
- package/jest.config.js +1 -1
- package/package.json +3 -4
- package/src/base/encoder.ts +53 -174
- package/src/encoder.ts +24 -14
- package/src/helper/decode.ts +30 -18
- package/src/helper/encode.ts +141 -15
- package/src/helper/string-decoder.ts +10 -39
- package/src/stream-helper/encoder.ts +33 -33
- package/tests/encode.js +8 -0
- package/tests/string-encoding.js +1 -10
- package/tests/tsconfig.json +1 -7
- package/tsconfig.json +1 -1
package/dist/base/decoder.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../src/base/decoder.ts"],"names":[],"mappings":"AAIA,cAAc;AACd,qBAAa,WAAW;gBACR,IAAI,EAAE,UAAU;IAK5B,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IACpC,cAAc;IACd,SAAS,CAAC,MAAM,SAAK;IACrB,UAAU;IACV,SAAS,CAAC,GAAG,IAAI,KAAK;IAItB,SAAS;IACT,MAAM,IAAI,OAAO;CAKpB"}
|
package/dist/base/encoder.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type TypedArrayType } from '../helper/encode.js';
|
|
1
2
|
/** 编码至 ubjson */
|
|
2
3
|
export declare abstract class EncoderBase {
|
|
3
4
|
/** 当前写指针位置 */
|
|
@@ -19,5 +20,6 @@ export declare abstract class EncoderBase {
|
|
|
19
20
|
/** 写入大字符串 */
|
|
20
21
|
protected writeLargeStringData(value: string): void;
|
|
21
22
|
/** 写入数组 */
|
|
22
|
-
protected writeLargeTypedArrayData(value: ArrayBufferView): void;
|
|
23
|
+
protected writeLargeTypedArrayData(type: TypedArrayType, value: ArrayBufferView): void;
|
|
23
24
|
}
|
|
25
|
+
//# sourceMappingURL=encoder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../src/base/encoder.ts"],"names":[],"mappings":"AACA,OAAO,EAGH,KAAK,cAAc,EAKtB,MAAM,qBAAqB,CAAC;AAU7B,iBAAiB;AACjB,8BAAsB,WAAW;IAC7B,cAAc;IACd,SAAS,CAAC,MAAM,SAAK;IACrB,SAAS;IACT,SAAS,CAAC,IAAI,EAAG,UAAU,CAAC;IAC5B,wBAAwB;IACxB,SAAS,CAAC,IAAI,EAAG,QAAQ,CAAC;IAC1B;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAEzD,wCAAwC;IACxC,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAQ1C,aAAa;IACb,OAAO,CAAC,KAAK;IA8Fb,sBAAsB;IACtB,OAAO,CAAC,eAAe;IAmCvB,aAAa;IACb,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWnD,WAAW;IACX,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI;CAGzF"}
|
package/dist/base/encoder.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { unsupportedType
|
|
1
|
+
import { I8_MASK, writeNumber, writeTypedArray, writeTypedArrayData, writeTypedArrayHeader, } from '../helper/encode.js';
|
|
2
|
+
import { unsupportedType } from '../helper/errors.js';
|
|
3
3
|
import { stringByteLength, encodeInto } from '../helper/string-encoder.js';
|
|
4
4
|
const LARGE_DATA_LENGTH = 65536;
|
|
5
|
+
const { isArray } = Array;
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
7
|
+
const { isView } = ArrayBuffer;
|
|
8
|
+
const { keys: objectKeys } = Object;
|
|
5
9
|
/** 编码至 ubjson */
|
|
6
10
|
export class EncoderBase {
|
|
7
11
|
/** 当前写指针位置 */
|
|
@@ -36,52 +40,14 @@ export class EncoderBase {
|
|
|
36
40
|
}
|
|
37
41
|
return;
|
|
38
42
|
case 'number':
|
|
39
|
-
|
|
40
|
-
if ((value | 0) === value) {
|
|
41
|
-
if (value >= 0 && value <= 255) {
|
|
42
|
-
this.ensureCapacity(2);
|
|
43
|
-
this.data[this.length++] = 85 /* constants.UINT8 */;
|
|
44
|
-
this.data[this.length++] = value;
|
|
45
|
-
}
|
|
46
|
-
else if (value >= -128 && value <= 127) {
|
|
47
|
-
this.ensureCapacity(2);
|
|
48
|
-
this.data[this.length++] = 105 /* constants.INT8 */;
|
|
49
|
-
this.data[this.length++] = value;
|
|
50
|
-
}
|
|
51
|
-
else if (value >= -32768 && value <= 32767) {
|
|
52
|
-
this.ensureCapacity(3);
|
|
53
|
-
this.data[this.length++] = 73 /* constants.INT16 */;
|
|
54
|
-
this.data[this.length++] = value >> 8;
|
|
55
|
-
this.data[this.length++] = value & 0xff;
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
this.ensureCapacity(5);
|
|
59
|
-
this.data[this.length++] = 108 /* constants.INT32 */;
|
|
60
|
-
this.view.setInt32(this.length, value);
|
|
61
|
-
this.length += 4;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
else if (Number.isNaN(value) || Math.fround(value) === value) {
|
|
65
|
-
// 如果不会损失精度,使用 32 位浮点
|
|
66
|
-
this.ensureCapacity(5);
|
|
67
|
-
this.data[this.length++] = 100 /* constants.FLOAT32 */;
|
|
68
|
-
this.view.setFloat32(this.length, value);
|
|
69
|
-
this.length += 4;
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
this.ensureCapacity(9);
|
|
73
|
-
this.data[this.length++] = 68 /* constants.FLOAT64 */;
|
|
74
|
-
this.view.setFloat64(this.length, value);
|
|
75
|
-
this.length += 8;
|
|
76
|
-
}
|
|
77
|
-
return;
|
|
43
|
+
return writeNumber(this, value);
|
|
78
44
|
case 'object': {
|
|
79
45
|
if (value === null) {
|
|
80
46
|
this.ensureCapacity(1);
|
|
81
47
|
this.data[this.length++] = 90 /* constants.NULL */;
|
|
82
48
|
return;
|
|
83
49
|
}
|
|
84
|
-
if (
|
|
50
|
+
if (isArray(value)) {
|
|
85
51
|
this.ensureCapacity(1);
|
|
86
52
|
this.data[this.length++] = 91 /* constants.ARRAY */;
|
|
87
53
|
const size = value.length;
|
|
@@ -100,101 +66,35 @@ export class EncoderBase {
|
|
|
100
66
|
this.data[this.length++] = 93 /* constants.ARRAY_END */;
|
|
101
67
|
return;
|
|
102
68
|
}
|
|
103
|
-
if (
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
this.write(toJSON.call(value));
|
|
69
|
+
if (isView(value)) {
|
|
70
|
+
if (value.byteLength <= LARGE_DATA_LENGTH) {
|
|
71
|
+
writeTypedArray(this, value);
|
|
107
72
|
return;
|
|
108
73
|
}
|
|
109
|
-
this
|
|
110
|
-
this.
|
|
111
|
-
// 生成稳定的结果以便 hash 计算
|
|
112
|
-
const keys = Object.keys(value).sort();
|
|
113
|
-
const size = keys.length;
|
|
114
|
-
for (let index = 0; index < size; index++) {
|
|
115
|
-
const key = keys[index];
|
|
116
|
-
const element = value[key];
|
|
117
|
-
if (element === undefined || typeof element == 'function')
|
|
118
|
-
continue;
|
|
119
|
-
this.writeStringData(key);
|
|
120
|
-
this.write(element);
|
|
121
|
-
}
|
|
122
|
-
this.ensureCapacity(1);
|
|
123
|
-
this.data[this.length++] = 125 /* constants.OBJECT_END */;
|
|
74
|
+
const type = writeTypedArrayHeader(this, value);
|
|
75
|
+
this.writeLargeTypedArrayData(type, value);
|
|
124
76
|
return;
|
|
125
77
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
78
|
+
const { toJSON } = value;
|
|
79
|
+
if (typeof toJSON == 'function') {
|
|
80
|
+
this.write(toJSON.call(value));
|
|
81
|
+
return;
|
|
130
82
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
const arrayLength = value
|
|
146
|
-
.length;
|
|
147
|
-
const elementSize = value
|
|
148
|
-
.BYTES_PER_ELEMENT;
|
|
149
|
-
if (value instanceof Float64Array) {
|
|
150
|
-
this.data[this.length++] = 68 /* constants.FLOAT64 */;
|
|
151
|
-
this.data[this.length++] = 35 /* constants.COUNT_MARKER */;
|
|
152
|
-
writeLength(this, arrayLength);
|
|
153
|
-
for (let i = 0; i < arrayLength; i++) {
|
|
154
|
-
this.view.setFloat64(this.length, value[i]);
|
|
155
|
-
this.length += elementSize;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
else if (value instanceof Int32Array) {
|
|
159
|
-
this.data[this.length++] = 108 /* constants.INT32 */;
|
|
160
|
-
this.data[this.length++] = 35 /* constants.COUNT_MARKER */;
|
|
161
|
-
writeLength(this, arrayLength);
|
|
162
|
-
for (let i = 0; i < arrayLength; i++) {
|
|
163
|
-
this.view.setInt32(this.length, value[i]);
|
|
164
|
-
this.length += elementSize;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
else if (value instanceof Int16Array) {
|
|
168
|
-
this.data[this.length++] = 73 /* constants.INT16 */;
|
|
169
|
-
this.data[this.length++] = 35 /* constants.COUNT_MARKER */;
|
|
170
|
-
writeLength(this, arrayLength);
|
|
171
|
-
for (let i = 0; i < arrayLength; i++) {
|
|
172
|
-
this.view.setInt16(this.length, value[i]);
|
|
173
|
-
this.length += elementSize;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
else if (value instanceof Float32Array) {
|
|
177
|
-
this.data[this.length++] = 100 /* constants.FLOAT32 */;
|
|
178
|
-
this.data[this.length++] = 35 /* constants.COUNT_MARKER */;
|
|
179
|
-
writeLength(this, arrayLength);
|
|
180
|
-
for (let i = 0; i < arrayLength; i++) {
|
|
181
|
-
this.view.setFloat32(this.length, value[i]);
|
|
182
|
-
this.length += elementSize;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
else if (value instanceof BigInt64Array) {
|
|
186
|
-
this.data[this.length++] = 76 /* constants.INT64 */;
|
|
187
|
-
this.data[this.length++] = 35 /* constants.COUNT_MARKER */;
|
|
188
|
-
writeLength(this, arrayLength);
|
|
189
|
-
for (let i = 0; i < arrayLength; i++) {
|
|
190
|
-
this.view.setBigInt64(this.length, value[i]);
|
|
191
|
-
this.length += elementSize;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
unsupportedView(value);
|
|
196
|
-
}
|
|
83
|
+
// 生成稳定的结果以便 hash 计算
|
|
84
|
+
const keys = objectKeys(value).sort();
|
|
85
|
+
const size = keys.length;
|
|
86
|
+
this.ensureCapacity(2 + size);
|
|
87
|
+
this.data[this.length++] = 123 /* constants.OBJECT */;
|
|
88
|
+
for (let index = 0; index < size; index++) {
|
|
89
|
+
const key = keys[index];
|
|
90
|
+
const element = value[key];
|
|
91
|
+
if (element === undefined || typeof element == 'function')
|
|
92
|
+
continue;
|
|
93
|
+
this.writeStringData(key);
|
|
94
|
+
this.write(element);
|
|
197
95
|
}
|
|
96
|
+
this.ensureCapacity(1);
|
|
97
|
+
this.data[this.length++] = 125 /* constants.OBJECT_END */;
|
|
198
98
|
return;
|
|
199
99
|
}
|
|
200
100
|
case 'boolean':
|
|
@@ -234,29 +134,28 @@ export class EncoderBase {
|
|
|
234
134
|
this.ensureCapacity(maxUsage + 5 + 3);
|
|
235
135
|
// 预估头部大小
|
|
236
136
|
const headerSize = strLength < 0x80 ? 2 : strLength < 0x8000 ? 3 : 5;
|
|
237
|
-
const headerPos = this
|
|
238
|
-
const bufLength = encodeInto(value,
|
|
137
|
+
const { length: headerPos, data, view } = this;
|
|
138
|
+
const bufLength = encodeInto(value, data, headerPos + headerSize);
|
|
239
139
|
if (bufLength < 0x80) {
|
|
240
|
-
|
|
241
|
-
this.
|
|
140
|
+
view.setInt16(headerPos, I8_MASK | bufLength);
|
|
141
|
+
this.length = headerPos + 2 + bufLength;
|
|
242
142
|
}
|
|
243
143
|
else if (bufLength < 0x8000) {
|
|
244
144
|
if (headerSize < 3) {
|
|
245
|
-
|
|
145
|
+
data.copyWithin(headerPos + 3, headerPos + headerSize, headerPos + headerSize + bufLength);
|
|
246
146
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
this.
|
|
147
|
+
data[headerPos] = 73 /* constants.INT16 */;
|
|
148
|
+
view.setInt16(headerPos + 1, bufLength);
|
|
149
|
+
this.length = headerPos + 3 + bufLength;
|
|
250
150
|
}
|
|
251
151
|
else {
|
|
252
152
|
if (headerSize < 5) {
|
|
253
|
-
|
|
153
|
+
data.copyWithin(headerPos + 5, headerPos + headerSize, headerPos + headerSize + bufLength);
|
|
254
154
|
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
this.length
|
|
155
|
+
data[headerPos] = 108 /* constants.INT32 */;
|
|
156
|
+
view.setInt32(headerPos + 1, bufLength);
|
|
157
|
+
this.length = headerPos + 5 + bufLength;
|
|
258
158
|
}
|
|
259
|
-
this.length += bufLength;
|
|
260
159
|
}
|
|
261
160
|
/** 写入大字符串 */
|
|
262
161
|
writeLargeStringData(value) {
|
|
@@ -270,50 +169,8 @@ export class EncoderBase {
|
|
|
270
169
|
this.length += binLen;
|
|
271
170
|
}
|
|
272
171
|
/** 写入数组 */
|
|
273
|
-
writeLargeTypedArrayData(value) {
|
|
274
|
-
this
|
|
275
|
-
if (value instanceof Uint8Array || value instanceof Int8Array) {
|
|
276
|
-
// fast path for typed arrays with `BYTES_PER_ELEMENT` of 1
|
|
277
|
-
this.data.set(value, this.length);
|
|
278
|
-
this.length += value.byteLength;
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
const arrayLength = value.length;
|
|
282
|
-
const elementSize = value
|
|
283
|
-
.BYTES_PER_ELEMENT;
|
|
284
|
-
if (value instanceof Int16Array) {
|
|
285
|
-
for (let i = 0; i < arrayLength; i++) {
|
|
286
|
-
this.view.setInt16(this.length, value[i]);
|
|
287
|
-
this.length += elementSize;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
else if (value instanceof Int32Array) {
|
|
291
|
-
for (let i = 0; i < arrayLength; i++) {
|
|
292
|
-
this.view.setInt32(this.length, value[i]);
|
|
293
|
-
this.length += elementSize;
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
else if (value instanceof Float32Array) {
|
|
297
|
-
for (let i = 0; i < arrayLength; i++) {
|
|
298
|
-
this.view.setFloat32(this.length, value[i]);
|
|
299
|
-
this.length += elementSize;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
else if (value instanceof Float64Array) {
|
|
303
|
-
for (let i = 0; i < arrayLength; i++) {
|
|
304
|
-
this.view.setFloat64(this.length, value[i]);
|
|
305
|
-
this.length += elementSize;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
else if (value instanceof BigInt64Array) {
|
|
309
|
-
for (let i = 0; i < arrayLength; i++) {
|
|
310
|
-
this.view.setBigInt64(this.length, value[i]);
|
|
311
|
-
this.length += elementSize;
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
else {
|
|
315
|
-
unsupportedView(value);
|
|
316
|
-
}
|
|
172
|
+
writeLargeTypedArrayData(type, value) {
|
|
173
|
+
writeTypedArrayData(this, type, value);
|
|
317
174
|
}
|
|
318
175
|
}
|
|
319
176
|
//# sourceMappingURL=encoder.js.map
|
package/dist/base/encoder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../src/base/encoder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../src/base/encoder.ts"],"names":[],"mappings":"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"}
|
package/dist/decoder.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../src/decoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,gBAAgB;AAChB,qBAAa,OAAQ,SAAQ,WAAW;IACpC,WAAW;IACX,IAAI,KAAK,IAAI,OAAO,CAEnB;CACJ"}
|
package/dist/encoder.d.ts
CHANGED
|
@@ -4,10 +4,14 @@ export declare class Encoder extends EncoderBase {
|
|
|
4
4
|
private readonly flushedBuffers;
|
|
5
5
|
/** 通过内存池减少分配 */
|
|
6
6
|
private readonly pool;
|
|
7
|
+
/** 缓存当前容量,避免对象访问耗时 */
|
|
8
|
+
private capacity;
|
|
7
9
|
/**
|
|
8
10
|
* 确保 buffer 还有 capacity 的空闲空间
|
|
9
11
|
*/
|
|
10
12
|
protected ensureCapacity(capacity: number): void;
|
|
13
|
+
/** 提交并扩容 */
|
|
14
|
+
protected flushBuffer(capacity: number): void;
|
|
11
15
|
/** 分配 buffer */
|
|
12
16
|
private allocUnsafe;
|
|
13
17
|
/** 获取结果 */
|
|
@@ -23,3 +27,4 @@ export declare class Encoder extends EncoderBase {
|
|
|
23
27
|
export declare function getEncoder(): Encoder;
|
|
24
28
|
/** 重置编码器, For testing only */
|
|
25
29
|
export declare function resetEncoder(): void;
|
|
30
|
+
//# sourceMappingURL=encoder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../src/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKhD,iBAAiB;AACjB,qBAAa,OAAQ,SAAQ,WAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;IACnD,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8B;IACnD,sBAAsB;IACtB,OAAO,CAAC,QAAQ,CAAK;IACrB;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAYhD,YAAY;IACZ,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa7C,gBAAgB;IAChB,OAAO,CAAC,WAAW;IAanB,WAAW;IACX,OAAO,CAAC,SAAS;IAqBjB,WAAW;IACX,OAAO,CAAC,WAAW;IAInB,aAAa;IACb,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU;IAWlC,aAAa;IACb,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,UAAU;CAYnD;AAID,eAAe;AACf,wBAAgB,UAAU,IAAI,OAAO,CAKpC;AAED,8BAA8B;AAC9B,wBAAgB,YAAY,IAAI,IAAI,CAEnC"}
|
package/dist/encoder.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { EncoderBase } from './base/encoder.js';
|
|
2
|
-
const BLOCK_SIZE = 1024 *
|
|
2
|
+
const BLOCK_SIZE = 1024 * 64; // 64 KiB
|
|
3
3
|
const MAX_SIZE = 1024 * 1024 * 128; //128 MiB
|
|
4
4
|
/** 编码至 ubjson */
|
|
5
5
|
export class Encoder extends EncoderBase {
|
|
6
6
|
flushedBuffers = [];
|
|
7
7
|
/** 通过内存池减少分配 */
|
|
8
8
|
pool = new Uint8Array(BLOCK_SIZE);
|
|
9
|
+
/** 缓存当前容量,避免对象访问耗时 */
|
|
10
|
+
capacity = 0;
|
|
9
11
|
/**
|
|
10
12
|
* 确保 buffer 还有 capacity 的空闲空间
|
|
11
13
|
*/
|
|
@@ -14,9 +16,14 @@ export class Encoder extends EncoderBase {
|
|
|
14
16
|
// 超过最大尺寸限制
|
|
15
17
|
throw new Error('Buffer has exceed max size');
|
|
16
18
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
if (this.capacity >= this.length + capacity) {
|
|
20
|
+
// 无需扩容
|
|
19
21
|
return;
|
|
22
|
+
}
|
|
23
|
+
this.flushBuffer(capacity);
|
|
24
|
+
}
|
|
25
|
+
/** 提交并扩容 */
|
|
26
|
+
flushBuffer(capacity) {
|
|
20
27
|
// 提交目前的数据
|
|
21
28
|
if (this.data === this.pool) {
|
|
22
29
|
this.flushedBuffers.push(this.data.slice(0, this.length));
|
|
@@ -31,16 +38,15 @@ export class Encoder extends EncoderBase {
|
|
|
31
38
|
}
|
|
32
39
|
/** 分配 buffer */
|
|
33
40
|
allocUnsafe(size) {
|
|
34
|
-
|
|
35
|
-
// 从 pool 中获取
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
this.data = new Uint8Array(size);
|
|
42
|
-
this.view = new DataView(this.data.buffer);
|
|
41
|
+
const data = size === BLOCK_SIZE
|
|
42
|
+
? // 从 pool 中获取
|
|
43
|
+
this.pool
|
|
44
|
+
: // 新建 buffer
|
|
45
|
+
new Uint8Array(size);
|
|
46
|
+
this.data = data;
|
|
47
|
+
this.view = new DataView(data.buffer);
|
|
43
48
|
this.length = 0;
|
|
49
|
+
this.capacity = size;
|
|
44
50
|
}
|
|
45
51
|
/** 获取结果 */
|
|
46
52
|
getResult() {
|
|
@@ -49,15 +55,17 @@ export class Encoder extends EncoderBase {
|
|
|
49
55
|
return this.data.slice(0, this.length);
|
|
50
56
|
}
|
|
51
57
|
// 合并缓冲区
|
|
58
|
+
const { length } = this;
|
|
59
|
+
const activeBuffer = this.data.subarray(0, length);
|
|
52
60
|
const flushedBuffers = this.flushedBuffers.splice(0);
|
|
53
|
-
const size = flushedBuffers.reduce((sum, buffer) => sum + buffer.byteLength,
|
|
61
|
+
const size = flushedBuffers.reduce((sum, buffer) => sum + buffer.byteLength, length);
|
|
54
62
|
const result = new Uint8Array(size);
|
|
55
63
|
let offset = 0;
|
|
56
64
|
for (const buffer of flushedBuffers) {
|
|
57
65
|
result.set(buffer, offset);
|
|
58
66
|
offset += buffer.byteLength;
|
|
59
67
|
}
|
|
60
|
-
result.set(
|
|
68
|
+
result.set(activeBuffer, offset);
|
|
61
69
|
return result;
|
|
62
70
|
}
|
|
63
71
|
/** 抛弃结果 */
|
package/dist/encoder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoder.js","sourceRoot":"","sources":["../src/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,SAAS;AACvC,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,SAAS;AAE7C,iBAAiB;AACjB,MAAM,OAAO,OAAQ,SAAQ,WAAW;IACnB,cAAc,GAAiB,EAAE,CAAC;IACnD,gBAAgB;IACC,IAAI,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IACnD;;OAEG;IACO,cAAc,CAAC,QAAgB;QACrC,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;YACtB,WAAW;YACX,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAClD,CAAC;QACD,
|
|
1
|
+
{"version":3,"file":"encoder.js","sourceRoot":"","sources":["../src/encoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/helper/constants.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,0BAAkB,SAAS;IACvB,IAAI,KAAK,CAAE,mBAAmB;IAC9B,KAAK,KAAK,CAAE,mBAAmB;IAC/B,IAAI,KAAK,CAAE,mBAAmB;IAC9B,KAAK,KAAK,CAAE,mBAAmB;IAC/B,IAAI,MAAM,CAAE,mBAAmB;IAC/B,KAAK,KAAK,CAAE,mBAAmB;IAC/B,KAAK,KAAK,CAAE,mBAAmB;IAC/B,KAAK,MAAM,CAAE,mBAAmB;IAChC,KAAK,KAAK,CAAE,mBAAmB;IAC/B,OAAO,MAAM,CAAE,mBAAmB;IAClC,OAAO,KAAK,CAAE,mBAAmB;IACjC,qBAAqB,KAAK,CAAE,mBAAmB;IAC/C,IAAI,KAAK,CAAE,mBAAmB;IAC9B,MAAM,KAAK,CAAE,mBAAmB;IAEhC,KAAK,KAAK,CAAE,mBAAmB;IAC/B,SAAS,KAAK,CAAE,mBAAmB;IACnC,MAAM,MAAM,CAAE,mBAAmB;IACjC,UAAU,MAAM,CAAE,mBAAmB;IAErC,WAAW,KAAK,CAAE,mBAAmB;IACrC,YAAY,KAAK;CACpB"}
|
package/dist/helper/decode.d.ts
CHANGED
|
@@ -42,8 +42,11 @@ export declare function read(cursor: DecodeCursor): unknown;
|
|
|
42
42
|
export declare function readData(cursor: DecodeCursor, marker: number): unknown;
|
|
43
43
|
/** readKey */
|
|
44
44
|
export declare function readKey(cursor: DecodeCursor): string;
|
|
45
|
-
/**
|
|
46
|
-
export
|
|
45
|
+
/** Optimized Format 数据 */
|
|
46
|
+
export type OptimizedFormatMarkers = {
|
|
47
47
|
type?: number;
|
|
48
48
|
count: number;
|
|
49
|
-
}
|
|
49
|
+
};
|
|
50
|
+
/** 读取 Optimized Format 数据 */
|
|
51
|
+
export declare function readOptimizedFormatMarkers(cursor: DecodeCursor): OptimizedFormatMarkers | undefined;
|
|
52
|
+
//# sourceMappingURL=decode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../src/helper/decode.ts"],"names":[],"mappings":"AAOA,WAAW;AACX,MAAM,WAAW,YAAY;IACzB,SAAS;IACT,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,SAAS;IACT,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe;IACf,GAAG,IAAI,KAAK,CAAC;CAChB;AAED,aAAa;AACb,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAW3D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAM9E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAOvD;AAED,mBAAmB;AACnB,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA+BvD;AAED,mBAAmB;AACnB,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAMzD;AACD,oBAAoB;AACpB,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAI1D;AACD,oBAAoB;AACpB,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQ1D;AACD,oBAAoB;AACpB,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQ1D;AACD,oBAAoB;AACpB,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQ1D;AACD,sBAAsB;AACtB,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQ5D;AACD,sBAAsB;AACtB,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQ5D;AAED,WAAW;AACX,wBAAgB,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAGlD;AAiBD,iBAAiB;AACjB,wBAAgB,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAgKtE;AAED,cAAc;AACd,wBAAgB,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQpD;AAED,0BAA0B;AAC1B,MAAM,MAAM,sBAAsB,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACtE,6BAA6B;AAC7B,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,YAAY,GAAG,sBAAsB,GAAG,SAAS,CAmBnG"}
|
package/dist/helper/decode.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { UnexpectedEofError, unsupportedType } from './errors.js';
|
|
2
|
-
import { decode
|
|
2
|
+
import { decode } from './string-decoder.js';
|
|
3
3
|
import { toUint8Array } from './utils.js';
|
|
4
|
-
const {
|
|
4
|
+
const { defineProperty } = Object;
|
|
5
5
|
const { fromCharCode } = String;
|
|
6
6
|
/** 创建数据包装 */
|
|
7
7
|
export function DecodeCursor(data) {
|
|
@@ -148,6 +148,20 @@ export function read(cursor) {
|
|
|
148
148
|
const marker = readMarker(cursor);
|
|
149
149
|
return readData(cursor, marker);
|
|
150
150
|
}
|
|
151
|
+
/** 读取优化对象数据 */
|
|
152
|
+
function readObjectOptimizedData(cursor, marker) {
|
|
153
|
+
const { count, type } = marker;
|
|
154
|
+
const object = {};
|
|
155
|
+
for (let i = 0; i < count; i++) {
|
|
156
|
+
const key = readKey(cursor);
|
|
157
|
+
const value = readData(cursor, type ?? readMarker(cursor));
|
|
158
|
+
if (key === '__proto__') {
|
|
159
|
+
defineProperty(object, key, { value, enumerable: true, configurable: true, writable: true });
|
|
160
|
+
}
|
|
161
|
+
object[key] = value;
|
|
162
|
+
}
|
|
163
|
+
return object;
|
|
164
|
+
}
|
|
151
165
|
/** 根据标签读取后续数据 */
|
|
152
166
|
export function readData(cursor, marker) {
|
|
153
167
|
// 按照出现频率排序
|
|
@@ -166,22 +180,19 @@ export function readData(cursor, marker) {
|
|
|
166
180
|
const markers = readOptimizedFormatMarkers(cursor);
|
|
167
181
|
if (markers == null) {
|
|
168
182
|
// 直到 '}'
|
|
169
|
-
const object =
|
|
183
|
+
const object = {};
|
|
170
184
|
while (readMarker(cursor) !== 125 /* constants.OBJECT_END */) {
|
|
171
185
|
cursor.offset--;
|
|
172
|
-
|
|
186
|
+
const key = readKey(cursor);
|
|
187
|
+
const value = read(cursor);
|
|
188
|
+
if (key === '__proto__') {
|
|
189
|
+
defineProperty(object, key, { value, enumerable: true, configurable: true, writable: true });
|
|
190
|
+
}
|
|
191
|
+
object[key] = value;
|
|
173
192
|
}
|
|
174
|
-
return
|
|
175
|
-
}
|
|
176
|
-
const { count, type } = markers;
|
|
177
|
-
const object = [];
|
|
178
|
-
object.length = count;
|
|
179
|
-
for (let i = 0; i < count; i++) {
|
|
180
|
-
const key = readKey(cursor);
|
|
181
|
-
const value = readData(cursor, type ?? readMarker(cursor));
|
|
182
|
-
object[i] = [key, value];
|
|
193
|
+
return object;
|
|
183
194
|
}
|
|
184
|
-
return
|
|
195
|
+
return readObjectOptimizedData(cursor, markers);
|
|
185
196
|
}
|
|
186
197
|
case 91 /* constants.ARRAY */: {
|
|
187
198
|
const markers = readOptimizedFormatMarkers(cursor);
|
|
@@ -318,7 +329,7 @@ export function readKey(cursor) {
|
|
|
318
329
|
const { data } = cursor;
|
|
319
330
|
if (end > data.length)
|
|
320
331
|
cursor.eof();
|
|
321
|
-
return
|
|
332
|
+
return decode(data, begin, end);
|
|
322
333
|
}
|
|
323
334
|
/** 读取 Optimized Format 数据 */
|
|
324
335
|
export function readOptimizedFormatMarkers(cursor) {
|