{"_id":"@diamondslab/diamonds-hardhat-foundry","_rev":"12-4aa8850957e0285dc811d3d191a9a423","name":"@diamondslab/diamonds-hardhat-foundry","dist-tags":{"latest":"2.5.0"},"versions":{"1.0.0":{"name":"@diamondslab/diamonds-hardhat-foundry","version":"1.0.0","keywords":["ethereum","smart-contracts","hardhat","hardhat-plugin","foundry","forge","diamondslab","diamonds","diamond","solidity","erc-2535","fuzzing","testing","diamond-proxy"],"author":"Am0rfu5","license":"MIT","_id":"@diamondslab/diamonds-hardhat-foundry@1.0.0","maintainers":[{"name":"am0rfu5","email":"am0rfu5@protonmail.com"}],"homepage":"https://github.com/diamondslab/diamonds-hardhat-foundry","dist":{"shasum":"c04b70962a3062509d620d0b30dd56f18fc737e8","tarball":"https://registry.npmjs.org/@diamondslab/diamonds-hardhat-foundry/-/diamonds-hardhat-foundry-1.0.0.tgz","fileCount":24,"integrity":"sha512-GUfdxCk1tuay6pi27IMHE9LLq73dzXhy5cH3kHoroe2CjoQB82pOJdkJRK1sJRZHmwFkeoPyN5db0+pIpMGz/A==","signatures":[{"sig":"MEQCICsBNWyUQf8tJUCZZnmW9rcDPfNOP+I/Yv0r1AEgF2K7AiBrgP60I1+OALUT6A922TfBrdLpw7TO5w1ZLgIu1E6zuQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89366},"main":"dist/src/index.js","types":"dist/src/index.d.ts","gitHead":"0ac7b91299e2fbca806e5c76899fca6f80b623fd","scripts":{"lint":"yarn prettier --check && yarn eslint","test":"mocha --recursive \"test/**/*.ts\" --exit","build":"tsc --build .","clean":"rimraf dist","eslint":"eslint 'src/**/*.ts'","pretest":"cd ../.. && yarn build","lint:fix":"yarn prettier --write && yarn eslint --fix","prettier":"prettier \"**/*.{js,md,json}\"","prepublishOnly":"yarn build"},"_npmUser":{"name":"am0rfu5","email":"am0rfu5@protonmail.com"},"repository":{"url":"https://github.com/diamondslab/diamonds-hardhat-foundry","type":"git","directory":"packages/diamonds-hardhat-foundry"},"description":"Hardhat plugin that integrates Foundry testing with Diamond proxy contracts, providing deployment helpers and fuzzing support","directories":{},"dependencies":{"picocolors":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.10.3","devDependencies":{"chai":"^4.2.0","mocha":"^10.0.0","eslint":"^8.44.0","rimraf":"^3.0.2","hardhat":"^2.26.0","ts-node":"^10.8.0","prettier":"2.4.1","typescript":"~5.0.0","@types/chai":"^4.2.0","@types/node":"^20.0.0","@types/debug":"^4.1.12","@types/mocha":">=9.1.0","eslint-plugin-mocha":"10.4.1","eslint-plugin-import":"2.27.5","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.0","@typescript-eslint/parser":"5.61.0","@typescript-eslint/eslint-plugin":"5.61.0"},"peerDependencies":{"hardhat":"^2.26.0","@diamondslab/diamonds":"^1.2.1","@diamondslab/hardhat-diamonds":"^1.1.9"},"_npmOperationalInternal":{"tmp":"tmp/diamonds-hardhat-foundry_1.0.0_1765837422658_0.23115081070540833","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@diamondslab/diamonds-hardhat-foundry","version":"1.0.1","keywords":["ethereum","smart-contracts","hardhat","hardhat-plugin","foundry","forge","diamondslab","diamonds","diamond","solidity","erc-2535","fuzzing","testing","diamond-proxy"],"author":"Am0rfu5","license":"MIT","_id":"@diamondslab/diamonds-hardhat-foundry@1.0.1","maintainers":[{"name":"am0rfu5","email":"am0rfu5@protonmail.com"}],"homepage":"https://github.com/diamondslab/diamonds-hardhat-foundry","dist":{"shasum":"770110f1dcf60a977e2da1750eedb2b76c82c257","tarball":"https://registry.npmjs.org/@diamondslab/diamonds-hardhat-foundry/-/diamonds-hardhat-foundry-1.0.1.tgz","fileCount":25,"integrity":"sha512-a7lJi1q5ae7j7JbVf3kXIzzKnWvrMEkARE8G9Z4iy2O2dzCPXqNR+p1q4qdATtoKBoW2YLkISMMvelPGrrImeQ==","signatures":[{"sig":"MEQCIBTDytqGQSdd8268yM8s32fjMmZlqm4VUapk+QOg0a2iAiAvgruZakd7nUqOvbGb3AOn6sqPcol5oAjFPCDQTtQWeg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95450},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"60163424fc7faeadc35c17a4c78e5bfbc64d8596","scripts":{"lint":"yarn prettier --check && yarn eslint","test":"mocha --recursive \"test/**/*.ts\" --exit","build":"tsc --build .","clean":"rimraf dist","eslint":"eslint 'src/**/*.ts'","pretest":"cd ../.. && yarn build","lint:fix":"yarn prettier --write && yarn eslint --fix","prettier":"prettier \"**/*.{js,md,json}\"","prepublishOnly":"yarn build"},"_npmUser":{"name":"am0rfu5","email":"am0rfu5@protonmail.com"},"repository":{"url":"https://github.com/diamondslab/diamonds-hardhat-foundry","type":"git","directory":"packages/diamonds-hardhat-foundry"},"description":"Hardhat plugin that integrates Foundry testing with Diamond proxy contracts, providing deployment helpers and fuzzing support","directories":{},"dependencies":{"picocolors":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.10.3","devDependencies":{"chai":"^4.2.0","mocha":"^10.0.0","eslint":"^8.44.0","rimraf":"^3.0.2","hardhat":"^2.26.0","ts-node":"^10.8.0","prettier":"2.4.1","typescript":"~5.0.0","@types/chai":"^4.2.0","@types/node":"^20.0.0","@types/debug":"^4.1.12","@types/mocha":">=9.1.0","eslint-plugin-mocha":"10.4.1","eslint-plugin-import":"2.27.5","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.0","@typescript-eslint/parser":"5.61.0","@typescript-eslint/eslint-plugin":"5.61.0"},"peerDependencies":{"hardhat":"^2.26.0","@diamondslab/diamonds":"^1.2.1","@diamondslab/hardhat-diamonds":"^1.1.9"},"_npmOperationalInternal":{"tmp":"tmp/diamonds-hardhat-foundry_1.0.1_1765842699274_0.3520728900907928","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@diamondslab/diamonds-hardhat-foundry","version":"1.0.2","keywords":["ethereum","smart-contracts","hardhat","hardhat-plugin","foundry","forge","diamondslab","diamonds","diamond","solidity","erc-2535","fuzzing","testing","diamond-proxy"],"author":"Am0rfu5","license":"MIT","_id":"@diamondslab/diamonds-hardhat-foundry@1.0.2","maintainers":[{"name":"am0rfu5","email":"am0rfu5@protonmail.com"}],"homepage":"https://github.com/diamondslab/diamonds-hardhat-foundry","dist":{"shasum":"9ec5cb64820f45f05102b7164835333607bef539","tarball":"https://registry.npmjs.org/@diamondslab/diamonds-hardhat-foundry/-/diamonds-hardhat-foundry-1.0.2.tgz","fileCount":80,"integrity":"sha512-IDP7m1YCZhIBL7IfiHxhpqp0Rg+6o2a8ESI5QNrdMRIYDJ0fh35kbG0QemAFF2uZmmnm2RabiRqJnRZHqpCeHg==","signatures":[{"sig":"MEYCIQCu6KpH84YrHDe+feAEpDrxiJsJXMWzdITjxKJFG3IOzwIhAJU4O81t0h/UuBpXQUsJTcHVYfVlV2Rqj73NeH6WW5Rp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":259749},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"bcf6adb2360938db3a8c4bc6a1af3cd3da75efd9","scripts":{"lint":"yarn prettier --check && yarn eslint","test":"mocha --recursive \"test/**/*.ts\" --exit","build":"tsc --build .","clean":"rimraf dist","eslint":"eslint 'src/**/*.ts'","pretest":"cd ../.. && yarn build","lint:fix":"yarn prettier --write && yarn eslint --fix","prettier":"prettier \"**/*.{js,md,json}\"","prepublishOnly":"yarn build"},"_npmUser":{"name":"am0rfu5","email":"am0rfu5@protonmail.com"},"repository":{"url":"https://github.com/diamondslab/diamonds-hardhat-foundry","type":"git","directory":"packages/diamonds-hardhat-foundry"},"description":"Hardhat plugin that integrates Foundry testing with Diamond proxy contracts, providing deployment helpers and fuzzing support","directories":{},"dependencies":{"picocolors":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.10.3","devDependencies":{"chai":"^4.2.0","mocha":"^10.0.0","eslint":"^8.44.0","rimraf":"^3.0.2","hardhat":"^2.26.0","ts-node":"^10.8.0","prettier":"2.4.1","typescript":"~5.0.0","@types/chai":"^4.2.0","@types/node":"^20.0.0","@types/debug":"^4.1.12","@types/mocha":">=9.1.0","eslint-plugin-mocha":"10.4.1","eslint-plugin-import":"2.27.5","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.0","@typescript-eslint/parser":"5.61.0","@typescript-eslint/eslint-plugin":"5.61.0"},"peerDependencies":{"hardhat":"^2.26.0","@diamondslab/diamonds":"^1.2.1","@diamondslab/hardhat-diamonds":"^1.1.9"},"_npmOperationalInternal":{"tmp":"tmp/diamonds-hardhat-foundry_1.0.2_1765843255341_0.39160520372758345","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@diamondslab/diamonds-hardhat-foundry","version":"1.0.3","keywords":["ethereum","smart-contracts","hardhat","hardhat-plugin","foundry","forge","diamondslab","diamonds","diamond","solidity","erc-2535","fuzzing","testing","diamond-proxy"],"author":"Am0rfu5","license":"MIT","_id":"@diamondslab/diamonds-hardhat-foundry@1.0.3","maintainers":[{"name":"am0rfu5","email":"am0rfu5@protonmail.com"}],"homepage":"https://github.com/diamondslab/diamonds-hardhat-foundry","dist":{"shasum":"3c2f8c7fe95cea727e097ac7af824e782295b4e2","tarball":"https://registry.npmjs.org/@diamondslab/diamonds-hardhat-foundry/-/diamonds-hardhat-foundry-1.0.3.tgz","fileCount":84,"integrity":"sha512-XV2ZJvdDaGTn6AxjDATLVohxpBMkM3Tr4fwOhfl2egJKMeeIEqDh+0odc3VjmLIr3DfBLsccoOdI9xpFHV96Mw==","signatures":[{"sig":"MEQCIGBhYJJ7JvomonuJ+FcO5CmjT9BVbTNte5SumTnakZQMAiAHiexa/RaBsFhWq/8d1Yprjt71QL+0vBtGuasBPJ3mIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":268492},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"d06d07eda6e38f1e1f81ec7333e5651bd3af2f9c","scripts":{"lint":"yarn prettier --check && yarn eslint","test":"mocha --recursive \"test/**/*.ts\" --exit","build":"tsc --build . && yarn copy-templates","clean":"rimraf dist","eslint":"eslint 'src/**/*.ts'","pretest":"cd ../.. && yarn build","lint:fix":"yarn prettier --write && yarn eslint --fix","prettier":"prettier \"**/*.{js,md,json}\"","copy-templates":"mkdir -p dist/templates && cp src/templates/*.template dist/templates/","prepublishOnly":"yarn build"},"_npmUser":{"name":"am0rfu5","email":"am0rfu5@protonmail.com"},"repository":{"url":"https://github.com/diamondslab/diamonds-hardhat-foundry","type":"git","directory":"packages/diamonds-hardhat-foundry"},"description":"Hardhat plugin that integrates Foundry testing with Diamond proxy contracts, providing deployment helpers and fuzzing support","directories":{},"dependencies":{"picocolors":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.10.3","devDependencies":{"chai":"^4.2.0","mocha":"^10.0.0","eslint":"^8.44.0","rimraf":"^3.0.2","hardhat":"^2.26.0","ts-node":"^10.8.0","prettier":"2.4.1","typescript":"~5.0.0","@types/chai":"^4.2.0","@types/node":"^20.0.0","@types/debug":"^4.1.12","@types/mocha":">=9.1.0","eslint-plugin-mocha":"10.4.1","eslint-plugin-import":"2.27.5","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.0","@typescript-eslint/parser":"5.61.0","@typescript-eslint/eslint-plugin":"5.61.0"},"peerDependencies":{"hardhat":"^2.26.0","@diamondslab/diamonds":"^1.2.1","@diamondslab/hardhat-diamonds":"^1.1.9"},"_npmOperationalInternal":{"tmp":"tmp/diamonds-hardhat-foundry_1.0.3_1765848431065_0.060174353110287404","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@diamondslab/diamonds-hardhat-foundry","version":"2.1.0","keywords":["ethereum","smart-contracts","hardhat","hardhat-plugin","foundry","forge","diamondslab","diamonds","diamond","solidity","erc-2535","fuzzing","testing","diamond-proxy"],"author":"Am0rfu5","license":"MIT","_id":"@diamondslab/diamonds-hardhat-foundry@2.1.0","maintainers":[{"name":"am0rfu5","email":"am0rfu5@protonmail.com"}],"homepage":"https://github.com/diamondslab/diamonds-hardhat-foundry","dist":{"shasum":"af427d2f4b4866a732a201045c46ddd89173f19f","tarball":"https://registry.npmjs.org/@diamondslab/diamonds-hardhat-foundry/-/diamonds-hardhat-foundry-2.1.0.tgz","fileCount":85,"integrity":"sha512-yXDRF2T9Nwdf+XIKjkovcUyvNBUnXQA0T5ej9Gq+AttMM9g4RcE0ew/GeE9/x2mb/GSjNjLGyxFyrLM3hmevlg==","signatures":[{"sig":"MEUCIBztzSIS+Sog+vTaG/iubGhKLKXQ3xDXTXCBU/IIAs8mAiEA4lY4MjkrazCCRUNR1PMgqKgf4TmOPsX093ZBgTqmkzA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":351371},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"673835b24fcbe10163dea5cd72955c7717289760","scripts":{"lint":"yarn prettier --check && yarn eslint","test":"mocha --recursive \"test/**/*.ts\" --exit","build":"tsc --build . && yarn copy-templates","clean":"rimraf dist","eslint":"eslint 'src/**/*.ts'","pretest":"cd ../.. && yarn build","lint:fix":"yarn prettier --write && yarn eslint --fix","prettier":"prettier \"**/*.{js,md,json}\"","copy-templates":"mkdir -p dist/templates && cp src/templates/*.template dist/templates/","prepublishOnly":"yarn build"},"_npmUser":{"name":"am0rfu5","email":"am0rfu5@protonmail.com"},"repository":{"url":"https://github.com/diamondslab/diamonds-hardhat-foundry","type":"git","directory":"packages/diamonds-hardhat-foundry"},"description":"Hardhat plugin that integrates Foundry testing with Diamond proxy contracts, providing deployment helpers and fuzzing support","directories":{},"dependencies":{"picocolors":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.10.3","devDependencies":{"chai":"^4.2.0","mocha":"^10.0.0","eslint":"^8.44.0","rimraf":"^3.0.2","hardhat":"^2.26.0","ts-node":"^10.8.0","prettier":"2.4.1","typescript":"~5.0.0","@types/chai":"^4.2.0","@types/node":"^20.0.0","@types/debug":"^4.1.12","@types/mocha":">=9.1.0","eslint-plugin-mocha":"10.4.1","eslint-plugin-import":"2.27.5","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.0","@typescript-eslint/parser":"5.61.0","@typescript-eslint/eslint-plugin":"5.61.0"},"peerDependencies":{"ethers":"^6.0.0","hardhat":"^2.26.0","@diamondslab/diamonds":"^1.3.0","@diamondslab/hardhat-diamonds":"^1.1.12","@nomicfoundation/hardhat-ethers":"^3.0.8"},"_npmOperationalInternal":{"tmp":"tmp/diamonds-hardhat-foundry_2.1.0_1766080944973_0.988825876220393","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@diamondslab/diamonds-hardhat-foundry","version":"2.2.0","keywords":["ethereum","smart-contracts","hardhat","hardhat-plugin","foundry","forge","diamondslab","diamonds","diamond","solidity","erc-2535","fuzzing","testing","diamond-proxy"],"author":"Am0rfu5","license":"MIT","_id":"@diamondslab/diamonds-hardhat-foundry@2.2.0","maintainers":[{"name":"am0rfu5","email":"am0rfu5@protonmail.com"}],"homepage":"https://github.com/diamondslab/diamonds-hardhat-foundry","dist":{"shasum":"28a54736408fc8a67186d068f41647a1bc57d0ec","tarball":"https://registry.npmjs.org/@diamondslab/diamonds-hardhat-foundry/-/diamonds-hardhat-foundry-2.2.0.tgz","fileCount":81,"integrity":"sha512-DOXiFuNA5efY8WdEkmO/0ilHylUUx8Cy2c2gJy/x7PBz2mk8tWOWoijp4xzfM9k/2PM0TRd0WXKRfEAwgIpEdA==","signatures":[{"sig":"MEQCIBpZ+HV7op0DExxzIbuxXUWQpBXA9MNMt+0B8Uq5c94OAiAlSMtk3rRU1Gr0MdTQjAsGqgpKu1DNtEQBebwOyycRHA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":351362},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"ee8baa7c9be935a08349f7dca53979500d609222","scripts":{"lint":"yarn prettier --check && yarn eslint","test":"mocha --recursive \"test/**/*.ts\" --exit","build":"tsc --build . && yarn copy-templates","clean":"rimraf dist","eslint":"eslint 'src/**/*.ts'","pretest":"cd ../.. && yarn build","lint:fix":"yarn prettier --write && yarn eslint --fix","prettier":"prettier \"**/*.{js,md,json}\"","copy-templates":"mkdir -p dist/templates && cp src/templates/*.template dist/templates/","prepublishOnly":"yarn build"},"_npmUser":{"name":"am0rfu5","email":"am0rfu5@protonmail.com"},"repository":{"url":"https://github.com/diamondslab/diamonds-hardhat-foundry","type":"git","directory":"packages/diamonds-hardhat-foundry"},"description":"Hardhat plugin that integrates Foundry testing with Diamond proxy contracts, providing deployment helpers and fuzzing support","directories":{},"dependencies":{"picocolors":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.10.3","devDependencies":{"chai":"^4.2.0","mocha":"^10.0.0","eslint":"^8.44.0","rimraf":"^3.0.2","hardhat":"^2.26.0","ts-node":"^10.8.0","prettier":"2.4.1","typescript":"~5.0.0","@types/chai":"^4.2.0","@types/node":"^20.0.0","@types/debug":"^4.1.12","@types/mocha":">=9.1.0","eslint-plugin-mocha":"10.4.1","eslint-plugin-import":"2.27.5","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.0","@typescript-eslint/parser":"5.61.0","@typescript-eslint/eslint-plugin":"5.61.0"},"peerDependencies":{"ethers":"^6.0.0","hardhat":"^2.26.0","@diamondslab/diamonds":"^1.3.0","@diamondslab/hardhat-diamonds":"^1.1.12","@nomicfoundation/hardhat-ethers":"^3.0.8"},"_npmOperationalInternal":{"tmp":"tmp/diamonds-hardhat-foundry_2.2.0_1766109414161_0.4799983598608193","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@diamondslab/diamonds-hardhat-foundry","version":"2.2.1","keywords":["ethereum","smart-contracts","hardhat","hardhat-plugin","foundry","forge","diamondslab","diamonds","diamond","solidity","erc-2535","fuzzing","testing","diamond-proxy"],"author":"Am0rfu5","license":"MIT","_id":"@diamondslab/diamonds-hardhat-foundry@2.2.1","maintainers":[{"name":"am0rfu5","email":"am0rfu5@protonmail.com"}],"homepage":"https://github.com/diamondslab/diamonds-hardhat-foundry","dist":{"shasum":"5b07d9f7f734a94ac860c3df18ec4c69b7af19f5","tarball":"https://registry.npmjs.org/@diamondslab/diamonds-hardhat-foundry/-/diamonds-hardhat-foundry-2.2.1.tgz","fileCount":85,"integrity":"sha512-tq0mPUlats5aqjqzyiO0Ol48GcZXjyZYLT/fOHpt/bV/Xe5PTVSHAnpzoqY5fyXa45uBecrD76DPvgHNUe0bnQ==","signatures":[{"sig":"MEUCIQCn9WWGCyEpbg8G60YsFHpcoeXGl9g8iZpltPBDJcdbPAIge0QkxCZqj+15hO4q2ETIty0XiaDWoiTEhZ8Af0tlHd4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":366365},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"ee8baa7c9be935a08349f7dca53979500d609222","scripts":{"lint":"yarn prettier --check && yarn eslint","test":"mocha --recursive \"test/**/*.ts\" --exit","build":"tsc --build . && yarn copy-templates","clean":"rimraf dist","eslint":"eslint 'src/**/*.ts'","pretest":"cd ../.. && yarn build","lint:fix":"yarn prettier --write && yarn eslint --fix","prettier":"prettier \"**/*.{js,md,json}\"","copy-templates":"mkdir -p dist/templates && cp src/templates/*.template dist/templates/","prepublishOnly":"yarn build"},"_npmUser":{"name":"am0rfu5","email":"am0rfu5@protonmail.com"},"repository":{"url":"https://github.com/diamondslab/diamonds-hardhat-foundry","type":"git","directory":"packages/diamonds-hardhat-foundry"},"description":"Hardhat plugin that integrates Foundry testing with Diamond proxy contracts, providing deployment helpers and fuzzing support","directories":{},"dependencies":{"picocolors":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.10.3","devDependencies":{"chai":"^4.2.0","mocha":"^10.0.0","eslint":"^8.44.0","rimraf":"^3.0.2","hardhat":"^2.26.0","ts-node":"^10.8.0","prettier":"2.4.1","typescript":"~5.0.0","@types/chai":"^4.2.0","@types/node":"^20.0.0","@types/debug":"^4.1.12","@types/mocha":">=9.1.0","eslint-plugin-mocha":"10.4.1","eslint-plugin-import":"2.27.5","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.0","@typescript-eslint/parser":"5.61.0","@typescript-eslint/eslint-plugin":"5.61.0"},"peerDependencies":{"ethers":"^6.0.0","hardhat":"^2.26.0","@diamondslab/diamonds":"^1.3.0","@diamondslab/hardhat-diamonds":"^1.1.12","@nomicfoundation/hardhat-ethers":"^3.0.8"},"_npmOperationalInternal":{"tmp":"tmp/diamonds-hardhat-foundry_2.2.1_1766117869230_0.9258028467059392","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"@diamondslab/diamonds-hardhat-foundry","version":"2.2.2","keywords":["ethereum","smart-contracts","hardhat","hardhat-plugin","foundry","forge","diamondslab","diamonds","diamond","solidity","erc-2535","fuzzing","testing","diamond-proxy"],"author":"Am0rfu5","license":"MIT","_id":"@diamondslab/diamonds-hardhat-foundry@2.2.2","maintainers":[{"name":"am0rfu5","email":"am0rfu5@protonmail.com"}],"homepage":"https://github.com/diamondslab/diamonds-hardhat-foundry","dist":{"shasum":"70e6d4da1b6f2d303c08e38f784426b24547bd56","tarball":"https://registry.npmjs.org/@diamondslab/diamonds-hardhat-foundry/-/diamonds-hardhat-foundry-2.2.2.tgz","fileCount":85,"integrity":"sha512-uTcRaA1j5SNQKCC5jpGQuEm0DvzfuUw6YUGXk4/lpW+HTruDEKgLNOXSPAymPcms66a7x8afbosF0Io+H7JxIg==","signatures":[{"sig":"MEUCIFSXiFdiDyPWaqr9f2NsFDONv4AajOcu0NXsw5p6pOjDAiEA6lT4EvlxBDEtdArGVZ0lsVd+QVmCqzBWifINBc/ZH0E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372357},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"812d3842aec96a4324022334d7aa676e77efbdc8","scripts":{"lint":"yarn prettier --check && yarn eslint","test":"mocha --recursive \"test/**/*.ts\" --exit","build":"tsc --build . && yarn copy-templates","clean":"rimraf dist","eslint":"eslint 'src/**/*.ts'","pretest":"cd ../.. && yarn build","lint:fix":"yarn prettier --write && yarn eslint --fix","prettier":"prettier \"**/*.{js,md,json}\"","copy-templates":"mkdir -p dist/templates && cp src/templates/*.template dist/templates/","prepublishOnly":"yarn build"},"_npmUser":{"name":"am0rfu5","email":"am0rfu5@protonmail.com"},"repository":{"url":"https://github.com/diamondslab/diamonds-hardhat-foundry","type":"git","directory":"packages/diamonds-hardhat-foundry"},"description":"Hardhat plugin that integrates Foundry testing with Diamond proxy contracts, providing deployment helpers and fuzzing support","directories":{},"dependencies":{"picocolors":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.10.3","devDependencies":{"chai":"^4.2.0","mocha":"^10.0.0","eslint":"^8.44.0","rimraf":"^3.0.2","hardhat":"^2.26.0","ts-node":"^10.8.0","prettier":"2.4.1","typescript":"~5.0.0","@types/chai":"^4.2.0","@types/node":"^20.0.0","@types/debug":"^4.1.12","@types/mocha":">=9.1.0","eslint-plugin-mocha":"10.4.1","eslint-plugin-import":"2.27.5","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.0","@typescript-eslint/parser":"5.61.0","@typescript-eslint/eslint-plugin":"5.61.0"},"peerDependencies":{"ethers":"^6.0.0","hardhat":"^2.26.0","@diamondslab/diamonds":"^1.3.0","@diamondslab/hardhat-diamonds":"^1.1.12","@nomicfoundation/hardhat-ethers":"^3.0.8"},"_npmOperationalInternal":{"tmp":"tmp/diamonds-hardhat-foundry_2.2.2_1766159008707_0.7853176708971719","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"@diamondslab/diamonds-hardhat-foundry","version":"2.2.3","keywords":["ethereum","smart-contracts","hardhat","hardhat-plugin","foundry","forge","diamondslab","diamonds","diamond","solidity","erc-2535","fuzzing","testing","diamond-proxy"],"author":"Am0rfu5","license":"MIT","_id":"@diamondslab/diamonds-hardhat-foundry@2.2.3","maintainers":[{"name":"am0rfu5","email":"am0rfu5@protonmail.com"}],"homepage":"https://github.com/diamondslab/diamonds-hardhat-foundry","dist":{"shasum":"64d08dce59983a9007392ff56df236ffabb2270c","tarball":"https://registry.npmjs.org/@diamondslab/diamonds-hardhat-foundry/-/diamonds-hardhat-foundry-2.2.3.tgz","fileCount":85,"integrity":"sha512-5iCUQZHk9mesWdYLd1kZKEFkYoGn5Gizsu6QCiA0VX7lLduZEojv+/ytsj9zrFoaU3fcuFKIUGVnBivZIJJGJw==","signatures":[{"sig":"MEQCIE1xkXnXb46+qpWj1l3C478ITiNPQZB7X7FYlB5oEr+YAiAN1Ax0A7yI6F3v8juBSMvhUqfThUE6XIJ6xVknLENlqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":373234},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"d788566b96d0e9fbf030716dea12066e755c1de6","scripts":{"lint":"yarn prettier --check && yarn eslint","test":"mocha --recursive \"test/**/*.ts\" --exit","build":"tsc --build . && yarn copy-templates","clean":"rimraf dist","eslint":"eslint 'src/**/*.ts'","pretest":"cd ../.. && yarn build","lint:fix":"yarn prettier --write && yarn eslint --fix","prettier":"prettier \"**/*.{js,md,json}\"","copy-templates":"mkdir -p dist/templates && cp src/templates/*.template dist/templates/","prepublishOnly":"yarn build"},"_npmUser":{"name":"am0rfu5","email":"am0rfu5@protonmail.com"},"repository":{"url":"https://github.com/diamondslab/diamonds-hardhat-foundry","type":"git","directory":"packages/diamonds-hardhat-foundry"},"description":"Hardhat plugin that integrates Foundry testing with Diamond proxy contracts, providing deployment helpers and fuzzing support","directories":{},"dependencies":{"picocolors":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.10.3","devDependencies":{"chai":"^4.2.0","mocha":"^10.0.0","eslint":"^8.44.0","rimraf":"^3.0.2","hardhat":"^2.26.0","ts-node":"^10.8.0","prettier":"2.4.1","typescript":"~5.0.0","@types/chai":"^4.2.0","@types/node":"^20.0.0","@types/debug":"^4.1.12","@types/mocha":">=9.1.0","eslint-plugin-mocha":"10.4.1","eslint-plugin-import":"2.27.5","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.0","@typescript-eslint/parser":"5.61.0","@typescript-eslint/eslint-plugin":"5.61.0"},"peerDependencies":{"ethers":"^6.0.0","hardhat":"^2.26.0","@diamondslab/diamonds":"^1.3.0","@diamondslab/hardhat-diamonds":"^1.1.12","@nomicfoundation/hardhat-ethers":"^3.0.8"},"_npmOperationalInternal":{"tmp":"tmp/diamonds-hardhat-foundry_2.2.3_1766169718388_0.627242672100611","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@diamondslab/diamonds-hardhat-foundry","version":"2.3.0","keywords":["ethereum","smart-contracts","hardhat","hardhat-plugin","foundry","forge","diamondslab","diamonds","diamond","solidity","erc-2535","fuzzing","testing","diamond-proxy"],"author":{"name":"Am0rfu5"},"license":"MIT","_id":"@diamondslab/diamonds-hardhat-foundry@2.3.0","maintainers":[{"name":"am0rfu5","email":"am0rfu5@protonmail.com"}],"homepage":"https://github.com/diamondslab/diamonds-hardhat-foundry","bugs":{"url":"https://github.com/diamondslab/diamonds-hardhat-foundry/issues"},"dist":{"shasum":"105badea3de7b90581e412affa13c8efae024ab2","tarball":"https://registry.npmjs.org/@diamondslab/diamonds-hardhat-foundry/-/diamonds-hardhat-foundry-2.3.0.tgz","fileCount":94,"integrity":"sha512-4ohISgGrtJlwu93gm6Z8Be8FjAJJx4cqetnzMKCbJoVgPiOyIFBpCrBlGlpo00qtVjsrfqT5+tioBr9HxtNlTw==","signatures":[{"sig":"MEQCIA+XcNZRASYRfR7ARSJDFR0L9OIgbADRebDtbIVwYf1PAiAKZ8R/QOq1RJj0I06olgxhybOlUvP5V+XbZ2oStxPv3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":435052},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"a9bbba862d7e8715f381754fd172da29eeffd41c","scripts":{"lint":"yarn prettier --check && yarn eslint","test":"mocha --recursive \"test/**/*.ts\" --exit","build":"tsc --build . && yarn copy-templates","clean":"rimraf dist","eslint":"eslint 'src/**/*.ts'","pretest":"cd ../.. && yarn build","lint:fix":"yarn prettier --write && yarn eslint --fix","prettier":"prettier \"**/*.{js,md,json}\"","copy-templates":"mkdir -p dist/templates && cp src/templates/*.template dist/templates/","prepublishOnly":"yarn build"},"_npmUser":{"name":"am0rfu5","email":"am0rfu5@protonmail.com"},"repository":{"url":"git+https://github.com/diamondslab/diamonds-hardhat-foundry.git","type":"git","directory":"packages/diamonds-hardhat-foundry"},"_npmVersion":"10.9.4","description":"Hardhat plugin that integrates Foundry testing with Diamond proxy contracts, providing deployment helpers and fuzzing support","directories":{},"_nodeVersion":"22.21.1","dependencies":{"picocolors":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.10.3","devDependencies":{"chai":"^4.2.0","mocha":"^10.0.0","eslint":"^8.44.0","rimraf":"^3.0.2","hardhat":"^2.26.0","ts-node":"^10.8.0","prettier":"2.4.1","typescript":"~5.0.0","@types/chai":"^4.2.0","@types/node":"^20.0.0","@types/debug":"^4.1.12","@types/mocha":">=9.1.0","eslint-plugin-mocha":"10.4.1","eslint-plugin-import":"2.27.5","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.0","@typescript-eslint/parser":"5.61.0","@typescript-eslint/eslint-plugin":"5.61.0"},"peerDependencies":{"ethers":"^6.0.0","hardhat":"^2.26.0","@diamondslab/diamonds":"workspace:^","@diamondslab/hardhat-diamonds":"workspace:^","@nomicfoundation/hardhat-ethers":"^3.0.8"},"_npmOperationalInternal":{"tmp":"tmp/diamonds-hardhat-foundry_2.3.0_1767148120550_0.22437402253369743","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@diamondslab/diamonds-hardhat-foundry","version":"2.4.0","keywords":["ethereum","smart-contracts","hardhat","hardhat-plugin","foundry","forge","diamondslab","diamonds","diamond","solidity","erc-2535","fuzzing","testing","diamond-proxy"],"author":{"name":"Am0rfu5"},"license":"MIT","_id":"@diamondslab/diamonds-hardhat-foundry@2.4.0","maintainers":[{"name":"am0rfu5","email":"am0rfu5@protonmail.com"}],"homepage":"https://github.com/diamondslab/diamonds-hardhat-foundry","bugs":{"url":"https://github.com/diamondslab/diamonds-hardhat-foundry/issues"},"dist":{"shasum":"8d8aacd0134e568e6c4149e5d594d8648f1d0489","tarball":"https://registry.npmjs.org/@diamondslab/diamonds-hardhat-foundry/-/diamonds-hardhat-foundry-2.4.0.tgz","fileCount":102,"integrity":"sha512-YmjCG81ZOdwzOHuJieZ9u1/VSfFdolbKavbE+o/FfY3mhA6jsjNLuSfLqw9A5SanLVTBssie+2fdpkiOIbP8sw==","signatures":[{"sig":"MEUCIDhLmM60+dSMbvUA1hJj7lq2MF1vRKVGN7EBe8FttnzSAiEAu3EVxdcc12XNiul/22e+oDN0Xy7ab9Cj+SCsFsQ8fXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":491716},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"663041768e7db31d63064029c8c5a63ea9832ad2","scripts":{"lint":"yarn prettier --check && yarn eslint","test":"mocha --recursive \"test/**/*.ts\" --exit","build":"tsc --build . && yarn copy-templates","clean":"rimraf dist","eslint":"eslint 'src/**/*.ts'","pretest":"cd ../.. && yarn build","lint:fix":"yarn prettier --write && yarn eslint --fix","prettier":"prettier \"**/*.{js,md,json}\"","copy-templates":"mkdir -p dist/templates && cp src/templates/*.template dist/templates/","prepublishOnly":"yarn build"},"_npmUser":{"name":"am0rfu5","email":"am0rfu5@protonmail.com"},"repository":{"url":"git+https://github.com/diamondslab/diamonds-hardhat-foundry.git","type":"git","directory":"packages/diamonds-hardhat-foundry"},"_npmVersion":"10.9.4","description":"Hardhat plugin that integrates Foundry testing with Diamond proxy contracts, providing deployment helpers and fuzzing support","directories":{},"_nodeVersion":"22.21.1","dependencies":{"picocolors":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.10.3","devDependencies":{"chai":"^4.2.0","mocha":"^10.0.0","eslint":"^8.44.0","rimraf":"^3.0.2","hardhat":"^2.26.0","ts-node":"^10.8.0","prettier":"2.4.1","typescript":"~5.0.0","@types/chai":"^4.2.0","@types/node":"^20.0.0","@types/debug":"^4.1.12","@types/mocha":">=9.1.0","eslint-plugin-mocha":"10.4.1","eslint-plugin-import":"2.27.5","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.0","@typescript-eslint/parser":"5.61.0","@typescript-eslint/eslint-plugin":"5.61.0"},"peerDependencies":{"ethers":"^6.0.0","hardhat":"^2.26.0","@diamondslab/diamonds":"workspace:^","@diamondslab/hardhat-diamonds":"workspace:^","@nomicfoundation/hardhat-ethers":"^3.0.8"},"_npmOperationalInternal":{"tmp":"tmp/diamonds-hardhat-foundry_2.4.0_1767150024810_0.4395418963327373","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"@diamondslab/diamonds-hardhat-foundry","version":"2.5.0","description":"Hardhat plugin that integrates Foundry testing with Diamond proxy contracts, providing deployment helpers and fuzzing support","repository":{"type":"git","url":"git+https://github.com/DiamondsLab/diamonds-hardhat-foundry.git"},"homepage":"https://github.com/DiamondsLab/diamonds-hardhat-foundry","author":{"name":"Am0rfu5"},"license":"MIT","main":"dist/index.js","types":"dist/index.d.ts","keywords":["ethereum","smart-contracts","hardhat","hardhat-plugin","foundry","forge","diamondslab","diamonds","diamond","solidity","erc-2535","fuzzing","testing","diamond-proxy"],"scripts":{"lint":"yarn prettier --check && yarn eslint","lint:fix":"yarn prettier --write && yarn eslint --fix","eslint":"eslint 'src/**/*.ts'","prettier":"prettier \"**/*.{js,md,json}\"","pretest":"yarn build","test":"mocha --recursive \"test/**/*.ts\" --exit","build":"tsc --build . && mkdir -p dist/templates && cp src/templates/*.template dist/templates/","copy-templates":"mkdir -p dist/templates && cp src/templates/*.template dist/templates/","prepublishOnly":"yarn build","clean":"rimraf dist tsconfig.tsbuildinfo"},"devDependencies":{"@diamondslab/diamonds":"^1.4.0","@diamondslab/hardhat-diamonds":"^1.2.0","@nomicfoundation/hardhat-ethers":"^3.1.2","@types/chai":"^4.2.0","@types/debug":"^4.1.12","@types/mocha":">=9.1.0","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"5.61.0","@typescript-eslint/parser":"5.61.0","chai":"^4.2.0","eslint":"^8.44.0","eslint-config-prettier":"8.3.0","eslint-plugin-import":"2.27.5","eslint-plugin-mocha":"10.4.1","eslint-plugin-prettier":"3.4.0","ethers":"^6.17.0","hardhat":"^2.28.0","mocha":"^10.0.0","prettier":"2.4.1","rimraf":"^3.0.2","ts-node":"^10.8.0","typescript":"~5.0.0"},"peerDependencies":{"@diamondslab/diamonds":"^1.4.0","@diamondslab/hardhat-diamonds":"^1.2.0","@nomicfoundation/hardhat-ethers":"*","ethers":"^6.0.0","hardhat":"^2.28.0"},"dependencies":{"picocolors":"^1.1.0"},"packageManager":"yarn@4.10.3","engines":{"node":">=18.0.0","yarn":">=4.0.0"},"publishConfig":{"access":"public"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./contracts/*":"./contracts/*","./dist/*":{"types":"./dist/*.d.ts","default":"./dist/*.js"},"./package.json":"./package.json"},"gitHead":"90a4b8af0546cbf735cf10a6142efb57b89a61ff","_id":"@diamondslab/diamonds-hardhat-foundry@2.5.0","bugs":{"url":"https://github.com/DiamondsLab/diamonds-hardhat-foundry/issues"},"_nodeVersion":"20.20.2","_npmVersion":"11.18.0","dist":{"integrity":"sha512-mtag173sThOfs7KzlOptumPzkTNX1TJ0qxbzlPZ/DHuAqbGd+9wpRGvo3XTWsYrcjT64K2VJDPNzrXui3uJfUg==","shasum":"f78b7558a28cf9f8176941c6e18a89897d6e7135","tarball":"https://registry.npmjs.org/@diamondslab/diamonds-hardhat-foundry/-/diamonds-hardhat-foundry-2.5.0.tgz","fileCount":43,"unpackedSize":214545,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@diamondslab%2fdiamonds-hardhat-foundry@2.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBaZ3ZquWxpbvGqmP/5Vwh2kydylDFlpDG/ISc+MWbeNAiAza8QW44CytDbrPsGqsCXI4WCugllrDs14NmR8mzryOg=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5e5a5c18-e5fd-4dad-aee6-5a1691cdebf9"}},"directories":{},"maintainers":[{"name":"am0rfu5","email":"am0rfu5@protonmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/diamonds-hardhat-foundry_2.5.0_1783429281337_0.9252647310676503"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-15T22:23:42.559Z","modified":"2026-07-07T13:01:21.852Z","1.0.0":"2025-12-15T22:23:42.801Z","1.0.1":"2025-12-15T23:51:39.431Z","1.0.2":"2025-12-16T00:00:55.492Z","1.0.3":"2025-12-16T01:27:11.220Z","2.1.0":"2025-12-18T18:02:25.181Z","2.2.0":"2025-12-19T01:56:54.363Z","2.2.1":"2025-12-19T04:17:49.376Z","2.2.2":"2025-12-19T15:43:28.862Z","2.2.3":"2025-12-19T18:41:58.592Z","2.3.0":"2025-12-31T02:28:40.730Z","2.4.0":"2025-12-31T03:00:24.972Z","2.5.0":"2026-07-07T13:01:21.482Z"},"bugs":{"url":"https://github.com/DiamondsLab/diamonds-hardhat-foundry/issues"},"author":{"name":"Am0rfu5"},"license":"MIT","homepage":"https://github.com/DiamondsLab/diamonds-hardhat-foundry","keywords":["ethereum","smart-contracts","hardhat","hardhat-plugin","foundry","forge","diamondslab","diamonds","diamond","solidity","erc-2535","fuzzing","testing","diamond-proxy"],"repository":{"type":"git","url":"git+https://github.com/DiamondsLab/diamonds-hardhat-foundry.git"},"description":"Hardhat plugin that integrates Foundry testing with Diamond proxy contracts, providing deployment helpers and fuzzing support","maintainers":[{"name":"am0rfu5","email":"am0rfu5@protonmail.com"}],"readme":"# @diamondslab/diamonds-hardhat-foundry\n\n[![npm version](https://badge.fury.io/js/@diamondslab%2Fdiamonds-hardhat-foundry.svg)](https://www.npmjs.com/package/@diamondslab/diamonds-hardhat-foundry)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Tests](https://img.shields.io/badge/tests-141%20passing-brightgreen)](https://github.com/DiamondsLab/diamonds-hardhat-foundry)\n[![Test Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen)](https://github.com/DiamondsLab/diamonds-hardhat-foundry)\n\nHardhat plugin that seamlessly integrates Foundry testing with [ERC-2535 Diamond](https://eips.ethereum.org/EIPS/eip-2535) proxy contracts. This plugin provides deployment helpers, test scaffolding, and automated test generation for Diamond-based smart contracts using Foundry's powerful testing framework.\n\n**Production Ready**: 141/141 tests passing (100% success rate) with comprehensive coverage across unit, integration, fuzz, and invariant testing.\n\n## Features\n\n- 🚀 **Automated Diamond Deployment** - Deploy Diamond contracts with a single command\n- 📝 **Helper Generation** - Automatically generate Solidity helpers with deployment data\n- 🧪 **Test Scaffolding** - Create unit, integration, and fuzz test templates\n- � **Coverage Testing** - Run forge coverage with full Diamond integration and multiple report formats\n- 🔧 **Hardhat Tasks** - CLI tasks for init, deploy, generate, test, and coverage workflows\n- 🎯 **Programmatic API** - Use framework classes directly in scripts\n- 📚 **Base Contracts** - Reusable Solidity utilities and test base classes\n- ⚡ **Foundry Integration** - Leverage Forge's speed and fuzzing capabilities\n- 🔗 **Diamonds Ecosystem** - Works seamlessly with `@diamondslab/diamonds` and `@diamondslab/hardhat-diamonds`\n\n## Installation\n\n```bash\nnpm install --save-dev @diamondslab/diamonds-hardhat-foundry\n# or\nyarn add -D @diamondslab/diamonds-hardhat-foundry\n# or\npnpm add -D @diamondslab/diamonds-hardhat-foundry\n```\n\n### Prerequisites\n\n- **Node.js**: `>=18`\n- **Yarn**: `>=4` (this package is developed with `yarn@4.10.3`)\n- **Foundry**: Install from [getfoundry.sh](https://getfoundry.sh/)\n- **Hardhat**: `^2.28.0` or later\n- **Required Peer Dependencies**:\n  - `@diamondslab/diamonds` - Core Diamond deployment library\n  - `@diamondslab/hardhat-diamonds` - Hardhat Diamond configuration and LocalDiamondDeployer\n  - `@nomicfoundation/hardhat-ethers` - Ethers.js integration\n  - `ethers` - Ethereum library\n\n```bash\nnpm install --save-dev @diamondslab/diamonds @diamondslab/hardhat-diamonds @nomicfoundation/hardhat-ethers ethers hardhat\n```\n\n> **Note**: Version 2.0.0+ requires `@diamondslab/hardhat-diamonds` as a peer dependency for LocalDiamondDeployer. See [MIGRATION.md](./docs/MIGRATION.md) for upgrade instructions from v1.x.\n\n## Entry points\n\nThis package publishes an `exports` map with the following entry points:\n\n- **`.`** — the Hardhat plugin. Register it in `hardhat.config.ts`:\n\n  ```typescript\n  import \"@diamondslab/diamonds-hardhat-foundry\";\n  ```\n\n- **`./contracts/*`** — the Solidity helper contracts, imported from Foundry tests:\n\n  ```solidity\n  import \"@diamondslab/diamonds-hardhat-foundry/contracts/DiamondForgeHelpers.sol\";\n  import \"@diamondslab/diamonds-hardhat-foundry/contracts/DiamondFuzzBase.sol\";\n  import \"@diamondslab/diamonds-hardhat-foundry/contracts/DiamondABILoader.sol\";\n  ```\n\n  These resolve via the `@diamondslab/` remapping in `foundry.toml`:\n\n  ```toml\n  remappings = [\n      \"@diamondslab/=node_modules/@diamondslab/\",\n  ]\n  ```\n\n- **`./dist/*`** — compiled JavaScript / type declarations for programmatic use.\n- **`./package.json`** — for tooling that reads package metadata.\n\n## Quick Start\n\n### 1. Configure Hardhat\n\nImport the plugin in your `hardhat.config.ts`:\n\n```typescript\nimport \"@diamondslab/diamonds-hardhat-foundry\";\nimport type { HardhatUserConfig } from \"hardhat/config\";\n\nconst config: HardhatUserConfig = {\n  solidity: \"0.8.28\",\n\n  // Optional: Configure diamonds-foundry settings\n  diamondsFoundry: {\n    helpersDir: \"test/foundry/helpers\",\n    generateExamples: true,\n    exampleTests: [\"unit\", \"integration\", \"fuzz\"],\n    defaultNetwork: \"hardhat\",\n    reuseDeployment: false,\n    forgeTestArgs: [\"-vvv\"],\n  },\n};\n\nexport default config;\n```\n\n### 2. Initialize Test Structure\n\n```bash\nnpx hardhat diamonds-forge:init\n```\n\nThis creates:\n\n```\ntest/foundry/\n├── helpers/           # Generated Diamond deployment helpers\n├── unit/              # Unit test examples\n├── integration/       # Integration test examples\n└── fuzz/              # Fuzz test examples\n```\n\n### 3. Deploy Your Diamond\n\n```bash\nnpx hardhat diamonds-forge:deploy --diamond-name YourDiamond --network hardhat\n```\n\n### 4. Generate Helpers\n\n```bash\nnpx hardhat diamonds-forge:generate-helpers --diamond-name YourDiamond\n```\n\nThis generates `test/foundry/helpers/DiamondDeployment.sol` with:\n\n- Diamond contract address\n- All facet addresses\n- Helper functions for test setup\n\n## Importing Helper Contracts\n\nVersion 2.0.0+ provides importable Solidity helper contracts for your tests:\n\n### DiamondFuzzBase - Base Contract for Fuzz Tests\n\nExtend `DiamondFuzzBase` to create Diamond fuzz tests with built-in helpers:\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"forge-std/Test.sol\";\nimport \"@diamondslab/diamonds-hardhat-foundry/contracts/DiamondFuzzBase.sol\";\nimport \"../helpers/DiamondDeployment.sol\";\n\ncontract MyDiamondFuzzTest is DiamondFuzzBase {\n    /// Override to load your deployed Diamond\n    function _loadDiamondAddress() internal view override returns (address) {\n        return DiamondDeployment.diamond();\n    }\n\n    function setUp() public override {\n        super.setUp(); // Loads Diamond and ABI\n        // Your additional setup\n    }\n\n    function testFuzz_SomeFunction(address user, uint256 amount) public {\n        // Use built-in helpers\n        vm.assume(DiamondForgeHelpers.isValidTestAddress(user));\n        vm.assume(DiamondForgeHelpers.isValidTestAmount(amount));\n        \n        bytes4 selector = bytes4(keccak256(\"transfer(address,uint256)\"));\n        bytes memory data = abi.encode(user, amount);\n        (bool success, ) = _callDiamond(selector, data);\n        assertTrue(success);\n    }\n}\n```\n\n**Built-in DiamondFuzzBase Methods:**\n\n- `_loadDiamondAddress()` - Override to provide Diamond address\n- `_getDiamondABIPath()` - Override to customize ABI file path\n- `_callDiamond(selector, data)` - Call Diamond function\n- `_callDiamondWithValue(selector, data, value)` - Call payable function\n- `_expectDiamondRevert(selector, data, expectedError)` - Test reverts\n- `_verifyFacetRouting(selector, expectedFacet)` - Check selector routing\n- `_measureDiamondGas(selector, data)` - Measure gas consumption\n- `_getDiamondOwner()` - Get Diamond owner address\n- `_hasRole(role, account)` - Check role-based access control\n- `_grantRole(role, account)` - Grant role (requires permissions)\n- `_revokeRole(role, account)` - Revoke role\n\n### DiamondForgeHelpers - Utility Library\n\nUse `DiamondForgeHelpers` for validation, assertions, and DiamondLoupe queries:\n\n```solidity\nimport \"@diamondslab/diamonds-hardhat-foundry/contracts/DiamondForgeHelpers.sol\";\n\ncontract MyTest is Test {\n    using DiamondForgeHelpers for address;\n\n    function setUp() public {\n        address diamond = deployDiamond();\n        \n        // Validate Diamond deployment\n        DiamondForgeHelpers.assertValidDiamond(diamond);\n        \n        // Validate facet\n        address facet = getFacet();\n        DiamondForgeHelpers.assertValidFacet(facet, \"MyFacet\");\n    }\n\n    function testFuzz_ValidInputs(address addr, uint256 amount) public {\n        // Filter fuzz inputs\n        vm.assume(DiamondForgeHelpers.isValidTestAddress(addr));\n        vm.assume(DiamondForgeHelpers.isValidTestAmount(amount));\n        // Your test logic\n    }\n\n    function testSelectorRouting() public {\n        bytes4 selector = bytes4(keccak256(\"someFunction()\"));\n        \n        // Assert selector exists\n        DiamondForgeHelpers.assertSelectorExists(diamond, selector);\n        \n        // Assert routing to expected facet\n        DiamondForgeHelpers.assertSelectorRouting(diamond, selector, expectedFacet);\n        \n        // Get facet address\n        address facet = DiamondForgeHelpers.getFacetAddress(diamond, selector);\n    }\n}\n```\n\n**DiamondForgeHelpers Functions:**\n\n- `assertValidDiamond(address)` - Validate Diamond deployment\n- `assertValidFacet(address, name)` - Validate facet deployment\n- `isValidTestAddress(address)` - Filter fuzz addresses\n- `isValidTestAmount(uint256)` - Filter fuzz amounts\n- `assertSelectorExists(diamond, selector)` - Verify selector registered\n- `assertSelectorRouting(diamond, selector, facet)` - Verify routing\n- `getFacetAddress(diamond, selector)` - Get facet for selector\n- `getFacetAddresses(diamond)` - Get all facet addresses\n- `getFacetSelectors(diamond, facet)` - Get selectors for facet\n- `getDiamondOwner(diamond)` - Get owner address\n- `boundAddress(seed)` - Generate valid fuzz address\n- `boundAmount(seed, min, max)` - Generate valid fuzz amount\n- `selectorsEqual(a, b)` - Compare selector arrays\n\n### DiamondABILoader - ABI File Parser\n\nLoad and parse Diamond ABI files in your tests:\n\n```solidity\nimport \"@diamondslab/diamonds-hardhat-foundry/contracts/DiamondABILoader.sol\";\n\ncontract MyIntegrationTest is Test {\n    using DiamondABILoader for string;\n\n    function testABILoading() public {\n        // Load Diamond ABI\n        string memory abiJson = DiamondABILoader.loadDiamondABI(\"./diamond-abi/MyDiamond.json\");\n        \n        // Extract selectors and signatures\n        bytes4[] memory selectors = abiJson.extractSelectors();\n        string[] memory signatures = abiJson.extractSignatures();\n        \n        console.log(\"Functions found:\", selectors.length);\n        \n        // Get function info\n        for (uint i = 0; i < selectors.length; i++) {\n            (bytes4 sel, string memory sig) = abiJson.getFunctionInfo(i);\n            console.log(\"Function:\", sig);\n        }\n    }\n}\n```\n\n**DiamondABILoader Functions:**\n\n- `loadDiamondABI(path)` - Load ABI JSON from file\n- `extractSelectors(abiJson)` - Extract all function selectors\n- `extractSignatures(abiJson)` - Extract all function signatures\n- `getFunctionInfo(abiJson, index)` - Get selector and signature\n- `verifySelectorsMatch(abiJson, expectedSelectors)` - Validate selectors\n\n### 5. Run Foundry Tests\n\n```bash\nnpx hardhat diamonds-forge:test\n```\n\n## Hardhat Tasks\n\n### `diamonds-forge:init`\n\nInitialize the Foundry test directory structure.\n\n**Options:**\n\n- `--helpers-dir <path>` - Custom directory for helpers (default: `test/foundry/helpers`)\n- `--examples` - Generate example tests (default: from config)\n- `--force` - Overwrite existing files\n\n**Example:**\n\n```bash\nnpx hardhat diamonds-forge:init --helpers-dir test/forge/helpers --examples\n```\n\n### `diamonds-forge:deploy`\n\nDeploy a Diamond contract to the specified network.\n\n**Options:**\n\n- `--diamond-name <name>` - Name of the Diamond to deploy (default: from config)\n- `--network <name>` - Network to deploy to (default: `hardhat`)\n- `--reuse` - Reuse existing deployment if found (default: from config)\n- `--force` - Force new deployment even if one exists\n\n**Example:**\n\n```bash\nnpx hardhat diamonds-forge:deploy --diamond-name MyDiamond --network sepolia\n```\n\n### `diamonds-forge:generate-helpers`\n\nGenerate Solidity helper contract with deployment data.\n\n**Options:**\n\n- `--diamond-name <name>` - Name of the Diamond (default: from config)\n- `--output-dir <path>` - Output directory for helpers (default: from config)\n- `--network <name>` - Network to use for deployment data (default: `hardhat`)\n\n**Example:**\n\n```bash\nnpx hardhat diamonds-forge:generate-helpers --diamond-name MyDiamond --output-dir test/foundry/helpers\n```\n\n### `diamonds-forge:test`\n\nRun Foundry tests with optional deployment and helper generation.\n\n**Options:**\n\n- `--diamond-name <name>` - Diamond to deploy/test (default: from config)\n- `--network <name>` - Network for deployment (default: from config)\n- `--skip-deployment` - Skip deployment step\n- `--skip-helpers` - Skip helper generation step\n- `--match-test <pattern>` - Run tests matching pattern\n- `--match-contract <pattern>` - Run tests in matching contracts\n- `--verbosity <level>` - Forge verbosity level (1-5)\n- `--gas-report` - Show gas usage report\n\n**Example:**\n\n```bash\n# Run all tests with gas reporting\nnpx hardhat diamonds-forge:test --gas-report\n\n# Run specific tests with high verbosity\nnpx hardhat diamonds-forge:test --match-test \"testOwnership\" --verbosity 4\n\n# Skip deployment (use existing)\nnpx hardhat diamonds-forge:test --skip-deployment --match-contract \"MyTest\"\n```\n\n### `diamonds-forge:coverage`\n\nRun forge coverage for your Diamond contracts with full integration support.\n\n**Important:** Coverage requires a deployed Diamond on a persistent network (like localhost). See workflow below.\n\n**Options:**\n\n- `--diamond-name <name>` - Diamond to analyze (default: from config)\n- `--network <name>` - Network for deployment (default: from config)\n- `--report <format>` - Report format: summary, lcov, debug, bytecode (default: summary)\n- `--report-file <path>` - Output file for coverage report\n- `--lcov-version <version>` - LCOV version for LCOV reports (default: v1)\n- `--match-test <pattern>` - Run tests matching pattern\n- `--match-contract <pattern>` - Run tests in matching contracts\n- `--match-path <glob>` - Run tests in files matching glob\n- `--no-match-test <pattern>` - Skip tests matching pattern\n- `--no-match-contract <pattern>` - Skip tests in matching contracts\n- `--no-match-path <glob>` - Skip tests in files matching glob\n- `--no-match-coverage <pattern>` - Exclude contracts from coverage\n- `--verbosity <level>` - Verbosity level: 0-5 (default: 0)\n- `--color <mode>` - Color output: auto, always, never (default: auto)\n- And many more options for filtering, optimization, and EVM configuration\n\n**Workflow (Required):**\n\n```bash\n# Step 1: Start Hardhat node (persistent network)\nnpx hardhat node\n\n# Step 2: Deploy Diamond to localhost network (in another terminal)\nnpx hardhat diamonds-forge:deploy --diamond-name MyDiamond --network localhost\n\n# Step 3: Run coverage against deployed Diamond\nnpx hardhat diamonds-forge:coverage --diamond-name MyDiamond --network localhost\n```\n\n**Examples:**\n\n```bash\n# Basic coverage with default summary\nnpx hardhat diamonds-forge:coverage --diamond-name MyDiamond --network localhost\n\n# Generate LCOV report for CI/CD\nnpx hardhat diamonds-forge:coverage \\\n  --diamond-name MyDiamond \\\n  --network localhost \\\n  --report lcov \\\n  --report-file coverage/lcov.info\n\n# Coverage for specific test patterns\nnpx hardhat diamonds-forge:coverage \\\n  --diamond-name MyDiamond \\\n  --network localhost \\\n  --match-contract \"Unit\" \\\n  --verbosity 2\n\n# Multiple report formats\nnpx hardhat diamonds-forge:coverage \\\n  --diamond-name MyDiamond \\\n  --network localhost \\\n  --report summary \\\n  --report lcov \\\n  --report debug\n```\n\n**Important Notes:**\n- Always specify `--network localhost` (coverage needs deployed contracts)\n- Cannot use `--network hardhat` (ephemeral in-memory network)\n- Diamond must be deployed before running coverage\n- Same workflow as `diamonds-forge:test` - both require persistent network\n\n**See the [Coverage Guide](../../docs/FOUNDRY_FORGE_DIAMONDS_COVERAGE.md) for complete documentation, CI/CD integration examples, and best practices.**\n\n## Dynamic Helper Generation\n\nVersion 2.0.0+ introduces **dynamic helper generation** that creates deployment-specific Solidity helpers without hardcoded addresses.\n\n### How It Works\n\nWhen you deploy a Diamond and generate helpers, the plugin creates `test/foundry/helpers/DiamondDeployment.sol` with:\n\n```solidity\nlibrary DiamondDeployment {\n    /// @notice Get the deployed Diamond address\n    function getDiamondAddress() internal pure returns (address) {\n        return 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512;\n    }\n\n    /// @notice Get the deployer address\n    function getDeployerAddress() internal pure returns (address) {\n        return 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266;\n    }\n    \n    // Additional deployment-specific data...\n}\n```\n\n**Key Benefits:**\n\n- ✅ **No hardcoded addresses in test files** - All addresses come from deployment records\n- ✅ **Network-specific helpers** - Different helpers for different networks\n- ✅ **Automatic regeneration** - Helpers update when you redeploy\n- ✅ **Type-safe** - Solidity library ensures compile-time validation\n\n### Using Generated Helpers\n\n```solidity\nimport \"../helpers/DiamondDeployment.sol\";\n\ncontract MyTest is Test {\n    address diamond;\n    address deployer;\n\n    function setUp() public {\n        // Load from generated helpers\n        diamond = DiamondDeployment.getDiamondAddress();\n        deployer = DiamondDeployment.getDeployerAddress();\n        \n        // Use in tests\n        vm.prank(deployer);\n        IDiamond(diamond).someFunction();\n    }\n}\n```\n\n## Deployment Management\n\nThe plugin provides flexible deployment management with two modes:\n\n### Ephemeral Deployments (Default)\n\nFor quick testing without persisting deployment records:\n\n```bash\n# Deploy Diamond for this test run only\nnpx hardhat diamonds-forge:test --diamond-name MyDiamond\n\n# Deployment is cached in memory but not saved to file\n# Helpers are generated from cached data\n# Next run will deploy fresh Diamond\n```\n\n**Use ephemeral mode when:**\n- Running tests in CI/CD\n- Testing with default Hardhat network\n- You don't need to reuse deployments\n- Each test run should start clean\n\n### Persistent Deployments\n\nSave deployment records for reuse across test runs:\n\n```bash\n# Deploy and save deployment record\nnpx hardhat diamonds-forge:deploy --diamond-name MyDiamond --network localhost\n\n# Run tests using saved deployment\nnpx hardhat diamonds-forge:test --network localhost --use-deployment\n\n# Deployment is loaded from file\n# Subsequent runs reuse the same Diamond\n```\n\n**Use persistent mode when:**\n- Testing on persistent networks (localhost, testnets)\n- Developing against specific Diamond deployment\n- Testing upgrade scenarios\n- Running integration tests\n\n### Task Flags Reference\n\n**Deployment Control:**\n- `--save-deployment` - Save deployment record to file (persistent mode)\n- `--use-deployment` - Load existing deployment instead of deploying new one\n- `--force-deploy` - Force new deployment even if one exists\n\n**Helper Control:**\n- `--skip-helpers` - Don't generate DiamondDeployment.sol\n- `--helpers-dir <path>` - Custom output directory for helpers\n\n**Test Filtering:**\n- `--match-test <pattern>` - Run only tests matching name pattern\n- `--match-contract <contract>` - Run only tests in specified contract\n- `--match-path <path>` - Run only tests in files matching path\n\n**Output Control:**\n- `--verbosity <1-5>` - Set Forge output verbosity (default: 2)\n- `--gas-report` - Display detailed gas usage report\n- `--coverage` - Generate test coverage report\n\n**Network Control:**\n- `--network <name>` - Network to use (hardhat, localhost, sepolia, etc.)\n- `--fork-url <url>` - Custom RPC URL for forking\n\n### Examples\n\n```bash\n# Quick ephemeral test (default)\nnpx hardhat diamonds-forge:test\n\n# Save deployment for reuse\nnpx hardhat diamonds-forge:test --save-deployment --network localhost\n\n# Reuse saved deployment\nnpx hardhat diamonds-forge:test --use-deployment --network localhost\n\n# Test specific functionality with gas report\nnpx hardhat diamonds-forge:test --match-test \"testOwnership\" --gas-report\n\n# Run only fuzz tests with high verbosity\nnpx hardhat diamonds-forge:test --match-contract \"Fuzz\" --verbosity 4\n\n# Force redeploy even if deployment exists\nnpx hardhat diamonds-forge:test --force-deploy --network localhost\n```\n\n## Snapshot and Restore\n\nThe `DiamondForgeHelpers` library provides snapshot/restore functionality for advanced testing scenarios.\n\n### Basic Usage\n\n```solidity\nimport \"@diamondslab/diamonds-hardhat-foundry/contracts/DiamondForgeHelpers.sol\";\n\ncontract MyTest is Test {\n    using DiamondForgeHelpers for *;\n\n    function test_MultipleScenarios() public {\n        // Save initial state\n        uint256 snapshot = DiamondForgeHelpers.snapshotState();\n        \n        // Test scenario A\n        runScenarioA();\n        \n        // Restore to initial state\n        DiamondForgeHelpers.revertToSnapshot(snapshot);\n        \n        // Test scenario B from same starting point\n        runScenarioB();\n    }\n}\n```\n\n### When to Use Snapshots\n\n**Good Use Cases:**\n- Testing multiple outcomes from same initial state\n- Expensive setup that you want to reuse\n- Testing state transitions and rollbacks\n- Benchmarking gas costs across scenarios\n\n**Don't Use For:**\n- Normal test isolation (Forge does this automatically)\n- Production/testnet testing (snapshots only work locally)\n\n### Snapshot Examples\n\nSee comprehensive examples in `test/foundry/integration/SnapshotExample.t.sol`:\n\n```bash\nforge test --match-path \"**/SnapshotExample.t.sol\" -vv\n```\n\n**Available in examples:**\n- Basic snapshot/restore workflow\n- Multiple snapshots with different states\n- Snapshot with contract state changes  \n- Test isolation patterns\n\nFor detailed snapshot documentation, see [TESTING.md](./docs/TESTING.md#snapshot-and-restore).\n\n## Programmatic API\n\nUse the framework classes directly in your scripts:\n\n```typescript\nimport hre from \"hardhat\";\nimport {\n  ForgeFuzzingFramework,\n  DeploymentManager,\n  HelperGenerator,\n} from \"@diamondslab/diamonds-hardhat-foundry\";\n\n// Deploy a Diamond\nconst deployer = new DeploymentManager(hre);\nawait deployer.deploy(\"MyDiamond\", \"hardhat\");\n\n// Generate helpers\nconst generator = new HelperGenerator(hre);\nawait generator.scaffoldProject();\nawait generator.generateDeploymentHelpers(\"MyDiamond\", \"hardhat\");\n\n// Run tests\nconst framework = new ForgeFuzzingFramework(hre);\nawait framework.runTests({\n  diamondName: \"MyDiamond\",\n  networkName: \"hardhat\",\n  skipDeployment: false,\n  skipHelpers: false,\n  forgeTestOptions: {\n    matchTest: \"testFuzz\",\n    verbosity: 3,\n  },\n});\n```\n\n### DeploymentManager\n\nManages Diamond contract deployments.\n\n**Methods:**\n\n- `deploy(diamondName, networkName, force?)` - Deploy a Diamond\n- `getDeployment(diamondName, networkName, chainId?)` - Get deployment data\n- `ensureDeployment(diamondName, networkName, force?)` - Deploy if needed\n- `hasDeploymentRecord(diamondName, networkName)` - Check if deployment exists\n\n### HelperGenerator\n\nGenerates Solidity test helpers and examples.\n\n**Methods:**\n\n- `scaffoldProject(outputDir?, generateExamples?)` - Create test directory structure\n- `generateDeploymentHelpers(diamondName, networkName, outputDir?)` - Generate DiamondDeployment.sol\n- `generateExampleTests(testTypes?, outputDir?)` - Generate example test files\n\n### ForgeFuzzingFramework\n\nOrchestrates the complete test workflow.\n\n**Methods:**\n\n- `runTests(options)` - Run complete test workflow\n- `deployOnly(diamondName?, networkName?, force?)` - Deploy only\n- `generateHelpersOnly(diamondName?, networkName?, outputDir?)` - Generate helpers only\n\n## Configuration\n\nConfigure the plugin in `hardhat.config.ts`:\n\n```typescript\nexport default {\n  diamondsFoundry: {\n    // Directory for generated helper contracts\n    helpersDir: \"test/foundry/helpers\",\n\n    // Whether to generate example tests during init\n    generateExamples: true,\n\n    // Types of example tests to generate\n    exampleTests: [\"unit\", \"integration\", \"fuzz\"],\n\n    // Default network for deployments\n    defaultNetwork: \"hardhat\",\n\n    // Reuse existing deployments instead of redeploying\n    reuseDeployment: false,\n\n    // Default arguments to pass to forge test\n    forgeTestArgs: [\"-vv\", \"--gas-report\"],\n  },\n};\n```\n\n**Configuration Options:**\n\n| Option             | Type       | Default                           | Description                     |\n| ------------------ | ---------- | --------------------------------- | ------------------------------- |\n| `helpersDir`       | `string`   | `\"test/foundry/helpers\"`          | Directory for generated helpers |\n| `generateExamples` | `boolean`  | `true`                            | Generate example tests on init  |\n| `exampleTests`     | `array`    | `[\"unit\", \"integration\", \"fuzz\"]` | Types of examples to generate   |\n| `defaultNetwork`   | `string`   | `\"hardhat\"`                       | Default deployment network      |\n| `reuseDeployment`  | `boolean`  | `false`                           | Reuse existing deployments      |\n| `forgeTestArgs`    | `string[]` | `[]`                              | Default forge test arguments    |\n\n## Base Contracts\n\nThe plugin provides base Solidity contracts for your tests:\n\n### DiamondForgeHelpers\n\nUtility functions for Diamond testing:\n\n```solidity\nimport \"@diamondslab/diamonds-hardhat-foundry/contracts/DiamondForgeHelpers.sol\";\n\ncontract MyTest is Test {\n    using DiamondForgeHelpers for *;\n\n    function testDiamond() public {\n        address diamond = DiamondForgeHelpers.getDiamondAddress();\n        DiamondForgeHelpers.logDiamondInfo(diamond);\n        DiamondForgeHelpers.assertValidDiamond(diamond);\n    }\n}\n```\n\n### DiamondFuzzBase\n\nBase contract for fuzz tests:\n\n```solidity\nimport \"@diamondslab/diamonds-hardhat-foundry/contracts/DiamondFuzzBase.sol\";\n\ncontract MyFuzzTest is DiamondFuzzBase {\n    function setUp() public override {\n        super.setUp();\n        // Your setup\n    }\n\n    function testFuzz_Transfer(address to, uint256 amount) public {\n        assumeValidAddress(to);\n        amount = boundValue(amount, 1, 1000 ether);\n        // Test logic\n    }\n}\n```\n\n## Usage Examples\n\n### Example 1: Deploy and Test\n\n```bash\n# Initialize project\nnpx hardhat diamonds-forge:init\n\n# Deploy Diamond\nnpx hardhat diamonds-forge:deploy --diamond-name MyDiamond\n\n# Run tests\nnpx hardhat diamonds-forge:test\n```\n\n### Example 2: Custom Workflow\n\n```typescript\nimport hre from \"hardhat\";\nimport { ForgeFuzzingFramework } from \"@diamondslab/diamonds-hardhat-foundry\";\n\nasync function main() {\n  const framework = new ForgeFuzzingFramework(hre);\n\n  // Deploy only\n  await framework.deployOnly(\"MyDiamond\", \"sepolia\");\n\n  // Generate helpers\n  await framework.generateHelpersOnly(\"MyDiamond\", \"sepolia\");\n\n  // Run specific tests\n  await framework.runTests({\n    skipDeployment: true,\n    skipHelpers: true,\n    forgeTestOptions: {\n      matchContract: \"MyIntegrationTest\",\n      verbosity: 4,\n    },\n  });\n}\n\nmain().catch(console.error);\n```\n\n### Example 3: CI/CD Integration\n\n```yaml\n# .github/workflows/test.yml\nname: Tests\non: [push, pull_request]\n\njobs:\n  foundry-tests:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n      - uses: foundry-rs/foundry-toolchain@v1\n      - uses: actions/setup-node@v3\n        with:\n          node-version: \"18\"\n\n      - run: npm ci\n      - run: npx hardhat diamonds-forge:deploy\n      - run: npx hardhat diamonds-forge:test --gas-report\n```\n\n## Integration with Existing Diamonds Projects\n\nThis plugin is designed to work seamlessly with existing `@diamondslab/diamonds` projects:\n\n1. **Use your existing Diamond configuration** - The plugin reads from your project's Diamond deployment configuration\n2. **LocalDiamondDeployer integration** - Works with your project's `LocalDiamondDeployer` class\n3. **Deployment records** - Uses the same deployment record format as `@diamondslab/diamonds`\n4. **Hardhat configuration** - Integrates with `@diamondslab/hardhat-diamonds` settings\n\n**Example with existing Diamond:**\n\n```typescript\n// Your existing hardhat.config.ts\nimport \"@diamondslab/hardhat-diamonds\";\nimport \"@diamondslab/diamonds-hardhat-foundry\";\n\nexport default {\n  diamonds: {\n    diamondsPath: \"./diamonds\",\n    deploymentsPath: \"./diamonds/ExampleDiamond/deployments\",\n  },\n  diamondsFoundry: {\n    helpersDir: \"test/foundry/helpers\",\n    defaultNetwork: \"hardhat\",\n  },\n};\n```\n\n## Troubleshooting\n\n### Common Issues\n\n#### Foundry Not Found\n\n**Error:** `Foundry not installed` or `forge: command not found`\n\n**Solution:** Install Foundry from [getfoundry.sh](https://getfoundry.sh/):\n\n```bash\ncurl -L https://foundry.paradigm.xyz | bash\nfoundryup\n```\n\nVerify installation:\n```bash\nforge --version\n```\n\n#### LocalDiamondDeployer Not Found\n\n**Error:** `LocalDiamondDeployer not found` or `Cannot find module`\n\n**Solution:** Ensure you have the `@diamondslab/hardhat-diamonds` package installed:\n\n```bash\nnpm install --save-dev @diamondslab/hardhat-diamonds\n```\n\nImport it in your `hardhat.config.ts`:\n\n```typescript\nimport \"@diamondslab/hardhat-diamonds\";\nimport \"@diamondslab/diamonds-hardhat-foundry\";\n```\n\n#### Deployment Record Not Found\n\n**Error:** `No deployment record found for MyDiamond-hardhat-31337.json`\n\n**Solution:** Deploy your Diamond first:\n\n```bash\nnpx hardhat diamonds-forge:deploy --diamond-name MyDiamond --network localhost\n```\n\nOr use ephemeral deployment (default) which doesn't require saved records:\n\n```bash\nnpx hardhat diamonds-forge:test\n```\n\n#### Diamond Has No Code\n\n**Error:** `DiamondFuzzBase: Diamond has no code` when running tests\n\n**Cause:** Test is trying to use a Diamond address that doesn't have deployed code.\n\n**Solutions:**\n\n1. **For tests using hardhat network (ephemeral):**\n   - Tests should deploy their own Diamond in `setUp()`\n   - See `BasicDiamondIntegration.t.sol` for self-deploying pattern\n\n2. **For tests using deployed Diamond:**\n   - Start Hardhat node: `npx hardhat node`\n   - Deploy Diamond: `npx hardhat diamonds-forge:deploy --network localhost`\n   - Run tests: `npx hardhat diamonds-forge:test --network localhost`\n\n3. **Make tests fork-aware:**\n```solidity\nfunction setUp() public {\n    diamond = DiamondDeployment.getDiamondAddress();\n    \n    // Check if Diamond is deployed (forking)\n    if (diamond.code.length == 0) {\n        // Skip test or deploy in test\n        return;\n    }\n    \n    // Proceed with test setup\n}\n```\n\n#### Generated Helpers Not Compiling\n\n**Error:** Compilation errors in `test/foundry/helpers/DiamondDeployment.sol`\n\n**Solutions:**\n\n1. Ensure Foundry remappings are correct in `foundry.toml`:\n```toml\n[profile.default]\nsrc = \"contracts\"\ntest = \"test/foundry\"\nremappings = [\n    \"@diamondslab/diamonds-hardhat-foundry/=node_modules/@diamondslab/diamonds-hardhat-foundry/\",\n]\n```\n\n2. Verify Diamond deployed successfully before generating helpers:\n```bash\nnpx hardhat diamonds-forge:deploy --diamond-name MyDiamond\nnpx hardhat diamonds-forge:generate-helpers --diamond-name MyDiamond\n```\n\n3. Check that deployment data is valid:\n   - Look in `diamonds/MyDiamond/deployments/`\n   - Verify JSON file contains `DiamondAddress` field\n\n#### Peer Dependency Warnings\n\n**Warning:** `ERESOLVE unable to resolve dependency tree` or peer dependency conflicts\n\n**Solution:** Install all required peer dependencies:\n\n```bash\nnpm install --save-dev \\\n  @diamondslab/diamonds \\\n  @diamondslab/hardhat-diamonds \\\n  @nomicfoundation/hardhat-ethers \\\n  ethers \\\n  hardhat\n```\n\nFor package.json, specify compatible versions:\n\n```json\n{\n  \"devDependencies\": {\n    \"@diamondslab/diamonds\": \"^3.0.0\",\n    \"@diamondslab/hardhat-diamonds\": \"^2.0.0\",\n    \"@diamondslab/diamonds-hardhat-foundry\": \"^2.0.0\",\n    \"@nomicfoundation/hardhat-ethers\": \"^3.0.0\",\n    \"ethers\": \"^6.0.0\",\n    \"hardhat\": \"^2.26.0\"\n  }\n}\n```\n\n#### Tests Pass Locally But Fail in CI\n\n**Cause:** CI environment differences (network, timing, dependencies)\n\n**Solutions:**\n\n1. **Ensure Foundry is installed in CI:**\n```yaml\n# GitHub Actions example\n- name: Install Foundry\n  uses: foundry-rs/foundry-toolchain@v1\n\n- name: Run tests\n  run: npx hardhat diamonds-forge:test\n```\n\n2. **Use ephemeral deployments for CI (default):**\n```bash\n# This works in CI without persistent network\nnpx hardhat diamonds-forge:test\n```\n\n3. **For persistent network testing in CI:**\n```yaml\n- name: Start Hardhat node\n  run: npx hardhat node &\n  \n- name: Wait for node\n  run: sleep 5\n  \n- name: Run tests\n  run: npx hardhat diamonds-forge:test --network localhost\n```\n\n#### Import Resolution Errors\n\n**Error:** `File import callback not supported` or module resolution failures\n\n**Solution:** Check your `hardhat.config.ts` has correct imports:\n\n```typescript\nimport \"@nomicfoundation/hardhat-ethers\";\nimport \"@diamondslab/hardhat-diamonds\";\nimport \"@diamondslab/diamonds-hardhat-foundry\";\n\nexport default {\n  solidity: \"0.8.28\",\n  // ... config\n};\n```\n\nEnsure TypeScript compilation targets CommonJS:\n\n```json\n// tsconfig.json\n{\n  \"compilerOptions\": {\n    \"module\": \"CommonJS\",\n    \"moduleResolution\": \"node\"\n  }\n}\n```\n\n### Getting Help\n\nIf you encounter issues not covered here:\n\n1. Check the [TESTING.md](./docs/TESTING.md) guide for detailed testing workflows\n2. Review [MIGRATION.md](./docs/MIGRATION.md) if upgrading from v1.x\n3. See [DESIGN.md](./docs/DESIGN.md) for architecture details\n4. Open an issue on [GitHub](https://github.com/DiamondsLab/diamonds-hardhat-foundry/issues)\n\n## Foundry Not Found\n\n**Error:** `Foundry not installed`\n\n**Solution:** Install Foundry from [getfoundry.sh](https://getfoundry.sh/):\n\n```bash\ncurl -L https://foundry.paradigm.xyz | bash\nfoundryup\n```\n\n### LocalDiamondDeployer Not Found\n\n**Error:** `LocalDiamondDeployer not found`\n\n**Solution:** Ensure you have a `LocalDiamondDeployer` class in your project at `scripts/setup/LocalDiamondDeployer.ts`. This is required for Diamond deployments.\n\n### Deployment Record Not Found\n\n**Error:** `No deployment record found`\n\n**Solution:** Deploy your Diamond first:\n\n```bash\nnpx hardhat diamonds-forge:deploy --diamond-name YourDiamond\n```\n\n### Generated Helpers Not Compiling\n\n**Error:** Compilation errors in `DiamondDeployment.sol`\n\n**Solution:** Ensure:\n\n1. Foundry is properly installed\n2. Your `foundry.toml` includes the correct remappings\n3. The Diamond was successfully deployed before generating helpers\n\n### Peer Dependency Warnings\n\n**Warning:** `@diamondslab/diamonds not found`\n\n**Solution:** Install required peer dependencies:\n\n```bash\nnpm install --save-dev @diamondslab/diamonds @diamondslab/hardhat-diamonds\n```\n\n## Test Suite\n\nThis module maintains a comprehensive test suite with **100% pass rate** across multiple testing categories:\n\n### Test Statistics\n\n- **Total Tests**: 144\n- **Passing**: 141 (98%)\n- **Skipped**: 3 (intentional - deployment-dependent)\n- **Failed**: 0\n- **Execution Time**: ~8-9 seconds\n\n### Test Categories\n\n#### Unit Tests (3 tests)\nBasic functionality validation:\n- Diamond deployment verification\n- Deployer address validation\n- Example functionality tests\n\n#### Integration Tests (14 tests)\nReal-world workflow validation:\n- Multi-facet interaction workflows\n- Cross-facet state management\n- Diamond deployment validation\n- Facet introspection and enumeration\n- On-chain selector verification\n- Gas measurement and profiling\n\n#### Fuzz Tests (93 tests)\nProperty-based testing with randomized inputs:\n- **Access Control** (19 tests): Role granting, revocation, enumeration\n- **Ownership** (7 tests): Transfer, renounce, unauthorized access\n- **Routing** (11 tests): Selector routing, facet lookup, consistency\n- **ABI Loader** (11 tests): ABI parsing, selector extraction, signature verification\n- **Example Fuzz** (5 tests): Address/amount validation, bounded values\n\n#### Invariant Tests (24 tests)\nState invariants and Diamond integrity:\n- **Diamond Invariants** (13 tests): Facet validity, selector consistency, role hierarchy\n- **Proxy Invariants** (11 tests): ABI matching, facet existence, storage consistency\n\n### Running Tests\n\nRun the complete test suite:\n\n```bash\nnpx hardhat diamonds-forge:test --network localhost\n```\n\nRun specific test categories:\n\n```bash\n# Unit tests only\nforge test --match-path \"test/foundry/unit/**/*.t.sol\"\n\n# Fuzz tests only\nforge test --match-path \"test/foundry/fuzz/**/*.t.sol\"\n\n# Invariant tests only\nforge test --match-path \"test/foundry/invariant/**/*.t.sol\"\n\n# Integration tests only\nforge test --match-path \"test/foundry/integration/**/*.t.sol\"\n```\n\n### Test Patterns\n\nAll tests follow best practices:\n\n- **Role Setup**: Access control tests grant necessary roles in `setUp()`\n- **Invariant Targeting**: Invariant tests use `targetContract()` for fuzzing\n- **Selector Filtering**: Tests skip undeployed selectors (facetAddress returns address(0))\n- **Gas Profiling**: Gas measurements included in relevant tests\n- **Comprehensive Coverage**: Edge cases, error conditions, and happy paths\n\nSee [TESTING.md](./docs/TESTING.md) for detailed testing guide and patterns.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nMIT © [DiamondsLab](https://github.com/DiamondsLab)\n\n## Links\n\n- [GitHub Repository](https://github.com/DiamondsLab/diamonds-hardhat-foundry)\n- [npm Package](https://www.npmjs.com/package/@diamondslab/diamonds-hardhat-foundry)\n- [@diamondslab/diamonds](https://github.com/DiamondsLab/diamonds)\n- [@diamondslab/hardhat-diamonds](https://github.com/DiamondsLab/hardhat-diamonds)\n- [ERC-2535 Diamond Standard](https://eips.ethereum.org/EIPS/eip-2535)\n- [Foundry Book](https://book.getfoundry.sh/)\n","readmeFilename":"README.md"}