@yume-chan/struct 0.0.22 → 0.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.json +18 -0
  2. package/CHANGELOG.md +13 -1
  3. package/LICENSE +1 -1
  4. package/esm/basic/field-value.d.ts +2 -2
  5. package/esm/basic/field-value.d.ts.map +1 -1
  6. package/esm/basic/field-value.js.map +1 -1
  7. package/esm/basic/struct-value.d.ts +6 -2
  8. package/esm/basic/struct-value.d.ts.map +1 -1
  9. package/esm/basic/struct-value.js +5 -0
  10. package/esm/basic/struct-value.js.map +1 -1
  11. package/esm/struct.d.ts +27 -14
  12. package/esm/struct.d.ts.map +1 -1
  13. package/esm/struct.js +31 -18
  14. package/esm/struct.js.map +1 -1
  15. package/esm/sync-promise.d.ts +2 -2
  16. package/esm/sync-promise.d.ts.map +1 -1
  17. package/esm/sync-promise.js.map +1 -1
  18. package/esm/types/bigint.d.ts +13 -14
  19. package/esm/types/bigint.d.ts.map +1 -1
  20. package/esm/types/bigint.js +16 -17
  21. package/esm/types/bigint.js.map +1 -1
  22. package/esm/types/buffer/base.d.ts +31 -27
  23. package/esm/types/buffer/base.d.ts.map +1 -1
  24. package/esm/types/buffer/base.js +25 -26
  25. package/esm/types/buffer/base.js.map +1 -1
  26. package/esm/types/buffer/fixed-length.d.ts +2 -2
  27. package/esm/types/buffer/fixed-length.d.ts.map +1 -1
  28. package/esm/types/buffer/fixed-length.js.map +1 -1
  29. package/esm/types/buffer/variable-length.d.ts +10 -9
  30. package/esm/types/buffer/variable-length.d.ts.map +1 -1
  31. package/esm/types/buffer/variable-length.js +30 -19
  32. package/esm/types/buffer/variable-length.js.map +1 -1
  33. package/esm/types/number.d.ts +13 -13
  34. package/esm/types/number.d.ts.map +1 -1
  35. package/esm/types/number.js +22 -34
  36. package/esm/types/number.js.map +1 -1
  37. package/esm/utils.d.ts.map +1 -1
  38. package/esm/utils.js +6 -4
  39. package/esm/utils.js.map +1 -1
  40. package/package.json +9 -11
  41. package/src/basic/field-value.ts +7 -7
  42. package/src/basic/struct-value.ts +21 -3
  43. package/src/struct.ts +106 -65
  44. package/src/sync-promise.ts +9 -9
  45. package/src/types/bigint.ts +40 -37
  46. package/src/types/buffer/base.ts +48 -47
  47. package/src/types/buffer/fixed-length.ts +9 -4
  48. package/src/types/buffer/variable-length.ts +55 -31
  49. package/src/types/number.ts +32 -39
  50. package/src/utils.ts +6 -4
  51. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"bigint.js","sourceRoot":"","sources":["../../src/types/bigint.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,GACf,MAAM,qDAAqD,CAAC;AAQ7D,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAgBjD,MAAM,OAAO,eAAe;IACf,eAAe,CAAU;IAEzB,IAAI,CAAS;IAEb,MAAM,CAAyB;IAE/B,MAAM,CAAyB;IAExC,YACI,IAAY,EACZ,MAA8B,EAC9B,MAA8B;QAE9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,MAAM,CAAU,KAAK,GAAG,IAAI,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAEzE,MAAM,CAAU,MAAM,GAAG,IAAI,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;;AAGhF,MAAM,OAAO,qBAGX,SAAQ,qBAA4C;IACzC,IAAI,CAAQ;IAErB,YAAY,IAAW,EAAE,cAAgC;QACrD,KAAK,cAAc,CAAC;QACpB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,OAAO;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,MAAM,CACF,OAAgC,EAChC,MAAmB,EACnB,KAAsB;QAEtB,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAYQ,WAAW,CAChB,OAAgC,EAChC,MAA0C,EAC1C,MAAmB;QAEnB,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE;YACxB,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC;aACG,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,MAAM,IAAI,GAAG,IAAI,QAAQ,CACrB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,UAAU,CACnB,CAAC;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAY,CAAC,CAAC;QACtD,CAAC,CAAC;aACD,cAAc,EAAE,CAAC;IAC1B,CAAC;CACJ;AAED,MAAM,OAAO,gBAEX,SAAQ,gBAA6B;IACnC,SAAS,CAAC,QAAkB,EAAE,MAAc;QACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CACvB,QAAQ,EACR,MAAM,EACN,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,YAAY,CAC5B,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"bigint.js","sourceRoot":"","sources":["../../src/types/bigint.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,SAAS,GACZ,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAgBjD,MAAM,OAAO,kBAAkB;IAClB,eAAe,CAAU;IAEzB,IAAI,CAAS;IAEb,WAAW,CAAqB;IAEhC,SAAS,CAAmB;IAErC,YACI,IAAY,EACZ,WAA+B,EAC/B,SAA2B;QAE3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,MAAM,CAAU,KAAK,GAAG,IAAI,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEtE,MAAM,CAAU,MAAM,GAAG,IAAI,kBAAkB,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;;AAG7E,MAAM,OAAO,qBAGX,SAAQ,qBAA4C;IACzC,OAAO,CAAW;IAE3B,YAAY,OAAiB,EAAE,cAAgC;QAC3D,KAAK,cAAc,CAAC;QACpB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,OAAO;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,MAAM,CACF,OAAgC,EAChC,MAAmB,EACnB,KAAsB;QAEtB,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAYQ,WAAW,CAChB,OAAgC,EAChC,MAA0C,EAC1C,MAAmB;QAEnB,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE;YACxB,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC;aACG,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAClC,KAAK,EACL,CAAC,EACD,OAAO,CAAC,YAAY,CACvB,CAAC;YACF,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAc,CAAC,CAAC;QACxD,CAAC,CAAC;aACD,cAAc,EAAE,CAAC;IAC1B,CAAC;CACJ;AAED,MAAM,OAAO,gBAEX,SAAQ,gBAA6B;IAC1B,SAAS,CACd,QAAkB,EAClB,KAAiB,EACjB,MAAc;QAEd,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAC7B,KAAK,EACL,MAAM,EACN,IAAI,CAAC,KAAc,EACnB,IAAI,CAAC,OAAO,CAAC,YAAY,CAC5B,CAAC;IACN,CAAC;CACJ"}
@@ -1,65 +1,69 @@
1
1
  import type { AsyncExactReadable, ExactReadable, StructOptions, StructValue } from "../../basic/index.js";
2
2
  import { StructFieldDefinition, StructFieldValue } from "../../basic/index.js";
3
3
  /**
4
- * Base class for all types that
5
- * can be converted from an `Uint8Array` when deserialized,
6
- * and need to be converted to an `Uint8Array` when serializing
4
+ * A converter for buffer-like fields.
5
+ * It converts `Uint8Array`s to custom-typed values when deserializing,
6
+ * and convert values back to `Uint8Array`s when serializing.
7
7
  *
8
- * @template TValue The actual TypeScript type of this type
9
- * @template TTypeScriptType Optional another type (should be compatible with `TType`)
10
- * specified by user when creating field definitions.
8
+ * @template TValue The type of the value that the converter converts to/from `Uint8Array`.
9
+ * @template TTypeScriptType Optionally another type to refine `TValue`.
10
+ * For example, `TValue` is `string`, and `TTypeScriptType` is `"foo" | "bar"`.
11
+ * `TValue` is specified by the developer when creating an converter implementation,
12
+ * `TTypeScriptType` is specified by the user when creating a field.
11
13
  */
12
- export declare abstract class BufferFieldSubType<TValue = unknown, TTypeScriptType = TValue> {
14
+ export declare abstract class BufferFieldConverter<TValue = unknown, TTypeScriptType = TValue> {
13
15
  readonly TTypeScriptType: TTypeScriptType;
14
16
  /**
15
- * When implemented in derived classes, converts the type-specific `value` to an `Uint8Array`
17
+ * When implemented in derived classes, converts the custom `value` to an `Uint8Array`
16
18
  *
17
19
  * This function should be "pure", i.e.,
18
20
  * same `value` should always be converted to `Uint8Array`s that have same content.
19
21
  */
20
22
  abstract toBuffer(value: TValue): Uint8Array;
21
- /** When implemented in derived classes, converts the `Uint8Array` to a type-specific value */
23
+ /** When implemented in derived classes, converts the `Uint8Array` to a custom value */
22
24
  abstract toValue(array: Uint8Array): TValue;
23
25
  /**
24
- * When implemented in derived classes, gets the size in byte of the type-specific `value`.
26
+ * When implemented in derived classes, gets the size in byte of the custom `value`.
25
27
  *
26
- * If the size can't be calculated without first converting the `value` back to an `Uint8Array`,
27
- * implementer can returns `-1`, so the caller will get its size by first converting it to
28
- * an `Uint8Array` (and cache the result).
28
+ * If the size can't be determined without first converting the `value` back to an `Uint8Array`,
29
+ * the implementer should return `undefined`. In which case, the caller will call `toBuffer` to
30
+ * convert the value to a `Uint8Array`, then read the length of the `Uint8Array`. The caller can
31
+ * cache the result so the serialization process doesn't need to call `toBuffer` again.
29
32
  */
30
- abstract getSize(value: TValue): number;
33
+ abstract getSize(value: TValue): number | undefined;
31
34
  }
32
- /** An `BufferFieldSubType` that's actually an `Uint8Array` */
33
- export declare class Uint8ArrayBufferFieldSubType<TTypeScriptType = Uint8Array> extends BufferFieldSubType<Uint8Array, TTypeScriptType> {
34
- static readonly Instance: Uint8ArrayBufferFieldSubType<Uint8Array>;
35
+ /** An identity converter, doesn't convert to anything else. */
36
+ export declare class Uint8ArrayBufferFieldConverter<TTypeScriptType = Uint8Array> extends BufferFieldConverter<Uint8Array, TTypeScriptType> {
37
+ static readonly Instance: Uint8ArrayBufferFieldConverter<Uint8Array>;
35
38
  protected constructor();
36
39
  toBuffer(value: Uint8Array): Uint8Array;
37
40
  toValue(buffer: Uint8Array): Uint8Array;
38
41
  getSize(value: Uint8Array): number;
39
42
  }
40
43
  /** An `BufferFieldSubType` that converts between `Uint8Array` and `string` */
41
- export declare class StringBufferFieldSubType<TTypeScriptType = string> extends BufferFieldSubType<string, TTypeScriptType> {
42
- static readonly Instance: StringBufferFieldSubType<string>;
44
+ export declare class StringBufferFieldConverter<TTypeScriptType = string> extends BufferFieldConverter<string, TTypeScriptType> {
45
+ static readonly Instance: StringBufferFieldConverter<string>;
43
46
  toBuffer(value: string): Uint8Array;
44
47
  toValue(array: Uint8Array): string;
45
- getSize(): number;
48
+ getSize(): number | undefined;
46
49
  }
47
50
  export declare const EMPTY_UINT8_ARRAY: Uint8Array;
48
- export declare abstract class BufferLikeFieldDefinition<TType extends BufferFieldSubType<any, any> = BufferFieldSubType<unknown, unknown>, TOptions = void, TOmitInitKey extends PropertyKey = never, TTypeScriptType = TType["TTypeScriptType"]> extends StructFieldDefinition<TOptions, TTypeScriptType, TOmitInitKey> {
49
- readonly type: TType;
50
- constructor(type: TType, options: TOptions);
51
+ export declare abstract class BufferLikeFieldDefinition<TConverter extends BufferFieldConverter<unknown, unknown> = BufferFieldConverter<unknown, unknown>, TOptions = void, TOmitInitKey extends PropertyKey = never, TTypeScriptType = TConverter["TTypeScriptType"]> extends StructFieldDefinition<TOptions, TTypeScriptType, TOmitInitKey> {
52
+ readonly converter: TConverter;
53
+ readonly TTypeScriptType: TTypeScriptType;
54
+ constructor(converter: TConverter, options: TOptions);
51
55
  protected getDeserializeSize(struct: StructValue): number;
52
56
  /**
53
57
  * When implemented in derived classes, creates a `StructFieldValue` for the current field definition.
54
58
  */
55
- create(options: Readonly<StructOptions>, struct: StructValue, value: TType["TTypeScriptType"], array?: Uint8Array): BufferLikeFieldValue<this>;
59
+ create(options: Readonly<StructOptions>, struct: StructValue, value: TTypeScriptType, array?: Uint8Array): BufferLikeFieldValue<this>;
56
60
  deserialize(options: Readonly<StructOptions>, stream: ExactReadable, struct: StructValue): BufferLikeFieldValue<this>;
57
61
  deserialize(options: Readonly<StructOptions>, stream: AsyncExactReadable, struct: StructValue): Promise<BufferLikeFieldValue<this>>;
58
62
  }
59
- export declare class BufferLikeFieldValue<TDefinition extends BufferLikeFieldDefinition<BufferFieldSubType<unknown, unknown>, any, any>> extends StructFieldValue<TDefinition> {
63
+ export declare class BufferLikeFieldValue<TDefinition extends BufferLikeFieldDefinition<BufferFieldConverter<unknown, unknown>, any, any, any>> extends StructFieldValue<TDefinition> {
60
64
  protected array: Uint8Array | undefined;
61
- constructor(definition: TDefinition, options: Readonly<StructOptions>, struct: StructValue, value: TDefinition["TValue"], array?: Uint8Array);
65
+ constructor(definition: TDefinition, options: Readonly<StructOptions>, struct: StructValue, value: TDefinition["TTypeScriptType"], array?: Uint8Array);
62
66
  set(value: TDefinition["TValue"]): void;
63
- serialize(dataView: DataView, offset: number): void;
67
+ serialize(dataView: DataView, array: Uint8Array, offset: number): void;
64
68
  }
65
69
  //# sourceMappingURL=base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/types/buffer/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/types/buffer/base.ts"],"names":[],"mappings":"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"}
@@ -2,20 +2,22 @@ import { StructFieldDefinition, StructFieldValue } from "../../basic/index.js";
2
2
  import { SyncPromise } from "../../sync-promise.js";
3
3
  import { decodeUtf8, encodeUtf8 } from "../../utils.js";
4
4
  /**
5
- * Base class for all types that
6
- * can be converted from an `Uint8Array` when deserialized,
7
- * and need to be converted to an `Uint8Array` when serializing
5
+ * A converter for buffer-like fields.
6
+ * It converts `Uint8Array`s to custom-typed values when deserializing,
7
+ * and convert values back to `Uint8Array`s when serializing.
8
8
  *
9
- * @template TValue The actual TypeScript type of this type
10
- * @template TTypeScriptType Optional another type (should be compatible with `TType`)
11
- * specified by user when creating field definitions.
9
+ * @template TValue The type of the value that the converter converts to/from `Uint8Array`.
10
+ * @template TTypeScriptType Optionally another type to refine `TValue`.
11
+ * For example, `TValue` is `string`, and `TTypeScriptType` is `"foo" | "bar"`.
12
+ * `TValue` is specified by the developer when creating an converter implementation,
13
+ * `TTypeScriptType` is specified by the user when creating a field.
12
14
  */
13
- export class BufferFieldSubType {
15
+ export class BufferFieldConverter {
14
16
  TTypeScriptType;
15
17
  }
16
- /** An `BufferFieldSubType` that's actually an `Uint8Array` */
17
- export class Uint8ArrayBufferFieldSubType extends BufferFieldSubType {
18
- static Instance = new Uint8ArrayBufferFieldSubType();
18
+ /** An identity converter, doesn't convert to anything else. */
19
+ export class Uint8ArrayBufferFieldConverter extends BufferFieldConverter {
20
+ static Instance = new Uint8ArrayBufferFieldConverter();
19
21
  constructor() {
20
22
  super();
21
23
  }
@@ -26,12 +28,12 @@ export class Uint8ArrayBufferFieldSubType extends BufferFieldSubType {
26
28
  return buffer;
27
29
  }
28
30
  getSize(value) {
29
- return value.byteLength;
31
+ return value.length;
30
32
  }
31
33
  }
32
34
  /** An `BufferFieldSubType` that converts between `Uint8Array` and `string` */
33
- export class StringBufferFieldSubType extends BufferFieldSubType {
34
- static Instance = new StringBufferFieldSubType();
35
+ export class StringBufferFieldConverter extends BufferFieldConverter {
36
+ static Instance = new StringBufferFieldConverter();
35
37
  toBuffer(value) {
36
38
  return encodeUtf8(value);
37
39
  }
@@ -39,18 +41,17 @@ export class StringBufferFieldSubType extends BufferFieldSubType {
39
41
  return decodeUtf8(array);
40
42
  }
41
43
  getSize() {
42
- // Return `-1`, so `BufferLikeFieldDefinition` will
43
- // convert this `value` into an `Uint8Array` (and cache the result),
44
- // Then get the size from that `Uint8Array`
45
- return -1;
44
+ // See the note in `BufferFieldConverter.getSize`
45
+ return undefined;
46
46
  }
47
47
  }
48
48
  export const EMPTY_UINT8_ARRAY = new Uint8Array(0);
49
49
  export class BufferLikeFieldDefinition extends StructFieldDefinition {
50
- type;
51
- constructor(type, options) {
50
+ converter;
51
+ TTypeScriptType;
52
+ constructor(converter, options) {
52
53
  super(options);
53
- this.type = type;
54
+ this.converter = converter;
54
55
  }
55
56
  getDeserializeSize(struct) {
56
57
  void struct;
@@ -73,7 +74,7 @@ export class BufferLikeFieldDefinition extends StructFieldDefinition {
73
74
  }
74
75
  })
75
76
  .then((array) => {
76
- const value = this.type.toValue(array);
77
+ const value = this.converter.toValue(array);
77
78
  return this.create(options, struct, value, array);
78
79
  })
79
80
  .valueOrPromise();
@@ -91,11 +92,9 @@ export class BufferLikeFieldValue extends StructFieldValue {
91
92
  // It will be lazily calculated in `serialize()`
92
93
  this.array = undefined;
93
94
  }
94
- serialize(dataView, offset) {
95
- if (!this.array) {
96
- this.array = this.definition.type.toBuffer(this.value);
97
- }
98
- new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength).set(this.array, offset);
95
+ serialize(dataView, array, offset) {
96
+ this.array ??= this.definition.converter.toBuffer(this.value);
97
+ array.set(this.array, offset);
99
98
  }
100
99
  }
101
100
  //# sourceMappingURL=base.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/types/buffer/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/types/buffer/base.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import type { BufferFieldSubType } from "./base.js";
1
+ import type { BufferFieldConverter } from "./base.js";
2
2
  import { BufferLikeFieldDefinition } from "./base.js";
3
3
  export interface FixedLengthBufferLikeFieldOptions {
4
4
  length: number;
5
5
  }
6
- export declare class FixedLengthBufferLikeFieldDefinition<TType extends BufferFieldSubType = BufferFieldSubType, TOptions extends FixedLengthBufferLikeFieldOptions = FixedLengthBufferLikeFieldOptions, TTypeScriptType = TType["TTypeScriptType"]> extends BufferLikeFieldDefinition<TType, TOptions, never, TTypeScriptType> {
6
+ export declare class FixedLengthBufferLikeFieldDefinition<TConverter extends BufferFieldConverter = BufferFieldConverter, TOptions extends FixedLengthBufferLikeFieldOptions = FixedLengthBufferLikeFieldOptions, TTypeScriptType = TConverter["TTypeScriptType"]> extends BufferLikeFieldDefinition<TConverter, TOptions, never, TTypeScriptType> {
7
7
  getSize(): number;
8
8
  }
9
9
  //# sourceMappingURL=fixed-length.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixed-length.d.ts","sourceRoot":"","sources":["../../../src/types/buffer/fixed-length.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,WAAW,iCAAiC;IAC9C,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,oCAAoC,CAC7C,KAAK,SAAS,kBAAkB,GAAG,kBAAkB,EACrD,QAAQ,SACJ,iCAAiC,GAAG,iCAAiC,EACzE,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAC5C,SAAQ,yBAAyB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,CAAC;IACxE,OAAO,IAAI,MAAM;CAGpB"}
1
+ {"version":3,"file":"fixed-length.d.ts","sourceRoot":"","sources":["../../../src/types/buffer/fixed-length.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,WAAW,iCAAiC;IAC9C,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,oCAAoC,CAC7C,UAAU,SAAS,oBAAoB,GAAG,oBAAoB,EAC9D,QAAQ,SACJ,iCAAiC,GAAG,iCAAiC,EACzE,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,CACjD,SAAQ,yBAAyB,CAC/B,UAAU,EACV,QAAQ,EACR,KAAK,EACL,eAAe,CAClB;IACG,OAAO,IAAI,MAAM;CAGpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"fixed-length.js","sourceRoot":"","sources":["../../../src/types/buffer/fixed-length.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAMtD,MAAM,OAAO,oCAKX,SAAQ,yBAAkE;IACxE,OAAO;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;CACJ"}
1
+ {"version":3,"file":"fixed-length.js","sourceRoot":"","sources":["../../../src/types/buffer/fixed-length.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAMtD,MAAM,OAAO,oCAKX,SAAQ,yBAKT;IACG,OAAO;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;CACJ"}
@@ -1,10 +1,10 @@
1
1
  import type { StructFieldDefinition, StructOptions, StructValue } from "../../basic/index.js";
2
2
  import { StructFieldValue } from "../../basic/index.js";
3
3
  import type { KeysOfType } from "../../utils.js";
4
- import type { BufferFieldSubType } from "./base.js";
4
+ import type { BufferFieldConverter } from "./base.js";
5
5
  import { BufferLikeFieldDefinition, BufferLikeFieldValue } from "./base.js";
6
6
  export type LengthField<TFields> = KeysOfType<TFields, number | string>;
7
- export interface VariableLengthBufferLikeFieldOptions<TFields = object, TLengthField extends LengthField<TFields> = any> {
7
+ export interface VariableLengthBufferLikeFieldOptions<TFields extends object = object, TLengthField extends LengthField<TFields> = any> {
8
8
  /**
9
9
  * The name of the field that contains the length of the buffer.
10
10
  *
@@ -19,27 +19,28 @@ export interface VariableLengthBufferLikeFieldOptions<TFields = object, TLengthF
19
19
  */
20
20
  lengthFieldRadix?: number;
21
21
  }
22
- export declare class VariableLengthBufferLikeFieldDefinition<TType extends BufferFieldSubType = BufferFieldSubType, TOptions extends VariableLengthBufferLikeFieldOptions = VariableLengthBufferLikeFieldOptions, TTypeScriptType = TType["TTypeScriptType"]> extends BufferLikeFieldDefinition<TType, TOptions, TOptions["lengthField"], TTypeScriptType> {
22
+ export declare class VariableLengthBufferLikeFieldDefinition<TConverter extends BufferFieldConverter = BufferFieldConverter, TOptions extends VariableLengthBufferLikeFieldOptions = VariableLengthBufferLikeFieldOptions, TTypeScriptType = TConverter["TTypeScriptType"]> extends BufferLikeFieldDefinition<TConverter, TOptions, TOptions["lengthField"], TTypeScriptType> {
23
23
  getSize(): number;
24
24
  protected getDeserializeSize(struct: StructValue): number;
25
25
  create(options: Readonly<StructOptions>, struct: StructValue, value: TTypeScriptType, array?: Uint8Array): VariableLengthBufferLikeStructFieldValue<this>;
26
26
  }
27
27
  export declare class VariableLengthBufferLikeStructFieldValue<TDefinition extends VariableLengthBufferLikeFieldDefinition = VariableLengthBufferLikeFieldDefinition> extends BufferLikeFieldValue<TDefinition> {
28
+ #private;
28
29
  protected length: number | undefined;
29
30
  protected lengthFieldValue: VariableLengthBufferLikeFieldLengthValue;
30
31
  constructor(definition: TDefinition, options: Readonly<StructOptions>, struct: StructValue, value: TDefinition["TValue"], array?: Uint8Array);
31
32
  getSize(): number;
32
33
  set(value: unknown): void;
33
34
  }
34
- type VariableLengthBufferLikeFieldValueLike = StructFieldValue<StructFieldDefinition<VariableLengthBufferLikeFieldOptions, any, any>>;
35
- export declare class VariableLengthBufferLikeFieldLengthValue extends StructFieldValue {
36
- protected originalField: StructFieldValue;
37
- protected bufferField: VariableLengthBufferLikeFieldValueLike;
38
- constructor(originalField: StructFieldValue, arrayBufferField: VariableLengthBufferLikeFieldValueLike);
35
+ type VariableLengthBufferLikeFieldValueLike = StructFieldValue<StructFieldDefinition<VariableLengthBufferLikeFieldOptions<any, any>, any, any>>;
36
+ export declare class VariableLengthBufferLikeFieldLengthValue extends StructFieldValue<StructFieldDefinition<unknown, unknown, PropertyKey>> {
37
+ protected originalValue: StructFieldValue<StructFieldDefinition<unknown, unknown, PropertyKey>>;
38
+ protected bufferValue: VariableLengthBufferLikeFieldValueLike;
39
+ constructor(originalValue: StructFieldValue<StructFieldDefinition<unknown, unknown, PropertyKey>>, bufferValue: VariableLengthBufferLikeFieldValueLike);
39
40
  getSize(): number;
40
41
  get(): string | number;
41
42
  set(): void;
42
- serialize(dataView: DataView, offset: number): void;
43
+ serialize(dataView: DataView, array: Uint8Array, offset: number): void;
43
44
  }
44
45
  export {};
45
46
  //# sourceMappingURL=variable-length.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"variable-length.d.ts","sourceRoot":"","sources":["../../../src/types/buffer/variable-length.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,qBAAqB,EACrB,aAAa,EACb,WAAW,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE5E,MAAM,MAAM,WAAW,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,oCAAoC,CACjD,OAAO,GAAG,MAAM,EAChB,YAAY,SAAS,WAAW,CAAC,OAAO,CAAC,GAAG,GAAG;IAE/C;;;;OAIG;IACH,WAAW,EAAE,YAAY,CAAC;IAE1B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,uCAAuC,CAChD,KAAK,SAAS,kBAAkB,GAAG,kBAAkB,EACrD,QAAQ,SACJ,oCAAoC,GAAG,oCAAoC,EAC/E,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAC5C,SAAQ,yBAAyB,CAC/B,KAAK,EACL,QAAQ,EACR,QAAQ,CAAC,aAAa,CAAC,EACvB,eAAe,CAClB;IACG,OAAO,IAAI,MAAM;cAIE,kBAAkB,CAAC,MAAM,EAAE,WAAW;IAQhD,MAAM,CACX,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,EACtB,KAAK,CAAC,EAAE,UAAU,GACnB,wCAAwC,CAAC,IAAI,CAAC;CASpD;AAED,qBAAa,wCAAwC,CACjD,WAAW,SACP,uCAAuC,GAAG,uCAAuC,CACvF,SAAQ,oBAAoB,CAAC,WAAW,CAAC;IACvC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC,SAAS,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;gBAGjE,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC5B,KAAK,CAAC,EAAE,UAAU;IAmBb,OAAO;IAYP,GAAG,CAAC,KAAK,EAAE,OAAO;CAK9B;AAGD,KAAK,sCAAsC,GAAG,gBAAgB,CAC1D,qBAAqB,CAAC,oCAAoC,EAAE,GAAG,EAAE,GAAG,CAAC,CACxE,CAAC;AAEF,qBAAa,wCAAyC,SAAQ,gBAAgB;IAC1E,SAAS,CAAC,aAAa,EAAE,gBAAgB,CAAC;IAE1C,SAAS,CAAC,WAAW,EAAE,sCAAsC,CAAC;gBAG1D,aAAa,EAAE,gBAAgB,EAC/B,gBAAgB,EAAE,sCAAsC;IAYnD,OAAO;IAIP,GAAG;IAaH,GAAG;IAKZ,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;CAI/C"}
1
+ {"version":3,"file":"variable-length.d.ts","sourceRoot":"","sources":["../../../src/types/buffer/variable-length.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACR,qBAAqB,EACrB,aAAa,EACb,WAAW,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE5E,MAAM,MAAM,WAAW,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,oCAAoC,CACjD,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/B,YAAY,SAAS,WAAW,CAAC,OAAO,CAAC,GAAG,GAAG;IAE/C;;;;OAIG;IACH,WAAW,EAAE,YAAY,CAAC;IAE1B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,uCAAuC,CAChD,UAAU,SAAS,oBAAoB,GAAG,oBAAoB,EAC9D,QAAQ,SACJ,oCAAoC,GAAG,oCAAoC,EAC/E,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,CACjD,SAAQ,yBAAyB,CAC/B,UAAU,EACV,QAAQ,EACR,QAAQ,CAAC,aAAa,CAAC,EACvB,eAAe,CAClB;IACG,OAAO,IAAI,MAAM;cAIE,kBAAkB,CAAC,MAAM,EAAE,WAAW;IAQhD,MAAM,CACX,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,EACtB,KAAK,CAAC,EAAE,UAAU,GACnB,wCAAwC,CAAC,IAAI,CAAC;CASpD;AAED,qBAAa,wCAAwC,CACjD,WAAW,SACP,uCAAuC,GAAG,uCAAuC,CACvF,SAAQ,oBAAoB,CAAC,WAAW,CAAC;;IACvC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC,SAAS,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;gBAGjE,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC5B,KAAK,CAAC,EAAE,UAAU;IA2Bb,OAAO,IAAI,MAAM;IAejB,GAAG,CAAC,KAAK,EAAE,OAAO;CAK9B;AAGD,KAAK,sCAAsC,GAAG,gBAAgB,CAC1D,qBAAqB,CACjB,oCAAoC,CAAC,GAAG,EAAE,GAAG,CAAC,EAC9C,GAAG,EACH,GAAG,CACN,CACJ,CAAC;AAEF,qBAAa,wCAAyC,SAAQ,gBAAgB,CAC1E,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CACvD;IACG,SAAS,CAAC,aAAa,EAAE,gBAAgB,CACrC,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CACvD,CAAC;IAEF,SAAS,CAAC,WAAW,EAAE,sCAAsC,CAAC;gBAG1D,aAAa,EAAE,gBAAgB,CAC3B,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CACvD,EACD,WAAW,EAAE,sCAAsC;IAY9C,OAAO;IAIP,GAAG;IAaH,GAAG;IAKZ,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;CAIlE"}
@@ -1,3 +1,5 @@
1
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
3
  import { StructFieldValue } from "../../basic/index.js";
2
4
  import { BufferLikeFieldDefinition, BufferLikeFieldValue } from "./base.js";
3
5
  export class VariableLengthBufferLikeFieldDefinition extends BufferLikeFieldDefinition {
@@ -21,7 +23,7 @@ export class VariableLengthBufferLikeStructFieldValue extends BufferLikeFieldVal
21
23
  constructor(definition, options, struct, value, array) {
22
24
  super(definition, options, struct, value, array);
23
25
  if (array) {
24
- this.length = array.byteLength;
26
+ this.length = array.length;
25
27
  }
26
28
  // Patch the associated length field.
27
29
  const lengthField = this.definition.options.lengthField;
@@ -29,13 +31,22 @@ export class VariableLengthBufferLikeStructFieldValue extends BufferLikeFieldVal
29
31
  this.lengthFieldValue = new VariableLengthBufferLikeFieldLengthValue(originalValue, this);
30
32
  struct.set(lengthField, this.lengthFieldValue);
31
33
  }
34
+ #tryGetSize() {
35
+ const length = this.definition.converter.getSize(this.value);
36
+ if (length !== undefined && length < 0) {
37
+ throw new Error("Invalid length");
38
+ }
39
+ return length;
40
+ }
32
41
  getSize() {
33
42
  if (this.length === undefined) {
34
- this.length = this.definition.type.getSize(this.value);
35
- if (this.length === -1) {
36
- this.array = this.definition.type.toBuffer(this.value);
37
- this.length = this.array.byteLength;
38
- }
43
+ // first try to get the size from the converter
44
+ this.length = this.#tryGetSize();
45
+ }
46
+ if (this.length === undefined) {
47
+ // The converter doesn't know the size, so convert the value to a buffer to get its size
48
+ this.array = this.definition.converter.toBuffer(this.value);
49
+ this.length = this.array.length;
39
50
  }
40
51
  return this.length;
41
52
  }
@@ -46,21 +57,21 @@ export class VariableLengthBufferLikeStructFieldValue extends BufferLikeFieldVal
46
57
  }
47
58
  }
48
59
  export class VariableLengthBufferLikeFieldLengthValue extends StructFieldValue {
49
- originalField;
50
- bufferField;
51
- constructor(originalField, arrayBufferField) {
52
- super(originalField.definition, originalField.options, originalField.struct, 0);
53
- this.originalField = originalField;
54
- this.bufferField = arrayBufferField;
60
+ originalValue;
61
+ bufferValue;
62
+ constructor(originalValue, bufferValue) {
63
+ super(originalValue.definition, originalValue.options, originalValue.struct, 0);
64
+ this.originalValue = originalValue;
65
+ this.bufferValue = bufferValue;
55
66
  }
56
67
  getSize() {
57
- return this.originalField.getSize();
68
+ return this.originalValue.getSize();
58
69
  }
59
70
  get() {
60
- let value = this.bufferField.getSize();
61
- const originalValue = this.originalField.get();
71
+ let value = this.bufferValue.getSize();
72
+ const originalValue = this.originalValue.get();
62
73
  if (typeof originalValue === "string") {
63
- value = value.toString(this.bufferField.definition.options.lengthFieldRadix ?? 10);
74
+ value = value.toString(this.bufferValue.definition.options.lengthFieldRadix ?? 10);
64
75
  }
65
76
  return value;
66
77
  }
@@ -68,9 +79,9 @@ export class VariableLengthBufferLikeFieldLengthValue extends StructFieldValue {
68
79
  // Ignore setting
69
80
  // It will always be in sync with the buffer size
70
81
  }
71
- serialize(dataView, offset) {
72
- this.originalField.set(this.get());
73
- this.originalField.serialize(dataView, offset);
82
+ serialize(dataView, array, offset) {
83
+ this.originalValue.set(this.get());
84
+ this.originalValue.serialize(dataView, array, offset);
74
85
  }
75
86
  }
76
87
  //# sourceMappingURL=variable-length.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"variable-length.js","sourceRoot":"","sources":["../../../src/types/buffer/variable-length.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"variable-length.js","sourceRoot":"","sources":["../../../src/types/buffer/variable-length.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,28 @@
1
1
  import type { AsyncExactReadable, ExactReadable, StructOptions, StructValue } from "../basic/index.js";
2
2
  import { StructFieldDefinition, StructFieldValue } from "../basic/index.js";
3
- export interface NumberFieldType {
3
+ export interface NumberFieldVariant {
4
4
  signed: boolean;
5
5
  size: number;
6
6
  deserialize(array: Uint8Array, littleEndian: boolean): number;
7
7
  serialize(dataView: DataView, offset: number, value: number, littleEndian: boolean): void;
8
8
  }
9
- export declare namespace NumberFieldType {
10
- const Uint8: NumberFieldType;
11
- const Int8: NumberFieldType;
12
- const Uint16: NumberFieldType;
13
- const Int16: NumberFieldType;
14
- const Uint32: NumberFieldType;
15
- const Int32: NumberFieldType;
9
+ export declare namespace NumberFieldVariant {
10
+ const Uint8: NumberFieldVariant;
11
+ const Int8: NumberFieldVariant;
12
+ const Uint16: NumberFieldVariant;
13
+ const Int16: NumberFieldVariant;
14
+ const Uint32: NumberFieldVariant;
15
+ const Int32: NumberFieldVariant;
16
16
  }
17
- export declare class NumberFieldDefinition<TType extends NumberFieldType = NumberFieldType, TTypeScriptType = number> extends StructFieldDefinition<void, TTypeScriptType> {
18
- readonly type: TType;
19
- constructor(type: TType, typescriptType?: TTypeScriptType);
17
+ export declare class NumberFieldDefinition<TVariant extends NumberFieldVariant = NumberFieldVariant, TTypeScriptType = number> extends StructFieldDefinition<void, TTypeScriptType> {
18
+ readonly variant: TVariant;
19
+ constructor(variant: TVariant, typescriptType?: TTypeScriptType);
20
20
  getSize(): number;
21
21
  create(options: Readonly<StructOptions>, struct: StructValue, value: TTypeScriptType): NumberFieldValue<this>;
22
22
  deserialize(options: Readonly<StructOptions>, stream: ExactReadable, struct: StructValue): NumberFieldValue<this>;
23
23
  deserialize(options: Readonly<StructOptions>, stream: AsyncExactReadable, struct: StructValue): Promise<NumberFieldValue<this>>;
24
24
  }
25
- export declare class NumberFieldValue<TDefinition extends NumberFieldDefinition<NumberFieldType, any>> extends StructFieldValue<TDefinition> {
26
- serialize(dataView: DataView, offset: number): void;
25
+ export declare class NumberFieldValue<TDefinition extends NumberFieldDefinition<NumberFieldVariant, unknown>> extends StructFieldValue<TDefinition> {
26
+ serialize(dataView: DataView, array: Uint8Array, offset: number): void;
27
27
  }
28
28
  //# sourceMappingURL=number.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/types/number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,WAAW,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAI5E,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9D,SAAS,CACL,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,OAAO,GACtB,IAAI,CAAC;CACX;AAED,yBAAiB,eAAe,CAAC;IACtB,MAAM,KAAK,EAAE,eASnB,CAAC;IAEK,MAAM,IAAI,EAAE,eAUlB,CAAC;IAEK,MAAM,MAAM,EAAE,eAcpB,CAAC;IAEK,MAAM,KAAK,EAAE,eAUnB,CAAC;IAEK,MAAM,MAAM,EAAE,eAUpB,CAAC;IAEK,MAAM,KAAK,EAAE,eAmBnB,CAAC;CACL;AAED,qBAAa,qBAAqB,CAC9B,KAAK,SAAS,eAAe,GAAG,eAAe,EAC/C,eAAe,GAAG,MAAM,CAC1B,SAAQ,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;gBAET,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,eAAe;IAMzD,OAAO,IAAI,MAAM;IAIjB,MAAM,CACF,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,GACvB,gBAAgB,CAAC,IAAI,CAAC;IAIhB,WAAW,CAChB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,WAAW,GACpB,gBAAgB,CAAC,IAAI,CAAC;IAChB,WAAW,CAChB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAkBrC;AAED,qBAAa,gBAAgB,CACzB,WAAW,SAAS,qBAAqB,CAAC,eAAe,EAAE,GAAG,CAAC,CACjE,SAAQ,gBAAgB,CAAC,WAAW,CAAC;IACnC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAQtD"}
1
+ {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/types/number.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACR,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,WAAW,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAI5E,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9D,SAAS,CACL,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,OAAO,GACtB,IAAI,CAAC;CACX;AAED,yBAAiB,kBAAkB,CAAC;IACzB,MAAM,KAAK,EAAE,kBASnB,CAAC;IAEK,MAAM,IAAI,EAAE,kBASlB,CAAC;IAEK,MAAM,MAAM,EAAE,kBAYpB,CAAC;IAEK,MAAM,KAAK,EAAE,kBASnB,CAAC;IAEK,MAAM,MAAM,EAAE,kBASpB,CAAC;IAEK,MAAM,KAAK,EAAE,kBASnB,CAAC;CACL;AAED,qBAAa,qBAAqB,CAC9B,QAAQ,SAAS,kBAAkB,GAAG,kBAAkB,EACxD,eAAe,GAAG,MAAM,CAC1B,SAAQ,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAEf,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,eAAe;IAM/D,OAAO,IAAI,MAAM;IAIjB,MAAM,CACF,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,GACvB,gBAAgB,CAAC,IAAI,CAAC;IAIhB,WAAW,CAChB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,WAAW,GACpB,gBAAgB,CAAC,IAAI,CAAC;IAChB,WAAW,CAChB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAkBrC;AAED,qBAAa,gBAAgB,CACzB,WAAW,SAAS,qBAAqB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CACxE,SAAQ,gBAAgB,CAAC,WAAW,CAAC;IACnC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAQzE"}