1
1
import type { HardhatUserConfig } from "../../../config.js" ;
2
2
import type {
3
3
HardhatConfig ,
4
+ MultiVersionSolidityUserConfig ,
5
+ SingleVersionSolidityUserConfig ,
6
+ SolcConfig ,
7
+ SolcUserConfig ,
4
8
SolidityBuildProfileConfig ,
5
9
SolidityConfig ,
6
10
SolidityUserConfig ,
@@ -213,71 +217,29 @@ function resolveSolidityConfig(
213
217
solidityConfig = [ solidityConfig ] ;
214
218
}
215
219
220
+ // user provided an array of versions or a single version
216
221
if ( Array . isArray ( solidityConfig ) ) {
217
222
return {
218
223
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
+ } ) ,
228
227
} ,
229
228
npmFilesToBuild : [ ] ,
230
229
} ;
231
230
}
232
231
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 ) {
253
234
return {
254
235
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 ) ,
276
237
} ,
277
238
npmFilesToBuild : solidityConfig . npmFilesToBuild ?? [ ] ,
278
239
} ;
279
240
}
280
241
242
+ // user provided a build profiles config
281
243
const profiles : Record < string , SolidityBuildProfileConfig > = { } ;
282
244
283
245
// TODO: Merge the profiles
@@ -287,42 +249,11 @@ function resolveSolidityConfig(
287
249
const isolated = profile . isolated ?? profileName === "production" ;
288
250
const preferWasm = profile . preferWasm ?? profileName === "production" ;
289
251
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 ,
323
254
isolated,
324
255
preferWasm,
325
- } ;
256
+ } ) ;
326
257
}
327
258
328
259
// 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(
341
272
npmFilesToBuild : solidityConfig . npmFilesToBuild ?? [ ] ,
342
273
} ;
343
274
}
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