@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
package/src/wit/utils.ts CHANGED
@@ -10,13 +10,16 @@ import type {
10
10
  TypedData,
11
11
  WitParameterKind,
12
12
  WitParameter,
13
- WitTuple,
13
+ WitRecord,
14
14
  TypedDataType,
15
15
  WitOption,
16
16
  WitResult,
17
+ WitVariant,
18
+ WitEnum,
17
19
  } from "./wit.js";
18
20
  import type { ResolvedRegister } from "./register.js";
19
21
  import type { Merge, Pretty } from "./type-utils.js";
22
+ import type { WitError } from "./built-ins.js";
20
23
 
21
24
  export type IsWit<wit> = wit extends Wit ? true : false;
22
25
 
@@ -40,9 +43,8 @@ type NoBits = "";
40
43
  type GreaterThan48Bits = Exclude<MBits, 8 | 16 | 32 | NoBits>;
41
44
  type LessThanOrEqualTo48Bits = Exclude<MBits, GreaterThan48Bits | NoBits>;
42
45
 
43
- // TODO: move these somewhere sane
44
- export type Option<T> = { kind: "none" } | { kind: "some"; value: T };
45
- export type Result<T, E> = { ok: true; value: T } | { ok: false; error: E };
46
+ export type Option<T> = ["none"] | ["some", T];
47
+ export type Result<T, E> = ["ok", T] | ["err", E];
46
48
 
47
49
  export type WitTypeToPrimitiveType<witType extends WitType> =
48
50
  PrimitiveTypeLookup[witType];
@@ -55,7 +57,9 @@ interface PrimitiveTypeLookup
55
57
  bool: boolean;
56
58
  address: string;
57
59
  string: string;
58
- tuple: Record<string, unknown>;
60
+ record: Record<string, unknown>;
61
+ variant: [string, unknown];
62
+ enum: string;
59
63
  error: unknown;
60
64
  integer: ResolvedRegister["bigIntType"];
61
65
  decimal: ResolvedRegister["decimalType"];
@@ -75,8 +79,7 @@ type WitListMap = { [_ in WitList]: readonly unknown[] };
75
79
 
76
80
  type WitOptionMap = { [_ in WitOption]: Option<unknown> };
77
81
 
78
- // TODO: change string to error type
79
- type WitResultMap = { [_ in WitResult]: Result<unknown, string> };
82
+ type WitResultMap = { [_ in WitResult]: Result<unknown, WitError.T> };
80
83
 
81
84
  type BitsTypeLookup = {
82
85
  [key in MBits]: ResolvedRegister[key extends LessThanOrEqualTo48Bits
@@ -84,61 +87,21 @@ type BitsTypeLookup = {
84
87
  : "bigIntType"];
85
88
  };
86
89
 
87
- // TODO: add record / option
88
90
  type WitBasicType = Exclude<
89
91
  WitType,
90
- WitTuple | WitList | WitResult | WitOption
92
+ WitRecord | WitList | WitResult | WitOption | WitVariant | WitEnum
91
93
  >;
92
94
 
93
95
  export type WitParametersToPrimitiveTypes<
94
96
  witParameters extends readonly WitParameter[],
95
97
  witParameterKind extends WitParameterKind = WitParameterKind,
96
98
  > = Pretty<{
97
- // TODO: Convert to labeled tuple so parameter names show up in autocomplete
98
- // e.g. [foo: string, bar: string]
99
- // https://github.com/microsoft/TypeScript/issues/44939
100
99
  [key in keyof witParameters]: WitParameterToPrimitiveType<
101
100
  witParameters[key],
102
101
  witParameterKind
103
102
  >;
104
103
  }>;
105
104
 
106
- export type WitParameterToPrimitiveType<
107
- witParameter extends WitParameter | { name: string; type: unknown },
108
- witParameterKind extends WitParameterKind = WitParameterKind,
109
- > =
110
- // 1. Basic type (non-tuple, non-list) – uses PrimitiveTypeLookup (ints, bool, string, option<string>, result<u64,error>, etc.)
111
- witParameter["type"] extends WitBasicType
112
- ? WitTypeToPrimitiveType<witParameter["type"]>
113
- : // 2. Explicit tuple with components
114
- witParameter extends {
115
- type: WitTuple;
116
- components: infer components extends readonly WitParameter[];
117
- }
118
- ? WitComponentsToPrimitiveType<components, witParameterKind>
119
- : // 3. list<...>
120
- MaybeExtractListParameterType<
121
- witParameter["type"]
122
- > extends infer head extends string
123
- ? WitListToPrimitiveType<witParameter, witParameterKind, head>
124
- : // 4. option<...>
125
- MaybeExtractOptionParameterType<
126
- witParameter["type"]
127
- > extends infer inner extends string
128
- ? WitOptionToPrimitiveType<witParameter, witParameterKind, inner>
129
- : // 5. result<Ok, Err>
130
- MaybeExtractResultParameterType<witParameter["type"]> extends [
131
- infer ok extends string,
132
- infer _err extends string,
133
- ]
134
- ? WitResultToPrimitiveType<witParameter, witParameterKind, ok>
135
- : // 6. Fallback / error
136
- ResolvedRegister["strictWitType"] extends true
137
- ? Error_<`Unknown type '${witParameter["type"] & string}'.`>
138
- : witParameter extends { components: Error_<string> }
139
- ? witParameter["components"]
140
- : unknown;
141
-
142
105
  type MaybeExtractListParameterType<T> = T extends `list<${infer Inner}>`
143
106
  ? Inner
144
107
  : undefined;
@@ -174,35 +137,121 @@ type WitResultToPrimitiveType<
174
137
  witParameter extends WitParameter | { name: string; type: unknown },
175
138
  witParameterKind extends WitParameterKind,
176
139
  ok extends string,
177
- // TODO: error always treated as a string for now
178
- // err extends string,
179
- > = Result<
180
- WitParameterToPrimitiveType<
181
- Merge<witParameter, { type: ok }>,
182
- witParameterKind
183
- >,
184
- string
185
- >;
140
+ > =
141
+ Result<
142
+ WitParameterToPrimitiveType<
143
+ Merge<witParameter, { type: ok }>,
144
+ witParameterKind
145
+ >,
146
+ WitError.T
147
+ > extends infer R
148
+ ? R
149
+ : never;
150
+
151
+ export type WitParameterToPrimitiveType<
152
+ witParameter extends WitParameter | { name: string; type: unknown },
153
+ witParameterKind extends WitParameterKind = WitParameterKind,
154
+ > =
155
+ // 1. Basic type
156
+ witParameter["type"] extends WitBasicType
157
+ ? WitTypeToPrimitiveType<witParameter["type"]>
158
+ : // 2. Variant (discriminated union)
159
+ witParameter extends {
160
+ type: "variant";
161
+ components?: infer components extends readonly WitParameter[];
162
+ }
163
+ ? WitVariantToPrimitiveType<components, witParameterKind>
164
+ : // 3. Enum (string literal union)
165
+ witParameter extends {
166
+ type: "enum";
167
+ // components?: infer components extends readonly {
168
+ // name: string;
169
+ // type: "_";
170
+ // }[];
171
+ }
172
+ ? witParameter extends {
173
+ components?: infer components extends readonly WitParameter[];
174
+ }
175
+ ? WitEnumToPrimitiveType<components>
176
+ : never
177
+ : // 4. Explicite record with components
178
+ witParameter extends {
179
+ type: WitRecord;
180
+ components: infer components extends readonly WitParameter[];
181
+ }
182
+ ? WitComponentsToPrimitiveType<components, witParameterKind>
183
+ : // 5. list<...>
184
+ MaybeExtractListParameterType<
185
+ witParameter["type"]
186
+ > extends infer head extends string
187
+ ? WitListToPrimitiveType<witParameter, witParameterKind, head>
188
+ : // 6. option<...>
189
+ MaybeExtractOptionParameterType<
190
+ witParameter["type"]
191
+ > extends infer inner extends string
192
+ ? WitOptionToPrimitiveType<witParameter, witParameterKind, inner>
193
+ : // 7. result<Ok, Err>
194
+ MaybeExtractResultParameterType<witParameter["type"]> extends [
195
+ infer ok extends string,
196
+ infer _err extends "error",
197
+ ]
198
+ ? WitResultToPrimitiveType<witParameter, witParameterKind, ok>
199
+ : ResolvedRegister["strictWitType"] extends true
200
+ ? Error_<`Unknown type '${witParameter["type"] & string}'.`>
201
+ : witParameter extends { components: Error_<string> }
202
+ ? witParameter["components"]
203
+ : unknown;
204
+
205
+ type WitVariantToPrimitiveType<
206
+ components extends readonly WitParameter[],
207
+ witParameterKind extends WitParameterKind,
208
+ > = {
209
+ [K in keyof components]: components[K] extends {
210
+ name: infer CaseName extends string;
211
+ }
212
+ ? components[K] extends { type: "_" }
213
+ ? [CaseName] // Unit case (no value)
214
+ : components[K] extends {
215
+ type: WitRecord;
216
+ name: string;
217
+ components?: infer components extends readonly WitParameter[];
218
+ }
219
+ ? [CaseName, WitComponentsToPrimitiveType<components, witParameterKind>]
220
+ : [
221
+ CaseName,
222
+ WitParameterToPrimitiveType<components[K], witParameterKind>,
223
+ // components[K],
224
+ ]
225
+ : never;
226
+ }[number];
227
+
228
+ type WitEnumToPrimitiveType<components extends readonly WitParameter[]> =
229
+ Readonly<{
230
+ [K in keyof components]: components[K] extends {
231
+ name: infer CaseName extends string;
232
+ }
233
+ ? components[K] extends { type: "_" }
234
+ ? CaseName
235
+ : never
236
+ : never;
237
+ }>[number];
238
+
186
239
  type WitComponentsToPrimitiveType<
187
240
  components extends readonly WitParameter[],
188
241
  witParameterKind extends WitParameterKind,
189
242
  > = components extends readonly []
190
243
  ? []
191
- : // Compare the original set of names to a "validated"
192
- // set where each name is coerced to a string and undefined|"" are excluded
193
- components[number]["name"] extends Exclude<
244
+ : components[number]["name"] extends Exclude<
194
245
  components[number]["name"] & string,
195
246
  undefined | ""
196
247
  >
197
- ? // If all the original names are present, all tuple parameters are named so return as object
198
- {
248
+ ? {
199
249
  [component in components[number] as component["name"] & {}]: WitParameterToPrimitiveType<
200
250
  component,
201
251
  witParameterKind
202
252
  >;
203
253
  }
204
- : // Otherwise, has unnamed tuple parameters so return as array
205
- {
254
+ : {
206
255
  [key in keyof components]: WitParameterToPrimitiveType<
207
256
  components[key],
208
257
  witParameterKind
@@ -215,10 +264,9 @@ export type TypedDataToPrimitiveTypes<
215
264
  keyReferences extends { [_: string]: unknown } | unknown = unknown,
216
265
  > = {
217
266
  [key in keyof typedData]: {
218
- // Map over typed data values and turn into key-value pairs
219
- [key2 in typedData[key][number] as key2["name"]]: key2["type"] extends key // 1. Eliminate self-referencing structs
267
+ [key2 in typedData[key][number] as key2["name"]]: key2["type"] extends key
220
268
  ? Error_<`Cannot convert self-referencing struct '${key2["type"]}' to primitive type.`>
221
- : key2["type"] extends keyof typedData // 2. Check if type is struct
269
+ : key2["type"] extends keyof typedData
222
270
  ? key2["type"] extends keyof keyReferences
223
271
  ? Error_<`Circular reference detected. '${key2["type"]}' is a circular reference.`>
224
272
  : TypedDataToPrimitiveTypes<
@@ -226,13 +274,12 @@ export type TypedDataToPrimitiveTypes<
226
274
  witParameterKind,
227
275
  keyReferences & { [_ in key2["type"] | key]: true }
228
276
  >[key2["type"]]
229
- : // 3. Check if type is array of structs
230
- key2["type"] extends `${infer type extends keyof typedData &
277
+ : key2["type"] extends `${infer type extends keyof typedData &
231
278
  string}[${infer tail}]`
232
279
  ? WitParameterToPrimitiveType<
233
280
  {
234
281
  name: key2["name"];
235
- type: `tuple[${tail}]`;
282
+ type: `record[${tail}]`;
236
283
  components: _TypedDataParametersToWitParameters<
237
284
  typedData[type],
238
285
  typedData,
@@ -241,11 +288,10 @@ export type TypedDataToPrimitiveTypes<
241
288
  },
242
289
  witParameterKind
243
290
  >
244
- : key2["type"] extends TypedDataType // 4. Known type to convert
291
+ : key2["type"] extends TypedDataType
245
292
  ? WitParameterToPrimitiveType<key2, witParameterKind>
246
293
  : Error_<`Cannot convert unknown type '${key2["type"]}' to primitive type.`>;
247
294
  };
248
- // Ensure the result is "Prettied"
249
295
  } & unknown;
250
296
 
251
297
  type _TypedDataParametersToWitParameters<
@@ -261,7 +307,7 @@ type _TypedDataParametersToWitParameters<
261
307
  ? typedDataParameter["type"] extends keyof typedData & string
262
308
  ? {
263
309
  name: typedDataParameter["name"];
264
- type: "tuple";
310
+ type: "record";
265
311
  components: typedDataParameter["type"] extends keyof keyReferences
266
312
  ? Error_<`Circular reference detected. '${typedDataParameter["type"]}' is a circular reference.`>
267
313
  : _TypedDataParametersToWitParameters<
@@ -274,7 +320,7 @@ type _TypedDataParametersToWitParameters<
274
320
  keyof typedData & string}[${infer tail}]`
275
321
  ? {
276
322
  name: typedDataParameter["name"];
277
- type: `tuple[${tail}]`;
323
+ type: `record[${tail}]`;
278
324
  components: type extends keyof keyReferences
279
325
  ? Error_<`Circular reference detected. '${typedDataParameter["type"]}' is a circular reference.`>
280
326
  : _TypedDataParametersToWitParameters<
@@ -9,7 +9,7 @@ export class InvalidSignatureError extends BaseError {
9
9
  type,
10
10
  }: {
11
11
  signature: string;
12
- type: WitItemType | "record";
12
+ type: WitItemType | "record" | "variant" | "enum";
13
13
  }) {
14
14
  super(`Invalid ${type} signature.`, {
15
15
  details: signature,
@@ -28,7 +28,7 @@ export class UnknownSignatureError extends BaseError {
28
28
  }
29
29
 
30
30
  export class InvalidRecordSignatureError extends BaseError {
31
- override name = "InvalidStructSignatureError";
31
+ override name = "InvalidRecordSignatureError";
32
32
 
33
33
  constructor({ signature }: { signature: string }) {
34
34
  super("Invalid record signature.", {
@@ -37,3 +37,14 @@ export class InvalidRecordSignatureError extends BaseError {
37
37
  });
38
38
  }
39
39
  }
40
+
41
+ export class InvalidVariantSignatureError extends BaseError {
42
+ override name = "InvalidVariantSignatureError";
43
+
44
+ constructor({ signature }: { signature: string }) {
45
+ super("Invalid variant signature.", {
46
+ details: signature,
47
+ metaMessages: ["No variant cases"],
48
+ });
49
+ }
50
+ }
@@ -50,3 +50,31 @@ export function execRecordSignature(signature: string) {
50
50
  properties: string;
51
51
  }>(witRecordSignatureRegex, signature);
52
52
  }
53
+
54
+ const witVariantSignatureRegex =
55
+ /^variant\s+(?<name>[a-zA-Z$_][a-zA-Z0-9$_-]*)\s*\{(?<cases>[\s\S]*?)\}$/;
56
+
57
+ export function isVariantSignature(signature: string) {
58
+ return witVariantSignatureRegex.test(signature);
59
+ }
60
+
61
+ export function execVariantSignature(signature: string) {
62
+ return execTyped<{
63
+ name: string;
64
+ cases: string;
65
+ }>(witVariantSignatureRegex, signature);
66
+ }
67
+
68
+ const witEnumSignatureRegex =
69
+ /^enum\s+(?<name>[a-zA-Z$_][a-zA-Z0-9$_-]*)\s*\{(?<cases>[\s\S]*?)\}$/;
70
+
71
+ export function isEnumSignature(signature: string) {
72
+ return witEnumSignatureRegex.test(signature);
73
+ }
74
+
75
+ export function execEnumSignature(signature: string) {
76
+ return execTyped<{
77
+ name: string;
78
+ cases: string;
79
+ }>(witEnumSignatureRegex, signature);
80
+ }
@@ -3,6 +3,8 @@ import { assertType, test } from "vitest";
3
3
  import type {
4
4
  IsFunctionSignature,
5
5
  IsRecordSignature,
6
+ IsEnumSignature,
7
+ IsVariantSignature,
6
8
  IsSignature,
7
9
  } from "./signatures.js";
8
10
 
@@ -29,6 +31,17 @@ test("IsRecordSignature", () => {
29
31
  IsRecordSignature<"record token-pair { a: contract-address, b: contract-address }">
30
32
  >(true);
31
33
  });
34
+
35
+ test("IsEnumSignature", () => {
36
+ assertType<IsEnumSignature<"enum color { hot-pink, lime-green, nave-blue }">>;
37
+ });
38
+
39
+ test("IsVariantSignature", () => {
40
+ assertType<
41
+ IsVariantSignature<"variant allowed-destinations { none, any, restricted(list<address>) }">
42
+ >;
43
+ });
44
+
32
45
  test("IsSignature", () => {
33
46
  assertType<
34
47
  IsSignature<"record contract-address { name: string, height: s64, tx-index: s64 }">
@@ -49,4 +62,12 @@ test("IsSignature", () => {
49
62
  assertType<
50
63
  IsSignature<"export cached-values: func(ctx: borrow<view-context>) -> list<u64>;">
51
64
  >(true);
65
+
66
+ assertType<IsSignature<"enum color { hot-pink, lime-green, nave-blue }">>(
67
+ true,
68
+ );
69
+
70
+ assertType<
71
+ IsSignature<"variant allowed-destinations { none, any, restricted(list<address>) }">
72
+ >(true);
52
73
  });
@@ -2,7 +2,9 @@ import type { Error_ } from "../../../error.js";
2
2
 
3
3
  export type IsSignature<type extends string> =
4
4
  | (IsFunctionSignature<type> extends true ? true : never)
5
- | (IsRecordSignature<type> extends true ? true : never);
5
+ | (IsRecordSignature<type> extends true ? true : never)
6
+ | (IsVariantSignature<type> extends true ? true : never)
7
+ | (IsEnumSignature<type> extends true ? true : never);
6
8
 
7
9
  export type Signature<
8
10
  string1 extends string,
@@ -28,6 +30,22 @@ export type RecordSignature<
28
30
  export type IsRecordSignature<signature extends string> =
29
31
  signature extends RecordSignature<infer name> ? IsName<name> : false;
30
32
 
33
+ export type VariantSignature<
34
+ name extends string = string,
35
+ cases extends string = string,
36
+ > = `variant ${name} { ${cases} }`;
37
+
38
+ export type IsVariantSignature<signature extends string> =
39
+ signature extends VariantSignature<infer name> ? IsName<name> : false;
40
+
41
+ export type EnumSignature<
42
+ name extends string = string,
43
+ cases extends string = string,
44
+ > = `enum ${name} { ${cases} }`;
45
+
46
+ export type IsEnumSignature<signature extends string> =
47
+ signature extends EnumSignature<infer name> ? IsName<name> : false;
48
+
31
49
  export type FunctionSignature<
32
50
  name extends string = string,
33
51
  tail extends string = string,
@@ -98,7 +116,6 @@ export type WitKeyword =
98
116
  | "variant"
99
117
  | "option"
100
118
  | "result"
101
- | "tuple"
102
119
  | "bool"
103
120
  | "s8"
104
121
  | "s16"