@yume-chan/struct 0.0.19 → 0.0.21
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/CHANGELOG.json +27 -0
- package/CHANGELOG.md +16 -1
- package/README.md +126 -143
- package/esm/basic/definition.d.ts +3 -3
- package/esm/basic/definition.d.ts.map +1 -1
- package/esm/basic/definition.js.map +1 -1
- package/esm/basic/field-value.d.ts.map +1 -1
- package/esm/basic/field-value.js.map +1 -1
- package/esm/basic/stream.d.ts +11 -6
- package/esm/basic/stream.d.ts.map +1 -1
- package/esm/basic/stream.js +7 -1
- package/esm/basic/stream.js.map +1 -1
- package/esm/basic/struct-value.d.ts.map +1 -1
- package/esm/basic/struct-value.js.map +1 -1
- package/esm/index.d.ts +1 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -1
- package/esm/struct.d.ts +19 -12
- package/esm/struct.d.ts.map +1 -1
- package/esm/struct.js +70 -38
- package/esm/struct.js.map +1 -1
- package/esm/sync-promise.js +12 -12
- package/esm/sync-promise.js.map +1 -1
- package/esm/types/bigint.d.ts +3 -3
- package/esm/types/bigint.d.ts.map +1 -1
- package/esm/types/bigint.js +2 -3
- package/esm/types/bigint.js.map +1 -1
- package/esm/types/buffer/base.d.ts +3 -3
- package/esm/types/buffer/base.d.ts.map +1 -1
- package/esm/types/buffer/base.js +3 -5
- package/esm/types/buffer/base.js.map +1 -1
- package/esm/types/buffer/fixed-length.d.ts.map +1 -1
- package/esm/types/buffer/fixed-length.js.map +1 -1
- package/esm/types/buffer/variable-length.d.ts.map +1 -1
- package/esm/types/buffer/variable-length.js.map +1 -1
- package/esm/types/number.d.ts +3 -3
- package/esm/types/number.d.ts.map +1 -1
- package/esm/types/number.js +15 -17
- package/esm/types/number.js.map +1 -1
- package/package.json +8 -8
- package/src/basic/definition.ts +15 -18
- package/src/basic/field-value.ts +11 -11
- package/src/basic/stream.ts +17 -6
- package/src/basic/struct-value.ts +4 -4
- package/src/index.ts +1 -0
- package/src/struct.ts +166 -133
- package/src/sync-promise.ts +25 -25
- package/src/types/bigint.ts +33 -41
- package/src/types/buffer/base.ts +38 -38
- package/src/types/buffer/fixed-length.ts +4 -3
- package/src/types/buffer/variable-length.ts +22 -20
- package/src/types/number.ts +40 -44
- package/tsconfig.build.tsbuildinfo +1 -1
package/esm/types/buffer/base.js
CHANGED
|
@@ -14,7 +14,7 @@ export class BufferFieldSubType {
|
|
|
14
14
|
TTypeScriptType;
|
|
15
15
|
}
|
|
16
16
|
/** An `BufferFieldSubType` that's actually an `Uint8Array` */
|
|
17
|
-
class Uint8ArrayBufferFieldSubType extends BufferFieldSubType {
|
|
17
|
+
export class Uint8ArrayBufferFieldSubType extends BufferFieldSubType {
|
|
18
18
|
static Instance = new Uint8ArrayBufferFieldSubType();
|
|
19
19
|
constructor() {
|
|
20
20
|
super();
|
|
@@ -29,9 +29,8 @@ class Uint8ArrayBufferFieldSubType extends BufferFieldSubType {
|
|
|
29
29
|
return value.byteLength;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
export { Uint8ArrayBufferFieldSubType };
|
|
33
32
|
/** An `BufferFieldSubType` that converts between `Uint8Array` and `string` */
|
|
34
|
-
class StringBufferFieldSubType extends BufferFieldSubType {
|
|
33
|
+
export class StringBufferFieldSubType extends BufferFieldSubType {
|
|
35
34
|
static Instance = new StringBufferFieldSubType();
|
|
36
35
|
toBuffer(value) {
|
|
37
36
|
return encodeUtf8(value);
|
|
@@ -46,7 +45,6 @@ class StringBufferFieldSubType extends BufferFieldSubType {
|
|
|
46
45
|
return -1;
|
|
47
46
|
}
|
|
48
47
|
}
|
|
49
|
-
export { StringBufferFieldSubType };
|
|
50
48
|
export const EMPTY_UINT8_ARRAY = new Uint8Array(0);
|
|
51
49
|
export class BufferLikeFieldDefinition extends StructFieldDefinition {
|
|
52
50
|
type;
|
|
@@ -71,7 +69,7 @@ export class BufferLikeFieldDefinition extends StructFieldDefinition {
|
|
|
71
69
|
return EMPTY_UINT8_ARRAY;
|
|
72
70
|
}
|
|
73
71
|
else {
|
|
74
|
-
return stream.
|
|
72
|
+
return stream.readExactly(size);
|
|
75
73
|
}
|
|
76
74
|
})
|
|
77
75
|
.then((array) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/types/buffer/base.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,OAAgB,kBAAkB;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/types/buffer/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixed-length.d.ts","sourceRoot":"","sources":["../../../src/types/buffer/fixed-length.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,WAAW,iCAAiC;IAC9C,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,oCAAoC,CAC7C,KAAK,SAAS,kBAAkB,GAAG,kBAAkB,EACrD,QAAQ,
|
|
1
|
+
{"version":3,"file":"fixed-length.d.ts","sourceRoot":"","sources":["../../../src/types/buffer/fixed-length.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,WAAW,iCAAiC;IAC9C,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,oCAAoC,CAC7C,KAAK,SAAS,kBAAkB,GAAG,kBAAkB,EACrD,QAAQ,SACJ,iCAAiC,GAAG,iCAAiC,EACzE,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAC5C,SAAQ,yBAAyB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,CAAC;IACxE,OAAO,IAAI,MAAM;CAGpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixed-length.js","sourceRoot":"","sources":["../../../src/types/buffer/fixed-length.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAMtD,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"fixed-length.js","sourceRoot":"","sources":["../../../src/types/buffer/fixed-length.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAMtD,MAAM,OAAO,oCAKX,SAAQ,yBAAkE;IACxE,OAAO;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variable-length.d.ts","sourceRoot":"","sources":["../../../src/types/buffer/variable-length.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,qBAAqB,EACrB,aAAa,EACb,WAAW,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE5E,MAAM,MAAM,WAAW,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,oCAAoC,CACjD,OAAO,GAAG,MAAM,EAChB,YAAY,SAAS,WAAW,CAAC,OAAO,CAAC,GAAG,GAAG;IAE/C;;;;OAIG;IACH,WAAW,EAAE,YAAY,CAAC;IAE1B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,uCAAuC,CAChD,KAAK,SAAS,kBAAkB,GAAG,kBAAkB,EACrD,QAAQ,
|
|
1
|
+
{"version":3,"file":"variable-length.d.ts","sourceRoot":"","sources":["../../../src/types/buffer/variable-length.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,qBAAqB,EACrB,aAAa,EACb,WAAW,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE5E,MAAM,MAAM,WAAW,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,oCAAoC,CACjD,OAAO,GAAG,MAAM,EAChB,YAAY,SAAS,WAAW,CAAC,OAAO,CAAC,GAAG,GAAG;IAE/C;;;;OAIG;IACH,WAAW,EAAE,YAAY,CAAC;IAE1B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,uCAAuC,CAChD,KAAK,SAAS,kBAAkB,GAAG,kBAAkB,EACrD,QAAQ,SACJ,oCAAoC,GAAG,oCAAoC,EAC/E,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAC5C,SAAQ,yBAAyB,CAC/B,KAAK,EACL,QAAQ,EACR,QAAQ,CAAC,aAAa,CAAC,EACvB,eAAe,CAClB;IACG,OAAO,IAAI,MAAM;cAIE,kBAAkB,CAAC,MAAM,EAAE,WAAW;IAQhD,MAAM,CACX,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,EACtB,KAAK,CAAC,EAAE,UAAU,GACnB,wCAAwC,CAAC,IAAI,CAAC;CASpD;AAED,qBAAa,wCAAwC,CACjD,WAAW,SACP,uCAAuC,GAAG,uCAAuC,CACvF,SAAQ,oBAAoB,CAAC,WAAW,CAAC;IACvC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC,SAAS,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;gBAGjE,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC5B,KAAK,CAAC,EAAE,UAAU;IAmBb,OAAO;IAYP,GAAG,CAAC,KAAK,EAAE,OAAO;CAK9B;AAGD,KAAK,sCAAsC,GAAG,gBAAgB,CAC1D,qBAAqB,CAAC,oCAAoC,EAAE,GAAG,EAAE,GAAG,CAAC,CACxE,CAAC;AAEF,qBAAa,wCAAyC,SAAQ,gBAAgB;IAC1E,SAAS,CAAC,aAAa,EAAE,gBAAgB,CAAC;IAE1C,SAAS,CAAC,WAAW,EAAE,sCAAsC,CAAC;gBAG1D,aAAa,EAAE,gBAAgB,EAC/B,gBAAgB,EAAE,sCAAsC;IAYnD,OAAO;IAIP,GAAG;IAaH,GAAG;IAKZ,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;CAI/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variable-length.js","sourceRoot":"","sources":["../../../src/types/buffer/variable-length.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAIxD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAwB5E,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"variable-length.js","sourceRoot":"","sources":["../../../src/types/buffer/variable-length.ts"],"names":[],"mappings":"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"}
|
package/esm/types/number.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AsyncExactReadable, ExactReadable, StructOptions, StructValue } from "../basic/index.js";
|
|
2
2
|
import { StructFieldDefinition, StructFieldValue } from "../basic/index.js";
|
|
3
3
|
export interface NumberFieldType {
|
|
4
4
|
signed: boolean;
|
|
@@ -19,8 +19,8 @@ export declare class NumberFieldDefinition<TType extends NumberFieldType = Numbe
|
|
|
19
19
|
constructor(type: TType, typescriptType?: TTypeScriptType);
|
|
20
20
|
getSize(): number;
|
|
21
21
|
create(options: Readonly<StructOptions>, struct: StructValue, value: TTypeScriptType): NumberFieldValue<this>;
|
|
22
|
-
deserialize(options: Readonly<StructOptions>, stream:
|
|
23
|
-
deserialize(options: Readonly<StructOptions>, stream:
|
|
22
|
+
deserialize(options: Readonly<StructOptions>, stream: ExactReadable, struct: StructValue): NumberFieldValue<this>;
|
|
23
|
+
deserialize(options: Readonly<StructOptions>, stream: AsyncExactReadable, struct: StructValue): Promise<NumberFieldValue<this>>;
|
|
24
24
|
}
|
|
25
25
|
export declare class NumberFieldValue<TDefinition extends NumberFieldDefinition<NumberFieldType, any>> extends StructFieldValue<TDefinition> {
|
|
26
26
|
serialize(dataView: DataView, offset: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/types/number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,
|
|
1
|
+
{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/types/number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,WAAW,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAI5E,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9D,SAAS,CACL,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,OAAO,GACtB,IAAI,CAAC;CACX;AAGD,yBAAiB,eAAe,CAAC;IACtB,MAAM,KAAK,EAAE,eASnB,CAAC;IAEK,MAAM,IAAI,EAAE,eAUlB,CAAC;IAEK,MAAM,MAAM,EAAE,eAcpB,CAAC;IAEK,MAAM,KAAK,EAAE,eAUnB,CAAC;IAEK,MAAM,MAAM,EAAE,eAUpB,CAAC;IAEK,MAAM,KAAK,EAAE,eAmBnB,CAAC;CACL;AAED,qBAAa,qBAAqB,CAC9B,KAAK,SAAS,eAAe,GAAG,eAAe,EAC/C,eAAe,GAAG,MAAM,CAC1B,SAAQ,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;gBAET,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,eAAe;IAMzD,OAAO,IAAI,MAAM;IAIjB,MAAM,CACF,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,GACvB,gBAAgB,CAAC,IAAI,CAAC;IAIhB,WAAW,CAChB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,WAAW,GACpB,gBAAgB,CAAC,IAAI,CAAC;IAChB,WAAW,CAChB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAkBrC;AAED,qBAAa,gBAAgB,CACzB,WAAW,SAAS,qBAAqB,CAAC,eAAe,EAAE,GAAG,CAAC,CACjE,SAAQ,gBAAgB,CAAC,WAAW,CAAC;IACnC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAQtD"}
|
package/esm/types/number.js
CHANGED
|
@@ -28,13 +28,12 @@ export var NumberFieldType;
|
|
|
28
28
|
signed: false,
|
|
29
29
|
size: 2,
|
|
30
30
|
deserialize(array, littleEndian) {
|
|
31
|
-
// PERF:
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return
|
|
37
|
-
(((array[0] << 8) | array[1]) * !littleEndian));
|
|
31
|
+
// PERF: Creating many `DataView`s over small buffers is 90% slower
|
|
32
|
+
// than this. Even if the `DataView` is cached, `DataView#getUint16`
|
|
33
|
+
// is still 1% slower than this.
|
|
34
|
+
const a = (array[1] << 8) | array[0];
|
|
35
|
+
const b = (array[0] << 8) | array[1];
|
|
36
|
+
return littleEndian ? a : b;
|
|
38
37
|
},
|
|
39
38
|
serialize(dataView, offset, value, littleEndian) {
|
|
40
39
|
dataView.setUint16(offset, value, littleEndian);
|
|
@@ -66,22 +65,21 @@ export var NumberFieldType;
|
|
|
66
65
|
signed: true,
|
|
67
66
|
size: 4,
|
|
68
67
|
deserialize(array, littleEndian) {
|
|
69
|
-
|
|
68
|
+
const a = (array[3] << 24) |
|
|
70
69
|
(array[2] << 16) |
|
|
71
70
|
(array[1] << 8) |
|
|
72
|
-
array[0]
|
|
73
|
-
|
|
74
|
-
(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
!littleEndian));
|
|
71
|
+
array[0];
|
|
72
|
+
const b = (array[0] << 24) |
|
|
73
|
+
(array[1] << 16) |
|
|
74
|
+
(array[2] << 8) |
|
|
75
|
+
array[3];
|
|
76
|
+
return littleEndian ? a : b;
|
|
79
77
|
},
|
|
80
78
|
serialize(dataView, offset, value, littleEndian) {
|
|
81
79
|
dataView.setInt32(offset, value, littleEndian);
|
|
82
80
|
},
|
|
83
81
|
};
|
|
84
|
-
})(NumberFieldType
|
|
82
|
+
})(NumberFieldType || (NumberFieldType = {}));
|
|
85
83
|
export class NumberFieldDefinition extends StructFieldDefinition {
|
|
86
84
|
type;
|
|
87
85
|
constructor(type, typescriptType) {
|
|
@@ -97,7 +95,7 @@ export class NumberFieldDefinition extends StructFieldDefinition {
|
|
|
97
95
|
}
|
|
98
96
|
deserialize(options, stream, struct) {
|
|
99
97
|
return SyncPromise.try(() => {
|
|
100
|
-
return stream.
|
|
98
|
+
return stream.readExactly(this.getSize());
|
|
101
99
|
})
|
|
102
100
|
.then((array) => {
|
|
103
101
|
const value = this.type.deserialize(array, options.littleEndian);
|
package/esm/types/number.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/types/number.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAejD,2DAA2D;AAC3D,MAAM,KAAW,eAAe,
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/types/number.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yume-chan/struct",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.21",
|
|
4
4
|
"description": "C-style structure serializer and deserializer.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"structure",
|
|
@@ -27,19 +27,19 @@
|
|
|
27
27
|
"main": "esm/index.js",
|
|
28
28
|
"types": "esm/index.d.ts",
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@yume-chan/dataview-bigint-polyfill": "^0.0.
|
|
31
|
-
"tslib": "^2.
|
|
30
|
+
"@yume-chan/dataview-bigint-polyfill": "^0.0.21",
|
|
31
|
+
"tslib": "^2.6.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@jest/globals": "^29.
|
|
34
|
+
"@jest/globals": "^29.6.1",
|
|
35
35
|
"@yume-chan/eslint-config": "^1.0.0",
|
|
36
36
|
"@yume-chan/tsconfig": "^1.0.0",
|
|
37
37
|
"cross-env": "^7.0.3",
|
|
38
|
-
"eslint": "^8.
|
|
38
|
+
"eslint": "^8.44.0",
|
|
39
39
|
"jest": "^29.5.0",
|
|
40
|
-
"prettier": "^
|
|
41
|
-
"ts-jest": "^29.
|
|
42
|
-
"typescript": "^
|
|
40
|
+
"prettier": "^3.0.0",
|
|
41
|
+
"ts-jest": "^29.1.1",
|
|
42
|
+
"typescript": "^5.1.6"
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
45
45
|
"build": "tsc -b tsconfig.build.json",
|
package/src/basic/definition.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import type { StructFieldValue } from "./field-value.js";
|
|
2
2
|
import type { StructOptions } from "./options.js";
|
|
3
|
-
import type {
|
|
4
|
-
StructAsyncDeserializeStream,
|
|
5
|
-
StructDeserializeStream,
|
|
6
|
-
} from "./stream.js";
|
|
3
|
+
import type { AsyncExactReadable, ExactReadable } from "./stream.js";
|
|
7
4
|
import type { StructValue } from "./struct-value.js";
|
|
8
5
|
|
|
9
6
|
/**
|
|
@@ -16,23 +13,23 @@ import type { StructValue } from "./struct-value.js";
|
|
|
16
13
|
export abstract class StructFieldDefinition<
|
|
17
14
|
TOptions = void,
|
|
18
15
|
TValue = unknown,
|
|
19
|
-
TOmitInitKey extends PropertyKey = never
|
|
16
|
+
TOmitInitKey extends PropertyKey = never,
|
|
20
17
|
> {
|
|
21
18
|
/**
|
|
22
19
|
* When `T` is a type initiated `StructFieldDefinition`,
|
|
23
20
|
* use `T['TValue']` to retrieve its `TValue` type parameter.
|
|
24
21
|
*/
|
|
25
|
-
|
|
22
|
+
readonly TValue!: TValue;
|
|
26
23
|
|
|
27
24
|
/**
|
|
28
25
|
* When `T` is a type initiated `StructFieldDefinition`,
|
|
29
26
|
* use `T['TOmitInitKey']` to retrieve its `TOmitInitKey` type parameter.
|
|
30
27
|
*/
|
|
31
|
-
|
|
28
|
+
readonly TOmitInitKey!: TOmitInitKey;
|
|
32
29
|
|
|
33
|
-
|
|
30
|
+
readonly options: TOptions;
|
|
34
31
|
|
|
35
|
-
|
|
32
|
+
constructor(options: TOptions) {
|
|
36
33
|
this.options = options;
|
|
37
34
|
}
|
|
38
35
|
|
|
@@ -41,15 +38,15 @@ export abstract class StructFieldDefinition<
|
|
|
41
38
|
*
|
|
42
39
|
* Actual size can be retrieved from `StructFieldValue#getSize`
|
|
43
40
|
*/
|
|
44
|
-
|
|
41
|
+
abstract getSize(): number;
|
|
45
42
|
|
|
46
43
|
/**
|
|
47
44
|
* When implemented in derived classes, creates a `StructFieldValue` from a given `value`.
|
|
48
45
|
*/
|
|
49
|
-
|
|
46
|
+
abstract create(
|
|
50
47
|
options: Readonly<StructOptions>,
|
|
51
48
|
structValue: StructValue,
|
|
52
|
-
value: TValue
|
|
49
|
+
value: TValue,
|
|
53
50
|
): StructFieldValue<this>;
|
|
54
51
|
|
|
55
52
|
/**
|
|
@@ -58,14 +55,14 @@ export abstract class StructFieldDefinition<
|
|
|
58
55
|
*
|
|
59
56
|
* `SyncPromise` can be used to simplify implementation.
|
|
60
57
|
*/
|
|
61
|
-
|
|
58
|
+
abstract deserialize(
|
|
62
59
|
options: Readonly<StructOptions>,
|
|
63
|
-
stream:
|
|
64
|
-
structValue: StructValue
|
|
60
|
+
stream: ExactReadable,
|
|
61
|
+
structValue: StructValue,
|
|
65
62
|
): StructFieldValue<this>;
|
|
66
|
-
|
|
63
|
+
abstract deserialize(
|
|
67
64
|
options: Readonly<StructOptions>,
|
|
68
|
-
stream:
|
|
69
|
-
struct: StructValue
|
|
65
|
+
stream: AsyncExactReadable,
|
|
66
|
+
struct: StructValue,
|
|
70
67
|
): Promise<StructFieldValue<this>>;
|
|
71
68
|
}
|
package/src/basic/field-value.ts
CHANGED
|
@@ -13,18 +13,18 @@ export abstract class StructFieldValue<
|
|
|
13
13
|
any,
|
|
14
14
|
any,
|
|
15
15
|
any
|
|
16
|
-
> = StructFieldDefinition<any, any, any
|
|
16
|
+
> = StructFieldDefinition<any, any, any>,
|
|
17
17
|
> {
|
|
18
18
|
/** Gets the definition associated with this runtime value */
|
|
19
|
-
|
|
19
|
+
readonly definition: TDefinition;
|
|
20
20
|
|
|
21
21
|
/** Gets the options of the associated `Struct` */
|
|
22
|
-
|
|
22
|
+
readonly options: Readonly<StructOptions>;
|
|
23
23
|
|
|
24
24
|
/** Gets the associated `Struct` instance */
|
|
25
|
-
|
|
25
|
+
readonly struct: StructValue;
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
get hasCustomAccessors(): boolean {
|
|
28
28
|
return (
|
|
29
29
|
this.get !== StructFieldValue.prototype.get ||
|
|
30
30
|
this.set !== StructFieldValue.prototype.set
|
|
@@ -33,11 +33,11 @@ export abstract class StructFieldValue<
|
|
|
33
33
|
|
|
34
34
|
protected value: TDefinition["TValue"];
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
constructor(
|
|
37
37
|
definition: TDefinition,
|
|
38
38
|
options: Readonly<StructOptions>,
|
|
39
39
|
struct: StructValue,
|
|
40
|
-
value: TDefinition["TValue"]
|
|
40
|
+
value: TDefinition["TValue"],
|
|
41
41
|
) {
|
|
42
42
|
this.definition = definition;
|
|
43
43
|
this.options = options;
|
|
@@ -50,26 +50,26 @@ export abstract class StructFieldValue<
|
|
|
50
50
|
*
|
|
51
51
|
* When overridden in derived classes, can have custom logic to calculate the actual size.
|
|
52
52
|
*/
|
|
53
|
-
|
|
53
|
+
getSize(): number {
|
|
54
54
|
return this.definition.getSize();
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
58
|
* When implemented in derived classes, reads current field's value.
|
|
59
59
|
*/
|
|
60
|
-
|
|
60
|
+
get(): TDefinition["TValue"] {
|
|
61
61
|
return this.value;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/**
|
|
65
65
|
* When implemented in derived classes, updates current field's value.
|
|
66
66
|
*/
|
|
67
|
-
|
|
67
|
+
set(value: TDefinition["TValue"]): void {
|
|
68
68
|
this.value = value;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
72
|
* When implemented in derived classes, serializes this field into `dataView` at `offset`
|
|
73
73
|
*/
|
|
74
|
-
|
|
74
|
+
abstract serialize(dataView: DataView, offset: number): void;
|
|
75
75
|
}
|
package/src/basic/stream.ts
CHANGED
|
@@ -2,22 +2,33 @@ import type { ValueOrPromise } from "../utils.js";
|
|
|
2
2
|
|
|
3
3
|
// TODO: allow over reading (returning a `Uint8Array`, an `offset` and a `length`) to avoid copying
|
|
4
4
|
|
|
5
|
-
export
|
|
5
|
+
export class ExactReadableEndedError extends Error {
|
|
6
|
+
constructor() {
|
|
7
|
+
super("ExactReadable ended");
|
|
8
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface ExactReadable {
|
|
13
|
+
readonly position: number;
|
|
14
|
+
|
|
6
15
|
/**
|
|
7
16
|
* Read data from the underlying data source.
|
|
8
17
|
*
|
|
9
18
|
* The stream must return exactly `length` bytes or data. If that's not possible
|
|
10
|
-
* (due to end of file or other error condition), it must throw an
|
|
19
|
+
* (due to end of file or other error condition), it must throw an {@link ExactReadableEndedError}.
|
|
11
20
|
*/
|
|
12
|
-
|
|
21
|
+
readExactly(length: number): Uint8Array;
|
|
13
22
|
}
|
|
14
23
|
|
|
15
|
-
export interface
|
|
24
|
+
export interface AsyncExactReadable {
|
|
25
|
+
readonly position: number;
|
|
26
|
+
|
|
16
27
|
/**
|
|
17
28
|
* Read data from the underlying data source.
|
|
18
29
|
*
|
|
19
30
|
* The stream must return exactly `length` bytes or data. If that's not possible
|
|
20
|
-
* (due to end of file or other error condition), it must throw an
|
|
31
|
+
* (due to end of file or other error condition), it must throw an {@link ExactReadableEndedError}.
|
|
21
32
|
*/
|
|
22
|
-
|
|
33
|
+
readExactly(length: number): ValueOrPromise<Uint8Array>;
|
|
23
34
|
}
|
|
@@ -14,9 +14,9 @@ export class StructValue {
|
|
|
14
14
|
/**
|
|
15
15
|
* Gets the result struct value object
|
|
16
16
|
*/
|
|
17
|
-
|
|
17
|
+
readonly value: Record<PropertyKey, unknown>;
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
constructor(prototype: object) {
|
|
20
20
|
// PERF: `Object.create(extra)` is 50% faster
|
|
21
21
|
// than `Object.defineProperties(this.value, extra)`
|
|
22
22
|
this.value = Object.create(prototype) as Record<PropertyKey, unknown>;
|
|
@@ -35,7 +35,7 @@ export class StructValue {
|
|
|
35
35
|
* @param name The field name
|
|
36
36
|
* @param fieldValue The associated `StructFieldValue`
|
|
37
37
|
*/
|
|
38
|
-
|
|
38
|
+
set(name: PropertyKey, fieldValue: StructFieldValue): void {
|
|
39
39
|
this.fieldValues[name] = fieldValue;
|
|
40
40
|
|
|
41
41
|
// PERF: `Object.defineProperty` is slow
|
|
@@ -61,7 +61,7 @@ export class StructValue {
|
|
|
61
61
|
*
|
|
62
62
|
* @param name The field name
|
|
63
63
|
*/
|
|
64
|
-
|
|
64
|
+
get(name: PropertyKey): StructFieldValue {
|
|
65
65
|
return this.fieldValues[name]!;
|
|
66
66
|
}
|
|
67
67
|
}
|
package/src/index.ts
CHANGED