@cloudpss/ubjson 0.5.39 → 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.
Files changed (64) hide show
  1. package/dist/base/decoder.d.ts +1 -0
  2. package/dist/base/decoder.d.ts.map +1 -0
  3. package/dist/base/encoder.d.ts +3 -1
  4. package/dist/base/encoder.d.ts.map +1 -0
  5. package/dist/base/encoder.js +45 -188
  6. package/dist/base/encoder.js.map +1 -1
  7. package/dist/decoder.d.ts +1 -0
  8. package/dist/decoder.d.ts.map +1 -0
  9. package/dist/encoder.d.ts +5 -0
  10. package/dist/encoder.d.ts.map +1 -0
  11. package/dist/encoder.js +22 -14
  12. package/dist/encoder.js.map +1 -1
  13. package/dist/helper/constants.d.ts +1 -0
  14. package/dist/helper/constants.d.ts.map +1 -0
  15. package/dist/helper/decode.d.ts +6 -3
  16. package/dist/helper/decode.d.ts.map +1 -0
  17. package/dist/helper/decode.js +26 -15
  18. package/dist/helper/decode.js.map +1 -1
  19. package/dist/helper/encode.d.ts +19 -1
  20. package/dist/helper/encode.d.ts.map +1 -0
  21. package/dist/helper/encode.js +138 -16
  22. package/dist/helper/encode.js.map +1 -1
  23. package/dist/helper/errors.d.ts +1 -0
  24. package/dist/helper/errors.d.ts.map +1 -0
  25. package/dist/helper/string-decoder.d.ts +5 -2
  26. package/dist/helper/string-decoder.d.ts.map +1 -0
  27. package/dist/helper/string-decoder.js +10 -38
  28. package/dist/helper/string-decoder.js.map +1 -1
  29. package/dist/helper/string-encoder.d.ts +1 -0
  30. package/dist/helper/string-encoder.d.ts.map +1 -0
  31. package/dist/helper/utils.d.ts +1 -0
  32. package/dist/helper/utils.d.ts.map +1 -0
  33. package/dist/index.d.ts +1 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/rxjs/decoder.d.ts +1 -0
  36. package/dist/rxjs/decoder.d.ts.map +1 -0
  37. package/dist/rxjs/encoder.d.ts +1 -0
  38. package/dist/rxjs/encoder.d.ts.map +1 -0
  39. package/dist/rxjs/index.d.ts +1 -0
  40. package/dist/rxjs/index.d.ts.map +1 -0
  41. package/dist/stream/decoder.d.ts +1 -0
  42. package/dist/stream/decoder.d.ts.map +1 -0
  43. package/dist/stream/encoder.d.ts +1 -0
  44. package/dist/stream/encoder.d.ts.map +1 -0
  45. package/dist/stream/index.d.ts +1 -0
  46. package/dist/stream/index.d.ts.map +1 -0
  47. package/dist/stream-helper/decoder.d.ts +1 -0
  48. package/dist/stream-helper/decoder.d.ts.map +1 -0
  49. package/dist/stream-helper/encoder.d.ts +3 -1
  50. package/dist/stream-helper/encoder.d.ts.map +1 -0
  51. package/dist/stream-helper/encoder.js +31 -30
  52. package/dist/stream-helper/encoder.js.map +1 -1
  53. package/jest.config.js +1 -1
  54. package/package.json +3 -4
  55. package/src/base/encoder.ts +53 -174
  56. package/src/encoder.ts +24 -14
  57. package/src/helper/decode.ts +30 -18
  58. package/src/helper/encode.ts +141 -15
  59. package/src/helper/string-decoder.ts +10 -39
  60. package/src/stream-helper/encoder.ts +33 -33
  61. package/tests/encode.js +8 -0
  62. package/tests/string-encoding.js +1 -10
  63. package/tests/tsconfig.json +1 -7
  64. package/tsconfig.json +1 -1
@@ -10,3 +10,4 @@ export declare class DecoderBase {
10
10
  /** 解码 */
11
11
  decode(): unknown;
12
12
  }
13
+ //# sourceMappingURL=decoder.d.ts.map
@@ -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"}
@@ -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"}
@@ -1,7 +1,11 @@
1
- import { writeLength, writeTypedArrayHeader } from '../helper/encode.js';
2
- import { unsupportedType, unsupportedView } from '../helper/errors.js';
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
- // eslint-disable-next-line unicorn/prefer-math-trunc
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 (Array.isArray(value)) {
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 (!ArrayBuffer.isView(value)) {
104
- const { toJSON } = value;
105
- if (typeof toJSON == 'function') {
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.ensureCapacity(1);
110
- this.data[this.length++] = 123 /* constants.OBJECT */;
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
- if (value.byteLength > LARGE_DATA_LENGTH) {
127
- // ARRAY(1) + TYPE_MARKER(1) + TYPE(1) + COUNT_MARKER(1) + COUNT(5)
128
- writeTypedArrayHeader(this, value);
129
- this.writeLargeTypedArrayData(value);
78
+ const { toJSON } = value;
79
+ if (typeof toJSON == 'function') {
80
+ this.write(toJSON.call(value));
81
+ return;
130
82
  }
131
- else {
132
- // ARRAY(1) + TYPE_MARKER(1) + TYPE(1) + COUNT_MARKER(1) + COUNT(MAX5) + DATA
133
- this.ensureCapacity(9 + value.byteLength);
134
- this.data[this.length++] = 91 /* constants.ARRAY */;
135
- this.data[this.length++] = 36 /* constants.TYPE_MARKER */;
136
- if (value instanceof Uint8Array || value instanceof Int8Array) {
137
- // fast path for typed arrays with `BYTES_PER_ELEMENT` of 1
138
- this.data[this.length++] = value instanceof Uint8Array ? 85 /* constants.UINT8 */ : 105 /* constants.INT8 */;
139
- this.data[this.length++] = 35 /* constants.COUNT_MARKER */;
140
- writeLength(this, value.length);
141
- this.data.set(value, this.length);
142
- this.length += value.byteLength;
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.length;
238
- const bufLength = encodeInto(value, this.data, this.length + headerSize);
137
+ const { length: headerPos, data, view } = this;
138
+ const bufLength = encodeInto(value, data, headerPos + headerSize);
239
139
  if (bufLength < 0x80) {
240
- this.data[this.length++] = 105 /* constants.INT8 */;
241
- this.data[this.length++] = bufLength;
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
- this.data.copyWithin(headerPos + 3, headerPos + headerSize, headerPos + headerSize + bufLength);
145
+ data.copyWithin(headerPos + 3, headerPos + headerSize, headerPos + headerSize + bufLength);
246
146
  }
247
- this.data[this.length++] = 73 /* constants.INT16 */;
248
- this.data[this.length++] = bufLength >> 8;
249
- this.data[this.length++] = bufLength & 0xff;
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
- this.data.copyWithin(headerPos + 5, headerPos + headerSize, headerPos + headerSize + bufLength);
153
+ data.copyWithin(headerPos + 5, headerPos + headerSize, headerPos + headerSize + bufLength);
254
154
  }
255
- this.data[this.length++] = 108 /* constants.INT32 */;
256
- this.view.setInt32(this.length, bufLength);
257
- this.length += 4;
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.ensureCapacity(value.byteLength);
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
@@ -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
@@ -4,3 +4,4 @@ export declare class Decoder extends DecoderBase {
4
4
  /** 读取完毕 */
5
5
  get ended(): boolean;
6
6
  }
7
+ //# sourceMappingURL=decoder.d.ts.map
@@ -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 * 16; // 16 KiB
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
- if (this.data.byteLength >= this.length + capacity)
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
- if (size === this.pool.byteLength) {
35
- // 从 pool 中获取
36
- this.data = this.pool;
37
- this.view = new DataView(this.data.buffer);
38
- this.length = 0;
39
- return;
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, this.length);
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(this.data.subarray(0, this.length), offset);
68
+ result.set(activeBuffer, offset);
61
69
  return result;
62
70
  }
63
71
  /** 抛弃结果 */
@@ -1 +1 @@
1
- {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../src/encoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../src/encoder.ts"],"names":[],"mappings":"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"}
@@ -21,3 +21,4 @@ export declare const enum constants {
21
21
  TYPE_MARKER = 36,//'$'.charCodeAt(0)
22
22
  COUNT_MARKER = 35
23
23
  }
24
+ //# sourceMappingURL=constants.d.ts.map
@@ -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"}
@@ -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
- /** 读取 Optimized Format 数据 */
46
- export declare function readOptimizedFormatMarkers(cursor: DecodeCursor): {
45
+ /** Optimized Format 数据 */
46
+ export type OptimizedFormatMarkers = {
47
47
  type?: number;
48
48
  count: number;
49
- } | undefined;
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"}
@@ -1,7 +1,7 @@
1
1
  import { UnexpectedEofError, unsupportedType } from './errors.js';
2
- import { decode, decodeKey } from './string-decoder.js';
2
+ import { decode } from './string-decoder.js';
3
3
  import { toUint8Array } from './utils.js';
4
- const { fromEntries } = Object;
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
- object.push([readKey(cursor), read(cursor)]);
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 fromEntries(object);
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 fromEntries(object);
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 decodeKey(data, begin, end);
332
+ return decode(data, begin, end);
322
333
  }
323
334
  /** 读取 Optimized Format 数据 */
324
335
  export function readOptimizedFormatMarkers(cursor) {