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