@solana/codecs-numbers 2.0.0-experimental.ffeddf6 → 2.0.0-preview.1
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 +112 -4
- package/dist/index.browser.cjs +104 -116
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +105 -117
- package/dist/index.browser.js.map +1 -1
- package/dist/index.native.js +105 -117
- package/dist/index.native.js.map +1 -1
- package/dist/index.node.cjs +104 -116
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.js +107 -117
- package/dist/index.node.js.map +1 -1
- package/dist/types/assertions.d.ts +1 -1
- package/dist/types/assertions.d.ts.map +1 -0
- package/dist/types/common.d.ts +12 -8
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/f32.d.ts +5 -5
- package/dist/types/f32.d.ts.map +1 -0
- package/dist/types/f64.d.ts +5 -5
- package/dist/types/f64.d.ts.map +1 -0
- package/dist/types/i128.d.ts +5 -5
- package/dist/types/i128.d.ts.map +1 -0
- package/dist/types/i16.d.ts +5 -5
- package/dist/types/i16.d.ts.map +1 -0
- package/dist/types/i32.d.ts +5 -5
- package/dist/types/i32.d.ts.map +1 -0
- package/dist/types/i64.d.ts +5 -5
- package/dist/types/i64.d.ts.map +1 -0
- package/dist/types/i8.d.ts +4 -5
- package/dist/types/i8.d.ts.map +1 -0
- package/dist/types/index.d.ts +15 -15
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/short-u16.d.ts +4 -8
- package/dist/types/short-u16.d.ts.map +1 -0
- package/dist/types/u128.d.ts +5 -5
- package/dist/types/u128.d.ts.map +1 -0
- package/dist/types/u16.d.ts +5 -5
- package/dist/types/u16.d.ts.map +1 -0
- package/dist/types/u32.d.ts +5 -5
- package/dist/types/u32.d.ts.map +1 -0
- package/dist/types/u64.d.ts +5 -5
- package/dist/types/u64.d.ts.map +1 -0
- package/dist/types/u8.d.ts +4 -5
- package/dist/types/u8.d.ts.map +1 -0
- package/dist/types/utils.d.ts +12 -12
- package/dist/types/utils.d.ts.map +1 -0
- package/package.json +12 -32
- package/dist/index.development.js +0 -412
- package/dist/index.development.js.map +0 -1
- package/dist/index.production.min.js +0 -51
package/README.md
CHANGED
|
@@ -16,10 +16,118 @@
|
|
|
16
16
|
|
|
17
17
|
This package contains codecs for numbers of different sizes and endianness. It can be used standalone, but it is also exported as part of the Solana JavaScript SDK [`@solana/web3.js@experimental`](https://github.com/solana-labs/solana-web3.js/tree/master/packages/library).
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
This package is also part of the [`@solana/codecs` package](https://github.com/solana-labs/solana-web3.js/tree/master/packages/codecs) which acts as an entry point for all codec packages as well as for their documentation.
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
## Integer codecs
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
This package provides ten codecs of five different byte sizes for integers. Five of them store unsigned integers and the other five store signed integers.
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
```ts
|
|
26
|
+
// Unsigned integers.
|
|
27
|
+
getU8Codec().encode(42); // 0x2a
|
|
28
|
+
getU16Codec().encode(42); // 0x2a00
|
|
29
|
+
getU32Codec().encode(42); // 0x2a000000
|
|
30
|
+
getU64Codec().encode(42); // 0x2a00000000000000
|
|
31
|
+
getU128Codec().encode(42); // 0x2a000000000000000000000000000000
|
|
32
|
+
|
|
33
|
+
// Signed integers.
|
|
34
|
+
getI8Codec().encode(-42); // 0xd6
|
|
35
|
+
getI16Codec().encode(-42); // 0xd6ff
|
|
36
|
+
getI32Codec().encode(-42); // 0xd6ffffff
|
|
37
|
+
getI64Codec().encode(-42); // 0xd6ffffffffffffff
|
|
38
|
+
getI128Codec().encode(-42); // 0xd6ffffffffffffffffffffffffffffff
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
By default, integers are stored using little endianness but you may change this behaviour via the `endian` option. This option is available for every codec that uses more than a single byte.
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
// Big-endian unsigned integers.
|
|
45
|
+
getU16Codec({ endian: Endian.BIG }).encode(42); // 0x002a
|
|
46
|
+
getU32Codec({ endian: Endian.BIG }).encode(42); // 0x0000002a
|
|
47
|
+
getU64Codec({ endian: Endian.BIG }).encode(42); // 0x000000000000002a
|
|
48
|
+
getU128Codec({ endian: Endian.BIG }).encode(42); // 0x0000000000000000000000000000002a
|
|
49
|
+
|
|
50
|
+
// Big-endian signed integers.
|
|
51
|
+
getI16Codec({ endian: Endian.BIG }).encode(-42); // 0xffd6
|
|
52
|
+
getI32Codec({ endian: Endian.BIG }).encode(-42); // 0xffffffd6
|
|
53
|
+
getI64Codec({ endian: Endian.BIG }).encode(-42); // 0xffffffffffffffd6
|
|
54
|
+
getI128Codec({ endian: Endian.BIG }).encode(-42); // 0xffffffffffffffffffffffffffffffd6
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
All integer codecs are of type `Codec<number>` except for the `u64`, `u128`, `i64` and `i128` codecs which are of type `Codec<number | bigint, bigint>`. This means we can provide either a `number` of a `bigint` value to encode but the decoded value will always be a `bigint`. This is because JavaScript's native `number` type does not support numbers larger than `2^53 - 1` and these large integer codecs have the potential to go over that value.
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
const bytesFromNumber = getU64Codec().encode(42);
|
|
61
|
+
getU64Codec().decode(bytesFromNumber); // BigInt(42)
|
|
62
|
+
|
|
63
|
+
// OR
|
|
64
|
+
const bytesFromBigInt = getU64Codec().encode(BigInt(42));
|
|
65
|
+
getU64Codec().decode(bytesFromBigInt); // BigInt(42)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Finally, for each of these `get*Codec` functions, separate `get*Encoder` and `get*Decoder` functions exist to focus on only one side of the serialization and tree-shake the rest of the functions away.
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
const bytes = getU8Encoder().encode(42);
|
|
72
|
+
const value = getU8Decoder().decode(bytes);
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Decimal number codecs
|
|
76
|
+
|
|
77
|
+
This package also provides two codecs for floating numbers. One using 32 bits and one using 64 bits.
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
getF32Codec().encode(-1.5); // 0x0000c0bf
|
|
81
|
+
getF64Codec().encode(-1.5); // 0x000000000000f8bf
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Similarly to the integer codecs, they are stored in little-endian by default but may be stored in big-endian using the `endian` option.
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
getF32Codec({ endian: Endian.BIG }).encode(-1.5); // 0xbfc00000
|
|
88
|
+
getF64Codec({ endian: Endian.BIG }).encode(-1.5); // 0xbff8000000000000
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Note that based on the selected codec, some of the precision of the number you are encoding may be lost when decoding it. For instance, when storing `3.1415` using a `f32` codec, you will not get the exact same number back.
|
|
92
|
+
|
|
93
|
+
```ts
|
|
94
|
+
const bytes = getF32Codec().encode(3.1415); // 0x560e4940
|
|
95
|
+
const value = getF32Codec().decode(bytes); // 3.1414999961853027 !== 3.1415
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
As usual, separate encoder and decoder functions are available for these codecs.
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
getF32Encoder().encode(-1.5);
|
|
102
|
+
getF32Decoder().decode(new Uint8Array([...]));
|
|
103
|
+
|
|
104
|
+
getF64Encoder().encode(-1.5);
|
|
105
|
+
getF64Decoder().decode(new Uint8Array([...]));
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Short u16 codec
|
|
109
|
+
|
|
110
|
+
This last integer codec is less common `VariableSizeCodec` that stores an unsigned integer using between 1 to 3 bytes depending on the value of that integer.
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
const bytes = getShortU16Codec().encode(42); // 0x2a
|
|
114
|
+
const value = getShortU16Codec().decode(bytes); // 42
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
If the provided integer is equal to or lower than `0x7f`, it will be stored as-is, using a single byte. However, if the integer is above `0x7f`, then the top bit is set and the remaining value is stored in the next bytes. Each byte follows the same pattern until the third byte. The third byte, if needed, uses all 8 bits to store the last byte of the original value.
|
|
118
|
+
|
|
119
|
+
In other words, this codec provides an extendable size that adapts based on the integer. In the illustration below, you can see the `0` and `1` byte flags for each scenario as well as the available bits to store the integer marked with `X`.
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
0XXXXXXX <- From 0 to 127.
|
|
123
|
+
1XXXXXXX 0XXXXXXX <- From 128 to 16,383.
|
|
124
|
+
1XXXXXXX 1XXXXXXX XXXXXXXX <- From 16,384 to 4,194,303.
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
This codec is mainly used internally when encoding and decoding Solana transactions.
|
|
128
|
+
|
|
129
|
+
Separate encoder and decoder functions are also available via `getShortU16Encoder` and `getShortU16Decoder` respectively.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
To read more about the available codecs and how to use them, check out the documentation of the main [`@solana/codecs` package](https://github.com/solana-labs/solana-web3.js/tree/master/packages/codecs).
|
package/dist/index.browser.cjs
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var errors = require('@solana/errors');
|
|
3
4
|
var codecsCore = require('@solana/codecs-core');
|
|
4
5
|
|
|
5
6
|
// src/assertions.ts
|
|
6
7
|
function assertNumberIsBetweenForCodec(codecDescription, min, max, value) {
|
|
7
8
|
if (value < min || value > max) {
|
|
8
|
-
throw new
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
throw new errors.SolanaError(errors.SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE, {
|
|
10
|
+
codecDescription,
|
|
11
|
+
max,
|
|
12
|
+
min,
|
|
13
|
+
value
|
|
14
|
+
});
|
|
11
15
|
}
|
|
12
16
|
}
|
|
13
17
|
|
|
@@ -17,49 +21,33 @@ var Endian = /* @__PURE__ */ ((Endian2) => {
|
|
|
17
21
|
Endian2[Endian2["BIG"] = 1] = "BIG";
|
|
18
22
|
return Endian2;
|
|
19
23
|
})(Endian || {});
|
|
20
|
-
function
|
|
21
|
-
|
|
22
|
-
let defaultDescription = input.name;
|
|
23
|
-
if (input.size > 1) {
|
|
24
|
-
littleEndian = !("endian" in input.options) || input.options.endian === 0 /* LITTLE */;
|
|
25
|
-
defaultDescription += littleEndian ? "(le)" : "(be)";
|
|
26
|
-
}
|
|
27
|
-
return {
|
|
28
|
-
description: input.options.description ?? defaultDescription,
|
|
29
|
-
fixedSize: input.size,
|
|
30
|
-
littleEndian,
|
|
31
|
-
maxSize: input.size
|
|
32
|
-
};
|
|
24
|
+
function isLittleEndian(config) {
|
|
25
|
+
return config?.endian === 1 /* BIG */ ? false : true;
|
|
33
26
|
}
|
|
34
27
|
function numberEncoderFactory(input) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
encode(value) {
|
|
28
|
+
return codecsCore.createEncoder({
|
|
29
|
+
fixedSize: input.size,
|
|
30
|
+
write(value, bytes, offset) {
|
|
39
31
|
if (input.range) {
|
|
40
32
|
assertNumberIsBetweenForCodec(input.name, input.range[0], input.range[1], value);
|
|
41
33
|
}
|
|
42
34
|
const arrayBuffer = new ArrayBuffer(input.size);
|
|
43
|
-
input.set(new DataView(arrayBuffer), value,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
};
|
|
35
|
+
input.set(new DataView(arrayBuffer), value, isLittleEndian(input.config));
|
|
36
|
+
bytes.set(new Uint8Array(arrayBuffer), offset);
|
|
37
|
+
return offset + input.size;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
49
40
|
}
|
|
50
41
|
function numberDecoderFactory(input) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
codecsCore.assertByteArrayIsNotEmptyForCodec(
|
|
55
|
-
codecsCore.assertByteArrayHasEnoughBytesForCodec(
|
|
42
|
+
return codecsCore.createDecoder({
|
|
43
|
+
fixedSize: input.size,
|
|
44
|
+
read(bytes, offset = 0) {
|
|
45
|
+
codecsCore.assertByteArrayIsNotEmptyForCodec(input.name, bytes, offset);
|
|
46
|
+
codecsCore.assertByteArrayHasEnoughBytesForCodec(input.name, input.size, bytes, offset);
|
|
56
47
|
const view = new DataView(toArrayBuffer(bytes, offset, input.size));
|
|
57
|
-
return [input.get(view,
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
fixedSize: codecData.fixedSize,
|
|
61
|
-
maxSize: codecData.maxSize
|
|
62
|
-
};
|
|
48
|
+
return [input.get(view, isLittleEndian(input.config)), offset + input.size];
|
|
49
|
+
}
|
|
50
|
+
});
|
|
63
51
|
}
|
|
64
52
|
function toArrayBuffer(bytes, offset, length) {
|
|
65
53
|
const bytesOffset = bytes.byteOffset + (offset ?? 0);
|
|
@@ -68,35 +56,35 @@ function toArrayBuffer(bytes, offset, length) {
|
|
|
68
56
|
}
|
|
69
57
|
|
|
70
58
|
// src/f32.ts
|
|
71
|
-
var getF32Encoder = (
|
|
59
|
+
var getF32Encoder = (config = {}) => numberEncoderFactory({
|
|
60
|
+
config,
|
|
72
61
|
name: "f32",
|
|
73
|
-
options,
|
|
74
62
|
set: (view, value, le) => view.setFloat32(0, value, le),
|
|
75
63
|
size: 4
|
|
76
64
|
});
|
|
77
|
-
var getF32Decoder = (
|
|
65
|
+
var getF32Decoder = (config = {}) => numberDecoderFactory({
|
|
66
|
+
config,
|
|
78
67
|
get: (view, le) => view.getFloat32(0, le),
|
|
79
68
|
name: "f32",
|
|
80
|
-
options,
|
|
81
69
|
size: 4
|
|
82
70
|
});
|
|
83
|
-
var getF32Codec = (
|
|
84
|
-
var getF64Encoder = (
|
|
71
|
+
var getF32Codec = (config = {}) => codecsCore.combineCodec(getF32Encoder(config), getF32Decoder(config));
|
|
72
|
+
var getF64Encoder = (config = {}) => numberEncoderFactory({
|
|
73
|
+
config,
|
|
85
74
|
name: "f64",
|
|
86
|
-
options,
|
|
87
75
|
set: (view, value, le) => view.setFloat64(0, value, le),
|
|
88
76
|
size: 8
|
|
89
77
|
});
|
|
90
|
-
var getF64Decoder = (
|
|
78
|
+
var getF64Decoder = (config = {}) => numberDecoderFactory({
|
|
79
|
+
config,
|
|
91
80
|
get: (view, le) => view.getFloat64(0, le),
|
|
92
81
|
name: "f64",
|
|
93
|
-
options,
|
|
94
82
|
size: 8
|
|
95
83
|
});
|
|
96
|
-
var getF64Codec = (
|
|
97
|
-
var getI128Encoder = (
|
|
84
|
+
var getF64Codec = (config = {}) => codecsCore.combineCodec(getF64Encoder(config), getF64Decoder(config));
|
|
85
|
+
var getI128Encoder = (config = {}) => numberEncoderFactory({
|
|
86
|
+
config,
|
|
98
87
|
name: "i128",
|
|
99
|
-
options,
|
|
100
88
|
range: [-BigInt("0x7fffffffffffffffffffffffffffffff") - 1n, BigInt("0x7fffffffffffffffffffffffffffffff")],
|
|
101
89
|
set: (view, value, le) => {
|
|
102
90
|
const leftOffset = le ? 8 : 0;
|
|
@@ -107,7 +95,8 @@ var getI128Encoder = (options = {}) => numberEncoderFactory({
|
|
|
107
95
|
},
|
|
108
96
|
size: 16
|
|
109
97
|
});
|
|
110
|
-
var getI128Decoder = (
|
|
98
|
+
var getI128Decoder = (config = {}) => numberDecoderFactory({
|
|
99
|
+
config,
|
|
111
100
|
get: (view, le) => {
|
|
112
101
|
const leftOffset = le ? 8 : 0;
|
|
113
102
|
const rightOffset = le ? 0 : 8;
|
|
@@ -116,89 +105,93 @@ var getI128Decoder = (options = {}) => numberDecoderFactory({
|
|
|
116
105
|
return (left << 64n) + right;
|
|
117
106
|
},
|
|
118
107
|
name: "i128",
|
|
119
|
-
options,
|
|
120
108
|
size: 16
|
|
121
109
|
});
|
|
122
|
-
var getI128Codec = (
|
|
123
|
-
var getI16Encoder = (
|
|
110
|
+
var getI128Codec = (config = {}) => codecsCore.combineCodec(getI128Encoder(config), getI128Decoder(config));
|
|
111
|
+
var getI16Encoder = (config = {}) => numberEncoderFactory({
|
|
112
|
+
config,
|
|
124
113
|
name: "i16",
|
|
125
|
-
options,
|
|
126
114
|
range: [-Number("0x7fff") - 1, Number("0x7fff")],
|
|
127
115
|
set: (view, value, le) => view.setInt16(0, value, le),
|
|
128
116
|
size: 2
|
|
129
117
|
});
|
|
130
|
-
var getI16Decoder = (
|
|
118
|
+
var getI16Decoder = (config = {}) => numberDecoderFactory({
|
|
119
|
+
config,
|
|
131
120
|
get: (view, le) => view.getInt16(0, le),
|
|
132
121
|
name: "i16",
|
|
133
|
-
options,
|
|
134
122
|
size: 2
|
|
135
123
|
});
|
|
136
|
-
var getI16Codec = (
|
|
137
|
-
var getI32Encoder = (
|
|
124
|
+
var getI16Codec = (config = {}) => codecsCore.combineCodec(getI16Encoder(config), getI16Decoder(config));
|
|
125
|
+
var getI32Encoder = (config = {}) => numberEncoderFactory({
|
|
126
|
+
config,
|
|
138
127
|
name: "i32",
|
|
139
|
-
options,
|
|
140
128
|
range: [-Number("0x7fffffff") - 1, Number("0x7fffffff")],
|
|
141
129
|
set: (view, value, le) => view.setInt32(0, value, le),
|
|
142
130
|
size: 4
|
|
143
131
|
});
|
|
144
|
-
var getI32Decoder = (
|
|
132
|
+
var getI32Decoder = (config = {}) => numberDecoderFactory({
|
|
133
|
+
config,
|
|
145
134
|
get: (view, le) => view.getInt32(0, le),
|
|
146
135
|
name: "i32",
|
|
147
|
-
options,
|
|
148
136
|
size: 4
|
|
149
137
|
});
|
|
150
|
-
var getI32Codec = (
|
|
151
|
-
var getI64Encoder = (
|
|
138
|
+
var getI32Codec = (config = {}) => codecsCore.combineCodec(getI32Encoder(config), getI32Decoder(config));
|
|
139
|
+
var getI64Encoder = (config = {}) => numberEncoderFactory({
|
|
140
|
+
config,
|
|
152
141
|
name: "i64",
|
|
153
|
-
options,
|
|
154
142
|
range: [-BigInt("0x7fffffffffffffff") - 1n, BigInt("0x7fffffffffffffff")],
|
|
155
143
|
set: (view, value, le) => view.setBigInt64(0, BigInt(value), le),
|
|
156
144
|
size: 8
|
|
157
145
|
});
|
|
158
|
-
var getI64Decoder = (
|
|
146
|
+
var getI64Decoder = (config = {}) => numberDecoderFactory({
|
|
147
|
+
config,
|
|
159
148
|
get: (view, le) => view.getBigInt64(0, le),
|
|
160
149
|
name: "i64",
|
|
161
|
-
options,
|
|
162
150
|
size: 8
|
|
163
151
|
});
|
|
164
|
-
var getI64Codec = (
|
|
165
|
-
var getI8Encoder = (
|
|
152
|
+
var getI64Codec = (config = {}) => codecsCore.combineCodec(getI64Encoder(config), getI64Decoder(config));
|
|
153
|
+
var getI8Encoder = () => numberEncoderFactory({
|
|
166
154
|
name: "i8",
|
|
167
|
-
options,
|
|
168
155
|
range: [-Number("0x7f") - 1, Number("0x7f")],
|
|
169
156
|
set: (view, value) => view.setInt8(0, value),
|
|
170
157
|
size: 1
|
|
171
158
|
});
|
|
172
|
-
var getI8Decoder = (
|
|
159
|
+
var getI8Decoder = () => numberDecoderFactory({
|
|
173
160
|
get: (view) => view.getInt8(0),
|
|
174
161
|
name: "i8",
|
|
175
|
-
options,
|
|
176
162
|
size: 1
|
|
177
163
|
});
|
|
178
|
-
var getI8Codec = (
|
|
179
|
-
var getShortU16Encoder = (
|
|
180
|
-
|
|
181
|
-
|
|
164
|
+
var getI8Codec = () => codecsCore.combineCodec(getI8Encoder(), getI8Decoder());
|
|
165
|
+
var getShortU16Encoder = () => codecsCore.createEncoder({
|
|
166
|
+
getSizeFromValue: (value) => {
|
|
167
|
+
if (value <= 127)
|
|
168
|
+
return 1;
|
|
169
|
+
if (value <= 16383)
|
|
170
|
+
return 2;
|
|
171
|
+
return 3;
|
|
172
|
+
},
|
|
173
|
+
maxSize: 3,
|
|
174
|
+
write: (value, bytes, offset) => {
|
|
182
175
|
assertNumberIsBetweenForCodec("shortU16", 0, 65535, value);
|
|
183
|
-
const
|
|
176
|
+
const shortU16Bytes = [0];
|
|
184
177
|
for (let ii = 0; ; ii += 1) {
|
|
185
178
|
const alignedValue = value >> ii * 7;
|
|
186
179
|
if (alignedValue === 0) {
|
|
187
180
|
break;
|
|
188
181
|
}
|
|
189
182
|
const nextSevenBits = 127 & alignedValue;
|
|
190
|
-
|
|
183
|
+
shortU16Bytes[ii] = nextSevenBits;
|
|
191
184
|
if (ii > 0) {
|
|
192
|
-
|
|
185
|
+
shortU16Bytes[ii - 1] |= 128;
|
|
193
186
|
}
|
|
194
187
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
maxSize: 3
|
|
188
|
+
bytes.set(shortU16Bytes, offset);
|
|
189
|
+
return offset + shortU16Bytes.length;
|
|
190
|
+
}
|
|
199
191
|
});
|
|
200
|
-
var getShortU16Decoder = (
|
|
201
|
-
|
|
192
|
+
var getShortU16Decoder = () => codecsCore.createDecoder({
|
|
193
|
+
maxSize: 3,
|
|
194
|
+
read: (bytes, offset) => {
|
|
202
195
|
let value = 0;
|
|
203
196
|
let byteCount = 0;
|
|
204
197
|
while (++byteCount) {
|
|
@@ -211,16 +204,13 @@ var getShortU16Decoder = (options = {}) => ({
|
|
|
211
204
|
}
|
|
212
205
|
}
|
|
213
206
|
return [value, offset + byteCount];
|
|
214
|
-
}
|
|
215
|
-
description: options.description ?? "shortU16",
|
|
216
|
-
fixedSize: null,
|
|
217
|
-
maxSize: 3
|
|
207
|
+
}
|
|
218
208
|
});
|
|
219
|
-
var getShortU16Codec = (
|
|
220
|
-
var getU128Encoder = (
|
|
209
|
+
var getShortU16Codec = () => codecsCore.combineCodec(getShortU16Encoder(), getShortU16Decoder());
|
|
210
|
+
var getU128Encoder = (config = {}) => numberEncoderFactory({
|
|
211
|
+
config,
|
|
221
212
|
name: "u128",
|
|
222
|
-
|
|
223
|
-
range: [0, BigInt("0xffffffffffffffffffffffffffffffff")],
|
|
213
|
+
range: [0n, BigInt("0xffffffffffffffffffffffffffffffff")],
|
|
224
214
|
set: (view, value, le) => {
|
|
225
215
|
const leftOffset = le ? 8 : 0;
|
|
226
216
|
const rightOffset = le ? 0 : 8;
|
|
@@ -230,7 +220,8 @@ var getU128Encoder = (options = {}) => numberEncoderFactory({
|
|
|
230
220
|
},
|
|
231
221
|
size: 16
|
|
232
222
|
});
|
|
233
|
-
var getU128Decoder = (
|
|
223
|
+
var getU128Decoder = (config = {}) => numberDecoderFactory({
|
|
224
|
+
config,
|
|
234
225
|
get: (view, le) => {
|
|
235
226
|
const leftOffset = le ? 8 : 0;
|
|
236
227
|
const rightOffset = le ? 0 : 8;
|
|
@@ -239,66 +230,63 @@ var getU128Decoder = (options = {}) => numberDecoderFactory({
|
|
|
239
230
|
return (left << 64n) + right;
|
|
240
231
|
},
|
|
241
232
|
name: "u128",
|
|
242
|
-
options,
|
|
243
233
|
size: 16
|
|
244
234
|
});
|
|
245
|
-
var getU128Codec = (
|
|
246
|
-
var getU16Encoder = (
|
|
235
|
+
var getU128Codec = (config = {}) => codecsCore.combineCodec(getU128Encoder(config), getU128Decoder(config));
|
|
236
|
+
var getU16Encoder = (config = {}) => numberEncoderFactory({
|
|
237
|
+
config,
|
|
247
238
|
name: "u16",
|
|
248
|
-
options,
|
|
249
239
|
range: [0, Number("0xffff")],
|
|
250
240
|
set: (view, value, le) => view.setUint16(0, value, le),
|
|
251
241
|
size: 2
|
|
252
242
|
});
|
|
253
|
-
var getU16Decoder = (
|
|
243
|
+
var getU16Decoder = (config = {}) => numberDecoderFactory({
|
|
244
|
+
config,
|
|
254
245
|
get: (view, le) => view.getUint16(0, le),
|
|
255
246
|
name: "u16",
|
|
256
|
-
options,
|
|
257
247
|
size: 2
|
|
258
248
|
});
|
|
259
|
-
var getU16Codec = (
|
|
260
|
-
var getU32Encoder = (
|
|
249
|
+
var getU16Codec = (config = {}) => codecsCore.combineCodec(getU16Encoder(config), getU16Decoder(config));
|
|
250
|
+
var getU32Encoder = (config = {}) => numberEncoderFactory({
|
|
251
|
+
config,
|
|
261
252
|
name: "u32",
|
|
262
|
-
options,
|
|
263
253
|
range: [0, Number("0xffffffff")],
|
|
264
254
|
set: (view, value, le) => view.setUint32(0, value, le),
|
|
265
255
|
size: 4
|
|
266
256
|
});
|
|
267
|
-
var getU32Decoder = (
|
|
257
|
+
var getU32Decoder = (config = {}) => numberDecoderFactory({
|
|
258
|
+
config,
|
|
268
259
|
get: (view, le) => view.getUint32(0, le),
|
|
269
260
|
name: "u32",
|
|
270
|
-
options,
|
|
271
261
|
size: 4
|
|
272
262
|
});
|
|
273
|
-
var getU32Codec = (
|
|
274
|
-
var getU64Encoder = (
|
|
263
|
+
var getU32Codec = (config = {}) => codecsCore.combineCodec(getU32Encoder(config), getU32Decoder(config));
|
|
264
|
+
var getU64Encoder = (config = {}) => numberEncoderFactory({
|
|
265
|
+
config,
|
|
275
266
|
name: "u64",
|
|
276
|
-
|
|
277
|
-
range: [0, BigInt("0xffffffffffffffff")],
|
|
267
|
+
range: [0n, BigInt("0xffffffffffffffff")],
|
|
278
268
|
set: (view, value, le) => view.setBigUint64(0, BigInt(value), le),
|
|
279
269
|
size: 8
|
|
280
270
|
});
|
|
281
|
-
var getU64Decoder = (
|
|
271
|
+
var getU64Decoder = (config = {}) => numberDecoderFactory({
|
|
272
|
+
config,
|
|
282
273
|
get: (view, le) => view.getBigUint64(0, le),
|
|
283
274
|
name: "u64",
|
|
284
|
-
options,
|
|
285
275
|
size: 8
|
|
286
276
|
});
|
|
287
|
-
var getU64Codec = (
|
|
288
|
-
var getU8Encoder = (
|
|
277
|
+
var getU64Codec = (config = {}) => codecsCore.combineCodec(getU64Encoder(config), getU64Decoder(config));
|
|
278
|
+
var getU8Encoder = () => numberEncoderFactory({
|
|
289
279
|
name: "u8",
|
|
290
|
-
options,
|
|
291
280
|
range: [0, Number("0xff")],
|
|
292
281
|
set: (view, value) => view.setUint8(0, value),
|
|
293
282
|
size: 1
|
|
294
283
|
});
|
|
295
|
-
var getU8Decoder = (
|
|
284
|
+
var getU8Decoder = () => numberDecoderFactory({
|
|
296
285
|
get: (view) => view.getUint8(0),
|
|
297
286
|
name: "u8",
|
|
298
|
-
options,
|
|
299
287
|
size: 1
|
|
300
288
|
});
|
|
301
|
-
var getU8Codec = (
|
|
289
|
+
var getU8Codec = () => codecsCore.combineCodec(getU8Encoder(), getU8Decoder());
|
|
302
290
|
|
|
303
291
|
exports.Endian = Endian;
|
|
304
292
|
exports.assertNumberIsBetweenForCodec = assertNumberIsBetweenForCodec;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/assertions.ts","../src/common.ts","../src/f32.ts","../src/utils.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","combineCodec"],"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;;;ACxBZ,SAAgB,oBAAsC;;;ACAtD;AAAA,EACI;AAAA,EACA;AAAA,OAIG;AAoBP,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;;;ADhFO,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;;;AEtB/D,SAAgB,gBAAAC,qBAAsC;AAK/C,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,MACvDA,cAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;ACtB/D,SAAgB,gBAAAA,qBAAsC;AAK/C,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,MACxDA,cAAa,eAAe,OAAO,GAAG,eAAe,OAAO,CAAC;;;ACnCjE,SAAgB,gBAAAA,qBAAsC;AAK/C,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,MACvDA,cAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;ACvB/D,SAAgB,gBAAAA,qBAAsC;AAK/C,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,MACvDA,cAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;ACvB/D,SAAgB,gBAAAA,qBAAsC;AAK/C,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,MACvDA,cAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;ACvB/D,SAAgB,gBAAAA,qBAAsC;AAK/C,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,MAChEA,cAAa,aAAa,OAAO,GAAG,aAAa,OAAO,CAAC;;;ACvB7D,SAAkC,gBAAAA,qBAAsC;AAajE,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,MAC9DA,cAAa,mBAAmB,OAAO,GAAG,mBAAmB,OAAO,CAAC;;;AC3EzE,SAAgB,gBAAAA,qBAAsC;AAK/C,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,MACxDA,cAAa,eAAe,OAAO,GAAG,eAAe,OAAO,CAAC;;;ACnCjE,SAAgB,gBAAAA,sBAAsC;AAK/C,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,MACvDA,eAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;ACvB/D,SAAgB,gBAAAA,sBAAsC;AAK/C,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,MACvDA,eAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;ACvB/D,SAAgB,gBAAAA,sBAAsC;AAK/C,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,MACvDA,eAAa,cAAc,OAAO,GAAG,cAAc,OAAO,CAAC;;;ACvB/D,SAAgB,gBAAAA,sBAAsC;AAK/C,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,MAChEA,eAAa,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 { 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 {\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 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","../src/f32.ts","../src/utils.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","combineCodec","createDecoder","createEncoder"],"mappings":"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","sourcesContent":["import { SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE, SolanaError } from '@solana/errors';\n\n/**\n * Asserts that a given number is between a given range.\n */\nexport function assertNumberIsBetweenForCodec(\n codecDescription: string,\n min: bigint | number,\n max: bigint | number,\n value: bigint | number,\n) {\n if (value < min || value > max) {\n throw new SolanaError(SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE, {\n codecDescription,\n max,\n min,\n value,\n });\n }\n}\n","import { Codec, Decoder, Encoder, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\n\n/** Defines a encoder for numbers and bigints. */\nexport type NumberEncoder = Encoder<bigint | number> | Encoder<number>;\n\n/** Defines a fixed-size encoder for numbers and bigints. */\nexport type FixedSizeNumberEncoder<TSize extends number = number> =\n | FixedSizeEncoder<bigint | number, TSize>\n | FixedSizeEncoder<number, TSize>;\n\n/** Defines a decoder for numbers and bigints. */\nexport type NumberDecoder = Decoder<bigint> | Decoder<number>;\n\n/** Defines a fixed-size decoder for numbers and bigints. */\nexport type FixedSizeNumberDecoder<TSize extends number = number> =\n | FixedSizeDecoder<bigint, TSize>\n | FixedSizeDecoder<number, TSize>;\n\n/** Defines a codec for numbers and bigints. */\nexport type NumberCodec = Codec<bigint | number, bigint> | Codec<number>;\n\n/** Defines a fixed-size codec for numbers and bigints. */\nexport type FixedSizeNumberCodec<TSize extends number = number> =\n | FixedSizeCodec<bigint | number, bigint, TSize>\n | FixedSizeCodec<number, number, TSize>;\n\n/** Defines the config for number codecs that use more than one byte. */\nexport type NumberCodecConfig = {\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 { combineCodec, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getF32Encoder = (config: NumberCodecConfig = {}): FixedSizeEncoder<number, 4> =>\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 = {}): FixedSizeDecoder<number, 4> =>\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 = {}): FixedSizeCodec<number, number, 4> =>\n combineCodec(getF32Encoder(config), getF32Decoder(config));\n","import {\n assertByteArrayHasEnoughBytesForCodec,\n assertByteArrayIsNotEmptyForCodec,\n createDecoder,\n createEncoder,\n FixedSizeDecoder,\n FixedSizeEncoder,\n Offset,\n} from '@solana/codecs-core';\n\nimport { assertNumberIsBetweenForCodec } from './assertions';\nimport { Endian, NumberCodecConfig } from './common';\n\ntype NumberFactorySharedInput<TSize extends number> = {\n config?: NumberCodecConfig;\n name: string;\n size: TSize;\n};\n\ntype NumberFactoryEncoderInput<TFrom, TSize extends number> = NumberFactorySharedInput<TSize> & {\n range?: [bigint | number, bigint | number];\n set: (view: DataView, value: TFrom, littleEndian?: boolean) => void;\n};\n\ntype NumberFactoryDecoderInput<TTo, TSize extends number> = NumberFactorySharedInput<TSize> & {\n get: (view: DataView, littleEndian?: boolean) => TTo;\n};\n\nfunction isLittleEndian(config?: NumberCodecConfig): boolean {\n return config?.endian === Endian.BIG ? false : true;\n}\n\nexport function numberEncoderFactory<TFrom extends bigint | number, TSize extends number>(\n input: NumberFactoryEncoderInput<TFrom, TSize>,\n): FixedSizeEncoder<TFrom, TSize> {\n return createEncoder({\n fixedSize: input.size,\n write(value: TFrom, bytes: Uint8Array, offset: Offset): Offset {\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, isLittleEndian(input.config));\n bytes.set(new Uint8Array(arrayBuffer), offset);\n return offset + input.size;\n },\n });\n}\n\nexport function numberDecoderFactory<TTo extends bigint | number, TSize extends number>(\n input: NumberFactoryDecoderInput<TTo, TSize>,\n): FixedSizeDecoder<TTo, TSize> {\n return createDecoder({\n fixedSize: input.size,\n read(bytes, offset = 0): [TTo, number] {\n assertByteArrayIsNotEmptyForCodec(input.name, bytes, offset);\n assertByteArrayHasEnoughBytesForCodec(input.name, input.size, bytes, offset);\n const view = new DataView(toArrayBuffer(bytes, offset, input.size));\n return [input.get(view, isLittleEndian(input.config)), offset + input.size];\n },\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 { combineCodec, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getF64Encoder = (config: NumberCodecConfig = {}): FixedSizeEncoder<number, 8> =>\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 = {}): FixedSizeDecoder<number, 8> =>\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 = {}): FixedSizeCodec<number, number, 8> =>\n combineCodec(getF64Encoder(config), getF64Decoder(config));\n","import { combineCodec, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI128Encoder = (config: NumberCodecConfig = {}): FixedSizeEncoder<bigint | number, 16> =>\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 = {}): FixedSizeDecoder<bigint, 16> =>\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 = {}): FixedSizeCodec<bigint | number, bigint, 16> =>\n combineCodec(getI128Encoder(config), getI128Decoder(config));\n","import { combineCodec, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI16Encoder = (config: NumberCodecConfig = {}): FixedSizeEncoder<number, 2> =>\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 = {}): FixedSizeDecoder<number, 2> =>\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 = {}): FixedSizeCodec<number, number, 2> =>\n combineCodec(getI16Encoder(config), getI16Decoder(config));\n","import { combineCodec, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI32Encoder = (config: NumberCodecConfig = {}): FixedSizeEncoder<number, 4> =>\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 = {}): FixedSizeDecoder<number, 4> =>\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 = {}): FixedSizeCodec<number, number, 4> =>\n combineCodec(getI32Encoder(config), getI32Decoder(config));\n","import { combineCodec, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI64Encoder = (config: NumberCodecConfig = {}): FixedSizeEncoder<bigint | number, 8> =>\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 = {}): FixedSizeDecoder<bigint, 8> =>\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 = {}): FixedSizeCodec<bigint | number, bigint, 8> =>\n combineCodec(getI64Encoder(config), getI64Decoder(config));\n","import { combineCodec, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\n\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getI8Encoder = (): FixedSizeEncoder<number, 1> =>\n numberEncoderFactory({\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 = (): FixedSizeDecoder<number, 1> =>\n numberDecoderFactory({\n get: view => view.getInt8(0),\n name: 'i8',\n size: 1,\n });\n\nexport const getI8Codec = (): FixedSizeCodec<number, number, 1> => combineCodec(getI8Encoder(), getI8Decoder());\n","import {\n combineCodec,\n createDecoder,\n createEncoder,\n Offset,\n VariableSizeCodec,\n VariableSizeDecoder,\n VariableSizeEncoder,\n} from '@solana/codecs-core';\n\nimport { assertNumberIsBetweenForCodec } from './assertions';\n\n/**\n * Encodes short u16 numbers.\n * @see {@link getShortU16Codec} for a more detailed description.\n */\nexport const getShortU16Encoder = (): VariableSizeEncoder<number> =>\n createEncoder({\n getSizeFromValue: (value: number): number => {\n if (value <= 0b01111111) return 1;\n if (value <= 0b0011111111111111) return 2;\n return 3;\n },\n maxSize: 3,\n write: (value: number, bytes: Uint8Array, offset: Offset): Offset => {\n assertNumberIsBetweenForCodec('shortU16', 0, 65535, value);\n const shortU16Bytes = [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 shortU16Bytes[ii] = nextSevenBits;\n if (ii > 0) {\n // Set the continuation bit of the previous slice.\n shortU16Bytes[ii - 1] |= 0b10000000;\n }\n }\n bytes.set(shortU16Bytes, offset);\n return offset + shortU16Bytes.length;\n },\n });\n\n/**\n * Decodes short u16 numbers.\n * @see {@link getShortU16Codec} for a more detailed description.\n */\nexport const getShortU16Decoder = (): VariableSizeDecoder<number> =>\n createDecoder({\n maxSize: 3,\n read: (bytes: Uint8Array, offset): [number, Offset] => {\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 });\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 = (): VariableSizeCodec<number> =>\n combineCodec(getShortU16Encoder(), getShortU16Decoder());\n","import { combineCodec, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU128Encoder = (config: NumberCodecConfig = {}): FixedSizeEncoder<bigint | number, 16> =>\n numberEncoderFactory({\n config,\n name: 'u128',\n range: [0n, 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 = {}): FixedSizeDecoder<bigint, 16> =>\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 = {}): FixedSizeCodec<bigint | number, bigint, 16> =>\n combineCodec(getU128Encoder(config), getU128Decoder(config));\n","import { combineCodec, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU16Encoder = (config: NumberCodecConfig = {}): FixedSizeEncoder<number, 2> =>\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 = {}): FixedSizeDecoder<number, 2> =>\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 = {}): FixedSizeCodec<number, number, 2> =>\n combineCodec(getU16Encoder(config), getU16Decoder(config));\n","import { combineCodec, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU32Encoder = (config: NumberCodecConfig = {}): FixedSizeEncoder<number, 4> =>\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 = {}): FixedSizeDecoder<number, 4> =>\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 = {}): FixedSizeCodec<number, number, 4> =>\n combineCodec(getU32Encoder(config), getU32Decoder(config));\n","import { combineCodec, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\n\nimport { NumberCodecConfig } from './common';\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU64Encoder = (config: NumberCodecConfig = {}): FixedSizeEncoder<bigint | number, 8> =>\n numberEncoderFactory({\n config,\n name: 'u64',\n range: [0n, BigInt('0xffffffffffffffff')],\n set: (view, value, le) => view.setBigUint64(0, BigInt(value), le),\n size: 8,\n });\n\nexport const getU64Decoder = (config: NumberCodecConfig = {}): FixedSizeDecoder<bigint, 8> =>\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 = {}): FixedSizeCodec<bigint | number, bigint, 8> =>\n combineCodec(getU64Encoder(config), getU64Decoder(config));\n","import { combineCodec, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\n\nimport { numberDecoderFactory, numberEncoderFactory } from './utils';\n\nexport const getU8Encoder = (): FixedSizeEncoder<number, 1> =>\n numberEncoderFactory({\n name: 'u8',\n range: [0, Number('0xff')],\n set: (view, value) => view.setUint8(0, value),\n size: 1,\n });\n\nexport const getU8Decoder = (): FixedSizeDecoder<number, 1> =>\n numberDecoderFactory({\n get: view => view.getUint8(0),\n name: 'u8',\n size: 1,\n });\n\nexport const getU8Codec = (): FixedSizeCodec<number, number, 1> => combineCodec(getU8Encoder(), getU8Decoder());\n"]}
|