@yume-chan/struct 0.0.22 → 0.0.24
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 +18 -0
- package/CHANGELOG.md +13 -1
- package/LICENSE +1 -1
- package/esm/basic/field-value.d.ts +2 -2
- package/esm/basic/field-value.d.ts.map +1 -1
- package/esm/basic/field-value.js.map +1 -1
- package/esm/basic/struct-value.d.ts +6 -2
- package/esm/basic/struct-value.d.ts.map +1 -1
- package/esm/basic/struct-value.js +5 -0
- package/esm/basic/struct-value.js.map +1 -1
- package/esm/struct.d.ts +27 -14
- package/esm/struct.d.ts.map +1 -1
- package/esm/struct.js +31 -18
- package/esm/struct.js.map +1 -1
- package/esm/sync-promise.d.ts +2 -2
- package/esm/sync-promise.d.ts.map +1 -1
- package/esm/sync-promise.js.map +1 -1
- package/esm/types/bigint.d.ts +13 -14
- package/esm/types/bigint.d.ts.map +1 -1
- package/esm/types/bigint.js +16 -17
- package/esm/types/bigint.js.map +1 -1
- package/esm/types/buffer/base.d.ts +31 -27
- package/esm/types/buffer/base.d.ts.map +1 -1
- package/esm/types/buffer/base.js +25 -26
- package/esm/types/buffer/base.js.map +1 -1
- package/esm/types/buffer/fixed-length.d.ts +2 -2
- 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 +10 -9
- package/esm/types/buffer/variable-length.d.ts.map +1 -1
- package/esm/types/buffer/variable-length.js +30 -19
- package/esm/types/buffer/variable-length.js.map +1 -1
- package/esm/types/number.d.ts +13 -13
- package/esm/types/number.d.ts.map +1 -1
- package/esm/types/number.js +22 -34
- package/esm/types/number.js.map +1 -1
- package/esm/utils.d.ts.map +1 -1
- package/esm/utils.js +6 -4
- package/esm/utils.js.map +1 -1
- package/package.json +9 -11
- package/src/basic/field-value.ts +7 -7
- package/src/basic/struct-value.ts +21 -3
- package/src/struct.ts +106 -65
- package/src/sync-promise.ts +9 -9
- package/src/types/bigint.ts +40 -37
- package/src/types/buffer/base.ts +48 -47
- package/src/types/buffer/fixed-length.ts +9 -4
- package/src/types/buffer/variable-length.ts +55 -31
- package/src/types/number.ts +32 -39
- package/src/utils.ts +6 -4
- package/tsconfig.build.tsbuildinfo +1 -1
package/esm/types/number.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { getInt16, getInt32, getInt8, getUint16, getUint32, } from "@yume-chan/no-data-view";
|
|
1
2
|
import { StructFieldDefinition, StructFieldValue } from "../basic/index.js";
|
|
2
3
|
import { SyncPromise } from "../sync-promise.js";
|
|
3
|
-
export var
|
|
4
|
-
(function (
|
|
5
|
-
|
|
4
|
+
export var NumberFieldVariant;
|
|
5
|
+
(function (NumberFieldVariant) {
|
|
6
|
+
NumberFieldVariant.Uint8 = {
|
|
6
7
|
signed: false,
|
|
7
8
|
size: 1,
|
|
8
9
|
deserialize(array) {
|
|
@@ -12,82 +13,69 @@ export var NumberFieldType;
|
|
|
12
13
|
dataView.setUint8(offset, value);
|
|
13
14
|
},
|
|
14
15
|
};
|
|
15
|
-
|
|
16
|
+
NumberFieldVariant.Int8 = {
|
|
16
17
|
signed: true,
|
|
17
18
|
size: 1,
|
|
18
19
|
deserialize(array) {
|
|
19
|
-
|
|
20
|
-
return (value << 24) >> 24;
|
|
20
|
+
return getInt8(array, 0);
|
|
21
21
|
},
|
|
22
22
|
serialize(dataView, offset, value) {
|
|
23
23
|
dataView.setInt8(offset, value);
|
|
24
24
|
},
|
|
25
25
|
};
|
|
26
|
-
|
|
26
|
+
NumberFieldVariant.Uint16 = {
|
|
27
27
|
signed: false,
|
|
28
28
|
size: 2,
|
|
29
29
|
deserialize(array, littleEndian) {
|
|
30
30
|
// PERF: Creating many `DataView`s over small buffers is 90% slower
|
|
31
31
|
// than this. Even if the `DataView` is cached, `DataView#getUint16`
|
|
32
32
|
// is still 1% slower than this.
|
|
33
|
-
|
|
34
|
-
const b = (array[0] << 8) | array[1];
|
|
35
|
-
return littleEndian ? a : b;
|
|
33
|
+
return getUint16(array, 0, littleEndian);
|
|
36
34
|
},
|
|
37
35
|
serialize(dataView, offset, value, littleEndian) {
|
|
38
36
|
dataView.setUint16(offset, value, littleEndian);
|
|
39
37
|
},
|
|
40
38
|
};
|
|
41
|
-
|
|
39
|
+
NumberFieldVariant.Int16 = {
|
|
42
40
|
signed: true,
|
|
43
41
|
size: 2,
|
|
44
42
|
deserialize(array, littleEndian) {
|
|
45
|
-
|
|
46
|
-
return (value << 16) >> 16;
|
|
43
|
+
return getInt16(array, 0, littleEndian);
|
|
47
44
|
},
|
|
48
45
|
serialize(dataView, offset, value, littleEndian) {
|
|
49
46
|
dataView.setInt16(offset, value, littleEndian);
|
|
50
47
|
},
|
|
51
48
|
};
|
|
52
|
-
|
|
49
|
+
NumberFieldVariant.Uint32 = {
|
|
53
50
|
signed: false,
|
|
54
51
|
size: 4,
|
|
55
52
|
deserialize(array, littleEndian) {
|
|
56
|
-
|
|
57
|
-
return value >>> 0;
|
|
53
|
+
return getUint32(array, 0, littleEndian);
|
|
58
54
|
},
|
|
59
55
|
serialize(dataView, offset, value, littleEndian) {
|
|
60
56
|
dataView.setUint32(offset, value, littleEndian);
|
|
61
57
|
},
|
|
62
58
|
};
|
|
63
|
-
|
|
59
|
+
NumberFieldVariant.Int32 = {
|
|
64
60
|
signed: true,
|
|
65
61
|
size: 4,
|
|
66
62
|
deserialize(array, littleEndian) {
|
|
67
|
-
|
|
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;
|
|
63
|
+
return getInt32(array, 0, littleEndian);
|
|
76
64
|
},
|
|
77
65
|
serialize(dataView, offset, value, littleEndian) {
|
|
78
66
|
dataView.setInt32(offset, value, littleEndian);
|
|
79
67
|
},
|
|
80
68
|
};
|
|
81
|
-
})(
|
|
69
|
+
})(NumberFieldVariant || (NumberFieldVariant = {}));
|
|
82
70
|
export class NumberFieldDefinition extends StructFieldDefinition {
|
|
83
|
-
|
|
84
|
-
constructor(
|
|
71
|
+
variant;
|
|
72
|
+
constructor(variant, typescriptType) {
|
|
85
73
|
void typescriptType;
|
|
86
74
|
super();
|
|
87
|
-
this.
|
|
75
|
+
this.variant = variant;
|
|
88
76
|
}
|
|
89
77
|
getSize() {
|
|
90
|
-
return this.
|
|
78
|
+
return this.variant.size;
|
|
91
79
|
}
|
|
92
80
|
create(options, struct, value) {
|
|
93
81
|
return new NumberFieldValue(this, options, struct, value);
|
|
@@ -97,15 +85,15 @@ export class NumberFieldDefinition extends StructFieldDefinition {
|
|
|
97
85
|
return stream.readExactly(this.getSize());
|
|
98
86
|
})
|
|
99
87
|
.then((array) => {
|
|
100
|
-
const value = this.
|
|
88
|
+
const value = this.variant.deserialize(array, options.littleEndian);
|
|
101
89
|
return this.create(options, struct, value);
|
|
102
90
|
})
|
|
103
91
|
.valueOrPromise();
|
|
104
92
|
}
|
|
105
93
|
}
|
|
106
94
|
export class NumberFieldValue extends StructFieldValue {
|
|
107
|
-
serialize(dataView, offset) {
|
|
108
|
-
this.definition.
|
|
95
|
+
serialize(dataView, array, offset) {
|
|
96
|
+
this.definition.variant.serialize(dataView, offset, this.value, this.options.littleEndian);
|
|
109
97
|
}
|
|
110
98
|
}
|
|
111
99
|
//# sourceMappingURL=number.js.map
|
package/esm/types/number.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/types/number.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/types/number.ts"],"names":[],"mappings":"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"}
|
package/esm/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,MAAM,EAAE,IAAI,SAAS,MAAM,IAAI,QAAQ,CACvE,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,GAAG,IAAI,CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,IAAI,CAC3B,CAAC,EACD;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;CAAE,CAAC,MAAM,CAAC,CAAC,CAClE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,MAAM,IAAI;KAC/B,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG,IAAI,GAAG,KAAK;CAC3D,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAEnD;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,KAAK,CAAC,CAElC;AAgCD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAEpD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,MAAM,EAAE,IAAI,SAAS,MAAM,IAAI,QAAQ,CACvE,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,GAAG,IAAI,CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,IAAI,CAC3B,CAAC,EACD;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;CAAE,CAAC,MAAM,CAAC,CAAC,CAClE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,MAAM,IAAI;KAC/B,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG,IAAI,GAAG,KAAK;CAC3D,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAEnD;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,KAAK,CAAC,CAElC;AAgCD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAEpD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,GAAG,MAAM,CAIxE"}
|
package/esm/utils.js
CHANGED
|
@@ -5,12 +5,14 @@ export function placeholder() {
|
|
|
5
5
|
return undefined;
|
|
6
6
|
}
|
|
7
7
|
const { TextEncoder, TextDecoder } = globalThis;
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const SharedEncoder = new TextEncoder();
|
|
9
|
+
const SharedDecoder = new TextDecoder();
|
|
10
10
|
export function encodeUtf8(input) {
|
|
11
|
-
return
|
|
11
|
+
return SharedEncoder.encode(input);
|
|
12
12
|
}
|
|
13
13
|
export function decodeUtf8(buffer) {
|
|
14
|
-
|
|
14
|
+
// `TextDecoder` has internal states in stream mode,
|
|
15
|
+
// but this method is not for stream mode, so the instance can be reused
|
|
16
|
+
return SharedDecoder.decode(buffer);
|
|
15
17
|
}
|
|
16
18
|
//# sourceMappingURL=utils.js.map
|
package/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAgDA;;GAEG;AACH,MAAM,UAAU,WAAW;IACvB,OAAO,SAAyB,CAAC;AACrC,CAAC;AA2BD,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,UAAwC,CAAC;AAE9E,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAgDA;;GAEG;AACH,MAAM,UAAU,WAAW;IACvB,OAAO,SAAyB,CAAC;AACrC,CAAC;AA2BD,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,UAAwC,CAAC;AAE9E,MAAM,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;AACxC,MAAM,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;AAExC,MAAM,UAAU,UAAU,CAAC,KAAa;IACpC,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAqC;IAC5D,oDAAoD;IACpD,wEAAwE;IACxE,OAAO,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yume-chan/struct",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.24",
|
|
4
4
|
"description": "C-style structure serializer and deserializer.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"structure",
|
|
@@ -27,24 +27,22 @@
|
|
|
27
27
|
"main": "esm/index.js",
|
|
28
28
|
"types": "esm/index.d.ts",
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@yume-chan/
|
|
31
|
-
"tslib": "^2.6.2"
|
|
30
|
+
"@yume-chan/no-data-view": "^0.0.24"
|
|
32
31
|
},
|
|
33
32
|
"devDependencies": {
|
|
34
|
-
"@jest/globals": "^
|
|
33
|
+
"@jest/globals": "^30.0.0-alpha.4",
|
|
35
34
|
"@yume-chan/eslint-config": "^1.0.0",
|
|
36
35
|
"@yume-chan/tsconfig": "^1.0.0",
|
|
37
36
|
"cross-env": "^7.0.3",
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"typescript": "^5.3.2"
|
|
37
|
+
"jest": "^30.0.0-alpha.4",
|
|
38
|
+
"prettier": "^3.3.2",
|
|
39
|
+
"ts-jest": "^29.1.4",
|
|
40
|
+
"typescript": "^5.4.5"
|
|
43
41
|
},
|
|
44
42
|
"scripts": {
|
|
45
43
|
"build": "tsc -b tsconfig.build.json",
|
|
46
44
|
"build:watch": "tsc -b tsconfig.build.json",
|
|
47
|
-
"test": "cross-env NODE_OPTIONS
|
|
48
|
-
"lint": "eslint
|
|
45
|
+
"test": "cross-env NODE_OPTIONS=\"--experimental-vm-modules --no-warnings\" TS_JEST_DISABLE_VER_CHECKER=true jest --coverage",
|
|
46
|
+
"lint": "run-eslint && prettier src/**/*.ts --write --tab-width 4"
|
|
49
47
|
}
|
|
50
48
|
}
|
package/src/basic/field-value.ts
CHANGED
|
@@ -9,11 +9,7 @@ import type { StructValue } from "./struct-value.js";
|
|
|
9
9
|
* helpful for the serialization process.
|
|
10
10
|
*/
|
|
11
11
|
export abstract class StructFieldValue<
|
|
12
|
-
TDefinition extends StructFieldDefinition<
|
|
13
|
-
any,
|
|
14
|
-
any,
|
|
15
|
-
any
|
|
16
|
-
> = StructFieldDefinition<any, any, any>,
|
|
12
|
+
TDefinition extends StructFieldDefinition<unknown, unknown, PropertyKey>,
|
|
17
13
|
> {
|
|
18
14
|
/** Gets the definition associated with this runtime value */
|
|
19
15
|
readonly definition: TDefinition;
|
|
@@ -58,7 +54,7 @@ export abstract class StructFieldValue<
|
|
|
58
54
|
* When implemented in derived classes, reads current field's value.
|
|
59
55
|
*/
|
|
60
56
|
get(): TDefinition["TValue"] {
|
|
61
|
-
return this.value;
|
|
57
|
+
return this.value as never;
|
|
62
58
|
}
|
|
63
59
|
|
|
64
60
|
/**
|
|
@@ -71,5 +67,9 @@ export abstract class StructFieldValue<
|
|
|
71
67
|
/**
|
|
72
68
|
* When implemented in derived classes, serializes this field into `dataView` at `offset`
|
|
73
69
|
*/
|
|
74
|
-
abstract serialize(
|
|
70
|
+
abstract serialize(
|
|
71
|
+
dataView: DataView,
|
|
72
|
+
array: Uint8Array,
|
|
73
|
+
offset: number,
|
|
74
|
+
): void;
|
|
75
75
|
}
|
|
@@ -1,14 +1,25 @@
|
|
|
1
|
+
import type { StructFieldDefinition } from "./definition.js";
|
|
1
2
|
import type { StructFieldValue } from "./field-value.js";
|
|
2
3
|
|
|
3
4
|
export const STRUCT_VALUE_SYMBOL = Symbol("struct-value");
|
|
4
5
|
|
|
6
|
+
export function isStructValueInit(
|
|
7
|
+
value: unknown,
|
|
8
|
+
): value is { [STRUCT_VALUE_SYMBOL]: StructValue } {
|
|
9
|
+
return (
|
|
10
|
+
typeof value === "object" &&
|
|
11
|
+
value !== null &&
|
|
12
|
+
STRUCT_VALUE_SYMBOL in value
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
|
|
5
16
|
/**
|
|
6
17
|
* A struct value is a map between keys in a struct and their field values.
|
|
7
18
|
*/
|
|
8
19
|
export class StructValue {
|
|
9
20
|
/** @internal */ readonly fieldValues: Record<
|
|
10
21
|
PropertyKey,
|
|
11
|
-
StructFieldValue
|
|
22
|
+
StructFieldValue<StructFieldDefinition<unknown, unknown, PropertyKey>>
|
|
12
23
|
> = {};
|
|
13
24
|
|
|
14
25
|
/**
|
|
@@ -35,7 +46,12 @@ export class StructValue {
|
|
|
35
46
|
* @param name The field name
|
|
36
47
|
* @param fieldValue The associated `StructFieldValue`
|
|
37
48
|
*/
|
|
38
|
-
set(
|
|
49
|
+
set(
|
|
50
|
+
name: PropertyKey,
|
|
51
|
+
fieldValue: StructFieldValue<
|
|
52
|
+
StructFieldDefinition<unknown, unknown, PropertyKey>
|
|
53
|
+
>,
|
|
54
|
+
): void {
|
|
39
55
|
this.fieldValues[name] = fieldValue;
|
|
40
56
|
|
|
41
57
|
// PERF: `Object.defineProperty` is slow
|
|
@@ -61,7 +77,9 @@ export class StructValue {
|
|
|
61
77
|
*
|
|
62
78
|
* @param name The field name
|
|
63
79
|
*/
|
|
64
|
-
get(
|
|
80
|
+
get(
|
|
81
|
+
name: PropertyKey,
|
|
82
|
+
): StructFieldValue<StructFieldDefinition<unknown, unknown, PropertyKey>> {
|
|
65
83
|
return this.fieldValues[name]!;
|
|
66
84
|
}
|
|
67
85
|
}
|