@yume-chan/struct 0.0.0-20240714132542
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.md +131 -0
- package/LICENSE +21 -0
- package/README.md +747 -0
- package/esm/basic/definition.d.ts +44 -0
- package/esm/basic/definition.d.ts.map +1 -0
- package/esm/basic/definition.js +24 -0
- package/esm/basic/definition.js.map +1 -0
- package/esm/basic/field-value.d.ts +39 -0
- package/esm/basic/field-value.d.ts.map +1 -0
- package/esm/basic/field-value.js +46 -0
- package/esm/basic/field-value.js.map +1 -0
- package/esm/basic/index.d.ts +6 -0
- package/esm/basic/index.d.ts.map +1 -0
- package/esm/basic/index.js +6 -0
- package/esm/basic/index.js.map +1 -0
- package/esm/basic/options.d.ts +10 -0
- package/esm/basic/options.d.ts.map +1 -0
- package/esm/basic/options.js +4 -0
- package/esm/basic/options.js.map +1 -0
- package/esm/basic/stream.d.ts +25 -0
- package/esm/basic/stream.d.ts.map +1 -0
- package/esm/basic/stream.js +8 -0
- package/esm/basic/stream.js.map +1 -0
- package/esm/basic/struct-value.d.ts +30 -0
- package/esm/basic/struct-value.d.ts.map +1 -0
- package/esm/basic/struct-value.js +62 -0
- package/esm/basic/struct-value.js.map +1 -0
- package/esm/index.d.ts +15 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +7 -0
- package/esm/index.js.map +1 -0
- package/esm/struct.d.ts +151 -0
- package/esm/struct.d.ts.map +1 -0
- package/esm/struct.js +255 -0
- package/esm/struct.js.map +1 -0
- package/esm/sync-promise.d.ts +13 -0
- package/esm/sync-promise.d.ts.map +1 -0
- package/esm/sync-promise.js +71 -0
- package/esm/sync-promise.js.map +1 -0
- package/esm/types/bigint.d.ts +25 -0
- package/esm/types/bigint.d.ts.map +1 -0
- package/esm/types/bigint.js +46 -0
- package/esm/types/bigint.js.map +1 -0
- package/esm/types/buffer/base.d.ts +69 -0
- package/esm/types/buffer/base.d.ts.map +1 -0
- package/esm/types/buffer/base.js +101 -0
- package/esm/types/buffer/base.js.map +1 -0
- package/esm/types/buffer/fixed-length.d.ts +9 -0
- package/esm/types/buffer/fixed-length.d.ts.map +1 -0
- package/esm/types/buffer/fixed-length.js +7 -0
- package/esm/types/buffer/fixed-length.js.map +1 -0
- package/esm/types/buffer/index.d.ts +4 -0
- package/esm/types/buffer/index.d.ts.map +1 -0
- package/esm/types/buffer/index.js +4 -0
- package/esm/types/buffer/index.js.map +1 -0
- package/esm/types/buffer/variable-length.d.ts +46 -0
- package/esm/types/buffer/variable-length.d.ts.map +1 -0
- package/esm/types/buffer/variable-length.js +88 -0
- package/esm/types/buffer/variable-length.js.map +1 -0
- package/esm/types/index.d.ts +4 -0
- package/esm/types/index.d.ts.map +1 -0
- package/esm/types/index.js +4 -0
- package/esm/types/index.js.map +1 -0
- package/esm/types/number.d.ts +28 -0
- package/esm/types/number.d.ts.map +1 -0
- package/esm/types/number.js +88 -0
- package/esm/types/number.js.map +1 -0
- package/esm/utils.d.ts +48 -0
- package/esm/utils.d.ts.map +1 -0
- package/esm/utils.js +18 -0
- package/esm/utils.js.map +1 -0
- package/package.json +49 -0
- package/src/basic/definition.ts +68 -0
- package/src/basic/field-value.ts +71 -0
- package/src/basic/index.ts +5 -0
- package/src/basic/options.ts +19 -0
- package/src/basic/stream.ts +34 -0
- package/src/basic/struct-value.ts +85 -0
- package/src/index.ts +18 -0
- package/src/struct.ts +705 -0
- package/src/sync-promise.ts +131 -0
- package/src/types/bigint.ts +120 -0
- package/src/types/buffer/base.ts +195 -0
- package/src/types/buffer/fixed-length.ts +22 -0
- package/src/types/buffer/index.ts +3 -0
- package/src/types/buffer/variable-length.ts +199 -0
- package/src/types/index.ts +3 -0
- package/src/types/number.ts +159 -0
- package/src/utils.ts +94 -0
- package/tsconfig.build.json +3 -0
- package/tsconfig.build.tsbuildinfo +1 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { StructFieldValue } from "./field-value.js";
|
|
2
|
+
import type { StructOptions } from "./options.js";
|
|
3
|
+
import type { AsyncExactReadable, ExactReadable } from "./stream.js";
|
|
4
|
+
import type { StructValue } from "./struct-value.js";
|
|
5
|
+
/**
|
|
6
|
+
* A field definition defines how to deserialize a field.
|
|
7
|
+
*
|
|
8
|
+
* @template TOptions TypeScript type of this definition's `options`.
|
|
9
|
+
* @template TValue TypeScript type of this field.
|
|
10
|
+
* @template TOmitInitKey Optionally remove some fields from the init type. Should be a union of string literal types.
|
|
11
|
+
*/
|
|
12
|
+
export declare abstract class StructFieldDefinition<TOptions = void, TValue = unknown, TOmitInitKey extends PropertyKey = never> {
|
|
13
|
+
/**
|
|
14
|
+
* When `T` is a type initiated `StructFieldDefinition`,
|
|
15
|
+
* use `T['TValue']` to retrieve its `TValue` type parameter.
|
|
16
|
+
*/
|
|
17
|
+
readonly TValue: TValue;
|
|
18
|
+
/**
|
|
19
|
+
* When `T` is a type initiated `StructFieldDefinition`,
|
|
20
|
+
* use `T['TOmitInitKey']` to retrieve its `TOmitInitKey` type parameter.
|
|
21
|
+
*/
|
|
22
|
+
readonly TOmitInitKey: TOmitInitKey;
|
|
23
|
+
readonly options: TOptions;
|
|
24
|
+
constructor(options: TOptions);
|
|
25
|
+
/**
|
|
26
|
+
* When implemented in derived classes, returns the size (or minimal size if it's dynamic) of this field.
|
|
27
|
+
*
|
|
28
|
+
* Actual size can be retrieved from `StructFieldValue#getSize`
|
|
29
|
+
*/
|
|
30
|
+
abstract getSize(): number;
|
|
31
|
+
/**
|
|
32
|
+
* When implemented in derived classes, creates a `StructFieldValue` from a given `value`.
|
|
33
|
+
*/
|
|
34
|
+
abstract create(options: Readonly<StructOptions>, structValue: StructValue, value: TValue): StructFieldValue<this>;
|
|
35
|
+
/**
|
|
36
|
+
* When implemented in derived classes,It must be synchronous (returns a value) or asynchronous (returns a `Promise`) depending
|
|
37
|
+
* on the type of `stream`. reads and creates a `StructFieldValue` from `stream`.
|
|
38
|
+
*
|
|
39
|
+
* `SyncPromise` can be used to simplify implementation.
|
|
40
|
+
*/
|
|
41
|
+
abstract deserialize(options: Readonly<StructOptions>, stream: ExactReadable, structValue: StructValue): StructFieldValue<this>;
|
|
42
|
+
abstract deserialize(options: Readonly<StructOptions>, stream: AsyncExactReadable, struct: StructValue): Promise<StructFieldValue<this>>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/basic/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;GAMG;AACH,8BAAsB,qBAAqB,CACvC,QAAQ,GAAG,IAAI,EACf,MAAM,GAAG,OAAO,EAChB,YAAY,SAAS,WAAW,GAAG,KAAK;IAExC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAG,MAAM,CAAC;IAEzB;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAG,YAAY,CAAC;IAErC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAEf,OAAO,EAAE,QAAQ;IAI7B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,IAAI,MAAM;IAE1B;;OAEG;IACH,QAAQ,CAAC,MAAM,CACX,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,MAAM,GACd,gBAAgB,CAAC,IAAI,CAAC;IAEzB;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAChB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,WAAW,GACzB,gBAAgB,CAAC,IAAI,CAAC;IACzB,QAAQ,CAAC,WAAW,CAChB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;CACrC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A field definition defines how to deserialize a field.
|
|
3
|
+
*
|
|
4
|
+
* @template TOptions TypeScript type of this definition's `options`.
|
|
5
|
+
* @template TValue TypeScript type of this field.
|
|
6
|
+
* @template TOmitInitKey Optionally remove some fields from the init type. Should be a union of string literal types.
|
|
7
|
+
*/
|
|
8
|
+
export class StructFieldDefinition {
|
|
9
|
+
/**
|
|
10
|
+
* When `T` is a type initiated `StructFieldDefinition`,
|
|
11
|
+
* use `T['TValue']` to retrieve its `TValue` type parameter.
|
|
12
|
+
*/
|
|
13
|
+
TValue;
|
|
14
|
+
/**
|
|
15
|
+
* When `T` is a type initiated `StructFieldDefinition`,
|
|
16
|
+
* use `T['TOmitInitKey']` to retrieve its `TOmitInitKey` type parameter.
|
|
17
|
+
*/
|
|
18
|
+
TOmitInitKey;
|
|
19
|
+
options;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
this.options = options;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/basic/definition.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,MAAM,OAAgB,qBAAqB;IAKvC;;;OAGG;IACM,MAAM,CAAU;IAEzB;;;OAGG;IACM,YAAY,CAAgB;IAE5B,OAAO,CAAW;IAE3B,YAAY,OAAiB;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;CAkCJ"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { StructFieldDefinition } from "./definition.js";
|
|
2
|
+
import type { StructOptions } from "./options.js";
|
|
3
|
+
import type { StructValue } from "./struct-value.js";
|
|
4
|
+
/**
|
|
5
|
+
* A field value defines how to serialize a field.
|
|
6
|
+
*
|
|
7
|
+
* It may contains extra metadata about the value which are essential or
|
|
8
|
+
* helpful for the serialization process.
|
|
9
|
+
*/
|
|
10
|
+
export declare abstract class StructFieldValue<TDefinition extends StructFieldDefinition<unknown, unknown, PropertyKey>> {
|
|
11
|
+
/** Gets the definition associated with this runtime value */
|
|
12
|
+
readonly definition: TDefinition;
|
|
13
|
+
/** Gets the options of the associated `Struct` */
|
|
14
|
+
readonly options: Readonly<StructOptions>;
|
|
15
|
+
/** Gets the associated `Struct` instance */
|
|
16
|
+
readonly struct: StructValue;
|
|
17
|
+
get hasCustomAccessors(): boolean;
|
|
18
|
+
protected value: TDefinition["TValue"];
|
|
19
|
+
constructor(definition: TDefinition, options: Readonly<StructOptions>, struct: StructValue, value: TDefinition["TValue"]);
|
|
20
|
+
/**
|
|
21
|
+
* Gets size of this field. By default, it returns its `definition`'s size.
|
|
22
|
+
*
|
|
23
|
+
* When overridden in derived classes, can have custom logic to calculate the actual size.
|
|
24
|
+
*/
|
|
25
|
+
getSize(): number;
|
|
26
|
+
/**
|
|
27
|
+
* When implemented in derived classes, reads current field's value.
|
|
28
|
+
*/
|
|
29
|
+
get(): TDefinition["TValue"];
|
|
30
|
+
/**
|
|
31
|
+
* When implemented in derived classes, updates current field's value.
|
|
32
|
+
*/
|
|
33
|
+
set(value: TDefinition["TValue"]): void;
|
|
34
|
+
/**
|
|
35
|
+
* When implemented in derived classes, serializes this field into `array` at `offset`
|
|
36
|
+
*/
|
|
37
|
+
abstract serialize(array: Uint8Array, offset: number): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=field-value.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-value.d.ts","sourceRoot":"","sources":["../../src/basic/field-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;GAKG;AACH,8BAAsB,gBAAgB,CAClC,WAAW,SAAS,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC;IAExE,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IAEjC,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAE1C,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,IAAI,kBAAkB,IAAI,OAAO,CAKhC;IAED,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAGnC,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC;IAQhC;;;;OAIG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC;IAI5B;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,IAAI;IAIvC;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAC9D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A field value defines how to serialize a field.
|
|
3
|
+
*
|
|
4
|
+
* It may contains extra metadata about the value which are essential or
|
|
5
|
+
* helpful for the serialization process.
|
|
6
|
+
*/
|
|
7
|
+
export class StructFieldValue {
|
|
8
|
+
/** Gets the definition associated with this runtime value */
|
|
9
|
+
definition;
|
|
10
|
+
/** Gets the options of the associated `Struct` */
|
|
11
|
+
options;
|
|
12
|
+
/** Gets the associated `Struct` instance */
|
|
13
|
+
struct;
|
|
14
|
+
get hasCustomAccessors() {
|
|
15
|
+
return (this.get !== StructFieldValue.prototype.get ||
|
|
16
|
+
this.set !== StructFieldValue.prototype.set);
|
|
17
|
+
}
|
|
18
|
+
value;
|
|
19
|
+
constructor(definition, options, struct, value) {
|
|
20
|
+
this.definition = definition;
|
|
21
|
+
this.options = options;
|
|
22
|
+
this.struct = struct;
|
|
23
|
+
this.value = value;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Gets size of this field. By default, it returns its `definition`'s size.
|
|
27
|
+
*
|
|
28
|
+
* When overridden in derived classes, can have custom logic to calculate the actual size.
|
|
29
|
+
*/
|
|
30
|
+
getSize() {
|
|
31
|
+
return this.definition.getSize();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* When implemented in derived classes, reads current field's value.
|
|
35
|
+
*/
|
|
36
|
+
get() {
|
|
37
|
+
return this.value;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* When implemented in derived classes, updates current field's value.
|
|
41
|
+
*/
|
|
42
|
+
set(value) {
|
|
43
|
+
this.value = value;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=field-value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-value.js","sourceRoot":"","sources":["../../src/basic/field-value.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,OAAgB,gBAAgB;IAGlC,6DAA6D;IACpD,UAAU,CAAc;IAEjC,kDAAkD;IACzC,OAAO,CAA0B;IAE1C,4CAA4C;IACnC,MAAM,CAAc;IAE7B,IAAI,kBAAkB;QAClB,OAAO,CACH,IAAI,CAAC,GAAG,KAAK,gBAAgB,CAAC,SAAS,CAAC,GAAG;YAC3C,IAAI,CAAC,GAAG,KAAK,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAC9C,CAAC;IACN,CAAC;IAES,KAAK,CAAwB;IAEvC,YACI,UAAuB,EACvB,OAAgC,EAChC,MAAmB,EACnB,KAA4B;QAE5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,OAAO;QACH,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,GAAG;QACC,OAAO,IAAI,CAAC,KAAc,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,KAA4B;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;CAMJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/basic/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/basic/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface StructOptions {
|
|
2
|
+
/**
|
|
3
|
+
* Whether all multi-byte fields in this struct are little-endian encoded.
|
|
4
|
+
*
|
|
5
|
+
* @default false
|
|
6
|
+
*/
|
|
7
|
+
littleEndian: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const StructDefaultOptions: Readonly<StructOptions>;
|
|
10
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/basic/options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC1B;;;;OAIG;IACH,YAAY,EAAE,OAAO,CAAC;CAQzB;AAED,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,aAAa,CAExD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/basic/options.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,MAAM,oBAAoB,GAA4B;IACzD,YAAY,EAAE,KAAK;CACtB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ValueOrPromise } from "../utils.js";
|
|
2
|
+
export declare class ExactReadableEndedError extends Error {
|
|
3
|
+
constructor();
|
|
4
|
+
}
|
|
5
|
+
export interface ExactReadable {
|
|
6
|
+
readonly position: number;
|
|
7
|
+
/**
|
|
8
|
+
* Read data from the underlying data source.
|
|
9
|
+
*
|
|
10
|
+
* The stream must return exactly `length` bytes or data. If that's not possible
|
|
11
|
+
* (due to end of file or other error condition), it must throw an {@link ExactReadableEndedError}.
|
|
12
|
+
*/
|
|
13
|
+
readExactly(length: number): Uint8Array;
|
|
14
|
+
}
|
|
15
|
+
export interface AsyncExactReadable {
|
|
16
|
+
readonly position: number;
|
|
17
|
+
/**
|
|
18
|
+
* Read data from the underlying data source.
|
|
19
|
+
*
|
|
20
|
+
* The stream must return exactly `length` bytes or data. If that's not possible
|
|
21
|
+
* (due to end of file or other error condition), it must throw an {@link ExactReadableEndedError}.
|
|
22
|
+
*/
|
|
23
|
+
readExactly(length: number): ValueOrPromise<Uint8Array>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/basic/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,qBAAa,uBAAwB,SAAQ,KAAK;;CAKjD;AAED,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;CAC3C;AAED,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;CAC3D"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// TODO: allow over reading (returning a `Uint8Array`, an `offset` and a `length`) to avoid copying
|
|
2
|
+
export class ExactReadableEndedError extends Error {
|
|
3
|
+
constructor() {
|
|
4
|
+
super("ExactReadable ended");
|
|
5
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/basic/stream.ts"],"names":[],"mappings":"AAEA,mGAAmG;AAEnG,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAC9C;QACI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC7B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;CACJ"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { StructFieldDefinition } from "./definition.js";
|
|
2
|
+
import type { StructFieldValue } from "./field-value.js";
|
|
3
|
+
export declare const STRUCT_VALUE_SYMBOL: unique symbol;
|
|
4
|
+
export declare function isStructValueInit(value: unknown): value is {
|
|
5
|
+
[STRUCT_VALUE_SYMBOL]: StructValue;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* A struct value is a map between keys in a struct and their field values.
|
|
9
|
+
*/
|
|
10
|
+
export declare class StructValue {
|
|
11
|
+
/**
|
|
12
|
+
* Gets the result struct value object
|
|
13
|
+
*/
|
|
14
|
+
readonly value: Record<PropertyKey, unknown>;
|
|
15
|
+
constructor(prototype: object);
|
|
16
|
+
/**
|
|
17
|
+
* Sets a `StructFieldValue` for `key`
|
|
18
|
+
*
|
|
19
|
+
* @param name The field name
|
|
20
|
+
* @param fieldValue The associated `StructFieldValue`
|
|
21
|
+
*/
|
|
22
|
+
set(name: PropertyKey, fieldValue: StructFieldValue<StructFieldDefinition<unknown, unknown, PropertyKey>>): void;
|
|
23
|
+
/**
|
|
24
|
+
* Gets the `StructFieldValue` for `key`
|
|
25
|
+
*
|
|
26
|
+
* @param name The field name
|
|
27
|
+
*/
|
|
28
|
+
get(name: PropertyKey): StructFieldValue<StructFieldDefinition<unknown, unknown, PropertyKey>>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=struct-value.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"struct-value.d.ts","sourceRoot":"","sources":["../../src/basic/struct-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,eAAO,MAAM,mBAAmB,eAAyB,CAAC;AAE1D,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,OAAO,GACf,KAAK,IAAI;IAAE,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAA;CAAE,CAMjD;AAED;;GAEG;AACH,qBAAa,WAAW;IAMpB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAEjC,SAAS,EAAE,MAAM;IAa7B;;;;;OAKG;IACH,GAAG,CACC,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,gBAAgB,CACxB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CACvD,GACF,IAAI;IAqBP;;;;OAIG;IACH,GAAG,CACC,IAAI,EAAE,WAAW,GAClB,gBAAgB,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;CAG5E"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export const STRUCT_VALUE_SYMBOL = Symbol("struct-value");
|
|
2
|
+
export function isStructValueInit(value) {
|
|
3
|
+
return (typeof value === "object" &&
|
|
4
|
+
value !== null &&
|
|
5
|
+
STRUCT_VALUE_SYMBOL in value);
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A struct value is a map between keys in a struct and their field values.
|
|
9
|
+
*/
|
|
10
|
+
export class StructValue {
|
|
11
|
+
/** @internal */ fieldValues = {};
|
|
12
|
+
/**
|
|
13
|
+
* Gets the result struct value object
|
|
14
|
+
*/
|
|
15
|
+
value;
|
|
16
|
+
constructor(prototype) {
|
|
17
|
+
// PERF: `Object.create(extra)` is 50% faster
|
|
18
|
+
// than `Object.defineProperties(this.value, extra)`
|
|
19
|
+
this.value = Object.create(prototype);
|
|
20
|
+
// PERF: `Object.defineProperty` is slow
|
|
21
|
+
// but we need it to be non-enumerable
|
|
22
|
+
Object.defineProperty(this.value, STRUCT_VALUE_SYMBOL, {
|
|
23
|
+
enumerable: false,
|
|
24
|
+
value: this,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Sets a `StructFieldValue` for `key`
|
|
29
|
+
*
|
|
30
|
+
* @param name The field name
|
|
31
|
+
* @param fieldValue The associated `StructFieldValue`
|
|
32
|
+
*/
|
|
33
|
+
set(name, fieldValue) {
|
|
34
|
+
this.fieldValues[name] = fieldValue;
|
|
35
|
+
// PERF: `Object.defineProperty` is slow
|
|
36
|
+
// use normal property when possible
|
|
37
|
+
if (fieldValue.hasCustomAccessors) {
|
|
38
|
+
Object.defineProperty(this.value, name, {
|
|
39
|
+
configurable: true,
|
|
40
|
+
enumerable: true,
|
|
41
|
+
get() {
|
|
42
|
+
return fieldValue.get();
|
|
43
|
+
},
|
|
44
|
+
set(v) {
|
|
45
|
+
fieldValue.set(v);
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.value[name] = fieldValue.get();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Gets the `StructFieldValue` for `key`
|
|
55
|
+
*
|
|
56
|
+
* @param name The field name
|
|
57
|
+
*/
|
|
58
|
+
get(name) {
|
|
59
|
+
return this.fieldValues[name];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=struct-value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"struct-value.js","sourceRoot":"","sources":["../../src/basic/struct-value.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1D,MAAM,UAAU,iBAAiB,CAC7B,KAAc;IAEd,OAAO,CACH,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,mBAAmB,IAAI,KAAK,CAC/B,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,WAAW;IACpB,gBAAgB,CAAU,WAAW,GAGjC,EAAE,CAAC;IAEP;;OAEG;IACM,KAAK,CAA+B;IAE7C,YAAY,SAAiB;QACzB,6CAA6C;QAC7C,oDAAoD;QACpD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAiC,CAAC;QAEtE,wCAAwC;QACxC,sCAAsC;QACtC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,EAAE;YACnD,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,IAAI;SACd,CAAC,CAAC;IACP,CAAC;IAED;;;;;OAKG;IACH,GAAG,CACC,IAAiB,EACjB,UAEC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;QAEpC,wCAAwC;QACxC,oCAAoC;QACpC,IAAI,UAAU,CAAC,kBAAkB,EAAE,CAAC;YAChC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;gBACpC,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;gBAChB,GAAG;oBACC,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC;gBAC5B,CAAC;gBACD,GAAG,CAAC,CAAC;oBACD,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC;aACJ,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;QACxC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,GAAG,CACC,IAAiB;QAEjB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAE,CAAC;IACnC,CAAC;CACJ"}
|
package/esm/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
interface ArrayBuffer {
|
|
3
|
+
__brand: never;
|
|
4
|
+
}
|
|
5
|
+
interface SharedArrayBuffer {
|
|
6
|
+
__brand: never;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export * from "./basic/index.js";
|
|
10
|
+
export * from "./struct.js";
|
|
11
|
+
export { Struct as default } from "./struct.js";
|
|
12
|
+
export * from "./sync-promise.js";
|
|
13
|
+
export * from "./types/index.js";
|
|
14
|
+
export * from "./utils.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,WAAW;QAEjB,OAAO,EAAE,KAAK,CAAC;KAClB;IAED,UAAU,iBAAiB;QAEvB,OAAO,EAAE,KAAK,CAAC;KAClB;CACJ;AAED,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC"}
|
package/esm/index.js
ADDED
package/esm/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC"}
|
package/esm/struct.d.ts
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import type { AsyncExactReadable, ExactReadable, StructFieldDefinition, StructOptions } from "./basic/index.js";
|
|
2
|
+
import type { BufferFieldConverter, FixedLengthBufferLikeFieldOptions, LengthField, VariableLengthBufferLikeFieldOptions } from "./types/index.js";
|
|
3
|
+
import { BigIntFieldVariant, FixedLengthBufferLikeFieldDefinition, StringBufferFieldConverter, Uint8ArrayBufferFieldConverter, VariableLengthBufferLikeFieldDefinition } from "./types/index.js";
|
|
4
|
+
import type { Evaluate, Identity, Overwrite } from "./utils.js";
|
|
5
|
+
export interface StructLike<TValue> {
|
|
6
|
+
deserialize(stream: ExactReadable | AsyncExactReadable): Promise<TValue>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Extract the value type of the specified `Struct`
|
|
10
|
+
*/
|
|
11
|
+
export type StructValueType<T extends StructLike<unknown>> = Awaited<ReturnType<T["deserialize"]>>;
|
|
12
|
+
/**
|
|
13
|
+
* Create a new `Struct` type with `TDefinition` appended
|
|
14
|
+
*/
|
|
15
|
+
type AddFieldDescriptor<TFields extends object, TOmitInitKey extends PropertyKey, TExtra extends object, TPostDeserialized, TFieldName extends PropertyKey, TDefinition extends StructFieldDefinition<unknown, unknown, PropertyKey>> = Identity<Struct<Evaluate<TFields & Record<TFieldName, TDefinition["TValue"]>>, TOmitInitKey | TDefinition["TOmitInitKey"], TExtra, TPostDeserialized>>;
|
|
16
|
+
/**
|
|
17
|
+
* Similar to `ArrayBufferLikeFieldCreator`, but bind to `TType`
|
|
18
|
+
*/
|
|
19
|
+
interface BoundArrayBufferLikeFieldDefinitionCreator<TFields extends object, TOmitInitKey extends PropertyKey, TExtra extends object, TPostDeserialized, TType extends BufferFieldConverter<unknown, unknown>> {
|
|
20
|
+
<TName extends PropertyKey, TTypeScriptType = TType["TTypeScriptType"]>(name: TName, options: FixedLengthBufferLikeFieldOptions, typeScriptType?: TTypeScriptType): AddFieldDescriptor<TFields, TOmitInitKey, TExtra, TPostDeserialized, TName, FixedLengthBufferLikeFieldDefinition<TType, FixedLengthBufferLikeFieldOptions, TTypeScriptType>>;
|
|
21
|
+
<TName extends PropertyKey, TOptions extends VariableLengthBufferLikeFieldOptions<TFields, LengthField<TFields>>, TTypeScriptType = TType["TTypeScriptType"]>(name: TName, options: TOptions, typeScriptType?: TTypeScriptType): AddFieldDescriptor<TFields, TOmitInitKey, TExtra, TPostDeserialized, TName, VariableLengthBufferLikeFieldDefinition<TType, TOptions, TTypeScriptType>>;
|
|
22
|
+
}
|
|
23
|
+
export type StructPostDeserialized<TFields, TPostDeserialized> = (this: TFields, object: TFields) => TPostDeserialized;
|
|
24
|
+
export type StructDeserializedResult<TFields extends object, TExtra extends object, TPostDeserialized> = TPostDeserialized extends undefined ? Overwrite<TExtra, TFields> : TPostDeserialized;
|
|
25
|
+
export declare class StructDeserializeError extends Error {
|
|
26
|
+
constructor(message: string);
|
|
27
|
+
}
|
|
28
|
+
export declare class StructNotEnoughDataError extends StructDeserializeError {
|
|
29
|
+
constructor();
|
|
30
|
+
}
|
|
31
|
+
export declare class StructEmptyError extends StructDeserializeError {
|
|
32
|
+
constructor();
|
|
33
|
+
}
|
|
34
|
+
interface StructDefinition<TFields extends object, TOmitInitKey extends PropertyKey, TExtra extends object> {
|
|
35
|
+
readonly TFields: TFields;
|
|
36
|
+
readonly TOmitInitKey: TOmitInitKey;
|
|
37
|
+
readonly TExtra: TExtra;
|
|
38
|
+
readonly TInit: Evaluate<Omit<TFields, TOmitInitKey>>;
|
|
39
|
+
}
|
|
40
|
+
export declare class Struct<TFields extends object = Record<never, never>, TOmitInitKey extends PropertyKey = never, TExtra extends object = Record<never, never>, TPostDeserialized = undefined> implements StructLike<StructDeserializedResult<TFields, TExtra, TPostDeserialized>> {
|
|
41
|
+
#private;
|
|
42
|
+
readonly TFields: TFields;
|
|
43
|
+
readonly TOmitInitKey: TOmitInitKey;
|
|
44
|
+
readonly TExtra: TExtra;
|
|
45
|
+
readonly TInit: Evaluate<Omit<TFields, TOmitInitKey>>;
|
|
46
|
+
readonly TDeserializeResult: StructDeserializedResult<TFields, TExtra, TPostDeserialized>;
|
|
47
|
+
readonly options: Readonly<StructOptions>;
|
|
48
|
+
/**
|
|
49
|
+
* Gets the static size (exclude fields that can change size at runtime)
|
|
50
|
+
*/
|
|
51
|
+
get size(): number;
|
|
52
|
+
get fields(): readonly [
|
|
53
|
+
name: PropertyKey,
|
|
54
|
+
definition: StructFieldDefinition<unknown, unknown, PropertyKey>
|
|
55
|
+
][];
|
|
56
|
+
constructor(options?: Partial<Readonly<StructOptions>>);
|
|
57
|
+
/**
|
|
58
|
+
* Appends a `StructFieldDefinition` to the `Struct
|
|
59
|
+
*/
|
|
60
|
+
field<TName extends PropertyKey, TDefinition extends StructFieldDefinition<unknown, unknown, PropertyKey>>(name: TName, definition: TDefinition): AddFieldDescriptor<TFields, TOmitInitKey, TExtra, TPostDeserialized, TName, TDefinition>;
|
|
61
|
+
/**
|
|
62
|
+
* Merges (flats) another `Struct`'s fields and extra fields into this one.
|
|
63
|
+
*
|
|
64
|
+
* `other`'s `postDeserialize` will be ignored.
|
|
65
|
+
*/
|
|
66
|
+
concat<TOther extends StructDefinition<object, PropertyKey, object>>(other: TOther): Struct<TFields & TOther["TFields"], TOmitInitKey | TOther["TOmitInitKey"], TExtra & TOther["TExtra"], TPostDeserialized>;
|
|
67
|
+
/**
|
|
68
|
+
* Appends an `int8` field to the `Struct`
|
|
69
|
+
*/
|
|
70
|
+
int8<TName extends PropertyKey, TTypeScriptType = number>(name: TName, typeScriptType?: TTypeScriptType): Struct<Evaluate<TFields & Record<TName, TTypeScriptType>>, TOmitInitKey, TExtra, TPostDeserialized>;
|
|
71
|
+
/**
|
|
72
|
+
* Appends an `uint8` field to the `Struct`
|
|
73
|
+
*/
|
|
74
|
+
uint8<TName extends PropertyKey, TTypeScriptType = number>(name: TName, typeScriptType?: TTypeScriptType): Struct<Evaluate<TFields & Record<TName, TTypeScriptType>>, TOmitInitKey, TExtra, TPostDeserialized>;
|
|
75
|
+
/**
|
|
76
|
+
* Appends an `int16` field to the `Struct`
|
|
77
|
+
*/
|
|
78
|
+
int16<TName extends PropertyKey, TTypeScriptType = number>(name: TName, typeScriptType?: TTypeScriptType): Struct<Evaluate<TFields & Record<TName, TTypeScriptType>>, TOmitInitKey, TExtra, TPostDeserialized>;
|
|
79
|
+
/**
|
|
80
|
+
* Appends an `uint16` field to the `Struct`
|
|
81
|
+
*/
|
|
82
|
+
uint16<TName extends PropertyKey, TTypeScriptType = number>(name: TName, typeScriptType?: TTypeScriptType): Struct<Evaluate<TFields & Record<TName, TTypeScriptType>>, TOmitInitKey, TExtra, TPostDeserialized>;
|
|
83
|
+
/**
|
|
84
|
+
* Appends an `int32` field to the `Struct`
|
|
85
|
+
*/
|
|
86
|
+
int32<TName extends PropertyKey, TTypeScriptType = number>(name: TName, typeScriptType?: TTypeScriptType): Struct<Evaluate<TFields & Record<TName, TTypeScriptType>>, TOmitInitKey, TExtra, TPostDeserialized>;
|
|
87
|
+
/**
|
|
88
|
+
* Appends an `uint32` field to the `Struct`
|
|
89
|
+
*/
|
|
90
|
+
uint32<TName extends PropertyKey, TTypeScriptType = number>(name: TName, typeScriptType?: TTypeScriptType): Struct<Evaluate<TFields & Record<TName, TTypeScriptType>>, TOmitInitKey, TExtra, TPostDeserialized>;
|
|
91
|
+
/**
|
|
92
|
+
* Appends an `int64` field to the `Struct`
|
|
93
|
+
*
|
|
94
|
+
* Requires native `BigInt` support
|
|
95
|
+
*/
|
|
96
|
+
int64<TName extends PropertyKey, TTypeScriptType = BigIntFieldVariant["TTypeScriptType"]>(name: TName, typeScriptType?: TTypeScriptType): Struct<Evaluate<TFields & Record<TName, TTypeScriptType>>, TOmitInitKey, TExtra, TPostDeserialized>;
|
|
97
|
+
/**
|
|
98
|
+
* Appends an `uint64` field to the `Struct`
|
|
99
|
+
*
|
|
100
|
+
* Requires native `BigInt` support
|
|
101
|
+
*/
|
|
102
|
+
uint64<TName extends PropertyKey, TTypeScriptType = BigIntFieldVariant["TTypeScriptType"]>(name: TName, typeScriptType?: TTypeScriptType): Struct<Evaluate<TFields & Record<TName, TTypeScriptType>>, TOmitInitKey, TExtra, TPostDeserialized>;
|
|
103
|
+
uint8Array: BoundArrayBufferLikeFieldDefinitionCreator<TFields, TOmitInitKey, TExtra, TPostDeserialized, Uint8ArrayBufferFieldConverter>;
|
|
104
|
+
string: BoundArrayBufferLikeFieldDefinitionCreator<TFields, TOmitInitKey, TExtra, TPostDeserialized, StringBufferFieldConverter>;
|
|
105
|
+
/**
|
|
106
|
+
* Adds some extra properties into every `Struct` value.
|
|
107
|
+
*
|
|
108
|
+
* Extra properties will not affect serialize or deserialize process.
|
|
109
|
+
*
|
|
110
|
+
* Multiple calls to `extra` will merge all properties together.
|
|
111
|
+
*
|
|
112
|
+
* @param value
|
|
113
|
+
* An object containing properties to be added to the result value. Accessors and methods are also allowed.
|
|
114
|
+
*/
|
|
115
|
+
extra<T extends Record<Exclude<keyof T, Exclude<keyof T, keyof TFields>>, never>>(value: T & ThisType<Overwrite<Overwrite<TExtra, T>, TFields>>): Struct<TFields, TOmitInitKey, Overwrite<TExtra, T>, TPostDeserialized>;
|
|
116
|
+
/**
|
|
117
|
+
* Registers (or replaces) a custom callback to be run after deserialized.
|
|
118
|
+
*
|
|
119
|
+
* A callback returning `never` (always throw an error)
|
|
120
|
+
* will also change the return type of `deserialize` to `never`.
|
|
121
|
+
*/
|
|
122
|
+
postDeserialize(callback: StructPostDeserialized<TFields, never>): Struct<TFields, TOmitInitKey, TExtra, never>;
|
|
123
|
+
/**
|
|
124
|
+
* Registers (or replaces) a custom callback to be run after deserialized.
|
|
125
|
+
*
|
|
126
|
+
* A callback returning `void` means it modify the result object in-place
|
|
127
|
+
* (or doesn't modify it at all), so `deserialize` will still return the result object.
|
|
128
|
+
*/
|
|
129
|
+
postDeserialize(callback?: StructPostDeserialized<TFields, void>): Struct<TFields, TOmitInitKey, TExtra, undefined>;
|
|
130
|
+
/**
|
|
131
|
+
* Registers (or replaces) a custom callback to be run after deserialized.
|
|
132
|
+
*
|
|
133
|
+
* A callback returning anything other than `undefined`
|
|
134
|
+
* will `deserialize` to return that object instead.
|
|
135
|
+
*/
|
|
136
|
+
postDeserialize<TPostSerialize>(callback?: StructPostDeserialized<TFields, TPostSerialize>): Struct<TFields, TOmitInitKey, TExtra, TPostSerialize>;
|
|
137
|
+
/**
|
|
138
|
+
* Deserialize a struct value from `stream`.
|
|
139
|
+
*/
|
|
140
|
+
deserialize(stream: ExactReadable): StructDeserializedResult<TFields, TExtra, TPostDeserialized>;
|
|
141
|
+
deserialize(stream: AsyncExactReadable): Promise<StructDeserializedResult<TFields, TExtra, TPostDeserialized>>;
|
|
142
|
+
/**
|
|
143
|
+
* Serialize a struct value to a buffer.
|
|
144
|
+
* @param init Fields of the struct
|
|
145
|
+
* @param output The buffer to serialize the struct to. It must be large enough to hold the entire struct. If not provided, a new buffer will be created.
|
|
146
|
+
* @returns A view of `output` that contains the serialized struct, or a new buffer if `output` is not provided.
|
|
147
|
+
*/
|
|
148
|
+
serialize(init: Evaluate<Omit<TFields, TOmitInitKey>>, output?: Uint8Array): Uint8Array;
|
|
149
|
+
}
|
|
150
|
+
export {};
|
|
151
|
+
//# sourceMappingURL=struct.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"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"}
|