@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
@@ -1,166 +0,0 @@
1
- import {
2
- getInt16,
3
- getInt32,
4
- getInt8,
5
- getUint16,
6
- getUint32,
7
- } from "@yume-chan/no-data-view";
8
-
9
- import type {
10
- AsyncExactReadable,
11
- ExactReadable,
12
- StructOptions,
13
- StructValue,
14
- } from "../basic/index.js";
15
- import { StructFieldDefinition, StructFieldValue } from "../basic/index.js";
16
- import { SyncPromise } from "../sync-promise.js";
17
- import type { ValueOrPromise } from "../utils.js";
18
-
19
- export interface NumberFieldVariant {
20
- signed: boolean;
21
- size: number;
22
- deserialize(array: Uint8Array, littleEndian: boolean): number;
23
- serialize(
24
- dataView: DataView,
25
- offset: number,
26
- value: number,
27
- littleEndian: boolean,
28
- ): void;
29
- }
30
-
31
- export namespace NumberFieldVariant {
32
- export const Uint8: NumberFieldVariant = {
33
- signed: false,
34
- size: 1,
35
- deserialize(array) {
36
- return array[0]!;
37
- },
38
- serialize(dataView, offset, value) {
39
- dataView.setUint8(offset, value);
40
- },
41
- };
42
-
43
- export const Int8: NumberFieldVariant = {
44
- signed: true,
45
- size: 1,
46
- deserialize(array) {
47
- return getInt8(array, 0);
48
- },
49
- serialize(dataView, offset, value) {
50
- dataView.setInt8(offset, value);
51
- },
52
- };
53
-
54
- export const Uint16: NumberFieldVariant = {
55
- signed: false,
56
- size: 2,
57
- deserialize(array, littleEndian) {
58
- // PERF: Creating many `DataView`s over small buffers is 90% slower
59
- // than this. Even if the `DataView` is cached, `DataView#getUint16`
60
- // is still 1% slower than this.
61
- return getUint16(array, 0, littleEndian);
62
- },
63
- serialize(dataView, offset, value, littleEndian) {
64
- dataView.setUint16(offset, value, littleEndian);
65
- },
66
- };
67
-
68
- export const Int16: NumberFieldVariant = {
69
- signed: true,
70
- size: 2,
71
- deserialize(array, littleEndian) {
72
- return getInt16(array, 0, littleEndian);
73
- },
74
- serialize(dataView, offset, value, littleEndian) {
75
- dataView.setInt16(offset, value, littleEndian);
76
- },
77
- };
78
-
79
- export const Uint32: NumberFieldVariant = {
80
- signed: false,
81
- size: 4,
82
- deserialize(array, littleEndian) {
83
- return getUint32(array, 0, littleEndian);
84
- },
85
- serialize(dataView, offset, value, littleEndian) {
86
- dataView.setUint32(offset, value, littleEndian);
87
- },
88
- };
89
-
90
- export const Int32: NumberFieldVariant = {
91
- signed: true,
92
- size: 4,
93
- deserialize(array, littleEndian) {
94
- return getInt32(array, 0, littleEndian);
95
- },
96
- serialize(dataView, offset, value, littleEndian) {
97
- dataView.setInt32(offset, value, littleEndian);
98
- },
99
- };
100
- }
101
-
102
- export class NumberFieldDefinition<
103
- TVariant extends NumberFieldVariant = NumberFieldVariant,
104
- TTypeScriptType = number,
105
- > extends StructFieldDefinition<void, TTypeScriptType> {
106
- readonly variant: TVariant;
107
-
108
- constructor(variant: TVariant, typescriptType?: TTypeScriptType) {
109
- void typescriptType;
110
- super();
111
- this.variant = variant;
112
- }
113
-
114
- getSize(): number {
115
- return this.variant.size;
116
- }
117
-
118
- create(
119
- options: Readonly<StructOptions>,
120
- struct: StructValue,
121
- value: TTypeScriptType,
122
- ): NumberFieldValue<this> {
123
- return new NumberFieldValue(this, options, struct, value);
124
- }
125
-
126
- override deserialize(
127
- options: Readonly<StructOptions>,
128
- stream: ExactReadable,
129
- struct: StructValue,
130
- ): NumberFieldValue<this>;
131
- override deserialize(
132
- options: Readonly<StructOptions>,
133
- stream: AsyncExactReadable,
134
- struct: StructValue,
135
- ): Promise<NumberFieldValue<this>>;
136
- override deserialize(
137
- options: Readonly<StructOptions>,
138
- stream: ExactReadable | AsyncExactReadable,
139
- struct: StructValue,
140
- ): ValueOrPromise<NumberFieldValue<this>> {
141
- return SyncPromise.try(() => {
142
- return stream.readExactly(this.getSize());
143
- })
144
- .then((array) => {
145
- const value = this.variant.deserialize(
146
- array,
147
- options.littleEndian,
148
- );
149
- return this.create(options, struct, value as never);
150
- })
151
- .valueOrPromise();
152
- }
153
- }
154
-
155
- export class NumberFieldValue<
156
- TDefinition extends NumberFieldDefinition<NumberFieldVariant, unknown>,
157
- > extends StructFieldValue<TDefinition> {
158
- serialize(dataView: DataView, array: Uint8Array, offset: number): void {
159
- this.definition.variant.serialize(
160
- dataView,
161
- offset,
162
- this.value as never,
163
- this.options.littleEndian,
164
- );
165
- }
166
- }