@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,193 +0,0 @@
1
- // integer.ts
2
- // TODO: i may want to simplify this later
3
- //
4
- import * as z from "zod";
5
- import type { WaveExpr, CodecInstance, CodecConstructor } from "./types.js";
6
-
7
- const U64_MAX = (1n << 64n) - 1n;
8
- export const U64 = z
9
- .bigint()
10
- .min(0n, { message: "must be ≥ 0" })
11
- .max(U64_MAX, { message: "must be ≤ 2^64-1" });
12
-
13
- export function parseIntegerWaveExpr(expr: string): _Integer.T {
14
- const inner = expr
15
- .trim()
16
- .replace(/^\{\s*/, "")
17
- .replace(/\s*\}$/, "");
18
- if (!inner) throw new Error("empty integer expression");
19
-
20
- const parts = inner
21
- .split(",")
22
- .map((p) => p.trim())
23
- .filter(Boolean);
24
-
25
- const seen = new Set<string>();
26
- // Default middle limbs to 0 for ergonomics; require r0 + sign.
27
- let out: Partial<_Integer.T> & {
28
- r0?: bigint;
29
- r1?: bigint;
30
- r2?: bigint;
31
- r3?: bigint;
32
- } = {
33
- r1: 0n,
34
- r2: 0n,
35
- r3: 0n,
36
- };
37
-
38
- for (const part of parts) {
39
- const idx = part.indexOf(":");
40
- if (idx === -1) {
41
- throw new Error(`expected "key: value", got "${part}"`);
42
- }
43
- const keyRaw = part.slice(0, idx).trim();
44
- const valRaw = part.slice(idx + 1).trim();
45
-
46
- if (seen.has(keyRaw)) throw new Error(`duplicate key "${keyRaw}"`);
47
- seen.add(keyRaw);
48
-
49
- switch (keyRaw) {
50
- case "r0":
51
- case "r1":
52
- case "r2":
53
- case "r3": {
54
- const normalized = valRaw.replace(/_/g, "");
55
- if (!/^[+-]?\d+$/.test(normalized)) {
56
- throw new Error(`invalid integer for ${keyRaw}: "${valRaw}"`);
57
- }
58
- const limb = BigInt(normalized);
59
- if (limb < 0n || limb > U64_MAX) {
60
- throw new Error(`value for ${keyRaw} out of u64 range: ${valRaw}`);
61
- }
62
- (out as any)[keyRaw] = limb;
63
- break;
64
- }
65
- case "sign": {
66
- if (valRaw !== "plus" && valRaw !== "minus") {
67
- throw new Error(`invalid sign "${valRaw}" (expected plus|minus)`);
68
- }
69
- (out as any).sign = valRaw;
70
- break;
71
- }
72
- default:
73
- throw new Error(`unexpected key "${keyRaw}"`);
74
- }
75
- }
76
-
77
- if (out.r0 === undefined) throw new Error(`missing required key "r0"`);
78
- if (!out.sign) throw new Error(`missing required key "sign"`);
79
-
80
- return _Integer.schema.parse(out);
81
- }
82
-
83
- // function parseIntegerWaveExpr(expr: string): _IntegerRaw.T {
84
- // // strip { ... }
85
- // const inner = expr.trim().replace(/^\{|\}$/g, "");
86
- //
87
- // // split at commas at top level
88
- // // e.g. ["r0: 1337", "r1: 0", "r2: 0", "r3: 0", "sign: Plus"]
89
- // const parts = inner.split(",").map((p) => p.trim());
90
- //
91
- // const out: any = {};
92
- // for (const part of parts) {
93
- // const [keyRaw, valRaw] = part.split(":").map((s) => s.trim());
94
- //
95
- // if (
96
- // keyRaw === "r0" ||
97
- // keyRaw === "r1" ||
98
- // keyRaw === "r2" ||
99
- // keyRaw === "r3"
100
- // ) {
101
- // out[keyRaw] = Number(valRaw);
102
- // continue;
103
- // }
104
- //
105
- // if (keyRaw === "sign") {
106
- // if (valRaw !== "Plus" && valRaw !== "Minus") {
107
- // throw new Error(`invalid sign '${valRaw}' in ${expr}`);
108
- // }
109
- // out.sign = valRaw;
110
- // continue;
111
- // }
112
- //
113
- // throw new Error(`unexpected key '${keyRaw}' in ${expr}`);
114
- // }
115
- //
116
- // // validate with zod, return typed
117
- // return _IntegerRaw.schema.parse(out);
118
- // }
119
-
120
- export namespace _Integer {
121
- export namespace Sign {
122
- export const schema = z.enum(["plus", "minus"]);
123
- export type T = z.infer<typeof schema>;
124
- }
125
-
126
- export const schema = z.object({
127
- r0: U64,
128
- r1: U64,
129
- r2: U64,
130
- r3: U64,
131
- sign: Sign.schema,
132
- });
133
-
134
- export type T = z.infer<typeof schema>;
135
- }
136
-
137
- // --- IntegerCodec ------------------------------------------------
138
-
139
- // Instance class: represents one integer value in limb/sign form,
140
- // and can render toWave() / toJs().
141
- class _IntegerCodec implements CodecInstance<bigint> {
142
- public readonly data: _Integer.T;
143
-
144
- constructor(data: _Integer.T) {
145
- this.data = data;
146
- }
147
-
148
- static fromJs(value: bigint | number): _IntegerCodec {
149
- let v = BigInt(value);
150
-
151
- const sign: _Integer.Sign.T = v < 0n ? "minus" : "plus";
152
- if (v < 0n) v = -v;
153
-
154
- // break absolute value into four 32-bit limbs (little-endian style)
155
- const mask32 = (1n << 32n) - 1n;
156
- const r0 = v & mask32;
157
- const r1 = (v >> 32n) & mask32;
158
- const r2 = (v >> 64n) & mask32;
159
- const r3 = (v >> 96n) & mask32;
160
-
161
- return new _IntegerCodec({ r0, r1, r2, r3, sign });
162
- }
163
-
164
- static fromKontor(data: _Integer.T): _IntegerCodec {
165
- return new _IntegerCodec(data);
166
- }
167
-
168
- static parseWave(expr: string): _Integer.T {
169
- return _Integer.schema.parse(parseIntegerWaveExpr(expr));
170
- }
171
-
172
- // instance -> WaveExpr
173
- toWave(): WaveExpr {
174
- return `{r0: ${this.data.r0}, r1: ${this.data.r1}, r2: ${this.data.r2}, r3: ${this.data.r3}, sign: ${this.data.sign}}` as WaveExpr;
175
- }
176
-
177
- // instance -> JS bigint
178
- toJs(): bigint {
179
- const value =
180
- (BigInt(this.data.r3) << 96n) |
181
- (BigInt(this.data.r2) << 64n) |
182
- (BigInt(this.data.r1) << 32n) |
183
- BigInt(this.data.r0);
184
-
185
- return this.data.sign === "minus" ? -value : value;
186
- }
187
- }
188
-
189
- export const IntegerCodec = _IntegerCodec as unknown as CodecConstructor<
190
- bigint,
191
- _IntegerCodec,
192
- _Integer.T
193
- >;
@@ -1,76 +0,0 @@
1
- // s64.ts
2
- import * as z from "zod";
3
- import type { WaveExpr, CodecInstance, CodecConstructor } from "./types.js";
4
-
5
- // Signed 64-bit range
6
- const S64_MIN = -(1n << 63n);
7
- const S64_MAX = (1n << 63n) - 1n;
8
-
9
- export const S64 = z
10
- .bigint()
11
- .min(S64_MIN, { message: "must be ≥ -2^63" })
12
- .max(S64_MAX, { message: "must be ≤ 2^63-1" });
13
-
14
- /**
15
- * Parse a Wave expression for an s64.
16
- *
17
- * - Accepts optional underscores for readability: -1_000_000
18
- * - Allows optional leading "-"
19
- * - Enforces the s64 range via zod
20
- */
21
- export function parseS64WaveExpr(expr: string): bigint {
22
- const trimmed = expr.trim();
23
- if (!trimmed) throw new Error("empty s64 expression");
24
-
25
- // Allow underscores like "-1_000_000"
26
- const normalized = trimmed.replace(/_/g, "");
27
-
28
- if (!/^-?[0-9]+$/.test(normalized)) {
29
- throw new Error(`invalid s64 literal: "${expr}"`);
30
- }
31
-
32
- const value = BigInt(normalized);
33
- return S64.parse(value); // range-check via zod
34
- }
35
-
36
- // --- S64Codec ---------------------------------------------------
37
-
38
- class _S64Codec implements CodecInstance<bigint> {
39
- public readonly value: bigint;
40
-
41
- constructor(value: bigint) {
42
- this.value = S64.parse(value);
43
- }
44
-
45
- static fromJs(value: bigint | number | string): _S64Codec {
46
- let v: bigint;
47
- if (typeof value === "bigint") v = value;
48
- else if (typeof value === "number") v = BigInt(value);
49
- else v = BigInt(value); // e.g. JSON string "-12345"
50
-
51
- return new _S64Codec(v);
52
- }
53
-
54
- static fromKontor(data: string | bigint | number): _S64Codec {
55
- return _S64Codec.fromJs(data);
56
- }
57
-
58
- static parseWave(expr: string): bigint {
59
- return parseS64WaveExpr(expr);
60
- }
61
-
62
- toWave(): WaveExpr {
63
- // Wave syntax for s64: plain decimal, optional leading "-"
64
- return `${this.value}` as WaveExpr;
65
- }
66
-
67
- toJs(): bigint {
68
- return this.value;
69
- }
70
- }
71
-
72
- export const S64Codec = _S64Codec as unknown as CodecConstructor<
73
- bigint,
74
- _S64Codec,
75
- bigint
76
- >;
@@ -1,73 +0,0 @@
1
- // u64.ts
2
- import * as z from "zod";
3
- import type { WaveExpr, CodecInstance, CodecConstructor } from "./types.js";
4
-
5
- // You already have this in integer.ts; you can import it from there instead
6
- const U64_MAX = (1n << 64n) - 1n;
7
- export const U64 = z
8
- .bigint()
9
- .min(0n, { message: "must be ≥ 0" })
10
- .max(U64_MAX, { message: "must be ≤ 2^64-1" });
11
-
12
- /**
13
- * Parse a Wave expression for a u64.
14
- *
15
- * - Accepts optional underscores for readability: 1_000_000
16
- * - Must be a non-negative integer
17
- * - Enforces the u64 range via zod
18
- */
19
- export function parseU64WaveExpr(expr: string): bigint {
20
- const trimmed = expr.trim();
21
- if (!trimmed) throw new Error("empty u64 expression");
22
-
23
- // Allow underscores like "1_000_000"
24
- const normalized = trimmed.replace(/_/g, "");
25
-
26
- if (!/^[0-9]+$/.test(normalized)) {
27
- throw new Error(`invalid u64 literal: "${expr}"`);
28
- }
29
-
30
- const value = BigInt(normalized);
31
- return U64.parse(value); // range-check via zod
32
- }
33
-
34
- // --- U64Codec ---------------------------------------------------
35
-
36
- class _U64Codec implements CodecInstance<bigint> {
37
- public readonly value: bigint;
38
-
39
- constructor(value: bigint) {
40
- this.value = U64.parse(value);
41
- }
42
-
43
- static fromJs(value: bigint | number | string): _U64Codec {
44
- let v: bigint;
45
- if (typeof value === "bigint") v = value;
46
- else if (typeof value === "number") v = BigInt(value);
47
- else v = BigInt(value); // e.g. JSON string "12345"
48
-
49
- return new _U64Codec(v);
50
- }
51
-
52
- static fromKontor(data: string | bigint | number): _U64Codec {
53
- return _U64Codec.fromJs(data);
54
- }
55
-
56
- static parseWave(expr: string): bigint {
57
- return parseU64WaveExpr(expr);
58
- }
59
-
60
- toWave(): WaveExpr {
61
- return `${this.value}` as WaveExpr;
62
- }
63
-
64
- toJs(): bigint {
65
- return this.value;
66
- }
67
- }
68
-
69
- export const U64Codec = _U64Codec as unknown as CodecConstructor<
70
- bigint,
71
- _U64Codec,
72
- bigint
73
- >;
@@ -1,69 +0,0 @@
1
- import { expect, test } from "vitest";
2
- import { parseRecords } from "./records.js";
3
-
4
- test("parse records", () => {
5
- expect(
6
- parseRecords([
7
- "record contract-address { name: string, height: s64, tx-index: s64 }",
8
- "record token-pair { a: contract-address, b: contract-address }",
9
- ]),
10
- ).toEqual({
11
- "contract-address": [
12
- { name: "name", type: "string", internalType: "string" },
13
- { name: "height", type: "s64", internalType: "s64" },
14
- { name: "tx-index", type: "s64", internalType: "s64" },
15
- ],
16
- "token-pair": [
17
- {
18
- type: "tuple",
19
- name: "a",
20
- internalType: "contract-address",
21
- components: [
22
- { name: "name", type: "string", internalType: "string" },
23
- { name: "height", type: "s64", internalType: "s64" },
24
- { name: "tx-index", type: "s64", internalType: "s64" },
25
- ],
26
- },
27
- {
28
- type: "tuple",
29
- name: "b",
30
- internalType: "contract-address",
31
- components: [
32
- { name: "name", type: "string", internalType: "string" },
33
- { name: "height", type: "s64", internalType: "s64" },
34
- { name: "tx-index", type: "s64", internalType: "s64" },
35
- ],
36
- },
37
- ],
38
- });
39
- });
40
-
41
- test("generic", () => {
42
- expect(parseRecords(["record generic { values: list<string> }"])).toEqual({
43
- generic: [
44
- { name: "values", type: "list<string>", internalType: "list<string>" },
45
- ],
46
- });
47
- });
48
-
49
- test("generic", () => {
50
- expect(
51
- parseRecords([
52
- "record contract-address { name: string, height: s64, tx-index: s64 }",
53
- "record generic { values: list<contract-address> }",
54
- ]),
55
- ).toEqual({
56
- "contract-address": [
57
- { name: "name", type: "string", internalType: "string" },
58
- { name: "height", type: "s64", internalType: "s64" },
59
- { name: "tx-index", type: "s64", internalType: "s64" },
60
- ],
61
- generic: [
62
- {
63
- name: "values",
64
- type: "list<contract-address>",
65
- internalType: "list<contract-address>",
66
- },
67
- ],
68
- });
69
- });
@@ -1,101 +0,0 @@
1
- import type { WitParameter } from "../../wit.js";
2
- import { execTyped, isGenericRegex } from "../../regex.js";
3
- import {
4
- InvalidRecordSignatureError,
5
- InvalidSignatureError,
6
- } from "./errors/signature.js";
7
- import { execRecordSignature, isRecordSignature } from "./signatures.js";
8
- import type { RecordLookup } from "./types/records.js";
9
- import { parseWitParameter } from "./utils.js";
10
-
11
- export function parseRecords(signatures: readonly string[]) {
12
- const shallowRecords: RecordLookup = {};
13
- const signaturesLength = signatures.length;
14
-
15
- for (let i = 0; i < signaturesLength; i++) {
16
- const signature = signatures[i]!;
17
- if (!isRecordSignature(signature)) continue;
18
-
19
- const match = execRecordSignature(signature);
20
- if (!match) throw new InvalidSignatureError({ signature, type: "record" });
21
-
22
- const properties = match.properties.split(",");
23
-
24
- const components: WitParameter[] = [];
25
-
26
- const propertiesLength = properties.length;
27
- for (let k = 0; k < propertiesLength; k++) {
28
- const property = properties[k]!;
29
- const trimmed = property.trim();
30
- if (!trimmed) continue;
31
- const witParameter = parseWitParameter(trimmed, {
32
- type: "record",
33
- });
34
- components.push(witParameter);
35
- }
36
-
37
- if (!components.length)
38
- throw new InvalidRecordSignatureError({ signature });
39
- shallowRecords[match.name] = components;
40
- }
41
-
42
- const resolvedRecords: RecordLookup = {};
43
- const entries = Object.entries(shallowRecords);
44
- const entriesLength = entries.length;
45
- for (let i = 0; i < entriesLength; i++) {
46
- const [name, parameters] = entries[i]!;
47
- resolvedRecords[name] = resolveRecords(parameters, shallowRecords);
48
- }
49
-
50
- return resolvedRecords;
51
- }
52
-
53
- // TODO: move?
54
- // e.g. "list<u8>", "option<signer>", "result<integer, error>", "borrow<proc-context>"
55
-
56
- export function isGeneric(type: string): boolean {
57
- return isGenericRegex.test(type.trim());
58
- }
59
-
60
- // e.g. "string", "list<u8>", "option<signer>", "result<integer, error>", "borrow<proc-context>"
61
- const witTypeRegex =
62
- /^(?:(?<wrapper>borrow|own)\s*<\s*)?(?<base>[a-zA-Z$_][a-zA-Z0-9$_-]*)(?:\s*<(?<inner>[\s\S]+)>)?\s*(?:>)?$/;
63
-
64
- function resolveRecords(
65
- witParameters: readonly (WitParameter & { indexed?: true })[],
66
- records: RecordLookup,
67
- ancestors = new Set<string>(),
68
- ) {
69
- const components: WitParameter[] = [];
70
- for (const witParameter of witParameters) {
71
- const m = execTyped<{
72
- wrapper?: string;
73
- base?: string;
74
- inner?: string;
75
- }>(witTypeRegex, witParameter.type);
76
-
77
- // TODO: add custom error
78
- if (!m?.base) throw new Error(`Invalid WIT type: ${witParameter.type}`);
79
-
80
- const base = m.base;
81
- // If it's a named record, expand it into a tuple of its fields.
82
- if (base in records) {
83
- // TODO: add custom error
84
- if (ancestors.has(base)) throw new Error("Circular reference detected.");
85
- components.push({
86
- ...witParameter,
87
- type: "tuple", // normalize records -> tuple
88
- components: resolveRecords(
89
- records[base] ?? [],
90
- records,
91
- new Set([...ancestors, base]),
92
- ),
93
- });
94
- continue;
95
- }
96
-
97
- // Otherwise, just pass it through (builtins, generics, etc.)
98
- components.push(witParameter);
99
- }
100
- return components;
101
- }