hardhat
Version:
Hardhat is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.
100 lines • 3.46 kB
TypeScript
import type { GlobalOptionDefinition } from "./arguments.js";
import type { HardhatHooks } from "./hooks.js";
import type { TaskDefinition } from "./tasks.js";
import "../internal/builtin-plugins/index.js";
declare module "./config.js" {
interface HardhatUserConfig {
plugins?: HardhatPlugin[];
}
interface HardhatConfig {
plugins: HardhatPlugin[];
}
}
/**
* A Hardhat plugin.
*/
export interface HardhatPlugin {
/**
* A unique id of the plugin.
*/
id: string;
/**
* The npm package where the plugin is located, if any.
*/
npmPackage?: string | null;
/**
* An array of plugins that this plugin depends on.
*/
dependencies?: () => Array<Promise<{
default: HardhatPlugin;
}>>;
conditionalDependencies?: Array<{
condition: () => Array<Promise<{
default: HardhatPlugin;
}>>;
plugin: () => Promise<{
default: HardhatPlugin;
}>;
}>;
/**
* An object with the different hook handlers that this plugin defines.
*
* The complete list of hooks is defined in the type `HardhatHooks`, which the
* plugins that you depend on can extend.
*
* There's an entry for each hook category, that is, an entry for every entry
* in `HardhatHooks`.
*
* Each entry defines a `HookHandlerCategoryFactory`, which is an async
* function that returns a `HookHandlerCategory` object.
*
* Each `HookHandlerCategoryFactory` is called lazily, when needed, and at
* most once per instance of the `HardhatRuntimeEnvironment`.
*
* These object contain handlers for one or more hooks in that category.
*
* For example, the entry `config` can defined a `HookHandlerCategoryFactory`
* returning an object with a handler for the `extendUserConfig` hook.
*
* You can define each factory in two ways:
* - As an inline function.
* - As a string with the path to a file that exports the factory as `default`.
*
* The first option should only be used for development. You MUST use the second
* option for production.
*/
hookHandlers?: HookHandlerCategoryFactories;
/**
* An array of the global options that this plugin defines.
*/
globalOptions?: GlobalOptionDefinition[];
/**
* An array of type definitions, which should be created using their builders.
*
* Each entry either defines or overrides a task. To override a tasks, it must
* have been defined before, either by a plugin you depend on or by Hardhat
* itself.
*/
tasks?: TaskDefinition[];
}
/**
* An object with the factories for the different hook handler categories that a plugin can define.
*
* @see HardhatPlugin#hookHandlers
*/
export type HookHandlerCategoryFactories = {
[HookCategoryNameT in keyof HardhatHooks]?: () => Promise<{
default: HookHandlerCategoryFactory<HookCategoryNameT>;
}>;
};
/**
* A function that returns a `HookHandlerCategory` object, containing handlers
* for one or more hooks of a certain category.
*
* A factory is called lazily, when needed, and at most once per instance of the
* `HardhatRuntimeEnvironment`.
*
* @see HardhatPlugin#hookHandlers
*/
export type HookHandlerCategoryFactory<CategoryNameT extends keyof HardhatHooks> = () => Promise<Partial<HardhatHooks[CategoryNameT]>>;
//# sourceMappingURL=plugins.d.ts.map