@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
@@ -1,24 +1,20 @@
1
- import type { WitParameter, WitList, WitOption } from "../../../wit/wit.js";
1
+ import type {
2
+ WitError,
3
+ WitParameter,
4
+ WitResult,
5
+ WitType,
6
+ } from "../../../wit/wit.js";
2
7
  import type {
3
8
  WitParametersToPrimitiveTypes,
4
- WitParameterToPrimitiveType,
5
9
  Option,
6
10
  } from "../../../wit/utils.js";
7
11
  import {
8
12
  InvalidWitEncodingTypeError,
9
13
  WitEncodingLengthMismatchError,
10
14
  } from "../../errors/wit.js";
15
+ import * as C from "./codecs/index.js";
16
+ import type { Codec } from "./codecs/types.js";
11
17
 
12
- import { U64Codec } from "./codecs/u64.js";
13
- import { S64Codec } from "./codecs/s64.js";
14
- import { DecimalCodec } from "./codecs/decimal.js";
15
- import { IntegerCodec } from "./codecs/integer.js";
16
- import { ListCodecFactory } from "./codecs/list.js";
17
- import { OptionCodecFactory } from "./codecs/option.js";
18
- import { StringCodec } from "./codecs/string.js";
19
- import { BoolCodec } from "./codecs/bool.js";
20
-
21
- // TODO: consider renaming to Wave
22
18
  export type EncodeWitParametersReturnType = string;
23
19
 
24
20
  export function encodeWitParameters<
@@ -29,310 +25,317 @@ export function encodeWitParameters<
29
25
  ? WitParametersToPrimitiveTypes<params>
30
26
  : never,
31
27
  ): EncodeWitParametersReturnType {
32
- if (params.length !== values.length)
28
+ if (params.length !== values.length) {
33
29
  throw new WitEncodingLengthMismatchError({
34
30
  expectedLength: params.length as number,
35
31
  givenLength: values.length as any,
36
32
  });
33
+ }
37
34
 
38
- const preparedParams = prepareParams({
39
- params: params as readonly WitParameter[],
40
- values: values as any,
41
- });
42
- const encoded = encodeParams(preparedParams);
35
+ const encodedParams = (params as readonly WitParameter[]).map((param, i) =>
36
+ encoderForParam(param).encodeWave(values[i] as any),
37
+ );
43
38
 
44
- return encoded;
39
+ return encodedParams.join(", ");
45
40
  }
46
41
 
47
- type PreparedParam = { encoded: string };
48
-
49
- function prepareParams<const params extends readonly WitParameter[]>({
50
- params,
51
- values,
52
- }: {
53
- params: params;
54
- values: WitParametersToPrimitiveTypes<params>;
55
- }) {
56
- const preparedParams: PreparedParam[] = [];
57
- for (let i = 0; i < params.length; i++) {
58
- preparedParams.push(prepareParam({ param: params[i]!, value: values[i] }));
59
- }
60
- return preparedParams;
61
- }
62
- function prepareParam<const param extends WitParameter>({
63
- param,
64
- value,
65
- }: {
66
- param: param;
67
- value: WitParameterToPrimitiveType<param>;
68
- }): PreparedParam {
69
- // TODO: this is a little smelly
70
-
71
- const isOption = getOptionComponent(param.type);
72
- if (isOption) {
73
- const type = param.type as WitOption;
74
-
75
- switch (type) {
76
- case "option<bool>":
77
- return {
78
- encoded: OptionCodecFactory.create(BoolCodec)
79
- .fromJs(value as unknown as Option<boolean>)
80
- .toWave(),
81
- };
82
-
83
- case "option<string>": {
84
- return {
85
- encoded: OptionCodecFactory.create(StringCodec)
86
- .fromJs(value as unknown as Option<string>)
87
- .toWave(),
88
- };
89
- }
42
+ // ============================================================================
43
+ // CODEC BUILDER HELPERS - Reduce duplication while keeping explicit switches
44
+ // ============================================================================
90
45
 
91
- case "option<integer>": {
92
- return {
93
- encoded: OptionCodecFactory.create(IntegerCodec)
94
- .fromJs(value as unknown as Option<bigint>)
95
- .toWave(),
96
- };
97
- }
46
+ /** Wraps a codec in an OptionCodec */
47
+ function option<T>(codec: Codec<T>): Codec<Option<T>> {
48
+ return C.OptionCodec(codec);
49
+ }
98
50
 
99
- case "option<decimal>": {
100
- return {
101
- encoded: OptionCodecFactory.create(DecimalCodec)
102
- .fromJs(value as unknown as Option<[bigint, number]>)
103
- .toWave(),
104
- };
105
- }
51
+ /** Wraps a codec in a ListCodec */
52
+ function list<T>(codec: Codec<T>): Codec<T[]> {
53
+ return C.ListCodec(codec);
54
+ }
106
55
 
107
- // signed ints
108
- case "option<s8>":
109
- case "option<s16>":
110
- case "option<s32>":
111
- throw new InvalidWitEncodingTypeError(param.type, {
112
- docsPath: "tk",
113
- });
114
- case "option<s64>":
115
- return {
116
- encoded: OptionCodecFactory.create(S64Codec)
117
- .fromJs(value as unknown as Option<bigint>)
118
- .toWave(),
119
- };
120
- case "option<u64>":
121
- return {
122
- encoded: OptionCodecFactory.create(U64Codec)
123
- .fromJs(value as unknown as Option<bigint>)
124
- .toWave(),
125
- };
126
-
127
- case "option<u8>":
128
- case "option<u16>":
129
- case "option<u32>":
130
- case "option<list<string>>":
131
- case "option<list<bool>>":
132
- case "option<list<s8>>":
133
- case "option<list<s16>>":
134
- case "option<list<s32>>":
135
- case "option<list<s64>>":
136
- case "option<list<u8>>":
137
- case "option<list<u16>>":
138
- case "option<list<u32>>":
139
- case "option<list<u64>>":
140
- case "option<list<integer>>":
141
- case "option<list<decimal>>":
142
- case "option<list<_>>":
143
- case "option<list<tuple>>":
144
- case "option<_>":
145
- case "option<tuple>":
146
- // TODO: OptionCodecFactory.create(TupleCodec) once it exists
147
- throw new InvalidWitEncodingTypeError(param.type, {
148
- docsPath: "tk",
149
- });
150
-
151
- default: {
152
- const _: never = type;
153
-
154
- throw new InvalidWitEncodingTypeError(_, {
155
- docsPath: "tk",
156
- });
157
- }
56
+ // ============================================================================
57
+ // ENCODER FACTORY - Single explicit switch showing all supported types
58
+ // ============================================================================
59
+
60
+ export function encoderForParam(param: WitParameter): Codec<unknown> {
61
+ const type = param.type as Exclude<WitType, WitResult | WitError>;
62
+
63
+ switch (type) {
64
+ // --- BASE TYPES -------------------------------------------------
65
+ case "bool":
66
+ return C.BoolCodec;
67
+ case "string":
68
+ return C.StringCodec;
69
+ case "integer":
70
+ return C.IntegerCodec;
71
+ case "decimal":
72
+ return C.DecimalCodec;
73
+ case "u8":
74
+ return C.U8Codec;
75
+ case "u16":
76
+ return C.U16Codec;
77
+ case "u32":
78
+ return C.U32Codec;
79
+ case "u64":
80
+ return C.U64Codec;
81
+ case "s8":
82
+ return C.S8Codec;
83
+ case "s16":
84
+ return C.S16Codec;
85
+ case "s32":
86
+ return C.S32Codec;
87
+ case "s64":
88
+ return C.S64Codec;
89
+ case "contract-address":
90
+ return C.ContractAddressCodec;
91
+
92
+ // --- OPTION<BASE> -----------------------------------------------
93
+ case "option<bool>":
94
+ return option(C.BoolCodec);
95
+ case "option<string>":
96
+ return option(C.StringCodec);
97
+ case "option<integer>":
98
+ return option(C.IntegerCodec);
99
+ case "option<decimal>":
100
+ return option(C.DecimalCodec);
101
+ case "option<u8>":
102
+ return option(C.U8Codec);
103
+ case "option<u16>":
104
+ return option(C.U16Codec);
105
+ case "option<u32>":
106
+ return option(C.U32Codec);
107
+ case "option<u64>":
108
+ return option(C.U64Codec);
109
+ case "option<s8>":
110
+ return option(C.S8Codec);
111
+ case "option<s16>":
112
+ return option(C.S16Codec);
113
+ case "option<s32>":
114
+ return option(C.S32Codec);
115
+ case "option<s64>":
116
+ return option(C.S64Codec);
117
+ case "option<_>":
118
+ return option(C.UnitCodec);
119
+
120
+ // --- LIST<BASE> -------------------------------------------------
121
+ case "list<bool>":
122
+ return list(C.BoolCodec);
123
+ case "list<string>":
124
+ return list(C.StringCodec);
125
+ case "list<integer>":
126
+ return list(C.IntegerCodec);
127
+ case "list<decimal>":
128
+ return list(C.DecimalCodec);
129
+ case "list<u8>":
130
+ return list(C.U8Codec);
131
+ case "list<u16>":
132
+ return list(C.U16Codec);
133
+ case "list<u32>":
134
+ return list(C.U32Codec);
135
+ case "list<u64>":
136
+ return list(C.U64Codec);
137
+ case "list<s8>":
138
+ return list(C.S8Codec);
139
+ case "list<s16>":
140
+ return list(C.S16Codec);
141
+ case "list<s32>":
142
+ return list(C.S32Codec);
143
+ case "list<s64>":
144
+ return list(C.S64Codec);
145
+
146
+ // --- OPTION<LIST<BASE>> -----------------------------------------
147
+ case "option<list<bool>>":
148
+ return option(list(C.BoolCodec));
149
+ case "option<list<string>>":
150
+ return option(list(C.StringCodec));
151
+ case "option<list<integer>>":
152
+ return option(list(C.IntegerCodec));
153
+ case "option<list<decimal>>":
154
+ return option(list(C.DecimalCodec));
155
+ case "option<list<u8>>":
156
+ return option(list(C.U8Codec));
157
+ case "option<list<u16>>":
158
+ return option(list(C.U16Codec));
159
+ case "option<list<u32>>":
160
+ return option(list(C.U32Codec));
161
+ case "option<list<u64>>":
162
+ return option(list(C.U64Codec));
163
+ case "option<list<s8>>":
164
+ return option(list(C.S8Codec));
165
+ case "option<list<s16>>":
166
+ return option(list(C.S16Codec));
167
+ case "option<list<s32>>":
168
+ return option(list(C.S32Codec));
169
+ case "option<list<s64>>":
170
+ return option(list(C.S64Codec));
171
+
172
+ // --- COMPLEX TYPES ----------------------------------------------
173
+ case "record":
174
+ return RecordCodec(param);
175
+ case "option<record>":
176
+ return option(RecordCodec(param));
177
+ case "list<record>":
178
+ return list(RecordCodec(param));
179
+ case "option<list<record>>":
180
+ return option(list(RecordCodec(param)));
181
+
182
+ case "variant":
183
+ return VariantCodec(param);
184
+ case "option<variant>":
185
+ return option(VariantCodec(param));
186
+ case "list<variant>":
187
+ return list(VariantCodec(param));
188
+ case "option<list<variant>>":
189
+ return option(list(VariantCodec(param)));
190
+
191
+ case "enum":
192
+ return EnumCodec(param);
193
+ case "option<enum>":
194
+ return option(EnumCodec(param));
195
+ case "list<enum>":
196
+ return list(EnumCodec(param));
197
+ case "option<list<enum>>":
198
+ return option(list(EnumCodec(param)));
199
+
200
+ default: {
201
+ const _: never = type;
202
+ throw new InvalidWitEncodingTypeError(_, { docsPath: "tk" });
158
203
  }
159
204
  }
205
+ }
160
206
 
161
- const isList = getListComponents(param.type);
162
- if (isList) {
163
- const type = param.type as WitList;
164
-
165
- switch (type) {
166
- case "list<bool>":
167
- return {
168
- encoded: ListCodecFactory.create(BoolCodec)
169
- .fromJs(value as unknown as boolean[])
170
- .toWave(),
171
- };
172
-
173
- case "list<string>": {
174
- return {
175
- encoded: ListCodecFactory.create(StringCodec)
176
- .fromJs(value as unknown as string[])
177
- .toWave(),
178
- };
179
- }
207
+ // ============================================================================
208
+ // COMPLEX TYPE CODECS
209
+ // ============================================================================
180
210
 
181
- case "list<integer>": {
182
- return {
183
- encoded: ListCodecFactory.create(IntegerCodec)
184
- .fromJs(value as unknown as bigint[])
185
- .toWave(),
186
- };
187
- }
211
+ export type RecordJs = Record<string, unknown>;
212
+ export type VariantJs = [string] | [string, unknown];
188
213
 
189
- case "list<decimal>": {
190
- return {
191
- encoded: ListCodecFactory.create(DecimalCodec)
192
- .fromJs(value as unknown as [bigint, number][])
193
- .toWave(),
194
- };
195
- }
196
-
197
- case "list<s64>":
198
- return {
199
- encoded: ListCodecFactory.create(S64Codec)
200
- .fromJs(value as unknown as bigint[])
201
- .toWave(),
202
- };
203
- case "list<u64>":
204
- return {
205
- encoded: ListCodecFactory.create(U64Codec)
206
- .fromJs(value as unknown as bigint[])
207
- .toWave(),
208
- };
209
-
210
- case "list<_>":
211
- case "list<u8>":
212
- case "list<u16>":
213
- case "list<u32>":
214
- case "list<tuple>":
215
- case "list<s8>":
216
- case "list<s16>":
217
- case "list<s32>":
218
- // TODO: ListCodecFactory.create(TupleCodec) once it exists
219
- throw new InvalidWitEncodingTypeError(param.type, {
220
- docsPath: "tk",
221
- });
222
-
223
- default: {
224
- const _: never = type;
225
-
226
- throw new InvalidWitEncodingTypeError(_, {
227
- docsPath: "tk",
228
- });
229
- }
230
- }
214
+ export function RecordCodec(param: WitParameter): Codec<RecordJs> {
215
+ if (!param.components) {
216
+ throw new Error("Record parameter missing components");
231
217
  }
232
218
 
233
- if (param.type === "bool") {
234
- return encodeBool(value as unknown as boolean);
235
- }
219
+ return {
220
+ decodeWave(_: string): RecordJs {
221
+ throw new Error("not implemented");
222
+ },
236
223
 
237
- if (param.type === "u64") {
238
- return encodeU64(value as unknown as bigint);
239
- }
224
+ encodeWave(value: RecordJs): string {
225
+ const fields = param.components!.map((component) => {
226
+ if (!component.name) {
227
+ throw new Error("Record component missing name");
228
+ }
240
229
 
241
- if (param.type === "s64") {
242
- return encodeS64(value as unknown as bigint);
243
- }
230
+ const fieldValue = value[component.name];
231
+ if (fieldValue === undefined) {
232
+ throw new Error(`Record missing field "${component.name}"`);
233
+ }
244
234
 
245
- if (param.type === "integer") {
246
- return encodeInteger(value as unknown as bigint);
247
- }
235
+ const codec = encoderForParam(component);
236
+ const encoded = codec.encodeWave(fieldValue);
248
237
 
249
- if (param.type === "decimal") {
250
- return encodeDecimal(value as unknown as [bigint, number]);
251
- }
252
- if (param.type === "string") {
253
- return encodeString(value as unknown as string);
254
- }
255
- throw new InvalidWitEncodingTypeError(param.type, {
256
- docsPath: "tk",
257
- });
238
+ return `${component.name}: ${encoded}`;
239
+ });
240
+
241
+ return `{${fields.join(", ")}}`;
242
+ },
243
+ };
258
244
  }
259
245
 
260
- export function getListComponents(type: string): string | undefined {
261
- // TODO: add error when nothing inside
246
+ export function VariantCodec(param: WitParameter): Codec<VariantJs> {
247
+ if (!param.components) {
248
+ throw new Error("Variant parameter missing components");
249
+ }
262
250
 
263
- // Matches things like:
264
- // - "list<integer>"
265
- // - "list<result<string, integer>>"
266
- // - "list< list<decimal> >"
267
- const matches = type.match(/^list<(.*)>$/);
251
+ return {
252
+ decodeWave(_: string): VariantJs {
253
+ throw new Error("not implemented");
254
+ },
268
255
 
269
- return matches ? matches[1]?.trim() : undefined;
270
- }
256
+ encodeWave(value: VariantJs): string {
257
+ const [caseName, payload] = value;
271
258
 
272
- export function getOptionComponent(type: string): string | undefined {
273
- // Matches:
274
- // - "option<integer>"
275
- // - "option<list<decimal>>"
276
- // - "option< result<string, error> >"
277
- const matches = type.match(/^option<(.*)>$/);
259
+ const variantCase = param.components!.find(
260
+ (c: WitParameter) => c.name === caseName,
261
+ );
278
262
 
279
- return matches ? matches[1]?.trim() : undefined;
280
- }
281
- export class InvalidResultTypeError extends Error {
282
- constructor(type: string) {
283
- super(`Invalid result type "${type}". The error channel must be "error".`);
284
- }
285
- }
286
-
287
- export function getResultComponentsStrict(
288
- type: string,
289
- ): [okType: string, errorType: "error"] | undefined {
290
- const matches = type.match(/^result<(.*?),(.*?)>$/);
291
- if (!matches) return undefined;
263
+ if (!variantCase) {
264
+ throw new Error(`Unknown variant case: ${caseName}`);
265
+ }
292
266
 
293
- const okType = matches[1]!.trim();
294
- const errType = matches[2]!.trim();
267
+ // Unit case (no payload)
268
+ if (variantCase.type === "_") {
269
+ if (payload !== undefined) {
270
+ throw new Error(
271
+ `Variant case ${caseName} expects no payload but got: ${payload}`,
272
+ );
273
+ }
274
+ return caseName;
275
+ }
295
276
 
296
- if (errType !== "error") throw new InvalidResultTypeError(errType);
277
+ // Case with payload
278
+ if (payload === undefined) {
279
+ throw new Error(
280
+ `Variant case ${caseName} expects a payload but got undefined`,
281
+ );
282
+ }
297
283
 
298
- return [okType, "error"];
299
- }
284
+ const codec = encoderForParam(variantCase);
285
+ const encoded = codec.encodeWave(payload);
300
286
 
301
- function encodeBool(value: boolean): PreparedParam {
302
- return {
303
- encoded: BoolCodec.fromJs(value).toWave(),
287
+ return `${caseName}(${encoded})`;
288
+ },
304
289
  };
305
290
  }
306
291
 
307
- function encodeU64(value: bigint): PreparedParam {
308
- return {
309
- encoded: U64Codec.fromJs(value).toWave(),
310
- };
311
- }
292
+ export function EnumCodec(param: WitParameter): Codec<string> {
293
+ if (!param.components) {
294
+ throw new Error("Enum parameter missing components (cases)");
295
+ }
296
+
297
+ const validCases = param.components.map((c) => c.name);
312
298
 
313
- function encodeS64(value: bigint): PreparedParam {
314
- return {
315
- encoded: S64Codec.fromJs(value).toWave(),
316
- };
317
- }
318
- function encodeInteger(value: bigint): PreparedParam {
319
299
  return {
320
- encoded: IntegerCodec.fromJs(value).toWave(),
300
+ decodeWave(expr: string): string {
301
+ const caseName = expr.trim();
302
+ if (!validCases.includes(caseName)) {
303
+ throw new Error(
304
+ `Invalid enum case "${caseName}". Valid cases: ${validCases.join(", ")}`,
305
+ );
306
+ }
307
+ return caseName;
308
+ },
309
+
310
+ encodeWave(value: string): string {
311
+ if (!validCases.includes(value)) {
312
+ throw new Error(
313
+ `Invalid enum case "${value}". Valid cases: ${validCases.join(", ")}`,
314
+ );
315
+ }
316
+ return value;
317
+ },
321
318
  };
322
319
  }
323
320
 
324
- function encodeDecimal(value: [bigint, number]): PreparedParam {
325
- return {
326
- encoded: DecimalCodec.fromJs(value).toWave(),
327
- };
321
+ // ============================================================================
322
+ // DEPRECATED - Keep for backward compatibility if needed
323
+ // ============================================================================
324
+
325
+ /** @deprecated Use encoderForParam instead */
326
+ export function getListComponents(type: string): string | undefined {
327
+ const matches = type.match(/^list<(.*)>$/);
328
+ return matches ? matches[1]?.trim() : undefined;
328
329
  }
329
330
 
330
- function encodeString(value: string): PreparedParam {
331
- return {
332
- encoded: StringCodec.fromJs(value).toWave(),
333
- };
331
+ /** @deprecated Use encoderForParam instead */
332
+ export function getOptionComponent(type: string): string | undefined {
333
+ const matches = type.match(/^option<(.*)>$/);
334
+ return matches ? matches[1]?.trim() : undefined;
334
335
  }
335
336
 
336
- function encodeParams(preparedParams: PreparedParam[]): string {
337
- return preparedParams.map((p) => p.encoded).join(", ");
337
+ export class InvalidResultTypeError extends Error {
338
+ constructor(type: string) {
339
+ super(`Invalid result type "${type}". The error channel must be "error".`);
340
+ }
338
341
  }
@@ -142,7 +142,7 @@ describe("getWitItem", () => {
142
142
  inputs: [],
143
143
  outputs: [
144
144
  {
145
- type: "list<tuple>",
145
+ type: "list<record>",
146
146
  internalType: "list<balance>",
147
147
  components: [
148
148
  {
@@ -0,0 +1,23 @@
1
+ import type { WitParameter } from "./wit.js";
2
+
3
+ export namespace WitError {
4
+ export const param: WitParameter = {
5
+ name: "error",
6
+ type: "variant",
7
+ internalType: "error",
8
+ components: [
9
+ { name: "message", type: "string" },
10
+ { name: "overflow", type: "string" },
11
+ { name: "div-by-zero", type: "string" },
12
+ { name: "syntax", type: "string" },
13
+ { name: "validation", type: "string" },
14
+ ],
15
+ };
16
+
17
+ export type T =
18
+ | ["message", string]
19
+ | ["overflow", string]
20
+ | ["div-by-zero", string]
21
+ | ["syntax", string]
22
+ | ["validation", string];
23
+ }
package/src/wit/regex.ts CHANGED
@@ -4,4 +4,4 @@ export function execTyped<type>(regex: RegExp, string: string) {
4
4
  }
5
5
 
6
6
  export const isGenericRegex =
7
- /^(?<outer>borrow|list|option|result|tuple)\s*<(?<inner>[\s\S]+)>\s*$/;
7
+ /^(?<outer>borrow|list|option|result)\s*<(?<inner>[\s\S]+)>\s*$/;