@yume-chan/struct 0.0.23 → 1.0.0
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 +37 -2
- package/LICENSE +1 -1
- package/README.md +85 -714
- package/esm/bipedal.d.ts +5 -0
- package/esm/bipedal.d.ts.map +1 -0
- package/esm/bipedal.js +31 -0
- package/esm/bipedal.js.map +1 -0
- package/esm/buffer.d.ts +21 -0
- package/esm/buffer.d.ts.map +1 -0
- package/esm/buffer.js +173 -0
- package/esm/buffer.js.map +1 -0
- package/esm/field.d.ts +21 -0
- package/esm/field.d.ts.map +1 -0
- package/esm/field.js +2 -0
- package/esm/field.js.map +1 -0
- package/esm/index.d.ts +6 -4
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +6 -4
- package/esm/index.js.map +1 -1
- package/esm/number.d.ts +13 -0
- package/esm/number.d.ts.map +1 -0
- package/esm/number.js +59 -0
- package/esm/number.js.map +1 -0
- package/esm/{basic/stream.d.ts → readable.d.ts} +3 -3
- package/esm/readable.d.ts.map +1 -0
- package/esm/{basic/stream.js → readable.js} +1 -2
- package/esm/readable.js.map +1 -0
- package/esm/string.d.ts +16 -0
- package/esm/string.d.ts.map +1 -0
- package/esm/string.js +14 -0
- package/esm/string.js.map +1 -0
- package/esm/struct.d.ts +24 -127
- package/esm/struct.d.ts.map +1 -1
- package/esm/struct.js +72 -214
- package/esm/struct.js.map +1 -1
- package/esm/utils.d.ts +10 -45
- package/esm/utils.d.ts.map +1 -1
- package/esm/utils.js +12 -11
- package/esm/utils.js.map +1 -1
- package/package.json +11 -14
- package/src/bipedal.ts +55 -0
- package/src/buffer.ts +260 -0
- package/src/field.ts +27 -0
- package/src/index.ts +6 -4
- package/src/number.ts +123 -0
- package/src/{basic/stream.ts → readable.ts} +3 -4
- package/src/string.ts +43 -0
- package/src/struct.ts +156 -628
- package/src/utils.ts +18 -69
- package/tsconfig.build.json +6 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/CHANGELOG.json +0 -161
- package/esm/basic/definition.d.ts +0 -44
- package/esm/basic/definition.d.ts.map +0 -1
- package/esm/basic/definition.js +0 -24
- package/esm/basic/definition.js.map +0 -1
- package/esm/basic/field-value.d.ts +0 -39
- package/esm/basic/field-value.d.ts.map +0 -1
- package/esm/basic/field-value.js +0 -46
- package/esm/basic/field-value.js.map +0 -1
- package/esm/basic/index.d.ts +0 -6
- package/esm/basic/index.d.ts.map +0 -1
- package/esm/basic/index.js +0 -6
- package/esm/basic/index.js.map +0 -1
- package/esm/basic/options.d.ts +0 -10
- package/esm/basic/options.d.ts.map +0 -1
- package/esm/basic/options.js +0 -4
- package/esm/basic/options.js.map +0 -1
- package/esm/basic/stream.d.ts.map +0 -1
- package/esm/basic/stream.js.map +0 -1
- package/esm/basic/struct-value.d.ts +0 -26
- package/esm/basic/struct-value.d.ts.map +0 -1
- package/esm/basic/struct-value.js +0 -57
- package/esm/basic/struct-value.js.map +0 -1
- package/esm/sync-promise.d.ts +0 -13
- package/esm/sync-promise.d.ts.map +0 -1
- package/esm/sync-promise.js +0 -71
- package/esm/sync-promise.js.map +0 -1
- package/esm/types/bigint.d.ts +0 -26
- package/esm/types/bigint.d.ts.map +0 -1
- package/esm/types/bigint.js +0 -47
- package/esm/types/bigint.js.map +0 -1
- package/esm/types/buffer/base.d.ts +0 -65
- package/esm/types/buffer/base.d.ts.map +0 -1
- package/esm/types/buffer/base.js +0 -101
- package/esm/types/buffer/base.js.map +0 -1
- package/esm/types/buffer/fixed-length.d.ts +0 -9
- package/esm/types/buffer/fixed-length.d.ts.map +0 -1
- package/esm/types/buffer/fixed-length.js +0 -7
- package/esm/types/buffer/fixed-length.js.map +0 -1
- package/esm/types/buffer/index.d.ts +0 -4
- package/esm/types/buffer/index.d.ts.map +0 -1
- package/esm/types/buffer/index.js +0 -4
- package/esm/types/buffer/index.js.map +0 -1
- package/esm/types/buffer/variable-length.d.ts +0 -45
- package/esm/types/buffer/variable-length.d.ts.map +0 -1
- package/esm/types/buffer/variable-length.js +0 -76
- package/esm/types/buffer/variable-length.js.map +0 -1
- package/esm/types/index.d.ts +0 -4
- package/esm/types/index.d.ts.map +0 -1
- package/esm/types/index.js +0 -4
- package/esm/types/index.js.map +0 -1
- package/esm/types/number.d.ts +0 -28
- package/esm/types/number.d.ts.map +0 -1
- package/esm/types/number.js +0 -111
- package/esm/types/number.js.map +0 -1
- package/src/basic/definition.ts +0 -68
- package/src/basic/field-value.ts +0 -75
- package/src/basic/index.ts +0 -5
- package/src/basic/options.ts +0 -19
- package/src/basic/struct-value.ts +0 -67
- package/src/sync-promise.ts +0 -134
- package/src/types/bigint.ts +0 -121
- package/src/types/buffer/base.ts +0 -197
- package/src/types/buffer/fixed-length.ts +0 -17
- package/src/types/buffer/index.ts +0 -3
- package/src/types/buffer/variable-length.ts +0 -174
- package/src/types/index.ts +0 -3
- package/src/types/number.ts +0 -173
package/esm/types/index.d.ts
DELETED
package/esm/types/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
|
package/esm/types/index.js
DELETED
package/esm/types/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
|
package/esm/types/number.d.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { AsyncExactReadable, ExactReadable, StructOptions, StructValue } from "../basic/index.js";
|
|
2
|
-
import { StructFieldDefinition, StructFieldValue } from "../basic/index.js";
|
|
3
|
-
export interface NumberFieldType {
|
|
4
|
-
signed: boolean;
|
|
5
|
-
size: number;
|
|
6
|
-
deserialize(array: Uint8Array, littleEndian: boolean): number;
|
|
7
|
-
serialize(dataView: DataView, offset: number, value: number, littleEndian: boolean): void;
|
|
8
|
-
}
|
|
9
|
-
export declare namespace NumberFieldType {
|
|
10
|
-
const Uint8: NumberFieldType;
|
|
11
|
-
const Int8: NumberFieldType;
|
|
12
|
-
const Uint16: NumberFieldType;
|
|
13
|
-
const Int16: NumberFieldType;
|
|
14
|
-
const Uint32: NumberFieldType;
|
|
15
|
-
const Int32: NumberFieldType;
|
|
16
|
-
}
|
|
17
|
-
export declare class NumberFieldDefinition<TType extends NumberFieldType = NumberFieldType, TTypeScriptType = number> extends StructFieldDefinition<void, TTypeScriptType> {
|
|
18
|
-
readonly type: TType;
|
|
19
|
-
constructor(type: TType, typescriptType?: TTypeScriptType);
|
|
20
|
-
getSize(): number;
|
|
21
|
-
create(options: Readonly<StructOptions>, struct: StructValue, value: TTypeScriptType): NumberFieldValue<this>;
|
|
22
|
-
deserialize(options: Readonly<StructOptions>, stream: ExactReadable, struct: StructValue): NumberFieldValue<this>;
|
|
23
|
-
deserialize(options: Readonly<StructOptions>, stream: AsyncExactReadable, struct: StructValue): Promise<NumberFieldValue<this>>;
|
|
24
|
-
}
|
|
25
|
-
export declare class NumberFieldValue<TDefinition extends NumberFieldDefinition<NumberFieldType, any>> extends StructFieldValue<TDefinition> {
|
|
26
|
-
serialize(dataView: DataView, offset: number): void;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=number.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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;AAED,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
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { StructFieldDefinition, StructFieldValue } from "../basic/index.js";
|
|
2
|
-
import { SyncPromise } from "../sync-promise.js";
|
|
3
|
-
export var NumberFieldType;
|
|
4
|
-
(function (NumberFieldType) {
|
|
5
|
-
NumberFieldType.Uint8 = {
|
|
6
|
-
signed: false,
|
|
7
|
-
size: 1,
|
|
8
|
-
deserialize(array) {
|
|
9
|
-
return array[0];
|
|
10
|
-
},
|
|
11
|
-
serialize(dataView, offset, value) {
|
|
12
|
-
dataView.setUint8(offset, value);
|
|
13
|
-
},
|
|
14
|
-
};
|
|
15
|
-
NumberFieldType.Int8 = {
|
|
16
|
-
signed: true,
|
|
17
|
-
size: 1,
|
|
18
|
-
deserialize(array) {
|
|
19
|
-
const value = NumberFieldType.Uint8.deserialize(array, false);
|
|
20
|
-
return (value << 24) >> 24;
|
|
21
|
-
},
|
|
22
|
-
serialize(dataView, offset, value) {
|
|
23
|
-
dataView.setInt8(offset, value);
|
|
24
|
-
},
|
|
25
|
-
};
|
|
26
|
-
NumberFieldType.Uint16 = {
|
|
27
|
-
signed: false,
|
|
28
|
-
size: 2,
|
|
29
|
-
deserialize(array, littleEndian) {
|
|
30
|
-
// PERF: Creating many `DataView`s over small buffers is 90% slower
|
|
31
|
-
// than this. Even if the `DataView` is cached, `DataView#getUint16`
|
|
32
|
-
// is still 1% slower than this.
|
|
33
|
-
const a = (array[1] << 8) | array[0];
|
|
34
|
-
const b = (array[0] << 8) | array[1];
|
|
35
|
-
return littleEndian ? a : b;
|
|
36
|
-
},
|
|
37
|
-
serialize(dataView, offset, value, littleEndian) {
|
|
38
|
-
dataView.setUint16(offset, value, littleEndian);
|
|
39
|
-
},
|
|
40
|
-
};
|
|
41
|
-
NumberFieldType.Int16 = {
|
|
42
|
-
signed: true,
|
|
43
|
-
size: 2,
|
|
44
|
-
deserialize(array, littleEndian) {
|
|
45
|
-
const value = NumberFieldType.Uint16.deserialize(array, littleEndian);
|
|
46
|
-
return (value << 16) >> 16;
|
|
47
|
-
},
|
|
48
|
-
serialize(dataView, offset, value, littleEndian) {
|
|
49
|
-
dataView.setInt16(offset, value, littleEndian);
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
NumberFieldType.Uint32 = {
|
|
53
|
-
signed: false,
|
|
54
|
-
size: 4,
|
|
55
|
-
deserialize(array, littleEndian) {
|
|
56
|
-
const value = NumberFieldType.Int32.deserialize(array, littleEndian);
|
|
57
|
-
return value >>> 0;
|
|
58
|
-
},
|
|
59
|
-
serialize(dataView, offset, value, littleEndian) {
|
|
60
|
-
dataView.setUint32(offset, value, littleEndian);
|
|
61
|
-
},
|
|
62
|
-
};
|
|
63
|
-
NumberFieldType.Int32 = {
|
|
64
|
-
signed: true,
|
|
65
|
-
size: 4,
|
|
66
|
-
deserialize(array, littleEndian) {
|
|
67
|
-
const a = (array[3] << 24) |
|
|
68
|
-
(array[2] << 16) |
|
|
69
|
-
(array[1] << 8) |
|
|
70
|
-
array[0];
|
|
71
|
-
const b = (array[0] << 24) |
|
|
72
|
-
(array[1] << 16) |
|
|
73
|
-
(array[2] << 8) |
|
|
74
|
-
array[3];
|
|
75
|
-
return littleEndian ? a : b;
|
|
76
|
-
},
|
|
77
|
-
serialize(dataView, offset, value, littleEndian) {
|
|
78
|
-
dataView.setInt32(offset, value, littleEndian);
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
})(NumberFieldType || (NumberFieldType = {}));
|
|
82
|
-
export class NumberFieldDefinition extends StructFieldDefinition {
|
|
83
|
-
type;
|
|
84
|
-
constructor(type, typescriptType) {
|
|
85
|
-
void typescriptType;
|
|
86
|
-
super();
|
|
87
|
-
this.type = type;
|
|
88
|
-
}
|
|
89
|
-
getSize() {
|
|
90
|
-
return this.type.size;
|
|
91
|
-
}
|
|
92
|
-
create(options, struct, value) {
|
|
93
|
-
return new NumberFieldValue(this, options, struct, value);
|
|
94
|
-
}
|
|
95
|
-
deserialize(options, stream, struct) {
|
|
96
|
-
return SyncPromise.try(() => {
|
|
97
|
-
return stream.readExactly(this.getSize());
|
|
98
|
-
})
|
|
99
|
-
.then((array) => {
|
|
100
|
-
const value = this.type.deserialize(array, options.littleEndian);
|
|
101
|
-
return this.create(options, struct, value);
|
|
102
|
-
})
|
|
103
|
-
.valueOrPromise();
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
export class NumberFieldValue extends StructFieldValue {
|
|
107
|
-
serialize(dataView, offset) {
|
|
108
|
-
this.definition.type.serialize(dataView, offset, this.value, this.options.littleEndian);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
//# sourceMappingURL=number.js.map
|
package/esm/types/number.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/types/number.ts"],"names":[],"mappings":"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"}
|
package/src/basic/definition.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
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
|
-
/**
|
|
7
|
-
* A field definition defines how to deserialize a field.
|
|
8
|
-
*
|
|
9
|
-
* @template TOptions TypeScript type of this definition's `options`.
|
|
10
|
-
* @template TValue TypeScript type of this field.
|
|
11
|
-
* @template TOmitInitKey Optionally remove some fields from the init type. Should be a union of string literal types.
|
|
12
|
-
*/
|
|
13
|
-
export abstract class StructFieldDefinition<
|
|
14
|
-
TOptions = void,
|
|
15
|
-
TValue = unknown,
|
|
16
|
-
TOmitInitKey extends PropertyKey = never,
|
|
17
|
-
> {
|
|
18
|
-
/**
|
|
19
|
-
* When `T` is a type initiated `StructFieldDefinition`,
|
|
20
|
-
* use `T['TValue']` to retrieve its `TValue` type parameter.
|
|
21
|
-
*/
|
|
22
|
-
readonly TValue!: TValue;
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* When `T` is a type initiated `StructFieldDefinition`,
|
|
26
|
-
* use `T['TOmitInitKey']` to retrieve its `TOmitInitKey` type parameter.
|
|
27
|
-
*/
|
|
28
|
-
readonly TOmitInitKey!: TOmitInitKey;
|
|
29
|
-
|
|
30
|
-
readonly options: TOptions;
|
|
31
|
-
|
|
32
|
-
constructor(options: TOptions) {
|
|
33
|
-
this.options = options;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* When implemented in derived classes, returns the size (or minimal size if it's dynamic) of this field.
|
|
38
|
-
*
|
|
39
|
-
* Actual size can be retrieved from `StructFieldValue#getSize`
|
|
40
|
-
*/
|
|
41
|
-
abstract getSize(): number;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* When implemented in derived classes, creates a `StructFieldValue` from a given `value`.
|
|
45
|
-
*/
|
|
46
|
-
abstract create(
|
|
47
|
-
options: Readonly<StructOptions>,
|
|
48
|
-
structValue: StructValue,
|
|
49
|
-
value: TValue,
|
|
50
|
-
): StructFieldValue<this>;
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* When implemented in derived classes,It must be synchronous (returns a value) or asynchronous (returns a `Promise`) depending
|
|
54
|
-
* on the type of `stream`. reads and creates a `StructFieldValue` from `stream`.
|
|
55
|
-
*
|
|
56
|
-
* `SyncPromise` can be used to simplify implementation.
|
|
57
|
-
*/
|
|
58
|
-
abstract deserialize(
|
|
59
|
-
options: Readonly<StructOptions>,
|
|
60
|
-
stream: ExactReadable,
|
|
61
|
-
structValue: StructValue,
|
|
62
|
-
): StructFieldValue<this>;
|
|
63
|
-
abstract deserialize(
|
|
64
|
-
options: Readonly<StructOptions>,
|
|
65
|
-
stream: AsyncExactReadable,
|
|
66
|
-
struct: StructValue,
|
|
67
|
-
): Promise<StructFieldValue<this>>;
|
|
68
|
-
}
|
package/src/basic/field-value.ts
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import type { StructFieldDefinition } from "./definition.js";
|
|
2
|
-
import type { StructOptions } from "./options.js";
|
|
3
|
-
import type { StructValue } from "./struct-value.js";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* A field value defines how to serialize a field.
|
|
7
|
-
*
|
|
8
|
-
* It may contains extra metadata about the value which are essential or
|
|
9
|
-
* helpful for the serialization process.
|
|
10
|
-
*/
|
|
11
|
-
export abstract class StructFieldValue<
|
|
12
|
-
TDefinition extends StructFieldDefinition<
|
|
13
|
-
any,
|
|
14
|
-
any,
|
|
15
|
-
any
|
|
16
|
-
> = StructFieldDefinition<any, any, any>,
|
|
17
|
-
> {
|
|
18
|
-
/** Gets the definition associated with this runtime value */
|
|
19
|
-
readonly definition: TDefinition;
|
|
20
|
-
|
|
21
|
-
/** Gets the options of the associated `Struct` */
|
|
22
|
-
readonly options: Readonly<StructOptions>;
|
|
23
|
-
|
|
24
|
-
/** Gets the associated `Struct` instance */
|
|
25
|
-
readonly struct: StructValue;
|
|
26
|
-
|
|
27
|
-
get hasCustomAccessors(): boolean {
|
|
28
|
-
return (
|
|
29
|
-
this.get !== StructFieldValue.prototype.get ||
|
|
30
|
-
this.set !== StructFieldValue.prototype.set
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
protected value: TDefinition["TValue"];
|
|
35
|
-
|
|
36
|
-
constructor(
|
|
37
|
-
definition: TDefinition,
|
|
38
|
-
options: Readonly<StructOptions>,
|
|
39
|
-
struct: StructValue,
|
|
40
|
-
value: TDefinition["TValue"],
|
|
41
|
-
) {
|
|
42
|
-
this.definition = definition;
|
|
43
|
-
this.options = options;
|
|
44
|
-
this.struct = struct;
|
|
45
|
-
this.value = value;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Gets size of this field. By default, it returns its `definition`'s size.
|
|
50
|
-
*
|
|
51
|
-
* When overridden in derived classes, can have custom logic to calculate the actual size.
|
|
52
|
-
*/
|
|
53
|
-
getSize(): number {
|
|
54
|
-
return this.definition.getSize();
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* When implemented in derived classes, reads current field's value.
|
|
59
|
-
*/
|
|
60
|
-
get(): TDefinition["TValue"] {
|
|
61
|
-
return this.value;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* When implemented in derived classes, updates current field's value.
|
|
66
|
-
*/
|
|
67
|
-
set(value: TDefinition["TValue"]): void {
|
|
68
|
-
this.value = value;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* When implemented in derived classes, serializes this field into `dataView` at `offset`
|
|
73
|
-
*/
|
|
74
|
-
abstract serialize(dataView: DataView, offset: number): void;
|
|
75
|
-
}
|
package/src/basic/index.ts
DELETED
package/src/basic/options.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
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
|
-
// TODO: StructOptions: investigate whether this is necessary
|
|
10
|
-
// I can't think about any other options which need to be struct wide.
|
|
11
|
-
// Even endianness can be set on a per-field basis (because it's not meaningful
|
|
12
|
-
// for some field types like `Uint8Array`, and very rarely, a struct may contain
|
|
13
|
-
// mixed endianness).
|
|
14
|
-
// It's just more common and a little more convenient to have it here.
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const StructDefaultOptions: Readonly<StructOptions> = {
|
|
18
|
-
littleEndian: false,
|
|
19
|
-
};
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import type { StructFieldValue } from "./field-value.js";
|
|
2
|
-
|
|
3
|
-
export const STRUCT_VALUE_SYMBOL = Symbol("struct-value");
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* A struct value is a map between keys in a struct and their field values.
|
|
7
|
-
*/
|
|
8
|
-
export class StructValue {
|
|
9
|
-
/** @internal */ readonly fieldValues: Record<
|
|
10
|
-
PropertyKey,
|
|
11
|
-
StructFieldValue
|
|
12
|
-
> = {};
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Gets the result struct value object
|
|
16
|
-
*/
|
|
17
|
-
readonly value: Record<PropertyKey, unknown>;
|
|
18
|
-
|
|
19
|
-
constructor(prototype: object) {
|
|
20
|
-
// PERF: `Object.create(extra)` is 50% faster
|
|
21
|
-
// than `Object.defineProperties(this.value, extra)`
|
|
22
|
-
this.value = Object.create(prototype) as Record<PropertyKey, unknown>;
|
|
23
|
-
|
|
24
|
-
// PERF: `Object.defineProperty` is slow
|
|
25
|
-
// but we need it to be non-enumerable
|
|
26
|
-
Object.defineProperty(this.value, STRUCT_VALUE_SYMBOL, {
|
|
27
|
-
enumerable: false,
|
|
28
|
-
value: this,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Sets a `StructFieldValue` for `key`
|
|
34
|
-
*
|
|
35
|
-
* @param name The field name
|
|
36
|
-
* @param fieldValue The associated `StructFieldValue`
|
|
37
|
-
*/
|
|
38
|
-
set(name: PropertyKey, fieldValue: StructFieldValue): void {
|
|
39
|
-
this.fieldValues[name] = fieldValue;
|
|
40
|
-
|
|
41
|
-
// PERF: `Object.defineProperty` is slow
|
|
42
|
-
// use normal property when possible
|
|
43
|
-
if (fieldValue.hasCustomAccessors) {
|
|
44
|
-
Object.defineProperty(this.value, name, {
|
|
45
|
-
configurable: true,
|
|
46
|
-
enumerable: true,
|
|
47
|
-
get() {
|
|
48
|
-
return fieldValue.get();
|
|
49
|
-
},
|
|
50
|
-
set(v) {
|
|
51
|
-
fieldValue.set(v);
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
} else {
|
|
55
|
-
this.value[name] = fieldValue.get();
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Gets the `StructFieldValue` for `key`
|
|
61
|
-
*
|
|
62
|
-
* @param name The field name
|
|
63
|
-
*/
|
|
64
|
-
get(name: PropertyKey): StructFieldValue {
|
|
65
|
-
return this.fieldValues[name]!;
|
|
66
|
-
}
|
|
67
|
-
}
|
package/src/sync-promise.ts
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
export interface SyncPromise<T> {
|
|
2
|
-
then<TResult1 = T, TResult2 = never>(
|
|
3
|
-
onfulfilled?:
|
|
4
|
-
| ((value: T) => TResult1 | PromiseLike<TResult1>)
|
|
5
|
-
| null
|
|
6
|
-
| undefined,
|
|
7
|
-
onrejected?:
|
|
8
|
-
| ((reason: any) => TResult2 | PromiseLike<TResult2>)
|
|
9
|
-
| null
|
|
10
|
-
| undefined,
|
|
11
|
-
): SyncPromise<TResult1 | TResult2>;
|
|
12
|
-
|
|
13
|
-
valueOrPromise(): T | PromiseLike<T>;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
interface SyncPromiseStatic {
|
|
17
|
-
reject<T = never>(reason?: any): SyncPromise<T>;
|
|
18
|
-
|
|
19
|
-
resolve(): SyncPromise<void>;
|
|
20
|
-
resolve<T>(value: T | PromiseLike<T>): SyncPromise<T>;
|
|
21
|
-
|
|
22
|
-
try<T>(executor: () => T | PromiseLike<T>): SyncPromise<T>;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export const SyncPromise: SyncPromiseStatic = {
|
|
26
|
-
reject<T = never>(reason?: any): SyncPromise<T> {
|
|
27
|
-
return new RejectedSyncPromise(reason);
|
|
28
|
-
},
|
|
29
|
-
resolve<T>(value?: T | PromiseLike<T>): SyncPromise<T> {
|
|
30
|
-
if (
|
|
31
|
-
typeof value === "object" &&
|
|
32
|
-
value !== null &&
|
|
33
|
-
typeof (value as PromiseLike<T>).then === "function"
|
|
34
|
-
) {
|
|
35
|
-
if (
|
|
36
|
-
value instanceof PendingSyncPromise ||
|
|
37
|
-
value instanceof ResolvedSyncPromise ||
|
|
38
|
-
value instanceof RejectedSyncPromise
|
|
39
|
-
) {
|
|
40
|
-
return value;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return new PendingSyncPromise(value as PromiseLike<T>);
|
|
44
|
-
} else {
|
|
45
|
-
return new ResolvedSyncPromise(value as T);
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
try<T>(executor: () => T | PromiseLike<T>): SyncPromise<T> {
|
|
49
|
-
try {
|
|
50
|
-
return SyncPromise.resolve(executor());
|
|
51
|
-
} catch (e) {
|
|
52
|
-
return SyncPromise.reject(e);
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
class PendingSyncPromise<T> implements SyncPromise<T> {
|
|
58
|
-
#promise: PromiseLike<T>;
|
|
59
|
-
|
|
60
|
-
constructor(promise: PromiseLike<T>) {
|
|
61
|
-
this.#promise = promise;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
then<TResult1 = T, TResult2 = never>(
|
|
65
|
-
onfulfilled?:
|
|
66
|
-
| ((value: T) => TResult1 | PromiseLike<TResult1>)
|
|
67
|
-
| null
|
|
68
|
-
| undefined,
|
|
69
|
-
onrejected?:
|
|
70
|
-
| ((reason: any) => TResult2 | PromiseLike<TResult2>)
|
|
71
|
-
| null
|
|
72
|
-
| undefined,
|
|
73
|
-
) {
|
|
74
|
-
return new PendingSyncPromise<TResult1 | TResult2>(
|
|
75
|
-
this.#promise.then(onfulfilled, onrejected),
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
valueOrPromise(): T | PromiseLike<T> {
|
|
80
|
-
return this.#promise;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
class ResolvedSyncPromise<T> implements SyncPromise<T> {
|
|
85
|
-
#value: T;
|
|
86
|
-
|
|
87
|
-
constructor(value: T) {
|
|
88
|
-
this.#value = value;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
then<TResult1 = T>(
|
|
92
|
-
onfulfilled?:
|
|
93
|
-
| ((value: T) => TResult1 | PromiseLike<TResult1>)
|
|
94
|
-
| null
|
|
95
|
-
| undefined,
|
|
96
|
-
) {
|
|
97
|
-
if (!onfulfilled) {
|
|
98
|
-
return this as any;
|
|
99
|
-
}
|
|
100
|
-
return SyncPromise.try(() => onfulfilled(this.#value));
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
valueOrPromise(): T | PromiseLike<T> {
|
|
104
|
-
return this.#value;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
class RejectedSyncPromise<T> implements SyncPromise<T> {
|
|
109
|
-
#reason: any;
|
|
110
|
-
|
|
111
|
-
constructor(reason: any) {
|
|
112
|
-
this.#reason = reason;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
then<TResult1 = T, TResult2 = never>(
|
|
116
|
-
onfulfilled?:
|
|
117
|
-
| ((value: T) => TResult1 | PromiseLike<TResult1>)
|
|
118
|
-
| null
|
|
119
|
-
| undefined,
|
|
120
|
-
onrejected?:
|
|
121
|
-
| ((reason: any) => TResult2 | PromiseLike<TResult2>)
|
|
122
|
-
| null
|
|
123
|
-
| undefined,
|
|
124
|
-
) {
|
|
125
|
-
if (!onrejected) {
|
|
126
|
-
return this as any;
|
|
127
|
-
}
|
|
128
|
-
return SyncPromise.try(() => onrejected(this.#reason));
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
valueOrPromise(): T | PromiseLike<T> {
|
|
132
|
-
throw this.#reason;
|
|
133
|
-
}
|
|
134
|
-
}
|
package/src/types/bigint.ts
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getBigInt64,
|
|
3
|
-
getBigUint64,
|
|
4
|
-
setBigInt64,
|
|
5
|
-
setBigUint64,
|
|
6
|
-
} from "@yume-chan/dataview-bigint-polyfill/esm/fallback.js";
|
|
7
|
-
|
|
8
|
-
import type {
|
|
9
|
-
AsyncExactReadable,
|
|
10
|
-
ExactReadable,
|
|
11
|
-
StructOptions,
|
|
12
|
-
StructValue,
|
|
13
|
-
} from "../basic/index.js";
|
|
14
|
-
import { StructFieldDefinition, StructFieldValue } from "../basic/index.js";
|
|
15
|
-
import { SyncPromise } from "../sync-promise.js";
|
|
16
|
-
import type { ValueOrPromise } from "../utils.js";
|
|
17
|
-
|
|
18
|
-
type DataViewBigInt64Getter = (
|
|
19
|
-
dataView: DataView,
|
|
20
|
-
byteOffset: number,
|
|
21
|
-
littleEndian: boolean | undefined,
|
|
22
|
-
) => bigint;
|
|
23
|
-
|
|
24
|
-
type DataViewBigInt64Setter = (
|
|
25
|
-
dataView: DataView,
|
|
26
|
-
byteOffset: number,
|
|
27
|
-
value: bigint,
|
|
28
|
-
littleEndian: boolean | undefined,
|
|
29
|
-
) => void;
|
|
30
|
-
|
|
31
|
-
export class BigIntFieldType {
|
|
32
|
-
readonly TTypeScriptType!: bigint;
|
|
33
|
-
|
|
34
|
-
readonly size: number;
|
|
35
|
-
|
|
36
|
-
readonly getter: DataViewBigInt64Getter;
|
|
37
|
-
|
|
38
|
-
readonly setter: DataViewBigInt64Setter;
|
|
39
|
-
|
|
40
|
-
constructor(
|
|
41
|
-
size: number,
|
|
42
|
-
getter: DataViewBigInt64Getter,
|
|
43
|
-
setter: DataViewBigInt64Setter,
|
|
44
|
-
) {
|
|
45
|
-
this.size = size;
|
|
46
|
-
this.getter = getter;
|
|
47
|
-
this.setter = setter;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
static readonly Int64 = new BigIntFieldType(8, getBigInt64, setBigInt64);
|
|
51
|
-
|
|
52
|
-
static readonly Uint64 = new BigIntFieldType(8, getBigUint64, setBigUint64);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export class BigIntFieldDefinition<
|
|
56
|
-
TType extends BigIntFieldType = BigIntFieldType,
|
|
57
|
-
TTypeScriptType = TType["TTypeScriptType"],
|
|
58
|
-
> extends StructFieldDefinition<void, TTypeScriptType> {
|
|
59
|
-
readonly type: TType;
|
|
60
|
-
|
|
61
|
-
constructor(type: TType, typescriptType?: TTypeScriptType) {
|
|
62
|
-
void typescriptType;
|
|
63
|
-
super();
|
|
64
|
-
this.type = type;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
getSize(): number {
|
|
68
|
-
return this.type.size;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
create(
|
|
72
|
-
options: Readonly<StructOptions>,
|
|
73
|
-
struct: StructValue,
|
|
74
|
-
value: TTypeScriptType,
|
|
75
|
-
): BigIntFieldValue<this> {
|
|
76
|
-
return new BigIntFieldValue(this, options, struct, value);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
override deserialize(
|
|
80
|
-
options: Readonly<StructOptions>,
|
|
81
|
-
stream: ExactReadable,
|
|
82
|
-
struct: StructValue,
|
|
83
|
-
): BigIntFieldValue<this>;
|
|
84
|
-
override deserialize(
|
|
85
|
-
options: Readonly<StructOptions>,
|
|
86
|
-
stream: AsyncExactReadable,
|
|
87
|
-
struct: StructValue,
|
|
88
|
-
): Promise<BigIntFieldValue<this>>;
|
|
89
|
-
override deserialize(
|
|
90
|
-
options: Readonly<StructOptions>,
|
|
91
|
-
stream: ExactReadable | AsyncExactReadable,
|
|
92
|
-
struct: StructValue,
|
|
93
|
-
): ValueOrPromise<BigIntFieldValue<this>> {
|
|
94
|
-
return SyncPromise.try(() => {
|
|
95
|
-
return stream.readExactly(this.getSize());
|
|
96
|
-
})
|
|
97
|
-
.then((array) => {
|
|
98
|
-
const view = new DataView(
|
|
99
|
-
array.buffer,
|
|
100
|
-
array.byteOffset,
|
|
101
|
-
array.byteLength,
|
|
102
|
-
);
|
|
103
|
-
const value = this.type.getter(view, 0, options.littleEndian);
|
|
104
|
-
return this.create(options, struct, value as any);
|
|
105
|
-
})
|
|
106
|
-
.valueOrPromise();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export class BigIntFieldValue<
|
|
111
|
-
TDefinition extends BigIntFieldDefinition<BigIntFieldType, any>,
|
|
112
|
-
> extends StructFieldValue<TDefinition> {
|
|
113
|
-
serialize(dataView: DataView, offset: number): void {
|
|
114
|
-
this.definition.type.setter(
|
|
115
|
-
dataView,
|
|
116
|
-
offset,
|
|
117
|
-
this.value,
|
|
118
|
-
this.options.littleEndian,
|
|
119
|
-
);
|
|
120
|
-
}
|
|
121
|
-
}
|