From 618ea75cabfa134122ce1781abe51333c7d8c1b4 Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 5 Jun 2025 22:07:33 +0100 Subject: [PATCH] Make dotenv loading optional via constructor flag --- hardhat-setup/networks.ts | 31 ++++++++++++++++++++++++++++--- package.json | 2 +- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/hardhat-setup/networks.ts b/hardhat-setup/networks.ts index 10a62de9..73de9844 100644 --- a/hardhat-setup/networks.ts +++ b/hardhat-setup/networks.ts @@ -2,6 +2,18 @@ import dotenv from 'dotenv'; import { ChainConfig } from '@nomicfoundation/hardhat-verify/src/types'; import { HardhatNetworkAccountsUserConfig, Network, NetworksUserConfig } from 'hardhat/types'; +/** + * @category Hardhat-Setup + * Loads environment variables into process.env using the dotenv package. + * By default, loads variables from a `.env` file in the project root. + * You can provide custom options (e.g. a different path or encoding) via the `options` parameter. + * @param options Optional configuration object for dotenv (e.g. `{ path: '.env.local' }`). + * @see https://github.com/motdotla/dotenv#config + */ +export function loadEnv(options?: dotenv.DotenvConfigOptions): void { + dotenv.config(options); +} + /** * @category Hardhat-Setup * Configuration type for managing Etherscan integration in Hardhat setups. @@ -72,8 +84,16 @@ export class Networks { networks: NetworksUserConfig = {}; etherscan: Etherscan = { apiKey: {}, customChains: [] }; - constructor(useHardhat: boolean = true, forkingNetworkName?: string, saveHardhatDeployments: boolean = false, forkingAccounts?: HardhatNetworkAccountsUserConfig) { - dotenv.config(); + constructor( + useHardhat: boolean = true, + forkingNetworkName?: string, + saveHardhatDeployments: boolean = false, + forkingAccounts?: HardhatNetworkAccountsUserConfig, + autoLoadEnv: boolean = true + ) { + if (autoLoadEnv) { + loadEnv(); + } if (useHardhat || forkingNetworkName) { this.networks.hardhat = { @@ -88,7 +108,12 @@ export class Networks { } if (forkingNetworkName) { - const { url, authKeyHttpHeader } = parseRpcEnv(process.env[`${forkingNetworkName.toUpperCase()}_RPC_URL`] || ''); + const forkRpcKey = `${forkingNetworkName.toUpperCase()}_RPC_URL`; + const forkRpcEnv = process.env[forkRpcKey]; + if (!forkRpcEnv) { + throw new Error(`Missing required environment variable '${forkRpcKey}'. Did you forget to call loadEnv() or set autoLoadEnv to true?`); + } + const { url, authKeyHttpHeader } = parseRpcEnv(forkRpcEnv || ''); this.networks.hardhat!.forking = { url, httpHeaders: authKeyHttpHeader ? { 'auth-key': authKeyHttpHeader } : undefined, diff --git a/package.json b/package.json index eb323724..c8ea7a3e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@1inch/solidity-utils", - "version": "6.6.0", + "version": "6.6.1", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", "exports": {