solidity-codecs 0.1.4 → 0.2.2
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/dist/codecs/BytesX.d.ts +1 -1
- package/dist/codecs/Tuple.d.ts +1 -1
- package/dist/codecs/bool.d.ts +1 -1
- package/dist/codecs/str.d.ts +1 -1
- package/dist/solidity-codecs.cjs.development.js +57 -44
- package/dist/solidity-codecs.cjs.development.js.map +3 -3
- package/dist/solidity-codecs.cjs.production.min.js +1 -1
- package/dist/solidity-codecs.cjs.production.min.js.map +3 -3
- package/dist/solidity-codecs.js +55 -42
- package/dist/solidity-codecs.js.map +3 -3
- package/dist/solidity-codecs.mjs +55 -42
- package/dist/solidity-codecs.mjs.map +3 -3
- package/dist/types.d.ts +6 -3
- package/dist/utils.d.ts +0 -1
- package/package.json +1 -1
- package/dist/codecs/Bytes.d.ts +0 -6
package/dist/solidity-codecs.js
CHANGED
@@ -5,26 +5,17 @@ var __publicField = (obj, key, value) => {
|
|
5
5
|
return value;
|
6
6
|
};
|
7
7
|
|
8
|
-
// src/
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
// src/internal/createCodec.ts
|
9
|
+
var createCodec = (encoder, decoder, selector) => {
|
10
|
+
;
|
11
|
+
encoder.s = selector;
|
12
|
+
decoder.s = selector;
|
12
13
|
const result = [encoder, decoder];
|
13
14
|
result.enc = encoder;
|
14
15
|
result.dec = decoder;
|
16
|
+
result.s = selector;
|
15
17
|
return result;
|
16
18
|
};
|
17
|
-
var dyn = (input, output) => {
|
18
|
-
if (input.dyn)
|
19
|
-
output.dyn = true;
|
20
|
-
return output;
|
21
|
-
};
|
22
|
-
var enhanceEncoder = (encoder, mapper) => dyn(encoder, (value) => encoder(mapper(value)));
|
23
|
-
var enhanceDecoder = (decoder, mapper) => dyn(decoder, (value) => mapper(decoder(value)));
|
24
|
-
var enhanceCodec = (codec, toFrom, fromTo) => dyn(codec, createCodec(enhanceEncoder(codec[0], toFrom), enhanceDecoder(codec[1], fromTo)));
|
25
|
-
|
26
|
-
// src/codecs/address.ts
|
27
|
-
import { fromHex as fromHex2, toHex } from "@unstoppablejs/utils";
|
28
19
|
|
29
20
|
// src/internal/toInternalBytes.ts
|
30
21
|
import { fromHex } from "@unstoppablejs/utils";
|
@@ -41,7 +32,21 @@ var toInternalBytes = (fn) => (buffer) => fn(buffer instanceof InternalUint8Arra
|
|
41
32
|
// src/internal/range32.ts
|
42
33
|
var range32 = Array(32).fill(0).map((_, idx) => idx + 1);
|
43
34
|
|
35
|
+
// src/utils.ts
|
36
|
+
import { keccak_256 } from "@noble/hashes/sha3";
|
37
|
+
var keccak = keccak_256;
|
38
|
+
var dyn = (input, output) => {
|
39
|
+
if (input.d)
|
40
|
+
output.d = true;
|
41
|
+
output.s = input.s;
|
42
|
+
return output;
|
43
|
+
};
|
44
|
+
var enhanceEncoder = (encoder, mapper) => dyn(encoder, (value) => encoder(mapper(value)));
|
45
|
+
var enhanceDecoder = (decoder, mapper) => dyn(decoder, (value) => mapper(decoder(value)));
|
46
|
+
var enhanceCodec = (codec, toFrom, fromTo) => dyn(codec, createCodec(enhanceEncoder(codec[0], toFrom), enhanceDecoder(codec[1], fromTo), codec.s));
|
47
|
+
|
44
48
|
// src/codecs/address.ts
|
49
|
+
import { fromHex as fromHex2, toHex } from "@unstoppablejs/utils";
|
45
50
|
var address = createCodec((input) => {
|
46
51
|
const result = new Uint8Array(32);
|
47
52
|
result.set(fromHex2(input), 12);
|
@@ -58,7 +63,7 @@ var address = createCodec((input) => {
|
|
58
63
|
result.push(parseInt(hashedAddres[i], 16) > 7 ? char.toUpperCase() : char);
|
59
64
|
}
|
60
65
|
return result.join("");
|
61
|
-
}));
|
66
|
+
}), "address");
|
62
67
|
|
63
68
|
// src/codecs/Uint.ts
|
64
69
|
var getCodec = (nBytes) => {
|
@@ -79,7 +84,7 @@ var getCodec = (nBytes) => {
|
|
79
84
|
result = result << 64n | bytes33.v.getBigUint64(idx);
|
80
85
|
bytes33.i = nextBlock;
|
81
86
|
return result;
|
82
|
-
}));
|
87
|
+
}), "uint" + nBytes * 8);
|
83
88
|
};
|
84
89
|
var [
|
85
90
|
uint8,
|
@@ -118,7 +123,9 @@ var [
|
|
118
123
|
var uint = uint256;
|
119
124
|
|
120
125
|
// src/codecs/bool.ts
|
121
|
-
var
|
126
|
+
var base = Object.assign([], uint8);
|
127
|
+
base.s = "bool";
|
128
|
+
var bool = enhanceCodec(base, (value) => value ? 1n : 0n, Boolean);
|
122
129
|
|
123
130
|
// src/codecs/bytes.ts
|
124
131
|
import { mergeUint8 } from "@unstoppablejs/utils";
|
@@ -131,24 +138,26 @@ var bytesEnc = (val) => {
|
|
131
138
|
}
|
132
139
|
return mergeUint8(...args);
|
133
140
|
};
|
134
|
-
bytesEnc.
|
141
|
+
bytesEnc.d = true;
|
135
142
|
var bytesDec = toInternalBytes((bytes33) => {
|
136
143
|
let nElements = Number(uint[1](bytes33));
|
137
|
-
const result = new Uint8Array(bytes33.buffer, bytes33.i
|
144
|
+
const result = new Uint8Array(bytes33.buffer.slice(bytes33.i, bytes33.i + nElements));
|
138
145
|
bytes33.i += nElements;
|
139
146
|
const extra = nElements % 32;
|
140
147
|
if (extra > 0)
|
141
148
|
bytes33.i += 32 - extra;
|
142
149
|
return result;
|
143
150
|
});
|
144
|
-
bytesDec.
|
145
|
-
var bytes = createCodec(bytesEnc, bytesDec);
|
146
|
-
bytes.
|
151
|
+
bytesDec.d = true;
|
152
|
+
var bytes = createCodec(bytesEnc, bytesDec, "bytes");
|
153
|
+
bytes.d = true;
|
147
154
|
|
148
155
|
// src/codecs/str.ts
|
149
156
|
var textEncoder = new TextEncoder();
|
150
157
|
var textDecoder = new TextDecoder();
|
151
|
-
var
|
158
|
+
var base2 = Object.assign([], bytes);
|
159
|
+
base2.s = "string";
|
160
|
+
var str = enhanceCodec(base2, textEncoder.encode.bind(textEncoder), textDecoder.decode.bind(textDecoder));
|
152
161
|
|
153
162
|
// src/codecs/BytesX.ts
|
154
163
|
var bytesEnc2 = (nBytes) => (bytes33) => {
|
@@ -159,7 +168,7 @@ var bytesEnc2 = (nBytes) => (bytes33) => {
|
|
159
168
|
return result;
|
160
169
|
};
|
161
170
|
var bytesDec2 = (nBytes) => toInternalBytes((bytes33) => {
|
162
|
-
const result = new Uint8Array(bytes33.buffer, bytes33.i
|
171
|
+
const result = new Uint8Array(bytes33.buffer.slice(bytes33.i, bytes33.i + nBytes));
|
163
172
|
bytes33.i += 32;
|
164
173
|
return result;
|
165
174
|
});
|
@@ -196,7 +205,7 @@ var [
|
|
196
205
|
bytes30,
|
197
206
|
bytes31,
|
198
207
|
bytes32
|
199
|
-
] = range32.map((nBytes) => createCodec(bytesEnc2(nBytes), bytesDec2(nBytes)));
|
208
|
+
] = range32.map((nBytes) => createCodec(bytesEnc2(nBytes), bytesDec2(nBytes), "bytes" + nBytes));
|
200
209
|
|
201
210
|
// src/codecs/Int.ts
|
202
211
|
var signGetters = {
|
@@ -260,7 +269,7 @@ var getCodec2 = (nBytes) => {
|
|
260
269
|
bytes33.i += 32;
|
261
270
|
return result;
|
262
271
|
});
|
263
|
-
return createCodec(enc, dec);
|
272
|
+
return createCodec(enc, dec, "int" + nBytes * 8);
|
264
273
|
};
|
265
274
|
var [
|
266
275
|
int8,
|
@@ -299,7 +308,12 @@ var [
|
|
299
308
|
var int = int256;
|
300
309
|
|
301
310
|
// src/codecs/Fixed.ts
|
302
|
-
var Fixed = (baseCodec, decimals) =>
|
311
|
+
var Fixed = (baseCodec, decimals) => {
|
312
|
+
const baseSelector = baseCodec.s;
|
313
|
+
const eBaseCodec = Object.assign([], baseCodec);
|
314
|
+
eBaseCodec.s = (baseSelector[0] === "u" ? "ufixed" + baseSelector.slice(4) : "fixed" + baseSelector.slice(3)) + "x" + decimals;
|
315
|
+
return enhanceCodec(eBaseCodec, (x) => x.value, (value) => ({ value, decimals }));
|
316
|
+
};
|
303
317
|
|
304
318
|
// src/codecs/Tuple.ts
|
305
319
|
import { mergeUint8 as mergeUint82 } from "@unstoppablejs/utils";
|
@@ -310,7 +324,7 @@ var dynamicEnc = (...encoders) => {
|
|
310
324
|
const dinamics = [];
|
311
325
|
let len = 0n;
|
312
326
|
for (let i = 0; i < encoders.length; i++) {
|
313
|
-
if (encoders[i].
|
327
|
+
if (encoders[i].d) {
|
314
328
|
dinamics.push(i);
|
315
329
|
len += 32n;
|
316
330
|
} else {
|
@@ -326,7 +340,7 @@ var dynamicEnc = (...encoders) => {
|
|
326
340
|
});
|
327
341
|
return mergeUint82(...resultArray);
|
328
342
|
};
|
329
|
-
res.
|
343
|
+
res.d = true;
|
330
344
|
return res;
|
331
345
|
};
|
332
346
|
var staticEnc = (...encoders) => (values) => mergeUint82(...values.map((value, idx) => encoders[idx](value)));
|
@@ -336,7 +350,7 @@ var dynamicDec = (...decoders) => {
|
|
336
350
|
const result = new Array(decoders.length);
|
337
351
|
let start = bytes33.i;
|
338
352
|
for (let i = 0; i < decoders.length; i++) {
|
339
|
-
if (decoders[i].
|
353
|
+
if (decoders[i].d) {
|
340
354
|
const offset = Number(uint[1](bytes33));
|
341
355
|
const current = bytes33.i;
|
342
356
|
bytes33.i = start + offset;
|
@@ -348,14 +362,14 @@ var dynamicDec = (...decoders) => {
|
|
348
362
|
}
|
349
363
|
return result;
|
350
364
|
});
|
351
|
-
res.
|
365
|
+
res.d = true;
|
352
366
|
return res;
|
353
367
|
};
|
354
368
|
var Tuple = (...codecs) => {
|
355
|
-
const isDyn = codecs.some((c) => c.
|
369
|
+
const isDyn = codecs.some((c) => c.d);
|
356
370
|
const [enc, dec] = isDyn ? [dynamicEnc, dynamicDec] : [staticEnc, staticDec];
|
357
|
-
const res = createCodec(enc(...codecs.map(([encoder]) => encoder)), dec(...codecs.map(([, decoder]) => decoder)));
|
358
|
-
res.
|
371
|
+
const res = createCodec(enc(...codecs.map(([encoder]) => encoder)), dec(...codecs.map(([, decoder]) => decoder)), `(${codecs.map((c) => c.s).join(",")})`);
|
372
|
+
res.d = isDyn;
|
359
373
|
return res;
|
360
374
|
};
|
361
375
|
|
@@ -372,7 +386,7 @@ var vectorEnc = (inner, size) => {
|
|
372
386
|
const isNotFixed = size == null ? 1 : 0;
|
373
387
|
const actualSize = isNotFixed ? value.length : size;
|
374
388
|
let data;
|
375
|
-
if (inner.
|
389
|
+
if (inner.d) {
|
376
390
|
data = new Array(actualSize * 2);
|
377
391
|
let offset = actualSize * 32;
|
378
392
|
for (let i = 0; i < actualSize; i++) {
|
@@ -390,14 +404,14 @@ var vectorEnc = (inner, size) => {
|
|
390
404
|
data.unshift(uint.enc(BigInt(value.length)));
|
391
405
|
return mergeUint83(...data);
|
392
406
|
};
|
393
|
-
result.
|
407
|
+
result.d = true;
|
394
408
|
return result;
|
395
409
|
};
|
396
410
|
var vectorDec = (getter, size) => {
|
397
411
|
const decoder = toInternalBytes((bytes33) => {
|
398
412
|
const nElements = size >= 0 ? size : Number(uint[1](bytes33));
|
399
413
|
const decoded = new Array(nElements);
|
400
|
-
if (getter.
|
414
|
+
if (getter.d) {
|
401
415
|
const init = bytes33.i;
|
402
416
|
let current = init;
|
403
417
|
for (let i = 0; i < nElements; i++) {
|
@@ -414,13 +428,13 @@ var vectorDec = (getter, size) => {
|
|
414
428
|
}
|
415
429
|
return decoded;
|
416
430
|
});
|
417
|
-
decoder.
|
431
|
+
decoder.d = true;
|
418
432
|
return decoder;
|
419
433
|
};
|
420
434
|
var Vector = (inner, size) => {
|
421
|
-
const codec = createCodec(vectorEnc(inner[0], size), vectorDec(inner[1], size));
|
435
|
+
const codec = createCodec(vectorEnc(inner[0], size), vectorDec(inner[1], size), inner.s + `[${size == null ? "" : size}]`);
|
422
436
|
if (size == null)
|
423
|
-
codec.
|
437
|
+
codec.d = true;
|
424
438
|
return codec;
|
425
439
|
};
|
426
440
|
export {
|
@@ -463,7 +477,6 @@ export {
|
|
463
477
|
bytes7,
|
464
478
|
bytes8,
|
465
479
|
bytes9,
|
466
|
-
createCodec,
|
467
480
|
enhanceCodec,
|
468
481
|
enhanceDecoder,
|
469
482
|
enhanceEncoder,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"version": 3,
|
3
|
-
"sources": ["../src/
|
4
|
-
"sourcesContent": ["import type { Codec, Decoder, Encoder } from \"./types\"\nimport { keccak_256 } from \"@noble/hashes/sha3\"\n\nexport const keccak = keccak_256\n\nexport const createCodec = <T>(\n encoder: Encoder<T>,\n decoder: Decoder<T>,\n): Codec<T> => {\n const result = [encoder, decoder] as any\n result.enc = encoder\n result.dec = decoder\n return result\n}\n\nconst dyn = <T extends { dyn?: boolean }>(\n input: { dyn?: boolean },\n output: T,\n): T => {\n if (input.dyn) output.dyn = true\n return output\n}\n\nexport const enhanceEncoder = <I, O>(\n encoder: Encoder<I>,\n mapper: (value: O) => I,\n): Encoder<O> => dyn(encoder, ((value) => encoder(mapper(value))) as Encoder<O>)\n\nexport const enhanceDecoder = <I, O>(\n decoder: Decoder<I>,\n mapper: (value: I) => O,\n): Decoder<O> => dyn(decoder, ((value) => mapper(decoder(value))) as Decoder<O>)\n\nexport const enhanceCodec = <I, O>(\n codec: Codec<I>,\n toFrom: (value: O) => I,\n fromTo: (value: I) => O,\n): Codec<O> =>\n dyn(\n codec,\n createCodec(\n enhanceEncoder(codec[0], toFrom),\n enhanceDecoder(codec[1], fromTo),\n ),\n )\n", "import { fromHex, toHex } from \"@unstoppablejs/utils\"\nimport { toInternalBytes } from \"../internal\"\nimport { createCodec, keccak } from \"../utils\"\n\nexport const address = createCodec(\n (input: string) => {\n const result = new Uint8Array(32)\n result.set(fromHex(input), 12)\n return result\n },\n toInternalBytes((bytes) => {\n const binaryAddress = new Uint8Array(bytes.buffer, bytes.i + 12, 20)\n bytes.i += 32\n const nonChecksum = toHex(binaryAddress)\n const hashedAddres = toHex(keccak(nonChecksum.slice(2)))\n\n const result = new Array(41)\n result[0] = \"0x\"\n for (let i = 2; i < 42; i++) {\n const char = nonChecksum[i]\n result.push(parseInt(hashedAddres[i], 16) > 7 ? char.toUpperCase() : char)\n }\n\n return result.join(\"\")\n }),\n)\n", "import { fromHex } from \"@unstoppablejs/utils\"\nimport { Decoder } from \"../types\"\n\nclass InternalUint8Array extends Uint8Array {\n i: number = 0\n v: DataView\n\n constructor(buffer: ArrayBuffer) {\n super(buffer)\n this.v = new DataView(buffer)\n }\n}\n\nexport const toInternalBytes =\n <T>(fn: (input: InternalUint8Array) => T): Decoder<T> =>\n (buffer: string | ArrayBuffer | Uint8Array | InternalUint8Array) =>\n fn(\n buffer instanceof InternalUint8Array\n ? buffer\n : new InternalUint8Array(\n buffer instanceof Uint8Array\n ? buffer.buffer\n : typeof buffer === \"string\"\n ? fromHex(buffer).buffer\n : buffer,\n ),\n )\n", "export const range32 = Array(32)\n .fill(0)\n .map((_, idx) => idx + 1)\n", "import { Codec } from \"../types\"\nimport { range32, toInternalBytes } from \"../internal\"\nimport { createCodec } from \"../utils\"\n\nconst getCodec = (nBytes: number): Codec<bigint> => {\n const n64 = Math.ceil(nBytes / 8)\n return createCodec(\n (input) => {\n const result = new Uint8Array(32)\n const dv = new DataView(result.buffer)\n\n const idxLimit = 32 - n64 * 8\n for (let idx = 24; idx >= idxLimit; idx -= 8) {\n dv.setBigUint64(idx, input)\n input >>= 64n\n }\n\n return result\n },\n toInternalBytes((bytes) => {\n let result = 0n\n\n const nextBlock = bytes.i + 32\n for (let idx = bytes.i + (32 - n64 * 8); idx < nextBlock; idx += 8)\n result = (result << 64n) | bytes.v.getBigUint64(idx)\n\n bytes.i = nextBlock\n return result\n }),\n )\n}\n\nexport const [\n uint8,\n uint16,\n uint24,\n uint32,\n uint40,\n uint48,\n uint56,\n uint64,\n uint72,\n uint80,\n uint88,\n uint96,\n uint104,\n uint112,\n uint120,\n uint128,\n uint136,\n uint144,\n uint152,\n uint160,\n uint168,\n uint176,\n uint184,\n uint192,\n uint200,\n uint208,\n uint226,\n uint224,\n uint232,\n uint240,\n uint248,\n uint256,\n] = range32.map(getCodec)\nexport const uint = uint256\n", "import { Codec } from \"../types\"\nimport { enhanceCodec } from \"../\"\nimport { uint8 } from \"./Uint\"\n\nexport const bool: Codec<boolean> = enhanceCodec(\n uint8,\n (value: boolean) => (value ? 1n : 0n),\n Boolean,\n)\n", "import { mergeUint8 } from \"@unstoppablejs/utils\"\nimport { createCodec, Decoder, Encoder } from \"../\"\nimport { toInternalBytes } from \"../internal\"\nimport { uint } from \"./Uint\"\n\nconst bytesEnc: Encoder<Uint8Array> = (val) => {\n const args = [uint[0](BigInt(val.length)), val] as const\n const extra = val.length % 32\n if (extra > 0) {\n ;(args as any).push(new Uint8Array(32 - extra))\n }\n return mergeUint8(...args)\n}\nbytesEnc.dyn = true\n\nconst bytesDec: Decoder<Uint8Array> = toInternalBytes((bytes) => {\n let nElements = Number(uint[1](bytes))\n const result = new Uint8Array(bytes.buffer, bytes.i, nElements)\n bytes.i += nElements\n const extra = nElements % 32\n if (extra > 0) bytes.i += 32 - extra\n return result\n})\nbytesDec.dyn = true\n\nexport const bytes = createCodec(bytesEnc, bytesDec)\nbytes.dyn = true\n", "import { enhanceCodec } from \"../\"\nimport { bytes } from \"./bytes\"\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const str = enhanceCodec<Uint8Array, string>(\n bytes,\n textEncoder.encode.bind(textEncoder),\n textDecoder.decode.bind(textDecoder),\n)\n", "import { Encoder, Decoder, Codec } from \"../types\"\nimport { createCodec } from \"../\"\nimport { range32, toInternalBytes } from \"../internal\"\n\nconst bytesEnc =\n (nBytes: number): Encoder<Uint8Array> =>\n (bytes) => {\n if (bytes.length === nBytes && nBytes === 32) return bytes\n const result = new Uint8Array(32)\n result.set(bytes.length === nBytes ? bytes : bytes.slice(0, nBytes))\n return result\n }\n\nconst bytesDec = (nBytes: number): Decoder<Uint8Array> =>\n toInternalBytes((bytes) => {\n const result = new Uint8Array(bytes.buffer, bytes.i, nBytes)\n bytes.i += 32\n return result\n })\n\nexport const [\n bytes1,\n bytes2,\n bytes3,\n bytes4,\n bytes5,\n bytes6,\n bytes7,\n bytes8,\n bytes9,\n bytes10,\n bytes11,\n bytes12,\n bytes13,\n bytes14,\n bytes15,\n bytes16,\n bytes17,\n bytes18,\n bytes19,\n bytes20,\n bytes21,\n bytes22,\n bytes23,\n bytes24,\n bytes25,\n bytes26,\n bytes27,\n bytes28,\n bytes29,\n bytes30,\n bytes31,\n bytes32,\n] = range32.map(\n (nBytes: number): Codec<Uint8Array> =>\n createCodec(bytesEnc(nBytes), bytesDec(nBytes)),\n)\n", "import { Encoder, Codec } from \"../types\"\nimport { range32, toInternalBytes } from \"../internal\"\nimport { createCodec } from \"../utils\"\n\nconst signGetters: Record<1 | 2 | 8, \"getBigInt64\" | \"getInt16\" | \"getInt8\"> = {\n \"1\": \"getInt8\",\n \"2\": \"getInt16\",\n \"8\": \"getBigInt64\",\n}\n\nconst signSetters: Record<1 | 2 | 8, \"setBigInt64\" | \"setInt16\" | \"setInt8\"> = {\n \"1\": \"setInt8\",\n \"2\": \"setInt16\",\n \"8\": \"setBigInt64\",\n}\n\nconst usignGetters: Record<\n 1 | 2 | 8,\n \"getBigUint64\" | \"getUint16\" | \"getUint8\"\n> = {\n \"1\": \"getUint8\",\n \"2\": \"getUint16\",\n \"8\": \"getBigUint64\",\n}\n\nconst usignSetters: Record<\n 1 | 2 | 8,\n \"setBigUint64\" | \"setUint16\" | \"setUint8\"\n> = {\n \"1\": \"setUint8\",\n \"2\": \"setUint16\",\n \"8\": \"setBigUint64\",\n}\n\nconst getCodec = (nBytes: number): Codec<bigint> => {\n const n64 = (nBytes / 8) | 0\n const n16 = ((nBytes % 8) / 2) | 0\n const sequence = [\n ...Array(n64).fill([8, 64n, (x: bigint) => x]),\n ...Array(n16).fill([2, 16n, (x: bigint) => Number(x & 65535n)]),\n ]\n if (nBytes % 2) sequence.push([1, 8n, (x: bigint) => Number(x & 255n)])\n\n const enc: Encoder<bigint> = (input) => {\n const result = new Uint8Array(32)\n const dv = new DataView(result.buffer)\n\n if (input < 0n) {\n for (let i = 0; i < 32 - nBytes; i += 8) dv.setBigInt64(i, -1n)\n }\n\n let idx = 32\n for (let i = sequence.length - 1; i > 0; i--) {\n const [bytes, shift, fn] = sequence[i] as [1, 8n, (x: bigint) => any]\n idx -= bytes\n dv[usignSetters[bytes]](idx, fn(input) as never)\n input >>= shift\n }\n const [bytes, , fn] = sequence[0] as [1, 8n, (x: bigint) => any]\n idx -= bytes\n dv[signSetters[bytes]](idx, fn(input) as never)\n\n return result\n }\n\n const dec = toInternalBytes((bytes) => {\n let idx = bytes.i + 32 - nBytes\n\n const bits = sequence[0][0] as 8\n let result = BigInt(bytes.v[signGetters[bits]](idx))\n idx += bits\n\n for (let i = 1; i < sequence.length; i++) {\n const [bits, shift] = sequence[i] as [1, 8n]\n result = (result << shift) | BigInt(bytes.v[usignGetters[bits]](idx))\n idx += bits\n }\n\n bytes.i += 32\n return result\n })\n\n return createCodec(enc, dec)\n}\n\nexport const [\n int8,\n int16,\n int24,\n int32,\n int40,\n int48,\n int56,\n int64,\n int72,\n int80,\n int88,\n int96,\n int104,\n int112,\n int120,\n int128,\n int136,\n int144,\n int152,\n int160,\n int168,\n int176,\n int184,\n int192,\n int200,\n int208,\n int226,\n int224,\n int232,\n int240,\n int248,\n int256,\n] = range32.map(getCodec)\nexport const int = int256\n", "import { Codec } from \"../types\"\nimport { enhanceCodec } from \"../utils\"\n\nexport interface Decimal<T extends number = number> {\n value: bigint\n decimals: T\n}\n\nexport const Fixed = <D extends number>(\n baseCodec: Codec<bigint>,\n decimals: D,\n) =>\n enhanceCodec<bigint, Decimal<D>>(\n baseCodec,\n (x) => x.value,\n (value) => ({ value, decimals }),\n )\n", "import { mergeUint8 } from \"@unstoppablejs/utils\"\nimport { Codec, Decoder, Encoder } from \"../types\"\nimport { uint } from \"./Uint\"\nimport { toInternalBytes } from \"../internal\"\nimport { createCodec } from \"../utils\"\n\nconst dynamicEnc = <\n A extends Array<Encoder<any>>,\n OT extends { [K in keyof A]: A[K] extends Encoder<infer D> ? D : unknown },\n>(\n ...encoders: A\n): Encoder<[...OT]> => {\n const res: Encoder<[...OT]> = (values) => {\n const mapped = values.map((value, idx) => encoders[idx](value))\n const resultArray = new Array<Uint8Array>(encoders.length)\n const dinamics = []\n let len = 0n\n for (let i = 0; i < encoders.length; i++) {\n if (encoders[i].dyn) {\n dinamics.push(i)\n len += 32n\n } else {\n resultArray[i] = mapped[i]\n len += BigInt(mapped[i].length)\n }\n }\n\n dinamics.forEach((idx) => {\n resultArray[idx] = uint[0](len)\n const data = mapped[idx]\n resultArray.push(data)\n len += BigInt(data.length)\n })\n\n return mergeUint8(...resultArray)\n }\n\n res.dyn = true\n return res\n}\n\nconst staticEnc =\n <\n A extends Array<Encoder<any>>,\n OT extends { [K in keyof A]: A[K] extends Encoder<infer D> ? D : unknown },\n >(\n ...encoders: A\n ): Encoder<[...OT]> =>\n (values) =>\n mergeUint8(...values.map((value, idx) => encoders[idx](value)))\n\nconst staticDec = <\n A extends Array<Decoder<any>>,\n OT extends { [K in keyof A]: A[K] extends Decoder<infer D> ? D : unknown },\n>(\n ...decoders: A\n): Decoder<[...OT]> =>\n toInternalBytes(\n (bytes) => decoders.map((decoder) => decoder(bytes)) as [...OT],\n )\nconst dynamicDec = <\n A extends Array<Decoder<any>>,\n OT extends { [K in keyof A]: A[K] extends Decoder<infer D> ? D : unknown },\n>(\n ...decoders: A\n): Decoder<[...OT]> => {\n const res: Decoder<[...OT]> = toInternalBytes((bytes) => {\n const result = new Array(decoders.length) as [...OT]\n let start = bytes.i\n for (let i = 0; i < decoders.length; i++) {\n if (decoders[i].dyn) {\n const offset = Number(uint[1](bytes))\n const current = bytes.i\n bytes.i = start + offset\n result[i] = decoders[i](bytes)\n bytes.i = current\n } else {\n result[i] = decoders[i](bytes)\n }\n }\n return result\n })\n res.dyn = true\n return res\n}\n\nexport const Tuple = <\n A extends Array<Codec<any>>,\n OT extends { [K in keyof A]: A[K] extends Codec<infer D> ? D : unknown },\n>(\n ...codecs: A\n): Codec<[...OT]> => {\n const isDyn = codecs.some((c) => c.dyn)\n const [enc, dec] = isDyn\n ? ([dynamicEnc, dynamicDec] as const)\n : ([staticEnc, staticDec] as const)\n\n const res: Codec<[...OT]> = createCodec(\n enc(...codecs.map(([encoder]) => encoder)),\n dec(...codecs.map(([, decoder]) => decoder)),\n )\n res.dyn = isDyn\n return res\n}\n", "import { Codec, StringRecord } from \"../types\"\nimport { enhanceCodec } from \"../utils\"\nimport { Tuple } from \"./Tuple\"\n\nexport const Struct = <\n A extends StringRecord<Codec<any>>,\n OT extends { [K in keyof A]: A[K] extends Codec<infer D> ? D : unknown },\n>(\n codecs: A,\n): Codec<OT> => {\n const keys = Object.keys(codecs)\n return enhanceCodec(\n Tuple(...Object.values(codecs)),\n (input: OT) => keys.map((k) => input[k]),\n (tuple: Array<any>) =>\n Object.fromEntries(tuple.map((value, idx) => [keys[idx], value])) as OT,\n )\n}\n", "import { mergeUint8 } from \"@unstoppablejs/utils\"\nimport { toInternalBytes } from \"../internal\"\nimport { createCodec } from \"../utils\"\nimport { Codec, Decoder, Encoder } from \"../types\"\nimport { uint } from \"./Uint\"\n\nconst vectorEnc = <T>(inner: Encoder<T>, size?: number): Encoder<Array<T>> => {\n const result: Encoder<Array<T>> = (value) => {\n const isNotFixed = size == null ? 1 : 0\n const actualSize = isNotFixed ? value.length : size!\n let data: Array<Uint8Array>\n if (inner.dyn) {\n data = new Array<Uint8Array>(actualSize * 2)\n let offset = actualSize * 32\n for (let i = 0; i < actualSize; i++) {\n const encoded = inner(value[i])\n data[i] = uint.enc(BigInt(offset))\n offset += encoded.byteLength\n data[i + actualSize] = encoded\n }\n } else {\n data = new Array<Uint8Array>(actualSize)\n for (let i = 0; i < actualSize; i++) data[i] = inner(value[i])\n }\n if (isNotFixed) data!.unshift(uint.enc(BigInt(value.length)))\n return mergeUint8(...data)\n }\n result.dyn = true\n return result\n}\n\nconst vectorDec = <T>(getter: Decoder<T>, size?: number): Decoder<Array<T>> => {\n const decoder = toInternalBytes((bytes) => {\n const nElements = size! >= 0 ? size! : Number(uint[1](bytes))\n const decoded = new Array(nElements)\n\n if (getter.dyn) {\n const init = bytes.i\n let current = init\n for (let i = 0; i < nElements; i++) {\n bytes.i = current\n const offset = Number(uint.dec(bytes))\n current = bytes.i\n bytes.i = init + offset\n decoded[i] = getter(bytes)\n }\n } else {\n for (let i = 0; i < nElements; i++) {\n decoded[i] = getter(bytes)\n }\n }\n\n return decoded\n })\n decoder.dyn = true\n return decoder\n}\n\nexport const Vector = <T>(inner: Codec<T>, size?: number): Codec<Array<T>> => {\n const codec = createCodec(\n vectorEnc(inner[0], size),\n vectorDec(inner[1], size),\n )\n if (size == null) codec.dyn = true\n return codec\n}\n"],
|
5
|
-
"mappings": ";;;;;;;;
|
3
|
+
"sources": ["../src/internal/createCodec.ts", "../src/internal/toInternalBytes.ts", "../src/internal/range32.ts", "../src/utils.ts", "../src/codecs/address.ts", "../src/codecs/Uint.ts", "../src/codecs/bool.ts", "../src/codecs/bytes.ts", "../src/codecs/str.ts", "../src/codecs/BytesX.ts", "../src/codecs/Int.ts", "../src/codecs/Fixed.ts", "../src/codecs/Tuple.ts", "../src/codecs/Struct.ts", "../src/codecs/Vector.ts"],
|
4
|
+
"sourcesContent": ["import type { Codec } from \"../types\"\n\nexport const createCodec = <T>(\n encoder: (value: T) => Uint8Array,\n decoder: (value: Uint8Array) => T,\n selector: string,\n): Codec<T> => {\n ;(encoder as any).s = selector\n ;(decoder as any).s = selector\n const result = [encoder, decoder] as any\n result.enc = encoder\n result.dec = decoder\n result.s = selector\n return result\n}\n", "import { fromHex } from \"@unstoppablejs/utils\"\nimport { Decoder } from \"../types\"\n\nclass InternalUint8Array extends Uint8Array {\n i: number = 0\n v: DataView\n\n constructor(buffer: ArrayBuffer) {\n super(buffer)\n this.v = new DataView(buffer)\n }\n}\n\nexport const toInternalBytes = <T>(\n fn: (input: InternalUint8Array) => T,\n): Decoder<T> =>\n ((buffer: string | ArrayBuffer | Uint8Array | InternalUint8Array) =>\n fn(\n buffer instanceof InternalUint8Array\n ? buffer\n : new InternalUint8Array(\n buffer instanceof Uint8Array\n ? buffer.buffer\n : typeof buffer === \"string\"\n ? fromHex(buffer).buffer\n : buffer,\n ),\n )) as Decoder<T>\n", "export const range32 = Array(32)\n .fill(0)\n .map((_, idx) => idx + 1)\n", "import type { Codec, Decoder, Encoder } from \"./types\"\nimport { createCodec } from \"./internal\"\nimport { keccak_256 } from \"@noble/hashes/sha3\"\n\nexport const keccak = keccak_256\n\nconst dyn = <T extends { d?: boolean; s: string }>(\n input: { d?: boolean; s: string },\n output: T,\n): T => {\n if (input.d) output.d = true\n output.s = input.s\n return output\n}\n\nexport const enhanceEncoder = <I, O>(\n encoder: Encoder<I>,\n mapper: (value: O) => I,\n): Encoder<O> => dyn(encoder, ((value) => encoder(mapper(value))) as Encoder<O>)\n\nexport const enhanceDecoder = <I, O>(\n decoder: Decoder<I>,\n mapper: (value: I) => O,\n): Decoder<O> => dyn(decoder, ((value) => mapper(decoder(value))) as Decoder<O>)\n\nexport const enhanceCodec = <I, O>(\n codec: Codec<I>,\n toFrom: (value: O) => I,\n fromTo: (value: I) => O,\n): Codec<O> =>\n dyn(\n codec,\n createCodec(\n enhanceEncoder(codec[0], toFrom),\n enhanceDecoder(codec[1], fromTo),\n codec.s,\n ),\n )\n", "import { fromHex, toHex } from \"@unstoppablejs/utils\"\nimport { createCodec, toInternalBytes } from \"../internal\"\nimport { keccak } from \"../utils\"\n\nexport const address = createCodec<string>(\n (input: string) => {\n const result = new Uint8Array(32)\n result.set(fromHex(input), 12)\n return result\n },\n toInternalBytes((bytes) => {\n const binaryAddress = new Uint8Array(bytes.buffer, bytes.i + 12, 20)\n bytes.i += 32\n const nonChecksum = toHex(binaryAddress)\n const hashedAddres = toHex(keccak(nonChecksum.slice(2)))\n\n const result = new Array(41)\n result[0] = \"0x\"\n for (let i = 2; i < 42; i++) {\n const char = nonChecksum[i]\n result.push(parseInt(hashedAddres[i], 16) > 7 ? char.toUpperCase() : char)\n }\n\n return result.join(\"\")\n }),\n \"address\",\n)\n", "import { Codec } from \"../types\"\nimport { range32, toInternalBytes, createCodec } from \"../internal\"\n\nconst getCodec = (nBytes: number): Codec<bigint> => {\n const n64 = Math.ceil(nBytes / 8)\n return createCodec(\n (input) => {\n const result = new Uint8Array(32)\n const dv = new DataView(result.buffer)\n\n const idxLimit = 32 - n64 * 8\n for (let idx = 24; idx >= idxLimit; idx -= 8) {\n dv.setBigUint64(idx, input)\n input >>= 64n\n }\n\n return result\n },\n toInternalBytes((bytes) => {\n let result = 0n\n\n const nextBlock = bytes.i + 32\n for (let idx = bytes.i + (32 - n64 * 8); idx < nextBlock; idx += 8)\n result = (result << 64n) | bytes.v.getBigUint64(idx)\n\n bytes.i = nextBlock\n return result\n }),\n \"uint\" + nBytes * 8,\n )\n}\n\nexport const [\n uint8,\n uint16,\n uint24,\n uint32,\n uint40,\n uint48,\n uint56,\n uint64,\n uint72,\n uint80,\n uint88,\n uint96,\n uint104,\n uint112,\n uint120,\n uint128,\n uint136,\n uint144,\n uint152,\n uint160,\n uint168,\n uint176,\n uint184,\n uint192,\n uint200,\n uint208,\n uint226,\n uint224,\n uint232,\n uint240,\n uint248,\n uint256,\n] = range32.map(getCodec)\nexport const uint = uint256\n", "import type { Codec } from \"../types\"\nimport { enhanceCodec } from \"../utils\"\nimport { uint8 } from \"./Uint\"\n\nconst base = Object.assign([], uint8)\nbase.s = \"bool\"\n\nexport const bool: Codec<boolean> = enhanceCodec(\n base,\n (value: boolean) => (value ? 1n : 0n),\n Boolean,\n)\n", "import { mergeUint8 } from \"@unstoppablejs/utils\"\nimport type { Decoder, Encoder } from \"../types\"\nimport { toInternalBytes, createCodec } from \"../internal\"\nimport { uint } from \"./Uint\"\n\nconst bytesEnc = ((val) => {\n const args = [uint[0](BigInt(val.length)), val] as const\n const extra = val.length % 32\n if (extra > 0) {\n ;(args as any).push(new Uint8Array(32 - extra))\n }\n return mergeUint8(...args)\n}) as Encoder<Uint8Array>\nbytesEnc.d = true\n\nconst bytesDec: Decoder<Uint8Array> = toInternalBytes((bytes) => {\n let nElements = Number(uint[1](bytes))\n const result = new Uint8Array(\n bytes.buffer.slice(bytes.i, bytes.i + nElements),\n )\n bytes.i += nElements\n const extra = nElements % 32\n if (extra > 0) bytes.i += 32 - extra\n return result\n})\nbytesDec.d = true\n\nexport const bytes = createCodec(bytesEnc, bytesDec, \"bytes\")\nbytes.d = true\n", "import { enhanceCodec } from \"../utils\"\nimport { bytes } from \"./bytes\"\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nconst base = Object.assign([], bytes)\nbase.s = \"string\"\n\nexport const str = enhanceCodec<Uint8Array, string>(\n base,\n textEncoder.encode.bind(textEncoder),\n textDecoder.decode.bind(textDecoder),\n)\n", "import type { Encoder, Decoder, Codec } from \"../types\"\nimport { range32, toInternalBytes, createCodec } from \"../internal\"\n\nconst bytesEnc = (nBytes: number): Encoder<Uint8Array> =>\n ((bytes) => {\n if (bytes.length === nBytes && nBytes === 32) return bytes\n const result = new Uint8Array(32)\n result.set(bytes.length === nBytes ? bytes : bytes.slice(0, nBytes))\n return result\n }) as Encoder<Uint8Array>\n\nconst bytesDec = (nBytes: number): Decoder<Uint8Array> =>\n toInternalBytes((bytes) => {\n const result = new Uint8Array(bytes.buffer.slice(bytes.i, bytes.i + nBytes))\n bytes.i += 32\n return result\n })\n\nexport const [\n bytes1,\n bytes2,\n bytes3,\n bytes4,\n bytes5,\n bytes6,\n bytes7,\n bytes8,\n bytes9,\n bytes10,\n bytes11,\n bytes12,\n bytes13,\n bytes14,\n bytes15,\n bytes16,\n bytes17,\n bytes18,\n bytes19,\n bytes20,\n bytes21,\n bytes22,\n bytes23,\n bytes24,\n bytes25,\n bytes26,\n bytes27,\n bytes28,\n bytes29,\n bytes30,\n bytes31,\n bytes32,\n] = range32.map(\n (nBytes: number): Codec<Uint8Array> =>\n createCodec(bytesEnc(nBytes), bytesDec(nBytes), \"bytes\" + nBytes),\n)\n", "import { Encoder, Codec } from \"../types\"\nimport { range32, toInternalBytes, createCodec } from \"../internal\"\n\nconst signGetters: Record<1 | 2 | 8, \"getBigInt64\" | \"getInt16\" | \"getInt8\"> = {\n \"1\": \"getInt8\",\n \"2\": \"getInt16\",\n \"8\": \"getBigInt64\",\n}\n\nconst signSetters: Record<1 | 2 | 8, \"setBigInt64\" | \"setInt16\" | \"setInt8\"> = {\n \"1\": \"setInt8\",\n \"2\": \"setInt16\",\n \"8\": \"setBigInt64\",\n}\n\nconst usignGetters: Record<\n 1 | 2 | 8,\n \"getBigUint64\" | \"getUint16\" | \"getUint8\"\n> = {\n \"1\": \"getUint8\",\n \"2\": \"getUint16\",\n \"8\": \"getBigUint64\",\n}\n\nconst usignSetters: Record<\n 1 | 2 | 8,\n \"setBigUint64\" | \"setUint16\" | \"setUint8\"\n> = {\n \"1\": \"setUint8\",\n \"2\": \"setUint16\",\n \"8\": \"setBigUint64\",\n}\n\nconst getCodec = (nBytes: number): Codec<bigint> => {\n const n64 = (nBytes / 8) | 0\n const n16 = ((nBytes % 8) / 2) | 0\n const sequence = [\n ...Array(n64).fill([8, 64n, (x: bigint) => x]),\n ...Array(n16).fill([2, 16n, (x: bigint) => Number(x & 65535n)]),\n ]\n if (nBytes % 2) sequence.push([1, 8n, (x: bigint) => Number(x & 255n)])\n\n const enc = ((input) => {\n const result = new Uint8Array(32)\n const dv = new DataView(result.buffer)\n\n if (input < 0n) {\n for (let i = 0; i < 32 - nBytes; i += 8) dv.setBigInt64(i, -1n)\n }\n\n let idx = 32\n for (let i = sequence.length - 1; i > 0; i--) {\n const [bytes, shift, fn] = sequence[i] as [1, 8n, (x: bigint) => any]\n idx -= bytes\n dv[usignSetters[bytes]](idx, fn(input) as never)\n input >>= shift\n }\n const [bytes, , fn] = sequence[0] as [1, 8n, (x: bigint) => any]\n idx -= bytes\n dv[signSetters[bytes]](idx, fn(input) as never)\n\n return result\n }) as Encoder<bigint>\n\n const dec = toInternalBytes((bytes) => {\n let idx = bytes.i + 32 - nBytes\n\n const bits = sequence[0][0] as 8\n let result = BigInt(bytes.v[signGetters[bits]](idx))\n idx += bits\n\n for (let i = 1; i < sequence.length; i++) {\n const [bits, shift] = sequence[i] as [1, 8n]\n result = (result << shift) | BigInt(bytes.v[usignGetters[bits]](idx))\n idx += bits\n }\n\n bytes.i += 32\n return result\n })\n\n return createCodec(enc, dec, \"int\" + nBytes * 8)\n}\n\nexport const [\n int8,\n int16,\n int24,\n int32,\n int40,\n int48,\n int56,\n int64,\n int72,\n int80,\n int88,\n int96,\n int104,\n int112,\n int120,\n int128,\n int136,\n int144,\n int152,\n int160,\n int168,\n int176,\n int184,\n int192,\n int200,\n int208,\n int226,\n int224,\n int232,\n int240,\n int248,\n int256,\n] = range32.map(getCodec)\nexport const int = int256\n", "import { Codec } from \"../types\"\nimport { enhanceCodec } from \"../utils\"\n\nexport interface Decimal<T extends number = number> {\n value: bigint\n decimals: T\n}\n\nexport const Fixed = <D extends number>(\n baseCodec: Codec<bigint>,\n decimals: D,\n) => {\n const baseSelector = baseCodec.s\n const eBaseCodec = Object.assign([], baseCodec)\n eBaseCodec.s =\n (baseSelector[0] === \"u\"\n ? \"ufixed\" + baseSelector.slice(4)\n : \"fixed\" + baseSelector.slice(3)) +\n \"x\" +\n decimals\n return enhanceCodec<bigint, Decimal<D>>(\n eBaseCodec,\n (x) => x.value,\n (value) => ({ value, decimals }),\n )\n}\n", "import { mergeUint8 } from \"@unstoppablejs/utils\"\nimport type { Codec, Decoder, Encoder } from \"../types\"\nimport { toInternalBytes, createCodec } from \"../internal\"\nimport { uint } from \"./Uint\"\n\nconst dynamicEnc = <\n A extends Array<Encoder<any>>,\n OT extends { [K in keyof A]: A[K] extends Encoder<infer D> ? D : unknown },\n>(\n ...encoders: A\n): Encoder<[...OT]> => {\n const res = ((values) => {\n const mapped = values.map((value, idx) => encoders[idx](value))\n const resultArray = new Array<Uint8Array>(encoders.length)\n const dinamics = []\n let len = 0n\n for (let i = 0; i < encoders.length; i++) {\n if (encoders[i].d) {\n dinamics.push(i)\n len += 32n\n } else {\n resultArray[i] = mapped[i]\n len += BigInt(mapped[i].length)\n }\n }\n\n dinamics.forEach((idx) => {\n resultArray[idx] = uint[0](len)\n const data = mapped[idx]\n resultArray.push(data)\n len += BigInt(data.length)\n })\n\n return mergeUint8(...resultArray)\n }) as Encoder<[...OT]>\n\n res.d = true\n return res\n}\n\nconst staticEnc = <\n A extends Array<Encoder<any>>,\n OT extends { [K in keyof A]: A[K] extends Encoder<infer D> ? D : unknown },\n>(\n ...encoders: A\n) =>\n ((values) =>\n mergeUint8(...values.map((value, idx) => encoders[idx](value)))) as Encoder<\n [...OT]\n >\n\nconst staticDec = <\n A extends Array<Decoder<any>>,\n OT extends { [K in keyof A]: A[K] extends Decoder<infer D> ? D : unknown },\n>(\n ...decoders: A\n): Decoder<[...OT]> =>\n toInternalBytes(\n (bytes) => decoders.map((decoder) => decoder(bytes)) as [...OT],\n )\nconst dynamicDec = <\n A extends Array<Decoder<any>>,\n OT extends { [K in keyof A]: A[K] extends Decoder<infer D> ? D : unknown },\n>(\n ...decoders: A\n): Decoder<[...OT]> => {\n const res: Decoder<[...OT]> = toInternalBytes((bytes) => {\n const result = new Array(decoders.length) as [...OT]\n let start = bytes.i\n for (let i = 0; i < decoders.length; i++) {\n if (decoders[i].d) {\n const offset = Number(uint[1](bytes))\n const current = bytes.i\n bytes.i = start + offset\n result[i] = decoders[i](bytes)\n bytes.i = current\n } else {\n result[i] = decoders[i](bytes)\n }\n }\n return result\n })\n res.d = true\n return res\n}\n\nexport const Tuple = <\n A extends Array<Codec<any>>,\n OT extends { [K in keyof A]: A[K] extends Codec<infer D> ? D : unknown },\n>(\n ...codecs: A\n): Codec<[...OT]> => {\n const isDyn = codecs.some((c) => c.d)\n const [enc, dec] = isDyn\n ? ([dynamicEnc, dynamicDec] as const)\n : ([staticEnc, staticDec] as const)\n\n const res: Codec<[...OT]> = createCodec(\n enc(...codecs.map(([encoder]) => encoder)),\n dec(...codecs.map(([, decoder]) => decoder)),\n `(${codecs.map((c) => c.s).join(\",\")})`,\n )\n res.d = isDyn\n return res\n}\n", "import { Codec, StringRecord } from \"../types\"\nimport { enhanceCodec } from \"../utils\"\nimport { Tuple } from \"./Tuple\"\n\nexport const Struct = <\n A extends StringRecord<Codec<any>>,\n OT extends { [K in keyof A]: A[K] extends Codec<infer D> ? D : unknown },\n>(\n codecs: A,\n): Codec<OT> => {\n const keys = Object.keys(codecs)\n return enhanceCodec(\n Tuple(...Object.values(codecs)),\n (input: OT) => keys.map((k) => input[k]),\n (tuple: Array<any>) =>\n Object.fromEntries(tuple.map((value, idx) => [keys[idx], value])) as OT,\n )\n}\n", "import { mergeUint8 } from \"@unstoppablejs/utils\"\nimport { toInternalBytes, createCodec } from \"../internal\"\nimport { Codec, Decoder, Encoder } from \"../types\"\nimport { uint } from \"./Uint\"\n\nconst vectorEnc = <T>(inner: Encoder<T>, size?: number): Encoder<Array<T>> => {\n const result = ((value) => {\n const isNotFixed = size == null ? 1 : 0\n const actualSize = isNotFixed ? value.length : size!\n let data: Array<Uint8Array>\n if (inner.d) {\n data = new Array<Uint8Array>(actualSize * 2)\n let offset = actualSize * 32\n for (let i = 0; i < actualSize; i++) {\n const encoded = inner(value[i])\n data[i] = uint.enc(BigInt(offset))\n offset += encoded.byteLength\n data[i + actualSize] = encoded\n }\n } else {\n data = new Array<Uint8Array>(actualSize)\n for (let i = 0; i < actualSize; i++) data[i] = inner(value[i])\n }\n if (isNotFixed) data!.unshift(uint.enc(BigInt(value.length)))\n return mergeUint8(...data)\n }) as Encoder<Array<T>>\n result.d = true\n return result\n}\n\nconst vectorDec = <T>(getter: Decoder<T>, size?: number): Decoder<Array<T>> => {\n const decoder = toInternalBytes((bytes) => {\n const nElements = size! >= 0 ? size! : Number(uint[1](bytes))\n const decoded = new Array(nElements)\n\n if (getter.d) {\n const init = bytes.i\n let current = init\n for (let i = 0; i < nElements; i++) {\n bytes.i = current\n const offset = Number(uint.dec(bytes))\n current = bytes.i\n bytes.i = init + offset\n decoded[i] = getter(bytes)\n }\n } else {\n for (let i = 0; i < nElements; i++) {\n decoded[i] = getter(bytes)\n }\n }\n\n return decoded\n })\n decoder.d = true\n return decoder\n}\n\nexport const Vector = <T>(inner: Codec<T>, size?: number): Codec<Array<T>> => {\n const codec = createCodec(\n vectorEnc(inner[0], size),\n vectorDec(inner[1], size),\n inner.s + `[${size == null ? \"\" : size}]`,\n )\n if (size == null) codec.d = true\n return codec\n}\n"],
|
5
|
+
"mappings": "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",
|
6
6
|
"names": []
|
7
7
|
}
|
package/dist/solidity-codecs.mjs
CHANGED
@@ -5,26 +5,17 @@ var __publicField = (obj, key, value) => {
|
|
5
5
|
return value;
|
6
6
|
};
|
7
7
|
|
8
|
-
// src/
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
// src/internal/createCodec.ts
|
9
|
+
var createCodec = (encoder, decoder, selector) => {
|
10
|
+
;
|
11
|
+
encoder.s = selector;
|
12
|
+
decoder.s = selector;
|
12
13
|
const result = [encoder, decoder];
|
13
14
|
result.enc = encoder;
|
14
15
|
result.dec = decoder;
|
16
|
+
result.s = selector;
|
15
17
|
return result;
|
16
18
|
};
|
17
|
-
var dyn = (input, output) => {
|
18
|
-
if (input.dyn)
|
19
|
-
output.dyn = true;
|
20
|
-
return output;
|
21
|
-
};
|
22
|
-
var enhanceEncoder = (encoder, mapper) => dyn(encoder, (value) => encoder(mapper(value)));
|
23
|
-
var enhanceDecoder = (decoder, mapper) => dyn(decoder, (value) => mapper(decoder(value)));
|
24
|
-
var enhanceCodec = (codec, toFrom, fromTo) => dyn(codec, createCodec(enhanceEncoder(codec[0], toFrom), enhanceDecoder(codec[1], fromTo)));
|
25
|
-
|
26
|
-
// src/codecs/address.ts
|
27
|
-
import { fromHex as fromHex2, toHex } from "@unstoppablejs/utils";
|
28
19
|
|
29
20
|
// src/internal/toInternalBytes.ts
|
30
21
|
import { fromHex } from "@unstoppablejs/utils";
|
@@ -41,7 +32,21 @@ var toInternalBytes = (fn) => (buffer) => fn(buffer instanceof InternalUint8Arra
|
|
41
32
|
// src/internal/range32.ts
|
42
33
|
var range32 = Array(32).fill(0).map((_, idx) => idx + 1);
|
43
34
|
|
35
|
+
// src/utils.ts
|
36
|
+
import { keccak_256 } from "@noble/hashes/sha3";
|
37
|
+
var keccak = keccak_256;
|
38
|
+
var dyn = (input, output) => {
|
39
|
+
if (input.d)
|
40
|
+
output.d = true;
|
41
|
+
output.s = input.s;
|
42
|
+
return output;
|
43
|
+
};
|
44
|
+
var enhanceEncoder = (encoder, mapper) => dyn(encoder, (value) => encoder(mapper(value)));
|
45
|
+
var enhanceDecoder = (decoder, mapper) => dyn(decoder, (value) => mapper(decoder(value)));
|
46
|
+
var enhanceCodec = (codec, toFrom, fromTo) => dyn(codec, createCodec(enhanceEncoder(codec[0], toFrom), enhanceDecoder(codec[1], fromTo), codec.s));
|
47
|
+
|
44
48
|
// src/codecs/address.ts
|
49
|
+
import { fromHex as fromHex2, toHex } from "@unstoppablejs/utils";
|
45
50
|
var address = createCodec((input) => {
|
46
51
|
const result = new Uint8Array(32);
|
47
52
|
result.set(fromHex2(input), 12);
|
@@ -58,7 +63,7 @@ var address = createCodec((input) => {
|
|
58
63
|
result.push(parseInt(hashedAddres[i], 16) > 7 ? char.toUpperCase() : char);
|
59
64
|
}
|
60
65
|
return result.join("");
|
61
|
-
}));
|
66
|
+
}), "address");
|
62
67
|
|
63
68
|
// src/codecs/Uint.ts
|
64
69
|
var getCodec = (nBytes) => {
|
@@ -79,7 +84,7 @@ var getCodec = (nBytes) => {
|
|
79
84
|
result = result << 64n | bytes33.v.getBigUint64(idx);
|
80
85
|
bytes33.i = nextBlock;
|
81
86
|
return result;
|
82
|
-
}));
|
87
|
+
}), "uint" + nBytes * 8);
|
83
88
|
};
|
84
89
|
var [
|
85
90
|
uint8,
|
@@ -118,7 +123,9 @@ var [
|
|
118
123
|
var uint = uint256;
|
119
124
|
|
120
125
|
// src/codecs/bool.ts
|
121
|
-
var
|
126
|
+
var base = Object.assign([], uint8);
|
127
|
+
base.s = "bool";
|
128
|
+
var bool = enhanceCodec(base, (value) => value ? 1n : 0n, Boolean);
|
122
129
|
|
123
130
|
// src/codecs/bytes.ts
|
124
131
|
import { mergeUint8 } from "@unstoppablejs/utils";
|
@@ -131,24 +138,26 @@ var bytesEnc = (val) => {
|
|
131
138
|
}
|
132
139
|
return mergeUint8(...args);
|
133
140
|
};
|
134
|
-
bytesEnc.
|
141
|
+
bytesEnc.d = true;
|
135
142
|
var bytesDec = toInternalBytes((bytes33) => {
|
136
143
|
let nElements = Number(uint[1](bytes33));
|
137
|
-
const result = new Uint8Array(bytes33.buffer, bytes33.i
|
144
|
+
const result = new Uint8Array(bytes33.buffer.slice(bytes33.i, bytes33.i + nElements));
|
138
145
|
bytes33.i += nElements;
|
139
146
|
const extra = nElements % 32;
|
140
147
|
if (extra > 0)
|
141
148
|
bytes33.i += 32 - extra;
|
142
149
|
return result;
|
143
150
|
});
|
144
|
-
bytesDec.
|
145
|
-
var bytes = createCodec(bytesEnc, bytesDec);
|
146
|
-
bytes.
|
151
|
+
bytesDec.d = true;
|
152
|
+
var bytes = createCodec(bytesEnc, bytesDec, "bytes");
|
153
|
+
bytes.d = true;
|
147
154
|
|
148
155
|
// src/codecs/str.ts
|
149
156
|
var textEncoder = new TextEncoder();
|
150
157
|
var textDecoder = new TextDecoder();
|
151
|
-
var
|
158
|
+
var base2 = Object.assign([], bytes);
|
159
|
+
base2.s = "string";
|
160
|
+
var str = enhanceCodec(base2, textEncoder.encode.bind(textEncoder), textDecoder.decode.bind(textDecoder));
|
152
161
|
|
153
162
|
// src/codecs/BytesX.ts
|
154
163
|
var bytesEnc2 = (nBytes) => (bytes33) => {
|
@@ -159,7 +168,7 @@ var bytesEnc2 = (nBytes) => (bytes33) => {
|
|
159
168
|
return result;
|
160
169
|
};
|
161
170
|
var bytesDec2 = (nBytes) => toInternalBytes((bytes33) => {
|
162
|
-
const result = new Uint8Array(bytes33.buffer, bytes33.i
|
171
|
+
const result = new Uint8Array(bytes33.buffer.slice(bytes33.i, bytes33.i + nBytes));
|
163
172
|
bytes33.i += 32;
|
164
173
|
return result;
|
165
174
|
});
|
@@ -196,7 +205,7 @@ var [
|
|
196
205
|
bytes30,
|
197
206
|
bytes31,
|
198
207
|
bytes32
|
199
|
-
] = range32.map((nBytes) => createCodec(bytesEnc2(nBytes), bytesDec2(nBytes)));
|
208
|
+
] = range32.map((nBytes) => createCodec(bytesEnc2(nBytes), bytesDec2(nBytes), "bytes" + nBytes));
|
200
209
|
|
201
210
|
// src/codecs/Int.ts
|
202
211
|
var signGetters = {
|
@@ -260,7 +269,7 @@ var getCodec2 = (nBytes) => {
|
|
260
269
|
bytes33.i += 32;
|
261
270
|
return result;
|
262
271
|
});
|
263
|
-
return createCodec(enc, dec);
|
272
|
+
return createCodec(enc, dec, "int" + nBytes * 8);
|
264
273
|
};
|
265
274
|
var [
|
266
275
|
int8,
|
@@ -299,7 +308,12 @@ var [
|
|
299
308
|
var int = int256;
|
300
309
|
|
301
310
|
// src/codecs/Fixed.ts
|
302
|
-
var Fixed = (baseCodec, decimals) =>
|
311
|
+
var Fixed = (baseCodec, decimals) => {
|
312
|
+
const baseSelector = baseCodec.s;
|
313
|
+
const eBaseCodec = Object.assign([], baseCodec);
|
314
|
+
eBaseCodec.s = (baseSelector[0] === "u" ? "ufixed" + baseSelector.slice(4) : "fixed" + baseSelector.slice(3)) + "x" + decimals;
|
315
|
+
return enhanceCodec(eBaseCodec, (x) => x.value, (value) => ({ value, decimals }));
|
316
|
+
};
|
303
317
|
|
304
318
|
// src/codecs/Tuple.ts
|
305
319
|
import { mergeUint8 as mergeUint82 } from "@unstoppablejs/utils";
|
@@ -310,7 +324,7 @@ var dynamicEnc = (...encoders) => {
|
|
310
324
|
const dinamics = [];
|
311
325
|
let len = 0n;
|
312
326
|
for (let i = 0; i < encoders.length; i++) {
|
313
|
-
if (encoders[i].
|
327
|
+
if (encoders[i].d) {
|
314
328
|
dinamics.push(i);
|
315
329
|
len += 32n;
|
316
330
|
} else {
|
@@ -326,7 +340,7 @@ var dynamicEnc = (...encoders) => {
|
|
326
340
|
});
|
327
341
|
return mergeUint82(...resultArray);
|
328
342
|
};
|
329
|
-
res.
|
343
|
+
res.d = true;
|
330
344
|
return res;
|
331
345
|
};
|
332
346
|
var staticEnc = (...encoders) => (values) => mergeUint82(...values.map((value, idx) => encoders[idx](value)));
|
@@ -336,7 +350,7 @@ var dynamicDec = (...decoders) => {
|
|
336
350
|
const result = new Array(decoders.length);
|
337
351
|
let start = bytes33.i;
|
338
352
|
for (let i = 0; i < decoders.length; i++) {
|
339
|
-
if (decoders[i].
|
353
|
+
if (decoders[i].d) {
|
340
354
|
const offset = Number(uint[1](bytes33));
|
341
355
|
const current = bytes33.i;
|
342
356
|
bytes33.i = start + offset;
|
@@ -348,14 +362,14 @@ var dynamicDec = (...decoders) => {
|
|
348
362
|
}
|
349
363
|
return result;
|
350
364
|
});
|
351
|
-
res.
|
365
|
+
res.d = true;
|
352
366
|
return res;
|
353
367
|
};
|
354
368
|
var Tuple = (...codecs) => {
|
355
|
-
const isDyn = codecs.some((c) => c.
|
369
|
+
const isDyn = codecs.some((c) => c.d);
|
356
370
|
const [enc, dec] = isDyn ? [dynamicEnc, dynamicDec] : [staticEnc, staticDec];
|
357
|
-
const res = createCodec(enc(...codecs.map(([encoder]) => encoder)), dec(...codecs.map(([, decoder]) => decoder)));
|
358
|
-
res.
|
371
|
+
const res = createCodec(enc(...codecs.map(([encoder]) => encoder)), dec(...codecs.map(([, decoder]) => decoder)), `(${codecs.map((c) => c.s).join(",")})`);
|
372
|
+
res.d = isDyn;
|
359
373
|
return res;
|
360
374
|
};
|
361
375
|
|
@@ -372,7 +386,7 @@ var vectorEnc = (inner, size) => {
|
|
372
386
|
const isNotFixed = size == null ? 1 : 0;
|
373
387
|
const actualSize = isNotFixed ? value.length : size;
|
374
388
|
let data;
|
375
|
-
if (inner.
|
389
|
+
if (inner.d) {
|
376
390
|
data = new Array(actualSize * 2);
|
377
391
|
let offset = actualSize * 32;
|
378
392
|
for (let i = 0; i < actualSize; i++) {
|
@@ -390,14 +404,14 @@ var vectorEnc = (inner, size) => {
|
|
390
404
|
data.unshift(uint.enc(BigInt(value.length)));
|
391
405
|
return mergeUint83(...data);
|
392
406
|
};
|
393
|
-
result.
|
407
|
+
result.d = true;
|
394
408
|
return result;
|
395
409
|
};
|
396
410
|
var vectorDec = (getter, size) => {
|
397
411
|
const decoder = toInternalBytes((bytes33) => {
|
398
412
|
const nElements = size >= 0 ? size : Number(uint[1](bytes33));
|
399
413
|
const decoded = new Array(nElements);
|
400
|
-
if (getter.
|
414
|
+
if (getter.d) {
|
401
415
|
const init = bytes33.i;
|
402
416
|
let current = init;
|
403
417
|
for (let i = 0; i < nElements; i++) {
|
@@ -414,13 +428,13 @@ var vectorDec = (getter, size) => {
|
|
414
428
|
}
|
415
429
|
return decoded;
|
416
430
|
});
|
417
|
-
decoder.
|
431
|
+
decoder.d = true;
|
418
432
|
return decoder;
|
419
433
|
};
|
420
434
|
var Vector = (inner, size) => {
|
421
|
-
const codec = createCodec(vectorEnc(inner[0], size), vectorDec(inner[1], size));
|
435
|
+
const codec = createCodec(vectorEnc(inner[0], size), vectorDec(inner[1], size), inner.s + `[${size == null ? "" : size}]`);
|
422
436
|
if (size == null)
|
423
|
-
codec.
|
437
|
+
codec.d = true;
|
424
438
|
return codec;
|
425
439
|
};
|
426
440
|
export {
|
@@ -463,7 +477,6 @@ export {
|
|
463
477
|
bytes7,
|
464
478
|
bytes8,
|
465
479
|
bytes9,
|
466
|
-
createCodec,
|
467
480
|
enhanceCodec,
|
468
481
|
enhanceDecoder,
|
469
482
|
enhanceEncoder,
|