solidity-codecs 0.0.1-beta.2 → 0.0.1-beta.3

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 (41) hide show
  1. package/dist/codecs/Bytes.d.ts +5 -5
  2. package/dist/codecs/Fixed.d.ts +3 -0
  3. package/dist/codecs/{int.d.ts → Int.d.ts} +1 -1
  4. package/dist/codecs/Struct.d.ts +2 -25
  5. package/dist/codecs/Tuple.d.ts +2 -25
  6. package/dist/codecs/Uint.d.ts +6 -0
  7. package/dist/codecs/Vector.d.ts +6 -14
  8. package/dist/codecs/index.d.ts +7 -8
  9. package/dist/solidity-codecs.cjs.development.js +159 -166
  10. package/dist/solidity-codecs.cjs.development.js.map +3 -3
  11. package/dist/solidity-codecs.cjs.production.min.js +1 -1
  12. package/dist/solidity-codecs.cjs.production.min.js.map +3 -3
  13. package/dist/solidity-codecs.js +159 -166
  14. package/dist/solidity-codecs.js.map +3 -3
  15. package/dist/solidity-codecs.mjs +159 -166
  16. package/dist/solidity-codecs.mjs.map +3 -3
  17. package/dist/types.d.ts +4 -4
  18. package/dist/utils.d.ts +6 -1
  19. package/package.json +1 -1
  20. package/dist/codecs/Enum.d.ts +0 -57
  21. package/dist/codecs/Option.d.ts +0 -6
  22. package/dist/codecs/Result.d.ts +0 -22
  23. package/dist/codecs/bytes.d.ts +0 -6
  24. package/dist/codecs/call.d.ts +0 -6
  25. package/dist/codecs/compact.d.ts +0 -2
  26. package/dist/codecs/fixed-width-ints.d.ts +0 -11
  27. package/dist/codecs/fixed.d.ts +0 -3
  28. package/dist/codecs/struct.d.ts +0 -6
  29. package/dist/codecs/tuple.d.ts +0 -6
  30. package/dist/codecs/uint.d.ts +0 -2
  31. package/dist/codecs/vector.d.ts +0 -6
  32. package/dist/codecs/void.d.ts +0 -2
  33. package/dist/scale-ts.cjs.development.js +0 -427
  34. package/dist/scale-ts.cjs.development.js.map +0 -7
  35. package/dist/scale-ts.cjs.production.min.js +0 -318
  36. package/dist/scale-ts.cjs.production.min.js.map +0 -7
  37. package/dist/scale-ts.es2017.js +0 -403
  38. package/dist/scale-ts.es2017.js.map +0 -7
  39. package/dist/scale-ts.es2019.mjs +0 -348
  40. package/dist/scale-ts.es2019.mjs.map +0 -7
  41. package/dist/test-utils.d.ts +0 -5
@@ -1,6 +1,6 @@
1
- import { Encoder, Decoder, Codec } from "../types"
1
+ import { Encoder, Decoder, Codec } from "../types";
2
2
  export declare const Bytes: {
3
- (nBytes: number): Codec<Uint8Array>
4
- enc: (nBytes: number) => Encoder<Uint8Array>
5
- dec: (nBytes: number) => Decoder<Uint8Array>
6
- }
3
+ (nBytes: number): Codec<Uint8Array>;
4
+ enc: (nBytes: number) => Encoder<Uint8Array>;
5
+ dec: (nBytes: number) => Decoder<Uint8Array>;
6
+ };
@@ -0,0 +1,3 @@
1
+ import { Codec, Decimal } from "../types";
2
+ export declare const Fixed: (nBits: number, decimals: number) => Codec<Decimal>;
3
+ export declare const Ufixed: (nBits: number, decimals: number) => Codec<Decimal>;
@@ -1,5 +1,5 @@
1
1
  import { Encoder, Codec } from "../types";
2
- export declare const int: {
2
+ export declare const Int: {
3
3
  (nBits: number): Codec<bigint>;
4
4
  enc(nBits: number): Encoder<bigint>;
5
5
  dec(nBits: number): import("../types").Decoder<bigint>;
@@ -1,25 +1,2 @@
1
- import { Codec, Decoder, Encoder, StringRecord } from "../types"
2
- export declare const Struct: {
3
- <
4
- A extends StringRecord<Codec<any>>,
5
- OT extends { [K in keyof A]: A[K] extends Codec<infer D> ? D : unknown },
6
- >(
7
- codecs: A,
8
- ): Codec<OT>
9
- enc: <
10
- A_1 extends StringRecord<Encoder<any>>,
11
- OT_1 extends {
12
- [K_1 in keyof A_1]: A_1[K_1] extends Encoder<infer D_1> ? D_1 : unknown
13
- },
14
- >(
15
- encoders: A_1,
16
- ) => Encoder<OT_1>
17
- dec: <
18
- A_2 extends StringRecord<Decoder<any>>,
19
- OT_2 extends {
20
- [K_2 in keyof A_2]: A_2[K_2] extends Decoder<infer D_2> ? D_2 : unknown
21
- },
22
- >(
23
- decoders: A_2,
24
- ) => Decoder<OT_2>
25
- }
1
+ import { Codec, StringRecord } from "../types";
2
+ export declare const Struct: <A extends StringRecord<Codec<any>>, OT extends { [K in keyof A]: A[K] extends Codec<infer D> ? D : unknown; }>(codecs: A) => Codec<OT>;
@@ -1,25 +1,2 @@
1
- import { Codec, Decoder, Encoder } from "../types"
2
- export declare const Tuple: {
3
- <
4
- A extends Codec<any>[],
5
- OT extends { [K in keyof A]: A[K] extends Codec<infer D> ? D : unknown },
6
- >(
7
- ...codecs: A
8
- ): Codec<[...OT]>
9
- enc: <
10
- A_1 extends Encoder<any>[],
11
- OT_1 extends {
12
- [K_1 in keyof A_1]: A_1[K_1] extends Encoder<infer D_1> ? D_1 : unknown
13
- },
14
- >(
15
- ...encoders: A_1
16
- ) => Encoder<[...OT_1]>
17
- dec: <
18
- A_2 extends Decoder<any>[],
19
- OT_2 extends {
20
- [K_2 in keyof A_2]: A_2[K_2] extends Decoder<infer D_2> ? D_2 : unknown
21
- },
22
- >(
23
- ...decoders: A_2
24
- ) => Decoder<[...OT_2]>
25
- }
1
+ import { Codec } from "../types";
2
+ export declare const Tuple: <A extends Codec<any>[], OT extends { [K in keyof A]: A[K] extends Codec<infer D> ? D : unknown; }>(...codecs: A) => Codec<[...OT]>;
@@ -0,0 +1,6 @@
1
+ import { Codec } from "../types";
2
+ export declare const Uint: {
3
+ (nBits: number): Codec<bigint>;
4
+ enc(nBits: number): import("../types").Encoder<bigint>;
5
+ dec(nBits: number): import("../types").Decoder<bigint>;
6
+ };
@@ -1,14 +1,6 @@
1
- import { Codec, Decoder, Encoder } from "../types"
2
- declare function VectorDec<T>(
3
- getter: Decoder<T>,
4
- size?: number,
5
- ): Decoder<Array<T>>
6
- export declare function Vector<T>(
7
- inner: Codec<T>,
8
- size?: number,
9
- ): Codec<Array<T>>
10
- export declare namespace Vector {
11
- var enc: <T>(inner: Encoder<T>, size?: number | undefined) => Encoder<T[]>
12
- var dec: typeof VectorDec
13
- }
14
- export {}
1
+ import { Codec, Decoder, Encoder } from "../types";
2
+ export declare const Vector: {
3
+ <T>(inner: Codec<T>, size?: number | undefined): Codec<T[]>;
4
+ enc: <T_1>(inner: Encoder<T_1>, size?: number | undefined) => Encoder<T_1[]>;
5
+ dec: <T_2>(getter: Decoder<T_2>, size?: number | undefined) => Decoder<T_2[]>;
6
+ };
@@ -1,10 +1,9 @@
1
1
  export { bool } from "./bool";
2
2
  export { str } from "./str";
3
- export { bytes } from "./bytes";
4
- export { call } from "./call";
5
- export { fixed, ufixed } from "./fixed";
6
- export { int } from "./int";
7
- export { struct } from "./struct";
8
- export { tuple } from "./tuple";
9
- export { uint } from "./uint";
10
- export { vector } from "./vector";
3
+ export { Bytes } from "./Bytes";
4
+ export { Fixed, Ufixed } from "./Fixed";
5
+ export { Int } from "./Int";
6
+ export { Struct } from "./Struct";
7
+ export { Tuple } from "./Tuple";
8
+ export { Uint } from "./Uint";
9
+ export { Vector } from "./Vector";
@@ -24,21 +24,21 @@ var __publicField = (obj, key, value) => {
24
24
  // src/index.ts
25
25
  var src_exports = {};
26
26
  __export(src_exports, {
27
+ Bytes: () => Bytes,
28
+ Fixed: () => Fixed,
29
+ Int: () => Int,
30
+ Struct: () => Struct,
31
+ Tuple: () => Tuple,
32
+ Ufixed: () => Ufixed,
33
+ Uint: () => Uint,
34
+ Vector: () => Vector,
27
35
  bool: () => bool,
28
- bytes: () => bytes,
29
- call: () => call,
30
36
  createCodec: () => createCodec,
37
+ dyn: () => dyn,
31
38
  enhanceCodec: () => enhanceCodec,
32
39
  enhanceDecoder: () => enhanceDecoder,
33
40
  enhanceEncoder: () => enhanceEncoder,
34
- fixed: () => fixed,
35
- int: () => int,
36
- str: () => str,
37
- struct: () => struct,
38
- tuple: () => tuple,
39
- ufixed: () => ufixed,
40
- uint: () => uint,
41
- vector: () => vector
41
+ str: () => str
42
42
  });
43
43
  module.exports = __toCommonJS(src_exports);
44
44
 
@@ -49,9 +49,14 @@ var createCodec = (encoder, decoder) => {
49
49
  result.dec = decoder;
50
50
  return result;
51
51
  };
52
- var enhanceEncoder = (encoder, mapper) => (value) => encoder(mapper(value));
53
- var enhanceDecoder = (decoder, mapper) => (value) => mapper(decoder(value));
54
- var enhanceCodec = ([encoder, decoder], toFrom, fromTo) => createCodec(enhanceEncoder(encoder, toFrom), enhanceDecoder(decoder, fromTo));
52
+ var dyn = (input, output) => {
53
+ if (input.dyn)
54
+ output.dyn = true;
55
+ return output;
56
+ };
57
+ var enhanceEncoder = (encoder, mapper) => dyn(encoder, (value) => encoder(mapper(value)));
58
+ var enhanceDecoder = (decoder, mapper) => dyn(decoder, (value) => mapper(decoder(value)));
59
+ var enhanceCodec = (codec, toFrom, fromTo) => dyn(codec, createCodec(enhanceEncoder(codec[0], toFrom), enhanceDecoder(codec[1], fromTo)));
55
60
 
56
61
  // src/internal/toInternalBytes.ts
57
62
  var HEX_MAP = {
@@ -82,16 +87,16 @@ function fromHex(hexString) {
82
87
  const isOdd = hexString.length % 2;
83
88
  const base = (hexString[1] === "x" ? 2 : 0) + isOdd;
84
89
  const nBytes = (hexString.length - base) / 2 + isOdd;
85
- const bytes2 = new Uint8Array(nBytes);
90
+ const bytes = new Uint8Array(nBytes);
86
91
  if (isOdd)
87
- bytes2[0] = 0 | HEX_MAP[hexString[2]];
92
+ bytes[0] = 0 | HEX_MAP[hexString[2]];
88
93
  for (let i = 0; i < nBytes; ) {
89
94
  const idx = base + i * 2;
90
95
  const a = HEX_MAP[hexString[idx]];
91
96
  const b = HEX_MAP[hexString[idx + 1]];
92
- bytes2[isOdd + i++] = a << 4 | b;
97
+ bytes[isOdd + i++] = a << 4 | b;
93
98
  }
94
- return bytes2;
99
+ return bytes;
95
100
  }
96
101
  var InternalUint8Array = class extends Uint8Array {
97
102
  constructor(buffer) {
@@ -118,64 +123,45 @@ var mergeUint8 = (...inputs) => {
118
123
  return result;
119
124
  };
120
125
 
121
- // src/internal/mapObject.ts
122
- function mapObject(input, mapper) {
123
- return Object.fromEntries(Object.entries(input).map(([key, value]) => [key, mapper(value, key)]));
124
- }
125
-
126
- // src/codecs/uint.ts
127
- var encode = (nBytes) => {
128
- const n64 = nBytes / 8 | 0;
129
- const n16 = nBytes % 8 / 2 | 0;
130
- const isOdd = nBytes % 2;
131
- return (input) => {
126
+ // src/codecs/Uint.ts
127
+ var getCodec = (nBytes) => {
128
+ const n64 = Math.ceil(nBytes / 8);
129
+ return createCodec((input) => {
132
130
  const result = new Uint8Array(32);
133
131
  const dv = new DataView(result.buffer);
134
- let idx = 32;
135
- if (isOdd) {
136
- dv.setUint8(--idx, Number(input & 255n));
137
- input >>= 8n;
138
- }
139
- for (let i = 0; i < n16; i++) {
140
- idx -= 2;
141
- dv.setUint16(idx, Number(input & 65535n));
142
- input >>= 16n;
143
- }
144
- const idxLimit = idx - n64 * 8;
145
- for (idx -= 8; idx >= idxLimit; idx -= 8) {
132
+ const idxLimit = 32 - n64 * 8;
133
+ for (let idx = 24; idx >= idxLimit; idx -= 8) {
146
134
  dv.setBigUint64(idx, input);
147
135
  input >>= 64n;
148
136
  }
149
137
  return result;
150
- };
151
- };
152
- var decode = (nBytes) => {
153
- const n64 = Math.ceil(nBytes / 8);
154
- return toInternalBytes((bytes2) => {
138
+ }, toInternalBytes((bytes) => {
155
139
  let result = 0n;
156
- const nextBlock = bytes2.i + 32;
157
- for (let idx = bytes2.i + (32 - n64 * 8); idx < nextBlock; idx += 8)
158
- result = result << 64n | bytes2.v.getBigUint64(idx);
159
- bytes2.i = nextBlock;
140
+ const nextBlock = bytes.i + 32;
141
+ for (let idx = bytes.i + (32 - n64 * 8); idx < nextBlock; idx += 8)
142
+ result = result << 64n | bytes.v.getBigUint64(idx);
143
+ bytes.i = nextBlock;
160
144
  return result;
161
- });
145
+ }));
162
146
  };
163
147
  var cache = /* @__PURE__ */ new Map();
164
- var uint = (nBits) => {
148
+ var Uint = (nBits) => {
165
149
  let cached = cache.get(nBits);
166
150
  if (cached)
167
151
  return cached;
168
152
  const nBytes = nBits / 8;
169
- cached = createCodec(encode(nBytes), decode(nBytes));
153
+ cached = getCodec(nBytes);
170
154
  cache.set(nBits, cached);
171
155
  return cached;
172
156
  };
157
+ Uint.enc = (nBits) => Uint(nBits).enc;
158
+ Uint.dec = (nBits) => Uint(nBits).dec;
173
159
 
174
160
  // src/codecs/bool.ts
175
- var bool = enhanceCodec(uint(8), (value) => value ? 1n : 0n, Boolean);
161
+ var bool = enhanceCodec(Uint(8), (value) => value ? 1n : 0n, Boolean);
176
162
 
177
163
  // src/codecs/str.ts
178
- var uint256 = uint(256);
164
+ var uint256 = Uint(256);
179
165
  var textEncoder = new TextEncoder();
180
166
  var strEnc = (str2) => {
181
167
  const val = textEncoder.encode(str2);
@@ -187,82 +173,38 @@ var strEnc = (str2) => {
187
173
  }
188
174
  return mergeUint8(...args);
189
175
  };
190
- strEnc.din = true;
176
+ strEnc.dyn = true;
191
177
  var textDecoder = new TextDecoder();
192
- var strDec = toInternalBytes((bytes2) => {
193
- let nElements = Number(uint256.dec(bytes2));
194
- const dv = new DataView(bytes2.buffer, bytes2.i, nElements);
178
+ var strDec = toInternalBytes((bytes) => {
179
+ let nElements = Number(uint256.dec(bytes));
180
+ const dv = new DataView(bytes.buffer, bytes.i, nElements);
195
181
  const extra = nElements % 32;
196
182
  const padding = extra && 32 - extra;
197
- bytes2.i += nElements + padding;
183
+ bytes.i += nElements + padding;
198
184
  return textDecoder.decode(dv);
199
185
  });
200
- strDec.din = true;
186
+ strDec.dyn = true;
201
187
  var str = createCodec(strEnc, strDec);
202
- str.din = true;
188
+ str.dyn = true;
203
189
 
204
- // src/codecs/bytes.ts
205
- var bytesEnc = (nBytes) => (bytes2) => {
206
- if (bytes2.length === 32)
207
- return bytes2;
190
+ // src/codecs/Bytes.ts
191
+ var bytesEnc = (nBytes) => (bytes) => {
192
+ if (bytes.length === 32)
193
+ return bytes;
208
194
  const result = new Uint8Array(32);
209
- result.set(bytes2.length === nBytes ? bytes2 : bytes2.slice(0, nBytes));
195
+ result.set(bytes.length === nBytes ? bytes : bytes.slice(0, nBytes));
210
196
  return result;
211
197
  };
212
- var bytesDec = (nBytes) => toInternalBytes((bytes2) => {
213
- const result = new Uint8Array(bytes2.buffer, bytes2.i, nBytes);
214
- bytes2.i += 32;
198
+ var bytesDec = (nBytes) => toInternalBytes((bytes) => {
199
+ const result = new Uint8Array(bytes.buffer, bytes.i, nBytes);
200
+ bytes.i += 32;
215
201
  return result;
216
202
  });
217
- var bytes = (nBytes) => createCodec(bytesEnc(nBytes), bytesDec(nBytes));
218
- bytes.enc = bytesEnc;
219
- bytes.dec = bytesDec;
203
+ var Bytes = (nBytes) => createCodec(bytesEnc(nBytes), bytesDec(nBytes));
204
+ Bytes.enc = bytesEnc;
205
+ Bytes.dec = bytesDec;
220
206
 
221
- // src/codecs/call.ts
222
- var uint2562 = uint(256);
223
- var callEnc = (...encoders) => (values) => {
224
- const mapped = values.map((value, idx) => encoders[idx](value));
225
- const resultArray = new Array(encoders.length);
226
- const dinamics = [];
227
- let len = 0n;
228
- for (let i = 0; i < encoders.length; i++) {
229
- if (encoders[i].din) {
230
- dinamics.push(i);
231
- len += 32n;
232
- } else {
233
- resultArray[i] = mapped[i];
234
- len += BigInt(mapped[i].length);
235
- }
236
- }
237
- dinamics.forEach((idx) => {
238
- resultArray[idx] = uint2562.enc(len);
239
- const data = mapped[idx];
240
- resultArray.push(data);
241
- len += BigInt(data.length);
242
- });
243
- return mergeUint8(...resultArray);
244
- };
245
- var callDec = (...decoders) => toInternalBytes((bytes2) => {
246
- const result = new Array(decoders.length);
247
- let start = bytes2.i;
248
- for (let i = 0; i < decoders.length; i++) {
249
- if (decoders[i].din) {
250
- const offset = Number(uint2562.dec(bytes2));
251
- const current = bytes2.i;
252
- bytes2.i = start + offset;
253
- result[i] = decoders[i](bytes2);
254
- bytes2.i = current;
255
- } else {
256
- result[i] = decoders[i](bytes2);
257
- }
258
- }
259
- return result;
260
- });
261
- var call = (...codecs) => createCodec(callEnc(...codecs.map(([encoder]) => encoder)), callDec(...codecs.map(([, decoder]) => decoder)));
262
- call.enc = callEnc;
263
- call.dec = callDec;
264
-
265
- // src/codecs/int.ts
207
+ // src/codecs/Int.ts
266
208
  var signGetters = {
267
209
  "1": "getInt8",
268
210
  "2": "getInt16",
@@ -283,7 +225,7 @@ var usignSetters = {
283
225
  "2": "setUint16",
284
226
  "8": "setBigUint64"
285
227
  };
286
- var getCodec = (nBytes) => {
228
+ var getCodec2 = (nBytes) => {
287
229
  const n64 = nBytes / 8 | 0;
288
230
  const n16 = nBytes % 8 / 2 | 0;
289
231
  const sequence = [
@@ -295,47 +237,51 @@ var getCodec = (nBytes) => {
295
237
  const enc = (input) => {
296
238
  const result = new Uint8Array(32);
297
239
  const dv = new DataView(result.buffer);
240
+ if (input < 0n) {
241
+ for (let i = 0; i < 32 - nBytes; i += 8)
242
+ dv.setBigInt64(i, -1n);
243
+ }
298
244
  let idx = 32;
299
245
  for (let i = sequence.length - 1; i > 0; i--) {
300
- const [bytes3, shift, fn2] = sequence[i];
301
- idx -= bytes3;
302
- dv[usignSetters[bytes3]](idx, fn2(input));
246
+ const [bytes2, shift, fn2] = sequence[i];
247
+ idx -= bytes2;
248
+ dv[usignSetters[bytes2]](idx, fn2(input));
303
249
  input >>= shift;
304
250
  }
305
- const [bytes2, , fn] = sequence[0];
306
- idx -= bytes2;
307
- dv[signSetters[bytes2]](idx, fn(input));
251
+ const [bytes, , fn] = sequence[0];
252
+ idx -= bytes;
253
+ dv[signSetters[bytes]](idx, fn(input));
308
254
  return result;
309
255
  };
310
- const dec = toInternalBytes((bytes2) => {
311
- let idx = bytes2.i + 32 - nBytes;
256
+ const dec = toInternalBytes((bytes) => {
257
+ let idx = bytes.i + 32 - nBytes;
312
258
  const bits = sequence[0][0];
313
- let result = BigInt(bytes2.v[signGetters[bits]](idx));
259
+ let result = BigInt(bytes.v[signGetters[bits]](idx));
314
260
  idx += bits;
315
261
  for (let i = 1; i < sequence.length; i++) {
316
262
  const [bits2, shift] = sequence[i];
317
- result = result << shift | BigInt(bytes2.v[usignGetters[bits2]](idx));
263
+ result = result << shift | BigInt(bytes.v[usignGetters[bits2]](idx));
318
264
  idx += bits2;
319
265
  }
320
- bytes2.i += 32;
266
+ bytes.i += 32;
321
267
  return result;
322
268
  });
323
269
  return createCodec(enc, dec);
324
270
  };
325
271
  var cache2 = /* @__PURE__ */ new Map();
326
- var int = (nBits) => {
272
+ var Int = (nBits) => {
327
273
  let cached = cache2.get(nBits);
328
274
  if (cached)
329
275
  return cached;
330
276
  const nBytes = nBits / 8;
331
- cached = getCodec(nBytes);
277
+ cached = getCodec2(nBytes);
332
278
  cache2.set(nBits, cached);
333
279
  return cached;
334
280
  };
335
- int.enc = (nBits) => int(nBits).enc;
336
- int.dec = (nBits) => int(nBits).dec;
281
+ Int.enc = (nBits) => Int(nBits).enc;
282
+ Int.dec = (nBits) => Int(nBits).dec;
337
283
 
338
- // src/codecs/fixed.ts
284
+ // src/codecs/Fixed.ts
339
285
  var creator = (codec) => {
340
286
  const cache3 = /* @__PURE__ */ new Map();
341
287
  return (nBits, decimals) => {
@@ -348,57 +294,104 @@ var creator = (codec) => {
348
294
  return cached;
349
295
  };
350
296
  };
351
- var fixed = creator(int);
352
- var ufixed = creator(uint);
353
-
354
- // src/codecs/tuple.ts
355
- var tupleDec = (...decoders) => toInternalBytes((bytes2) => decoders.map((decoder) => decoder(bytes2)));
356
- var tupleEnc = (...encoders) => (values) => mergeUint8(...values.map((value, idx) => encoders[idx](value)));
357
- var tuple = (...codecs) => createCodec(tupleEnc(...codecs.map(([encoder]) => encoder)), tupleDec(...codecs.map(([, decoder]) => decoder)));
358
- tuple.enc = tupleEnc;
359
- tuple.dec = tupleDec;
297
+ var Fixed = creator(Int);
298
+ var Ufixed = creator(Uint);
360
299
 
361
- // src/codecs/struct.ts
362
- var structEnc = (encoders) => {
363
- const keys = Object.keys(encoders);
364
- return enhanceEncoder(tuple.enc(...Object.values(encoders)), (input) => keys.map((k) => input[k]));
300
+ // src/codecs/Tuple.ts
301
+ var uint2562 = Uint(256);
302
+ var dynamicEnc = (...encoders) => {
303
+ const res = (values) => {
304
+ const mapped = values.map((value, idx) => encoders[idx](value));
305
+ const resultArray = new Array(encoders.length);
306
+ const dinamics = [];
307
+ let len = 0n;
308
+ for (let i = 0; i < encoders.length; i++) {
309
+ if (encoders[i].dyn) {
310
+ dinamics.push(i);
311
+ len += 32n;
312
+ } else {
313
+ resultArray[i] = mapped[i];
314
+ len += BigInt(mapped[i].length);
315
+ }
316
+ }
317
+ dinamics.forEach((idx) => {
318
+ resultArray[idx] = uint2562.enc(len);
319
+ const data = mapped[idx];
320
+ resultArray.push(data);
321
+ len += BigInt(data.length);
322
+ });
323
+ return mergeUint8(...resultArray);
324
+ };
325
+ res.dyn = true;
326
+ return res;
365
327
  };
366
- var structDec = (decoders) => {
367
- const keys = Object.keys(decoders);
368
- return enhanceDecoder(tuple.dec(...Object.values(decoders)), (tuple2) => Object.fromEntries(tuple2.map((value, idx) => [keys[idx], value])));
328
+ var staticEnc = (...encoders) => (values) => mergeUint8(...values.map((value, idx) => encoders[idx](value)));
329
+ var staticDec = (...decoders) => toInternalBytes((bytes) => decoders.map((decoder) => decoder(bytes)));
330
+ var dynamicDec = (...decoders) => {
331
+ const res = toInternalBytes((bytes) => {
332
+ const result = new Array(decoders.length);
333
+ let start = bytes.i;
334
+ for (let i = 0; i < decoders.length; i++) {
335
+ if (decoders[i].dyn) {
336
+ const offset = Number(uint2562.dec(bytes));
337
+ const current = bytes.i;
338
+ bytes.i = start + offset;
339
+ result[i] = decoders[i](bytes);
340
+ bytes.i = current;
341
+ } else {
342
+ result[i] = decoders[i](bytes);
343
+ }
344
+ }
345
+ return result;
346
+ });
347
+ res.dyn = true;
348
+ return res;
349
+ };
350
+ var Tuple = (...codecs) => {
351
+ const isDyn = codecs.some((c) => c.dyn);
352
+ const [enc, dec] = isDyn ? [dynamicEnc, dynamicDec] : [staticEnc, staticDec];
353
+ const res = createCodec(enc(...codecs.map(([encoder]) => encoder)), dec(...codecs.map(([, decoder]) => decoder)));
354
+ res.dyn = isDyn;
355
+ return res;
356
+ };
357
+
358
+ // src/codecs/Struct.ts
359
+ var Struct = (codecs) => {
360
+ const keys = Object.keys(codecs);
361
+ return enhanceCodec(Tuple(...Object.values(codecs)), (input) => keys.map((k) => input[k]), (tuple) => Object.fromEntries(tuple.map((value, idx) => [keys[idx], value])));
369
362
  };
370
- var struct = (codecs) => createCodec(structEnc(mapObject(codecs, (x) => x[0])), structDec(mapObject(codecs, (x) => x[1])));
371
- struct.enc = structEnc;
372
- struct.dec = structDec;
373
363
 
374
- // src/codecs/vector.ts
375
- var uint2563 = uint(256);
364
+ // src/codecs/Vector.ts
365
+ var uint2563 = Uint(256);
376
366
  var vectorEnc = (inner, size) => {
377
- if (size >= 0)
378
- return (value) => mergeUint8(...value.map(inner));
367
+ if (size >= 0) {
368
+ const res = (value) => mergeUint8(...value.map(inner));
369
+ res.dyn = inner.dyn;
370
+ return res;
371
+ }
379
372
  const result = (value) => mergeUint8(uint2563.enc(BigInt(value.length)), ...value.map(inner));
380
- result.din = true;
373
+ result.dyn = true;
381
374
  return result;
382
375
  };
383
376
  var vectorDec = (getter, size) => {
384
- const result = toInternalBytes((bytes2) => {
385
- const nElements = size >= 0 ? size : Number(uint2563.dec(bytes2));
377
+ const result = toInternalBytes((bytes) => {
378
+ const nElements = size >= 0 ? size : Number(uint2563.dec(bytes));
386
379
  const result2 = new Array(nElements);
387
380
  for (let i = 0; i < nElements; i++) {
388
- result2[i] = getter(bytes2);
381
+ result2[i] = getter(bytes);
389
382
  }
390
383
  return result2;
391
384
  });
392
385
  if (size == null)
393
- result.din = true;
386
+ result.dyn = true;
394
387
  return result;
395
388
  };
396
- var vector = (inner, size) => {
389
+ var Vector = (inner, size) => {
397
390
  const result = createCodec(vectorEnc(inner[0], size), vectorDec(inner[1], size));
398
391
  if (size == null)
399
- result.din = true;
392
+ result.dyn = true;
400
393
  return result;
401
394
  };
402
- vector.enc = vectorEnc;
403
- vector.dec = vectorDec;
395
+ Vector.enc = vectorEnc;
396
+ Vector.dec = vectorDec;
404
397
  //# sourceMappingURL=solidity-codecs.cjs.development.js.map