Skip to content

Commit c6f2e4a

Browse files
committed
Make slow imports dynamic in hardhat-core
1 parent c1c2159 commit c6f2e4a

File tree

4 files changed

+25
-5
lines changed

4 files changed

+25
-5
lines changed

packages/hardhat-core/src/internal/core/config/config-loading.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type StackTraceParserT from "stacktrace-parser";
2+
import type { ConfigValidationT } from "./config-validation";
23

34
import chalk from "chalk";
45
import debug from "debug";
@@ -20,7 +21,6 @@ import { getUserConfigPath } from "../project-structure";
2021

2122
import { SUPPORTED_SOLIDITY_VERSION_RANGE } from "../../hardhat-network/stack-traces/constants";
2223
import { resolveConfig } from "./config-resolution";
23-
import { validateConfig, validateResolvedConfig } from "./config-validation";
2424
import { DEFAULT_SOLC_VERSION } from "./default-config";
2525

2626
const log = debug("hardhat:core:config");
@@ -68,6 +68,8 @@ export function loadConfigAndTasks(
6868
showSolidityConfigWarnings: false,
6969
}
7070
): { resolvedConfig: HardhatConfig; userConfig: HardhatUserConfig } {
71+
const { validateConfig, validateResolvedConfig } =
72+
require("./config-validation") as ConfigValidationT;
7173
let configPath =
7274
hardhatArguments !== undefined ? hardhatArguments.config : undefined;
7375

packages/hardhat-core/src/internal/core/config/config-resolution.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import cloneDeep from "lodash/cloneDeep";
1+
import type { LoDashStatic } from "lodash";
2+
23
import path from "path";
34
import semver from "semver";
45

@@ -62,6 +63,7 @@ export function resolveConfig(
6263
userConfigPath: string,
6364
userConfig: HardhatUserConfig
6465
): HardhatConfig {
66+
const cloneDeep = require("lodash/cloneDeep") as LoDashStatic["cloneDeep"];
6567
userConfig = cloneDeep(userConfig);
6668

6769
return {
@@ -77,6 +79,7 @@ export function resolveConfig(
7779
function resolveNetworksConfig(
7880
networksConfig: NetworksUserConfig = {}
7981
): NetworksConfig {
82+
const cloneDeep = require("lodash/cloneDeep") as LoDashStatic["cloneDeep"];
8083
const hardhatNetworkConfig = networksConfig[HARDHAT_NETWORK_NAME];
8184

8285
const localhostNetworkConfig =
@@ -128,6 +131,7 @@ function normalizeHexString(str: string): string {
128131
function resolveHardhatNetworkConfig(
129132
hardhatNetworkConfig: HardhatNetworkUserConfig = {}
130133
): HardhatNetworkConfig {
134+
const cloneDeep = require("lodash/cloneDeep") as LoDashStatic["cloneDeep"];
131135
const clonedDefaultHardhatNetworkParams = cloneDeep(
132136
defaultHardhatNetworkParams
133137
);
@@ -246,6 +250,7 @@ function isHdAccountsConfig(
246250
function resolveHttpNetworkConfig(
247251
networkConfig: HttpNetworkUserConfig
248252
): HttpNetworkConfig {
253+
const cloneDeep = require("lodash/cloneDeep") as LoDashStatic["cloneDeep"];
249254
const accounts: HttpNetworkAccountsConfig =
250255
networkConfig.accounts === undefined
251256
? defaultHttpNetworkParams.accounts
@@ -427,6 +432,7 @@ function resolveCompiler(compiler: SolcUserConfig): SolcConfig {
427432
}
428433

429434
function resolveMochaConfig(userConfig: HardhatUserConfig): Mocha.MochaOptions {
435+
const cloneDeep = require("lodash/cloneDeep") as LoDashStatic["cloneDeep"];
430436
return {
431437
...cloneDeep(defaultMochaOptions),
432438
...userConfig.mocha,

packages/hardhat-core/src/internal/core/config/config-validation.ts

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import type { HardhatConfig as HardhatConfigT } from "../../../types";
2+
import type {
3+
Context,
4+
ValidationError,
5+
getFunctionName as getFunctionNameT,
6+
} from "io-ts/lib";
7+
import type { Reporter } from "io-ts/lib/Reporter";
28

39
import * as t from "io-ts";
4-
import { Context, getFunctionName, ValidationError } from "io-ts/lib";
5-
import { Reporter } from "io-ts/lib/Reporter";
610

711
import {
812
HARDHAT_MEMPOOL_SUPPORTED_ORDERS,
@@ -17,8 +21,16 @@ import { hardforkGte, HardforkName } from "../../util/hardforks";
1721
import { HardhatNetworkChainUserConfig } from "../../../types/config";
1822
import { defaultHardhatNetworkParams } from "./default-config";
1923

24+
export interface ConfigValidationT {
25+
validateConfig: typeof validateConfig;
26+
validateResolvedConfig: typeof validateResolvedConfig;
27+
}
28+
2029
function stringify(v: any): string {
2130
if (typeof v === "function") {
31+
const { getFunctionName } = require("io-ts/lib") as {
32+
getFunctionName: typeof getFunctionNameT;
33+
};
2234
return getFunctionName(v);
2335
}
2436
if (typeof v === "number" && !isFinite(v)) {

packages/hardhat-core/src/internal/sentry/transport.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Event, Response } from "@sentry/node";
1+
import type { Event, Response } from "@sentry/node";
22
import { spawn } from "child_process";
33
import * as path from "path";
44

0 commit comments

Comments
 (0)