telefunc
Version:
Remote functions. Instead of API.
38 lines (37 loc) • 1.36 kB
JavaScript
export { assertVersion };
export { isVersionOrAbove };
import { assert, assertUsage } from './assert.js';
import { assertIsNotBrowser } from './assertIsNotBrowser.js';
assertIsNotBrowser();
function assertVersion(dependencyName, versionActual, versionExpected) {
assert(versionActual);
assert(versionExpected);
assertUsage(isVersionOrAbove(versionActual, versionExpected), `${dependencyName} ${versionActual} isn't supported, use ${dependencyName} >= ${versionExpected} instead.`);
}
function isVersionOrAbove(versionActual, versionExpected) {
const p1 = parseVersion(versionActual);
const p2 = parseVersion(versionExpected);
// major
if (p1[0] !== p2[0])
return p1[0] > p2[0];
// minor
if (p1[1] !== p2[1])
return p1[1] > p2[1];
// patch
if (p1[2] !== p2[2])
return p1[2] > p2[2];
// Same version
return true;
}
function parseVersion(version) {
// Remove pre-release tag
version = version.split('-')[0];
let partsStr = version.split('.');
// Git seems to be using a fourth number: https://github.com/git/git/tree/master/Documentation/RelNotes
partsStr = partsStr.slice(0, 3);
// major.minor.patch
assert(partsStr.length === 3);
assert(partsStr.every((s) => s.length > 0));
const parts = partsStr.map((s) => parseInt(s, 10));
return parts;
}