hardhat
Version:
Hardhat is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.
55 lines (44 loc) • 1.53 kB
text/typescript
import semver from "semver";
import { assertHardhatInvariant } from "../core/errors";
import { SUPPORTED_NODE_VERSIONS } from "./constants";
/**
* Determine if the node version should trigger an unsupported
* warning.
*
* The current rule is that an unsupported warning will be shown if
*
* 1. An odd numbered version of Node.js is used - as this will never go to LTS
* 2. The version is less than the minimum supported version
*
* We intentionally do not warn on newer **even** versions of Node.js.
*/
export function isNodeVersionToWarnOn(nodeVersion: string): boolean {
const supportedVersions = SUPPORTED_NODE_VERSIONS.join(" || ");
// If the version is supported, no need to warn and short circuit
if (semver.satisfies(nodeVersion, supportedVersions)) {
return false;
}
if (_onOddNumberedVersion(nodeVersion)) {
return true;
}
if (_lessThanMinimumSupportedVersion(nodeVersion, supportedVersions)) {
return true;
}
// A newer version of Node.js that will go to LTS
// we have opted not to warn.
return false;
}
function _onOddNumberedVersion(nodeVersion: string) {
return semver.major(nodeVersion) % 2 === 1;
}
function _lessThanMinimumSupportedVersion(
nodeVersion: string,
supportedVersions: string
) {
const minSupportedVersion = semver.minVersion(supportedVersions);
assertHardhatInvariant(
minSupportedVersion !== null,
"Unexpectedly failed to parse the minimum supported version of Node.js"
);
return semver.lt(nodeVersion, minSupportedVersion);
}