@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
@@ -0,0 +1,412 @@
1
+ import type { WitParameter } from "../../../wit.js";
2
+ import type { Trim } from "../../../type-utils.js";
3
+ import type {
4
+ RecordSignature,
5
+ VariantSignature,
6
+ EnumSignature,
7
+ } from "./signatures.js";
8
+ import type { ParseWitParameter, SplitParameters } from "./utils.js";
9
+ import type { Error_ } from "../../../error.js";
10
+
11
+ export type ComponentLookup = Record<
12
+ string,
13
+ readonly (WitParameter & { type: string })[]
14
+ >;
15
+ export type RecordLookup = ComponentLookup;
16
+ export type VariantLookup = ComponentLookup;
17
+ export type EnumLookup = Record<string, readonly string[]>;
18
+ // Enum Types
19
+ // ============================================================================
20
+
21
+ export type ParseEnums<signatures extends readonly string[]> = {
22
+ [signature in signatures[number] as ParseEnum<signature> extends infer enum_ extends
23
+ { name: string }
24
+ ? enum_["name"]
25
+ : never]: ParseEnum<signature>["cases"];
26
+ };
27
+
28
+ export type ParseEnum<signature extends string> =
29
+ signature extends EnumSignature<infer name, infer cases>
30
+ ? {
31
+ readonly name: Trim<name>;
32
+ readonly cases: ParseEnumCases<cases>;
33
+ }
34
+ : never;
35
+
36
+ export type ParseEnumCases<
37
+ signature extends string,
38
+ result extends readonly string[] = [],
39
+ > =
40
+ Trim<signature> extends `${infer head},${infer tail}`
41
+ ? ParseEnumCases<tail, readonly [...result, Trim<head>]>
42
+ : Trim<signature> extends ""
43
+ ? result
44
+ : readonly [...result, Trim<signature>];
45
+
46
+ // ============================================================================
47
+ // Variant Types
48
+ // ============================================================================
49
+
50
+ export type NormalizeVariantCaseToken<S extends string> =
51
+ Trim<S> extends `${infer N}(${infer T})`
52
+ ? `${Trim<N>}: ${Trim<T>}`
53
+ : `${Trim<S>}: _`;
54
+
55
+ export type ParseVariants<
56
+ signatures extends readonly string[],
57
+ enums extends EnumLookup | unknown = unknown,
58
+ records extends ComponentLookup | unknown = unknown,
59
+ > = {
60
+ [signature in signatures[number] as ParseVariant<
61
+ signature,
62
+ {},
63
+ records,
64
+ enums
65
+ > extends infer variant extends { name: string }
66
+ ? variant["name"]
67
+ : never]: ParseVariant<signature, {}, records, enums>["components"];
68
+ };
69
+
70
+ // export type ParseVariants<
71
+ // signatures extends readonly string[],
72
+ // enums extends EnumLookup | unknown = unknown,
73
+ // records extends ComponentLookup | unknown = unknown,
74
+ // shallow extends boolean = false,
75
+ // > = {
76
+ // [signature in signatures[number] as ParseVariant<
77
+ // signature,
78
+ // {},
79
+ // records,
80
+ // enums
81
+ // > extends infer variant extends { name: string }
82
+ // ? variant["name"]
83
+ // : never]: ParseVariant<signature, {}, records, enums>["components"];
84
+ // } extends infer variants extends ComponentLookup
85
+ // ? shallow extends true
86
+ // ? variants
87
+ // : {
88
+ // [variantName in keyof variants]: ResolveTypes<
89
+ // variants[variantName],
90
+ // records,
91
+ // variants,
92
+ // enums
93
+ // >;
94
+ // }
95
+ // : never;
96
+ export type ParseVariant<
97
+ signature extends string,
98
+ variants extends ComponentLookup | unknown = unknown,
99
+ records extends ComponentLookup | unknown = unknown,
100
+ enums extends EnumLookup | unknown = unknown,
101
+ > =
102
+ signature extends VariantSignature<infer name, infer components>
103
+ ? {
104
+ readonly name: name;
105
+ readonly components: ParseVariantCases<
106
+ components,
107
+ variants,
108
+ records,
109
+ enums
110
+ >;
111
+ }
112
+ : never;
113
+
114
+ export type ParseVariantCases<
115
+ signature extends string,
116
+ variants extends ComponentLookup | unknown = unknown,
117
+ records extends ComponentLookup | unknown = unknown,
118
+ enums extends EnumLookup | unknown = unknown,
119
+ > =
120
+ SplitParameters<signature> extends infer parts extends readonly string[]
121
+ ? {
122
+ readonly [K in keyof parts]: ParseWitParameter<
123
+ NormalizeVariantCaseToken<parts[K]>,
124
+ { records: records; variants: variants; enums: enums }
125
+ >;
126
+ }
127
+ : SplitParameters<signature>;
128
+
129
+ // ============================================================================
130
+ // Record Types
131
+ // ============================================================================
132
+
133
+ export type ParseRecords<
134
+ signatures extends readonly string[],
135
+ variants extends ComponentLookup | unknown = unknown,
136
+ enums extends EnumLookup | unknown = unknown,
137
+ > = {
138
+ [signature in signatures[number] as ParseRecord<
139
+ signature,
140
+ {},
141
+ variants,
142
+ enums
143
+ > extends infer record extends { name: string }
144
+ ? record["name"]
145
+ : never]: ParseRecord<signature, {}, variants, enums>["components"];
146
+ };
147
+
148
+ export type ParseRecord<
149
+ signature extends string,
150
+ records extends ComponentLookup | unknown = unknown,
151
+ variants extends ComponentLookup | unknown = unknown,
152
+ enums extends EnumLookup | unknown = unknown,
153
+ > =
154
+ signature extends RecordSignature<infer name, infer properties>
155
+ ? {
156
+ readonly name: Trim<name>;
157
+ readonly components: ParseRecordProperties<
158
+ properties,
159
+ records,
160
+ variants,
161
+ enums
162
+ >;
163
+ }
164
+ : never;
165
+
166
+ export type ParseRecordProperties<
167
+ signature extends string,
168
+ records extends ComponentLookup | unknown = unknown,
169
+ variants extends ComponentLookup | unknown = unknown,
170
+ enums extends EnumLookup | unknown = unknown,
171
+ > =
172
+ SplitParameters<signature> extends infer parts extends readonly string[]
173
+ ? {
174
+ readonly [K in keyof parts]: ParseWitParameter<
175
+ parts[K],
176
+ { records: records; variants: variants; enums: enums }
177
+ >;
178
+ }
179
+ : SplitParameters<signature>; // surface any error types
180
+
181
+ // ============================================================================
182
+ // Unified Type Resolution
183
+ // ============================================================================
184
+
185
+ export type ResolveTypes<
186
+ witParameters extends readonly (WitParameter & { type: string })[],
187
+ records extends ComponentLookup | unknown = unknown,
188
+ variants extends ComponentLookup | unknown = unknown,
189
+ enums extends EnumLookup | unknown = unknown,
190
+ keyReferences extends { [_: string]: unknown } | unknown = unknown,
191
+ > = readonly [
192
+ ...{
193
+ [key in keyof witParameters]: witParameters[key]["type"] extends // Handle wrapped types (list<T>, option<T>, result<T, error>)
194
+ `list<${infer inner}>`
195
+ ? ResolveWrappedType<
196
+ witParameters[key],
197
+ "list",
198
+ inner,
199
+ records,
200
+ variants,
201
+ enums,
202
+ keyReferences
203
+ >
204
+ : witParameters[key]["type"] extends `option<${infer inner}>`
205
+ ? ResolveWrappedType<
206
+ witParameters[key],
207
+ "option",
208
+ inner,
209
+ records,
210
+ variants,
211
+ enums,
212
+ keyReferences
213
+ >
214
+ : witParameters[key]["type"] extends `borrow<${infer inner}>`
215
+ ? ResolveWrappedType<
216
+ witParameters[key],
217
+ "borrow",
218
+ inner,
219
+ records,
220
+ variants,
221
+ enums,
222
+ keyReferences
223
+ >
224
+ : witParameters[key]["type"] extends `result<${infer inner}, error>`
225
+ ? ResolveWrappedType<
226
+ witParameters[key],
227
+ "result",
228
+ inner,
229
+ records,
230
+ variants,
231
+ enums,
232
+ keyReferences
233
+ >
234
+ : // Handle direct type references
235
+ ResolveDirectType<
236
+ witParameters[key],
237
+ records,
238
+ variants,
239
+ enums,
240
+ keyReferences
241
+ >;
242
+ },
243
+ ];
244
+
245
+ type ResolveWrappedType<
246
+ param extends WitParameter & { type: string },
247
+ wrapper extends string,
248
+ inner extends string,
249
+ records extends ComponentLookup | unknown,
250
+ variants extends ComponentLookup | unknown,
251
+ enums extends EnumLookup | unknown,
252
+ keyReferences extends { [_: string]: unknown } | unknown,
253
+ > =
254
+ // Check if inner type is a record
255
+ [records] extends [ComponentLookup]
256
+ ? inner extends keyof records
257
+ ? inner extends keyof keyReferences
258
+ ? Error_<`Circular reference detected at "${inner}".`>
259
+ : {
260
+ readonly name: param["name"];
261
+ readonly type: wrapper extends "result"
262
+ ? `result<record, error>`
263
+ : `${wrapper}<record>`;
264
+ readonly internalType: wrapper extends "result"
265
+ ? `result<${inner}, error>`
266
+ : `${wrapper}<${inner}>`;
267
+ readonly components: ResolveTypes<
268
+ records[inner],
269
+ records,
270
+ variants,
271
+ enums,
272
+ keyReferences & { [K in inner]: true }
273
+ >;
274
+ }
275
+ : [variants] extends [ComponentLookup]
276
+ ? inner extends keyof variants
277
+ ? inner extends keyof keyReferences
278
+ ? Error_<`Circular reference detected at "${inner}".`>
279
+ : {
280
+ readonly name: param["name"];
281
+ readonly type: wrapper extends "result"
282
+ ? `result<variant, error>`
283
+ : `${wrapper}<variant>`;
284
+ readonly internalType: wrapper extends "result"
285
+ ? `result<${inner}, error>`
286
+ : `${wrapper}<${inner}>`;
287
+ readonly components: ResolveTypes<
288
+ variants[inner],
289
+ records,
290
+ variants,
291
+ enums,
292
+ keyReferences & { [K in inner]: true }
293
+ >;
294
+ }
295
+ : [enums] extends [EnumLookup]
296
+ ? inner extends keyof enums
297
+ ? inner extends keyof keyReferences
298
+ ? Error_<`Circular reference detected at "${inner}".`>
299
+ : {
300
+ readonly name: param["name"];
301
+ readonly type: wrapper extends "result"
302
+ ? `result<enum, error>`
303
+ : `${wrapper}<enum>`;
304
+ readonly internalType: wrapper extends "result"
305
+ ? `result<${inner}, error>`
306
+ : `${wrapper}<${inner}>`;
307
+ readonly components: EnumToComponents<enums[inner]>;
308
+ }
309
+ : param
310
+ : param
311
+ : param
312
+ : param;
313
+
314
+ type ResolveDirectType<
315
+ param extends WitParameter & { type: string },
316
+ records extends ComponentLookup | unknown,
317
+ variants extends ComponentLookup | unknown,
318
+ enums extends EnumLookup | unknown,
319
+ keyReferences extends { [_: string]: unknown } | unknown,
320
+ > =
321
+ // Check if it's a record
322
+ [records] extends [ComponentLookup]
323
+ ? param["type"] extends keyof records
324
+ ? param["type"] extends keyof keyReferences
325
+ ? Error_<`Circular reference detected at "${param["type"]}".`>
326
+ : {
327
+ readonly name: param["name"];
328
+ readonly type: "record";
329
+ readonly internalType: param["type"];
330
+ readonly components: ResolveTypes<
331
+ records[param["type"]],
332
+ records,
333
+ variants,
334
+ enums,
335
+ keyReferences & { [K in param["type"]]: true }
336
+ >;
337
+ }
338
+ : [variants] extends [ComponentLookup]
339
+ ? param["type"] extends keyof variants
340
+ ? param["type"] extends keyof keyReferences
341
+ ? Error_<`Circular reference detected at "${param["type"]}".`>
342
+ : {
343
+ readonly name: param["name"];
344
+ readonly type: "variant";
345
+ readonly internalType: param["type"];
346
+ readonly components: ResolveTypes<
347
+ variants[param["type"]],
348
+ records,
349
+ variants,
350
+ enums,
351
+ keyReferences & { [K in param["type"]]: true }
352
+ >;
353
+ }
354
+ : [enums] extends [EnumLookup]
355
+ ? param["type"] extends keyof enums
356
+ ? param["type"] extends keyof keyReferences
357
+ ? Error_<`Circular reference detected at "${param["type"]}".`>
358
+ : {
359
+ readonly name: param["name"];
360
+ readonly type: "enum";
361
+ readonly internalType: param["type"];
362
+ readonly components: EnumToComponents<enums[param["type"]]>;
363
+ }
364
+ : param
365
+ : param
366
+ : param
367
+ : param;
368
+
369
+ export type EnumToComponents<cases extends readonly string[]> = readonly [
370
+ ...{
371
+ [K in keyof cases]: {
372
+ readonly name: cases[K];
373
+ readonly type: "_";
374
+ };
375
+ },
376
+ ];
377
+
378
+ // ============================================================================
379
+ // Unified Parser
380
+ // ============================================================================
381
+
382
+ export type ParseTypes<signatures extends readonly string[]> =
383
+ ParseEnums<signatures> extends infer enums extends EnumLookup
384
+ ? ParseRecords<signatures, {}, enums> extends infer shallowRecords extends
385
+ ComponentLookup
386
+ ? ParseVariants<
387
+ signatures,
388
+ enums,
389
+ {}
390
+ > extends infer shallowVariants extends ComponentLookup
391
+ ? {
392
+ records: {
393
+ [K in keyof shallowRecords]: ResolveTypes<
394
+ shallowRecords[K],
395
+ shallowRecords,
396
+ shallowVariants,
397
+ enums
398
+ >;
399
+ };
400
+ variants: {
401
+ [K in keyof shallowVariants]: ResolveTypes<
402
+ shallowVariants[K],
403
+ shallowRecords,
404
+ shallowVariants,
405
+ enums
406
+ >;
407
+ };
408
+ enums: enums;
409
+ }
410
+ : never
411
+ : never
412
+ : never;
@@ -40,6 +40,19 @@ type OptionsWithRecords = {
40
40
  ];
41
41
  };
42
42
  };
43
+ //
44
+ type OptionsWithVariants = {
45
+ records: {
46
+ address: [{ name: "value"; type: "string" }];
47
+ };
48
+ variants: {
49
+ "allowed-destinations": [
50
+ { name: "none"; type: "_"; internalType: "_" },
51
+ { name: "any"; type: "_"; internalType: "_" },
52
+ { name: "restricted"; type: "list<address>"; internalType: "_" },
53
+ ];
54
+ };
55
+ };
43
56
 
44
57
  test("ParseWitParameter", () => {
45
58
  // everything in fib contrct
@@ -55,6 +68,16 @@ test("ParseWitParameter", () => {
55
68
  internalType: "contract-address",
56
69
  });
57
70
 
71
+ assertType<ParseWitParameter<"dog: dog", OptionsWithRecords>>({
72
+ name: "dog",
73
+ type: "record",
74
+ internalType: "dog",
75
+ components: [
76
+ { name: "name", type: "string" },
77
+ { name: "breed", type: "string" },
78
+ ],
79
+ });
80
+
58
81
  assertType<ParseWitParameter<"n: u64">>({
59
82
  name: "n",
60
83
  type: "u64",
@@ -113,6 +136,24 @@ test("ParseWitParameter", () => {
113
136
  type: "contract-address",
114
137
  internalType: "contract-address",
115
138
  });
139
+
140
+ assertType<
141
+ ParseWitParameter<"allowed: allowed-destinations", OptionsWithVariants>
142
+ >({
143
+ name: "allowed",
144
+ type: "variant",
145
+ internalType: "allowed-destinations",
146
+ components: [
147
+ { name: "none", type: "_", internalType: "_" },
148
+ { name: "any", type: "_", internalType: "_" },
149
+ {
150
+ name: "restricted",
151
+ type: "list<record>",
152
+ internalType: "list<address>",
153
+ components: [{ type: "string", name: "value" }],
154
+ },
155
+ ],
156
+ });
116
157
  });
117
158
 
118
159
  test("_ParseFunctionParametersAndContext", () => {
@@ -220,7 +261,7 @@ test("Parse Signature", () => {
220
261
  assertType<
221
262
  ParseSignature<
222
263
  "export get-dogs: func(ctx: borrow<proc-context>) -> list<dog>;",
223
- OptionsWithRecords["records"]
264
+ OptionsWithRecords
224
265
  >
225
266
  >({
226
267
  type: "function",
@@ -229,7 +270,7 @@ test("Parse Signature", () => {
229
270
  inputs: [],
230
271
  outputs: [
231
272
  {
232
- type: "list<tuple>",
273
+ type: "list<record>",
233
274
  internalType: "list<dog>",
234
275
  components: [
235
276
  { type: "string", name: "name" },
@@ -1,10 +1,17 @@
1
- import type { RecordLookup } from "./records.js";
2
1
  import type { Trim, Pretty } from "../../../type-utils.js";
3
2
  import type { FunctionSignature, IsFunctionSignature } from "./signatures.js";
4
3
  import type { Error_ } from "../../../error.js";
4
+ import type {
5
+ EnumLookup,
6
+ RecordLookup,
7
+ VariantLookup,
8
+ EnumToComponents,
9
+ } from "./user-defined.js";
5
10
 
6
11
  type ParseOptions = {
7
12
  records?: RecordLookup | unknown;
13
+ variants?: VariantLookup | unknown;
14
+ enums?: EnumLookup | unknown;
8
15
  };
9
16
  type DefaultParseOptions = {};
10
17
 
@@ -13,9 +20,26 @@ type HasRecords<Opts> = Opts extends { records: Record<string, unknown> }
13
20
  ? true
14
21
  : false;
15
22
 
23
+ type HasVariants<Opts> = Opts extends { variants: Record<string, unknown> }
24
+ ? true
25
+ : false;
26
+
27
+ type HasEnums<Opts> = Opts extends { enums: Record<string, unknown> }
28
+ ? true
29
+ : false;
30
+
16
31
  type RecordsOf<Opts> = Opts extends { records: infer R extends RecordLookup }
17
32
  ? R
18
33
  : never;
34
+
35
+ type VariantsOf<Opts> = Opts extends { variants: infer R extends VariantLookup }
36
+ ? R
37
+ : never;
38
+
39
+ type EnumsOf<Opts> = Opts extends { enums: infer E extends EnumLookup }
40
+ ? E
41
+ : never;
42
+
19
43
  type WithName<Shallow> = Shallow extends { name: infer N extends string }
20
44
  ? { readonly name: N }
21
45
  : {};
@@ -23,16 +47,95 @@ type GetComponents<T> = T extends { components: infer C }
23
47
  ? { readonly components: C }
24
48
  : {};
25
49
 
26
- type AsTupleFromRecord<T extends string, Opts extends ParseOptions> =
27
- HasRecords<Opts> extends true
50
+ type MapCaseFields<
51
+ Fields extends readonly {
52
+ readonly name?: string | undefined;
53
+ readonly type: string;
54
+ }[],
55
+ V extends VariantLookup,
56
+ R extends RecordLookup,
57
+ E extends EnumLookup,
58
+ > = {
59
+ readonly [I in keyof Fields]: Fields[I] extends {
60
+ readonly name?: infer N extends string | undefined;
61
+ readonly internalType: infer IT extends string;
62
+ readonly type: infer T extends string;
63
+ }
64
+ ? Pretty<
65
+ { readonly name: N } & MapGenericType<
66
+ IT extends "_" ? T : IT,
67
+ { variants: V; records: R; enums: E }
68
+ >
69
+ >
70
+ : never;
71
+ };
72
+ type AsUserDefinedType<
73
+ T extends string,
74
+ Opts extends ParseOptions,
75
+ > = T extends "_"
76
+ ? Readonlyify<{ type: "_"; internalType: "_" }>
77
+ : HasRecords<Opts> extends true
28
78
  ? T extends keyof RecordsOf<Opts>
29
79
  ? Readonlyify<{
30
- type: "tuple";
31
- components: RecordsOf<Opts>[T];
80
+ type: "record";
32
81
  internalType: T;
82
+ components: RecordsOf<Opts>[T];
33
83
  }>
34
- : Readonlyify<{ type: T; internalType: T }>
35
- : Readonlyify<{ type: T; internalType: T }>;
84
+ : HasVariants<Opts> extends true
85
+ ? T extends keyof VariantsOf<Opts>
86
+ ? Readonlyify<{
87
+ type: "variant";
88
+ internalType: T;
89
+ components: MapCaseFields<
90
+ VariantsOf<Opts>[T],
91
+ VariantsOf<Opts>,
92
+ RecordsOf<Opts>,
93
+ EnumsOf<Opts>
94
+ >;
95
+ }>
96
+ : HasEnums<Opts> extends true
97
+ ? T extends keyof EnumsOf<Opts>
98
+ ? Readonlyify<{
99
+ type: "enum";
100
+ internalType: T;
101
+ components: EnumToComponents<EnumsOf<Opts>[T]>;
102
+ }>
103
+ : Readonlyify<{ type: T; internalType: T }>
104
+ : Readonlyify<{ type: T; internalType: T }>
105
+ : HasEnums<Opts> extends true
106
+ ? T extends keyof EnumsOf<Opts>
107
+ ? Readonlyify<{
108
+ type: "enum";
109
+ internalType: T;
110
+ components: EnumToComponents<EnumsOf<Opts>[T]>;
111
+ }>
112
+ : Readonlyify<{ type: T; internalType: T }>
113
+ : Readonlyify<{ type: T; internalType: T }>
114
+ : HasVariants<Opts> extends true
115
+ ? T extends keyof VariantsOf<Opts>
116
+ ? Readonlyify<{
117
+ type: "variant";
118
+ internalType: T;
119
+ components: VariantsOf<Opts>[T];
120
+ }>
121
+ : HasEnums<Opts> extends true
122
+ ? T extends keyof EnumsOf<Opts>
123
+ ? Readonlyify<{
124
+ type: "enum";
125
+ internalType: T;
126
+ components: EnumToComponents<EnumsOf<Opts>[T]>;
127
+ }>
128
+ : Readonlyify<{ type: T; internalType: T }>
129
+ : Readonlyify<{ type: T; internalType: T }>
130
+ : HasEnums<Opts> extends true
131
+ ? T extends keyof EnumsOf<Opts>
132
+ ? Readonlyify<{
133
+ type: "enum";
134
+ internalType: T;
135
+ components: EnumToComponents<EnumsOf<Opts>[T]>;
136
+ }>
137
+ : Readonlyify<{ type: T; internalType: T }>
138
+ : Readonlyify<{ type: T; internalType: T }>;
36
139
 
37
140
  type SplitResultInner<S extends string> = S extends `${infer L}, ${infer R}`
38
141
  ? [Trim<L>, Trim<R>]
@@ -80,7 +183,7 @@ type MapGenericType<T extends string, Opts extends ParseOptions> =
80
183
  : never
81
184
  : never
82
185
  : // scalar or record-mapped
83
- AsTupleFromRecord<T, Opts>;
186
+ AsUserDefinedType<T, Opts>;
84
187
 
85
188
  export type ParseWitParameter<
86
189
  signature extends string,
@@ -157,7 +260,11 @@ type Pop<type extends readonly number[]> = type extends [...infer head, any]
157
260
 
158
261
  export type ParseSignature<
159
262
  signature extends string,
160
- records extends RecordLookup | unknown = unknown,
263
+ types extends {
264
+ records?: RecordLookup | unknown;
265
+ variants?: VariantLookup | unknown;
266
+ enums?: EnumLookup | unknown;
267
+ } = {},
161
268
  > =
162
269
  IsFunctionSignature<signature> extends true
163
270
  ? signature extends FunctionSignature<infer name, infer tail>
@@ -169,14 +276,36 @@ export type ParseSignature<
169
276
  SplitParameters<
170
277
  _ParseFunctionParametersAndContext<signature>["Inputs"]
171
278
  >,
172
- { records: records }
279
+ types
173
280
  >;
174
281
  readonly outputs: tail extends `${string} -> ${infer returns};`
175
- ? ParseWitParameters<
176
- SplitParameters<Trim<returns>>,
177
- { records: records }
178
- >
282
+ ? ParseWitParameters<SplitParameters<Trim<returns>>, types>
179
283
  : readonly [];
180
284
  }
181
285
  : never
182
286
  : never;
287
+ // export type ParseSignature<
288
+ // signature extends string,
289
+ // records extends RecordLookup | unknown = unknown,
290
+ // > =
291
+ // IsFunctionSignature<signature> extends true
292
+ // ? signature extends FunctionSignature<infer name, infer tail>
293
+ // ? {
294
+ // readonly name: name;
295
+ // readonly type: "function";
296
+ // readonly context: _ParseFunctionParametersAndContext<signature>["Context"];
297
+ // readonly inputs: ParseWitParameters<
298
+ // SplitParameters<
299
+ // _ParseFunctionParametersAndContext<signature>["Inputs"]
300
+ // >,
301
+ // { records: records }
302
+ // >;
303
+ // readonly outputs: tail extends `${string} -> ${infer returns};`
304
+ // ? ParseWitParameters<
305
+ // SplitParameters<Trim<returns>>,
306
+ // { records: records }
307
+ // >
308
+ // : readonly [];
309
+ // }
310
+ // : never
311
+ // : never;