@wener/utils 1.1.47 → 1.1.49

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 (194) hide show
  1. package/README.md +9 -1
  2. package/lib/asyncs/Promises.js +54 -0
  3. package/lib/asyncs/Promises.js.map +1 -0
  4. package/lib/asyncs/createLazyPromise.js +52 -51
  5. package/lib/asyncs/createLazyPromise.js.map +1 -1
  6. package/lib/asyncs/firstOfAsyncIterator.js.map +1 -1
  7. package/lib/asyncs/isPromise.js +2 -3
  8. package/lib/asyncs/isPromise.js.map +1 -1
  9. package/lib/asyncs/nextOfAsyncIterator.js.map +1 -1
  10. package/lib/asyncs/timeout.js +4 -4
  11. package/lib/asyncs/timeout.js.map +1 -1
  12. package/lib/cn/division/DivisionCode.js +30 -17
  13. package/lib/cn/division/DivisionCode.js.map +1 -1
  14. package/lib/cn/id/{Mod11Checksum.js → Mod11.js} +3 -6
  15. package/lib/cn/id/Mod11.js.map +1 -0
  16. package/lib/cn/id/ResidentIdNumber.js +10 -12
  17. package/lib/cn/id/ResidentIdNumber.js.map +1 -1
  18. package/lib/cn/types.js +3 -0
  19. package/lib/cn/types.js.map +1 -0
  20. package/lib/cn/uscc/{Mod31Checksum.js → Mod31.js} +3 -6
  21. package/lib/cn/uscc/Mod31.js.map +1 -0
  22. package/lib/cn/uscc/USCC.js +6 -9
  23. package/lib/cn/uscc/USCC.js.map +1 -1
  24. package/lib/cn/uscc/isUSCC.js +1 -1
  25. package/lib/cn/uscc/isUSCC.js.map +1 -1
  26. package/lib/crypto/getNodeCrypto.js +14 -10
  27. package/lib/crypto/getNodeCrypto.js.map +1 -1
  28. package/lib/crypto/getRandomValues.js +5 -1
  29. package/lib/crypto/getRandomValues.js.map +1 -1
  30. package/lib/emitter/types.js +3 -0
  31. package/lib/emitter/types.js.map +1 -0
  32. package/lib/fetch/createFetchWith.js.map +1 -1
  33. package/lib/fetch/createFetchWithRetry.js.map +1 -1
  34. package/lib/fetch/http.types.js +4 -0
  35. package/lib/fetch/http.types.js.map +1 -0
  36. package/lib/index.js +6 -3
  37. package/lib/index.js.map +1 -1
  38. package/lib/io/ArrayBuffers.js.map +1 -1
  39. package/lib/io/ByteBuffer.js +235 -36
  40. package/lib/io/ByteBuffer.js.map +1 -1
  41. package/lib/langs/getGlobalStates.js +17 -0
  42. package/lib/langs/getGlobalStates.js.map +1 -0
  43. package/lib/langs/getObjectId.js +18 -0
  44. package/lib/langs/getObjectId.js.map +1 -0
  45. package/lib/langs/isNullish.js +5 -0
  46. package/lib/langs/isNullish.js.map +1 -0
  47. package/lib/logging/slog.js.map +1 -1
  48. package/lib/maths/clamp.js +7 -6
  49. package/lib/maths/clamp.js.map +1 -1
  50. package/lib/maths/random.js.map +1 -1
  51. package/lib/mitt/index.js +77 -0
  52. package/lib/mitt/index.js.map +1 -0
  53. package/lib/objects/computeIfAbsent.js +1 -1
  54. package/lib/objects/computeIfAbsent.js.map +1 -1
  55. package/lib/schema/typebox/typebox.js.map +1 -1
  56. package/lib/server/fetch/createFetchWithProxyByUndici.js.map +1 -1
  57. package/package.json +6 -14
  58. package/src/asyncs/Promises.ts +62 -0
  59. package/src/asyncs/createLazyPromise.test.ts +52 -13
  60. package/src/asyncs/createLazyPromise.ts +66 -61
  61. package/src/asyncs/firstOfAsyncIterator.ts +1 -1
  62. package/src/asyncs/isPromise.ts +3 -3
  63. package/src/asyncs/nextOfAsyncIterator.ts +1 -1
  64. package/src/asyncs/timeout.ts +4 -4
  65. package/src/cn/division/DivisionCode.ts +61 -8
  66. package/src/cn/division/division.test.ts +6 -0
  67. package/src/cn/id/{Mod11Checksum.ts → Mod11.ts} +3 -6
  68. package/src/cn/id/ResidentIdNumber.ts +11 -13
  69. package/src/cn/id/id.test.ts +5 -5
  70. package/src/cn/scripts/gen.test.ts +2 -1
  71. package/src/cn/types.ts +11 -0
  72. package/src/cn/uscc/{Mod31Checksum.ts → Mod31.ts} +3 -7
  73. package/src/cn/uscc/USCC.ts +7 -11
  74. package/src/cn/uscc/isUSCC.ts +1 -1
  75. package/src/cn/uscc/uscc.test.ts +4 -4
  76. package/src/crypto/getNodeCrypto.ts +16 -11
  77. package/src/crypto/getRandomValues.ts +6 -1
  78. package/src/emitter/types.ts +18 -0
  79. package/src/fetch/createFetchWith.ts +1 -1
  80. package/src/fetch/createFetchWithRetry.ts +1 -1
  81. package/src/fetch/http.types.ts +46 -0
  82. package/src/index.ts +7 -3
  83. package/src/io/ArrayBuffers.ts +7 -3
  84. package/src/io/ByteBuffer.test.ts +33 -6
  85. package/src/io/ByteBuffer.ts +272 -41
  86. package/src/langs/getGlobalStates.ts +21 -0
  87. package/src/langs/getObjectId.ts +20 -0
  88. package/src/langs/isNullish.ts +3 -0
  89. package/src/langs/mixin.test.ts +43 -0
  90. package/src/logging/slog.ts +1 -1
  91. package/src/maths/clamp.test.ts +5 -1
  92. package/src/maths/clamp.ts +7 -7
  93. package/src/maths/random.ts +1 -1
  94. package/src/mitt/README.md +1 -0
  95. package/src/mitt/index.ts +114 -0
  96. package/src/objects/computeIfAbsent.ts +3 -2
  97. package/src/objects/merge/merge.test.ts +1 -1
  98. package/src/schema/typebox/typebox.ts +1 -1
  99. package/src/server/fetch/createFetchWithProxyByUndici.ts +2 -2
  100. package/tsconfig.json +4 -1
  101. package/lib/asyncs/sleep.js +0 -3
  102. package/lib/asyncs/sleep.js.map +0 -1
  103. package/lib/cn/id/Mod11Checksum.js.map +0 -1
  104. package/lib/cn/uscc/Mod31Checksum.js.map +0 -1
  105. package/lib/schema/typebox/gen/codegen/common/encoder.js +0 -94
  106. package/lib/schema/typebox/gen/codegen/common/encoder.js.map +0 -1
  107. package/lib/schema/typebox/gen/codegen/common/formatter.js +0 -33
  108. package/lib/schema/typebox/gen/codegen/common/formatter.js.map +0 -1
  109. package/lib/schema/typebox/gen/codegen/common/index.js +0 -29
  110. package/lib/schema/typebox/gen/codegen/common/index.js.map +0 -1
  111. package/lib/schema/typebox/gen/codegen/common/jsdoc.js +0 -117
  112. package/lib/schema/typebox/gen/codegen/common/jsdoc.js.map +0 -1
  113. package/lib/schema/typebox/gen/codegen/expression/compiler.js +0 -364
  114. package/lib/schema/typebox/gen/codegen/expression/compiler.js.map +0 -1
  115. package/lib/schema/typebox/gen/codegen/expression/errors.js +0 -259
  116. package/lib/schema/typebox/gen/codegen/expression/errors.js.map +0 -1
  117. package/lib/schema/typebox/gen/codegen/expression/evaluator.js +0 -254
  118. package/lib/schema/typebox/gen/codegen/expression/evaluator.js.map +0 -1
  119. package/lib/schema/typebox/gen/codegen/expression/expression.js +0 -381
  120. package/lib/schema/typebox/gen/codegen/expression/expression.js.map +0 -1
  121. package/lib/schema/typebox/gen/codegen/expression/index.js +0 -32
  122. package/lib/schema/typebox/gen/codegen/expression/index.js.map +0 -1
  123. package/lib/schema/typebox/gen/codegen/index.js +0 -29
  124. package/lib/schema/typebox/gen/codegen/index.js.map +0 -1
  125. package/lib/schema/typebox/gen/codegen/model/index.js +0 -40
  126. package/lib/schema/typebox/gen/codegen/model/index.js.map +0 -1
  127. package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js +0 -260
  128. package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js.map +0 -1
  129. package/lib/schema/typebox/gen/codegen/model/model-to-expression.js +0 -383
  130. package/lib/schema/typebox/gen/codegen/model/model-to-expression.js.map +0 -1
  131. package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js +0 -238
  132. package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js.map +0 -1
  133. package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js +0 -274
  134. package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js.map +0 -1
  135. package/lib/schema/typebox/gen/codegen/model/model-to-javascript.js +0 -47
  136. package/lib/schema/typebox/gen/codegen/model/model-to-javascript.js.map +0 -1
  137. package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js +0 -192
  138. package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js.map +0 -1
  139. package/lib/schema/typebox/gen/codegen/model/model-to-typebox.js +0 -33
  140. package/lib/schema/typebox/gen/codegen/model/model-to-typebox.js.map +0 -1
  141. package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js +0 -188
  142. package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js.map +0 -1
  143. package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js +0 -239
  144. package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js.map +0 -1
  145. package/lib/schema/typebox/gen/codegen/model/model-to-value.js +0 -43
  146. package/lib/schema/typebox/gen/codegen/model/model-to-value.js.map +0 -1
  147. package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js +0 -227
  148. package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js.map +0 -1
  149. package/lib/schema/typebox/gen/codegen/model/model-to-yup.js +0 -225
  150. package/lib/schema/typebox/gen/codegen/model/model-to-yup.js.map +0 -1
  151. package/lib/schema/typebox/gen/codegen/model/model-to-zod.js +0 -248
  152. package/lib/schema/typebox/gen/codegen/model/model-to-zod.js.map +0 -1
  153. package/lib/schema/typebox/gen/codegen/model/model.js +0 -27
  154. package/lib/schema/typebox/gen/codegen/model/model.js.map +0 -1
  155. package/lib/schema/typebox/gen/codegen/typescript/index.js +0 -28
  156. package/lib/schema/typebox/gen/codegen/typescript/index.js.map +0 -1
  157. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js +0 -72
  158. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js.map +0 -1
  159. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js +0 -620
  160. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js.map +0 -1
  161. package/lib/schema/typebox/gen/index.js +0 -3
  162. package/lib/schema/typebox/gen/index.js.map +0 -1
  163. package/src/asyncs/sleep.ts +0 -1
  164. package/src/schema/typebox/gen/codegen/common/encoder.ts +0 -99
  165. package/src/schema/typebox/gen/codegen/common/formatter.ts +0 -31
  166. package/src/schema/typebox/gen/codegen/common/index.ts +0 -29
  167. package/src/schema/typebox/gen/codegen/common/jsdoc.ts +0 -93
  168. package/src/schema/typebox/gen/codegen/expression/compiler.ts +0 -377
  169. package/src/schema/typebox/gen/codegen/expression/errors.ts +0 -302
  170. package/src/schema/typebox/gen/codegen/expression/evaluator.ts +0 -268
  171. package/src/schema/typebox/gen/codegen/expression/expression.ts +0 -538
  172. package/src/schema/typebox/gen/codegen/expression/index.ts +0 -32
  173. package/src/schema/typebox/gen/codegen/index.ts +0 -29
  174. package/src/schema/typebox/gen/codegen/model/index.ts +0 -40
  175. package/src/schema/typebox/gen/codegen/model/model-to-arktype.ts +0 -266
  176. package/src/schema/typebox/gen/codegen/model/model-to-expression.ts +0 -378
  177. package/src/schema/typebox/gen/codegen/model/model-to-grpc.ts +0 -244
  178. package/src/schema/typebox/gen/codegen/model/model-to-io-ts.ts +0 -294
  179. package/src/schema/typebox/gen/codegen/model/model-to-javascript.ts +0 -42
  180. package/src/schema/typebox/gen/codegen/model/model-to-json-schema.ts +0 -166
  181. package/src/schema/typebox/gen/codegen/model/model-to-typebox.ts +0 -32
  182. package/src/schema/typebox/gen/codegen/model/model-to-typescript.ts +0 -189
  183. package/src/schema/typebox/gen/codegen/model/model-to-valibot.ts +0 -236
  184. package/src/schema/typebox/gen/codegen/model/model-to-value.ts +0 -42
  185. package/src/schema/typebox/gen/codegen/model/model-to-yrel.ts +0 -232
  186. package/src/schema/typebox/gen/codegen/model/model-to-yup.ts +0 -226
  187. package/src/schema/typebox/gen/codegen/model/model-to-zod.ts +0 -251
  188. package/src/schema/typebox/gen/codegen/model/model.ts +0 -33
  189. package/src/schema/typebox/gen/codegen/typescript/index.ts +0 -28
  190. package/src/schema/typebox/gen/codegen/typescript/typescript-to-model.ts +0 -61
  191. package/src/schema/typebox/gen/codegen/typescript/typescript-to-typebox.ts +0 -647
  192. package/src/schema/typebox/gen/gen.test.ts +0 -12
  193. package/src/schema/typebox/gen/index.ts +0 -1
  194. /package/src/schema/{typebox/gen/README.md → README.md} +0 -0
@@ -29,17 +29,35 @@ function asBuffer(o) {
29
29
  /**
30
30
  * @see {@link https://www.egret.uk/docs/egretengine/engine/egret.ByteArray egret.ByteArray}
31
31
  * @see {@link https://github.com/protobufjs/bytebuffer.js protobufjs/bytebuffer.js}
32
- * @see {@link https://netty.io/4.1/api/io/netty/buffer/ByteBuf.html ByteBuf}
32
+ * @see {@link https://netty.io/4.1/api/io/netty/buffer/ByteBuf.html io.netty.buffer.ByteBuf}
33
+ * @see {@link https://nodejs.org/api/buffer.html node:buffer}
34
+ * @see {@link https://www.postgresql.org/docs/current/datatype.html PostgreSQL Data Types}
33
35
  */ export class ByteBuffer {
34
36
  position = 0;
35
37
  #buffer;
36
38
  #view;
39
+ #bytes;
40
+ // #endian: 'big' | 'little' = 'big';
41
+ #bigEndian = true;
37
42
  constructor(buffer = new ArrayBuffer(0, {
38
43
  maxByteLength: 1024
39
44
  })){
40
45
  this.#buffer = asBuffer(buffer);
41
46
  // NOTE prefer view over buffer, avoid the slice overhead ?
42
47
  this.#view = new DataView(this.#buffer);
48
+ this.#bytes = new Uint8Array(this.#buffer);
49
+ }
50
+ get littleEndian() {
51
+ return !this.#bigEndian;
52
+ }
53
+ set littleEndian(v) {
54
+ this.#bigEndian = !v;
55
+ }
56
+ get bigEndian() {
57
+ return this.#bigEndian;
58
+ }
59
+ set bigEndian(v) {
60
+ this.#bigEndian = v;
43
61
  }
44
62
  get view() {
45
63
  return this.#view;
@@ -50,6 +68,10 @@ function asBuffer(o) {
50
68
  set buffer(buffer) {
51
69
  this.#buffer = asBuffer(buffer);
52
70
  this.#view = new DataView(this.#buffer);
71
+ this.#bytes = new Uint8Array(this.#buffer);
72
+ }
73
+ get bytes() {
74
+ return this.#bytes;
53
75
  }
54
76
  get length() {
55
77
  return this.view.byteLength;
@@ -57,12 +79,8 @@ function asBuffer(o) {
57
79
  set length(length) {
58
80
  this.resize(length);
59
81
  }
60
- willWrite(length) {
61
- if (this.remaining() < length) {
62
- this.resize(this.length + length);
63
- }
64
- }
65
82
  resize(newLength) {
83
+ // 1.2 for buffer growth
66
84
  this.buffer = ArrayBuffers.resize(this.buffer, newLength, Math.ceil(newLength * 1.2));
67
85
  }
68
86
  writeByte(value) {
@@ -71,9 +89,13 @@ function asBuffer(o) {
71
89
  }
72
90
  writeBytes(bytes, len = bytes.byteLength) {
73
91
  this.willWrite(len);
74
- if (len !== bytes.byteLength) bytes = bytes.slice(0, len);
75
- new Uint8Array(this.buffer).set(new Uint8Array(bytes), this.position);
76
- this.position += bytes.byteLength;
92
+ // ensure len first
93
+ this.bytes.set(new Uint8Array(bytes).subarray(0, len), this.position);
94
+ if (len > bytes.byteLength) {
95
+ // fill zero
96
+ this.bytes.fill(0, this.position + bytes.byteLength, this.position + len);
97
+ }
98
+ this.position += len;
77
99
  }
78
100
  writeInt8(value) {
79
101
  this.willWrite(1);
@@ -87,52 +109,71 @@ function asBuffer(o) {
87
109
  }
88
110
  writeInt16(value) {
89
111
  this.willWrite(2);
90
- this.view.setInt16(this.position, value);
112
+ this.view.setInt16(this.position, value, this.littleEndian);
91
113
  this.position += 2;
92
114
  }
93
115
  writeUint16(value) {
94
116
  this.willWrite(2);
95
- this.view.setUint16(this.position, value);
117
+ this.view.setUint16(this.position, value, this.littleEndian);
96
118
  this.position += 2;
97
119
  }
120
+ writeUint24(value) {
121
+ this.willWrite(3);
122
+ this.view.setUint8(this.position, value & 0xff);
123
+ this.view.setUint16(this.position + 1, value >> 8, this.littleEndian);
124
+ this.position += 3;
125
+ }
98
126
  writeInt32(value) {
99
127
  this.willWrite(4);
100
- this.view.setInt32(this.position, value);
128
+ this.view.setInt32(this.position, value, this.littleEndian);
101
129
  this.position += 4;
102
130
  }
103
131
  writeUint32(value) {
104
132
  this.willWrite(4);
105
- this.view.setUint32(this.position, value);
133
+ this.view.setUint32(this.position, value, this.littleEndian);
106
134
  this.position += 4;
107
135
  }
108
136
  writeInt64(value) {
109
137
  this.willWrite(8);
110
- this.view.setBigInt64(this.position, value);
138
+ this.view.setBigInt64(this.position, bigintOf(value), this.littleEndian);
111
139
  this.position += 8;
112
140
  }
113
141
  writeUint64(value) {
114
142
  this.willWrite(8);
115
- this.view.setBigUint64(this.position, value);
143
+ this.view.setBigUint64(this.position, bigintOf(value), this.littleEndian);
116
144
  this.position += 8;
117
145
  }
118
146
  writeFloat32(value) {
119
147
  this.willWrite(4);
120
- this.view.setFloat32(this.position, value);
148
+ this.view.setFloat32(this.position, value, this.littleEndian);
121
149
  this.position += 4;
122
150
  }
123
151
  writeFloat64(value) {
124
152
  this.willWrite(8);
125
- this.view.setFloat64(this.position, value);
153
+ this.view.setFloat64(this.position, value, this.littleEndian);
126
154
  this.position += 8;
127
155
  }
128
156
  writeBoolean(value) {
129
157
  this.writeByte(value ? 1 : 0);
130
158
  }
131
159
  writeString(value, len) {
132
- let encoder = new TextEncoder();
133
- let bytes = encoder.encode(value);
160
+ let bytes = this.encodeText(value);
134
161
  this.writeBytes(bytes, len);
135
162
  }
163
+ readSizeString(n) {
164
+ return this.readString(requireNumber(this.readUint(n)));
165
+ }
166
+ writeSizeString(value, n) {
167
+ let out = this.encodeText(value);
168
+ this.writeUint(out.length, n);
169
+ this.writeBytes(out);
170
+ }
171
+ encodeText(value) {
172
+ return new TextEncoder().encode(value);
173
+ }
174
+ decodeText(bytes) {
175
+ return new TextDecoder().decode(bytes);
176
+ }
136
177
  readByte() {
137
178
  return this.view.getUint8(this.position++);
138
179
  }
@@ -151,72 +192,101 @@ function asBuffer(o) {
151
192
  this.position += 1;
152
193
  return value;
153
194
  }
195
+ readUnsignedByte() {
196
+ return this.readUint8();
197
+ }
198
+ readThrough(end) {
199
+ // readUntil 不包含 end
200
+ let idx = this.bytes.indexOf(end, this.position);
201
+ if (idx === -1) {
202
+ throw new Error(`Byte ${end} not found starting from position ${this.position}`);
203
+ }
204
+ let bytes = this.buffer.slice(this.position, idx + 1);
205
+ this.position = idx + 1;
206
+ return bytes;
207
+ }
154
208
  readInt16() {
155
- let value = this.view.getInt16(this.position);
209
+ let value = this.view.getInt16(this.position, this.littleEndian);
156
210
  this.position += 2;
157
211
  return value;
158
212
  }
159
213
  readUint16() {
160
- let value = this.view.getUint16(this.position);
214
+ let value = this.view.getUint16(this.position, this.littleEndian);
161
215
  this.position += 2;
162
216
  return value;
163
217
  }
164
218
  readInt32() {
165
- let value = this.view.getInt32(this.position);
219
+ let value = this.view.getInt32(this.position, this.littleEndian);
166
220
  this.position += 4;
167
221
  return value;
168
222
  }
169
223
  readUint32() {
170
- let value = this.view.getUint32(this.position);
224
+ let value = this.view.getUint32(this.position, this.littleEndian);
171
225
  this.position += 4;
172
226
  return value;
173
227
  }
174
228
  readInt64() {
175
- let value = this.view.getBigInt64(this.position);
229
+ let value = this.view.getBigInt64(this.position, this.littleEndian);
176
230
  this.position += 8;
177
231
  return safeNumber(value);
178
232
  }
179
233
  readUint64() {
180
- let value = this.view.getBigUint64(this.position);
234
+ let value = this.view.getBigUint64(this.position, this.littleEndian);
181
235
  this.position += 8;
182
236
  return safeNumber(value);
183
237
  }
184
238
  readFloat32() {
185
- let value = this.view.getFloat32(this.position);
239
+ let value = this.view.getFloat32(this.position, this.littleEndian);
186
240
  this.position += 4;
187
241
  return value;
188
242
  }
189
243
  readFloat64() {
190
- let value = this.view.getFloat64(this.position);
244
+ let value = this.view.getFloat64(this.position, this.littleEndian);
191
245
  this.position += 8;
192
246
  return value;
193
247
  }
194
248
  readBoolean() {
249
+ // or !== 0?
195
250
  return this.readByte() === 1;
196
251
  }
197
252
  readString(length) {
198
253
  let bytes = this.readBytes(length);
199
- let decoder = new TextDecoder();
200
254
  let a = new Uint8Array(bytes);
201
255
  let idx = a.indexOf(0);
202
256
  if (idx !== -1) {
203
257
  bytes = bytes.slice(0, idx);
204
258
  }
205
- return decoder.decode(bytes);
259
+ return this.decodeText(bytes);
206
260
  }
207
261
  readHexString(length) {
208
262
  let bytes = this.readBytes(length);
209
263
  return ArrayBuffers.toHex(bytes);
210
264
  }
265
+ writeHexString(value, len) {
266
+ this.writeBytes(ArrayBuffers.fromHex(value), len);
267
+ }
211
268
  writeInt24(value) {
269
+ // fixme byte order
212
270
  this.writeUint8(value & 0xff);
213
271
  this.writeUint16(value >> 8);
214
272
  }
215
273
  readInt24() {
216
- return this.readUint8() | this.readUint16() << 8;
274
+ // fixme recheck
275
+ let value = this.readUint24();
276
+ if (value & 0x800000) {
277
+ // If the sign bit is set, extend the sign
278
+ value |= 0xff000000;
279
+ }
280
+ return value;
281
+ }
282
+ readUint24() {
283
+ // fixme recheck
284
+ return this.readUint8() | this.readUint8() << 8 | this.readUint8() << 16;
217
285
  }
218
286
  writeZero(length) {
219
- this.writeBytes(new Uint8Array(length).buffer);
287
+ this.willWrite(length);
288
+ this.bytes.fill(0, this.position, this.position + length);
289
+ this.position += length;
220
290
  }
221
291
  writeValue(a, b) {
222
292
  const tv = typeof a === 'string' ? {
@@ -238,16 +308,26 @@ function asBuffer(o) {
238
308
  case 'int16':
239
309
  this.writeInt16(value);
240
310
  break;
311
+ case 'uint24':
312
+ this.writeUint24(value);
313
+ break;
314
+ case 'int24':
315
+ this.writeInt24(value);
316
+ break;
241
317
  case 'uint32':
318
+ case 'uint':
242
319
  this.writeUint32(value);
243
320
  break;
244
321
  case 'int32':
322
+ case 'int':
245
323
  this.writeInt32(value);
246
324
  break;
247
325
  case 'float32':
326
+ case 'float':
248
327
  this.writeFloat32(value);
249
328
  break;
250
329
  case 'float64':
330
+ case 'double':
251
331
  this.writeFloat64(value);
252
332
  break;
253
333
  case 'string':
@@ -263,17 +343,119 @@ function asBuffer(o) {
263
343
  throw new Error(`Unknown type ${type}`);
264
344
  }
265
345
  }
266
- readInt() {
267
- return this.readInt32();
346
+ readUnsignedShort() {
347
+ return this.readUint16();
348
+ }
349
+ readShort() {
350
+ return this.readInt16();
351
+ }
352
+ readInt(bytesOrBits = 32) {
353
+ switch(bytesOrBits){
354
+ case 1:
355
+ case 8:
356
+ return this.readInt8();
357
+ case 2:
358
+ case 16:
359
+ return this.readInt16();
360
+ case 3:
361
+ case 24:
362
+ return this.readInt24();
363
+ case 4:
364
+ case 32:
365
+ return this.readInt32();
366
+ // skip 8 byte for bits
367
+ case 64:
368
+ return this.readInt64();
369
+ default:
370
+ throw new Error(`Unknown int${bytesOrBits}`);
371
+ }
268
372
  }
269
- readFloat() {
270
- return this.readFloat32();
373
+ readUint(bytesOrBits = 32) {
374
+ switch(bytesOrBits){
375
+ case 1:
376
+ case 8:
377
+ return this.readUint8();
378
+ case 2:
379
+ case 16:
380
+ return this.readUint16();
381
+ case 3:
382
+ case 24:
383
+ return this.readUint24();
384
+ case 4:
385
+ case 32:
386
+ return this.readUint32();
387
+ // skip 8 byte for bits
388
+ case 64:
389
+ return this.readUint64();
390
+ default:
391
+ throw new Error(`Unexpected int size: ${bytesOrBits}`);
392
+ }
393
+ }
394
+ writeUint(value, bytesOrBits = 32) {
395
+ switch(bytesOrBits){
396
+ case 1:
397
+ case 8:
398
+ this.writeUint8(value);
399
+ break;
400
+ case 2:
401
+ case 16:
402
+ this.writeUint16(value);
403
+ break;
404
+ case 3:
405
+ case 24:
406
+ this.writeUint24(value);
407
+ break;
408
+ case 4:
409
+ case 32:
410
+ this.writeUint32(value);
411
+ break;
412
+ case 64:
413
+ this.writeUint64(value);
414
+ break;
415
+ default:
416
+ throw new Error(`Unexpected uint size: ${bytesOrBits}`);
417
+ }
418
+ }
419
+ readFloat(n = 32) {
420
+ switch(n){
421
+ case 4:
422
+ case 32:
423
+ return this.readFloat32();
424
+ case 8:
425
+ case 64:
426
+ return this.readFloat64();
427
+ default:
428
+ throw new Error(`Unexpected float size: ${n}`);
429
+ }
430
+ }
431
+ writeFloat(value, n = 32) {
432
+ switch(n){
433
+ case 4:
434
+ case 32:
435
+ this.writeFloat32(value);
436
+ break;
437
+ case 8:
438
+ case 64:
439
+ this.writeFloat64(value);
440
+ break;
441
+ default:
442
+ throw new Error(`Unexpected float size: ${n}`);
443
+ }
271
444
  }
272
445
  readDouble() {
273
446
  return this.readFloat64();
274
447
  }
448
+ writeDouble(value) {
449
+ this.writeFloat64(value);
450
+ }
275
451
  remaining() {
276
- return this.view.byteLength - this.position;
452
+ return this.length - this.position;
453
+ }
454
+ hasRemaining() {
455
+ return this.remaining() > 0;
456
+ }
457
+ readRemaining() {
458
+ return this.readBytes(this.remaining());
277
459
  }
278
460
  toUint8Array() {
279
461
  return new Uint8Array(this.buffer);
@@ -284,6 +466,11 @@ function asBuffer(o) {
284
466
  toBase64() {
285
467
  return ArrayBuffers.toBase64(this.buffer);
286
468
  }
469
+ willWrite(length) {
470
+ if (this.remaining() < length) {
471
+ this.resize(this.position + length);
472
+ }
473
+ }
287
474
  }
288
475
  function safeNumber(n) {
289
476
  if (n > Number.MAX_SAFE_INTEGER) {
@@ -291,5 +478,17 @@ function safeNumber(n) {
291
478
  }
292
479
  return Number(n);
293
480
  }
481
+ function bigintOf(n) {
482
+ if (typeof n === 'bigint') {
483
+ return n;
484
+ }
485
+ return BigInt(n);
486
+ }
487
+ function requireNumber(n) {
488
+ if (typeof n !== 'number') {
489
+ throw new Error(`Expected number, got ${n}`);
490
+ }
491
+ return n;
492
+ }
294
493
 
295
494
  //# sourceMappingURL=ByteBuffer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/io/ByteBuffer.ts"],"sourcesContent":["import { isDefined } from '../langs/isDefined';\nimport { ArrayBuffers } from './ArrayBuffers';\n\ntype AnyBuffer = BufferSource | ArrayBufferLike;\n\nfunction asBuffer(o: AnyBuffer) {\n if (o instanceof ArrayBuffer) {\n return o;\n }\n if (ArrayBuffer.isView(o)) {\n // 保留 offset&length\n if (o.byteLength !== o.buffer.byteLength) {\n // ArrayBuffer 没有 subarray\n // if ('subarray' in o.buffer) {\n // return (o.buffer as any).subarray(o.byteOffset, o.byteOffset + o.byteLength);\n // }\n return o.buffer.slice(o.byteOffset, o.byteOffset + o.byteLength);\n }\n return o.buffer;\n }\n return o;\n}\n\n// function asView(o: AnyBuffer) {\n// if (o instanceof DataView) {\n// return o;\n// }\n// if (ArrayBuffer.isView(o)) {\n// // 不 clone 也能保留 offset&length\n// return new DataView(o.buffer, o.byteOffset, o.byteLength);\n// }\n// return new DataView(o);\n// }\n\n/**\n * @see {@link https://www.egret.uk/docs/egretengine/engine/egret.ByteArray egret.ByteArray}\n * @see {@link https://github.com/protobufjs/bytebuffer.js protobufjs/bytebuffer.js}\n * @see {@link https://netty.io/4.1/api/io/netty/buffer/ByteBuf.html ByteBuf}\n */\nexport class ByteBuffer {\n position = 0;\n\n #buffer: ArrayBufferLike;\n #view: DataView;\n\n constructor(buffer: AnyBuffer = new ArrayBuffer(0, { maxByteLength: 1024 })) {\n this.#buffer = asBuffer(buffer);\n // NOTE prefer view over buffer, avoid the slice overhead ?\n this.#view = new DataView(this.#buffer);\n }\n\n get view() {\n return this.#view;\n }\n\n get buffer(): ArrayBufferLike {\n return this.#buffer;\n }\n\n set buffer(buffer: AnyBuffer) {\n this.#buffer = asBuffer(buffer);\n this.#view = new DataView(this.#buffer);\n }\n\n get length() {\n return this.view.byteLength;\n }\n\n set length(length: number) {\n this.resize(length);\n }\n\n private willWrite(length: number) {\n if (this.remaining() < length) {\n this.resize(this.length + length);\n }\n }\n\n resize(newLength: number) {\n this.buffer = ArrayBuffers.resize(this.buffer, newLength, Math.ceil(newLength * 1.2));\n }\n\n writeByte(value: number) {\n this.willWrite(1);\n this.view.setUint8(this.position++, value);\n }\n\n writeBytes(bytes: ArrayBufferLike, len: number = bytes.byteLength) {\n this.willWrite(len);\n if (len !== bytes.byteLength) bytes = bytes.slice(0, len);\n new Uint8Array(this.buffer).set(new Uint8Array(bytes), this.position);\n this.position += bytes.byteLength;\n }\n\n writeInt8(value: number) {\n this.willWrite(1);\n this.view.setInt8(this.position, value);\n this.position += 1;\n }\n\n writeUint8(value: number) {\n this.willWrite(1);\n this.view.setUint8(this.position, value);\n this.position += 1;\n }\n\n writeInt16(value: number) {\n this.willWrite(2);\n this.view.setInt16(this.position, value);\n this.position += 2;\n }\n\n writeUint16(value: number) {\n this.willWrite(2);\n this.view.setUint16(this.position, value);\n this.position += 2;\n }\n\n writeInt32(value: number) {\n this.willWrite(4);\n this.view.setInt32(this.position, value);\n this.position += 4;\n }\n\n writeUint32(value: number) {\n this.willWrite(4);\n this.view.setUint32(this.position, value);\n this.position += 4;\n }\n\n writeInt64(value: bigint) {\n this.willWrite(8);\n this.view.setBigInt64(this.position, value);\n this.position += 8;\n }\n\n writeUint64(value: bigint) {\n this.willWrite(8);\n this.view.setBigUint64(this.position, value);\n this.position += 8;\n }\n\n writeFloat32(value: number) {\n this.willWrite(4);\n this.view.setFloat32(this.position, value);\n this.position += 4;\n }\n\n writeFloat64(value: number) {\n this.willWrite(8);\n this.view.setFloat64(this.position, value);\n this.position += 8;\n }\n\n writeBoolean(value: boolean) {\n this.writeByte(value ? 1 : 0);\n }\n\n writeString(value: string): void;\n writeString(value: string, len?: number): void;\n writeString(value: string, len?: number) {\n let encoder = new TextEncoder();\n let bytes = encoder.encode(value);\n this.writeBytes(bytes, len);\n }\n\n readByte() {\n return this.view.getUint8(this.position++);\n }\n\n readBytes(length: number) {\n let bytes = this.buffer.slice(this.position, this.position + length);\n this.position += length;\n return bytes;\n }\n\n readInt8() {\n let value = this.view.getInt8(this.position);\n this.position += 1;\n return value;\n }\n\n readUint8() {\n let value = this.view.getUint8(this.position);\n this.position += 1;\n return value;\n }\n\n readInt16() {\n let value = this.view.getInt16(this.position);\n this.position += 2;\n return value;\n }\n\n readUint16() {\n let value = this.view.getUint16(this.position);\n this.position += 2;\n return value;\n }\n\n readInt32() {\n let value = this.view.getInt32(this.position);\n this.position += 4;\n return value;\n }\n\n readUint32() {\n let value = this.view.getUint32(this.position);\n this.position += 4;\n return value;\n }\n\n readInt64() {\n let value = this.view.getBigInt64(this.position);\n this.position += 8;\n return safeNumber(value);\n }\n\n readUint64() {\n let value = this.view.getBigUint64(this.position);\n this.position += 8;\n return safeNumber(value);\n }\n\n readFloat32() {\n let value = this.view.getFloat32(this.position);\n this.position += 4;\n return value;\n }\n\n readFloat64() {\n let value = this.view.getFloat64(this.position);\n this.position += 8;\n return value;\n }\n\n readBoolean() {\n return this.readByte() === 1;\n }\n\n readString(length: number) {\n let bytes = this.readBytes(length);\n let decoder = new TextDecoder();\n let a = new Uint8Array(bytes);\n let idx = a.indexOf(0);\n if (idx !== -1) {\n bytes = bytes.slice(0, idx);\n }\n return decoder.decode(bytes);\n }\n\n readHexString(length: number) {\n let bytes = this.readBytes(length);\n return ArrayBuffers.toHex(bytes);\n }\n\n writeInt24(value: number) {\n this.writeUint8(value & 0xff);\n this.writeUint16(value >> 8);\n }\n\n readInt24() {\n return this.readUint8() | (this.readUint16() << 8);\n }\n\n writeZero(length: number) {\n this.writeBytes(new Uint8Array(length).buffer);\n }\n\n writeValue(typ: TypedValue['type'], val: TypedValue['value']): void;\n writeValue(tv: TypedValue): void;\n writeValue(a: any, b?: any) {\n const tv: TypedValue = typeof a === 'string' ? { type: a, value: b } : a;\n const { type, value, length } = tv;\n switch (type) {\n case 'uint8':\n this.writeUint8(value);\n break;\n case 'byte':\n case 'int8':\n this.writeInt8(value);\n break;\n case 'uint16':\n this.writeUint16(value);\n break;\n case 'int16':\n this.writeInt16(value);\n break;\n case 'uint32':\n this.writeUint32(value);\n break;\n case 'int32':\n this.writeInt32(value);\n break;\n case 'float32':\n this.writeFloat32(value);\n break;\n case 'float64':\n this.writeFloat64(value);\n break;\n case 'string':\n this.writeString(value, length);\n break;\n case 'boolean':\n this.writeBoolean(value);\n break;\n case 'bytes':\n this.writeBytes(value);\n break;\n default:\n throw new Error(`Unknown type ${type}`);\n }\n }\n\n readInt() {\n return this.readInt32();\n }\n\n readFloat() {\n return this.readFloat32();\n }\n\n readDouble() {\n return this.readFloat64();\n }\n\n remaining() {\n return this.view.byteLength - this.position;\n }\n\n toUint8Array() {\n return new Uint8Array(this.buffer);\n }\n\n toHex() {\n return ArrayBuffers.toHex(this.buffer);\n }\n\n toBase64() {\n return ArrayBuffers.toBase64(this.buffer);\n }\n}\n\nexport interface TypedValue {\n type:\n | 'byte'\n | 'bytes'\n | 'uint8'\n | 'int8'\n | 'uint16'\n | 'int16'\n | 'uint32'\n | 'int32'\n | 'float32'\n | 'float64'\n | 'string'\n | 'boolean';\n value: any;\n length?: number;\n}\n\nfunction safeNumber(n: bigint) {\n if (n > Number.MAX_SAFE_INTEGER) {\n return n;\n }\n return Number(n);\n}\n"],"names":["ArrayBuffers","asBuffer","o","ArrayBuffer","isView","byteLength","buffer","slice","byteOffset","ByteBuffer","position","view","constructor","maxByteLength","DataView","length","resize","willWrite","remaining","newLength","Math","ceil","writeByte","value","setUint8","writeBytes","bytes","len","Uint8Array","set","writeInt8","setInt8","writeUint8","writeInt16","setInt16","writeUint16","setUint16","writeInt32","setInt32","writeUint32","setUint32","writeInt64","setBigInt64","writeUint64","setBigUint64","writeFloat32","setFloat32","writeFloat64","setFloat64","writeBoolean","writeString","encoder","TextEncoder","encode","readByte","getUint8","readBytes","readInt8","getInt8","readUint8","readInt16","getInt16","readUint16","getUint16","readInt32","getInt32","readUint32","getUint32","readInt64","getBigInt64","safeNumber","readUint64","getBigUint64","readFloat32","getFloat32","readFloat64","getFloat64","readBoolean","readString","decoder","TextDecoder","a","idx","indexOf","decode","readHexString","toHex","writeInt24","readInt24","writeZero","writeValue","b","tv","type","Error","readInt","readFloat","readDouble","toUint8Array","toBase64","n","Number","MAX_SAFE_INTEGER"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/io/ByteBuffer.ts"],"sourcesContent":["import { ArrayBuffers } from './ArrayBuffers';\n\ntype AnyBuffer = BufferSource | ArrayBufferLike;\n\nfunction asBuffer(o: AnyBuffer) {\n if (o instanceof ArrayBuffer) {\n return o;\n }\n if (ArrayBuffer.isView(o)) {\n // 保留 offset&length\n if (o.byteLength !== o.buffer.byteLength) {\n // ArrayBuffer 没有 subarray\n // if ('subarray' in o.buffer) {\n // return (o.buffer as any).subarray(o.byteOffset, o.byteOffset + o.byteLength);\n // }\n return o.buffer.slice(o.byteOffset, o.byteOffset + o.byteLength);\n }\n return o.buffer;\n }\n return o;\n}\n\n// function asView(o: AnyBuffer) {\n// if (o instanceof DataView) {\n// return o;\n// }\n// if (ArrayBuffer.isView(o)) {\n// // 不 clone 也能保留 offset&length\n// return new DataView(o.buffer, o.byteOffset, o.byteLength);\n// }\n// return new DataView(o);\n// }\n\n/**\n * @see {@link https://www.egret.uk/docs/egretengine/engine/egret.ByteArray egret.ByteArray}\n * @see {@link https://github.com/protobufjs/bytebuffer.js protobufjs/bytebuffer.js}\n * @see {@link https://netty.io/4.1/api/io/netty/buffer/ByteBuf.html io.netty.buffer.ByteBuf}\n * @see {@link https://nodejs.org/api/buffer.html node:buffer}\n * @see {@link https://www.postgresql.org/docs/current/datatype.html PostgreSQL Data Types}\n */\nexport class ByteBuffer {\n position = 0;\n\n #buffer: ArrayBufferLike;\n #view: DataView;\n #bytes: Uint8Array;\n // #endian: 'big' | 'little' = 'big';\n #bigEndian = true;\n\n constructor(buffer: AnyBuffer = new ArrayBuffer(0, { maxByteLength: 1024 })) {\n this.#buffer = asBuffer(buffer);\n // NOTE prefer view over buffer, avoid the slice overhead ?\n this.#view = new DataView(this.#buffer);\n this.#bytes = new Uint8Array(this.#buffer);\n }\n\n get littleEndian() {\n return !this.#bigEndian;\n }\n\n set littleEndian(v: boolean) {\n this.#bigEndian = !v;\n }\n\n get bigEndian() {\n return this.#bigEndian;\n }\n\n set bigEndian(v: boolean) {\n this.#bigEndian = v;\n }\n\n get view() {\n return this.#view;\n }\n\n get buffer(): ArrayBufferLike {\n return this.#buffer;\n }\n\n set buffer(buffer: AnyBuffer) {\n this.#buffer = asBuffer(buffer);\n this.#view = new DataView(this.#buffer);\n this.#bytes = new Uint8Array(this.#buffer);\n }\n\n get bytes(): Uint8Array {\n return this.#bytes;\n }\n\n get length() {\n return this.view.byteLength;\n }\n\n set length(length: number) {\n this.resize(length);\n }\n\n resize(newLength: number) {\n // 1.2 for buffer growth\n this.buffer = ArrayBuffers.resize(this.buffer, newLength, Math.ceil(newLength * 1.2));\n }\n\n writeByte(value: number) {\n this.willWrite(1);\n this.view.setUint8(this.position++, value);\n }\n\n writeBytes(bytes: ArrayBufferLike, len: number = bytes.byteLength) {\n this.willWrite(len);\n // ensure len first\n this.bytes.set(new Uint8Array(bytes).subarray(0, len), this.position);\n if (len > bytes.byteLength) {\n // fill zero\n this.bytes.fill(0, this.position + bytes.byteLength, this.position + len);\n }\n\n this.position += len;\n }\n\n writeInt8(value: number) {\n this.willWrite(1);\n this.view.setInt8(this.position, value);\n this.position += 1;\n }\n\n writeUint8(value: number) {\n this.willWrite(1);\n this.view.setUint8(this.position, value);\n this.position += 1;\n }\n\n writeInt16(value: number) {\n this.willWrite(2);\n this.view.setInt16(this.position, value, this.littleEndian);\n this.position += 2;\n }\n\n writeUint16(value: number) {\n this.willWrite(2);\n this.view.setUint16(this.position, value, this.littleEndian);\n this.position += 2;\n }\n\n writeUint24(value: number) {\n this.willWrite(3);\n this.view.setUint8(this.position, value & 0xff);\n this.view.setUint16(this.position + 1, value >> 8, this.littleEndian);\n this.position += 3;\n }\n\n writeInt32(value: number) {\n this.willWrite(4);\n this.view.setInt32(this.position, value, this.littleEndian);\n this.position += 4;\n }\n\n writeUint32(value: number) {\n this.willWrite(4);\n this.view.setUint32(this.position, value, this.littleEndian);\n this.position += 4;\n }\n\n writeInt64(value: bigint | number) {\n this.willWrite(8);\n this.view.setBigInt64(this.position, bigintOf(value), this.littleEndian);\n this.position += 8;\n }\n\n writeUint64(value: bigint | number) {\n this.willWrite(8);\n this.view.setBigUint64(this.position, bigintOf(value), this.littleEndian);\n this.position += 8;\n }\n\n writeFloat32(value: number) {\n this.willWrite(4);\n this.view.setFloat32(this.position, value, this.littleEndian);\n this.position += 4;\n }\n\n writeFloat64(value: number) {\n this.willWrite(8);\n this.view.setFloat64(this.position, value, this.littleEndian);\n this.position += 8;\n }\n\n writeBoolean(value: boolean) {\n this.writeByte(value ? 1 : 0);\n }\n\n writeString(value: string): void;\n\n writeString(value: string, len?: number): void;\n\n writeString(value: string, len?: number) {\n let bytes = this.encodeText(value);\n this.writeBytes(bytes, len);\n }\n\n readSizeString(n?: number) {\n return this.readString(requireNumber(this.readUint(n)));\n }\n\n writeSizeString(value: string, n?: number) {\n let out = this.encodeText(value);\n this.writeUint(out.length, n);\n this.writeBytes(out);\n }\n\n encodeText(value: string) {\n return new TextEncoder().encode(value);\n }\n\n decodeText(bytes: ArrayBufferLike) {\n return new TextDecoder().decode(bytes);\n }\n\n readByte() {\n return this.view.getUint8(this.position++);\n }\n\n readBytes(length: number) {\n let bytes = this.buffer.slice(this.position, this.position + length);\n this.position += length;\n return bytes;\n }\n\n readInt8() {\n let value = this.view.getInt8(this.position);\n this.position += 1;\n return value;\n }\n\n readUint8() {\n let value = this.view.getUint8(this.position);\n this.position += 1;\n return value;\n }\n\n readUnsignedByte() {\n return this.readUint8();\n }\n\n readThrough(end: number) {\n // readUntil 不包含 end\n let idx = this.bytes.indexOf(end, this.position);\n if (idx === -1) {\n throw new Error(`Byte ${end} not found starting from position ${this.position}`);\n }\n let bytes = this.buffer.slice(this.position, idx + 1);\n this.position = idx + 1;\n return bytes;\n }\n\n readInt16() {\n let value = this.view.getInt16(this.position, this.littleEndian);\n this.position += 2;\n return value;\n }\n\n readUint16() {\n let value = this.view.getUint16(this.position, this.littleEndian);\n this.position += 2;\n return value;\n }\n\n readInt32() {\n let value = this.view.getInt32(this.position, this.littleEndian);\n this.position += 4;\n return value;\n }\n\n readUint32() {\n let value = this.view.getUint32(this.position, this.littleEndian);\n this.position += 4;\n return value;\n }\n\n readInt64() {\n let value = this.view.getBigInt64(this.position, this.littleEndian);\n this.position += 8;\n return safeNumber(value);\n }\n\n readUint64() {\n let value = this.view.getBigUint64(this.position, this.littleEndian);\n this.position += 8;\n return safeNumber(value);\n }\n\n readFloat32() {\n let value = this.view.getFloat32(this.position, this.littleEndian);\n this.position += 4;\n return value;\n }\n\n readFloat64() {\n let value = this.view.getFloat64(this.position, this.littleEndian);\n this.position += 8;\n return value;\n }\n\n readBoolean() {\n // or !== 0?\n return this.readByte() === 1;\n }\n\n readString(length: number): string {\n let bytes = this.readBytes(length);\n let a = new Uint8Array(bytes);\n let idx = a.indexOf(0);\n if (idx !== -1) {\n bytes = bytes.slice(0, idx);\n }\n return this.decodeText(bytes);\n }\n\n readHexString(length: number) {\n let bytes = this.readBytes(length);\n return ArrayBuffers.toHex(bytes);\n }\n\n writeHexString(value: string, len?: number) {\n this.writeBytes(ArrayBuffers.fromHex(value), len);\n }\n\n writeInt24(value: number) {\n // fixme byte order\n this.writeUint8(value & 0xff);\n this.writeUint16(value >> 8);\n }\n\n readInt24() {\n // fixme recheck\n let value = this.readUint24();\n if (value & 0x800000) {\n // If the sign bit is set, extend the sign\n value |= 0xff000000;\n }\n return value;\n }\n\n readUint24() {\n // fixme recheck\n return this.readUint8() | (this.readUint8() << 8) | (this.readUint8() << 16);\n }\n\n writeZero(length: number) {\n this.willWrite(length);\n this.bytes.fill(0, this.position, this.position + length);\n this.position += length;\n }\n\n writeValue(typ: TypedValue['type'], val: TypedValue['value']): void;\n writeValue(tv: TypedValue): void;\n writeValue(a: any, b?: any) {\n const tv: TypedValue = typeof a === 'string' ? { type: a, value: b } : a;\n const { type, value, length } = tv;\n switch (type) {\n case 'uint8':\n this.writeUint8(value);\n break;\n case 'byte':\n case 'int8':\n this.writeInt8(value);\n break;\n case 'uint16':\n this.writeUint16(value);\n break;\n case 'int16':\n this.writeInt16(value);\n break;\n case 'uint24':\n this.writeUint24(value);\n break;\n case 'int24':\n this.writeInt24(value);\n break;\n case 'uint32':\n case 'uint':\n this.writeUint32(value);\n break;\n case 'int32':\n case 'int':\n this.writeInt32(value);\n break;\n case 'float32':\n case 'float':\n this.writeFloat32(value);\n break;\n case 'float64':\n case 'double':\n this.writeFloat64(value);\n break;\n case 'string':\n this.writeString(value, length);\n break;\n case 'boolean':\n this.writeBoolean(value);\n break;\n case 'bytes':\n this.writeBytes(value);\n break;\n default:\n throw new Error(`Unknown type ${type}`);\n }\n }\n\n readUnsignedShort() {\n return this.readUint16();\n }\n\n readShort() {\n return this.readInt16();\n }\n\n readInt(bytesOrBits: number = 32) {\n switch (bytesOrBits) {\n case 1:\n case 8:\n return this.readInt8();\n case 2:\n case 16:\n return this.readInt16();\n case 3:\n case 24:\n return this.readInt24();\n case 4:\n case 32:\n return this.readInt32();\n // skip 8 byte for bits\n case 64:\n return this.readInt64();\n default:\n throw new Error(`Unknown int${bytesOrBits}`);\n }\n }\n\n readUint(bytesOrBits: number = 32) {\n switch (bytesOrBits) {\n case 1:\n case 8:\n return this.readUint8();\n case 2:\n case 16:\n return this.readUint16();\n case 3:\n case 24:\n return this.readUint24();\n case 4:\n case 32:\n return this.readUint32();\n // skip 8 byte for bits\n case 64:\n return this.readUint64();\n default:\n throw new Error(`Unexpected int size: ${bytesOrBits}`);\n }\n }\n\n writeUint(value: number, bytesOrBits: number = 32) {\n switch (bytesOrBits) {\n case 1:\n case 8:\n this.writeUint8(value);\n break;\n case 2:\n case 16:\n this.writeUint16(value);\n break;\n case 3:\n case 24:\n this.writeUint24(value);\n break;\n case 4:\n case 32:\n this.writeUint32(value);\n break;\n case 64:\n this.writeUint64(value);\n break;\n default:\n throw new Error(`Unexpected uint size: ${bytesOrBits}`);\n }\n }\n\n readFloat(n: number = 32) {\n switch (n) {\n case 4:\n case 32:\n return this.readFloat32();\n case 8:\n case 64:\n return this.readFloat64();\n default:\n throw new Error(`Unexpected float size: ${n}`);\n }\n }\n\n writeFloat(value: number, n: number = 32) {\n switch (n) {\n case 4:\n case 32:\n this.writeFloat32(value);\n break;\n case 8:\n case 64:\n this.writeFloat64(value);\n break;\n default:\n throw new Error(`Unexpected float size: ${n}`);\n }\n }\n\n readDouble() {\n return this.readFloat64();\n }\n\n writeDouble(value: number) {\n this.writeFloat64(value);\n }\n\n remaining() {\n return this.length - this.position;\n }\n\n hasRemaining() {\n return this.remaining() > 0;\n }\n\n readRemaining() {\n return this.readBytes(this.remaining());\n }\n\n toUint8Array() {\n return new Uint8Array(this.buffer);\n }\n\n toHex() {\n return ArrayBuffers.toHex(this.buffer);\n }\n\n toBase64() {\n return ArrayBuffers.toBase64(this.buffer);\n }\n\n private willWrite(length: number) {\n if (this.remaining() < length) {\n this.resize(this.position + length);\n }\n }\n}\n\nexport interface TypedValue {\n type:\n | 'byte'\n | 'bytes'\n | 'uint8'\n | 'int8'\n | 'uint16'\n | 'int16'\n | 'uint24'\n | 'int24'\n | 'int'\n | 'uint'\n | 'uint32'\n | 'int32'\n | 'float'\n | 'float32'\n | 'double'\n | 'float64'\n | 'string'\n | 'boolean';\n value: any;\n length?: number;\n}\n\nfunction safeNumber(n: bigint) {\n if (n > Number.MAX_SAFE_INTEGER) {\n return n;\n }\n return Number(n);\n}\n\nfunction bigintOf(n: number | bigint) {\n if (typeof n === 'bigint') {\n return n;\n }\n return BigInt(n);\n}\n\nfunction requireNumber(n: number | bigint) {\n if (typeof n !== 'number') {\n throw new Error(`Expected number, got ${n}`);\n }\n return n;\n}\n"],"names":["ArrayBuffers","asBuffer","o","ArrayBuffer","isView","byteLength","buffer","slice","byteOffset","ByteBuffer","position","view","bytes","bigEndian","constructor","maxByteLength","DataView","Uint8Array","littleEndian","v","length","resize","newLength","Math","ceil","writeByte","value","willWrite","setUint8","writeBytes","len","set","subarray","fill","writeInt8","setInt8","writeUint8","writeInt16","setInt16","writeUint16","setUint16","writeUint24","writeInt32","setInt32","writeUint32","setUint32","writeInt64","setBigInt64","bigintOf","writeUint64","setBigUint64","writeFloat32","setFloat32","writeFloat64","setFloat64","writeBoolean","writeString","encodeText","readSizeString","n","readString","requireNumber","readUint","writeSizeString","out","writeUint","TextEncoder","encode","decodeText","TextDecoder","decode","readByte","getUint8","readBytes","readInt8","getInt8","readUint8","readUnsignedByte","readThrough","end","idx","indexOf","Error","readInt16","getInt16","readUint16","getUint16","readInt32","getInt32","readUint32","getUint32","readInt64","getBigInt64","safeNumber","readUint64","getBigUint64","readFloat32","getFloat32","readFloat64","getFloat64","readBoolean","a","readHexString","toHex","writeHexString","fromHex","writeInt24","readInt24","readUint24","writeZero","writeValue","b","tv","type","readUnsignedShort","readShort","readInt","bytesOrBits","readFloat","writeFloat","readDouble","writeDouble","remaining","hasRemaining","readRemaining","toUint8Array","toBase64","Number","MAX_SAFE_INTEGER","BigInt"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAI9C,SAASC,SAASC,CAAY;IAC5B,IAAIA,aAAaC,aAAa;QAC5B,OAAOD;IACT;IACA,IAAIC,YAAYC,MAAM,CAACF,IAAI;QACzB,mBAAmB;QACnB,IAAIA,EAAEG,UAAU,KAAKH,EAAEI,MAAM,CAACD,UAAU,EAAE;YACxC,0BAA0B;YAC1B,gCAAgC;YAChC,kFAAkF;YAClF,IAAI;YACJ,OAAOH,EAAEI,MAAM,CAACC,KAAK,CAACL,EAAEM,UAAU,EAAEN,EAAEM,UAAU,GAAGN,EAAEG,UAAU;QACjE;QACA,OAAOH,EAAEI,MAAM;IACjB;IACA,OAAOJ;AACT;AAEA,kCAAkC;AAClC,iCAAiC;AACjC,gBAAgB;AAChB,MAAM;AACN,iCAAiC;AACjC,oCAAoC;AACpC,iEAAiE;AACjE,MAAM;AACN,4BAA4B;AAC5B,IAAI;AAEJ;;;;;;CAMC,GACD,OAAO,MAAMO;IACXC,WAAW,EAAE;IAEb,CAACJ,MAAM,CAAkB;IACzB,CAACK,IAAI,CAAW;IAChB,CAACC,KAAK,CAAa;IACnB,qCAAqC;IACrC,CAACC,SAAS,GAAG,KAAK;IAElBC,YAAYR,SAAoB,IAAIH,YAAY,GAAG;QAAEY,eAAe;IAAK,EAAE,CAAE;QAC3E,IAAI,CAAC,CAACT,MAAM,GAAGL,SAASK;QACxB,2DAA2D;QAC3D,IAAI,CAAC,CAACK,IAAI,GAAG,IAAIK,SAAS,IAAI,CAAC,CAACV,MAAM;QACtC,IAAI,CAAC,CAACM,KAAK,GAAG,IAAIK,WAAW,IAAI,CAAC,CAACX,MAAM;IAC3C;IAEA,IAAIY,eAAe;QACjB,OAAO,CAAC,IAAI,CAAC,CAACL,SAAS;IACzB;IAEA,IAAIK,aAAaC,CAAU,EAAE;QAC3B,IAAI,CAAC,CAACN,SAAS,GAAG,CAACM;IACrB;IAEA,IAAIN,YAAY;QACd,OAAO,IAAI,CAAC,CAACA,SAAS;IACxB;IAEA,IAAIA,UAAUM,CAAU,EAAE;QACxB,IAAI,CAAC,CAACN,SAAS,GAAGM;IACpB;IAEA,IAAIR,OAAO;QACT,OAAO,IAAI,CAAC,CAACA,IAAI;IACnB;IAEA,IAAIL,SAA0B;QAC5B,OAAO,IAAI,CAAC,CAACA,MAAM;IACrB;IAEA,IAAIA,OAAOA,MAAiB,EAAE;QAC5B,IAAI,CAAC,CAACA,MAAM,GAAGL,SAASK;QACxB,IAAI,CAAC,CAACK,IAAI,GAAG,IAAIK,SAAS,IAAI,CAAC,CAACV,MAAM;QACtC,IAAI,CAAC,CAACM,KAAK,GAAG,IAAIK,WAAW,IAAI,CAAC,CAACX,MAAM;IAC3C;IAEA,IAAIM,QAAoB;QACtB,OAAO,IAAI,CAAC,CAACA,KAAK;IACpB;IAEA,IAAIQ,SAAS;QACX,OAAO,IAAI,CAACT,IAAI,CAACN,UAAU;IAC7B;IAEA,IAAIe,OAAOA,MAAc,EAAE;QACzB,IAAI,CAACC,MAAM,CAACD;IACd;IAEAC,OAAOC,SAAiB,EAAE;QACxB,wBAAwB;QACxB,IAAI,CAAChB,MAAM,GAAGN,aAAaqB,MAAM,CAAC,IAAI,CAACf,MAAM,EAAEgB,WAAWC,KAAKC,IAAI,CAACF,YAAY;IAClF;IAEAG,UAAUC,KAAa,EAAE;QACvB,IAAI,CAACC,SAAS,CAAC;QACf,IAAI,CAAChB,IAAI,CAACiB,QAAQ,CAAC,IAAI,CAAClB,QAAQ,IAAIgB;IACtC;IAEAG,WAAWjB,KAAsB,EAAEkB,MAAclB,MAAMP,UAAU,EAAE;QACjE,IAAI,CAACsB,SAAS,CAACG;QACf,mBAAmB;QACnB,IAAI,CAAClB,KAAK,CAACmB,GAAG,CAAC,IAAId,WAAWL,OAAOoB,QAAQ,CAAC,GAAGF,MAAM,IAAI,CAACpB,QAAQ;QACpE,IAAIoB,MAAMlB,MAAMP,UAAU,EAAE;YAC1B,YAAY;YACZ,IAAI,CAACO,KAAK,CAACqB,IAAI,CAAC,GAAG,IAAI,CAACvB,QAAQ,GAAGE,MAAMP,UAAU,EAAE,IAAI,CAACK,QAAQ,GAAGoB;QACvE;QAEA,IAAI,CAACpB,QAAQ,IAAIoB;IACnB;IAEAI,UAAUR,KAAa,EAAE;QACvB,IAAI,CAACC,SAAS,CAAC;QACf,IAAI,CAAChB,IAAI,CAACwB,OAAO,CAAC,IAAI,CAACzB,QAAQ,EAAEgB;QACjC,IAAI,CAAChB,QAAQ,IAAI;IACnB;IAEA0B,WAAWV,KAAa,EAAE;QACxB,IAAI,CAACC,SAAS,CAAC;QACf,IAAI,CAAChB,IAAI,CAACiB,QAAQ,CAAC,IAAI,CAAClB,QAAQ,EAAEgB;QAClC,IAAI,CAAChB,QAAQ,IAAI;IACnB;IAEA2B,WAAWX,KAAa,EAAE;QACxB,IAAI,CAACC,SAAS,CAAC;QACf,IAAI,CAAChB,IAAI,CAAC2B,QAAQ,CAAC,IAAI,CAAC5B,QAAQ,EAAEgB,OAAO,IAAI,CAACR,YAAY;QAC1D,IAAI,CAACR,QAAQ,IAAI;IACnB;IAEA6B,YAAYb,KAAa,EAAE;QACzB,IAAI,CAACC,SAAS,CAAC;QACf,IAAI,CAAChB,IAAI,CAAC6B,SAAS,CAAC,IAAI,CAAC9B,QAAQ,EAAEgB,OAAO,IAAI,CAACR,YAAY;QAC3D,IAAI,CAACR,QAAQ,IAAI;IACnB;IAEA+B,YAAYf,KAAa,EAAE;QACzB,IAAI,CAACC,SAAS,CAAC;QACf,IAAI,CAAChB,IAAI,CAACiB,QAAQ,CAAC,IAAI,CAAClB,QAAQ,EAAEgB,QAAQ;QAC1C,IAAI,CAACf,IAAI,CAAC6B,SAAS,CAAC,IAAI,CAAC9B,QAAQ,GAAG,GAAGgB,SAAS,GAAG,IAAI,CAACR,YAAY;QACpE,IAAI,CAACR,QAAQ,IAAI;IACnB;IAEAgC,WAAWhB,KAAa,EAAE;QACxB,IAAI,CAACC,SAAS,CAAC;QACf,IAAI,CAAChB,IAAI,CAACgC,QAAQ,CAAC,IAAI,CAACjC,QAAQ,EAAEgB,OAAO,IAAI,CAACR,YAAY;QAC1D,IAAI,CAACR,QAAQ,IAAI;IACnB;IAEAkC,YAAYlB,KAAa,EAAE;QACzB,IAAI,CAACC,SAAS,CAAC;QACf,IAAI,CAAChB,IAAI,CAACkC,SAAS,CAAC,IAAI,CAACnC,QAAQ,EAAEgB,OAAO,IAAI,CAACR,YAAY;QAC3D,IAAI,CAACR,QAAQ,IAAI;IACnB;IAEAoC,WAAWpB,KAAsB,EAAE;QACjC,IAAI,CAACC,SAAS,CAAC;QACf,IAAI,CAAChB,IAAI,CAACoC,WAAW,CAAC,IAAI,CAACrC,QAAQ,EAAEsC,SAAStB,QAAQ,IAAI,CAACR,YAAY;QACvE,IAAI,CAACR,QAAQ,IAAI;IACnB;IAEAuC,YAAYvB,KAAsB,EAAE;QAClC,IAAI,CAACC,SAAS,CAAC;QACf,IAAI,CAAChB,IAAI,CAACuC,YAAY,CAAC,IAAI,CAACxC,QAAQ,EAAEsC,SAAStB,QAAQ,IAAI,CAACR,YAAY;QACxE,IAAI,CAACR,QAAQ,IAAI;IACnB;IAEAyC,aAAazB,KAAa,EAAE;QAC1B,IAAI,CAACC,SAAS,CAAC;QACf,IAAI,CAAChB,IAAI,CAACyC,UAAU,CAAC,IAAI,CAAC1C,QAAQ,EAAEgB,OAAO,IAAI,CAACR,YAAY;QAC5D,IAAI,CAACR,QAAQ,IAAI;IACnB;IAEA2C,aAAa3B,KAAa,EAAE;QAC1B,IAAI,CAACC,SAAS,CAAC;QACf,IAAI,CAAChB,IAAI,CAAC2C,UAAU,CAAC,IAAI,CAAC5C,QAAQ,EAAEgB,OAAO,IAAI,CAACR,YAAY;QAC5D,IAAI,CAACR,QAAQ,IAAI;IACnB;IAEA6C,aAAa7B,KAAc,EAAE;QAC3B,IAAI,CAACD,SAAS,CAACC,QAAQ,IAAI;IAC7B;IAMA8B,YAAY9B,KAAa,EAAEI,GAAY,EAAE;QACvC,IAAIlB,QAAQ,IAAI,CAAC6C,UAAU,CAAC/B;QAC5B,IAAI,CAACG,UAAU,CAACjB,OAAOkB;IACzB;IAEA4B,eAAeC,CAAU,EAAE;QACzB,OAAO,IAAI,CAACC,UAAU,CAACC,cAAc,IAAI,CAACC,QAAQ,CAACH;IACrD;IAEAI,gBAAgBrC,KAAa,EAAEiC,CAAU,EAAE;QACzC,IAAIK,MAAM,IAAI,CAACP,UAAU,CAAC/B;QAC1B,IAAI,CAACuC,SAAS,CAACD,IAAI5C,MAAM,EAAEuC;QAC3B,IAAI,CAAC9B,UAAU,CAACmC;IAClB;IAEAP,WAAW/B,KAAa,EAAE;QACxB,OAAO,IAAIwC,cAAcC,MAAM,CAACzC;IAClC;IAEA0C,WAAWxD,KAAsB,EAAE;QACjC,OAAO,IAAIyD,cAAcC,MAAM,CAAC1D;IAClC;IAEA2D,WAAW;QACT,OAAO,IAAI,CAAC5D,IAAI,CAAC6D,QAAQ,CAAC,IAAI,CAAC9D,QAAQ;IACzC;IAEA+D,UAAUrD,MAAc,EAAE;QACxB,IAAIR,QAAQ,IAAI,CAACN,MAAM,CAACC,KAAK,CAAC,IAAI,CAACG,QAAQ,EAAE,IAAI,CAACA,QAAQ,GAAGU;QAC7D,IAAI,CAACV,QAAQ,IAAIU;QACjB,OAAOR;IACT;IAEA8D,WAAW;QACT,IAAIhD,QAAQ,IAAI,CAACf,IAAI,CAACgE,OAAO,CAAC,IAAI,CAACjE,QAAQ;QAC3C,IAAI,CAACA,QAAQ,IAAI;QACjB,OAAOgB;IACT;IAEAkD,YAAY;QACV,IAAIlD,QAAQ,IAAI,CAACf,IAAI,CAAC6D,QAAQ,CAAC,IAAI,CAAC9D,QAAQ;QAC5C,IAAI,CAACA,QAAQ,IAAI;QACjB,OAAOgB;IACT;IAEAmD,mBAAmB;QACjB,OAAO,IAAI,CAACD,SAAS;IACvB;IAEAE,YAAYC,GAAW,EAAE;QACvB,oBAAoB;QACpB,IAAIC,MAAM,IAAI,CAACpE,KAAK,CAACqE,OAAO,CAACF,KAAK,IAAI,CAACrE,QAAQ;QAC/C,IAAIsE,QAAQ,CAAC,GAAG;YACd,MAAM,IAAIE,MAAM,CAAC,KAAK,EAAEH,IAAI,kCAAkC,EAAE,IAAI,CAACrE,QAAQ,CAAC,CAAC;QACjF;QACA,IAAIE,QAAQ,IAAI,CAACN,MAAM,CAACC,KAAK,CAAC,IAAI,CAACG,QAAQ,EAAEsE,MAAM;QACnD,IAAI,CAACtE,QAAQ,GAAGsE,MAAM;QACtB,OAAOpE;IACT;IAEAuE,YAAY;QACV,IAAIzD,QAAQ,IAAI,CAACf,IAAI,CAACyE,QAAQ,CAAC,IAAI,CAAC1E,QAAQ,EAAE,IAAI,CAACQ,YAAY;QAC/D,IAAI,CAACR,QAAQ,IAAI;QACjB,OAAOgB;IACT;IAEA2D,aAAa;QACX,IAAI3D,QAAQ,IAAI,CAACf,IAAI,CAAC2E,SAAS,CAAC,IAAI,CAAC5E,QAAQ,EAAE,IAAI,CAACQ,YAAY;QAChE,IAAI,CAACR,QAAQ,IAAI;QACjB,OAAOgB;IACT;IAEA6D,YAAY;QACV,IAAI7D,QAAQ,IAAI,CAACf,IAAI,CAAC6E,QAAQ,CAAC,IAAI,CAAC9E,QAAQ,EAAE,IAAI,CAACQ,YAAY;QAC/D,IAAI,CAACR,QAAQ,IAAI;QACjB,OAAOgB;IACT;IAEA+D,aAAa;QACX,IAAI/D,QAAQ,IAAI,CAACf,IAAI,CAAC+E,SAAS,CAAC,IAAI,CAAChF,QAAQ,EAAE,IAAI,CAACQ,YAAY;QAChE,IAAI,CAACR,QAAQ,IAAI;QACjB,OAAOgB;IACT;IAEAiE,YAAY;QACV,IAAIjE,QAAQ,IAAI,CAACf,IAAI,CAACiF,WAAW,CAAC,IAAI,CAAClF,QAAQ,EAAE,IAAI,CAACQ,YAAY;QAClE,IAAI,CAACR,QAAQ,IAAI;QACjB,OAAOmF,WAAWnE;IACpB;IAEAoE,aAAa;QACX,IAAIpE,QAAQ,IAAI,CAACf,IAAI,CAACoF,YAAY,CAAC,IAAI,CAACrF,QAAQ,EAAE,IAAI,CAACQ,YAAY;QACnE,IAAI,CAACR,QAAQ,IAAI;QACjB,OAAOmF,WAAWnE;IACpB;IAEAsE,cAAc;QACZ,IAAItE,QAAQ,IAAI,CAACf,IAAI,CAACsF,UAAU,CAAC,IAAI,CAACvF,QAAQ,EAAE,IAAI,CAACQ,YAAY;QACjE,IAAI,CAACR,QAAQ,IAAI;QACjB,OAAOgB;IACT;IAEAwE,cAAc;QACZ,IAAIxE,QAAQ,IAAI,CAACf,IAAI,CAACwF,UAAU,CAAC,IAAI,CAACzF,QAAQ,EAAE,IAAI,CAACQ,YAAY;QACjE,IAAI,CAACR,QAAQ,IAAI;QACjB,OAAOgB;IACT;IAEA0E,cAAc;QACZ,YAAY;QACZ,OAAO,IAAI,CAAC7B,QAAQ,OAAO;IAC7B;IAEAX,WAAWxC,MAAc,EAAU;QACjC,IAAIR,QAAQ,IAAI,CAAC6D,SAAS,CAACrD;QAC3B,IAAIiF,IAAI,IAAIpF,WAAWL;QACvB,IAAIoE,MAAMqB,EAAEpB,OAAO,CAAC;QACpB,IAAID,QAAQ,CAAC,GAAG;YACdpE,QAAQA,MAAML,KAAK,CAAC,GAAGyE;QACzB;QACA,OAAO,IAAI,CAACZ,UAAU,CAACxD;IACzB;IAEA0F,cAAclF,MAAc,EAAE;QAC5B,IAAIR,QAAQ,IAAI,CAAC6D,SAAS,CAACrD;QAC3B,OAAOpB,aAAauG,KAAK,CAAC3F;IAC5B;IAEA4F,eAAe9E,KAAa,EAAEI,GAAY,EAAE;QAC1C,IAAI,CAACD,UAAU,CAAC7B,aAAayG,OAAO,CAAC/E,QAAQI;IAC/C;IAEA4E,WAAWhF,KAAa,EAAE;QACxB,mBAAmB;QACnB,IAAI,CAACU,UAAU,CAACV,QAAQ;QACxB,IAAI,CAACa,WAAW,CAACb,SAAS;IAC5B;IAEAiF,YAAY;QACV,gBAAgB;QAChB,IAAIjF,QAAQ,IAAI,CAACkF,UAAU;QAC3B,IAAIlF,QAAQ,UAAU;YACpB,0CAA0C;YAC1CA,SAAS;QACX;QACA,OAAOA;IACT;IAEAkF,aAAa;QACX,gBAAgB;QAChB,OAAO,IAAI,CAAChC,SAAS,KAAM,IAAI,CAACA,SAAS,MAAM,IAAM,IAAI,CAACA,SAAS,MAAM;IAC3E;IAEAiC,UAAUzF,MAAc,EAAE;QACxB,IAAI,CAACO,SAAS,CAACP;QACf,IAAI,CAACR,KAAK,CAACqB,IAAI,CAAC,GAAG,IAAI,CAACvB,QAAQ,EAAE,IAAI,CAACA,QAAQ,GAAGU;QAClD,IAAI,CAACV,QAAQ,IAAIU;IACnB;IAIA0F,WAAWT,CAAM,EAAEU,CAAO,EAAE;QAC1B,MAAMC,KAAiB,OAAOX,MAAM,WAAW;YAAEY,MAAMZ;YAAG3E,OAAOqF;QAAE,IAAIV;QACvE,MAAM,EAAEY,IAAI,EAAEvF,KAAK,EAAEN,MAAM,EAAE,GAAG4F;QAChC,OAAQC;YACN,KAAK;gBACH,IAAI,CAAC7E,UAAU,CAACV;gBAChB;YACF,KAAK;YACL,KAAK;gBACH,IAAI,CAACQ,SAAS,CAACR;gBACf;YACF,KAAK;gBACH,IAAI,CAACa,WAAW,CAACb;gBACjB;YACF,KAAK;gBACH,IAAI,CAACW,UAAU,CAACX;gBAChB;YACF,KAAK;gBACH,IAAI,CAACe,WAAW,CAACf;gBACjB;YACF,KAAK;gBACH,IAAI,CAACgF,UAAU,CAAChF;gBAChB;YACF,KAAK;YACL,KAAK;gBACH,IAAI,CAACkB,WAAW,CAAClB;gBACjB;YACF,KAAK;YACL,KAAK;gBACH,IAAI,CAACgB,UAAU,CAAChB;gBAChB;YACF,KAAK;YACL,KAAK;gBACH,IAAI,CAACyB,YAAY,CAACzB;gBAClB;YACF,KAAK;YACL,KAAK;gBACH,IAAI,CAAC2B,YAAY,CAAC3B;gBAClB;YACF,KAAK;gBACH,IAAI,CAAC8B,WAAW,CAAC9B,OAAON;gBACxB;YACF,KAAK;gBACH,IAAI,CAACmC,YAAY,CAAC7B;gBAClB;YACF,KAAK;gBACH,IAAI,CAACG,UAAU,CAACH;gBAChB;YACF;gBACE,MAAM,IAAIwD,MAAM,CAAC,aAAa,EAAE+B,KAAK,CAAC;QAC1C;IACF;IAEAC,oBAAoB;QAClB,OAAO,IAAI,CAAC7B,UAAU;IACxB;IAEA8B,YAAY;QACV,OAAO,IAAI,CAAChC,SAAS;IACvB;IAEAiC,QAAQC,cAAsB,EAAE,EAAE;QAChC,OAAQA;YACN,KAAK;YACL,KAAK;gBACH,OAAO,IAAI,CAAC3C,QAAQ;YACtB,KAAK;YACL,KAAK;gBACH,OAAO,IAAI,CAACS,SAAS;YACvB,KAAK;YACL,KAAK;gBACH,OAAO,IAAI,CAACwB,SAAS;YACvB,KAAK;YACL,KAAK;gBACH,OAAO,IAAI,CAACpB,SAAS;YACvB,uBAAuB;YACvB,KAAK;gBACH,OAAO,IAAI,CAACI,SAAS;YACvB;gBACE,MAAM,IAAIT,MAAM,CAAC,WAAW,EAAEmC,YAAY,CAAC;QAC/C;IACF;IAEAvD,SAASuD,cAAsB,EAAE,EAAE;QACjC,OAAQA;YACN,KAAK;YACL,KAAK;gBACH,OAAO,IAAI,CAACzC,SAAS;YACvB,KAAK;YACL,KAAK;gBACH,OAAO,IAAI,CAACS,UAAU;YACxB,KAAK;YACL,KAAK;gBACH,OAAO,IAAI,CAACuB,UAAU;YACxB,KAAK;YACL,KAAK;gBACH,OAAO,IAAI,CAACnB,UAAU;YACxB,uBAAuB;YACvB,KAAK;gBACH,OAAO,IAAI,CAACK,UAAU;YACxB;gBACE,MAAM,IAAIZ,MAAM,CAAC,qBAAqB,EAAEmC,YAAY,CAAC;QACzD;IACF;IAEApD,UAAUvC,KAAa,EAAE2F,cAAsB,EAAE,EAAE;QACjD,OAAQA;YACN,KAAK;YACL,KAAK;gBACH,IAAI,CAACjF,UAAU,CAACV;gBAChB;YACF,KAAK;YACL,KAAK;gBACH,IAAI,CAACa,WAAW,CAACb;gBACjB;YACF,KAAK;YACL,KAAK;gBACH,IAAI,CAACe,WAAW,CAACf;gBACjB;YACF,KAAK;YACL,KAAK;gBACH,IAAI,CAACkB,WAAW,CAAClB;gBACjB;YACF,KAAK;gBACH,IAAI,CAACuB,WAAW,CAACvB;gBACjB;YACF;gBACE,MAAM,IAAIwD,MAAM,CAAC,sBAAsB,EAAEmC,YAAY,CAAC;QAC1D;IACF;IAEAC,UAAU3D,IAAY,EAAE,EAAE;QACxB,OAAQA;YACN,KAAK;YACL,KAAK;gBACH,OAAO,IAAI,CAACqC,WAAW;YACzB,KAAK;YACL,KAAK;gBACH,OAAO,IAAI,CAACE,WAAW;YACzB;gBACE,MAAM,IAAIhB,MAAM,CAAC,uBAAuB,EAAEvB,EAAE,CAAC;QACjD;IACF;IAEA4D,WAAW7F,KAAa,EAAEiC,IAAY,EAAE,EAAE;QACxC,OAAQA;YACN,KAAK;YACL,KAAK;gBACH,IAAI,CAACR,YAAY,CAACzB;gBAClB;YACF,KAAK;YACL,KAAK;gBACH,IAAI,CAAC2B,YAAY,CAAC3B;gBAClB;YACF;gBACE,MAAM,IAAIwD,MAAM,CAAC,uBAAuB,EAAEvB,EAAE,CAAC;QACjD;IACF;IAEA6D,aAAa;QACX,OAAO,IAAI,CAACtB,WAAW;IACzB;IAEAuB,YAAY/F,KAAa,EAAE;QACzB,IAAI,CAAC2B,YAAY,CAAC3B;IACpB;IAEAgG,YAAY;QACV,OAAO,IAAI,CAACtG,MAAM,GAAG,IAAI,CAACV,QAAQ;IACpC;IAEAiH,eAAe;QACb,OAAO,IAAI,CAACD,SAAS,KAAK;IAC5B;IAEAE,gBAAgB;QACd,OAAO,IAAI,CAACnD,SAAS,CAAC,IAAI,CAACiD,SAAS;IACtC;IAEAG,eAAe;QACb,OAAO,IAAI5G,WAAW,IAAI,CAACX,MAAM;IACnC;IAEAiG,QAAQ;QACN,OAAOvG,aAAauG,KAAK,CAAC,IAAI,CAACjG,MAAM;IACvC;IAEAwH,WAAW;QACT,OAAO9H,aAAa8H,QAAQ,CAAC,IAAI,CAACxH,MAAM;IAC1C;IAEQqB,UAAUP,MAAc,EAAE;QAChC,IAAI,IAAI,CAACsG,SAAS,KAAKtG,QAAQ;YAC7B,IAAI,CAACC,MAAM,CAAC,IAAI,CAACX,QAAQ,GAAGU;QAC9B;IACF;AACF;AA0BA,SAASyE,WAAWlC,CAAS;IAC3B,IAAIA,IAAIoE,OAAOC,gBAAgB,EAAE;QAC/B,OAAOrE;IACT;IACA,OAAOoE,OAAOpE;AAChB;AAEA,SAASX,SAASW,CAAkB;IAClC,IAAI,OAAOA,MAAM,UAAU;QACzB,OAAOA;IACT;IACA,OAAOsE,OAAOtE;AAChB;AAEA,SAASE,cAAcF,CAAkB;IACvC,IAAI,OAAOA,MAAM,UAAU;QACzB,MAAM,IAAIuB,MAAM,CAAC,qBAAqB,EAAEvB,EAAE,CAAC;IAC7C;IACA,OAAOA;AACT"}
@@ -0,0 +1,17 @@
1
+ import { computeIfAbsent, getGlobalThis } from '@wener/utils';
2
+ let _holder;
3
+ export function setGlobalStates(states) {
4
+ _holder = states;
5
+ }
6
+ export function getGlobalStates(key, create) {
7
+ _holder ||= getGlobalThis().__GLOBAL_STATES__ ||= {};
8
+ if (key) {
9
+ if (!create) {
10
+ return _holder[key];
11
+ }
12
+ return computeIfAbsent(_holder, key, create);
13
+ }
14
+ return _holder;
15
+ }
16
+
17
+ //# sourceMappingURL=getGlobalStates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/langs/getGlobalStates.ts"],"sourcesContent":["import { computeIfAbsent, getGlobalThis } from '@wener/utils';\n\nlet _holder: any;\n\nexport function setGlobalStates(states: Record<string, any>) {\n _holder = states;\n}\n\nexport function getGlobalStates(): Record<string, any>;\nexport function getGlobalStates<T>(key: string, create: () => T): T;\nexport function getGlobalStates<T>(key: string): T | undefined;\nexport function getGlobalStates(key?: string, create?: () => any): any {\n _holder ||= (getGlobalThis() as any).__GLOBAL_STATES__ ||= {};\n if (key) {\n if (!create) {\n return _holder[key];\n }\n return computeIfAbsent(_holder, key, create);\n }\n return _holder;\n}\n"],"names":["computeIfAbsent","getGlobalThis","_holder","setGlobalStates","states","getGlobalStates","key","create","__GLOBAL_STATES__"],"rangeMappings":";;;;;;;;;;;;;;","mappings":"AAAA,SAASA,eAAe,EAAEC,aAAa,QAAQ,eAAe;AAE9D,IAAIC;AAEJ,OAAO,SAASC,gBAAgBC,MAA2B;IACzDF,UAAUE;AACZ;AAKA,OAAO,SAASC,gBAAgBC,GAAY,EAAEC,MAAkB;IAC9DL,YAAY,AAACD,gBAAwBO,iBAAiB,KAAK,CAAC;IAC5D,IAAIF,KAAK;QACP,IAAI,CAACC,QAAQ;YACX,OAAOL,OAAO,CAACI,IAAI;QACrB;QACA,OAAON,gBAAgBE,SAASI,KAAKC;IACvC;IACA,OAAOL;AACT"}
@@ -0,0 +1,18 @@
1
+ import { getGlobalStates } from './getGlobalStates.js';
2
+ export function getObjectId(k) {
3
+ const state = getGlobalStates('ObjectId', ()=>{
4
+ return {
5
+ id: 0,
6
+ map: new WeakMap()
7
+ };
8
+ });
9
+ const { map } = state;
10
+ if (map.has(k)) {
11
+ return map.get(k);
12
+ }
13
+ const id = state.id++;
14
+ map.set(k, id);
15
+ return id;
16
+ }
17
+
18
+ //# sourceMappingURL=getObjectId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/langs/getObjectId.ts"],"sourcesContent":["import { getGlobalStates } from './getGlobalStates';\n\nexport function getObjectId(k: any): number {\n const state = getGlobalStates('ObjectId', () => {\n return {\n id: 0,\n map: new WeakMap(),\n };\n });\n\n const { map } = state;\n\n if (map.has(k)) {\n return map.get(k);\n }\n\n const id = state.id++;\n map.set(k, id);\n return id;\n}\n"],"names":["getGlobalStates","getObjectId","k","state","id","map","WeakMap","has","get","set"],"rangeMappings":";;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,eAAe,QAAQ,oBAAoB;AAEpD,OAAO,SAASC,YAAYC,CAAM;IAChC,MAAMC,QAAQH,gBAAgB,YAAY;QACxC,OAAO;YACLI,IAAI;YACJC,KAAK,IAAIC;QACX;IACF;IAEA,MAAM,EAAED,GAAG,EAAE,GAAGF;IAEhB,IAAIE,IAAIE,GAAG,CAACL,IAAI;QACd,OAAOG,IAAIG,GAAG,CAACN;IACjB;IAEA,MAAME,KAAKD,MAAMC,EAAE;IACnBC,IAAII,GAAG,CAACP,GAAGE;IACX,OAAOA;AACT"}
@@ -0,0 +1,5 @@
1
+ export function isNullish(value) {
2
+ return value === null || value === undefined;
3
+ }
4
+
5
+ //# sourceMappingURL=isNullish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/langs/isNullish.ts"],"sourcesContent":["export function isNullish(value: any): value is null | undefined {\n return value === null || value === undefined;\n}\n"],"names":["isNullish","value","undefined"],"rangeMappings":";;","mappings":"AAAA,OAAO,SAASA,UAAUC,KAAU;IAClC,OAAOA,UAAU,QAAQA,UAAUC;AACrC"}