@kontor/kontor-sdk 1.0.0-alpha.39 → 1.0.0-alpha.40

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 (270) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/sdk/actions/kontor/public/call-view.js.map +1 -1
  3. package/dist/cjs/sdk/chains/definitions/signet.js +2 -2
  4. package/dist/cjs/sdk/test/e2e.test-deprecated.js +2 -0
  5. package/dist/cjs/sdk/test/e2e.test-deprecated.js.map +1 -0
  6. package/dist/cjs/sdk/utils/wit/codecs/bool.js +9 -21
  7. package/dist/cjs/sdk/utils/wit/codecs/bool.js.map +1 -1
  8. package/dist/cjs/sdk/utils/wit/codecs/contract-address.js +92 -0
  9. package/dist/cjs/sdk/utils/wit/codecs/contract-address.js.map +1 -0
  10. package/dist/cjs/sdk/utils/wit/codecs/index.js +29 -0
  11. package/dist/cjs/sdk/utils/wit/codecs/index.js.map +1 -0
  12. package/dist/cjs/sdk/utils/wit/codecs/list.js +21 -95
  13. package/dist/cjs/sdk/utils/wit/codecs/list.js.map +1 -1
  14. package/dist/cjs/sdk/utils/wit/codecs/numerics.js +228 -0
  15. package/dist/cjs/sdk/utils/wit/codecs/numerics.js.map +1 -0
  16. package/dist/cjs/sdk/utils/wit/codecs/option.js +21 -72
  17. package/dist/cjs/sdk/utils/wit/codecs/option.js.map +1 -1
  18. package/dist/cjs/sdk/utils/wit/codecs/result.js +32 -0
  19. package/dist/cjs/sdk/utils/wit/codecs/result.js.map +1 -0
  20. package/dist/cjs/sdk/utils/wit/codecs/string.js +16 -21
  21. package/dist/cjs/sdk/utils/wit/codecs/string.js.map +1 -1
  22. package/dist/cjs/sdk/utils/wit/codecs/unit.js +11 -19
  23. package/dist/cjs/sdk/utils/wit/codecs/unit.js.map +1 -1
  24. package/dist/cjs/sdk/utils/wit/codecs/util.js +185 -0
  25. package/dist/cjs/sdk/utils/wit/codecs/util.js.map +1 -0
  26. package/dist/cjs/sdk/utils/wit/decode-wit-parameter.js +297 -163
  27. package/dist/cjs/sdk/utils/wit/decode-wit-parameter.js.map +1 -1
  28. package/dist/cjs/sdk/utils/wit/encode-wit-parameters.js +214 -221
  29. package/dist/cjs/sdk/utils/wit/encode-wit-parameters.js.map +1 -1
  30. package/dist/cjs/tsconfig.build.tsbuildinfo +1 -1
  31. package/dist/cjs/wit/built-ins.js +19 -0
  32. package/dist/cjs/wit/built-ins.js.map +1 -0
  33. package/dist/cjs/wit/regex.js +1 -1
  34. package/dist/cjs/wit/regex.js.map +1 -1
  35. package/dist/cjs/wit/wit-parser/core/errors/signature.js +17 -2
  36. package/dist/cjs/wit/wit-parser/core/errors/signature.js.map +1 -1
  37. package/dist/cjs/wit/wit-parser/core/signatures.js +18 -0
  38. package/dist/cjs/wit/wit-parser/core/signatures.js.map +1 -1
  39. package/dist/cjs/wit/wit-parser/core/types/{records.js → user-defined.js} +1 -1
  40. package/dist/cjs/wit/wit-parser/core/types/user-defined.js.map +1 -0
  41. package/dist/cjs/wit/wit-parser/core/user-defined.js +271 -0
  42. package/dist/cjs/wit/wit-parser/core/user-defined.js.map +1 -0
  43. package/dist/cjs/wit/wit-parser/core/utils.js +29 -7
  44. package/dist/cjs/wit/wit-parser/core/utils.js.map +1 -1
  45. package/dist/cjs/wit/wit-parser/parse-wit-parameter.js +9 -3
  46. package/dist/cjs/wit/wit-parser/parse-wit-parameter.js.map +1 -1
  47. package/dist/cjs/wit/wit-parser/parse-wit.js +7 -3
  48. package/dist/cjs/wit/wit-parser/parse-wit.js.map +1 -1
  49. package/dist/esm/sdk/actions/kontor/public/call-view.js.map +1 -1
  50. package/dist/esm/sdk/chains/definitions/signet.js +2 -2
  51. package/dist/esm/sdk/test/e2e.test-deprecated.js +197 -0
  52. package/dist/esm/sdk/test/e2e.test-deprecated.js.map +1 -0
  53. package/dist/esm/sdk/utils/wit/codecs/bool.js +9 -21
  54. package/dist/esm/sdk/utils/wit/codecs/bool.js.map +1 -1
  55. package/dist/esm/sdk/utils/wit/codecs/contract-address.js +92 -0
  56. package/dist/esm/sdk/utils/wit/codecs/contract-address.js.map +1 -0
  57. package/dist/esm/sdk/utils/wit/codecs/index.js +9 -0
  58. package/dist/esm/sdk/utils/wit/codecs/index.js.map +1 -0
  59. package/dist/esm/sdk/utils/wit/codecs/list.js +20 -114
  60. package/dist/esm/sdk/utils/wit/codecs/list.js.map +1 -1
  61. package/dist/esm/sdk/utils/wit/codecs/numerics.js +234 -0
  62. package/dist/esm/sdk/utils/wit/codecs/numerics.js.map +1 -0
  63. package/dist/esm/sdk/utils/wit/codecs/option.js +21 -88
  64. package/dist/esm/sdk/utils/wit/codecs/option.js.map +1 -1
  65. package/dist/esm/sdk/utils/wit/codecs/result.js +29 -0
  66. package/dist/esm/sdk/utils/wit/codecs/result.js.map +1 -0
  67. package/dist/esm/sdk/utils/wit/codecs/string.js +22 -22
  68. package/dist/esm/sdk/utils/wit/codecs/string.js.map +1 -1
  69. package/dist/esm/sdk/utils/wit/codecs/unit.js +12 -21
  70. package/dist/esm/sdk/utils/wit/codecs/unit.js.map +1 -1
  71. package/dist/esm/sdk/utils/wit/codecs/util.js +181 -0
  72. package/dist/esm/sdk/utils/wit/codecs/util.js.map +1 -0
  73. package/dist/esm/sdk/utils/wit/decode-wit-parameter.js +322 -188
  74. package/dist/esm/sdk/utils/wit/decode-wit-parameter.js.map +1 -1
  75. package/dist/esm/sdk/utils/wit/encode-wit-parameters.js +230 -233
  76. package/dist/esm/sdk/utils/wit/encode-wit-parameters.js.map +1 -1
  77. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  78. package/dist/esm/wit/built-ins.js +16 -0
  79. package/dist/esm/wit/built-ins.js.map +1 -0
  80. package/dist/esm/wit/regex.js +1 -1
  81. package/dist/esm/wit/regex.js.map +1 -1
  82. package/dist/esm/wit/wit-parser/core/errors/signature.js +15 -1
  83. package/dist/esm/wit/wit-parser/core/errors/signature.js.map +1 -1
  84. package/dist/esm/wit/wit-parser/core/signatures.js +14 -0
  85. package/dist/esm/wit/wit-parser/core/signatures.js.map +1 -1
  86. package/dist/esm/wit/wit-parser/core/types/signatures.js.map +1 -1
  87. package/dist/esm/wit/wit-parser/core/types/user-defined.js +2 -0
  88. package/dist/esm/wit/wit-parser/core/types/user-defined.js.map +1 -0
  89. package/dist/esm/wit/wit-parser/core/types/utils.js +25 -0
  90. package/dist/esm/wit/wit-parser/core/types/utils.js.map +1 -1
  91. package/dist/esm/wit/wit-parser/core/user-defined.js +280 -0
  92. package/dist/esm/wit/wit-parser/core/user-defined.js.map +1 -0
  93. package/dist/esm/wit/wit-parser/core/utils.js +33 -36
  94. package/dist/esm/wit/wit-parser/core/utils.js.map +1 -1
  95. package/dist/esm/wit/wit-parser/parse-wit-parameter.js +10 -4
  96. package/dist/esm/wit/wit-parser/parse-wit-parameter.js.map +1 -1
  97. package/dist/esm/wit/wit-parser/parse-wit.js +8 -4
  98. package/dist/esm/wit/wit-parser/parse-wit.js.map +1 -1
  99. package/dist/types/sdk/actions/kontor/public/call-view.d.ts +2 -1
  100. package/dist/types/sdk/actions/kontor/public/call-view.d.ts.map +1 -1
  101. package/dist/types/sdk/chains/definitions/signet.d.ts +2 -2
  102. package/dist/types/sdk/test/e2e.test-deprecated.d.ts +2 -0
  103. package/dist/types/sdk/test/e2e.test-deprecated.d.ts.map +1 -0
  104. package/dist/types/sdk/types/contract.d.ts +5 -5
  105. package/dist/types/sdk/types/contract.d.ts.map +1 -1
  106. package/dist/types/sdk/utils/wit/codecs/bool.d.ts +2 -2
  107. package/dist/types/sdk/utils/wit/codecs/bool.d.ts.map +1 -1
  108. package/dist/types/sdk/utils/wit/codecs/contract-address.d.ts +5 -0
  109. package/dist/types/sdk/utils/wit/codecs/contract-address.d.ts.map +1 -0
  110. package/dist/types/sdk/utils/wit/codecs/index.d.ts +9 -0
  111. package/dist/types/sdk/utils/wit/codecs/index.d.ts.map +1 -0
  112. package/dist/types/sdk/utils/wit/codecs/list.d.ts +2 -16
  113. package/dist/types/sdk/utils/wit/codecs/list.d.ts.map +1 -1
  114. package/dist/types/sdk/utils/wit/codecs/numerics.d.ts +14 -0
  115. package/dist/types/sdk/utils/wit/codecs/numerics.d.ts.map +1 -0
  116. package/dist/types/sdk/utils/wit/codecs/option.d.ts +3 -23
  117. package/dist/types/sdk/utils/wit/codecs/option.d.ts.map +1 -1
  118. package/dist/types/sdk/utils/wit/codecs/result.d.ts +4 -0
  119. package/dist/types/sdk/utils/wit/codecs/result.d.ts.map +1 -0
  120. package/dist/types/sdk/utils/wit/codecs/string.d.ts +6 -2
  121. package/dist/types/sdk/utils/wit/codecs/string.d.ts.map +1 -1
  122. package/dist/types/sdk/utils/wit/codecs/types.d.ts +4 -0
  123. package/dist/types/sdk/utils/wit/codecs/types.d.ts.map +1 -1
  124. package/dist/types/sdk/utils/wit/codecs/unit.d.ts +2 -11
  125. package/dist/types/sdk/utils/wit/codecs/unit.d.ts.map +1 -1
  126. package/dist/types/sdk/utils/wit/codecs/util.d.ts +12 -0
  127. package/dist/types/sdk/utils/wit/codecs/util.d.ts.map +1 -0
  128. package/dist/types/sdk/utils/wit/decode-wit-parameter.d.ts +9 -31
  129. package/dist/types/sdk/utils/wit/decode-wit-parameter.d.ts.map +1 -1
  130. package/dist/types/sdk/utils/wit/encode-wit-parameters.d.ts +9 -1
  131. package/dist/types/sdk/utils/wit/encode-wit-parameters.d.ts.map +1 -1
  132. package/dist/types/wit/built-ins.d.ts +6 -0
  133. package/dist/types/wit/built-ins.d.ts.map +1 -0
  134. package/dist/types/wit/regex.d.ts.map +1 -1
  135. package/dist/types/wit/utils.d.ts +53 -33
  136. package/dist/types/wit/utils.d.ts.map +1 -1
  137. package/dist/types/wit/wit-parser/core/errors/signature.d.ts +7 -1
  138. package/dist/types/wit/wit-parser/core/errors/signature.d.ts.map +1 -1
  139. package/dist/types/wit/wit-parser/core/signatures.d.ts +10 -0
  140. package/dist/types/wit/wit-parser/core/signatures.d.ts.map +1 -1
  141. package/dist/types/wit/wit-parser/core/types/signatures.d.ts +6 -2
  142. package/dist/types/wit/wit-parser/core/types/signatures.d.ts.map +1 -1
  143. package/dist/types/wit/wit-parser/core/types/user-defined.d.ts +134 -0
  144. package/dist/types/wit/wit-parser/core/types/user-defined.d.ts.map +1 -0
  145. package/dist/types/wit/wit-parser/core/types/utils.d.ts +86 -11
  146. package/dist/types/wit/wit-parser/core/types/utils.d.ts.map +1 -1
  147. package/dist/types/wit/wit-parser/core/user-defined.d.ts +19 -0
  148. package/dist/types/wit/wit-parser/core/user-defined.d.ts.map +1 -0
  149. package/dist/types/wit/wit-parser/core/utils.d.ts +8 -4
  150. package/dist/types/wit/wit-parser/core/utils.d.ts.map +1 -1
  151. package/dist/types/wit/wit-parser/parse-wit-parameter.d.ts +11 -5
  152. package/dist/types/wit/wit-parser/parse-wit-parameter.d.ts.map +1 -1
  153. package/dist/types/wit/wit-parser/parse-wit.d.ts +7 -3
  154. package/dist/types/wit/wit-parser/parse-wit.d.ts.map +1 -1
  155. package/dist/types/wit/wit.d.ts +20 -12
  156. package/dist/types/wit/wit.d.ts.map +1 -1
  157. package/package.json +1 -1
  158. package/src/sdk/actions/get-contract.test-d.ts +430 -50
  159. package/src/sdk/actions/get-contract.test.ts +324 -24
  160. package/src/sdk/actions/kontor/public/call-view.ts +2 -1
  161. package/src/sdk/actions/kontor/public/proc-contract.test-d.ts +107 -0
  162. package/src/sdk/actions/kontor/public/proc-contract.test.ts +234 -21
  163. package/src/sdk/actions/kontor/public/view-contract.test-d.ts +240 -0
  164. package/src/sdk/actions/kontor/public/view-contract.test.ts +613 -18
  165. package/src/sdk/chains/definitions/signet.ts +2 -2
  166. package/src/sdk/clients/base/create-rpc-client.test.ts +2 -2
  167. package/src/sdk/clients/create-public-client.test.ts +2 -2
  168. package/src/sdk/clients/kontor/create-public-client.test.ts +2 -2
  169. package/src/sdk/clients/transports/http-rpc.test.ts +0 -24
  170. package/src/sdk/test/e2e.test-deprecated.ts +195 -0
  171. package/src/sdk/types/contract.test-d.ts +489 -55
  172. package/src/sdk/types/contract.ts +6 -7
  173. package/src/sdk/utils/wit/codecs/bool.test.ts +29 -0
  174. package/src/sdk/utils/wit/codecs/bool.ts +10 -25
  175. package/src/sdk/utils/wit/codecs/contract-address.test.ts +37 -0
  176. package/src/sdk/utils/wit/codecs/contract-address.ts +114 -0
  177. package/src/sdk/utils/wit/codecs/index.ts +20 -0
  178. package/src/sdk/utils/wit/codecs/list.test-d.ts +13 -0
  179. package/src/sdk/utils/wit/codecs/list.test.ts +55 -0
  180. package/src/sdk/utils/wit/codecs/list.ts +21 -150
  181. package/src/sdk/utils/wit/codecs/numerics.test.ts +399 -0
  182. package/src/sdk/utils/wit/codecs/numerics.ts +304 -0
  183. package/src/sdk/utils/wit/codecs/option.test.ts +71 -0
  184. package/src/sdk/utils/wit/codecs/option.ts +21 -120
  185. package/src/sdk/utils/wit/codecs/result.test.ts +82 -0
  186. package/src/sdk/utils/wit/codecs/result.ts +37 -0
  187. package/src/sdk/utils/wit/codecs/string.test.ts +62 -0
  188. package/src/sdk/utils/wit/codecs/string.ts +23 -25
  189. package/src/sdk/utils/wit/codecs/types.ts +5 -0
  190. package/src/sdk/utils/wit/codecs/unit.test.ts +27 -0
  191. package/src/sdk/utils/wit/codecs/unit.ts +14 -38
  192. package/src/sdk/utils/wit/codecs/util.test.ts +221 -0
  193. package/src/sdk/utils/wit/codecs/util.ts +193 -0
  194. package/src/sdk/utils/wit/decode-wit-parameter.test.ts +1264 -32
  195. package/src/sdk/utils/wit/decode-wit-parameter.ts +508 -211
  196. package/src/sdk/utils/wit/encode-wit-parameters.test.ts +955 -91
  197. package/src/sdk/utils/wit/encode-wit-parameters.ts +277 -274
  198. package/src/sdk/utils/wit/get-wit-item.test.ts +1 -1
  199. package/src/wit/built-ins.ts +23 -0
  200. package/src/wit/regex.ts +1 -1
  201. package/src/wit/utils.ts +120 -74
  202. package/src/wit/wit-parser/core/errors/signature.ts +13 -2
  203. package/src/wit/wit-parser/core/signatures.ts +28 -0
  204. package/src/wit/wit-parser/core/types/signatures.test-d.ts +21 -0
  205. package/src/wit/wit-parser/core/types/signatures.ts +19 -2
  206. package/src/wit/wit-parser/core/types/user-defined.test-d.ts +1308 -0
  207. package/src/wit/wit-parser/core/types/user-defined.ts +412 -0
  208. package/src/wit/wit-parser/core/types/utils.test-d.ts +43 -2
  209. package/src/wit/wit-parser/core/types/utils.ts +143 -14
  210. package/src/wit/wit-parser/core/user-defined.test.ts +609 -0
  211. package/src/wit/wit-parser/core/user-defined.ts +392 -0
  212. package/src/wit/wit-parser/core/utils.test.ts +334 -115
  213. package/src/wit/wit-parser/core/utils.ts +54 -38
  214. package/src/wit/wit-parser/parse-wit-parameter.test.ts +282 -4
  215. package/src/wit/wit-parser/parse-wit-parameter.ts +37 -11
  216. package/src/wit/wit-parser/parse-wit.test.ts +738 -12
  217. package/src/wit/wit-parser/parse-wit.ts +25 -10
  218. package/src/wit/wit.ts +37 -16
  219. package/vitest.config.ts +5 -0
  220. package/dist/cjs/sdk/utils/wit/codecs/decimal.js +0 -148
  221. package/dist/cjs/sdk/utils/wit/codecs/decimal.js.map +0 -1
  222. package/dist/cjs/sdk/utils/wit/codecs/enum.js +0 -94
  223. package/dist/cjs/sdk/utils/wit/codecs/enum.js.map +0 -1
  224. package/dist/cjs/sdk/utils/wit/codecs/integer.js +0 -125
  225. package/dist/cjs/sdk/utils/wit/codecs/integer.js.map +0 -1
  226. package/dist/cjs/sdk/utils/wit/codecs/s64.js +0 -57
  227. package/dist/cjs/sdk/utils/wit/codecs/s64.js.map +0 -1
  228. package/dist/cjs/sdk/utils/wit/codecs/u64.js +0 -56
  229. package/dist/cjs/sdk/utils/wit/codecs/u64.js.map +0 -1
  230. package/dist/cjs/wit/wit-parser/core/records.js +0 -70
  231. package/dist/cjs/wit/wit-parser/core/records.js.map +0 -1
  232. package/dist/cjs/wit/wit-parser/core/types/records.js.map +0 -1
  233. package/dist/esm/sdk/utils/wit/codecs/decimal.js +0 -165
  234. package/dist/esm/sdk/utils/wit/codecs/decimal.js.map +0 -1
  235. package/dist/esm/sdk/utils/wit/codecs/enum.js +0 -104
  236. package/dist/esm/sdk/utils/wit/codecs/enum.js.map +0 -1
  237. package/dist/esm/sdk/utils/wit/codecs/integer.js +0 -167
  238. package/dist/esm/sdk/utils/wit/codecs/integer.js.map +0 -1
  239. package/dist/esm/sdk/utils/wit/codecs/s64.js +0 -65
  240. package/dist/esm/sdk/utils/wit/codecs/s64.js.map +0 -1
  241. package/dist/esm/sdk/utils/wit/codecs/u64.js +0 -63
  242. package/dist/esm/sdk/utils/wit/codecs/u64.js.map +0 -1
  243. package/dist/esm/wit/wit-parser/core/records.js +0 -73
  244. package/dist/esm/wit/wit-parser/core/records.js.map +0 -1
  245. package/dist/esm/wit/wit-parser/core/types/records.js +0 -2
  246. package/dist/esm/wit/wit-parser/core/types/records.js.map +0 -1
  247. package/dist/types/sdk/utils/wit/codecs/decimal.d.ts +0 -42
  248. package/dist/types/sdk/utils/wit/codecs/decimal.d.ts.map +0 -1
  249. package/dist/types/sdk/utils/wit/codecs/enum.d.ts +0 -49
  250. package/dist/types/sdk/utils/wit/codecs/enum.d.ts.map +0 -1
  251. package/dist/types/sdk/utils/wit/codecs/integer.d.ts +0 -36
  252. package/dist/types/sdk/utils/wit/codecs/integer.d.ts.map +0 -1
  253. package/dist/types/sdk/utils/wit/codecs/s64.d.ts +0 -23
  254. package/dist/types/sdk/utils/wit/codecs/s64.d.ts.map +0 -1
  255. package/dist/types/sdk/utils/wit/codecs/u64.d.ts +0 -23
  256. package/dist/types/sdk/utils/wit/codecs/u64.d.ts.map +0 -1
  257. package/dist/types/wit/wit-parser/core/records.d.ts +0 -4
  258. package/dist/types/wit/wit-parser/core/records.d.ts.map +0 -1
  259. package/dist/types/wit/wit-parser/core/types/records.d.ts +0 -51
  260. package/dist/types/wit/wit-parser/core/types/records.d.ts.map +0 -1
  261. package/src/sdk/test/e2e.test.ts +0 -194
  262. package/src/sdk/utils/wit/codecs/decimal.ts +0 -215
  263. package/src/sdk/utils/wit/codecs/enum.ts +0 -114
  264. package/src/sdk/utils/wit/codecs/integer.ts +0 -193
  265. package/src/sdk/utils/wit/codecs/s64.ts +0 -76
  266. package/src/sdk/utils/wit/codecs/u64.ts +0 -73
  267. package/src/wit/wit-parser/core/records.test.ts +0 -69
  268. package/src/wit/wit-parser/core/records.ts +0 -101
  269. package/src/wit/wit-parser/core/types/records.test-d.ts +0 -331
  270. package/src/wit/wit-parser/core/types/records.ts +0 -91
@@ -10,15 +10,23 @@ import {
10
10
  } from "./errors/signature.js";
11
11
  import { InvalidGenericDepthError } from "./errors/split-parameters.js";
12
12
  import { execFunctionSignature, isFunctionSignature } from "./signatures.js";
13
- import type { RecordLookup } from "./types/records.js";
13
+ import type {
14
+ EnumLookup,
15
+ EnumToComponents,
16
+ RecordLookup,
17
+ VariantLookup,
18
+ } from "./types/user-defined.js";
14
19
 
15
20
  export type ParseOptions = {
16
21
  records?: RecordLookup;
17
- type?: WitItemType | "record";
22
+ variants?: VariantLookup;
23
+ enums?: EnumLookup;
24
+ type?: WitItemType | "record" | "variant" | "enum";
25
+ ancestors?: Set<string>;
18
26
  };
19
27
 
20
28
  export const witParameterRegex =
21
- /^(?:(?<name>[a-z][a-z0-9-]*)\s*:\s*)?(?<type>_|(?:borrow|list|option|result|tuple)\s*<[\s\S]+>|[a-z][a-z0-9-]*|(?:record|variant|flags|enum)\s*\{[\s\S]*\})$/;
29
+ /^(?:(?<name>[a-z][a-z0-9-]*)\s*:\s*)?(?<type>_|(?:borrow|list|option|result)\s*<[\s\S]+>|[a-z][a-z0-9-]*|(?:record|variant|flags|enum)\s*\{[\s\S]*\})$/;
22
30
 
23
31
  export function isGeneric(type: string): boolean {
24
32
  return isGenericRegex.test(type.trim());
@@ -59,13 +67,22 @@ export function parseWitParameter(param: string, options?: ParseOptions) {
59
67
 
60
68
  const name = match.name ? { name: match.name } : {};
61
69
  const records = options?.records ?? {};
70
+ const variants = options?.variants ?? {};
71
+ const enums = options?.enums ?? {};
72
+ const ancestors = options?.ancestors ?? new Set<string>();
73
+
74
+ // i think maybe a better approach is to have a merge step here in a separate function so we don't have to do recurssion
75
+ // except for the generit case
76
+
62
77
  let type: string;
63
78
  let components = {};
64
79
  if (isGenericType) {
65
80
  const g = execGeneric<{ outer: string; inner: string }>(match.type)!;
66
81
  const parts = splitParameters(g.inner);
67
82
 
68
- const parsed = parts.map((p) => parseWitParameter(p, { records }));
83
+ const parsed = parts.map((p) =>
84
+ parseWitParameter(p, { records, variants, enums, ancestors }),
85
+ );
69
86
 
70
87
  // normalize inner types for the outer type string
71
88
  const innerTypeSig = parsed.map((x) => x.type).join(", ");
@@ -93,43 +110,12 @@ export function parseWitParameter(param: string, options?: ParseOptions) {
93
110
  });
94
111
  }
95
112
  const left = parsed[0]!;
96
- // @ts-ignore
97
- const right = parsed[1]!;
98
113
 
99
114
  type = `result<${innerTypeSig}>`;
100
115
 
101
116
  components = {
102
117
  ...(left.components && { components: left.components }),
103
- // components: [
104
- //
105
- // {
106
- // name: "left",
107
- // type: left.type,
108
- // ...(left.components && { components: left.components }),
109
- // },
110
- // {
111
- // name: "right",
112
- // type: right.type,
113
- // ...(right.components && { components: right.components }),
114
- // },
115
- // ],
116
118
  };
117
-
118
- // the right / error channel is always assumed to be wit built-in `error` primitive
119
- // components = {
120
- // components: [
121
- // {
122
- // name: "left",
123
- // type: left.type,
124
- // ...(left.components && { components: left.components }),
125
- // },
126
- // {
127
- // name: "right",
128
- // type: right.type,
129
- // ...(right.components && { components: right.components }),
130
- // },
131
- // ],
132
- // };
133
119
  break;
134
120
  }
135
121
 
@@ -140,14 +126,23 @@ export function parseWitParameter(param: string, options?: ParseOptions) {
140
126
  }
141
127
  } else if (match.type in records) {
142
128
  // scalar that maps to a record in `records`
143
- type = "tuple";
129
+ type = "record";
144
130
  components = { components: records[match.type] };
131
+ } else if (match.type in variants) {
132
+ // scalar that maps to a record in `records`
133
+ type = "variant";
134
+ components = { components: variants[match.type] };
135
+ } else if (match.type in enums) {
136
+ // scalar that maps to a record in `records`
137
+ type = "enum";
138
+ components = { components: enumToComponents(enums[match.type]!) };
145
139
  } else {
146
140
  type = match.type;
147
141
  }
148
142
 
149
143
  const witParameter: WitParameter = {
150
144
  type: `${type}${match.array ?? ""}`,
145
+ // TODO: this is smell
151
146
  internalType: match.type,
152
147
  ...(name as { name: string }),
153
148
  ...components,
@@ -210,9 +205,14 @@ export function splitParameters(
210
205
  return result;
211
206
  }
212
207
 
213
- export function parseSignature(signature: string, structs: RecordLookup = {}) {
208
+ export function parseSignature(
209
+ signature: string,
210
+ records: RecordLookup = {},
211
+ variants: VariantLookup = {},
212
+ enums: EnumLookup = {},
213
+ ) {
214
214
  if (isFunctionSignature(signature))
215
- return parseFunctionSignature(signature, structs);
215
+ return parseFunctionSignature(signature, records, variants, enums);
216
216
 
217
217
  throw new UnknownSignatureError({ signature });
218
218
  }
@@ -220,6 +220,8 @@ export function parseSignature(signature: string, structs: RecordLookup = {}) {
220
220
  export function parseFunctionSignature(
221
221
  signature: string,
222
222
  records: RecordLookup = {},
223
+ variants: VariantLookup = {},
224
+ enums: EnumLookup = {},
223
225
  ) {
224
226
  const match = execFunctionSignature(signature);
225
227
  if (!match) throw new InvalidSignatureError({ signature, type: "func" });
@@ -231,6 +233,8 @@ export function parseFunctionSignature(
231
233
  inputs.push(
232
234
  parseWitParameter(inputParams[i]!, {
233
235
  records,
236
+ variants,
237
+ enums,
234
238
  }),
235
239
  );
236
240
  }
@@ -243,6 +247,8 @@ export function parseFunctionSignature(
243
247
  outputs.push(
244
248
  parseWitParameter(outputParams[i]!, {
245
249
  records,
250
+ variants,
251
+ enums,
246
252
  }),
247
253
  );
248
254
  }
@@ -263,3 +269,13 @@ export function parseFunctionSignature(
263
269
  outputs,
264
270
  };
265
271
  }
272
+
273
+ export function enumToComponents<cases extends readonly string[]>(
274
+ cases: cases,
275
+ ): EnumToComponents<cases> {
276
+ return cases.map((caseName) => ({
277
+ name: caseName,
278
+ type: "_" as const,
279
+ internalType: "_" as const,
280
+ })) as EnumToComponents<cases>;
281
+ }
@@ -1,6 +1,7 @@
1
1
  import { expectTypeOf, expect, test } from "vitest";
2
2
 
3
3
  import { parseWitParameter } from "./parse-wit-parameter.js";
4
+
4
5
  import type { ParseWitParameter } from "./parse-wit-parameter.js";
5
6
 
6
7
  test("ParseWitParameter", () => {
@@ -20,7 +21,7 @@ test("ParseWitParameter", () => {
20
21
  >
21
22
  >().toEqualTypeOf<{
22
23
  readonly name: "arith-address";
23
- readonly type: "tuple";
24
+ readonly type: "record";
24
25
  readonly internalType: "contract-address";
25
26
  readonly components: readonly [
26
27
  {
@@ -50,7 +51,7 @@ test("ParseWitParameter", () => {
50
51
  >
51
52
  >().toEqualTypeOf<{
52
53
  readonly name: "arith-address";
53
- readonly type: "result<tuple, error>";
54
+ readonly type: "result<record, error>";
54
55
  readonly internalType: "result<contract-address, error>";
55
56
  readonly components: readonly [
56
57
  {
@@ -70,6 +71,76 @@ test("ParseWitParameter", () => {
70
71
  },
71
72
  ];
72
73
  }>();
74
+
75
+ // Enum type tests
76
+ expectTypeOf<
77
+ ParseWitParameter<
78
+ ["enum status { pending, active, completed, cancelled }", "s: status"]
79
+ >
80
+ >().toEqualTypeOf<{
81
+ readonly name: "s";
82
+ readonly type: "enum";
83
+ readonly internalType: "status";
84
+ readonly components: readonly [
85
+ {
86
+ readonly name: "pending";
87
+ readonly type: "_";
88
+ },
89
+ {
90
+ readonly name: "active";
91
+ readonly type: "_";
92
+ },
93
+ {
94
+ readonly name: "completed";
95
+ readonly type: "_";
96
+ },
97
+ {
98
+ readonly name: "cancelled";
99
+ readonly type: "_";
100
+ },
101
+ ];
102
+ }>();
103
+ expectTypeOf<
104
+ ParseWitParameter<
105
+ ["enum status { pending, active, completed }", "s: option<status>"]
106
+ >
107
+ >().toEqualTypeOf<{
108
+ readonly name: "s";
109
+ readonly type: "option<enum>";
110
+ readonly internalType: "option<status>";
111
+ readonly components: readonly [
112
+ {
113
+ readonly name: "pending";
114
+ readonly type: "_";
115
+ },
116
+ {
117
+ readonly name: "active";
118
+ readonly type: "_";
119
+ },
120
+ {
121
+ readonly name: "completed";
122
+ readonly type: "_";
123
+ },
124
+ ];
125
+ }>();
126
+
127
+ // type t = ParseWitParameter
128
+ // [
129
+ // "record rbg { red: u64, blue: u64, green: u64 }",
130
+ // "variant color { hexkey(string), rgb(rbg) }",
131
+ // "c: color ",
132
+ // ]
133
+ // >
134
+ //
135
+ // expectTypeOf
136
+ // ParseWitParameter
137
+ // [
138
+ // "record rbg { red: u64, blue: u64, green: u64 }",
139
+ // "variant color { hexkey(string), rgb(rbg) }",
140
+ // "c: color ",
141
+ // ]
142
+ // >
143
+ // >().toEqualTypeOf<>({});
73
144
  });
74
145
 
75
146
  test("parseWitParameter", () => {
@@ -109,7 +180,7 @@ test.each([
109
180
  expected: {
110
181
  name: "arith-address",
111
182
 
112
- type: "tuple",
183
+ type: "record",
113
184
  internalType: "contract-address",
114
185
  components: [
115
186
  {
@@ -137,7 +208,7 @@ test.each([
137
208
  ],
138
209
  expected: {
139
210
  name: "arith-address",
140
- type: "result<tuple, error>",
211
+ type: "result<record, error>",
141
212
  internalType: "result<contract-address, error>",
142
213
  components: [
143
214
  {
@@ -158,6 +229,213 @@ test.each([
158
229
  ],
159
230
  },
160
231
  },
232
+ {
233
+ signature: [
234
+ "record rgb { red: u64, blue: u64, green: u64 }",
235
+ "variant color-literal { red, green, blue }",
236
+ "variant color { hex(string), rgb(rgb), literal(color-literal) }",
237
+ "c: color",
238
+ ],
239
+ expected: {
240
+ name: "c",
241
+ type: "variant",
242
+ internalType: "color",
243
+ components: [
244
+ {
245
+ name: "hex",
246
+ type: "string",
247
+ internalType: "string",
248
+ },
249
+ {
250
+ name: "rgb",
251
+ type: "record",
252
+ internalType: "rgb",
253
+ components: [
254
+ { name: "red", type: "u64", internalType: "u64" },
255
+ { name: "blue", type: "u64", internalType: "u64" },
256
+ { name: "green", type: "u64", internalType: "u64" },
257
+ ],
258
+ },
259
+
260
+ {
261
+ name: "literal",
262
+ internalType: "color-literal",
263
+ type: "variant",
264
+ components: [
265
+ {
266
+ internalType: "_",
267
+ name: "red",
268
+ type: "_",
269
+ },
270
+ {
271
+ internalType: "_",
272
+ name: "green",
273
+ type: "_",
274
+ },
275
+ {
276
+ internalType: "_",
277
+ name: "blue",
278
+ type: "_",
279
+ },
280
+ ],
281
+ },
282
+ ],
283
+ },
284
+ },
285
+ // Enum test cases
286
+ {
287
+ signature: [
288
+ "enum status { pending, active, completed, cancelled }",
289
+ "s: status",
290
+ ],
291
+ expected: {
292
+ name: "s",
293
+ type: "enum",
294
+ internalType: "status",
295
+ components: [
296
+ {
297
+ name: "pending",
298
+ type: "_",
299
+ internalType: "_",
300
+ },
301
+ {
302
+ name: "active",
303
+ type: "_",
304
+ internalType: "_",
305
+ },
306
+ {
307
+ name: "completed",
308
+ type: "_",
309
+ internalType: "_",
310
+ },
311
+ {
312
+ name: "cancelled",
313
+ type: "_",
314
+ internalType: "_",
315
+ },
316
+ ],
317
+ },
318
+ },
319
+ {
320
+ signature: [
321
+ "enum priority { low, medium, high, urgent }",
322
+ "p: option<priority>",
323
+ ],
324
+ expected: {
325
+ name: "p",
326
+ type: "option<enum>",
327
+ internalType: "option<priority>",
328
+ components: [
329
+ {
330
+ name: "low",
331
+ type: "_",
332
+ internalType: "_",
333
+ },
334
+ {
335
+ name: "medium",
336
+ type: "_",
337
+ internalType: "_",
338
+ },
339
+ {
340
+ name: "high",
341
+ type: "_",
342
+ internalType: "_",
343
+ },
344
+ {
345
+ name: "urgent",
346
+ type: "_",
347
+ internalType: "_",
348
+ },
349
+ ],
350
+ },
351
+ },
352
+ {
353
+ signature: [
354
+ "enum status { pending, active, completed }",
355
+ "statuses: list<status>",
356
+ ],
357
+ expected: {
358
+ name: "statuses",
359
+ type: "list<enum>",
360
+ internalType: "list<status>",
361
+ components: [
362
+ {
363
+ name: "pending",
364
+ type: "_",
365
+ internalType: "_",
366
+ },
367
+ {
368
+ name: "active",
369
+ type: "_",
370
+ internalType: "_",
371
+ },
372
+ {
373
+ name: "completed",
374
+ type: "_",
375
+ internalType: "_",
376
+ },
377
+ ],
378
+ },
379
+ },
380
+ {
381
+ signature: [
382
+ "enum status { pending, active, completed }",
383
+ "s: result<status, error>",
384
+ ],
385
+ expected: {
386
+ name: "s",
387
+ type: "result<enum, error>",
388
+ internalType: "result<status, error>",
389
+ components: [
390
+ {
391
+ name: "pending",
392
+ type: "_",
393
+ internalType: "_",
394
+ },
395
+ {
396
+ name: "active",
397
+ type: "_",
398
+ internalType: "_",
399
+ },
400
+ {
401
+ name: "completed",
402
+ type: "_",
403
+ internalType: "_",
404
+ },
405
+ ],
406
+ },
407
+ },
408
+ // Mixed enum with record
409
+ {
410
+ signature: [
411
+ "enum status { pending, active, completed }",
412
+ "record task { id: u64, name: string, task-status: status }",
413
+ "t: task",
414
+ ],
415
+ expected: {
416
+ name: "t",
417
+ type: "record",
418
+ internalType: "task",
419
+ components: [
420
+ { name: "id", type: "u64", internalType: "u64" },
421
+ {
422
+ name: "name",
423
+ type: "string",
424
+ internalType: "string",
425
+ },
426
+ {
427
+ name: "task-status",
428
+ type: "enum",
429
+ internalType: "status",
430
+ components: [
431
+ { name: "pending", type: "_" },
432
+ { name: "active", type: "_" },
433
+ { name: "completed", type: "_" },
434
+ ],
435
+ },
436
+ ],
437
+ },
438
+ },
161
439
  ])("parseAbiParameter($signature)", ({ signature, expected }) => {
162
440
  expect(parseWitParameter<string | string[]>(signature)).toEqual(expected);
163
441
  });
@@ -3,12 +3,20 @@ import type { WitParameter } from "../wit.js";
3
3
  import type { Narrow } from "../narrow.js";
4
4
  import type { Filter } from "../type-utils.js";
5
5
  import { InvalidWitParameterError } from "./core/errors/wit-parameter.js";
6
- import { parseRecords } from "./core/records.js";
7
- import { isRecordSignature } from "./core/signatures.js";
8
- import type { ParseRecords } from "./core/types/records.js";
9
- import type { IsRecordSignature } from "./core/types/signatures.js";
6
+ import {
7
+ isRecordSignature,
8
+ isVariantSignature,
9
+ isEnumSignature,
10
+ } from "./core/signatures.js";
11
+ import type {
12
+ IsRecordSignature,
13
+ IsVariantSignature,
14
+ IsEnumSignature,
15
+ } from "./core/types/signatures.js";
10
16
  import type { ParseWitParameter as ParseWitParameter_ } from "./core/types/utils.js";
11
17
  import { parseWitParameter as parseWitParameter_ } from "./core/utils.js";
18
+ import { parseTypes } from "./core/user-defined.js";
19
+ import type { ParseTypes } from "./core/types/user-defined.js";
12
20
 
13
21
  export type ParseWitParameter<
14
22
  param extends string | readonly string[] | readonly unknown[],
@@ -23,13 +31,28 @@ export type ParseWitParameter<
23
31
  : never)
24
32
  | (param extends readonly string[]
25
33
  ? string[] extends param
26
- ? WitParameter // Return generic AbiParameter item since type was no inferrable
27
- : ParseRecords<param> extends infer records
34
+ ? WitParameter // Return generic WitParameter item since type was not inferrable
35
+ : ParseTypes<param> extends infer types extends {
36
+ records: any;
37
+ variants: any;
38
+ enums: any;
39
+ }
28
40
  ? {
29
41
  [key in keyof param]: param[key] extends string
30
42
  ? IsRecordSignature<param[key]> extends true
31
43
  ? never
32
- : ParseWitParameter_<param[key], { records: records }>
44
+ : IsVariantSignature<param[key]> extends true
45
+ ? never
46
+ : IsEnumSignature<param[key]> extends true
47
+ ? never
48
+ : ParseWitParameter_<
49
+ param[key],
50
+ {
51
+ variants: types["variants"];
52
+ records: types["records"];
53
+ enums: types["enums"];
54
+ }
55
+ >
33
56
  : never;
34
57
  } extends infer mapped extends readonly unknown[]
35
58
  ? Filter<mapped, never>[0] extends infer result
@@ -64,19 +87,22 @@ export function parseWitParameter<
64
87
  if (typeof param === "string")
65
88
  witParameter = parseWitParameter_(param, {}) as ParseWitParameter<param>;
66
89
  else {
67
- const records = parseRecords(param as readonly string[]);
90
+ const types = parseTypes(param as readonly string[]);
68
91
  const length = param.length as number;
69
92
  for (let i = 0; i < length; i++) {
70
93
  const signature = (param as readonly string[])[i]!;
71
94
  if (isRecordSignature(signature)) continue;
95
+ if (isVariantSignature(signature)) continue;
96
+ if (isEnumSignature(signature)) continue;
97
+
72
98
  witParameter = parseWitParameter_(signature, {
73
- records: records,
99
+ enums: types["enums"],
100
+ variants: types["variants"],
101
+ records: types["records"],
74
102
  });
75
103
  break;
76
104
  }
77
105
  }
78
-
79
106
  if (!witParameter) throw new InvalidWitParameterError({ param });
80
-
81
107
  return witParameter as ParseWitParameter<param>;
82
108
  }