From 7b6bf5466a47cf18463a8a7a45a42d6c1965b187 Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Fri, 29 Jan 2021 22:33:39 +0530 Subject: [PATCH 01/11] [ethers-v5] Add type support for queryFilter --- packages/target-ethers-v5/src/codegen/index.ts | 16 +++++++++++++--- packages/target-ethers-v5/src/index.ts | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/packages/target-ethers-v5/src/codegen/index.ts b/packages/target-ethers-v5/src/codegen/index.ts index 24067e3cf..ab0c06dab 100644 --- a/packages/target-ethers-v5/src/codegen/index.ts +++ b/packages/target-ethers-v5/src/codegen/index.ts @@ -7,7 +7,7 @@ import { EventDeclaration, FunctionDeclaration, } from 'typechain' -import { generateInputType, generateInputTypes } from './types' +import { generateInputType, generateInputTypes, generateOutputTypes } from './types' import { codegenFunctions } from './functions' import { FACTORY_POSTFIX } from '../common' import { reservedKeywords } from './reserved-keywords' @@ -27,6 +27,7 @@ export function codegenContractTypings(contract: Contract) { import { BytesLike } from '@ethersproject/bytes'; import { Listener, Provider } from '@ethersproject/providers'; import { FunctionFragment, EventFragment, Result } from '@ethersproject/abi'; + import { TypedEventFilter, TypedEvent } from './commons'; interface ${contract.name}Interface extends ethers.utils.Interface { functions: { @@ -70,6 +71,12 @@ export function codegenContractTypings(contract: Contract) { removeAllListeners(eventName: EventFilter | string): this; removeListener(eventName: any, listener: Listener): this; + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + interface: ${contract.name}Interface; functions: { @@ -175,7 +182,7 @@ export function codegenAbstractContractFactory(contract: Contract, abi: any): st export class ${contract.name}${FACTORY_POSTFIX} { static connect(address: string, signerOrProvider: Signer | Provider): ${contract.name} { - return new Contract(address, _abi, signerOrProvider) as ${contract.name}; + return new Contract(address, _abi, signerOrProvider) as unknown as ${contract.name}; } } @@ -260,7 +267,10 @@ function generateParamNames(params: Array): function generateEvents(event: EventDeclaration) { return ` - ${event.name}(${generateEventTypes(event.inputs)}): EventFilter; + ${event.name}(${generateEventTypes(event.inputs)}): TypedEventFilter<${generateOutputTypes( + true, + event.inputs.map((input, i) => ({ name: input.name ?? 'arg' + i, type: input.type })), + )}>; ` } diff --git a/packages/target-ethers-v5/src/index.ts b/packages/target-ethers-v5/src/index.ts index 6059c56d4..cec94b6e3 100644 --- a/packages/target-ethers-v5/src/index.ts +++ b/packages/target-ethers-v5/src/index.ts @@ -121,6 +121,10 @@ export default class Ethers extends TsGeneratorPlugin { const allFiles = [ ...abstractFactoryFiles, + { + path: join(this.outDirAbs, 'commons.ts'), + contents: this.genCommons(), + }, { path: join(this.outDirAbs, 'index.ts'), contents: this.genReExports(), @@ -129,6 +133,18 @@ export default class Ethers extends TsGeneratorPlugin { return allFiles } + private genCommons(): string { + return ` + import { EventFilter, Event } from 'ethers' + import { Result } from '@ethersproject/abi' + + export interface TypedEventFilter extends EventFilter {} + + export interface TypedEvent extends Event { + args: T; + }` + } + private genReExports(): string { const codegen: string[] = [] From 44e3938b28f73ff15839471412330890e1abebc7 Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Sat, 30 Jan 2021 01:24:18 +0530 Subject: [PATCH 02/11] [ethers-v5] Add type support for event listeners - addListener function was removed since it does not exist in v5 - listeners and off was added --- .../target-ethers-v5/src/codegen/index.ts | 30 ++++++++++++------- packages/target-ethers-v5/src/index.ts | 6 ++-- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/packages/target-ethers-v5/src/codegen/index.ts b/packages/target-ethers-v5/src/codegen/index.ts index ab0c06dab..dd3305793 100644 --- a/packages/target-ethers-v5/src/codegen/index.ts +++ b/packages/target-ethers-v5/src/codegen/index.ts @@ -27,7 +27,7 @@ export function codegenContractTypings(contract: Contract) { import { BytesLike } from '@ethersproject/bytes'; import { Listener, Provider } from '@ethersproject/providers'; import { FunctionFragment, EventFragment, Result } from '@ethersproject/abi'; - import { TypedEventFilter, TypedEvent } from './commons'; + import { TypedEventFilter, TypedEvent, TypedListener } from './commons'; interface ${contract.name}Interface extends ethers.utils.Interface { functions: { @@ -65,17 +65,25 @@ export function codegenContractTypings(contract: Contract) { attach(addressOrName: string): this; deployed(): Promise; - on(event: EventFilter | string, listener: Listener): this; - once(event: EventFilter | string, listener: Listener): this; - addListener(eventName: EventFilter | string, listener: Listener): this; - removeAllListeners(eventName: EventFilter | string): this; - removeListener(eventName: any, listener: Listener): this; - - queryFilter( - event: TypedEventFilter, + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + listeners(eventFilter?: TypedEventFilter): Array>; + off(eventFilter: TypedEventFilter, listener: TypedListener): this; + on(eventFilter: TypedEventFilter, listener: TypedListener): this; + once(eventFilter: TypedEventFilter, listener: TypedListener): this; + removeListener(eventFilter: TypedEventFilter, listener: TypedListener): this; + removeAllListeners(eventFilter: TypedEventFilter): this; + + queryFilter( + event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; + ): Promise>; interface: ${contract.name}Interface; @@ -270,7 +278,7 @@ function generateEvents(event: EventDeclaration) { ${event.name}(${generateEventTypes(event.inputs)}): TypedEventFilter<${generateOutputTypes( true, event.inputs.map((input, i) => ({ name: input.name ?? 'arg' + i, type: input.type })), - )}>; + ).replace(' &', ',')}>; ` } diff --git a/packages/target-ethers-v5/src/index.ts b/packages/target-ethers-v5/src/index.ts index cec94b6e3..be3516251 100644 --- a/packages/target-ethers-v5/src/index.ts +++ b/packages/target-ethers-v5/src/index.ts @@ -138,11 +138,13 @@ export default class Ethers extends TsGeneratorPlugin { import { EventFilter, Event } from 'ethers' import { Result } from '@ethersproject/abi' - export interface TypedEventFilter extends EventFilter {} + export interface TypedEventFilter extends EventFilter {} export interface TypedEvent extends Event { args: T; - }` + } + + export type TypedListener, G> = (...listenerArg: [...T, TypedEventFilter]) => void;` } private genReExports(): string { From 462264451c82258dc935b86a9e7b3580f59c1234 Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Sat, 30 Jan 2021 02:02:07 +0530 Subject: [PATCH 03/11] [ethers-v5] Regenerate types --- .../types/DataTypesInput.d.ts | 39 +++++++++-- .../types/DataTypesPure.d.ts | 39 +++++++++-- .../types/DataTypesView.d.ts | 39 +++++++++-- .../target-ethers-v5-test/types/Events.d.ts | 67 +++++++++++++++---- .../target-ethers-v5-test/types/Library.d.ts | 39 +++++++++-- .../types/LibraryConsumer.d.ts | 39 +++++++++-- .../types/NameMangling.d.ts | 39 +++++++++-- .../types/Overloads.d.ts | 39 +++++++++-- .../target-ethers-v5-test/types/Payable.d.ts | 39 +++++++++-- .../types/PayableFactory.d.ts | 39 +++++++++-- .../target-ethers-v5-test/types/commons.ts | 16 +++++ .../factories/DataTypesInput__factory.ts | 6 +- .../types/factories/DataTypesPure__factory.ts | 6 +- .../types/factories/DataTypesView__factory.ts | 6 +- .../types/factories/Events__factory.ts | 2 +- .../factories/LibraryConsumer__factory.ts | 6 +- .../types/factories/Library__factory.ts | 6 +- .../types/factories/NameMangling__factory.ts | 6 +- .../types/factories/Overloads__factory.ts | 6 +- .../factories/PayableFactory__factory.ts | 6 +- .../types/factories/Payable__factory.ts | 6 +- 21 files changed, 423 insertions(+), 67 deletions(-) create mode 100644 packages/target-ethers-v5-test/types/commons.ts diff --git a/packages/target-ethers-v5-test/types/DataTypesInput.d.ts b/packages/target-ethers-v5-test/types/DataTypesInput.d.ts index b3fd6452d..3fd07ba94 100644 --- a/packages/target-ethers-v5-test/types/DataTypesInput.d.ts +++ b/packages/target-ethers-v5-test/types/DataTypesInput.d.ts @@ -18,6 +18,7 @@ import { import { BytesLike } from "@ethersproject/bytes"; import { Listener, Provider } from "@ethersproject/providers"; import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; +import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; interface DataTypesInputInterface extends ethers.utils.Interface { functions: { @@ -138,11 +139,39 @@ export class DataTypesInput extends Contract { attach(addressOrName: string): this; deployed(): Promise; - on(event: EventFilter | string, listener: Listener): this; - once(event: EventFilter | string, listener: Listener): this; - addListener(eventName: EventFilter | string, listener: Listener): this; - removeAllListeners(eventName: EventFilter | string): this; - removeListener(eventName: any, listener: Listener): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + off( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + on( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + once( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeListener( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners(eventFilter: TypedEventFilter): this; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; interface: DataTypesInputInterface; diff --git a/packages/target-ethers-v5-test/types/DataTypesPure.d.ts b/packages/target-ethers-v5-test/types/DataTypesPure.d.ts index b0b355fec..c44e042f7 100644 --- a/packages/target-ethers-v5-test/types/DataTypesPure.d.ts +++ b/packages/target-ethers-v5-test/types/DataTypesPure.d.ts @@ -18,6 +18,7 @@ import { import { BytesLike } from "@ethersproject/bytes"; import { Listener, Provider } from "@ethersproject/providers"; import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; +import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; interface DataTypesPureInterface extends ethers.utils.Interface { functions: { @@ -129,11 +130,39 @@ export class DataTypesPure extends Contract { attach(addressOrName: string): this; deployed(): Promise; - on(event: EventFilter | string, listener: Listener): this; - once(event: EventFilter | string, listener: Listener): this; - addListener(eventName: EventFilter | string, listener: Listener): this; - removeAllListeners(eventName: EventFilter | string): this; - removeListener(eventName: any, listener: Listener): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + off( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + on( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + once( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeListener( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners(eventFilter: TypedEventFilter): this; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; interface: DataTypesPureInterface; diff --git a/packages/target-ethers-v5-test/types/DataTypesView.d.ts b/packages/target-ethers-v5-test/types/DataTypesView.d.ts index b68f6261a..b7d2b181b 100644 --- a/packages/target-ethers-v5-test/types/DataTypesView.d.ts +++ b/packages/target-ethers-v5-test/types/DataTypesView.d.ts @@ -18,6 +18,7 @@ import { import { BytesLike } from "@ethersproject/bytes"; import { Listener, Provider } from "@ethersproject/providers"; import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; +import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; interface DataTypesViewInterface extends ethers.utils.Interface { functions: { @@ -129,11 +130,39 @@ export class DataTypesView extends Contract { attach(addressOrName: string): this; deployed(): Promise; - on(event: EventFilter | string, listener: Listener): this; - once(event: EventFilter | string, listener: Listener): this; - addListener(eventName: EventFilter | string, listener: Listener): this; - removeAllListeners(eventName: EventFilter | string): this; - removeListener(eventName: any, listener: Listener): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + off( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + on( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + once( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeListener( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners(eventFilter: TypedEventFilter): this; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; interface: DataTypesViewInterface; diff --git a/packages/target-ethers-v5-test/types/Events.d.ts b/packages/target-ethers-v5-test/types/Events.d.ts index a1c9da9a6..2234fda08 100644 --- a/packages/target-ethers-v5-test/types/Events.d.ts +++ b/packages/target-ethers-v5-test/types/Events.d.ts @@ -19,6 +19,7 @@ import { import { BytesLike } from "@ethersproject/bytes"; import { Listener, Provider } from "@ethersproject/providers"; import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; +import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; interface EventsInterface extends ethers.utils.Interface { functions: { @@ -86,11 +87,39 @@ export class Events extends Contract { attach(addressOrName: string): this; deployed(): Promise; - on(event: EventFilter | string, listener: Listener): this; - once(event: EventFilter | string, listener: Listener): this; - addListener(eventName: EventFilter | string, listener: Listener): this; - removeAllListeners(eventName: EventFilter | string): this; - removeListener(eventName: any, listener: Listener): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + off( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + on( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + once( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeListener( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners(eventFilter: TypedEventFilter): this; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; interface: EventsInterface; @@ -163,13 +192,27 @@ export class Events extends Contract { }; filters: { - AnonEvent1(value1: BigNumberish | null): EventFilter; - - Event1(value1: BigNumberish | null, value2: null): EventFilter; - - Event2(undefined: null): EventFilter; - - Event3(value1: boolean | null, value2: null): EventFilter; + AnonEvent1( + value1: BigNumberish | null + ): TypedEventFilter<[BigNumber], { value1: BigNumber }>; + + Event1( + value1: BigNumberish | null, + value2: null + ): TypedEventFilter< + [BigNumber, BigNumber], + { value1: BigNumber; value2: BigNumber } + >; + + Event2(undefined: null): TypedEventFilter<[BigNumber], { arg0: BigNumber }>; + + Event3( + value1: boolean | null, + value2: null + ): TypedEventFilter< + [boolean, BigNumber], + { value1: boolean; value2: BigNumber } + >; }; estimateGas: { diff --git a/packages/target-ethers-v5-test/types/Library.d.ts b/packages/target-ethers-v5-test/types/Library.d.ts index da4fdffd9..58a656d1d 100644 --- a/packages/target-ethers-v5-test/types/Library.d.ts +++ b/packages/target-ethers-v5-test/types/Library.d.ts @@ -18,6 +18,7 @@ import { import { BytesLike } from "@ethersproject/bytes"; import { Listener, Provider } from "@ethersproject/providers"; import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; +import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; interface LibraryInterface extends ethers.utils.Interface { functions: { @@ -36,11 +37,39 @@ export class Library extends Contract { attach(addressOrName: string): this; deployed(): Promise; - on(event: EventFilter | string, listener: Listener): this; - once(event: EventFilter | string, listener: Listener): this; - addListener(eventName: EventFilter | string, listener: Listener): this; - removeAllListeners(eventName: EventFilter | string): this; - removeListener(eventName: any, listener: Listener): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + off( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + on( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + once( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeListener( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners(eventFilter: TypedEventFilter): this; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; interface: LibraryInterface; diff --git a/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts b/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts index f7515bfd7..be7f1875d 100644 --- a/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts +++ b/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts @@ -18,6 +18,7 @@ import { import { BytesLike } from "@ethersproject/bytes"; import { Listener, Provider } from "@ethersproject/providers"; import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; +import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; interface LibraryConsumerInterface extends ethers.utils.Interface { functions: { @@ -39,11 +40,39 @@ export class LibraryConsumer extends Contract { attach(addressOrName: string): this; deployed(): Promise; - on(event: EventFilter | string, listener: Listener): this; - once(event: EventFilter | string, listener: Listener): this; - addListener(eventName: EventFilter | string, listener: Listener): this; - removeAllListeners(eventName: EventFilter | string): this; - removeListener(eventName: any, listener: Listener): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + off( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + on( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + once( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeListener( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners(eventFilter: TypedEventFilter): this; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; interface: LibraryConsumerInterface; diff --git a/packages/target-ethers-v5-test/types/NameMangling.d.ts b/packages/target-ethers-v5-test/types/NameMangling.d.ts index d7e9a67ff..d9725f887 100644 --- a/packages/target-ethers-v5-test/types/NameMangling.d.ts +++ b/packages/target-ethers-v5-test/types/NameMangling.d.ts @@ -18,6 +18,7 @@ import { import { BytesLike } from "@ethersproject/bytes"; import { Listener, Provider } from "@ethersproject/providers"; import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; +import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; interface NameManglingInterface extends ethers.utils.Interface { functions: { @@ -39,11 +40,39 @@ export class NameMangling extends Contract { attach(addressOrName: string): this; deployed(): Promise; - on(event: EventFilter | string, listener: Listener): this; - once(event: EventFilter | string, listener: Listener): this; - addListener(eventName: EventFilter | string, listener: Listener): this; - removeAllListeners(eventName: EventFilter | string): this; - removeListener(eventName: any, listener: Listener): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + off( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + on( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + once( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeListener( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners(eventFilter: TypedEventFilter): this; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; interface: NameManglingInterface; diff --git a/packages/target-ethers-v5-test/types/Overloads.d.ts b/packages/target-ethers-v5-test/types/Overloads.d.ts index 2fa006033..209029c2b 100644 --- a/packages/target-ethers-v5-test/types/Overloads.d.ts +++ b/packages/target-ethers-v5-test/types/Overloads.d.ts @@ -18,6 +18,7 @@ import { import { BytesLike } from "@ethersproject/bytes"; import { Listener, Provider } from "@ethersproject/providers"; import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; +import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; interface OverloadsInterface extends ethers.utils.Interface { functions: { @@ -39,11 +40,39 @@ export class Overloads extends Contract { attach(addressOrName: string): this; deployed(): Promise; - on(event: EventFilter | string, listener: Listener): this; - once(event: EventFilter | string, listener: Listener): this; - addListener(eventName: EventFilter | string, listener: Listener): this; - removeAllListeners(eventName: EventFilter | string): this; - removeListener(eventName: any, listener: Listener): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + off( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + on( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + once( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeListener( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners(eventFilter: TypedEventFilter): this; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; interface: OverloadsInterface; diff --git a/packages/target-ethers-v5-test/types/Payable.d.ts b/packages/target-ethers-v5-test/types/Payable.d.ts index e287d509c..23a57647e 100644 --- a/packages/target-ethers-v5-test/types/Payable.d.ts +++ b/packages/target-ethers-v5-test/types/Payable.d.ts @@ -20,6 +20,7 @@ import { import { BytesLike } from "@ethersproject/bytes"; import { Listener, Provider } from "@ethersproject/providers"; import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; +import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; interface PayableInterface extends ethers.utils.Interface { functions: { @@ -53,11 +54,39 @@ export class Payable extends Contract { attach(addressOrName: string): this; deployed(): Promise; - on(event: EventFilter | string, listener: Listener): this; - once(event: EventFilter | string, listener: Listener): this; - addListener(eventName: EventFilter | string, listener: Listener): this; - removeAllListeners(eventName: EventFilter | string): this; - removeListener(eventName: any, listener: Listener): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + off( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + on( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + once( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeListener( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners(eventFilter: TypedEventFilter): this; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; interface: PayableInterface; diff --git a/packages/target-ethers-v5-test/types/PayableFactory.d.ts b/packages/target-ethers-v5-test/types/PayableFactory.d.ts index ddba76e22..5fe26d456 100644 --- a/packages/target-ethers-v5-test/types/PayableFactory.d.ts +++ b/packages/target-ethers-v5-test/types/PayableFactory.d.ts @@ -19,6 +19,7 @@ import { import { BytesLike } from "@ethersproject/bytes"; import { Listener, Provider } from "@ethersproject/providers"; import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; +import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; interface PayableFactoryInterface extends ethers.utils.Interface { functions: { @@ -40,11 +41,39 @@ export class PayableFactory extends Contract { attach(addressOrName: string): this; deployed(): Promise; - on(event: EventFilter | string, listener: Listener): this; - once(event: EventFilter | string, listener: Listener): this; - addListener(eventName: EventFilter | string, listener: Listener): this; - removeAllListeners(eventName: EventFilter | string): this; - removeListener(eventName: any, listener: Listener): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + off( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + on( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + once( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeListener( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners(eventFilter: TypedEventFilter): this; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; interface: PayableFactoryInterface; diff --git a/packages/target-ethers-v5-test/types/commons.ts b/packages/target-ethers-v5-test/types/commons.ts new file mode 100644 index 000000000..e2f4c4101 --- /dev/null +++ b/packages/target-ethers-v5-test/types/commons.ts @@ -0,0 +1,16 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { EventFilter, Event } from "ethers"; +import { Result } from "@ethersproject/abi"; + +export interface TypedEventFilter extends EventFilter {} + +export interface TypedEvent extends Event { + args: T; +} + +export type TypedListener, G> = ( + ...listenerArg: [...T, TypedEventFilter] +) => void; diff --git a/packages/target-ethers-v5-test/types/factories/DataTypesInput__factory.ts b/packages/target-ethers-v5-test/types/factories/DataTypesInput__factory.ts index c4433d820..aef307580 100644 --- a/packages/target-ethers-v5-test/types/factories/DataTypesInput__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/DataTypesInput__factory.ts @@ -12,7 +12,11 @@ export class DataTypesInput__factory { address: string, signerOrProvider: Signer | Provider ): DataTypesInput { - return new Contract(address, _abi, signerOrProvider) as DataTypesInput; + return (new Contract( + address, + _abi, + signerOrProvider + ) as unknown) as DataTypesInput; } } diff --git a/packages/target-ethers-v5-test/types/factories/DataTypesPure__factory.ts b/packages/target-ethers-v5-test/types/factories/DataTypesPure__factory.ts index a97551c3d..20cf5492a 100644 --- a/packages/target-ethers-v5-test/types/factories/DataTypesPure__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/DataTypesPure__factory.ts @@ -12,7 +12,11 @@ export class DataTypesPure__factory { address: string, signerOrProvider: Signer | Provider ): DataTypesPure { - return new Contract(address, _abi, signerOrProvider) as DataTypesPure; + return (new Contract( + address, + _abi, + signerOrProvider + ) as unknown) as DataTypesPure; } } diff --git a/packages/target-ethers-v5-test/types/factories/DataTypesView__factory.ts b/packages/target-ethers-v5-test/types/factories/DataTypesView__factory.ts index 50a42ca89..57504637c 100644 --- a/packages/target-ethers-v5-test/types/factories/DataTypesView__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/DataTypesView__factory.ts @@ -12,7 +12,11 @@ export class DataTypesView__factory { address: string, signerOrProvider: Signer | Provider ): DataTypesView { - return new Contract(address, _abi, signerOrProvider) as DataTypesView; + return (new Contract( + address, + _abi, + signerOrProvider + ) as unknown) as DataTypesView; } } diff --git a/packages/target-ethers-v5-test/types/factories/Events__factory.ts b/packages/target-ethers-v5-test/types/factories/Events__factory.ts index 609f0bb46..19b14644a 100644 --- a/packages/target-ethers-v5-test/types/factories/Events__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/Events__factory.ts @@ -9,7 +9,7 @@ import type { Events } from "../Events"; export class Events__factory { static connect(address: string, signerOrProvider: Signer | Provider): Events { - return new Contract(address, _abi, signerOrProvider) as Events; + return (new Contract(address, _abi, signerOrProvider) as unknown) as Events; } } diff --git a/packages/target-ethers-v5-test/types/factories/LibraryConsumer__factory.ts b/packages/target-ethers-v5-test/types/factories/LibraryConsumer__factory.ts index 3573d6ad7..67b6730a5 100644 --- a/packages/target-ethers-v5-test/types/factories/LibraryConsumer__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/LibraryConsumer__factory.ts @@ -12,7 +12,11 @@ export class LibraryConsumer__factory { address: string, signerOrProvider: Signer | Provider ): LibraryConsumer { - return new Contract(address, _abi, signerOrProvider) as LibraryConsumer; + return (new Contract( + address, + _abi, + signerOrProvider + ) as unknown) as LibraryConsumer; } } diff --git a/packages/target-ethers-v5-test/types/factories/Library__factory.ts b/packages/target-ethers-v5-test/types/factories/Library__factory.ts index d957f8f62..ad41aadd8 100644 --- a/packages/target-ethers-v5-test/types/factories/Library__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/Library__factory.ts @@ -12,7 +12,11 @@ export class Library__factory { address: string, signerOrProvider: Signer | Provider ): Library { - return new Contract(address, _abi, signerOrProvider) as Library; + return (new Contract( + address, + _abi, + signerOrProvider + ) as unknown) as Library; } } diff --git a/packages/target-ethers-v5-test/types/factories/NameMangling__factory.ts b/packages/target-ethers-v5-test/types/factories/NameMangling__factory.ts index 7df827741..7066f1b82 100644 --- a/packages/target-ethers-v5-test/types/factories/NameMangling__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/NameMangling__factory.ts @@ -12,7 +12,11 @@ export class NameMangling__factory { address: string, signerOrProvider: Signer | Provider ): NameMangling { - return new Contract(address, _abi, signerOrProvider) as NameMangling; + return (new Contract( + address, + _abi, + signerOrProvider + ) as unknown) as NameMangling; } } diff --git a/packages/target-ethers-v5-test/types/factories/Overloads__factory.ts b/packages/target-ethers-v5-test/types/factories/Overloads__factory.ts index 3a8cbbf2a..4cf150bca 100644 --- a/packages/target-ethers-v5-test/types/factories/Overloads__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/Overloads__factory.ts @@ -12,7 +12,11 @@ export class Overloads__factory { address: string, signerOrProvider: Signer | Provider ): Overloads { - return new Contract(address, _abi, signerOrProvider) as Overloads; + return (new Contract( + address, + _abi, + signerOrProvider + ) as unknown) as Overloads; } } diff --git a/packages/target-ethers-v5-test/types/factories/PayableFactory__factory.ts b/packages/target-ethers-v5-test/types/factories/PayableFactory__factory.ts index 40fc937b9..75a690e87 100644 --- a/packages/target-ethers-v5-test/types/factories/PayableFactory__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/PayableFactory__factory.ts @@ -12,7 +12,11 @@ export class PayableFactory__factory { address: string, signerOrProvider: Signer | Provider ): PayableFactory { - return new Contract(address, _abi, signerOrProvider) as PayableFactory; + return (new Contract( + address, + _abi, + signerOrProvider + ) as unknown) as PayableFactory; } } diff --git a/packages/target-ethers-v5-test/types/factories/Payable__factory.ts b/packages/target-ethers-v5-test/types/factories/Payable__factory.ts index dd53a8afe..7c6df628a 100644 --- a/packages/target-ethers-v5-test/types/factories/Payable__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/Payable__factory.ts @@ -12,7 +12,11 @@ export class Payable__factory { address: string, signerOrProvider: Signer | Provider ): Payable { - return new Contract(address, _abi, signerOrProvider) as Payable; + return (new Contract( + address, + _abi, + signerOrProvider + ) as unknown) as Payable; } } From 6fa199a71adce132200484d13c15f1425da0a3de Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Sat, 30 Jan 2021 05:05:28 +0530 Subject: [PATCH 04/11] [ethers-v5] Fix bug in queryFilter return type --- packages/target-ethers-v5/src/codegen/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/target-ethers-v5/src/codegen/index.ts b/packages/target-ethers-v5/src/codegen/index.ts index dd3305793..31ca964e0 100644 --- a/packages/target-ethers-v5/src/codegen/index.ts +++ b/packages/target-ethers-v5/src/codegen/index.ts @@ -83,7 +83,7 @@ export function codegenContractTypings(contract: Contract) { event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; + ): Promise>>; interface: ${contract.name}Interface; @@ -190,7 +190,7 @@ export function codegenAbstractContractFactory(contract: Contract, abi: any): st export class ${contract.name}${FACTORY_POSTFIX} { static connect(address: string, signerOrProvider: Signer | Provider): ${contract.name} { - return new Contract(address, _abi, signerOrProvider) as unknown as ${contract.name}; + return new Contract(address, _abi, signerOrProvider) as ${contract.name}; } } From 1c5dcc824bb93b9e49f09c4bb0ea779464876984 Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Sat, 30 Jan 2021 05:06:28 +0530 Subject: [PATCH 05/11] [ethers-v5] Regenerate types --- packages/target-ethers-v5-test/types/DataTypesInput.d.ts | 2 +- packages/target-ethers-v5-test/types/DataTypesPure.d.ts | 2 +- packages/target-ethers-v5-test/types/DataTypesView.d.ts | 2 +- packages/target-ethers-v5-test/types/Events.d.ts | 2 +- packages/target-ethers-v5-test/types/Library.d.ts | 2 +- packages/target-ethers-v5-test/types/LibraryConsumer.d.ts | 2 +- packages/target-ethers-v5-test/types/NameMangling.d.ts | 2 +- packages/target-ethers-v5-test/types/Overloads.d.ts | 2 +- packages/target-ethers-v5-test/types/Payable.d.ts | 2 +- packages/target-ethers-v5-test/types/PayableFactory.d.ts | 2 +- .../types/factories/DataTypesInput__factory.ts | 6 +----- .../types/factories/DataTypesPure__factory.ts | 6 +----- .../types/factories/DataTypesView__factory.ts | 6 +----- .../types/factories/Events__factory.ts | 2 +- .../types/factories/LibraryConsumer__factory.ts | 6 +----- .../types/factories/Library__factory.ts | 6 +----- .../types/factories/NameMangling__factory.ts | 6 +----- .../types/factories/Overloads__factory.ts | 6 +----- .../types/factories/PayableFactory__factory.ts | 6 +----- .../types/factories/Payable__factory.ts | 6 +----- 20 files changed, 20 insertions(+), 56 deletions(-) diff --git a/packages/target-ethers-v5-test/types/DataTypesInput.d.ts b/packages/target-ethers-v5-test/types/DataTypesInput.d.ts index 3fd07ba94..d1859dadc 100644 --- a/packages/target-ethers-v5-test/types/DataTypesInput.d.ts +++ b/packages/target-ethers-v5-test/types/DataTypesInput.d.ts @@ -171,7 +171,7 @@ export class DataTypesInput extends Contract { event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; + ): Promise>>; interface: DataTypesInputInterface; diff --git a/packages/target-ethers-v5-test/types/DataTypesPure.d.ts b/packages/target-ethers-v5-test/types/DataTypesPure.d.ts index c44e042f7..9356a2361 100644 --- a/packages/target-ethers-v5-test/types/DataTypesPure.d.ts +++ b/packages/target-ethers-v5-test/types/DataTypesPure.d.ts @@ -162,7 +162,7 @@ export class DataTypesPure extends Contract { event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; + ): Promise>>; interface: DataTypesPureInterface; diff --git a/packages/target-ethers-v5-test/types/DataTypesView.d.ts b/packages/target-ethers-v5-test/types/DataTypesView.d.ts index b7d2b181b..d09afae72 100644 --- a/packages/target-ethers-v5-test/types/DataTypesView.d.ts +++ b/packages/target-ethers-v5-test/types/DataTypesView.d.ts @@ -162,7 +162,7 @@ export class DataTypesView extends Contract { event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; + ): Promise>>; interface: DataTypesViewInterface; diff --git a/packages/target-ethers-v5-test/types/Events.d.ts b/packages/target-ethers-v5-test/types/Events.d.ts index 2234fda08..90f4f9c97 100644 --- a/packages/target-ethers-v5-test/types/Events.d.ts +++ b/packages/target-ethers-v5-test/types/Events.d.ts @@ -119,7 +119,7 @@ export class Events extends Contract { event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; + ): Promise>>; interface: EventsInterface; diff --git a/packages/target-ethers-v5-test/types/Library.d.ts b/packages/target-ethers-v5-test/types/Library.d.ts index 58a656d1d..73eb5ffc9 100644 --- a/packages/target-ethers-v5-test/types/Library.d.ts +++ b/packages/target-ethers-v5-test/types/Library.d.ts @@ -69,7 +69,7 @@ export class Library extends Contract { event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; + ): Promise>>; interface: LibraryInterface; diff --git a/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts b/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts index be7f1875d..4d33089c8 100644 --- a/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts +++ b/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts @@ -72,7 +72,7 @@ export class LibraryConsumer extends Contract { event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; + ): Promise>>; interface: LibraryConsumerInterface; diff --git a/packages/target-ethers-v5-test/types/NameMangling.d.ts b/packages/target-ethers-v5-test/types/NameMangling.d.ts index d9725f887..4a4becfa8 100644 --- a/packages/target-ethers-v5-test/types/NameMangling.d.ts +++ b/packages/target-ethers-v5-test/types/NameMangling.d.ts @@ -72,7 +72,7 @@ export class NameMangling extends Contract { event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; + ): Promise>>; interface: NameManglingInterface; diff --git a/packages/target-ethers-v5-test/types/Overloads.d.ts b/packages/target-ethers-v5-test/types/Overloads.d.ts index 209029c2b..45f676758 100644 --- a/packages/target-ethers-v5-test/types/Overloads.d.ts +++ b/packages/target-ethers-v5-test/types/Overloads.d.ts @@ -72,7 +72,7 @@ export class Overloads extends Contract { event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; + ): Promise>>; interface: OverloadsInterface; diff --git a/packages/target-ethers-v5-test/types/Payable.d.ts b/packages/target-ethers-v5-test/types/Payable.d.ts index 23a57647e..b96ce47f8 100644 --- a/packages/target-ethers-v5-test/types/Payable.d.ts +++ b/packages/target-ethers-v5-test/types/Payable.d.ts @@ -86,7 +86,7 @@ export class Payable extends Contract { event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; + ): Promise>>; interface: PayableInterface; diff --git a/packages/target-ethers-v5-test/types/PayableFactory.d.ts b/packages/target-ethers-v5-test/types/PayableFactory.d.ts index 5fe26d456..46f09a1ea 100644 --- a/packages/target-ethers-v5-test/types/PayableFactory.d.ts +++ b/packages/target-ethers-v5-test/types/PayableFactory.d.ts @@ -73,7 +73,7 @@ export class PayableFactory extends Contract { event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; + ): Promise>>; interface: PayableFactoryInterface; diff --git a/packages/target-ethers-v5-test/types/factories/DataTypesInput__factory.ts b/packages/target-ethers-v5-test/types/factories/DataTypesInput__factory.ts index aef307580..c4433d820 100644 --- a/packages/target-ethers-v5-test/types/factories/DataTypesInput__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/DataTypesInput__factory.ts @@ -12,11 +12,7 @@ export class DataTypesInput__factory { address: string, signerOrProvider: Signer | Provider ): DataTypesInput { - return (new Contract( - address, - _abi, - signerOrProvider - ) as unknown) as DataTypesInput; + return new Contract(address, _abi, signerOrProvider) as DataTypesInput; } } diff --git a/packages/target-ethers-v5-test/types/factories/DataTypesPure__factory.ts b/packages/target-ethers-v5-test/types/factories/DataTypesPure__factory.ts index 20cf5492a..a97551c3d 100644 --- a/packages/target-ethers-v5-test/types/factories/DataTypesPure__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/DataTypesPure__factory.ts @@ -12,11 +12,7 @@ export class DataTypesPure__factory { address: string, signerOrProvider: Signer | Provider ): DataTypesPure { - return (new Contract( - address, - _abi, - signerOrProvider - ) as unknown) as DataTypesPure; + return new Contract(address, _abi, signerOrProvider) as DataTypesPure; } } diff --git a/packages/target-ethers-v5-test/types/factories/DataTypesView__factory.ts b/packages/target-ethers-v5-test/types/factories/DataTypesView__factory.ts index 57504637c..50a42ca89 100644 --- a/packages/target-ethers-v5-test/types/factories/DataTypesView__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/DataTypesView__factory.ts @@ -12,11 +12,7 @@ export class DataTypesView__factory { address: string, signerOrProvider: Signer | Provider ): DataTypesView { - return (new Contract( - address, - _abi, - signerOrProvider - ) as unknown) as DataTypesView; + return new Contract(address, _abi, signerOrProvider) as DataTypesView; } } diff --git a/packages/target-ethers-v5-test/types/factories/Events__factory.ts b/packages/target-ethers-v5-test/types/factories/Events__factory.ts index 19b14644a..609f0bb46 100644 --- a/packages/target-ethers-v5-test/types/factories/Events__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/Events__factory.ts @@ -9,7 +9,7 @@ import type { Events } from "../Events"; export class Events__factory { static connect(address: string, signerOrProvider: Signer | Provider): Events { - return (new Contract(address, _abi, signerOrProvider) as unknown) as Events; + return new Contract(address, _abi, signerOrProvider) as Events; } } diff --git a/packages/target-ethers-v5-test/types/factories/LibraryConsumer__factory.ts b/packages/target-ethers-v5-test/types/factories/LibraryConsumer__factory.ts index 67b6730a5..3573d6ad7 100644 --- a/packages/target-ethers-v5-test/types/factories/LibraryConsumer__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/LibraryConsumer__factory.ts @@ -12,11 +12,7 @@ export class LibraryConsumer__factory { address: string, signerOrProvider: Signer | Provider ): LibraryConsumer { - return (new Contract( - address, - _abi, - signerOrProvider - ) as unknown) as LibraryConsumer; + return new Contract(address, _abi, signerOrProvider) as LibraryConsumer; } } diff --git a/packages/target-ethers-v5-test/types/factories/Library__factory.ts b/packages/target-ethers-v5-test/types/factories/Library__factory.ts index ad41aadd8..d957f8f62 100644 --- a/packages/target-ethers-v5-test/types/factories/Library__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/Library__factory.ts @@ -12,11 +12,7 @@ export class Library__factory { address: string, signerOrProvider: Signer | Provider ): Library { - return (new Contract( - address, - _abi, - signerOrProvider - ) as unknown) as Library; + return new Contract(address, _abi, signerOrProvider) as Library; } } diff --git a/packages/target-ethers-v5-test/types/factories/NameMangling__factory.ts b/packages/target-ethers-v5-test/types/factories/NameMangling__factory.ts index 7066f1b82..7df827741 100644 --- a/packages/target-ethers-v5-test/types/factories/NameMangling__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/NameMangling__factory.ts @@ -12,11 +12,7 @@ export class NameMangling__factory { address: string, signerOrProvider: Signer | Provider ): NameMangling { - return (new Contract( - address, - _abi, - signerOrProvider - ) as unknown) as NameMangling; + return new Contract(address, _abi, signerOrProvider) as NameMangling; } } diff --git a/packages/target-ethers-v5-test/types/factories/Overloads__factory.ts b/packages/target-ethers-v5-test/types/factories/Overloads__factory.ts index 4cf150bca..3a8cbbf2a 100644 --- a/packages/target-ethers-v5-test/types/factories/Overloads__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/Overloads__factory.ts @@ -12,11 +12,7 @@ export class Overloads__factory { address: string, signerOrProvider: Signer | Provider ): Overloads { - return (new Contract( - address, - _abi, - signerOrProvider - ) as unknown) as Overloads; + return new Contract(address, _abi, signerOrProvider) as Overloads; } } diff --git a/packages/target-ethers-v5-test/types/factories/PayableFactory__factory.ts b/packages/target-ethers-v5-test/types/factories/PayableFactory__factory.ts index 75a690e87..40fc937b9 100644 --- a/packages/target-ethers-v5-test/types/factories/PayableFactory__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/PayableFactory__factory.ts @@ -12,11 +12,7 @@ export class PayableFactory__factory { address: string, signerOrProvider: Signer | Provider ): PayableFactory { - return (new Contract( - address, - _abi, - signerOrProvider - ) as unknown) as PayableFactory; + return new Contract(address, _abi, signerOrProvider) as PayableFactory; } } diff --git a/packages/target-ethers-v5-test/types/factories/Payable__factory.ts b/packages/target-ethers-v5-test/types/factories/Payable__factory.ts index 7c6df628a..dd53a8afe 100644 --- a/packages/target-ethers-v5-test/types/factories/Payable__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/Payable__factory.ts @@ -12,11 +12,7 @@ export class Payable__factory { address: string, signerOrProvider: Signer | Provider ): Payable { - return (new Contract( - address, - _abi, - signerOrProvider - ) as unknown) as Payable; + return new Contract(address, _abi, signerOrProvider) as Payable; } } From c6b07aac1c2a7571d34bf7d795733b1a0e8342d7 Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Tue, 9 Feb 2021 16:58:52 +0530 Subject: [PATCH 06/11] [ethers-v5] Rename generics to suitable names --- .../target-ethers-v5/src/codegen/index.ts | 20 +++++++++---------- packages/target-ethers-v5/src/index.ts | 8 ++++---- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/target-ethers-v5/src/codegen/index.ts b/packages/target-ethers-v5/src/codegen/index.ts index 31ca964e0..849f3aa42 100644 --- a/packages/target-ethers-v5/src/codegen/index.ts +++ b/packages/target-ethers-v5/src/codegen/index.ts @@ -72,18 +72,18 @@ export function codegenContractTypings(contract: Contract) { removeListener(eventName: string, listener: Listener): this; removeAllListeners(eventName?: string): this; - listeners(eventFilter?: TypedEventFilter): Array>; - off(eventFilter: TypedEventFilter, listener: TypedListener): this; - on(eventFilter: TypedEventFilter, listener: TypedListener): this; - once(eventFilter: TypedEventFilter, listener: TypedListener): this; - removeListener(eventFilter: TypedEventFilter, listener: TypedListener): this; - removeAllListeners(eventFilter: TypedEventFilter): this; - - queryFilter( - event: TypedEventFilter, + listeners, EventArgsObject>(eventFilter?: TypedEventFilter): Array>; + off, EventArgsObject>(eventFilter: TypedEventFilter, listener: TypedListener): this; + on, EventArgsObject>(eventFilter: TypedEventFilter, listener: TypedListener): this; + once, EventArgsObject>(eventFilter: TypedEventFilter, listener: TypedListener): this; + removeListener, EventArgsObject>(eventFilter: TypedEventFilter, listener: TypedListener): this; + removeAllListeners, EventArgsObject>(eventFilter: TypedEventFilter): this; + + queryFilter, EventArgsObject>( + event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>>; + ): Promise>>; interface: ${contract.name}Interface; diff --git a/packages/target-ethers-v5/src/index.ts b/packages/target-ethers-v5/src/index.ts index be3516251..2b0a38d26 100644 --- a/packages/target-ethers-v5/src/index.ts +++ b/packages/target-ethers-v5/src/index.ts @@ -138,13 +138,13 @@ export default class Ethers extends TsGeneratorPlugin { import { EventFilter, Event } from 'ethers' import { Result } from '@ethersproject/abi' - export interface TypedEventFilter extends EventFilter {} + export interface TypedEventFilter extends EventFilter {} - export interface TypedEvent extends Event { - args: T; + export interface TypedEvent extends Event { + args: EventArgs; } - export type TypedListener, G> = (...listenerArg: [...T, TypedEventFilter]) => void;` + export type TypedListener, EventArgsObject> = (...listenerArg: [...EventArgsArray, TypedEventFilter]) => void;` } private genReExports(): string { From 73dd6efae5949f2a3df8ca373892e7aa7bd8823c Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Tue, 9 Feb 2021 17:04:03 +0530 Subject: [PATCH 07/11] [ethers-v5] Move more specific overloads above --- packages/target-ethers-v5/src/codegen/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/target-ethers-v5/src/codegen/index.ts b/packages/target-ethers-v5/src/codegen/index.ts index 849f3aa42..7d8b03db6 100644 --- a/packages/target-ethers-v5/src/codegen/index.ts +++ b/packages/target-ethers-v5/src/codegen/index.ts @@ -65,19 +65,19 @@ export function codegenContractTypings(contract: Contract) { attach(addressOrName: string): this; deployed(): Promise; - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - listeners, EventArgsObject>(eventFilter?: TypedEventFilter): Array>; off, EventArgsObject>(eventFilter: TypedEventFilter, listener: TypedListener): this; on, EventArgsObject>(eventFilter: TypedEventFilter, listener: TypedListener): this; once, EventArgsObject>(eventFilter: TypedEventFilter, listener: TypedListener): this; removeListener, EventArgsObject>(eventFilter: TypedEventFilter, listener: TypedListener): this; removeAllListeners, EventArgsObject>(eventFilter: TypedEventFilter): this; + + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; queryFilter, EventArgsObject>( event: TypedEventFilter, From 4a91a4f81b692ad116fa0e13ddbbe1ec70d6000d Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Tue, 9 Feb 2021 17:05:16 +0530 Subject: [PATCH 08/11] [ethers-v5] Regenerate types --- .../types/DataTypesInput.d.ts | 40 ++++++++++--------- .../types/DataTypesPure.d.ts | 40 ++++++++++--------- .../types/DataTypesView.d.ts | 40 ++++++++++--------- .../target-ethers-v5-test/types/Events.d.ts | 40 ++++++++++--------- .../target-ethers-v5-test/types/Library.d.ts | 40 ++++++++++--------- .../types/LibraryConsumer.d.ts | 40 ++++++++++--------- .../types/NameMangling.d.ts | 40 ++++++++++--------- .../types/Overloads.d.ts | 40 ++++++++++--------- .../target-ethers-v5-test/types/Payable.d.ts | 40 ++++++++++--------- .../types/PayableFactory.d.ts | 40 ++++++++++--------- .../target-ethers-v5-test/types/commons.ts | 17 +++++--- 11 files changed, 222 insertions(+), 195 deletions(-) diff --git a/packages/target-ethers-v5-test/types/DataTypesInput.d.ts b/packages/target-ethers-v5-test/types/DataTypesInput.d.ts index d1859dadc..2b6bb1f38 100644 --- a/packages/target-ethers-v5-test/types/DataTypesInput.d.ts +++ b/packages/target-ethers-v5-test/types/DataTypesInput.d.ts @@ -146,32 +146,34 @@ export class DataTypesInput extends Contract { removeListener(eventName: string, listener: Listener): this; removeAllListeners(eventName?: string): this; - listeners( - eventFilter?: TypedEventFilter - ): Array>; - off( - eventFilter: TypedEventFilter, - listener: TypedListener + listeners, EventArgsObject>( + eventFilter?: TypedEventFilter + ): Array>; + off, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - on( - eventFilter: TypedEventFilter, - listener: TypedListener + on, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - once( - eventFilter: TypedEventFilter, - listener: TypedListener + once, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - removeListener( - eventFilter: TypedEventFilter, - listener: TypedListener + removeListener, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners, EventArgsObject>( + eventFilter: TypedEventFilter ): this; - removeAllListeners(eventFilter: TypedEventFilter): this; - queryFilter( - event: TypedEventFilter, + queryFilter, EventArgsObject>( + event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>>; + ): Promise>>; interface: DataTypesInputInterface; diff --git a/packages/target-ethers-v5-test/types/DataTypesPure.d.ts b/packages/target-ethers-v5-test/types/DataTypesPure.d.ts index 9356a2361..139d856b3 100644 --- a/packages/target-ethers-v5-test/types/DataTypesPure.d.ts +++ b/packages/target-ethers-v5-test/types/DataTypesPure.d.ts @@ -137,32 +137,34 @@ export class DataTypesPure extends Contract { removeListener(eventName: string, listener: Listener): this; removeAllListeners(eventName?: string): this; - listeners( - eventFilter?: TypedEventFilter - ): Array>; - off( - eventFilter: TypedEventFilter, - listener: TypedListener + listeners, EventArgsObject>( + eventFilter?: TypedEventFilter + ): Array>; + off, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - on( - eventFilter: TypedEventFilter, - listener: TypedListener + on, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - once( - eventFilter: TypedEventFilter, - listener: TypedListener + once, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - removeListener( - eventFilter: TypedEventFilter, - listener: TypedListener + removeListener, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners, EventArgsObject>( + eventFilter: TypedEventFilter ): this; - removeAllListeners(eventFilter: TypedEventFilter): this; - queryFilter( - event: TypedEventFilter, + queryFilter, EventArgsObject>( + event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>>; + ): Promise>>; interface: DataTypesPureInterface; diff --git a/packages/target-ethers-v5-test/types/DataTypesView.d.ts b/packages/target-ethers-v5-test/types/DataTypesView.d.ts index d09afae72..763d06d4b 100644 --- a/packages/target-ethers-v5-test/types/DataTypesView.d.ts +++ b/packages/target-ethers-v5-test/types/DataTypesView.d.ts @@ -137,32 +137,34 @@ export class DataTypesView extends Contract { removeListener(eventName: string, listener: Listener): this; removeAllListeners(eventName?: string): this; - listeners( - eventFilter?: TypedEventFilter - ): Array>; - off( - eventFilter: TypedEventFilter, - listener: TypedListener + listeners, EventArgsObject>( + eventFilter?: TypedEventFilter + ): Array>; + off, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - on( - eventFilter: TypedEventFilter, - listener: TypedListener + on, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - once( - eventFilter: TypedEventFilter, - listener: TypedListener + once, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - removeListener( - eventFilter: TypedEventFilter, - listener: TypedListener + removeListener, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners, EventArgsObject>( + eventFilter: TypedEventFilter ): this; - removeAllListeners(eventFilter: TypedEventFilter): this; - queryFilter( - event: TypedEventFilter, + queryFilter, EventArgsObject>( + event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>>; + ): Promise>>; interface: DataTypesViewInterface; diff --git a/packages/target-ethers-v5-test/types/Events.d.ts b/packages/target-ethers-v5-test/types/Events.d.ts index 90f4f9c97..71cee7604 100644 --- a/packages/target-ethers-v5-test/types/Events.d.ts +++ b/packages/target-ethers-v5-test/types/Events.d.ts @@ -94,32 +94,34 @@ export class Events extends Contract { removeListener(eventName: string, listener: Listener): this; removeAllListeners(eventName?: string): this; - listeners( - eventFilter?: TypedEventFilter - ): Array>; - off( - eventFilter: TypedEventFilter, - listener: TypedListener + listeners, EventArgsObject>( + eventFilter?: TypedEventFilter + ): Array>; + off, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - on( - eventFilter: TypedEventFilter, - listener: TypedListener + on, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - once( - eventFilter: TypedEventFilter, - listener: TypedListener + once, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - removeListener( - eventFilter: TypedEventFilter, - listener: TypedListener + removeListener, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners, EventArgsObject>( + eventFilter: TypedEventFilter ): this; - removeAllListeners(eventFilter: TypedEventFilter): this; - queryFilter( - event: TypedEventFilter, + queryFilter, EventArgsObject>( + event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>>; + ): Promise>>; interface: EventsInterface; diff --git a/packages/target-ethers-v5-test/types/Library.d.ts b/packages/target-ethers-v5-test/types/Library.d.ts index 73eb5ffc9..e65b08423 100644 --- a/packages/target-ethers-v5-test/types/Library.d.ts +++ b/packages/target-ethers-v5-test/types/Library.d.ts @@ -44,32 +44,34 @@ export class Library extends Contract { removeListener(eventName: string, listener: Listener): this; removeAllListeners(eventName?: string): this; - listeners( - eventFilter?: TypedEventFilter - ): Array>; - off( - eventFilter: TypedEventFilter, - listener: TypedListener + listeners, EventArgsObject>( + eventFilter?: TypedEventFilter + ): Array>; + off, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - on( - eventFilter: TypedEventFilter, - listener: TypedListener + on, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - once( - eventFilter: TypedEventFilter, - listener: TypedListener + once, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - removeListener( - eventFilter: TypedEventFilter, - listener: TypedListener + removeListener, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners, EventArgsObject>( + eventFilter: TypedEventFilter ): this; - removeAllListeners(eventFilter: TypedEventFilter): this; - queryFilter( - event: TypedEventFilter, + queryFilter, EventArgsObject>( + event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>>; + ): Promise>>; interface: LibraryInterface; diff --git a/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts b/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts index 4d33089c8..4b70ae1cb 100644 --- a/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts +++ b/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts @@ -47,32 +47,34 @@ export class LibraryConsumer extends Contract { removeListener(eventName: string, listener: Listener): this; removeAllListeners(eventName?: string): this; - listeners( - eventFilter?: TypedEventFilter - ): Array>; - off( - eventFilter: TypedEventFilter, - listener: TypedListener + listeners, EventArgsObject>( + eventFilter?: TypedEventFilter + ): Array>; + off, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - on( - eventFilter: TypedEventFilter, - listener: TypedListener + on, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - once( - eventFilter: TypedEventFilter, - listener: TypedListener + once, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - removeListener( - eventFilter: TypedEventFilter, - listener: TypedListener + removeListener, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners, EventArgsObject>( + eventFilter: TypedEventFilter ): this; - removeAllListeners(eventFilter: TypedEventFilter): this; - queryFilter( - event: TypedEventFilter, + queryFilter, EventArgsObject>( + event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>>; + ): Promise>>; interface: LibraryConsumerInterface; diff --git a/packages/target-ethers-v5-test/types/NameMangling.d.ts b/packages/target-ethers-v5-test/types/NameMangling.d.ts index 4a4becfa8..b77055cfe 100644 --- a/packages/target-ethers-v5-test/types/NameMangling.d.ts +++ b/packages/target-ethers-v5-test/types/NameMangling.d.ts @@ -47,32 +47,34 @@ export class NameMangling extends Contract { removeListener(eventName: string, listener: Listener): this; removeAllListeners(eventName?: string): this; - listeners( - eventFilter?: TypedEventFilter - ): Array>; - off( - eventFilter: TypedEventFilter, - listener: TypedListener + listeners, EventArgsObject>( + eventFilter?: TypedEventFilter + ): Array>; + off, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - on( - eventFilter: TypedEventFilter, - listener: TypedListener + on, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - once( - eventFilter: TypedEventFilter, - listener: TypedListener + once, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - removeListener( - eventFilter: TypedEventFilter, - listener: TypedListener + removeListener, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners, EventArgsObject>( + eventFilter: TypedEventFilter ): this; - removeAllListeners(eventFilter: TypedEventFilter): this; - queryFilter( - event: TypedEventFilter, + queryFilter, EventArgsObject>( + event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>>; + ): Promise>>; interface: NameManglingInterface; diff --git a/packages/target-ethers-v5-test/types/Overloads.d.ts b/packages/target-ethers-v5-test/types/Overloads.d.ts index 45f676758..2150fa0f2 100644 --- a/packages/target-ethers-v5-test/types/Overloads.d.ts +++ b/packages/target-ethers-v5-test/types/Overloads.d.ts @@ -47,32 +47,34 @@ export class Overloads extends Contract { removeListener(eventName: string, listener: Listener): this; removeAllListeners(eventName?: string): this; - listeners( - eventFilter?: TypedEventFilter - ): Array>; - off( - eventFilter: TypedEventFilter, - listener: TypedListener + listeners, EventArgsObject>( + eventFilter?: TypedEventFilter + ): Array>; + off, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - on( - eventFilter: TypedEventFilter, - listener: TypedListener + on, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - once( - eventFilter: TypedEventFilter, - listener: TypedListener + once, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - removeListener( - eventFilter: TypedEventFilter, - listener: TypedListener + removeListener, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners, EventArgsObject>( + eventFilter: TypedEventFilter ): this; - removeAllListeners(eventFilter: TypedEventFilter): this; - queryFilter( - event: TypedEventFilter, + queryFilter, EventArgsObject>( + event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>>; + ): Promise>>; interface: OverloadsInterface; diff --git a/packages/target-ethers-v5-test/types/Payable.d.ts b/packages/target-ethers-v5-test/types/Payable.d.ts index b96ce47f8..2ca413511 100644 --- a/packages/target-ethers-v5-test/types/Payable.d.ts +++ b/packages/target-ethers-v5-test/types/Payable.d.ts @@ -61,32 +61,34 @@ export class Payable extends Contract { removeListener(eventName: string, listener: Listener): this; removeAllListeners(eventName?: string): this; - listeners( - eventFilter?: TypedEventFilter - ): Array>; - off( - eventFilter: TypedEventFilter, - listener: TypedListener + listeners, EventArgsObject>( + eventFilter?: TypedEventFilter + ): Array>; + off, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - on( - eventFilter: TypedEventFilter, - listener: TypedListener + on, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - once( - eventFilter: TypedEventFilter, - listener: TypedListener + once, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - removeListener( - eventFilter: TypedEventFilter, - listener: TypedListener + removeListener, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners, EventArgsObject>( + eventFilter: TypedEventFilter ): this; - removeAllListeners(eventFilter: TypedEventFilter): this; - queryFilter( - event: TypedEventFilter, + queryFilter, EventArgsObject>( + event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>>; + ): Promise>>; interface: PayableInterface; diff --git a/packages/target-ethers-v5-test/types/PayableFactory.d.ts b/packages/target-ethers-v5-test/types/PayableFactory.d.ts index 46f09a1ea..bbe2f82b7 100644 --- a/packages/target-ethers-v5-test/types/PayableFactory.d.ts +++ b/packages/target-ethers-v5-test/types/PayableFactory.d.ts @@ -48,32 +48,34 @@ export class PayableFactory extends Contract { removeListener(eventName: string, listener: Listener): this; removeAllListeners(eventName?: string): this; - listeners( - eventFilter?: TypedEventFilter - ): Array>; - off( - eventFilter: TypedEventFilter, - listener: TypedListener + listeners, EventArgsObject>( + eventFilter?: TypedEventFilter + ): Array>; + off, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - on( - eventFilter: TypedEventFilter, - listener: TypedListener + on, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - once( - eventFilter: TypedEventFilter, - listener: TypedListener + once, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener ): this; - removeListener( - eventFilter: TypedEventFilter, - listener: TypedListener + removeListener, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners, EventArgsObject>( + eventFilter: TypedEventFilter ): this; - removeAllListeners(eventFilter: TypedEventFilter): this; - queryFilter( - event: TypedEventFilter, + queryFilter, EventArgsObject>( + event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>>; + ): Promise>>; interface: PayableFactoryInterface; diff --git a/packages/target-ethers-v5-test/types/commons.ts b/packages/target-ethers-v5-test/types/commons.ts index e2f4c4101..99b347176 100644 --- a/packages/target-ethers-v5-test/types/commons.ts +++ b/packages/target-ethers-v5-test/types/commons.ts @@ -5,12 +5,19 @@ import { EventFilter, Event } from "ethers"; import { Result } from "@ethersproject/abi"; -export interface TypedEventFilter extends EventFilter {} +export interface TypedEventFilter + extends EventFilter {} -export interface TypedEvent extends Event { - args: T; +export interface TypedEvent extends Event { + args: EventArgs; } -export type TypedListener, G> = ( - ...listenerArg: [...T, TypedEventFilter] +export type TypedListener< + EventArgsArray extends Array, + EventArgsObject +> = ( + ...listenerArg: [ + ...EventArgsArray, + TypedEventFilter + ] ) => void; From 33e567fc7da544146cb9e0d07e138f86b4d1dc61 Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Tue, 9 Feb 2021 17:14:06 +0530 Subject: [PATCH 09/11] [ethers-v5] Regenerate types --- .../types/DataTypesInput.d.ts | 14 +++++++------- .../target-ethers-v5-test/types/DataTypesPure.d.ts | 14 +++++++------- .../target-ethers-v5-test/types/DataTypesView.d.ts | 14 +++++++------- packages/target-ethers-v5-test/types/Events.d.ts | 14 +++++++------- packages/target-ethers-v5-test/types/Library.d.ts | 14 +++++++------- .../types/LibraryConsumer.d.ts | 14 +++++++------- .../target-ethers-v5-test/types/NameMangling.d.ts | 14 +++++++------- .../target-ethers-v5-test/types/Overloads.d.ts | 14 +++++++------- packages/target-ethers-v5-test/types/Payable.d.ts | 14 +++++++------- .../types/PayableFactory.d.ts | 14 +++++++------- 10 files changed, 70 insertions(+), 70 deletions(-) diff --git a/packages/target-ethers-v5-test/types/DataTypesInput.d.ts b/packages/target-ethers-v5-test/types/DataTypesInput.d.ts index 2b6bb1f38..86e2ce334 100644 --- a/packages/target-ethers-v5-test/types/DataTypesInput.d.ts +++ b/packages/target-ethers-v5-test/types/DataTypesInput.d.ts @@ -139,13 +139,6 @@ export class DataTypesInput extends Contract { attach(addressOrName: string): this; deployed(): Promise; - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - listeners, EventArgsObject>( eventFilter?: TypedEventFilter ): Array>; @@ -169,6 +162,13 @@ export class DataTypesInput extends Contract { eventFilter: TypedEventFilter ): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + queryFilter, EventArgsObject>( event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, diff --git a/packages/target-ethers-v5-test/types/DataTypesPure.d.ts b/packages/target-ethers-v5-test/types/DataTypesPure.d.ts index 139d856b3..97574dd9b 100644 --- a/packages/target-ethers-v5-test/types/DataTypesPure.d.ts +++ b/packages/target-ethers-v5-test/types/DataTypesPure.d.ts @@ -130,13 +130,6 @@ export class DataTypesPure extends Contract { attach(addressOrName: string): this; deployed(): Promise; - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - listeners, EventArgsObject>( eventFilter?: TypedEventFilter ): Array>; @@ -160,6 +153,13 @@ export class DataTypesPure extends Contract { eventFilter: TypedEventFilter ): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + queryFilter, EventArgsObject>( event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, diff --git a/packages/target-ethers-v5-test/types/DataTypesView.d.ts b/packages/target-ethers-v5-test/types/DataTypesView.d.ts index 763d06d4b..fd5e64f36 100644 --- a/packages/target-ethers-v5-test/types/DataTypesView.d.ts +++ b/packages/target-ethers-v5-test/types/DataTypesView.d.ts @@ -130,13 +130,6 @@ export class DataTypesView extends Contract { attach(addressOrName: string): this; deployed(): Promise; - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - listeners, EventArgsObject>( eventFilter?: TypedEventFilter ): Array>; @@ -160,6 +153,13 @@ export class DataTypesView extends Contract { eventFilter: TypedEventFilter ): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + queryFilter, EventArgsObject>( event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, diff --git a/packages/target-ethers-v5-test/types/Events.d.ts b/packages/target-ethers-v5-test/types/Events.d.ts index 71cee7604..e798eead3 100644 --- a/packages/target-ethers-v5-test/types/Events.d.ts +++ b/packages/target-ethers-v5-test/types/Events.d.ts @@ -87,13 +87,6 @@ export class Events extends Contract { attach(addressOrName: string): this; deployed(): Promise; - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - listeners, EventArgsObject>( eventFilter?: TypedEventFilter ): Array>; @@ -117,6 +110,13 @@ export class Events extends Contract { eventFilter: TypedEventFilter ): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + queryFilter, EventArgsObject>( event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, diff --git a/packages/target-ethers-v5-test/types/Library.d.ts b/packages/target-ethers-v5-test/types/Library.d.ts index e65b08423..80bfe18ea 100644 --- a/packages/target-ethers-v5-test/types/Library.d.ts +++ b/packages/target-ethers-v5-test/types/Library.d.ts @@ -37,13 +37,6 @@ export class Library extends Contract { attach(addressOrName: string): this; deployed(): Promise; - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - listeners, EventArgsObject>( eventFilter?: TypedEventFilter ): Array>; @@ -67,6 +60,13 @@ export class Library extends Contract { eventFilter: TypedEventFilter ): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + queryFilter, EventArgsObject>( event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, diff --git a/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts b/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts index 4b70ae1cb..f1022f100 100644 --- a/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts +++ b/packages/target-ethers-v5-test/types/LibraryConsumer.d.ts @@ -40,13 +40,6 @@ export class LibraryConsumer extends Contract { attach(addressOrName: string): this; deployed(): Promise; - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - listeners, EventArgsObject>( eventFilter?: TypedEventFilter ): Array>; @@ -70,6 +63,13 @@ export class LibraryConsumer extends Contract { eventFilter: TypedEventFilter ): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + queryFilter, EventArgsObject>( event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, diff --git a/packages/target-ethers-v5-test/types/NameMangling.d.ts b/packages/target-ethers-v5-test/types/NameMangling.d.ts index b77055cfe..3e58b5739 100644 --- a/packages/target-ethers-v5-test/types/NameMangling.d.ts +++ b/packages/target-ethers-v5-test/types/NameMangling.d.ts @@ -40,13 +40,6 @@ export class NameMangling extends Contract { attach(addressOrName: string): this; deployed(): Promise; - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - listeners, EventArgsObject>( eventFilter?: TypedEventFilter ): Array>; @@ -70,6 +63,13 @@ export class NameMangling extends Contract { eventFilter: TypedEventFilter ): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + queryFilter, EventArgsObject>( event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, diff --git a/packages/target-ethers-v5-test/types/Overloads.d.ts b/packages/target-ethers-v5-test/types/Overloads.d.ts index 2150fa0f2..505946545 100644 --- a/packages/target-ethers-v5-test/types/Overloads.d.ts +++ b/packages/target-ethers-v5-test/types/Overloads.d.ts @@ -40,13 +40,6 @@ export class Overloads extends Contract { attach(addressOrName: string): this; deployed(): Promise; - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - listeners, EventArgsObject>( eventFilter?: TypedEventFilter ): Array>; @@ -70,6 +63,13 @@ export class Overloads extends Contract { eventFilter: TypedEventFilter ): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + queryFilter, EventArgsObject>( event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, diff --git a/packages/target-ethers-v5-test/types/Payable.d.ts b/packages/target-ethers-v5-test/types/Payable.d.ts index 2ca413511..eaffcd07f 100644 --- a/packages/target-ethers-v5-test/types/Payable.d.ts +++ b/packages/target-ethers-v5-test/types/Payable.d.ts @@ -54,13 +54,6 @@ export class Payable extends Contract { attach(addressOrName: string): this; deployed(): Promise; - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - listeners, EventArgsObject>( eventFilter?: TypedEventFilter ): Array>; @@ -84,6 +77,13 @@ export class Payable extends Contract { eventFilter: TypedEventFilter ): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + queryFilter, EventArgsObject>( event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, diff --git a/packages/target-ethers-v5-test/types/PayableFactory.d.ts b/packages/target-ethers-v5-test/types/PayableFactory.d.ts index bbe2f82b7..e67ea8bce 100644 --- a/packages/target-ethers-v5-test/types/PayableFactory.d.ts +++ b/packages/target-ethers-v5-test/types/PayableFactory.d.ts @@ -41,13 +41,6 @@ export class PayableFactory extends Contract { attach(addressOrName: string): this; deployed(): Promise; - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - listeners, EventArgsObject>( eventFilter?: TypedEventFilter ): Array>; @@ -71,6 +64,13 @@ export class PayableFactory extends Contract { eventFilter: TypedEventFilter ): this; + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + queryFilter, EventArgsObject>( event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, From cff01b0f6f044a882a561e19a7610e0f76769966 Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Sat, 20 Feb 2021 15:17:32 +0530 Subject: [PATCH 10/11] [ethers-v5] Fix TypedListener bug and regen types --- packages/target-ethers-v5-test/types/commons.ts | 2 +- packages/target-ethers-v5/src/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/target-ethers-v5-test/types/commons.ts b/packages/target-ethers-v5-test/types/commons.ts index 99b347176..353ce1884 100644 --- a/packages/target-ethers-v5-test/types/commons.ts +++ b/packages/target-ethers-v5-test/types/commons.ts @@ -18,6 +18,6 @@ export type TypedListener< > = ( ...listenerArg: [ ...EventArgsArray, - TypedEventFilter + TypedEvent ] ) => void; diff --git a/packages/target-ethers-v5/src/index.ts b/packages/target-ethers-v5/src/index.ts index 2b0a38d26..377a414d6 100644 --- a/packages/target-ethers-v5/src/index.ts +++ b/packages/target-ethers-v5/src/index.ts @@ -144,7 +144,7 @@ export default class Ethers extends TsGeneratorPlugin { args: EventArgs; } - export type TypedListener, EventArgsObject> = (...listenerArg: [...EventArgsArray, TypedEventFilter]) => void;` + export type TypedListener, EventArgsObject> = (...listenerArg: [...EventArgsArray, TypedEvent]) => void;` } private genReExports(): string { From ca120c79fbc9af866290dedcba19b30b88dc0f2b Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Sat, 20 Feb 2021 15:19:49 +0530 Subject: [PATCH 11/11] [ethers-v5] Add tests for events --- .../target-ethers-v5-test/test/Events.test.ts | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 packages/target-ethers-v5-test/test/Events.test.ts diff --git a/packages/target-ethers-v5-test/test/Events.test.ts b/packages/target-ethers-v5-test/test/Events.test.ts new file mode 100644 index 000000000..c9e6ea3ab --- /dev/null +++ b/packages/target-ethers-v5-test/test/Events.test.ts @@ -0,0 +1,74 @@ +import { typedAssert } from 'test-utils' +import { ethers, BigNumber } from 'ethers' + +import { createNewBlockchain, deployContract } from './common' +import { Events } from '../types/Events' + +describe('Events', () => { + let contract!: Events + let ganache: any + beforeEach(async () => { + const { ganache: _ganache, signer } = await createNewBlockchain() + signer.provider.pollingInterval = 100 + ganache = _ganache + contract = await deployContract(signer, 'Events') + }) + + afterEach(async () => { + contract.removeAllListeners('Event1') + ganache.close() + }) + + it('queryFilter', async () => { + await contract.emit_event1() + + const filter = contract.filters.Event1(null, null) + const results = await contract.queryFilter(filter) + results.map((r) => { + typedAssert(r.args.value1, BigNumber.from(1)) + typedAssert(r.args.value2, BigNumber.from(2)) + typedAssert(r.args[0], BigNumber.from(1)) + typedAssert(r.args[1], BigNumber.from(2)) + }) + }) + + it('contract.on', async () => { + const filter = contract.filters.Event1(null, null) + const results = await contract.queryFilter(filter) + + contract.on(filter, (a, b, c) => { + typedAssert(a, BigNumber.from(1)) + typedAssert(b, BigNumber.from(2)) + const args = [a, b] as [ethers.BigNumber, ethers.BigNumber] & { + value1: ethers.BigNumber + value2: ethers.BigNumber + } + args.value1 = a + args.value2 = b + typedAssert(c.args, args) + }) + + await contract.emit_event1() + await new Promise((r) => setTimeout(r, 1000)) + }) + + it('contract.once', async () => { + const filter = contract.filters.Event1(null, null) + const results = await contract.queryFilter(filter) + + contract.once(filter, (a, b, c) => { + typedAssert(a, BigNumber.from(1)) + typedAssert(b, BigNumber.from(2)) + const args = [a, b] as [ethers.BigNumber, ethers.BigNumber] & { + value1: ethers.BigNumber + value2: ethers.BigNumber + } + args.value1 = a + args.value2 = b + typedAssert(c.args, args) + }) + + await contract.emit_event1() + await new Promise((r) => setTimeout(r, 1000)) + }) +})