viem 0.0.0-w-20230818230619 → 0.0.0-w-20230821160922
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/estimateContractGas.js +7 -14
- package/dist/cjs/actions/public/estimateContractGas.js.map +1 -1
- package/dist/cjs/actions/public/multicall.js.map +1 -1
- package/dist/cjs/actions/public/readContract.js +6 -10
- package/dist/cjs/actions/public/readContract.js.map +1 -1
- package/dist/cjs/actions/public/simulateContract.js +6 -9
- package/dist/cjs/actions/public/simulateContract.js.map +1 -1
- package/dist/cjs/actions/wallet/writeContract.js +1 -5
- package/dist/cjs/actions/wallet/writeContract.js.map +1 -1
- package/dist/cjs/clients/decorators/public.js.map +1 -1
- package/dist/cjs/clients/decorators/wallet.js.map +1 -1
- package/dist/esm/actions/getContract.js.map +1 -1
- package/dist/esm/actions/public/estimateContractGas.js +8 -15
- package/dist/esm/actions/public/estimateContractGas.js.map +1 -1
- package/dist/esm/actions/public/multicall.js.map +1 -1
- package/dist/esm/actions/public/readContract.js +8 -12
- package/dist/esm/actions/public/readContract.js.map +1 -1
- package/dist/esm/actions/public/simulateContract.js +8 -11
- package/dist/esm/actions/public/simulateContract.js.map +1 -1
- package/dist/esm/actions/wallet/writeContract.js +2 -6
- package/dist/esm/actions/wallet/writeContract.js.map +1 -1
- package/dist/esm/clients/decorators/public.js.map +1 -1
- package/dist/esm/clients/decorators/wallet.js +1 -0
- package/dist/esm/clients/decorators/wallet.js.map +1 -1
- package/dist/esm/types/contract.js +1 -1
- package/dist/esm/types/contract.js.map +1 -1
- package/dist/types/actions/getContract.d.ts +13 -13
- package/dist/types/actions/getContract.d.ts.map +1 -1
- package/dist/types/actions/public/estimateContractGas.d.ts +3 -3
- package/dist/types/actions/public/estimateContractGas.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/actions/public/simulateContract.d.ts +11 -11
- package/dist/types/actions/public/simulateContract.d.ts.map +1 -1
- package/dist/types/actions/wallet/writeContract.d.ts +3 -3
- package/dist/types/actions/wallet/writeContract.d.ts.map +1 -1
- package/dist/types/clients/decorators/public.d.ts +4 -4
- package/dist/types/clients/decorators/public.d.ts.map +1 -1
- package/dist/types/clients/decorators/wallet.d.ts +2 -1
- package/dist/types/clients/decorators/wallet.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 -28
- 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 +4 -0
- package/dist/types/types/utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/actions/getContract.ts +251 -191
- package/src/actions/public/estimateContractGas.ts +48 -38
- package/src/actions/public/multicall.ts +4 -5
- package/src/actions/public/readContract.ts +39 -33
- package/src/actions/public/simulateContract.ts +91 -59
- package/src/actions/wallet/writeContract.ts +28 -15
- package/src/clients/decorators/public.ts +32 -12
- package/src/clients/decorators/wallet.ts +10 -4
- package/src/index.ts +4 -4
- package/src/types/contract.ts +98 -117
- package/src/types/multicall.ts +67 -121
- package/src/types/utils.ts +9 -0
@@ -61,6 +61,10 @@ import {
|
|
61
61
|
writeContract,
|
62
62
|
} from '../../actions/wallet/writeContract.js'
|
63
63
|
import type { Chain } from '../../types/chain.js'
|
64
|
+
import {
|
65
|
+
type ContractFunctionArgs,
|
66
|
+
type ContractFunctionName,
|
67
|
+
} from '../../types/contract.js'
|
64
68
|
import type { Client } from '../createClient.js'
|
65
69
|
import type { Transport } from '../transports/createTransport.js'
|
66
70
|
|
@@ -509,13 +513,15 @@ export type WalletActions<
|
|
509
513
|
* const hash = await client.writeContract(request)
|
510
514
|
*/
|
511
515
|
writeContract: <
|
512
|
-
const
|
513
|
-
|
516
|
+
const abi extends Abi | readonly unknown[],
|
517
|
+
functionName extends ContractFunctionName<abi, 'payable' | 'nonpayable'>,
|
518
|
+
args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,
|
514
519
|
TChainOverride extends Chain | undefined,
|
515
520
|
>(
|
516
521
|
args: WriteContractParameters<
|
517
|
-
|
518
|
-
|
522
|
+
abi,
|
523
|
+
functionName,
|
524
|
+
args,
|
519
525
|
TChain,
|
520
526
|
TAccount,
|
521
527
|
TChainOverride
|
package/src/index.ts
CHANGED
@@ -515,9 +515,10 @@ export { SizeExceedsPaddingSizeError } from './errors/data.js'
|
|
515
515
|
export { UrlRequiredError } from './errors/transport.js'
|
516
516
|
export type {
|
517
517
|
AbiItem,
|
518
|
-
|
519
|
-
|
520
|
-
|
518
|
+
ContractFunctionParameters,
|
519
|
+
ContractFunctionReturnType,
|
520
|
+
ContractFunctionName,
|
521
|
+
ContractFunctionArgs,
|
521
522
|
ContractFunctionResult,
|
522
523
|
GetConstructorArgs,
|
523
524
|
GetErrorArgs,
|
@@ -636,7 +637,6 @@ export type { GetTransportConfig } from './types/transport.js'
|
|
636
637
|
export type { HDKey } from '@scure/bip32'
|
637
638
|
export type { Log } from './types/log.js'
|
638
639
|
export type {
|
639
|
-
MulticallContract,
|
640
640
|
MulticallContracts,
|
641
641
|
MulticallResponse,
|
642
642
|
MulticallResults,
|
package/src/types/contract.ts
CHANGED
@@ -1,21 +1,21 @@
|
|
1
|
-
import
|
2
|
-
Abi,
|
3
|
-
AbiConstructor,
|
4
|
-
AbiError,
|
5
|
-
AbiEvent,
|
6
|
-
AbiFunction,
|
7
|
-
AbiParameter,
|
8
|
-
AbiParameterToPrimitiveType,
|
9
|
-
AbiParametersToPrimitiveTypes,
|
10
|
-
AbiStateMutability,
|
11
|
-
Address,
|
12
|
-
ExtractAbiError,
|
13
|
-
ExtractAbiErrorNames,
|
14
|
-
ExtractAbiEvent,
|
15
|
-
ExtractAbiEventNames,
|
16
|
-
ExtractAbiFunction,
|
17
|
-
ExtractAbiFunctionNames,
|
18
|
-
ResolvedConfig,
|
1
|
+
import {
|
2
|
+
type Abi,
|
3
|
+
type AbiConstructor,
|
4
|
+
type AbiError,
|
5
|
+
type AbiEvent,
|
6
|
+
type AbiFunction,
|
7
|
+
type AbiParameter,
|
8
|
+
type AbiParameterToPrimitiveType,
|
9
|
+
type AbiParametersToPrimitiveTypes,
|
10
|
+
type AbiStateMutability,
|
11
|
+
type Address,
|
12
|
+
type ExtractAbiError,
|
13
|
+
type ExtractAbiErrorNames,
|
14
|
+
type ExtractAbiEvent,
|
15
|
+
type ExtractAbiEventNames,
|
16
|
+
type ExtractAbiFunction,
|
17
|
+
type ExtractAbiFunctionNames,
|
18
|
+
type ResolvedConfig,
|
19
19
|
} from 'abitype'
|
20
20
|
|
21
21
|
import type { Hex, LogTopic } from './misc.js'
|
@@ -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 []
|
@@ -133,78 +186,6 @@ export type AbiItem = Abi[number]
|
|
133
186
|
|
134
187
|
export type EventDefinition = `${string}(${string})`
|
135
188
|
|
136
|
-
export type ContractParameters<
|
137
|
-
abi extends Abi | readonly unknown[] = readonly unknown[],
|
138
|
-
stateMutability extends AbiStateMutability = AbiStateMutability,
|
139
|
-
functionName extends ExtractAbiFunctionNames<
|
140
|
-
abi extends Abi ? abi : Abi,
|
141
|
-
stateMutability
|
142
|
-
> = string,
|
143
|
-
///
|
144
|
-
functionNames extends string = abi extends Abi
|
145
|
-
? ExtractAbiFunctionNames<abi, stateMutability>
|
146
|
-
: string,
|
147
|
-
abiFunction extends AbiFunction = abi extends Abi
|
148
|
-
? ExtractAbiFunction<
|
149
|
-
abi,
|
150
|
-
functionName extends functionNames ? functionName : functionNames, // fallback to all function names if `functionName` is invalid
|
151
|
-
stateMutability
|
152
|
-
>
|
153
|
-
: AbiFunction,
|
154
|
-
types = AbiParametersToPrimitiveTypes<abiFunction['inputs'], 'inputs'>,
|
155
|
-
args =
|
156
|
-
| types // show all values
|
157
|
-
| (Abi extends abi ? readonly unknown[] | undefined : never) // `abi` declared as `Abi`
|
158
|
-
| (readonly [] extends types ? undefined : never), // `abiFunction` has no inputs
|
159
|
-
isArgsOptional extends boolean = Abi extends abi
|
160
|
-
? true
|
161
|
-
: readonly [] extends types
|
162
|
-
? true
|
163
|
-
: false,
|
164
|
-
> = {
|
165
|
-
abi: abi
|
166
|
-
address: Address
|
167
|
-
functionName:
|
168
|
-
| functionNames // show all values
|
169
|
-
| (functionName extends functionNames ? functionName : never) // validate `functionName`
|
170
|
-
| ([functionNames] extends [never] ? string : never) // `abi` declared as `Abi`
|
171
|
-
} & (isArgsOptional extends true ? { args?: args | undefined } : { args: args })
|
172
|
-
|
173
|
-
export type ContractReturnType<
|
174
|
-
abi extends Abi | readonly unknown[] = readonly unknown[],
|
175
|
-
stateMutability extends AbiStateMutability = AbiStateMutability,
|
176
|
-
functionName extends ExtractAbiFunctionNames<
|
177
|
-
abi extends Abi ? abi : Abi,
|
178
|
-
stateMutability
|
179
|
-
> = string,
|
180
|
-
///
|
181
|
-
abiFunction extends AbiFunction = abi extends Abi
|
182
|
-
? ExtractAbiFunction<abi, functionName, stateMutability>
|
183
|
-
: AbiFunction,
|
184
|
-
types = AbiParametersToPrimitiveTypes<abiFunction['outputs'], 'outputs'>,
|
185
|
-
> = [abiFunction] extends [never]
|
186
|
-
? unknown // `abiFunction` was not inferrable (e.g. `abi` declared as `Abi`)
|
187
|
-
: readonly unknown[] extends types
|
188
|
-
? unknown // `abiFunction` was not inferrable (e.g. `abi` not const asserted)
|
189
|
-
: types extends readonly [] // unwrap `types`
|
190
|
-
? void // no outputs
|
191
|
-
: types extends readonly [infer type]
|
192
|
-
? type // single output
|
193
|
-
: types
|
194
|
-
|
195
|
-
export type ContractFunctionConfig<
|
196
|
-
TAbi extends Abi | readonly unknown[] = Abi,
|
197
|
-
TFunctionName extends string = string,
|
198
|
-
TAbiStateMutability extends AbiStateMutability = AbiStateMutability,
|
199
|
-
> = {
|
200
|
-
/** Contract ABI */
|
201
|
-
abi: TAbi
|
202
|
-
/** Contract address */
|
203
|
-
address: Address
|
204
|
-
/** Function to invoke on the contract */
|
205
|
-
functionName: InferFunctionName<TAbi, TFunctionName, TAbiStateMutability>
|
206
|
-
} & GetFunctionArgs<TAbi, TFunctionName>
|
207
|
-
|
208
189
|
export type ContractFunctionResult<
|
209
190
|
TAbi extends Abi | readonly unknown[] = Abi,
|
210
191
|
TFunctionName extends string = string,
|
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
@@ -188,3 +188,12 @@ export type MaybePartial<
|
|
188
188
|
export type ExactPartial<type> = {
|
189
189
|
[key in keyof type]?: type[key] | undefined
|
190
190
|
}
|
191
|
+
|
192
|
+
export type OneOf<
|
193
|
+
union extends object,
|
194
|
+
///
|
195
|
+
keys extends KeyofUnion<union> = KeyofUnion<union>,
|
196
|
+
> = union extends infer Item
|
197
|
+
? Prettify<Item & { [K in Exclude<keys, keyof Item>]?: undefined }>
|
198
|
+
: never
|
199
|
+
type KeyofUnion<type> = type extends type ? keyof type : never
|