@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.
Files changed (79) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +1 -1
  3. package/esm/bipedal.d.ts +2 -1
  4. package/esm/bipedal.d.ts.map +1 -1
  5. package/esm/bipedal.js +10 -3
  6. package/esm/bipedal.js.map +1 -1
  7. package/esm/buffer.d.ts +20 -11
  8. package/esm/buffer.d.ts.map +1 -1
  9. package/esm/buffer.js +137 -140
  10. package/esm/buffer.js.map +1 -1
  11. package/esm/concat.d.ts +13 -0
  12. package/esm/concat.d.ts.map +1 -0
  13. package/esm/concat.js +10 -0
  14. package/esm/concat.js.map +1 -0
  15. package/esm/extend.d.ts +6 -0
  16. package/esm/extend.d.ts.map +1 -0
  17. package/esm/extend.js +10 -0
  18. package/esm/extend.js.map +1 -0
  19. package/esm/field/factory.d.ts +13 -0
  20. package/esm/field/factory.d.ts.map +1 -0
  21. package/esm/field/factory.js +21 -0
  22. package/esm/field/factory.js.map +1 -0
  23. package/esm/field/index.d.ts +4 -0
  24. package/esm/field/index.d.ts.map +1 -0
  25. package/esm/field/index.js +4 -0
  26. package/esm/field/index.js.map +1 -0
  27. package/esm/field/serialize.d.ts +8 -0
  28. package/esm/field/serialize.d.ts.map +1 -0
  29. package/esm/field/serialize.js +33 -0
  30. package/esm/field/serialize.js.map +1 -0
  31. package/esm/field/types.d.ts +33 -0
  32. package/esm/field/types.d.ts.map +1 -0
  33. package/esm/field/types.js +2 -0
  34. package/esm/field/types.js.map +1 -0
  35. package/esm/index.d.ts +4 -1
  36. package/esm/index.d.ts.map +1 -1
  37. package/esm/index.js +4 -1
  38. package/esm/index.js.map +1 -1
  39. package/esm/number.d.ts +3 -3
  40. package/esm/number.d.ts.map +1 -1
  41. package/esm/number.js +29 -31
  42. package/esm/number.js.map +1 -1
  43. package/esm/readable.d.ts +6 -0
  44. package/esm/readable.d.ts.map +1 -1
  45. package/esm/readable.js +19 -0
  46. package/esm/readable.js.map +1 -1
  47. package/esm/string.d.ts +1 -1
  48. package/esm/string.d.ts.map +1 -1
  49. package/esm/string.js +4 -5
  50. package/esm/string.js.map +1 -1
  51. package/esm/struct.d.ts +20 -22
  52. package/esm/struct.d.ts.map +1 -1
  53. package/esm/struct.js +55 -18
  54. package/esm/struct.js.map +1 -1
  55. package/esm/types.d.ts +20 -0
  56. package/esm/types.d.ts.map +1 -0
  57. package/esm/types.js +2 -0
  58. package/esm/types.js.map +1 -0
  59. package/package.json +7 -7
  60. package/src/bipedal.ts +18 -8
  61. package/src/buffer.ts +236 -162
  62. package/src/concat.ts +78 -0
  63. package/src/extend.ts +37 -0
  64. package/src/field/factory.ts +64 -0
  65. package/src/field/index.ts +3 -0
  66. package/src/field/serialize.ts +58 -0
  67. package/src/field/types.ts +48 -0
  68. package/src/index.ts +4 -1
  69. package/src/number.ts +48 -37
  70. package/src/readable.ts +28 -0
  71. package/src/string.ts +6 -8
  72. package/src/struct.ts +129 -86
  73. package/src/types.ts +37 -0
  74. package/tsconfig.build.tsbuildinfo +1 -1
  75. package/esm/field.d.ts +0 -21
  76. package/esm/field.d.ts.map +0 -1
  77. package/esm/field.js +0 -2
  78. package/esm/field.js.map +0 -1
  79. 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,4 @@
1
+ export * from "./factory.js";
2
+ export * from "./serialize.js";
3
+ export * from "./types.js";
4
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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 "./field.js";
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
@@ -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,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,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 "./field.js";
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,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,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>;
@@ -1 +1 @@
1
- {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../src/number.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,WAAW,WAAW,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;IAC1D,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;CAChD;AAeD,eAAO,MAAM,EAAE,qBASd,CAAC;AAEF,eAAO,MAAM,EAAE,qBASd,CAAC;AAEF,eAAO,MAAM,GAAG,qBASf,CAAC;AAEF,eAAO,MAAM,GAAG,qBASf,CAAC;AAEF,eAAO,MAAM,GAAG,qBASf,CAAC;AAEF,eAAO,MAAM,GAAG,qBASf,CAAC;AAEF,eAAO,MAAM,GAAG,qBASf,CAAC;AAEF,eAAO,MAAM,GAAG,qBASf,CAAC"}
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 { bipedal } from "./bipedal.js";
2
+ import { field } from "./field/index.js";
3
3
  /* #__NO_SIDE_EFFECTS__ */
4
- function factory(size, serialize, deserialize) {
5
- const result = () => result;
6
- result.size = size;
7
- result.serialize = serialize;
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 = factory(1, (value, { buffer, index }) => {
9
+ export const u8 = number(1, (value, { buffer, index }) => {
12
10
  buffer[index] = value;
13
- }, bipedal(function* (then, { reader }) {
11
+ }, function* (then, reader) {
14
12
  const data = yield* then(reader.readExactly(1));
15
13
  return data[0];
16
- }));
17
- export const s8 = factory(1, (value, { buffer, index }) => {
14
+ });
15
+ export const s8 = number(1, (value, { buffer, index }) => {
18
16
  buffer[index] = value;
19
- }, bipedal(function* (then, { reader }) {
17
+ }, function* (then, reader) {
20
18
  const data = yield* then(reader.readExactly(1));
21
19
  return getInt8(data, 0);
22
- }));
23
- export const u16 = factory(2, (value, { buffer, index, littleEndian }) => {
20
+ });
21
+ export const u16 = number(2, (value, { buffer, index, littleEndian }) => {
24
22
  setUint16(buffer, index, value, littleEndian);
25
- }, bipedal(function* (then, { reader, littleEndian }) {
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 = factory(2, (value, { buffer, index, littleEndian }) => {
26
+ });
27
+ export const s16 = number(2, (value, { buffer, index, littleEndian }) => {
30
28
  setInt16(buffer, index, value, littleEndian);
31
- }, bipedal(function* (then, { reader, littleEndian }) {
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 = factory(4, (value, { buffer, index, littleEndian }) => {
32
+ });
33
+ export const u32 = number(4, (value, { buffer, index, littleEndian }) => {
36
34
  setUint32(buffer, index, value, littleEndian);
37
- }, bipedal(function* (then, { reader, littleEndian }) {
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 = factory(4, (value, { buffer, index, littleEndian }) => {
38
+ });
39
+ export const s32 = number(4, (value, { buffer, index, littleEndian }) => {
42
40
  setInt32(buffer, index, value, littleEndian);
43
- }, bipedal(function* (then, { reader, littleEndian }) {
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 = factory(8, (value, { buffer, index, littleEndian }) => {
44
+ });
45
+ export const u64 = number(8, (value, { buffer, index, littleEndian }) => {
48
46
  setUint64(buffer, index, value, littleEndian);
49
- }, bipedal(function* (then, { reader, littleEndian }) {
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 = factory(8, (value, { buffer, index, littleEndian }) => {
50
+ });
51
+ export const s64 = number(8, (value, { buffer, index, littleEndian }) => {
54
52
  setInt64(buffer, index, value, littleEndian);
55
- }, bipedal(function* (then, { reader, littleEndian }) {
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":"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"}
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
  /**
@@ -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
@@ -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>;
@@ -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,YAAY,CAAC;AAGxC,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;AAiBD,eAAO,MAAM,MAAM,EAAE,MAAyB,CAAC"}
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
- // Rollup doesn't support `/* #__NO_SIDE_EFFECTS__ */ export const a = () => {}
4
- /* #__NO_SIDE_EFFECTS__ */
5
- function _string(lengthOrField) {
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,+EAA+E;AAC/E,0BAA0B;AAC1B,SAAS,OAAO,CACZ,aAAuE;IAIvE,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;AAED,MAAM,CAAC,MAAM,MAAM,GAAW,OAAgB,CAAC"}
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 { MaybePromiseLike } from "@yume-chan/async";
2
- import type { Field } from "./field.js";
3
- import type { AsyncExactReadable, ExactReadable } from "./readable.js";
4
- export type FieldsType<T extends Record<string, Field<unknown, string, unknown>>> = {
5
- [K in keyof T]: T[K] extends Field<infer TK, string, unknown> ? TK : never;
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 StructInit<T extends Struct<any, any, any>> = Omit<FieldsType<T["fields"]>, {
8
- [K in keyof T["fields"]]: T["fields"][K] extends Field<unknown, infer U, unknown> ? U : never;
9
- }[keyof T["fields"]]>;
10
- export type StructValue<T extends Struct<any, any, any>> = T extends Struct<any, any, infer P> ? P : never;
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 StructLike<T> = Struct<any, any, T>;
21
- export interface Struct<T extends Record<string, Field<unknown, string, Partial<FieldsType<T>>>>, Extra extends Record<PropertyKey, unknown> | undefined = undefined, PostDeserialize = FieldsType<T> & Extra> {
22
- fields: T;
23
- size: number;
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<T extends Record<string, Field<unknown, string, Partial<FieldsType<T>>>>, Extra extends Record<PropertyKey, unknown> = {}, PostDeserialize = FieldsType<T> & Extra>(fields: T, options: {
31
- littleEndian?: boolean;
32
- extra?: Extra & ThisType<FieldsType<T>>;
33
- postDeserialize?: (this: FieldsType<T> & Extra, fields: FieldsType<T> & Extra) => PostDeserialize;
34
- }): Struct<T, Extra, PostDeserialize>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"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"}
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 = !!options.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(runtimeStruct, buffer) {
32
+ serialize(source, bufferOrContext) {
33
+ const temp = { ...source };
31
34
  for (const [key, field] of fieldList) {
32
- if (key in runtimeStruct) {
33
- field.preSerialize?.(runtimeStruct[key], runtimeStruct);
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 = false;
40
- if (buffer) {
41
- if (buffer.length < size) {
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: 0,
84
+ index,
52
85
  littleEndian,
53
86
  };
54
87
  for (const [index, [key, field]] of fieldList.entries()) {
55
- field.serialize(runtimeStruct[key], context);
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 runtimeStruct = {};
105
+ const result = {};
68
106
  const context = {
69
- reader,
70
- runtimeStruct: runtimeStruct,
107
+ dependencies: result,
71
108
  littleEndian: littleEndian,
72
109
  };
73
110
  try {
74
111
  for (const [key, field] of fieldList) {
75
- runtimeStruct[key] = yield* then(field.deserialize(context));
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(runtimeStruct, extra);
127
+ Object.defineProperties(result, extra);
91
128
  }
92
129
  if (options.postDeserialize) {
93
- return options.postDeserialize.call(runtimeStruct, runtimeStruct);
130
+ return options.postDeserialize.call(result, result);
94
131
  }
95
132
  else {
96
- return runtimeStruct;
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":"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"}
1
+ {"version":3,"file":"struct.js","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"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"}