@cloudpss/ubjson 0.4.7 → 0.4.9

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/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /** 编码为 UBJSON */
2
2
  export declare function encode(value: unknown): Uint8Array;
3
3
  /** 解码 UBJSON */
4
- export declare function decode(value: Uint8Array): unknown;
4
+ export declare function decode(value: BinaryData): unknown;
5
5
  export { StringEncoder } from './common/string-encoder.js';
6
6
  export { StringDecoder } from './common/string-decoder.js';
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Encoder } from './encoder.js';
2
2
  import { Decoder } from './decoder.js';
3
+ import { toUint8Array } from './utils.js';
3
4
  /** 编码为 UBJSON */
4
5
  export function encode(value) {
5
6
  const encoder = new Encoder(value);
@@ -7,7 +8,7 @@ export function encode(value) {
7
8
  }
8
9
  /** 解码 UBJSON */
9
10
  export function decode(value) {
10
- const decoder = new Decoder(value);
11
+ const decoder = new Decoder(toUint8Array(value));
11
12
  return decoder.decode();
12
13
  }
13
14
  export { StringEncoder } from './common/string-encoder.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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,cAAc,CAAC;AAEvC,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;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,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,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,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,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import { OperatorFunction } from 'rxjs';
2
2
  /** 流式解码 UBJSON */
3
- export declare function decode(): OperatorFunction<Uint8Array, unknown>;
3
+ export declare function decode(): OperatorFunction<BinaryData, unknown>;
@@ -1,5 +1,6 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { StreamDecoderHelper, UnexpectedEof } from '../stream-helper/decoder.js';
3
+ import { toUint8Array } from '../utils.js';
3
4
  const DEFAULT_BUFFER_SIZE = 16 * 1024 * 1024; // 16 MiB
4
5
  const EMPTY_BUFFER = new Uint8Array(0);
5
6
  /** 流式解码 UBJSON */
@@ -12,17 +13,18 @@ export function decode() {
12
13
  let end = 0;
13
14
  return observable.subscribe({
14
15
  next(value) {
15
- if (buffer.length >= end + value.length) {
16
- buffer.set(value, end);
17
- end += value.length;
16
+ const data = toUint8Array(value);
17
+ if (buffer.length >= end + data.length) {
18
+ buffer.set(data, end);
19
+ end += data.length;
18
20
  }
19
21
  else {
20
- chunkSize = Math.max(chunkSize, value.length * 2 + end - begin);
21
- const newBuffer = new Uint8Array(Math.max(chunkSize, value.length + end - begin));
22
+ chunkSize = Math.max(chunkSize, data.length * 2 + end - begin);
23
+ const newBuffer = new Uint8Array(Math.max(chunkSize, data.length + end - begin));
22
24
  newBuffer.set(buffer.subarray(begin, end), 0);
23
- newBuffer.set(value, end - begin);
25
+ newBuffer.set(data, end - begin);
24
26
  buffer = newBuffer;
25
- end = end - begin + value.length;
27
+ end = end - begin + data.length;
26
28
  begin = 0;
27
29
  }
28
30
  while (end - begin > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../src/rxjs/decoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../src/rxjs/decoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ /** 支持的数据转为 Uint8Array */
2
+ export declare function toUint8Array(data: BinaryData): Uint8Array;
package/dist/utils.js ADDED
@@ -0,0 +1,8 @@
1
+ /** 支持的数据转为 Uint8Array */
2
+ export function toUint8Array(data) {
3
+ if (ArrayBuffer.isView(data)) {
4
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
5
+ }
6
+ return new Uint8Array(data, 0, data.byteLength);
7
+ }
8
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,MAAM,UAAU,YAAY,CAAC,IAAgB;IACzC,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QAC1B,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;KACxE;IACD,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACpD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudpss/ubjson",
3
- "version": "0.4.7",
3
+ "version": "0.4.9",
4
4
  "author": "CloudPSS",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -31,6 +31,10 @@
31
31
  "./stream": {
32
32
  "types": "./dist/stream/index.d.ts",
33
33
  "default": "./dist/stream/index.js"
34
+ },
35
+ "./rxjs": {
36
+ "types": "./dist/rxjs/index.d.ts",
37
+ "default": "./dist/rxjs/index.js"
34
38
  }
35
39
  },
36
40
  "scripts": {
@@ -45,6 +49,6 @@
45
49
  "@msgpack/msgpack": "^2.8.0"
46
50
  },
47
51
  "dependencies": {
48
- "rxjs": "^7.5.7"
52
+ "rxjs": "^7.8.0"
49
53
  }
50
54
  }
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Encoder } from './encoder.js';
2
2
  import { Decoder } from './decoder.js';
3
+ import { toUint8Array } from './utils.js';
3
4
 
4
5
  /** 编码为 UBJSON */
5
6
  export function encode(value: unknown): Uint8Array {
@@ -8,8 +9,8 @@ export function encode(value: unknown): Uint8Array {
8
9
  }
9
10
 
10
11
  /** 解码 UBJSON */
11
- export function decode(value: Uint8Array): unknown {
12
- const decoder = new Decoder(value);
12
+ export function decode(value: BinaryData): unknown {
13
+ const decoder = new Decoder(toUint8Array(value));
13
14
  return decoder.decode();
14
15
  }
15
16
 
@@ -1,11 +1,12 @@
1
1
  import { Observable, OperatorFunction } from 'rxjs';
2
2
  import { StreamDecoderHelper, UnexpectedEof } from '../stream-helper/decoder.js';
3
+ import { toUint8Array } from '../utils.js';
3
4
 
4
5
  const DEFAULT_BUFFER_SIZE = 16 * 1024 * 1024; // 16 MiB
5
6
  const EMPTY_BUFFER = new Uint8Array(0);
6
7
 
7
8
  /** 流式解码 UBJSON */
8
- export function decode(): OperatorFunction<Uint8Array, unknown> {
9
+ export function decode(): OperatorFunction<BinaryData, unknown> {
9
10
  return (observable) => {
10
11
  return new Observable<unknown>((subscriber) => {
11
12
  let chunkSize = DEFAULT_BUFFER_SIZE;
@@ -14,16 +15,17 @@ export function decode(): OperatorFunction<Uint8Array, unknown> {
14
15
  let end = 0;
15
16
  return observable.subscribe({
16
17
  next(value) {
17
- if (buffer.length >= end + value.length) {
18
- buffer.set(value, end);
19
- end += value.length;
18
+ const data = toUint8Array(value);
19
+ if (buffer.length >= end + data.length) {
20
+ buffer.set(data, end);
21
+ end += data.length;
20
22
  } else {
21
- chunkSize = Math.max(chunkSize, value.length * 2 + end - begin);
22
- const newBuffer = new Uint8Array(Math.max(chunkSize, value.length + end - begin));
23
+ chunkSize = Math.max(chunkSize, data.length * 2 + end - begin);
24
+ const newBuffer = new Uint8Array(Math.max(chunkSize, data.length + end - begin));
23
25
  newBuffer.set(buffer.subarray(begin, end), 0);
24
- newBuffer.set(value, end - begin);
26
+ newBuffer.set(data, end - begin);
25
27
  buffer = newBuffer;
26
- end = end - begin + value.length;
28
+ end = end - begin + data.length;
27
29
  begin = 0;
28
30
  }
29
31
  while (end - begin > 0) {
@@ -9,7 +9,7 @@ export class StreamDecoder extends Transform {
9
9
  readableObjectMode: true,
10
10
  writableObjectMode: false,
11
11
  });
12
- this.buffer = new Subject<Uint8Array>();
12
+ this.buffer = new Subject<BinaryData>();
13
13
  this.buffer.pipe(decode()).subscribe({
14
14
  next: (value) => {
15
15
  // null is not allowed in a stream
package/src/utils.ts ADDED
@@ -0,0 +1,7 @@
1
+ /** 支持的数据转为 Uint8Array */
2
+ export function toUint8Array(data: BinaryData): Uint8Array {
3
+ if (ArrayBuffer.isView(data)) {
4
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
5
+ }
6
+ return new Uint8Array(data, 0, data.byteLength);
7
+ }
package/tests/e2e.js CHANGED
@@ -351,3 +351,13 @@ test('encode/decode object with undefined values', () => {
351
351
  const obj = { a: 1, b: undefined, c: { d: 2, e: undefined, f: null } };
352
352
  expect(decode(encode(obj))).toEqual(obj);
353
353
  });
354
+
355
+ test('decode ArrayBuffer', () => {
356
+ const obj = { a: 1, b: undefined, c: { d: 2, e: undefined, f: null } };
357
+ expect(decode(encode(obj).buffer)).toEqual(obj);
358
+ });
359
+
360
+ test('decode Int8Array', () => {
361
+ const obj = { a: 1, b: undefined, c: { d: 2, e: undefined, f: null } };
362
+ expect(decode(new Int8Array(encode(obj).buffer))).toEqual(obj);
363
+ });