UNPKG

hardhat

Version:

Hardhat is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.

167 lines 6.65 kB
import { Artifacts } from "./artifacts"; import { HardhatConfig, HardhatUserConfig, NetworkConfig } from "./config"; import { EIP1193Provider, EthereumProvider } from "./provider"; /** * This class is used to dynamically validate task's argument types. */ export interface ArgumentType<T> { /** * The type's name. */ name: string; /** * Check if argument value is of type <T>. * * @param argName {string} argument's name - used for context in case of error. * @param argumentValue - value to be validated * * @throws HH301 if value is not of type <t> */ validate(argName: string, argumentValue: any): void; } /** * This is a special case of ArgumentType. * * These types must have a human-friendly string representation, so that they * can be used as command line arguments. */ export interface CLIArgumentType<T> extends ArgumentType<T> { /** * Parses strValue into T. This function MUST throw HH301 if it * can parse the given value. * * @param argName argument's name - used for context in case of error. * @param strValue argument's string value to be parsed. */ parse(argName: string, strValue: string): T; } export interface ConfigurableTaskDefinition { setDescription(description: string): this; setAction(action: ActionType<TaskArguments>): this; addParam<T>(name: string, description?: string, defaultValue?: T, type?: ArgumentType<T>, isOptional?: boolean): this; addOptionalParam<T>(name: string, description?: string, defaultValue?: T, type?: ArgumentType<T>): this; addPositionalParam<T>(name: string, description?: string, defaultValue?: T, type?: ArgumentType<T>, isOptional?: boolean): this; addOptionalPositionalParam<T>(name: string, description?: string, defaultValue?: T, type?: ArgumentType<T>): this; addVariadicPositionalParam<T>(name: string, description?: string, defaultValue?: T[], type?: ArgumentType<T>, isOptional?: boolean): this; addOptionalVariadicPositionalParam<T>(name: string, description?: string, defaultValue?: T[], type?: ArgumentType<T>): this; addFlag(name: string, description?: string): this; } declare function addTask<TaskArgumentsT extends TaskArguments>(name: string, description?: string, action?: ActionType<TaskArgumentsT>): ConfigurableTaskDefinition; declare function addTask<TaskArgumentsT extends TaskArguments>(name: string, action: ActionType<TaskArgumentsT>): ConfigurableTaskDefinition; type AddConfigurableTaskFunction = typeof addTask; export interface ConfigurableScopeDefinition { setDescription(description: string): this; task: AddConfigurableTaskFunction; subtask: AddConfigurableTaskFunction; } export interface ParamDefinition<T> { name: string; defaultValue?: T; type: ArgumentType<T>; description?: string; isOptional: boolean; isFlag: boolean; isVariadic: boolean; } export interface OptionalParamDefinition<T> extends ParamDefinition<T> { defaultValue: T; isOptional: true; } export interface CLIOptionalParamDefinition<T> extends OptionalParamDefinition<T> { type: CLIArgumentType<T>; } export interface ParamDefinitionsMap { [paramName: string]: ParamDefinition<any>; } export interface TaskDefinition extends ConfigurableTaskDefinition { readonly scope?: string; readonly name: string; readonly description?: string; readonly action: ActionType<TaskArguments>; readonly isSubtask: boolean; readonly paramDefinitions: ParamDefinitionsMap; readonly positionalParamDefinitions: Array<ParamDefinition<any>>; } export interface ScopeDefinition extends ConfigurableScopeDefinition { readonly name: string; readonly description?: string; readonly tasks: TasksMap; } export type TaskIdentifier = string | { scope?: string; task: string; }; /** * @type TaskArguments {object-like} - the input arguments for a task. * * TaskArguments type is set to 'any' because it's interface is dynamic. * It's impossible in TypeScript to statically specify a variadic * number of fields and at the same time define specific types for\ * the argument values. * * For example, we could define: * type TaskArguments = Record<string, any>; * * ...but then, we couldn't narrow the actual argument value's type in compile time, * thus we have no other option than forcing it to be just 'any'. */ export type TaskArguments = any; export interface SubtaskArguments { [subtaskName: string]: TaskArguments; } export interface RunSuperFunction<TaskArgumentsT extends TaskArguments> { (taskArguments?: TaskArgumentsT, subtaskArguments?: SubtaskArguments): Promise<any>; isDefined: boolean; } export type ActionType<TaskArgumentsT extends TaskArguments> = (taskArgs: TaskArgumentsT, env: HardhatRuntimeEnvironment, runSuper: RunSuperFunction<TaskArgumentsT>) => Promise<any>; export interface HardhatArguments { network?: string; showStackTraces: boolean; version: boolean; help: boolean; emoji: boolean; config?: string; verbose: boolean; maxMemory?: number; tsconfig?: string; flamegraph?: boolean; typecheck?: boolean; } export type HardhatParamDefinitions = { [param in keyof Required<HardhatArguments>]: CLIOptionalParamDefinition<HardhatArguments[param]>; }; export interface TasksMap { [name: string]: TaskDefinition; } export interface ScopesMap { [scopeName: string]: ScopeDefinition; } export type RunTaskFunction = (taskIdentifier: TaskIdentifier, taskArguments?: TaskArguments, subtaskArguments?: SubtaskArguments) => Promise<any>; export interface HardhatRuntimeEnvironment { readonly config: HardhatConfig; readonly userConfig: HardhatUserConfig; readonly hardhatArguments: HardhatArguments; readonly tasks: TasksMap; readonly scopes: ScopesMap; readonly run: RunTaskFunction; readonly network: Network; readonly artifacts: Artifacts; readonly version: string; } export interface Network { name: string; config: NetworkConfig; provider: EthereumProvider; } /** * A function that receives a HardhatRuntimeEnvironment and * modify its properties or add new ones. */ export type EnvironmentExtender = (env: HardhatRuntimeEnvironment) => void; /** * A function that receives a provider, crafts and returns a new one. * Adding and modifying the current provider is preferred over ignoring it and returning a new instance. */ export type ProviderExtender = (provider: EIP1193Provider, config: HardhatConfig, network: string) => EIP1193Provider | Promise<EIP1193Provider>; export {}; //# sourceMappingURL=runtime.d.ts.map