Skip to content

Instantly share code, notes, and snippets.

@erdesigns-eu
Created November 23, 2022 14:33
Show Gist options
  • Save erdesigns-eu/54da9c5a0579aaaa96f8c5c77350a659 to your computer and use it in GitHub Desktop.
Save erdesigns-eu/54da9c5a0579aaaa96f8c5c77350a659 to your computer and use it in GitHub Desktop.
Test dependencies in package.json
/**
* Terminal colors and style
*/
const Color = {
Reset: "\x1b[0m",
Bright: "\x1b[1m",
Dim: "\x1b[2m",
Underscore: "\x1b[4m",
Blink: "\x1b[5m",
Reverse: "\x1b[7m",
Hidden: "\x1b[8m",
FgBlack: "\x1b[30m",
FgRed: "\x1b[31m",
FgGreen: "\x1b[32m",
FgYellow: "\x1b[33m",
FgBlue: "\x1b[34m",
FgMagenta: "\x1b[35m",
FgCyan: "\x1b[36m",
FgWhite: "\x1b[37m",
BgBlack: "\x1b[40m",
BgRed: "\x1b[41m",
BgGreen: "\x1b[42m",
BgYellow: "\x1b[43m",
BgBlue: "\x1b[44m",
BgMagenta: "\x1b[45m",
BgCyan: "\x1b[46m",
BgWhite: "\x1b[47m"
}
function colorString(color, string) {
return `${color}${string}${Color.Reset}`;
}
// Load package.json
const packageJSON = require('./package.json');
/**
* Is dependency at least version * or higher
* @param version Dependency version
* @param compare Compare version
* @returns Boolean
*/
const isAtLeastOrHigher = (version, compare) => {
const dependencyVersion = version.replace('^', '').split('.').map((n) => Number.parseInt(n));
const verMajor = dependencyVersion[0];
const verMinor = dependencyVersion[1];
const verBuild = dependencyVersion[2];
const compareVersion = compare.replace('^', '').split('.').map((n) => Number.parseInt(n));
const comMajor = compareVersion[0];
const comMinor = compareVersion[1];
const comBuild = compareVersion[2];
const passMajor = (verMajor >= comMajor);
const passMinor = (verMajor === comMajor ? verMinor >= comMinor : passMajor);
const passBuild = verBuild && comBuild ? (verMinor === comMinor ? verBuild >= comBuild : passMinor) : true;
return passMajor && passMinor && passBuild;
}
/**
* Is dependency maximum version * or lower
* @param version Dependency version
* @param compare Compare version
* @returns Boolean
*/
const isMaximumOrLower = (version, compare) => {
const dependencyVersion = version.replace('^').split('.').map((n) => Number.parseInt(n));
const verMajor = dependencyVersion[0];
const verMinor = dependencyVersion[1];
const verBuild = dependencyVersion[2];
const compareVersion = compare.replace('^').split('.').map((n) => Number.parseInt(n));
const comMajor = compareVersion[0];
const comMinor = compareVersion[1];
const comBuild = compareVersion[2];
const passMajor = (verMajor <= comMajor);
const passMinor = (verMajor === comMajor ? verMinor <= comMinor : passMajor);
const passBuild = verBuild && comBuild ? (verMinor === comMinor ? verBuild <= comBuild : passMinor) : true;
return passMajor && passMinor && passBuild;
}
/**
* Check dependency packages and validate version
* @param name Name of the package
* @param versionMin Minimum version
* @param versionMax Maximum version
*/
const checkDependency = (name, versionMin, versionMax) => {
const dependencies = Object.entries(packageJSON.dependencies);
const dependency = dependencies.find((d) => String(d[0]).match(name));
if (!dependency) {
throw new Error(`Dependency ${colorString(Color.BgRed, name)} could not be found in package.json!`);
}
const dependencyVersion = String(dependency[1]);
if (!isAtLeastOrHigher(dependencyVersion, versionMin)) {
throw new Error(`Dependency ${name} is version ${colorString(Color.BgRed, dependencyVersion)} but needs to be at least version ${colorString(Color.BgRed, versionMin)}!`);
}
if (versionMax && !isMaximumOrLower(dependencyVersion, versionMax)) {
throw new Error(`Dependency ${name} is version ${colorString(Color.BgRed, dependencyVersion)} but must be maximum version ${colorString(Color.BgRed, versionMax)}!`);
}
return `Dependency ${name}: ${colorString(Color.FgGreen, 'OK')}`;
}
/**
* Various Dependencies
*/
const variousDependencies = [
{ package: '@fortawesome/fontawesome-free', min: '5.0' },
{ package: 'bcryptjs', min: '2.0' }
];
/**
* Check and log dependencies
* @param dependencies Array with dependencies
*/
const executeDependenciesCheck = (name, dependencies) => {
console.log(`${colorString(Color.FgYellow, `Checking ${name} dependencies`)}\n`)
let errors = 0;
dependencies.forEach((dependency) => {
try {
console.log(checkDependency(dependency.package, dependency.min, dependency.max));
} catch (error) {
errors++;
console.log(error.message);
}
});
if (errors === 0) {
console.log('\nFinished with ' + colorString(Color.FgGreen, errors) + ' errors!\n');
} else {
console.log('\nFinished with ' + colorString(Color.FgRed, errors) + ' errors!\n');
}
}
executeDependenciesCheck('Various', variousDependencies);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment