@yume-chan/struct 0.0.5 → 0.0.10

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 (121) hide show
  1. package/CHANGELOG.json +23 -0
  2. package/CHANGELOG.md +16 -0
  3. package/LICENSE +21 -21
  4. package/README.md +720 -643
  5. package/dts/basic/context.d.ts +10 -17
  6. package/dts/basic/context.d.ts.map +1 -1
  7. package/dts/basic/definition.d.ts +23 -23
  8. package/dts/basic/definition.d.ts.map +1 -1
  9. package/dts/basic/field-value.d.ts +38 -0
  10. package/dts/basic/field-value.d.ts.map +1 -0
  11. package/dts/basic/index.d.ts +2 -2
  12. package/dts/basic/index.d.ts.map +1 -1
  13. package/dts/basic/struct-value.d.ts +24 -0
  14. package/dts/basic/struct-value.d.ts.map +1 -0
  15. package/dts/index.d.ts +1 -0
  16. package/dts/index.d.ts.map +1 -1
  17. package/dts/struct.d.ts +44 -47
  18. package/dts/struct.d.ts.map +1 -1
  19. package/dts/syncbird.d.ts +20 -0
  20. package/dts/syncbird.d.ts.map +1 -0
  21. package/dts/types/array-buffer.d.ts +22 -20
  22. package/dts/types/array-buffer.d.ts.map +1 -1
  23. package/dts/types/fixed-length-array-buffer.d.ts +1 -3
  24. package/dts/types/fixed-length-array-buffer.d.ts.map +1 -1
  25. package/dts/types/index.d.ts +0 -1
  26. package/dts/types/index.d.ts.map +1 -1
  27. package/dts/types/number.d.ts +11 -10
  28. package/dts/types/number.d.ts.map +1 -1
  29. package/dts/types/variable-length-array-buffer.d.ts +21 -19
  30. package/dts/types/variable-length-array-buffer.d.ts.map +1 -1
  31. package/dts/{types/utils.d.ts → utils.d.ts} +3 -0
  32. package/dts/utils.d.ts.map +1 -0
  33. package/esm/basic/context.js +1 -1
  34. package/esm/basic/context.js.map +1 -1
  35. package/esm/basic/definition.js +9 -11
  36. package/esm/basic/definition.js.map +1 -1
  37. package/esm/basic/field-value.js +35 -0
  38. package/esm/basic/field-value.js.map +1 -0
  39. package/esm/basic/index.js +2 -2
  40. package/esm/basic/index.js.map +1 -1
  41. package/esm/basic/struct-value.js +36 -0
  42. package/esm/basic/struct-value.js.map +1 -0
  43. package/esm/index.js +1 -0
  44. package/esm/index.js.map +1 -1
  45. package/esm/struct.js +103 -176
  46. package/esm/struct.js.map +1 -1
  47. package/esm/syncbird.js +25 -0
  48. package/esm/syncbird.js.map +1 -0
  49. package/esm/types/array-buffer.js +83 -107
  50. package/esm/types/array-buffer.js.map +1 -1
  51. package/esm/types/fixed-length-array-buffer.js +5 -15
  52. package/esm/types/fixed-length-array-buffer.js.map +1 -1
  53. package/esm/types/index.js +0 -1
  54. package/esm/types/index.js.map +1 -1
  55. package/esm/types/number.js +35 -53
  56. package/esm/types/number.js.map +1 -1
  57. package/esm/types/variable-length-array-buffer.js +57 -68
  58. package/esm/types/variable-length-array-buffer.js.map +1 -1
  59. package/esm/utils.js +17 -0
  60. package/esm/utils.js.map +1 -0
  61. package/package.json +47 -50
  62. package/src/basic/context.ts +32 -40
  63. package/src/basic/definition.ts +72 -69
  64. package/src/basic/{runtime-value.ts → field-value.ts} +67 -72
  65. package/src/basic/index.ts +4 -4
  66. package/src/basic/struct-value.ts +39 -0
  67. package/src/index.ts +5 -4
  68. package/src/struct.ts +595 -579
  69. package/src/syncbird.ts +53 -0
  70. package/src/types/array-buffer.ts +194 -171
  71. package/src/types/fixed-length-array-buffer.ts +17 -27
  72. package/src/types/index.ts +4 -5
  73. package/src/types/number.ts +114 -101
  74. package/src/types/variable-length-array-buffer.ts +142 -121
  75. package/src/{types/utils.ts → utils.ts} +62 -47
  76. package/cjs/basic/context.js +0 -7
  77. package/cjs/basic/context.js.map +0 -1
  78. package/cjs/basic/definition.js +0 -26
  79. package/cjs/basic/definition.js.map +0 -1
  80. package/cjs/basic/index.js +0 -8
  81. package/cjs/basic/index.js.map +0 -1
  82. package/cjs/basic/runtime-object.js +0 -34
  83. package/cjs/basic/runtime-object.js.map +0 -1
  84. package/cjs/basic/runtime-value.js +0 -41
  85. package/cjs/basic/runtime-value.js.map +0 -1
  86. package/cjs/index.js +0 -10
  87. package/cjs/index.js.map +0 -1
  88. package/cjs/struct.js +0 -259
  89. package/cjs/struct.js.map +0 -1
  90. package/cjs/types/array-buffer.js +0 -137
  91. package/cjs/types/array-buffer.js.map +0 -1
  92. package/cjs/types/fixed-length-array-buffer.js +0 -21
  93. package/cjs/types/fixed-length-array-buffer.js.map +0 -1
  94. package/cjs/types/index.js +0 -9
  95. package/cjs/types/index.js.map +0 -1
  96. package/cjs/types/number.js +0 -68
  97. package/cjs/types/number.js.map +0 -1
  98. package/cjs/types/utils.js +0 -11
  99. package/cjs/types/utils.js.map +0 -1
  100. package/cjs/types/variable-length-array-buffer.js +0 -85
  101. package/cjs/types/variable-length-array-buffer.js.map +0 -1
  102. package/dts/basic/runtime-object.d.ts +0 -17
  103. package/dts/basic/runtime-object.d.ts.map +0 -1
  104. package/dts/basic/runtime-value.d.ts +0 -39
  105. package/dts/basic/runtime-value.d.ts.map +0 -1
  106. package/dts/types/utils.d.ts.map +0 -1
  107. package/esm/basic/runtime-object.js +0 -28
  108. package/esm/basic/runtime-object.js.map +0 -1
  109. package/esm/basic/runtime-value.js +0 -38
  110. package/esm/basic/runtime-value.js.map +0 -1
  111. package/esm/types/utils.js +0 -7
  112. package/esm/types/utils.js.map +0 -1
  113. package/src/basic/context.spec.ts +0 -9
  114. package/src/basic/definition.spec.ts +0 -26
  115. package/src/basic/runtime-object.spec.ts +0 -38
  116. package/src/basic/runtime-object.ts +0 -36
  117. package/src/basic/runtime-value.spec.ts +0 -71
  118. package/src/types/array-buffer.spec.ts +0 -88
  119. package/src/types/number.spec.ts +0 -262
  120. package/tsconfig.cjs.json +0 -11
  121. package/tsconfig.esm.json +0 -15
@@ -0,0 +1,53 @@
1
+ import Bluebird from 'bluebird';
2
+
3
+ type Resolvable<R> = R | PromiseLike<R>;
4
+
5
+ export interface Syncbird<R> extends Bluebird<R> {
6
+ valueOrPromise(): R | PromiseLike<R>;
7
+
8
+ then<U>(onFulfill?: (value: R) => Resolvable<U>, onReject?: (error: any) => Resolvable<U>): Syncbird<U>; // For simpler signature help.
9
+ then<TResult1 = R, TResult2 = never>(
10
+ onfulfilled?: ((value: R) => Resolvable<TResult1>) | null,
11
+ onrejected?: ((reason: any) => Resolvable<TResult2>) | null
12
+ ): Syncbird<TResult1 | TResult2>;
13
+ }
14
+
15
+ interface SyncbirdStatic {
16
+ /**
17
+ * Create a promise that is resolved with the given `value`. If `value` is a thenable or promise, the returned promise will assume its state.
18
+ */
19
+ resolve(): Syncbird<void>;
20
+ resolve<R>(value: Resolvable<R>): Syncbird<R>;
21
+
22
+ try<R>(fn: () => Resolvable<R>): Syncbird<R>;
23
+ attempt<R>(fn: () => Resolvable<R>): Syncbird<R>;
24
+
25
+ new <R>(callback: (resolve: (thenableOrResult?: Resolvable<R>) => void, reject: (error?: any) => void, onCancel?: (callback: () => void) => void) => void): Syncbird<R>;
26
+ }
27
+
28
+ export const Syncbird: SyncbirdStatic = Bluebird.getNewLibraryCopy() as any;
29
+
30
+ const _then = Bluebird.prototype.then;
31
+ Syncbird.prototype.then = function <T, TResult1 = T, TResult2 = never>(
32
+ this: Bluebird<T>,
33
+ onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,
34
+ onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null
35
+ ): Syncbird<TResult1 | TResult2> {
36
+ if (this.isFulfilled()) {
37
+ if (!onfulfilled) {
38
+ return this as unknown as Syncbird<TResult1>;
39
+ } else {
40
+ return Syncbird.resolve(onfulfilled(this.value())) as Syncbird<TResult1 | TResult2>;
41
+ }
42
+ } else {
43
+ return _then.call(this, onfulfilled, onrejected) as Syncbird<TResult1 | TResult2>;
44
+ }
45
+ };
46
+
47
+ (Syncbird.prototype as any).valueOrPromise = function <T>(this: Bluebird<T>): T | PromiseLike<T> {
48
+ if (this.isFulfilled()) {
49
+ return this.value();
50
+ } else {
51
+ return this as Promise<T>;
52
+ }
53
+ };
@@ -1,171 +1,194 @@
1
- import { FieldDefinition, FieldRuntimeValue, StructDeserializationContext, StructOptions, StructSerializationContext } 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 TType 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<TType = unknown, TTypeScriptType = TType> {
13
- public readonly valueType!: 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: TType, 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): TType;
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: TType): 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 to/from the `ArrayBuffer` from/to a `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 to/from the `ArrayBuffer` from/to a `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
- TOmitInit = never,
106
- > extends FieldDefinition<
107
- TOptions,
108
- TType['valueType'],
109
- TOmitInit
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(object: any): number {
119
- return this.getSize();
120
- }
121
-
122
- public async deserialize(
123
- options: Readonly<StructOptions>,
124
- context: StructDeserializationContext,
125
- object: any,
126
- ): Promise<ArrayBufferLikeFieldRuntimeValue<ArrayBufferLikeFieldDefinition<TType, TOptions, TOmitInit>>> {
127
- const size = this.getDeserializeSize(object);
128
-
129
- let arrayBuffer: ArrayBuffer;
130
- if (size === 0) {
131
- arrayBuffer = EmptyArrayBuffer;
132
- } else {
133
- arrayBuffer = await context.read(size);
134
- }
135
-
136
- const value = this.type.fromArrayBuffer(arrayBuffer, context);
137
- const runtimeValue = this.createValue(options, context, object, value);
138
- runtimeValue.arrayBuffer = arrayBuffer;
139
- return runtimeValue;
140
- }
141
-
142
- /**
143
- * When implemented in derived classes, creates a `FieldRuntimeValue` for the current field definition.
144
- */
145
- public abstract createValue(
146
- options: Readonly<StructOptions>,
147
- context: StructSerializationContext,
148
- object: any,
149
- value: TType['valueType'],
150
- ): ArrayBufferLikeFieldRuntimeValue<ArrayBufferLikeFieldDefinition<TType, TOptions, TOmitInit>>;
151
- }
152
-
153
- export class ArrayBufferLikeFieldRuntimeValue<
154
- TDefinition extends ArrayBufferLikeFieldDefinition<any, any, any>,
155
- > extends FieldRuntimeValue<TDefinition> {
156
- public arrayBuffer: ArrayBuffer | undefined;
157
-
158
- public set(value: TDefinition['valueType']): void {
159
- super.set(value);
160
- this.arrayBuffer = undefined;
161
- }
162
-
163
- public serialize(dataView: DataView, offset: number, context: StructSerializationContext): void {
164
- if (!this.arrayBuffer) {
165
- this.arrayBuffer = this.definition.type.toArrayBuffer(this.value, context);
166
- }
167
-
168
- new Uint8Array(dataView.buffer)
169
- .set(new Uint8Array(this.arrayBuffer!), offset);
170
- }
171
- }
1
+ import { StructAsyncDeserializeStream, StructDeserializeStream, StructFieldDefinition, StructFieldValue, StructOptions, StructValue } from '../basic';
2
+ import { Syncbird } from "../syncbird";
3
+ import { decodeUtf8, encodeUtf8, ValueOrPromise } from "../utils";
4
+
5
+ /**
6
+ * Base class for all types that
7
+ * can be converted from an ArrayBuffer when deserialized,
8
+ * and need to be converted to an ArrayBuffer when serializing
9
+ *
10
+ * @template TValue The actual TypeScript type of this type
11
+ * @template TTypeScriptType Optional another type (should be compatible with `TType`)
12
+ * specified by user when creating field definitions.
13
+ */
14
+ export abstract class ArrayBufferLikeFieldType<TValue = unknown, TTypeScriptType = TValue> {
15
+ public readonly TTypeScriptType!: TTypeScriptType;
16
+
17
+ /**
18
+ * When implemented in derived classes, converts the type-specific `value` to an `ArrayBuffer`
19
+ *
20
+ * This function should be "pure", i.e.,
21
+ * same `value` should always be converted to `ArrayBuffer`s that have same content.
22
+ */
23
+ public abstract toArrayBuffer(value: TValue): ArrayBuffer;
24
+
25
+ /** When implemented in derived classes, converts the `ArrayBuffer` to a type-specific value */
26
+ public abstract fromArrayBuffer(arrayBuffer: ArrayBuffer): TValue;
27
+
28
+ /**
29
+ * When implemented in derived classes, gets the size in byte of the type-specific `value`.
30
+ *
31
+ * If the size can't be calculated without first converting the `value` back to an `ArrayBuffer`,
32
+ * implementer should returns `-1` so the caller will get its size by first converting it to
33
+ * an `ArrayBuffer` (and cache the result).
34
+ */
35
+ public abstract getSize(value: TValue): number;
36
+ }
37
+
38
+ /** An ArrayBufferLike type that's actually an `ArrayBuffer` */
39
+ export class ArrayBufferFieldType extends ArrayBufferLikeFieldType<ArrayBuffer> {
40
+ public static readonly instance = new ArrayBufferFieldType();
41
+
42
+ protected constructor() {
43
+ super();
44
+ }
45
+
46
+ public toArrayBuffer(value: ArrayBuffer): ArrayBuffer {
47
+ return value;
48
+ }
49
+
50
+ public fromArrayBuffer(arrayBuffer: ArrayBuffer): ArrayBuffer {
51
+ return arrayBuffer;
52
+ }
53
+
54
+ public getSize(value: ArrayBuffer): number {
55
+ return value.byteLength;
56
+ }
57
+ }
58
+
59
+ /** Am ArrayBufferLike type that converts between `ArrayBuffer` and `Uint8ClampedArray` */
60
+ export class Uint8ClampedArrayFieldType
61
+ extends ArrayBufferLikeFieldType<Uint8ClampedArray, Uint8ClampedArray> {
62
+ public static readonly instance = new Uint8ClampedArrayFieldType();
63
+
64
+ protected constructor() {
65
+ super();
66
+ }
67
+
68
+ public toArrayBuffer(value: Uint8ClampedArray): ArrayBuffer {
69
+ return value.buffer;
70
+ }
71
+
72
+ public fromArrayBuffer(arrayBuffer: ArrayBuffer): Uint8ClampedArray {
73
+ return new Uint8ClampedArray(arrayBuffer);
74
+ }
75
+
76
+ public getSize(value: Uint8ClampedArray): number {
77
+ return value.byteLength;
78
+ }
79
+ }
80
+
81
+ /** An ArrayBufferLike type that converts between `ArrayBuffer` and `string` */
82
+ export class StringFieldType<TTypeScriptType = string>
83
+ extends ArrayBufferLikeFieldType<string, TTypeScriptType> {
84
+ public static readonly instance = new StringFieldType();
85
+
86
+ public toArrayBuffer(value: string): ArrayBuffer {
87
+ return encodeUtf8(value);
88
+ }
89
+
90
+ public fromArrayBuffer(arrayBuffer: ArrayBuffer): string {
91
+ return decodeUtf8(arrayBuffer);
92
+ }
93
+
94
+ public getSize(): number {
95
+ // Return `-1`, so `ArrayBufferLikeFieldDefinition` will
96
+ // convert this `value` into an `ArrayBuffer` (and cache the result),
97
+ // Then get the size from that `ArrayBuffer`
98
+ return -1;
99
+ }
100
+ }
101
+
102
+ const EmptyArrayBuffer = new ArrayBuffer(0);
103
+
104
+ export abstract class ArrayBufferLikeFieldDefinition<
105
+ TType extends ArrayBufferLikeFieldType<any, any> = ArrayBufferLikeFieldType<unknown, unknown>,
106
+ TOptions = void,
107
+ TOmitInitKey extends PropertyKey = never,
108
+ > extends StructFieldDefinition<
109
+ TOptions,
110
+ TType['TTypeScriptType'],
111
+ TOmitInitKey
112
+ >{
113
+ public readonly type: TType;
114
+
115
+ public constructor(type: TType, options: TOptions) {
116
+ super(options);
117
+ this.type = type;
118
+ }
119
+
120
+ protected getDeserializeSize(struct: StructValue): number {
121
+ return this.getSize();
122
+ }
123
+
124
+ /**
125
+ * When implemented in derived classes, creates a `StructFieldValue` for the current field definition.
126
+ */
127
+ public create(
128
+ options: Readonly<StructOptions>,
129
+ struct: StructValue,
130
+ value: TType['TTypeScriptType'],
131
+ arrayBuffer?: ArrayBuffer,
132
+ ): ArrayBufferLikeFieldValue<this> {
133
+ return new ArrayBufferLikeFieldValue(this, options, struct, value, arrayBuffer);
134
+ }
135
+
136
+ public override deserialize(
137
+ options: Readonly<StructOptions>,
138
+ stream: StructDeserializeStream,
139
+ struct: StructValue,
140
+ ): ArrayBufferLikeFieldValue<this>;
141
+ public override deserialize(
142
+ options: Readonly<StructOptions>,
143
+ stream: StructAsyncDeserializeStream,
144
+ struct: StructValue,
145
+ ): Promise<ArrayBufferLikeFieldValue<this>>;
146
+ public override deserialize(
147
+ options: Readonly<StructOptions>,
148
+ stream: StructDeserializeStream | StructAsyncDeserializeStream,
149
+ struct: StructValue,
150
+ ): ValueOrPromise<ArrayBufferLikeFieldValue<this>> {
151
+ return Syncbird.try(() => {
152
+ const size = this.getDeserializeSize(struct);
153
+ if (size === 0) {
154
+ return EmptyArrayBuffer;
155
+ } else {
156
+ return stream.read(size);
157
+ }
158
+ }).then(arrayBuffer => {
159
+ const value = this.type.fromArrayBuffer(arrayBuffer);
160
+ return this.create(options, struct, value, arrayBuffer);
161
+ }).valueOrPromise();
162
+ }
163
+ }
164
+
165
+ export class ArrayBufferLikeFieldValue<
166
+ TDefinition extends ArrayBufferLikeFieldDefinition<ArrayBufferLikeFieldType<unknown, unknown>, any, any>,
167
+ > extends StructFieldValue<TDefinition> {
168
+ protected arrayBuffer: ArrayBuffer | undefined;
169
+
170
+ public constructor(
171
+ definition: TDefinition,
172
+ options: Readonly<StructOptions>,
173
+ struct: StructValue,
174
+ value: TDefinition['TValue'],
175
+ arrayBuffer?: ArrayBuffer,
176
+ ) {
177
+ super(definition, options, struct, value);
178
+ this.arrayBuffer = arrayBuffer;
179
+ }
180
+
181
+ public override set(value: TDefinition['TValue']): void {
182
+ super.set(value);
183
+ this.arrayBuffer = undefined;
184
+ }
185
+
186
+ public serialize(dataView: DataView, offset: number): void {
187
+ if (!this.arrayBuffer) {
188
+ this.arrayBuffer = this.definition.type.toArrayBuffer(this.value);
189
+ }
190
+
191
+ new Uint8Array(dataView.buffer)
192
+ .set(new Uint8Array(this.arrayBuffer), offset);
193
+ }
194
+ }
@@ -1,27 +1,17 @@
1
- import { StructOptions, StructSerializationContext } from '../basic';
2
- import { ArrayBufferLikeFieldDefinition, ArrayBufferLikeFieldRuntimeValue, ArrayBufferLikeFieldType } from './array-buffer';
3
-
4
- export interface FixedLengthArrayBufferLikeFieldOptions {
5
- length: number;
6
- }
7
-
8
- export class FixedLengthArrayBufferLikeFieldDefinition<
9
- TType extends ArrayBufferLikeFieldType = ArrayBufferLikeFieldType,
10
- TOptions extends FixedLengthArrayBufferLikeFieldOptions = FixedLengthArrayBufferLikeFieldOptions,
11
- > extends ArrayBufferLikeFieldDefinition<
12
- TType,
13
- TOptions
14
- > {
15
- public getSize(): number {
16
- return this.options.length;
17
- }
18
-
19
- public createValue(
20
- options: Readonly<StructOptions>,
21
- context: StructSerializationContext,
22
- object: any,
23
- value: TType['valueType']
24
- ): ArrayBufferLikeFieldRuntimeValue<FixedLengthArrayBufferLikeFieldDefinition<TType, TOptions>> {
25
- return new ArrayBufferLikeFieldRuntimeValue(this, options, context, object, value);
26
- }
27
- };
1
+ import { ArrayBufferLikeFieldDefinition, ArrayBufferLikeFieldType } from './array-buffer';
2
+
3
+ export interface FixedLengthArrayBufferLikeFieldOptions {
4
+ length: number;
5
+ }
6
+
7
+ export class FixedLengthArrayBufferLikeFieldDefinition<
8
+ TType extends ArrayBufferLikeFieldType = ArrayBufferLikeFieldType,
9
+ TOptions extends FixedLengthArrayBufferLikeFieldOptions = FixedLengthArrayBufferLikeFieldOptions,
10
+ > extends ArrayBufferLikeFieldDefinition<
11
+ TType,
12
+ TOptions
13
+ > {
14
+ public getSize(): number {
15
+ return this.options.length;
16
+ }
17
+ };
@@ -1,5 +1,4 @@
1
- export * from './array-buffer';
2
- export * from './fixed-length-array-buffer';
3
- export * from './number';
4
- export * from './utils';
5
- export * from './variable-length-array-buffer';
1
+ export * from './array-buffer';
2
+ export * from './fixed-length-array-buffer';
3
+ export * from './number';
4
+ export * from './variable-length-array-buffer';