@yume-chan/struct 0.0.0-20240714132542
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.
- package/CHANGELOG.md +131 -0
- package/LICENSE +21 -0
- package/README.md +747 -0
- package/esm/basic/definition.d.ts +44 -0
- package/esm/basic/definition.d.ts.map +1 -0
- package/esm/basic/definition.js +24 -0
- package/esm/basic/definition.js.map +1 -0
- package/esm/basic/field-value.d.ts +39 -0
- package/esm/basic/field-value.d.ts.map +1 -0
- package/esm/basic/field-value.js +46 -0
- package/esm/basic/field-value.js.map +1 -0
- package/esm/basic/index.d.ts +6 -0
- package/esm/basic/index.d.ts.map +1 -0
- package/esm/basic/index.js +6 -0
- package/esm/basic/index.js.map +1 -0
- package/esm/basic/options.d.ts +10 -0
- package/esm/basic/options.d.ts.map +1 -0
- package/esm/basic/options.js +4 -0
- package/esm/basic/options.js.map +1 -0
- package/esm/basic/stream.d.ts +25 -0
- package/esm/basic/stream.d.ts.map +1 -0
- package/esm/basic/stream.js +8 -0
- package/esm/basic/stream.js.map +1 -0
- package/esm/basic/struct-value.d.ts +30 -0
- package/esm/basic/struct-value.d.ts.map +1 -0
- package/esm/basic/struct-value.js +62 -0
- package/esm/basic/struct-value.js.map +1 -0
- package/esm/index.d.ts +15 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +7 -0
- package/esm/index.js.map +1 -0
- package/esm/struct.d.ts +151 -0
- package/esm/struct.d.ts.map +1 -0
- package/esm/struct.js +255 -0
- package/esm/struct.js.map +1 -0
- package/esm/sync-promise.d.ts +13 -0
- package/esm/sync-promise.d.ts.map +1 -0
- package/esm/sync-promise.js +71 -0
- package/esm/sync-promise.js.map +1 -0
- package/esm/types/bigint.d.ts +25 -0
- package/esm/types/bigint.d.ts.map +1 -0
- package/esm/types/bigint.js +46 -0
- package/esm/types/bigint.js.map +1 -0
- package/esm/types/buffer/base.d.ts +69 -0
- package/esm/types/buffer/base.d.ts.map +1 -0
- package/esm/types/buffer/base.js +101 -0
- package/esm/types/buffer/base.js.map +1 -0
- package/esm/types/buffer/fixed-length.d.ts +9 -0
- package/esm/types/buffer/fixed-length.d.ts.map +1 -0
- package/esm/types/buffer/fixed-length.js +7 -0
- package/esm/types/buffer/fixed-length.js.map +1 -0
- package/esm/types/buffer/index.d.ts +4 -0
- package/esm/types/buffer/index.d.ts.map +1 -0
- package/esm/types/buffer/index.js +4 -0
- package/esm/types/buffer/index.js.map +1 -0
- package/esm/types/buffer/variable-length.d.ts +46 -0
- package/esm/types/buffer/variable-length.d.ts.map +1 -0
- package/esm/types/buffer/variable-length.js +88 -0
- package/esm/types/buffer/variable-length.js.map +1 -0
- package/esm/types/index.d.ts +4 -0
- package/esm/types/index.d.ts.map +1 -0
- package/esm/types/index.js +4 -0
- package/esm/types/index.js.map +1 -0
- package/esm/types/number.d.ts +28 -0
- package/esm/types/number.d.ts.map +1 -0
- package/esm/types/number.js +88 -0
- package/esm/types/number.js.map +1 -0
- package/esm/utils.d.ts +48 -0
- package/esm/utils.d.ts.map +1 -0
- package/esm/utils.js +18 -0
- package/esm/utils.js.map +1 -0
- package/package.json +49 -0
- package/src/basic/definition.ts +68 -0
- package/src/basic/field-value.ts +71 -0
- package/src/basic/index.ts +5 -0
- package/src/basic/options.ts +19 -0
- package/src/basic/stream.ts +34 -0
- package/src/basic/struct-value.ts +85 -0
- package/src/index.ts +18 -0
- package/src/struct.ts +705 -0
- package/src/sync-promise.ts +131 -0
- package/src/types/bigint.ts +120 -0
- package/src/types/buffer/base.ts +195 -0
- package/src/types/buffer/fixed-length.ts +22 -0
- package/src/types/buffer/index.ts +3 -0
- package/src/types/buffer/variable-length.ts +199 -0
- package/src/types/index.ts +3 -0
- package/src/types/number.ts +159 -0
- package/src/utils.ts +94 -0
- package/tsconfig.build.json +3 -0
- package/tsconfig.build.tsbuildinfo +1 -0
package/esm/struct.js
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { ExactReadableEndedError, STRUCT_VALUE_SYMBOL, StructDefaultOptions, StructValue, isStructValueInit, } from "./basic/index.js";
|
|
3
|
+
import { SyncPromise } from "./sync-promise.js";
|
|
4
|
+
import { BigIntFieldDefinition, BigIntFieldVariant, FixedLengthBufferLikeFieldDefinition, NumberFieldDefinition, NumberFieldVariant, StringBufferFieldConverter, Uint8ArrayBufferFieldConverter, VariableLengthBufferLikeFieldDefinition, } from "./types/index.js";
|
|
5
|
+
export class StructDeserializeError extends Error {
|
|
6
|
+
constructor(message) {
|
|
7
|
+
super(message);
|
|
8
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class StructNotEnoughDataError extends StructDeserializeError {
|
|
12
|
+
constructor() {
|
|
13
|
+
super("The underlying readable was ended before the struct was fully deserialized");
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export class StructEmptyError extends StructDeserializeError {
|
|
17
|
+
constructor() {
|
|
18
|
+
super("The underlying readable doesn't contain any more struct");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class Struct {
|
|
22
|
+
TFields;
|
|
23
|
+
TOmitInitKey;
|
|
24
|
+
TExtra;
|
|
25
|
+
TInit;
|
|
26
|
+
TDeserializeResult;
|
|
27
|
+
options;
|
|
28
|
+
#size = 0;
|
|
29
|
+
/**
|
|
30
|
+
* Gets the static size (exclude fields that can change size at runtime)
|
|
31
|
+
*/
|
|
32
|
+
get size() {
|
|
33
|
+
return this.#size;
|
|
34
|
+
}
|
|
35
|
+
#fields = [];
|
|
36
|
+
get fields() {
|
|
37
|
+
return this.#fields;
|
|
38
|
+
}
|
|
39
|
+
#extra = {};
|
|
40
|
+
#postDeserialized;
|
|
41
|
+
constructor(options) {
|
|
42
|
+
this.options = { ...StructDefaultOptions, ...options };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Appends a `StructFieldDefinition` to the `Struct
|
|
46
|
+
*/
|
|
47
|
+
field(name, definition) {
|
|
48
|
+
for (const field of this.#fields) {
|
|
49
|
+
if (field[0] === name) {
|
|
50
|
+
// Convert Symbol to string
|
|
51
|
+
const nameString = String(name);
|
|
52
|
+
throw new Error(`This struct already have a field with name '${nameString}'`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
this.#fields.push([name, definition]);
|
|
56
|
+
const size = definition.getSize();
|
|
57
|
+
this.#size += size;
|
|
58
|
+
// Force cast `this` to another type
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Merges (flats) another `Struct`'s fields and extra fields into this one.
|
|
63
|
+
*
|
|
64
|
+
* `other`'s `postDeserialize` will be ignored.
|
|
65
|
+
*/
|
|
66
|
+
concat(other) {
|
|
67
|
+
if (!(other instanceof Struct)) {
|
|
68
|
+
throw new TypeError("The other value must be a `Struct` instance");
|
|
69
|
+
}
|
|
70
|
+
for (const field of other.#fields) {
|
|
71
|
+
this.#fields.push(field);
|
|
72
|
+
}
|
|
73
|
+
this.#size += other.#size;
|
|
74
|
+
Object.defineProperties(this.#extra, Object.getOwnPropertyDescriptors(other.#extra));
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
#number(name, type, typeScriptType) {
|
|
78
|
+
return this.field(name, new NumberFieldDefinition(type, typeScriptType));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Appends an `int8` field to the `Struct`
|
|
82
|
+
*/
|
|
83
|
+
int8(name, typeScriptType) {
|
|
84
|
+
return this.#number(name, NumberFieldVariant.Int8, typeScriptType);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Appends an `uint8` field to the `Struct`
|
|
88
|
+
*/
|
|
89
|
+
uint8(name, typeScriptType) {
|
|
90
|
+
return this.#number(name, NumberFieldVariant.Uint8, typeScriptType);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Appends an `int16` field to the `Struct`
|
|
94
|
+
*/
|
|
95
|
+
int16(name, typeScriptType) {
|
|
96
|
+
return this.#number(name, NumberFieldVariant.Int16, typeScriptType);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Appends an `uint16` field to the `Struct`
|
|
100
|
+
*/
|
|
101
|
+
uint16(name, typeScriptType) {
|
|
102
|
+
return this.#number(name, NumberFieldVariant.Uint16, typeScriptType);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Appends an `int32` field to the `Struct`
|
|
106
|
+
*/
|
|
107
|
+
int32(name, typeScriptType) {
|
|
108
|
+
return this.#number(name, NumberFieldVariant.Int32, typeScriptType);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Appends an `uint32` field to the `Struct`
|
|
112
|
+
*/
|
|
113
|
+
uint32(name, typeScriptType) {
|
|
114
|
+
return this.#number(name, NumberFieldVariant.Uint32, typeScriptType);
|
|
115
|
+
}
|
|
116
|
+
#bigint(name, type, typeScriptType) {
|
|
117
|
+
return this.field(name, new BigIntFieldDefinition(type, typeScriptType));
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Appends an `int64` field to the `Struct`
|
|
121
|
+
*
|
|
122
|
+
* Requires native `BigInt` support
|
|
123
|
+
*/
|
|
124
|
+
int64(name, typeScriptType) {
|
|
125
|
+
return this.#bigint(name, BigIntFieldVariant.Int64, typeScriptType);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Appends an `uint64` field to the `Struct`
|
|
129
|
+
*
|
|
130
|
+
* Requires native `BigInt` support
|
|
131
|
+
*/
|
|
132
|
+
uint64(name, typeScriptType) {
|
|
133
|
+
return this.#bigint(name, BigIntFieldVariant.Uint64, typeScriptType);
|
|
134
|
+
}
|
|
135
|
+
#arrayBufferLike = (name, type, options) => {
|
|
136
|
+
if ("length" in options) {
|
|
137
|
+
return this.field(name, new FixedLengthBufferLikeFieldDefinition(type, options));
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
return this.field(name, new VariableLengthBufferLikeFieldDefinition(type, options));
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
uint8Array = (name, options, typeScriptType) => {
|
|
144
|
+
return this.#arrayBufferLike(name, Uint8ArrayBufferFieldConverter.Instance, options, typeScriptType);
|
|
145
|
+
};
|
|
146
|
+
string = (name, options, typeScriptType) => {
|
|
147
|
+
return this.#arrayBufferLike(name, StringBufferFieldConverter.Instance, options, typeScriptType);
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* Adds some extra properties into every `Struct` value.
|
|
151
|
+
*
|
|
152
|
+
* Extra properties will not affect serialize or deserialize process.
|
|
153
|
+
*
|
|
154
|
+
* Multiple calls to `extra` will merge all properties together.
|
|
155
|
+
*
|
|
156
|
+
* @param value
|
|
157
|
+
* An object containing properties to be added to the result value. Accessors and methods are also allowed.
|
|
158
|
+
*/
|
|
159
|
+
extra(value) {
|
|
160
|
+
Object.defineProperties(this.#extra, Object.getOwnPropertyDescriptors(value));
|
|
161
|
+
return this;
|
|
162
|
+
}
|
|
163
|
+
postDeserialize(callback) {
|
|
164
|
+
this.#postDeserialized = callback;
|
|
165
|
+
return this;
|
|
166
|
+
}
|
|
167
|
+
deserialize(stream) {
|
|
168
|
+
const structValue = new StructValue(this.#extra);
|
|
169
|
+
let promise = SyncPromise.resolve();
|
|
170
|
+
const startPosition = stream.position;
|
|
171
|
+
for (const [name, definition] of this.#fields) {
|
|
172
|
+
promise = promise
|
|
173
|
+
.then(() => definition.deserialize(this.options, stream, structValue))
|
|
174
|
+
.then((fieldValue) => {
|
|
175
|
+
structValue.set(name, fieldValue);
|
|
176
|
+
}, (e) => {
|
|
177
|
+
if (!(e instanceof ExactReadableEndedError)) {
|
|
178
|
+
throw e;
|
|
179
|
+
}
|
|
180
|
+
if (stream.position === startPosition) {
|
|
181
|
+
throw new StructEmptyError();
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
throw new StructNotEnoughDataError();
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
return promise
|
|
189
|
+
.then(() => {
|
|
190
|
+
const value = structValue.value;
|
|
191
|
+
// Run `postDeserialized`
|
|
192
|
+
if (this.#postDeserialized) {
|
|
193
|
+
const override = this.#postDeserialized.call(value, value);
|
|
194
|
+
// If it returns a new value, use that as result
|
|
195
|
+
// Otherwise it only inspects/mutates the object in place.
|
|
196
|
+
if (override !== undefined) {
|
|
197
|
+
return override;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return value;
|
|
201
|
+
})
|
|
202
|
+
.valueOrPromise();
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Serialize a struct value to a buffer.
|
|
206
|
+
* @param init Fields of the struct
|
|
207
|
+
* @param output The buffer to serialize the struct to. It must be large enough to hold the entire struct. If not provided, a new buffer will be created.
|
|
208
|
+
* @returns A view of `output` that contains the serialized struct, or a new buffer if `output` is not provided.
|
|
209
|
+
*/
|
|
210
|
+
serialize(init, output) {
|
|
211
|
+
let structValue;
|
|
212
|
+
if (isStructValueInit(init)) {
|
|
213
|
+
structValue = init[STRUCT_VALUE_SYMBOL];
|
|
214
|
+
for (const [key, value] of Object.entries(init)) {
|
|
215
|
+
const fieldValue = structValue.get(key);
|
|
216
|
+
if (fieldValue) {
|
|
217
|
+
fieldValue.set(value);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
structValue = new StructValue({});
|
|
223
|
+
for (const [name, definition] of this.#fields) {
|
|
224
|
+
const fieldValue = definition.create(this.options, structValue, init[name]);
|
|
225
|
+
structValue.set(name, fieldValue);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
let structSize = 0;
|
|
229
|
+
const fieldsInfo = [];
|
|
230
|
+
for (const [name] of this.#fields) {
|
|
231
|
+
const fieldValue = structValue.get(name);
|
|
232
|
+
const size = fieldValue.getSize();
|
|
233
|
+
fieldsInfo.push({ fieldValue, size });
|
|
234
|
+
structSize += size;
|
|
235
|
+
}
|
|
236
|
+
if (!output) {
|
|
237
|
+
output = new Uint8Array(structSize);
|
|
238
|
+
}
|
|
239
|
+
else if (output.length < structSize) {
|
|
240
|
+
throw new TypeError("Output buffer is too small");
|
|
241
|
+
}
|
|
242
|
+
let offset = 0;
|
|
243
|
+
for (const { fieldValue, size } of fieldsInfo) {
|
|
244
|
+
fieldValue.serialize(output, offset);
|
|
245
|
+
offset += size;
|
|
246
|
+
}
|
|
247
|
+
if (output.length !== structSize) {
|
|
248
|
+
return output.subarray(0, structSize);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
return output;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=struct.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"struct.js","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface SyncPromise<T> {
|
|
2
|
+
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null | undefined): SyncPromise<TResult1 | TResult2>;
|
|
3
|
+
valueOrPromise(): T | PromiseLike<T>;
|
|
4
|
+
}
|
|
5
|
+
interface SyncPromiseStatic {
|
|
6
|
+
reject<T = never>(reason?: unknown): SyncPromise<T>;
|
|
7
|
+
resolve(): SyncPromise<void>;
|
|
8
|
+
resolve<T>(value: T | PromiseLike<T>): SyncPromise<T>;
|
|
9
|
+
try<T>(executor: () => T | PromiseLike<T>): SyncPromise<T>;
|
|
10
|
+
}
|
|
11
|
+
export declare const SyncPromise: SyncPromiseStatic;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=sync-promise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-promise.d.ts","sourceRoot":"","sources":["../src/sync-promise.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW,CAAC,CAAC;IAC1B,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,EAC/B,WAAW,CAAC,EACN,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAChD,IAAI,GACJ,SAAS,EACf,UAAU,CAAC,EACL,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GACvD,IAAI,GACJ,SAAS,GAChB,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;IAEpC,cAAc,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;CACxC;AAED,UAAU,iBAAiB;IACvB,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAEpD,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAEtD,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;CAC9D;AAED,eAAO,MAAM,WAAW,EAAE,iBA8BzB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export const SyncPromise = {
|
|
2
|
+
reject(reason) {
|
|
3
|
+
return new RejectedSyncPromise(reason);
|
|
4
|
+
},
|
|
5
|
+
resolve(value) {
|
|
6
|
+
if (typeof value === "object" &&
|
|
7
|
+
value !== null &&
|
|
8
|
+
typeof value.then === "function") {
|
|
9
|
+
if (value instanceof PendingSyncPromise ||
|
|
10
|
+
value instanceof ResolvedSyncPromise ||
|
|
11
|
+
value instanceof RejectedSyncPromise) {
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
return new PendingSyncPromise(value);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
return new ResolvedSyncPromise(value);
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
try(executor) {
|
|
21
|
+
try {
|
|
22
|
+
return SyncPromise.resolve(executor());
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
return SyncPromise.reject(e);
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
class PendingSyncPromise {
|
|
30
|
+
#promise;
|
|
31
|
+
constructor(promise) {
|
|
32
|
+
this.#promise = promise;
|
|
33
|
+
}
|
|
34
|
+
then(onfulfilled, onrejected) {
|
|
35
|
+
return new PendingSyncPromise(this.#promise.then(onfulfilled, onrejected));
|
|
36
|
+
}
|
|
37
|
+
valueOrPromise() {
|
|
38
|
+
return this.#promise;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
class ResolvedSyncPromise {
|
|
42
|
+
#value;
|
|
43
|
+
constructor(value) {
|
|
44
|
+
this.#value = value;
|
|
45
|
+
}
|
|
46
|
+
then(onfulfilled) {
|
|
47
|
+
if (!onfulfilled) {
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
return SyncPromise.try(() => onfulfilled(this.#value));
|
|
51
|
+
}
|
|
52
|
+
valueOrPromise() {
|
|
53
|
+
return this.#value;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
class RejectedSyncPromise {
|
|
57
|
+
#reason;
|
|
58
|
+
constructor(reason) {
|
|
59
|
+
this.#reason = reason;
|
|
60
|
+
}
|
|
61
|
+
then(_, onrejected) {
|
|
62
|
+
if (!onrejected) {
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
return SyncPromise.try(() => onrejected(this.#reason));
|
|
66
|
+
}
|
|
67
|
+
valueOrPromise() {
|
|
68
|
+
throw this.#reason;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=sync-promise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-promise.js","sourceRoot":"","sources":["../src/sync-promise.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC1C,MAAM,CAAY,MAAgB;QAC9B,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAI,KAA0B;QACjC,IACI,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,OAAQ,KAAwB,CAAC,IAAI,KAAK,UAAU,EACtD,CAAC;YACC,IACI,KAAK,YAAY,kBAAkB;gBACnC,KAAK,YAAY,mBAAmB;gBACpC,KAAK,YAAY,mBAAmB,EACtC,CAAC;gBACC,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,OAAO,IAAI,kBAAkB,CAAC,KAAuB,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,mBAAmB,CAAC,KAAU,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IACD,GAAG,CAAI,QAAkC;QACrC,IAAI,CAAC;YACD,OAAO,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;CACJ,CAAC;AAEF,MAAM,kBAAkB;IACpB,QAAQ,CAAiB;IAEzB,YAAY,OAAuB;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IAED,IAAI,CACA,WAGe,EACf,UAGe;QAEf,OAAO,IAAI,kBAAkB,CACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAC9C,CAAC;IACN,CAAC;IAED,cAAc;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;CACJ;AAED,MAAM,mBAAmB;IACrB,MAAM,CAAI;IAEV,YAAY,KAAQ;QAChB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,IAAI,CACA,WAGe;QAEf,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO,IAAa,CAAC;QACzB,CAAC;QACD,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,cAAc;QACV,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ;AAED,MAAM,mBAAmB;IACrB,OAAO,CAAU;IAEjB,YAAY,MAAe;QACvB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,IAAI,CACA,CAAuE,EACvE,UAGe;QAEf,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO,IAAa,CAAC;QACzB,CAAC;QACD,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,cAAc;QACV,MAAM,IAAI,CAAC,OAAO,CAAC;IACvB,CAAC;CACJ"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AsyncExactReadable, ExactReadable, StructOptions, StructValue } from "../basic/index.js";
|
|
2
|
+
import { StructFieldDefinition, StructFieldValue } from "../basic/index.js";
|
|
3
|
+
export type BigIntDeserializer = (array: Uint8Array, byteOffset: number, littleEndian: boolean) => bigint;
|
|
4
|
+
export type BigIntSerializer = (array: Uint8Array, byteOffset: number, value: bigint, littleEndian: boolean) => void;
|
|
5
|
+
export declare class BigIntFieldVariant {
|
|
6
|
+
readonly TTypeScriptType: bigint;
|
|
7
|
+
readonly size: number;
|
|
8
|
+
readonly deserialize: BigIntDeserializer;
|
|
9
|
+
readonly serialize: BigIntSerializer;
|
|
10
|
+
constructor(size: number, deserialize: BigIntDeserializer, serialize: BigIntSerializer);
|
|
11
|
+
static readonly Int64: BigIntFieldVariant;
|
|
12
|
+
static readonly Uint64: BigIntFieldVariant;
|
|
13
|
+
}
|
|
14
|
+
export declare class BigIntFieldDefinition<TVariant extends BigIntFieldVariant = BigIntFieldVariant, TTypeScriptType = TVariant["TTypeScriptType"]> extends StructFieldDefinition<void, TTypeScriptType> {
|
|
15
|
+
readonly variant: TVariant;
|
|
16
|
+
constructor(variant: TVariant, typescriptType?: TTypeScriptType);
|
|
17
|
+
getSize(): number;
|
|
18
|
+
create(options: Readonly<StructOptions>, struct: StructValue, value: TTypeScriptType): BigIntFieldValue<this>;
|
|
19
|
+
deserialize(options: Readonly<StructOptions>, stream: ExactReadable, struct: StructValue): BigIntFieldValue<this>;
|
|
20
|
+
deserialize(options: Readonly<StructOptions>, stream: AsyncExactReadable, struct: StructValue): Promise<BigIntFieldValue<this>>;
|
|
21
|
+
}
|
|
22
|
+
export declare class BigIntFieldValue<TDefinition extends BigIntFieldDefinition<BigIntFieldVariant, unknown>> extends StructFieldValue<TDefinition> {
|
|
23
|
+
serialize(array: Uint8Array, offset: number): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=bigint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigint.d.ts","sourceRoot":"","sources":["../../src/types/bigint.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,WAAW,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAI5E,MAAM,MAAM,kBAAkB,GAAG,CAC7B,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,OAAO,KACpB,MAAM,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG,CAC3B,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,OAAO,KACpB,IAAI,CAAC;AAEV,qBAAa,kBAAkB;IAC3B,QAAQ,CAAC,eAAe,EAAG,MAAM,CAAC;IAElC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAEzC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;gBAGjC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,kBAAkB,EAC/B,SAAS,EAAE,gBAAgB;IAO/B,MAAM,CAAC,QAAQ,CAAC,KAAK,qBAAiD;IAEtE,MAAM,CAAC,QAAQ,CAAC,MAAM,qBAAmD;CAC5E;AAED,qBAAa,qBAAqB,CAC9B,QAAQ,SAAS,kBAAkB,GAAG,kBAAkB,EACxD,eAAe,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAC/C,SAAQ,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAEf,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,eAAe;IAM/D,OAAO,IAAI,MAAM;IAIjB,MAAM,CACF,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,GACvB,gBAAgB,CAAC,IAAI,CAAC;IAIhB,WAAW,CAChB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,WAAW,GACpB,gBAAgB,CAAC,IAAI,CAAC;IAChB,WAAW,CAChB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAChC,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAmBrC;AAED,qBAAa,gBAAgB,CACzB,WAAW,SAAS,qBAAqB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CACxE,SAAQ,gBAAgB,CAAC,WAAW,CAAC;IAC1B,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAQ9D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { getInt64, getUint64, setInt64, setUint64, } from "@yume-chan/no-data-view";
|
|
2
|
+
import { StructFieldDefinition, StructFieldValue } from "../basic/index.js";
|
|
3
|
+
import { SyncPromise } from "../sync-promise.js";
|
|
4
|
+
export class BigIntFieldVariant {
|
|
5
|
+
TTypeScriptType;
|
|
6
|
+
size;
|
|
7
|
+
deserialize;
|
|
8
|
+
serialize;
|
|
9
|
+
constructor(size, deserialize, serialize) {
|
|
10
|
+
this.size = size;
|
|
11
|
+
this.deserialize = deserialize;
|
|
12
|
+
this.serialize = serialize;
|
|
13
|
+
}
|
|
14
|
+
static Int64 = new BigIntFieldVariant(8, getInt64, setInt64);
|
|
15
|
+
static Uint64 = new BigIntFieldVariant(8, getUint64, setUint64);
|
|
16
|
+
}
|
|
17
|
+
export class BigIntFieldDefinition extends StructFieldDefinition {
|
|
18
|
+
variant;
|
|
19
|
+
constructor(variant, typescriptType) {
|
|
20
|
+
void typescriptType;
|
|
21
|
+
super();
|
|
22
|
+
this.variant = variant;
|
|
23
|
+
}
|
|
24
|
+
getSize() {
|
|
25
|
+
return this.variant.size;
|
|
26
|
+
}
|
|
27
|
+
create(options, struct, value) {
|
|
28
|
+
return new BigIntFieldValue(this, options, struct, value);
|
|
29
|
+
}
|
|
30
|
+
deserialize(options, stream, struct) {
|
|
31
|
+
return SyncPromise.try(() => {
|
|
32
|
+
return stream.readExactly(this.getSize());
|
|
33
|
+
})
|
|
34
|
+
.then((array) => {
|
|
35
|
+
const value = this.variant.deserialize(array, 0, options.littleEndian);
|
|
36
|
+
return this.create(options, struct, value);
|
|
37
|
+
})
|
|
38
|
+
.valueOrPromise();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class BigIntFieldValue extends StructFieldValue {
|
|
42
|
+
serialize(array, offset) {
|
|
43
|
+
this.definition.variant.serialize(array, offset, this.value, this.options.littleEndian);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=bigint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigint.js","sourceRoot":"","sources":["../../src/types/bigint.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,SAAS,GACZ,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAgBjD,MAAM,OAAO,kBAAkB;IAClB,eAAe,CAAU;IAEzB,IAAI,CAAS;IAEb,WAAW,CAAqB;IAEhC,SAAS,CAAmB;IAErC,YACI,IAAY,EACZ,WAA+B,EAC/B,SAA2B;QAE3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,MAAM,CAAU,KAAK,GAAG,IAAI,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEtE,MAAM,CAAU,MAAM,GAAG,IAAI,kBAAkB,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;;AAG7E,MAAM,OAAO,qBAGX,SAAQ,qBAA4C;IACzC,OAAO,CAAW;IAE3B,YAAY,OAAiB,EAAE,cAAgC;QAC3D,KAAK,cAAc,CAAC;QACpB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,OAAO;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,MAAM,CACF,OAAgC,EAChC,MAAmB,EACnB,KAAsB;QAEtB,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAYQ,WAAW,CAChB,OAAgC,EAChC,MAA0C,EAC1C,MAAmB;QAEnB,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE;YACxB,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC;aACG,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAClC,KAAK,EACL,CAAC,EACD,OAAO,CAAC,YAAY,CACvB,CAAC;YACF,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAc,CAAC,CAAC;QACxD,CAAC,CAAC;aACD,cAAc,EAAE,CAAC;IAC1B,CAAC;CACJ;AAED,MAAM,OAAO,gBAEX,SAAQ,gBAA6B;IAC1B,SAAS,CAAC,KAAiB,EAAE,MAAc;QAChD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAC7B,KAAK,EACL,MAAM,EACN,IAAI,CAAC,KAAc,EACnB,IAAI,CAAC,OAAO,CAAC,YAAY,CAC5B,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { AsyncExactReadable, ExactReadable, StructOptions, StructValue } from "../../basic/index.js";
|
|
2
|
+
import { StructFieldDefinition, StructFieldValue } from "../../basic/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* A converter for buffer-like fields.
|
|
5
|
+
* It converts `Uint8Array`s to custom-typed values when deserializing,
|
|
6
|
+
* and convert values back to `Uint8Array`s when serializing.
|
|
7
|
+
*
|
|
8
|
+
* @template TValue The type of the value that the converter converts to/from `Uint8Array`.
|
|
9
|
+
* @template TTypeScriptType Optionally another type to refine `TValue`.
|
|
10
|
+
* For example, `TValue` is `string`, and `TTypeScriptType` is `"foo" | "bar"`.
|
|
11
|
+
* `TValue` is specified by the developer when creating an converter implementation,
|
|
12
|
+
* `TTypeScriptType` is specified by the user when creating a field.
|
|
13
|
+
*/
|
|
14
|
+
export declare abstract class BufferFieldConverter<TValue = unknown, TTypeScriptType = TValue> {
|
|
15
|
+
readonly TTypeScriptType: TTypeScriptType;
|
|
16
|
+
/**
|
|
17
|
+
* When implemented in derived classes, converts the custom `value` to an `Uint8Array`
|
|
18
|
+
*
|
|
19
|
+
* This function should be "pure", i.e.,
|
|
20
|
+
* same `value` should always be converted to `Uint8Array`s that have same content.
|
|
21
|
+
*/
|
|
22
|
+
abstract toBuffer(value: TValue): Uint8Array;
|
|
23
|
+
/** When implemented in derived classes, converts the `Uint8Array` to a custom value */
|
|
24
|
+
abstract toValue(array: Uint8Array): TValue;
|
|
25
|
+
/**
|
|
26
|
+
* When implemented in derived classes, gets the size in byte of the custom `value`.
|
|
27
|
+
*
|
|
28
|
+
* If the size can't be determined without first converting the `value` back to an `Uint8Array`,
|
|
29
|
+
* the implementer should return `undefined`. In which case, the caller will call `toBuffer` to
|
|
30
|
+
* convert the value to a `Uint8Array`, then read the length of the `Uint8Array`. The caller can
|
|
31
|
+
* cache the result so the serialization process doesn't need to call `toBuffer` again.
|
|
32
|
+
*/
|
|
33
|
+
abstract getSize(value: TValue): number | undefined;
|
|
34
|
+
}
|
|
35
|
+
/** An identity converter, doesn't convert to anything else. */
|
|
36
|
+
export declare class Uint8ArrayBufferFieldConverter<TTypeScriptType = Uint8Array> extends BufferFieldConverter<Uint8Array, TTypeScriptType> {
|
|
37
|
+
static readonly Instance: Uint8ArrayBufferFieldConverter<Uint8Array>;
|
|
38
|
+
protected constructor();
|
|
39
|
+
toBuffer(value: Uint8Array): Uint8Array;
|
|
40
|
+
toValue(buffer: Uint8Array): Uint8Array;
|
|
41
|
+
getSize(value: Uint8Array): number;
|
|
42
|
+
}
|
|
43
|
+
/** An `BufferFieldSubType` that converts between `Uint8Array` and `string` */
|
|
44
|
+
export declare class StringBufferFieldConverter<TTypeScriptType = string> extends BufferFieldConverter<string, TTypeScriptType> {
|
|
45
|
+
static readonly Instance: StringBufferFieldConverter<string>;
|
|
46
|
+
toBuffer(value: string): Uint8Array;
|
|
47
|
+
toValue(array: Uint8Array): string;
|
|
48
|
+
getSize(): number | undefined;
|
|
49
|
+
}
|
|
50
|
+
export declare const EMPTY_UINT8_ARRAY: Uint8Array;
|
|
51
|
+
export declare abstract class BufferLikeFieldDefinition<TConverter extends BufferFieldConverter<unknown, unknown> = BufferFieldConverter<unknown, unknown>, TOptions = void, TOmitInitKey extends PropertyKey = never, TTypeScriptType = TConverter["TTypeScriptType"]> extends StructFieldDefinition<TOptions, TTypeScriptType, TOmitInitKey> {
|
|
52
|
+
readonly converter: TConverter;
|
|
53
|
+
readonly TTypeScriptType: TTypeScriptType;
|
|
54
|
+
constructor(converter: TConverter, options: TOptions);
|
|
55
|
+
protected getDeserializeSize(struct: StructValue): number;
|
|
56
|
+
/**
|
|
57
|
+
* When implemented in derived classes, creates a `StructFieldValue` for the current field definition.
|
|
58
|
+
*/
|
|
59
|
+
create(options: Readonly<StructOptions>, struct: StructValue, value: TTypeScriptType, array?: Uint8Array): BufferLikeFieldValue<this>;
|
|
60
|
+
deserialize(options: Readonly<StructOptions>, stream: ExactReadable, struct: StructValue): BufferLikeFieldValue<this>;
|
|
61
|
+
deserialize(options: Readonly<StructOptions>, stream: AsyncExactReadable, struct: StructValue): Promise<BufferLikeFieldValue<this>>;
|
|
62
|
+
}
|
|
63
|
+
export declare class BufferLikeFieldValue<TDefinition extends BufferLikeFieldDefinition<BufferFieldConverter<unknown, unknown>, any, any, any>> extends StructFieldValue<TDefinition> {
|
|
64
|
+
protected array: Uint8Array | undefined;
|
|
65
|
+
constructor(definition: TDefinition, options: Readonly<StructOptions>, struct: StructValue, value: TDefinition["TTypeScriptType"], array?: Uint8Array);
|
|
66
|
+
set(value: TDefinition["TValue"]): void;
|
|
67
|
+
serialize(array: Uint8Array, offset: number): void;
|
|
68
|
+
}
|
|
69
|
+
//# 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,101 @@
|
|
|
1
|
+
import { StructFieldDefinition, StructFieldValue } from "../../basic/index.js";
|
|
2
|
+
import { SyncPromise } from "../../sync-promise.js";
|
|
3
|
+
import { decodeUtf8, encodeUtf8 } from "../../utils.js";
|
|
4
|
+
/**
|
|
5
|
+
* A converter for buffer-like fields.
|
|
6
|
+
* It converts `Uint8Array`s to custom-typed values when deserializing,
|
|
7
|
+
* and convert values back to `Uint8Array`s when serializing.
|
|
8
|
+
*
|
|
9
|
+
* @template TValue The type of the value that the converter converts to/from `Uint8Array`.
|
|
10
|
+
* @template TTypeScriptType Optionally another type to refine `TValue`.
|
|
11
|
+
* For example, `TValue` is `string`, and `TTypeScriptType` is `"foo" | "bar"`.
|
|
12
|
+
* `TValue` is specified by the developer when creating an converter implementation,
|
|
13
|
+
* `TTypeScriptType` is specified by the user when creating a field.
|
|
14
|
+
*/
|
|
15
|
+
export class BufferFieldConverter {
|
|
16
|
+
TTypeScriptType;
|
|
17
|
+
}
|
|
18
|
+
/** An identity converter, doesn't convert to anything else. */
|
|
19
|
+
export class Uint8ArrayBufferFieldConverter extends BufferFieldConverter {
|
|
20
|
+
static Instance = new Uint8ArrayBufferFieldConverter();
|
|
21
|
+
constructor() {
|
|
22
|
+
super();
|
|
23
|
+
}
|
|
24
|
+
toBuffer(value) {
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
toValue(buffer) {
|
|
28
|
+
return buffer;
|
|
29
|
+
}
|
|
30
|
+
getSize(value) {
|
|
31
|
+
return value.length;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** An `BufferFieldSubType` that converts between `Uint8Array` and `string` */
|
|
35
|
+
export class StringBufferFieldConverter extends BufferFieldConverter {
|
|
36
|
+
static Instance = new StringBufferFieldConverter();
|
|
37
|
+
toBuffer(value) {
|
|
38
|
+
return encodeUtf8(value);
|
|
39
|
+
}
|
|
40
|
+
toValue(array) {
|
|
41
|
+
return decodeUtf8(array);
|
|
42
|
+
}
|
|
43
|
+
getSize() {
|
|
44
|
+
// See the note in `BufferFieldConverter.getSize`
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export const EMPTY_UINT8_ARRAY = new Uint8Array(0);
|
|
49
|
+
export class BufferLikeFieldDefinition extends StructFieldDefinition {
|
|
50
|
+
converter;
|
|
51
|
+
TTypeScriptType;
|
|
52
|
+
constructor(converter, options) {
|
|
53
|
+
super(options);
|
|
54
|
+
this.converter = converter;
|
|
55
|
+
}
|
|
56
|
+
getDeserializeSize(struct) {
|
|
57
|
+
void struct;
|
|
58
|
+
return this.getSize();
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* When implemented in derived classes, creates a `StructFieldValue` for the current field definition.
|
|
62
|
+
*/
|
|
63
|
+
create(options, struct, value, array) {
|
|
64
|
+
return new BufferLikeFieldValue(this, options, struct, value, array);
|
|
65
|
+
}
|
|
66
|
+
deserialize(options, stream, struct) {
|
|
67
|
+
return SyncPromise.try(() => {
|
|
68
|
+
const size = this.getDeserializeSize(struct);
|
|
69
|
+
if (size === 0) {
|
|
70
|
+
return EMPTY_UINT8_ARRAY;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return stream.readExactly(size);
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
.then((array) => {
|
|
77
|
+
const value = this.converter.toValue(array);
|
|
78
|
+
return this.create(options, struct, value, array);
|
|
79
|
+
})
|
|
80
|
+
.valueOrPromise();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export class BufferLikeFieldValue extends StructFieldValue {
|
|
84
|
+
array;
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/max-params
|
|
86
|
+
constructor(definition, options, struct, value, array) {
|
|
87
|
+
super(definition, options, struct, value);
|
|
88
|
+
this.array = array;
|
|
89
|
+
}
|
|
90
|
+
set(value) {
|
|
91
|
+
super.set(value);
|
|
92
|
+
// When value changes, clear the cached `array`
|
|
93
|
+
// It will be lazily calculated in `serialize()`
|
|
94
|
+
this.array = undefined;
|
|
95
|
+
}
|
|
96
|
+
serialize(array, offset) {
|
|
97
|
+
this.array ??= this.definition.converter.toBuffer(this.value);
|
|
98
|
+
array.set(this.array, offset);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# 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,9 @@
|
|
|
1
|
+
import type { BufferFieldConverter } from "./base.js";
|
|
2
|
+
import { BufferLikeFieldDefinition } from "./base.js";
|
|
3
|
+
export interface FixedLengthBufferLikeFieldOptions {
|
|
4
|
+
length: number;
|
|
5
|
+
}
|
|
6
|
+
export declare class FixedLengthBufferLikeFieldDefinition<TConverter extends BufferFieldConverter = BufferFieldConverter, TOptions extends FixedLengthBufferLikeFieldOptions = FixedLengthBufferLikeFieldOptions, TTypeScriptType = TConverter["TTypeScriptType"]> extends BufferLikeFieldDefinition<TConverter, TOptions, never, TTypeScriptType> {
|
|
7
|
+
getSize(): number;
|
|
8
|
+
}
|
|
9
|
+
//# 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,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,WAAW,iCAAiC;IAC9C,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,oCAAoC,CAC7C,UAAU,SAAS,oBAAoB,GAAG,oBAAoB,EAC9D,QAAQ,SACJ,iCAAiC,GAAG,iCAAiC,EACzE,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,CACjD,SAAQ,yBAAyB,CAC/B,UAAU,EACV,QAAQ,EACR,KAAK,EACL,eAAe,CAClB;IACG,OAAO,IAAI,MAAM;CAGpB"}
|