@yume-chan/struct 0.0.9 → 0.0.13

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 (151) hide show
  1. package/CHANGELOG.json +65 -0
  2. package/CHANGELOG.md +39 -0
  3. package/LICENSE +21 -21
  4. package/README.md +769 -709
  5. package/esm/basic/definition.d.ts +44 -0
  6. package/esm/basic/definition.d.ts.map +1 -0
  7. package/esm/basic/definition.js +13 -9
  8. package/esm/basic/definition.js.map +1 -1
  9. package/esm/basic/field-value.d.ts +38 -0
  10. package/esm/basic/field-value.d.ts.map +1 -0
  11. package/esm/basic/field-value.js +13 -7
  12. package/esm/basic/field-value.js.map +1 -1
  13. package/esm/basic/index.d.ts +6 -0
  14. package/esm/basic/index.d.ts.map +1 -0
  15. package/esm/basic/index.js +5 -4
  16. package/esm/basic/index.js.map +1 -1
  17. package/esm/basic/options.d.ts +10 -0
  18. package/esm/basic/options.d.ts.map +1 -0
  19. package/esm/basic/{context.js → options.js} +1 -1
  20. package/esm/basic/options.js.map +1 -0
  21. package/esm/basic/stream.d.ts +19 -0
  22. package/esm/basic/stream.d.ts.map +1 -0
  23. package/esm/basic/stream.js +2 -0
  24. package/esm/basic/stream.js.map +1 -0
  25. package/{dts → esm}/basic/struct-value.d.ts +3 -3
  26. package/esm/basic/struct-value.d.ts.map +1 -0
  27. package/esm/basic/struct-value.js +7 -15
  28. package/esm/basic/struct-value.js.map +1 -1
  29. package/esm/index.d.ts +14 -0
  30. package/esm/index.d.ts.map +1 -0
  31. package/esm/index.js +5 -5
  32. package/esm/index.js.map +1 -1
  33. package/{dts → esm}/struct.d.ts +25 -22
  34. package/esm/struct.d.ts.map +1 -0
  35. package/esm/struct.js +75 -52
  36. package/esm/struct.js.map +1 -1
  37. package/esm/syncbird.d.ts +65 -0
  38. package/esm/syncbird.d.ts.map +1 -0
  39. package/esm/syncbird.js +38 -0
  40. package/esm/syncbird.js.map +1 -0
  41. package/esm/types/bigint.d.ts +25 -0
  42. package/esm/types/bigint.d.ts.map +1 -0
  43. package/esm/types/bigint.js +45 -0
  44. package/esm/types/bigint.js.map +1 -0
  45. package/esm/types/buffer/base.d.ts +63 -0
  46. package/esm/types/buffer/base.d.ts.map +1 -0
  47. package/esm/types/buffer/base.js +100 -0
  48. package/esm/types/buffer/base.js.map +1 -0
  49. package/esm/types/buffer/fixed-length.d.ts +8 -0
  50. package/esm/types/buffer/fixed-length.d.ts.map +1 -0
  51. package/esm/types/buffer/fixed-length.js +8 -0
  52. package/esm/types/buffer/fixed-length.js.map +1 -0
  53. package/esm/types/buffer/index.d.ts +4 -0
  54. package/esm/types/buffer/index.d.ts.map +1 -0
  55. package/esm/types/buffer/index.js +4 -0
  56. package/esm/types/buffer/index.js.map +1 -0
  57. package/esm/types/buffer/variable-length.d.ts +43 -0
  58. package/esm/types/buffer/variable-length.d.ts.map +1 -0
  59. package/esm/types/buffer/variable-length.js +76 -0
  60. package/esm/types/buffer/variable-length.js.map +1 -0
  61. package/esm/types/index.d.ts +4 -0
  62. package/esm/types/index.d.ts.map +1 -0
  63. package/esm/types/index.js +3 -4
  64. package/esm/types/index.js.map +1 -1
  65. package/esm/types/number.d.ts +32 -0
  66. package/esm/types/number.d.ts.map +1 -0
  67. package/esm/types/number.js +26 -18
  68. package/esm/types/number.js.map +1 -1
  69. package/{dts → esm}/utils.d.ts +3 -2
  70. package/{dts → esm}/utils.d.ts.map +1 -1
  71. package/esm/utils.js +16 -0
  72. package/esm/utils.js.map +1 -1
  73. package/package.json +46 -49
  74. package/src/basic/definition.ts +70 -69
  75. package/src/basic/field-value.ts +67 -73
  76. package/src/basic/index.ts +5 -4
  77. package/src/basic/options.ts +19 -0
  78. package/src/basic/stream.ts +19 -0
  79. package/src/basic/struct-value.ts +39 -45
  80. package/src/index.ts +17 -5
  81. package/src/struct.ts +609 -575
  82. package/src/syncbird.ts +131 -0
  83. package/src/types/bigint.ts +102 -0
  84. package/src/types/buffer/base.ts +176 -0
  85. package/src/types/buffer/fixed-length.ts +17 -0
  86. package/src/types/buffer/index.ts +3 -0
  87. package/src/types/buffer/variable-length.ts +156 -0
  88. package/src/types/index.ts +3 -4
  89. package/src/types/number.ts +115 -100
  90. package/src/utils.ts +70 -51
  91. package/cjs/basic/context.js +0 -7
  92. package/cjs/basic/context.js.map +0 -1
  93. package/cjs/basic/definition.js +0 -25
  94. package/cjs/basic/definition.js.map +0 -1
  95. package/cjs/basic/field-value.js +0 -40
  96. package/cjs/basic/field-value.js.map +0 -1
  97. package/cjs/basic/index.js +0 -8
  98. package/cjs/basic/index.js.map +0 -1
  99. package/cjs/basic/struct-value.js +0 -46
  100. package/cjs/basic/struct-value.js.map +0 -1
  101. package/cjs/index.js +0 -11
  102. package/cjs/index.js.map +0 -1
  103. package/cjs/struct.js +0 -177
  104. package/cjs/struct.js.map +0 -1
  105. package/cjs/types/array-buffer.js +0 -118
  106. package/cjs/types/array-buffer.js.map +0 -1
  107. package/cjs/types/fixed-length-array-buffer.js +0 -12
  108. package/cjs/types/fixed-length-array-buffer.js.map +0 -1
  109. package/cjs/types/index.js +0 -8
  110. package/cjs/types/index.js.map +0 -1
  111. package/cjs/types/number.js +0 -52
  112. package/cjs/types/number.js.map +0 -1
  113. package/cjs/types/variable-length-array-buffer.js +0 -77
  114. package/cjs/types/variable-length-array-buffer.js.map +0 -1
  115. package/cjs/utils.js +0 -11
  116. package/cjs/utils.js.map +0 -1
  117. package/dts/basic/context.d.ts +0 -36
  118. package/dts/basic/context.d.ts.map +0 -1
  119. package/dts/basic/definition.d.ts +0 -48
  120. package/dts/basic/definition.d.ts.map +0 -1
  121. package/dts/basic/field-value.d.ts +0 -40
  122. package/dts/basic/field-value.d.ts.map +0 -1
  123. package/dts/basic/index.d.ts +0 -5
  124. package/dts/basic/index.d.ts.map +0 -1
  125. package/dts/basic/struct-value.d.ts.map +0 -1
  126. package/dts/index.d.ts +0 -6
  127. package/dts/index.d.ts.map +0 -1
  128. package/dts/struct.d.ts.map +0 -1
  129. package/dts/types/array-buffer.d.ts +0 -70
  130. package/dts/types/array-buffer.d.ts.map +0 -1
  131. package/dts/types/fixed-length-array-buffer.d.ts +0 -8
  132. package/dts/types/fixed-length-array-buffer.d.ts.map +0 -1
  133. package/dts/types/index.d.ts +0 -5
  134. package/dts/types/index.d.ts.map +0 -1
  135. package/dts/types/number.d.ts +0 -33
  136. package/dts/types/number.d.ts.map +0 -1
  137. package/dts/types/variable-length-array-buffer.d.ts +0 -32
  138. package/dts/types/variable-length-array-buffer.d.ts.map +0 -1
  139. package/esm/basic/context.js.map +0 -1
  140. package/esm/types/array-buffer.js +0 -109
  141. package/esm/types/array-buffer.js.map +0 -1
  142. package/esm/types/fixed-length-array-buffer.js +0 -8
  143. package/esm/types/fixed-length-array-buffer.js.map +0 -1
  144. package/esm/types/variable-length-array-buffer.js +0 -71
  145. package/esm/types/variable-length-array-buffer.js.map +0 -1
  146. package/src/basic/context.ts +0 -42
  147. package/src/types/array-buffer.ts +0 -184
  148. package/src/types/fixed-length-array-buffer.ts +0 -17
  149. package/src/types/variable-length-array-buffer.ts +0 -145
  150. package/tsconfig.cjs.json +0 -11
  151. package/tsconfig.esm.json +0 -15
@@ -1 +0,0 @@
1
- {"version":3,"file":"struct-value.d.ts","sourceRoot":"","sources":["../../src/basic/struct-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD;;GAEG;AACH,qBAAa,WAAW;IAGpB;;OAEG;IACH,SAAgB,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAM;IAEzD;;;;;OAKG;IACI,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAc3D;;;;OAIG;IACI,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,gBAAgB;CAMjD"}
package/dts/index.d.ts DELETED
@@ -1,6 +0,0 @@
1
- export * from './basic';
2
- export * from './struct';
3
- export { Struct as default } from './struct';
4
- export * from './types';
5
- export * from './utils';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,UAAU,CAAC;AAC7C,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"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"}
@@ -1,70 +0,0 @@
1
- import { StructDeserializationContext, StructFieldDefinition, StructFieldValue, StructOptions, StructSerializationContext, StructValue } from '../basic';
2
- /**
3
- * Base class for all types that
4
- * can be converted from an ArrayBuffer when deserialized,
5
- * and need to be converted to an ArrayBuffer when serializing
6
- *
7
- * @template TValue The actual TypeScript type of this type
8
- * @template TTypeScriptType Optional another type (should be compatible with `TType`)
9
- * specified by user when creating field definitions.
10
- */
11
- export declare abstract class ArrayBufferLikeFieldType<TValue = unknown, TTypeScriptType = TValue> {
12
- readonly TTypeScriptType: TTypeScriptType;
13
- /**
14
- * When implemented in derived classes, converts the type-specific `value` to an `ArrayBuffer`
15
- *
16
- * This function should be "pure", i.e.,
17
- * same `value` should always be converted to `ArrayBuffer`s that have same content.
18
- */
19
- abstract toArrayBuffer(value: TValue, context: StructSerializationContext): ArrayBuffer;
20
- /** When implemented in derived classes, converts the `ArrayBuffer` to a type-specific value */
21
- abstract fromArrayBuffer(arrayBuffer: ArrayBuffer, context: StructDeserializationContext): TValue;
22
- /**
23
- * When implemented in derived classes, gets the size in byte of the type-specific `value`.
24
- *
25
- * If the size can't be calculated without first converting the `value` back to an `ArrayBuffer`,
26
- * implementer should returns `-1` so the caller will get its size by first converting it to
27
- * an `ArrayBuffer` (and cache the result).
28
- */
29
- abstract getSize(value: TValue): number;
30
- }
31
- /** An ArrayBufferLike type that's actually an `ArrayBuffer` */
32
- export declare class ArrayBufferFieldType extends ArrayBufferLikeFieldType<ArrayBuffer> {
33
- static readonly instance: ArrayBufferFieldType;
34
- protected constructor();
35
- toArrayBuffer(value: ArrayBuffer): ArrayBuffer;
36
- fromArrayBuffer(arrayBuffer: ArrayBuffer): ArrayBuffer;
37
- getSize(value: ArrayBuffer): number;
38
- }
39
- /** Am ArrayBufferLike type that converts between `ArrayBuffer` and `Uint8ClampedArray` */
40
- export declare class Uint8ClampedArrayFieldType extends ArrayBufferLikeFieldType<Uint8ClampedArray, Uint8ClampedArray> {
41
- static readonly instance: Uint8ClampedArrayFieldType;
42
- protected constructor();
43
- toArrayBuffer(value: Uint8ClampedArray): ArrayBuffer;
44
- fromArrayBuffer(arrayBuffer: ArrayBuffer): Uint8ClampedArray;
45
- getSize(value: Uint8ClampedArray): number;
46
- }
47
- /** Am ArrayBufferLike type that converts between `ArrayBuffer` and `string` */
48
- export declare class StringFieldType<TTypeScriptType = string> extends ArrayBufferLikeFieldType<string, TTypeScriptType> {
49
- static readonly instance: StringFieldType<string>;
50
- toArrayBuffer(value: string, context: StructSerializationContext): ArrayBuffer;
51
- fromArrayBuffer(arrayBuffer: ArrayBuffer, context: StructDeserializationContext): string;
52
- getSize(): number;
53
- }
54
- export declare abstract class ArrayBufferLikeFieldDefinition<TType extends ArrayBufferLikeFieldType = ArrayBufferLikeFieldType, TOptions = void, TOmitInitKey extends PropertyKey = never> extends StructFieldDefinition<TOptions, TType['TTypeScriptType'], TOmitInitKey> {
55
- readonly type: TType;
56
- constructor(type: TType, options: TOptions);
57
- protected getDeserializeSize(struct: StructValue): number;
58
- /**
59
- * When implemented in derived classes, creates a `StructFieldValue` for the current field definition.
60
- */
61
- create(options: Readonly<StructOptions>, context: StructSerializationContext, struct: StructValue, value: TType['TTypeScriptType'], arrayBuffer?: ArrayBuffer): ArrayBufferLikeFieldValue<this>;
62
- deserialize(options: Readonly<StructOptions>, context: StructDeserializationContext, struct: StructValue): Promise<ArrayBufferLikeFieldValue<this>>;
63
- }
64
- export declare class ArrayBufferLikeFieldValue<TDefinition extends ArrayBufferLikeFieldDefinition<ArrayBufferLikeFieldType, any, any>> extends StructFieldValue<TDefinition> {
65
- protected arrayBuffer: ArrayBuffer | undefined;
66
- constructor(definition: TDefinition, options: Readonly<StructOptions>, context: StructSerializationContext, struct: StructValue, value: TDefinition['TValue'], arrayBuffer?: ArrayBuffer);
67
- set(value: TDefinition['TValue']): void;
68
- serialize(dataView: DataView, offset: number, context: StructSerializationContext): void;
69
- }
70
- //# sourceMappingURL=array-buffer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"array-buffer.d.ts","sourceRoot":"","sources":["../../src/types/array-buffer.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import { ArrayBufferLikeFieldDefinition, ArrayBufferLikeFieldType } from './array-buffer';
2
- export interface FixedLengthArrayBufferLikeFieldOptions {
3
- length: number;
4
- }
5
- export declare class FixedLengthArrayBufferLikeFieldDefinition<TType extends ArrayBufferLikeFieldType = ArrayBufferLikeFieldType, TOptions extends FixedLengthArrayBufferLikeFieldOptions = FixedLengthArrayBufferLikeFieldOptions> extends ArrayBufferLikeFieldDefinition<TType, TOptions> {
6
- getSize(): number;
7
- }
8
- //# sourceMappingURL=fixed-length-array-buffer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fixed-length-array-buffer.d.ts","sourceRoot":"","sources":["../../src/types/fixed-length-array-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1F,MAAM,WAAW,sCAAsC;IACnD,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,yCAAyC,CAClD,KAAK,SAAS,wBAAwB,GAAG,wBAAwB,EACjE,QAAQ,SAAS,sCAAsC,GAAG,sCAAsC,CAC9F,SAAQ,8BAA8B,CACxC,KAAK,EACL,QAAQ,CACP;IACM,OAAO,IAAI,MAAM;CAG3B"}
@@ -1,5 +0,0 @@
1
- export * from './array-buffer';
2
- export * from './fixed-length-array-buffer';
3
- export * from './number';
4
- export * from './variable-length-array-buffer';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,UAAU,CAAC;AACzB,cAAc,gCAAgC,CAAC"}
@@ -1,33 +0,0 @@
1
- import { StructDeserializationContext, StructFieldDefinition, StructFieldValue, StructOptions, StructSerializationContext, StructValue } from '../basic';
2
- export declare type DataViewGetters = {
3
- [TKey in keyof DataView]: TKey extends `get${string}` ? TKey : never;
4
- }[keyof DataView];
5
- export declare type DataViewSetters = {
6
- [TKey in keyof DataView]: TKey extends `set${string}` ? TKey : never;
7
- }[keyof DataView];
8
- export declare class NumberFieldType<TTypeScriptType extends number | bigint = number | bigint> {
9
- readonly TTypeScriptType: TTypeScriptType;
10
- readonly size: number;
11
- readonly dataViewGetter: DataViewGetters;
12
- readonly dataViewSetter: DataViewSetters;
13
- constructor(size: number, dataViewGetter: DataViewGetters, dataViewSetter: DataViewSetters);
14
- static readonly Int8: NumberFieldType<number>;
15
- static readonly Uint8: NumberFieldType<number>;
16
- static readonly Int16: NumberFieldType<number>;
17
- static readonly Uint16: NumberFieldType<number>;
18
- static readonly Int32: NumberFieldType<number>;
19
- static readonly Uint32: NumberFieldType<number>;
20
- static readonly Int64: NumberFieldType<bigint>;
21
- static readonly Uint64: NumberFieldType<bigint>;
22
- }
23
- export declare class NumberFieldDefinition<TType extends NumberFieldType = NumberFieldType, TTypeScriptType = TType['TTypeScriptType']> extends StructFieldDefinition<void, TTypeScriptType> {
24
- readonly type: TType;
25
- constructor(type: TType, _typescriptType?: TTypeScriptType);
26
- getSize(): number;
27
- create(options: Readonly<StructOptions>, context: StructSerializationContext, struct: StructValue, value: TTypeScriptType): NumberFieldValue<this>;
28
- deserialize(options: Readonly<StructOptions>, context: StructDeserializationContext, struct: StructValue): Promise<NumberFieldValue<this>>;
29
- }
30
- export declare class NumberFieldValue<TDefinition extends NumberFieldDefinition<NumberFieldType, any>> extends StructFieldValue<TDefinition> {
31
- serialize(dataView: DataView, offset: number): void;
32
- }
33
- //# sourceMappingURL=number.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/types/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,aAAa,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEzJ,oBAAY,eAAe,GACvB;KAAG,IAAI,IAAI,MAAM,QAAQ,GAAG,IAAI,SAAS,MAAM,MAAM,EAAE,GAAG,IAAI,GAAG,KAAK;CAAE,CAAC,MAAM,QAAQ,CAAC,CAAC;AAE7F,oBAAY,eAAe,GACvB;KAAG,IAAI,IAAI,MAAM,QAAQ,GAAG,IAAI,SAAS,MAAM,MAAM,EAAE,GAAG,IAAI,GAAG,KAAK;CAAE,CAAC,MAAM,QAAQ,CAAC,CAAC;AAE7F,qBAAa,eAAe,CAAC,eAAe,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM;IAClF,SAAgB,eAAe,EAAG,eAAe,CAAC;IAElD,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,SAAgB,cAAc,EAAE,eAAe,CAAC;IAEhD,SAAgB,cAAc,EAAE,eAAe,CAAC;gBAG5C,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,eAAe,EAC/B,cAAc,EAAE,eAAe;IAOnC,gBAAuB,IAAI,0BAAwD;IAEnF,gBAAuB,KAAK,0BAA0D;IAEtF,gBAAuB,KAAK,0BAA0D;IAEtF,gBAAuB,MAAM,0BAA4D;IAEzF,gBAAuB,KAAK,0BAA0D;IAEtF,gBAAuB,MAAM,0BAA4D;IAEzF,gBAAuB,KAAK,0BAAgE;IAE5F,gBAAuB,MAAM,0BAAkE;CAClG;AAED,qBAAa,qBAAqB,CAC9B,KAAK,SAAS,eAAe,GAAG,eAAe,EAC/C,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC,CACxC,SAAQ,qBAAqB,CAC/B,IAAI,EACJ,eAAe,CACd;IACD,SAAgB,IAAI,EAAE,KAAK,CAAC;gBAET,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,eAAe;IAK1D,OAAO,IAAI,MAAM;IAIjB,MAAM,CACT,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,OAAO,EAAE,0BAA0B,EACnC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,GACvB,gBAAgB,CAAC,IAAI,CAAC;IAIZ,WAAW,CACpB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,OAAO,EAAE,4BAA4B,EACrC,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;CASrC;AAED,qBAAa,gBAAgB,CACzB,WAAW,SAAS,qBAAqB,CAAC,eAAe,EAAE,GAAG,CAAC,CAC7D,SAAQ,gBAAgB,CAAC,WAAW,CAAC;IAChC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAU7D"}
@@ -1,32 +0,0 @@
1
- import { StructFieldDefinition, StructFieldValue, StructOptions, StructSerializationContext, StructValue } from '../basic';
2
- import type { KeysOfType } from '../utils';
3
- import { ArrayBufferLikeFieldDefinition, ArrayBufferLikeFieldType, ArrayBufferLikeFieldValue } from './array-buffer';
4
- export declare type LengthField<TFields> = KeysOfType<TFields, number | string>;
5
- export interface VariableLengthArrayBufferLikeFieldOptions<TFields = object, TLengthField extends LengthField<TFields> = any> {
6
- lengthField: TLengthField;
7
- lengthFieldBase?: number;
8
- }
9
- export declare class VariableLengthArrayBufferLikeFieldDefinition<TType extends ArrayBufferLikeFieldType = ArrayBufferLikeFieldType, TOptions extends VariableLengthArrayBufferLikeFieldOptions = VariableLengthArrayBufferLikeFieldOptions> extends ArrayBufferLikeFieldDefinition<TType, TOptions, TOptions['lengthField']> {
10
- getSize(): number;
11
- protected getDeserializeSize(struct: StructValue): number;
12
- create(options: Readonly<StructOptions>, context: StructSerializationContext, struct: StructValue, value: TType['TTypeScriptType'], arrayBuffer?: ArrayBuffer): VariableLengthArrayBufferLikeStructFieldValue<this>;
13
- }
14
- export declare class VariableLengthArrayBufferLikeStructFieldValue<TDefinition extends VariableLengthArrayBufferLikeFieldDefinition = VariableLengthArrayBufferLikeFieldDefinition> extends ArrayBufferLikeFieldValue<TDefinition> {
15
- protected length: number | undefined;
16
- protected lengthFieldValue: VariableLengthArrayBufferLikeFieldLengthValue;
17
- constructor(definition: TDefinition, options: Readonly<StructOptions>, context: StructSerializationContext, struct: StructValue, value: TDefinition['TValue'], arrayBuffer?: ArrayBuffer);
18
- getSize(): number;
19
- set(value: unknown): void;
20
- }
21
- declare type VariableLengthArrayBufferLikeFieldValueLike = StructFieldValue<StructFieldDefinition<VariableLengthArrayBufferLikeFieldOptions, any, any>>;
22
- export declare class VariableLengthArrayBufferLikeFieldLengthValue extends StructFieldValue {
23
- protected originalField: StructFieldValue;
24
- protected arrayBufferField: VariableLengthArrayBufferLikeFieldValueLike;
25
- constructor(originalField: StructFieldValue, arrayBufferField: VariableLengthArrayBufferLikeFieldValueLike);
26
- getSize(): number;
27
- get(): string | number;
28
- set(): void;
29
- serialize(dataView: DataView, offset: number, context: StructSerializationContext): void;
30
- }
31
- export {};
32
- //# sourceMappingURL=variable-length-array-buffer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"variable-length-array-buffer.d.ts","sourceRoot":"","sources":["../../src/types/variable-length-array-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,aAAa,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC3H,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAErH,oBAAY,WAAW,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,yCAAyC,CACtD,OAAO,GAAG,MAAM,EAChB,YAAY,SAAS,WAAW,CAAC,OAAO,CAAC,GAAG,GAAG;IAE/C,WAAW,EAAE,YAAY,CAAC;IAE1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,4CAA4C,CACrD,KAAK,SAAS,wBAAwB,GAAG,wBAAwB,EACjE,QAAQ,SAAS,yCAAyC,GAAG,yCAAyC,CACpG,SAAQ,8BAA8B,CACxC,KAAK,EACL,QAAQ,EACR,QAAQ,CAAC,aAAa,CAAC,CACtB;IACM,OAAO,IAAI,MAAM;IAIxB,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW;IAQzC,MAAM,CACT,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,OAAO,EAAE,0BAA0B,EACnC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAC/B,WAAW,CAAC,EAAE,WAAW,GAC1B,6CAA6C,CAAC,IAAI,CAAC;CAUzD;AAED,qBAAa,6CAA6C,CACtD,WAAW,SAAS,4CAA4C,GAAG,4CAA4C,CAC7G,SAAQ,yBAAyB,CAAC,WAAW,CAAC;IAChD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC,SAAS,CAAC,gBAAgB,EAAE,6CAA6C,CAAC;gBAGtE,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,OAAO,EAAE,0BAA0B,EACnC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC5B,WAAW,CAAC,EAAE,WAAW;IAmBtB,OAAO;IAYP,GAAG,CAAC,KAAK,EAAE,OAAO;CAK5B;AAGD,aAAK,2CAA2C,GAC5C,gBAAgB,CAAC,qBAAqB,CAAC,yCAAyC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAEjG,qBAAa,6CACT,SAAQ,gBAAgB;IACxB,SAAS,CAAC,aAAa,EAAE,gBAAgB,CAAC;IAE1C,SAAS,CAAC,gBAAgB,EAAE,2CAA2C,CAAC;gBAGpE,aAAa,EAAE,gBAAgB,EAC/B,gBAAgB,EAAE,2CAA2C;IAO1D,OAAO;IAId,GAAG;IAWH,GAAG;IAEH,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B;CAIpF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/basic/context.ts"],"names":[],"mappings":"AAuCA,MAAM,CAAC,MAAM,oBAAoB,GAA4B;IACzD,YAAY,EAAE,KAAK;CACtB,CAAC"}
@@ -1,109 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { StructFieldDefinition, StructFieldValue } from '../basic';
3
- /**
4
- * Base class for all types that
5
- * can be converted from an ArrayBuffer when deserialized,
6
- * and need to be converted to an ArrayBuffer when serializing
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.
11
- */
12
- export class ArrayBufferLikeFieldType {
13
- }
14
- /** An ArrayBufferLike type that's actually an `ArrayBuffer` */
15
- export class ArrayBufferFieldType extends ArrayBufferLikeFieldType {
16
- constructor() {
17
- super();
18
- }
19
- toArrayBuffer(value) {
20
- return value;
21
- }
22
- fromArrayBuffer(arrayBuffer) {
23
- return arrayBuffer;
24
- }
25
- getSize(value) {
26
- return value.byteLength;
27
- }
28
- }
29
- ArrayBufferFieldType.instance = new ArrayBufferFieldType();
30
- /** Am ArrayBufferLike type that converts between `ArrayBuffer` and `Uint8ClampedArray` */
31
- export class Uint8ClampedArrayFieldType extends ArrayBufferLikeFieldType {
32
- constructor() {
33
- super();
34
- }
35
- toArrayBuffer(value) {
36
- return value.buffer;
37
- }
38
- fromArrayBuffer(arrayBuffer) {
39
- return new Uint8ClampedArray(arrayBuffer);
40
- }
41
- getSize(value) {
42
- return value.byteLength;
43
- }
44
- }
45
- Uint8ClampedArrayFieldType.instance = new Uint8ClampedArrayFieldType();
46
- /** Am ArrayBufferLike type that converts between `ArrayBuffer` and `string` */
47
- export class StringFieldType extends ArrayBufferLikeFieldType {
48
- toArrayBuffer(value, context) {
49
- return context.encodeUtf8(value);
50
- }
51
- fromArrayBuffer(arrayBuffer, context) {
52
- return context.decodeUtf8(arrayBuffer);
53
- }
54
- getSize() {
55
- // Return `-1`, so `ArrayBufferLikeFieldDefinition` will
56
- // convert this `value` into an `ArrayBuffer` (and cache the result),
57
- // Then get the size from that `ArrayBuffer`
58
- return -1;
59
- }
60
- }
61
- StringFieldType.instance = new StringFieldType();
62
- const EmptyArrayBuffer = new ArrayBuffer(0);
63
- export class ArrayBufferLikeFieldDefinition extends StructFieldDefinition {
64
- constructor(type, options) {
65
- super(options);
66
- this.type = type;
67
- }
68
- getDeserializeSize(struct) {
69
- return this.getSize();
70
- }
71
- /**
72
- * When implemented in derived classes, creates a `StructFieldValue` for the current field definition.
73
- */
74
- create(options, context, struct, value, arrayBuffer) {
75
- return new ArrayBufferLikeFieldValue(this, options, context, struct, value, arrayBuffer);
76
- }
77
- deserialize(options, context, struct) {
78
- return __awaiter(this, void 0, void 0, function* () {
79
- const size = this.getDeserializeSize(struct);
80
- let arrayBuffer;
81
- if (size === 0) {
82
- arrayBuffer = EmptyArrayBuffer;
83
- }
84
- else {
85
- arrayBuffer = yield context.read(size);
86
- }
87
- const value = this.type.fromArrayBuffer(arrayBuffer, context);
88
- return this.create(options, context, struct, value, arrayBuffer);
89
- });
90
- }
91
- }
92
- export class ArrayBufferLikeFieldValue extends StructFieldValue {
93
- constructor(definition, options, context, struct, value, arrayBuffer) {
94
- super(definition, options, context, struct, value);
95
- this.arrayBuffer = arrayBuffer;
96
- }
97
- set(value) {
98
- super.set(value);
99
- this.arrayBuffer = undefined;
100
- }
101
- serialize(dataView, offset, context) {
102
- if (!this.arrayBuffer) {
103
- this.arrayBuffer = this.definition.type.toArrayBuffer(this.value, context);
104
- }
105
- new Uint8Array(dataView.buffer)
106
- .set(new Uint8Array(this.arrayBuffer), offset);
107
- }
108
- }
109
- //# sourceMappingURL=array-buffer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"array-buffer.js","sourceRoot":"","sources":["../../src/types/array-buffer.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import { ArrayBufferLikeFieldDefinition } from './array-buffer';
2
- export class FixedLengthArrayBufferLikeFieldDefinition extends ArrayBufferLikeFieldDefinition {
3
- getSize() {
4
- return this.options.length;
5
- }
6
- }
7
- ;
8
- //# sourceMappingURL=fixed-length-array-buffer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fixed-length-array-buffer.js","sourceRoot":"","sources":["../../src/types/fixed-length-array-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAA4B,MAAM,gBAAgB,CAAC;AAM1F,MAAM,OAAO,yCAGP,SAAQ,8BAGT;IACM,OAAO;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;CACJ;AAAA,CAAC"}
@@ -1,71 +0,0 @@
1
- import { StructFieldValue } from '../basic';
2
- import { ArrayBufferLikeFieldDefinition, ArrayBufferLikeFieldValue } from './array-buffer';
3
- export class VariableLengthArrayBufferLikeFieldDefinition extends ArrayBufferLikeFieldDefinition {
4
- getSize() {
5
- return 0;
6
- }
7
- getDeserializeSize(struct) {
8
- var _a;
9
- let value = struct.value[this.options.lengthField];
10
- if (typeof value === 'string') {
11
- value = Number.parseInt(value, (_a = this.options.lengthFieldBase) !== null && _a !== void 0 ? _a : 10);
12
- }
13
- return value;
14
- }
15
- create(options, context, struct, value, arrayBuffer) {
16
- return new VariableLengthArrayBufferLikeStructFieldValue(this, options, context, struct, value, arrayBuffer);
17
- }
18
- }
19
- export class VariableLengthArrayBufferLikeStructFieldValue extends ArrayBufferLikeFieldValue {
20
- constructor(definition, options, context, struct, value, arrayBuffer) {
21
- super(definition, options, context, struct, value, arrayBuffer);
22
- if (arrayBuffer) {
23
- this.length = arrayBuffer.byteLength;
24
- }
25
- // Patch the associated length field.
26
- const lengthField = this.definition.options.lengthField;
27
- const originalValue = struct.get(lengthField);
28
- this.lengthFieldValue = new VariableLengthArrayBufferLikeFieldLengthValue(originalValue, this);
29
- struct.set(lengthField, this.lengthFieldValue);
30
- }
31
- getSize() {
32
- if (this.length === undefined) {
33
- this.length = this.definition.type.getSize(this.value);
34
- if (this.length === -1) {
35
- this.arrayBuffer = this.definition.type.toArrayBuffer(this.value, this.context);
36
- this.length = this.arrayBuffer.byteLength;
37
- }
38
- }
39
- return this.length;
40
- }
41
- set(value) {
42
- super.set(value);
43
- this.arrayBuffer = undefined;
44
- this.length = undefined;
45
- }
46
- }
47
- export class VariableLengthArrayBufferLikeFieldLengthValue extends StructFieldValue {
48
- constructor(originalField, arrayBufferField) {
49
- super(originalField.definition, originalField.options, originalField.context, originalField.struct, 0);
50
- this.originalField = originalField;
51
- this.arrayBufferField = arrayBufferField;
52
- }
53
- getSize() {
54
- return this.originalField.getSize();
55
- }
56
- get() {
57
- var _a;
58
- let value = this.arrayBufferField.getSize();
59
- const originalValue = this.originalField.get();
60
- if (typeof originalValue === 'string') {
61
- value = value.toString((_a = this.arrayBufferField.definition.options.lengthFieldBase) !== null && _a !== void 0 ? _a : 10);
62
- }
63
- return value;
64
- }
65
- set() { }
66
- serialize(dataView, offset, context) {
67
- this.originalField.set(this.get());
68
- this.originalField.serialize(dataView, offset, context);
69
- }
70
- }
71
- //# sourceMappingURL=variable-length-array-buffer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"variable-length-array-buffer.js","sourceRoot":"","sources":["../../src/types/variable-length-array-buffer.ts"],"names":[],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- import type { ValueOrPromise } from '../utils';
2
-
3
- /**
4
- * Context with enough methods to serialize a struct
5
- */
6
- export interface StructSerializationContext {
7
- /**
8
- * Encode the specified string into an ArrayBuffer using UTF-8 encoding
9
- */
10
- encodeUtf8(input: string): ArrayBuffer;
11
- }
12
-
13
- /**
14
- * Context with enough methods to deserialize a struct
15
- */
16
- export interface StructDeserializationContext extends StructSerializationContext {
17
- /**
18
- * Decode the specified `ArrayBuffer` using UTF-8 encoding
19
- */
20
- decodeUtf8(buffer: ArrayBuffer): string;
21
-
22
- /**
23
- * Read data from the underlying data source.
24
- *
25
- * Context should return exactly `length` bytes or data. If that's not possible
26
- * (due to end of file or other error condition), it should throw an error.
27
- */
28
- read(length: number): ValueOrPromise<ArrayBuffer>;
29
- }
30
-
31
- export interface StructOptions {
32
- /**
33
- * Whether all multi-byte fields in this struct are little-endian encoded.
34
- *
35
- * Default to `false`
36
- */
37
- littleEndian: boolean;
38
- }
39
-
40
- export const StructDefaultOptions: Readonly<StructOptions> = {
41
- littleEndian: false,
42
- };
@@ -1,184 +0,0 @@
1
- import { StructDeserializationContext, StructFieldDefinition, StructFieldValue, StructOptions, StructSerializationContext, StructValue } from '../basic';
2
-
3
- /**
4
- * Base class for all types that
5
- * can be converted from an ArrayBuffer when deserialized,
6
- * and need to be converted to an ArrayBuffer when serializing
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.
11
- */
12
- export abstract class ArrayBufferLikeFieldType<TValue = unknown, TTypeScriptType = TValue> {
13
- public readonly TTypeScriptType!: TTypeScriptType;
14
-
15
- /**
16
- * When implemented in derived classes, converts the type-specific `value` to an `ArrayBuffer`
17
- *
18
- * This function should be "pure", i.e.,
19
- * same `value` should always be converted to `ArrayBuffer`s that have same content.
20
- */
21
- public abstract toArrayBuffer(value: TValue, context: StructSerializationContext): ArrayBuffer;
22
-
23
- /** When implemented in derived classes, converts the `ArrayBuffer` to a type-specific value */
24
- public abstract fromArrayBuffer(arrayBuffer: ArrayBuffer, context: StructDeserializationContext): TValue;
25
-
26
- /**
27
- * When implemented in derived classes, gets the size in byte of the type-specific `value`.
28
- *
29
- * If the size can't be calculated without first converting the `value` back to an `ArrayBuffer`,
30
- * implementer should returns `-1` so the caller will get its size by first converting it to
31
- * an `ArrayBuffer` (and cache the result).
32
- */
33
- public abstract getSize(value: TValue): number;
34
- }
35
-
36
- /** An ArrayBufferLike type that's actually an `ArrayBuffer` */
37
- export class ArrayBufferFieldType extends ArrayBufferLikeFieldType<ArrayBuffer> {
38
- public static readonly instance = new ArrayBufferFieldType();
39
-
40
- protected constructor() {
41
- super();
42
- }
43
-
44
- public toArrayBuffer(value: ArrayBuffer): ArrayBuffer {
45
- return value;
46
- }
47
-
48
- public fromArrayBuffer(arrayBuffer: ArrayBuffer): ArrayBuffer {
49
- return arrayBuffer;
50
- }
51
-
52
- public getSize(value: ArrayBuffer): number {
53
- return value.byteLength;
54
- }
55
- }
56
-
57
- /** Am ArrayBufferLike type that converts between `ArrayBuffer` and `Uint8ClampedArray` */
58
- export class Uint8ClampedArrayFieldType
59
- extends ArrayBufferLikeFieldType<Uint8ClampedArray, Uint8ClampedArray> {
60
- public static readonly instance = new Uint8ClampedArrayFieldType();
61
-
62
- protected constructor() {
63
- super();
64
- }
65
-
66
- public toArrayBuffer(value: Uint8ClampedArray): ArrayBuffer {
67
- return value.buffer;
68
- }
69
-
70
- public fromArrayBuffer(arrayBuffer: ArrayBuffer): Uint8ClampedArray {
71
- return new Uint8ClampedArray(arrayBuffer);
72
- }
73
-
74
- public getSize(value: Uint8ClampedArray): number {
75
- return value.byteLength;
76
- }
77
- }
78
-
79
- /** Am ArrayBufferLike type that converts between `ArrayBuffer` and `string` */
80
- export class StringFieldType<TTypeScriptType = string>
81
- extends ArrayBufferLikeFieldType<string, TTypeScriptType> {
82
- public static readonly instance = new StringFieldType();
83
-
84
- public toArrayBuffer(value: string, context: StructSerializationContext): ArrayBuffer {
85
- return context.encodeUtf8(value);
86
- }
87
-
88
- public fromArrayBuffer(arrayBuffer: ArrayBuffer, context: StructDeserializationContext): string {
89
- return context.decodeUtf8(arrayBuffer);
90
- }
91
-
92
- public getSize(): number {
93
- // Return `-1`, so `ArrayBufferLikeFieldDefinition` will
94
- // convert this `value` into an `ArrayBuffer` (and cache the result),
95
- // Then get the size from that `ArrayBuffer`
96
- return -1;
97
- }
98
- }
99
-
100
- const EmptyArrayBuffer = new ArrayBuffer(0);
101
-
102
- export abstract class ArrayBufferLikeFieldDefinition<
103
- TType extends ArrayBufferLikeFieldType = ArrayBufferLikeFieldType,
104
- TOptions = void,
105
- TOmitInitKey extends PropertyKey = never,
106
- > extends StructFieldDefinition<
107
- TOptions,
108
- TType['TTypeScriptType'],
109
- TOmitInitKey
110
- >{
111
- public readonly type: TType;
112
-
113
- public constructor(type: TType, options: TOptions) {
114
- super(options);
115
- this.type = type;
116
- }
117
-
118
- protected getDeserializeSize(struct: StructValue): number {
119
- return this.getSize();
120
- }
121
-
122
- /**
123
- * When implemented in derived classes, creates a `StructFieldValue` for the current field definition.
124
- */
125
- public create(
126
- options: Readonly<StructOptions>,
127
- context: StructSerializationContext,
128
- struct: StructValue,
129
- value: TType['TTypeScriptType'],
130
- arrayBuffer?: ArrayBuffer,
131
- ): ArrayBufferLikeFieldValue<this> {
132
- return new ArrayBufferLikeFieldValue(this, options, context, struct, value, arrayBuffer);
133
- }
134
-
135
- public async deserialize(
136
- options: Readonly<StructOptions>,
137
- context: StructDeserializationContext,
138
- struct: StructValue,
139
- ): Promise<ArrayBufferLikeFieldValue<this>> {
140
- const size = this.getDeserializeSize(struct);
141
-
142
- let arrayBuffer: ArrayBuffer;
143
- if (size === 0) {
144
- arrayBuffer = EmptyArrayBuffer;
145
- } else {
146
- arrayBuffer = await context.read(size);
147
- }
148
-
149
- const value = this.type.fromArrayBuffer(arrayBuffer, context);
150
- return this.create(options, context, struct, value, arrayBuffer);
151
- }
152
- }
153
-
154
- export class ArrayBufferLikeFieldValue<
155
- TDefinition extends ArrayBufferLikeFieldDefinition<ArrayBufferLikeFieldType, any, any>,
156
- > extends StructFieldValue<TDefinition> {
157
- protected arrayBuffer: ArrayBuffer | undefined;
158
-
159
- public constructor(
160
- definition: TDefinition,
161
- options: Readonly<StructOptions>,
162
- context: StructSerializationContext,
163
- struct: StructValue,
164
- value: TDefinition['TValue'],
165
- arrayBuffer?: ArrayBuffer,
166
- ) {
167
- super(definition, options, context, struct, value);
168
- this.arrayBuffer = arrayBuffer;
169
- }
170
-
171
- public set(value: TDefinition['TValue']): void {
172
- super.set(value);
173
- this.arrayBuffer = undefined;
174
- }
175
-
176
- public serialize(dataView: DataView, offset: number, context: StructSerializationContext): void {
177
- if (!this.arrayBuffer) {
178
- this.arrayBuffer = this.definition.type.toArrayBuffer(this.value, context);
179
- }
180
-
181
- new Uint8Array(dataView.buffer)
182
- .set(new Uint8Array(this.arrayBuffer), offset);
183
- }
184
- }