@yume-chan/struct 0.0.24 → 2.0.0

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 (150) hide show
  1. package/CHANGELOG.md +40 -1
  2. package/LICENSE +1 -1
  3. package/README.md +85 -714
  4. package/esm/bipedal.d.ts +6 -0
  5. package/esm/bipedal.d.ts.map +1 -0
  6. package/esm/bipedal.js +38 -0
  7. package/esm/bipedal.js.map +1 -0
  8. package/esm/buffer.d.ts +30 -0
  9. package/esm/buffer.d.ts.map +1 -0
  10. package/esm/buffer.js +170 -0
  11. package/esm/buffer.js.map +1 -0
  12. package/esm/concat.d.ts +13 -0
  13. package/esm/concat.d.ts.map +1 -0
  14. package/esm/concat.js +10 -0
  15. package/esm/concat.js.map +1 -0
  16. package/esm/extend.d.ts +6 -0
  17. package/esm/extend.d.ts.map +1 -0
  18. package/esm/extend.js +10 -0
  19. package/esm/extend.js.map +1 -0
  20. package/esm/field/factory.d.ts +13 -0
  21. package/esm/field/factory.d.ts.map +1 -0
  22. package/esm/field/factory.js +21 -0
  23. package/esm/field/factory.js.map +1 -0
  24. package/esm/field/index.d.ts +4 -0
  25. package/esm/field/index.d.ts.map +1 -0
  26. package/esm/field/index.js +4 -0
  27. package/esm/field/index.js.map +1 -0
  28. package/esm/field/serialize.d.ts +8 -0
  29. package/esm/field/serialize.d.ts.map +1 -0
  30. package/esm/field/serialize.js +33 -0
  31. package/esm/field/serialize.js.map +1 -0
  32. package/esm/field/types.d.ts +33 -0
  33. package/esm/field/types.d.ts.map +1 -0
  34. package/esm/field/types.js +2 -0
  35. package/esm/field/types.js.map +1 -0
  36. package/esm/index.d.ts +9 -4
  37. package/esm/index.d.ts.map +1 -1
  38. package/esm/index.js +9 -4
  39. package/esm/index.js.map +1 -1
  40. package/esm/number.d.ts +13 -0
  41. package/esm/number.d.ts.map +1 -0
  42. package/esm/number.js +57 -0
  43. package/esm/number.js.map +1 -0
  44. package/esm/{basic/stream.d.ts → readable.d.ts} +9 -3
  45. package/esm/readable.d.ts.map +1 -0
  46. package/esm/readable.js +26 -0
  47. package/esm/readable.js.map +1 -0
  48. package/esm/string.d.ts +16 -0
  49. package/esm/string.d.ts.map +1 -0
  50. package/esm/string.js +13 -0
  51. package/esm/string.js.map +1 -0
  52. package/esm/struct.d.ts +22 -140
  53. package/esm/struct.d.ts.map +1 -1
  54. package/esm/struct.js +109 -227
  55. package/esm/struct.js.map +1 -1
  56. package/esm/types.d.ts +20 -0
  57. package/esm/types.d.ts.map +1 -0
  58. package/esm/types.js +2 -0
  59. package/esm/types.js.map +1 -0
  60. package/esm/utils.d.ts +10 -45
  61. package/esm/utils.d.ts.map +1 -1
  62. package/esm/utils.js +8 -9
  63. package/esm/utils.js.map +1 -1
  64. package/package.json +11 -12
  65. package/src/bipedal.ts +65 -0
  66. package/src/buffer.ts +334 -0
  67. package/src/concat.ts +78 -0
  68. package/src/extend.ts +37 -0
  69. package/src/field/factory.ts +64 -0
  70. package/src/field/index.ts +3 -0
  71. package/src/field/serialize.ts +58 -0
  72. package/src/field/types.ts +48 -0
  73. package/src/index.ts +9 -4
  74. package/src/number.ts +134 -0
  75. package/src/{basic/stream.ts → readable.ts} +31 -4
  76. package/src/string.ts +41 -0
  77. package/src/struct.ts +200 -670
  78. package/src/types.ts +37 -0
  79. package/src/utils.ts +14 -67
  80. package/tsconfig.build.json +6 -1
  81. package/tsconfig.build.tsbuildinfo +1 -1
  82. package/CHANGELOG.json +0 -173
  83. package/esm/basic/definition.d.ts +0 -44
  84. package/esm/basic/definition.d.ts.map +0 -1
  85. package/esm/basic/definition.js +0 -24
  86. package/esm/basic/definition.js.map +0 -1
  87. package/esm/basic/field-value.d.ts +0 -39
  88. package/esm/basic/field-value.d.ts.map +0 -1
  89. package/esm/basic/field-value.js +0 -46
  90. package/esm/basic/field-value.js.map +0 -1
  91. package/esm/basic/index.d.ts +0 -6
  92. package/esm/basic/index.d.ts.map +0 -1
  93. package/esm/basic/index.js +0 -6
  94. package/esm/basic/index.js.map +0 -1
  95. package/esm/basic/options.d.ts +0 -10
  96. package/esm/basic/options.d.ts.map +0 -1
  97. package/esm/basic/options.js +0 -4
  98. package/esm/basic/options.js.map +0 -1
  99. package/esm/basic/stream.d.ts.map +0 -1
  100. package/esm/basic/stream.js +0 -8
  101. package/esm/basic/stream.js.map +0 -1
  102. package/esm/basic/struct-value.d.ts +0 -30
  103. package/esm/basic/struct-value.d.ts.map +0 -1
  104. package/esm/basic/struct-value.js +0 -62
  105. package/esm/basic/struct-value.js.map +0 -1
  106. package/esm/sync-promise.d.ts +0 -13
  107. package/esm/sync-promise.d.ts.map +0 -1
  108. package/esm/sync-promise.js +0 -71
  109. package/esm/sync-promise.js.map +0 -1
  110. package/esm/types/bigint.d.ts +0 -25
  111. package/esm/types/bigint.d.ts.map +0 -1
  112. package/esm/types/bigint.js +0 -46
  113. package/esm/types/bigint.js.map +0 -1
  114. package/esm/types/buffer/base.d.ts +0 -69
  115. package/esm/types/buffer/base.d.ts.map +0 -1
  116. package/esm/types/buffer/base.js +0 -100
  117. package/esm/types/buffer/base.js.map +0 -1
  118. package/esm/types/buffer/fixed-length.d.ts +0 -9
  119. package/esm/types/buffer/fixed-length.d.ts.map +0 -1
  120. package/esm/types/buffer/fixed-length.js +0 -7
  121. package/esm/types/buffer/fixed-length.js.map +0 -1
  122. package/esm/types/buffer/index.d.ts +0 -4
  123. package/esm/types/buffer/index.d.ts.map +0 -1
  124. package/esm/types/buffer/index.js +0 -4
  125. package/esm/types/buffer/index.js.map +0 -1
  126. package/esm/types/buffer/variable-length.d.ts +0 -46
  127. package/esm/types/buffer/variable-length.d.ts.map +0 -1
  128. package/esm/types/buffer/variable-length.js +0 -87
  129. package/esm/types/buffer/variable-length.js.map +0 -1
  130. package/esm/types/index.d.ts +0 -4
  131. package/esm/types/index.d.ts.map +0 -1
  132. package/esm/types/index.js +0 -4
  133. package/esm/types/index.js.map +0 -1
  134. package/esm/types/number.d.ts +0 -28
  135. package/esm/types/number.d.ts.map +0 -1
  136. package/esm/types/number.js +0 -99
  137. package/esm/types/number.js.map +0 -1
  138. package/src/basic/definition.ts +0 -68
  139. package/src/basic/field-value.ts +0 -75
  140. package/src/basic/index.ts +0 -5
  141. package/src/basic/options.ts +0 -19
  142. package/src/basic/struct-value.ts +0 -85
  143. package/src/sync-promise.ts +0 -134
  144. package/src/types/bigint.ts +0 -124
  145. package/src/types/buffer/base.ts +0 -198
  146. package/src/types/buffer/fixed-length.ts +0 -22
  147. package/src/types/buffer/index.ts +0 -3
  148. package/src/types/buffer/variable-length.ts +0 -198
  149. package/src/types/index.ts +0 -3
  150. package/src/types/number.ts +0 -166
package/esm/struct.js CHANGED
@@ -1,11 +1,8 @@
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";
1
+ import { bipedal } from "./bipedal.js";
2
+ import { ExactReadableEndedError } from "./readable.js";
5
3
  export class StructDeserializeError extends Error {
6
4
  constructor(message) {
7
5
  super(message);
8
- Object.setPrototypeOf(this, new.target.prototype);
9
6
  }
10
7
  }
11
8
  export class StructNotEnoughDataError extends StructDeserializeError {
@@ -18,239 +15,124 @@ export class StructEmptyError extends StructDeserializeError {
18
15
  super("The underlying readable doesn't contain any more struct");
19
16
  }
20
17
  }
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}'`);
18
+ /* #__NO_SIDE_EFFECTS__ */
19
+ export function struct(fields, options) {
20
+ const fieldList = Object.entries(fields);
21
+ const size = fieldList.reduce((sum, [, field]) => sum + field.size, 0);
22
+ const littleEndian = options.littleEndian;
23
+ const extra = options.extra
24
+ ? Object.getOwnPropertyDescriptors(options.extra)
25
+ : undefined;
26
+ return {
27
+ littleEndian,
28
+ type: "byob",
29
+ fields,
30
+ size,
31
+ extra: options.extra,
32
+ serialize(source, bufferOrContext) {
33
+ const temp = { ...source };
34
+ for (const [key, field] of fieldList) {
35
+ if (key in temp && "init" in field) {
36
+ const result = field.init?.(temp[key], temp);
37
+ if (result !== undefined) {
38
+ temp[key] = result;
39
+ }
40
+ }
53
41
  }
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) => {
42
+ const sizes = new Array(fieldList.length);
43
+ const buffers = new Array(fieldList.length);
44
+ {
45
+ const context = { littleEndian };
46
+ for (const [index, [key, field]] of fieldList.entries()) {
47
+ if (field.type === "byob") {
48
+ sizes[index] = field.size;
49
+ }
50
+ else {
51
+ buffers[index] = field.serialize(temp[key], context);
52
+ sizes[index] = buffers[index].length;
53
+ }
54
+ }
55
+ }
56
+ const size = sizes.reduce((sum, size) => sum + size, 0);
57
+ let externalBuffer;
58
+ let buffer;
59
+ let index;
60
+ if (bufferOrContext instanceof Uint8Array) {
61
+ if (bufferOrContext.length < size) {
62
+ throw new Error("Buffer too small");
63
+ }
64
+ externalBuffer = true;
65
+ buffer = bufferOrContext;
66
+ index = 0;
67
+ }
68
+ else if (typeof bufferOrContext === "object" &&
69
+ "buffer" in bufferOrContext) {
70
+ externalBuffer = true;
71
+ buffer = bufferOrContext.buffer;
72
+ index = bufferOrContext.index ?? 0;
73
+ if (buffer.length - index < size) {
74
+ throw new Error("Buffer too small");
75
+ }
76
+ }
77
+ else {
78
+ externalBuffer = false;
79
+ buffer = new Uint8Array(size);
80
+ index = 0;
81
+ }
82
+ const context = {
83
+ buffer,
84
+ index,
85
+ littleEndian,
86
+ };
87
+ for (const [index, [key, field]] of fieldList.entries()) {
88
+ if (buffers[index]) {
89
+ buffer.set(buffers[index], context.index);
90
+ }
91
+ else {
92
+ field.serialize(temp[key], context);
93
+ }
94
+ context.index += sizes[index];
95
+ }
96
+ if (externalBuffer) {
97
+ return size;
98
+ }
99
+ else {
100
+ return buffer;
101
+ }
102
+ },
103
+ deserialize: bipedal(function* (then, reader) {
104
+ const startPosition = reader.position;
105
+ const result = {};
106
+ const context = {
107
+ dependencies: result,
108
+ littleEndian: littleEndian,
109
+ };
110
+ try {
111
+ for (const [key, field] of fieldList) {
112
+ result[key] = yield* then(field.deserialize(reader, context));
113
+ }
114
+ }
115
+ catch (e) {
177
116
  if (!(e instanceof ExactReadableEndedError)) {
178
117
  throw e;
179
118
  }
180
- if (stream.position === startPosition) {
119
+ if (reader.position === startPosition) {
181
120
  throw new StructEmptyError();
182
121
  }
183
122
  else {
184
123
  throw new StructNotEnoughDataError();
185
124
  }
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
125
  }
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
- }
126
+ if (extra) {
127
+ Object.defineProperties(result, extra);
219
128
  }
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);
129
+ if (options.postDeserialize) {
130
+ return options.postDeserialize.call(result, result);
226
131
  }
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
- const dataView = new DataView(output.buffer, output.byteOffset, output.byteLength);
243
- let offset = 0;
244
- for (const { fieldValue, size } of fieldsInfo) {
245
- fieldValue.serialize(dataView, output, offset);
246
- offset += size;
247
- }
248
- if (output.length !== structSize) {
249
- return output.subarray(0, structSize);
250
- }
251
- else {
252
- return output;
253
- }
254
- }
132
+ else {
133
+ return result;
134
+ }
135
+ }),
136
+ };
255
137
  }
256
138
  //# 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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"}
package/esm/types.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ import type { MaybePromiseLike } from "@yume-chan/async";
2
+ import type { FieldByobSerializeContext, FieldDeserializer, FieldSerializer } from "./field/index.js";
3
+ import type { AsyncExactReadable, ExactReadable } from "./readable.js";
4
+ export type StructSerializeContext = Omit<FieldByobSerializeContext, "littleEndian">;
5
+ export interface StructSerializer<T> extends FieldSerializer<T> {
6
+ type: "byob";
7
+ size: number;
8
+ serialize(source: T): Uint8Array;
9
+ serialize(source: T, buffer: Uint8Array): number;
10
+ serialize(source: T, context: StructSerializeContext): number;
11
+ }
12
+ export type StructInit<T extends StructSerializer<unknown>> = T extends StructSerializer<infer U> ? U : never;
13
+ export interface StructDeserializer<T> extends FieldDeserializer<T, never> {
14
+ size: number;
15
+ deserialize(reader: ExactReadable): T;
16
+ deserialize(reader: AsyncExactReadable): MaybePromiseLike<T>;
17
+ }
18
+ export type StructValue<T extends StructDeserializer<unknown>> = T extends StructDeserializer<infer P> ? P : never;
19
+ export type StructLike<T> = StructSerializer<T> & StructDeserializer<T>;
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,KAAK,EACR,yBAAyB,EACzB,iBAAiB,EACjB,eAAe,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACrC,yBAAyB,EACzB,cAAc,CACjB,CAAC;AAEF,MAAM,WAAW,gBAAgB,CAAC,CAAC,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IAEb,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC;IACjC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;IACjD,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAAC;CACjE;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,gBAAgB,CAAC,OAAO,CAAC,IACtD,CAAC,SAAS,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEpD,MAAM,WAAW,kBAAkB,CAAC,CAAC,CAAE,SAAQ,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC;IACtE,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,CAAC,CAAC;IACtC,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAChE;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,kBAAkB,CAAC,OAAO,CAAC,IACzD,CAAC,SAAS,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEtD,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC"}
package/esm/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/esm/utils.d.ts CHANGED
@@ -1,48 +1,13 @@
1
- /**
2
- * When evaluating a very complex generic type alias,
3
- * tell TypeScript to use `T`, instead of current type alias' name, as the result type name
4
- *
5
- * Example:
6
- *
7
- * ```ts
8
- * type WithIdentity<T> = Identity<SomeType<T>>;
9
- * type WithoutIdentity<T> = SomeType<T>;
10
- *
11
- * type WithIdentityResult = WithIdentity<number>;
12
- * // Hover on this one shows `SomeType<number>`
13
- *
14
- * type WithoutIdentityResult = WithoutIdentity<number>;
15
- * // Hover on this one shows `WithoutIdentity<number>`
16
- * ```
17
- */
18
- export type Identity<T> = T;
19
- /**
20
- * Collapse an intersection type (`{ foo: string } & { bar: number }`) to a simple type (`{ foo: string, bar: number }`)
21
- */
22
- export type Evaluate<T> = T extends infer U ? {
23
- [K in keyof U]: U[K];
24
- } : never;
25
- /**
26
- * Overwrite fields in `TBase` with fields in `TNew`
27
- */
28
- export type Overwrite<TBase extends object, TNew extends object> = Evaluate<Omit<TBase, keyof TNew> & TNew>;
29
- /**
30
- * Remove fields with `never` type
31
- */
32
- export type OmitNever<T> = Pick<T, {
33
- [K in keyof T]: [T[K]] extends [never] ? never : K;
34
- }[keyof T]>;
35
- /**
36
- * Extract keys of fields in `T` that has type `TValue`
37
- */
38
- export type KeysOfType<T, TValue> = {
39
- [TKey in keyof T]: T[TKey] extends TValue ? TKey : never;
40
- }[keyof T];
41
- export type ValueOrPromise<T> = T | PromiseLike<T>;
42
- /**
43
- * Returns a (fake) value of the given type.
44
- */
45
- export declare function placeholder<T>(): T;
1
+ interface TextEncoder {
2
+ encode(input: string): Uint8Array;
3
+ }
4
+ interface TextDecoder {
5
+ decode(buffer?: ArrayBufferView | ArrayBuffer, options?: {
6
+ stream?: boolean;
7
+ }): string;
8
+ }
9
+ export declare const TextEncoder: new () => TextEncoder, TextDecoder: new () => TextDecoder;
46
10
  export declare function encodeUtf8(input: string): Uint8Array;
47
11
  export declare function decodeUtf8(buffer: ArrayBufferView | ArrayBuffer): string;
12
+ export {};
48
13
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,MAAM,EAAE,IAAI,SAAS,MAAM,IAAI,QAAQ,CACvE,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,GAAG,IAAI,CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,IAAI,CAC3B,CAAC,EACD;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;CAAE,CAAC,MAAM,CAAC,CAAC,CAClE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,MAAM,IAAI;KAC/B,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG,IAAI,GAAG,KAAK;CAC3D,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAEnD;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,KAAK,CAAC,CAElC;AAgCD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAEpD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,GAAG,MAAM,CAIxE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAQA,UAAU,WAAW;IACjB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;CACrC;AAED,UAAU,WAAW;IACjB,MAAM,CACF,MAAM,CAAC,EAAE,eAAe,GAAG,WAAW,EACtC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,MAAM,CAAC;CACb;AAOD,eAAO,MAAQ,WAAW,YAJC,WAAW,EAIV,WAAW,YAHZ,WAIiB,CAAC;AAM7C,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAEpD;AAGD,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,GAAG,MAAM,CAIxE"}
package/esm/utils.js CHANGED
@@ -1,15 +1,14 @@
1
- /**
2
- * Returns a (fake) value of the given type.
3
- */
4
- export function placeholder() {
5
- return undefined;
6
- }
7
- const { TextEncoder, TextDecoder } = globalThis;
8
- const SharedEncoder = new TextEncoder();
9
- const SharedDecoder = new TextDecoder();
1
+ // This library can't use `@types/node` or `lib: dom`
2
+ // because they will pollute the global scope
3
+ // So `TextEncoder` and `TextDecoder` types are not available
4
+ export const { TextEncoder, TextDecoder } = globalThis;
5
+ const SharedEncoder = /* #__PURE__ */ new TextEncoder();
6
+ const SharedDecoder = /* #__PURE__ */ new TextDecoder();
7
+ /* #__NO_SIDE_EFFECTS__ */
10
8
  export function encodeUtf8(input) {
11
9
  return SharedEncoder.encode(input);
12
10
  }
11
+ /* #__NO_SIDE_EFFECTS__ */
13
12
  export function decodeUtf8(buffer) {
14
13
  // `TextDecoder` has internal states in stream mode,
15
14
  // but this method is not for stream mode, so the instance can be reused
package/esm/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAgDA;;GAEG;AACH,MAAM,UAAU,WAAW;IACvB,OAAO,SAAyB,CAAC;AACrC,CAAC;AA2BD,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,UAAwC,CAAC;AAE9E,MAAM,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;AACxC,MAAM,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;AAExC,MAAM,UAAU,UAAU,CAAC,KAAa;IACpC,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAqC;IAC5D,oDAAoD;IACpD,wEAAwE;IACxE,OAAO,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,6CAA6C;AAC7C,6DAA6D;AAsB7D,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GACrC,UAAwC,CAAC;AAE7C,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,WAAW,EAAE,CAAC;AACxD,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,WAAW,EAAE,CAAC;AAExD,0BAA0B;AAC1B,MAAM,UAAU,UAAU,CAAC,KAAa;IACpC,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,UAAU,CAAC,MAAqC;IAC5D,oDAAoD;IACpD,wEAAwE;IACxE,OAAO,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yume-chan/struct",
3
- "version": "0.0.24",
3
+ "version": "2.0.0",
4
4
  "description": "C-style structure serializer and deserializer.",
5
5
  "keywords": [
6
6
  "structure",
@@ -26,23 +26,22 @@
26
26
  "type": "module",
27
27
  "main": "esm/index.js",
28
28
  "types": "esm/index.d.ts",
29
+ "sideEffects": false,
29
30
  "dependencies": {
30
- "@yume-chan/no-data-view": "^0.0.24"
31
+ "@yume-chan/async": "^4.0.2",
32
+ "@yume-chan/no-data-view": "^2.0.0"
31
33
  },
32
34
  "devDependencies": {
33
- "@jest/globals": "^30.0.0-alpha.4",
35
+ "@types/node": "^22.13.10",
36
+ "prettier": "^3.5.3",
37
+ "typescript": "^5.8.2",
38
+ "@yume-chan/test-runner": "^1.0.0",
34
39
  "@yume-chan/eslint-config": "^1.0.0",
35
- "@yume-chan/tsconfig": "^1.0.0",
36
- "cross-env": "^7.0.3",
37
- "jest": "^30.0.0-alpha.4",
38
- "prettier": "^3.3.2",
39
- "ts-jest": "^29.1.4",
40
- "typescript": "^5.4.5"
40
+ "@yume-chan/tsconfig": "^1.0.0"
41
41
  },
42
42
  "scripts": {
43
43
  "build": "tsc -b tsconfig.build.json",
44
- "build:watch": "tsc -b tsconfig.build.json",
45
- "test": "cross-env NODE_OPTIONS=\"--experimental-vm-modules --no-warnings\" TS_JEST_DISABLE_VER_CHECKER=true jest --coverage",
46
- "lint": "run-eslint && prettier src/**/*.ts --write --tab-width 4"
44
+ "lint": "run-eslint && prettier src/**/*.ts --write --tab-width 4",
45
+ "test": "run-test"
47
46
  }
48
47
  }