@cloudpss/ubjson 0.6.0-alpha.1 → 0.6.0-alpha.11
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/helper/encode.d.ts.map +1 -1
- package/dist/helper/encode.js +5 -2
- package/dist/helper/encode.js.map +1 -1
- package/dist/helper/string-decoder.d.ts +2 -0
- package/dist/helper/string-decoder.d.ts.map +1 -1
- package/dist/helper/string-decoder.js +18 -5
- package/dist/helper/string-decoder.js.map +1 -1
- package/dist/helper/string-encoder.d.ts +5 -0
- package/dist/helper/string-encoder.d.ts.map +1 -1
- package/dist/helper/string-encoder.js +29 -9
- package/dist/helper/string-encoder.js.map +1 -1
- package/package.json +2 -2
- package/src/helper/encode.ts +5 -2
- package/src/helper/string-decoder.ts +24 -7
- package/src/helper/string-encoder.ts +36 -9
- package/tests/.utils.ts +9 -8
- package/tests/decode.ts +12 -16
- package/tests/e2e/stream.ts +5 -5
- package/tests/encode.ts +5 -5
- package/tests/huge-string.ts +1 -4
- package/tests/rxjs/decode.ts +11 -12
- package/tests/rxjs/encode.ts +2 -4
- package/tests/stream/decode.ts +7 -9
- package/tests/stream/encode.ts +7 -9
- package/tests/stream/many.ts +19 -30
- package/tests/string-encoding.ts +8 -5
- package/jest.config.js +0 -3
- package/tests/tsconfig.json +0 -3
- package/tsconfig.json +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/helper/encode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,WAAW;AACX,MAAM,WAAW,YAAY;IACzB,SAAS;IACT,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,SAAS;IACT,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,aAAa;AACb,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAazD;AAED,WAAW;AACX,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAGzE;
|
|
1
|
+
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/helper/encode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,WAAW;AACX,MAAM,WAAW,YAAY;IACzB,SAAS;IACT,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,SAAS;IACT,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,aAAa;AACb,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAazD;AAED,WAAW;AACX,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAGzE;AAGD,eAAO,MAAM,OAAO,QAAsB,CAAC;AAC3C,eAAO,MAAM,OAAO,QAAuB,CAAC;AAC5C,WAAW;AACX,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAuBtE;AAID,WAAW;AACX,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CA0CrE;AAED,oBAAoB;AACpB,MAAM,MAAM,cAAc,GACpB,SAAS,CAAC,KAAK,GACf,SAAS,CAAC,IAAI,GACd,SAAS,CAAC,KAAK,GACf,SAAS,CAAC,KAAK,GACf,SAAS,CAAC,KAAK,GACf,SAAS,CAAC,OAAO,GACjB,SAAS,CAAC,OAAO,CAAC;AAGxB,eAAO,MAAM,aAAa,QAAgC,CAAC;AAC3D,eAAO,MAAM,aAAa,QAA+B,CAAC;AAC1D,eAAO,MAAM,cAAc,QAAgC,CAAC;AAC5D,eAAO,MAAM,cAAc,QAAgC,CAAC;AAC5D,eAAO,MAAM,cAAc,QAAgC,CAAC;AAC5D,eAAO,MAAM,cAAc,QAAkC,CAAC;AAC9D,eAAO,MAAM,cAAc,QAAkC,CAAC;AAE9D,qCAAqC;AACrC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,GAAG,cAAc,CAgClG;AACD,oBAAoB;AACpB,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAIlF;AACD,uBAAuB;AACvB,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CA4C5G"}
|
package/dist/helper/encode.js
CHANGED
|
@@ -19,6 +19,7 @@ export function writeMarker(cursor, marker) {
|
|
|
19
19
|
cursor.ensureCapacity(1);
|
|
20
20
|
cursor.data[cursor.length++] = marker;
|
|
21
21
|
}
|
|
22
|
+
const { MAX_SAFE_INTEGER } = Number;
|
|
22
23
|
export const I8_MASK = 105 /* constants.INT8 */ << 8;
|
|
23
24
|
export const U8_MASK = 85 /* constants.UINT8 */ << 8;
|
|
24
25
|
/** 写入长度 */
|
|
@@ -40,7 +41,7 @@ export function writeLength(cursor, length) {
|
|
|
40
41
|
cursor.view.setInt32(cursor.length, length);
|
|
41
42
|
cursor.length += 4;
|
|
42
43
|
}
|
|
43
|
-
else if (length <
|
|
44
|
+
else if (length < MAX_SAFE_INTEGER) {
|
|
44
45
|
cursor.ensureCapacity(9);
|
|
45
46
|
cursor.data[cursor.length++] = 76 /* constants.INT64 */;
|
|
46
47
|
cursor.view.setBigInt64(cursor.length, BigInt(length));
|
|
@@ -50,6 +51,8 @@ export function writeLength(cursor, length) {
|
|
|
50
51
|
throw new RangeError('Invalid length');
|
|
51
52
|
}
|
|
52
53
|
}
|
|
54
|
+
const { isFinite } = Number;
|
|
55
|
+
const { fround } = Math;
|
|
53
56
|
/** 写入数字 */
|
|
54
57
|
export function writeNumber(cursor, value) {
|
|
55
58
|
// eslint-disable-next-line unicorn/prefer-math-trunc
|
|
@@ -82,7 +85,7 @@ export function writeNumber(cursor, value) {
|
|
|
82
85
|
cursor.length = length + 5;
|
|
83
86
|
}
|
|
84
87
|
}
|
|
85
|
-
else if (
|
|
88
|
+
else if (!isFinite(value) || fround(value) === value) {
|
|
86
89
|
// 如果不会损失精度,使用 32 位浮点
|
|
87
90
|
cursor.ensureCapacity(5);
|
|
88
91
|
const { length } = cursor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/helper/encode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAc9C,aAAa;AACb,MAAM,UAAU,YAAY,CAAC,MAAc;IACvC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACzE,OAAO;QACH,IAAI;QACJ,IAAI;QACJ,MAAM,EAAE,CAAC;QACT,cAAc,CAAC,QAAgB;YAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC5C,MAAM,IAAI,UAAU,CAAC,iBAAiB,CAAC,CAAC;YAC5C,CAAC;QACL,CAAC;KACJ,CAAC;AACN,CAAC;AAED,WAAW;AACX,MAAM,UAAU,WAAW,CAAC,MAAoB,EAAE,MAAiB;IAC/D,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,4BAAkB,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,OAAO,GAAG,4BAAmB,CAAC,CAAC;AAC5C,WAAW;AACX,MAAM,UAAU,WAAW,CAAC,MAAoB,EAAE,MAAc;IAC5D,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;QAChB,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,2BAAkB,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,MAAM,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,4BAAkB,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/helper/encode.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ export declare function longStringInJS(buf: Uint8Array, begin: number, length: n
|
|
|
6
6
|
export declare function shortStringInJS(buf: Uint8Array, begin: number, length: number): string | undefined;
|
|
7
7
|
/** 解码 */
|
|
8
8
|
export declare function nativeDecode(data: Uint8Array, begin: number, end: number): string;
|
|
9
|
+
/** 解码 */
|
|
10
|
+
export declare function nodeDecode(data: Uint8Array, begin: number, end: number): string;
|
|
9
11
|
/** 字符串解码,无缓存 */
|
|
10
12
|
export declare function decode(data: Uint8Array, begin: number, end: number): string;
|
|
11
13
|
/** 重设环境 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-decoder.d.ts","sourceRoot":"","sources":["../../src/helper/string-decoder.ts"],"names":[],"mappings":"AAKA,SAAS;AACT,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CA8C9E;AAED,eAAe;AACf,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUjG;AACD,eAAe;AACf,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAqGlG;
|
|
1
|
+
{"version":3,"file":"string-decoder.d.ts","sourceRoot":"","sources":["../../src/helper/string-decoder.ts"],"names":[],"mappings":"AAKA,SAAS;AACT,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CA8C9E;AAED,eAAe;AACf,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUjG;AACD,eAAe;AACf,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAqGlG;AAGD,SAAS;AACT,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjF;AAQD,SAAS;AACT,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/E;AAQD,gBAAgB;AAChB,wBAAgB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAiB3E;AACD,WAAW;AACX,wBAAgB,QAAQ,IAAI,IAAI,CAM/B"}
|
|
@@ -173,11 +173,21 @@ export function shortStringInJS(buf, begin, length) {
|
|
|
173
173
|
return fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
|
|
174
174
|
}
|
|
175
175
|
let TEXT_DECODER;
|
|
176
|
-
let TEXT_DECODER_THRESHOLD;
|
|
177
176
|
/** 解码 */
|
|
178
177
|
export function nativeDecode(data, begin, end) {
|
|
179
178
|
return TEXT_DECODER.decode(data.subarray(begin, end));
|
|
180
179
|
}
|
|
180
|
+
let utf8Slice;
|
|
181
|
+
/** 解码 */
|
|
182
|
+
export function nodeDecode(data, begin, end) {
|
|
183
|
+
return utf8Slice.call(data, begin, end);
|
|
184
|
+
}
|
|
185
|
+
let longDecode = nativeDecode;
|
|
186
|
+
/**
|
|
187
|
+
* 默认解码器阈值
|
|
188
|
+
* @see /benchmark/string-decoder.js
|
|
189
|
+
*/
|
|
190
|
+
const DEFAULT_TEXT_DECODER_THRESHOLD = 16;
|
|
181
191
|
/** 字符串解码,无缓存 */
|
|
182
192
|
export function decode(data, begin, end) {
|
|
183
193
|
const length = end - begin;
|
|
@@ -187,7 +197,7 @@ export function decode(data, begin, end) {
|
|
|
187
197
|
return result;
|
|
188
198
|
}
|
|
189
199
|
// 只有小字符串有优化价值
|
|
190
|
-
if (length <
|
|
200
|
+
if (length < DEFAULT_TEXT_DECODER_THRESHOLD) {
|
|
191
201
|
// if (length < 32) {
|
|
192
202
|
// const result = longStringInJS(data, begin, length);
|
|
193
203
|
// if (result != null) return result;
|
|
@@ -196,12 +206,15 @@ export function decode(data, begin, end) {
|
|
|
196
206
|
return jsDecode(data, begin, end);
|
|
197
207
|
}
|
|
198
208
|
// 使用系统解码
|
|
199
|
-
return
|
|
209
|
+
return longDecode(data, begin, end);
|
|
200
210
|
}
|
|
201
211
|
/** 重设环境 */
|
|
202
212
|
export function resetEnv() {
|
|
203
|
-
TEXT_DECODER =
|
|
204
|
-
|
|
213
|
+
TEXT_DECODER =
|
|
214
|
+
typeof TextDecoder == 'function' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: false }) : null;
|
|
215
|
+
const hasBuffer = typeof Buffer == 'function';
|
|
216
|
+
utf8Slice = hasBuffer ? Buffer.prototype.utf8Slice : null;
|
|
217
|
+
longDecode = typeof utf8Slice == 'function' ? nodeDecode : TEXT_DECODER ? nativeDecode : jsDecode;
|
|
205
218
|
}
|
|
206
219
|
resetEnv();
|
|
207
220
|
//# sourceMappingURL=string-decoder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-decoder.js","sourceRoot":"","sources":["../../src/helper/string-decoder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"string-decoder.js","sourceRoot":"","sources":["../../src/helper/string-decoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,11 @@ export declare function jsEncodeInto(v: string, buf: Uint8Array, offset: number)
|
|
|
14
14
|
* Provided `buf` MUST have enough space.
|
|
15
15
|
*/
|
|
16
16
|
export declare function nativeEncodeInto(v: string, buf: Uint8Array, offset: number): number;
|
|
17
|
+
/**
|
|
18
|
+
* Encode string into utf-8.
|
|
19
|
+
* Provided `buf` MUST have enough space.
|
|
20
|
+
*/
|
|
21
|
+
export declare function nodeEncodeInto(v: string, buf: Uint8Array, offset: number): number;
|
|
17
22
|
/**
|
|
18
23
|
* Encode string into utf-8.
|
|
19
24
|
* Provided `buf` MUST have enough space.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-encoder.d.ts","sourceRoot":"","sources":["../../src/helper/string-encoder.ts"],"names":[],"mappings":"AAeA,cAAc;AACd,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAsCzD;AACD,cAAc;AACd,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,cAAc;AACd,eAAO,IAAI,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAqC/E;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGnF;
|
|
1
|
+
{"version":3,"file":"string-encoder.d.ts","sourceRoot":"","sources":["../../src/helper/string-encoder.ts"],"names":[],"mappings":"AAeA,cAAc;AACd,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAsCzD;AACD,cAAc;AACd,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,cAAc;AACd,eAAO,IAAI,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAqC/E;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGnF;AAOD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjF;AAOD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAK/E;AACD;;;GAGG;AACH,eAAO,IAAI,UAAU,EAAE,CAAC,CAAC,SAAS,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;AAC5G;;GAEG;AACH,eAAO,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC,WAAW,CAAC,CAAC;AAE1D,WAAW;AACX,wBAAgB,QAAQ,IAAI,IAAI,CAwB/B"}
|
|
@@ -45,7 +45,7 @@ export function jsStringByteLength(string) {
|
|
|
45
45
|
}
|
|
46
46
|
/** 计算使用的空间 */
|
|
47
47
|
export function nodeStringByteLength(string) {
|
|
48
|
-
return Buffer.byteLength(string, '
|
|
48
|
+
return Buffer.byteLength(string, 'utf-8');
|
|
49
49
|
}
|
|
50
50
|
/** 计算使用的空间 */
|
|
51
51
|
export let stringByteLength;
|
|
@@ -105,12 +105,26 @@ export function nativeEncodeInto(v, buf, offset) {
|
|
|
105
105
|
const encoded = TEXT_ENCODER.encodeInto(v, buf.subarray(offset));
|
|
106
106
|
return encoded.written;
|
|
107
107
|
}
|
|
108
|
+
let utf8Write;
|
|
109
|
+
/**
|
|
110
|
+
* Encode string into utf-8.
|
|
111
|
+
* Provided `buf` MUST have enough space.
|
|
112
|
+
*/
|
|
113
|
+
export function nodeEncodeInto(v, buf, offset) {
|
|
114
|
+
const encoded = utf8Write.call(buf, v, offset, buf.byteLength - offset);
|
|
115
|
+
return encoded;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* 默认编码器阈值
|
|
119
|
+
* @see /benchmark/string-encoder.js
|
|
120
|
+
*/
|
|
121
|
+
const DEFAULT_TEXT_ENCODER_THRESHOLD = 45;
|
|
108
122
|
/**
|
|
109
123
|
* Encode string into utf-8.
|
|
110
124
|
* Provided `buf` MUST have enough space.
|
|
111
125
|
*/
|
|
112
126
|
export function myEncodeInto(v, buf, offset) {
|
|
113
|
-
if (v.length <
|
|
127
|
+
if (v.length < DEFAULT_TEXT_ENCODER_THRESHOLD) {
|
|
114
128
|
return jsEncodeInto(v, buf, offset);
|
|
115
129
|
}
|
|
116
130
|
return nativeEncodeInto(v, buf, offset);
|
|
@@ -127,14 +141,20 @@ export let encode;
|
|
|
127
141
|
/** 重设环境 */
|
|
128
142
|
export function resetEnv() {
|
|
129
143
|
TEXT_ENCODER = typeof TextEncoder == 'function' ? new TextEncoder() : null;
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
144
|
+
const hasBuffer = typeof Buffer == 'function';
|
|
145
|
+
stringByteLength = hasBuffer && typeof Buffer.byteLength == 'function' ? nodeStringByteLength : jsStringByteLength;
|
|
146
|
+
utf8Write = hasBuffer ? Buffer.prototype.utf8Write : null;
|
|
147
|
+
encodeInto =
|
|
148
|
+
typeof utf8Write == 'function'
|
|
149
|
+
? nodeEncodeInto
|
|
150
|
+
: typeof TEXT_ENCODER?.encodeInto == 'function'
|
|
151
|
+
? myEncodeInto
|
|
152
|
+
: jsEncodeInto;
|
|
153
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
154
|
+
const from = hasBuffer ? Buffer.from : null;
|
|
135
155
|
encode =
|
|
136
|
-
typeof
|
|
137
|
-
? (v) =>
|
|
156
|
+
typeof from == 'function'
|
|
157
|
+
? (v) => from(v, 'utf-8')
|
|
138
158
|
: TEXT_ENCODER
|
|
139
159
|
? (v) => TEXT_ENCODER.encode(v)
|
|
140
160
|
: (v) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-encoder.js","sourceRoot":"","sources":["../../src/helper/string-encoder.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,2EAA2E;AAE3E,gCAAgC;AAChC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,yBAAyB;AACzB,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,gCAAgC;AAChC,6BAA6B;AAC7B,yEAAyE;AACzE,uCAAuC;AACvC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACnC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACnC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,cAAc;AACd,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,IAAI,UAAU,GAAG,UAAU,CAAC;IAE5B,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,UAAU,EAAE,SAAS,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE/C,IAAI,SAAS,GAAG,oBAAoB,EAAE,CAAC;YACnC,SAAS;QACb,CAAC;QAED,IAAI,SAAS,GAAG,wBAAwB,EAAE,CAAC;YACvC,UAAU,IAAI,CAAC,CAAC;YAChB,SAAS;QACb,CAAC;QAED,UAAU,IAAI,CAAC,CAAC;QAEhB,IAAI,SAAS,GAAG,oBAAoB,IAAI,SAAS,GAAG,mBAAmB,EAAE,CAAC;YACtE,SAAS;QACb,CAAC;QAED,iEAAiE;QACjE,iBAAiB;QACjB,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAEvD,wDAAwD;QACxD,0EAA0E;QAC1E,0EAA0E;QAC1E,UAAU;QACV,IAAI,aAAa,GAAG,mBAAmB,IAAI,aAAa,GAAG,kBAAkB,EAAE,CAAC;YAC5E,SAAS;QACb,CAAC;QAED,SAAS,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AACD,cAAc;AACd,MAAM,UAAU,oBAAoB,CAAC,MAAc;IAC/C,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"string-encoder.js","sourceRoot":"","sources":["../../src/helper/string-encoder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudpss/ubjson",
|
|
3
|
-
"version": "0.6.0-alpha.
|
|
3
|
+
"version": "0.6.0-alpha.11",
|
|
4
4
|
"author": "CloudPSS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@types/lodash": "^4.17.20",
|
|
24
24
|
"lodash": "^4.17.21",
|
|
25
|
-
"ref-impl": "npm:@cloudpss/ubjson@0.5.
|
|
25
|
+
"ref-impl": "npm:@cloudpss/ubjson@0.5.55"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"rxjs": "^7.8.2"
|
package/src/helper/encode.ts
CHANGED
|
@@ -35,6 +35,7 @@ export function writeMarker(cursor: EncodeCursor, marker: constants): void {
|
|
|
35
35
|
cursor.data[cursor.length++] = marker;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
const { MAX_SAFE_INTEGER } = Number;
|
|
38
39
|
export const I8_MASK = constants.INT8 << 8;
|
|
39
40
|
export const U8_MASK = constants.UINT8 << 8;
|
|
40
41
|
/** 写入长度 */
|
|
@@ -53,7 +54,7 @@ export function writeLength(cursor: EncodeCursor, length: number): void {
|
|
|
53
54
|
cursor.data[cursor.length++] = constants.INT32;
|
|
54
55
|
cursor.view.setInt32(cursor.length, length);
|
|
55
56
|
cursor.length += 4;
|
|
56
|
-
} else if (length <
|
|
57
|
+
} else if (length < MAX_SAFE_INTEGER) {
|
|
57
58
|
cursor.ensureCapacity(9);
|
|
58
59
|
cursor.data[cursor.length++] = constants.INT64;
|
|
59
60
|
cursor.view.setBigInt64(cursor.length, BigInt(length));
|
|
@@ -63,6 +64,8 @@ export function writeLength(cursor: EncodeCursor, length: number): void {
|
|
|
63
64
|
}
|
|
64
65
|
}
|
|
65
66
|
|
|
67
|
+
const { isFinite } = Number;
|
|
68
|
+
const { fround } = Math;
|
|
66
69
|
/** 写入数字 */
|
|
67
70
|
export function writeNumber(cursor: EncodeCursor, value: number): void {
|
|
68
71
|
// eslint-disable-next-line unicorn/prefer-math-trunc
|
|
@@ -91,7 +94,7 @@ export function writeNumber(cursor: EncodeCursor, value: number): void {
|
|
|
91
94
|
cursor.view.setInt32(length + 1, value);
|
|
92
95
|
cursor.length = length + 5;
|
|
93
96
|
}
|
|
94
|
-
} else if (
|
|
97
|
+
} else if (!isFinite(value) || fround(value) === value) {
|
|
95
98
|
// 如果不会损失精度,使用 32 位浮点
|
|
96
99
|
cursor.ensureCapacity(5);
|
|
97
100
|
const { length } = cursor;
|
|
@@ -169,13 +169,28 @@ export function shortStringInJS(buf: Uint8Array, begin: number, length: number):
|
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
let TEXT_DECODER: TextDecoder | null;
|
|
172
|
-
let TEXT_DECODER_THRESHOLD: number;
|
|
173
|
-
|
|
174
172
|
/** 解码 */
|
|
175
173
|
export function nativeDecode(data: Uint8Array, begin: number, end: number): string {
|
|
176
174
|
return TEXT_DECODER!.decode(data.subarray(begin, end));
|
|
177
175
|
}
|
|
178
176
|
|
|
177
|
+
/** Undocumented */
|
|
178
|
+
type BufferUndocumented = Buffer & {
|
|
179
|
+
utf8Slice: (this: Uint8Array, start: number, end: number) => string;
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
let utf8Slice: ((this: Uint8Array, start: number, end: number) => string) | null;
|
|
183
|
+
/** 解码 */
|
|
184
|
+
export function nodeDecode(data: Uint8Array, begin: number, end: number): string {
|
|
185
|
+
return utf8Slice!.call(data, begin, end);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
let longDecode: (data: Uint8Array, begin: number, end: number) => string = nativeDecode;
|
|
189
|
+
/**
|
|
190
|
+
* 默认解码器阈值
|
|
191
|
+
* @see /benchmark/string-decoder.js
|
|
192
|
+
*/
|
|
193
|
+
const DEFAULT_TEXT_DECODER_THRESHOLD = 16;
|
|
179
194
|
/** 字符串解码,无缓存 */
|
|
180
195
|
export function decode(data: Uint8Array, begin: number, end: number): string {
|
|
181
196
|
const length = end - begin;
|
|
@@ -184,7 +199,7 @@ export function decode(data: Uint8Array, begin: number, end: number): string {
|
|
|
184
199
|
if (result != null) return result;
|
|
185
200
|
}
|
|
186
201
|
// 只有小字符串有优化价值
|
|
187
|
-
if (length <
|
|
202
|
+
if (length < DEFAULT_TEXT_DECODER_THRESHOLD) {
|
|
188
203
|
// if (length < 32) {
|
|
189
204
|
// const result = longStringInJS(data, begin, length);
|
|
190
205
|
// if (result != null) return result;
|
|
@@ -193,12 +208,14 @@ export function decode(data: Uint8Array, begin: number, end: number): string {
|
|
|
193
208
|
return jsDecode(data, begin, end);
|
|
194
209
|
}
|
|
195
210
|
// 使用系统解码
|
|
196
|
-
return
|
|
211
|
+
return longDecode(data, begin, end);
|
|
197
212
|
}
|
|
198
|
-
|
|
199
213
|
/** 重设环境 */
|
|
200
214
|
export function resetEnv(): void {
|
|
201
|
-
TEXT_DECODER =
|
|
202
|
-
|
|
215
|
+
TEXT_DECODER =
|
|
216
|
+
typeof TextDecoder == 'function' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: false }) : null;
|
|
217
|
+
const hasBuffer = typeof Buffer == 'function';
|
|
218
|
+
utf8Slice = hasBuffer ? (Buffer.prototype as BufferUndocumented).utf8Slice : null;
|
|
219
|
+
longDecode = typeof utf8Slice == 'function' ? nodeDecode : TEXT_DECODER ? nativeDecode : jsDecode;
|
|
203
220
|
}
|
|
204
221
|
resetEnv();
|
|
@@ -55,7 +55,7 @@ export function jsStringByteLength(string: string): number {
|
|
|
55
55
|
}
|
|
56
56
|
/** 计算使用的空间 */
|
|
57
57
|
export function nodeStringByteLength(string: string): number {
|
|
58
|
-
return Buffer.byteLength(string, '
|
|
58
|
+
return Buffer.byteLength(string, 'utf-8');
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
/** 计算使用的空间 */
|
|
@@ -114,12 +114,32 @@ export function nativeEncodeInto(v: string, buf: Uint8Array, offset: number): nu
|
|
|
114
114
|
const encoded = TEXT_ENCODER!.encodeInto(v, buf.subarray(offset));
|
|
115
115
|
return encoded.written;
|
|
116
116
|
}
|
|
117
|
+
|
|
118
|
+
/** Undocumented */
|
|
119
|
+
type BufferUndocumented = Buffer & {
|
|
120
|
+
utf8Write: (this: Uint8Array, v: string, offset: number, byteLength: number) => number;
|
|
121
|
+
};
|
|
122
|
+
let utf8Write: ((this: Uint8Array, v: string, offset: number, byteLength: number) => number) | null;
|
|
123
|
+
/**
|
|
124
|
+
* Encode string into utf-8.
|
|
125
|
+
* Provided `buf` MUST have enough space.
|
|
126
|
+
*/
|
|
127
|
+
export function nodeEncodeInto(v: string, buf: Uint8Array, offset: number): number {
|
|
128
|
+
const encoded = utf8Write!.call(buf, v, offset, buf.byteLength - offset);
|
|
129
|
+
return encoded;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* 默认编码器阈值
|
|
134
|
+
* @see /benchmark/string-encoder.js
|
|
135
|
+
*/
|
|
136
|
+
const DEFAULT_TEXT_ENCODER_THRESHOLD = 45;
|
|
117
137
|
/**
|
|
118
138
|
* Encode string into utf-8.
|
|
119
139
|
* Provided `buf` MUST have enough space.
|
|
120
140
|
*/
|
|
121
141
|
export function myEncodeInto(v: string, buf: Uint8Array, offset: number): number {
|
|
122
|
-
if (v.length <
|
|
142
|
+
if (v.length < DEFAULT_TEXT_ENCODER_THRESHOLD) {
|
|
123
143
|
return jsEncodeInto(v, buf, offset);
|
|
124
144
|
}
|
|
125
145
|
return nativeEncodeInto(v, buf, offset);
|
|
@@ -137,14 +157,21 @@ export let encode: (v: string) => Uint8Array<ArrayBuffer>;
|
|
|
137
157
|
/** 重设环境 */
|
|
138
158
|
export function resetEnv(): void {
|
|
139
159
|
TEXT_ENCODER = typeof TextEncoder == 'function' ? new TextEncoder() : null;
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
encodeInto =
|
|
160
|
+
const hasBuffer = typeof Buffer == 'function';
|
|
161
|
+
stringByteLength = hasBuffer && typeof Buffer.byteLength == 'function' ? nodeStringByteLength : jsStringByteLength;
|
|
162
|
+
|
|
163
|
+
utf8Write = hasBuffer ? (Buffer.prototype as BufferUndocumented).utf8Write : null;
|
|
164
|
+
encodeInto =
|
|
165
|
+
typeof utf8Write == 'function'
|
|
166
|
+
? nodeEncodeInto
|
|
167
|
+
: typeof TEXT_ENCODER?.encodeInto == 'function'
|
|
168
|
+
? myEncodeInto
|
|
169
|
+
: jsEncodeInto;
|
|
170
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
171
|
+
const from = hasBuffer ? Buffer.from : null;
|
|
145
172
|
encode =
|
|
146
|
-
typeof
|
|
147
|
-
? (v) =>
|
|
173
|
+
typeof from == 'function'
|
|
174
|
+
? (v) => from(v, 'utf-8')
|
|
148
175
|
: TEXT_ENCODER
|
|
149
176
|
? (v) => TEXT_ENCODER!.encode(v)
|
|
150
177
|
: (v) => {
|
package/tests/.utils.ts
CHANGED
|
@@ -7,7 +7,7 @@ import '../dist/options.js';
|
|
|
7
7
|
/**
|
|
8
8
|
* 重设所有环境
|
|
9
9
|
*/
|
|
10
|
-
export function resetEnv() {
|
|
10
|
+
export function resetEnv(): void {
|
|
11
11
|
resetDecoderEnv();
|
|
12
12
|
resetEncoderEnv();
|
|
13
13
|
resetEncoder();
|
|
@@ -15,25 +15,26 @@ export function resetEnv() {
|
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* 输入转为数字数组以便比较
|
|
18
|
-
* @param
|
|
19
|
-
* @returns
|
|
18
|
+
* @param args 输入
|
|
19
|
+
* @returns 数字数组
|
|
20
20
|
*/
|
|
21
|
-
export function toArray(...args) {
|
|
21
|
+
export function toArray(...args: [ArrayBuffer] | [Uint8Array] | Array<number | string>): number[] {
|
|
22
22
|
if (args[0] instanceof ArrayBuffer) {
|
|
23
23
|
return Array.from(new Uint8Array(args[0]));
|
|
24
24
|
}
|
|
25
25
|
if (args[0] instanceof Uint8Array) {
|
|
26
26
|
return Array.from(args[0]);
|
|
27
27
|
}
|
|
28
|
-
|
|
28
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
29
|
+
return args.map((x) => (typeof x == 'number' ? x : (x as string).charCodeAt(0)));
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
/**
|
|
32
33
|
* 将数字或字符串转换为 Uint8Array
|
|
33
|
-
* @param
|
|
34
|
-
* @returns
|
|
34
|
+
* @param args 数字或 char 的数组
|
|
35
|
+
* @returns Uint8Array
|
|
35
36
|
*/
|
|
36
|
-
export function toBuffer(...args) {
|
|
37
|
+
export function toBuffer(...args: Array<string | number>): Uint8Array<ArrayBuffer> {
|
|
37
38
|
const data = [];
|
|
38
39
|
for (const x of args) {
|
|
39
40
|
if (typeof x == 'number') {
|
package/tests/decode.ts
CHANGED
|
@@ -141,6 +141,7 @@ test('decode huge string (unexpected eof) [error]', () => {
|
|
|
141
141
|
|
|
142
142
|
test('decode ascii string', () => {
|
|
143
143
|
const header = toBuffer('S', 'I', 0x3f, 0xff);
|
|
144
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
144
145
|
const payload = new Uint8Array(0x3fff + header.byteLength).fill('a'.charCodeAt(0));
|
|
145
146
|
payload.set(header);
|
|
146
147
|
expect(decode(payload)).toBe('a'.repeat(0x3fff));
|
|
@@ -148,6 +149,7 @@ test('decode ascii string', () => {
|
|
|
148
149
|
|
|
149
150
|
test('decode ascii string [huge]', () => {
|
|
150
151
|
const header = toBuffer('S', 'I', 0x7f, 0xff);
|
|
152
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
151
153
|
const payload = new Uint8Array(0x7fff + header.byteLength).fill('a'.charCodeAt(0));
|
|
152
154
|
payload.set(header);
|
|
153
155
|
expect(decode(payload)).toBe('a'.repeat(0x7fff));
|
|
@@ -507,19 +509,16 @@ test('decode (eof at key)', () => {
|
|
|
507
509
|
|
|
508
510
|
describe('proto poisoning attack', () => {
|
|
509
511
|
it('should remove __proto__ key', () => {
|
|
510
|
-
const obj =
|
|
512
|
+
const obj = decode(
|
|
511
513
|
toBuffer('{', 'i', 9, '__proto__', '{', 'i', 1, 'a', 'S', 'i', 3, 'abc', '}', '}'),
|
|
512
|
-
)
|
|
514
|
+
) as Record<string, unknown>;
|
|
513
515
|
expect(Object.hasOwn(obj, '__proto__')).toBe(false);
|
|
514
516
|
expect(obj['__proto__']).toBe(Object.prototype);
|
|
515
517
|
});
|
|
516
518
|
it('should allow __proto__ key', () => {
|
|
517
|
-
const obj =
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
protoAction: 'allow',
|
|
521
|
-
},
|
|
522
|
-
);
|
|
519
|
+
const obj = decode(toBuffer('{', 'i', 9, '__proto__', '{', 'i', 1, 'a', 'S', 'i', 3, 'abc', '}', '}'), {
|
|
520
|
+
protoAction: 'allow',
|
|
521
|
+
}) as Record<string, unknown>;
|
|
523
522
|
expect(Object.hasOwn(obj, '__proto__')).toBe(true);
|
|
524
523
|
expect(obj['__proto__']).toEqual({ a: 'abc' });
|
|
525
524
|
});
|
|
@@ -534,19 +533,16 @@ describe('proto poisoning attack', () => {
|
|
|
534
533
|
|
|
535
534
|
describe('constructor poisoning attack', () => {
|
|
536
535
|
it('should remove constructor key', () => {
|
|
537
|
-
const obj =
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
constructorAction: 'remove',
|
|
541
|
-
},
|
|
542
|
-
);
|
|
536
|
+
const obj = decode(toBuffer('{', 'i', 11, 'constructor', '{', 'i', 1, 'a', 'S', 'i', 3, 'abc', '}', '}'), {
|
|
537
|
+
constructorAction: 'remove',
|
|
538
|
+
}) as Record<string, unknown>;
|
|
543
539
|
expect(Object.hasOwn(obj, 'constructor')).toBe(false);
|
|
544
540
|
expect(obj.constructor).toBe(Object);
|
|
545
541
|
});
|
|
546
542
|
it('should allow constructor key', () => {
|
|
547
|
-
const obj =
|
|
543
|
+
const obj = decode(
|
|
548
544
|
toBuffer('{', 'i', 11, 'constructor', '{', 'i', 1, 'a', 'S', 'i', 3, 'abc', '}', '}'),
|
|
549
|
-
)
|
|
545
|
+
) as Record<string, unknown>;
|
|
550
546
|
expect(Object.hasOwn(obj, 'constructor')).toBe(true);
|
|
551
547
|
expect(obj.constructor).toEqual({ a: 'abc' });
|
|
552
548
|
});
|
package/tests/e2e/stream.ts
CHANGED
|
@@ -8,15 +8,15 @@ describe('stream', () => {
|
|
|
8
8
|
const expected = EXPECTED[name] ?? input;
|
|
9
9
|
if (expected instanceof Error) {
|
|
10
10
|
await expect(async () => {
|
|
11
|
-
const encoded = await Readable.fromWeb(
|
|
11
|
+
const encoded = await Readable.fromWeb(encodeStream(input) as never).toArray();
|
|
12
12
|
const decoded = await decodeStream(
|
|
13
|
-
|
|
13
|
+
Readable.toWeb(Readable.from(encoded)) as ReadableStream<Uint8Array<ArrayBuffer>>,
|
|
14
14
|
);
|
|
15
15
|
expect(decoded).toEqual(expected);
|
|
16
16
|
}).rejects.toThrow(expected);
|
|
17
17
|
} else {
|
|
18
|
-
const encoded = await Readable.fromWeb(
|
|
19
|
-
const data = encoded.flatMap((
|
|
18
|
+
const encoded = await Readable.fromWeb(encodeStream(input) as never).toArray();
|
|
19
|
+
const data = encoded.flatMap((chunk: Buffer<ArrayBuffer>) => {
|
|
20
20
|
if (chunk.length < 2) return [chunk];
|
|
21
21
|
// split to random chunks
|
|
22
22
|
const chunks = [];
|
|
@@ -29,7 +29,7 @@ describe('stream', () => {
|
|
|
29
29
|
return chunks;
|
|
30
30
|
});
|
|
31
31
|
const decoded = await decodeStream(
|
|
32
|
-
|
|
32
|
+
Readable.toWeb(Readable.from(data)) as ReadableStream<Uint8Array<ArrayBuffer>>,
|
|
33
33
|
);
|
|
34
34
|
expect(decoded).toEqual(expected);
|
|
35
35
|
}
|
package/tests/encode.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { getEncoder } from '../dist/encoder.js';
|
|
|
7
7
|
import { toArray } from './.utils.ts';
|
|
8
8
|
|
|
9
9
|
// @ts-expect-error Access private property
|
|
10
|
-
const poolInit = getEncoder().pool
|
|
10
|
+
const poolInit = getEncoder().pool as Uint8Array<ArrayBuffer>;
|
|
11
11
|
|
|
12
12
|
test('encode function', () => {
|
|
13
13
|
expect(() =>
|
|
@@ -444,10 +444,10 @@ test('encode object (only null values)', () => {
|
|
|
444
444
|
});
|
|
445
445
|
|
|
446
446
|
test('encode object (skip prototype)', () => {
|
|
447
|
-
const obj = Object.create({ a: 2, x: 'xx' })
|
|
448
|
-
obj
|
|
449
|
-
obj
|
|
450
|
-
obj
|
|
447
|
+
const obj = Object.create({ a: 2, x: 'xx' }) as Record<string, unknown>;
|
|
448
|
+
obj['a'] = 1;
|
|
449
|
+
obj['b'] = 'a';
|
|
450
|
+
obj['c'] = true;
|
|
451
451
|
expect(toArray(encode(obj))).toEqual(
|
|
452
452
|
toArray('{', 'i', 1, 'a', 'U', 1, 'i', 1, 'b', 'C', 'a', 'i', 1, 'c', 'T', '}'),
|
|
453
453
|
);
|
package/tests/huge-string.ts
CHANGED
|
@@ -6,11 +6,8 @@ const STR_BYTE_LENGTH = 128 * 1024 * 1024 - 20;
|
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* 构造测试字符串
|
|
9
|
-
* @param {string} char 使用的字符
|
|
10
|
-
* @param {number} byteLength 需要的长度
|
|
11
|
-
* @returns {[Uint8Array, string]}
|
|
12
9
|
*/
|
|
13
|
-
function makeString(char, byteLength) {
|
|
10
|
+
function makeString(char: string, byteLength: number): [Uint8Array<ArrayBuffer>, string] {
|
|
14
11
|
const encoded = new TextEncoder().encode(char);
|
|
15
12
|
return [encoded, char.repeat(byteLength / encoded.byteLength)];
|
|
16
13
|
}
|
package/tests/rxjs/decode.ts
CHANGED
|
@@ -2,28 +2,24 @@
|
|
|
2
2
|
* Tests from https://bitbucket.org/shelacek/ubjson
|
|
3
3
|
*/
|
|
4
4
|
import { jest } from '@jest/globals';
|
|
5
|
-
import { firstValueFrom, of, Subject } from 'rxjs';
|
|
5
|
+
import { firstValueFrom, type Observable, of, Subject } from 'rxjs';
|
|
6
6
|
import { decode as decodePipe } from '../../dist/rxjs/index.js';
|
|
7
7
|
import { toBuffer } from '../.utils.ts';
|
|
8
8
|
import { UnexpectedEofError as UnexpectedEof } from '../../dist/helper/errors.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* 包装为 promise
|
|
12
|
-
* @param {Uint8Array} data ubjson 数据
|
|
13
|
-
* @returns {Promise<unknown>}
|
|
14
12
|
*/
|
|
15
|
-
async function decode(data) {
|
|
13
|
+
async function decode(data: BufferSource): Promise<unknown> {
|
|
16
14
|
const readable = of(data);
|
|
17
15
|
return firstValueFrom(readable.pipe(decodePipe()), { defaultValue: undefined });
|
|
18
16
|
}
|
|
19
17
|
|
|
20
18
|
/**
|
|
21
19
|
* 包装为 promise
|
|
22
|
-
* @param {import("rxjs").Observable<Uint8Array>} observable ubjson 数据流
|
|
23
|
-
* @param {(data: unknown) => void} onData 数据回调
|
|
24
20
|
*/
|
|
25
|
-
async function decodeStream(observable
|
|
26
|
-
return
|
|
21
|
+
async function decodeStream(observable: Observable<BufferSource>, onData: (data: unknown) => void) {
|
|
22
|
+
return new Promise<void>((resolve, reject) => {
|
|
27
23
|
observable.pipe(decodePipe()).subscribe({
|
|
28
24
|
next: onData,
|
|
29
25
|
error: reject,
|
|
@@ -115,6 +111,7 @@ test('decode string (unexpected eof) [error]', async () => {
|
|
|
115
111
|
|
|
116
112
|
test('decode ascii string', async () => {
|
|
117
113
|
const header = toBuffer('S', 'I', 0x3f, 0xff);
|
|
114
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
118
115
|
const payload = new Uint8Array(0x3fff + header.byteLength).fill('a'.charCodeAt(0));
|
|
119
116
|
payload.set(header);
|
|
120
117
|
expect(await decode(payload)).toBe('a'.repeat(0x3fff));
|
|
@@ -123,6 +120,7 @@ test('decode ascii string', async () => {
|
|
|
123
120
|
test('decode ascii string 32kiB [huge]', async () => {
|
|
124
121
|
const size = 0x7fff;
|
|
125
122
|
const header = toBuffer('S', 'I', 0x7f, 0xff);
|
|
123
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
126
124
|
const payload = new Uint8Array(size + header.byteLength).fill('a'.charCodeAt(0));
|
|
127
125
|
payload.set(header);
|
|
128
126
|
expect(await decode(payload)).toBe('a'.repeat(size));
|
|
@@ -131,6 +129,7 @@ test('decode ascii string 32kiB [huge]', async () => {
|
|
|
131
129
|
test('decode ascii string 64MB [huge]', async () => {
|
|
132
130
|
const size = 0x03d0_9000;
|
|
133
131
|
const header = toBuffer('S', 'l', 0x03, 0xd0, 0x90, 0x00);
|
|
132
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
134
133
|
const payload = new Uint8Array(size + header.byteLength).fill('a'.charCodeAt(0));
|
|
135
134
|
payload.set(header);
|
|
136
135
|
expect(await decode(payload)).toBe('a'.repeat(size));
|
|
@@ -467,7 +466,7 @@ test('decode object (empty key, optimized)', async () => {
|
|
|
467
466
|
});
|
|
468
467
|
|
|
469
468
|
test('decode stream', async () => {
|
|
470
|
-
const stream = new Subject();
|
|
469
|
+
const stream = new Subject<BufferSource>();
|
|
471
470
|
// while decoding streaming, N will be regarded as a no-op, rather than an undefined value
|
|
472
471
|
const onData = jest.fn();
|
|
473
472
|
const result = decodeStream(stream, onData);
|
|
@@ -485,7 +484,7 @@ test('decode stream', async () => {
|
|
|
485
484
|
});
|
|
486
485
|
|
|
487
486
|
test('decode bad stream [error]', async () => {
|
|
488
|
-
const stream = new Subject();
|
|
487
|
+
const stream = new Subject<BufferSource>();
|
|
489
488
|
// while decoding streaming, N will be regarded as a no-op, rather than an undefined value
|
|
490
489
|
const onData = jest.fn();
|
|
491
490
|
const result = decodeStream(stream, onData);
|
|
@@ -504,7 +503,7 @@ test('decode bad stream [error]', async () => {
|
|
|
504
503
|
});
|
|
505
504
|
|
|
506
505
|
test('decode partial stream [error]', async () => {
|
|
507
|
-
const stream = new Subject();
|
|
506
|
+
const stream = new Subject<BufferSource>();
|
|
508
507
|
// while decoding streaming, N will be regarded as a no-op, rather than an undefined value
|
|
509
508
|
const onData = jest.fn();
|
|
510
509
|
const result = decodeStream(stream, onData);
|
|
@@ -520,7 +519,7 @@ test('decode partial stream [error]', async () => {
|
|
|
520
519
|
});
|
|
521
520
|
|
|
522
521
|
test('decode error stream [error]', async () => {
|
|
523
|
-
const stream = new Subject();
|
|
522
|
+
const stream = new Subject<BufferSource>();
|
|
524
523
|
// while decoding streaming, N will be regarded as a no-op, rather than an undefined value
|
|
525
524
|
const onData = jest.fn();
|
|
526
525
|
const result = decodeStream(stream, onData);
|
package/tests/rxjs/encode.ts
CHANGED
|
@@ -8,10 +8,8 @@ import { toArray } from '../.utils.ts';
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* 包装为 promise
|
|
11
|
-
* @param {unknown} value 要编码的值
|
|
12
|
-
* @returns {Promise<Buffer>}
|
|
13
11
|
*/
|
|
14
|
-
async function encodeAsync(value) {
|
|
12
|
+
async function encodeAsync(value: unknown): Promise<Buffer<ArrayBuffer>> {
|
|
15
13
|
return firstValueFrom(
|
|
16
14
|
of(value).pipe(
|
|
17
15
|
encode(),
|
|
@@ -304,7 +302,7 @@ test('encode object (only null values)', async () => {
|
|
|
304
302
|
});
|
|
305
303
|
|
|
306
304
|
test('encode object (skip prototype)', async () => {
|
|
307
|
-
const obj =
|
|
305
|
+
const obj = Object.create({ a: 2, x: 'xx' }) as Record<string, unknown>;
|
|
308
306
|
obj['a'] = 1;
|
|
309
307
|
obj['b'] = 'a';
|
|
310
308
|
obj['c'] = true;
|
package/tests/stream/decode.ts
CHANGED
|
@@ -9,20 +9,16 @@ import { UnexpectedEofError as UnexpectedEof } from '../../dist/helper/errors.js
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* 包装为 promise
|
|
12
|
-
* @param {Uint8Array} data ubjson 数据
|
|
13
|
-
* @returns {Promise<unknown>}
|
|
14
12
|
*/
|
|
15
|
-
async function decode(data) {
|
|
13
|
+
async function decode(data: Uint8Array<ArrayBuffer>): Promise<unknown> {
|
|
16
14
|
const readable = Readable.from([data], { objectMode: false });
|
|
17
|
-
return decodeAsync(
|
|
15
|
+
return decodeAsync(Readable.toWeb(readable) as ReadableStream<Uint8Array<ArrayBuffer>>);
|
|
18
16
|
}
|
|
19
17
|
|
|
20
18
|
/**
|
|
21
19
|
* 包装为 promise
|
|
22
|
-
* @param {import("stream").Readable} stream ubjson 流
|
|
23
|
-
* @returns {Promise<void>}
|
|
24
20
|
*/
|
|
25
|
-
async function eos(stream) {
|
|
21
|
+
async function eos(stream: Readable): Promise<void> {
|
|
26
22
|
return new Promise((resolve, reject) => {
|
|
27
23
|
stream.on('error', reject);
|
|
28
24
|
stream.on('end', resolve);
|
|
@@ -113,6 +109,7 @@ test('decode string (unexpected eof) [error]', async () => {
|
|
|
113
109
|
|
|
114
110
|
test('decode ascii string', async () => {
|
|
115
111
|
const header = toBuffer('S', 'I', 0x3f, 0xff);
|
|
112
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
116
113
|
const payload = new Uint8Array(0x3fff + header.byteLength).fill('a'.charCodeAt(0));
|
|
117
114
|
payload.set(header);
|
|
118
115
|
expect(await decode(payload)).toBe('a'.repeat(0x3fff));
|
|
@@ -120,6 +117,7 @@ test('decode ascii string', async () => {
|
|
|
120
117
|
|
|
121
118
|
test('decode ascii string [huge]', async () => {
|
|
122
119
|
const header = toBuffer('S', 'I', 0x7f, 0xff);
|
|
120
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
123
121
|
const payload = new Uint8Array(0x7fff + header.byteLength).fill('a'.charCodeAt(0));
|
|
124
122
|
payload.set(header);
|
|
125
123
|
expect(await decode(payload)).toBe('a'.repeat(0x7fff));
|
|
@@ -456,7 +454,7 @@ test('decode object (empty key, optimized)', async () => {
|
|
|
456
454
|
});
|
|
457
455
|
|
|
458
456
|
test('decode stream', async () => {
|
|
459
|
-
const stream = Transform.fromWeb(
|
|
457
|
+
const stream = Transform.fromWeb(decodeStream() as never, { objectMode: true });
|
|
460
458
|
// while decoding streaming, N will be regarded as a no-op, rather than an undefined value
|
|
461
459
|
const onData = jest.fn();
|
|
462
460
|
stream.on('data', onData);
|
|
@@ -499,7 +497,7 @@ test('decode bad stream [error]', async () => {
|
|
|
499
497
|
});
|
|
500
498
|
|
|
501
499
|
test('decode partial stream [error]', async () => {
|
|
502
|
-
const stream = Transform.fromWeb(
|
|
500
|
+
const stream = Transform.fromWeb(decodeStream() as never, { objectMode: true });
|
|
503
501
|
// while decoding streaming, N will be regarded as a no-op, rather than an undefined value
|
|
504
502
|
const onData = jest.fn();
|
|
505
503
|
stream.on('data', onData);
|
package/tests/stream/encode.ts
CHANGED
|
@@ -9,11 +9,9 @@ import { Transform } from 'node:stream';
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* 包装为 promise
|
|
12
|
-
* @param {unknown} value 值
|
|
13
|
-
* @returns {Promise<Buffer>} 返回值
|
|
14
12
|
*/
|
|
15
|
-
async function encodeAsync(value) {
|
|
16
|
-
return buffer(encode(value))
|
|
13
|
+
async function encodeAsync(value: unknown): Promise<Buffer<ArrayBuffer>> {
|
|
14
|
+
return (await buffer(encode(value))) as Buffer<ArrayBuffer>;
|
|
17
15
|
}
|
|
18
16
|
|
|
19
17
|
test('encode function', async () => {
|
|
@@ -299,10 +297,10 @@ test('encode object (only null values)', async () => {
|
|
|
299
297
|
});
|
|
300
298
|
|
|
301
299
|
test('encode object (skip prototype)', async () => {
|
|
302
|
-
const obj = Object.create({ a: 2, x: 'xx' })
|
|
303
|
-
obj
|
|
304
|
-
obj
|
|
305
|
-
obj
|
|
300
|
+
const obj = Object.create({ a: 2, x: 'xx' }) as Record<string, unknown>;
|
|
301
|
+
obj['a'] = 1;
|
|
302
|
+
obj['b'] = 'a';
|
|
303
|
+
obj['c'] = true;
|
|
306
304
|
expect(toArray(await encodeAsync(obj))).toEqual(
|
|
307
305
|
toArray('{', 'i', 1, 'a', 'U', 1, 'i', 1, 'b', 'C', 'a', 'i', 1, 'c', 'T', '}'),
|
|
308
306
|
);
|
|
@@ -364,7 +362,7 @@ test('encode huge data (~128M)', async () => {
|
|
|
364
362
|
});
|
|
365
363
|
|
|
366
364
|
test('encode stream', async () => {
|
|
367
|
-
const stream = Transform.fromWeb(
|
|
365
|
+
const stream = Transform.fromWeb(encoder() as never, { objectMode: true });
|
|
368
366
|
stream.write(undefined);
|
|
369
367
|
stream.write(true);
|
|
370
368
|
stream.write(false);
|
package/tests/stream/many.ts
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { Readable } from 'node:stream';
|
|
2
|
+
import type { ReadableStream as ReadableStream2 } from 'node:stream/web';
|
|
2
3
|
import { encodeMany, decodeMany } from '../../dist/stream/index.js';
|
|
3
4
|
import { buffer } from 'node:stream/consumers';
|
|
4
5
|
import { finished } from 'node:stream/promises';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* iterableToAsyncIterable
|
|
8
|
-
* @template T
|
|
9
|
-
* @param {Iterable<T>} iterable - iterable
|
|
10
|
-
* @returns {AsyncIterable<T>} async iterable
|
|
11
9
|
*/
|
|
12
|
-
function iterableToAsyncIterable(iterable) {
|
|
10
|
+
function iterableToAsyncIterable<T>(iterable: Iterable<T>): AsyncIterable<T> {
|
|
13
11
|
return {
|
|
14
12
|
[Symbol.asyncIterator]: () => {
|
|
15
13
|
const iterator = iterable[Symbol.iterator]();
|
|
@@ -23,12 +21,9 @@ function iterableToAsyncIterable(iterable) {
|
|
|
23
21
|
|
|
24
22
|
/**
|
|
25
23
|
* asyncIterableToArray
|
|
26
|
-
* @template T
|
|
27
|
-
* @param {AsyncIterable<T>} asyncIterable - async iterable
|
|
28
|
-
* @returns {Promise<Array<T>>} array
|
|
29
24
|
*/
|
|
30
|
-
async function asyncIterableToArray(asyncIterable) {
|
|
31
|
-
const array = [];
|
|
25
|
+
async function asyncIterableToArray<T>(asyncIterable: AsyncIterable<T>): Promise<T[]> {
|
|
26
|
+
const array: T[] = [];
|
|
32
27
|
for await (const item of asyncIterable) {
|
|
33
28
|
array.push(item);
|
|
34
29
|
}
|
|
@@ -53,7 +48,7 @@ test('encode/decode many', async () => {
|
|
|
53
48
|
];
|
|
54
49
|
const encoded = await buffer(encodeMany(iterableToAsyncIterable(data)));
|
|
55
50
|
const decoded = await asyncIterableToArray(
|
|
56
|
-
decodeMany(
|
|
51
|
+
decodeMany(Readable.toWeb(Readable.from([encoded])) as ReadableStream<Uint8Array<ArrayBuffer>>),
|
|
57
52
|
);
|
|
58
53
|
expect(decoded).toEqual([
|
|
59
54
|
{
|
|
@@ -74,7 +69,7 @@ test('encode/decode many', async () => {
|
|
|
74
69
|
|
|
75
70
|
test('encode/decode many with invalid value', async () => {
|
|
76
71
|
await expect(async () => {
|
|
77
|
-
const readable = Readable.fromWeb(
|
|
72
|
+
const readable = Readable.fromWeb(encodeMany(iterableToAsyncIterable([1, () => 1])) as ReadableStream2);
|
|
78
73
|
const f = finished(readable);
|
|
79
74
|
readable.resume();
|
|
80
75
|
await f;
|
|
@@ -82,31 +77,25 @@ test('encode/decode many with invalid value', async () => {
|
|
|
82
77
|
});
|
|
83
78
|
|
|
84
79
|
test('encode/decode many with error', async () => {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
// }
|
|
98
|
-
// await f;
|
|
99
|
-
// } catch (ex) {
|
|
100
|
-
// console.log(ex);
|
|
101
|
-
// }
|
|
102
|
-
// }).rejects.toThrow('xx');
|
|
80
|
+
await expect(async () => {
|
|
81
|
+
const stream = encodeMany(
|
|
82
|
+
(async function* () {
|
|
83
|
+
yield 1;
|
|
84
|
+
await Promise.resolve();
|
|
85
|
+
throw new Error('test error');
|
|
86
|
+
})(),
|
|
87
|
+
);
|
|
88
|
+
for await (const _ of stream) {
|
|
89
|
+
//
|
|
90
|
+
}
|
|
91
|
+
}).rejects.toThrow('test error');
|
|
103
92
|
});
|
|
104
93
|
|
|
105
94
|
test('encode/decode many with undefined', async () => {
|
|
106
95
|
const data = [1, null, undefined, [undefined]];
|
|
107
96
|
const encoded = await buffer(encodeMany(iterableToAsyncIterable(data)));
|
|
108
97
|
const decoded = await asyncIterableToArray(
|
|
109
|
-
decodeMany(
|
|
98
|
+
decodeMany(Readable.toWeb(Readable.from([encoded])) as ReadableStream<Uint8Array<ArrayBuffer>>),
|
|
110
99
|
);
|
|
111
100
|
expect(decoded).toEqual([
|
|
112
101
|
1,
|
package/tests/string-encoding.ts
CHANGED
|
@@ -2,11 +2,9 @@ import { Encoder } from '../dist/encoder.js';
|
|
|
2
2
|
import { decode, jsDecode } from '../dist/helper/string-decoder.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* @param {Pick<TextEncoder, 'encode'>} encoder encoder
|
|
7
|
-
* @param {Pick<TextDecoder, 'decode'>} decoder decoder
|
|
5
|
+
* 测试编码器和解码器
|
|
8
6
|
*/
|
|
9
|
-
function testEncoding(encoder, decoder) {
|
|
7
|
+
function testEncoding(encoder: Pick<TextEncoder, 'encode'>, decoder: Pick<TextDecoder, 'decode'>) {
|
|
10
8
|
expect(decoder.decode(encoder.encode(''))).toEqual('');
|
|
11
9
|
expect(decoder.decode(encoder.encode('a'))).toEqual('a');
|
|
12
10
|
expect(decoder.decode(encoder.encode('p4'))).toEqual('p4');
|
|
@@ -46,6 +44,7 @@ function testEncoding(encoder, decoder) {
|
|
|
46
44
|
bad.fill(0xff);
|
|
47
45
|
expect(decoder.decode(bad)).toEqual('\uFFFD'.repeat(length));
|
|
48
46
|
|
|
47
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
49
48
|
bad.fill('a'.charCodeAt(0), 0, length - 1);
|
|
50
49
|
expect(decoder.decode(bad)).toEqual('a'.repeat(length - 1) + '\uFFFD');
|
|
51
50
|
}
|
|
@@ -55,6 +54,7 @@ function testEncoding(encoder, decoder) {
|
|
|
55
54
|
for (let index = 0; index < 0xffff; index++) {
|
|
56
55
|
// 跳过 Surrogate
|
|
57
56
|
if (index >= 0xd800 && index <= 0xdfff) continue;
|
|
57
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
58
58
|
const expected = String.fromCharCode(index);
|
|
59
59
|
const encoded = encoder.encode(expected);
|
|
60
60
|
const actual = decoder.decode(encoded);
|
|
@@ -77,6 +77,7 @@ function testEncoding(encoder, decoder) {
|
|
|
77
77
|
// 检查所有 2 字节 ASCII
|
|
78
78
|
for (let index = 0; index < 0x80; index++) {
|
|
79
79
|
for (let index2 = 0; index2 < 0x80; index2++) {
|
|
80
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
80
81
|
const expected = String.fromCharCode(index, index2);
|
|
81
82
|
const actual = decoder.decode(encoder.encode(expected));
|
|
82
83
|
if (expected !== actual) expect(actual).toEqual(expected);
|
|
@@ -98,7 +99,7 @@ test('encode string', () => {
|
|
|
98
99
|
throw new Error('Invalid buffer');
|
|
99
100
|
},
|
|
100
101
|
},
|
|
101
|
-
new TextDecoder('
|
|
102
|
+
new TextDecoder('utf-8', { ignoreBOM: true, fatal: false }),
|
|
102
103
|
);
|
|
103
104
|
});
|
|
104
105
|
|
|
@@ -121,6 +122,8 @@ test('decode string js', () => {
|
|
|
121
122
|
});
|
|
122
123
|
|
|
123
124
|
test('decode malformed', () => {
|
|
125
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
124
126
|
expect(decode(new Uint8Array([0xff, 'a'.charCodeAt(0)]), 0, 2)).toEqual('\uFFFDa');
|
|
127
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
125
128
|
expect(jsDecode(new Uint8Array([0xff, 'a'.charCodeAt(0)]), 0, 2)).toEqual('\uFFFDa');
|
|
126
129
|
});
|
package/jest.config.js
DELETED
package/tests/tsconfig.json
DELETED