@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
package/esm/struct.js CHANGED
@@ -1,41 +1,32 @@
1
- import { __awaiter } from "tslib";
2
- import { StructDefaultOptions, StructValue } from './basic';
3
- import { ArrayBufferFieldType, FixedLengthArrayBufferLikeFieldDefinition, NumberFieldDefinition, NumberFieldType, StringFieldType, Uint8ClampedArrayFieldType, VariableLengthArrayBufferLikeFieldDefinition } from './types';
1
+ // cspell: ignore Syncbird
2
+ import { StructDefaultOptions, StructValue } from './basic/index.js';
3
+ import { Syncbird } from "./syncbird.js";
4
+ import { BigIntFieldDefinition, BigIntFieldType, FixedLengthBufferLikeFieldDefinition, NumberFieldDefinition, NumberFieldType, StringBufferFieldSubType, Uint8ArrayBufferFieldSubType, VariableLengthBufferLikeFieldDefinition } from './types/index.js';
4
5
  export class Struct {
5
- constructor(options) {
6
- this._size = 0;
7
- this._fields = [];
8
- this._extra = {};
9
- this.arrayBufferLike = (name, type, options) => {
10
- if ('length' in options) {
11
- return this.field(name, new FixedLengthArrayBufferLikeFieldDefinition(type, options));
12
- }
13
- else {
14
- return this.field(name, new VariableLengthArrayBufferLikeFieldDefinition(type, options));
15
- }
16
- };
17
- this.arrayBuffer = (name, options) => {
18
- return this.arrayBufferLike(name, ArrayBufferFieldType.instance, options);
19
- };
20
- this.uint8ClampedArray = (name, options) => {
21
- return this.arrayBufferLike(name, Uint8ClampedArrayFieldType.instance, options);
22
- };
23
- this.string = (name, options) => {
24
- return this.arrayBufferLike(name, StringFieldType.instance, options);
25
- };
26
- this.options = Object.assign(Object.assign({}, StructDefaultOptions), options);
27
- }
6
+ TFields;
7
+ TOmitInitKey;
8
+ TExtra;
9
+ TInit;
10
+ TDeserializeResult;
11
+ options;
12
+ _size = 0;
28
13
  /**
29
14
  * Gets the static size (exclude fields that can change size at runtime)
30
15
  */
31
16
  get size() { return this._size; }
17
+ _fields = [];
18
+ _extra = {};
19
+ _postDeserialized;
20
+ constructor(options) {
21
+ this.options = { ...StructDefaultOptions, ...options };
22
+ }
32
23
  /**
33
24
  * Appends a `StructFieldDefinition` to the `Struct
34
25
  */
35
26
  field(name, definition) {
36
27
  for (const field of this._fields) {
37
28
  if (field[0] === name) {
38
- throw new Error(`This struct already have a field with name '${name}'`);
29
+ throw new Error(`This struct already have a field with name '${String(name)}'`);
39
30
  }
40
31
  }
41
32
  this._fields.push([name, definition]);
@@ -94,13 +85,16 @@ export class Struct {
94
85
  uint32(name, typescriptType) {
95
86
  return this.number(name, NumberFieldType.Uint32, typescriptType);
96
87
  }
88
+ bigint(name, type, _typescriptType) {
89
+ return this.field(name, new BigIntFieldDefinition(type, _typescriptType));
90
+ }
97
91
  /**
98
92
  * Appends an `int64` field to the `Struct`
99
93
  *
100
94
  * Requires native `BigInt` support
101
95
  */
102
96
  int64(name, _typescriptType) {
103
- return this.number(name, NumberFieldType.Int64, _typescriptType);
97
+ return this.bigint(name, BigIntFieldType.Int64, _typescriptType);
104
98
  }
105
99
  /**
106
100
  * Appends an `uint64` field to the `Struct`
@@ -108,17 +102,31 @@ export class Struct {
108
102
  * Requires native `BigInt` support
109
103
  */
110
104
  uint64(name, _typescriptType) {
111
- return this.number(name, NumberFieldType.Uint64, _typescriptType);
105
+ return this.bigint(name, BigIntFieldType.Uint64, _typescriptType);
112
106
  }
107
+ arrayBufferLike = (name, type, options) => {
108
+ if ('length' in options) {
109
+ return this.field(name, new FixedLengthBufferLikeFieldDefinition(type, options));
110
+ }
111
+ else {
112
+ return this.field(name, new VariableLengthBufferLikeFieldDefinition(type, options));
113
+ }
114
+ };
115
+ uint8Array = (name, options) => {
116
+ return this.arrayBufferLike(name, Uint8ArrayBufferFieldSubType.Instance, options);
117
+ };
118
+ string = (name, options) => {
119
+ return this.arrayBufferLike(name, StringBufferFieldSubType.Instance, options);
120
+ };
113
121
  /**
114
- * Adds some extra fields into every Struct value.
122
+ * Adds some extra properties into every `Struct` value.
115
123
  *
116
- * Extra fields will not affect serialize or deserialize process.
124
+ * Extra properties will not affect serialize or deserialize process.
117
125
  *
118
- * Multiple calls to `extra` will merge all values together.
126
+ * Multiple calls to `extra` will merge all properties together.
119
127
  *
120
128
  * @param value
121
- * An object containing anything you want to add to the result object. Accessors and methods are also allowed.
129
+ * An object containing properties to be added to the result value. Accessors and methods are also allowed.
122
130
  */
123
131
  extra(value) {
124
132
  Object.assign(this._extra, Object.getOwnPropertyDescriptors(value));
@@ -128,28 +136,34 @@ export class Struct {
128
136
  this._postDeserialized = callback;
129
137
  return this;
130
138
  }
131
- deserialize(context) {
132
- return __awaiter(this, void 0, void 0, function* () {
133
- const value = new StructValue();
134
- Object.defineProperties(value.value, this._extra);
135
- for (const [name, definition] of this._fields) {
136
- const fieldValue = yield definition.deserialize(this.options, context, value);
139
+ deserialize(stream) {
140
+ const value = new StructValue();
141
+ Object.defineProperties(value.value, this._extra);
142
+ return Syncbird
143
+ .each(this._fields, ([name, definition]) => {
144
+ return Syncbird.resolve(definition.deserialize(this.options, stream, value)).then(fieldValue => {
137
145
  value.set(name, fieldValue);
138
- }
146
+ });
147
+ })
148
+ .then(() => {
149
+ const object = value.value;
150
+ // Run `postDeserialized`
139
151
  if (this._postDeserialized) {
140
- const object = value.value;
141
- const result = this._postDeserialized.call(object, object);
142
- if (result) {
143
- return result;
152
+ const override = this._postDeserialized.call(object, object);
153
+ // If it returns a new value, use that as result
154
+ // Otherwise it only inspects/mutates the object in place.
155
+ if (override) {
156
+ return override;
144
157
  }
145
158
  }
146
- return value.value;
147
- });
159
+ return object;
160
+ })
161
+ .valueOrPromise();
148
162
  }
149
- serialize(init, context) {
163
+ serialize(init, output) {
150
164
  const value = new StructValue();
151
165
  for (const [name, definition] of this._fields) {
152
- const fieldValue = definition.create(this.options, context, value, init[name]);
166
+ const fieldValue = definition.create(this.options, value, init[name]);
153
167
  value.set(name, fieldValue);
154
168
  }
155
169
  let structSize = 0;
@@ -160,14 +174,23 @@ export class Struct {
160
174
  fieldsInfo.push({ fieldValue, size });
161
175
  structSize += size;
162
176
  }
163
- const buffer = new ArrayBuffer(structSize);
164
- const dataView = new DataView(buffer);
177
+ let outputType = 'number';
178
+ if (!output) {
179
+ output = new Uint8Array(structSize);
180
+ outputType = 'Uint8Array';
181
+ }
182
+ const dataView = new DataView(output.buffer, output.byteOffset, output.byteLength);
165
183
  let offset = 0;
166
184
  for (const { fieldValue, size } of fieldsInfo) {
167
- fieldValue.serialize(dataView, offset, context);
185
+ fieldValue.serialize(dataView, offset);
168
186
  offset += size;
169
187
  }
170
- return buffer;
188
+ if (outputType === 'number') {
189
+ return structSize;
190
+ }
191
+ else {
192
+ return output;
193
+ }
171
194
  }
172
195
  }
173
196
  //# sourceMappingURL=struct.js.map
package/esm/struct.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"struct.js","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"struct.js","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import Bluebird from 'bluebird';
2
+ export declare type Resolvable<R> = R | PromiseLike<R>;
3
+ export declare type IterateFunction<T, R> = (item: T, index: number, arrayLength: number) => Resolvable<R>;
4
+ export interface Syncbird<R> extends Bluebird<R> {
5
+ valueOrPromise(): R | PromiseLike<R>;
6
+ then<U>(onFulfill?: (value: R) => Resolvable<U>, onReject?: (error: any) => Resolvable<U>): Syncbird<U>;
7
+ then<TResult1 = R, TResult2 = never>(onfulfilled?: ((value: R) => Resolvable<TResult1>) | null, onrejected?: ((reason: any) => Resolvable<TResult2>) | null): Syncbird<TResult1 | TResult2>;
8
+ }
9
+ interface SyncbirdStatic {
10
+ /**
11
+ * Iterate over an array, or a promise of an array,
12
+ * which contains promises (or a mix of promises and values) with the given iterator function with the signature `(item, index, value)`
13
+ * where item is the resolved value of a respective promise in the input array.
14
+ * Iteration happens serially. If any promise in the input array is rejected the returned promise is rejected as well.
15
+ *
16
+ * Resolves to the original array unmodified, this method is meant to be used for side effects.
17
+ * If the iterator function returns a promise or a thenable, the result for the promise is awaited for before continuing with next iteration.
18
+ */
19
+ each<R>(values: Resolvable<Iterable<Resolvable<R>>>, iterator: IterateFunction<R, any>): Syncbird<R[]>;
20
+ /**
21
+ * Reduce an array, or a promise of an array,
22
+ * which contains a promises (or a mix of promises and values) with the given `reducer` function with the signature `(total, current, index, arrayLength)`
23
+ * where `item` is the resolved value of a respective promise in the input array.
24
+ * If any promise in the input array is rejected the returned promise is rejected as well.
25
+ *
26
+ * If the reducer function returns a promise or a thenable, the result for the promise is awaited for before continuing with next iteration.
27
+ *
28
+ * *The original array is not modified. If no `initialValue` is given and the array doesn't contain at least 2 items,
29
+ * the callback will not be called and `undefined` is returned.
30
+ *
31
+ * If `initialValue` is given and the array doesn't have at least 1 item, `initialValue` is returned.*
32
+ */
33
+ reduce<R, U>(values: Resolvable<Iterable<Resolvable<R>>>, reducer: (total: U, current: R, index: number, arrayLength: number) => Resolvable<U>, initialValue?: U): Syncbird<U>;
34
+ /**
35
+ * Create a promise that is resolved with the given `value`. If `value` is a thenable or promise, the returned promise will assume its state.
36
+ */
37
+ resolve(): Syncbird<void>;
38
+ resolve<R>(value: Resolvable<R>): Syncbird<R>;
39
+ try<R>(fn: () => Resolvable<R>): Syncbird<R>;
40
+ attempt<R>(fn: () => Resolvable<R>): Syncbird<R>;
41
+ /**
42
+ * Configure long stack traces, warnings, monitoring and cancellation.
43
+ * Note that even though false is the default here, a development environment might be detected which automatically
44
+ * enables long stack traces and warnings.
45
+ */
46
+ config(options: {
47
+ /** Enable warnings */
48
+ warnings?: boolean | {
49
+ /** Enables all warnings except forgotten return statements. */
50
+ wForgottenReturn: boolean;
51
+ } | undefined;
52
+ /** Enable long stack traces */
53
+ longStackTraces?: boolean | undefined;
54
+ /** Enable cancellation */
55
+ cancellation?: boolean | undefined;
56
+ /** Enable monitoring */
57
+ monitoring?: boolean | undefined;
58
+ /** Enable async hooks */
59
+ asyncHooks?: boolean | undefined;
60
+ }): void;
61
+ new <R>(callback: (resolve: (thenableOrResult?: Resolvable<R>) => void, reject: (error?: any) => void, onCancel?: (callback: () => void) => void) => void): Syncbird<R>;
62
+ }
63
+ export declare const Syncbird: SyncbirdStatic;
64
+ export {};
65
+ //# sourceMappingURL=syncbird.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncbird.d.ts","sourceRoot":"","sources":["../src/syncbird.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ // cspell: ignore syncbird
2
+ import Bluebird from 'bluebird';
3
+ export const Syncbird = Bluebird.getNewLibraryCopy();
4
+ Syncbird.config({
5
+ asyncHooks: false,
6
+ cancellation: false,
7
+ longStackTraces: false,
8
+ monitoring: false,
9
+ warnings: false,
10
+ });
11
+ // Bluebird uses `_then` internally.
12
+ const _then = Syncbird.prototype._then;
13
+ Syncbird.prototype._then = function (onfulfilled, onrejected, _, receiver, internalData) {
14
+ if (this.isFulfilled()) {
15
+ if (!onfulfilled) {
16
+ return this;
17
+ }
18
+ else {
19
+ // Synchronously call `onfulfilled`, and wrap the result in a new `Syncbird` object.
20
+ return Syncbird.resolve(onfulfilled.call(receiver, this.value(),
21
+ // Some Bluebird internal methods (for example `reduce`) need this `internalData`
22
+ internalData));
23
+ }
24
+ }
25
+ else {
26
+ // Forward to Bluebird's `_then` method.
27
+ return _then.call(this, onfulfilled, onrejected, _, receiver, internalData);
28
+ }
29
+ };
30
+ Syncbird.prototype.valueOrPromise = function () {
31
+ if (this.isFulfilled()) {
32
+ return this.value();
33
+ }
34
+ else {
35
+ return this;
36
+ }
37
+ };
38
+ //# sourceMappingURL=syncbird.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncbird.js","sourceRoot":"","sources":["../src/syncbird.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAE1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAkFhC,MAAM,CAAC,MAAM,QAAQ,GAAmB,QAAQ,CAAC,iBAAiB,EAAS,CAAC;AAE5E,QAAQ,CAAC,MAAM,CAAC;IACZ,UAAU,EAAE,KAAK;IACjB,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,KAAK;IACjB,QAAQ,EAAE,KAAK;CAClB,CAAC,CAAC;AAEH,oCAAoC;AACpC,MAAM,KAAK,GAAI,QAAQ,CAAC,SAAiB,CAAC,KAAK,CAAC;AAChD,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,UAEvB,WAA+E,EAC/E,UAAyD,EACzD,CAAQ,EACR,QAAiB,EACjB,YAAqB;IAErB,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;QACpB,IAAI,CAAC,WAAW,EAAE;YACd,OAAO,IAAI,CAAC;SACf;aAAM;YACH,oFAAoF;YACpF,OAAO,QAAQ,CAAC,OAAO,CACnB,WAAW,CAAC,IAAI,CACZ,QAAQ,EACR,IAAI,CAAC,KAAK,EAAE;YACZ,iFAAiF;YACjF,YAAY,CACf,CACJ,CAAC;SACL;KACJ;SAAM;QACH,wCAAwC;QACxC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;KAC/E;AACL,CAAC,CAAC;AAED,QAAQ,CAAC,SAAiB,CAAC,cAAc,GAAG;IACzC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;QACpB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;KACvB;SAAM;QACH,OAAO,IAAkB,CAAC;KAC7B;AACL,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { StructFieldDefinition, StructFieldValue, StructValue, type StructAsyncDeserializeStream, type StructDeserializeStream, type StructOptions } from "../basic/index.js";
2
+ declare type DataViewBigInt64Getter = (dataView: DataView, byteOffset: number, littleEndian: boolean | undefined) => bigint;
3
+ declare type DataViewBigInt64Setter = (dataView: DataView, byteOffset: number, value: bigint, littleEndian: boolean | undefined) => void;
4
+ export declare class BigIntFieldType {
5
+ readonly TTypeScriptType: bigint;
6
+ readonly size: number;
7
+ readonly getter: DataViewBigInt64Getter;
8
+ readonly setter: DataViewBigInt64Setter;
9
+ constructor(size: number, getter: DataViewBigInt64Getter, setter: DataViewBigInt64Setter);
10
+ static readonly Int64: BigIntFieldType;
11
+ static readonly Uint64: BigIntFieldType;
12
+ }
13
+ export declare class BigIntFieldDefinition<TType extends BigIntFieldType = BigIntFieldType, TTypeScriptType = TType["TTypeScriptType"]> extends StructFieldDefinition<void, TTypeScriptType> {
14
+ readonly type: TType;
15
+ constructor(type: TType, _typescriptType?: TTypeScriptType);
16
+ getSize(): number;
17
+ create(options: Readonly<StructOptions>, struct: StructValue, value: TTypeScriptType): BigIntFieldValue<this>;
18
+ deserialize(options: Readonly<StructOptions>, stream: StructDeserializeStream, struct: StructValue): BigIntFieldValue<this>;
19
+ deserialize(options: Readonly<StructOptions>, stream: StructAsyncDeserializeStream, struct: StructValue): Promise<BigIntFieldValue<this>>;
20
+ }
21
+ export declare class BigIntFieldValue<TDefinition extends BigIntFieldDefinition<BigIntFieldType, any>> extends StructFieldValue<TDefinition> {
22
+ serialize(dataView: DataView, offset: number): void;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=bigint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigint.d.ts","sourceRoot":"","sources":["../../src/types/bigint.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,4BAA4B,EAAE,KAAK,uBAAuB,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI9K,aAAK,sBAAsB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,SAAS,KAAK,MAAM,CAAC;AAEpH,aAAK,sBAAsB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,SAAS,KAAK,IAAI,CAAC;AAEjI,qBAAa,eAAe;IACxB,SAAgB,eAAe,EAAG,MAAM,CAAC;IAEzC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,SAAgB,MAAM,EAAE,sBAAsB,CAAC;IAE/C,SAAgB,MAAM,EAAE,sBAAsB,CAAC;gBAG3C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,sBAAsB;IAOlC,gBAAuB,KAAK,kBAAoD;IAEhF,gBAAuB,MAAM,kBAAsD;CACtF;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,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,GACvB,gBAAgB,CAAC,IAAI,CAAC;IAIT,WAAW,CACvB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,WAAW,GACpB,gBAAgB,CAAC,IAAI,CAAC;IACT,WAAW,CACvB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,4BAA4B,EACpC,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAkBrC;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;CAQ7D"}
@@ -0,0 +1,45 @@
1
+ // cspell: ignore syncbird
2
+ import { getBigInt64, getBigUint64, setBigInt64, setBigUint64 } from '@yume-chan/dataview-bigint-polyfill/esm/fallback.js';
3
+ import { StructFieldDefinition, StructFieldValue } from "../basic/index.js";
4
+ import { Syncbird } from "../syncbird.js";
5
+ export class BigIntFieldType {
6
+ TTypeScriptType;
7
+ size;
8
+ getter;
9
+ setter;
10
+ constructor(size, getter, setter) {
11
+ this.size = size;
12
+ this.getter = getter;
13
+ this.setter = setter;
14
+ }
15
+ static Int64 = new BigIntFieldType(8, getBigInt64, setBigInt64);
16
+ static Uint64 = new BigIntFieldType(8, getBigUint64, setBigUint64);
17
+ }
18
+ export class BigIntFieldDefinition extends StructFieldDefinition {
19
+ type;
20
+ constructor(type, _typescriptType) {
21
+ super();
22
+ this.type = type;
23
+ }
24
+ getSize() {
25
+ return this.type.size;
26
+ }
27
+ create(options, struct, value) {
28
+ return new BigIntFieldValue(this, options, struct, value);
29
+ }
30
+ deserialize(options, stream, struct) {
31
+ return Syncbird.try(() => {
32
+ return stream.read(this.getSize());
33
+ }).then(array => {
34
+ const view = new DataView(array.buffer, array.byteOffset, array.byteLength);
35
+ const value = this.type.getter(view, 0, options.littleEndian);
36
+ return this.create(options, struct, value);
37
+ }).valueOrPromise();
38
+ }
39
+ }
40
+ export class BigIntFieldValue extends StructFieldValue {
41
+ serialize(dataView, offset) {
42
+ this.definition.type.setter(dataView, offset, this.value, this.options.littleEndian);
43
+ }
44
+ }
45
+ //# sourceMappingURL=bigint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigint.js","sourceRoot":"","sources":["../../src/types/bigint.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAE1B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AAC3H,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAoG,MAAM,mBAAmB,CAAC;AAC9K,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAO1C,MAAM,OAAO,eAAe;IACR,eAAe,CAAU;IAEzB,IAAI,CAAS;IAEb,MAAM,CAAyB;IAE/B,MAAM,CAAyB;IAE/C,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;IAEM,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;;AAGvF,MAAM,OAAO,qBAGP,SAAQ,qBAGT;IACe,IAAI,CAAQ;IAE5B,YAAmB,IAAW,EAAE,eAAiC;QAC7D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1B,CAAC;IAEM,MAAM,CACT,OAAgC,EAChC,MAAmB,EACnB,KAAsB;QAEtB,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAYe,WAAW,CACvB,OAAgC,EAChC,MAA8D,EAC9D,MAAmB;QAEnB,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE;YACrB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACZ,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAC1B,IAAI,EACJ,CAAC,EACD,OAAO,CAAC,YAAY,CACvB,CAAC;YACF,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAY,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;CACJ;AAED,MAAM,OAAO,gBAEP,SAAQ,gBAA6B;IAChC,SAAS,CAAC,QAAkB,EAAE,MAAc;QAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CACvB,QAAQ,EACR,MAAM,EACN,IAAI,CAAC,KAAM,EACX,IAAI,CAAC,OAAO,CAAC,YAAY,CAC5B,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,63 @@
1
+ import { StructFieldDefinition, StructFieldValue, StructValue, type StructAsyncDeserializeStream, type StructDeserializeStream, type StructOptions } from '../../basic/index.js';
2
+ /**
3
+ * Base class for all types that
4
+ * can be converted from an `Uint8Array` when deserialized,
5
+ * and need to be converted to an `Uint8Array` 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 BufferFieldSubType<TValue = unknown, TTypeScriptType = TValue> {
12
+ readonly TTypeScriptType: TTypeScriptType;
13
+ /**
14
+ * When implemented in derived classes, converts the type-specific `value` to an `Uint8Array`
15
+ *
16
+ * This function should be "pure", i.e.,
17
+ * same `value` should always be converted to `Uint8Array`s that have same content.
18
+ */
19
+ abstract toBuffer(value: TValue): Uint8Array;
20
+ /** When implemented in derived classes, converts the `Uint8Array` to a type-specific value */
21
+ abstract toValue(array: Uint8Array): 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 `Uint8Array`,
26
+ * implementer can returns `-1`, so the caller will get its size by first converting it to
27
+ * an `Uint8Array` (and cache the result).
28
+ */
29
+ abstract getSize(value: TValue): number;
30
+ }
31
+ /** An `BufferFieldSubType` that's actually an `Uint8Array` */
32
+ export declare class Uint8ArrayBufferFieldSubType extends BufferFieldSubType<Uint8Array> {
33
+ static readonly Instance: Uint8ArrayBufferFieldSubType;
34
+ protected constructor();
35
+ toBuffer(value: Uint8Array): Uint8Array;
36
+ toValue(buffer: Uint8Array): Uint8Array;
37
+ getSize(value: Uint8Array): number;
38
+ }
39
+ /** An `BufferFieldSubType` that converts between `Uint8Array` and `string` */
40
+ export declare class StringBufferFieldSubType<TTypeScriptType = string> extends BufferFieldSubType<string, TTypeScriptType> {
41
+ static readonly Instance: StringBufferFieldSubType<string>;
42
+ toBuffer(value: string): Uint8Array;
43
+ toValue(array: Uint8Array): string;
44
+ getSize(): number;
45
+ }
46
+ export declare abstract class BufferLikeFieldDefinition<TType extends BufferFieldSubType<any, any> = BufferFieldSubType<unknown, unknown>, TOptions = void, TOmitInitKey extends PropertyKey = never> extends StructFieldDefinition<TOptions, TType['TTypeScriptType'], TOmitInitKey> {
47
+ readonly type: TType;
48
+ constructor(type: TType, options: TOptions);
49
+ protected getDeserializeSize(struct: StructValue): number;
50
+ /**
51
+ * When implemented in derived classes, creates a `StructFieldValue` for the current field definition.
52
+ */
53
+ create(options: Readonly<StructOptions>, struct: StructValue, value: TType['TTypeScriptType'], array?: Uint8Array): BufferLikeFieldValue<this>;
54
+ deserialize(options: Readonly<StructOptions>, stream: StructDeserializeStream, struct: StructValue): BufferLikeFieldValue<this>;
55
+ deserialize(options: Readonly<StructOptions>, stream: StructAsyncDeserializeStream, struct: StructValue): Promise<BufferLikeFieldValue<this>>;
56
+ }
57
+ export declare class BufferLikeFieldValue<TDefinition extends BufferLikeFieldDefinition<BufferFieldSubType<unknown, unknown>, any, any>> extends StructFieldValue<TDefinition> {
58
+ protected array: Uint8Array | undefined;
59
+ constructor(definition: TDefinition, options: Readonly<StructOptions>, struct: StructValue, value: TDefinition['TValue'], array?: Uint8Array);
60
+ set(value: TDefinition['TValue']): void;
61
+ serialize(dataView: DataView, offset: number): void;
62
+ }
63
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/types/buffer/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ // cspell: ignore syncbird
2
+ import { StructFieldDefinition, StructFieldValue } from '../../basic/index.js';
3
+ import { Syncbird } from "../../syncbird.js";
4
+ import { decodeUtf8, encodeUtf8 } from "../../utils.js";
5
+ /**
6
+ * Base class for all types that
7
+ * can be converted from an `Uint8Array` when deserialized,
8
+ * and need to be converted to an `Uint8Array` 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 class BufferFieldSubType {
15
+ TTypeScriptType;
16
+ }
17
+ /** An `BufferFieldSubType` that's actually an `Uint8Array` */
18
+ export class Uint8ArrayBufferFieldSubType extends BufferFieldSubType {
19
+ static Instance = new Uint8ArrayBufferFieldSubType();
20
+ constructor() {
21
+ super();
22
+ }
23
+ toBuffer(value) {
24
+ return value;
25
+ }
26
+ toValue(buffer) {
27
+ return buffer;
28
+ }
29
+ getSize(value) {
30
+ return value.byteLength;
31
+ }
32
+ }
33
+ /** An `BufferFieldSubType` that converts between `Uint8Array` and `string` */
34
+ export class StringBufferFieldSubType extends BufferFieldSubType {
35
+ static Instance = new StringBufferFieldSubType();
36
+ toBuffer(value) {
37
+ return encodeUtf8(value);
38
+ }
39
+ toValue(array) {
40
+ return decodeUtf8(array);
41
+ }
42
+ getSize() {
43
+ // Return `-1`, so `BufferLikeFieldDefinition` will
44
+ // convert this `value` into an `Uint8Array` (and cache the result),
45
+ // Then get the size from that `Uint8Array`
46
+ return -1;
47
+ }
48
+ }
49
+ const EmptyBuffer = new Uint8Array(0);
50
+ export class BufferLikeFieldDefinition extends StructFieldDefinition {
51
+ type;
52
+ constructor(type, options) {
53
+ super(options);
54
+ this.type = type;
55
+ }
56
+ getDeserializeSize(struct) {
57
+ return this.getSize();
58
+ }
59
+ /**
60
+ * When implemented in derived classes, creates a `StructFieldValue` for the current field definition.
61
+ */
62
+ create(options, struct, value, array) {
63
+ return new BufferLikeFieldValue(this, options, struct, value, array);
64
+ }
65
+ deserialize(options, stream, struct) {
66
+ return Syncbird.try(() => {
67
+ const size = this.getDeserializeSize(struct);
68
+ if (size === 0) {
69
+ return EmptyBuffer;
70
+ }
71
+ else {
72
+ return stream.read(size);
73
+ }
74
+ }).then(array => {
75
+ const value = this.type.toValue(array);
76
+ return this.create(options, struct, value, array);
77
+ }).valueOrPromise();
78
+ }
79
+ }
80
+ export class BufferLikeFieldValue extends StructFieldValue {
81
+ array;
82
+ constructor(definition, options, struct, value, array) {
83
+ super(definition, options, struct, value);
84
+ this.array = array;
85
+ }
86
+ set(value) {
87
+ super.set(value);
88
+ // When value changes, clear the cached `array`
89
+ // It will be lazily calculated in `serialize()`
90
+ this.array = undefined;
91
+ }
92
+ serialize(dataView, offset) {
93
+ if (!this.array) {
94
+ this.array = this.definition.type.toBuffer(this.value);
95
+ }
96
+ new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength)
97
+ .set(this.array, offset);
98
+ }
99
+ }
100
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/types/buffer/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { BufferLikeFieldDefinition, type BufferFieldSubType } from "./base.js";
2
+ export interface FixedLengthBufferLikeFieldOptions {
3
+ length: number;
4
+ }
5
+ export declare class FixedLengthBufferLikeFieldDefinition<TType extends BufferFieldSubType = BufferFieldSubType, TOptions extends FixedLengthBufferLikeFieldOptions = FixedLengthBufferLikeFieldOptions> extends BufferLikeFieldDefinition<TType, TOptions> {
6
+ getSize(): number;
7
+ }
8
+ //# sourceMappingURL=fixed-length.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixed-length.d.ts","sourceRoot":"","sources":["../../../src/types/buffer/fixed-length.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/E,MAAM,WAAW,iCAAiC;IAC9C,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,oCAAoC,CAC7C,KAAK,SAAS,kBAAkB,GAAG,kBAAkB,EACrD,QAAQ,SAAS,iCAAiC,GAAG,iCAAiC,CACpF,SAAQ,yBAAyB,CACnC,KAAK,EACL,QAAQ,CACP;IACM,OAAO,IAAI,MAAM;CAG3B"}
@@ -0,0 +1,8 @@
1
+ import { BufferLikeFieldDefinition } from "./base.js";
2
+ export class FixedLengthBufferLikeFieldDefinition extends BufferLikeFieldDefinition {
3
+ getSize() {
4
+ return this.options.length;
5
+ }
6
+ }
7
+ ;
8
+ //# sourceMappingURL=fixed-length.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixed-length.js","sourceRoot":"","sources":["../../../src/types/buffer/fixed-length.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAA2B,MAAM,WAAW,CAAC;AAM/E,MAAM,OAAO,oCAGP,SAAQ,yBAGT;IACM,OAAO;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;CACJ;AAAA,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./base.js";
2
+ export * from "./fixed-length.js";
3
+ export * from "./variable-length.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/buffer/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC"}