@vtex/api
Version:
VTEX I/O API client
66 lines (65 loc) • 3.64 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.majorEqualAndGreaterThan = exports.sameMajor = exports.isValidAppIdOrLocator = exports.appIdToAppAtMajor = exports.formatMajorLocator = exports.versionToMajorRange = exports.versionToMajor = exports.satisfies = exports.formatAppId = exports.parseAppId = exports.isLinkedApp = exports.formatLocator = exports.transformToLinkedLocator = exports.extractVersionFromAppId = exports.removeVersionFromAppId = exports.removeBuild = void 0;
const semver_1 = __importDefault(require("semver"));
// Note: The name that composes the part of the appId that precedes the
// character '@' includes the name given to the app and the vendor name.
const removeBuild = (id) => id.split('+')[0];
exports.removeBuild = removeBuild;
const removeVersionFromAppId = (appId) => appId.split('@')[0];
exports.removeVersionFromAppId = removeVersionFromAppId;
const extractVersionFromAppId = (appId) => appId.split('@').slice(-1)[0];
exports.extractVersionFromAppId = extractVersionFromAppId;
const transformToLinkedLocator = (appId) => appId.replace(/\+build.*$/, '+linked');
exports.transformToLinkedLocator = transformToLinkedLocator;
const formatLocator = (name, versionAndBuild) => `${name}@${(0, exports.removeBuild)(versionAndBuild)}`;
exports.formatLocator = formatLocator;
const isLinkedApp = (app) => app.id.includes('+build');
exports.isLinkedApp = isLinkedApp;
const parseAppId = (appId) => {
const name = (0, exports.removeVersionFromAppId)(appId);
const version = (0, exports.extractVersionFromAppId)(appId);
const splittedVersion = version.split('+');
return {
build: splittedVersion[1],
locator: (0, exports.formatLocator)(name, version),
name,
version: splittedVersion[0],
};
};
exports.parseAppId = parseAppId;
const formatAppId = ({ locator, build }) => (build ? `${locator}+${build}` : locator);
exports.formatAppId = formatAppId;
const satisfies = (appId, version) => {
const { version: appVer } = (0, exports.parseAppId)(appId);
return semver_1.default.satisfies(appVer, version);
};
exports.satisfies = satisfies;
const versionToMajor = (version) => version.split('.')[0];
exports.versionToMajor = versionToMajor;
const versionToMajorRange = (version) => `${(0, exports.versionToMajor)(version)}.x`;
exports.versionToMajorRange = versionToMajorRange;
const formatMajorLocator = (name, version) => {
const majorRange = (0, exports.versionToMajorRange)(version);
return `${name}@${majorRange}`;
};
exports.formatMajorLocator = formatMajorLocator;
const appIdToAppAtMajor = (appId) => {
const { name, version } = (0, exports.parseAppId)(appId);
const majorRange = (0, exports.versionToMajorRange)(version);
return `${name}@${majorRange}`;
};
exports.appIdToAppAtMajor = appIdToAppAtMajor;
// SemVer regex from https://github.com/sindresorhus/semver-regex
const APP_ID_REGEX = /^[\w\-]+\.[\w\-]+@(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[\da-z\-]+(?:\.[\da-z\-]+)*)?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?$/;
const isValidAppIdOrLocator = (appId) => {
return APP_ID_REGEX.test(appId);
};
exports.isValidAppIdOrLocator = isValidAppIdOrLocator;
const sameMajor = (v1, v2) => (0, exports.versionToMajor)(v1) === (0, exports.versionToMajor)(v2);
exports.sameMajor = sameMajor;
const majorEqualAndGreaterThan = (v1, v2) => (0, exports.sameMajor)(v1, v2) && semver_1.default.gt(v1, v2);
exports.majorEqualAndGreaterThan = majorEqualAndGreaterThan;
;