@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
|
@@ -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
|
|
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<
|
|
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
|
|
27
|
-
|
|
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: "
|
|
31
|
-
components: RecordsOf<Opts>[T];
|
|
80
|
+
type: "record";
|
|
32
81
|
internalType: T;
|
|
82
|
+
components: RecordsOf<Opts>[T];
|
|
33
83
|
}>
|
|
34
|
-
:
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|