viem 0.0.0-w-20230818210302 → 0.0.0-w-20230820223631
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/dist/cjs/actions/getContract.js.map +1 -1
- package/dist/cjs/actions/public/multicall.js.map +1 -1
- package/dist/cjs/actions/public/readContract.js.map +1 -1
- package/dist/cjs/clients/decorators/public.js.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/actions/getContract.js.map +1 -1
- package/dist/esm/actions/public/multicall.js.map +1 -1
- package/dist/esm/actions/public/readContract.js.map +1 -1
- package/dist/esm/clients/decorators/public.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/types/actions/getContract.d.ts +9 -9
- package/dist/types/actions/getContract.d.ts.map +1 -1
- package/dist/types/actions/public/multicall.d.ts +4 -3
- package/dist/types/actions/public/multicall.d.ts.map +1 -1
- package/dist/types/actions/public/readContract.d.ts +4 -4
- package/dist/types/actions/public/readContract.d.ts.map +1 -1
- package/dist/types/clients/decorators/public.d.ts +2 -2
- package/dist/types/clients/decorators/public.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types/contract.d.ts +15 -8
- package/dist/types/types/contract.d.ts.map +1 -1
- package/dist/types/types/multicall.d.ts +18 -35
- package/dist/types/types/multicall.d.ts.map +1 -1
- package/dist/types/types/utils.d.ts +1 -1
- package/dist/types/types/utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/actions/getContract.ts +185 -177
- package/src/actions/public/multicall.ts +4 -5
- package/src/actions/public/readContract.ts +29 -11
- package/src/clients/decorators/public.ts +7 -4
- package/src/index.ts +4 -1
- package/src/types/contract.ts +80 -27
- package/src/types/multicall.ts +67 -121
- package/src/types/utils.ts +1 -1
package/src/types/contract.ts
CHANGED
@@ -30,22 +30,37 @@ import type {
|
|
30
30
|
UnionToTuple,
|
31
31
|
} from './utils.js'
|
32
32
|
|
33
|
-
export type
|
34
|
-
abi extends Abi = Abi,
|
33
|
+
export type ContractFunctionName<
|
34
|
+
abi extends Abi | readonly unknown[] = Abi,
|
35
35
|
mutability extends AbiStateMutability = AbiStateMutability,
|
36
|
-
> = ExtractAbiFunctionNames<
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
> = ExtractAbiFunctionNames<
|
37
|
+
abi extends Abi ? abi : Abi,
|
38
|
+
mutability
|
39
|
+
> extends infer functionName extends string
|
40
|
+
? [functionName] extends [never]
|
41
|
+
? string
|
42
|
+
: functionName
|
43
|
+
: string
|
44
|
+
|
45
|
+
export type ContractFunctionArgs<
|
46
|
+
abi extends Abi | readonly unknown[] = Abi,
|
40
47
|
mutability extends AbiStateMutability = AbiStateMutability,
|
41
|
-
functionName extends
|
48
|
+
functionName extends ContractFunctionName<
|
42
49
|
abi,
|
43
50
|
mutability
|
44
|
-
> =
|
51
|
+
> = ContractFunctionName<abi, mutability>,
|
45
52
|
> = AbiParametersToPrimitiveTypes<
|
46
|
-
ExtractAbiFunction<
|
53
|
+
ExtractAbiFunction<
|
54
|
+
abi extends Abi ? abi : Abi,
|
55
|
+
functionName,
|
56
|
+
mutability
|
57
|
+
>['inputs'],
|
47
58
|
'inputs'
|
48
|
-
>
|
59
|
+
> extends infer args
|
60
|
+
? [args] extends [never]
|
61
|
+
? readonly unknown[]
|
62
|
+
: args
|
63
|
+
: readonly unknown[]
|
49
64
|
|
50
65
|
export type Widen<type> =
|
51
66
|
| ([unknown] extends [type] ? unknown : never)
|
@@ -75,8 +90,8 @@ export type Widen<type> =
|
|
75
90
|
export type ExtractAbiFunctionForArgs<
|
76
91
|
abi extends Abi,
|
77
92
|
mutability extends AbiStateMutability,
|
78
|
-
functionName extends
|
79
|
-
args extends
|
93
|
+
functionName extends ContractFunctionName<abi, mutability>,
|
94
|
+
args extends ContractFunctionArgs<abi, mutability, functionName>,
|
80
95
|
> = ExtractAbiFunction<
|
81
96
|
abi,
|
82
97
|
functionName,
|
@@ -96,14 +111,59 @@ export type ExtractAbiFunctionForArgs<
|
|
96
111
|
: abiFunction
|
97
112
|
: never
|
98
113
|
|
114
|
+
export type ContractFunctionParameters<
|
115
|
+
abi extends Abi | readonly unknown[] = Abi,
|
116
|
+
mutability extends AbiStateMutability = AbiStateMutability,
|
117
|
+
functionName extends ContractFunctionName<
|
118
|
+
abi,
|
119
|
+
mutability
|
120
|
+
> = ContractFunctionName<abi, mutability>,
|
121
|
+
args extends ContractFunctionArgs<
|
122
|
+
abi,
|
123
|
+
mutability,
|
124
|
+
functionName
|
125
|
+
> = ContractFunctionArgs<abi, mutability, functionName>,
|
126
|
+
///
|
127
|
+
allArgs = ContractFunctionArgs<abi, mutability, functionName>,
|
128
|
+
allFunctionNames = ContractFunctionName<abi, mutability>,
|
129
|
+
// when `args` is inferred to `readonly []` ("inputs": []) or `never` (`abi` declared as `Abi` or not inferrable), allow `args` to be optional.
|
130
|
+
// important that both branches return same structural type
|
131
|
+
> = readonly [] extends allArgs
|
132
|
+
? {
|
133
|
+
address: Address
|
134
|
+
abi: abi
|
135
|
+
functionName:
|
136
|
+
| allFunctionNames // show all options
|
137
|
+
| (functionName extends allFunctionNames ? functionName : never) // infer value
|
138
|
+
args?:
|
139
|
+
| allArgs // show all options
|
140
|
+
| (args extends allArgs ? Widen<args> : never) // infer value, widen inferred value of `args` conditionally to match `allArgs`
|
141
|
+
| undefined
|
142
|
+
}
|
143
|
+
: {
|
144
|
+
address: Address
|
145
|
+
abi: abi
|
146
|
+
functionName:
|
147
|
+
| allFunctionNames // show all options
|
148
|
+
| (functionName extends allFunctionNames ? functionName : never) // infer value
|
149
|
+
args:
|
150
|
+
| allArgs // show all options
|
151
|
+
| Widen<args> // infer value, widen inferred value of `args` match `allArgs` (e.g. avoid union `args: readonly [123n] | readonly [bigint]`)
|
152
|
+
}
|
153
|
+
|
99
154
|
export type ContractFunctionReturnType<
|
100
|
-
|
101
|
-
mutability extends AbiStateMutability,
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
155
|
+
abi extends Abi | readonly unknown[] = Abi,
|
156
|
+
mutability extends AbiStateMutability = AbiStateMutability,
|
157
|
+
functionName extends ContractFunctionName<
|
158
|
+
abi,
|
159
|
+
mutability
|
160
|
+
> = ContractFunctionName<abi, mutability>,
|
161
|
+
args extends ContractFunctionArgs<
|
162
|
+
abi,
|
163
|
+
mutability,
|
164
|
+
functionName
|
165
|
+
> = ContractFunctionArgs<abi, mutability, functionName>,
|
166
|
+
> = abi extends Abi
|
107
167
|
? Abi extends abi
|
108
168
|
? unknown
|
109
169
|
: AbiParametersToPrimitiveTypes<
|
@@ -111,14 +171,7 @@ export type ContractFunctionReturnType<
|
|
111
171
|
abi,
|
112
172
|
mutability,
|
113
173
|
functionName,
|
114
|
-
|
115
|
-
(
|
116
|
-
readonly [] extends args
|
117
|
-
? readonly []
|
118
|
-
: args
|
119
|
-
) extends infer args2 extends Args<abi, mutability, functionName>
|
120
|
-
? args2
|
121
|
-
: never
|
174
|
+
readonly [] extends args ? readonly [] : args
|
122
175
|
>['outputs']
|
123
176
|
> extends infer types
|
124
177
|
? types extends readonly []
|
package/src/types/multicall.ts
CHANGED
@@ -1,48 +1,13 @@
|
|
1
|
-
import type { Abi, AbiStateMutability
|
1
|
+
import type { Abi, AbiStateMutability } from 'abitype'
|
2
2
|
|
3
3
|
import type {
|
4
|
-
|
4
|
+
ContractFunctionArgs,
|
5
|
+
ContractFunctionName,
|
6
|
+
ContractFunctionParameters,
|
5
7
|
ContractFunctionReturnType,
|
6
|
-
FunctionName,
|
7
|
-
Widen,
|
8
8
|
} from './contract.js'
|
9
9
|
import type { MaybePartial } from './utils.js'
|
10
10
|
|
11
|
-
export type MulticallContract<
|
12
|
-
abi extends Abi | readonly unknown[] = Abi,
|
13
|
-
mutability extends AbiStateMutability = AbiStateMutability,
|
14
|
-
functionName extends FunctionName<
|
15
|
-
abi extends Abi ? abi : Abi,
|
16
|
-
mutability
|
17
|
-
> = string,
|
18
|
-
args extends Args<
|
19
|
-
abi extends Abi ? abi : Abi,
|
20
|
-
mutability,
|
21
|
-
functionName
|
22
|
-
> = Args<abi extends Abi ? abi : Abi, mutability, functionName>,
|
23
|
-
> = readonly [] extends args
|
24
|
-
? {
|
25
|
-
address: Address
|
26
|
-
abi: abi
|
27
|
-
functionName:
|
28
|
-
| functionName
|
29
|
-
| FunctionName<abi extends Abi ? abi : Abi, mutability>
|
30
|
-
args?:
|
31
|
-
| Widen<args>
|
32
|
-
| Args<abi extends Abi ? abi : Abi, mutability, functionName>
|
33
|
-
| undefined
|
34
|
-
}
|
35
|
-
: {
|
36
|
-
address: Address
|
37
|
-
abi: abi
|
38
|
-
functionName:
|
39
|
-
| functionName
|
40
|
-
| FunctionName<abi extends Abi ? abi : Abi, mutability>
|
41
|
-
args:
|
42
|
-
| Widen<args>
|
43
|
-
| Args<abi extends Abi ? abi : Abi, mutability, functionName>
|
44
|
-
}
|
45
|
-
|
46
11
|
export type MulticallContracts<
|
47
12
|
contracts extends readonly unknown[],
|
48
13
|
options extends {
|
@@ -52,71 +17,58 @@ export type MulticallContracts<
|
|
52
17
|
} = { mutability: AbiStateMutability },
|
53
18
|
///
|
54
19
|
result extends readonly any[] = [],
|
55
|
-
> = contracts extends readonly []
|
20
|
+
> = contracts extends readonly [] // no contracts, return empty
|
56
21
|
? readonly []
|
57
|
-
: contracts extends readonly [infer contract] //
|
22
|
+
: contracts extends readonly [infer contract] // one contract left before returning `result`
|
58
23
|
? readonly [
|
59
24
|
...result,
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
} & options['properties'],
|
66
|
-
options['optional']
|
67
|
-
>
|
68
|
-
: // We know `contract` is inferrable, let's get to it!
|
69
|
-
MaybePartial<
|
70
|
-
GetMulticallContract<contract, options['mutability']> &
|
71
|
-
options['properties'],
|
72
|
-
options['optional']
|
73
|
-
>,
|
25
|
+
MaybePartial<
|
26
|
+
GetMulticallContractParameters<contract, options['mutability']> &
|
27
|
+
options['properties'],
|
28
|
+
options['optional']
|
29
|
+
>,
|
74
30
|
]
|
75
|
-
: contracts extends readonly [infer contract, ...infer rest] //
|
31
|
+
: contracts extends readonly [infer contract, ...infer rest] // grab first contract and recurse through `rest`
|
76
32
|
? MulticallContracts<
|
77
33
|
[...rest],
|
78
34
|
options,
|
79
35
|
[
|
80
36
|
...result,
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
} & options['properties'],
|
87
|
-
options['optional']
|
88
|
-
>
|
89
|
-
: // We know `contract` is inferrable, let's get to it!
|
90
|
-
MaybePartial<
|
91
|
-
GetMulticallContract<contract, options['mutability']> &
|
92
|
-
options['properties'],
|
93
|
-
options['optional']
|
94
|
-
>,
|
37
|
+
MaybePartial<
|
38
|
+
GetMulticallContractParameters<contract, options['mutability']> &
|
39
|
+
options['properties'],
|
40
|
+
options['optional']
|
41
|
+
>,
|
95
42
|
]
|
96
43
|
>
|
97
44
|
: readonly unknown[] extends contracts
|
98
45
|
? contracts
|
99
46
|
: // If `contracts` is *some* array but we couldn't assign `unknown[]` to it, then it must hold some known/homogenous type!
|
100
47
|
// use this to infer the param types in the case of Array.map() argument
|
101
|
-
contracts extends readonly
|
48
|
+
contracts extends readonly ContractFunctionParameters<
|
102
49
|
infer abi,
|
103
50
|
infer _,
|
104
51
|
infer functionName,
|
105
52
|
infer args
|
106
53
|
>[]
|
107
54
|
? readonly MaybePartial<
|
108
|
-
|
55
|
+
ContractFunctionParameters<
|
56
|
+
abi,
|
57
|
+
options['mutability'],
|
58
|
+
functionName,
|
59
|
+
args
|
60
|
+
> &
|
109
61
|
options['properties'],
|
110
62
|
options['optional']
|
111
63
|
>[]
|
112
64
|
: // Fallback
|
113
65
|
readonly MaybePartial<
|
114
|
-
|
66
|
+
ContractFunctionParameters & options['properties'],
|
115
67
|
options['optional']
|
116
68
|
>[]
|
117
69
|
|
118
70
|
export type MulticallResults<
|
119
|
-
contracts extends readonly unknown[] = readonly
|
71
|
+
contracts extends readonly unknown[] = readonly ContractFunctionParameters[],
|
120
72
|
allowFailure extends boolean = true,
|
121
73
|
options extends {
|
122
74
|
error?: Error
|
@@ -124,14 +76,7 @@ export type MulticallResults<
|
|
124
76
|
} = { error: Error; mutability: AbiStateMutability },
|
125
77
|
> = {
|
126
78
|
[index in keyof contracts]: MulticallResponse<
|
127
|
-
|
128
|
-
contracts[index],
|
129
|
-
options['mutability']
|
130
|
-
> extends infer result
|
131
|
-
? [result] extends [never]
|
132
|
-
? unknown
|
133
|
-
: result
|
134
|
-
: unknown,
|
79
|
+
GetMulticallContractReturnType<contracts[index], options['mutability']>,
|
135
80
|
options['error'],
|
136
81
|
allowFailure
|
137
82
|
>
|
@@ -151,54 +96,55 @@ export type MulticallResponse<
|
|
151
96
|
}
|
152
97
|
: result
|
153
98
|
|
154
|
-
|
99
|
+
// infer contract parameters from `unknown`
|
100
|
+
type GetMulticallContractParameters<
|
155
101
|
contract,
|
156
102
|
mutability extends AbiStateMutability,
|
157
|
-
> = contract extends { abi: infer abi extends Abi } // 1. Check if `abi` is const-asserted
|
103
|
+
> = contract extends { abi: infer abi extends Abi } // 1. Check if `abi` is const-asserted or defined inline
|
158
104
|
? // 1a. Check if `functionName` is valid for `abi`
|
159
105
|
contract extends {
|
160
|
-
functionName: infer functionName extends
|
106
|
+
functionName: infer functionName extends ContractFunctionName<
|
107
|
+
abi,
|
108
|
+
mutability
|
109
|
+
>
|
161
110
|
}
|
162
111
|
? // 1aa. Check if `args` is valid for `abi` and `functionName`
|
163
112
|
contract extends {
|
164
|
-
args: infer args extends
|
113
|
+
args: infer args extends ContractFunctionArgs<
|
114
|
+
abi,
|
115
|
+
mutability,
|
116
|
+
functionName
|
117
|
+
>
|
165
118
|
}
|
166
|
-
?
|
167
|
-
|
168
|
-
? // `args` can be empty, mark `args` as `undefined`
|
169
|
-
MulticallContract<abi, mutability, functionName, readonly []>
|
170
|
-
: // `contract` is valid as-is, return it
|
171
|
-
MulticallContract<abi, mutability, functionName, args>
|
172
|
-
: // 1ab. `args` is invalid, infer types for `args`
|
173
|
-
readonly [] extends Args<abi, mutability, functionName>
|
174
|
-
? // `args` can be empty, mark `args` as `undefined`
|
175
|
-
MulticallContract<abi, mutability, functionName, readonly []>
|
176
|
-
: // infer `args`
|
177
|
-
MulticallContract<abi, mutability, functionName>
|
119
|
+
? ContractFunctionParameters<abi, mutability, functionName, args> // `args` valid, pass through
|
120
|
+
: ContractFunctionParameters<abi, mutability, functionName> // invalid `args`
|
178
121
|
: // 1b. `functionName` is invalid, check if `abi` is declared as `Abi`
|
179
122
|
Abi extends abi
|
180
|
-
? // `abi` declared as `Abi`, unable to infer types further
|
181
|
-
MulticallContract
|
123
|
+
? ContractFunctionParameters // `abi` declared as `Abi`, unable to infer types further
|
182
124
|
: // `abi` is const-asserted or defined inline, infer types for `functionName` and `args`
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
125
|
+
ContractFunctionParameters<abi, mutability>
|
126
|
+
: ContractFunctionParameters<readonly unknown[]> // invalid `contract['abi']`, set to `readonly unknown[]`
|
127
|
+
|
128
|
+
type GetMulticallContractReturnType<
|
129
|
+
contract,
|
130
|
+
mutability extends AbiStateMutability,
|
131
|
+
> = contract extends { abi: infer abi extends Abi } // 1. Check if `abi` is const-asserted or defined inline
|
132
|
+
? // Check if `functionName` is valid for `abi`
|
133
|
+
contract extends {
|
134
|
+
functionName: infer functionName extends ContractFunctionName<
|
135
|
+
abi,
|
136
|
+
mutability
|
137
|
+
>
|
138
|
+
}
|
139
|
+
? // Check if `args` is valid for `abi` and `functionName`
|
140
|
+
contract extends {
|
141
|
+
args: infer args extends ContractFunctionArgs<
|
142
|
+
abi,
|
143
|
+
mutability,
|
144
|
+
functionName
|
145
|
+
>
|
201
146
|
}
|
202
|
-
|
203
|
-
|
204
|
-
|
147
|
+
? ContractFunctionReturnType<abi, mutability, functionName, args> // `args` valid, pass through
|
148
|
+
: ContractFunctionReturnType<abi, mutability, functionName> // invalid `args`
|
149
|
+
: ContractFunctionReturnType<abi, mutability> // Invalid `functionName`
|
150
|
+
: ContractFunctionReturnType // invalid `contract['abi']` (not const-asserted or declared as `Abi`)
|
package/src/types/utils.ts
CHANGED
@@ -183,7 +183,7 @@ export type IsUnion<
|
|
183
183
|
export type MaybePartial<
|
184
184
|
type,
|
185
185
|
enabled extends boolean | undefined,
|
186
|
-
> = enabled extends true ? ExactPartial<type
|
186
|
+
> = enabled extends true ? Prettify<ExactPartial<type>> : type
|
187
187
|
|
188
188
|
export type ExactPartial<type> = {
|
189
189
|
[key in keyof type]?: type[key] | undefined
|