@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.
- package/README.md +9 -1
- package/lib/asyncs/Promises.js +54 -0
- package/lib/asyncs/Promises.js.map +1 -0
- package/lib/asyncs/createLazyPromise.js +52 -51
- package/lib/asyncs/createLazyPromise.js.map +1 -1
- package/lib/asyncs/firstOfAsyncIterator.js.map +1 -1
- package/lib/asyncs/isPromise.js +2 -3
- package/lib/asyncs/isPromise.js.map +1 -1
- package/lib/asyncs/nextOfAsyncIterator.js.map +1 -1
- package/lib/asyncs/timeout.js +4 -4
- package/lib/asyncs/timeout.js.map +1 -1
- package/lib/cn/division/DivisionCode.js +30 -17
- package/lib/cn/division/DivisionCode.js.map +1 -1
- package/lib/cn/id/{Mod11Checksum.js → Mod11.js} +3 -6
- package/lib/cn/id/Mod11.js.map +1 -0
- package/lib/cn/id/ResidentIdNumber.js +10 -12
- package/lib/cn/id/ResidentIdNumber.js.map +1 -1
- package/lib/cn/types.js +3 -0
- package/lib/cn/types.js.map +1 -0
- package/lib/cn/uscc/{Mod31Checksum.js → Mod31.js} +3 -6
- package/lib/cn/uscc/Mod31.js.map +1 -0
- package/lib/cn/uscc/USCC.js +6 -9
- package/lib/cn/uscc/USCC.js.map +1 -1
- package/lib/cn/uscc/isUSCC.js +1 -1
- package/lib/cn/uscc/isUSCC.js.map +1 -1
- package/lib/crypto/getNodeCrypto.js +14 -10
- package/lib/crypto/getNodeCrypto.js.map +1 -1
- package/lib/crypto/getRandomValues.js +5 -1
- package/lib/crypto/getRandomValues.js.map +1 -1
- package/lib/emitter/types.js +3 -0
- package/lib/emitter/types.js.map +1 -0
- package/lib/fetch/createFetchWith.js.map +1 -1
- package/lib/fetch/createFetchWithRetry.js.map +1 -1
- package/lib/fetch/http.types.js +4 -0
- package/lib/fetch/http.types.js.map +1 -0
- package/lib/index.js +6 -3
- package/lib/index.js.map +1 -1
- package/lib/io/ArrayBuffers.js.map +1 -1
- package/lib/io/ByteBuffer.js +235 -36
- package/lib/io/ByteBuffer.js.map +1 -1
- package/lib/langs/getGlobalStates.js +17 -0
- package/lib/langs/getGlobalStates.js.map +1 -0
- package/lib/langs/getObjectId.js +18 -0
- package/lib/langs/getObjectId.js.map +1 -0
- package/lib/langs/isNullish.js +5 -0
- package/lib/langs/isNullish.js.map +1 -0
- package/lib/logging/slog.js.map +1 -1
- package/lib/maths/clamp.js +7 -6
- package/lib/maths/clamp.js.map +1 -1
- package/lib/maths/random.js.map +1 -1
- package/lib/mitt/index.js +77 -0
- package/lib/mitt/index.js.map +1 -0
- package/lib/objects/computeIfAbsent.js +1 -1
- package/lib/objects/computeIfAbsent.js.map +1 -1
- package/lib/schema/typebox/typebox.js.map +1 -1
- package/lib/server/fetch/createFetchWithProxyByUndici.js.map +1 -1
- package/package.json +6 -14
- package/src/asyncs/Promises.ts +62 -0
- package/src/asyncs/createLazyPromise.test.ts +52 -13
- package/src/asyncs/createLazyPromise.ts +66 -61
- package/src/asyncs/firstOfAsyncIterator.ts +1 -1
- package/src/asyncs/isPromise.ts +3 -3
- package/src/asyncs/nextOfAsyncIterator.ts +1 -1
- package/src/asyncs/timeout.ts +4 -4
- package/src/cn/division/DivisionCode.ts +61 -8
- package/src/cn/division/division.test.ts +6 -0
- package/src/cn/id/{Mod11Checksum.ts → Mod11.ts} +3 -6
- package/src/cn/id/ResidentIdNumber.ts +11 -13
- package/src/cn/id/id.test.ts +5 -5
- package/src/cn/scripts/gen.test.ts +2 -1
- package/src/cn/types.ts +11 -0
- package/src/cn/uscc/{Mod31Checksum.ts → Mod31.ts} +3 -7
- package/src/cn/uscc/USCC.ts +7 -11
- package/src/cn/uscc/isUSCC.ts +1 -1
- package/src/cn/uscc/uscc.test.ts +4 -4
- package/src/crypto/getNodeCrypto.ts +16 -11
- package/src/crypto/getRandomValues.ts +6 -1
- package/src/emitter/types.ts +18 -0
- package/src/fetch/createFetchWith.ts +1 -1
- package/src/fetch/createFetchWithRetry.ts +1 -1
- package/src/fetch/http.types.ts +46 -0
- package/src/index.ts +7 -3
- package/src/io/ArrayBuffers.ts +7 -3
- package/src/io/ByteBuffer.test.ts +33 -6
- package/src/io/ByteBuffer.ts +272 -41
- package/src/langs/getGlobalStates.ts +21 -0
- package/src/langs/getObjectId.ts +20 -0
- package/src/langs/isNullish.ts +3 -0
- package/src/langs/mixin.test.ts +43 -0
- package/src/logging/slog.ts +1 -1
- package/src/maths/clamp.test.ts +5 -1
- package/src/maths/clamp.ts +7 -7
- package/src/maths/random.ts +1 -1
- package/src/mitt/README.md +1 -0
- package/src/mitt/index.ts +114 -0
- package/src/objects/computeIfAbsent.ts +3 -2
- package/src/objects/merge/merge.test.ts +1 -1
- package/src/schema/typebox/typebox.ts +1 -1
- package/src/server/fetch/createFetchWithProxyByUndici.ts +2 -2
- package/tsconfig.json +4 -1
- package/lib/asyncs/sleep.js +0 -3
- package/lib/asyncs/sleep.js.map +0 -1
- package/lib/cn/id/Mod11Checksum.js.map +0 -1
- package/lib/cn/uscc/Mod31Checksum.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/common/encoder.js +0 -94
- package/lib/schema/typebox/gen/codegen/common/encoder.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/common/formatter.js +0 -33
- package/lib/schema/typebox/gen/codegen/common/formatter.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/common/index.js +0 -29
- package/lib/schema/typebox/gen/codegen/common/index.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/common/jsdoc.js +0 -117
- package/lib/schema/typebox/gen/codegen/common/jsdoc.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/expression/compiler.js +0 -364
- package/lib/schema/typebox/gen/codegen/expression/compiler.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/expression/errors.js +0 -259
- package/lib/schema/typebox/gen/codegen/expression/errors.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/expression/evaluator.js +0 -254
- package/lib/schema/typebox/gen/codegen/expression/evaluator.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/expression/expression.js +0 -381
- package/lib/schema/typebox/gen/codegen/expression/expression.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/expression/index.js +0 -32
- package/lib/schema/typebox/gen/codegen/expression/index.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/index.js +0 -29
- package/lib/schema/typebox/gen/codegen/index.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/index.js +0 -40
- package/lib/schema/typebox/gen/codegen/model/index.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js +0 -260
- package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-expression.js +0 -383
- package/lib/schema/typebox/gen/codegen/model/model-to-expression.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js +0 -238
- package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js +0 -274
- package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-javascript.js +0 -47
- package/lib/schema/typebox/gen/codegen/model/model-to-javascript.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js +0 -192
- package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-typebox.js +0 -33
- package/lib/schema/typebox/gen/codegen/model/model-to-typebox.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js +0 -188
- package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js +0 -239
- package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-value.js +0 -43
- package/lib/schema/typebox/gen/codegen/model/model-to-value.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js +0 -227
- package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-yup.js +0 -225
- package/lib/schema/typebox/gen/codegen/model/model-to-yup.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-zod.js +0 -248
- package/lib/schema/typebox/gen/codegen/model/model-to-zod.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/model/model.js +0 -27
- package/lib/schema/typebox/gen/codegen/model/model.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/typescript/index.js +0 -28
- package/lib/schema/typebox/gen/codegen/typescript/index.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js +0 -72
- package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js.map +0 -1
- package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js +0 -620
- package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js.map +0 -1
- package/lib/schema/typebox/gen/index.js +0 -3
- package/lib/schema/typebox/gen/index.js.map +0 -1
- package/src/asyncs/sleep.ts +0 -1
- package/src/schema/typebox/gen/codegen/common/encoder.ts +0 -99
- package/src/schema/typebox/gen/codegen/common/formatter.ts +0 -31
- package/src/schema/typebox/gen/codegen/common/index.ts +0 -29
- package/src/schema/typebox/gen/codegen/common/jsdoc.ts +0 -93
- package/src/schema/typebox/gen/codegen/expression/compiler.ts +0 -377
- package/src/schema/typebox/gen/codegen/expression/errors.ts +0 -302
- package/src/schema/typebox/gen/codegen/expression/evaluator.ts +0 -268
- package/src/schema/typebox/gen/codegen/expression/expression.ts +0 -538
- package/src/schema/typebox/gen/codegen/expression/index.ts +0 -32
- package/src/schema/typebox/gen/codegen/index.ts +0 -29
- package/src/schema/typebox/gen/codegen/model/index.ts +0 -40
- package/src/schema/typebox/gen/codegen/model/model-to-arktype.ts +0 -266
- package/src/schema/typebox/gen/codegen/model/model-to-expression.ts +0 -378
- package/src/schema/typebox/gen/codegen/model/model-to-grpc.ts +0 -244
- package/src/schema/typebox/gen/codegen/model/model-to-io-ts.ts +0 -294
- package/src/schema/typebox/gen/codegen/model/model-to-javascript.ts +0 -42
- package/src/schema/typebox/gen/codegen/model/model-to-json-schema.ts +0 -166
- package/src/schema/typebox/gen/codegen/model/model-to-typebox.ts +0 -32
- package/src/schema/typebox/gen/codegen/model/model-to-typescript.ts +0 -189
- package/src/schema/typebox/gen/codegen/model/model-to-valibot.ts +0 -236
- package/src/schema/typebox/gen/codegen/model/model-to-value.ts +0 -42
- package/src/schema/typebox/gen/codegen/model/model-to-yrel.ts +0 -232
- package/src/schema/typebox/gen/codegen/model/model-to-yup.ts +0 -226
- package/src/schema/typebox/gen/codegen/model/model-to-zod.ts +0 -251
- package/src/schema/typebox/gen/codegen/model/model.ts +0 -33
- package/src/schema/typebox/gen/codegen/typescript/index.ts +0 -28
- package/src/schema/typebox/gen/codegen/typescript/typescript-to-model.ts +0 -61
- package/src/schema/typebox/gen/codegen/typescript/typescript-to-typebox.ts +0 -647
- package/src/schema/typebox/gen/gen.test.ts +0 -12
- package/src/schema/typebox/gen/index.ts +0 -1
- /package/src/schema/{typebox/gen/README.md → README.md} +0 -0
package/lib/io/ByteBuffer.js
CHANGED
|
@@ -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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
267
|
-
return this.
|
|
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
|
-
|
|
270
|
-
|
|
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.
|
|
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
|
package/lib/io/ByteBuffer.js.map
CHANGED
|
@@ -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 @@
|
|
|
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"}
|