@yume-chan/struct 1.0.0 → 2.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 +11 -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 +55 -18
- package/esm/struct.js.map +1 -1
- package/esm/types.d.ts +20 -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 +7 -7
- 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 +129 -86
- package/src/types.ts +37 -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
|
@@ -19,40 +19,78 @@ export class StructEmptyError extends StructDeserializeError {
|
|
|
19
19
|
export function struct(fields, options) {
|
|
20
20
|
const fieldList = Object.entries(fields);
|
|
21
21
|
const size = fieldList.reduce((sum, [, field]) => sum + field.size, 0);
|
|
22
|
-
const littleEndian =
|
|
22
|
+
const littleEndian = options.littleEndian;
|
|
23
23
|
const extra = options.extra
|
|
24
24
|
? Object.getOwnPropertyDescriptors(options.extra)
|
|
25
25
|
: undefined;
|
|
26
26
|
return {
|
|
27
|
+
littleEndian,
|
|
28
|
+
type: "byob",
|
|
27
29
|
fields,
|
|
28
30
|
size,
|
|
29
31
|
extra: options.extra,
|
|
30
|
-
serialize(
|
|
32
|
+
serialize(source, bufferOrContext) {
|
|
33
|
+
const temp = { ...source };
|
|
31
34
|
for (const [key, field] of fieldList) {
|
|
32
|
-
if (key in
|
|
33
|
-
field.
|
|
35
|
+
if (key in temp && "init" in field) {
|
|
36
|
+
const result = field.init?.(temp[key], temp);
|
|
37
|
+
if (result !== undefined) {
|
|
38
|
+
temp[key] = result;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const sizes = new Array(fieldList.length);
|
|
43
|
+
const buffers = new Array(fieldList.length);
|
|
44
|
+
{
|
|
45
|
+
const context = { littleEndian };
|
|
46
|
+
for (const [index, [key, field]] of fieldList.entries()) {
|
|
47
|
+
if (field.type === "byob") {
|
|
48
|
+
sizes[index] = field.size;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
buffers[index] = field.serialize(temp[key], context);
|
|
52
|
+
sizes[index] = buffers[index].length;
|
|
53
|
+
}
|
|
34
54
|
}
|
|
35
55
|
}
|
|
36
|
-
const sizes = fieldList.map(([key, field]) => field.dynamicSize?.(runtimeStruct[key]) ??
|
|
37
|
-
field.size);
|
|
38
56
|
const size = sizes.reduce((sum, size) => sum + size, 0);
|
|
39
|
-
let externalBuffer
|
|
40
|
-
|
|
41
|
-
|
|
57
|
+
let externalBuffer;
|
|
58
|
+
let buffer;
|
|
59
|
+
let index;
|
|
60
|
+
if (bufferOrContext instanceof Uint8Array) {
|
|
61
|
+
if (bufferOrContext.length < size) {
|
|
42
62
|
throw new Error("Buffer too small");
|
|
43
63
|
}
|
|
44
64
|
externalBuffer = true;
|
|
65
|
+
buffer = bufferOrContext;
|
|
66
|
+
index = 0;
|
|
67
|
+
}
|
|
68
|
+
else if (typeof bufferOrContext === "object" &&
|
|
69
|
+
"buffer" in bufferOrContext) {
|
|
70
|
+
externalBuffer = true;
|
|
71
|
+
buffer = bufferOrContext.buffer;
|
|
72
|
+
index = bufferOrContext.index ?? 0;
|
|
73
|
+
if (buffer.length - index < size) {
|
|
74
|
+
throw new Error("Buffer too small");
|
|
75
|
+
}
|
|
45
76
|
}
|
|
46
77
|
else {
|
|
78
|
+
externalBuffer = false;
|
|
47
79
|
buffer = new Uint8Array(size);
|
|
80
|
+
index = 0;
|
|
48
81
|
}
|
|
49
82
|
const context = {
|
|
50
83
|
buffer,
|
|
51
|
-
index
|
|
84
|
+
index,
|
|
52
85
|
littleEndian,
|
|
53
86
|
};
|
|
54
87
|
for (const [index, [key, field]] of fieldList.entries()) {
|
|
55
|
-
|
|
88
|
+
if (buffers[index]) {
|
|
89
|
+
buffer.set(buffers[index], context.index);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
field.serialize(temp[key], context);
|
|
93
|
+
}
|
|
56
94
|
context.index += sizes[index];
|
|
57
95
|
}
|
|
58
96
|
if (externalBuffer) {
|
|
@@ -64,15 +102,14 @@ export function struct(fields, options) {
|
|
|
64
102
|
},
|
|
65
103
|
deserialize: bipedal(function* (then, reader) {
|
|
66
104
|
const startPosition = reader.position;
|
|
67
|
-
const
|
|
105
|
+
const result = {};
|
|
68
106
|
const context = {
|
|
69
|
-
|
|
70
|
-
runtimeStruct: runtimeStruct,
|
|
107
|
+
dependencies: result,
|
|
71
108
|
littleEndian: littleEndian,
|
|
72
109
|
};
|
|
73
110
|
try {
|
|
74
111
|
for (const [key, field] of fieldList) {
|
|
75
|
-
|
|
112
|
+
result[key] = yield* then(field.deserialize(reader, context));
|
|
76
113
|
}
|
|
77
114
|
}
|
|
78
115
|
catch (e) {
|
|
@@ -87,13 +124,13 @@ export function struct(fields, options) {
|
|
|
87
124
|
}
|
|
88
125
|
}
|
|
89
126
|
if (extra) {
|
|
90
|
-
Object.defineProperties(
|
|
127
|
+
Object.defineProperties(result, extra);
|
|
91
128
|
}
|
|
92
129
|
if (options.postDeserialize) {
|
|
93
|
-
return options.postDeserialize.call(
|
|
130
|
+
return options.postDeserialize.call(result, result);
|
|
94
131
|
}
|
|
95
132
|
else {
|
|
96
|
-
return
|
|
133
|
+
return result;
|
|
97
134
|
}
|
|
98
135
|
}),
|
|
99
136
|
};
|
package/esm/struct.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"struct.js","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"struct.js","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"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"}
|