UNPKG

@salesforce/packaging

Version:

Packaging library for the Salesforce packaging platform

124 lines 4.77 kB
"use strict"; /* * Copyright 2026, Salesforce, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.VersionNumber = exports.BuildNumberToken = void 0; const core_1 = require("@salesforce/core"); core_1.Messages.importMessagesDirectory(__dirname); const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'version_number'); var BuildNumberToken; (function (BuildNumberToken) { BuildNumberToken["LATEST_BUILD_NUMBER_TOKEN"] = "LATEST"; BuildNumberToken["NEXT_BUILD_NUMBER_TOKEN"] = "NEXT"; BuildNumberToken["RELEASED_BUILD_NUMBER_TOKEN"] = "RELEASED"; BuildNumberToken["HIGHEST_VERSION_NUMBER_TOKEN"] = "HIGHEST"; BuildNumberToken["NONE_VERSION_NUMBER_TOKEN"] = "NONE"; })(BuildNumberToken || (exports.BuildNumberToken = BuildNumberToken = {})); class VersionNumber { major; minor; patch; build; constructor(major, minor, patch, build) { this.major = major; this.minor = minor; this.patch = patch; this.build = build; } /** * Separates at major.minor string into {major: Number, minor: Number} object * * @param versionString a string in the format of major.minor like '3.2' */ static parseMajorMinor(versionString) { const versions = versionString?.split('.'); if (!versions) { // return nulls so when no version option is provided, the server can infer the correct version return { major: null, minor: null }; } if (versions.length === 2) { return { major: Number(versions[0]), minor: Number(versions[1]), }; } else { throw messages.createError('invalidMajorMinorFormat', [versionString]); } } static from(versionString) { if (!versionString) { throw messages.createError('errorMissingVersionNumber'); } const version = versionString.split('.'); if (version?.length === 4) { const [major, minor, patch, build] = version; const asNumbers = [major, minor, patch, build].map((v) => parseInt(v, 10)); if (asNumbers.slice(0, 3).some((v) => isNaN(v))) { throw messages.createError('errorInvalidMajorMinorPatchNumber', [versionString]); } if (isNaN(asNumbers[3]) && !VersionNumber.isABuildKeyword(build)) { throw messages.createError('errorInvalidBuildNumberToken', [ versionString, Object.values(BuildNumberToken).join(', '), ]); } return new VersionNumber(major, minor, patch, build); } throw messages.createError('errorInvalidVersionNumber', [versionString]); } static isABuildKeyword(token) { const buildNumberTokenValues = Object.values(BuildNumberToken); const results = buildNumberTokenValues.includes(token); return results; } toString() { { return `${this.major || '0'}.${this.minor || '0'}.${this.patch || '0'}.${this.build ? `${this.build}` : '0'}`; } } isBuildKeyword() { return VersionNumber.isABuildKeyword(this.build); } compareTo(other) { const [aMajor, aMinor, aPatch, aBuild] = [this.major, this.minor, this.patch, this.build].map((v) => typeof v === 'number' ? v : parseInt(v, 10)); const [oMajor, oMinor, oPatch, oBuild] = [other.major, other.minor, other.patch, other.build].map((v) => typeof v === 'number' ? v : parseInt(v, 10)); if (aMajor !== oMajor) { return aMajor - oMajor; } if (aMinor !== oMinor) { return aMinor - oMinor; } if (aPatch !== oPatch) { return aPatch - oPatch; } if (isNaN(aBuild) && isNaN(oBuild)) { return 0; } if (isNaN(aBuild)) { return 1; } if (isNaN(oBuild)) { return -1; } if (aBuild !== oBuild) { return aBuild - oBuild; } return 0; } } exports.VersionNumber = VersionNumber; //# sourceMappingURL=versionNumber.js.map