@cloudpss/ubjson 0.4.32 → 0.4.33

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 (56) hide show
  1. package/dist/common/constants.d.ts +22 -20
  2. package/dist/common/constants.js +1 -21
  3. package/dist/common/constants.js.map +1 -1
  4. package/dist/common/decoder.d.ts +4 -20
  5. package/dist/common/decoder.js +217 -178
  6. package/dist/common/decoder.js.map +1 -1
  7. package/dist/common/encoder.d.ts +4 -52
  8. package/dist/common/encoder.js +215 -259
  9. package/dist/common/encoder.js.map +1 -1
  10. package/dist/common/string-decoder.d.ts +3 -8
  11. package/dist/common/string-decoder.js +190 -46
  12. package/dist/common/string-decoder.js.map +1 -1
  13. package/dist/common/string-encoder.d.ts +2 -8
  14. package/dist/common/string-encoder.js +4 -44
  15. package/dist/common/string-encoder.js.map +1 -1
  16. package/dist/encoder.js +2 -21
  17. package/dist/encoder.js.map +1 -1
  18. package/dist/index.d.ts +1 -2
  19. package/dist/index.js +2 -4
  20. package/dist/index.js.map +1 -1
  21. package/dist/rxjs/decoder.js +2 -2
  22. package/dist/rxjs/decoder.js.map +1 -1
  23. package/dist/rxjs/index.d.ts +1 -0
  24. package/dist/rxjs/index.js +1 -0
  25. package/dist/rxjs/index.js.map +1 -1
  26. package/dist/stream/index.d.ts +1 -0
  27. package/dist/stream/index.js +2 -1
  28. package/dist/stream/index.js.map +1 -1
  29. package/dist/stream-helper/decoder.d.ts +1 -1
  30. package/dist/stream-helper/decoder.js +1 -1
  31. package/dist/stream-helper/decoder.js.map +1 -1
  32. package/dist/utils.d.ts +5 -1
  33. package/dist/utils.js +13 -4
  34. package/dist/utils.js.map +1 -1
  35. package/package.json +3 -2
  36. package/src/common/constants.ts +22 -21
  37. package/src/common/decoder.ts +197 -162
  38. package/src/common/encoder.ts +200 -275
  39. package/src/common/string-decoder.ts +173 -41
  40. package/src/common/string-encoder.ts +6 -41
  41. package/src/encoder.ts +2 -16
  42. package/src/index.ts +2 -5
  43. package/src/rxjs/decoder.ts +2 -2
  44. package/src/rxjs/index.ts +1 -0
  45. package/src/stream/index.ts +2 -0
  46. package/src/stream-helper/decoder.ts +1 -1
  47. package/src/utils.ts +14 -4
  48. package/tests/decode.js +69 -5
  49. package/tests/e2e.js +12 -1
  50. package/tests/encode.js +33 -16
  51. package/tests/rxjs/decode.js +3 -2
  52. package/tests/rxjs/encode.js +2 -3
  53. package/tests/stream/decode.js +2 -1
  54. package/tests/stream/encode.js +2 -3
  55. package/tests/string-encoding.js +77 -25
  56. package/tsconfig.json +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../src/common/decoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../src/common/decoder.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,8 @@
1
- import { StringEncoder } from './string-encoder.js';
2
1
  /** 编码至 ubjson */
3
2
  export declare abstract class EncoderBase {
4
3
  readonly value: unknown;
5
- /** 字符串编码 */
6
- protected stringEncoder: StringEncoder;
4
+ protected readonly stringByteLength: (v: string) => number;
5
+ protected readonly encodeInto: ((v: string, buf: Uint8Array, offset: number) => number) | undefined;
7
6
  /** 当前写指针位置 */
8
7
  protected length: number;
9
8
  /** 数据 */
@@ -17,57 +16,10 @@ export declare abstract class EncoderBase {
17
16
  protected abstract ensureCapacity(capacity: number): void;
18
17
  /** 写入一个对象 */
19
18
  protected write(value: unknown): void;
20
- /** 写入 marker */
21
- protected writeMarker(marker: number): void;
22
- /** 写入 marker */
23
- protected writeNull(): void;
24
- /** writeNoOp */
25
- protected writeNoOp(): void;
26
- /** writeBoolean */
27
- protected writeBoolean(value: boolean): void;
28
- /** writeInt8 */
29
- protected writeInt8(value: number): void;
30
- /** writeInt8Data */
31
- protected writeInt8Data(value: number): void;
32
- /** writeUint8 */
33
- protected writeUint8(value: number): void;
34
- /** writeUint8Data */
35
- protected writeUint8Data(value: number): void;
36
- /** writeInt16 */
37
- protected writeInt16(value: number): void;
38
- /** writeInt16Data */
39
- protected writeInt16Data(value: number): void;
40
- /** writeInt32 */
41
- protected writeInt32(value: number): void;
42
- /** writeInt32Data */
43
- protected writeInt32Data(value: number): void;
44
- /** writeFloat32 */
45
- protected writeFloat32(value: number): void;
46
- /** writeFloat32Data */
47
- protected writeFloat32Data(value: number): void;
48
- /** writeFloat64 */
49
- protected writeFloat64(value: number): void;
50
- /** writeFloat64Data */
51
- protected writeFloat64Data(value: number): void;
52
- /** writeChar */
53
- protected writeChar(value: string): void;
54
- /** writeCharData */
55
- protected writeCharData(value: string): void;
56
- /** writeString */
57
- protected writeString(value: string): void;
58
19
  /** writeStringData */
59
20
  protected writeStringData(value: string): void;
60
21
  /**
61
- * 写入整形数字,选取合适的大小
62
- * @throws 无法在 int32 范围内表示
22
+ * 写入整形数字,选取合适的大小,需提前分配空间
63
23
  */
64
- protected writeInt(value: number): (this: this, value: number) => void;
65
- /** 写入数字,选取合适的大小 */
66
- protected writeNumber(value: number): void;
67
- /** writeObject */
68
- protected writeObject(value: Record<string, unknown>): void;
69
- /** writeArray */
70
- protected writeArray(value: unknown[]): void;
71
- /** writeArray */
72
- protected writeTypedArray(value: ArrayBufferView): void;
24
+ protected setLength(value: number): number;
73
25
  }
@@ -1,299 +1,255 @@
1
- import * as constants from './constants.js';
2
- import { StringEncoder } from './string-encoder.js';
1
+ import { getStringByteLength, getEncodeInto } from './string-encoder.js';
3
2
  /** 编码至 ubjson */
4
3
  export class EncoderBase {
5
4
  constructor(value) {
6
5
  this.value = value;
7
- /** 字符串编码 */
8
- this.stringEncoder = new StringEncoder();
6
+ this.stringByteLength = getStringByteLength();
7
+ this.encodeInto = getEncodeInto();
9
8
  /** 当前写指针位置 */
10
9
  this.length = 0;
11
10
  }
12
11
  /** 写入一个对象 */
13
12
  write(value) {
14
13
  switch (typeof value) {
15
- case 'undefined':
16
- return this.writeNoOp();
17
- case 'boolean':
18
- return this.writeBoolean(value);
19
- case 'number':
20
- return this.writeNumber(value);
21
14
  case 'string':
22
- if (value.length === 1 && value.charCodeAt(0) < 255) {
23
- // 1 byte string
24
- return this.writeChar(value);
15
+ if (value.length === 1 && value.charCodeAt(0) < 128) {
16
+ // 1 byte ascii char
17
+ this.ensureCapacity(2);
18
+ this.buffer[this.length++] = 67 /* constants.CHAR */;
19
+ this.buffer[this.length++] = value.charCodeAt(0);
25
20
  }
26
- return this.writeString(value);
21
+ else {
22
+ this.ensureCapacity(2);
23
+ this.buffer[this.length++] = 83 /* constants.STRING */;
24
+ this.writeStringData(value);
25
+ }
26
+ return;
27
+ case 'number':
28
+ // eslint-disable-next-line unicorn/prefer-math-trunc
29
+ if ((value | 0) === value) {
30
+ if (value >= 0 && value <= 255) {
31
+ this.ensureCapacity(2);
32
+ this.buffer[this.length++] = 85 /* constants.UINT8 */;
33
+ this.buffer[this.length++] = value;
34
+ }
35
+ else if (value >= -128 && value <= 127) {
36
+ this.ensureCapacity(2);
37
+ this.buffer[this.length++] = 105 /* constants.INT8 */;
38
+ this.buffer[this.length++] = value;
39
+ }
40
+ else if (value >= -32768 && value <= 32767) {
41
+ this.ensureCapacity(3);
42
+ this.buffer[this.length++] = 73 /* constants.INT16 */;
43
+ this.buffer[this.length++] = value >> 8;
44
+ this.buffer[this.length++] = value & 0xff;
45
+ }
46
+ else {
47
+ this.ensureCapacity(5);
48
+ this.buffer[this.length++] = 108 /* constants.INT32 */;
49
+ this.view.setInt32(this.length, value);
50
+ this.length += 4;
51
+ }
52
+ }
53
+ else if (Number.isNaN(value) || Math.fround(value) === value) {
54
+ // 如果不会损失精度,使用 32 位浮点
55
+ this.ensureCapacity(5);
56
+ this.buffer[this.length++] = 100 /* constants.FLOAT32 */;
57
+ this.view.setFloat32(this.length, value);
58
+ this.length += 4;
59
+ }
60
+ else {
61
+ this.ensureCapacity(9);
62
+ this.buffer[this.length++] = 68 /* constants.FLOAT64 */;
63
+ this.view.setFloat64(this.length, value);
64
+ this.length += 8;
65
+ }
66
+ return;
27
67
  case 'object': {
28
68
  if (value === null) {
29
- return this.writeNull();
69
+ this.ensureCapacity(1);
70
+ this.buffer[this.length++] = 90 /* constants.NULL */;
71
+ }
72
+ else if (Array.isArray(value)) {
73
+ this.ensureCapacity(1);
74
+ this.buffer[this.length++] = 91 /* constants.ARRAY */;
75
+ for (const v of value) {
76
+ // 在数组中 undefined 也被视作 null 进行序列化
77
+ if (v == null) {
78
+ this.ensureCapacity(1);
79
+ this.buffer[this.length++] = 90 /* constants.NULL */;
80
+ }
81
+ else {
82
+ this.write(v);
83
+ }
84
+ }
85
+ this.ensureCapacity(1);
86
+ this.buffer[this.length++] = 93 /* constants.ARRAY_END */;
30
87
  }
31
- if (Array.isArray(value)) {
32
- return this.writeArray(value);
88
+ else if (!ArrayBuffer.isView(value)) {
89
+ this.ensureCapacity(1);
90
+ this.buffer[this.length++] = 123 /* constants.OBJECT */;
91
+ // 生成稳定的结果以便 hash 计算
92
+ for (const key of Object.keys(value).sort()) {
93
+ const element = value[key];
94
+ if (element === undefined)
95
+ continue;
96
+ this.writeStringData(key);
97
+ this.write(element);
98
+ }
99
+ this.ensureCapacity(1);
100
+ this.buffer[this.length++] = 125 /* constants.OBJECT_END */;
33
101
  }
34
- if (ArrayBuffer.isView(value)) {
35
- return this.writeTypedArray(value);
102
+ else {
103
+ // ARRAY(1) + TYPE_MARKER(1) + TYPE(1) + COUNT_MARKER(1) + COUNT(MAX5) + DATA
104
+ this.ensureCapacity(9 + value.byteLength);
105
+ this.buffer[this.length++] = 91 /* constants.ARRAY */;
106
+ this.buffer[this.length++] = 36 /* constants.TYPE_MARKER */;
107
+ if (value instanceof Uint8Array || value instanceof Int8Array) {
108
+ // fast path for typed arrays with `BYTES_PER_ELEMENT` of 1
109
+ this.buffer[this.length++] = value instanceof Uint8Array ? 85 /* constants.UINT8 */ : 105 /* constants.INT8 */;
110
+ this.buffer[this.length++] = 35 /* constants.COUNT_MARKER */;
111
+ this.setLength(value.length);
112
+ this.buffer.set(value, this.length);
113
+ this.length += value.byteLength;
114
+ return;
115
+ }
116
+ /** 用于写入的 setter */
117
+ let setValue;
118
+ if (value instanceof Int16Array) {
119
+ this.buffer[this.length++] = 73 /* constants.INT16 */;
120
+ /* eslint-disable-next-line @typescript-eslint/unbound-method */
121
+ setValue = this.view.setInt16;
122
+ }
123
+ else if (value instanceof Int32Array) {
124
+ this.buffer[this.length++] = 108 /* constants.INT32 */;
125
+ /* eslint-disable-next-line @typescript-eslint/unbound-method */
126
+ setValue = this.view.setInt32;
127
+ }
128
+ else if (value instanceof Float32Array) {
129
+ this.buffer[this.length++] = 100 /* constants.FLOAT32 */;
130
+ /* eslint-disable-next-line @typescript-eslint/unbound-method */
131
+ setValue = this.view.setFloat32;
132
+ }
133
+ else if (value instanceof Float64Array) {
134
+ this.buffer[this.length++] = 68 /* constants.FLOAT64 */;
135
+ /* eslint-disable-next-line @typescript-eslint/unbound-method */
136
+ setValue = this.view.setFloat64;
137
+ }
138
+ else {
139
+ throw new TypeError(`Unsupported typed array type ${Object.prototype.toString.call(value)}`);
140
+ }
141
+ this.buffer[this.length++] = 35 /* constants.COUNT_MARKER */;
142
+ this.setLength(value.length);
143
+ for (const v of value) {
144
+ setValue.call(this.view, this.length, v);
145
+ this.length += value.BYTES_PER_ELEMENT;
146
+ }
36
147
  }
37
- return this.writeObject(value);
148
+ return;
38
149
  }
150
+ case 'undefined':
151
+ this.ensureCapacity(1);
152
+ this.buffer[this.length++] = 78 /* constants.NO_OP */;
153
+ return;
154
+ case 'boolean':
155
+ this.ensureCapacity(1);
156
+ this.buffer[this.length++] = value ? 84 /* constants.TRUE */ : 70 /* constants.FALSE */;
157
+ return;
39
158
  default:
40
159
  throw new Error(`Unsupported type ${Object.prototype.toString.call(value)}`);
41
160
  }
42
161
  }
43
- /** 写入 marker */
44
- writeMarker(marker) {
45
- this.ensureCapacity(1);
46
- this.view.setUint8(this.length, marker);
47
- this.length += 1;
48
- }
49
- /** 写入 marker */
50
- writeNull() {
51
- this.writeMarker(constants.NULL);
52
- }
53
- /** writeNoOp */
54
- writeNoOp() {
55
- this.writeMarker(constants.NO_OP);
56
- }
57
- /** writeBoolean */
58
- writeBoolean(value) {
59
- this.writeMarker(value ? constants.TRUE : constants.FALSE);
60
- }
61
- /** writeInt8 */
62
- writeInt8(value) {
63
- this.writeMarker(constants.INT8);
64
- this.writeInt8Data(value);
65
- }
66
- /** writeInt8Data */
67
- writeInt8Data(value) {
68
- this.ensureCapacity(1);
69
- this.view.setInt8(this.length, value);
70
- this.length += 1;
71
- }
72
- /** writeUint8 */
73
- writeUint8(value) {
74
- this.writeMarker(constants.UINT8);
75
- this.writeUint8Data(value);
76
- }
77
- /** writeUint8Data */
78
- writeUint8Data(value) {
79
- this.ensureCapacity(1);
80
- this.view.setUint8(this.length, value);
81
- this.length += 1;
82
- }
83
- /** writeInt16 */
84
- writeInt16(value) {
85
- this.writeMarker(constants.INT16);
86
- this.writeInt16Data(value);
87
- }
88
- /** writeInt16Data */
89
- writeInt16Data(value) {
90
- this.ensureCapacity(2);
91
- this.view.setInt16(this.length, value);
92
- this.length += 2;
93
- }
94
- /** writeInt32 */
95
- writeInt32(value) {
96
- this.writeMarker(constants.INT32);
97
- this.writeInt32Data(value);
98
- }
99
- /** writeInt32Data */
100
- writeInt32Data(value) {
101
- this.ensureCapacity(4);
102
- this.view.setInt32(this.length, value);
103
- this.length += 4;
104
- }
105
- /** writeFloat32 */
106
- writeFloat32(value) {
107
- this.writeMarker(constants.FLOAT32);
108
- this.writeFloat32Data(value);
109
- }
110
- /** writeFloat32Data */
111
- writeFloat32Data(value) {
112
- this.ensureCapacity(4);
113
- this.view.setFloat32(this.length, value);
114
- this.length += 4;
115
- }
116
- /** writeFloat64 */
117
- writeFloat64(value) {
118
- this.writeMarker(constants.FLOAT64);
119
- this.writeFloat64Data(value);
120
- }
121
- /** writeFloat64Data */
122
- writeFloat64Data(value) {
123
- this.ensureCapacity(8);
124
- this.view.setFloat64(this.length, value);
125
- this.length += 8;
126
- }
127
- /** writeChar */
128
- writeChar(value) {
129
- this.writeMarker(constants.CHAR);
130
- this.writeCharData(value);
131
- }
132
- /** writeCharData */
133
- writeCharData(value) {
134
- this.ensureCapacity(1);
135
- this.view.setUint8(this.length, value.charCodeAt(0));
136
- this.length += 1;
137
- }
138
- /** writeString */
139
- writeString(value) {
140
- this.writeMarker(constants.STRING);
141
- this.writeStringData(value);
142
- }
143
162
  /** writeStringData */
144
163
  writeStringData(value) {
164
+ const strLength = value.length;
165
+ const maxUsage = strLength < 65536
166
+ ? // 对于短字符串,直接计算最大使用空间
167
+ strLength * 3
168
+ : this.stringByteLength(value);
169
+ // 一次性分配 setLength 和 encodeInto 的空间,避免无法回溯
170
+ // 额外分配 3 字节,避免 encodeInto 无法写入最后一个字符
171
+ this.ensureCapacity(maxUsage + 5 + 3);
172
+ // 预估头部大小
173
+ const headerSize = strLength < 128 ? 2 : strLength < 32768 ? 3 : 5;
174
+ const headerPos = this.length;
175
+ let bufLength;
145
176
  // 优化小字符串
146
- if (value.length < 32 || this.stringEncoder.encodeInto == null) {
147
- const buf = this.stringEncoder.encode(value);
148
- this.writeInt(buf.length);
149
- this.ensureCapacity(buf.length);
150
- this.buffer.set(buf, this.length);
151
- this.length += buf.length;
152
- return;
153
- }
154
- let maxUsage = value.length;
155
- if (value.length < 65536) {
156
- // 对于短字符串,直接计算最大使用空间
157
- maxUsage = value.length * 3;
177
+ if (strLength < 0x40 || !this.encodeInto) {
178
+ let c1, c2;
179
+ let strPosition = headerPos + headerSize;
180
+ const target = this.buffer;
181
+ for (let i = 0; i < strLength; i++) {
182
+ c1 = value.charCodeAt(i);
183
+ if (c1 < 0x80) {
184
+ target[strPosition++] = c1;
185
+ }
186
+ else if (c1 < 0x800) {
187
+ target[strPosition++] = (c1 >> 6) | 0xc0;
188
+ target[strPosition++] = (c1 & 0x3f) | 0x80;
189
+ }
190
+ else if ((c1 & 0xfc00) === 0xd800 && ((c2 = value.charCodeAt(i + 1)) & 0xfc00) === 0xdc00) {
191
+ c1 = 65536 + ((c1 & 0x03ff) << 10) + (c2 & 0x03ff);
192
+ i++;
193
+ target[strPosition++] = (c1 >> 18) | 0xf0;
194
+ target[strPosition++] = ((c1 >> 12) & 0x3f) | 0x80;
195
+ target[strPosition++] = ((c1 >> 6) & 0x3f) | 0x80;
196
+ target[strPosition++] = (c1 & 0x3f) | 0x80;
197
+ }
198
+ else {
199
+ target[strPosition++] = (c1 >> 12) | 0xe0;
200
+ target[strPosition++] = ((c1 >> 6) & 0x3f) | 0x80;
201
+ target[strPosition++] = (c1 & 0x3f) | 0x80;
202
+ }
203
+ }
204
+ bufLength = strPosition - headerPos - headerSize;
158
205
  }
159
206
  else {
160
- maxUsage = this.stringEncoder.byteLength(value);
207
+ bufLength = this.encodeInto(value, this.buffer, headerPos + headerSize);
161
208
  }
162
- // 一次性分配 writeInt encodeInto 的空间,避免无法回溯
163
- // 额外分配 3 字节,避免 encodeInto 无法写入最后一个字符
164
- this.ensureCapacity(maxUsage + 4 + 3);
165
- const currentPos = this.length;
166
- // 先写入最大大小
167
- const lengthWriter = this.writeInt(maxUsage);
168
- // 写入文本数据
169
- const { written, read } = this.stringEncoder.encodeInto(value, this.buffer.subarray(this.length));
170
- /* c8 ignore next 3 */
171
- if (read !== value.length) {
172
- throw new Error(`Failed to encode string with TextEncoder.encodeInto`);
209
+ if (bufLength < 128) {
210
+ this.buffer[this.length++] = 105 /* constants.INT8 */;
211
+ this.buffer[this.length++] = bufLength;
173
212
  }
174
- // 回溯,写入实际大小
175
- this.length = currentPos;
176
- lengthWriter.call(this, written);
177
- // 移动指针到写入末尾
178
- this.length += written;
213
+ else if (bufLength < 32768) {
214
+ if (headerSize < 3) {
215
+ this.buffer.copyWithin(headerPos + 3, headerPos + headerSize, headerPos + headerSize + bufLength);
216
+ }
217
+ this.buffer[this.length++] = 73 /* constants.INT16 */;
218
+ this.buffer[this.length++] = bufLength >> 8;
219
+ this.buffer[this.length++] = bufLength & 0xff;
220
+ }
221
+ else {
222
+ if (headerSize < 5) {
223
+ this.buffer.copyWithin(headerPos + 5, headerPos + headerSize, headerPos + headerSize + bufLength);
224
+ }
225
+ this.buffer[this.length++] = 108 /* constants.INT32 */;
226
+ this.view.setInt32(this.length, bufLength);
227
+ this.length += 4;
228
+ }
229
+ this.length += bufLength;
179
230
  }
180
231
  /**
181
- * 写入整形数字,选取合适的大小
182
- * @throws 无法在 int32 范围内表示
232
+ * 写入整形数字,选取合适的大小,需提前分配空间
183
233
  */
184
- writeInt(value) {
234
+ setLength(value) {
185
235
  // eslint-disable-next-line unicorn/prefer-math-trunc
186
236
  value = value | 0;
187
- if (value >= -128 && value <= 127) {
188
- this.writeInt8(value);
189
- /* eslint-disable-next-line @typescript-eslint/unbound-method */
190
- return this.writeInt8;
237
+ if ((value & 0x7f) === value) {
238
+ this.buffer[this.length++] = 105 /* constants.INT8 */;
239
+ this.buffer[this.length++] = value;
240
+ return 1;
191
241
  }
192
242
  // 不使用 uint8 以保持兼容
193
- // if (value >= 0 && value <= 255) {
194
- // this.writeUint8(value);
195
- // /* eslint-disable-next-line @typescript-eslint/unbound-method */
196
- // return this.writeUint8;
197
- // }
198
- if (value >= -32768 && value <= 32767) {
199
- this.writeInt16(value);
200
- /* eslint-disable-next-line @typescript-eslint/unbound-method */
201
- return this.writeInt16;
202
- }
203
- if (value >= -2147483648 && value <= 2147483647) {
204
- this.writeInt32(value);
205
- /* eslint-disable-next-line @typescript-eslint/unbound-method */
206
- return this.writeInt32;
207
- }
208
- /* c8 ignore next 2 */
209
- throw new Error(`Unsupported int value ${value}: out of range`);
210
- }
211
- /** 写入数字,选取合适的大小 */
212
- writeNumber(value) {
213
- if (Number.isInteger(value) && value >= -2147483648 && value <= 2147483647) {
214
- if (value >= 0 && value <= 255)
215
- return this.writeUint8(value);
216
- this.writeInt(value);
217
- return;
218
- }
219
- if (!(Number.isNaN(value) || Math.fround(value) === value)) {
220
- return this.writeFloat64(value);
221
- }
222
- // 如果不会损失精度,则使用 32 位浮点
223
- return this.writeFloat32(value);
224
- }
225
- /** writeObject */
226
- writeObject(value) {
227
- this.writeMarker(constants.OBJECT);
228
- // 生成稳定的结果以便 hash 计算
229
- for (const key of Object.keys(value).sort()) {
230
- const element = value[key];
231
- if (element === undefined)
232
- continue;
233
- this.writeStringData(key);
234
- this.write(element);
235
- }
236
- this.writeMarker(constants.OBJECT_END);
237
- }
238
- /** writeArray */
239
- writeArray(value) {
240
- this.writeMarker(constants.ARRAY);
241
- for (const v of value) {
242
- // 在数组中 undefined 也被视作 null 进行序列化
243
- if (v == null)
244
- this.writeNull();
245
- else
246
- this.write(v);
247
- }
248
- this.writeMarker(constants.ARRAY_END);
249
- }
250
- /** writeArray */
251
- writeTypedArray(value) {
252
- this.writeMarker(constants.ARRAY);
253
- this.writeMarker(constants.TYPE_MARKER);
254
- if (value instanceof Uint8Array || value instanceof Int8Array) {
255
- // fast path for typed arrays with `BYTES_PER_ELEMENT` of 1
256
- this.writeMarker(value instanceof Uint8Array ? constants.UINT8 : constants.INT8);
257
- this.writeMarker(constants.COUNT_MARKER);
258
- this.writeInt(value.length);
259
- this.ensureCapacity(value.byteLength);
260
- this.buffer.set(value, this.length);
261
- this.length += value.byteLength;
262
- return;
263
- }
264
- /** 用于写入的 setter */
265
- let setValue;
266
- if (value instanceof Int16Array) {
267
- this.writeMarker(constants.INT16);
268
- /* eslint-disable-next-line @typescript-eslint/unbound-method */
269
- setValue = this.view.setInt16;
270
- }
271
- else if (value instanceof Int32Array) {
272
- this.writeMarker(constants.INT32);
273
- /* eslint-disable-next-line @typescript-eslint/unbound-method */
274
- setValue = this.view.setInt32;
275
- }
276
- else if (value instanceof Float32Array) {
277
- this.writeMarker(constants.FLOAT32);
278
- /* eslint-disable-next-line @typescript-eslint/unbound-method */
279
- setValue = this.view.setFloat32;
280
- }
281
- else if (value instanceof Float64Array) {
282
- this.writeMarker(constants.FLOAT64);
283
- /* eslint-disable-next-line @typescript-eslint/unbound-method */
284
- setValue = this.view.setFloat64;
285
- }
286
- else {
287
- throw new TypeError(`Unsupported typed array type ${Object.prototype.toString.call(value)}`);
288
- }
289
- this.writeMarker(constants.COUNT_MARKER);
290
- this.writeInt(value.length);
291
- this.ensureCapacity(value.byteLength);
292
- // 不要在前面 bind,this.ensureCapacity 有可能导致 this.view 指向新的对象
293
- for (const v of value) {
294
- setValue.call(this.view, this.length, v);
295
- this.length += value.BYTES_PER_ELEMENT;
243
+ if ((value & 0x7fff) === value) {
244
+ this.buffer[this.length++] = 73 /* constants.INT16 */;
245
+ this.buffer[this.length++] = value >> 8;
246
+ this.buffer[this.length++] = value & 0xff;
247
+ return 2;
296
248
  }
249
+ this.buffer[this.length++] = 108 /* constants.INT32 */;
250
+ this.view.setInt32(this.length, value);
251
+ this.length += 4;
252
+ return 4;
297
253
  }
298
254
  }
299
255
  //# sourceMappingURL=encoder.js.map