UNPKG

@vtex/api

Version:
66 lines (65 loc) 3.64 kB
"use strict"; 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;