@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.
Files changed (49) hide show
  1. package/README.md +112 -4
  2. package/dist/index.browser.cjs +104 -116
  3. package/dist/index.browser.cjs.map +1 -1
  4. package/dist/index.browser.js +105 -117
  5. package/dist/index.browser.js.map +1 -1
  6. package/dist/index.native.js +105 -117
  7. package/dist/index.native.js.map +1 -1
  8. package/dist/index.node.cjs +104 -116
  9. package/dist/index.node.cjs.map +1 -1
  10. package/dist/index.node.js +107 -117
  11. package/dist/index.node.js.map +1 -1
  12. package/dist/types/assertions.d.ts +1 -1
  13. package/dist/types/assertions.d.ts.map +1 -0
  14. package/dist/types/common.d.ts +12 -8
  15. package/dist/types/common.d.ts.map +1 -0
  16. package/dist/types/f32.d.ts +5 -5
  17. package/dist/types/f32.d.ts.map +1 -0
  18. package/dist/types/f64.d.ts +5 -5
  19. package/dist/types/f64.d.ts.map +1 -0
  20. package/dist/types/i128.d.ts +5 -5
  21. package/dist/types/i128.d.ts.map +1 -0
  22. package/dist/types/i16.d.ts +5 -5
  23. package/dist/types/i16.d.ts.map +1 -0
  24. package/dist/types/i32.d.ts +5 -5
  25. package/dist/types/i32.d.ts.map +1 -0
  26. package/dist/types/i64.d.ts +5 -5
  27. package/dist/types/i64.d.ts.map +1 -0
  28. package/dist/types/i8.d.ts +4 -5
  29. package/dist/types/i8.d.ts.map +1 -0
  30. package/dist/types/index.d.ts +15 -15
  31. package/dist/types/index.d.ts.map +1 -0
  32. package/dist/types/short-u16.d.ts +4 -8
  33. package/dist/types/short-u16.d.ts.map +1 -0
  34. package/dist/types/u128.d.ts +5 -5
  35. package/dist/types/u128.d.ts.map +1 -0
  36. package/dist/types/u16.d.ts +5 -5
  37. package/dist/types/u16.d.ts.map +1 -0
  38. package/dist/types/u32.d.ts +5 -5
  39. package/dist/types/u32.d.ts.map +1 -0
  40. package/dist/types/u64.d.ts +5 -5
  41. package/dist/types/u64.d.ts.map +1 -0
  42. package/dist/types/u8.d.ts +4 -5
  43. package/dist/types/u8.d.ts.map +1 -0
  44. package/dist/types/utils.d.ts +12 -12
  45. package/dist/types/utils.d.ts.map +1 -0
  46. package/package.json +12 -32
  47. package/dist/index.development.js +0 -412
  48. package/dist/index.development.js.map +0 -1
  49. package/dist/index.production.min.js +0 -51
@@ -1,11 +1,15 @@
1
- import { combineCodec, assertByteArrayIsNotEmptyForCodec, assertByteArrayHasEnoughBytesForCodec } from '@solana/codecs-core';
1
+ import { SolanaError, SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE } from '@solana/errors';
2
+ import { combineCodec, createEncoder, createDecoder, assertByteArrayIsNotEmptyForCodec, assertByteArrayHasEnoughBytesForCodec } from '@solana/codecs-core';
2
3
 
3
4
  // src/assertions.ts
4
5
  function assertNumberIsBetweenForCodec(codecDescription, min, max, value) {
5
6
  if (value < min || value > max) {
6
- throw new Error(
7
- `Codec [${codecDescription}] expected number to be in the range [${min}, ${max}], got ${value}.`
8
- );
7
+ throw new SolanaError(SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE, {
8
+ codecDescription,
9
+ max,
10
+ min,
11
+ value
12
+ });
9
13
  }
10
14
  }
11
15
 
@@ -15,49 +19,33 @@ var Endian = /* @__PURE__ */ ((Endian2) => {
15
19
  Endian2[Endian2["BIG"] = 1] = "BIG";
16
20
  return Endian2;
17
21
  })(Endian || {});
18
- function sharedNumberFactory(input) {
19
- let littleEndian;
20
- let defaultDescription = input.name;
21
- if (input.size > 1) {
22
- littleEndian = !("endian" in input.options) || input.options.endian === 0 /* LITTLE */;
23
- defaultDescription += littleEndian ? "(le)" : "(be)";
24
- }
25
- return {
26
- description: input.options.description ?? defaultDescription,
27
- fixedSize: input.size,
28
- littleEndian,
29
- maxSize: input.size
30
- };
22
+ function isLittleEndian(config) {
23
+ return config?.endian === 1 /* BIG */ ? false : true;
31
24
  }
32
25
  function numberEncoderFactory(input) {
33
- const codecData = sharedNumberFactory(input);
34
- return {
35
- description: codecData.description,
36
- encode(value) {
26
+ return createEncoder({
27
+ fixedSize: input.size,
28
+ write(value, bytes, offset) {
37
29
  if (input.range) {
38
30
  assertNumberIsBetweenForCodec(input.name, input.range[0], input.range[1], value);
39
31
  }
40
32
  const arrayBuffer = new ArrayBuffer(input.size);
41
- input.set(new DataView(arrayBuffer), value, codecData.littleEndian);
42
- return new Uint8Array(arrayBuffer);
43
- },
44
- fixedSize: codecData.fixedSize,
45
- maxSize: codecData.maxSize
46
- };
33
+ input.set(new DataView(arrayBuffer), value, isLittleEndian(input.config));
34
+ bytes.set(new Uint8Array(arrayBuffer), offset);
35
+ return offset + input.size;
36
+ }
37
+ });
47
38
  }
48
39
  function numberDecoderFactory(input) {
49
- const codecData = sharedNumberFactory(input);
50
- return {
51
- decode(bytes, offset = 0) {
52
- assertByteArrayIsNotEmptyForCodec(codecData.description, bytes, offset);
53
- assertByteArrayHasEnoughBytesForCodec(codecData.description, input.size, bytes, offset);
40
+ return createDecoder({
41
+ fixedSize: input.size,
42
+ read(bytes, offset = 0) {
43
+ assertByteArrayIsNotEmptyForCodec(input.name, bytes, offset);
44
+ assertByteArrayHasEnoughBytesForCodec(input.name, input.size, bytes, offset);
54
45
  const view = new DataView(toArrayBuffer(bytes, offset, input.size));
55
- return [input.get(view, codecData.littleEndian), offset + input.size];
56
- },
57
- description: codecData.description,
58
- fixedSize: codecData.fixedSize,
59
- maxSize: codecData.maxSize
60
- };
46
+ return [input.get(view, isLittleEndian(input.config)), offset + input.size];
47
+ }
48
+ });
61
49
  }
62
50
  function toArrayBuffer(bytes, offset, length) {
63
51
  const bytesOffset = bytes.byteOffset + (offset ?? 0);
@@ -66,35 +54,35 @@ function toArrayBuffer(bytes, offset, length) {
66
54
  }
67
55
 
68
56
  // src/f32.ts
69
- var getF32Encoder = (options = {}) => numberEncoderFactory({
57
+ var getF32Encoder = (config = {}) => numberEncoderFactory({
58
+ config,
70
59
  name: "f32",
71
- options,
72
60
  set: (view, value, le) => view.setFloat32(0, value, le),
73
61
  size: 4
74
62
  });
75
- var getF32Decoder = (options = {}) => numberDecoderFactory({
63
+ var getF32Decoder = (config = {}) => numberDecoderFactory({
64
+ config,
76
65
  get: (view, le) => view.getFloat32(0, le),
77
66
  name: "f32",
78
- options,
79
67
  size: 4
80
68
  });
81
- var getF32Codec = (options = {}) => combineCodec(getF32Encoder(options), getF32Decoder(options));
82
- var getF64Encoder = (options = {}) => numberEncoderFactory({
69
+ var getF32Codec = (config = {}) => combineCodec(getF32Encoder(config), getF32Decoder(config));
70
+ var getF64Encoder = (config = {}) => numberEncoderFactory({
71
+ config,
83
72
  name: "f64",
84
- options,
85
73
  set: (view, value, le) => view.setFloat64(0, value, le),
86
74
  size: 8
87
75
  });
88
- var getF64Decoder = (options = {}) => numberDecoderFactory({
76
+ var getF64Decoder = (config = {}) => numberDecoderFactory({
77
+ config,
89
78
  get: (view, le) => view.getFloat64(0, le),
90
79
  name: "f64",
91
- options,
92
80
  size: 8
93
81
  });
94
- var getF64Codec = (options = {}) => combineCodec(getF64Encoder(options), getF64Decoder(options));
95
- var getI128Encoder = (options = {}) => numberEncoderFactory({
82
+ var getF64Codec = (config = {}) => combineCodec(getF64Encoder(config), getF64Decoder(config));
83
+ var getI128Encoder = (config = {}) => numberEncoderFactory({
84
+ config,
96
85
  name: "i128",
97
- options,
98
86
  range: [-BigInt("0x7fffffffffffffffffffffffffffffff") - 1n, BigInt("0x7fffffffffffffffffffffffffffffff")],
99
87
  set: (view, value, le) => {
100
88
  const leftOffset = le ? 8 : 0;
@@ -105,7 +93,8 @@ var getI128Encoder = (options = {}) => numberEncoderFactory({
105
93
  },
106
94
  size: 16
107
95
  });
108
- var getI128Decoder = (options = {}) => numberDecoderFactory({
96
+ var getI128Decoder = (config = {}) => numberDecoderFactory({
97
+ config,
109
98
  get: (view, le) => {
110
99
  const leftOffset = le ? 8 : 0;
111
100
  const rightOffset = le ? 0 : 8;
@@ -114,89 +103,93 @@ var getI128Decoder = (options = {}) => numberDecoderFactory({
114
103
  return (left << 64n) + right;
115
104
  },
116
105
  name: "i128",
117
- options,
118
106
  size: 16
119
107
  });
120
- var getI128Codec = (options = {}) => combineCodec(getI128Encoder(options), getI128Decoder(options));
121
- var getI16Encoder = (options = {}) => numberEncoderFactory({
108
+ var getI128Codec = (config = {}) => combineCodec(getI128Encoder(config), getI128Decoder(config));
109
+ var getI16Encoder = (config = {}) => numberEncoderFactory({
110
+ config,
122
111
  name: "i16",
123
- options,
124
112
  range: [-Number("0x7fff") - 1, Number("0x7fff")],
125
113
  set: (view, value, le) => view.setInt16(0, value, le),
126
114
  size: 2
127
115
  });
128
- var getI16Decoder = (options = {}) => numberDecoderFactory({
116
+ var getI16Decoder = (config = {}) => numberDecoderFactory({
117
+ config,
129
118
  get: (view, le) => view.getInt16(0, le),
130
119
  name: "i16",
131
- options,
132
120
  size: 2
133
121
  });
134
- var getI16Codec = (options = {}) => combineCodec(getI16Encoder(options), getI16Decoder(options));
135
- var getI32Encoder = (options = {}) => numberEncoderFactory({
122
+ var getI16Codec = (config = {}) => combineCodec(getI16Encoder(config), getI16Decoder(config));
123
+ var getI32Encoder = (config = {}) => numberEncoderFactory({
124
+ config,
136
125
  name: "i32",
137
- options,
138
126
  range: [-Number("0x7fffffff") - 1, Number("0x7fffffff")],
139
127
  set: (view, value, le) => view.setInt32(0, value, le),
140
128
  size: 4
141
129
  });
142
- var getI32Decoder = (options = {}) => numberDecoderFactory({
130
+ var getI32Decoder = (config = {}) => numberDecoderFactory({
131
+ config,
143
132
  get: (view, le) => view.getInt32(0, le),
144
133
  name: "i32",
145
- options,
146
134
  size: 4
147
135
  });
148
- var getI32Codec = (options = {}) => combineCodec(getI32Encoder(options), getI32Decoder(options));
149
- var getI64Encoder = (options = {}) => numberEncoderFactory({
136
+ var getI32Codec = (config = {}) => combineCodec(getI32Encoder(config), getI32Decoder(config));
137
+ var getI64Encoder = (config = {}) => numberEncoderFactory({
138
+ config,
150
139
  name: "i64",
151
- options,
152
140
  range: [-BigInt("0x7fffffffffffffff") - 1n, BigInt("0x7fffffffffffffff")],
153
141
  set: (view, value, le) => view.setBigInt64(0, BigInt(value), le),
154
142
  size: 8
155
143
  });
156
- var getI64Decoder = (options = {}) => numberDecoderFactory({
144
+ var getI64Decoder = (config = {}) => numberDecoderFactory({
145
+ config,
157
146
  get: (view, le) => view.getBigInt64(0, le),
158
147
  name: "i64",
159
- options,
160
148
  size: 8
161
149
  });
162
- var getI64Codec = (options = {}) => combineCodec(getI64Encoder(options), getI64Decoder(options));
163
- var getI8Encoder = (options = {}) => numberEncoderFactory({
150
+ var getI64Codec = (config = {}) => combineCodec(getI64Encoder(config), getI64Decoder(config));
151
+ var getI8Encoder = () => numberEncoderFactory({
164
152
  name: "i8",
165
- options,
166
153
  range: [-Number("0x7f") - 1, Number("0x7f")],
167
154
  set: (view, value) => view.setInt8(0, value),
168
155
  size: 1
169
156
  });
170
- var getI8Decoder = (options = {}) => numberDecoderFactory({
157
+ var getI8Decoder = () => numberDecoderFactory({
171
158
  get: (view) => view.getInt8(0),
172
159
  name: "i8",
173
- options,
174
160
  size: 1
175
161
  });
176
- var getI8Codec = (options = {}) => combineCodec(getI8Encoder(options), getI8Decoder(options));
177
- var getShortU16Encoder = (options = {}) => ({
178
- description: options.description ?? "shortU16",
179
- encode: (value) => {
162
+ var getI8Codec = () => combineCodec(getI8Encoder(), getI8Decoder());
163
+ var getShortU16Encoder = () => createEncoder({
164
+ getSizeFromValue: (value) => {
165
+ if (value <= 127)
166
+ return 1;
167
+ if (value <= 16383)
168
+ return 2;
169
+ return 3;
170
+ },
171
+ maxSize: 3,
172
+ write: (value, bytes, offset) => {
180
173
  assertNumberIsBetweenForCodec("shortU16", 0, 65535, value);
181
- const bytes = [0];
174
+ const shortU16Bytes = [0];
182
175
  for (let ii = 0; ; ii += 1) {
183
176
  const alignedValue = value >> ii * 7;
184
177
  if (alignedValue === 0) {
185
178
  break;
186
179
  }
187
180
  const nextSevenBits = 127 & alignedValue;
188
- bytes[ii] = nextSevenBits;
181
+ shortU16Bytes[ii] = nextSevenBits;
189
182
  if (ii > 0) {
190
- bytes[ii - 1] |= 128;
183
+ shortU16Bytes[ii - 1] |= 128;
191
184
  }
192
185
  }
193
- return new Uint8Array(bytes);
194
- },
195
- fixedSize: null,
196
- maxSize: 3
186
+ bytes.set(shortU16Bytes, offset);
187
+ return offset + shortU16Bytes.length;
188
+ }
197
189
  });
198
- var getShortU16Decoder = (options = {}) => ({
199
- decode: (bytes, offset = 0) => {
190
+ var getShortU16Decoder = () => createDecoder({
191
+ maxSize: 3,
192
+ read: (bytes, offset) => {
200
193
  let value = 0;
201
194
  let byteCount = 0;
202
195
  while (++byteCount) {
@@ -209,16 +202,13 @@ var getShortU16Decoder = (options = {}) => ({
209
202
  }
210
203
  }
211
204
  return [value, offset + byteCount];
212
- },
213
- description: options.description ?? "shortU16",
214
- fixedSize: null,
215
- maxSize: 3
205
+ }
216
206
  });
217
- var getShortU16Codec = (options = {}) => combineCodec(getShortU16Encoder(options), getShortU16Decoder(options));
218
- var getU128Encoder = (options = {}) => numberEncoderFactory({
207
+ var getShortU16Codec = () => combineCodec(getShortU16Encoder(), getShortU16Decoder());
208
+ var getU128Encoder = (config = {}) => numberEncoderFactory({
209
+ config,
219
210
  name: "u128",
220
- options,
221
- range: [0, BigInt("0xffffffffffffffffffffffffffffffff")],
211
+ range: [0n, BigInt("0xffffffffffffffffffffffffffffffff")],
222
212
  set: (view, value, le) => {
223
213
  const leftOffset = le ? 8 : 0;
224
214
  const rightOffset = le ? 0 : 8;
@@ -228,7 +218,8 @@ var getU128Encoder = (options = {}) => numberEncoderFactory({
228
218
  },
229
219
  size: 16
230
220
  });
231
- var getU128Decoder = (options = {}) => numberDecoderFactory({
221
+ var getU128Decoder = (config = {}) => numberDecoderFactory({
222
+ config,
232
223
  get: (view, le) => {
233
224
  const leftOffset = le ? 8 : 0;
234
225
  const rightOffset = le ? 0 : 8;
@@ -237,65 +228,64 @@ var getU128Decoder = (options = {}) => numberDecoderFactory({
237
228
  return (left << 64n) + right;
238
229
  },
239
230
  name: "u128",
240
- options,
241
231
  size: 16
242
232
  });
243
- var getU128Codec = (options = {}) => combineCodec(getU128Encoder(options), getU128Decoder(options));
244
- var getU16Encoder = (options = {}) => numberEncoderFactory({
233
+ var getU128Codec = (config = {}) => combineCodec(getU128Encoder(config), getU128Decoder(config));
234
+ var getU16Encoder = (config = {}) => numberEncoderFactory({
235
+ config,
245
236
  name: "u16",
246
- options,
247
237
  range: [0, Number("0xffff")],
248
238
  set: (view, value, le) => view.setUint16(0, value, le),
249
239
  size: 2
250
240
  });
251
- var getU16Decoder = (options = {}) => numberDecoderFactory({
241
+ var getU16Decoder = (config = {}) => numberDecoderFactory({
242
+ config,
252
243
  get: (view, le) => view.getUint16(0, le),
253
244
  name: "u16",
254
- options,
255
245
  size: 2
256
246
  });
257
- var getU16Codec = (options = {}) => combineCodec(getU16Encoder(options), getU16Decoder(options));
258
- var getU32Encoder = (options = {}) => numberEncoderFactory({
247
+ var getU16Codec = (config = {}) => combineCodec(getU16Encoder(config), getU16Decoder(config));
248
+ var getU32Encoder = (config = {}) => numberEncoderFactory({
249
+ config,
259
250
  name: "u32",
260
- options,
261
251
  range: [0, Number("0xffffffff")],
262
252
  set: (view, value, le) => view.setUint32(0, value, le),
263
253
  size: 4
264
254
  });
265
- var getU32Decoder = (options = {}) => numberDecoderFactory({
255
+ var getU32Decoder = (config = {}) => numberDecoderFactory({
256
+ config,
266
257
  get: (view, le) => view.getUint32(0, le),
267
258
  name: "u32",
268
- options,
269
259
  size: 4
270
260
  });
271
- var getU32Codec = (options = {}) => combineCodec(getU32Encoder(options), getU32Decoder(options));
272
- var getU64Encoder = (options = {}) => numberEncoderFactory({
261
+ var getU32Codec = (config = {}) => combineCodec(getU32Encoder(config), getU32Decoder(config));
262
+ var getU64Encoder = (config = {}) => numberEncoderFactory({
263
+ config,
273
264
  name: "u64",
274
- options,
275
- range: [0, BigInt("0xffffffffffffffff")],
265
+ range: [0n, BigInt("0xffffffffffffffff")],
276
266
  set: (view, value, le) => view.setBigUint64(0, BigInt(value), le),
277
267
  size: 8
278
268
  });
279
- var getU64Decoder = (options = {}) => numberDecoderFactory({
269
+ var getU64Decoder = (config = {}) => numberDecoderFactory({
270
+ config,
280
271
  get: (view, le) => view.getBigUint64(0, le),
281
272
  name: "u64",
282
- options,
283
273
  size: 8
284
274
  });
285
- var getU64Codec = (options = {}) => combineCodec(getU64Encoder(options), getU64Decoder(options));
286
- var getU8Encoder = (options = {}) => numberEncoderFactory({
275
+ var getU64Codec = (config = {}) => combineCodec(getU64Encoder(config), getU64Decoder(config));
276
+ var getU8Encoder = () => numberEncoderFactory({
287
277
  name: "u8",
288
- options,
289
278
  range: [0, Number("0xff")],
290
279
  set: (view, value) => view.setUint8(0, value),
291
280
  size: 1
292
281
  });
293
- var getU8Decoder = (options = {}) => numberDecoderFactory({
282
+ var getU8Decoder = () => numberDecoderFactory({
294
283
  get: (view) => view.getUint8(0),
295
284
  name: "u8",
296
- options,
297
285
  size: 1
298
286
  });
299
- var getU8Codec = (options = {}) => combineCodec(getU8Encoder(options), getU8Decoder(options));
287
+ var getU8Codec = () => combineCodec(getU8Encoder(), getU8Decoder());
300
288
 
301
289
  export { Endian, assertNumberIsBetweenForCodec, getF32Codec, getF32Decoder, getF32Encoder, getF64Codec, getF64Decoder, getF64Encoder, getI128Codec, getI128Decoder, getI128Encoder, getI16Codec, getI16Decoder, getI16Encoder, getI32Codec, getI32Decoder, getI32Encoder, getI64Codec, getI64Decoder, getI64Encoder, getI8Codec, getI8Decoder, getI8Encoder, getShortU16Codec, getShortU16Decoder, getShortU16Encoder, getU128Codec, getU128Decoder, getU128Encoder, getU16Codec, getU16Decoder, getU16Encoder, getU32Codec, getU32Decoder, getU32Encoder, getU64Codec, getU64Decoder, getU64Encoder, getU8Codec, getU8Decoder, getU8Encoder };
290
+ //# sourceMappingURL=out.js.map
291
+ //# sourceMappingURL=index.node.js.map
@@ -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":"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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 { 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"]}
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Asserts that a given number is between a given range.
3
3
  */
4
- export declare function assertNumberIsBetweenForCodec(codecDescription: string, min: number | bigint, max: number | bigint, value: number | bigint): void;
4
+ export declare function assertNumberIsBetweenForCodec(codecDescription: string, min: bigint | number, max: bigint | number, value: bigint | number): void;
5
5
  //# sourceMappingURL=assertions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../src/assertions.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,6BAA6B,CACzC,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE,MAAM,GAAG,MAAM,EACpB,GAAG,EAAE,MAAM,GAAG,MAAM,EACpB,KAAK,EAAE,MAAM,GAAG,MAAM,QAUzB"}
@@ -1,14 +1,18 @@
1
- import { BaseCodecOptions, Codec, Decoder, Encoder } from '@solana/codecs-core';
1
+ import { Codec, Decoder, Encoder, FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';
2
2
  /** Defines a encoder for numbers and bigints. */
3
- export type NumberEncoder = Encoder<number> | Encoder<number | bigint>;
3
+ export type NumberEncoder = Encoder<bigint | number> | Encoder<number>;
4
+ /** Defines a fixed-size encoder for numbers and bigints. */
5
+ export type FixedSizeNumberEncoder<TSize extends number = number> = FixedSizeEncoder<bigint | number, TSize> | FixedSizeEncoder<number, TSize>;
4
6
  /** Defines a decoder for numbers and bigints. */
5
- export type NumberDecoder = Decoder<number> | Decoder<bigint>;
7
+ export type NumberDecoder = Decoder<bigint> | Decoder<number>;
8
+ /** Defines a fixed-size decoder for numbers and bigints. */
9
+ export type FixedSizeNumberDecoder<TSize extends number = number> = FixedSizeDecoder<bigint, TSize> | FixedSizeDecoder<number, TSize>;
6
10
  /** Defines a codec for numbers and bigints. */
7
- export type NumberCodec = Codec<number> | Codec<number | bigint, bigint>;
8
- /** Defines the options for u8 and i8 codecs. */
9
- export type SingleByteNumberCodecOptions = BaseCodecOptions;
10
- /** Defines the options for number codecs that use more than one byte. */
11
- export type NumberCodecOptions = BaseCodecOptions & {
11
+ export type NumberCodec = Codec<bigint | number, bigint> | Codec<number>;
12
+ /** Defines a fixed-size codec for numbers and bigints. */
13
+ export type FixedSizeNumberCodec<TSize extends number = number> = FixedSizeCodec<bigint | number, bigint, TSize> | FixedSizeCodec<number, number, TSize>;
14
+ /** Defines the config for number codecs that use more than one byte. */
15
+ export type NumberCodecConfig = {
12
16
  /**
13
17
  * Whether the serializer should use little-endian or big-endian encoding.
14
18
  * @defaultValue `Endian.LITTLE`
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAElH,iDAAiD;AACjD,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAEvE,4DAA4D;AAC5D,MAAM,MAAM,sBAAsB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IAC1D,gBAAgB,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,CAAC,GACxC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEtC,iDAAiD;AACjD,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9D,4DAA4D;AAC5D,MAAM,MAAM,sBAAsB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IAC1D,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,GAC/B,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEtC,+CAA+C;AAC/C,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAEzE,0DAA0D;AAC1D,MAAM,MAAM,oBAAoB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IACxD,cAAc,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,GAC9C,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAE5C,wEAAwE;AACxE,MAAM,MAAM,iBAAiB,GAAG;IAC5B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qDAAqD;AACrD,oBAAY,MAAM;IACd,MAAM,IAAA;IACN,GAAG,IAAA;CACN"}
@@ -1,6 +1,6 @@
1
- import { Codec, Decoder, Encoder } from '@solana/codecs-core';
2
- import { NumberCodecOptions } from './common';
3
- export declare const getF32Encoder: (options?: NumberCodecOptions) => Encoder<number>;
4
- export declare const getF32Decoder: (options?: NumberCodecOptions) => Decoder<number>;
5
- export declare const getF32Codec: (options?: NumberCodecOptions) => Codec<number>;
1
+ import { FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';
2
+ import { NumberCodecConfig } from './common.js';
3
+ export declare const getF32Encoder: (config?: NumberCodecConfig) => FixedSizeEncoder<number, 4>;
4
+ export declare const getF32Decoder: (config?: NumberCodecConfig) => FixedSizeDecoder<number, 4>;
5
+ export declare const getF32Codec: (config?: NumberCodecConfig) => FixedSizeCodec<number, number, 4>;
6
6
  //# sourceMappingURL=f32.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"f32.d.ts","sourceRoot":"","sources":["../../src/f32.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG7C,eAAO,MAAM,aAAa,YAAY,iBAAiB,KAAQ,iBAAiB,MAAM,EAAE,CAAC,CAMnF,CAAC;AAEP,eAAO,MAAM,aAAa,YAAY,iBAAiB,KAAQ,iBAAiB,MAAM,EAAE,CAAC,CAMnF,CAAC;AAEP,eAAO,MAAM,WAAW,YAAY,iBAAiB,KAAQ,eAAe,MAAM,EAAE,MAAM,EAAE,CAAC,CAC/B,CAAC"}
@@ -1,6 +1,6 @@
1
- import { Codec, Decoder, Encoder } from '@solana/codecs-core';
2
- import { NumberCodecOptions } from './common';
3
- export declare const getF64Encoder: (options?: NumberCodecOptions) => Encoder<number>;
4
- export declare const getF64Decoder: (options?: NumberCodecOptions) => Decoder<number>;
5
- export declare const getF64Codec: (options?: NumberCodecOptions) => Codec<number>;
1
+ import { FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';
2
+ import { NumberCodecConfig } from './common.js';
3
+ export declare const getF64Encoder: (config?: NumberCodecConfig) => FixedSizeEncoder<number, 8>;
4
+ export declare const getF64Decoder: (config?: NumberCodecConfig) => FixedSizeDecoder<number, 8>;
5
+ export declare const getF64Codec: (config?: NumberCodecConfig) => FixedSizeCodec<number, number, 8>;
6
6
  //# sourceMappingURL=f64.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"f64.d.ts","sourceRoot":"","sources":["../../src/f64.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG7C,eAAO,MAAM,aAAa,YAAY,iBAAiB,KAAQ,iBAAiB,MAAM,EAAE,CAAC,CAMnF,CAAC;AAEP,eAAO,MAAM,aAAa,YAAY,iBAAiB,KAAQ,iBAAiB,MAAM,EAAE,CAAC,CAMnF,CAAC;AAEP,eAAO,MAAM,WAAW,YAAY,iBAAiB,KAAQ,eAAe,MAAM,EAAE,MAAM,EAAE,CAAC,CAC/B,CAAC"}
@@ -1,6 +1,6 @@
1
- import { Codec, Decoder, Encoder } from '@solana/codecs-core';
2
- import { NumberCodecOptions } from './common';
3
- export declare const getI128Encoder: (options?: NumberCodecOptions) => Encoder<number | bigint>;
4
- export declare const getI128Decoder: (options?: NumberCodecOptions) => Decoder<bigint>;
5
- export declare const getI128Codec: (options?: NumberCodecOptions) => Codec<number | bigint, bigint>;
1
+ import { FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';
2
+ import { NumberCodecConfig } from './common.js';
3
+ export declare const getI128Encoder: (config?: NumberCodecConfig) => FixedSizeEncoder<bigint | number, 16>;
4
+ export declare const getI128Decoder: (config?: NumberCodecConfig) => FixedSizeDecoder<bigint, 16>;
5
+ export declare const getI128Codec: (config?: NumberCodecConfig) => FixedSizeCodec<bigint | number, bigint, 16>;
6
6
  //# sourceMappingURL=i128.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i128.d.ts","sourceRoot":"","sources":["../../src/i128.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG7C,eAAO,MAAM,cAAc,YAAY,iBAAiB,KAAQ,iBAAiB,MAAM,GAAG,MAAM,EAAE,EAAE,CAa9F,CAAC;AAEP,eAAO,MAAM,cAAc,YAAY,iBAAiB,KAAQ,iBAAiB,MAAM,EAAE,EAAE,CAYrF,CAAC;AAEP,eAAO,MAAM,YAAY,YAAY,iBAAiB,KAAQ,eAAe,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,CACxC,CAAC"}