@yume-chan/struct 1.0.0 → 2.0.1
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 +17 -0
- package/LICENSE +1 -1
- package/esm/bipedal.d.ts +2 -1
- package/esm/bipedal.d.ts.map +1 -1
- package/esm/bipedal.js +10 -3
- package/esm/bipedal.js.map +1 -1
- package/esm/buffer.d.ts +20 -11
- package/esm/buffer.d.ts.map +1 -1
- package/esm/buffer.js +137 -140
- package/esm/buffer.js.map +1 -1
- package/esm/concat.d.ts +13 -0
- package/esm/concat.d.ts.map +1 -0
- package/esm/concat.js +10 -0
- package/esm/concat.js.map +1 -0
- package/esm/extend.d.ts +6 -0
- package/esm/extend.d.ts.map +1 -0
- package/esm/extend.js +10 -0
- package/esm/extend.js.map +1 -0
- package/esm/field/factory.d.ts +13 -0
- package/esm/field/factory.d.ts.map +1 -0
- package/esm/field/factory.js +21 -0
- package/esm/field/factory.js.map +1 -0
- package/esm/field/index.d.ts +4 -0
- package/esm/field/index.d.ts.map +1 -0
- package/esm/field/index.js +4 -0
- package/esm/field/index.js.map +1 -0
- package/esm/field/serialize.d.ts +8 -0
- package/esm/field/serialize.d.ts.map +1 -0
- package/esm/field/serialize.js +33 -0
- package/esm/field/serialize.js.map +1 -0
- package/esm/field/types.d.ts +33 -0
- package/esm/field/types.d.ts.map +1 -0
- package/esm/field/types.js +2 -0
- package/esm/field/types.js.map +1 -0
- package/esm/index.d.ts +4 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +4 -1
- package/esm/index.js.map +1 -1
- package/esm/number.d.ts +3 -3
- package/esm/number.d.ts.map +1 -1
- package/esm/number.js +29 -31
- package/esm/number.js.map +1 -1
- package/esm/readable.d.ts +6 -0
- package/esm/readable.d.ts.map +1 -1
- package/esm/readable.js +19 -0
- package/esm/readable.js.map +1 -1
- package/esm/string.d.ts +1 -1
- package/esm/string.d.ts.map +1 -1
- package/esm/string.js +4 -5
- package/esm/string.js.map +1 -1
- package/esm/struct.d.ts +20 -22
- package/esm/struct.d.ts.map +1 -1
- package/esm/struct.js +64 -20
- package/esm/struct.js.map +1 -1
- package/esm/types.d.ts +18 -0
- package/esm/types.d.ts.map +1 -0
- package/esm/types.js +2 -0
- package/esm/types.js.map +1 -0
- package/package.json +6 -6
- package/src/bipedal.ts +18 -8
- package/src/buffer.ts +236 -162
- package/src/concat.ts +78 -0
- package/src/extend.ts +37 -0
- package/src/field/factory.ts +64 -0
- package/src/field/index.ts +3 -0
- package/src/field/serialize.ts +58 -0
- package/src/field/types.ts +48 -0
- package/src/index.ts +4 -1
- package/src/number.ts +48 -37
- package/src/readable.ts +28 -0
- package/src/string.ts +6 -8
- package/src/struct.ts +140 -88
- package/src/types.ts +34 -0
- package/tsconfig.build.tsbuildinfo +1 -1
- package/esm/field.d.ts +0 -21
- package/esm/field.d.ts.map +0 -1
- package/esm/field.js +0 -2
- package/esm/field.js.map +0 -1
- package/src/field.ts +0 -27
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/field/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/field/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FieldByobSerializeContext, FieldDefaultSerializeContext, FieldSerializer } from "./types.js";
|
|
2
|
+
export type DefaultFieldSerializer<T> = (source: T, context: FieldDefaultSerializeContext) => Uint8Array;
|
|
3
|
+
export declare function defaultFieldSerializer<T>(serializer: DefaultFieldSerializer<T>): FieldSerializer<T>["serialize"];
|
|
4
|
+
export type ByobFieldSerializer<T> = (source: T, context: FieldByobSerializeContext & {
|
|
5
|
+
index: number;
|
|
6
|
+
}) => void;
|
|
7
|
+
export declare function byobFieldSerializer<T>(size: number, serializer: ByobFieldSerializer<T>): FieldSerializer<T>["serialize"];
|
|
8
|
+
//# sourceMappingURL=serialize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/field/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,yBAAyB,EACzB,4BAA4B,EAC5B,eAAe,EAClB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI,CACpC,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,4BAA4B,KACpC,UAAU,CAAC;AAGhB,wBAAgB,sBAAsB,CAAC,CAAC,EACpC,UAAU,EAAE,sBAAsB,CAAC,CAAC,CAAC,GACtC,eAAe,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAajC;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CACjC,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,yBAAyB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,KACrD,IAAI,CAAC;AAGV,wBAAgB,mBAAmB,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,mBAAmB,CAAC,CAAC,CAAC,GACnC,eAAe,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAmBjC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* Adapt default field serializer to universal field serializer */
|
|
2
|
+
export function defaultFieldSerializer(serializer) {
|
|
3
|
+
return (source, context) => {
|
|
4
|
+
if ("buffer" in context) {
|
|
5
|
+
const buffer = serializer(source, context);
|
|
6
|
+
context.buffer.set(buffer, context.index);
|
|
7
|
+
return buffer.length;
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
return serializer(source, context);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/* Adapt byob field serializer to universal field serializer */
|
|
15
|
+
export function byobFieldSerializer(size, serializer) {
|
|
16
|
+
return (source, context) => {
|
|
17
|
+
if ("buffer" in context) {
|
|
18
|
+
context.index ??= 0;
|
|
19
|
+
serializer(source, context);
|
|
20
|
+
return size;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const buffer = new Uint8Array(size);
|
|
24
|
+
serializer(source, {
|
|
25
|
+
buffer,
|
|
26
|
+
index: 0,
|
|
27
|
+
littleEndian: context.littleEndian,
|
|
28
|
+
});
|
|
29
|
+
return buffer;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=serialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/field/serialize.ts"],"names":[],"mappings":"AAWA,kEAAkE;AAClE,MAAM,UAAU,sBAAsB,CAClC,UAAqC;IAErC,OAAO,CACH,MAAM,EACN,OAAiE,EAC5D,EAAE;QACP,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1C,OAAO,MAAM,CAAC,MAAe,CAAC;QAClC,CAAC;aAAM,CAAC;YACJ,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,CAAU,CAAC;QAChD,CAAC;IACL,CAAC,CAAC;AACN,CAAC;AAOD,+DAA+D;AAC/D,MAAM,UAAU,mBAAmB,CAC/B,IAAY,EACZ,UAAkC;IAElC,OAAO,CACH,MAAM,EACN,OAAiE,EAC5D,EAAE;QACP,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC;YACpB,UAAU,CAAC,MAAM,EAAE,OAAgB,CAAC,CAAC;YACrC,OAAO,IAAa,CAAC;QACzB,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YACpC,UAAU,CAAC,MAAM,EAAE;gBACf,MAAM;gBACN,KAAK,EAAE,CAAC;gBACR,YAAY,EAAE,OAAO,CAAC,YAAY;aACrC,CAAC,CAAC;YACH,OAAO,MAAe,CAAC;QAC3B,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { MaybePromiseLike } from "@yume-chan/async";
|
|
2
|
+
import type { AsyncExactReadable, ExactReadable } from "../readable.js";
|
|
3
|
+
export interface FieldDefaultSerializeContext {
|
|
4
|
+
littleEndian: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface FieldByobSerializeContext extends FieldDefaultSerializeContext {
|
|
7
|
+
buffer: Uint8Array;
|
|
8
|
+
index?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface FieldSerializer<T> {
|
|
11
|
+
type: "default" | "byob";
|
|
12
|
+
size: number;
|
|
13
|
+
serialize(source: T, context: FieldDefaultSerializeContext): Uint8Array;
|
|
14
|
+
serialize(source: T, context: FieldByobSerializeContext): number;
|
|
15
|
+
}
|
|
16
|
+
export interface Field<T, OmitInit extends string, D, Raw = T> extends FieldSerializer<Raw>, FieldDeserializer<T, D> {
|
|
17
|
+
omitInit: OmitInit | undefined;
|
|
18
|
+
init?(value: T, dependencies: D): Raw | undefined;
|
|
19
|
+
}
|
|
20
|
+
export interface FieldDeserializeContext<D> {
|
|
21
|
+
littleEndian: boolean;
|
|
22
|
+
dependencies: D;
|
|
23
|
+
}
|
|
24
|
+
export interface FieldDeserializer<T, D> {
|
|
25
|
+
deserialize(reader: ExactReadable, context: FieldDeserializeContext<D>): T;
|
|
26
|
+
deserialize(reader: AsyncExactReadable, context: FieldDeserializeContext<D>): MaybePromiseLike<T>;
|
|
27
|
+
}
|
|
28
|
+
export interface FieldOptions<T, OmitInit extends string, D, Raw = T> {
|
|
29
|
+
omitInit?: OmitInit;
|
|
30
|
+
dependencies?: D;
|
|
31
|
+
init?: (value: T, dependencies: D) => Raw | undefined;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/field/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAExE,MAAM,WAAW,4BAA4B;IACzC,YAAY,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,yBACb,SAAQ,4BAA4B;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAC9B,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IAEb,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,4BAA4B,GAAG,UAAU,CAAC;IACxE,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,yBAAyB,GAAG,MAAM,CAAC;CACpE;AAED,MAAM,WAAW,KAAK,CAAC,CAAC,EAAE,QAAQ,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CACzD,SAAQ,eAAe,CAAC,GAAG,CAAC,EACxB,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3B,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAE/B,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC;CACrD;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACtC,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,CAAC,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,EAAE,CAAC;IACnC,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3E,WAAW,CACP,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GACpC,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,EAAE,QAAQ,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;IAChE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,KAAK,GAAG,GAAG,SAAS,CAAC;CACzD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/field/types.ts"],"names":[],"mappings":""}
|
package/esm/index.d.ts
CHANGED
|
@@ -8,10 +8,13 @@ declare global {
|
|
|
8
8
|
}
|
|
9
9
|
export * from "./bipedal.js";
|
|
10
10
|
export * from "./buffer.js";
|
|
11
|
-
export * from "./
|
|
11
|
+
export * from "./concat.js";
|
|
12
|
+
export * from "./extend.js";
|
|
13
|
+
export * from "./field/index.js";
|
|
12
14
|
export * from "./number.js";
|
|
13
15
|
export * from "./readable.js";
|
|
14
16
|
export * from "./string.js";
|
|
15
17
|
export * from "./struct.js";
|
|
18
|
+
export * from "./types.js";
|
|
16
19
|
export * from "./utils.js";
|
|
17
20
|
//# sourceMappingURL=index.d.ts.map
|
package/esm/index.d.ts.map
CHANGED
|
@@ -1 +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,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,
|
|
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,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
package/esm/index.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
export * from "./bipedal.js";
|
|
2
2
|
export * from "./buffer.js";
|
|
3
|
-
export * from "./
|
|
3
|
+
export * from "./concat.js";
|
|
4
|
+
export * from "./extend.js";
|
|
5
|
+
export * from "./field/index.js";
|
|
4
6
|
export * from "./number.js";
|
|
5
7
|
export * from "./readable.js";
|
|
6
8
|
export * from "./string.js";
|
|
7
9
|
export * from "./struct.js";
|
|
10
|
+
export * from "./types.js";
|
|
8
11
|
export * from "./utils.js";
|
|
9
12
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
package/esm/number.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { Field } from "./field.js";
|
|
2
|
-
export interface NumberField<T> extends Field<T, never, never> {
|
|
3
|
-
<const U>(infer?: U): Field<U, never, never>;
|
|
1
|
+
import type { Field } from "./field/index.js";
|
|
2
|
+
export interface NumberField<T> extends Field<T, never, never, T> {
|
|
3
|
+
<const U>(infer?: U): Field<U, never, never, T>;
|
|
4
4
|
}
|
|
5
5
|
export declare const u8: NumberField<number>;
|
|
6
6
|
export declare const s8: NumberField<number>;
|
package/esm/number.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../src/number.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../src/number.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACR,KAAK,EAGR,MAAM,kBAAkB,CAAC;AAI1B,MAAM,WAAW,WAAW,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;CACnD;AAoBD,eAAO,MAAM,EAAE,EAAE,WAAW,CAAC,MAAM,CASlC,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,WAAW,CAAC,MAAM,CASlC,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,WAAW,CAAC,MAAM,CASnC,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,WAAW,CAAC,MAAM,CASnC,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,WAAW,CAAC,MAAM,CASnC,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,WAAW,CAAC,MAAM,CASnC,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,WAAW,CAAC,MAAM,CASnC,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,WAAW,CAAC,MAAM,CASnC,CAAC"}
|
package/esm/number.js
CHANGED
|
@@ -1,59 +1,57 @@
|
|
|
1
1
|
import { getInt16, getInt32, getInt64, getInt8, getUint16, getUint32, getUint64, setInt16, setInt32, setInt64, setUint16, setUint32, setUint64, } from "@yume-chan/no-data-view";
|
|
2
|
-
import {
|
|
2
|
+
import { field } from "./field/index.js";
|
|
3
3
|
/* #__NO_SIDE_EFFECTS__ */
|
|
4
|
-
function
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
result.deserialize = deserialize;
|
|
9
|
-
return result;
|
|
4
|
+
function number(size, serialize, deserialize) {
|
|
5
|
+
const fn = (() => fn);
|
|
6
|
+
Object.assign(fn, field(size, "byob", serialize, deserialize));
|
|
7
|
+
return fn;
|
|
10
8
|
}
|
|
11
|
-
export const u8 =
|
|
9
|
+
export const u8 = number(1, (value, { buffer, index }) => {
|
|
12
10
|
buffer[index] = value;
|
|
13
|
-
},
|
|
11
|
+
}, function* (then, reader) {
|
|
14
12
|
const data = yield* then(reader.readExactly(1));
|
|
15
13
|
return data[0];
|
|
16
|
-
})
|
|
17
|
-
export const s8 =
|
|
14
|
+
});
|
|
15
|
+
export const s8 = number(1, (value, { buffer, index }) => {
|
|
18
16
|
buffer[index] = value;
|
|
19
|
-
},
|
|
17
|
+
}, function* (then, reader) {
|
|
20
18
|
const data = yield* then(reader.readExactly(1));
|
|
21
19
|
return getInt8(data, 0);
|
|
22
|
-
})
|
|
23
|
-
export const u16 =
|
|
20
|
+
});
|
|
21
|
+
export const u16 = number(2, (value, { buffer, index, littleEndian }) => {
|
|
24
22
|
setUint16(buffer, index, value, littleEndian);
|
|
25
|
-
},
|
|
23
|
+
}, function* (then, reader, { littleEndian }) {
|
|
26
24
|
const data = yield* then(reader.readExactly(2));
|
|
27
25
|
return getUint16(data, 0, littleEndian);
|
|
28
|
-
})
|
|
29
|
-
export const s16 =
|
|
26
|
+
});
|
|
27
|
+
export const s16 = number(2, (value, { buffer, index, littleEndian }) => {
|
|
30
28
|
setInt16(buffer, index, value, littleEndian);
|
|
31
|
-
},
|
|
29
|
+
}, function* (then, reader, { littleEndian }) {
|
|
32
30
|
const data = yield* then(reader.readExactly(2));
|
|
33
31
|
return getInt16(data, 0, littleEndian);
|
|
34
|
-
})
|
|
35
|
-
export const u32 =
|
|
32
|
+
});
|
|
33
|
+
export const u32 = number(4, (value, { buffer, index, littleEndian }) => {
|
|
36
34
|
setUint32(buffer, index, value, littleEndian);
|
|
37
|
-
},
|
|
35
|
+
}, function* (then, reader, { littleEndian }) {
|
|
38
36
|
const data = yield* then(reader.readExactly(4));
|
|
39
37
|
return getUint32(data, 0, littleEndian);
|
|
40
|
-
})
|
|
41
|
-
export const s32 =
|
|
38
|
+
});
|
|
39
|
+
export const s32 = number(4, (value, { buffer, index, littleEndian }) => {
|
|
42
40
|
setInt32(buffer, index, value, littleEndian);
|
|
43
|
-
},
|
|
41
|
+
}, function* (then, reader, { littleEndian }) {
|
|
44
42
|
const data = yield* then(reader.readExactly(4));
|
|
45
43
|
return getInt32(data, 0, littleEndian);
|
|
46
|
-
})
|
|
47
|
-
export const u64 =
|
|
44
|
+
});
|
|
45
|
+
export const u64 = number(8, (value, { buffer, index, littleEndian }) => {
|
|
48
46
|
setUint64(buffer, index, value, littleEndian);
|
|
49
|
-
},
|
|
47
|
+
}, function* (then, reader, { littleEndian }) {
|
|
50
48
|
const data = yield* then(reader.readExactly(8));
|
|
51
49
|
return getUint64(data, 0, littleEndian);
|
|
52
|
-
})
|
|
53
|
-
export const s64 =
|
|
50
|
+
});
|
|
51
|
+
export const s64 = number(8, (value, { buffer, index, littleEndian }) => {
|
|
54
52
|
setInt64(buffer, index, value, littleEndian);
|
|
55
|
-
},
|
|
53
|
+
}, function* (then, reader, { littleEndian }) {
|
|
56
54
|
const data = yield* then(reader.readExactly(8));
|
|
57
55
|
return getInt64(data, 0, littleEndian);
|
|
58
|
-
})
|
|
56
|
+
});
|
|
59
57
|
//# sourceMappingURL=number.js.map
|
package/esm/number.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.js","sourceRoot":"","sources":["../src/number.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../src/number.ts"],"names":[],"mappings":"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"}
|
package/esm/readable.d.ts
CHANGED
|
@@ -12,6 +12,12 @@ export interface ExactReadable {
|
|
|
12
12
|
*/
|
|
13
13
|
readExactly(length: number): Uint8Array;
|
|
14
14
|
}
|
|
15
|
+
export declare class Uint8ArrayExactReadable implements ExactReadable {
|
|
16
|
+
#private;
|
|
17
|
+
get position(): number;
|
|
18
|
+
constructor(data: Uint8Array);
|
|
19
|
+
readExactly(length: number): Uint8Array;
|
|
20
|
+
}
|
|
15
21
|
export interface AsyncExactReadable {
|
|
16
22
|
readonly position: number;
|
|
17
23
|
/**
|
package/esm/readable.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable.d.ts","sourceRoot":"","sources":["../src/readable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,qBAAa,uBAAwB,SAAQ,KAAK;;CAIjD;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,gBAAgB,CAAC,UAAU,CAAC,CAAC;CAC7D"}
|
|
1
|
+
{"version":3,"file":"readable.d.ts","sourceRoot":"","sources":["../src/readable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,qBAAa,uBAAwB,SAAQ,KAAK;;CAIjD;AAED,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;CAC3C;AAED,qBAAa,uBAAwB,YAAW,aAAa;;IAIzD,IAAI,QAAQ,WAEX;gBAEW,IAAI,EAAE,UAAU;IAK5B,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;CAa1C;AAED,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;CAC7D"}
|
package/esm/readable.js
CHANGED
|
@@ -4,4 +4,23 @@ export class ExactReadableEndedError extends Error {
|
|
|
4
4
|
super("ExactReadable ended");
|
|
5
5
|
}
|
|
6
6
|
}
|
|
7
|
+
export class Uint8ArrayExactReadable {
|
|
8
|
+
#data;
|
|
9
|
+
#position;
|
|
10
|
+
get position() {
|
|
11
|
+
return this.#position;
|
|
12
|
+
}
|
|
13
|
+
constructor(data) {
|
|
14
|
+
this.#data = data;
|
|
15
|
+
this.#position = 0;
|
|
16
|
+
}
|
|
17
|
+
readExactly(length) {
|
|
18
|
+
if (this.#position + length > this.#data.length) {
|
|
19
|
+
throw new ExactReadableEndedError();
|
|
20
|
+
}
|
|
21
|
+
const result = this.#data.subarray(this.#position, this.#position + length);
|
|
22
|
+
this.#position += length;
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
7
26
|
//# sourceMappingURL=readable.js.map
|
package/esm/readable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable.js","sourceRoot":"","sources":["../src/readable.ts"],"names":[],"mappings":"AAAA,mGAAmG;AAInG,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAC9C;QACI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACjC,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"readable.js","sourceRoot":"","sources":["../src/readable.ts"],"names":[],"mappings":"AAAA,mGAAmG;AAInG,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAC9C;QACI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACjC,CAAC;CACJ;AAcD,MAAM,OAAO,uBAAuB;IAChC,KAAK,CAAa;IAClB,SAAS,CAAS;IAElB,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,YAAY,IAAgB;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,WAAW,CAAC,MAAc;QACtB,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9C,MAAM,IAAI,uBAAuB,EAAE,CAAC;QACxC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAC9B,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,GAAG,MAAM,CAC1B,CAAC;QAEF,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC;QACzB,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
|
package/esm/string.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { BufferLengthConverter } from "./buffer.js";
|
|
2
|
-
import type { Field } from "./field.js";
|
|
2
|
+
import type { Field } from "./field/index.js";
|
|
3
3
|
export interface String {
|
|
4
4
|
(length: number): Field<string, never, never> & {
|
|
5
5
|
as: <T>(infer: T) => Field<T, never, never>;
|
package/esm/string.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,WAAW,MAAM;IACnB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG;QAC5C,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KAC/C,CAAC;IAEF,CAAC,CAAC,SAAS,MAAM,EACb,WAAW,EAAE,CAAC,GACf,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG;QACrC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;KACvD,CAAC;IAEF,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,EACvB,MAAM,EAAE,qBAAqB,CAAC,CAAC,EAAE,EAAE,CAAC,GACrC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG;QACjC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;KACnD,CAAC;IAEF,CAAC,SAAS,SAAS,MAAM,EAAE,EAAE,EACzB,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,GACrC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;CACnC;AAID,eAAO,MAAM,MAAM,EAAE,MAWV,CAAC"}
|
package/esm/string.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { buffer } from "./buffer.js";
|
|
2
2
|
import { decodeUtf8, encodeUtf8 } from "./utils.js";
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
// Prettier will move the annotation and make it invalid
|
|
4
|
+
// prettier-ignore
|
|
5
|
+
export const string = ( /* #__NO_SIDE_EFFECTS__ */(lengthOrField) => {
|
|
6
6
|
const field = buffer(lengthOrField, {
|
|
7
7
|
convert: decodeUtf8,
|
|
8
8
|
back: encodeUtf8,
|
|
9
9
|
});
|
|
10
10
|
field.as = () => field;
|
|
11
11
|
return field;
|
|
12
|
-
}
|
|
13
|
-
export const string = _string;
|
|
12
|
+
});
|
|
14
13
|
//# sourceMappingURL=string.js.map
|
package/esm/string.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string.js","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAwBpD
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAwBpD,wDAAwD;AACxD,kBAAkB;AAClB,MAAM,CAAC,MAAM,MAAM,GAAW,EAAC,0BAA2B,CACtD,aAAuE,EAGzE,EAAE;IACA,MAAM,KAAK,GAAG,MAAM,CAAC,aAAsB,EAAE;QACzC,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,UAAU;KACnB,CAAC,CAAC;IACF,KAAkC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;IACrD,OAAO,KAAc,CAAC;AAC1B,CAAC,CAAU,CAAC"}
|
package/esm/struct.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
export type
|
|
5
|
-
|
|
1
|
+
import type { Field, FieldDeserializer } from "./field/index.js";
|
|
2
|
+
import type { StructDeserializer, StructSerializer } from "./types.js";
|
|
3
|
+
export type StructField = Field<unknown, string, unknown, unknown> | (StructSerializer<unknown> & StructDeserializer<unknown>);
|
|
4
|
+
export type StructFields = Record<string, StructField>;
|
|
5
|
+
export type FieldsValue<T extends StructFields> = {
|
|
6
|
+
[K in keyof T]: T[K] extends FieldDeserializer<infer U, unknown> ? U : never;
|
|
6
7
|
};
|
|
7
|
-
export type
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
export type FieldOmitInit<T extends StructField> = T extends Field<unknown, infer U, unknown, unknown> ? string extends U ? never : U : never;
|
|
9
|
+
export type FieldsOmitInits<T extends StructFields> = {
|
|
10
|
+
[K in keyof T]: FieldOmitInit<T[K]>;
|
|
11
|
+
}[keyof T];
|
|
12
|
+
export type FieldsInit<T extends StructFields> = Omit<FieldsValue<T>, FieldsOmitInits<T>>;
|
|
11
13
|
export declare class StructDeserializeError extends Error {
|
|
12
14
|
constructor(message: string);
|
|
13
15
|
}
|
|
@@ -17,19 +19,15 @@ export declare class StructNotEnoughDataError extends StructDeserializeError {
|
|
|
17
19
|
export declare class StructEmptyError extends StructDeserializeError {
|
|
18
20
|
constructor();
|
|
19
21
|
}
|
|
20
|
-
export type
|
|
21
|
-
export interface Struct<
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
export type ExtraToIntersection<Extra extends Record<PropertyKey, unknown> | undefined> = Extra extends undefined ? unknown : Extra;
|
|
23
|
+
export interface Struct<Fields extends StructFields, Extra extends Record<PropertyKey, unknown> | undefined = undefined, PostDeserialize = FieldsValue<Fields> & Extra> extends StructSerializer<FieldsInit<Fields>>, StructDeserializer<PostDeserialize> {
|
|
24
|
+
littleEndian: boolean;
|
|
25
|
+
fields: Fields;
|
|
24
26
|
extra: Extra;
|
|
25
|
-
serialize(runtimeStruct: StructInit<this>): Uint8Array;
|
|
26
|
-
serialize(runtimeStruct: StructInit<this>, buffer: Uint8Array): number;
|
|
27
|
-
deserialize(reader: ExactReadable): PostDeserialize;
|
|
28
|
-
deserialize(reader: AsyncExactReadable): MaybePromiseLike<PostDeserialize>;
|
|
29
27
|
}
|
|
30
|
-
export declare function struct<
|
|
31
|
-
littleEndian
|
|
32
|
-
extra?: Extra & ThisType<
|
|
33
|
-
postDeserialize?: (this:
|
|
34
|
-
}): Struct<
|
|
28
|
+
export declare function struct<Fields extends Record<string, Field<unknown, string, Partial<FieldsValue<Fields>>, unknown> | (StructSerializer<unknown> & StructDeserializer<unknown>)>, Extra extends Record<PropertyKey, unknown> | undefined = undefined, PostDeserialize = FieldsValue<Fields> & ExtraToIntersection<Extra>>(fields: Fields, options: {
|
|
29
|
+
littleEndian: boolean;
|
|
30
|
+
extra?: (Extra & ThisType<FieldsValue<Fields>>) | undefined;
|
|
31
|
+
postDeserialize?: ((this: FieldsValue<Fields> & ExtraToIntersection<Extra>, value: FieldsValue<Fields> & ExtraToIntersection<Extra>) => PostDeserialize) | undefined;
|
|
32
|
+
}): Struct<Fields, Extra, PostDeserialize>;
|
|
35
33
|
//# sourceMappingURL=struct.d.ts.map
|
package/esm/struct.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"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"}
|
package/esm/struct.js
CHANGED
|
@@ -18,41 +18,86 @@ export class StructEmptyError extends StructDeserializeError {
|
|
|
18
18
|
/* #__NO_SIDE_EFFECTS__ */
|
|
19
19
|
export function struct(fields, options) {
|
|
20
20
|
const fieldList = Object.entries(fields);
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
let size = 0;
|
|
22
|
+
let byob = true;
|
|
23
|
+
for (const [, field] of fieldList) {
|
|
24
|
+
size += field.size;
|
|
25
|
+
if (byob && field.type !== "byob") {
|
|
26
|
+
byob = false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const littleEndian = options.littleEndian;
|
|
23
30
|
const extra = options.extra
|
|
24
31
|
? Object.getOwnPropertyDescriptors(options.extra)
|
|
25
32
|
: undefined;
|
|
26
33
|
return {
|
|
34
|
+
littleEndian,
|
|
27
35
|
fields,
|
|
28
|
-
size,
|
|
29
36
|
extra: options.extra,
|
|
30
|
-
|
|
37
|
+
type: byob ? "byob" : "default",
|
|
38
|
+
size,
|
|
39
|
+
serialize(source, bufferOrContext) {
|
|
40
|
+
const temp = { ...source };
|
|
31
41
|
for (const [key, field] of fieldList) {
|
|
32
|
-
if (key in
|
|
33
|
-
field.
|
|
42
|
+
if (key in temp && "init" in field) {
|
|
43
|
+
const result = field.init?.(temp[key], temp);
|
|
44
|
+
if (result !== undefined) {
|
|
45
|
+
temp[key] = result;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const sizes = new Array(fieldList.length);
|
|
50
|
+
const buffers = new Array(fieldList.length);
|
|
51
|
+
{
|
|
52
|
+
const context = { littleEndian };
|
|
53
|
+
for (const [index, [key, field]] of fieldList.entries()) {
|
|
54
|
+
if (field.type === "byob") {
|
|
55
|
+
sizes[index] = field.size;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
buffers[index] = field.serialize(temp[key], context);
|
|
59
|
+
sizes[index] = buffers[index].length;
|
|
60
|
+
}
|
|
34
61
|
}
|
|
35
62
|
}
|
|
36
|
-
const sizes = fieldList.map(([key, field]) => field.dynamicSize?.(runtimeStruct[key]) ??
|
|
37
|
-
field.size);
|
|
38
63
|
const size = sizes.reduce((sum, size) => sum + size, 0);
|
|
39
|
-
let externalBuffer
|
|
40
|
-
|
|
41
|
-
|
|
64
|
+
let externalBuffer;
|
|
65
|
+
let buffer;
|
|
66
|
+
let index;
|
|
67
|
+
if (bufferOrContext instanceof Uint8Array) {
|
|
68
|
+
if (bufferOrContext.length < size) {
|
|
42
69
|
throw new Error("Buffer too small");
|
|
43
70
|
}
|
|
44
71
|
externalBuffer = true;
|
|
72
|
+
buffer = bufferOrContext;
|
|
73
|
+
index = 0;
|
|
74
|
+
}
|
|
75
|
+
else if (typeof bufferOrContext === "object" &&
|
|
76
|
+
"buffer" in bufferOrContext) {
|
|
77
|
+
externalBuffer = true;
|
|
78
|
+
buffer = bufferOrContext.buffer;
|
|
79
|
+
index = bufferOrContext.index ?? 0;
|
|
80
|
+
if (buffer.length - index < size) {
|
|
81
|
+
throw new Error("Buffer too small");
|
|
82
|
+
}
|
|
45
83
|
}
|
|
46
84
|
else {
|
|
85
|
+
externalBuffer = false;
|
|
47
86
|
buffer = new Uint8Array(size);
|
|
87
|
+
index = 0;
|
|
48
88
|
}
|
|
49
89
|
const context = {
|
|
50
90
|
buffer,
|
|
51
|
-
index
|
|
91
|
+
index,
|
|
52
92
|
littleEndian,
|
|
53
93
|
};
|
|
54
94
|
for (const [index, [key, field]] of fieldList.entries()) {
|
|
55
|
-
|
|
95
|
+
if (buffers[index]) {
|
|
96
|
+
buffer.set(buffers[index], context.index);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
field.serialize(temp[key], context);
|
|
100
|
+
}
|
|
56
101
|
context.index += sizes[index];
|
|
57
102
|
}
|
|
58
103
|
if (externalBuffer) {
|
|
@@ -64,15 +109,14 @@ export function struct(fields, options) {
|
|
|
64
109
|
},
|
|
65
110
|
deserialize: bipedal(function* (then, reader) {
|
|
66
111
|
const startPosition = reader.position;
|
|
67
|
-
const
|
|
112
|
+
const result = {};
|
|
68
113
|
const context = {
|
|
69
|
-
|
|
70
|
-
runtimeStruct: runtimeStruct,
|
|
114
|
+
dependencies: result,
|
|
71
115
|
littleEndian: littleEndian,
|
|
72
116
|
};
|
|
73
117
|
try {
|
|
74
118
|
for (const [key, field] of fieldList) {
|
|
75
|
-
|
|
119
|
+
result[key] = yield* then(field.deserialize(reader, context));
|
|
76
120
|
}
|
|
77
121
|
}
|
|
78
122
|
catch (e) {
|
|
@@ -87,13 +131,13 @@ export function struct(fields, options) {
|
|
|
87
131
|
}
|
|
88
132
|
}
|
|
89
133
|
if (extra) {
|
|
90
|
-
Object.defineProperties(
|
|
134
|
+
Object.defineProperties(result, extra);
|
|
91
135
|
}
|
|
92
136
|
if (options.postDeserialize) {
|
|
93
|
-
return options.postDeserialize.call(
|
|
137
|
+
return options.postDeserialize.call(result, result);
|
|
94
138
|
}
|
|
95
139
|
else {
|
|
96
|
-
return
|
|
140
|
+
return result;
|
|
97
141
|
}
|
|
98
142
|
}),
|
|
99
143
|
};
|