@wormhole-foundation/sdk-base 0.4.2-beta.2 → 0.4.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.
- package/dist/cjs/constants/chains.d.ts +7 -15
- package/dist/cjs/constants/chains.d.ts.map +1 -1
- package/dist/cjs/constants/chains.js +0 -4
- package/dist/cjs/constants/chains.js.map +1 -1
- package/dist/cjs/constants/circle.d.ts +2 -2
- package/dist/cjs/constants/contracts/core.d.ts +1 -1
- package/dist/cjs/constants/contracts/core.d.ts.map +1 -1
- package/dist/cjs/constants/contracts/core.js +0 -1
- package/dist/cjs/constants/contracts/core.js.map +1 -1
- package/dist/cjs/constants/contracts/index.d.ts +2 -6
- package/dist/cjs/constants/contracts/index.d.ts.map +1 -1
- package/dist/cjs/constants/contracts/tokenBridgeRelayer.js.map +1 -1
- package/dist/cjs/constants/finality.d.ts +6 -10
- package/dist/cjs/constants/finality.d.ts.map +1 -1
- package/dist/cjs/constants/finality.js +4 -11
- package/dist/cjs/constants/finality.js.map +1 -1
- package/dist/cjs/constants/nativeChainIds.d.ts +3 -33
- package/dist/cjs/constants/nativeChainIds.d.ts.map +1 -1
- package/dist/cjs/constants/nativeChainIds.js +0 -18
- package/dist/cjs/constants/nativeChainIds.js.map +1 -1
- package/dist/cjs/constants/platforms.d.ts +3 -7
- package/dist/cjs/constants/platforms.d.ts.map +1 -1
- package/dist/cjs/constants/platforms.js +0 -4
- package/dist/cjs/constants/platforms.js.map +1 -1
- package/dist/cjs/constants/rpc.d.ts.map +1 -1
- package/dist/cjs/constants/rpc.js +0 -4
- package/dist/cjs/constants/rpc.js.map +1 -1
- package/dist/cjs/constants/tokens/mainnet.d.ts +0 -128
- package/dist/cjs/constants/tokens/mainnet.d.ts.map +1 -1
- package/dist/cjs/constants/tokens/mainnet.js +0 -116
- package/dist/cjs/constants/tokens/mainnet.js.map +1 -1
- package/dist/cjs/constants/tokens/mainnetDetails.d.ts +1 -12
- package/dist/cjs/constants/tokens/mainnetDetails.d.ts.map +1 -1
- package/dist/cjs/constants/tokens/mainnetDetails.js +0 -9
- package/dist/cjs/constants/tokens/mainnetDetails.js.map +1 -1
- package/dist/cjs/utils/amount.d.ts +0 -12
- package/dist/cjs/utils/amount.d.ts.map +1 -1
- package/dist/cjs/utils/amount.js +1 -19
- package/dist/cjs/utils/amount.js.map +1 -1
- package/dist/cjs/utils/layout/deserialize.d.ts +2 -6
- package/dist/cjs/utils/layout/deserialize.d.ts.map +1 -1
- package/dist/cjs/utils/layout/deserialize.js +86 -99
- package/dist/cjs/utils/layout/deserialize.js.map +1 -1
- package/dist/cjs/utils/layout/discriminate.d.ts +2 -2
- package/dist/cjs/utils/layout/discriminate.d.ts.map +1 -1
- package/dist/cjs/utils/layout/discriminate.js +29 -63
- package/dist/cjs/utils/layout/discriminate.js.map +1 -1
- package/dist/cjs/utils/layout/fixedDynamic.d.ts +10 -15
- package/dist/cjs/utils/layout/fixedDynamic.d.ts.map +1 -1
- package/dist/cjs/utils/layout/fixedDynamic.js +34 -46
- package/dist/cjs/utils/layout/fixedDynamic.js.map +1 -1
- package/dist/cjs/utils/layout/index.d.ts +2 -3
- package/dist/cjs/utils/layout/index.d.ts.map +1 -1
- package/dist/cjs/utils/layout/index.js +3 -6
- package/dist/cjs/utils/layout/index.js.map +1 -1
- package/dist/cjs/utils/layout/items.js +1 -1
- package/dist/cjs/utils/layout/items.js.map +1 -1
- package/dist/cjs/utils/layout/layout.d.ts +38 -46
- package/dist/cjs/utils/layout/layout.d.ts.map +1 -1
- package/dist/cjs/utils/layout/layout.js +7 -4
- package/dist/cjs/utils/layout/layout.js.map +1 -1
- package/dist/cjs/utils/layout/serialize.d.ts +3 -12
- package/dist/cjs/utils/layout/serialize.d.ts.map +1 -1
- package/dist/cjs/utils/layout/serialize.js +54 -82
- package/dist/cjs/utils/layout/serialize.js.map +1 -1
- package/dist/cjs/utils/layout/size.d.ts +1 -2
- package/dist/cjs/utils/layout/size.d.ts.map +1 -1
- package/dist/cjs/utils/layout/size.js +65 -100
- package/dist/cjs/utils/layout/size.js.map +1 -1
- package/dist/cjs/utils/layout/utils.d.ts +4 -46
- package/dist/cjs/utils/layout/utils.d.ts.map +1 -1
- package/dist/cjs/utils/layout/utils.js +20 -54
- package/dist/cjs/utils/layout/utils.js.map +1 -1
- package/dist/cjs/utils/metaprogramming.d.ts +0 -3
- package/dist/cjs/utils/metaprogramming.d.ts.map +1 -1
- package/dist/cjs/utils/metaprogramming.js.map +1 -1
- package/dist/esm/constants/chains.d.ts +7 -15
- package/dist/esm/constants/chains.d.ts.map +1 -1
- package/dist/esm/constants/chains.js +0 -4
- package/dist/esm/constants/chains.js.map +1 -1
- package/dist/esm/constants/circle.d.ts +2 -2
- package/dist/esm/constants/contracts/core.d.ts +1 -1
- package/dist/esm/constants/contracts/core.d.ts.map +1 -1
- package/dist/esm/constants/contracts/core.js +0 -1
- package/dist/esm/constants/contracts/core.js.map +1 -1
- package/dist/esm/constants/contracts/index.d.ts +2 -6
- package/dist/esm/constants/contracts/index.d.ts.map +1 -1
- package/dist/esm/constants/contracts/tokenBridgeRelayer.js.map +1 -1
- package/dist/esm/constants/finality.d.ts +6 -10
- package/dist/esm/constants/finality.d.ts.map +1 -1
- package/dist/esm/constants/finality.js +4 -11
- package/dist/esm/constants/finality.js.map +1 -1
- package/dist/esm/constants/nativeChainIds.d.ts +3 -33
- package/dist/esm/constants/nativeChainIds.d.ts.map +1 -1
- package/dist/esm/constants/nativeChainIds.js +0 -18
- package/dist/esm/constants/nativeChainIds.js.map +1 -1
- package/dist/esm/constants/platforms.d.ts +3 -7
- package/dist/esm/constants/platforms.d.ts.map +1 -1
- package/dist/esm/constants/platforms.js +0 -4
- package/dist/esm/constants/platforms.js.map +1 -1
- package/dist/esm/constants/rpc.d.ts.map +1 -1
- package/dist/esm/constants/rpc.js +0 -4
- package/dist/esm/constants/rpc.js.map +1 -1
- package/dist/esm/constants/tokens/mainnet.d.ts +0 -128
- package/dist/esm/constants/tokens/mainnet.d.ts.map +1 -1
- package/dist/esm/constants/tokens/mainnet.js +0 -116
- package/dist/esm/constants/tokens/mainnet.js.map +1 -1
- package/dist/esm/constants/tokens/mainnetDetails.d.ts +1 -12
- package/dist/esm/constants/tokens/mainnetDetails.d.ts.map +1 -1
- package/dist/esm/constants/tokens/mainnetDetails.js +0 -9
- package/dist/esm/constants/tokens/mainnetDetails.js.map +1 -1
- package/dist/esm/utils/amount.d.ts +0 -12
- package/dist/esm/utils/amount.d.ts.map +1 -1
- package/dist/esm/utils/amount.js +0 -16
- package/dist/esm/utils/amount.js.map +1 -1
- package/dist/esm/utils/layout/deserialize.d.ts +2 -6
- package/dist/esm/utils/layout/deserialize.d.ts.map +1 -1
- package/dist/esm/utils/layout/deserialize.js +88 -101
- package/dist/esm/utils/layout/deserialize.js.map +1 -1
- package/dist/esm/utils/layout/discriminate.d.ts +2 -2
- package/dist/esm/utils/layout/discriminate.d.ts.map +1 -1
- package/dist/esm/utils/layout/discriminate.js +28 -62
- package/dist/esm/utils/layout/discriminate.js.map +1 -1
- package/dist/esm/utils/layout/fixedDynamic.d.ts +10 -15
- package/dist/esm/utils/layout/fixedDynamic.d.ts.map +1 -1
- package/dist/esm/utils/layout/fixedDynamic.js +34 -46
- package/dist/esm/utils/layout/fixedDynamic.js.map +1 -1
- package/dist/esm/utils/layout/index.d.ts +2 -3
- package/dist/esm/utils/layout/index.d.ts.map +1 -1
- package/dist/esm/utils/layout/index.js +1 -2
- package/dist/esm/utils/layout/index.js.map +1 -1
- package/dist/esm/utils/layout/items.js +1 -1
- package/dist/esm/utils/layout/items.js.map +1 -1
- package/dist/esm/utils/layout/layout.d.ts +38 -46
- package/dist/esm/utils/layout/layout.d.ts.map +1 -1
- package/dist/esm/utils/layout/layout.js +3 -3
- package/dist/esm/utils/layout/layout.js.map +1 -1
- package/dist/esm/utils/layout/serialize.d.ts +3 -12
- package/dist/esm/utils/layout/serialize.d.ts.map +1 -1
- package/dist/esm/utils/layout/serialize.js +53 -80
- package/dist/esm/utils/layout/serialize.js.map +1 -1
- package/dist/esm/utils/layout/size.d.ts +1 -2
- package/dist/esm/utils/layout/size.d.ts.map +1 -1
- package/dist/esm/utils/layout/size.js +65 -99
- package/dist/esm/utils/layout/size.js.map +1 -1
- package/dist/esm/utils/layout/utils.d.ts +4 -46
- package/dist/esm/utils/layout/utils.d.ts.map +1 -1
- package/dist/esm/utils/layout/utils.js +17 -42
- package/dist/esm/utils/layout/utils.js.map +1 -1
- package/dist/esm/utils/metaprogramming.d.ts +0 -3
- package/dist/esm/utils/metaprogramming.d.ts.map +1 -1
- package/dist/esm/utils/metaprogramming.js.map +1 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1,57 +1,52 @@
|
|
|
1
|
-
import { numberMaxSize, } from "./layout";
|
|
1
|
+
import { isNumType, isBytesType, numberMaxSize, } from "./layout";
|
|
2
2
|
import { calcLayoutSize } from "./size";
|
|
3
|
-
import {
|
|
4
|
-
const cursorWrite = (cursor, bytes) => {
|
|
5
|
-
cursor.bytes.set(bytes, cursor.offset);
|
|
6
|
-
cursor.offset += bytes.length;
|
|
7
|
-
};
|
|
3
|
+
import { checkUint8ArrayDeeplyEqual, checkUint8ArraySize, checkNumEquals, findIdLayoutPair } from "./utils";
|
|
8
4
|
export function serializeLayout(layout, data, encoded, offset = 0) {
|
|
9
|
-
|
|
10
|
-
internalSerializeLayout(layout, data, cursor);
|
|
11
|
-
if (!encoded && cursor.offset !== cursor.bytes.length)
|
|
12
|
-
throw new Error(`encoded data is shorter than expected: ${cursor.bytes.length} > ${cursor.offset}`);
|
|
13
|
-
return (encoded ? cursor.offset : cursor.bytes);
|
|
5
|
+
return (internalSerializeLayout(layout, data, encoded, offset));
|
|
14
6
|
}
|
|
15
7
|
//see numberMaxSize comment in layout.ts
|
|
16
8
|
const maxAllowedNumberVal = 2 ** (numberMaxSize * 8);
|
|
17
|
-
export function serializeNum(
|
|
9
|
+
export function serializeNum(encoded, offset, val, bytes, endianness = "big", signed = false) {
|
|
18
10
|
if (!signed && val < 0)
|
|
19
11
|
throw new Error(`Value ${val} is negative but unsigned`);
|
|
20
12
|
if (typeof val === "number") {
|
|
21
13
|
if (!Number.isInteger(val))
|
|
22
14
|
throw new Error(`Value ${val} is not an integer`);
|
|
23
|
-
if (
|
|
15
|
+
if (bytes > numberMaxSize) {
|
|
24
16
|
if (val >= maxAllowedNumberVal)
|
|
25
17
|
throw new Error(`Value ${val} is too large to be safely converted into an integer`);
|
|
26
18
|
if (signed && val <= -maxAllowedNumberVal)
|
|
27
19
|
throw new Error(`Value ${val} is too small to be safely converted into an integer`);
|
|
28
20
|
}
|
|
29
21
|
}
|
|
30
|
-
const bound = 2n ** BigInt(
|
|
22
|
+
const bound = 2n ** BigInt(bytes * 8);
|
|
31
23
|
if (val >= bound)
|
|
32
|
-
throw new Error(`Value ${val} is too large for ${
|
|
24
|
+
throw new Error(`Value ${val} is too large for ${bytes} bytes`);
|
|
33
25
|
if (signed && val < -bound)
|
|
34
|
-
throw new Error(`Value ${val} is too small for ${
|
|
26
|
+
throw new Error(`Value ${val} is too small for ${bytes} bytes`);
|
|
35
27
|
//correctly handles both signed and unsigned values
|
|
36
|
-
for (let i = 0; i <
|
|
37
|
-
|
|
38
|
-
Number((BigInt(val) >> BigInt(8 * (endianness === "big" ?
|
|
39
|
-
|
|
28
|
+
for (let i = 0; i < bytes; ++i)
|
|
29
|
+
encoded[offset + i] =
|
|
30
|
+
Number((BigInt(val) >> BigInt(8 * (endianness === "big" ? bytes - i - 1 : i)) & 0xffn));
|
|
31
|
+
return offset + bytes;
|
|
40
32
|
}
|
|
41
|
-
function internalSerializeLayout(layout, data,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
for (const item of layout)
|
|
33
|
+
function internalSerializeLayout(layout, data, encoded, offset = 0) {
|
|
34
|
+
let ret = encoded ?? new Uint8Array(calcLayoutSize(layout, data));
|
|
35
|
+
if (Array.isArray(layout))
|
|
36
|
+
for (let i = 0; i < layout.length; ++i)
|
|
46
37
|
try {
|
|
47
|
-
|
|
38
|
+
offset =
|
|
39
|
+
serializeLayoutItem(layout[i], data[layout[i].name], ret, offset);
|
|
48
40
|
}
|
|
49
41
|
catch (e) {
|
|
50
|
-
e.message = `when serializing item '${
|
|
42
|
+
e.message = `when serializing item '${layout[i].name}': ${e.message}`;
|
|
51
43
|
throw e;
|
|
52
44
|
}
|
|
45
|
+
else
|
|
46
|
+
offset = serializeLayoutItem(layout, data, ret, offset);
|
|
47
|
+
return encoded === undefined ? ret : offset;
|
|
53
48
|
}
|
|
54
|
-
function serializeLayoutItem(item, data,
|
|
49
|
+
function serializeLayoutItem(item, data, encoded, offset) {
|
|
55
50
|
switch (item.binary) {
|
|
56
51
|
case "int":
|
|
57
52
|
case "uint": {
|
|
@@ -66,78 +61,56 @@ function serializeLayoutItem(item, data, cursor) {
|
|
|
66
61
|
return item.custom.from;
|
|
67
62
|
return item.custom !== undefined ? item.custom.from(data) : data;
|
|
68
63
|
})();
|
|
69
|
-
|
|
64
|
+
offset =
|
|
65
|
+
serializeNum(encoded, offset, value, item.size, item.endianness, item.binary === "int");
|
|
70
66
|
break;
|
|
71
67
|
}
|
|
72
68
|
case "bytes": {
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
cursor.offset += item.lengthSize;
|
|
76
|
-
if ("layout" in item) {
|
|
77
|
-
const { custom } = item;
|
|
78
|
-
let layoutData;
|
|
79
|
-
if (custom === undefined)
|
|
80
|
-
layoutData = data;
|
|
81
|
-
else if (typeof custom.from !== "function")
|
|
82
|
-
layoutData = custom.from;
|
|
83
|
-
else
|
|
84
|
-
layoutData = custom.from(data);
|
|
85
|
-
internalSerializeLayout(item.layout, layoutData, cursor);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
const { custom } = item;
|
|
89
|
-
if (isBytesType(custom)) {
|
|
69
|
+
const value = (() => {
|
|
70
|
+
if (isBytesType(item.custom)) {
|
|
90
71
|
if (!("omit" in item && item.omit))
|
|
91
|
-
|
|
92
|
-
|
|
72
|
+
checkUint8ArrayDeeplyEqual(item.custom, data);
|
|
73
|
+
return item.custom;
|
|
93
74
|
}
|
|
94
|
-
|
|
95
|
-
//no proper way to deeply check equality of custom.to and data
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
checkItemSize(item, cursor.offset - offset);
|
|
75
|
+
if (isBytesType(item?.custom?.from))
|
|
76
|
+
//no proper way to deeply check equality of item.custom.to and data in JS
|
|
77
|
+
return item.custom.from;
|
|
78
|
+
item = item;
|
|
79
|
+
const ret = item.custom !== undefined ? item.custom.from(data) : data;
|
|
80
|
+
if ("size" in item && item.size !== undefined)
|
|
81
|
+
checkUint8ArraySize(ret, item.size);
|
|
82
|
+
else if ("lengthSize" in item && item.lengthSize !== undefined)
|
|
83
|
+
offset =
|
|
84
|
+
serializeNum(encoded, offset, ret.length, item.lengthSize, item.lengthEndianness);
|
|
85
|
+
return ret;
|
|
86
|
+
})();
|
|
87
|
+
encoded.set(value, offset);
|
|
88
|
+
offset += value.length;
|
|
109
89
|
break;
|
|
110
90
|
}
|
|
111
91
|
case "array": {
|
|
112
92
|
if ("length" in item && item.length !== data.length)
|
|
113
93
|
throw new Error(`array length mismatch: layout length: ${item.length}, data length: ${data.length}`);
|
|
114
94
|
if ("lengthSize" in item && item.lengthSize !== undefined)
|
|
115
|
-
|
|
95
|
+
offset =
|
|
96
|
+
serializeNum(encoded, offset, data.length, item.lengthSize, item.lengthEndianness);
|
|
116
97
|
for (let i = 0; i < data.length; ++i)
|
|
117
|
-
internalSerializeLayout(item.layout, data[i],
|
|
98
|
+
offset = internalSerializeLayout(item.layout, data[i], encoded, offset);
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
case "object": {
|
|
102
|
+
offset = internalSerializeLayout(item.layout, data, encoded, offset);
|
|
118
103
|
break;
|
|
119
104
|
}
|
|
120
105
|
case "switch": {
|
|
121
106
|
const [idOrConversionId, layout] = findIdLayoutPair(item, data);
|
|
122
107
|
const idNum = (Array.isArray(idOrConversionId) ? idOrConversionId[0] : idOrConversionId);
|
|
123
|
-
serializeNum(idNum, item.idSize,
|
|
124
|
-
internalSerializeLayout(layout, data,
|
|
108
|
+
offset = serializeNum(encoded, offset, idNum, item.idSize, item.idEndianness);
|
|
109
|
+
offset = internalSerializeLayout(layout, data, encoded, offset);
|
|
125
110
|
break;
|
|
126
111
|
}
|
|
127
112
|
}
|
|
113
|
+
return offset;
|
|
128
114
|
}
|
|
129
115
|
;
|
|
130
|
-
//slightly hacky, but the only way to ensure that we are actually deserializing the
|
|
131
|
-
// right data without having to re-serialize the layout every time
|
|
132
|
-
export function getCachedSerializedFrom(item) {
|
|
133
|
-
const custom = item.custom;
|
|
134
|
-
if (!("cachedSerializedFrom" in custom)) {
|
|
135
|
-
custom.cachedSerializedFrom = serializeLayout(item.layout, custom.from);
|
|
136
|
-
if ("size" in item &&
|
|
137
|
-
item.size !== undefined &&
|
|
138
|
-
item.size !== custom.cachedSerializedFrom.length)
|
|
139
|
-
throw new Error(`Layout specification error: custom.from does not serialize to specified size`);
|
|
140
|
-
}
|
|
141
|
-
return custom.cachedSerializedFrom;
|
|
142
|
-
}
|
|
143
116
|
//# sourceMappingURL=serialize.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../../src/utils/layout/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../../src/utils/layout/serialize.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import { Layout, LayoutToType } from "./layout";
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function calcLayoutSize<const L extends Layout>(layout: L, data: LayoutToType<L>): number;
|
|
2
|
+
export declare function calcLayoutSize(layout: Layout, data?: LayoutToType<typeof layout>): number;
|
|
4
3
|
//# sourceMappingURL=size.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"size.d.ts","sourceRoot":"","sources":["../../../../src/utils/layout/size.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAEN,YAAY,
|
|
1
|
+
{"version":3,"file":"size.d.ts","sourceRoot":"","sources":["../../../../src/utils/layout/size.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAEN,YAAY,EAGb,MAAM,UAAU,CAAC;AAiGlB,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,YAAY,CAAC,OAAO,MAAM,CAAC,GACjC,MAAM,CAYR"}
|
|
@@ -1,122 +1,88 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { isBytesType, } from "./layout";
|
|
2
|
+
import { findIdLayoutPair } from "./utils";
|
|
3
|
+
function staticCalcItemSize(item) {
|
|
3
4
|
switch (item.binary) {
|
|
4
5
|
case "int":
|
|
5
|
-
case "uint":
|
|
6
|
+
case "uint": {
|
|
6
7
|
return item.size;
|
|
8
|
+
}
|
|
7
9
|
case "bytes": {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
if (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
const { custom } = item;
|
|
17
|
-
if (isBytesType(custom))
|
|
18
|
-
return lengthSize + custom.length; //assumed to equal item.size if it exists
|
|
19
|
-
if (isFixedBytesConversion(custom))
|
|
20
|
-
return lengthSize + custom.from.length; //assumed to equal item.size if it exists
|
|
21
|
-
if (custom === undefined)
|
|
22
|
-
return data ? lengthSize + checkItemSize(item, data.length) : null;
|
|
23
|
-
return data !== undefined ? lengthSize + checkItemSize(item, custom.from(data).length) : null;
|
|
10
|
+
if ("size" in item && item.size !== undefined)
|
|
11
|
+
return item.size;
|
|
12
|
+
if (isBytesType(item.custom))
|
|
13
|
+
return item.custom.length;
|
|
14
|
+
if (isBytesType(item?.custom?.from))
|
|
15
|
+
return item.custom.from.length;
|
|
16
|
+
throw new Error("Cannot statically determine size of dynamic bytes");
|
|
24
17
|
}
|
|
25
|
-
case "array":
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const layoutSize = internalCalcLayoutSize(item.layout);
|
|
30
|
-
if (layoutSize === null)
|
|
31
|
-
return null;
|
|
32
|
-
return length * layoutSize;
|
|
33
|
-
}
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
let size = 0;
|
|
37
|
-
if (length !== undefined && length !== data.length)
|
|
38
|
-
throw new Error(`array length mismatch: layout length: ${length}, data length: ${data.length}`);
|
|
39
|
-
else if ("lengthSize" in item && item.lengthSize !== undefined)
|
|
40
|
-
size += item.lengthSize;
|
|
41
|
-
for (let i = 0; i < data.length; ++i) {
|
|
42
|
-
const entrySize = internalCalcLayoutSize(item.layout, data[i]);
|
|
43
|
-
if (entrySize === null)
|
|
44
|
-
return null;
|
|
45
|
-
size += entrySize;
|
|
46
|
-
}
|
|
47
|
-
return size;
|
|
18
|
+
case "array":
|
|
19
|
+
throw new Error("Cannot statically determine size of dynamic array");
|
|
20
|
+
case "object": {
|
|
21
|
+
return calcLayoutSize(item.layout);
|
|
48
22
|
}
|
|
49
23
|
case "switch": {
|
|
50
|
-
if (data !== undefined) {
|
|
51
|
-
const [_, layout] = findIdLayoutPair(item, data);
|
|
52
|
-
const layoutSize = internalCalcLayoutSize(layout, data);
|
|
53
|
-
return layoutSize !== null ? item.idSize + layoutSize : null;
|
|
54
|
-
}
|
|
55
24
|
let size = null;
|
|
25
|
+
if (item.layouts.length === 0)
|
|
26
|
+
throw new Error(`switch item has no layouts`);
|
|
56
27
|
for (const [_, layout] of item.layouts) {
|
|
57
|
-
const layoutSize =
|
|
28
|
+
const layoutSize = calcLayoutSize(layout);
|
|
58
29
|
if (size === null)
|
|
59
30
|
size = layoutSize;
|
|
60
31
|
else if (layoutSize !== size)
|
|
61
|
-
|
|
32
|
+
throw new Error("Cannot statically determine size of switch item with different layout sizes");
|
|
62
33
|
}
|
|
63
34
|
return item.idSize + size;
|
|
64
35
|
}
|
|
65
36
|
}
|
|
66
37
|
}
|
|
67
|
-
function
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
if (
|
|
82
|
-
|
|
83
|
-
return
|
|
38
|
+
function calcItemSize(item, data) {
|
|
39
|
+
switch (item.binary) {
|
|
40
|
+
case "int":
|
|
41
|
+
case "uint": {
|
|
42
|
+
return item.size;
|
|
43
|
+
}
|
|
44
|
+
case "bytes": {
|
|
45
|
+
if ("size" in item && item.size !== undefined)
|
|
46
|
+
return item.size;
|
|
47
|
+
if (isBytesType(item.custom))
|
|
48
|
+
return item.custom.length;
|
|
49
|
+
if (isBytesType(item?.custom?.from))
|
|
50
|
+
return item.custom.from.length;
|
|
51
|
+
let size = 0;
|
|
52
|
+
if (item?.lengthSize !== undefined)
|
|
53
|
+
size += item.lengthSize;
|
|
54
|
+
return size + ((item.custom !== undefined)
|
|
55
|
+
? item.custom.from(data)
|
|
56
|
+
: data).length;
|
|
57
|
+
}
|
|
58
|
+
case "array": {
|
|
59
|
+
const narrowedData = data;
|
|
60
|
+
let size = 0;
|
|
61
|
+
if ("length" in item && item.length !== narrowedData.length)
|
|
62
|
+
throw new Error(`array length mismatch: ` +
|
|
63
|
+
`layout length: ${item.length}, data length: ${narrowedData.length}`);
|
|
64
|
+
else if ("lengthSize" in item && item.lengthSize !== undefined)
|
|
65
|
+
size += item.lengthSize;
|
|
66
|
+
for (let i = 0; i < narrowedData.length; ++i)
|
|
67
|
+
size += calcLayoutSize(item.layout, narrowedData[i]);
|
|
68
|
+
return size;
|
|
69
|
+
}
|
|
70
|
+
case "object": {
|
|
71
|
+
return calcLayoutSize(item.layout, data);
|
|
72
|
+
}
|
|
73
|
+
case "switch": {
|
|
74
|
+
const [_, layout] = findIdLayoutPair(item, data);
|
|
75
|
+
return item.idSize + calcLayoutSize(layout, data);
|
|
84
76
|
}
|
|
85
|
-
size += itemSize;
|
|
86
77
|
}
|
|
87
|
-
return size;
|
|
88
|
-
}
|
|
89
|
-
//no way to use overloading here:
|
|
90
|
-
// export function calcLayoutSize<const L extends Layout>(layout: L): number | null;
|
|
91
|
-
// export function calcLayoutSize<const L extends Layout>(layout: L, data: LayoutToType<L>): number;
|
|
92
|
-
// export function calcLayoutSize<const L extends Layout>(
|
|
93
|
-
// layout: L,
|
|
94
|
-
// data?: LayoutToType<L>
|
|
95
|
-
// ): number | null; //impl
|
|
96
|
-
//results in "instantiation too deep" error.
|
|
97
|
-
//
|
|
98
|
-
//Trying to pack everything into a single function definition means we either can't narrow the
|
|
99
|
-
// return type correctly:
|
|
100
|
-
// export function calcLayoutSize<const L extends Layout>(
|
|
101
|
-
// layout: L,
|
|
102
|
-
// data: LayoutToType<L>,
|
|
103
|
-
// ): number | null;
|
|
104
|
-
//or we have to make data overly permissive via:
|
|
105
|
-
// export function calcLayoutSize<
|
|
106
|
-
// L extends Layout,
|
|
107
|
-
// const D extends LayoutToType<L> | undefined,
|
|
108
|
-
// >(
|
|
109
|
-
// layout: L,
|
|
110
|
-
// data?: D, //data can now contain additional properties
|
|
111
|
-
// ): undefined extends D ? number | null : number;
|
|
112
|
-
//so we're stuck with having to use to separate names
|
|
113
|
-
export function calcStaticLayoutSize(layout) {
|
|
114
|
-
return internalCalcLayoutSize(layout);
|
|
115
78
|
}
|
|
116
79
|
export function calcLayoutSize(layout, data) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
80
|
+
return (Array.isArray(layout))
|
|
81
|
+
? layout.reduce((acc, item) => acc + (data !== undefined
|
|
82
|
+
? calcItemSize(item, data[item.name])
|
|
83
|
+
: staticCalcItemSize(item)), 0)
|
|
84
|
+
: data !== undefined
|
|
85
|
+
? calcItemSize(layout, data)
|
|
86
|
+
: staticCalcItemSize(layout);
|
|
121
87
|
}
|
|
122
88
|
//# sourceMappingURL=size.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"size.js","sourceRoot":"","sources":["../../../../src/utils/layout/size.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"size.js","sourceRoot":"","sources":["../../../../src/utils/layout/size.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,49 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const
|
|
3
|
-
export declare const isBytesType: (x: any) => x is Uint8Array;
|
|
4
|
-
export declare const isPrimitiveType: (x: any) => x is PrimitiveType;
|
|
5
|
-
export declare const isLayoutItem: (x: any) => x is LayoutItem;
|
|
6
|
-
export declare const isLayout: (x: any) => x is Layout;
|
|
7
|
-
export declare const isFixedUintConversion: (custom: any) => custom is FixedConversion<number, any> | FixedConversion<bigint, any>;
|
|
8
|
-
export declare const isFixedBytesConversion: (custom: any) => custom is FixedConversion<Uint8Array, any>;
|
|
9
|
-
export declare const isFixedPrimitiveConversion: (custom: any) => custom is FixedConversion<Uint8Array, any> | FixedConversion<number, any> | FixedConversion<bigint, any>;
|
|
10
|
-
export type CustomizableBytes = undefined | Layout | Uint8Array | FixedConversion<Uint8Array, any> | CustomConversion<Uint8Array, any> | readonly [Layout, FixedConversion<any, any> | CustomConversion<any, any>];
|
|
11
|
-
type CombineObjects<T, U> = {
|
|
12
|
-
[K in keyof T | keyof U]: K extends keyof T ? T[K] : K extends keyof U ? U[K] : never;
|
|
13
|
-
};
|
|
14
|
-
type BytesBase = {
|
|
15
|
-
readonly name: string;
|
|
16
|
-
} & Omit<BytesLayoutItem, "binary" | "custom" | "layout">;
|
|
17
|
-
type CustomizableBytesReturn<B extends BytesBase, P extends CustomizableBytes> = CombineObjects<B, P extends undefined ? {
|
|
18
|
-
readonly binary: "bytes";
|
|
19
|
-
} : P extends Layout ? {
|
|
20
|
-
readonly binary: "bytes";
|
|
21
|
-
readonly layout: P;
|
|
22
|
-
} : P extends Uint8Array | FixedConversion<Uint8Array, infer To> | CustomConversion<Uint8Array, infer To> ? {
|
|
23
|
-
readonly binary: "bytes";
|
|
24
|
-
readonly custom: P;
|
|
25
|
-
} : P extends readonly [
|
|
26
|
-
Layout,
|
|
27
|
-
FixedConversion<infer From, infer To> | CustomConversion<infer From, infer To>
|
|
28
|
-
] ? {
|
|
29
|
-
readonly binary: "bytes";
|
|
30
|
-
readonly layout: P[0];
|
|
31
|
-
readonly custom: P[1];
|
|
32
|
-
} : never>;
|
|
33
|
-
export declare const customizableBytes: <const B extends BytesBase, const C extends CustomizableBytes>(base: B, spec?: C | undefined) => CustomizableBytesReturn<B, C>;
|
|
34
|
-
export declare const checkSize: (layoutSize: number, dataSize: number) => number;
|
|
35
|
-
export declare const checkItemSize: (item: any, dataSize: number) => number;
|
|
1
|
+
import { BytesLayoutItem, SwitchLayoutItem } from "./layout";
|
|
2
|
+
export declare const checkUint8ArraySize: (custom: Uint8Array, size: number) => void;
|
|
36
3
|
export declare const checkNumEquals: (custom: number | bigint, data: number | bigint) => void;
|
|
37
|
-
export declare const
|
|
38
|
-
|
|
39
|
-
number,
|
|
40
|
-
number
|
|
41
|
-
];
|
|
42
|
-
dataSlize?: number | readonly [
|
|
43
|
-
number,
|
|
44
|
-
number
|
|
45
|
-
];
|
|
46
|
-
}) => void;
|
|
4
|
+
export declare const checkUint8ArrayDeeplyEqual: (custom: Uint8Array, data: Uint8Array) => void;
|
|
5
|
+
export declare function getBytesItemSize(bytesItem: BytesLayoutItem): number | null;
|
|
47
6
|
export declare function findIdLayoutPair(item: SwitchLayoutItem, data: any): any;
|
|
48
|
-
export {};
|
|
49
7
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/layout/utils.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/layout/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAe,MAAM,UAAU,CAAC;AAE1E,eAAO,MAAM,mBAAmB,WAAY,UAAU,QAAQ,MAAM,KAAG,IAKtE,CAAA;AAED,eAAO,MAAM,cAAc,WAAY,MAAM,GAAG,MAAM,QAAQ,MAAM,GAAG,MAAM,KAAG,IAK/E,CAAA;AAED,eAAO,MAAM,0BAA0B,WAAY,UAAU,QAAQ,UAAU,KAAG,IAQjF,CAAA;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAW1E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,OAKjE"}
|
|
@@ -1,52 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export const
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export const isLayoutItem = (x) => binaryLiterals.includes(x?.binary);
|
|
6
|
-
export const isLayout = (x) => isLayoutItem(x) || Array.isArray(x) && x.every(isLayoutItem);
|
|
7
|
-
const isFixedNumberConversion = (custom) => typeof custom?.from === "number";
|
|
8
|
-
const isFixedBigintConversion = (custom) => typeof custom?.from === "bigint";
|
|
9
|
-
export const isFixedUintConversion = (custom) => isFixedNumberConversion(custom) || isFixedBigintConversion(custom);
|
|
10
|
-
export const isFixedBytesConversion = (custom) => isBytesType(custom?.from);
|
|
11
|
-
export const isFixedPrimitiveConversion = (custom) => isFixedUintConversion(custom) || isFixedBytesConversion(custom);
|
|
12
|
-
export const customizableBytes = (base, spec) => ({
|
|
13
|
-
...base,
|
|
14
|
-
binary: "bytes",
|
|
15
|
-
...(() => {
|
|
16
|
-
if (spec === undefined)
|
|
17
|
-
return {};
|
|
18
|
-
if (isLayout(spec))
|
|
19
|
-
return { layout: spec };
|
|
20
|
-
if (spec instanceof Uint8Array || isFixedBytesConversion(spec) || !Array.isArray(spec))
|
|
21
|
-
return { custom: spec };
|
|
22
|
-
return { layout: spec[0], custom: spec[1] };
|
|
23
|
-
})()
|
|
24
|
-
});
|
|
25
|
-
export const checkSize = (layoutSize, dataSize) => {
|
|
26
|
-
if (layoutSize !== dataSize)
|
|
27
|
-
throw new Error(`size mismatch: layout size: ${layoutSize}, data size: ${dataSize}`);
|
|
28
|
-
return dataSize;
|
|
1
|
+
import { isBytesType } from "./layout";
|
|
2
|
+
export const checkUint8ArraySize = (custom, size) => {
|
|
3
|
+
if (custom.length !== size)
|
|
4
|
+
throw new Error(`binary size mismatch: layout size: ${custom.length}, data size: ${size}`);
|
|
29
5
|
};
|
|
30
|
-
export const checkItemSize = (item, dataSize) => ("size" in item && item.size !== undefined) ? checkSize(item.size, dataSize) : dataSize;
|
|
31
6
|
export const checkNumEquals = (custom, data) => {
|
|
32
7
|
if (custom != data)
|
|
33
8
|
throw new Error(`value mismatch: (constant) layout value: ${custom}, data value: ${data}`);
|
|
34
9
|
};
|
|
35
|
-
export const
|
|
36
|
-
|
|
37
|
-
? [0, bytes.length]
|
|
38
|
-
: Array.isArray(slice)
|
|
39
|
-
? slice
|
|
40
|
-
: [slice, bytes.length];
|
|
41
|
-
const [customStart, customEnd] = toSlice(custom, opts?.customSlice);
|
|
42
|
-
const [dataStart, dataEnd] = toSlice(data, opts?.dataSlize);
|
|
43
|
-
const length = customEnd - customStart;
|
|
44
|
-
checkSize(length, dataEnd - dataStart);
|
|
10
|
+
export const checkUint8ArrayDeeplyEqual = (custom, data) => {
|
|
11
|
+
checkUint8ArraySize(custom, data.length);
|
|
45
12
|
for (let i = 0; i < custom.length; ++i)
|
|
46
|
-
if (custom[i
|
|
47
|
-
throw new Error(`binary data mismatch: `
|
|
48
|
-
`layout value: ${custom}, offset: ${customStart}, data value: ${data}, offset: ${dataStart}`);
|
|
13
|
+
if (custom[i] !== data[i])
|
|
14
|
+
throw new Error(`binary data mismatch: layout value: ${custom}, data value: ${data}`);
|
|
49
15
|
};
|
|
16
|
+
export function getBytesItemSize(bytesItem) {
|
|
17
|
+
if ("size" in bytesItem && bytesItem.size !== undefined)
|
|
18
|
+
return bytesItem.size;
|
|
19
|
+
if (isBytesType(bytesItem.custom))
|
|
20
|
+
return bytesItem.custom.length;
|
|
21
|
+
if (isBytesType(bytesItem?.custom?.from))
|
|
22
|
+
return bytesItem.custom.from.length;
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
50
25
|
export function findIdLayoutPair(item, data) {
|
|
51
26
|
const id = data[item.idTag ?? "id"];
|
|
52
27
|
return item.layouts.find(([idOrConversionId]) => (Array.isArray(idOrConversionId) ? idOrConversionId[1] : idOrConversionId) == id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/utils/layout/utils.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/utils/layout/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,WAAW,EAAE,MAAM,UAAU,CAAC;AAE1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAkB,EAAE,IAAY,EAAQ,EAAE;IAC5E,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;QACxB,MAAM,IAAI,KAAK,CACb,sCAAsC,MAAM,CAAC,MAAM,gBAAgB,IAAI,EAAE,CAC1E,CAAC;AACN,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAuB,EAAE,IAAqB,EAAQ,EAAE;IACrF,IAAI,MAAM,IAAI,IAAI;QAChB,MAAM,IAAI,KAAK,CACb,4CAA4C,MAAM,iBAAiB,IAAI,EAAE,CAC1E,CAAC;AACN,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,MAAkB,EAAE,IAAgB,EAAQ,EAAE;IACvF,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,uCAAuC,MAAM,iBAAiB,IAAI,EAAE,CACrE,CAAC;AACR,CAAC,CAAA;AAED,MAAM,UAAU,gBAAgB,CAAC,SAA0B;IACzD,IAAI,MAAM,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS;QACrD,OAAO,SAAS,CAAC,IAAI,CAAC;IAExB,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;QAC/B,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;IAEjC,IAAI,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC;QACtC,OAAO,SAAU,CAAC,MAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAExC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAsB,EAAE,IAAS;IAChE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IACpC,OAAQ,IAAI,CAAC,OAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,EAAE,CACzD,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAChF,CAAC;AACL,CAAC"}
|