hardhat
Version:
Hardhat is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.
146 lines (128 loc) • 4.56 kB
text/typescript
import type {
HardhatRuntimeEnvironmentHooks,
HookManager,
} from "../../../../types/hooks.js";
import type {
BuildOptions,
CompilationJobCreationError,
CompileBuildInfoOptions,
EmitArtifactsResult,
FileBuildResult,
GetCompilationJobsOptions,
GetCompilationJobsResult,
RunCompilationJobOptions,
RunCompilationJobResult,
SolidityBuildSystem,
BuildScope,
} from "../../../../types/solidity/build-system.js";
import type { CompilationJob } from "../../../../types/solidity/compilation-job.js";
import type {
CompilerOutput,
CompilerOutputError,
} from "../../../../types/solidity/compiler-io.js";
import type { SolidityBuildInfo } from "../../../../types/solidity.js";
import type { SolidityBuildSystemOptions } from "../build-system/build-system.js";
class LazySolidityBuildSystem implements SolidityBuildSystem {
readonly
readonly
constructor(hooks: HookManager, options: SolidityBuildSystemOptions) {
this.
this.
}
public async getRootFilePaths(
options: { scope?: BuildScope } = {},
): Promise<string[]> {
const buildSystem = await this.
return buildSystem.getRootFilePaths(options);
}
public async getScope(fsPath: string): Promise<BuildScope> {
const buildSystem = await this.
return buildSystem.getScope(fsPath);
}
public async build(
rootFiles: string[],
options?: BuildOptions,
): Promise<CompilationJobCreationError | Map<string, FileBuildResult>> {
const buildSystem = await this.
return buildSystem.build(rootFiles, options);
}
public async getCompilationJobs(
rootFiles: string[],
options?: GetCompilationJobsOptions,
): Promise<CompilationJobCreationError | GetCompilationJobsResult> {
const buildSystem = await this.
return buildSystem.getCompilationJobs(rootFiles, options);
}
public async runCompilationJob(
compilationJob: CompilationJob,
options?: RunCompilationJobOptions,
): Promise<RunCompilationJobResult> {
const buildSystem = await this.
return buildSystem.runCompilationJob(compilationJob, options);
}
public async remapCompilerError(
compilationJob: CompilationJob,
error: CompilerOutputError,
shouldShortenPaths?: boolean,
): Promise<CompilerOutputError> {
const buildSystem = await this.
return buildSystem.remapCompilerError(
compilationJob,
error,
shouldShortenPaths,
);
}
public async emitArtifacts(
compilationJob: CompilationJob,
compilerOutput: CompilerOutput,
options: { scope?: BuildScope } = {},
): Promise<EmitArtifactsResult> {
const buildSystem = await this.
return buildSystem.emitArtifacts(compilationJob, compilerOutput, options);
}
public async cleanupArtifacts(
rootFilePaths: string[],
options: { scope?: BuildScope } = {},
): Promise<void> {
const buildSystem = await this.
return buildSystem.cleanupArtifacts(rootFilePaths, options);
}
public async compileBuildInfo(
buildInfo: SolidityBuildInfo,
options?: CompileBuildInfoOptions,
): Promise<CompilerOutput> {
const buildSystem = await this.
return buildSystem.compileBuildInfo(buildInfo, options);
}
public async getArtifactsDirectory(scope: BuildScope): Promise<string> {
const buildSystem = await this.
return buildSystem.getArtifactsDirectory(scope);
}
async
const { SolidityBuildSystemImplementation } = await import(
"../build-system/build-system.js"
);
if (this.
this.
this.
this.
);
}
return this.
}
}
export default async (): Promise<Partial<HardhatRuntimeEnvironmentHooks>> => {
return {
created: async (_context, hre) => {
hre.solidity = new LazySolidityBuildSystem(hre.hooks, {
solidityConfig: hre.config.solidity,
projectRoot: hre.config.paths.root,
soliditySourcesPaths: hre.config.paths.sources.solidity,
artifactsPath: hre.config.paths.artifacts,
cachePath: hre.config.paths.cache,
solidityTestsPath: hre.config.paths.tests.solidity,
});
},
};
};