@hashgraphonline/standards-sdk 0.0.81 → 0.0.82

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 (194) hide show
  1. package/dist/es/hcs-10/browser.d.ts.map +1 -1
  2. package/dist/es/standards-sdk.es100.js +30 -13
  3. package/dist/es/standards-sdk.es100.js.map +1 -1
  4. package/dist/es/standards-sdk.es101.js +14 -3
  5. package/dist/es/standards-sdk.es101.js.map +1 -1
  6. package/dist/es/standards-sdk.es102.js +3 -3
  7. package/dist/es/standards-sdk.es102.js.map +1 -1
  8. package/dist/es/standards-sdk.es103.js +3 -15
  9. package/dist/es/standards-sdk.es103.js.map +1 -1
  10. package/dist/es/standards-sdk.es104.js +15 -4
  11. package/dist/es/standards-sdk.es104.js.map +1 -1
  12. package/dist/es/standards-sdk.es105.js +5 -39
  13. package/dist/es/standards-sdk.es105.js.map +1 -1
  14. package/dist/es/standards-sdk.es106.js +38 -39
  15. package/dist/es/standards-sdk.es106.js.map +1 -1
  16. package/dist/es/standards-sdk.es107.js +37 -34
  17. package/dist/es/standards-sdk.es107.js.map +1 -1
  18. package/dist/es/standards-sdk.es108.js +34 -75
  19. package/dist/es/standards-sdk.es108.js.map +1 -1
  20. package/dist/es/standards-sdk.es109.js +78 -4
  21. package/dist/es/standards-sdk.es109.js.map +1 -1
  22. package/dist/es/standards-sdk.es110.js +1 -1
  23. package/dist/es/standards-sdk.es115.js +1 -1
  24. package/dist/es/standards-sdk.es116.js +2 -2
  25. package/dist/es/standards-sdk.es12.js +3 -3
  26. package/dist/es/standards-sdk.es17.js +2 -2
  27. package/dist/es/standards-sdk.es18.js +3 -3
  28. package/dist/es/standards-sdk.es21.js +1692 -966
  29. package/dist/es/standards-sdk.es21.js.map +1 -1
  30. package/dist/es/standards-sdk.es22.js +36 -1767
  31. package/dist/es/standards-sdk.es22.js.map +1 -1
  32. package/dist/es/standards-sdk.es23.js +48 -36
  33. package/dist/es/standards-sdk.es23.js.map +1 -1
  34. package/dist/es/standards-sdk.es24.js +7163 -21
  35. package/dist/es/standards-sdk.es24.js.map +1 -1
  36. package/dist/es/standards-sdk.es25.js +3 -7190
  37. package/dist/es/standards-sdk.es25.js.map +1 -1
  38. package/dist/es/standards-sdk.es26.js +2 -3
  39. package/dist/es/standards-sdk.es26.js.map +1 -1
  40. package/dist/es/standards-sdk.es27.js +4167 -2
  41. package/dist/es/standards-sdk.es27.js.map +1 -1
  42. package/dist/es/standards-sdk.es28.js +961 -4087
  43. package/dist/es/standards-sdk.es28.js.map +1 -1
  44. package/dist/es/standards-sdk.es29.js +2 -2
  45. package/dist/es/standards-sdk.es30.js +419 -2
  46. package/dist/es/standards-sdk.es30.js.map +1 -1
  47. package/dist/es/standards-sdk.es31.js +2 -6
  48. package/dist/es/standards-sdk.es31.js.map +1 -1
  49. package/dist/es/standards-sdk.es32.js +119 -22
  50. package/dist/es/standards-sdk.es32.js.map +1 -1
  51. package/dist/es/standards-sdk.es33.js +2 -143
  52. package/dist/es/standards-sdk.es33.js.map +1 -1
  53. package/dist/es/standards-sdk.es34.js +3 -194
  54. package/dist/es/standards-sdk.es34.js.map +1 -1
  55. package/dist/es/standards-sdk.es35.js +75 -429
  56. package/dist/es/standards-sdk.es35.js.map +1 -1
  57. package/dist/es/standards-sdk.es36.js +22 -24
  58. package/dist/es/standards-sdk.es36.js.map +1 -1
  59. package/dist/es/standards-sdk.es37.js +131 -122
  60. package/dist/es/standards-sdk.es37.js.map +1 -1
  61. package/dist/es/standards-sdk.es38.js +85 -12
  62. package/dist/es/standards-sdk.es38.js.map +1 -1
  63. package/dist/es/standards-sdk.es39.js +7128 -21
  64. package/dist/es/standards-sdk.es39.js.map +1 -1
  65. package/dist/es/standards-sdk.es4.js +1 -1
  66. package/dist/es/standards-sdk.es40.js +191 -25
  67. package/dist/es/standards-sdk.es40.js.map +1 -1
  68. package/dist/es/standards-sdk.es41.js +432 -15
  69. package/dist/es/standards-sdk.es41.js.map +1 -1
  70. package/dist/es/standards-sdk.es42.js +15 -34
  71. package/dist/es/standards-sdk.es42.js.map +1 -1
  72. package/dist/es/standards-sdk.es43.js +131 -10
  73. package/dist/es/standards-sdk.es43.js.map +1 -1
  74. package/dist/es/standards-sdk.es44.js +10 -53
  75. package/dist/es/standards-sdk.es44.js.map +1 -1
  76. package/dist/es/standards-sdk.es45.js +21 -1281
  77. package/dist/es/standards-sdk.es45.js.map +1 -1
  78. package/dist/es/standards-sdk.es46.js +25 -144
  79. package/dist/es/standards-sdk.es46.js.map +1 -1
  80. package/dist/es/standards-sdk.es47.js +17 -87
  81. package/dist/es/standards-sdk.es47.js.map +1 -1
  82. package/dist/es/standards-sdk.es48.js +38 -78
  83. package/dist/es/standards-sdk.es48.js.map +1 -1
  84. package/dist/es/standards-sdk.es49.js +15 -29
  85. package/dist/es/standards-sdk.es49.js.map +1 -1
  86. package/dist/es/standards-sdk.es5.js +3 -3
  87. package/dist/es/standards-sdk.es50.js +51 -149
  88. package/dist/es/standards-sdk.es50.js.map +1 -1
  89. package/dist/es/standards-sdk.es51.js +1125 -629
  90. package/dist/es/standards-sdk.es51.js.map +1 -1
  91. package/dist/es/standards-sdk.es52.js +26 -168
  92. package/dist/es/standards-sdk.es52.js.map +1 -1
  93. package/dist/es/standards-sdk.es53.js +5 -100
  94. package/dist/es/standards-sdk.es53.js.map +1 -1
  95. package/dist/es/standards-sdk.es54.js +159 -2
  96. package/dist/es/standards-sdk.es54.js.map +1 -1
  97. package/dist/es/standards-sdk.es55.js +792 -15
  98. package/dist/es/standards-sdk.es55.js.map +1 -1
  99. package/dist/es/standards-sdk.es56.js +166 -401
  100. package/dist/es/standards-sdk.es56.js.map +1 -1
  101. package/dist/es/standards-sdk.es57.js +125 -346
  102. package/dist/es/standards-sdk.es57.js.map +1 -1
  103. package/dist/es/standards-sdk.es58.js +3 -6
  104. package/dist/es/standards-sdk.es58.js.map +1 -1
  105. package/dist/es/standards-sdk.es59.js +348 -163
  106. package/dist/es/standards-sdk.es59.js.map +1 -1
  107. package/dist/es/standards-sdk.es60.js +4 -79
  108. package/dist/es/standards-sdk.es60.js.map +1 -1
  109. package/dist/es/standards-sdk.es61.js +162 -97
  110. package/dist/es/standards-sdk.es61.js.map +1 -1
  111. package/dist/es/standards-sdk.es62.js +74 -45
  112. package/dist/es/standards-sdk.es62.js.map +1 -1
  113. package/dist/es/standards-sdk.es63.js +112 -8
  114. package/dist/es/standards-sdk.es63.js.map +1 -1
  115. package/dist/es/standards-sdk.es64.js +44 -89
  116. package/dist/es/standards-sdk.es64.js.map +1 -1
  117. package/dist/es/standards-sdk.es65.js +9 -3
  118. package/dist/es/standards-sdk.es65.js.map +1 -1
  119. package/dist/es/standards-sdk.es66.js +97 -2
  120. package/dist/es/standards-sdk.es66.js.map +1 -1
  121. package/dist/es/standards-sdk.es67.js +3 -112
  122. package/dist/es/standards-sdk.es67.js.map +1 -1
  123. package/dist/es/standards-sdk.es68.js +2 -74
  124. package/dist/es/standards-sdk.es68.js.map +1 -1
  125. package/dist/es/standards-sdk.es69.js +112 -5
  126. package/dist/es/standards-sdk.es69.js.map +1 -1
  127. package/dist/es/standards-sdk.es7.js +3 -3
  128. package/dist/es/standards-sdk.es70.js +73 -4
  129. package/dist/es/standards-sdk.es70.js.map +1 -1
  130. package/dist/es/standards-sdk.es71.js +5 -220
  131. package/dist/es/standards-sdk.es71.js.map +1 -1
  132. package/dist/es/standards-sdk.es72.js +5 -58
  133. package/dist/es/standards-sdk.es72.js.map +1 -1
  134. package/dist/es/standards-sdk.es73.js +220 -68
  135. package/dist/es/standards-sdk.es73.js.map +1 -1
  136. package/dist/es/standards-sdk.es74.js +57 -20
  137. package/dist/es/standards-sdk.es74.js.map +1 -1
  138. package/dist/es/standards-sdk.es75.js +69 -27
  139. package/dist/es/standards-sdk.es75.js.map +1 -1
  140. package/dist/es/standards-sdk.es76.js +19 -24
  141. package/dist/es/standards-sdk.es76.js.map +1 -1
  142. package/dist/es/standards-sdk.es77.js +23 -34
  143. package/dist/es/standards-sdk.es77.js.map +1 -1
  144. package/dist/es/standards-sdk.es78.js +25 -418
  145. package/dist/es/standards-sdk.es78.js.map +1 -1
  146. package/dist/es/standards-sdk.es79.js +38 -2
  147. package/dist/es/standards-sdk.es79.js.map +1 -1
  148. package/dist/es/standards-sdk.es8.js +8 -4
  149. package/dist/es/standards-sdk.es8.js.map +1 -1
  150. package/dist/es/standards-sdk.es80.js +93 -112
  151. package/dist/es/standards-sdk.es80.js.map +1 -1
  152. package/dist/es/standards-sdk.es81.js +2 -2282
  153. package/dist/es/standards-sdk.es81.js.map +1 -1
  154. package/dist/es/standards-sdk.es82.js +15 -163
  155. package/dist/es/standards-sdk.es82.js.map +1 -1
  156. package/dist/es/standards-sdk.es83.js +409 -3
  157. package/dist/es/standards-sdk.es83.js.map +1 -1
  158. package/dist/es/standards-sdk.es84.js +159 -27
  159. package/dist/es/standards-sdk.es84.js.map +1 -1
  160. package/dist/es/standards-sdk.es85.js +26 -57
  161. package/dist/es/standards-sdk.es85.js.map +1 -1
  162. package/dist/es/standards-sdk.es86.js +58 -45
  163. package/dist/es/standards-sdk.es86.js.map +1 -1
  164. package/dist/es/standards-sdk.es87.js +48 -8
  165. package/dist/es/standards-sdk.es87.js.map +1 -1
  166. package/dist/es/standards-sdk.es88.js +8 -63
  167. package/dist/es/standards-sdk.es88.js.map +1 -1
  168. package/dist/es/standards-sdk.es89.js +64 -5
  169. package/dist/es/standards-sdk.es89.js.map +1 -1
  170. package/dist/es/standards-sdk.es9.js +1 -1
  171. package/dist/es/standards-sdk.es90.js +6 -15
  172. package/dist/es/standards-sdk.es90.js.map +1 -1
  173. package/dist/es/standards-sdk.es91.js +15 -7
  174. package/dist/es/standards-sdk.es91.js.map +1 -1
  175. package/dist/es/standards-sdk.es92.js +6 -44
  176. package/dist/es/standards-sdk.es92.js.map +1 -1
  177. package/dist/es/standards-sdk.es93.js +45 -2
  178. package/dist/es/standards-sdk.es93.js.map +1 -1
  179. package/dist/es/standards-sdk.es94.js +2 -136
  180. package/dist/es/standards-sdk.es94.js.map +1 -1
  181. package/dist/es/standards-sdk.es95.js +127 -163
  182. package/dist/es/standards-sdk.es95.js.map +1 -1
  183. package/dist/es/standards-sdk.es96.js +158 -7122
  184. package/dist/es/standards-sdk.es96.js.map +1 -1
  185. package/dist/es/standards-sdk.es97.js +2281 -12
  186. package/dist/es/standards-sdk.es97.js.map +1 -1
  187. package/dist/es/standards-sdk.es98.js +13 -13
  188. package/dist/es/standards-sdk.es98.js.map +1 -1
  189. package/dist/es/standards-sdk.es99.js +13 -32
  190. package/dist/es/standards-sdk.es99.js.map +1 -1
  191. package/dist/umd/hcs-10/browser.d.ts.map +1 -1
  192. package/dist/umd/standards-sdk.umd.js +1 -1
  193. package/dist/umd/standards-sdk.umd.js.map +1 -1
  194. package/package.json +1 -1
@@ -8,789 +8,1285 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
8
8
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
9
9
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
10
10
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
11
- var _options;
12
- import { assertPrivate } from "./standards-sdk.es46.js";
13
- import { defineProperties } from "./standards-sdk.es49.js";
14
- const _gaurd = {};
15
- function n(value, width) {
16
- let signed = false;
17
- if (width < 0) {
18
- signed = true;
19
- width *= -1;
20
- }
21
- return new Typed(_gaurd, `${signed ? "" : "u"}int${width}`, value, { signed, width });
11
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
12
+ var __privateWrapper = (obj, member, setter, getter) => ({
13
+ set _(value) {
14
+ __privateSet(obj, member, value, setter);
15
+ },
16
+ get _() {
17
+ return __privateGet(obj, member, getter);
18
+ }
19
+ });
20
+ var _offset, _tokens, _TokenString_instances, subTokenString_fn, _ParamType_instances, walkAsync_fn;
21
+ import { assertPrivate, assert, assertArgument } from "./standards-sdk.es37.js";
22
+ import { defineProperties } from "./standards-sdk.es52.js";
23
+ import { id } from "./standards-sdk.es53.js";
24
+ import { getNumber, getBigInt } from "./standards-sdk.es54.js";
25
+ function setify(items) {
26
+ const result = /* @__PURE__ */ new Set();
27
+ items.forEach((k) => result.add(k));
28
+ return Object.freeze(result);
22
29
  }
23
- function b(value, size) {
24
- return new Typed(_gaurd, `bytes${size ? size : ""}`, value, { size });
25
- }
26
- const _typedSymbol = Symbol.for("_ethers_typed");
27
- const _Typed = class _Typed {
28
- /**
29
- * @_ignore:
30
- */
31
- constructor(gaurd, type, value, options) {
32
- /**
33
- * The type, as a Solidity-compatible type.
34
- */
35
- __publicField(this, "type");
36
- /**
37
- * The actual value.
38
- */
39
- __publicField(this, "value");
40
- __privateAdd(this, _options);
41
- /**
42
- * @_ignore:
43
- */
44
- __publicField(this, "_typedSymbol");
45
- if (options == null) {
46
- options = null;
30
+ const _kwVisibDeploy = "external public payable override";
31
+ const KwVisibDeploy = setify(_kwVisibDeploy.split(" "));
32
+ const _kwVisib = "constant external internal payable private public pure view override";
33
+ const KwVisib = setify(_kwVisib.split(" "));
34
+ const _kwTypes = "constructor error event fallback function receive struct";
35
+ const KwTypes = setify(_kwTypes.split(" "));
36
+ const _kwModifiers = "calldata memory storage payable indexed";
37
+ const KwModifiers = setify(_kwModifiers.split(" "));
38
+ const _kwOther = "tuple returns";
39
+ const _keywords = [_kwTypes, _kwModifiers, _kwOther, _kwVisib].join(" ");
40
+ const Keywords = setify(_keywords.split(" "));
41
+ const SimpleTokens = {
42
+ "(": "OPEN_PAREN",
43
+ ")": "CLOSE_PAREN",
44
+ "[": "OPEN_BRACKET",
45
+ "]": "CLOSE_BRACKET",
46
+ ",": "COMMA",
47
+ "@": "AT"
48
+ };
49
+ const regexWhitespacePrefix = new RegExp("^(\\s*)");
50
+ const regexNumberPrefix = new RegExp("^([0-9]+)");
51
+ const regexIdPrefix = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)");
52
+ const regexId = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)$");
53
+ const regexType = new RegExp("^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$");
54
+ const _TokenString = class _TokenString {
55
+ constructor(tokens) {
56
+ __privateAdd(this, _TokenString_instances);
57
+ __privateAdd(this, _offset);
58
+ __privateAdd(this, _tokens);
59
+ __privateSet(this, _offset, 0);
60
+ __privateSet(this, _tokens, tokens.slice());
61
+ }
62
+ get offset() {
63
+ return __privateGet(this, _offset);
64
+ }
65
+ get length() {
66
+ return __privateGet(this, _tokens).length - __privateGet(this, _offset);
67
+ }
68
+ clone() {
69
+ return new _TokenString(__privateGet(this, _tokens));
70
+ }
71
+ reset() {
72
+ __privateSet(this, _offset, 0);
73
+ }
74
+ // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens
75
+ popKeyword(allowed) {
76
+ const top = this.peek();
77
+ if (top.type !== "KEYWORD" || !allowed.has(top.text)) {
78
+ throw new Error(`expected keyword ${top.text}`);
47
79
  }
48
- assertPrivate(_gaurd, gaurd, "Typed");
49
- defineProperties(this, { _typedSymbol, type, value });
50
- __privateSet(this, _options, options);
51
- this.format();
80
+ return this.pop().text;
52
81
  }
53
- /**
54
- * Format the type as a Human-Readable type.
55
- */
56
- format() {
57
- if (this.type === "array") {
58
- throw new Error("");
59
- } else if (this.type === "dynamicArray") {
60
- throw new Error("");
61
- } else if (this.type === "tuple") {
62
- return `tuple(${this.value.map((v) => v.format()).join(",")})`;
82
+ // Pops and returns the value of the next token if it is `type`; throws if out of tokens
83
+ popType(type) {
84
+ if (this.peek().type !== type) {
85
+ const top = this.peek();
86
+ throw new Error(`expected ${type}; got ${top.type} ${JSON.stringify(top.text)}`);
63
87
  }
64
- return this.type;
65
- }
66
- /**
67
- * The default value returned by this type.
68
- */
69
- defaultValue() {
70
- return 0;
71
- }
72
- /**
73
- * The minimum value for numeric types.
74
- */
75
- minValue() {
76
- return 0;
77
- }
78
- /**
79
- * The maximum value for numeric types.
80
- */
81
- maxValue() {
82
- return 0;
88
+ return this.pop().text;
83
89
  }
84
- /**
85
- * Returns ``true`` and provides a type guard is this is a [[TypedBigInt]].
86
- */
87
- isBigInt() {
88
- return !!this.type.match(/^u?int[0-9]+$/);
90
+ // Pops and returns a "(" TOKENS ")"
91
+ popParen() {
92
+ const top = this.peek();
93
+ if (top.type !== "OPEN_PAREN") {
94
+ throw new Error("bad start");
95
+ }
96
+ const result = __privateMethod(this, _TokenString_instances, subTokenString_fn).call(this, __privateGet(this, _offset) + 1, top.match + 1);
97
+ __privateSet(this, _offset, top.match + 1);
98
+ return result;
99
+ }
100
+ // Pops and returns the items within "(" ITEM1 "," ITEM2 "," ... ")"
101
+ popParams() {
102
+ const top = this.peek();
103
+ if (top.type !== "OPEN_PAREN") {
104
+ throw new Error("bad start");
105
+ }
106
+ const result = [];
107
+ while (__privateGet(this, _offset) < top.match - 1) {
108
+ const link = this.peek().linkNext;
109
+ result.push(__privateMethod(this, _TokenString_instances, subTokenString_fn).call(this, __privateGet(this, _offset) + 1, link));
110
+ __privateSet(this, _offset, link);
111
+ }
112
+ __privateSet(this, _offset, top.match + 1);
113
+ return result;
89
114
  }
90
- /**
91
- * Returns ``true`` and provides a type guard is this is a [[TypedData]].
92
- */
93
- isData() {
94
- return this.type.startsWith("bytes");
115
+ // Returns the top Token, throwing if out of tokens
116
+ peek() {
117
+ if (__privateGet(this, _offset) >= __privateGet(this, _tokens).length) {
118
+ throw new Error("out-of-bounds");
119
+ }
120
+ return __privateGet(this, _tokens)[__privateGet(this, _offset)];
95
121
  }
96
- /**
97
- * Returns ``true`` and provides a type guard is this is a [[TypedString]].
98
- */
99
- isString() {
100
- return this.type === "string";
122
+ // Returns the next value, if it is a keyword in `allowed`
123
+ peekKeyword(allowed) {
124
+ const top = this.peekType("KEYWORD");
125
+ return top != null && allowed.has(top) ? top : null;
101
126
  }
102
- /**
103
- * Returns the tuple name, if this is a tuple. Throws otherwise.
104
- */
105
- get tupleName() {
106
- if (this.type !== "tuple") {
107
- throw TypeError("not a tuple");
127
+ // Returns the value of the next token if it is `type`
128
+ peekType(type) {
129
+ if (this.length === 0) {
130
+ return null;
131
+ }
132
+ const top = this.peek();
133
+ return top.type === type ? top.text : null;
134
+ }
135
+ // Returns the next token; throws if out of tokens
136
+ pop() {
137
+ const result = this.peek();
138
+ __privateWrapper(this, _offset)._++;
139
+ return result;
140
+ }
141
+ toString() {
142
+ const tokens = [];
143
+ for (let i = __privateGet(this, _offset); i < __privateGet(this, _tokens).length; i++) {
144
+ const token = __privateGet(this, _tokens)[i];
145
+ tokens.push(`${token.type}:${token.text}`);
108
146
  }
109
- return __privateGet(this, _options);
147
+ return `<TokenString ${tokens.join(" ")}>`;
110
148
  }
111
- // Returns the length of this type as an array
112
- // - `null` indicates the length is unforced, it could be dynamic
113
- // - `-1` indicates the length is dynamic
114
- // - any other value indicates it is a static array and is its length
115
- /**
116
- * Returns the length of the array type or ``-1`` if it is dynamic.
117
- *
118
- * Throws if the type is not an array.
119
- */
120
- get arrayLength() {
121
- if (this.type !== "array") {
122
- throw TypeError("not an array");
149
+ };
150
+ _offset = new WeakMap();
151
+ _tokens = new WeakMap();
152
+ _TokenString_instances = new WeakSet();
153
+ subTokenString_fn = function(from = 0, to = 0) {
154
+ return new _TokenString(__privateGet(this, _tokens).slice(from, to).map((t) => {
155
+ return Object.freeze(Object.assign({}, t, {
156
+ match: t.match - from,
157
+ linkBack: t.linkBack - from,
158
+ linkNext: t.linkNext - from
159
+ }));
160
+ }));
161
+ };
162
+ let TokenString = _TokenString;
163
+ function lex(text) {
164
+ const tokens = [];
165
+ const throwError = (message) => {
166
+ const token = offset < text.length ? JSON.stringify(text[offset]) : "$EOI";
167
+ throw new Error(`invalid token ${token} at ${offset}: ${message}`);
168
+ };
169
+ let brackets = [];
170
+ let commas = [];
171
+ let offset = 0;
172
+ while (offset < text.length) {
173
+ let cur = text.substring(offset);
174
+ let match = cur.match(regexWhitespacePrefix);
175
+ if (match) {
176
+ offset += match[1].length;
177
+ cur = text.substring(offset);
123
178
  }
124
- if (__privateGet(this, _options) === true) {
125
- return -1;
179
+ const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: "", text: "", offset, value: -1 };
180
+ tokens.push(token);
181
+ let type = SimpleTokens[cur[0]] || "";
182
+ if (type) {
183
+ token.type = type;
184
+ token.text = cur[0];
185
+ offset++;
186
+ if (type === "OPEN_PAREN") {
187
+ brackets.push(tokens.length - 1);
188
+ commas.push(tokens.length - 1);
189
+ } else if (type == "CLOSE_PAREN") {
190
+ if (brackets.length === 0) {
191
+ throwError("no matching open bracket");
192
+ }
193
+ token.match = brackets.pop();
194
+ tokens[token.match].match = tokens.length - 1;
195
+ token.depth--;
196
+ token.linkBack = commas.pop();
197
+ tokens[token.linkBack].linkNext = tokens.length - 1;
198
+ } else if (type === "COMMA") {
199
+ token.linkBack = commas.pop();
200
+ tokens[token.linkBack].linkNext = tokens.length - 1;
201
+ commas.push(tokens.length - 1);
202
+ } else if (type === "OPEN_BRACKET") {
203
+ token.type = "BRACKET";
204
+ } else if (type === "CLOSE_BRACKET") {
205
+ let suffix = tokens.pop().text;
206
+ if (tokens.length > 0 && tokens[tokens.length - 1].type === "NUMBER") {
207
+ const value = tokens.pop().text;
208
+ suffix = value + suffix;
209
+ tokens[tokens.length - 1].value = getNumber(value);
210
+ }
211
+ if (tokens.length === 0 || tokens[tokens.length - 1].type !== "BRACKET") {
212
+ throw new Error("missing opening bracket");
213
+ }
214
+ tokens[tokens.length - 1].text += suffix;
215
+ }
216
+ continue;
126
217
  }
127
- if (__privateGet(this, _options) === false) {
128
- return this.value.length;
218
+ match = cur.match(regexIdPrefix);
219
+ if (match) {
220
+ token.text = match[1];
221
+ offset += token.text.length;
222
+ if (Keywords.has(token.text)) {
223
+ token.type = "KEYWORD";
224
+ continue;
225
+ }
226
+ if (token.text.match(regexType)) {
227
+ token.type = "TYPE";
228
+ continue;
229
+ }
230
+ token.type = "ID";
231
+ continue;
129
232
  }
130
- return null;
131
- }
132
- /**
133
- * Returns a new **Typed** of %%type%% with the %%value%%.
134
- */
135
- static from(type, value) {
136
- return new _Typed(_gaurd, type, value);
137
- }
138
- /**
139
- * Return a new ``uint8`` type for %%v%%.
140
- */
141
- static uint8(v) {
142
- return n(v, 8);
143
- }
144
- /**
145
- * Return a new ``uint16`` type for %%v%%.
146
- */
147
- static uint16(v) {
148
- return n(v, 16);
149
- }
150
- /**
151
- * Return a new ``uint24`` type for %%v%%.
152
- */
153
- static uint24(v) {
154
- return n(v, 24);
155
- }
156
- /**
157
- * Return a new ``uint32`` type for %%v%%.
158
- */
159
- static uint32(v) {
160
- return n(v, 32);
161
- }
162
- /**
163
- * Return a new ``uint40`` type for %%v%%.
164
- */
165
- static uint40(v) {
166
- return n(v, 40);
167
- }
168
- /**
169
- * Return a new ``uint48`` type for %%v%%.
170
- */
171
- static uint48(v) {
172
- return n(v, 48);
173
- }
174
- /**
175
- * Return a new ``uint56`` type for %%v%%.
176
- */
177
- static uint56(v) {
178
- return n(v, 56);
179
- }
180
- /**
181
- * Return a new ``uint64`` type for %%v%%.
182
- */
183
- static uint64(v) {
184
- return n(v, 64);
185
- }
186
- /**
187
- * Return a new ``uint72`` type for %%v%%.
188
- */
189
- static uint72(v) {
190
- return n(v, 72);
191
- }
192
- /**
193
- * Return a new ``uint80`` type for %%v%%.
194
- */
195
- static uint80(v) {
196
- return n(v, 80);
197
- }
198
- /**
199
- * Return a new ``uint88`` type for %%v%%.
200
- */
201
- static uint88(v) {
202
- return n(v, 88);
203
- }
204
- /**
205
- * Return a new ``uint96`` type for %%v%%.
206
- */
207
- static uint96(v) {
208
- return n(v, 96);
209
- }
210
- /**
211
- * Return a new ``uint104`` type for %%v%%.
212
- */
213
- static uint104(v) {
214
- return n(v, 104);
215
- }
216
- /**
217
- * Return a new ``uint112`` type for %%v%%.
218
- */
219
- static uint112(v) {
220
- return n(v, 112);
221
- }
222
- /**
223
- * Return a new ``uint120`` type for %%v%%.
224
- */
225
- static uint120(v) {
226
- return n(v, 120);
227
- }
228
- /**
229
- * Return a new ``uint128`` type for %%v%%.
230
- */
231
- static uint128(v) {
232
- return n(v, 128);
233
- }
234
- /**
235
- * Return a new ``uint136`` type for %%v%%.
236
- */
237
- static uint136(v) {
238
- return n(v, 136);
239
- }
240
- /**
241
- * Return a new ``uint144`` type for %%v%%.
242
- */
243
- static uint144(v) {
244
- return n(v, 144);
245
- }
246
- /**
247
- * Return a new ``uint152`` type for %%v%%.
248
- */
249
- static uint152(v) {
250
- return n(v, 152);
251
- }
252
- /**
253
- * Return a new ``uint160`` type for %%v%%.
254
- */
255
- static uint160(v) {
256
- return n(v, 160);
257
- }
258
- /**
259
- * Return a new ``uint168`` type for %%v%%.
260
- */
261
- static uint168(v) {
262
- return n(v, 168);
263
- }
264
- /**
265
- * Return a new ``uint176`` type for %%v%%.
266
- */
267
- static uint176(v) {
268
- return n(v, 176);
269
- }
270
- /**
271
- * Return a new ``uint184`` type for %%v%%.
272
- */
273
- static uint184(v) {
274
- return n(v, 184);
275
- }
276
- /**
277
- * Return a new ``uint192`` type for %%v%%.
278
- */
279
- static uint192(v) {
280
- return n(v, 192);
281
- }
282
- /**
283
- * Return a new ``uint200`` type for %%v%%.
284
- */
285
- static uint200(v) {
286
- return n(v, 200);
287
- }
288
- /**
289
- * Return a new ``uint208`` type for %%v%%.
290
- */
291
- static uint208(v) {
292
- return n(v, 208);
293
- }
294
- /**
295
- * Return a new ``uint216`` type for %%v%%.
296
- */
297
- static uint216(v) {
298
- return n(v, 216);
299
- }
300
- /**
301
- * Return a new ``uint224`` type for %%v%%.
302
- */
303
- static uint224(v) {
304
- return n(v, 224);
305
- }
306
- /**
307
- * Return a new ``uint232`` type for %%v%%.
308
- */
309
- static uint232(v) {
310
- return n(v, 232);
311
- }
312
- /**
313
- * Return a new ``uint240`` type for %%v%%.
314
- */
315
- static uint240(v) {
316
- return n(v, 240);
317
- }
318
- /**
319
- * Return a new ``uint248`` type for %%v%%.
320
- */
321
- static uint248(v) {
322
- return n(v, 248);
323
- }
324
- /**
325
- * Return a new ``uint256`` type for %%v%%.
326
- */
327
- static uint256(v) {
328
- return n(v, 256);
329
- }
330
- /**
331
- * Return a new ``uint256`` type for %%v%%.
332
- */
333
- static uint(v) {
334
- return n(v, 256);
335
- }
336
- /**
337
- * Return a new ``int8`` type for %%v%%.
338
- */
339
- static int8(v) {
340
- return n(v, -8);
341
- }
342
- /**
343
- * Return a new ``int16`` type for %%v%%.
344
- */
345
- static int16(v) {
346
- return n(v, -16);
347
- }
348
- /**
349
- * Return a new ``int24`` type for %%v%%.
350
- */
351
- static int24(v) {
352
- return n(v, -24);
353
- }
354
- /**
355
- * Return a new ``int32`` type for %%v%%.
356
- */
357
- static int32(v) {
358
- return n(v, -32);
359
- }
360
- /**
361
- * Return a new ``int40`` type for %%v%%.
362
- */
363
- static int40(v) {
364
- return n(v, -40);
365
- }
366
- /**
367
- * Return a new ``int48`` type for %%v%%.
368
- */
369
- static int48(v) {
370
- return n(v, -48);
371
- }
372
- /**
373
- * Return a new ``int56`` type for %%v%%.
374
- */
375
- static int56(v) {
376
- return n(v, -56);
377
- }
378
- /**
379
- * Return a new ``int64`` type for %%v%%.
380
- */
381
- static int64(v) {
382
- return n(v, -64);
383
- }
384
- /**
385
- * Return a new ``int72`` type for %%v%%.
386
- */
387
- static int72(v) {
388
- return n(v, -72);
389
- }
390
- /**
391
- * Return a new ``int80`` type for %%v%%.
392
- */
393
- static int80(v) {
394
- return n(v, -80);
395
- }
396
- /**
397
- * Return a new ``int88`` type for %%v%%.
398
- */
399
- static int88(v) {
400
- return n(v, -88);
401
- }
402
- /**
403
- * Return a new ``int96`` type for %%v%%.
404
- */
405
- static int96(v) {
406
- return n(v, -96);
407
- }
408
- /**
409
- * Return a new ``int104`` type for %%v%%.
410
- */
411
- static int104(v) {
412
- return n(v, -104);
413
- }
414
- /**
415
- * Return a new ``int112`` type for %%v%%.
416
- */
417
- static int112(v) {
418
- return n(v, -112);
419
- }
420
- /**
421
- * Return a new ``int120`` type for %%v%%.
422
- */
423
- static int120(v) {
424
- return n(v, -120);
425
- }
426
- /**
427
- * Return a new ``int128`` type for %%v%%.
428
- */
429
- static int128(v) {
430
- return n(v, -128);
431
- }
432
- /**
433
- * Return a new ``int136`` type for %%v%%.
434
- */
435
- static int136(v) {
436
- return n(v, -136);
437
- }
438
- /**
439
- * Return a new ``int144`` type for %%v%%.
440
- */
441
- static int144(v) {
442
- return n(v, -144);
233
+ match = cur.match(regexNumberPrefix);
234
+ if (match) {
235
+ token.text = match[1];
236
+ token.type = "NUMBER";
237
+ offset += token.text.length;
238
+ continue;
239
+ }
240
+ throw new Error(`unexpected token ${JSON.stringify(cur[0])} at position ${offset}`);
443
241
  }
444
- /**
445
- * Return a new ``int52`` type for %%v%%.
446
- */
447
- static int152(v) {
448
- return n(v, -152);
242
+ return new TokenString(tokens.map((t) => Object.freeze(t)));
243
+ }
244
+ function allowSingle(set, allowed) {
245
+ let included = [];
246
+ for (const key in allowed.keys()) {
247
+ if (set.has(key)) {
248
+ included.push(key);
249
+ }
449
250
  }
450
- /**
451
- * Return a new ``int160`` type for %%v%%.
452
- */
453
- static int160(v) {
454
- return n(v, -160);
251
+ if (included.length > 1) {
252
+ throw new Error(`conflicting types: ${included.join(", ")}`);
455
253
  }
456
- /**
457
- * Return a new ``int168`` type for %%v%%.
458
- */
459
- static int168(v) {
460
- return n(v, -168);
254
+ }
255
+ function consumeName(type, tokens) {
256
+ if (tokens.peekKeyword(KwTypes)) {
257
+ const keyword = tokens.pop().text;
258
+ if (keyword !== type) {
259
+ throw new Error(`expected ${type}, got ${keyword}`);
260
+ }
461
261
  }
462
- /**
463
- * Return a new ``int176`` type for %%v%%.
464
- */
465
- static int176(v) {
466
- return n(v, -176);
262
+ return tokens.popType("ID");
263
+ }
264
+ function consumeKeywords(tokens, allowed) {
265
+ const keywords = /* @__PURE__ */ new Set();
266
+ while (true) {
267
+ const keyword = tokens.peekType("KEYWORD");
268
+ if (keyword == null || allowed && !allowed.has(keyword)) {
269
+ break;
270
+ }
271
+ tokens.pop();
272
+ if (keywords.has(keyword)) {
273
+ throw new Error(`duplicate keywords: ${JSON.stringify(keyword)}`);
274
+ }
275
+ keywords.add(keyword);
467
276
  }
468
- /**
469
- * Return a new ``int184`` type for %%v%%.
470
- */
471
- static int184(v) {
472
- return n(v, -184);
277
+ return Object.freeze(keywords);
278
+ }
279
+ function consumeMutability(tokens) {
280
+ let modifiers = consumeKeywords(tokens, KwVisib);
281
+ allowSingle(modifiers, setify("constant payable nonpayable".split(" ")));
282
+ allowSingle(modifiers, setify("pure view payable nonpayable".split(" ")));
283
+ if (modifiers.has("view")) {
284
+ return "view";
473
285
  }
474
- /**
475
- * Return a new ``int92`` type for %%v%%.
476
- */
477
- static int192(v) {
478
- return n(v, -192);
286
+ if (modifiers.has("pure")) {
287
+ return "pure";
479
288
  }
480
- /**
481
- * Return a new ``int200`` type for %%v%%.
482
- */
483
- static int200(v) {
484
- return n(v, -200);
289
+ if (modifiers.has("payable")) {
290
+ return "payable";
485
291
  }
486
- /**
487
- * Return a new ``int208`` type for %%v%%.
488
- */
489
- static int208(v) {
490
- return n(v, -208);
292
+ if (modifiers.has("nonpayable")) {
293
+ return "nonpayable";
491
294
  }
492
- /**
493
- * Return a new ``int216`` type for %%v%%.
494
- */
495
- static int216(v) {
496
- return n(v, -216);
295
+ if (modifiers.has("constant")) {
296
+ return "view";
497
297
  }
498
- /**
499
- * Return a new ``int224`` type for %%v%%.
500
- */
501
- static int224(v) {
502
- return n(v, -224);
298
+ return "nonpayable";
299
+ }
300
+ function consumeParams(tokens, allowIndexed) {
301
+ return tokens.popParams().map((t) => ParamType.from(t, allowIndexed));
302
+ }
303
+ function consumeGas(tokens) {
304
+ if (tokens.peekType("AT")) {
305
+ tokens.pop();
306
+ if (tokens.peekType("NUMBER")) {
307
+ return getBigInt(tokens.pop().text);
308
+ }
309
+ throw new Error("invalid gas");
503
310
  }
504
- /**
505
- * Return a new ``int232`` type for %%v%%.
506
- */
507
- static int232(v) {
508
- return n(v, -232);
311
+ return null;
312
+ }
313
+ function consumeEoi(tokens) {
314
+ if (tokens.length) {
315
+ throw new Error(`unexpected tokens at offset ${tokens.offset}: ${tokens.toString()}`);
509
316
  }
510
- /**
511
- * Return a new ``int240`` type for %%v%%.
317
+ }
318
+ const regexArrayType = new RegExp(/^(.*)\[([0-9]*)\]$/);
319
+ function verifyBasicType(type) {
320
+ const match = type.match(regexType);
321
+ assertArgument(match, "invalid type", "type", type);
322
+ if (type === "uint") {
323
+ return "uint256";
324
+ }
325
+ if (type === "int") {
326
+ return "int256";
327
+ }
328
+ if (match[2]) {
329
+ const length = parseInt(match[2]);
330
+ assertArgument(length !== 0 && length <= 32, "invalid bytes length", "type", type);
331
+ } else if (match[3]) {
332
+ const size = parseInt(match[3]);
333
+ assertArgument(size !== 0 && size <= 256 && size % 8 === 0, "invalid numeric width", "type", type);
334
+ }
335
+ return type;
336
+ }
337
+ const _guard = {};
338
+ const internal = Symbol.for("_ethers_internal");
339
+ const ParamTypeInternal = "_ParamTypeInternal";
340
+ const ErrorFragmentInternal = "_ErrorInternal";
341
+ const EventFragmentInternal = "_EventInternal";
342
+ const ConstructorFragmentInternal = "_ConstructorInternal";
343
+ const FallbackFragmentInternal = "_FallbackInternal";
344
+ const FunctionFragmentInternal = "_FunctionInternal";
345
+ const StructFragmentInternal = "_StructInternal";
346
+ const _ParamType = class _ParamType {
347
+ /**
348
+ * @private
349
+ */
350
+ constructor(guard, name, type, baseType, indexed, components, arrayLength, arrayChildren) {
351
+ __privateAdd(this, _ParamType_instances);
352
+ /**
353
+ * The local name of the parameter (or ``""`` if unbound)
354
+ */
355
+ __publicField(this, "name");
356
+ /**
357
+ * The fully qualified type (e.g. ``"address"``, ``"tuple(address)"``,
358
+ * ``"uint256[3][]"``)
359
+ */
360
+ __publicField(this, "type");
361
+ /**
362
+ * The base type (e.g. ``"address"``, ``"tuple"``, ``"array"``)
363
+ */
364
+ __publicField(this, "baseType");
365
+ /**
366
+ * True if the parameters is indexed.
367
+ *
368
+ * For non-indexable types this is ``null``.
369
+ */
370
+ __publicField(this, "indexed");
371
+ /**
372
+ * The components for the tuple.
373
+ *
374
+ * For non-tuple types this is ``null``.
375
+ */
376
+ __publicField(this, "components");
377
+ /**
378
+ * The array length, or ``-1`` for dynamic-lengthed arrays.
379
+ *
380
+ * For non-array types this is ``null``.
381
+ */
382
+ __publicField(this, "arrayLength");
383
+ /**
384
+ * The type of each child in the array.
385
+ *
386
+ * For non-array types this is ``null``.
387
+ */
388
+ __publicField(this, "arrayChildren");
389
+ assertPrivate(guard, _guard, "ParamType");
390
+ Object.defineProperty(this, internal, { value: ParamTypeInternal });
391
+ if (components) {
392
+ components = Object.freeze(components.slice());
393
+ }
394
+ if (baseType === "array") {
395
+ if (arrayLength == null || arrayChildren == null) {
396
+ throw new Error("");
397
+ }
398
+ } else if (arrayLength != null || arrayChildren != null) {
399
+ throw new Error("");
400
+ }
401
+ if (baseType === "tuple") {
402
+ if (components == null) {
403
+ throw new Error("");
404
+ }
405
+ } else if (components != null) {
406
+ throw new Error("");
407
+ }
408
+ defineProperties(this, {
409
+ name,
410
+ type,
411
+ baseType,
412
+ indexed,
413
+ components,
414
+ arrayLength,
415
+ arrayChildren
416
+ });
417
+ }
418
+ /**
419
+ * Return a string representation of this type.
420
+ *
421
+ * For example,
422
+ *
423
+ * ``sighash" => "(uint256,address)"``
424
+ *
425
+ * ``"minimal" => "tuple(uint256,address) indexed"``
426
+ *
427
+ * ``"full" => "tuple(uint256 foo, address bar) indexed baz"``
512
428
  */
513
- static int240(v) {
514
- return n(v, -240);
429
+ format(format) {
430
+ if (format == null) {
431
+ format = "sighash";
432
+ }
433
+ if (format === "json") {
434
+ const name = this.name || "";
435
+ if (this.isArray()) {
436
+ const result3 = JSON.parse(this.arrayChildren.format("json"));
437
+ result3.name = name;
438
+ result3.type += `[${this.arrayLength < 0 ? "" : String(this.arrayLength)}]`;
439
+ return JSON.stringify(result3);
440
+ }
441
+ const result2 = {
442
+ type: this.baseType === "tuple" ? "tuple" : this.type,
443
+ name
444
+ };
445
+ if (typeof this.indexed === "boolean") {
446
+ result2.indexed = this.indexed;
447
+ }
448
+ if (this.isTuple()) {
449
+ result2.components = this.components.map((c) => JSON.parse(c.format(format)));
450
+ }
451
+ return JSON.stringify(result2);
452
+ }
453
+ let result = "";
454
+ if (this.isArray()) {
455
+ result += this.arrayChildren.format(format);
456
+ result += `[${this.arrayLength < 0 ? "" : String(this.arrayLength)}]`;
457
+ } else {
458
+ if (this.isTuple()) {
459
+ result += "(" + this.components.map((comp) => comp.format(format)).join(format === "full" ? ", " : ",") + ")";
460
+ } else {
461
+ result += this.type;
462
+ }
463
+ }
464
+ if (format !== "sighash") {
465
+ if (this.indexed === true) {
466
+ result += " indexed";
467
+ }
468
+ if (format === "full" && this.name) {
469
+ result += " " + this.name;
470
+ }
471
+ }
472
+ return result;
515
473
  }
516
474
  /**
517
- * Return a new ``int248`` type for %%v%%.
475
+ * Returns true if %%this%% is an Array type.
476
+ *
477
+ * This provides a type gaurd ensuring that [[arrayChildren]]
478
+ * and [[arrayLength]] are non-null.
518
479
  */
519
- static int248(v) {
520
- return n(v, -248);
480
+ isArray() {
481
+ return this.baseType === "array";
521
482
  }
522
483
  /**
523
- * Return a new ``int256`` type for %%v%%.
484
+ * Returns true if %%this%% is a Tuple type.
485
+ *
486
+ * This provides a type gaurd ensuring that [[components]]
487
+ * is non-null.
524
488
  */
525
- static int256(v) {
526
- return n(v, -256);
489
+ isTuple() {
490
+ return this.baseType === "tuple";
527
491
  }
528
492
  /**
529
- * Return a new ``int256`` type for %%v%%.
493
+ * Returns true if %%this%% is an Indexable type.
494
+ *
495
+ * This provides a type gaurd ensuring that [[indexed]]
496
+ * is non-null.
530
497
  */
531
- static int(v) {
532
- return n(v, -256);
498
+ isIndexable() {
499
+ return this.indexed != null;
533
500
  }
534
501
  /**
535
- * Return a new ``bytes1`` type for %%v%%.
502
+ * Walks the **ParamType** with %%value%%, calling %%process%%
503
+ * on each type, destructing the %%value%% recursively.
536
504
  */
537
- static bytes1(v) {
538
- return b(v, 1);
505
+ walk(value, process) {
506
+ if (this.isArray()) {
507
+ if (!Array.isArray(value)) {
508
+ throw new Error("invalid array value");
509
+ }
510
+ if (this.arrayLength !== -1 && value.length !== this.arrayLength) {
511
+ throw new Error("array is wrong length");
512
+ }
513
+ const _this = this;
514
+ return value.map((v) => _this.arrayChildren.walk(v, process));
515
+ }
516
+ if (this.isTuple()) {
517
+ if (!Array.isArray(value)) {
518
+ throw new Error("invalid tuple value");
519
+ }
520
+ if (value.length !== this.components.length) {
521
+ throw new Error("array is wrong length");
522
+ }
523
+ const _this = this;
524
+ return value.map((v, i) => _this.components[i].walk(v, process));
525
+ }
526
+ return process(this.type, value);
539
527
  }
540
528
  /**
541
- * Return a new ``bytes2`` type for %%v%%.
542
- */
543
- static bytes2(v) {
544
- return b(v, 2);
529
+ * Walks the **ParamType** with %%value%%, asynchronously calling
530
+ * %%process%% on each type, destructing the %%value%% recursively.
531
+ *
532
+ * This can be used to resolve ENS names by walking and resolving each
533
+ * ``"address"`` type.
534
+ */
535
+ async walkAsync(value, process) {
536
+ const promises = [];
537
+ const result = [value];
538
+ __privateMethod(this, _ParamType_instances, walkAsync_fn).call(this, promises, value, process, (value2) => {
539
+ result[0] = value2;
540
+ });
541
+ if (promises.length) {
542
+ await Promise.all(promises);
543
+ }
544
+ return result[0];
545
545
  }
546
546
  /**
547
- * Return a new ``bytes3`` type for %%v%%.
547
+ * Creates a new **ParamType** for %%obj%%.
548
+ *
549
+ * If %%allowIndexed%% then the ``indexed`` keyword is permitted,
550
+ * otherwise the ``indexed`` keyword will throw an error.
548
551
  */
549
- static bytes3(v) {
550
- return b(v, 3);
552
+ static from(obj, allowIndexed) {
553
+ if (_ParamType.isParamType(obj)) {
554
+ return obj;
555
+ }
556
+ if (typeof obj === "string") {
557
+ try {
558
+ return _ParamType.from(lex(obj), allowIndexed);
559
+ } catch (error) {
560
+ assertArgument(false, "invalid param type", "obj", obj);
561
+ }
562
+ } else if (obj instanceof TokenString) {
563
+ let type2 = "", baseType = "";
564
+ let comps = null;
565
+ if (consumeKeywords(obj, setify(["tuple"])).has("tuple") || obj.peekType("OPEN_PAREN")) {
566
+ baseType = "tuple";
567
+ comps = obj.popParams().map((t) => _ParamType.from(t));
568
+ type2 = `tuple(${comps.map((c) => c.format()).join(",")})`;
569
+ } else {
570
+ type2 = verifyBasicType(obj.popType("TYPE"));
571
+ baseType = type2;
572
+ }
573
+ let arrayChildren = null;
574
+ let arrayLength = null;
575
+ while (obj.length && obj.peekType("BRACKET")) {
576
+ const bracket = obj.pop();
577
+ arrayChildren = new _ParamType(_guard, "", type2, baseType, null, comps, arrayLength, arrayChildren);
578
+ arrayLength = bracket.value;
579
+ type2 += bracket.text;
580
+ baseType = "array";
581
+ comps = null;
582
+ }
583
+ let indexed2 = null;
584
+ const keywords = consumeKeywords(obj, KwModifiers);
585
+ if (keywords.has("indexed")) {
586
+ if (!allowIndexed) {
587
+ throw new Error("");
588
+ }
589
+ indexed2 = true;
590
+ }
591
+ const name2 = obj.peekType("ID") ? obj.pop().text : "";
592
+ if (obj.length) {
593
+ throw new Error("leftover tokens");
594
+ }
595
+ return new _ParamType(_guard, name2, type2, baseType, indexed2, comps, arrayLength, arrayChildren);
596
+ }
597
+ const name = obj.name;
598
+ assertArgument(!name || typeof name === "string" && name.match(regexId), "invalid name", "obj.name", name);
599
+ let indexed = obj.indexed;
600
+ if (indexed != null) {
601
+ assertArgument(allowIndexed, "parameter cannot be indexed", "obj.indexed", obj.indexed);
602
+ indexed = !!indexed;
603
+ }
604
+ let type = obj.type;
605
+ let arrayMatch = type.match(regexArrayType);
606
+ if (arrayMatch) {
607
+ const arrayLength = parseInt(arrayMatch[2] || "-1");
608
+ const arrayChildren = _ParamType.from({
609
+ type: arrayMatch[1],
610
+ components: obj.components
611
+ });
612
+ return new _ParamType(_guard, name || "", type, "array", indexed, null, arrayLength, arrayChildren);
613
+ }
614
+ if (type === "tuple" || type.startsWith(
615
+ "tuple("
616
+ /* fix: ) */
617
+ ) || type.startsWith(
618
+ "("
619
+ /* fix: ) */
620
+ )) {
621
+ const comps = obj.components != null ? obj.components.map((c) => _ParamType.from(c)) : null;
622
+ const tuple = new _ParamType(_guard, name || "", type, "tuple", indexed, comps, null, null);
623
+ return tuple;
624
+ }
625
+ type = verifyBasicType(obj.type);
626
+ return new _ParamType(_guard, name || "", type, type, indexed, null, null, null);
551
627
  }
552
628
  /**
553
- * Return a new ``bytes4`` type for %%v%%.
629
+ * Returns true if %%value%% is a **ParamType**.
554
630
  */
555
- static bytes4(v) {
556
- return b(v, 4);
631
+ static isParamType(value) {
632
+ return value && value[internal] === ParamTypeInternal;
557
633
  }
558
- /**
559
- * Return a new ``bytes5`` type for %%v%%.
560
- */
561
- static bytes5(v) {
562
- return b(v, 5);
634
+ };
635
+ _ParamType_instances = new WeakSet();
636
+ walkAsync_fn = function(promises, value, process, setValue) {
637
+ if (this.isArray()) {
638
+ if (!Array.isArray(value)) {
639
+ throw new Error("invalid array value");
640
+ }
641
+ if (this.arrayLength !== -1 && value.length !== this.arrayLength) {
642
+ throw new Error("array is wrong length");
643
+ }
644
+ const childType = this.arrayChildren;
645
+ const result2 = value.slice();
646
+ result2.forEach((value2, index) => {
647
+ var _a;
648
+ __privateMethod(_a = childType, _ParamType_instances, walkAsync_fn).call(_a, promises, value2, process, (value3) => {
649
+ result2[index] = value3;
650
+ });
651
+ });
652
+ setValue(result2);
653
+ return;
654
+ }
655
+ if (this.isTuple()) {
656
+ const components = this.components;
657
+ let result2;
658
+ if (Array.isArray(value)) {
659
+ result2 = value.slice();
660
+ } else {
661
+ if (value == null || typeof value !== "object") {
662
+ throw new Error("invalid tuple value");
663
+ }
664
+ result2 = components.map((param) => {
665
+ if (!param.name) {
666
+ throw new Error("cannot use object value with unnamed components");
667
+ }
668
+ if (!(param.name in value)) {
669
+ throw new Error(`missing value for component ${param.name}`);
670
+ }
671
+ return value[param.name];
672
+ });
673
+ }
674
+ if (result2.length !== this.components.length) {
675
+ throw new Error("array is wrong length");
676
+ }
677
+ result2.forEach((value2, index) => {
678
+ var _a;
679
+ __privateMethod(_a = components[index], _ParamType_instances, walkAsync_fn).call(_a, promises, value2, process, (value3) => {
680
+ result2[index] = value3;
681
+ });
682
+ });
683
+ setValue(result2);
684
+ return;
685
+ }
686
+ const result = process(this.type, value);
687
+ if (result.then) {
688
+ promises.push(async function() {
689
+ setValue(await result);
690
+ }());
691
+ } else {
692
+ setValue(result);
563
693
  }
694
+ };
695
+ let ParamType = _ParamType;
696
+ class Fragment {
564
697
  /**
565
- * Return a new ``bytes6`` type for %%v%%.
698
+ * @private
566
699
  */
567
- static bytes6(v) {
568
- return b(v, 6);
700
+ constructor(guard, type, inputs) {
701
+ /**
702
+ * The type of the fragment.
703
+ */
704
+ __publicField(this, "type");
705
+ /**
706
+ * The inputs for the fragment.
707
+ */
708
+ __publicField(this, "inputs");
709
+ assertPrivate(guard, _guard, "Fragment");
710
+ inputs = Object.freeze(inputs.slice());
711
+ defineProperties(this, { type, inputs });
569
712
  }
570
713
  /**
571
- * Return a new ``bytes7`` type for %%v%%.
714
+ * Creates a new **Fragment** for %%obj%%, wich can be any supported
715
+ * ABI frgament type.
572
716
  */
573
- static bytes7(v) {
574
- return b(v, 7);
717
+ static from(obj) {
718
+ if (typeof obj === "string") {
719
+ try {
720
+ Fragment.from(JSON.parse(obj));
721
+ } catch (e) {
722
+ }
723
+ return Fragment.from(lex(obj));
724
+ }
725
+ if (obj instanceof TokenString) {
726
+ const type = obj.peekKeyword(KwTypes);
727
+ switch (type) {
728
+ case "constructor":
729
+ return ConstructorFragment.from(obj);
730
+ case "error":
731
+ return ErrorFragment.from(obj);
732
+ case "event":
733
+ return EventFragment.from(obj);
734
+ case "fallback":
735
+ case "receive":
736
+ return FallbackFragment.from(obj);
737
+ case "function":
738
+ return FunctionFragment.from(obj);
739
+ case "struct":
740
+ return StructFragment.from(obj);
741
+ }
742
+ } else if (typeof obj === "object") {
743
+ switch (obj.type) {
744
+ case "constructor":
745
+ return ConstructorFragment.from(obj);
746
+ case "error":
747
+ return ErrorFragment.from(obj);
748
+ case "event":
749
+ return EventFragment.from(obj);
750
+ case "fallback":
751
+ case "receive":
752
+ return FallbackFragment.from(obj);
753
+ case "function":
754
+ return FunctionFragment.from(obj);
755
+ case "struct":
756
+ return StructFragment.from(obj);
757
+ }
758
+ assert(false, `unsupported type: ${obj.type}`, "UNSUPPORTED_OPERATION", {
759
+ operation: "Fragment.from"
760
+ });
761
+ }
762
+ assertArgument(false, "unsupported frgament object", "obj", obj);
575
763
  }
576
764
  /**
577
- * Return a new ``bytes8`` type for %%v%%.
765
+ * Returns true if %%value%% is a [[ConstructorFragment]].
578
766
  */
579
- static bytes8(v) {
580
- return b(v, 8);
767
+ static isConstructor(value) {
768
+ return ConstructorFragment.isFragment(value);
581
769
  }
582
770
  /**
583
- * Return a new ``bytes9`` type for %%v%%.
771
+ * Returns true if %%value%% is an [[ErrorFragment]].
584
772
  */
585
- static bytes9(v) {
586
- return b(v, 9);
773
+ static isError(value) {
774
+ return ErrorFragment.isFragment(value);
587
775
  }
588
776
  /**
589
- * Return a new ``bytes10`` type for %%v%%.
777
+ * Returns true if %%value%% is an [[EventFragment]].
590
778
  */
591
- static bytes10(v) {
592
- return b(v, 10);
779
+ static isEvent(value) {
780
+ return EventFragment.isFragment(value);
593
781
  }
594
782
  /**
595
- * Return a new ``bytes11`` type for %%v%%.
783
+ * Returns true if %%value%% is a [[FunctionFragment]].
596
784
  */
597
- static bytes11(v) {
598
- return b(v, 11);
785
+ static isFunction(value) {
786
+ return FunctionFragment.isFragment(value);
599
787
  }
600
788
  /**
601
- * Return a new ``bytes12`` type for %%v%%.
789
+ * Returns true if %%value%% is a [[StructFragment]].
602
790
  */
603
- static bytes12(v) {
604
- return b(v, 12);
791
+ static isStruct(value) {
792
+ return StructFragment.isFragment(value);
605
793
  }
794
+ }
795
+ class NamedFragment extends Fragment {
606
796
  /**
607
- * Return a new ``bytes13`` type for %%v%%.
797
+ * @private
608
798
  */
609
- static bytes13(v) {
610
- return b(v, 13);
799
+ constructor(guard, type, name, inputs) {
800
+ super(guard, type, inputs);
801
+ /**
802
+ * The name of the fragment.
803
+ */
804
+ __publicField(this, "name");
805
+ assertArgument(typeof name === "string" && name.match(regexId), "invalid identifier", "name", name);
806
+ inputs = Object.freeze(inputs.slice());
807
+ defineProperties(this, { name });
611
808
  }
809
+ }
810
+ function joinParams(format, params) {
811
+ return "(" + params.map((p) => p.format(format)).join(format === "full" ? ", " : ",") + ")";
812
+ }
813
+ class ErrorFragment extends NamedFragment {
612
814
  /**
613
- * Return a new ``bytes14`` type for %%v%%.
815
+ * @private
614
816
  */
615
- static bytes14(v) {
616
- return b(v, 14);
817
+ constructor(guard, name, inputs) {
818
+ super(guard, "error", name, inputs);
819
+ Object.defineProperty(this, internal, { value: ErrorFragmentInternal });
617
820
  }
618
821
  /**
619
- * Return a new ``bytes15`` type for %%v%%.
822
+ * The Custom Error selector.
620
823
  */
621
- static bytes15(v) {
622
- return b(v, 15);
824
+ get selector() {
825
+ return id(this.format("sighash")).substring(0, 10);
623
826
  }
624
827
  /**
625
- * Return a new ``bytes16`` type for %%v%%.
828
+ * Returns a string representation of this fragment as %%format%%.
626
829
  */
627
- static bytes16(v) {
628
- return b(v, 16);
830
+ format(format) {
831
+ if (format == null) {
832
+ format = "sighash";
833
+ }
834
+ if (format === "json") {
835
+ return JSON.stringify({
836
+ type: "error",
837
+ name: this.name,
838
+ inputs: this.inputs.map((input) => JSON.parse(input.format(format)))
839
+ });
840
+ }
841
+ const result = [];
842
+ if (format !== "sighash") {
843
+ result.push("error");
844
+ }
845
+ result.push(this.name + joinParams(format, this.inputs));
846
+ return result.join(" ");
629
847
  }
630
848
  /**
631
- * Return a new ``bytes17`` type for %%v%%.
849
+ * Returns a new **ErrorFragment** for %%obj%%.
632
850
  */
633
- static bytes17(v) {
634
- return b(v, 17);
851
+ static from(obj) {
852
+ if (ErrorFragment.isFragment(obj)) {
853
+ return obj;
854
+ }
855
+ if (typeof obj === "string") {
856
+ return ErrorFragment.from(lex(obj));
857
+ } else if (obj instanceof TokenString) {
858
+ const name = consumeName("error", obj);
859
+ const inputs = consumeParams(obj);
860
+ consumeEoi(obj);
861
+ return new ErrorFragment(_guard, name, inputs);
862
+ }
863
+ return new ErrorFragment(_guard, obj.name, obj.inputs ? obj.inputs.map(ParamType.from) : []);
635
864
  }
636
865
  /**
637
- * Return a new ``bytes18`` type for %%v%%.
866
+ * Returns ``true`` and provides a type guard if %%value%% is an
867
+ * **ErrorFragment**.
638
868
  */
639
- static bytes18(v) {
640
- return b(v, 18);
869
+ static isFragment(value) {
870
+ return value && value[internal] === ErrorFragmentInternal;
641
871
  }
872
+ }
873
+ class EventFragment extends NamedFragment {
642
874
  /**
643
- * Return a new ``bytes19`` type for %%v%%.
875
+ * @private
644
876
  */
645
- static bytes19(v) {
646
- return b(v, 19);
877
+ constructor(guard, name, inputs, anonymous) {
878
+ super(guard, "event", name, inputs);
879
+ /**
880
+ * Whether this event is anonymous.
881
+ */
882
+ __publicField(this, "anonymous");
883
+ Object.defineProperty(this, internal, { value: EventFragmentInternal });
884
+ defineProperties(this, { anonymous });
647
885
  }
648
886
  /**
649
- * Return a new ``bytes20`` type for %%v%%.
887
+ * The Event topic hash.
650
888
  */
651
- static bytes20(v) {
652
- return b(v, 20);
889
+ get topicHash() {
890
+ return id(this.format("sighash"));
653
891
  }
654
892
  /**
655
- * Return a new ``bytes21`` type for %%v%%.
893
+ * Returns a string representation of this event as %%format%%.
656
894
  */
657
- static bytes21(v) {
658
- return b(v, 21);
895
+ format(format) {
896
+ if (format == null) {
897
+ format = "sighash";
898
+ }
899
+ if (format === "json") {
900
+ return JSON.stringify({
901
+ type: "event",
902
+ anonymous: this.anonymous,
903
+ name: this.name,
904
+ inputs: this.inputs.map((i) => JSON.parse(i.format(format)))
905
+ });
906
+ }
907
+ const result = [];
908
+ if (format !== "sighash") {
909
+ result.push("event");
910
+ }
911
+ result.push(this.name + joinParams(format, this.inputs));
912
+ if (format !== "sighash" && this.anonymous) {
913
+ result.push("anonymous");
914
+ }
915
+ return result.join(" ");
659
916
  }
660
917
  /**
661
- * Return a new ``bytes22`` type for %%v%%.
918
+ * Return the topic hash for an event with %%name%% and %%params%%.
662
919
  */
663
- static bytes22(v) {
664
- return b(v, 22);
920
+ static getTopicHash(name, params) {
921
+ params = (params || []).map((p) => ParamType.from(p));
922
+ const fragment = new EventFragment(_guard, name, params, false);
923
+ return fragment.topicHash;
665
924
  }
666
925
  /**
667
- * Return a new ``bytes23`` type for %%v%%.
926
+ * Returns a new **EventFragment** for %%obj%%.
668
927
  */
669
- static bytes23(v) {
670
- return b(v, 23);
928
+ static from(obj) {
929
+ if (EventFragment.isFragment(obj)) {
930
+ return obj;
931
+ }
932
+ if (typeof obj === "string") {
933
+ try {
934
+ return EventFragment.from(lex(obj));
935
+ } catch (error) {
936
+ assertArgument(false, "invalid event fragment", "obj", obj);
937
+ }
938
+ } else if (obj instanceof TokenString) {
939
+ const name = consumeName("event", obj);
940
+ const inputs = consumeParams(obj, true);
941
+ const anonymous = !!consumeKeywords(obj, setify(["anonymous"])).has("anonymous");
942
+ consumeEoi(obj);
943
+ return new EventFragment(_guard, name, inputs, anonymous);
944
+ }
945
+ return new EventFragment(_guard, obj.name, obj.inputs ? obj.inputs.map((p) => ParamType.from(p, true)) : [], !!obj.anonymous);
671
946
  }
672
947
  /**
673
- * Return a new ``bytes24`` type for %%v%%.
948
+ * Returns ``true`` and provides a type guard if %%value%% is an
949
+ * **EventFragment**.
674
950
  */
675
- static bytes24(v) {
676
- return b(v, 24);
951
+ static isFragment(value) {
952
+ return value && value[internal] === EventFragmentInternal;
677
953
  }
954
+ }
955
+ class ConstructorFragment extends Fragment {
678
956
  /**
679
- * Return a new ``bytes25`` type for %%v%%.
957
+ * @private
680
958
  */
681
- static bytes25(v) {
682
- return b(v, 25);
959
+ constructor(guard, type, inputs, payable, gas) {
960
+ super(guard, type, inputs);
961
+ /**
962
+ * Whether the constructor can receive an endowment.
963
+ */
964
+ __publicField(this, "payable");
965
+ /**
966
+ * The recommended gas limit for deployment or ``null``.
967
+ */
968
+ __publicField(this, "gas");
969
+ Object.defineProperty(this, internal, { value: ConstructorFragmentInternal });
970
+ defineProperties(this, { payable, gas });
971
+ }
972
+ /**
973
+ * Returns a string representation of this constructor as %%format%%.
974
+ */
975
+ format(format) {
976
+ assert(format != null && format !== "sighash", "cannot format a constructor for sighash", "UNSUPPORTED_OPERATION", { operation: "format(sighash)" });
977
+ if (format === "json") {
978
+ return JSON.stringify({
979
+ type: "constructor",
980
+ stateMutability: this.payable ? "payable" : "undefined",
981
+ payable: this.payable,
982
+ gas: this.gas != null ? this.gas : void 0,
983
+ inputs: this.inputs.map((i) => JSON.parse(i.format(format)))
984
+ });
985
+ }
986
+ const result = [`constructor${joinParams(format, this.inputs)}`];
987
+ if (this.payable) {
988
+ result.push("payable");
989
+ }
990
+ if (this.gas != null) {
991
+ result.push(`@${this.gas.toString()}`);
992
+ }
993
+ return result.join(" ");
683
994
  }
684
995
  /**
685
- * Return a new ``bytes26`` type for %%v%%.
996
+ * Returns a new **ConstructorFragment** for %%obj%%.
686
997
  */
687
- static bytes26(v) {
688
- return b(v, 26);
998
+ static from(obj) {
999
+ if (ConstructorFragment.isFragment(obj)) {
1000
+ return obj;
1001
+ }
1002
+ if (typeof obj === "string") {
1003
+ try {
1004
+ return ConstructorFragment.from(lex(obj));
1005
+ } catch (error) {
1006
+ assertArgument(false, "invalid constuctor fragment", "obj", obj);
1007
+ }
1008
+ } else if (obj instanceof TokenString) {
1009
+ consumeKeywords(obj, setify(["constructor"]));
1010
+ const inputs = consumeParams(obj);
1011
+ const payable = !!consumeKeywords(obj, KwVisibDeploy).has("payable");
1012
+ const gas = consumeGas(obj);
1013
+ consumeEoi(obj);
1014
+ return new ConstructorFragment(_guard, "constructor", inputs, payable, gas);
1015
+ }
1016
+ return new ConstructorFragment(_guard, "constructor", obj.inputs ? obj.inputs.map(ParamType.from) : [], !!obj.payable, obj.gas != null ? obj.gas : null);
689
1017
  }
690
1018
  /**
691
- * Return a new ``bytes27`` type for %%v%%.
1019
+ * Returns ``true`` and provides a type guard if %%value%% is a
1020
+ * **ConstructorFragment**.
692
1021
  */
693
- static bytes27(v) {
694
- return b(v, 27);
1022
+ static isFragment(value) {
1023
+ return value && value[internal] === ConstructorFragmentInternal;
695
1024
  }
696
- /**
697
- * Return a new ``bytes28`` type for %%v%%.
698
- */
699
- static bytes28(v) {
700
- return b(v, 28);
1025
+ }
1026
+ class FallbackFragment extends Fragment {
1027
+ constructor(guard, inputs, payable) {
1028
+ super(guard, "fallback", inputs);
1029
+ /**
1030
+ * If the function can be sent value during invocation.
1031
+ */
1032
+ __publicField(this, "payable");
1033
+ Object.defineProperty(this, internal, { value: FallbackFragmentInternal });
1034
+ defineProperties(this, { payable });
701
1035
  }
702
1036
  /**
703
- * Return a new ``bytes29`` type for %%v%%.
1037
+ * Returns a string representation of this fallback as %%format%%.
704
1038
  */
705
- static bytes29(v) {
706
- return b(v, 29);
1039
+ format(format) {
1040
+ const type = this.inputs.length === 0 ? "receive" : "fallback";
1041
+ if (format === "json") {
1042
+ const stateMutability = this.payable ? "payable" : "nonpayable";
1043
+ return JSON.stringify({ type, stateMutability });
1044
+ }
1045
+ return `${type}()${this.payable ? " payable" : ""}`;
707
1046
  }
708
1047
  /**
709
- * Return a new ``bytes30`` type for %%v%%.
1048
+ * Returns a new **FallbackFragment** for %%obj%%.
710
1049
  */
711
- static bytes30(v) {
712
- return b(v, 30);
1050
+ static from(obj) {
1051
+ if (FallbackFragment.isFragment(obj)) {
1052
+ return obj;
1053
+ }
1054
+ if (typeof obj === "string") {
1055
+ try {
1056
+ return FallbackFragment.from(lex(obj));
1057
+ } catch (error) {
1058
+ assertArgument(false, "invalid fallback fragment", "obj", obj);
1059
+ }
1060
+ } else if (obj instanceof TokenString) {
1061
+ const errorObj = obj.toString();
1062
+ const topIsValid = obj.peekKeyword(setify(["fallback", "receive"]));
1063
+ assertArgument(topIsValid, "type must be fallback or receive", "obj", errorObj);
1064
+ const type = obj.popKeyword(setify(["fallback", "receive"]));
1065
+ if (type === "receive") {
1066
+ const inputs2 = consumeParams(obj);
1067
+ assertArgument(inputs2.length === 0, `receive cannot have arguments`, "obj.inputs", inputs2);
1068
+ consumeKeywords(obj, setify(["payable"]));
1069
+ consumeEoi(obj);
1070
+ return new FallbackFragment(_guard, [], true);
1071
+ }
1072
+ let inputs = consumeParams(obj);
1073
+ if (inputs.length) {
1074
+ assertArgument(inputs.length === 1 && inputs[0].type === "bytes", "invalid fallback inputs", "obj.inputs", inputs.map((i) => i.format("minimal")).join(", "));
1075
+ } else {
1076
+ inputs = [ParamType.from("bytes")];
1077
+ }
1078
+ const mutability = consumeMutability(obj);
1079
+ assertArgument(mutability === "nonpayable" || mutability === "payable", "fallback cannot be constants", "obj.stateMutability", mutability);
1080
+ if (consumeKeywords(obj, setify(["returns"])).has("returns")) {
1081
+ const outputs = consumeParams(obj);
1082
+ assertArgument(outputs.length === 1 && outputs[0].type === "bytes", "invalid fallback outputs", "obj.outputs", outputs.map((i) => i.format("minimal")).join(", "));
1083
+ }
1084
+ consumeEoi(obj);
1085
+ return new FallbackFragment(_guard, inputs, mutability === "payable");
1086
+ }
1087
+ if (obj.type === "receive") {
1088
+ return new FallbackFragment(_guard, [], true);
1089
+ }
1090
+ if (obj.type === "fallback") {
1091
+ const inputs = [ParamType.from("bytes")];
1092
+ const payable = obj.stateMutability === "payable";
1093
+ return new FallbackFragment(_guard, inputs, payable);
1094
+ }
1095
+ assertArgument(false, "invalid fallback description", "obj", obj);
713
1096
  }
714
1097
  /**
715
- * Return a new ``bytes31`` type for %%v%%.
1098
+ * Returns ``true`` and provides a type guard if %%value%% is a
1099
+ * **FallbackFragment**.
716
1100
  */
717
- static bytes31(v) {
718
- return b(v, 31);
1101
+ static isFragment(value) {
1102
+ return value && value[internal] === FallbackFragmentInternal;
719
1103
  }
1104
+ }
1105
+ class FunctionFragment extends NamedFragment {
720
1106
  /**
721
- * Return a new ``bytes32`` type for %%v%%.
1107
+ * @private
722
1108
  */
723
- static bytes32(v) {
724
- return b(v, 32);
1109
+ constructor(guard, name, stateMutability, inputs, outputs, gas) {
1110
+ super(guard, "function", name, inputs);
1111
+ /**
1112
+ * If the function is constant (e.g. ``pure`` or ``view`` functions).
1113
+ */
1114
+ __publicField(this, "constant");
1115
+ /**
1116
+ * The returned types for the result of calling this function.
1117
+ */
1118
+ __publicField(this, "outputs");
1119
+ /**
1120
+ * The state mutability (e.g. ``payable``, ``nonpayable``, ``view``
1121
+ * or ``pure``)
1122
+ */
1123
+ __publicField(this, "stateMutability");
1124
+ /**
1125
+ * If the function can be sent value during invocation.
1126
+ */
1127
+ __publicField(this, "payable");
1128
+ /**
1129
+ * The recommended gas limit to send when calling this function.
1130
+ */
1131
+ __publicField(this, "gas");
1132
+ Object.defineProperty(this, internal, { value: FunctionFragmentInternal });
1133
+ outputs = Object.freeze(outputs.slice());
1134
+ const constant = stateMutability === "view" || stateMutability === "pure";
1135
+ const payable = stateMutability === "payable";
1136
+ defineProperties(this, { constant, gas, outputs, payable, stateMutability });
725
1137
  }
726
1138
  /**
727
- * Return a new ``address`` type for %%v%%.
1139
+ * The Function selector.
728
1140
  */
729
- static address(v) {
730
- return new _Typed(_gaurd, "address", v);
1141
+ get selector() {
1142
+ return id(this.format("sighash")).substring(0, 10);
731
1143
  }
732
1144
  /**
733
- * Return a new ``bool`` type for %%v%%.
1145
+ * Returns a string representation of this function as %%format%%.
734
1146
  */
735
- static bool(v) {
736
- return new _Typed(_gaurd, "bool", !!v);
1147
+ format(format) {
1148
+ if (format == null) {
1149
+ format = "sighash";
1150
+ }
1151
+ if (format === "json") {
1152
+ return JSON.stringify({
1153
+ type: "function",
1154
+ name: this.name,
1155
+ constant: this.constant,
1156
+ stateMutability: this.stateMutability !== "nonpayable" ? this.stateMutability : void 0,
1157
+ payable: this.payable,
1158
+ gas: this.gas != null ? this.gas : void 0,
1159
+ inputs: this.inputs.map((i) => JSON.parse(i.format(format))),
1160
+ outputs: this.outputs.map((o) => JSON.parse(o.format(format)))
1161
+ });
1162
+ }
1163
+ const result = [];
1164
+ if (format !== "sighash") {
1165
+ result.push("function");
1166
+ }
1167
+ result.push(this.name + joinParams(format, this.inputs));
1168
+ if (format !== "sighash") {
1169
+ if (this.stateMutability !== "nonpayable") {
1170
+ result.push(this.stateMutability);
1171
+ }
1172
+ if (this.outputs && this.outputs.length) {
1173
+ result.push("returns");
1174
+ result.push(joinParams(format, this.outputs));
1175
+ }
1176
+ if (this.gas != null) {
1177
+ result.push(`@${this.gas.toString()}`);
1178
+ }
1179
+ }
1180
+ return result.join(" ");
737
1181
  }
738
1182
  /**
739
- * Return a new ``bytes`` type for %%v%%.
1183
+ * Return the selector for a function with %%name%% and %%params%%.
740
1184
  */
741
- static bytes(v) {
742
- return new _Typed(_gaurd, "bytes", v);
1185
+ static getSelector(name, params) {
1186
+ params = (params || []).map((p) => ParamType.from(p));
1187
+ const fragment = new FunctionFragment(_guard, name, "view", params, [], null);
1188
+ return fragment.selector;
743
1189
  }
744
1190
  /**
745
- * Return a new ``string`` type for %%v%%.
1191
+ * Returns a new **FunctionFragment** for %%obj%%.
746
1192
  */
747
- static string(v) {
748
- return new _Typed(_gaurd, "string", v);
1193
+ static from(obj) {
1194
+ if (FunctionFragment.isFragment(obj)) {
1195
+ return obj;
1196
+ }
1197
+ if (typeof obj === "string") {
1198
+ try {
1199
+ return FunctionFragment.from(lex(obj));
1200
+ } catch (error) {
1201
+ assertArgument(false, "invalid function fragment", "obj", obj);
1202
+ }
1203
+ } else if (obj instanceof TokenString) {
1204
+ const name = consumeName("function", obj);
1205
+ const inputs = consumeParams(obj);
1206
+ const mutability = consumeMutability(obj);
1207
+ let outputs = [];
1208
+ if (consumeKeywords(obj, setify(["returns"])).has("returns")) {
1209
+ outputs = consumeParams(obj);
1210
+ }
1211
+ const gas = consumeGas(obj);
1212
+ consumeEoi(obj);
1213
+ return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas);
1214
+ }
1215
+ let stateMutability = obj.stateMutability;
1216
+ if (stateMutability == null) {
1217
+ stateMutability = "payable";
1218
+ if (typeof obj.constant === "boolean") {
1219
+ stateMutability = "view";
1220
+ if (!obj.constant) {
1221
+ stateMutability = "payable";
1222
+ if (typeof obj.payable === "boolean" && !obj.payable) {
1223
+ stateMutability = "nonpayable";
1224
+ }
1225
+ }
1226
+ } else if (typeof obj.payable === "boolean" && !obj.payable) {
1227
+ stateMutability = "nonpayable";
1228
+ }
1229
+ }
1230
+ return new FunctionFragment(_guard, obj.name, stateMutability, obj.inputs ? obj.inputs.map(ParamType.from) : [], obj.outputs ? obj.outputs.map(ParamType.from) : [], obj.gas != null ? obj.gas : null);
749
1231
  }
750
1232
  /**
751
- * Return a new ``array`` type for %%v%%, allowing %%dynamic%% length.
1233
+ * Returns ``true`` and provides a type guard if %%value%% is a
1234
+ * **FunctionFragment**.
752
1235
  */
753
- static array(v, dynamic) {
754
- throw new Error("not implemented yet");
1236
+ static isFragment(value) {
1237
+ return value && value[internal] === FunctionFragmentInternal;
755
1238
  }
1239
+ }
1240
+ class StructFragment extends NamedFragment {
756
1241
  /**
757
- * Return a new ``tuple`` type for %%v%%, with the optional %%name%%.
1242
+ * @private
758
1243
  */
759
- static tuple(v, name) {
760
- throw new Error("not implemented yet");
1244
+ constructor(guard, name, inputs) {
1245
+ super(guard, "struct", name, inputs);
1246
+ Object.defineProperty(this, internal, { value: StructFragmentInternal });
761
1247
  }
762
1248
  /**
763
- * Return a new ``uint8`` type for %%v%%.
1249
+ * Returns a string representation of this struct as %%format%%.
764
1250
  */
765
- static overrides(v) {
766
- return new _Typed(_gaurd, "overrides", Object.assign({}, v));
1251
+ format() {
1252
+ throw new Error("@TODO");
767
1253
  }
768
1254
  /**
769
- * Returns true only if %%value%% is a [[Typed]] instance.
1255
+ * Returns a new **StructFragment** for %%obj%%.
770
1256
  */
771
- static isTyped(value) {
772
- return value && typeof value === "object" && "_typedSymbol" in value && value._typedSymbol === _typedSymbol;
1257
+ static from(obj) {
1258
+ if (typeof obj === "string") {
1259
+ try {
1260
+ return StructFragment.from(lex(obj));
1261
+ } catch (error) {
1262
+ assertArgument(false, "invalid struct fragment", "obj", obj);
1263
+ }
1264
+ } else if (obj instanceof TokenString) {
1265
+ const name = consumeName("struct", obj);
1266
+ const inputs = consumeParams(obj);
1267
+ consumeEoi(obj);
1268
+ return new StructFragment(_guard, name, inputs);
1269
+ }
1270
+ return new StructFragment(_guard, obj.name, obj.inputs ? obj.inputs.map(ParamType.from) : []);
773
1271
  }
1272
+ // @TODO: fix this return type
774
1273
  /**
775
- * If the value is a [[Typed]] instance, validates the underlying value
776
- * and returns it, otherwise returns value directly.
777
- *
778
- * This is useful for functions that with to accept either a [[Typed]]
779
- * object or values.
1274
+ * Returns ``true`` and provides a type guard if %%value%% is a
1275
+ * **StructFragment**.
780
1276
  */
781
- static dereference(value, type) {
782
- if (_Typed.isTyped(value)) {
783
- if (value.type !== type) {
784
- throw new Error(`invalid type: expecetd ${type}, got ${value.type}`);
785
- }
786
- return value.value;
787
- }
788
- return value;
1277
+ static isFragment(value) {
1278
+ return value && value[internal] === StructFragmentInternal;
789
1279
  }
790
- };
791
- _options = new WeakMap();
792
- let Typed = _Typed;
1280
+ }
793
1281
  export {
794
- Typed
1282
+ ConstructorFragment,
1283
+ ErrorFragment,
1284
+ EventFragment,
1285
+ FallbackFragment,
1286
+ Fragment,
1287
+ FunctionFragment,
1288
+ NamedFragment,
1289
+ ParamType,
1290
+ StructFragment
795
1291
  };
796
1292
  //# sourceMappingURL=standards-sdk.es51.js.map