1 |
|
2 |
|
3 |
|
4 | import type { Listener } from "@ethersproject/providers";
|
5 | import type { Event, EventFilter } from "ethers";
|
6 |
|
7 | export interface TypedEvent<
|
8 | TArgsArray extends Array<any> = any,
|
9 | TArgsObject = any
|
10 | > extends Event {
|
11 | args: TArgsArray & TArgsObject;
|
12 | }
|
13 |
|
14 | export interface TypedEventFilter<_TEvent extends TypedEvent>
|
15 | extends EventFilter {}
|
16 |
|
17 | export interface TypedListener<TEvent extends TypedEvent> {
|
18 | (...listenerArg: [...__TypechainArgsArray<TEvent>, TEvent]): void;
|
19 | }
|
20 |
|
21 | type __TypechainArgsArray<T> = T extends TypedEvent<infer U> ? U : never;
|
22 |
|
23 | export interface OnEvent<TRes> {
|
24 | <TEvent extends TypedEvent>(
|
25 | eventFilter: TypedEventFilter<TEvent>,
|
26 | listener: TypedListener<TEvent>
|
27 | ): TRes;
|
28 | (eventName: string, listener: Listener): TRes;
|
29 | }
|
30 |
|
31 | export type MinEthersFactory<C, ARGS> = {
|
32 | deploy(...a: ARGS[]): Promise<C>;
|
33 | };
|
34 |
|
35 | export type GetContractTypeFromFactory<F> = F extends MinEthersFactory<
|
36 | infer C,
|
37 | any
|
38 | >
|
39 | ? C
|
40 | : never;
|
41 |
|
42 | export type GetARGsTypeFromFactory<F> = F extends MinEthersFactory<any, any>
|
43 | ? Parameters<F["deploy"]>
|
44 | : never;
|
45 |
|
46 | export type PromiseOrValue<T> = T | Promise<T>;
|