Skip to content

Commit cee9e9d

Browse files
committed
refactor: extract build profile resolution to a function
1 parent 1ae1419 commit cee9e9d

File tree

1 file changed

+51
-84
lines changed
  • v-next/hardhat/src/internal/builtin-plugins/solidity

1 file changed

+51
-84
lines changed

v-next/hardhat/src/internal/builtin-plugins/solidity/config.ts

Lines changed: 51 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import type { HardhatUserConfig } from "../../../config.js";
22
import type {
33
HardhatConfig,
4+
MultiVersionSolidityUserConfig,
5+
SingleVersionSolidityUserConfig,
6+
SolcConfig,
7+
SolcUserConfig,
48
SolidityBuildProfileConfig,
59
SolidityConfig,
610
SolidityUserConfig,
@@ -213,71 +217,29 @@ function resolveSolidityConfig(
213217
solidityConfig = [solidityConfig];
214218
}
215219

220+
// user provided an array of versions or a single version
216221
if (Array.isArray(solidityConfig)) {
217222
return {
218223
profiles: {
219-
default: {
220-
compilers: solidityConfig.map((version) => ({
221-
version,
222-
settings: {},
223-
})),
224-
overrides: {},
225-
isolated: false,
226-
preferWasm: false,
227-
},
224+
default: resolveBuildProfileConfig({
225+
compilers: solidityConfig.map((version) => ({ version })),
226+
}),
228227
},
229228
npmFilesToBuild: [],
230229
};
231230
}
232231

233-
if ("version" in solidityConfig) {
234-
return {
235-
profiles: {
236-
default: {
237-
compilers: [
238-
{
239-
version: solidityConfig.version,
240-
settings: solidityConfig.settings ?? {},
241-
},
242-
],
243-
overrides: {},
244-
isolated: solidityConfig.isolated ?? false,
245-
preferWasm: solidityConfig.preferWasm ?? false,
246-
},
247-
},
248-
npmFilesToBuild: solidityConfig.npmFilesToBuild ?? [],
249-
};
250-
}
251-
252-
if ("compilers" in solidityConfig) {
232+
// user provided a single version config or a multi version config
233+
if ("version" in solidityConfig || "compilers" in solidityConfig) {
253234
return {
254235
profiles: {
255-
default: {
256-
preferWasm: solidityConfig.preferWasm ?? false,
257-
compilers: solidityConfig.compilers.map((compiler) => ({
258-
version: compiler.version,
259-
settings: compiler.settings ?? {},
260-
})),
261-
overrides: Object.fromEntries(
262-
Object.entries(solidityConfig.overrides ?? {}).map(
263-
([userSourceName, override]) => {
264-
return [
265-
userSourceName,
266-
{
267-
version: override.version,
268-
settings: override.settings ?? {},
269-
},
270-
];
271-
},
272-
),
273-
),
274-
isolated: solidityConfig.isolated ?? false,
275-
},
236+
default: resolveBuildProfileConfig(solidityConfig),
276237
},
277238
npmFilesToBuild: solidityConfig.npmFilesToBuild ?? [],
278239
};
279240
}
280241

242+
// user provided a build profiles config
281243
const profiles: Record<string, SolidityBuildProfileConfig> = {};
282244

283245
// TODO: Merge the profiles
@@ -287,42 +249,11 @@ function resolveSolidityConfig(
287249
const isolated = profile.isolated ?? profileName === "production";
288250
const preferWasm = profile.preferWasm ?? profileName === "production";
289251

290-
if ("version" in profile) {
291-
profiles[profileName] = {
292-
compilers: [
293-
{
294-
version: profile.version,
295-
settings: profile.settings ?? {},
296-
},
297-
],
298-
overrides: {},
299-
isolated,
300-
preferWasm,
301-
};
302-
continue;
303-
}
304-
305-
profiles[profileName] = {
306-
compilers: profile.compilers.map((compiler) => ({
307-
version: compiler.version,
308-
settings: compiler.settings ?? {},
309-
})),
310-
overrides: Object.fromEntries(
311-
Object.entries(profile.overrides ?? {}).map(
312-
([userSourceName, override]) => {
313-
return [
314-
userSourceName,
315-
{
316-
version: override.version,
317-
settings: override.settings ?? {},
318-
},
319-
];
320-
},
321-
),
322-
),
252+
profiles[profileName] = resolveBuildProfileConfig({
253+
...profile,
323254
isolated,
324255
preferWasm,
325-
};
256+
});
326257
}
327258

328259
// This will generate default build profiles (e.g. production) when they are not specified in the config, cloning from 'default', which is always present
@@ -341,3 +272,39 @@ function resolveSolidityConfig(
341272
npmFilesToBuild: solidityConfig.npmFilesToBuild ?? [],
342273
};
343274
}
275+
276+
function resolveBuildProfileConfig(
277+
solidityConfig:
278+
| SingleVersionSolidityUserConfig
279+
| MultiVersionSolidityUserConfig,
280+
): SolidityBuildProfileConfig {
281+
if ("version" in solidityConfig) {
282+
return {
283+
compilers: [resolveSolcConfig(solidityConfig)],
284+
overrides: {},
285+
isolated: solidityConfig.isolated ?? false,
286+
preferWasm: solidityConfig.preferWasm ?? false,
287+
};
288+
}
289+
290+
return {
291+
compilers: solidityConfig.compilers.map(resolveSolcConfig),
292+
overrides: Object.fromEntries(
293+
Object.entries(solidityConfig.overrides ?? {}).map(
294+
([userSourceName, override]) => [
295+
userSourceName,
296+
resolveSolcConfig(override),
297+
],
298+
),
299+
),
300+
isolated: solidityConfig.isolated ?? false,
301+
preferWasm: solidityConfig.preferWasm ?? false,
302+
};
303+
}
304+
305+
function resolveSolcConfig(solcConfig: SolcUserConfig): SolcConfig {
306+
return {
307+
version: solcConfig.version,
308+
settings: solcConfig.settings ?? {},
309+
};
310+
}

0 commit comments

Comments
 (0)