@cloudpss/ubjson 0.3.5 → 0.3.8

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 (59) hide show
  1. package/benchmark-string.js +18 -20
  2. package/benchmark.js +1 -0
  3. package/dist/{constants.d.ts → common/constants.d.ts} +0 -0
  4. package/dist/{constants.js → common/constants.js} +0 -0
  5. package/dist/common/constants.js.map +1 -0
  6. package/dist/common/decoder.d.ts +48 -0
  7. package/dist/{decoder.js → common/decoder.js} +13 -18
  8. package/dist/common/decoder.js.map +1 -0
  9. package/dist/common/encoder.d.ts +74 -0
  10. package/dist/common/encoder.js +282 -0
  11. package/dist/common/encoder.js.map +1 -0
  12. package/dist/common/string-decoder.d.ts +13 -0
  13. package/dist/common/string-decoder.js +106 -0
  14. package/dist/common/string-decoder.js.map +1 -0
  15. package/dist/{string-encoder.d.ts → common/string-encoder.d.ts} +0 -0
  16. package/dist/{string-encoder.js → common/string-encoder.js} +0 -0
  17. package/dist/common/string-encoder.js.map +1 -0
  18. package/dist/encoder.d.ts +10 -2
  19. package/dist/encoder.js +2 -283
  20. package/dist/encoder.js.map +1 -1
  21. package/dist/index.d.ts +4 -2
  22. package/dist/index.js +12 -2
  23. package/dist/index.js.map +1 -1
  24. package/dist/stream/encoder.d.ts +14 -0
  25. package/dist/stream/encoder.js +86 -0
  26. package/dist/stream/encoder.js.map +1 -0
  27. package/dist/stream/index.d.ts +4 -0
  28. package/dist/stream/index.js +7 -0
  29. package/dist/stream/index.js.map +1 -0
  30. package/index.d.ts +7 -0
  31. package/jest.config.js +3 -0
  32. package/package.json +12 -8
  33. package/src/{constants.ts → common/constants.ts} +0 -0
  34. package/src/{decoder.ts → common/decoder.ts} +13 -18
  35. package/src/common/encoder.ts +305 -0
  36. package/src/common/string-decoder.ts +107 -0
  37. package/src/{string-encoder.ts → common/string-encoder.ts} +0 -0
  38. package/src/encoder.ts +4 -305
  39. package/src/index.ts +14 -2
  40. package/src/stream/encoder.ts +83 -0
  41. package/src/stream/index.ts +8 -0
  42. package/tests/decode.js +433 -0
  43. package/{test → tests}/e2e.js +19 -27
  44. package/tests/encode.js +354 -0
  45. package/tests/stream/encode.js +380 -0
  46. package/tests/string-encoding.js +71 -0
  47. package/tests/tsconfig.json +7 -0
  48. package/tsconfig.json +1 -2
  49. package/dist/constants.js.map +0 -1
  50. package/dist/decoder.d.ts +0 -2
  51. package/dist/decoder.js.map +0 -1
  52. package/dist/string-decoder.d.ts +0 -9
  53. package/dist/string-decoder.js +0 -67
  54. package/dist/string-decoder.js.map +0 -1
  55. package/dist/string-encoder.js.map +0 -1
  56. package/src/string-decoder.ts +0 -69
  57. package/test/decode.js +0 -491
  58. package/test/encode.js +0 -432
  59. package/test/string-encoding.js +0 -62
@@ -0,0 +1,106 @@
1
+ export const textDecoder = typeof TextDecoder == 'function' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: false }) : null;
2
+ export const TEXT_ENCODER_THRESHOLD = textDecoder == null ? 4294967295 : 200;
3
+ const CHUNK_SIZE = 4096;
4
+ /** 解码 */
5
+ export function decodeJs(bytes, begin, end) {
6
+ let offset = begin;
7
+ const units = [];
8
+ let result = '';
9
+ while (offset < end) {
10
+ const byte1 = bytes[offset++];
11
+ if ((byte1 & 0x80) === 0) {
12
+ // 1 byte
13
+ units.push(byte1);
14
+ }
15
+ else if ((byte1 & 0xe0) === 0xc0) {
16
+ // 2 bytes
17
+ const byte2 = bytes[offset++] & 0x3f;
18
+ units.push(((byte1 & 0x1f) << 6) | byte2);
19
+ }
20
+ else if ((byte1 & 0xf0) === 0xe0) {
21
+ // 3 bytes
22
+ const byte2 = bytes[offset++] & 0x3f;
23
+ const byte3 = bytes[offset++] & 0x3f;
24
+ units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);
25
+ }
26
+ else if ((byte1 & 0xf8) === 0xf0) {
27
+ // 4 bytes
28
+ const byte2 = bytes[offset++] & 0x3f;
29
+ const byte3 = bytes[offset++] & 0x3f;
30
+ const byte4 = bytes[offset++] & 0x3f;
31
+ let unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;
32
+ if (unit > 0xffff) {
33
+ unit -= 0x10000;
34
+ units.push(((unit >>> 10) & 0x3ff) | 0xd800);
35
+ unit = 0xdc00 | (unit & 0x3ff);
36
+ }
37
+ units.push(unit);
38
+ }
39
+ else {
40
+ units.push(byte1);
41
+ }
42
+ if (units.length >= CHUNK_SIZE) {
43
+ result += String.fromCharCode(...units);
44
+ units.length = 0;
45
+ }
46
+ }
47
+ if (units.length > 0) {
48
+ result += String.fromCharCode(...units);
49
+ }
50
+ return result;
51
+ }
52
+ /** 解码 */
53
+ export function decode(data, begin, end) {
54
+ if (end - begin <
55
+ TEXT_ENCODER_THRESHOLD // 只有小字符串有优化价值,见 benchmark-string.js
56
+ ) {
57
+ // 为小字符串优化
58
+ return decodeJs(data, begin, end);
59
+ }
60
+ // 使用系统解码
61
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
62
+ return textDecoder.decode(data.subarray(begin, end));
63
+ }
64
+ /** 特别优化字符串解码速度 */
65
+ export class StringDecoder {
66
+ constructor() {
67
+ /** 小字符串缓存 */
68
+ this.cache = [
69
+ undefined,
70
+ undefined,
71
+ new Map(),
72
+ new Map(),
73
+ new Map(),
74
+ new Map(),
75
+ new Map(), // 6 字节
76
+ ];
77
+ }
78
+ /** 字符串解码 */
79
+ decode(data, begin, end) {
80
+ const length = (end - begin);
81
+ // 这里,length 类型为 Uint32
82
+ if (length > 6)
83
+ return decode(data, begin, end);
84
+ // 这里,length 类型为 0 | 1 | 2 | 3 | 4 | 5 | 6
85
+ // 为小字符串优化
86
+ if (length === 0)
87
+ return '';
88
+ if (length === 1)
89
+ return String.fromCharCode(data[begin]);
90
+ // number 最多存储 6 字节数据
91
+ const cache = this.cache[length];
92
+ // 计算缓存 key
93
+ let key = 0;
94
+ for (let i = begin; i < end; i++) {
95
+ // 不要用位运算,JS 位运算只支持 32 位
96
+ key = key * 0xff + data[i];
97
+ }
98
+ const match = cache.get(key);
99
+ if (match != null)
100
+ return match;
101
+ const string = decodeJs(data, begin, end);
102
+ cache.set(key, string);
103
+ return string;
104
+ }
105
+ }
106
+ //# sourceMappingURL=string-decoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-decoder.js","sourceRoot":"","sources":["../../src/common/string-decoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-encoder.js","sourceRoot":"","sources":["../../src/common/string-encoder.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,MAAM,OAAO,aAAc,SAAQ,WAAW;IAA9C;;QACqB,UAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IA+B3D,CAAC;IA7BG,YAAY;IACH,MAAM,CAAC,KAAa;QACzB,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE;YACnB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC9B;QACD,SAAS;QACT,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,GAAG,IAAI,IAAI,EAAE;YACb,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,EAAE,IAAI,GAAG,EAAE;oBACX,OAAO,GAAG,KAAK,CAAC;oBAChB,MAAM;iBACT;aACJ;YACD,IAAI,OAAO,EAAE;gBACT,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACnC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;oBAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBACnC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;iBACnB;aACJ;iBAAM;gBACH,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAC7B;YACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SAC9B;QACD,OAAO,GAAG,CAAC;IACf,CAAC;CACJ"}
package/dist/encoder.d.ts CHANGED
@@ -1,2 +1,10 @@
1
- /** 编码 */
2
- export declare function encode(value: unknown): Uint8Array;
1
+ import { EncoderBase } from './common/encoder.js';
2
+ /** 编码至 ubjson */
3
+ export declare class Encoder extends EncoderBase {
4
+ /**
5
+ * 确保 buffer 还有 capacity 的空闲空间
6
+ */
7
+ protected ensureCapacity(capacity: number): void;
8
+ /** 获取写入结果 */
9
+ encode(): Uint8Array;
10
+ }
package/dist/encoder.js CHANGED
@@ -1,19 +1,10 @@
1
- /* eslint-disable @typescript-eslint/unbound-method */
2
- import * as constants from './constants.js';
3
- import { StringEncoder } from './string-encoder.js';
1
+ import { EncoderBase } from './common/encoder.js';
4
2
  const INITIAL_SIZE = 1024 * 8; // 8 KiB
5
3
  const MAX_SIZE = 1024 * 1024 * 128; //128 MiB
6
4
  const RESIZE_FACTOR = 4;
7
5
  const RESIZE_FACTOR_2 = 2;
8
6
  /** 编码至 ubjson */
9
- class Encoder {
10
- constructor(value) {
11
- this.value = value;
12
- /** 字符串编码 */
13
- this.stringEncoder = new StringEncoder();
14
- /** 当前写指针位置 */
15
- this.length = 0;
16
- }
7
+ export class Encoder extends EncoderBase {
17
8
  /**
18
9
  * 确保 buffer 还有 capacity 的空闲空间
19
10
  */
@@ -87,277 +78,5 @@ class Encoder {
87
78
  return this.buffer.slice(0, this.length);
88
79
  }
89
80
  }
90
- /** 写入一个对象 */
91
- write(value) {
92
- switch (typeof value) {
93
- case 'undefined':
94
- return this.writeNoOp();
95
- case 'boolean':
96
- return this.writeBoolean(value);
97
- case 'number':
98
- return this.writeNumber(value);
99
- case 'string':
100
- if (value.length === 1 && value.charCodeAt(0) < 255) {
101
- // 1 byte string
102
- return this.writeChar(value);
103
- }
104
- return this.writeString(value);
105
- case 'object': {
106
- if (value === null) {
107
- return this.writeNull();
108
- }
109
- if (Array.isArray(value)) {
110
- return this.writeArray(value);
111
- }
112
- if (ArrayBuffer.isView(value)) {
113
- return this.writeTypedArray(value);
114
- }
115
- return this.writeObject(value);
116
- }
117
- }
118
- throw new Error(`Unsupported type ${Object.prototype.toString.call(value)}`);
119
- }
120
- /** 写入 marker */
121
- writeMarker(marker) {
122
- this.ensureCapacity(1);
123
- this.view.setUint8(this.length, marker);
124
- this.length += 1;
125
- }
126
- /** 写入 marker */
127
- writeNull() {
128
- this.writeMarker(constants.NULL);
129
- }
130
- /** writeNoOp */
131
- writeNoOp() {
132
- this.writeMarker(constants.NO_OP);
133
- }
134
- /** writeBoolean */
135
- writeBoolean(value) {
136
- this.writeMarker(value ? constants.TRUE : constants.FALSE);
137
- }
138
- /** writeInt8 */
139
- writeInt8(value) {
140
- this.writeMarker(constants.INT8);
141
- this.writeInt8Data(value);
142
- }
143
- /** writeInt8Data */
144
- writeInt8Data(value) {
145
- this.ensureCapacity(1);
146
- this.view.setInt8(this.length, value);
147
- this.length += 1;
148
- }
149
- /** writeUint8 */
150
- writeUint8(value) {
151
- this.writeMarker(constants.UINT8);
152
- this.writeUint8Data(value);
153
- }
154
- /** writeUint8Data */
155
- writeUint8Data(value) {
156
- this.ensureCapacity(1);
157
- this.view.setUint8(this.length, value);
158
- this.length += 1;
159
- }
160
- /** writeInt16 */
161
- writeInt16(value) {
162
- this.writeMarker(constants.INT16);
163
- this.writeInt16Data(value);
164
- }
165
- /** writeInt16Data */
166
- writeInt16Data(value) {
167
- this.ensureCapacity(2);
168
- this.view.setInt16(this.length, value);
169
- this.length += 2;
170
- }
171
- /** writeInt32 */
172
- writeInt32(value) {
173
- this.writeMarker(constants.INT32);
174
- this.writeInt32Data(value);
175
- }
176
- /** writeInt32Data */
177
- writeInt32Data(value) {
178
- this.ensureCapacity(4);
179
- this.view.setInt32(this.length, value);
180
- this.length += 4;
181
- }
182
- /** writeFloat32 */
183
- writeFloat32(value) {
184
- this.writeMarker(constants.FLOAT32);
185
- this.writeFloat32Data(value);
186
- }
187
- /** writeFloat32Data */
188
- writeFloat32Data(value) {
189
- this.ensureCapacity(4);
190
- this.view.setFloat32(this.length, value);
191
- this.length += 4;
192
- }
193
- /** writeFloat64 */
194
- writeFloat64(value) {
195
- this.writeMarker(constants.FLOAT64);
196
- this.writeFloat64Data(value);
197
- }
198
- /** writeFloat64Data */
199
- writeFloat64Data(value) {
200
- this.ensureCapacity(8);
201
- this.view.setFloat64(this.length, value);
202
- this.length += 8;
203
- }
204
- /** writeChar */
205
- writeChar(value) {
206
- this.writeMarker(constants.CHAR);
207
- this.writeCharData(value);
208
- }
209
- /** writeCharData */
210
- writeCharData(value) {
211
- this.ensureCapacity(1);
212
- this.view.setUint8(this.length, value.charCodeAt(0));
213
- this.length += 1;
214
- }
215
- /** writeString */
216
- writeString(value) {
217
- this.writeMarker(constants.STRING);
218
- this.writeStringData(value);
219
- }
220
- /** writeStringData */
221
- writeStringData(value) {
222
- // 优化小字符串
223
- if (value.length < 32) {
224
- const buf = this.stringEncoder.encode(value);
225
- this.writeInt(buf.length);
226
- this.ensureCapacity(buf.length);
227
- this.buffer.set(buf, this.length);
228
- this.length += buf.length;
229
- return;
230
- }
231
- if (this.stringEncoder.encodeInto != null) {
232
- const maxUsage = value.length * 3;
233
- const currentPos = this.length;
234
- // 先写入最大大小
235
- const lengthWriter = this.writeInt(maxUsage);
236
- this.ensureCapacity(maxUsage);
237
- // 写入文本数据
238
- const { written } = this.stringEncoder.encodeInto(value, this.buffer.subarray(this.length));
239
- // 回溯,写入实际大小
240
- this.length = currentPos;
241
- lengthWriter.call(this, written);
242
- // 移动指针到写入末尾
243
- this.length += written;
244
- return;
245
- }
246
- const data = this.stringEncoder.encode(value);
247
- this.writeInt(data.length);
248
- this.ensureCapacity(data.length);
249
- this.buffer.set(data, this.length);
250
- this.length += data.length;
251
- }
252
- /**
253
- * 写入整形数字,选取合适的大小
254
- *
255
- * @throws 无法在 int32 范围内表示
256
- */
257
- writeInt(value) {
258
- value = value | 0;
259
- if (value >= -128 && value <= 127) {
260
- this.writeInt8(value);
261
- return this.writeInt8;
262
- }
263
- if (value >= -32768 && value <= 32767) {
264
- this.writeInt16(value);
265
- return this.writeInt16;
266
- }
267
- if (value >= -2147483648 && value <= 2147483647) {
268
- this.writeInt32(value);
269
- return this.writeInt32;
270
- }
271
- /* c8 ignore next 2 */
272
- throw new Error(`Unsupported int value ${value}: out of range`);
273
- }
274
- /** 写入数字,选取合适的大小 */
275
- writeNumber(value) {
276
- if (Number.isInteger(value) && value >= -2147483648 && value <= 2147483647) {
277
- if (value >= 0 && value <= 255)
278
- return this.writeUint8(value);
279
- this.writeInt(value);
280
- return;
281
- }
282
- if (!(Number.isNaN(value) || Math.fround(value) === value)) {
283
- return this.writeFloat64(value);
284
- }
285
- // 如果不会损失精度,则使用 32 位浮点
286
- return this.writeFloat32(value);
287
- }
288
- /** writeObject */
289
- writeObject(value) {
290
- this.writeMarker(constants.OBJECT);
291
- // 生成稳定的结果以便 hash 计算
292
- for (const key of Object.keys(value).sort()) {
293
- const element = value[key];
294
- if (element === undefined)
295
- continue;
296
- this.writeStringData(key);
297
- this.write(element);
298
- }
299
- this.writeMarker(constants.OBJECT_END);
300
- }
301
- /** writeArray */
302
- writeArray(value) {
303
- this.writeMarker(constants.ARRAY);
304
- for (const v of value) {
305
- // 在数组中 undefined 也被视作 null 进行序列化
306
- if (v == null)
307
- this.writeNull();
308
- else
309
- this.write(v);
310
- }
311
- this.writeMarker(constants.ARRAY_END);
312
- }
313
- /** writeArray */
314
- writeTypedArray(value) {
315
- this.writeMarker(constants.ARRAY);
316
- this.writeMarker(constants.TYPE_MARKER);
317
- if (value instanceof Uint8Array || value instanceof Int8Array) {
318
- // fast path for typed arrays with `BYTES_PER_ELEMENT` of 1
319
- this.writeMarker(value instanceof Uint8Array ? constants.UINT8 : constants.INT8);
320
- this.writeMarker(constants.COUNT_MARKER);
321
- this.writeInt(value.length);
322
- this.ensureCapacity(value.byteLength);
323
- this.buffer.set(value, this.length);
324
- this.length += value.byteLength;
325
- return;
326
- }
327
- /** 用于写入的 setter */
328
- let setValue;
329
- if (value instanceof Int16Array) {
330
- this.writeMarker(constants.INT16);
331
- setValue = this.view.setInt16;
332
- }
333
- else if (value instanceof Int32Array) {
334
- this.writeMarker(constants.INT32);
335
- setValue = this.view.setInt32;
336
- }
337
- else if (value instanceof Float32Array) {
338
- this.writeMarker(constants.FLOAT32);
339
- setValue = this.view.setFloat32;
340
- }
341
- else if (value instanceof Float64Array) {
342
- this.writeMarker(constants.FLOAT64);
343
- setValue = this.view.setFloat64;
344
- }
345
- else {
346
- throw new Error(`Unsupported typed array type ${Object.prototype.toString.call(value)}`);
347
- }
348
- this.writeMarker(constants.COUNT_MARKER);
349
- this.writeInt(value.length);
350
- this.ensureCapacity(value.byteLength);
351
- // 不要在前面 bind,this.ensureCapacity 有可能导致 this.view 指向新的对象
352
- for (const v of value) {
353
- setValue.call(this.view, this.length, v);
354
- this.length += value.BYTES_PER_ELEMENT;
355
- }
356
- }
357
- }
358
- /** 编码 */
359
- export function encode(value) {
360
- const encoder = new Encoder(value);
361
- return encoder.encode();
362
81
  }
363
82
  //# sourceMappingURL=encoder.js.map
@@ -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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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
- export { encode } from './encoder.js';
2
- export { decode } from './decoder.js';
1
+ /** 编码为 UBJSON */
2
+ export declare function encode(value: unknown): Uint8Array;
3
+ /** 解码 UBJSON */
4
+ export declare function decode(value: Uint8Array): unknown;
package/dist/index.js CHANGED
@@ -1,3 +1,13 @@
1
- export { encode } from './encoder.js';
2
- export { decode } from './decoder.js';
1
+ import { Encoder } from './encoder.js';
2
+ import { Decoder } from './common/decoder.js';
3
+ /** 编码为 UBJSON */
4
+ export function encode(value) {
5
+ const encoder = new Encoder(value);
6
+ return encoder.encode();
7
+ }
8
+ /** 解码 UBJSON */
9
+ export function decode(value) {
10
+ const decoder = new Decoder(value);
11
+ return decoder.decode();
12
+ }
3
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,iBAAiB;AACjB,MAAM,UAAU,MAAM,CAAC,KAAc;IACjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,MAAM,CAAC,KAAiB;IACpC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /// <reference types="node" />
2
+ import { Readable } from 'node:stream';
3
+ import { EncoderBase } from '../common/encoder.js';
4
+ /** 流式编码 UBJSON */
5
+ export declare class StreamEncoder extends EncoderBase {
6
+ protected stream: Readable;
7
+ /**
8
+ * 确保 buffer 还有 capacity 的空闲空间
9
+ */
10
+ protected ensureCapacity(capacity: number): void;
11
+ protected currentPos: Array<string | number>;
12
+ /** 获取写入结果 */
13
+ encode(): Readable;
14
+ }
@@ -0,0 +1,86 @@
1
+ import { Readable } from 'node:stream';
2
+ import { EncoderBase } from '../common/encoder.js';
3
+ const BLOCK_SIZE = 1024 * 8; // 8 KiB
4
+ const MAX_SIZE = 1024 * 1024 * 256; //256 MiB
5
+ /** 流式编码 UBJSON */
6
+ export class StreamEncoder extends EncoderBase {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.currentPos = [];
10
+ }
11
+ /**
12
+ * 确保 buffer 还有 capacity 的空闲空间
13
+ */
14
+ ensureCapacity(capacity) {
15
+ if (capacity > MAX_SIZE) {
16
+ // 超过最大尺寸限制
17
+ throw new Error('Buffer has exceed max size');
18
+ }
19
+ if (this.buffer == null) {
20
+ this.buffer = new Uint8Array(capacity);
21
+ this.view = new DataView(this.buffer.buffer);
22
+ return;
23
+ }
24
+ if (capacity < 0) {
25
+ // 结束流
26
+ this.stream.push(this.buffer.subarray(0, this.length));
27
+ this.buffer = new Uint8Array(0);
28
+ this.view = new DataView(this.buffer.buffer);
29
+ this.length = 0;
30
+ this.stream.push(null);
31
+ return;
32
+ }
33
+ // 无需扩容
34
+ if (this.buffer.byteLength >= this.length + capacity)
35
+ return;
36
+ // 提交目前的数据
37
+ this.stream.push(this.buffer.subarray(0, this.length));
38
+ // 重新分配缓冲区
39
+ if (capacity < BLOCK_SIZE)
40
+ capacity = BLOCK_SIZE;
41
+ this.buffer = new Uint8Array(capacity);
42
+ this.view = new DataView(this.buffer.buffer);
43
+ this.length = 0;
44
+ }
45
+ /** 获取写入结果 */
46
+ encode() {
47
+ if (typeof this.value != 'object' || this.value == null || ArrayBuffer.isView(this.value)) {
48
+ this.stream = new Readable({
49
+ objectMode: false,
50
+ construct: (callback) => {
51
+ this.ensureCapacity(20);
52
+ callback();
53
+ },
54
+ read: () => {
55
+ try {
56
+ this.write(this.value);
57
+ this.ensureCapacity(-1);
58
+ }
59
+ catch (ex) {
60
+ this.stream.destroy(ex);
61
+ }
62
+ },
63
+ });
64
+ }
65
+ else {
66
+ this.stream = new Readable({
67
+ objectMode: false,
68
+ construct: (callback) => {
69
+ this.ensureCapacity(BLOCK_SIZE);
70
+ callback();
71
+ },
72
+ read: () => {
73
+ try {
74
+ this.write(this.value);
75
+ this.ensureCapacity(-1);
76
+ }
77
+ catch (ex) {
78
+ this.stream.destroy(ex);
79
+ }
80
+ },
81
+ });
82
+ }
83
+ return this.stream;
84
+ }
85
+ }
86
+ //# sourceMappingURL=encoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../src/stream/encoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="node" />
2
+ import type { Readable } from 'node:stream';
3
+ /** 编码为 UBJSON */
4
+ export declare function encode(value: unknown): Readable;
@@ -0,0 +1,7 @@
1
+ import { StreamEncoder } from './encoder.js';
2
+ /** 编码为 UBJSON */
3
+ export function encode(value) {
4
+ const encoder = new StreamEncoder(value);
5
+ return encoder.encode();
6
+ }
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stream/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,iBAAiB;AACjB,MAAM,UAAU,MAAM,CAAC,KAAc;IACjC,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;AAC5B,CAAC"}
package/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ declare module '@cloudpss/ubjson' {
2
+ export * from '@cloudpss/ubjson/dist/index.js';
3
+ }
4
+
5
+ declare module '@cloudpss/ubjson/stream' {
6
+ export * from '@cloudpss/ubjson/dist/stream/index.js';
7
+ }
package/jest.config.js ADDED
@@ -0,0 +1,3 @@
1
+ import { config } from '../../jest.config.js';
2
+
3
+ export default { ...config };