diff --git a/.changeset/late-rivers-applaud.md b/.changeset/late-rivers-applaud.md new file mode 100644 index 0000000..1f5f462 --- /dev/null +++ b/.changeset/late-rivers-applaud.md @@ -0,0 +1,5 @@ +--- +"@foundry-rs/hardhat-forge": patch +--- + +Add build_info_path config diff --git a/.changeset/lazy-news-hide.md b/.changeset/lazy-news-hide.md new file mode 100644 index 0000000..fda7a9a --- /dev/null +++ b/.changeset/lazy-news-hide.md @@ -0,0 +1,5 @@ +--- +"@foundry-rs/hardhat-forge": patch +--- + +Deserialize compiler output metadata in buildinfo diff --git a/packages/hardhat-forge/src/forge/artifacts.ts b/packages/hardhat-forge/src/forge/artifacts.ts index ada90dc..fd88945 100644 --- a/packages/hardhat-forge/src/forge/artifacts.ts +++ b/packages/hardhat-forge/src/forge/artifacts.ts @@ -143,6 +143,16 @@ export class ForgeArtifacts implements IArtifacts { } const buildInfo = fsExtra.readJsonSync(buildInfoPath) as BuildInfo; + + // Handle ethers-solc serializing the metadata as a string + // when hardhat serializes it as an object + for (const contract of Object.values(buildInfo.output.contracts)) { + for (const output of Object.values(contract)) { + if (typeof (output as any).metadata === "string") { + (output as any).metadata = JSON.parse((output as any).metadata); + } + } + } return buildInfo; } diff --git a/packages/hardhat-forge/test/project.test.ts b/packages/hardhat-forge/test/project.test.ts index a8fec84..5bdacfe 100644 --- a/packages/hardhat-forge/test/project.test.ts +++ b/packages/hardhat-forge/test/project.test.ts @@ -78,6 +78,7 @@ describe("Integration tests", function () { assert.exists(contract.abi); assert.exists((contract as any).devdoc); assert.exists((contract as any).metadata); + assert.typeOf((contract as any).metadata, "object"); assert.exists((contract as any).storageLayout); assert.exists((contract as any).userdoc); assert.exists(contract.evm);