@solana/codecs-numbers 2.0.0-experimental.4366e2e → 2.0.0-experimental.45c014d
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/LICENSE +1 -1
- package/dist/index.browser.cjs +67 -67
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +67 -67
- package/dist/index.browser.js.map +1 -1
- package/dist/index.development.js +111 -104
- package/dist/index.development.js.map +1 -1
- package/dist/index.native.js +69 -67
- package/dist/index.native.js.map +1 -1
- package/dist/index.node.cjs +67 -67
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.js +67 -67
- package/dist/index.node.js.map +1 -1
- package/dist/index.production.min.js +41 -41
- package/dist/types/assertions.d.ts.map +1 -0
- package/dist/types/common.d.ts +5 -5
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/f32.d.ts +4 -4
- package/dist/types/f32.d.ts.map +1 -0
- package/dist/types/f64.d.ts +4 -4
- package/dist/types/f64.d.ts.map +1 -0
- package/dist/types/i128.d.ts +4 -4
- package/dist/types/i128.d.ts.map +1 -0
- package/dist/types/i16.d.ts +4 -4
- package/dist/types/i16.d.ts.map +1 -0
- package/dist/types/i32.d.ts +4 -4
- package/dist/types/i32.d.ts.map +1 -0
- package/dist/types/i64.d.ts +4 -4
- package/dist/types/i64.d.ts.map +1 -0
- package/dist/types/i8.d.ts +4 -4
- package/dist/types/i8.d.ts.map +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/short-u16.d.ts +6 -6
- package/dist/types/short-u16.d.ts.map +1 -0
- package/dist/types/u128.d.ts +4 -4
- package/dist/types/u128.d.ts.map +1 -0
- package/dist/types/u16.d.ts +4 -4
- package/dist/types/u16.d.ts.map +1 -0
- package/dist/types/u32.d.ts +4 -4
- package/dist/types/u32.d.ts.map +1 -0
- package/dist/types/u64.d.ts +4 -4
- package/dist/types/u64.d.ts.map +1 -0
- package/dist/types/u8.d.ts +4 -4
- package/dist/types/u8.d.ts.map +1 -0
- package/dist/types/utils.d.ts +2 -2
- package/dist/types/utils.d.ts.map +1 -0
- package/package.json +11 -11
|
@@ -48,7 +48,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
48
48
|
}
|
|
49
49
|
return {
|
|
50
50
|
decode: decoder.decode,
|
|
51
|
-
description: description
|
|
51
|
+
description: description != null ? description : encoder.description,
|
|
52
52
|
encode: encoder.encode,
|
|
53
53
|
fixedSize: encoder.fixedSize,
|
|
54
54
|
maxSize: encoder.maxSize
|
|
@@ -57,14 +57,15 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
57
57
|
|
|
58
58
|
// src/utils.ts
|
|
59
59
|
function sharedNumberFactory(input) {
|
|
60
|
+
var _a;
|
|
60
61
|
let littleEndian;
|
|
61
62
|
let defaultDescription = input.name;
|
|
62
63
|
if (input.size > 1) {
|
|
63
|
-
littleEndian = !("endian" in input.
|
|
64
|
+
littleEndian = !("endian" in input.config) || input.config.endian === 0 /* LITTLE */;
|
|
64
65
|
defaultDescription += littleEndian ? "(le)" : "(be)";
|
|
65
66
|
}
|
|
66
67
|
return {
|
|
67
|
-
description: input.
|
|
68
|
+
description: (_a = input.config.description) != null ? _a : defaultDescription,
|
|
68
69
|
fixedSize: input.size,
|
|
69
70
|
littleEndian,
|
|
70
71
|
maxSize: input.size
|
|
@@ -101,45 +102,45 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
101
102
|
};
|
|
102
103
|
}
|
|
103
104
|
function toArrayBuffer(bytes, offset, length) {
|
|
104
|
-
const bytesOffset = bytes.byteOffset + (offset
|
|
105
|
-
const bytesLength = length
|
|
105
|
+
const bytesOffset = bytes.byteOffset + (offset != null ? offset : 0);
|
|
106
|
+
const bytesLength = length != null ? length : bytes.byteLength;
|
|
106
107
|
return bytes.buffer.slice(bytesOffset, bytesOffset + bytesLength);
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
// src/f32.ts
|
|
110
|
-
var getF32Encoder = (
|
|
111
|
+
var getF32Encoder = (config = {}) => numberEncoderFactory({
|
|
112
|
+
config,
|
|
111
113
|
name: "f32",
|
|
112
|
-
options,
|
|
113
114
|
set: (view, value, le) => view.setFloat32(0, value, le),
|
|
114
115
|
size: 4
|
|
115
116
|
});
|
|
116
|
-
var getF32Decoder = (
|
|
117
|
+
var getF32Decoder = (config = {}) => numberDecoderFactory({
|
|
118
|
+
config,
|
|
117
119
|
get: (view, le) => view.getFloat32(0, le),
|
|
118
120
|
name: "f32",
|
|
119
|
-
options,
|
|
120
121
|
size: 4
|
|
121
122
|
});
|
|
122
|
-
var getF32Codec = (
|
|
123
|
+
var getF32Codec = (config = {}) => combineCodec(getF32Encoder(config), getF32Decoder(config));
|
|
123
124
|
|
|
124
125
|
// src/f64.ts
|
|
125
|
-
var getF64Encoder = (
|
|
126
|
+
var getF64Encoder = (config = {}) => numberEncoderFactory({
|
|
127
|
+
config,
|
|
126
128
|
name: "f64",
|
|
127
|
-
options,
|
|
128
129
|
set: (view, value, le) => view.setFloat64(0, value, le),
|
|
129
130
|
size: 8
|
|
130
131
|
});
|
|
131
|
-
var getF64Decoder = (
|
|
132
|
+
var getF64Decoder = (config = {}) => numberDecoderFactory({
|
|
133
|
+
config,
|
|
132
134
|
get: (view, le) => view.getFloat64(0, le),
|
|
133
135
|
name: "f64",
|
|
134
|
-
options,
|
|
135
136
|
size: 8
|
|
136
137
|
});
|
|
137
|
-
var getF64Codec = (
|
|
138
|
+
var getF64Codec = (config = {}) => combineCodec(getF64Encoder(config), getF64Decoder(config));
|
|
138
139
|
|
|
139
140
|
// src/i128.ts
|
|
140
|
-
var getI128Encoder = (
|
|
141
|
+
var getI128Encoder = (config = {}) => numberEncoderFactory({
|
|
142
|
+
config,
|
|
141
143
|
name: "i128",
|
|
142
|
-
options,
|
|
143
144
|
range: [-BigInt("0x7fffffffffffffffffffffffffffffff") - 1n, BigInt("0x7fffffffffffffffffffffffffffffff")],
|
|
144
145
|
set: (view, value, le) => {
|
|
145
146
|
const leftOffset = le ? 8 : 0;
|
|
@@ -150,7 +151,8 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
150
151
|
},
|
|
151
152
|
size: 16
|
|
152
153
|
});
|
|
153
|
-
var getI128Decoder = (
|
|
154
|
+
var getI128Decoder = (config = {}) => numberDecoderFactory({
|
|
155
|
+
config,
|
|
154
156
|
get: (view, le) => {
|
|
155
157
|
const leftOffset = le ? 8 : 0;
|
|
156
158
|
const rightOffset = le ? 0 : 8;
|
|
@@ -159,122 +161,127 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
159
161
|
return (left << 64n) + right;
|
|
160
162
|
},
|
|
161
163
|
name: "i128",
|
|
162
|
-
options,
|
|
163
164
|
size: 16
|
|
164
165
|
});
|
|
165
|
-
var getI128Codec = (
|
|
166
|
+
var getI128Codec = (config = {}) => combineCodec(getI128Encoder(config), getI128Decoder(config));
|
|
166
167
|
|
|
167
168
|
// src/i16.ts
|
|
168
|
-
var getI16Encoder = (
|
|
169
|
+
var getI16Encoder = (config = {}) => numberEncoderFactory({
|
|
170
|
+
config,
|
|
169
171
|
name: "i16",
|
|
170
|
-
options,
|
|
171
172
|
range: [-Number("0x7fff") - 1, Number("0x7fff")],
|
|
172
173
|
set: (view, value, le) => view.setInt16(0, value, le),
|
|
173
174
|
size: 2
|
|
174
175
|
});
|
|
175
|
-
var getI16Decoder = (
|
|
176
|
+
var getI16Decoder = (config = {}) => numberDecoderFactory({
|
|
177
|
+
config,
|
|
176
178
|
get: (view, le) => view.getInt16(0, le),
|
|
177
179
|
name: "i16",
|
|
178
|
-
options,
|
|
179
180
|
size: 2
|
|
180
181
|
});
|
|
181
|
-
var getI16Codec = (
|
|
182
|
+
var getI16Codec = (config = {}) => combineCodec(getI16Encoder(config), getI16Decoder(config));
|
|
182
183
|
|
|
183
184
|
// src/i32.ts
|
|
184
|
-
var getI32Encoder = (
|
|
185
|
+
var getI32Encoder = (config = {}) => numberEncoderFactory({
|
|
186
|
+
config,
|
|
185
187
|
name: "i32",
|
|
186
|
-
options,
|
|
187
188
|
range: [-Number("0x7fffffff") - 1, Number("0x7fffffff")],
|
|
188
189
|
set: (view, value, le) => view.setInt32(0, value, le),
|
|
189
190
|
size: 4
|
|
190
191
|
});
|
|
191
|
-
var getI32Decoder = (
|
|
192
|
+
var getI32Decoder = (config = {}) => numberDecoderFactory({
|
|
193
|
+
config,
|
|
192
194
|
get: (view, le) => view.getInt32(0, le),
|
|
193
195
|
name: "i32",
|
|
194
|
-
options,
|
|
195
196
|
size: 4
|
|
196
197
|
});
|
|
197
|
-
var getI32Codec = (
|
|
198
|
+
var getI32Codec = (config = {}) => combineCodec(getI32Encoder(config), getI32Decoder(config));
|
|
198
199
|
|
|
199
200
|
// src/i64.ts
|
|
200
|
-
var getI64Encoder = (
|
|
201
|
+
var getI64Encoder = (config = {}) => numberEncoderFactory({
|
|
202
|
+
config,
|
|
201
203
|
name: "i64",
|
|
202
|
-
options,
|
|
203
204
|
range: [-BigInt("0x7fffffffffffffff") - 1n, BigInt("0x7fffffffffffffff")],
|
|
204
205
|
set: (view, value, le) => view.setBigInt64(0, BigInt(value), le),
|
|
205
206
|
size: 8
|
|
206
207
|
});
|
|
207
|
-
var getI64Decoder = (
|
|
208
|
+
var getI64Decoder = (config = {}) => numberDecoderFactory({
|
|
209
|
+
config,
|
|
208
210
|
get: (view, le) => view.getBigInt64(0, le),
|
|
209
211
|
name: "i64",
|
|
210
|
-
options,
|
|
211
212
|
size: 8
|
|
212
213
|
});
|
|
213
|
-
var getI64Codec = (
|
|
214
|
+
var getI64Codec = (config = {}) => combineCodec(getI64Encoder(config), getI64Decoder(config));
|
|
214
215
|
|
|
215
216
|
// src/i8.ts
|
|
216
|
-
var getI8Encoder = (
|
|
217
|
+
var getI8Encoder = (config = {}) => numberEncoderFactory({
|
|
218
|
+
config,
|
|
217
219
|
name: "i8",
|
|
218
|
-
options,
|
|
219
220
|
range: [-Number("0x7f") - 1, Number("0x7f")],
|
|
220
221
|
set: (view, value) => view.setInt8(0, value),
|
|
221
222
|
size: 1
|
|
222
223
|
});
|
|
223
|
-
var getI8Decoder = (
|
|
224
|
+
var getI8Decoder = (config = {}) => numberDecoderFactory({
|
|
225
|
+
config,
|
|
224
226
|
get: (view) => view.getInt8(0),
|
|
225
227
|
name: "i8",
|
|
226
|
-
options,
|
|
227
228
|
size: 1
|
|
228
229
|
});
|
|
229
|
-
var getI8Codec = (
|
|
230
|
+
var getI8Codec = (config = {}) => combineCodec(getI8Encoder(config), getI8Decoder(config));
|
|
230
231
|
|
|
231
232
|
// src/short-u16.ts
|
|
232
|
-
var getShortU16Encoder = (
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
const
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
bytes[ii
|
|
233
|
+
var getShortU16Encoder = (config = {}) => {
|
|
234
|
+
var _a;
|
|
235
|
+
return {
|
|
236
|
+
description: (_a = config.description) != null ? _a : "shortU16",
|
|
237
|
+
encode: (value) => {
|
|
238
|
+
assertNumberIsBetweenForCodec("shortU16", 0, 65535, value);
|
|
239
|
+
const bytes = [0];
|
|
240
|
+
for (let ii = 0; ; ii += 1) {
|
|
241
|
+
const alignedValue = value >> ii * 7;
|
|
242
|
+
if (alignedValue === 0) {
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
const nextSevenBits = 127 & alignedValue;
|
|
246
|
+
bytes[ii] = nextSevenBits;
|
|
247
|
+
if (ii > 0) {
|
|
248
|
+
bytes[ii - 1] |= 128;
|
|
249
|
+
}
|
|
246
250
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
}
|
|
253
|
-
var getShortU16Decoder = (
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
251
|
+
return new Uint8Array(bytes);
|
|
252
|
+
},
|
|
253
|
+
fixedSize: null,
|
|
254
|
+
maxSize: 3
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
var getShortU16Decoder = (config = {}) => {
|
|
258
|
+
var _a;
|
|
259
|
+
return {
|
|
260
|
+
decode: (bytes, offset = 0) => {
|
|
261
|
+
let value = 0;
|
|
262
|
+
let byteCount = 0;
|
|
263
|
+
while (++byteCount) {
|
|
264
|
+
const byteIndex = byteCount - 1;
|
|
265
|
+
const currentByte = bytes[offset + byteIndex];
|
|
266
|
+
const nextSevenBits = 127 & currentByte;
|
|
267
|
+
value |= nextSevenBits << byteIndex * 7;
|
|
268
|
+
if ((currentByte & 128) === 0) {
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
264
271
|
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
}
|
|
272
|
-
var getShortU16Codec = (
|
|
272
|
+
return [value, offset + byteCount];
|
|
273
|
+
},
|
|
274
|
+
description: (_a = config.description) != null ? _a : "shortU16",
|
|
275
|
+
fixedSize: null,
|
|
276
|
+
maxSize: 3
|
|
277
|
+
};
|
|
278
|
+
};
|
|
279
|
+
var getShortU16Codec = (config = {}) => combineCodec(getShortU16Encoder(config), getShortU16Decoder(config));
|
|
273
280
|
|
|
274
281
|
// src/u128.ts
|
|
275
|
-
var getU128Encoder = (
|
|
282
|
+
var getU128Encoder = (config = {}) => numberEncoderFactory({
|
|
283
|
+
config,
|
|
276
284
|
name: "u128",
|
|
277
|
-
options,
|
|
278
285
|
range: [0, BigInt("0xffffffffffffffffffffffffffffffff")],
|
|
279
286
|
set: (view, value, le) => {
|
|
280
287
|
const leftOffset = le ? 8 : 0;
|
|
@@ -285,7 +292,8 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
285
292
|
},
|
|
286
293
|
size: 16
|
|
287
294
|
});
|
|
288
|
-
var getU128Decoder = (
|
|
295
|
+
var getU128Decoder = (config = {}) => numberDecoderFactory({
|
|
296
|
+
config,
|
|
289
297
|
get: (view, le) => {
|
|
290
298
|
const leftOffset = le ? 8 : 0;
|
|
291
299
|
const rightOffset = le ? 0 : 8;
|
|
@@ -294,74 +302,73 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
294
302
|
return (left << 64n) + right;
|
|
295
303
|
},
|
|
296
304
|
name: "u128",
|
|
297
|
-
options,
|
|
298
305
|
size: 16
|
|
299
306
|
});
|
|
300
|
-
var getU128Codec = (
|
|
307
|
+
var getU128Codec = (config = {}) => combineCodec(getU128Encoder(config), getU128Decoder(config));
|
|
301
308
|
|
|
302
309
|
// src/u16.ts
|
|
303
|
-
var getU16Encoder = (
|
|
310
|
+
var getU16Encoder = (config = {}) => numberEncoderFactory({
|
|
311
|
+
config,
|
|
304
312
|
name: "u16",
|
|
305
|
-
options,
|
|
306
313
|
range: [0, Number("0xffff")],
|
|
307
314
|
set: (view, value, le) => view.setUint16(0, value, le),
|
|
308
315
|
size: 2
|
|
309
316
|
});
|
|
310
|
-
var getU16Decoder = (
|
|
317
|
+
var getU16Decoder = (config = {}) => numberDecoderFactory({
|
|
318
|
+
config,
|
|
311
319
|
get: (view, le) => view.getUint16(0, le),
|
|
312
320
|
name: "u16",
|
|
313
|
-
options,
|
|
314
321
|
size: 2
|
|
315
322
|
});
|
|
316
|
-
var getU16Codec = (
|
|
323
|
+
var getU16Codec = (config = {}) => combineCodec(getU16Encoder(config), getU16Decoder(config));
|
|
317
324
|
|
|
318
325
|
// src/u32.ts
|
|
319
|
-
var getU32Encoder = (
|
|
326
|
+
var getU32Encoder = (config = {}) => numberEncoderFactory({
|
|
327
|
+
config,
|
|
320
328
|
name: "u32",
|
|
321
|
-
options,
|
|
322
329
|
range: [0, Number("0xffffffff")],
|
|
323
330
|
set: (view, value, le) => view.setUint32(0, value, le),
|
|
324
331
|
size: 4
|
|
325
332
|
});
|
|
326
|
-
var getU32Decoder = (
|
|
333
|
+
var getU32Decoder = (config = {}) => numberDecoderFactory({
|
|
334
|
+
config,
|
|
327
335
|
get: (view, le) => view.getUint32(0, le),
|
|
328
336
|
name: "u32",
|
|
329
|
-
options,
|
|
330
337
|
size: 4
|
|
331
338
|
});
|
|
332
|
-
var getU32Codec = (
|
|
339
|
+
var getU32Codec = (config = {}) => combineCodec(getU32Encoder(config), getU32Decoder(config));
|
|
333
340
|
|
|
334
341
|
// src/u64.ts
|
|
335
|
-
var getU64Encoder = (
|
|
342
|
+
var getU64Encoder = (config = {}) => numberEncoderFactory({
|
|
343
|
+
config,
|
|
336
344
|
name: "u64",
|
|
337
|
-
options,
|
|
338
345
|
range: [0, BigInt("0xffffffffffffffff")],
|
|
339
346
|
set: (view, value, le) => view.setBigUint64(0, BigInt(value), le),
|
|
340
347
|
size: 8
|
|
341
348
|
});
|
|
342
|
-
var getU64Decoder = (
|
|
349
|
+
var getU64Decoder = (config = {}) => numberDecoderFactory({
|
|
350
|
+
config,
|
|
343
351
|
get: (view, le) => view.getBigUint64(0, le),
|
|
344
352
|
name: "u64",
|
|
345
|
-
options,
|
|
346
353
|
size: 8
|
|
347
354
|
});
|
|
348
|
-
var getU64Codec = (
|
|
355
|
+
var getU64Codec = (config = {}) => combineCodec(getU64Encoder(config), getU64Decoder(config));
|
|
349
356
|
|
|
350
357
|
// src/u8.ts
|
|
351
|
-
var getU8Encoder = (
|
|
358
|
+
var getU8Encoder = (config = {}) => numberEncoderFactory({
|
|
359
|
+
config,
|
|
352
360
|
name: "u8",
|
|
353
|
-
options,
|
|
354
361
|
range: [0, Number("0xff")],
|
|
355
362
|
set: (view, value) => view.setUint8(0, value),
|
|
356
363
|
size: 1
|
|
357
364
|
});
|
|
358
|
-
var getU8Decoder = (
|
|
365
|
+
var getU8Decoder = (config = {}) => numberDecoderFactory({
|
|
366
|
+
config,
|
|
359
367
|
get: (view) => view.getUint8(0),
|
|
360
368
|
name: "u8",
|
|
361
|
-
options,
|
|
362
369
|
size: 1
|
|
363
370
|
});
|
|
364
|
-
var getU8Codec = (
|
|
371
|
+
var getU8Codec = (config = {}) => combineCodec(getU8Encoder(config), getU8Decoder(config));
|
|
365
372
|
|
|
366
373
|
exports.Endian = Endian;
|
|
367
374
|
exports.assertNumberIsBetweenForCodec = assertNumberIsBetweenForCodec;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/assertions.ts","../src/common.ts","../../codecs-core/src/assertions.ts","../../codecs-core/src/combine-codec.ts","../src/utils.ts","../src/f32.ts","../src/f64.ts","../src/i128.ts","../src/i16.ts","../src/i32.ts","../src/i64.ts","../src/i8.ts","../src/short-u16.ts","../src/u128.ts","../src/u16.ts","../src/u32.ts","../src/u64.ts","../src/u8.ts"],"names":["Endian"],"mappings":";AAGO,SAAS,8BACZ,kBACA,KACA,KACA,OACF;AACE,MAAI,QAAQ,OAAO,QAAQ,KAAK;AAE5B,UAAM,IAAI;AAAA,MACN,UAAU,gBAAgB,yCAAyC,GAAG,KAAK,GAAG,UAAU,KAAK;AAAA,IACjG;AAAA,EACJ;AACJ;;;ACSO,IAAK,SAAL,kBAAKA,YAAL;AACH,EAAAA,gBAAA;AACA,EAAAA,gBAAA;AAFQ,SAAAA;AAAA,GAAA;;;ACnBL,SAAS,kCAAkC,kBAA0B,OAAmB,SAAS,GAAG;AACvG,MAAI,MAAM,SAAS,UAAU,GAAG;AAE5B,UAAM,IAAI,MAAM,UAAU,gBAAgB,oCAAoC;EAClF;AACJ;AAKO,SAAS,sCACZ,kBACA,UACA,OACA,SAAS,GACX;AACE,QAAM,cAAc,MAAM,SAAS;AACnC,MAAI,cAAc,UAAU;AAExB,UAAM,IAAI,MAAM,UAAU,gBAAgB,cAAc,QAAQ,eAAe,WAAW,GAAG;EACjG;AACJ;ACnBO,SAAS,aACZ,SACA,SACA,aACe;AACf,MAAI,QAAQ,cAAc,QAAQ,WAAW;AAEzC,UAAM,IAAI;MACN,2DAA2D,QAAQ,SAAS,UAAU,QAAQ,SAAS;IAC3G;EACJ;AAEA,MAAI,QAAQ,YAAY,QAAQ,SAAS;AAErC,UAAM,IAAI;MACN,yDAAyD,QAAQ,OAAO,UAAU,QAAQ,OAAO;IACrG;EACJ;AAEA,MAAI,gBAAgB,UAAa,QAAQ,gBAAgB,QAAQ,aAAa;AAE1E,UAAM,IAAI;MACN,4DAA4D,QAAQ,WAAW,UAAU,QAAQ,WAAW;IAEhH;EACJ;AAEA,SAAO;IACH,QAAQ,QAAQ;IAChB,aAAa,eAAe,QAAQ;IACpC,QAAQ,QAAQ;IAChB,WAAW,QAAQ;IACnB,SAAS,QAAQ;EACrB;AACJ;;;ACfA,SAAS,oBAAoB,OAAoF;AAC7G,MAAI;AACJ,MAAI,qBAA6B,MAAM;AAEvC,MAAI,MAAM,OAAO,GAAG;AAChB,mBAAe,EAAE,YAAY,MAAM,YAAY,MAAM,QAAQ;AAC7D,0BAAsB,eAAe,SAAS;AAAA,EAClD;AAEA,SAAO;AAAA,IACH,aAAa,MAAM,QAAQ,eAAe;AAAA,IAC1C,WAAW,MAAM;AAAA,IACjB;AAAA,IACA,SAAS,MAAM;AAAA,EACnB;AACJ;AAEO,SAAS,qBAAgD,OAAiD;AAC7G,QAAM,YAAY,oBAAoB,KAAK;AAE3C,SAAO;AAAA,IACH,aAAa,UAAU;AAAA,IACvB,OAAO,OAAsB;AACzB,UAAI,MAAM,OAAO;AACb,sCAA8B,MAAM,MAAM,MAAM,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,KAAK;AAAA,MACnF;AACA,YAAM,cAAc,IAAI,YAAY,MAAM,IAAI;AAC9C,YAAM,IAAI,IAAI,SAAS,WAAW,GAAG,OAAO,UAAU,YAAY;AAClE,aAAO,IAAI,WAAW,WAAW;AAAA,IACrC;AAAA,IACA,WAAW,UAAU;AAAA,IACrB,SAAS,UAAU;AAAA,EACvB;AACJ;AAEO,SAAS,qBAAgD,OAAiD;AAC7G,QAAM,YAAY,oBAAoB,KAAK;AAE3C,SAAO;AAAA,IACH,OAAO,OAAO,SAAS,GAAgB;AACnC,wCAAkC,UAAU,aAAa,OAAO,MAAM;AACtE,4CAAsC,UAAU,aAAa,MAAM,MAAM,OAAO,MAAM;AACtF,YAAM,OAAO,IAAI,SAAS,cAAc,OAAO,QAAQ,MAAM,IAAI,CAAC;AAClE,aAAO,CAAC,MAAM,IAAI,MAAM,UAAU,YAAY,GAAG,SAAS,MAAM,IAAI;AAAA,IACxE;AAAA,IACA,aAAa,UAAU;AAAA,IACvB,WAAW,UAAU;AAAA,IACrB,SAAS,UAAU;AAAA,EACvB;AACJ;AAMA,SAAS,cAAc,OAAmB,QAAiB,QAA8B;AACrF,QAAM,cAAc,MAAM,cAAc,UAAU;AAClD,QAAM,cAAc,UAAU,MAAM;AACpC,SAAO,MAAM,OAAO,MAAM,aAAa,cAAc,WAAW;AACpE;;;AChFO,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,MAAM;AAAA,EACN;AAAA,EACA,KAAK,CAAC,MAAM,OAAO,OAAO,KAAK,WAAW,GAAG,OAAO,EAAE;AAAA,EACtD,MAAM;AACV,CAAC;AAEE,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,KAAK,CAAC,MAAM,OAAO,KAAK,WAAW,GAAG,EAAE;AAAA,EACxC,MAAM;AAAA,EACN;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,cAAc,CAAC,UAA8B,CAAC,MACvD,aAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;ACjBxD,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,MAAM;AAAA,EACN;AAAA,EACA,KAAK,CAAC,MAAM,OAAO,OAAO,KAAK,WAAW,GAAG,OAAO,EAAE;AAAA,EACtD,MAAM;AACV,CAAC;AAEE,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,KAAK,CAAC,MAAM,OAAO,KAAK,WAAW,GAAG,EAAE;AAAA,EACxC,MAAM;AAAA,EACN;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,cAAc,CAAC,UAA8B,CAAC,MACvD,aAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;ACjBxD,IAAM,iBAAiB,CAAC,UAA8B,CAAC,MAC1D,qBAAqB;AAAA,EACjB,MAAM;AAAA,EACN;AAAA,EACA,OAAO,CAAC,CAAC,OAAO,oCAAoC,IAAI,IAAI,OAAO,oCAAoC,CAAC;AAAA,EACxG,KAAK,CAAC,MAAM,OAAO,OAAO;AACtB,UAAM,aAAa,KAAK,IAAI;AAC5B,UAAM,cAAc,KAAK,IAAI;AAC7B,UAAM,YAAY;AAClB,SAAK,YAAY,YAAY,OAAO,KAAK,KAAK,KAAK,EAAE;AACrD,SAAK,aAAa,aAAa,OAAO,KAAK,IAAI,WAAW,EAAE;AAAA,EAChE;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,iBAAiB,CAAC,UAA8B,CAAC,MAC1D,qBAAqB;AAAA,EACjB,KAAK,CAAC,MAAM,OAAO;AACf,UAAM,aAAa,KAAK,IAAI;AAC5B,UAAM,cAAc,KAAK,IAAI;AAC7B,UAAM,OAAO,KAAK,YAAY,YAAY,EAAE;AAC5C,UAAM,QAAQ,KAAK,aAAa,aAAa,EAAE;AAC/C,YAAQ,QAAQ,OAAO;AAAA,EAC3B;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,eAAe,CAAC,UAA8B,CAAC,MACxD,aAAa,eAAe,OAAO,GAAG,eAAe,OAAO,CAAC;;;AC9B1D,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,MAAM;AAAA,EACN;AAAA,EACA,OAAO,CAAC,CAAC,OAAO,QAAQ,IAAI,GAAG,OAAO,QAAQ,CAAC;AAAA,EAC/C,KAAK,CAAC,MAAM,OAAO,OAAO,KAAK,SAAS,GAAG,OAAO,EAAE;AAAA,EACpD,MAAM;AACV,CAAC;AAEE,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,KAAK,CAAC,MAAM,OAAO,KAAK,SAAS,GAAG,EAAE;AAAA,EACtC,MAAM;AAAA,EACN;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,cAAc,CAAC,UAA8B,CAAC,MACvD,aAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;AClBxD,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,MAAM;AAAA,EACN;AAAA,EACA,OAAO,CAAC,CAAC,OAAO,YAAY,IAAI,GAAG,OAAO,YAAY,CAAC;AAAA,EACvD,KAAK,CAAC,MAAM,OAAO,OAAO,KAAK,SAAS,GAAG,OAAO,EAAE;AAAA,EACpD,MAAM;AACV,CAAC;AAEE,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,KAAK,CAAC,MAAM,OAAO,KAAK,SAAS,GAAG,EAAE;AAAA,EACtC,MAAM;AAAA,EACN;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,cAAc,CAAC,UAA8B,CAAC,MACvD,aAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;AClBxD,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,MAAM;AAAA,EACN;AAAA,EACA,OAAO,CAAC,CAAC,OAAO,oBAAoB,IAAI,IAAI,OAAO,oBAAoB,CAAC;AAAA,EACxE,KAAK,CAAC,MAAM,OAAO,OAAO,KAAK,YAAY,GAAG,OAAO,KAAK,GAAG,EAAE;AAAA,EAC/D,MAAM;AACV,CAAC;AAEE,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,KAAK,CAAC,MAAM,OAAO,KAAK,YAAY,GAAG,EAAE;AAAA,EACzC,MAAM;AAAA,EACN;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,cAAc,CAAC,UAA8B,CAAC,MACvD,aAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;AClBxD,IAAM,eAAe,CAAC,UAAwC,CAAC,MAClE,qBAAqB;AAAA,EACjB,MAAM;AAAA,EACN;AAAA,EACA,OAAO,CAAC,CAAC,OAAO,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC;AAAA,EAC3C,KAAK,CAAC,MAAM,UAAU,KAAK,QAAQ,GAAG,KAAK;AAAA,EAC3C,MAAM;AACV,CAAC;AAEE,IAAM,eAAe,CAAC,UAAwC,CAAC,MAClE,qBAAqB;AAAA,EACjB,KAAK,UAAQ,KAAK,QAAQ,CAAC;AAAA,EAC3B,MAAM;AAAA,EACN;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,aAAa,CAAC,UAAwC,CAAC,MAChE,aAAa,aAAa,OAAO,GAAG,aAAa,OAAO,CAAC;;;ACVtD,IAAM,qBAAqB,CAAC,UAAgC,CAAC,OAAwB;AAAA,EACxF,aAAa,QAAQ,eAAe;AAAA,EACpC,QAAQ,CAAC,UAA8B;AACnC,kCAA8B,YAAY,GAAG,OAAO,KAAK;AACzD,UAAM,QAAQ,CAAC,CAAC;AAChB,aAAS,KAAK,KAAK,MAAM,GAAG;AAExB,YAAM,eAAe,SAAU,KAAK;AACpC,UAAI,iBAAiB,GAAG;AAEpB;AAAA,MACJ;AAEA,YAAM,gBAAgB,MAAY;AAClC,YAAM,EAAE,IAAI;AACZ,UAAI,KAAK,GAAG;AAER,cAAM,KAAK,CAAC,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,WAAO,IAAI,WAAW,KAAK;AAAA,EAC/B;AAAA,EACA,WAAW;AAAA,EACX,SAAS;AACb;AAMO,IAAM,qBAAqB,CAAC,UAAgC,CAAC,OAAwB;AAAA,EACxF,QAAQ,CAAC,OAAmB,SAAS,MAAwB;AACzD,QAAI,QAAQ;AACZ,QAAI,YAAY;AAChB,WAAO,EAAE,WAAW;AAChB,YAAM,YAAY,YAAY;AAC9B,YAAM,cAAc,MAAM,SAAS,SAAS;AAC5C,YAAM,gBAAgB,MAAY;AAElC,eAAS,iBAAkB,YAAY;AACvC,WAAK,cAAc,SAAgB,GAAG;AAElC;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,CAAC,OAAO,SAAS,SAAS;AAAA,EACrC;AAAA,EACA,aAAa,QAAQ,eAAe;AAAA,EACpC,WAAW;AAAA,EACX,SAAS;AACb;AAWO,IAAM,mBAAmB,CAAC,UAAgC,CAAC,MAC9D,aAAa,mBAAmB,OAAO,GAAG,mBAAmB,OAAO,CAAC;;;ACtElE,IAAM,iBAAiB,CAAC,UAA8B,CAAC,MAC1D,qBAAqB;AAAA,EACjB,MAAM;AAAA,EACN;AAAA,EACA,OAAO,CAAC,GAAG,OAAO,oCAAoC,CAAC;AAAA,EACvD,KAAK,CAAC,MAAM,OAAO,OAAO;AACtB,UAAM,aAAa,KAAK,IAAI;AAC5B,UAAM,cAAc,KAAK,IAAI;AAC7B,UAAM,YAAY;AAClB,SAAK,aAAa,YAAY,OAAO,KAAK,KAAK,KAAK,EAAE;AACtD,SAAK,aAAa,aAAa,OAAO,KAAK,IAAI,WAAW,EAAE;AAAA,EAChE;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,iBAAiB,CAAC,UAA8B,CAAC,MAC1D,qBAAqB;AAAA,EACjB,KAAK,CAAC,MAAM,OAAO;AACf,UAAM,aAAa,KAAK,IAAI;AAC5B,UAAM,cAAc,KAAK,IAAI;AAC7B,UAAM,OAAO,KAAK,aAAa,YAAY,EAAE;AAC7C,UAAM,QAAQ,KAAK,aAAa,aAAa,EAAE;AAC/C,YAAQ,QAAQ,OAAO;AAAA,EAC3B;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,eAAe,CAAC,UAA8B,CAAC,MACxD,aAAa,eAAe,OAAO,GAAG,eAAe,OAAO,CAAC;;;AC9B1D,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,MAAM;AAAA,EACN;AAAA,EACA,OAAO,CAAC,GAAG,OAAO,QAAQ,CAAC;AAAA,EAC3B,KAAK,CAAC,MAAM,OAAO,OAAO,KAAK,UAAU,GAAG,OAAO,EAAE;AAAA,EACrD,MAAM;AACV,CAAC;AAEE,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,KAAK,CAAC,MAAM,OAAO,KAAK,UAAU,GAAG,EAAE;AAAA,EACvC,MAAM;AAAA,EACN;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,cAAc,CAAC,UAA8B,CAAC,MACvD,aAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;AClBxD,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,MAAM;AAAA,EACN;AAAA,EACA,OAAO,CAAC,GAAG,OAAO,YAAY,CAAC;AAAA,EAC/B,KAAK,CAAC,MAAM,OAAO,OAAO,KAAK,UAAU,GAAG,OAAO,EAAE;AAAA,EACrD,MAAM;AACV,CAAC;AAEE,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,KAAK,CAAC,MAAM,OAAO,KAAK,UAAU,GAAG,EAAE;AAAA,EACvC,MAAM;AAAA,EACN;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,cAAc,CAAC,UAA8B,CAAC,MACvD,aAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;AClBxD,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,MAAM;AAAA,EACN;AAAA,EACA,OAAO,CAAC,GAAG,OAAO,oBAAoB,CAAC;AAAA,EACvC,KAAK,CAAC,MAAM,OAAO,OAAO,KAAK,aAAa,GAAG,OAAO,KAAK,GAAG,EAAE;AAAA,EAChE,MAAM;AACV,CAAC;AAEE,IAAM,gBAAgB,CAAC,UAA8B,CAAC,MACzD,qBAAqB;AAAA,EACjB,KAAK,CAAC,MAAM,OAAO,KAAK,aAAa,GAAG,EAAE;AAAA,EAC1C,MAAM;AAAA,EACN;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,cAAc,CAAC,UAA8B,CAAC,MACvD,aAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;AClBxD,IAAM,eAAe,CAAC,UAAwC,CAAC,MAClE,qBAAqB;AAAA,EACjB,MAAM;AAAA,EACN;AAAA,EACA,OAAO,CAAC,GAAG,OAAO,MAAM,CAAC;AAAA,EACzB,KAAK,CAAC,MAAM,UAAU,KAAK,SAAS,GAAG,KAAK;AAAA,EAC5C,MAAM;AACV,CAAC;AAEE,IAAM,eAAe,CAAC,UAAwC,CAAC,MAClE,qBAAqB;AAAA,EACjB,KAAK,UAAQ,KAAK,SAAS,CAAC;AAAA,EAC5B,MAAM;AAAA,EACN;AAAA,EACA,MAAM;AACV,CAAC;AAEE,IAAM,aAAa,CAAC,UAAwC,CAAC,MAChE,aAAa,aAAa,OAAO,GAAG,aAAa,OAAO,CAAC","sourcesContent":["/**\n * Asserts that a given number is between a given range.\n */\nexport function assertNumberIsBetweenForCodec(\n codecDescription: string,\n min: number | bigint,\n max: number | bigint,\n value: number | bigint\n) {\n if (value < min || value > max) {\n // TODO: Coded error.\n throw new Error(\n `Codec [${codecDescription}] expected number to be in the range [${min}, ${max}], got ${value}.`\n );\n }\n}\n","import { BaseCodecOptions, Codec, Decoder, Encoder } from '@solana/codecs-core';\n\n/** Defines a encoder for numbers and bigints. */\nexport type NumberEncoder = Encoder<number> | Encoder<number | bigint>;\n\n/** Defines a decoder for numbers and bigints. */\nexport type NumberDecoder = Decoder<number> | Decoder<bigint>;\n\n/** Defines a codec for numbers and bigints. */\nexport type NumberCodec = Codec<number> | Codec<number | bigint, bigint>;\n\n/** Defines the options for u8 and i8 codecs. */\nexport type SingleByteNumberCodecOptions = BaseCodecOptions;\n\n/** Defines the options for number codecs that use more than one byte. */\nexport type NumberCodecOptions = BaseCodecOptions & {\n /**\n * Whether the serializer should use little-endian or big-endian encoding.\n * @defaultValue `Endian.LITTLE`\n */\n endian?: Endian;\n};\n\n/** Defines the endianness of a number serializer. */\nexport enum Endian {\n LITTLE,\n BIG,\n}\n","import { CodecData } from './codec';\n\n/**\n * Asserts that a given byte array is not empty.\n */\nexport function assertByteArrayIsNotEmptyForCodec(codecDescription: string, bytes: Uint8Array, offset = 0) {\n if (bytes.length - offset <= 0) {\n // TODO: Coded error.\n throw new Error(`Codec [${codecDescription}] cannot decode empty byte arrays.`);\n }\n}\n\n/**\n * Asserts that a given byte array has enough bytes to decode.\n */\nexport function assertByteArrayHasEnoughBytesForCodec(\n codecDescription: string,\n expected: number,\n bytes: Uint8Array,\n offset = 0\n) {\n const bytesLength = bytes.length - offset;\n if (bytesLength < expected) {\n // TODO: Coded error.\n throw new Error(`Codec [${codecDescription}] expected ${expected} bytes, got ${bytesLength}.`);\n }\n}\n\n/**\n * Asserts that a given codec is fixed-size codec.\n */\nexport function assertFixedSizeCodec(\n data: Pick<CodecData, 'fixedSize'>,\n message?: string\n): asserts data is { fixedSize: number } {\n if (data.fixedSize === null) {\n // TODO: Coded error.\n throw new Error(message ?? 'Expected a fixed-size codec, got a variable-size one.');\n }\n}\n","import { Codec, Decoder, Encoder } from './codec';\n\n/**\n * Combines an encoder and a decoder into a codec.\n * The encoder and decoder must have the same fixed size, max size and description.\n * If a description is provided, it will override the encoder and decoder descriptions.\n */\nexport function combineCodec<From, To extends From = From>(\n encoder: Encoder<From>,\n decoder: Decoder<To>,\n description?: string\n): Codec<From, To> {\n if (encoder.fixedSize !== decoder.fixedSize) {\n // TODO: Coded error.\n throw new Error(\n `Encoder and decoder must have the same fixed size, got [${encoder.fixedSize}] and [${decoder.fixedSize}].`\n );\n }\n\n if (encoder.maxSize !== decoder.maxSize) {\n // TODO: Coded error.\n throw new Error(\n `Encoder and decoder must have the same max size, got [${encoder.maxSize}] and [${decoder.maxSize}].`\n );\n }\n\n if (description === undefined && encoder.description !== decoder.description) {\n // TODO: Coded error.\n throw new Error(\n `Encoder and decoder must have the same description, got [${encoder.description}] and [${decoder.description}]. ` +\n `Pass a custom description as a third argument if you want to override the description and bypass this error.`\n );\n }\n\n return {\n decode: decoder.decode,\n description: description ?? encoder.description,\n encode: encoder.encode,\n fixedSize: encoder.fixedSize,\n maxSize: encoder.maxSize,\n };\n}\n","import {\n assertByteArrayHasEnoughBytesForCodec,\n assertByteArrayIsNotEmptyForCodec,\n CodecData,\n Decoder,\n Encoder,\n} from '@solana/codecs-core';\n\nimport { assertNumberIsBetweenForCodec } from './assertions';\nimport { Endian, NumberCodecOptions, SingleByteNumberCodecOptions } from './common';\n\ntype NumberFactorySharedInput = {\n name: string;\n size: number;\n options: SingleByteNumberCodecOptions | NumberCodecOptions;\n};\n\ntype NumberFactoryEncoderInput<T> = NumberFactorySharedInput & {\n range?: [number | bigint, number | bigint];\n set: (view: DataView, value: T, littleEndian?: boolean) => void;\n};\n\ntype NumberFactoryDecoderInput<T> = NumberFactorySharedInput & {\n get: (view: DataView, littleEndian?: boolean) => T;\n};\n\nfunction sharedNumberFactory(input: NumberFactorySharedInput): CodecData & { littleEndian: boolean | undefined } {\n let littleEndian: boolean | undefined;\n let defaultDescription: string = input.name;\n\n if (input.size > 1) {\n littleEndian = !('endian' in input.options) || input.options.endian === Endian.LITTLE;\n defaultDescription += littleEndian ? '(le)' : '(be)';\n }\n\n return {\n description: input.options.description ?? defaultDescription,\n fixedSize: input.size,\n littleEndian,\n maxSize: input.size,\n };\n}\n\nexport function numberEncoderFactory<T extends number | bigint>(input: NumberFactoryEncoderInput<T>): Encoder<T> {\n const codecData = sharedNumberFactory(input);\n\n return {\n description: codecData.description,\n encode(value: T): Uint8Array {\n if (input.range) {\n assertNumberIsBetweenForCodec(input.name, input.range[0], input.range[1], value);\n }\n const arrayBuffer = new ArrayBuffer(input.size);\n input.set(new DataView(arrayBuffer), value, codecData.littleEndian);\n return new Uint8Array(arrayBuffer);\n },\n fixedSize: codecData.fixedSize,\n maxSize: codecData.maxSize,\n };\n}\n\nexport function numberDecoderFactory<T extends number | bigint>(input: NumberFactoryDecoderInput<T>): Decoder<T> {\n const codecData = sharedNumberFactory(input);\n\n return {\n decode(bytes, offset = 0): [T, number] {\n assertByteArrayIsNotEmptyForCodec(codecData.description, bytes, offset);\n assertByteArrayHasEnoughBytesForCodec(codecData.description, input.size, bytes, offset);\n const view = new DataView(toArrayBuffer(bytes, offset, input.size));\n return [input.get(view, codecData.littleEndian), offset + input.size];\n },\n description: codecData.description,\n fixedSize: codecData.fixedSize,\n maxSize: codecData.maxSize,\n };\n}\n\n/**\n * Helper function to ensure that the ArrayBuffer is converted properly from a Uint8Array\n * Source: https://stackoverflow.com/questions/37228285/uint8array-to-arraybuffer\n */\nfunction toArrayBuffer(bytes: Uint8Array, offset?: number, length?: number): ArrayBuffer {\n const bytesOffset = bytes.byteOffset + (offset ?? 0);\n const bytesLength = length ?? bytes.byteLength;\n return bytes.buffer.slice(bytesOffset, bytesOffset + bytesLength);\n}\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecOptions } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getF32Encoder = (options: NumberCodecOptions = {}): Encoder<number> =>\n numberEncoderFactory({\n name: 'f32',\n options,\n set: (view, value, le) => view.setFloat32(0, value, le),\n size: 4,\n });\n\nexport const getF32Decoder = (options: NumberCodecOptions = {}): Decoder<number> =>\n numberDecoderFactory({\n get: (view, le) => view.getFloat32(0, le),\n name: 'f32',\n options,\n size: 4,\n });\n\nexport const getF32Codec = (options: NumberCodecOptions = {}): Codec<number> =>\n combineCodec(getF32Encoder(options), getF32Decoder(options));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecOptions } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getF64Encoder = (options: NumberCodecOptions = {}): Encoder<number> =>\n numberEncoderFactory({\n name: 'f64',\n options,\n set: (view, value, le) => view.setFloat64(0, value, le),\n size: 8,\n });\n\nexport const getF64Decoder = (options: NumberCodecOptions = {}): Decoder<number> =>\n numberDecoderFactory({\n get: (view, le) => view.getFloat64(0, le),\n name: 'f64',\n options,\n size: 8,\n });\n\nexport const getF64Codec = (options: NumberCodecOptions = {}): Codec<number> =>\n combineCodec(getF64Encoder(options), getF64Decoder(options));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecOptions } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI128Encoder = (options: NumberCodecOptions = {}): Encoder<number | bigint> =>\n numberEncoderFactory({\n name: 'i128',\n options,\n range: [-BigInt('0x7fffffffffffffffffffffffffffffff') - 1n, BigInt('0x7fffffffffffffffffffffffffffffff')],\n set: (view, value, le) => {\n const leftOffset = le ? 8 : 0;\n const rightOffset = le ? 0 : 8;\n const rightMask = 0xffffffffffffffffn;\n view.setBigInt64(leftOffset, BigInt(value) >> 64n, le);\n view.setBigUint64(rightOffset, BigInt(value) & rightMask, le);\n },\n size: 16,\n });\n\nexport const getI128Decoder = (options: NumberCodecOptions = {}): Decoder<bigint> =>\n numberDecoderFactory({\n get: (view, le) => {\n const leftOffset = le ? 8 : 0;\n const rightOffset = le ? 0 : 8;\n const left = view.getBigInt64(leftOffset, le);\n const right = view.getBigUint64(rightOffset, le);\n return (left << 64n) + right;\n },\n name: 'i128',\n options,\n size: 16,\n });\n\nexport const getI128Codec = (options: NumberCodecOptions = {}): Codec<number | bigint, bigint> =>\n combineCodec(getI128Encoder(options), getI128Decoder(options));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecOptions } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI16Encoder = (options: NumberCodecOptions = {}): Encoder<number> =>\n numberEncoderFactory({\n name: 'i16',\n options,\n range: [-Number('0x7fff') - 1, Number('0x7fff')],\n set: (view, value, le) => view.setInt16(0, value, le),\n size: 2,\n });\n\nexport const getI16Decoder = (options: NumberCodecOptions = {}): Decoder<number> =>\n numberDecoderFactory({\n get: (view, le) => view.getInt16(0, le),\n name: 'i16',\n options,\n size: 2,\n });\n\nexport const getI16Codec = (options: NumberCodecOptions = {}): Codec<number> =>\n combineCodec(getI16Encoder(options), getI16Decoder(options));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecOptions } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI32Encoder = (options: NumberCodecOptions = {}): Encoder<number> =>\n numberEncoderFactory({\n name: 'i32',\n options,\n range: [-Number('0x7fffffff') - 1, Number('0x7fffffff')],\n set: (view, value, le) => view.setInt32(0, value, le),\n size: 4,\n });\n\nexport const getI32Decoder = (options: NumberCodecOptions = {}): Decoder<number> =>\n numberDecoderFactory({\n get: (view, le) => view.getInt32(0, le),\n name: 'i32',\n options,\n size: 4,\n });\n\nexport const getI32Codec = (options: NumberCodecOptions = {}): Codec<number> =>\n combineCodec(getI32Encoder(options), getI32Decoder(options));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecOptions } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI64Encoder = (options: NumberCodecOptions = {}): Encoder<number | bigint> =>\n numberEncoderFactory({\n name: 'i64',\n options,\n range: [-BigInt('0x7fffffffffffffff') - 1n, BigInt('0x7fffffffffffffff')],\n set: (view, value, le) => view.setBigInt64(0, BigInt(value), le),\n size: 8,\n });\n\nexport const getI64Decoder = (options: NumberCodecOptions = {}): Decoder<bigint> =>\n numberDecoderFactory({\n get: (view, le) => view.getBigInt64(0, le),\n name: 'i64',\n options,\n size: 8,\n });\n\nexport const getI64Codec = (options: NumberCodecOptions = {}): Codec<number | bigint, bigint> =>\n combineCodec(getI64Encoder(options), getI64Decoder(options));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { SingleByteNumberCodecOptions } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI8Encoder = (options: SingleByteNumberCodecOptions = {}): Encoder<number> =>\n numberEncoderFactory({\n name: 'i8',\n options,\n range: [-Number('0x7f') - 1, Number('0x7f')],\n set: (view, value) => view.setInt8(0, value),\n size: 1,\n });\n\nexport const getI8Decoder = (options: SingleByteNumberCodecOptions = {}): Decoder<number> =>\n numberDecoderFactory({\n get: view => view.getInt8(0),\n name: 'i8',\n options,\n size: 1,\n });\n\nexport const getI8Codec = (options: SingleByteNumberCodecOptions = {}): Codec<number> =>\n combineCodec(getI8Encoder(options), getI8Decoder(options));\n","import { BaseCodecOptions, Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { assertNumberIsBetweenForCodec } from './assertions';\n\n/**\n * Defines the options for the shortU16 serializer.\n */\nexport type ShortU16CodecOptions = BaseCodecOptions;\n\n/**\n * Encodes short u16 numbers.\n * @see {@link getShortU16Codec} for a more detailed description.\n */\nexport const getShortU16Encoder = (options: ShortU16CodecOptions = {}): Encoder<number> => ({\n description: options.description ?? 'shortU16',\n encode: (value: number): Uint8Array => {\n assertNumberIsBetweenForCodec('shortU16', 0, 65535, value);\n const bytes = [0];\n for (let ii = 0; ; ii += 1) {\n // Shift the bits of the value over such that the next 7 bits are at the right edge.\n const alignedValue = value >> (ii * 7);\n if (alignedValue === 0) {\n // No more bits to consume.\n break;\n }\n // Extract those 7 bits using a mask.\n const nextSevenBits = 0b1111111 & alignedValue;\n bytes[ii] = nextSevenBits;\n if (ii > 0) {\n // Set the continuation bit of the previous slice.\n bytes[ii - 1] |= 0b10000000;\n }\n }\n return new Uint8Array(bytes);\n },\n fixedSize: null,\n maxSize: 3,\n});\n\n/**\n * Decodes short u16 numbers.\n * @see {@link getShortU16Codec} for a more detailed description.\n */\nexport const getShortU16Decoder = (options: ShortU16CodecOptions = {}): Decoder<number> => ({\n decode: (bytes: Uint8Array, offset = 0): [number, number] => {\n let value = 0;\n let byteCount = 0;\n while (++byteCount) {\n const byteIndex = byteCount - 1;\n const currentByte = bytes[offset + byteIndex];\n const nextSevenBits = 0b1111111 & currentByte;\n // Insert the next group of seven bits into the correct slot of the output value.\n value |= nextSevenBits << (byteIndex * 7);\n if ((currentByte & 0b10000000) === 0) {\n // This byte does not have its continuation bit set. We're done.\n break;\n }\n }\n return [value, offset + byteCount];\n },\n description: options.description ?? 'shortU16',\n fixedSize: null,\n maxSize: 3,\n});\n\n/**\n * Encodes and decodes short u16 numbers.\n *\n * Short u16 numbers are the same as u16, but serialized with 1 to 3 bytes.\n * If the value is above 0x7f, the top bit is set and the remaining\n * value is stored in the next bytes. Each byte follows the same\n * pattern until the 3rd byte. The 3rd byte, if needed, uses\n * all 8 bits to store the last byte of the original value.\n */\nexport const getShortU16Codec = (options: ShortU16CodecOptions = {}): Codec<number> =>\n combineCodec(getShortU16Encoder(options), getShortU16Decoder(options));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecOptions } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU128Encoder = (options: NumberCodecOptions = {}): Encoder<number | bigint> =>\n numberEncoderFactory({\n name: 'u128',\n options,\n range: [0, BigInt('0xffffffffffffffffffffffffffffffff')],\n set: (view, value, le) => {\n const leftOffset = le ? 8 : 0;\n const rightOffset = le ? 0 : 8;\n const rightMask = 0xffffffffffffffffn;\n view.setBigUint64(leftOffset, BigInt(value) >> 64n, le);\n view.setBigUint64(rightOffset, BigInt(value) & rightMask, le);\n },\n size: 16,\n });\n\nexport const getU128Decoder = (options: NumberCodecOptions = {}): Decoder<bigint> =>\n numberDecoderFactory({\n get: (view, le) => {\n const leftOffset = le ? 8 : 0;\n const rightOffset = le ? 0 : 8;\n const left = view.getBigUint64(leftOffset, le);\n const right = view.getBigUint64(rightOffset, le);\n return (left << 64n) + right;\n },\n name: 'u128',\n options,\n size: 16,\n });\n\nexport const getU128Codec = (options: NumberCodecOptions = {}): Codec<number | bigint, bigint> =>\n combineCodec(getU128Encoder(options), getU128Decoder(options));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecOptions } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU16Encoder = (options: NumberCodecOptions = {}): Encoder<number> =>\n numberEncoderFactory({\n name: 'u16',\n options,\n range: [0, Number('0xffff')],\n set: (view, value, le) => view.setUint16(0, value, le),\n size: 2,\n });\n\nexport const getU16Decoder = (options: NumberCodecOptions = {}): Decoder<number> =>\n numberDecoderFactory({\n get: (view, le) => view.getUint16(0, le),\n name: 'u16',\n options,\n size: 2,\n });\n\nexport const getU16Codec = (options: NumberCodecOptions = {}): Codec<number> =>\n combineCodec(getU16Encoder(options), getU16Decoder(options));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecOptions } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU32Encoder = (options: NumberCodecOptions = {}): Encoder<number> =>\n numberEncoderFactory({\n name: 'u32',\n options,\n range: [0, Number('0xffffffff')],\n set: (view, value, le) => view.setUint32(0, value, le),\n size: 4,\n });\n\nexport const getU32Decoder = (options: NumberCodecOptions = {}): Decoder<number> =>\n numberDecoderFactory({\n get: (view, le) => view.getUint32(0, le),\n name: 'u32',\n options,\n size: 4,\n });\n\nexport const getU32Codec = (options: NumberCodecOptions = {}): Codec<number> =>\n combineCodec(getU32Encoder(options), getU32Decoder(options));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecOptions } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU64Encoder = (options: NumberCodecOptions = {}): Encoder<number | bigint> =>\n numberEncoderFactory({\n name: 'u64',\n options,\n range: [0, BigInt('0xffffffffffffffff')],\n set: (view, value, le) => view.setBigUint64(0, BigInt(value), le),\n size: 8,\n });\n\nexport const getU64Decoder = (options: NumberCodecOptions = {}): Decoder<bigint> =>\n numberDecoderFactory({\n get: (view, le) => view.getBigUint64(0, le),\n name: 'u64',\n options,\n size: 8,\n });\n\nexport const getU64Codec = (options: NumberCodecOptions = {}): Codec<number | bigint, bigint> =>\n combineCodec(getU64Encoder(options), getU64Decoder(options));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { SingleByteNumberCodecOptions } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU8Encoder = (options: SingleByteNumberCodecOptions = {}): Encoder<number> =>\n numberEncoderFactory({\n name: 'u8',\n options,\n range: [0, Number('0xff')],\n set: (view, value) => view.setUint8(0, value),\n size: 1,\n });\n\nexport const getU8Decoder = (options: SingleByteNumberCodecOptions = {}): Decoder<number> =>\n numberDecoderFactory({\n get: view => view.getUint8(0),\n name: 'u8',\n options,\n size: 1,\n });\n\nexport const getU8Codec = (options: SingleByteNumberCodecOptions = {}): Codec<number> =>\n combineCodec(getU8Encoder(options), getU8Decoder(options));\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/assertions.ts","../src/common.ts","../../codecs-core/src/assertions.ts","../../codecs-core/src/combine-codec.ts","../src/utils.ts","../src/f32.ts","../src/f64.ts","../src/i128.ts","../src/i16.ts","../src/i32.ts","../src/i64.ts","../src/i8.ts","../src/short-u16.ts","../src/u128.ts","../src/u16.ts","../src/u32.ts","../src/u64.ts","../src/u8.ts"],"names":["Endian"],"mappings":"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","sourcesContent":["/**\n * Asserts that a given number is between a given range.\n */\nexport function assertNumberIsBetweenForCodec(\n codecDescription: string,\n min: number | bigint,\n max: number | bigint,\n value: number | bigint\n) {\n if (value < min || value > max) {\n // TODO: Coded error.\n throw new Error(\n `Codec [${codecDescription}] expected number to be in the range [${min}, ${max}], got ${value}.`\n );\n }\n}\n","import { BaseCodecConfig, Codec, Decoder, Encoder } from '@solana/codecs-core';\n\n/** Defines a encoder for numbers and bigints. */\nexport type NumberEncoder = Encoder<number> | Encoder<number | bigint>;\n\n/** Defines a decoder for numbers and bigints. */\nexport type NumberDecoder = Decoder<number> | Decoder<bigint>;\n\n/** Defines a codec for numbers and bigints. */\nexport type NumberCodec = Codec<number> | Codec<number | bigint, bigint>;\n\n/** Defines the config for u8 and i8 codecs. */\nexport type SingleByteNumberCodecConfig = BaseCodecConfig;\n\n/** Defines the config for number codecs that use more than one byte. */\nexport type NumberCodecConfig = BaseCodecConfig & {\n /**\n * Whether the serializer should use little-endian or big-endian encoding.\n * @defaultValue `Endian.LITTLE`\n */\n endian?: Endian;\n};\n\n/** Defines the endianness of a number serializer. */\nexport enum Endian {\n LITTLE,\n BIG,\n}\n","import { CodecData } from './codec';\n\n/**\n * Asserts that a given byte array is not empty.\n */\nexport function assertByteArrayIsNotEmptyForCodec(codecDescription: string, bytes: Uint8Array, offset = 0) {\n if (bytes.length - offset <= 0) {\n // TODO: Coded error.\n throw new Error(`Codec [${codecDescription}] cannot decode empty byte arrays.`);\n }\n}\n\n/**\n * Asserts that a given byte array has enough bytes to decode.\n */\nexport function assertByteArrayHasEnoughBytesForCodec(\n codecDescription: string,\n expected: number,\n bytes: Uint8Array,\n offset = 0\n) {\n const bytesLength = bytes.length - offset;\n if (bytesLength < expected) {\n // TODO: Coded error.\n throw new Error(`Codec [${codecDescription}] expected ${expected} bytes, got ${bytesLength}.`);\n }\n}\n\n/**\n * Asserts that a given codec is fixed-size codec.\n */\nexport function assertFixedSizeCodec(\n data: Pick<CodecData, 'fixedSize'>,\n message?: string\n): asserts data is { fixedSize: number } {\n if (data.fixedSize === null) {\n // TODO: Coded error.\n throw new Error(message ?? 'Expected a fixed-size codec, got a variable-size one.');\n }\n}\n","import { Codec, Decoder, Encoder } from './codec';\n\n/**\n * Combines an encoder and a decoder into a codec.\n * The encoder and decoder must have the same fixed size, max size and description.\n * If a description is provided, it will override the encoder and decoder descriptions.\n */\nexport function combineCodec<From, To extends From = From>(\n encoder: Encoder<From>,\n decoder: Decoder<To>,\n description?: string\n): Codec<From, To> {\n if (encoder.fixedSize !== decoder.fixedSize) {\n // TODO: Coded error.\n throw new Error(\n `Encoder and decoder must have the same fixed size, got [${encoder.fixedSize}] and [${decoder.fixedSize}].`\n );\n }\n\n if (encoder.maxSize !== decoder.maxSize) {\n // TODO: Coded error.\n throw new Error(\n `Encoder and decoder must have the same max size, got [${encoder.maxSize}] and [${decoder.maxSize}].`\n );\n }\n\n if (description === undefined && encoder.description !== decoder.description) {\n // TODO: Coded error.\n throw new Error(\n `Encoder and decoder must have the same description, got [${encoder.description}] and [${decoder.description}]. ` +\n `Pass a custom description as a third argument if you want to override the description and bypass this error.`\n );\n }\n\n return {\n decode: decoder.decode,\n description: description ?? encoder.description,\n encode: encoder.encode,\n fixedSize: encoder.fixedSize,\n maxSize: encoder.maxSize,\n };\n}\n","import {\n assertByteArrayHasEnoughBytesForCodec,\n assertByteArrayIsNotEmptyForCodec,\n CodecData,\n Decoder,\n Encoder,\n} from '@solana/codecs-core';\n\nimport { assertNumberIsBetweenForCodec } from './assertions';\nimport { Endian, NumberCodecConfig, SingleByteNumberCodecConfig } from './common';\n\ntype NumberFactorySharedInput = {\n name: string;\n size: number;\n config: SingleByteNumberCodecConfig | NumberCodecConfig;\n};\n\ntype NumberFactoryEncoderInput<T> = NumberFactorySharedInput & {\n range?: [number | bigint, number | bigint];\n set: (view: DataView, value: T, littleEndian?: boolean) => void;\n};\n\ntype NumberFactoryDecoderInput<T> = NumberFactorySharedInput & {\n get: (view: DataView, littleEndian?: boolean) => T;\n};\n\nfunction sharedNumberFactory(input: NumberFactorySharedInput): CodecData & { littleEndian: boolean | undefined } {\n let littleEndian: boolean | undefined;\n let defaultDescription: string = input.name;\n\n if (input.size > 1) {\n littleEndian = !('endian' in input.config) || input.config.endian === Endian.LITTLE;\n defaultDescription += littleEndian ? '(le)' : '(be)';\n }\n\n return {\n description: input.config.description ?? defaultDescription,\n fixedSize: input.size,\n littleEndian,\n maxSize: input.size,\n };\n}\n\nexport function numberEncoderFactory<T extends number | bigint>(input: NumberFactoryEncoderInput<T>): Encoder<T> {\n const codecData = sharedNumberFactory(input);\n\n return {\n description: codecData.description,\n encode(value: T): Uint8Array {\n if (input.range) {\n assertNumberIsBetweenForCodec(input.name, input.range[0], input.range[1], value);\n }\n const arrayBuffer = new ArrayBuffer(input.size);\n input.set(new DataView(arrayBuffer), value, codecData.littleEndian);\n return new Uint8Array(arrayBuffer);\n },\n fixedSize: codecData.fixedSize,\n maxSize: codecData.maxSize,\n };\n}\n\nexport function numberDecoderFactory<T extends number | bigint>(input: NumberFactoryDecoderInput<T>): Decoder<T> {\n const codecData = sharedNumberFactory(input);\n\n return {\n decode(bytes, offset = 0): [T, number] {\n assertByteArrayIsNotEmptyForCodec(codecData.description, bytes, offset);\n assertByteArrayHasEnoughBytesForCodec(codecData.description, input.size, bytes, offset);\n const view = new DataView(toArrayBuffer(bytes, offset, input.size));\n return [input.get(view, codecData.littleEndian), offset + input.size];\n },\n description: codecData.description,\n fixedSize: codecData.fixedSize,\n maxSize: codecData.maxSize,\n };\n}\n\n/**\n * Helper function to ensure that the ArrayBuffer is converted properly from a Uint8Array\n * Source: https://stackoverflow.com/questions/37228285/uint8array-to-arraybuffer\n */\nfunction toArrayBuffer(bytes: Uint8Array, offset?: number, length?: number): ArrayBuffer {\n const bytesOffset = bytes.byteOffset + (offset ?? 0);\n const bytesLength = length ?? bytes.byteLength;\n return bytes.buffer.slice(bytesOffset, bytesOffset + bytesLength);\n}\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getF32Encoder = (config: NumberCodecConfig = {}): Encoder<number> =>\n numberEncoderFactory({\n config,\n name: 'f32',\n set: (view, value, le) => view.setFloat32(0, value, le),\n size: 4,\n });\n\nexport const getF32Decoder = (config: NumberCodecConfig = {}): Decoder<number> =>\n numberDecoderFactory({\n config,\n get: (view, le) => view.getFloat32(0, le),\n name: 'f32',\n size: 4,\n });\n\nexport const getF32Codec = (config: NumberCodecConfig = {}): Codec<number> =>\n combineCodec(getF32Encoder(config), getF32Decoder(config));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getF64Encoder = (config: NumberCodecConfig = {}): Encoder<number> =>\n numberEncoderFactory({\n config,\n name: 'f64',\n set: (view, value, le) => view.setFloat64(0, value, le),\n size: 8,\n });\n\nexport const getF64Decoder = (config: NumberCodecConfig = {}): Decoder<number> =>\n numberDecoderFactory({\n config,\n get: (view, le) => view.getFloat64(0, le),\n name: 'f64',\n size: 8,\n });\n\nexport const getF64Codec = (config: NumberCodecConfig = {}): Codec<number> =>\n combineCodec(getF64Encoder(config), getF64Decoder(config));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI128Encoder = (config: NumberCodecConfig = {}): Encoder<number | bigint> =>\n numberEncoderFactory({\n config,\n name: 'i128',\n range: [-BigInt('0x7fffffffffffffffffffffffffffffff') - 1n, BigInt('0x7fffffffffffffffffffffffffffffff')],\n set: (view, value, le) => {\n const leftOffset = le ? 8 : 0;\n const rightOffset = le ? 0 : 8;\n const rightMask = 0xffffffffffffffffn;\n view.setBigInt64(leftOffset, BigInt(value) >> 64n, le);\n view.setBigUint64(rightOffset, BigInt(value) & rightMask, le);\n },\n size: 16,\n });\n\nexport const getI128Decoder = (config: NumberCodecConfig = {}): Decoder<bigint> =>\n numberDecoderFactory({\n config,\n get: (view, le) => {\n const leftOffset = le ? 8 : 0;\n const rightOffset = le ? 0 : 8;\n const left = view.getBigInt64(leftOffset, le);\n const right = view.getBigUint64(rightOffset, le);\n return (left << 64n) + right;\n },\n name: 'i128',\n size: 16,\n });\n\nexport const getI128Codec = (config: NumberCodecConfig = {}): Codec<number | bigint, bigint> =>\n combineCodec(getI128Encoder(config), getI128Decoder(config));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI16Encoder = (config: NumberCodecConfig = {}): Encoder<number> =>\n numberEncoderFactory({\n config,\n name: 'i16',\n range: [-Number('0x7fff') - 1, Number('0x7fff')],\n set: (view, value, le) => view.setInt16(0, value, le),\n size: 2,\n });\n\nexport const getI16Decoder = (config: NumberCodecConfig = {}): Decoder<number> =>\n numberDecoderFactory({\n config,\n get: (view, le) => view.getInt16(0, le),\n name: 'i16',\n size: 2,\n });\n\nexport const getI16Codec = (config: NumberCodecConfig = {}): Codec<number> =>\n combineCodec(getI16Encoder(config), getI16Decoder(config));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI32Encoder = (config: NumberCodecConfig = {}): Encoder<number> =>\n numberEncoderFactory({\n config,\n name: 'i32',\n range: [-Number('0x7fffffff') - 1, Number('0x7fffffff')],\n set: (view, value, le) => view.setInt32(0, value, le),\n size: 4,\n });\n\nexport const getI32Decoder = (config: NumberCodecConfig = {}): Decoder<number> =>\n numberDecoderFactory({\n config,\n get: (view, le) => view.getInt32(0, le),\n name: 'i32',\n size: 4,\n });\n\nexport const getI32Codec = (config: NumberCodecConfig = {}): Codec<number> =>\n combineCodec(getI32Encoder(config), getI32Decoder(config));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI64Encoder = (config: NumberCodecConfig = {}): Encoder<number | bigint> =>\n numberEncoderFactory({\n config,\n name: 'i64',\n range: [-BigInt('0x7fffffffffffffff') - 1n, BigInt('0x7fffffffffffffff')],\n set: (view, value, le) => view.setBigInt64(0, BigInt(value), le),\n size: 8,\n });\n\nexport const getI64Decoder = (config: NumberCodecConfig = {}): Decoder<bigint> =>\n numberDecoderFactory({\n config,\n get: (view, le) => view.getBigInt64(0, le),\n name: 'i64',\n size: 8,\n });\n\nexport const getI64Codec = (config: NumberCodecConfig = {}): Codec<number | bigint, bigint> =>\n combineCodec(getI64Encoder(config), getI64Decoder(config));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { SingleByteNumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI8Encoder = (config: SingleByteNumberCodecConfig = {}): Encoder<number> =>\n numberEncoderFactory({\n config,\n name: 'i8',\n range: [-Number('0x7f') - 1, Number('0x7f')],\n set: (view, value) => view.setInt8(0, value),\n size: 1,\n });\n\nexport const getI8Decoder = (config: SingleByteNumberCodecConfig = {}): Decoder<number> =>\n numberDecoderFactory({\n config,\n get: view => view.getInt8(0),\n name: 'i8',\n size: 1,\n });\n\nexport const getI8Codec = (config: SingleByteNumberCodecConfig = {}): Codec<number> =>\n combineCodec(getI8Encoder(config), getI8Decoder(config));\n","import { BaseCodecConfig, Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { assertNumberIsBetweenForCodec } from './assertions';\n\n/**\n * Defines the config for the shortU16 serializer.\n */\nexport type ShortU16CodecConfig = BaseCodecConfig;\n\n/**\n * Encodes short u16 numbers.\n * @see {@link getShortU16Codec} for a more detailed description.\n */\nexport const getShortU16Encoder = (config: ShortU16CodecConfig = {}): Encoder<number> => ({\n description: config.description ?? 'shortU16',\n encode: (value: number): Uint8Array => {\n assertNumberIsBetweenForCodec('shortU16', 0, 65535, value);\n const bytes = [0];\n for (let ii = 0; ; ii += 1) {\n // Shift the bits of the value over such that the next 7 bits are at the right edge.\n const alignedValue = value >> (ii * 7);\n if (alignedValue === 0) {\n // No more bits to consume.\n break;\n }\n // Extract those 7 bits using a mask.\n const nextSevenBits = 0b1111111 & alignedValue;\n bytes[ii] = nextSevenBits;\n if (ii > 0) {\n // Set the continuation bit of the previous slice.\n bytes[ii - 1] |= 0b10000000;\n }\n }\n return new Uint8Array(bytes);\n },\n fixedSize: null,\n maxSize: 3,\n});\n\n/**\n * Decodes short u16 numbers.\n * @see {@link getShortU16Codec} for a more detailed description.\n */\nexport const getShortU16Decoder = (config: ShortU16CodecConfig = {}): Decoder<number> => ({\n decode: (bytes: Uint8Array, offset = 0): [number, number] => {\n let value = 0;\n let byteCount = 0;\n while (++byteCount) {\n const byteIndex = byteCount - 1;\n const currentByte = bytes[offset + byteIndex];\n const nextSevenBits = 0b1111111 & currentByte;\n // Insert the next group of seven bits into the correct slot of the output value.\n value |= nextSevenBits << (byteIndex * 7);\n if ((currentByte & 0b10000000) === 0) {\n // This byte does not have its continuation bit set. We're done.\n break;\n }\n }\n return [value, offset + byteCount];\n },\n description: config.description ?? 'shortU16',\n fixedSize: null,\n maxSize: 3,\n});\n\n/**\n * Encodes and decodes short u16 numbers.\n *\n * Short u16 numbers are the same as u16, but serialized with 1 to 3 bytes.\n * If the value is above 0x7f, the top bit is set and the remaining\n * value is stored in the next bytes. Each byte follows the same\n * pattern until the 3rd byte. The 3rd byte, if needed, uses\n * all 8 bits to store the last byte of the original value.\n */\nexport const getShortU16Codec = (config: ShortU16CodecConfig = {}): Codec<number> =>\n combineCodec(getShortU16Encoder(config), getShortU16Decoder(config));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU128Encoder = (config: NumberCodecConfig = {}): Encoder<number | bigint> =>\n numberEncoderFactory({\n config,\n name: 'u128',\n range: [0, BigInt('0xffffffffffffffffffffffffffffffff')],\n set: (view, value, le) => {\n const leftOffset = le ? 8 : 0;\n const rightOffset = le ? 0 : 8;\n const rightMask = 0xffffffffffffffffn;\n view.setBigUint64(leftOffset, BigInt(value) >> 64n, le);\n view.setBigUint64(rightOffset, BigInt(value) & rightMask, le);\n },\n size: 16,\n });\n\nexport const getU128Decoder = (config: NumberCodecConfig = {}): Decoder<bigint> =>\n numberDecoderFactory({\n config,\n get: (view, le) => {\n const leftOffset = le ? 8 : 0;\n const rightOffset = le ? 0 : 8;\n const left = view.getBigUint64(leftOffset, le);\n const right = view.getBigUint64(rightOffset, le);\n return (left << 64n) + right;\n },\n name: 'u128',\n size: 16,\n });\n\nexport const getU128Codec = (config: NumberCodecConfig = {}): Codec<number | bigint, bigint> =>\n combineCodec(getU128Encoder(config), getU128Decoder(config));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU16Encoder = (config: NumberCodecConfig = {}): Encoder<number> =>\n numberEncoderFactory({\n config,\n name: 'u16',\n range: [0, Number('0xffff')],\n set: (view, value, le) => view.setUint16(0, value, le),\n size: 2,\n });\n\nexport const getU16Decoder = (config: NumberCodecConfig = {}): Decoder<number> =>\n numberDecoderFactory({\n config,\n get: (view, le) => view.getUint16(0, le),\n name: 'u16',\n size: 2,\n });\n\nexport const getU16Codec = (config: NumberCodecConfig = {}): Codec<number> =>\n combineCodec(getU16Encoder(config), getU16Decoder(config));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU32Encoder = (config: NumberCodecConfig = {}): Encoder<number> =>\n numberEncoderFactory({\n config,\n name: 'u32',\n range: [0, Number('0xffffffff')],\n set: (view, value, le) => view.setUint32(0, value, le),\n size: 4,\n });\n\nexport const getU32Decoder = (config: NumberCodecConfig = {}): Decoder<number> =>\n numberDecoderFactory({\n config,\n get: (view, le) => view.getUint32(0, le),\n name: 'u32',\n size: 4,\n });\n\nexport const getU32Codec = (config: NumberCodecConfig = {}): Codec<number> =>\n combineCodec(getU32Encoder(config), getU32Decoder(config));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU64Encoder = (config: NumberCodecConfig = {}): Encoder<number | bigint> =>\n numberEncoderFactory({\n config,\n name: 'u64',\n range: [0, BigInt('0xffffffffffffffff')],\n set: (view, value, le) => view.setBigUint64(0, BigInt(value), le),\n size: 8,\n });\n\nexport const getU64Decoder = (config: NumberCodecConfig = {}): Decoder<bigint> =>\n numberDecoderFactory({\n config,\n get: (view, le) => view.getBigUint64(0, le),\n name: 'u64',\n size: 8,\n });\n\nexport const getU64Codec = (config: NumberCodecConfig = {}): Codec<number | bigint, bigint> =>\n combineCodec(getU64Encoder(config), getU64Decoder(config));\n","import { Codec, combineCodec, Decoder, Encoder } from '@solana/codecs-core';\n\nimport { SingleByteNumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU8Encoder = (config: SingleByteNumberCodecConfig = {}): Encoder<number> =>\n numberEncoderFactory({\n config,\n name: 'u8',\n range: [0, Number('0xff')],\n set: (view, value) => view.setUint8(0, value),\n size: 1,\n });\n\nexport const getU8Decoder = (config: SingleByteNumberCodecConfig = {}): Decoder<number> =>\n numberDecoderFactory({\n config,\n get: view => view.getUint8(0),\n name: 'u8',\n size: 1,\n });\n\nexport const getU8Codec = (config: SingleByteNumberCodecConfig = {}): Codec<number> =>\n combineCodec(getU8Encoder(config), getU8Decoder(config));\n"]}
|