mirror of
https://github.com/actions/cache.git
synced 2026-09-06 18:24:22 +00:00
React to feeback and change to use 0.2.0 cache package
This commit is contained in:
@@ -4,11 +4,13 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
- releases/**
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '**.md'
|
- '**.md'
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
- releases/**
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '**.md'
|
- '**.md'
|
||||||
|
|
||||||
@@ -17,7 +19,7 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, ubuntu-16.04]
|
os: [ubuntu-latest, ubuntu-16.04, windows-latest, macOS-latest]
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
@@ -61,7 +63,7 @@ jobs:
|
|||||||
test-save:
|
test-save:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, ubuntu-16.04]
|
os: [ubuntu-latest, ubuntu-16.04, windows-latest, macOS-latest]
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
@@ -84,7 +86,7 @@ jobs:
|
|||||||
needs: test-save
|
needs: test-save
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, ubuntu-16.04]
|
os: [ubuntu-latest, ubuntu-16.04, windows-latest, macOS-latest]
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ test("setOutputAndState with exact match to set cache-hit output and state", ()
|
|||||||
expect(setOutputMock).toHaveBeenCalledWith(Outputs.CacheHit, "true");
|
expect(setOutputMock).toHaveBeenCalledWith(Outputs.CacheHit, "true");
|
||||||
expect(setOutputMock).toHaveBeenCalledTimes(1);
|
expect(setOutputMock).toHaveBeenCalledTimes(1);
|
||||||
|
|
||||||
expect(saveStateMock).toHaveBeenCalledWith(State.CacheResult, cacheKey);
|
expect(saveStateMock).toHaveBeenCalledWith(State.CacheMatchedKey, cacheKey);
|
||||||
expect(saveStateMock).toHaveBeenCalledTimes(1);
|
expect(saveStateMock).toHaveBeenCalledTimes(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ test("setOutputAndState with no exact match to set cache-hit output and state",
|
|||||||
expect(setOutputMock).toHaveBeenCalledWith(Outputs.CacheHit, "false");
|
expect(setOutputMock).toHaveBeenCalledWith(Outputs.CacheHit, "false");
|
||||||
expect(setOutputMock).toHaveBeenCalledTimes(1);
|
expect(setOutputMock).toHaveBeenCalledTimes(1);
|
||||||
|
|
||||||
expect(saveStateMock).toHaveBeenCalledWith(State.CacheResult, cacheKey);
|
expect(saveStateMock).toHaveBeenCalledWith(State.CacheMatchedKey, cacheKey);
|
||||||
expect(saveStateMock).toHaveBeenCalledTimes(1);
|
expect(saveStateMock).toHaveBeenCalledTimes(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -109,7 +109,7 @@ test("getCacheState with no state returns undefined", () => {
|
|||||||
|
|
||||||
expect(state).toBe(undefined);
|
expect(state).toBe(undefined);
|
||||||
|
|
||||||
expect(getStateMock).toHaveBeenCalledWith(State.CacheResult);
|
expect(getStateMock).toHaveBeenCalledWith(State.CacheMatchedKey);
|
||||||
expect(getStateMock).toHaveBeenCalledTimes(1);
|
expect(getStateMock).toHaveBeenCalledTimes(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -125,7 +125,7 @@ test("getCacheState with valid state", () => {
|
|||||||
|
|
||||||
expect(state).toEqual(cacheKey);
|
expect(state).toEqual(cacheKey);
|
||||||
|
|
||||||
expect(getStateMock).toHaveBeenCalledWith(State.CacheResult);
|
expect(getStateMock).toHaveBeenCalledWith(State.CacheMatchedKey);
|
||||||
expect(getStateMock).toHaveBeenCalledTimes(1);
|
expect(getStateMock).toHaveBeenCalledTimes(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Vendored
+1843
-413
@@ -354,10 +354,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const os = __webpack_require__(87);
|
const os = __importStar(__webpack_require__(87));
|
||||||
const events = __webpack_require__(614);
|
const events = __importStar(__webpack_require__(614));
|
||||||
const child = __webpack_require__(129);
|
const child = __importStar(__webpack_require__(129));
|
||||||
|
const path = __importStar(__webpack_require__(622));
|
||||||
|
const io = __importStar(__webpack_require__(1));
|
||||||
|
const ioUtil = __importStar(__webpack_require__(672));
|
||||||
/* eslint-disable @typescript-eslint/unbound-method */
|
/* eslint-disable @typescript-eslint/unbound-method */
|
||||||
const IS_WINDOWS = process.platform === 'win32';
|
const IS_WINDOWS = process.platform === 'win32';
|
||||||
/*
|
/*
|
||||||
@@ -703,6 +713,16 @@ class ToolRunner extends events.EventEmitter {
|
|||||||
*/
|
*/
|
||||||
exec() {
|
exec() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
// root the tool path if it is unrooted and contains relative pathing
|
||||||
|
if (!ioUtil.isRooted(this.toolPath) &&
|
||||||
|
(this.toolPath.includes('/') ||
|
||||||
|
(IS_WINDOWS && this.toolPath.includes('\\')))) {
|
||||||
|
// prefer options.cwd if it is specified, however options.cwd may also need to be rooted
|
||||||
|
this.toolPath = path.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath);
|
||||||
|
}
|
||||||
|
// if the tool is only a file name, then resolve it from the PATH
|
||||||
|
// otherwise verify it exists (add extension on Windows if necessary)
|
||||||
|
this.toolPath = yield io.which(this.toolPath, true);
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this._debug(`exec tool: ${this.toolPath}`);
|
this._debug(`exec tool: ${this.toolPath}`);
|
||||||
this._debug('arguments:');
|
this._debug('arguments:');
|
||||||
@@ -791,6 +811,12 @@ class ToolRunner extends events.EventEmitter {
|
|||||||
resolve(exitCode);
|
resolve(exitCode);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
if (this.options.input) {
|
||||||
|
if (!cp.stdin) {
|
||||||
|
throw new Error('child process missing stdin');
|
||||||
|
}
|
||||||
|
cp.stdin.end(this.options.input);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -950,12 +976,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const core = __importStar(__webpack_require__(633));
|
const core = __importStar(__webpack_require__(470));
|
||||||
const exec = __importStar(__webpack_require__(986));
|
const exec = __importStar(__webpack_require__(986));
|
||||||
const glob = __importStar(__webpack_require__(281));
|
const glob = __importStar(__webpack_require__(281));
|
||||||
const io = __importStar(__webpack_require__(1));
|
const io = __importStar(__webpack_require__(1));
|
||||||
const fs = __importStar(__webpack_require__(747));
|
const fs = __importStar(__webpack_require__(747));
|
||||||
const path = __importStar(__webpack_require__(622));
|
const path = __importStar(__webpack_require__(622));
|
||||||
|
const semver = __importStar(__webpack_require__(280));
|
||||||
const util = __importStar(__webpack_require__(669));
|
const util = __importStar(__webpack_require__(669));
|
||||||
const uuid_1 = __webpack_require__(898);
|
const uuid_1 = __webpack_require__(898);
|
||||||
const constants_1 = __webpack_require__(931);
|
const constants_1 = __webpack_require__(931);
|
||||||
@@ -1050,26 +1077,40 @@ function getVersion(app) {
|
|||||||
// Use zstandard if possible to maximize cache performance
|
// Use zstandard if possible to maximize cache performance
|
||||||
function getCompressionMethod() {
|
function getCompressionMethod() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if (process.platform === 'win32' && !isGnuTarInstalled()) {
|
||||||
|
// Disable zstd due to bug https://github.com/actions/cache/issues/301
|
||||||
|
return constants_1.CompressionMethod.Gzip;
|
||||||
|
}
|
||||||
const versionOutput = yield getVersion('zstd');
|
const versionOutput = yield getVersion('zstd');
|
||||||
return versionOutput.toLowerCase().includes('zstd command line interface')
|
const version = semver.clean(versionOutput);
|
||||||
? constants_1.CompressionMethod.Zstd
|
if (!versionOutput.toLowerCase().includes('zstd command line interface')) {
|
||||||
: constants_1.CompressionMethod.Gzip;
|
// zstd is not installed
|
||||||
|
return constants_1.CompressionMethod.Gzip;
|
||||||
|
}
|
||||||
|
else if (!version || semver.lt(version, 'v1.3.2')) {
|
||||||
|
// zstd is installed but using a version earlier than v1.3.2
|
||||||
|
// v1.3.2 is required to use the `--long` options in zstd
|
||||||
|
return constants_1.CompressionMethod.ZstdWithoutLong;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return constants_1.CompressionMethod.Zstd;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.getCompressionMethod = getCompressionMethod;
|
exports.getCompressionMethod = getCompressionMethod;
|
||||||
function getCacheFileName(compressionMethod) {
|
function getCacheFileName(compressionMethod) {
|
||||||
return compressionMethod === constants_1.CompressionMethod.Zstd
|
return compressionMethod === constants_1.CompressionMethod.Gzip
|
||||||
? constants_1.CacheFilename.Zstd
|
? constants_1.CacheFilename.Gzip
|
||||||
: constants_1.CacheFilename.Gzip;
|
: constants_1.CacheFilename.Zstd;
|
||||||
}
|
}
|
||||||
exports.getCacheFileName = getCacheFileName;
|
exports.getCacheFileName = getCacheFileName;
|
||||||
function useGnuTar() {
|
function isGnuTarInstalled() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const versionOutput = yield getVersion('tar');
|
const versionOutput = yield getVersion('tar');
|
||||||
return versionOutput.toLowerCase().includes('gnu tar');
|
return versionOutput.toLowerCase().includes('gnu tar');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.useGnuTar = useGnuTar;
|
exports.isGnuTarInstalled = isGnuTarInstalled;
|
||||||
//# sourceMappingURL=cacheUtils.js.map
|
//# sourceMappingURL=cacheUtils.js.map
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
@@ -1099,7 +1140,7 @@ var _clockseq;
|
|||||||
var _lastMSecs = 0;
|
var _lastMSecs = 0;
|
||||||
var _lastNSecs = 0;
|
var _lastNSecs = 0;
|
||||||
|
|
||||||
// See https://github.com/broofa/node-uuid for API details
|
// See https://github.com/uuidjs/uuid for API details
|
||||||
function v1(options, buf, offset) {
|
function v1(options, buf, offset) {
|
||||||
var i = buf && offset || 0;
|
var i = buf && offset || 0;
|
||||||
var b = buf || [];
|
var b = buf || [];
|
||||||
@@ -2156,7 +2197,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const core = __importStar(__webpack_require__(633));
|
const core = __importStar(__webpack_require__(470));
|
||||||
const http_client_1 = __webpack_require__(539);
|
const http_client_1 = __webpack_require__(539);
|
||||||
const auth_1 = __webpack_require__(226);
|
const auth_1 = __webpack_require__(226);
|
||||||
const crypto = __importStar(__webpack_require__(417));
|
const crypto = __importStar(__webpack_require__(417));
|
||||||
@@ -2218,7 +2259,9 @@ function createHttpClient() {
|
|||||||
return new http_client_1.HttpClient('actions/cache', [bearerCredentialHandler], getRequestOptions());
|
return new http_client_1.HttpClient('actions/cache', [bearerCredentialHandler], getRequestOptions());
|
||||||
}
|
}
|
||||||
function getCacheVersion(paths, compressionMethod) {
|
function getCacheVersion(paths, compressionMethod) {
|
||||||
const components = paths.concat(compressionMethod === constants_1.CompressionMethod.Zstd ? [compressionMethod] : []);
|
const components = paths.concat(!compressionMethod || compressionMethod === constants_1.CompressionMethod.Gzip
|
||||||
|
? []
|
||||||
|
: [compressionMethod]);
|
||||||
// Add salt to cache version to support breaking changes in cache entry
|
// Add salt to cache version to support breaking changes in cache entry
|
||||||
components.push(versionSalt);
|
components.push(versionSalt);
|
||||||
return crypto
|
return crypto
|
||||||
@@ -2798,6 +2841,1609 @@ class PersonalAccessTokenCredentialHandler {
|
|||||||
exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
|
exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 280:
|
||||||
|
/***/ (function(module, exports) {
|
||||||
|
|
||||||
|
exports = module.exports = SemVer
|
||||||
|
|
||||||
|
var debug
|
||||||
|
/* istanbul ignore next */
|
||||||
|
if (typeof process === 'object' &&
|
||||||
|
process.env &&
|
||||||
|
process.env.NODE_DEBUG &&
|
||||||
|
/\bsemver\b/i.test(process.env.NODE_DEBUG)) {
|
||||||
|
debug = function () {
|
||||||
|
var args = Array.prototype.slice.call(arguments, 0)
|
||||||
|
args.unshift('SEMVER')
|
||||||
|
console.log.apply(console, args)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
debug = function () {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note: this is the semver.org version of the spec that it implements
|
||||||
|
// Not necessarily the package version of this code.
|
||||||
|
exports.SEMVER_SPEC_VERSION = '2.0.0'
|
||||||
|
|
||||||
|
var MAX_LENGTH = 256
|
||||||
|
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
|
||||||
|
/* istanbul ignore next */ 9007199254740991
|
||||||
|
|
||||||
|
// Max safe segment length for coercion.
|
||||||
|
var MAX_SAFE_COMPONENT_LENGTH = 16
|
||||||
|
|
||||||
|
// The actual regexps go on exports.re
|
||||||
|
var re = exports.re = []
|
||||||
|
var src = exports.src = []
|
||||||
|
var t = exports.tokens = {}
|
||||||
|
var R = 0
|
||||||
|
|
||||||
|
function tok (n) {
|
||||||
|
t[n] = R++
|
||||||
|
}
|
||||||
|
|
||||||
|
// The following Regular Expressions can be used for tokenizing,
|
||||||
|
// validating, and parsing SemVer version strings.
|
||||||
|
|
||||||
|
// ## Numeric Identifier
|
||||||
|
// A single `0`, or a non-zero digit followed by zero or more digits.
|
||||||
|
|
||||||
|
tok('NUMERICIDENTIFIER')
|
||||||
|
src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*'
|
||||||
|
tok('NUMERICIDENTIFIERLOOSE')
|
||||||
|
src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+'
|
||||||
|
|
||||||
|
// ## Non-numeric Identifier
|
||||||
|
// Zero or more digits, followed by a letter or hyphen, and then zero or
|
||||||
|
// more letters, digits, or hyphens.
|
||||||
|
|
||||||
|
tok('NONNUMERICIDENTIFIER')
|
||||||
|
src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
|
||||||
|
|
||||||
|
// ## Main Version
|
||||||
|
// Three dot-separated numeric identifiers.
|
||||||
|
|
||||||
|
tok('MAINVERSION')
|
||||||
|
src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' +
|
||||||
|
'(' + src[t.NUMERICIDENTIFIER] + ')\\.' +
|
||||||
|
'(' + src[t.NUMERICIDENTIFIER] + ')'
|
||||||
|
|
||||||
|
tok('MAINVERSIONLOOSE')
|
||||||
|
src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' +
|
||||||
|
'(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' +
|
||||||
|
'(' + src[t.NUMERICIDENTIFIERLOOSE] + ')'
|
||||||
|
|
||||||
|
// ## Pre-release Version Identifier
|
||||||
|
// A numeric identifier, or a non-numeric identifier.
|
||||||
|
|
||||||
|
tok('PRERELEASEIDENTIFIER')
|
||||||
|
src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] +
|
||||||
|
'|' + src[t.NONNUMERICIDENTIFIER] + ')'
|
||||||
|
|
||||||
|
tok('PRERELEASEIDENTIFIERLOOSE')
|
||||||
|
src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] +
|
||||||
|
'|' + src[t.NONNUMERICIDENTIFIER] + ')'
|
||||||
|
|
||||||
|
// ## Pre-release Version
|
||||||
|
// Hyphen, followed by one or more dot-separated pre-release version
|
||||||
|
// identifiers.
|
||||||
|
|
||||||
|
tok('PRERELEASE')
|
||||||
|
src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] +
|
||||||
|
'(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))'
|
||||||
|
|
||||||
|
tok('PRERELEASELOOSE')
|
||||||
|
src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] +
|
||||||
|
'(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))'
|
||||||
|
|
||||||
|
// ## Build Metadata Identifier
|
||||||
|
// Any combination of digits, letters, or hyphens.
|
||||||
|
|
||||||
|
tok('BUILDIDENTIFIER')
|
||||||
|
src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+'
|
||||||
|
|
||||||
|
// ## Build Metadata
|
||||||
|
// Plus sign, followed by one or more period-separated build metadata
|
||||||
|
// identifiers.
|
||||||
|
|
||||||
|
tok('BUILD')
|
||||||
|
src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] +
|
||||||
|
'(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))'
|
||||||
|
|
||||||
|
// ## Full Version String
|
||||||
|
// A main version, followed optionally by a pre-release version and
|
||||||
|
// build metadata.
|
||||||
|
|
||||||
|
// Note that the only major, minor, patch, and pre-release sections of
|
||||||
|
// the version string are capturing groups. The build metadata is not a
|
||||||
|
// capturing group, because it should not ever be used in version
|
||||||
|
// comparison.
|
||||||
|
|
||||||
|
tok('FULL')
|
||||||
|
tok('FULLPLAIN')
|
||||||
|
src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] +
|
||||||
|
src[t.PRERELEASE] + '?' +
|
||||||
|
src[t.BUILD] + '?'
|
||||||
|
|
||||||
|
src[t.FULL] = '^' + src[t.FULLPLAIN] + '$'
|
||||||
|
|
||||||
|
// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
|
||||||
|
// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
|
||||||
|
// common in the npm registry.
|
||||||
|
tok('LOOSEPLAIN')
|
||||||
|
src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] +
|
||||||
|
src[t.PRERELEASELOOSE] + '?' +
|
||||||
|
src[t.BUILD] + '?'
|
||||||
|
|
||||||
|
tok('LOOSE')
|
||||||
|
src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$'
|
||||||
|
|
||||||
|
tok('GTLT')
|
||||||
|
src[t.GTLT] = '((?:<|>)?=?)'
|
||||||
|
|
||||||
|
// Something like "2.*" or "1.2.x".
|
||||||
|
// Note that "x.x" is a valid xRange identifer, meaning "any version"
|
||||||
|
// Only the first item is strictly required.
|
||||||
|
tok('XRANGEIDENTIFIERLOOSE')
|
||||||
|
src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
|
||||||
|
tok('XRANGEIDENTIFIER')
|
||||||
|
src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*'
|
||||||
|
|
||||||
|
tok('XRANGEPLAIN')
|
||||||
|
src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' +
|
||||||
|
'(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' +
|
||||||
|
'(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' +
|
||||||
|
'(?:' + src[t.PRERELEASE] + ')?' +
|
||||||
|
src[t.BUILD] + '?' +
|
||||||
|
')?)?'
|
||||||
|
|
||||||
|
tok('XRANGEPLAINLOOSE')
|
||||||
|
src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
|
||||||
|
'(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
|
||||||
|
'(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
|
||||||
|
'(?:' + src[t.PRERELEASELOOSE] + ')?' +
|
||||||
|
src[t.BUILD] + '?' +
|
||||||
|
')?)?'
|
||||||
|
|
||||||
|
tok('XRANGE')
|
||||||
|
src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$'
|
||||||
|
tok('XRANGELOOSE')
|
||||||
|
src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$'
|
||||||
|
|
||||||
|
// Coercion.
|
||||||
|
// Extract anything that could conceivably be a part of a valid semver
|
||||||
|
tok('COERCE')
|
||||||
|
src[t.COERCE] = '(^|[^\\d])' +
|
||||||
|
'(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
|
||||||
|
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
|
||||||
|
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
|
||||||
|
'(?:$|[^\\d])'
|
||||||
|
tok('COERCERTL')
|
||||||
|
re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g')
|
||||||
|
|
||||||
|
// Tilde ranges.
|
||||||
|
// Meaning is "reasonably at or greater than"
|
||||||
|
tok('LONETILDE')
|
||||||
|
src[t.LONETILDE] = '(?:~>?)'
|
||||||
|
|
||||||
|
tok('TILDETRIM')
|
||||||
|
src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+'
|
||||||
|
re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g')
|
||||||
|
var tildeTrimReplace = '$1~'
|
||||||
|
|
||||||
|
tok('TILDE')
|
||||||
|
src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$'
|
||||||
|
tok('TILDELOOSE')
|
||||||
|
src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$'
|
||||||
|
|
||||||
|
// Caret ranges.
|
||||||
|
// Meaning is "at least and backwards compatible with"
|
||||||
|
tok('LONECARET')
|
||||||
|
src[t.LONECARET] = '(?:\\^)'
|
||||||
|
|
||||||
|
tok('CARETTRIM')
|
||||||
|
src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+'
|
||||||
|
re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g')
|
||||||
|
var caretTrimReplace = '$1^'
|
||||||
|
|
||||||
|
tok('CARET')
|
||||||
|
src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$'
|
||||||
|
tok('CARETLOOSE')
|
||||||
|
src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$'
|
||||||
|
|
||||||
|
// A simple gt/lt/eq thing, or just "" to indicate "any version"
|
||||||
|
tok('COMPARATORLOOSE')
|
||||||
|
src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$'
|
||||||
|
tok('COMPARATOR')
|
||||||
|
src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$'
|
||||||
|
|
||||||
|
// An expression to strip any whitespace between the gtlt and the thing
|
||||||
|
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
|
||||||
|
tok('COMPARATORTRIM')
|
||||||
|
src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] +
|
||||||
|
'\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')'
|
||||||
|
|
||||||
|
// this one has to use the /g flag
|
||||||
|
re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g')
|
||||||
|
var comparatorTrimReplace = '$1$2$3'
|
||||||
|
|
||||||
|
// Something like `1.2.3 - 1.2.4`
|
||||||
|
// Note that these all use the loose form, because they'll be
|
||||||
|
// checked against either the strict or loose comparator form
|
||||||
|
// later.
|
||||||
|
tok('HYPHENRANGE')
|
||||||
|
src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' +
|
||||||
|
'\\s+-\\s+' +
|
||||||
|
'(' + src[t.XRANGEPLAIN] + ')' +
|
||||||
|
'\\s*$'
|
||||||
|
|
||||||
|
tok('HYPHENRANGELOOSE')
|
||||||
|
src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' +
|
||||||
|
'\\s+-\\s+' +
|
||||||
|
'(' + src[t.XRANGEPLAINLOOSE] + ')' +
|
||||||
|
'\\s*$'
|
||||||
|
|
||||||
|
// Star ranges basically just allow anything at all.
|
||||||
|
tok('STAR')
|
||||||
|
src[t.STAR] = '(<|>)?=?\\s*\\*'
|
||||||
|
|
||||||
|
// Compile to actual regexp objects.
|
||||||
|
// All are flag-free, unless they were created above with a flag.
|
||||||
|
for (var i = 0; i < R; i++) {
|
||||||
|
debug(i, src[i])
|
||||||
|
if (!re[i]) {
|
||||||
|
re[i] = new RegExp(src[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.parse = parse
|
||||||
|
function parse (version, options) {
|
||||||
|
if (!options || typeof options !== 'object') {
|
||||||
|
options = {
|
||||||
|
loose: !!options,
|
||||||
|
includePrerelease: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (version instanceof SemVer) {
|
||||||
|
return version
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof version !== 'string') {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
if (version.length > MAX_LENGTH) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
var r = options.loose ? re[t.LOOSE] : re[t.FULL]
|
||||||
|
if (!r.test(version)) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return new SemVer(version, options)
|
||||||
|
} catch (er) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.valid = valid
|
||||||
|
function valid (version, options) {
|
||||||
|
var v = parse(version, options)
|
||||||
|
return v ? v.version : null
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.clean = clean
|
||||||
|
function clean (version, options) {
|
||||||
|
var s = parse(version.trim().replace(/^[=v]+/, ''), options)
|
||||||
|
return s ? s.version : null
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.SemVer = SemVer
|
||||||
|
|
||||||
|
function SemVer (version, options) {
|
||||||
|
if (!options || typeof options !== 'object') {
|
||||||
|
options = {
|
||||||
|
loose: !!options,
|
||||||
|
includePrerelease: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (version instanceof SemVer) {
|
||||||
|
if (version.loose === options.loose) {
|
||||||
|
return version
|
||||||
|
} else {
|
||||||
|
version = version.version
|
||||||
|
}
|
||||||
|
} else if (typeof version !== 'string') {
|
||||||
|
throw new TypeError('Invalid Version: ' + version)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (version.length > MAX_LENGTH) {
|
||||||
|
throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(this instanceof SemVer)) {
|
||||||
|
return new SemVer(version, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('SemVer', version, options)
|
||||||
|
this.options = options
|
||||||
|
this.loose = !!options.loose
|
||||||
|
|
||||||
|
var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])
|
||||||
|
|
||||||
|
if (!m) {
|
||||||
|
throw new TypeError('Invalid Version: ' + version)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.raw = version
|
||||||
|
|
||||||
|
// these are actually numbers
|
||||||
|
this.major = +m[1]
|
||||||
|
this.minor = +m[2]
|
||||||
|
this.patch = +m[3]
|
||||||
|
|
||||||
|
if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
|
||||||
|
throw new TypeError('Invalid major version')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
|
||||||
|
throw new TypeError('Invalid minor version')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
|
||||||
|
throw new TypeError('Invalid patch version')
|
||||||
|
}
|
||||||
|
|
||||||
|
// numberify any prerelease numeric ids
|
||||||
|
if (!m[4]) {
|
||||||
|
this.prerelease = []
|
||||||
|
} else {
|
||||||
|
this.prerelease = m[4].split('.').map(function (id) {
|
||||||
|
if (/^[0-9]+$/.test(id)) {
|
||||||
|
var num = +id
|
||||||
|
if (num >= 0 && num < MAX_SAFE_INTEGER) {
|
||||||
|
return num
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.build = m[5] ? m[5].split('.') : []
|
||||||
|
this.format()
|
||||||
|
}
|
||||||
|
|
||||||
|
SemVer.prototype.format = function () {
|
||||||
|
this.version = this.major + '.' + this.minor + '.' + this.patch
|
||||||
|
if (this.prerelease.length) {
|
||||||
|
this.version += '-' + this.prerelease.join('.')
|
||||||
|
}
|
||||||
|
return this.version
|
||||||
|
}
|
||||||
|
|
||||||
|
SemVer.prototype.toString = function () {
|
||||||
|
return this.version
|
||||||
|
}
|
||||||
|
|
||||||
|
SemVer.prototype.compare = function (other) {
|
||||||
|
debug('SemVer.compare', this.version, this.options, other)
|
||||||
|
if (!(other instanceof SemVer)) {
|
||||||
|
other = new SemVer(other, this.options)
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.compareMain(other) || this.comparePre(other)
|
||||||
|
}
|
||||||
|
|
||||||
|
SemVer.prototype.compareMain = function (other) {
|
||||||
|
if (!(other instanceof SemVer)) {
|
||||||
|
other = new SemVer(other, this.options)
|
||||||
|
}
|
||||||
|
|
||||||
|
return compareIdentifiers(this.major, other.major) ||
|
||||||
|
compareIdentifiers(this.minor, other.minor) ||
|
||||||
|
compareIdentifiers(this.patch, other.patch)
|
||||||
|
}
|
||||||
|
|
||||||
|
SemVer.prototype.comparePre = function (other) {
|
||||||
|
if (!(other instanceof SemVer)) {
|
||||||
|
other = new SemVer(other, this.options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOT having a prerelease is > having one
|
||||||
|
if (this.prerelease.length && !other.prerelease.length) {
|
||||||
|
return -1
|
||||||
|
} else if (!this.prerelease.length && other.prerelease.length) {
|
||||||
|
return 1
|
||||||
|
} else if (!this.prerelease.length && !other.prerelease.length) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
var i = 0
|
||||||
|
do {
|
||||||
|
var a = this.prerelease[i]
|
||||||
|
var b = other.prerelease[i]
|
||||||
|
debug('prerelease compare', i, a, b)
|
||||||
|
if (a === undefined && b === undefined) {
|
||||||
|
return 0
|
||||||
|
} else if (b === undefined) {
|
||||||
|
return 1
|
||||||
|
} else if (a === undefined) {
|
||||||
|
return -1
|
||||||
|
} else if (a === b) {
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
return compareIdentifiers(a, b)
|
||||||
|
}
|
||||||
|
} while (++i)
|
||||||
|
}
|
||||||
|
|
||||||
|
SemVer.prototype.compareBuild = function (other) {
|
||||||
|
if (!(other instanceof SemVer)) {
|
||||||
|
other = new SemVer(other, this.options)
|
||||||
|
}
|
||||||
|
|
||||||
|
var i = 0
|
||||||
|
do {
|
||||||
|
var a = this.build[i]
|
||||||
|
var b = other.build[i]
|
||||||
|
debug('prerelease compare', i, a, b)
|
||||||
|
if (a === undefined && b === undefined) {
|
||||||
|
return 0
|
||||||
|
} else if (b === undefined) {
|
||||||
|
return 1
|
||||||
|
} else if (a === undefined) {
|
||||||
|
return -1
|
||||||
|
} else if (a === b) {
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
return compareIdentifiers(a, b)
|
||||||
|
}
|
||||||
|
} while (++i)
|
||||||
|
}
|
||||||
|
|
||||||
|
// preminor will bump the version up to the next minor release, and immediately
|
||||||
|
// down to pre-release. premajor and prepatch work the same way.
|
||||||
|
SemVer.prototype.inc = function (release, identifier) {
|
||||||
|
switch (release) {
|
||||||
|
case 'premajor':
|
||||||
|
this.prerelease.length = 0
|
||||||
|
this.patch = 0
|
||||||
|
this.minor = 0
|
||||||
|
this.major++
|
||||||
|
this.inc('pre', identifier)
|
||||||
|
break
|
||||||
|
case 'preminor':
|
||||||
|
this.prerelease.length = 0
|
||||||
|
this.patch = 0
|
||||||
|
this.minor++
|
||||||
|
this.inc('pre', identifier)
|
||||||
|
break
|
||||||
|
case 'prepatch':
|
||||||
|
// If this is already a prerelease, it will bump to the next version
|
||||||
|
// drop any prereleases that might already exist, since they are not
|
||||||
|
// relevant at this point.
|
||||||
|
this.prerelease.length = 0
|
||||||
|
this.inc('patch', identifier)
|
||||||
|
this.inc('pre', identifier)
|
||||||
|
break
|
||||||
|
// If the input is a non-prerelease version, this acts the same as
|
||||||
|
// prepatch.
|
||||||
|
case 'prerelease':
|
||||||
|
if (this.prerelease.length === 0) {
|
||||||
|
this.inc('patch', identifier)
|
||||||
|
}
|
||||||
|
this.inc('pre', identifier)
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'major':
|
||||||
|
// If this is a pre-major version, bump up to the same major version.
|
||||||
|
// Otherwise increment major.
|
||||||
|
// 1.0.0-5 bumps to 1.0.0
|
||||||
|
// 1.1.0 bumps to 2.0.0
|
||||||
|
if (this.minor !== 0 ||
|
||||||
|
this.patch !== 0 ||
|
||||||
|
this.prerelease.length === 0) {
|
||||||
|
this.major++
|
||||||
|
}
|
||||||
|
this.minor = 0
|
||||||
|
this.patch = 0
|
||||||
|
this.prerelease = []
|
||||||
|
break
|
||||||
|
case 'minor':
|
||||||
|
// If this is a pre-minor version, bump up to the same minor version.
|
||||||
|
// Otherwise increment minor.
|
||||||
|
// 1.2.0-5 bumps to 1.2.0
|
||||||
|
// 1.2.1 bumps to 1.3.0
|
||||||
|
if (this.patch !== 0 || this.prerelease.length === 0) {
|
||||||
|
this.minor++
|
||||||
|
}
|
||||||
|
this.patch = 0
|
||||||
|
this.prerelease = []
|
||||||
|
break
|
||||||
|
case 'patch':
|
||||||
|
// If this is not a pre-release version, it will increment the patch.
|
||||||
|
// If it is a pre-release it will bump up to the same patch version.
|
||||||
|
// 1.2.0-5 patches to 1.2.0
|
||||||
|
// 1.2.0 patches to 1.2.1
|
||||||
|
if (this.prerelease.length === 0) {
|
||||||
|
this.patch++
|
||||||
|
}
|
||||||
|
this.prerelease = []
|
||||||
|
break
|
||||||
|
// This probably shouldn't be used publicly.
|
||||||
|
// 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
|
||||||
|
case 'pre':
|
||||||
|
if (this.prerelease.length === 0) {
|
||||||
|
this.prerelease = [0]
|
||||||
|
} else {
|
||||||
|
var i = this.prerelease.length
|
||||||
|
while (--i >= 0) {
|
||||||
|
if (typeof this.prerelease[i] === 'number') {
|
||||||
|
this.prerelease[i]++
|
||||||
|
i = -2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i === -1) {
|
||||||
|
// didn't increment anything
|
||||||
|
this.prerelease.push(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (identifier) {
|
||||||
|
// 1.2.0-beta.1 bumps to 1.2.0-beta.2,
|
||||||
|
// 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
|
||||||
|
if (this.prerelease[0] === identifier) {
|
||||||
|
if (isNaN(this.prerelease[1])) {
|
||||||
|
this.prerelease = [identifier, 0]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.prerelease = [identifier, 0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new Error('invalid increment argument: ' + release)
|
||||||
|
}
|
||||||
|
this.format()
|
||||||
|
this.raw = this.version
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.inc = inc
|
||||||
|
function inc (version, release, loose, identifier) {
|
||||||
|
if (typeof (loose) === 'string') {
|
||||||
|
identifier = loose
|
||||||
|
loose = undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return new SemVer(version, loose).inc(release, identifier).version
|
||||||
|
} catch (er) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.diff = diff
|
||||||
|
function diff (version1, version2) {
|
||||||
|
if (eq(version1, version2)) {
|
||||||
|
return null
|
||||||
|
} else {
|
||||||
|
var v1 = parse(version1)
|
||||||
|
var v2 = parse(version2)
|
||||||
|
var prefix = ''
|
||||||
|
if (v1.prerelease.length || v2.prerelease.length) {
|
||||||
|
prefix = 'pre'
|
||||||
|
var defaultResult = 'prerelease'
|
||||||
|
}
|
||||||
|
for (var key in v1) {
|
||||||
|
if (key === 'major' || key === 'minor' || key === 'patch') {
|
||||||
|
if (v1[key] !== v2[key]) {
|
||||||
|
return prefix + key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return defaultResult // may be undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.compareIdentifiers = compareIdentifiers
|
||||||
|
|
||||||
|
var numeric = /^[0-9]+$/
|
||||||
|
function compareIdentifiers (a, b) {
|
||||||
|
var anum = numeric.test(a)
|
||||||
|
var bnum = numeric.test(b)
|
||||||
|
|
||||||
|
if (anum && bnum) {
|
||||||
|
a = +a
|
||||||
|
b = +b
|
||||||
|
}
|
||||||
|
|
||||||
|
return a === b ? 0
|
||||||
|
: (anum && !bnum) ? -1
|
||||||
|
: (bnum && !anum) ? 1
|
||||||
|
: a < b ? -1
|
||||||
|
: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.rcompareIdentifiers = rcompareIdentifiers
|
||||||
|
function rcompareIdentifiers (a, b) {
|
||||||
|
return compareIdentifiers(b, a)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.major = major
|
||||||
|
function major (a, loose) {
|
||||||
|
return new SemVer(a, loose).major
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.minor = minor
|
||||||
|
function minor (a, loose) {
|
||||||
|
return new SemVer(a, loose).minor
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.patch = patch
|
||||||
|
function patch (a, loose) {
|
||||||
|
return new SemVer(a, loose).patch
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.compare = compare
|
||||||
|
function compare (a, b, loose) {
|
||||||
|
return new SemVer(a, loose).compare(new SemVer(b, loose))
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.compareLoose = compareLoose
|
||||||
|
function compareLoose (a, b) {
|
||||||
|
return compare(a, b, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.compareBuild = compareBuild
|
||||||
|
function compareBuild (a, b, loose) {
|
||||||
|
var versionA = new SemVer(a, loose)
|
||||||
|
var versionB = new SemVer(b, loose)
|
||||||
|
return versionA.compare(versionB) || versionA.compareBuild(versionB)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.rcompare = rcompare
|
||||||
|
function rcompare (a, b, loose) {
|
||||||
|
return compare(b, a, loose)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.sort = sort
|
||||||
|
function sort (list, loose) {
|
||||||
|
return list.sort(function (a, b) {
|
||||||
|
return exports.compareBuild(a, b, loose)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.rsort = rsort
|
||||||
|
function rsort (list, loose) {
|
||||||
|
return list.sort(function (a, b) {
|
||||||
|
return exports.compareBuild(b, a, loose)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.gt = gt
|
||||||
|
function gt (a, b, loose) {
|
||||||
|
return compare(a, b, loose) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.lt = lt
|
||||||
|
function lt (a, b, loose) {
|
||||||
|
return compare(a, b, loose) < 0
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.eq = eq
|
||||||
|
function eq (a, b, loose) {
|
||||||
|
return compare(a, b, loose) === 0
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.neq = neq
|
||||||
|
function neq (a, b, loose) {
|
||||||
|
return compare(a, b, loose) !== 0
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.gte = gte
|
||||||
|
function gte (a, b, loose) {
|
||||||
|
return compare(a, b, loose) >= 0
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.lte = lte
|
||||||
|
function lte (a, b, loose) {
|
||||||
|
return compare(a, b, loose) <= 0
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.cmp = cmp
|
||||||
|
function cmp (a, op, b, loose) {
|
||||||
|
switch (op) {
|
||||||
|
case '===':
|
||||||
|
if (typeof a === 'object')
|
||||||
|
a = a.version
|
||||||
|
if (typeof b === 'object')
|
||||||
|
b = b.version
|
||||||
|
return a === b
|
||||||
|
|
||||||
|
case '!==':
|
||||||
|
if (typeof a === 'object')
|
||||||
|
a = a.version
|
||||||
|
if (typeof b === 'object')
|
||||||
|
b = b.version
|
||||||
|
return a !== b
|
||||||
|
|
||||||
|
case '':
|
||||||
|
case '=':
|
||||||
|
case '==':
|
||||||
|
return eq(a, b, loose)
|
||||||
|
|
||||||
|
case '!=':
|
||||||
|
return neq(a, b, loose)
|
||||||
|
|
||||||
|
case '>':
|
||||||
|
return gt(a, b, loose)
|
||||||
|
|
||||||
|
case '>=':
|
||||||
|
return gte(a, b, loose)
|
||||||
|
|
||||||
|
case '<':
|
||||||
|
return lt(a, b, loose)
|
||||||
|
|
||||||
|
case '<=':
|
||||||
|
return lte(a, b, loose)
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new TypeError('Invalid operator: ' + op)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.Comparator = Comparator
|
||||||
|
function Comparator (comp, options) {
|
||||||
|
if (!options || typeof options !== 'object') {
|
||||||
|
options = {
|
||||||
|
loose: !!options,
|
||||||
|
includePrerelease: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (comp instanceof Comparator) {
|
||||||
|
if (comp.loose === !!options.loose) {
|
||||||
|
return comp
|
||||||
|
} else {
|
||||||
|
comp = comp.value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(this instanceof Comparator)) {
|
||||||
|
return new Comparator(comp, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('comparator', comp, options)
|
||||||
|
this.options = options
|
||||||
|
this.loose = !!options.loose
|
||||||
|
this.parse(comp)
|
||||||
|
|
||||||
|
if (this.semver === ANY) {
|
||||||
|
this.value = ''
|
||||||
|
} else {
|
||||||
|
this.value = this.operator + this.semver.version
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('comp', this)
|
||||||
|
}
|
||||||
|
|
||||||
|
var ANY = {}
|
||||||
|
Comparator.prototype.parse = function (comp) {
|
||||||
|
var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
|
||||||
|
var m = comp.match(r)
|
||||||
|
|
||||||
|
if (!m) {
|
||||||
|
throw new TypeError('Invalid comparator: ' + comp)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.operator = m[1] !== undefined ? m[1] : ''
|
||||||
|
if (this.operator === '=') {
|
||||||
|
this.operator = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
// if it literally is just '>' or '' then allow anything.
|
||||||
|
if (!m[2]) {
|
||||||
|
this.semver = ANY
|
||||||
|
} else {
|
||||||
|
this.semver = new SemVer(m[2], this.options.loose)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Comparator.prototype.toString = function () {
|
||||||
|
return this.value
|
||||||
|
}
|
||||||
|
|
||||||
|
Comparator.prototype.test = function (version) {
|
||||||
|
debug('Comparator.test', version, this.options.loose)
|
||||||
|
|
||||||
|
if (this.semver === ANY || version === ANY) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof version === 'string') {
|
||||||
|
try {
|
||||||
|
version = new SemVer(version, this.options)
|
||||||
|
} catch (er) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cmp(version, this.operator, this.semver, this.options)
|
||||||
|
}
|
||||||
|
|
||||||
|
Comparator.prototype.intersects = function (comp, options) {
|
||||||
|
if (!(comp instanceof Comparator)) {
|
||||||
|
throw new TypeError('a Comparator is required')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!options || typeof options !== 'object') {
|
||||||
|
options = {
|
||||||
|
loose: !!options,
|
||||||
|
includePrerelease: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var rangeTmp
|
||||||
|
|
||||||
|
if (this.operator === '') {
|
||||||
|
if (this.value === '') {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
rangeTmp = new Range(comp.value, options)
|
||||||
|
return satisfies(this.value, rangeTmp, options)
|
||||||
|
} else if (comp.operator === '') {
|
||||||
|
if (comp.value === '') {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
rangeTmp = new Range(this.value, options)
|
||||||
|
return satisfies(comp.semver, rangeTmp, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
var sameDirectionIncreasing =
|
||||||
|
(this.operator === '>=' || this.operator === '>') &&
|
||||||
|
(comp.operator === '>=' || comp.operator === '>')
|
||||||
|
var sameDirectionDecreasing =
|
||||||
|
(this.operator === '<=' || this.operator === '<') &&
|
||||||
|
(comp.operator === '<=' || comp.operator === '<')
|
||||||
|
var sameSemVer = this.semver.version === comp.semver.version
|
||||||
|
var differentDirectionsInclusive =
|
||||||
|
(this.operator === '>=' || this.operator === '<=') &&
|
||||||
|
(comp.operator === '>=' || comp.operator === '<=')
|
||||||
|
var oppositeDirectionsLessThan =
|
||||||
|
cmp(this.semver, '<', comp.semver, options) &&
|
||||||
|
((this.operator === '>=' || this.operator === '>') &&
|
||||||
|
(comp.operator === '<=' || comp.operator === '<'))
|
||||||
|
var oppositeDirectionsGreaterThan =
|
||||||
|
cmp(this.semver, '>', comp.semver, options) &&
|
||||||
|
((this.operator === '<=' || this.operator === '<') &&
|
||||||
|
(comp.operator === '>=' || comp.operator === '>'))
|
||||||
|
|
||||||
|
return sameDirectionIncreasing || sameDirectionDecreasing ||
|
||||||
|
(sameSemVer && differentDirectionsInclusive) ||
|
||||||
|
oppositeDirectionsLessThan || oppositeDirectionsGreaterThan
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.Range = Range
|
||||||
|
function Range (range, options) {
|
||||||
|
if (!options || typeof options !== 'object') {
|
||||||
|
options = {
|
||||||
|
loose: !!options,
|
||||||
|
includePrerelease: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (range instanceof Range) {
|
||||||
|
if (range.loose === !!options.loose &&
|
||||||
|
range.includePrerelease === !!options.includePrerelease) {
|
||||||
|
return range
|
||||||
|
} else {
|
||||||
|
return new Range(range.raw, options)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (range instanceof Comparator) {
|
||||||
|
return new Range(range.value, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(this instanceof Range)) {
|
||||||
|
return new Range(range, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.options = options
|
||||||
|
this.loose = !!options.loose
|
||||||
|
this.includePrerelease = !!options.includePrerelease
|
||||||
|
|
||||||
|
// First, split based on boolean or ||
|
||||||
|
this.raw = range
|
||||||
|
this.set = range.split(/\s*\|\|\s*/).map(function (range) {
|
||||||
|
return this.parseRange(range.trim())
|
||||||
|
}, this).filter(function (c) {
|
||||||
|
// throw out any that are not relevant for whatever reason
|
||||||
|
return c.length
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!this.set.length) {
|
||||||
|
throw new TypeError('Invalid SemVer Range: ' + range)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.format()
|
||||||
|
}
|
||||||
|
|
||||||
|
Range.prototype.format = function () {
|
||||||
|
this.range = this.set.map(function (comps) {
|
||||||
|
return comps.join(' ').trim()
|
||||||
|
}).join('||').trim()
|
||||||
|
return this.range
|
||||||
|
}
|
||||||
|
|
||||||
|
Range.prototype.toString = function () {
|
||||||
|
return this.range
|
||||||
|
}
|
||||||
|
|
||||||
|
Range.prototype.parseRange = function (range) {
|
||||||
|
var loose = this.options.loose
|
||||||
|
range = range.trim()
|
||||||
|
// `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
|
||||||
|
var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]
|
||||||
|
range = range.replace(hr, hyphenReplace)
|
||||||
|
debug('hyphen replace', range)
|
||||||
|
// `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
|
||||||
|
range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)
|
||||||
|
debug('comparator trim', range, re[t.COMPARATORTRIM])
|
||||||
|
|
||||||
|
// `~ 1.2.3` => `~1.2.3`
|
||||||
|
range = range.replace(re[t.TILDETRIM], tildeTrimReplace)
|
||||||
|
|
||||||
|
// `^ 1.2.3` => `^1.2.3`
|
||||||
|
range = range.replace(re[t.CARETTRIM], caretTrimReplace)
|
||||||
|
|
||||||
|
// normalize spaces
|
||||||
|
range = range.split(/\s+/).join(' ')
|
||||||
|
|
||||||
|
// At this point, the range is completely trimmed and
|
||||||
|
// ready to be split into comparators.
|
||||||
|
|
||||||
|
var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
|
||||||
|
var set = range.split(' ').map(function (comp) {
|
||||||
|
return parseComparator(comp, this.options)
|
||||||
|
}, this).join(' ').split(/\s+/)
|
||||||
|
if (this.options.loose) {
|
||||||
|
// in loose mode, throw out any that are not valid comparators
|
||||||
|
set = set.filter(function (comp) {
|
||||||
|
return !!comp.match(compRe)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
set = set.map(function (comp) {
|
||||||
|
return new Comparator(comp, this.options)
|
||||||
|
}, this)
|
||||||
|
|
||||||
|
return set
|
||||||
|
}
|
||||||
|
|
||||||
|
Range.prototype.intersects = function (range, options) {
|
||||||
|
if (!(range instanceof Range)) {
|
||||||
|
throw new TypeError('a Range is required')
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.set.some(function (thisComparators) {
|
||||||
|
return (
|
||||||
|
isSatisfiable(thisComparators, options) &&
|
||||||
|
range.set.some(function (rangeComparators) {
|
||||||
|
return (
|
||||||
|
isSatisfiable(rangeComparators, options) &&
|
||||||
|
thisComparators.every(function (thisComparator) {
|
||||||
|
return rangeComparators.every(function (rangeComparator) {
|
||||||
|
return thisComparator.intersects(rangeComparator, options)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// take a set of comparators and determine whether there
|
||||||
|
// exists a version which can satisfy it
|
||||||
|
function isSatisfiable (comparators, options) {
|
||||||
|
var result = true
|
||||||
|
var remainingComparators = comparators.slice()
|
||||||
|
var testComparator = remainingComparators.pop()
|
||||||
|
|
||||||
|
while (result && remainingComparators.length) {
|
||||||
|
result = remainingComparators.every(function (otherComparator) {
|
||||||
|
return testComparator.intersects(otherComparator, options)
|
||||||
|
})
|
||||||
|
|
||||||
|
testComparator = remainingComparators.pop()
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mostly just for testing and legacy API reasons
|
||||||
|
exports.toComparators = toComparators
|
||||||
|
function toComparators (range, options) {
|
||||||
|
return new Range(range, options).set.map(function (comp) {
|
||||||
|
return comp.map(function (c) {
|
||||||
|
return c.value
|
||||||
|
}).join(' ').trim().split(' ')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// comprised of xranges, tildes, stars, and gtlt's at this point.
|
||||||
|
// already replaced the hyphen ranges
|
||||||
|
// turn into a set of JUST comparators.
|
||||||
|
function parseComparator (comp, options) {
|
||||||
|
debug('comp', comp, options)
|
||||||
|
comp = replaceCarets(comp, options)
|
||||||
|
debug('caret', comp)
|
||||||
|
comp = replaceTildes(comp, options)
|
||||||
|
debug('tildes', comp)
|
||||||
|
comp = replaceXRanges(comp, options)
|
||||||
|
debug('xrange', comp)
|
||||||
|
comp = replaceStars(comp, options)
|
||||||
|
debug('stars', comp)
|
||||||
|
return comp
|
||||||
|
}
|
||||||
|
|
||||||
|
function isX (id) {
|
||||||
|
return !id || id.toLowerCase() === 'x' || id === '*'
|
||||||
|
}
|
||||||
|
|
||||||
|
// ~, ~> --> * (any, kinda silly)
|
||||||
|
// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
|
||||||
|
// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
|
||||||
|
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
|
||||||
|
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
|
||||||
|
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
|
||||||
|
function replaceTildes (comp, options) {
|
||||||
|
return comp.trim().split(/\s+/).map(function (comp) {
|
||||||
|
return replaceTilde(comp, options)
|
||||||
|
}).join(' ')
|
||||||
|
}
|
||||||
|
|
||||||
|
function replaceTilde (comp, options) {
|
||||||
|
var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]
|
||||||
|
return comp.replace(r, function (_, M, m, p, pr) {
|
||||||
|
debug('tilde', comp, _, M, m, p, pr)
|
||||||
|
var ret
|
||||||
|
|
||||||
|
if (isX(M)) {
|
||||||
|
ret = ''
|
||||||
|
} else if (isX(m)) {
|
||||||
|
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
|
||||||
|
} else if (isX(p)) {
|
||||||
|
// ~1.2 == >=1.2.0 <1.3.0
|
||||||
|
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
|
||||||
|
} else if (pr) {
|
||||||
|
debug('replaceTilde pr', pr)
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
||||||
|
' <' + M + '.' + (+m + 1) + '.0'
|
||||||
|
} else {
|
||||||
|
// ~1.2.3 == >=1.2.3 <1.3.0
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p +
|
||||||
|
' <' + M + '.' + (+m + 1) + '.0'
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('tilde return', ret)
|
||||||
|
return ret
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ^ --> * (any, kinda silly)
|
||||||
|
// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
|
||||||
|
// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
|
||||||
|
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
|
||||||
|
// ^1.2.3 --> >=1.2.3 <2.0.0
|
||||||
|
// ^1.2.0 --> >=1.2.0 <2.0.0
|
||||||
|
function replaceCarets (comp, options) {
|
||||||
|
return comp.trim().split(/\s+/).map(function (comp) {
|
||||||
|
return replaceCaret(comp, options)
|
||||||
|
}).join(' ')
|
||||||
|
}
|
||||||
|
|
||||||
|
function replaceCaret (comp, options) {
|
||||||
|
debug('caret', comp, options)
|
||||||
|
var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]
|
||||||
|
return comp.replace(r, function (_, M, m, p, pr) {
|
||||||
|
debug('caret', comp, _, M, m, p, pr)
|
||||||
|
var ret
|
||||||
|
|
||||||
|
if (isX(M)) {
|
||||||
|
ret = ''
|
||||||
|
} else if (isX(m)) {
|
||||||
|
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
|
||||||
|
} else if (isX(p)) {
|
||||||
|
if (M === '0') {
|
||||||
|
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
|
||||||
|
} else {
|
||||||
|
ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'
|
||||||
|
}
|
||||||
|
} else if (pr) {
|
||||||
|
debug('replaceCaret pr', pr)
|
||||||
|
if (M === '0') {
|
||||||
|
if (m === '0') {
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
||||||
|
' <' + M + '.' + m + '.' + (+p + 1)
|
||||||
|
} else {
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
||||||
|
' <' + M + '.' + (+m + 1) + '.0'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
||||||
|
' <' + (+M + 1) + '.0.0'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
debug('no pr')
|
||||||
|
if (M === '0') {
|
||||||
|
if (m === '0') {
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p +
|
||||||
|
' <' + M + '.' + m + '.' + (+p + 1)
|
||||||
|
} else {
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p +
|
||||||
|
' <' + M + '.' + (+m + 1) + '.0'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p +
|
||||||
|
' <' + (+M + 1) + '.0.0'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('caret return', ret)
|
||||||
|
return ret
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function replaceXRanges (comp, options) {
|
||||||
|
debug('replaceXRanges', comp, options)
|
||||||
|
return comp.split(/\s+/).map(function (comp) {
|
||||||
|
return replaceXRange(comp, options)
|
||||||
|
}).join(' ')
|
||||||
|
}
|
||||||
|
|
||||||
|
function replaceXRange (comp, options) {
|
||||||
|
comp = comp.trim()
|
||||||
|
var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]
|
||||||
|
return comp.replace(r, function (ret, gtlt, M, m, p, pr) {
|
||||||
|
debug('xRange', comp, ret, gtlt, M, m, p, pr)
|
||||||
|
var xM = isX(M)
|
||||||
|
var xm = xM || isX(m)
|
||||||
|
var xp = xm || isX(p)
|
||||||
|
var anyX = xp
|
||||||
|
|
||||||
|
if (gtlt === '=' && anyX) {
|
||||||
|
gtlt = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we're including prereleases in the match, then we need
|
||||||
|
// to fix this to -0, the lowest possible prerelease value
|
||||||
|
pr = options.includePrerelease ? '-0' : ''
|
||||||
|
|
||||||
|
if (xM) {
|
||||||
|
if (gtlt === '>' || gtlt === '<') {
|
||||||
|
// nothing is allowed
|
||||||
|
ret = '<0.0.0-0'
|
||||||
|
} else {
|
||||||
|
// nothing is forbidden
|
||||||
|
ret = '*'
|
||||||
|
}
|
||||||
|
} else if (gtlt && anyX) {
|
||||||
|
// we know patch is an x, because we have any x at all.
|
||||||
|
// replace X with 0
|
||||||
|
if (xm) {
|
||||||
|
m = 0
|
||||||
|
}
|
||||||
|
p = 0
|
||||||
|
|
||||||
|
if (gtlt === '>') {
|
||||||
|
// >1 => >=2.0.0
|
||||||
|
// >1.2 => >=1.3.0
|
||||||
|
// >1.2.3 => >= 1.2.4
|
||||||
|
gtlt = '>='
|
||||||
|
if (xm) {
|
||||||
|
M = +M + 1
|
||||||
|
m = 0
|
||||||
|
p = 0
|
||||||
|
} else {
|
||||||
|
m = +m + 1
|
||||||
|
p = 0
|
||||||
|
}
|
||||||
|
} else if (gtlt === '<=') {
|
||||||
|
// <=0.7.x is actually <0.8.0, since any 0.7.x should
|
||||||
|
// pass. Similarly, <=7.x is actually <8.0.0, etc.
|
||||||
|
gtlt = '<'
|
||||||
|
if (xm) {
|
||||||
|
M = +M + 1
|
||||||
|
} else {
|
||||||
|
m = +m + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = gtlt + M + '.' + m + '.' + p + pr
|
||||||
|
} else if (xm) {
|
||||||
|
ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr
|
||||||
|
} else if (xp) {
|
||||||
|
ret = '>=' + M + '.' + m + '.0' + pr +
|
||||||
|
' <' + M + '.' + (+m + 1) + '.0' + pr
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('xRange return', ret)
|
||||||
|
|
||||||
|
return ret
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Because * is AND-ed with everything else in the comparator,
|
||||||
|
// and '' means "any version", just remove the *s entirely.
|
||||||
|
function replaceStars (comp, options) {
|
||||||
|
debug('replaceStars', comp, options)
|
||||||
|
// Looseness is ignored here. star is always as loose as it gets!
|
||||||
|
return comp.trim().replace(re[t.STAR], '')
|
||||||
|
}
|
||||||
|
|
||||||
|
// This function is passed to string.replace(re[t.HYPHENRANGE])
|
||||||
|
// M, m, patch, prerelease, build
|
||||||
|
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
|
||||||
|
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
|
||||||
|
// 1.2 - 3.4 => >=1.2.0 <3.5.0
|
||||||
|
function hyphenReplace ($0,
|
||||||
|
from, fM, fm, fp, fpr, fb,
|
||||||
|
to, tM, tm, tp, tpr, tb) {
|
||||||
|
if (isX(fM)) {
|
||||||
|
from = ''
|
||||||
|
} else if (isX(fm)) {
|
||||||
|
from = '>=' + fM + '.0.0'
|
||||||
|
} else if (isX(fp)) {
|
||||||
|
from = '>=' + fM + '.' + fm + '.0'
|
||||||
|
} else {
|
||||||
|
from = '>=' + from
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isX(tM)) {
|
||||||
|
to = ''
|
||||||
|
} else if (isX(tm)) {
|
||||||
|
to = '<' + (+tM + 1) + '.0.0'
|
||||||
|
} else if (isX(tp)) {
|
||||||
|
to = '<' + tM + '.' + (+tm + 1) + '.0'
|
||||||
|
} else if (tpr) {
|
||||||
|
to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr
|
||||||
|
} else {
|
||||||
|
to = '<=' + to
|
||||||
|
}
|
||||||
|
|
||||||
|
return (from + ' ' + to).trim()
|
||||||
|
}
|
||||||
|
|
||||||
|
// if ANY of the sets match ALL of its comparators, then pass
|
||||||
|
Range.prototype.test = function (version) {
|
||||||
|
if (!version) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof version === 'string') {
|
||||||
|
try {
|
||||||
|
version = new SemVer(version, this.options)
|
||||||
|
} catch (er) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < this.set.length; i++) {
|
||||||
|
if (testSet(this.set[i], version, this.options)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
function testSet (set, version, options) {
|
||||||
|
for (var i = 0; i < set.length; i++) {
|
||||||
|
if (!set[i].test(version)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (version.prerelease.length && !options.includePrerelease) {
|
||||||
|
// Find the set of versions that are allowed to have prereleases
|
||||||
|
// For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
|
||||||
|
// That should allow `1.2.3-pr.2` to pass.
|
||||||
|
// However, `1.2.4-alpha.notready` should NOT be allowed,
|
||||||
|
// even though it's within the range set by the comparators.
|
||||||
|
for (i = 0; i < set.length; i++) {
|
||||||
|
debug(set[i].semver)
|
||||||
|
if (set[i].semver === ANY) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if (set[i].semver.prerelease.length > 0) {
|
||||||
|
var allowed = set[i].semver
|
||||||
|
if (allowed.major === version.major &&
|
||||||
|
allowed.minor === version.minor &&
|
||||||
|
allowed.patch === version.patch) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Version has a -pre, but it's not one of the ones we like.
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.satisfies = satisfies
|
||||||
|
function satisfies (version, range, options) {
|
||||||
|
try {
|
||||||
|
range = new Range(range, options)
|
||||||
|
} catch (er) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return range.test(version)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.maxSatisfying = maxSatisfying
|
||||||
|
function maxSatisfying (versions, range, options) {
|
||||||
|
var max = null
|
||||||
|
var maxSV = null
|
||||||
|
try {
|
||||||
|
var rangeObj = new Range(range, options)
|
||||||
|
} catch (er) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
versions.forEach(function (v) {
|
||||||
|
if (rangeObj.test(v)) {
|
||||||
|
// satisfies(v, range, options)
|
||||||
|
if (!max || maxSV.compare(v) === -1) {
|
||||||
|
// compare(max, v, true)
|
||||||
|
max = v
|
||||||
|
maxSV = new SemVer(max, options)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return max
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.minSatisfying = minSatisfying
|
||||||
|
function minSatisfying (versions, range, options) {
|
||||||
|
var min = null
|
||||||
|
var minSV = null
|
||||||
|
try {
|
||||||
|
var rangeObj = new Range(range, options)
|
||||||
|
} catch (er) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
versions.forEach(function (v) {
|
||||||
|
if (rangeObj.test(v)) {
|
||||||
|
// satisfies(v, range, options)
|
||||||
|
if (!min || minSV.compare(v) === 1) {
|
||||||
|
// compare(min, v, true)
|
||||||
|
min = v
|
||||||
|
minSV = new SemVer(min, options)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return min
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.minVersion = minVersion
|
||||||
|
function minVersion (range, loose) {
|
||||||
|
range = new Range(range, loose)
|
||||||
|
|
||||||
|
var minver = new SemVer('0.0.0')
|
||||||
|
if (range.test(minver)) {
|
||||||
|
return minver
|
||||||
|
}
|
||||||
|
|
||||||
|
minver = new SemVer('0.0.0-0')
|
||||||
|
if (range.test(minver)) {
|
||||||
|
return minver
|
||||||
|
}
|
||||||
|
|
||||||
|
minver = null
|
||||||
|
for (var i = 0; i < range.set.length; ++i) {
|
||||||
|
var comparators = range.set[i]
|
||||||
|
|
||||||
|
comparators.forEach(function (comparator) {
|
||||||
|
// Clone to avoid manipulating the comparator's semver object.
|
||||||
|
var compver = new SemVer(comparator.semver.version)
|
||||||
|
switch (comparator.operator) {
|
||||||
|
case '>':
|
||||||
|
if (compver.prerelease.length === 0) {
|
||||||
|
compver.patch++
|
||||||
|
} else {
|
||||||
|
compver.prerelease.push(0)
|
||||||
|
}
|
||||||
|
compver.raw = compver.format()
|
||||||
|
/* fallthrough */
|
||||||
|
case '':
|
||||||
|
case '>=':
|
||||||
|
if (!minver || gt(minver, compver)) {
|
||||||
|
minver = compver
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case '<':
|
||||||
|
case '<=':
|
||||||
|
/* Ignore maximum versions */
|
||||||
|
break
|
||||||
|
/* istanbul ignore next */
|
||||||
|
default:
|
||||||
|
throw new Error('Unexpected operation: ' + comparator.operator)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (minver && range.test(minver)) {
|
||||||
|
return minver
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.validRange = validRange
|
||||||
|
function validRange (range, options) {
|
||||||
|
try {
|
||||||
|
// Return '*' instead of '' so that truthiness works.
|
||||||
|
// This will throw if it's invalid anyway
|
||||||
|
return new Range(range, options).range || '*'
|
||||||
|
} catch (er) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine if version is less than all the versions possible in the range
|
||||||
|
exports.ltr = ltr
|
||||||
|
function ltr (version, range, options) {
|
||||||
|
return outside(version, range, '<', options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine if version is greater than all the versions possible in the range.
|
||||||
|
exports.gtr = gtr
|
||||||
|
function gtr (version, range, options) {
|
||||||
|
return outside(version, range, '>', options)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.outside = outside
|
||||||
|
function outside (version, range, hilo, options) {
|
||||||
|
version = new SemVer(version, options)
|
||||||
|
range = new Range(range, options)
|
||||||
|
|
||||||
|
var gtfn, ltefn, ltfn, comp, ecomp
|
||||||
|
switch (hilo) {
|
||||||
|
case '>':
|
||||||
|
gtfn = gt
|
||||||
|
ltefn = lte
|
||||||
|
ltfn = lt
|
||||||
|
comp = '>'
|
||||||
|
ecomp = '>='
|
||||||
|
break
|
||||||
|
case '<':
|
||||||
|
gtfn = lt
|
||||||
|
ltefn = gte
|
||||||
|
ltfn = gt
|
||||||
|
comp = '<'
|
||||||
|
ecomp = '<='
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
throw new TypeError('Must provide a hilo val of "<" or ">"')
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it satisifes the range it is not outside
|
||||||
|
if (satisfies(version, range, options)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// From now on, variable terms are as if we're in "gtr" mode.
|
||||||
|
// but note that everything is flipped for the "ltr" function.
|
||||||
|
|
||||||
|
for (var i = 0; i < range.set.length; ++i) {
|
||||||
|
var comparators = range.set[i]
|
||||||
|
|
||||||
|
var high = null
|
||||||
|
var low = null
|
||||||
|
|
||||||
|
comparators.forEach(function (comparator) {
|
||||||
|
if (comparator.semver === ANY) {
|
||||||
|
comparator = new Comparator('>=0.0.0')
|
||||||
|
}
|
||||||
|
high = high || comparator
|
||||||
|
low = low || comparator
|
||||||
|
if (gtfn(comparator.semver, high.semver, options)) {
|
||||||
|
high = comparator
|
||||||
|
} else if (ltfn(comparator.semver, low.semver, options)) {
|
||||||
|
low = comparator
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// If the edge version comparator has a operator then our version
|
||||||
|
// isn't outside it
|
||||||
|
if (high.operator === comp || high.operator === ecomp) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the lowest version comparator has an operator and our version
|
||||||
|
// is less than it then it isn't higher than the range
|
||||||
|
if ((!low.operator || low.operator === comp) &&
|
||||||
|
ltefn(version, low.semver)) {
|
||||||
|
return false
|
||||||
|
} else if (low.operator === ecomp && ltfn(version, low.semver)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.prerelease = prerelease
|
||||||
|
function prerelease (version, options) {
|
||||||
|
var parsed = parse(version, options)
|
||||||
|
return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.intersects = intersects
|
||||||
|
function intersects (r1, r2, options) {
|
||||||
|
r1 = new Range(r1, options)
|
||||||
|
r2 = new Range(r2, options)
|
||||||
|
return r1.intersects(r2)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.coerce = coerce
|
||||||
|
function coerce (version, options) {
|
||||||
|
if (version instanceof SemVer) {
|
||||||
|
return version
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof version === 'number') {
|
||||||
|
version = String(version)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof version !== 'string') {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
options = options || {}
|
||||||
|
|
||||||
|
var match = null
|
||||||
|
if (!options.rtl) {
|
||||||
|
match = version.match(re[t.COERCE])
|
||||||
|
} else {
|
||||||
|
// Find the right-most coercible string that does not share
|
||||||
|
// a terminus with a more left-ward coercible string.
|
||||||
|
// Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
|
||||||
|
//
|
||||||
|
// Walk through the string checking with a /g regexp
|
||||||
|
// Manually set the index so as to pick up overlapping matches.
|
||||||
|
// Stop when we get a match that ends at the string end, since no
|
||||||
|
// coercible string can be more right-ward without the same terminus.
|
||||||
|
var next
|
||||||
|
while ((next = re[t.COERCERTL].exec(version)) &&
|
||||||
|
(!match || match.index + match[0].length !== version.length)
|
||||||
|
) {
|
||||||
|
if (!match ||
|
||||||
|
next.index + next[0].length !== match.index + match[0].length) {
|
||||||
|
match = next
|
||||||
|
}
|
||||||
|
re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
|
||||||
|
}
|
||||||
|
// leave it in a clean state
|
||||||
|
re[t.COERCERTL].lastIndex = -1
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match === null) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
return parse(match[2] +
|
||||||
|
'.' + (match[3] || '0') +
|
||||||
|
'.' + (match[4] || '0'), options)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 281:
|
/***/ 281:
|
||||||
@@ -3410,17 +5056,24 @@ module.exports = require("crypto");
|
|||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const os = __webpack_require__(87);
|
const os = __importStar(__webpack_require__(87));
|
||||||
/**
|
/**
|
||||||
* Commands
|
* Commands
|
||||||
*
|
*
|
||||||
* Command Format:
|
* Command Format:
|
||||||
* ##[name key=value;key=value]message
|
* ::name key=value,key=value::message
|
||||||
*
|
*
|
||||||
* Examples:
|
* Examples:
|
||||||
* ##[warning]This is the user warning message
|
* ::warning::This is the message
|
||||||
* ##[set-secret name=mypassword]definitelyNotAPassword!
|
* ::set-env name=MY_VAR::some value
|
||||||
*/
|
*/
|
||||||
function issueCommand(command, properties, message) {
|
function issueCommand(command, properties, message) {
|
||||||
const cmd = new Command(command, properties, message);
|
const cmd = new Command(command, properties, message);
|
||||||
@@ -3445,34 +5098,53 @@ class Command {
|
|||||||
let cmdStr = CMD_STRING + this.command;
|
let cmdStr = CMD_STRING + this.command;
|
||||||
if (this.properties && Object.keys(this.properties).length > 0) {
|
if (this.properties && Object.keys(this.properties).length > 0) {
|
||||||
cmdStr += ' ';
|
cmdStr += ' ';
|
||||||
|
let first = true;
|
||||||
for (const key in this.properties) {
|
for (const key in this.properties) {
|
||||||
if (this.properties.hasOwnProperty(key)) {
|
if (this.properties.hasOwnProperty(key)) {
|
||||||
const val = this.properties[key];
|
const val = this.properties[key];
|
||||||
if (val) {
|
if (val) {
|
||||||
// safely append the val - avoid blowing up when attempting to
|
if (first) {
|
||||||
// call .replace() if message is not a string for some reason
|
first = false;
|
||||||
cmdStr += `${key}=${escape(`${val || ''}`)},`;
|
}
|
||||||
|
else {
|
||||||
|
cmdStr += ',';
|
||||||
|
}
|
||||||
|
cmdStr += `${key}=${escapeProperty(val)}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cmdStr += CMD_STRING;
|
cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
|
||||||
// safely append the message - avoid blowing up when attempting to
|
|
||||||
// call .replace() if message is not a string for some reason
|
|
||||||
const message = `${this.message || ''}`;
|
|
||||||
cmdStr += escapeData(message);
|
|
||||||
return cmdStr;
|
return cmdStr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function escapeData(s) {
|
/**
|
||||||
return s.replace(/\r/g, '%0D').replace(/\n/g, '%0A');
|
* Sanitizes an input into a string so it can be passed into issueCommand safely
|
||||||
|
* @param input input to sanitize into a string
|
||||||
|
*/
|
||||||
|
function toCommandValue(input) {
|
||||||
|
if (input === null || input === undefined) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
else if (typeof input === 'string' || input instanceof String) {
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
return JSON.stringify(input);
|
||||||
}
|
}
|
||||||
function escape(s) {
|
exports.toCommandValue = toCommandValue;
|
||||||
return s
|
function escapeData(s) {
|
||||||
|
return toCommandValue(s)
|
||||||
|
.replace(/%/g, '%25')
|
||||||
|
.replace(/\r/g, '%0D')
|
||||||
|
.replace(/\n/g, '%0A');
|
||||||
|
}
|
||||||
|
function escapeProperty(s) {
|
||||||
|
return toCommandValue(s)
|
||||||
|
.replace(/%/g, '%25')
|
||||||
.replace(/\r/g, '%0D')
|
.replace(/\r/g, '%0D')
|
||||||
.replace(/\n/g, '%0A')
|
.replace(/\n/g, '%0A')
|
||||||
.replace(/]/g, '%5D')
|
.replace(/:/g, '%3A')
|
||||||
.replace(/;/g, '%3B');
|
.replace(/,/g, '%2C');
|
||||||
}
|
}
|
||||||
//# sourceMappingURL=command.js.map
|
//# sourceMappingURL=command.js.map
|
||||||
|
|
||||||
@@ -3506,26 +5178,30 @@ const fs_1 = __webpack_require__(747);
|
|||||||
const path = __importStar(__webpack_require__(622));
|
const path = __importStar(__webpack_require__(622));
|
||||||
const utils = __importStar(__webpack_require__(15));
|
const utils = __importStar(__webpack_require__(15));
|
||||||
const constants_1 = __webpack_require__(931);
|
const constants_1 = __webpack_require__(931);
|
||||||
function getTarPath(args) {
|
function getTarPath(args, compressionMethod) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
// Explicitly use BSD Tar on Windows
|
|
||||||
const IS_WINDOWS = process.platform === 'win32';
|
const IS_WINDOWS = process.platform === 'win32';
|
||||||
if (IS_WINDOWS) {
|
if (IS_WINDOWS) {
|
||||||
const systemTar = `${process.env['windir']}\\System32\\tar.exe`;
|
const systemTar = `${process.env['windir']}\\System32\\tar.exe`;
|
||||||
if (fs_1.existsSync(systemTar)) {
|
if (compressionMethod !== constants_1.CompressionMethod.Gzip) {
|
||||||
|
// We only use zstandard compression on windows when gnu tar is installed due to
|
||||||
|
// a bug with compressing large files with bsdtar + zstd
|
||||||
|
args.push('--force-local');
|
||||||
|
}
|
||||||
|
else if (fs_1.existsSync(systemTar)) {
|
||||||
return systemTar;
|
return systemTar;
|
||||||
}
|
}
|
||||||
else if (yield utils.useGnuTar()) {
|
else if (yield utils.isGnuTarInstalled()) {
|
||||||
args.push('--force-local');
|
args.push('--force-local');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return yield io.which('tar', true);
|
return yield io.which('tar', true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function execTar(args, cwd) {
|
function execTar(args, compressionMethod, cwd) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
yield exec_1.exec(`"${yield getTarPath(args)}"`, args, { cwd });
|
yield exec_1.exec(`"${yield getTarPath(args, compressionMethod)}"`, args, { cwd });
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
throw new Error(`Tar failed with error: ${error === null || error === void 0 ? void 0 : error.message}`);
|
throw new Error(`Tar failed with error: ${error === null || error === void 0 ? void 0 : error.message}`);
|
||||||
@@ -3544,17 +5220,25 @@ function extractTar(archivePath, compressionMethod) {
|
|||||||
// --d: Decompress.
|
// --d: Decompress.
|
||||||
// --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
|
// --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
|
||||||
// Using 30 here because we also support 32-bit self-hosted runners.
|
// Using 30 here because we also support 32-bit self-hosted runners.
|
||||||
|
function getCompressionProgram() {
|
||||||
|
switch (compressionMethod) {
|
||||||
|
case constants_1.CompressionMethod.Zstd:
|
||||||
|
return ['--use-compress-program', 'zstd -d --long=30'];
|
||||||
|
case constants_1.CompressionMethod.ZstdWithoutLong:
|
||||||
|
return ['--use-compress-program', 'zstd -d'];
|
||||||
|
default:
|
||||||
|
return ['-z'];
|
||||||
|
}
|
||||||
|
}
|
||||||
const args = [
|
const args = [
|
||||||
...(compressionMethod === constants_1.CompressionMethod.Zstd
|
...getCompressionProgram(),
|
||||||
? ['--use-compress-program', 'zstd -d --long=30']
|
|
||||||
: ['-z']),
|
|
||||||
'-xf',
|
'-xf',
|
||||||
archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
|
archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
|
||||||
'-P',
|
'-P',
|
||||||
'-C',
|
'-C',
|
||||||
workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/')
|
workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/')
|
||||||
];
|
];
|
||||||
yield execTar(args);
|
yield execTar(args, compressionMethod);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.extractTar = extractTar;
|
exports.extractTar = extractTar;
|
||||||
@@ -3564,14 +5248,23 @@ function createTar(archiveFolder, sourceDirectories, compressionMethod) {
|
|||||||
const manifestFilename = 'manifest.txt';
|
const manifestFilename = 'manifest.txt';
|
||||||
const cacheFileName = utils.getCacheFileName(compressionMethod);
|
const cacheFileName = utils.getCacheFileName(compressionMethod);
|
||||||
fs_1.writeFileSync(path.join(archiveFolder, manifestFilename), sourceDirectories.join('\n'));
|
fs_1.writeFileSync(path.join(archiveFolder, manifestFilename), sourceDirectories.join('\n'));
|
||||||
|
const workingDirectory = getWorkingDirectory();
|
||||||
// -T#: Compress using # working thread. If # is 0, attempt to detect and use the number of physical CPU cores.
|
// -T#: Compress using # working thread. If # is 0, attempt to detect and use the number of physical CPU cores.
|
||||||
// --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
|
// --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
|
||||||
// Using 30 here because we also support 32-bit self-hosted runners.
|
// Using 30 here because we also support 32-bit self-hosted runners.
|
||||||
const workingDirectory = getWorkingDirectory();
|
// Long range mode is added to zstd in v1.3.2 release, so we will not use --long in older version of zstd.
|
||||||
|
function getCompressionProgram() {
|
||||||
|
switch (compressionMethod) {
|
||||||
|
case constants_1.CompressionMethod.Zstd:
|
||||||
|
return ['--use-compress-program', 'zstd -T0 --long=30'];
|
||||||
|
case constants_1.CompressionMethod.ZstdWithoutLong:
|
||||||
|
return ['--use-compress-program', 'zstd -T0'];
|
||||||
|
default:
|
||||||
|
return ['-z'];
|
||||||
|
}
|
||||||
|
}
|
||||||
const args = [
|
const args = [
|
||||||
...(compressionMethod === constants_1.CompressionMethod.Zstd
|
...getCompressionProgram(),
|
||||||
? ['--use-compress-program', 'zstd -T0 --long=30']
|
|
||||||
: ['-z']),
|
|
||||||
'-cf',
|
'-cf',
|
||||||
cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
|
cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
|
||||||
'-P',
|
'-P',
|
||||||
@@ -3580,7 +5273,7 @@ function createTar(archiveFolder, sourceDirectories, compressionMethod) {
|
|||||||
'--files-from',
|
'--files-from',
|
||||||
manifestFilename
|
manifestFilename
|
||||||
];
|
];
|
||||||
yield execTar(args, archiveFolder);
|
yield execTar(args, compressionMethod, archiveFolder);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.createTar = createTar;
|
exports.createTar = createTar;
|
||||||
@@ -3593,14 +5286,27 @@ exports.createTar = createTar;
|
|||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
if (mod && mod.__esModule) return mod;
|
if (mod && mod.__esModule) return mod;
|
||||||
var result = {};
|
var result = {};
|
||||||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
result["default"] = mod;
|
__setModuleDefault(result, mod);
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.isValidEvent = exports.logWarning = exports.getCacheState = exports.setOutputAndState = exports.setCacheHitOutput = exports.setCacheState = exports.isExactKeyMatch = void 0;
|
||||||
const core = __importStar(__webpack_require__(470));
|
const core = __importStar(__webpack_require__(470));
|
||||||
const constants_1 = __webpack_require__(694);
|
const constants_1 = __webpack_require__(694);
|
||||||
function isExactKeyMatch(key, cacheKey) {
|
function isExactKeyMatch(key, cacheKey) {
|
||||||
@@ -3611,7 +5317,7 @@ function isExactKeyMatch(key, cacheKey) {
|
|||||||
}
|
}
|
||||||
exports.isExactKeyMatch = isExactKeyMatch;
|
exports.isExactKeyMatch = isExactKeyMatch;
|
||||||
function setCacheState(state) {
|
function setCacheState(state) {
|
||||||
core.saveState(constants_1.State.CacheResult, state);
|
core.saveState(constants_1.State.CacheMatchedKey, state);
|
||||||
}
|
}
|
||||||
exports.setCacheState = setCacheState;
|
exports.setCacheState = setCacheState;
|
||||||
function setCacheHitOutput(isCacheHit) {
|
function setCacheHitOutput(isCacheHit) {
|
||||||
@@ -3620,12 +5326,12 @@ function setCacheHitOutput(isCacheHit) {
|
|||||||
exports.setCacheHitOutput = setCacheHitOutput;
|
exports.setCacheHitOutput = setCacheHitOutput;
|
||||||
function setOutputAndState(key, cacheKey) {
|
function setOutputAndState(key, cacheKey) {
|
||||||
setCacheHitOutput(isExactKeyMatch(key, cacheKey));
|
setCacheHitOutput(isExactKeyMatch(key, cacheKey));
|
||||||
// Store the cache result if it exists
|
// Store the matched cache key if it exists
|
||||||
cacheKey && setCacheState(cacheKey);
|
cacheKey && setCacheState(cacheKey);
|
||||||
}
|
}
|
||||||
exports.setOutputAndState = setOutputAndState;
|
exports.setOutputAndState = setOutputAndState;
|
||||||
function getCacheState() {
|
function getCacheState() {
|
||||||
const cacheKey = core.getState(constants_1.State.CacheResult);
|
const cacheKey = core.getState(constants_1.State.CacheMatchedKey);
|
||||||
if (cacheKey) {
|
if (cacheKey) {
|
||||||
core.debug(`Cache state/key: ${cacheKey}`);
|
core.debug(`Cache state/key: ${cacheKey}`);
|
||||||
return cacheKey;
|
return cacheKey;
|
||||||
@@ -3662,10 +5368,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const command_1 = __webpack_require__(431);
|
const command_1 = __webpack_require__(431);
|
||||||
const os = __webpack_require__(87);
|
const os = __importStar(__webpack_require__(87));
|
||||||
const path = __webpack_require__(622);
|
const path = __importStar(__webpack_require__(622));
|
||||||
/**
|
/**
|
||||||
* The code to exit an action
|
* The code to exit an action
|
||||||
*/
|
*/
|
||||||
@@ -3686,11 +5399,13 @@ var ExitCode;
|
|||||||
/**
|
/**
|
||||||
* Sets env variable for this action and future actions in the job
|
* Sets env variable for this action and future actions in the job
|
||||||
* @param name the name of the variable to set
|
* @param name the name of the variable to set
|
||||||
* @param val the value of the variable
|
* @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
|
||||||
*/
|
*/
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
function exportVariable(name, val) {
|
function exportVariable(name, val) {
|
||||||
process.env[name] = val;
|
const convertedVal = command_1.toCommandValue(val);
|
||||||
command_1.issueCommand('set-env', { name }, val);
|
process.env[name] = convertedVal;
|
||||||
|
command_1.issueCommand('set-env', { name }, convertedVal);
|
||||||
}
|
}
|
||||||
exports.exportVariable = exportVariable;
|
exports.exportVariable = exportVariable;
|
||||||
/**
|
/**
|
||||||
@@ -3729,12 +5444,22 @@ exports.getInput = getInput;
|
|||||||
* Sets the value of an output.
|
* Sets the value of an output.
|
||||||
*
|
*
|
||||||
* @param name name of the output to set
|
* @param name name of the output to set
|
||||||
* @param value value to store
|
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
||||||
*/
|
*/
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
function setOutput(name, value) {
|
function setOutput(name, value) {
|
||||||
command_1.issueCommand('set-output', { name }, value);
|
command_1.issueCommand('set-output', { name }, value);
|
||||||
}
|
}
|
||||||
exports.setOutput = setOutput;
|
exports.setOutput = setOutput;
|
||||||
|
/**
|
||||||
|
* Enables or disables the echoing of commands into stdout for the rest of the step.
|
||||||
|
* Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function setCommandEcho(enabled) {
|
||||||
|
command_1.issue('echo', enabled ? 'on' : 'off');
|
||||||
|
}
|
||||||
|
exports.setCommandEcho = setCommandEcho;
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
// Results
|
// Results
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
@@ -3751,6 +5476,13 @@ exports.setFailed = setFailed;
|
|||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
// Logging Commands
|
// Logging Commands
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Gets whether Actions Step Debug is on or not
|
||||||
|
*/
|
||||||
|
function isDebug() {
|
||||||
|
return process.env['RUNNER_DEBUG'] === '1';
|
||||||
|
}
|
||||||
|
exports.isDebug = isDebug;
|
||||||
/**
|
/**
|
||||||
* Writes debug message to user log
|
* Writes debug message to user log
|
||||||
* @param message debug message
|
* @param message debug message
|
||||||
@@ -3761,18 +5493,18 @@ function debug(message) {
|
|||||||
exports.debug = debug;
|
exports.debug = debug;
|
||||||
/**
|
/**
|
||||||
* Adds an error issue
|
* Adds an error issue
|
||||||
* @param message error issue message
|
* @param message error issue message. Errors will be converted to string via toString()
|
||||||
*/
|
*/
|
||||||
function error(message) {
|
function error(message) {
|
||||||
command_1.issue('error', message);
|
command_1.issue('error', message instanceof Error ? message.toString() : message);
|
||||||
}
|
}
|
||||||
exports.error = error;
|
exports.error = error;
|
||||||
/**
|
/**
|
||||||
* Adds an warning issue
|
* Adds an warning issue
|
||||||
* @param message warning issue message
|
* @param message warning issue message. Errors will be converted to string via toString()
|
||||||
*/
|
*/
|
||||||
function warning(message) {
|
function warning(message) {
|
||||||
command_1.issue('warning', message);
|
command_1.issue('warning', message instanceof Error ? message.toString() : message);
|
||||||
}
|
}
|
||||||
exports.warning = warning;
|
exports.warning = warning;
|
||||||
/**
|
/**
|
||||||
@@ -3830,8 +5562,9 @@ exports.group = group;
|
|||||||
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
||||||
*
|
*
|
||||||
* @param name name of the state to store
|
* @param name name of the state to store
|
||||||
* @param value value to store
|
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
||||||
*/
|
*/
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
function saveState(name, value) {
|
function saveState(name, value) {
|
||||||
command_1.issueCommand('save-state', { name }, value);
|
command_1.issueCommand('save-state', { name }, value);
|
||||||
}
|
}
|
||||||
@@ -4602,235 +6335,6 @@ module.exports = require("net");
|
|||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 633:
|
|
||||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
|
||||||
if (mod && mod.__esModule) return mod;
|
|
||||||
var result = {};
|
|
||||||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
||||||
result["default"] = mod;
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
const command_1 = __webpack_require__(734);
|
|
||||||
const os = __importStar(__webpack_require__(87));
|
|
||||||
const path = __importStar(__webpack_require__(622));
|
|
||||||
/**
|
|
||||||
* The code to exit an action
|
|
||||||
*/
|
|
||||||
var ExitCode;
|
|
||||||
(function (ExitCode) {
|
|
||||||
/**
|
|
||||||
* A code indicating that the action was successful
|
|
||||||
*/
|
|
||||||
ExitCode[ExitCode["Success"] = 0] = "Success";
|
|
||||||
/**
|
|
||||||
* A code indicating that the action was a failure
|
|
||||||
*/
|
|
||||||
ExitCode[ExitCode["Failure"] = 1] = "Failure";
|
|
||||||
})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// Variables
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
/**
|
|
||||||
* Sets env variable for this action and future actions in the job
|
|
||||||
* @param name the name of the variable to set
|
|
||||||
* @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
|
|
||||||
*/
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
function exportVariable(name, val) {
|
|
||||||
const convertedVal = command_1.toCommandValue(val);
|
|
||||||
process.env[name] = convertedVal;
|
|
||||||
command_1.issueCommand('set-env', { name }, convertedVal);
|
|
||||||
}
|
|
||||||
exports.exportVariable = exportVariable;
|
|
||||||
/**
|
|
||||||
* Registers a secret which will get masked from logs
|
|
||||||
* @param secret value of the secret
|
|
||||||
*/
|
|
||||||
function setSecret(secret) {
|
|
||||||
command_1.issueCommand('add-mask', {}, secret);
|
|
||||||
}
|
|
||||||
exports.setSecret = setSecret;
|
|
||||||
/**
|
|
||||||
* Prepends inputPath to the PATH (for this action and future actions)
|
|
||||||
* @param inputPath
|
|
||||||
*/
|
|
||||||
function addPath(inputPath) {
|
|
||||||
command_1.issueCommand('add-path', {}, inputPath);
|
|
||||||
process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
|
|
||||||
}
|
|
||||||
exports.addPath = addPath;
|
|
||||||
/**
|
|
||||||
* Gets the value of an input. The value is also trimmed.
|
|
||||||
*
|
|
||||||
* @param name name of the input to get
|
|
||||||
* @param options optional. See InputOptions.
|
|
||||||
* @returns string
|
|
||||||
*/
|
|
||||||
function getInput(name, options) {
|
|
||||||
const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
|
|
||||||
if (options && options.required && !val) {
|
|
||||||
throw new Error(`Input required and not supplied: ${name}`);
|
|
||||||
}
|
|
||||||
return val.trim();
|
|
||||||
}
|
|
||||||
exports.getInput = getInput;
|
|
||||||
/**
|
|
||||||
* Sets the value of an output.
|
|
||||||
*
|
|
||||||
* @param name name of the output to set
|
|
||||||
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
|
||||||
*/
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
function setOutput(name, value) {
|
|
||||||
command_1.issueCommand('set-output', { name }, value);
|
|
||||||
}
|
|
||||||
exports.setOutput = setOutput;
|
|
||||||
/**
|
|
||||||
* Enables or disables the echoing of commands into stdout for the rest of the step.
|
|
||||||
* Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
function setCommandEcho(enabled) {
|
|
||||||
command_1.issue('echo', enabled ? 'on' : 'off');
|
|
||||||
}
|
|
||||||
exports.setCommandEcho = setCommandEcho;
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// Results
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
/**
|
|
||||||
* Sets the action status to failed.
|
|
||||||
* When the action exits it will be with an exit code of 1
|
|
||||||
* @param message add error issue message
|
|
||||||
*/
|
|
||||||
function setFailed(message) {
|
|
||||||
process.exitCode = ExitCode.Failure;
|
|
||||||
error(message);
|
|
||||||
}
|
|
||||||
exports.setFailed = setFailed;
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// Logging Commands
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
/**
|
|
||||||
* Gets whether Actions Step Debug is on or not
|
|
||||||
*/
|
|
||||||
function isDebug() {
|
|
||||||
return process.env['RUNNER_DEBUG'] === '1';
|
|
||||||
}
|
|
||||||
exports.isDebug = isDebug;
|
|
||||||
/**
|
|
||||||
* Writes debug message to user log
|
|
||||||
* @param message debug message
|
|
||||||
*/
|
|
||||||
function debug(message) {
|
|
||||||
command_1.issueCommand('debug', {}, message);
|
|
||||||
}
|
|
||||||
exports.debug = debug;
|
|
||||||
/**
|
|
||||||
* Adds an error issue
|
|
||||||
* @param message error issue message. Errors will be converted to string via toString()
|
|
||||||
*/
|
|
||||||
function error(message) {
|
|
||||||
command_1.issue('error', message instanceof Error ? message.toString() : message);
|
|
||||||
}
|
|
||||||
exports.error = error;
|
|
||||||
/**
|
|
||||||
* Adds an warning issue
|
|
||||||
* @param message warning issue message. Errors will be converted to string via toString()
|
|
||||||
*/
|
|
||||||
function warning(message) {
|
|
||||||
command_1.issue('warning', message instanceof Error ? message.toString() : message);
|
|
||||||
}
|
|
||||||
exports.warning = warning;
|
|
||||||
/**
|
|
||||||
* Writes info to log with console.log.
|
|
||||||
* @param message info message
|
|
||||||
*/
|
|
||||||
function info(message) {
|
|
||||||
process.stdout.write(message + os.EOL);
|
|
||||||
}
|
|
||||||
exports.info = info;
|
|
||||||
/**
|
|
||||||
* Begin an output group.
|
|
||||||
*
|
|
||||||
* Output until the next `groupEnd` will be foldable in this group
|
|
||||||
*
|
|
||||||
* @param name The name of the output group
|
|
||||||
*/
|
|
||||||
function startGroup(name) {
|
|
||||||
command_1.issue('group', name);
|
|
||||||
}
|
|
||||||
exports.startGroup = startGroup;
|
|
||||||
/**
|
|
||||||
* End an output group.
|
|
||||||
*/
|
|
||||||
function endGroup() {
|
|
||||||
command_1.issue('endgroup');
|
|
||||||
}
|
|
||||||
exports.endGroup = endGroup;
|
|
||||||
/**
|
|
||||||
* Wrap an asynchronous function call in a group.
|
|
||||||
*
|
|
||||||
* Returns the same type as the function itself.
|
|
||||||
*
|
|
||||||
* @param name The name of the group
|
|
||||||
* @param fn The function to wrap in the group
|
|
||||||
*/
|
|
||||||
function group(name, fn) {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
startGroup(name);
|
|
||||||
let result;
|
|
||||||
try {
|
|
||||||
result = yield fn();
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
endGroup();
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
exports.group = group;
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// Wrapper action state
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
/**
|
|
||||||
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
|
||||||
*
|
|
||||||
* @param name name of the state to store
|
|
||||||
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
|
||||||
*/
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
function saveState(name, value) {
|
|
||||||
command_1.issueCommand('save-state', { name }, value);
|
|
||||||
}
|
|
||||||
exports.saveState = saveState;
|
|
||||||
/**
|
|
||||||
* Gets the value of an state set by this action's main execution.
|
|
||||||
*
|
|
||||||
* @param name name of the state to get
|
|
||||||
* @returns string
|
|
||||||
*/
|
|
||||||
function getState(name) {
|
|
||||||
return process.env[`STATE_${name}`] || '';
|
|
||||||
}
|
|
||||||
exports.getState = getState;
|
|
||||||
//# sourceMappingURL=core.js.map
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 669:
|
/***/ 669:
|
||||||
/***/ (function(module) {
|
/***/ (function(module) {
|
||||||
|
|
||||||
@@ -5062,7 +6566,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const core = __importStar(__webpack_require__(633));
|
const core = __importStar(__webpack_require__(470));
|
||||||
const path = __importStar(__webpack_require__(622));
|
const path = __importStar(__webpack_require__(622));
|
||||||
const utils = __importStar(__webpack_require__(15));
|
const utils = __importStar(__webpack_require__(15));
|
||||||
const cacheHttpClient = __importStar(__webpack_require__(114));
|
const cacheHttpClient = __importStar(__webpack_require__(114));
|
||||||
@@ -5199,6 +6703,7 @@ exports.saveCache = saveCache;
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.RefKey = exports.Events = exports.State = exports.Outputs = exports.Inputs = void 0;
|
||||||
var Inputs;
|
var Inputs;
|
||||||
(function (Inputs) {
|
(function (Inputs) {
|
||||||
Inputs["Key"] = "key";
|
Inputs["Key"] = "key";
|
||||||
@@ -5211,8 +6716,8 @@ var Outputs;
|
|||||||
})(Outputs = exports.Outputs || (exports.Outputs = {}));
|
})(Outputs = exports.Outputs || (exports.Outputs = {}));
|
||||||
var State;
|
var State;
|
||||||
(function (State) {
|
(function (State) {
|
||||||
State["CacheKey"] = "CACHE_KEY";
|
State["CachePrimaryKey"] = "CACHE_KEY";
|
||||||
State["CacheResult"] = "CACHE_RESULT";
|
State["CacheMatchedKey"] = "CACHE_RESULT";
|
||||||
})(State = exports.State || (exports.State = {}));
|
})(State = exports.State || (exports.State = {}));
|
||||||
var Events;
|
var Events;
|
||||||
(function (Events) {
|
(function (Events) {
|
||||||
@@ -5241,14 +6746,16 @@ function bytesToUuid(buf, offset) {
|
|||||||
var i = offset || 0;
|
var i = offset || 0;
|
||||||
var bth = byteToHex;
|
var bth = byteToHex;
|
||||||
// join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
|
// join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
|
||||||
return ([bth[buf[i++]], bth[buf[i++]],
|
return ([
|
||||||
bth[buf[i++]], bth[buf[i++]], '-',
|
bth[buf[i++]], bth[buf[i++]],
|
||||||
bth[buf[i++]], bth[buf[i++]], '-',
|
bth[buf[i++]], bth[buf[i++]], '-',
|
||||||
bth[buf[i++]], bth[buf[i++]], '-',
|
bth[buf[i++]], bth[buf[i++]], '-',
|
||||||
bth[buf[i++]], bth[buf[i++]], '-',
|
bth[buf[i++]], bth[buf[i++]], '-',
|
||||||
bth[buf[i++]], bth[buf[i++]],
|
bth[buf[i++]], bth[buf[i++]], '-',
|
||||||
bth[buf[i++]], bth[buf[i++]],
|
bth[buf[i++]], bth[buf[i++]],
|
||||||
bth[buf[i++]], bth[buf[i++]]]).join('');
|
bth[buf[i++]], bth[buf[i++]],
|
||||||
|
bth[buf[i++]], bth[buf[i++]]
|
||||||
|
]).join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = bytesToUuid;
|
module.exports = bytesToUuid;
|
||||||
@@ -5273,105 +6780,6 @@ exports.SearchState = SearchState;
|
|||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 734:
|
|
||||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
|
||||||
if (mod && mod.__esModule) return mod;
|
|
||||||
var result = {};
|
|
||||||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
||||||
result["default"] = mod;
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
const os = __importStar(__webpack_require__(87));
|
|
||||||
/**
|
|
||||||
* Commands
|
|
||||||
*
|
|
||||||
* Command Format:
|
|
||||||
* ::name key=value,key=value::message
|
|
||||||
*
|
|
||||||
* Examples:
|
|
||||||
* ::warning::This is the message
|
|
||||||
* ::set-env name=MY_VAR::some value
|
|
||||||
*/
|
|
||||||
function issueCommand(command, properties, message) {
|
|
||||||
const cmd = new Command(command, properties, message);
|
|
||||||
process.stdout.write(cmd.toString() + os.EOL);
|
|
||||||
}
|
|
||||||
exports.issueCommand = issueCommand;
|
|
||||||
function issue(name, message = '') {
|
|
||||||
issueCommand(name, {}, message);
|
|
||||||
}
|
|
||||||
exports.issue = issue;
|
|
||||||
const CMD_STRING = '::';
|
|
||||||
class Command {
|
|
||||||
constructor(command, properties, message) {
|
|
||||||
if (!command) {
|
|
||||||
command = 'missing.command';
|
|
||||||
}
|
|
||||||
this.command = command;
|
|
||||||
this.properties = properties;
|
|
||||||
this.message = message;
|
|
||||||
}
|
|
||||||
toString() {
|
|
||||||
let cmdStr = CMD_STRING + this.command;
|
|
||||||
if (this.properties && Object.keys(this.properties).length > 0) {
|
|
||||||
cmdStr += ' ';
|
|
||||||
let first = true;
|
|
||||||
for (const key in this.properties) {
|
|
||||||
if (this.properties.hasOwnProperty(key)) {
|
|
||||||
const val = this.properties[key];
|
|
||||||
if (val) {
|
|
||||||
if (first) {
|
|
||||||
first = false;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
cmdStr += ',';
|
|
||||||
}
|
|
||||||
cmdStr += `${key}=${escapeProperty(val)}`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
|
|
||||||
return cmdStr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Sanitizes an input into a string so it can be passed into issueCommand safely
|
|
||||||
* @param input input to sanitize into a string
|
|
||||||
*/
|
|
||||||
function toCommandValue(input) {
|
|
||||||
if (input === null || input === undefined) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
else if (typeof input === 'string' || input instanceof String) {
|
|
||||||
return input;
|
|
||||||
}
|
|
||||||
return JSON.stringify(input);
|
|
||||||
}
|
|
||||||
exports.toCommandValue = toCommandValue;
|
|
||||||
function escapeData(s) {
|
|
||||||
return toCommandValue(s)
|
|
||||||
.replace(/%/g, '%25')
|
|
||||||
.replace(/\r/g, '%0D')
|
|
||||||
.replace(/\n/g, '%0A');
|
|
||||||
}
|
|
||||||
function escapeProperty(s) {
|
|
||||||
return toCommandValue(s)
|
|
||||||
.replace(/%/g, '%25')
|
|
||||||
.replace(/\r/g, '%0D')
|
|
||||||
.replace(/\n/g, '%0A')
|
|
||||||
.replace(/:/g, '%3A')
|
|
||||||
.replace(/,/g, '%2C');
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=command.js.map
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 747:
|
/***/ 747:
|
||||||
/***/ (function(module) {
|
/***/ (function(module) {
|
||||||
|
|
||||||
@@ -5384,6 +6792,25 @@ module.exports = require("fs");
|
|||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
@@ -5393,13 +6820,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
|
||||||
if (mod && mod.__esModule) return mod;
|
|
||||||
var result = {};
|
|
||||||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
||||||
result["default"] = mod;
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const cache = __importStar(__webpack_require__(692));
|
const cache = __importStar(__webpack_require__(692));
|
||||||
const core = __importStar(__webpack_require__(470));
|
const core = __importStar(__webpack_require__(470));
|
||||||
@@ -5414,7 +6834,7 @@ function run() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const primaryKey = core.getInput(constants_1.Inputs.Key, { required: true });
|
const primaryKey = core.getInput(constants_1.Inputs.Key, { required: true });
|
||||||
core.saveState(constants_1.State.CacheKey, primaryKey);
|
core.saveState(constants_1.State.CachePrimaryKey, primaryKey);
|
||||||
const restoreKeys = core
|
const restoreKeys = core
|
||||||
.getInput(constants_1.Inputs.RestoreKeys)
|
.getInput(constants_1.Inputs.RestoreKeys)
|
||||||
.split("\n")
|
.split("\n")
|
||||||
@@ -5432,7 +6852,7 @@ function run() {
|
|||||||
].join(", ")}`);
|
].join(", ")}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Store the cache result
|
// Store the matched cache key
|
||||||
utils.setCacheState(cacheKey);
|
utils.setCacheState(cacheKey);
|
||||||
const isExactKeyMatch = utils.isExactKeyMatch(primaryKey, cacheKey);
|
const isExactKeyMatch = utils.isExactKeyMatch(primaryKey, cacheKey);
|
||||||
utils.setCacheHitOutput(isExactKeyMatch);
|
utils.setCacheHitOutput(isExactKeyMatch);
|
||||||
@@ -5796,6 +7216,9 @@ var CacheFilename;
|
|||||||
var CompressionMethod;
|
var CompressionMethod;
|
||||||
(function (CompressionMethod) {
|
(function (CompressionMethod) {
|
||||||
CompressionMethod["Gzip"] = "gzip";
|
CompressionMethod["Gzip"] = "gzip";
|
||||||
|
// Long range mode was added to zstd in v1.3.2.
|
||||||
|
// This enum is for earlier version of zstd that does not have --long support
|
||||||
|
CompressionMethod["ZstdWithoutLong"] = "zstd-without-long";
|
||||||
CompressionMethod["Zstd"] = "zstd";
|
CompressionMethod["Zstd"] = "zstd";
|
||||||
})(CompressionMethod = exports.CompressionMethod || (exports.CompressionMethod = {}));
|
})(CompressionMethod = exports.CompressionMethod || (exports.CompressionMethod = {}));
|
||||||
// Socket timeout in milliseconds during download. If no traffic is received
|
// Socket timeout in milliseconds during download. If no traffic is received
|
||||||
@@ -6068,8 +7491,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const tr = __webpack_require__(9);
|
const tr = __importStar(__webpack_require__(9));
|
||||||
/**
|
/**
|
||||||
* Exec a command.
|
* Exec a command.
|
||||||
* Output will be streamed to the live console.
|
* Output will be streamed to the live console.
|
||||||
|
|||||||
Vendored
+1842
-412
@@ -354,10 +354,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const os = __webpack_require__(87);
|
const os = __importStar(__webpack_require__(87));
|
||||||
const events = __webpack_require__(614);
|
const events = __importStar(__webpack_require__(614));
|
||||||
const child = __webpack_require__(129);
|
const child = __importStar(__webpack_require__(129));
|
||||||
|
const path = __importStar(__webpack_require__(622));
|
||||||
|
const io = __importStar(__webpack_require__(1));
|
||||||
|
const ioUtil = __importStar(__webpack_require__(672));
|
||||||
/* eslint-disable @typescript-eslint/unbound-method */
|
/* eslint-disable @typescript-eslint/unbound-method */
|
||||||
const IS_WINDOWS = process.platform === 'win32';
|
const IS_WINDOWS = process.platform === 'win32';
|
||||||
/*
|
/*
|
||||||
@@ -703,6 +713,16 @@ class ToolRunner extends events.EventEmitter {
|
|||||||
*/
|
*/
|
||||||
exec() {
|
exec() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
// root the tool path if it is unrooted and contains relative pathing
|
||||||
|
if (!ioUtil.isRooted(this.toolPath) &&
|
||||||
|
(this.toolPath.includes('/') ||
|
||||||
|
(IS_WINDOWS && this.toolPath.includes('\\')))) {
|
||||||
|
// prefer options.cwd if it is specified, however options.cwd may also need to be rooted
|
||||||
|
this.toolPath = path.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath);
|
||||||
|
}
|
||||||
|
// if the tool is only a file name, then resolve it from the PATH
|
||||||
|
// otherwise verify it exists (add extension on Windows if necessary)
|
||||||
|
this.toolPath = yield io.which(this.toolPath, true);
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this._debug(`exec tool: ${this.toolPath}`);
|
this._debug(`exec tool: ${this.toolPath}`);
|
||||||
this._debug('arguments:');
|
this._debug('arguments:');
|
||||||
@@ -791,6 +811,12 @@ class ToolRunner extends events.EventEmitter {
|
|||||||
resolve(exitCode);
|
resolve(exitCode);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
if (this.options.input) {
|
||||||
|
if (!cp.stdin) {
|
||||||
|
throw new Error('child process missing stdin');
|
||||||
|
}
|
||||||
|
cp.stdin.end(this.options.input);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -950,12 +976,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const core = __importStar(__webpack_require__(633));
|
const core = __importStar(__webpack_require__(470));
|
||||||
const exec = __importStar(__webpack_require__(986));
|
const exec = __importStar(__webpack_require__(986));
|
||||||
const glob = __importStar(__webpack_require__(281));
|
const glob = __importStar(__webpack_require__(281));
|
||||||
const io = __importStar(__webpack_require__(1));
|
const io = __importStar(__webpack_require__(1));
|
||||||
const fs = __importStar(__webpack_require__(747));
|
const fs = __importStar(__webpack_require__(747));
|
||||||
const path = __importStar(__webpack_require__(622));
|
const path = __importStar(__webpack_require__(622));
|
||||||
|
const semver = __importStar(__webpack_require__(280));
|
||||||
const util = __importStar(__webpack_require__(669));
|
const util = __importStar(__webpack_require__(669));
|
||||||
const uuid_1 = __webpack_require__(898);
|
const uuid_1 = __webpack_require__(898);
|
||||||
const constants_1 = __webpack_require__(931);
|
const constants_1 = __webpack_require__(931);
|
||||||
@@ -1050,26 +1077,40 @@ function getVersion(app) {
|
|||||||
// Use zstandard if possible to maximize cache performance
|
// Use zstandard if possible to maximize cache performance
|
||||||
function getCompressionMethod() {
|
function getCompressionMethod() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if (process.platform === 'win32' && !isGnuTarInstalled()) {
|
||||||
|
// Disable zstd due to bug https://github.com/actions/cache/issues/301
|
||||||
|
return constants_1.CompressionMethod.Gzip;
|
||||||
|
}
|
||||||
const versionOutput = yield getVersion('zstd');
|
const versionOutput = yield getVersion('zstd');
|
||||||
return versionOutput.toLowerCase().includes('zstd command line interface')
|
const version = semver.clean(versionOutput);
|
||||||
? constants_1.CompressionMethod.Zstd
|
if (!versionOutput.toLowerCase().includes('zstd command line interface')) {
|
||||||
: constants_1.CompressionMethod.Gzip;
|
// zstd is not installed
|
||||||
|
return constants_1.CompressionMethod.Gzip;
|
||||||
|
}
|
||||||
|
else if (!version || semver.lt(version, 'v1.3.2')) {
|
||||||
|
// zstd is installed but using a version earlier than v1.3.2
|
||||||
|
// v1.3.2 is required to use the `--long` options in zstd
|
||||||
|
return constants_1.CompressionMethod.ZstdWithoutLong;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return constants_1.CompressionMethod.Zstd;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.getCompressionMethod = getCompressionMethod;
|
exports.getCompressionMethod = getCompressionMethod;
|
||||||
function getCacheFileName(compressionMethod) {
|
function getCacheFileName(compressionMethod) {
|
||||||
return compressionMethod === constants_1.CompressionMethod.Zstd
|
return compressionMethod === constants_1.CompressionMethod.Gzip
|
||||||
? constants_1.CacheFilename.Zstd
|
? constants_1.CacheFilename.Gzip
|
||||||
: constants_1.CacheFilename.Gzip;
|
: constants_1.CacheFilename.Zstd;
|
||||||
}
|
}
|
||||||
exports.getCacheFileName = getCacheFileName;
|
exports.getCacheFileName = getCacheFileName;
|
||||||
function useGnuTar() {
|
function isGnuTarInstalled() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const versionOutput = yield getVersion('tar');
|
const versionOutput = yield getVersion('tar');
|
||||||
return versionOutput.toLowerCase().includes('gnu tar');
|
return versionOutput.toLowerCase().includes('gnu tar');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.useGnuTar = useGnuTar;
|
exports.isGnuTarInstalled = isGnuTarInstalled;
|
||||||
//# sourceMappingURL=cacheUtils.js.map
|
//# sourceMappingURL=cacheUtils.js.map
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
@@ -1099,7 +1140,7 @@ var _clockseq;
|
|||||||
var _lastMSecs = 0;
|
var _lastMSecs = 0;
|
||||||
var _lastNSecs = 0;
|
var _lastNSecs = 0;
|
||||||
|
|
||||||
// See https://github.com/broofa/node-uuid for API details
|
// See https://github.com/uuidjs/uuid for API details
|
||||||
function v1(options, buf, offset) {
|
function v1(options, buf, offset) {
|
||||||
var i = buf && offset || 0;
|
var i = buf && offset || 0;
|
||||||
var b = buf || [];
|
var b = buf || [];
|
||||||
@@ -2156,7 +2197,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const core = __importStar(__webpack_require__(633));
|
const core = __importStar(__webpack_require__(470));
|
||||||
const http_client_1 = __webpack_require__(539);
|
const http_client_1 = __webpack_require__(539);
|
||||||
const auth_1 = __webpack_require__(226);
|
const auth_1 = __webpack_require__(226);
|
||||||
const crypto = __importStar(__webpack_require__(417));
|
const crypto = __importStar(__webpack_require__(417));
|
||||||
@@ -2218,7 +2259,9 @@ function createHttpClient() {
|
|||||||
return new http_client_1.HttpClient('actions/cache', [bearerCredentialHandler], getRequestOptions());
|
return new http_client_1.HttpClient('actions/cache', [bearerCredentialHandler], getRequestOptions());
|
||||||
}
|
}
|
||||||
function getCacheVersion(paths, compressionMethod) {
|
function getCacheVersion(paths, compressionMethod) {
|
||||||
const components = paths.concat(compressionMethod === constants_1.CompressionMethod.Zstd ? [compressionMethod] : []);
|
const components = paths.concat(!compressionMethod || compressionMethod === constants_1.CompressionMethod.Gzip
|
||||||
|
? []
|
||||||
|
: [compressionMethod]);
|
||||||
// Add salt to cache version to support breaking changes in cache entry
|
// Add salt to cache version to support breaking changes in cache entry
|
||||||
components.push(versionSalt);
|
components.push(versionSalt);
|
||||||
return crypto
|
return crypto
|
||||||
@@ -2798,6 +2841,1609 @@ class PersonalAccessTokenCredentialHandler {
|
|||||||
exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
|
exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 280:
|
||||||
|
/***/ (function(module, exports) {
|
||||||
|
|
||||||
|
exports = module.exports = SemVer
|
||||||
|
|
||||||
|
var debug
|
||||||
|
/* istanbul ignore next */
|
||||||
|
if (typeof process === 'object' &&
|
||||||
|
process.env &&
|
||||||
|
process.env.NODE_DEBUG &&
|
||||||
|
/\bsemver\b/i.test(process.env.NODE_DEBUG)) {
|
||||||
|
debug = function () {
|
||||||
|
var args = Array.prototype.slice.call(arguments, 0)
|
||||||
|
args.unshift('SEMVER')
|
||||||
|
console.log.apply(console, args)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
debug = function () {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note: this is the semver.org version of the spec that it implements
|
||||||
|
// Not necessarily the package version of this code.
|
||||||
|
exports.SEMVER_SPEC_VERSION = '2.0.0'
|
||||||
|
|
||||||
|
var MAX_LENGTH = 256
|
||||||
|
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
|
||||||
|
/* istanbul ignore next */ 9007199254740991
|
||||||
|
|
||||||
|
// Max safe segment length for coercion.
|
||||||
|
var MAX_SAFE_COMPONENT_LENGTH = 16
|
||||||
|
|
||||||
|
// The actual regexps go on exports.re
|
||||||
|
var re = exports.re = []
|
||||||
|
var src = exports.src = []
|
||||||
|
var t = exports.tokens = {}
|
||||||
|
var R = 0
|
||||||
|
|
||||||
|
function tok (n) {
|
||||||
|
t[n] = R++
|
||||||
|
}
|
||||||
|
|
||||||
|
// The following Regular Expressions can be used for tokenizing,
|
||||||
|
// validating, and parsing SemVer version strings.
|
||||||
|
|
||||||
|
// ## Numeric Identifier
|
||||||
|
// A single `0`, or a non-zero digit followed by zero or more digits.
|
||||||
|
|
||||||
|
tok('NUMERICIDENTIFIER')
|
||||||
|
src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*'
|
||||||
|
tok('NUMERICIDENTIFIERLOOSE')
|
||||||
|
src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+'
|
||||||
|
|
||||||
|
// ## Non-numeric Identifier
|
||||||
|
// Zero or more digits, followed by a letter or hyphen, and then zero or
|
||||||
|
// more letters, digits, or hyphens.
|
||||||
|
|
||||||
|
tok('NONNUMERICIDENTIFIER')
|
||||||
|
src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
|
||||||
|
|
||||||
|
// ## Main Version
|
||||||
|
// Three dot-separated numeric identifiers.
|
||||||
|
|
||||||
|
tok('MAINVERSION')
|
||||||
|
src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' +
|
||||||
|
'(' + src[t.NUMERICIDENTIFIER] + ')\\.' +
|
||||||
|
'(' + src[t.NUMERICIDENTIFIER] + ')'
|
||||||
|
|
||||||
|
tok('MAINVERSIONLOOSE')
|
||||||
|
src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' +
|
||||||
|
'(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' +
|
||||||
|
'(' + src[t.NUMERICIDENTIFIERLOOSE] + ')'
|
||||||
|
|
||||||
|
// ## Pre-release Version Identifier
|
||||||
|
// A numeric identifier, or a non-numeric identifier.
|
||||||
|
|
||||||
|
tok('PRERELEASEIDENTIFIER')
|
||||||
|
src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] +
|
||||||
|
'|' + src[t.NONNUMERICIDENTIFIER] + ')'
|
||||||
|
|
||||||
|
tok('PRERELEASEIDENTIFIERLOOSE')
|
||||||
|
src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] +
|
||||||
|
'|' + src[t.NONNUMERICIDENTIFIER] + ')'
|
||||||
|
|
||||||
|
// ## Pre-release Version
|
||||||
|
// Hyphen, followed by one or more dot-separated pre-release version
|
||||||
|
// identifiers.
|
||||||
|
|
||||||
|
tok('PRERELEASE')
|
||||||
|
src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] +
|
||||||
|
'(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))'
|
||||||
|
|
||||||
|
tok('PRERELEASELOOSE')
|
||||||
|
src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] +
|
||||||
|
'(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))'
|
||||||
|
|
||||||
|
// ## Build Metadata Identifier
|
||||||
|
// Any combination of digits, letters, or hyphens.
|
||||||
|
|
||||||
|
tok('BUILDIDENTIFIER')
|
||||||
|
src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+'
|
||||||
|
|
||||||
|
// ## Build Metadata
|
||||||
|
// Plus sign, followed by one or more period-separated build metadata
|
||||||
|
// identifiers.
|
||||||
|
|
||||||
|
tok('BUILD')
|
||||||
|
src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] +
|
||||||
|
'(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))'
|
||||||
|
|
||||||
|
// ## Full Version String
|
||||||
|
// A main version, followed optionally by a pre-release version and
|
||||||
|
// build metadata.
|
||||||
|
|
||||||
|
// Note that the only major, minor, patch, and pre-release sections of
|
||||||
|
// the version string are capturing groups. The build metadata is not a
|
||||||
|
// capturing group, because it should not ever be used in version
|
||||||
|
// comparison.
|
||||||
|
|
||||||
|
tok('FULL')
|
||||||
|
tok('FULLPLAIN')
|
||||||
|
src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] +
|
||||||
|
src[t.PRERELEASE] + '?' +
|
||||||
|
src[t.BUILD] + '?'
|
||||||
|
|
||||||
|
src[t.FULL] = '^' + src[t.FULLPLAIN] + '$'
|
||||||
|
|
||||||
|
// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
|
||||||
|
// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
|
||||||
|
// common in the npm registry.
|
||||||
|
tok('LOOSEPLAIN')
|
||||||
|
src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] +
|
||||||
|
src[t.PRERELEASELOOSE] + '?' +
|
||||||
|
src[t.BUILD] + '?'
|
||||||
|
|
||||||
|
tok('LOOSE')
|
||||||
|
src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$'
|
||||||
|
|
||||||
|
tok('GTLT')
|
||||||
|
src[t.GTLT] = '((?:<|>)?=?)'
|
||||||
|
|
||||||
|
// Something like "2.*" or "1.2.x".
|
||||||
|
// Note that "x.x" is a valid xRange identifer, meaning "any version"
|
||||||
|
// Only the first item is strictly required.
|
||||||
|
tok('XRANGEIDENTIFIERLOOSE')
|
||||||
|
src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
|
||||||
|
tok('XRANGEIDENTIFIER')
|
||||||
|
src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*'
|
||||||
|
|
||||||
|
tok('XRANGEPLAIN')
|
||||||
|
src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' +
|
||||||
|
'(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' +
|
||||||
|
'(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' +
|
||||||
|
'(?:' + src[t.PRERELEASE] + ')?' +
|
||||||
|
src[t.BUILD] + '?' +
|
||||||
|
')?)?'
|
||||||
|
|
||||||
|
tok('XRANGEPLAINLOOSE')
|
||||||
|
src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
|
||||||
|
'(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
|
||||||
|
'(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
|
||||||
|
'(?:' + src[t.PRERELEASELOOSE] + ')?' +
|
||||||
|
src[t.BUILD] + '?' +
|
||||||
|
')?)?'
|
||||||
|
|
||||||
|
tok('XRANGE')
|
||||||
|
src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$'
|
||||||
|
tok('XRANGELOOSE')
|
||||||
|
src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$'
|
||||||
|
|
||||||
|
// Coercion.
|
||||||
|
// Extract anything that could conceivably be a part of a valid semver
|
||||||
|
tok('COERCE')
|
||||||
|
src[t.COERCE] = '(^|[^\\d])' +
|
||||||
|
'(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
|
||||||
|
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
|
||||||
|
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
|
||||||
|
'(?:$|[^\\d])'
|
||||||
|
tok('COERCERTL')
|
||||||
|
re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g')
|
||||||
|
|
||||||
|
// Tilde ranges.
|
||||||
|
// Meaning is "reasonably at or greater than"
|
||||||
|
tok('LONETILDE')
|
||||||
|
src[t.LONETILDE] = '(?:~>?)'
|
||||||
|
|
||||||
|
tok('TILDETRIM')
|
||||||
|
src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+'
|
||||||
|
re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g')
|
||||||
|
var tildeTrimReplace = '$1~'
|
||||||
|
|
||||||
|
tok('TILDE')
|
||||||
|
src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$'
|
||||||
|
tok('TILDELOOSE')
|
||||||
|
src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$'
|
||||||
|
|
||||||
|
// Caret ranges.
|
||||||
|
// Meaning is "at least and backwards compatible with"
|
||||||
|
tok('LONECARET')
|
||||||
|
src[t.LONECARET] = '(?:\\^)'
|
||||||
|
|
||||||
|
tok('CARETTRIM')
|
||||||
|
src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+'
|
||||||
|
re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g')
|
||||||
|
var caretTrimReplace = '$1^'
|
||||||
|
|
||||||
|
tok('CARET')
|
||||||
|
src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$'
|
||||||
|
tok('CARETLOOSE')
|
||||||
|
src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$'
|
||||||
|
|
||||||
|
// A simple gt/lt/eq thing, or just "" to indicate "any version"
|
||||||
|
tok('COMPARATORLOOSE')
|
||||||
|
src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$'
|
||||||
|
tok('COMPARATOR')
|
||||||
|
src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$'
|
||||||
|
|
||||||
|
// An expression to strip any whitespace between the gtlt and the thing
|
||||||
|
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
|
||||||
|
tok('COMPARATORTRIM')
|
||||||
|
src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] +
|
||||||
|
'\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')'
|
||||||
|
|
||||||
|
// this one has to use the /g flag
|
||||||
|
re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g')
|
||||||
|
var comparatorTrimReplace = '$1$2$3'
|
||||||
|
|
||||||
|
// Something like `1.2.3 - 1.2.4`
|
||||||
|
// Note that these all use the loose form, because they'll be
|
||||||
|
// checked against either the strict or loose comparator form
|
||||||
|
// later.
|
||||||
|
tok('HYPHENRANGE')
|
||||||
|
src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' +
|
||||||
|
'\\s+-\\s+' +
|
||||||
|
'(' + src[t.XRANGEPLAIN] + ')' +
|
||||||
|
'\\s*$'
|
||||||
|
|
||||||
|
tok('HYPHENRANGELOOSE')
|
||||||
|
src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' +
|
||||||
|
'\\s+-\\s+' +
|
||||||
|
'(' + src[t.XRANGEPLAINLOOSE] + ')' +
|
||||||
|
'\\s*$'
|
||||||
|
|
||||||
|
// Star ranges basically just allow anything at all.
|
||||||
|
tok('STAR')
|
||||||
|
src[t.STAR] = '(<|>)?=?\\s*\\*'
|
||||||
|
|
||||||
|
// Compile to actual regexp objects.
|
||||||
|
// All are flag-free, unless they were created above with a flag.
|
||||||
|
for (var i = 0; i < R; i++) {
|
||||||
|
debug(i, src[i])
|
||||||
|
if (!re[i]) {
|
||||||
|
re[i] = new RegExp(src[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.parse = parse
|
||||||
|
function parse (version, options) {
|
||||||
|
if (!options || typeof options !== 'object') {
|
||||||
|
options = {
|
||||||
|
loose: !!options,
|
||||||
|
includePrerelease: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (version instanceof SemVer) {
|
||||||
|
return version
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof version !== 'string') {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
if (version.length > MAX_LENGTH) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
var r = options.loose ? re[t.LOOSE] : re[t.FULL]
|
||||||
|
if (!r.test(version)) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return new SemVer(version, options)
|
||||||
|
} catch (er) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.valid = valid
|
||||||
|
function valid (version, options) {
|
||||||
|
var v = parse(version, options)
|
||||||
|
return v ? v.version : null
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.clean = clean
|
||||||
|
function clean (version, options) {
|
||||||
|
var s = parse(version.trim().replace(/^[=v]+/, ''), options)
|
||||||
|
return s ? s.version : null
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.SemVer = SemVer
|
||||||
|
|
||||||
|
function SemVer (version, options) {
|
||||||
|
if (!options || typeof options !== 'object') {
|
||||||
|
options = {
|
||||||
|
loose: !!options,
|
||||||
|
includePrerelease: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (version instanceof SemVer) {
|
||||||
|
if (version.loose === options.loose) {
|
||||||
|
return version
|
||||||
|
} else {
|
||||||
|
version = version.version
|
||||||
|
}
|
||||||
|
} else if (typeof version !== 'string') {
|
||||||
|
throw new TypeError('Invalid Version: ' + version)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (version.length > MAX_LENGTH) {
|
||||||
|
throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(this instanceof SemVer)) {
|
||||||
|
return new SemVer(version, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('SemVer', version, options)
|
||||||
|
this.options = options
|
||||||
|
this.loose = !!options.loose
|
||||||
|
|
||||||
|
var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])
|
||||||
|
|
||||||
|
if (!m) {
|
||||||
|
throw new TypeError('Invalid Version: ' + version)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.raw = version
|
||||||
|
|
||||||
|
// these are actually numbers
|
||||||
|
this.major = +m[1]
|
||||||
|
this.minor = +m[2]
|
||||||
|
this.patch = +m[3]
|
||||||
|
|
||||||
|
if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
|
||||||
|
throw new TypeError('Invalid major version')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
|
||||||
|
throw new TypeError('Invalid minor version')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
|
||||||
|
throw new TypeError('Invalid patch version')
|
||||||
|
}
|
||||||
|
|
||||||
|
// numberify any prerelease numeric ids
|
||||||
|
if (!m[4]) {
|
||||||
|
this.prerelease = []
|
||||||
|
} else {
|
||||||
|
this.prerelease = m[4].split('.').map(function (id) {
|
||||||
|
if (/^[0-9]+$/.test(id)) {
|
||||||
|
var num = +id
|
||||||
|
if (num >= 0 && num < MAX_SAFE_INTEGER) {
|
||||||
|
return num
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.build = m[5] ? m[5].split('.') : []
|
||||||
|
this.format()
|
||||||
|
}
|
||||||
|
|
||||||
|
SemVer.prototype.format = function () {
|
||||||
|
this.version = this.major + '.' + this.minor + '.' + this.patch
|
||||||
|
if (this.prerelease.length) {
|
||||||
|
this.version += '-' + this.prerelease.join('.')
|
||||||
|
}
|
||||||
|
return this.version
|
||||||
|
}
|
||||||
|
|
||||||
|
SemVer.prototype.toString = function () {
|
||||||
|
return this.version
|
||||||
|
}
|
||||||
|
|
||||||
|
SemVer.prototype.compare = function (other) {
|
||||||
|
debug('SemVer.compare', this.version, this.options, other)
|
||||||
|
if (!(other instanceof SemVer)) {
|
||||||
|
other = new SemVer(other, this.options)
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.compareMain(other) || this.comparePre(other)
|
||||||
|
}
|
||||||
|
|
||||||
|
SemVer.prototype.compareMain = function (other) {
|
||||||
|
if (!(other instanceof SemVer)) {
|
||||||
|
other = new SemVer(other, this.options)
|
||||||
|
}
|
||||||
|
|
||||||
|
return compareIdentifiers(this.major, other.major) ||
|
||||||
|
compareIdentifiers(this.minor, other.minor) ||
|
||||||
|
compareIdentifiers(this.patch, other.patch)
|
||||||
|
}
|
||||||
|
|
||||||
|
SemVer.prototype.comparePre = function (other) {
|
||||||
|
if (!(other instanceof SemVer)) {
|
||||||
|
other = new SemVer(other, this.options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOT having a prerelease is > having one
|
||||||
|
if (this.prerelease.length && !other.prerelease.length) {
|
||||||
|
return -1
|
||||||
|
} else if (!this.prerelease.length && other.prerelease.length) {
|
||||||
|
return 1
|
||||||
|
} else if (!this.prerelease.length && !other.prerelease.length) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
var i = 0
|
||||||
|
do {
|
||||||
|
var a = this.prerelease[i]
|
||||||
|
var b = other.prerelease[i]
|
||||||
|
debug('prerelease compare', i, a, b)
|
||||||
|
if (a === undefined && b === undefined) {
|
||||||
|
return 0
|
||||||
|
} else if (b === undefined) {
|
||||||
|
return 1
|
||||||
|
} else if (a === undefined) {
|
||||||
|
return -1
|
||||||
|
} else if (a === b) {
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
return compareIdentifiers(a, b)
|
||||||
|
}
|
||||||
|
} while (++i)
|
||||||
|
}
|
||||||
|
|
||||||
|
SemVer.prototype.compareBuild = function (other) {
|
||||||
|
if (!(other instanceof SemVer)) {
|
||||||
|
other = new SemVer(other, this.options)
|
||||||
|
}
|
||||||
|
|
||||||
|
var i = 0
|
||||||
|
do {
|
||||||
|
var a = this.build[i]
|
||||||
|
var b = other.build[i]
|
||||||
|
debug('prerelease compare', i, a, b)
|
||||||
|
if (a === undefined && b === undefined) {
|
||||||
|
return 0
|
||||||
|
} else if (b === undefined) {
|
||||||
|
return 1
|
||||||
|
} else if (a === undefined) {
|
||||||
|
return -1
|
||||||
|
} else if (a === b) {
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
return compareIdentifiers(a, b)
|
||||||
|
}
|
||||||
|
} while (++i)
|
||||||
|
}
|
||||||
|
|
||||||
|
// preminor will bump the version up to the next minor release, and immediately
|
||||||
|
// down to pre-release. premajor and prepatch work the same way.
|
||||||
|
SemVer.prototype.inc = function (release, identifier) {
|
||||||
|
switch (release) {
|
||||||
|
case 'premajor':
|
||||||
|
this.prerelease.length = 0
|
||||||
|
this.patch = 0
|
||||||
|
this.minor = 0
|
||||||
|
this.major++
|
||||||
|
this.inc('pre', identifier)
|
||||||
|
break
|
||||||
|
case 'preminor':
|
||||||
|
this.prerelease.length = 0
|
||||||
|
this.patch = 0
|
||||||
|
this.minor++
|
||||||
|
this.inc('pre', identifier)
|
||||||
|
break
|
||||||
|
case 'prepatch':
|
||||||
|
// If this is already a prerelease, it will bump to the next version
|
||||||
|
// drop any prereleases that might already exist, since they are not
|
||||||
|
// relevant at this point.
|
||||||
|
this.prerelease.length = 0
|
||||||
|
this.inc('patch', identifier)
|
||||||
|
this.inc('pre', identifier)
|
||||||
|
break
|
||||||
|
// If the input is a non-prerelease version, this acts the same as
|
||||||
|
// prepatch.
|
||||||
|
case 'prerelease':
|
||||||
|
if (this.prerelease.length === 0) {
|
||||||
|
this.inc('patch', identifier)
|
||||||
|
}
|
||||||
|
this.inc('pre', identifier)
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'major':
|
||||||
|
// If this is a pre-major version, bump up to the same major version.
|
||||||
|
// Otherwise increment major.
|
||||||
|
// 1.0.0-5 bumps to 1.0.0
|
||||||
|
// 1.1.0 bumps to 2.0.0
|
||||||
|
if (this.minor !== 0 ||
|
||||||
|
this.patch !== 0 ||
|
||||||
|
this.prerelease.length === 0) {
|
||||||
|
this.major++
|
||||||
|
}
|
||||||
|
this.minor = 0
|
||||||
|
this.patch = 0
|
||||||
|
this.prerelease = []
|
||||||
|
break
|
||||||
|
case 'minor':
|
||||||
|
// If this is a pre-minor version, bump up to the same minor version.
|
||||||
|
// Otherwise increment minor.
|
||||||
|
// 1.2.0-5 bumps to 1.2.0
|
||||||
|
// 1.2.1 bumps to 1.3.0
|
||||||
|
if (this.patch !== 0 || this.prerelease.length === 0) {
|
||||||
|
this.minor++
|
||||||
|
}
|
||||||
|
this.patch = 0
|
||||||
|
this.prerelease = []
|
||||||
|
break
|
||||||
|
case 'patch':
|
||||||
|
// If this is not a pre-release version, it will increment the patch.
|
||||||
|
// If it is a pre-release it will bump up to the same patch version.
|
||||||
|
// 1.2.0-5 patches to 1.2.0
|
||||||
|
// 1.2.0 patches to 1.2.1
|
||||||
|
if (this.prerelease.length === 0) {
|
||||||
|
this.patch++
|
||||||
|
}
|
||||||
|
this.prerelease = []
|
||||||
|
break
|
||||||
|
// This probably shouldn't be used publicly.
|
||||||
|
// 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
|
||||||
|
case 'pre':
|
||||||
|
if (this.prerelease.length === 0) {
|
||||||
|
this.prerelease = [0]
|
||||||
|
} else {
|
||||||
|
var i = this.prerelease.length
|
||||||
|
while (--i >= 0) {
|
||||||
|
if (typeof this.prerelease[i] === 'number') {
|
||||||
|
this.prerelease[i]++
|
||||||
|
i = -2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i === -1) {
|
||||||
|
// didn't increment anything
|
||||||
|
this.prerelease.push(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (identifier) {
|
||||||
|
// 1.2.0-beta.1 bumps to 1.2.0-beta.2,
|
||||||
|
// 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
|
||||||
|
if (this.prerelease[0] === identifier) {
|
||||||
|
if (isNaN(this.prerelease[1])) {
|
||||||
|
this.prerelease = [identifier, 0]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.prerelease = [identifier, 0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new Error('invalid increment argument: ' + release)
|
||||||
|
}
|
||||||
|
this.format()
|
||||||
|
this.raw = this.version
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.inc = inc
|
||||||
|
function inc (version, release, loose, identifier) {
|
||||||
|
if (typeof (loose) === 'string') {
|
||||||
|
identifier = loose
|
||||||
|
loose = undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return new SemVer(version, loose).inc(release, identifier).version
|
||||||
|
} catch (er) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.diff = diff
|
||||||
|
function diff (version1, version2) {
|
||||||
|
if (eq(version1, version2)) {
|
||||||
|
return null
|
||||||
|
} else {
|
||||||
|
var v1 = parse(version1)
|
||||||
|
var v2 = parse(version2)
|
||||||
|
var prefix = ''
|
||||||
|
if (v1.prerelease.length || v2.prerelease.length) {
|
||||||
|
prefix = 'pre'
|
||||||
|
var defaultResult = 'prerelease'
|
||||||
|
}
|
||||||
|
for (var key in v1) {
|
||||||
|
if (key === 'major' || key === 'minor' || key === 'patch') {
|
||||||
|
if (v1[key] !== v2[key]) {
|
||||||
|
return prefix + key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return defaultResult // may be undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.compareIdentifiers = compareIdentifiers
|
||||||
|
|
||||||
|
var numeric = /^[0-9]+$/
|
||||||
|
function compareIdentifiers (a, b) {
|
||||||
|
var anum = numeric.test(a)
|
||||||
|
var bnum = numeric.test(b)
|
||||||
|
|
||||||
|
if (anum && bnum) {
|
||||||
|
a = +a
|
||||||
|
b = +b
|
||||||
|
}
|
||||||
|
|
||||||
|
return a === b ? 0
|
||||||
|
: (anum && !bnum) ? -1
|
||||||
|
: (bnum && !anum) ? 1
|
||||||
|
: a < b ? -1
|
||||||
|
: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.rcompareIdentifiers = rcompareIdentifiers
|
||||||
|
function rcompareIdentifiers (a, b) {
|
||||||
|
return compareIdentifiers(b, a)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.major = major
|
||||||
|
function major (a, loose) {
|
||||||
|
return new SemVer(a, loose).major
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.minor = minor
|
||||||
|
function minor (a, loose) {
|
||||||
|
return new SemVer(a, loose).minor
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.patch = patch
|
||||||
|
function patch (a, loose) {
|
||||||
|
return new SemVer(a, loose).patch
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.compare = compare
|
||||||
|
function compare (a, b, loose) {
|
||||||
|
return new SemVer(a, loose).compare(new SemVer(b, loose))
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.compareLoose = compareLoose
|
||||||
|
function compareLoose (a, b) {
|
||||||
|
return compare(a, b, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.compareBuild = compareBuild
|
||||||
|
function compareBuild (a, b, loose) {
|
||||||
|
var versionA = new SemVer(a, loose)
|
||||||
|
var versionB = new SemVer(b, loose)
|
||||||
|
return versionA.compare(versionB) || versionA.compareBuild(versionB)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.rcompare = rcompare
|
||||||
|
function rcompare (a, b, loose) {
|
||||||
|
return compare(b, a, loose)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.sort = sort
|
||||||
|
function sort (list, loose) {
|
||||||
|
return list.sort(function (a, b) {
|
||||||
|
return exports.compareBuild(a, b, loose)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.rsort = rsort
|
||||||
|
function rsort (list, loose) {
|
||||||
|
return list.sort(function (a, b) {
|
||||||
|
return exports.compareBuild(b, a, loose)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.gt = gt
|
||||||
|
function gt (a, b, loose) {
|
||||||
|
return compare(a, b, loose) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.lt = lt
|
||||||
|
function lt (a, b, loose) {
|
||||||
|
return compare(a, b, loose) < 0
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.eq = eq
|
||||||
|
function eq (a, b, loose) {
|
||||||
|
return compare(a, b, loose) === 0
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.neq = neq
|
||||||
|
function neq (a, b, loose) {
|
||||||
|
return compare(a, b, loose) !== 0
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.gte = gte
|
||||||
|
function gte (a, b, loose) {
|
||||||
|
return compare(a, b, loose) >= 0
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.lte = lte
|
||||||
|
function lte (a, b, loose) {
|
||||||
|
return compare(a, b, loose) <= 0
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.cmp = cmp
|
||||||
|
function cmp (a, op, b, loose) {
|
||||||
|
switch (op) {
|
||||||
|
case '===':
|
||||||
|
if (typeof a === 'object')
|
||||||
|
a = a.version
|
||||||
|
if (typeof b === 'object')
|
||||||
|
b = b.version
|
||||||
|
return a === b
|
||||||
|
|
||||||
|
case '!==':
|
||||||
|
if (typeof a === 'object')
|
||||||
|
a = a.version
|
||||||
|
if (typeof b === 'object')
|
||||||
|
b = b.version
|
||||||
|
return a !== b
|
||||||
|
|
||||||
|
case '':
|
||||||
|
case '=':
|
||||||
|
case '==':
|
||||||
|
return eq(a, b, loose)
|
||||||
|
|
||||||
|
case '!=':
|
||||||
|
return neq(a, b, loose)
|
||||||
|
|
||||||
|
case '>':
|
||||||
|
return gt(a, b, loose)
|
||||||
|
|
||||||
|
case '>=':
|
||||||
|
return gte(a, b, loose)
|
||||||
|
|
||||||
|
case '<':
|
||||||
|
return lt(a, b, loose)
|
||||||
|
|
||||||
|
case '<=':
|
||||||
|
return lte(a, b, loose)
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new TypeError('Invalid operator: ' + op)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.Comparator = Comparator
|
||||||
|
function Comparator (comp, options) {
|
||||||
|
if (!options || typeof options !== 'object') {
|
||||||
|
options = {
|
||||||
|
loose: !!options,
|
||||||
|
includePrerelease: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (comp instanceof Comparator) {
|
||||||
|
if (comp.loose === !!options.loose) {
|
||||||
|
return comp
|
||||||
|
} else {
|
||||||
|
comp = comp.value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(this instanceof Comparator)) {
|
||||||
|
return new Comparator(comp, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('comparator', comp, options)
|
||||||
|
this.options = options
|
||||||
|
this.loose = !!options.loose
|
||||||
|
this.parse(comp)
|
||||||
|
|
||||||
|
if (this.semver === ANY) {
|
||||||
|
this.value = ''
|
||||||
|
} else {
|
||||||
|
this.value = this.operator + this.semver.version
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('comp', this)
|
||||||
|
}
|
||||||
|
|
||||||
|
var ANY = {}
|
||||||
|
Comparator.prototype.parse = function (comp) {
|
||||||
|
var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
|
||||||
|
var m = comp.match(r)
|
||||||
|
|
||||||
|
if (!m) {
|
||||||
|
throw new TypeError('Invalid comparator: ' + comp)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.operator = m[1] !== undefined ? m[1] : ''
|
||||||
|
if (this.operator === '=') {
|
||||||
|
this.operator = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
// if it literally is just '>' or '' then allow anything.
|
||||||
|
if (!m[2]) {
|
||||||
|
this.semver = ANY
|
||||||
|
} else {
|
||||||
|
this.semver = new SemVer(m[2], this.options.loose)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Comparator.prototype.toString = function () {
|
||||||
|
return this.value
|
||||||
|
}
|
||||||
|
|
||||||
|
Comparator.prototype.test = function (version) {
|
||||||
|
debug('Comparator.test', version, this.options.loose)
|
||||||
|
|
||||||
|
if (this.semver === ANY || version === ANY) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof version === 'string') {
|
||||||
|
try {
|
||||||
|
version = new SemVer(version, this.options)
|
||||||
|
} catch (er) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cmp(version, this.operator, this.semver, this.options)
|
||||||
|
}
|
||||||
|
|
||||||
|
Comparator.prototype.intersects = function (comp, options) {
|
||||||
|
if (!(comp instanceof Comparator)) {
|
||||||
|
throw new TypeError('a Comparator is required')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!options || typeof options !== 'object') {
|
||||||
|
options = {
|
||||||
|
loose: !!options,
|
||||||
|
includePrerelease: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var rangeTmp
|
||||||
|
|
||||||
|
if (this.operator === '') {
|
||||||
|
if (this.value === '') {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
rangeTmp = new Range(comp.value, options)
|
||||||
|
return satisfies(this.value, rangeTmp, options)
|
||||||
|
} else if (comp.operator === '') {
|
||||||
|
if (comp.value === '') {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
rangeTmp = new Range(this.value, options)
|
||||||
|
return satisfies(comp.semver, rangeTmp, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
var sameDirectionIncreasing =
|
||||||
|
(this.operator === '>=' || this.operator === '>') &&
|
||||||
|
(comp.operator === '>=' || comp.operator === '>')
|
||||||
|
var sameDirectionDecreasing =
|
||||||
|
(this.operator === '<=' || this.operator === '<') &&
|
||||||
|
(comp.operator === '<=' || comp.operator === '<')
|
||||||
|
var sameSemVer = this.semver.version === comp.semver.version
|
||||||
|
var differentDirectionsInclusive =
|
||||||
|
(this.operator === '>=' || this.operator === '<=') &&
|
||||||
|
(comp.operator === '>=' || comp.operator === '<=')
|
||||||
|
var oppositeDirectionsLessThan =
|
||||||
|
cmp(this.semver, '<', comp.semver, options) &&
|
||||||
|
((this.operator === '>=' || this.operator === '>') &&
|
||||||
|
(comp.operator === '<=' || comp.operator === '<'))
|
||||||
|
var oppositeDirectionsGreaterThan =
|
||||||
|
cmp(this.semver, '>', comp.semver, options) &&
|
||||||
|
((this.operator === '<=' || this.operator === '<') &&
|
||||||
|
(comp.operator === '>=' || comp.operator === '>'))
|
||||||
|
|
||||||
|
return sameDirectionIncreasing || sameDirectionDecreasing ||
|
||||||
|
(sameSemVer && differentDirectionsInclusive) ||
|
||||||
|
oppositeDirectionsLessThan || oppositeDirectionsGreaterThan
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.Range = Range
|
||||||
|
function Range (range, options) {
|
||||||
|
if (!options || typeof options !== 'object') {
|
||||||
|
options = {
|
||||||
|
loose: !!options,
|
||||||
|
includePrerelease: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (range instanceof Range) {
|
||||||
|
if (range.loose === !!options.loose &&
|
||||||
|
range.includePrerelease === !!options.includePrerelease) {
|
||||||
|
return range
|
||||||
|
} else {
|
||||||
|
return new Range(range.raw, options)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (range instanceof Comparator) {
|
||||||
|
return new Range(range.value, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(this instanceof Range)) {
|
||||||
|
return new Range(range, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.options = options
|
||||||
|
this.loose = !!options.loose
|
||||||
|
this.includePrerelease = !!options.includePrerelease
|
||||||
|
|
||||||
|
// First, split based on boolean or ||
|
||||||
|
this.raw = range
|
||||||
|
this.set = range.split(/\s*\|\|\s*/).map(function (range) {
|
||||||
|
return this.parseRange(range.trim())
|
||||||
|
}, this).filter(function (c) {
|
||||||
|
// throw out any that are not relevant for whatever reason
|
||||||
|
return c.length
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!this.set.length) {
|
||||||
|
throw new TypeError('Invalid SemVer Range: ' + range)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.format()
|
||||||
|
}
|
||||||
|
|
||||||
|
Range.prototype.format = function () {
|
||||||
|
this.range = this.set.map(function (comps) {
|
||||||
|
return comps.join(' ').trim()
|
||||||
|
}).join('||').trim()
|
||||||
|
return this.range
|
||||||
|
}
|
||||||
|
|
||||||
|
Range.prototype.toString = function () {
|
||||||
|
return this.range
|
||||||
|
}
|
||||||
|
|
||||||
|
Range.prototype.parseRange = function (range) {
|
||||||
|
var loose = this.options.loose
|
||||||
|
range = range.trim()
|
||||||
|
// `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
|
||||||
|
var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]
|
||||||
|
range = range.replace(hr, hyphenReplace)
|
||||||
|
debug('hyphen replace', range)
|
||||||
|
// `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
|
||||||
|
range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)
|
||||||
|
debug('comparator trim', range, re[t.COMPARATORTRIM])
|
||||||
|
|
||||||
|
// `~ 1.2.3` => `~1.2.3`
|
||||||
|
range = range.replace(re[t.TILDETRIM], tildeTrimReplace)
|
||||||
|
|
||||||
|
// `^ 1.2.3` => `^1.2.3`
|
||||||
|
range = range.replace(re[t.CARETTRIM], caretTrimReplace)
|
||||||
|
|
||||||
|
// normalize spaces
|
||||||
|
range = range.split(/\s+/).join(' ')
|
||||||
|
|
||||||
|
// At this point, the range is completely trimmed and
|
||||||
|
// ready to be split into comparators.
|
||||||
|
|
||||||
|
var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
|
||||||
|
var set = range.split(' ').map(function (comp) {
|
||||||
|
return parseComparator(comp, this.options)
|
||||||
|
}, this).join(' ').split(/\s+/)
|
||||||
|
if (this.options.loose) {
|
||||||
|
// in loose mode, throw out any that are not valid comparators
|
||||||
|
set = set.filter(function (comp) {
|
||||||
|
return !!comp.match(compRe)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
set = set.map(function (comp) {
|
||||||
|
return new Comparator(comp, this.options)
|
||||||
|
}, this)
|
||||||
|
|
||||||
|
return set
|
||||||
|
}
|
||||||
|
|
||||||
|
Range.prototype.intersects = function (range, options) {
|
||||||
|
if (!(range instanceof Range)) {
|
||||||
|
throw new TypeError('a Range is required')
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.set.some(function (thisComparators) {
|
||||||
|
return (
|
||||||
|
isSatisfiable(thisComparators, options) &&
|
||||||
|
range.set.some(function (rangeComparators) {
|
||||||
|
return (
|
||||||
|
isSatisfiable(rangeComparators, options) &&
|
||||||
|
thisComparators.every(function (thisComparator) {
|
||||||
|
return rangeComparators.every(function (rangeComparator) {
|
||||||
|
return thisComparator.intersects(rangeComparator, options)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// take a set of comparators and determine whether there
|
||||||
|
// exists a version which can satisfy it
|
||||||
|
function isSatisfiable (comparators, options) {
|
||||||
|
var result = true
|
||||||
|
var remainingComparators = comparators.slice()
|
||||||
|
var testComparator = remainingComparators.pop()
|
||||||
|
|
||||||
|
while (result && remainingComparators.length) {
|
||||||
|
result = remainingComparators.every(function (otherComparator) {
|
||||||
|
return testComparator.intersects(otherComparator, options)
|
||||||
|
})
|
||||||
|
|
||||||
|
testComparator = remainingComparators.pop()
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mostly just for testing and legacy API reasons
|
||||||
|
exports.toComparators = toComparators
|
||||||
|
function toComparators (range, options) {
|
||||||
|
return new Range(range, options).set.map(function (comp) {
|
||||||
|
return comp.map(function (c) {
|
||||||
|
return c.value
|
||||||
|
}).join(' ').trim().split(' ')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// comprised of xranges, tildes, stars, and gtlt's at this point.
|
||||||
|
// already replaced the hyphen ranges
|
||||||
|
// turn into a set of JUST comparators.
|
||||||
|
function parseComparator (comp, options) {
|
||||||
|
debug('comp', comp, options)
|
||||||
|
comp = replaceCarets(comp, options)
|
||||||
|
debug('caret', comp)
|
||||||
|
comp = replaceTildes(comp, options)
|
||||||
|
debug('tildes', comp)
|
||||||
|
comp = replaceXRanges(comp, options)
|
||||||
|
debug('xrange', comp)
|
||||||
|
comp = replaceStars(comp, options)
|
||||||
|
debug('stars', comp)
|
||||||
|
return comp
|
||||||
|
}
|
||||||
|
|
||||||
|
function isX (id) {
|
||||||
|
return !id || id.toLowerCase() === 'x' || id === '*'
|
||||||
|
}
|
||||||
|
|
||||||
|
// ~, ~> --> * (any, kinda silly)
|
||||||
|
// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
|
||||||
|
// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
|
||||||
|
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
|
||||||
|
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
|
||||||
|
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
|
||||||
|
function replaceTildes (comp, options) {
|
||||||
|
return comp.trim().split(/\s+/).map(function (comp) {
|
||||||
|
return replaceTilde(comp, options)
|
||||||
|
}).join(' ')
|
||||||
|
}
|
||||||
|
|
||||||
|
function replaceTilde (comp, options) {
|
||||||
|
var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]
|
||||||
|
return comp.replace(r, function (_, M, m, p, pr) {
|
||||||
|
debug('tilde', comp, _, M, m, p, pr)
|
||||||
|
var ret
|
||||||
|
|
||||||
|
if (isX(M)) {
|
||||||
|
ret = ''
|
||||||
|
} else if (isX(m)) {
|
||||||
|
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
|
||||||
|
} else if (isX(p)) {
|
||||||
|
// ~1.2 == >=1.2.0 <1.3.0
|
||||||
|
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
|
||||||
|
} else if (pr) {
|
||||||
|
debug('replaceTilde pr', pr)
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
||||||
|
' <' + M + '.' + (+m + 1) + '.0'
|
||||||
|
} else {
|
||||||
|
// ~1.2.3 == >=1.2.3 <1.3.0
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p +
|
||||||
|
' <' + M + '.' + (+m + 1) + '.0'
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('tilde return', ret)
|
||||||
|
return ret
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ^ --> * (any, kinda silly)
|
||||||
|
// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
|
||||||
|
// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
|
||||||
|
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
|
||||||
|
// ^1.2.3 --> >=1.2.3 <2.0.0
|
||||||
|
// ^1.2.0 --> >=1.2.0 <2.0.0
|
||||||
|
function replaceCarets (comp, options) {
|
||||||
|
return comp.trim().split(/\s+/).map(function (comp) {
|
||||||
|
return replaceCaret(comp, options)
|
||||||
|
}).join(' ')
|
||||||
|
}
|
||||||
|
|
||||||
|
function replaceCaret (comp, options) {
|
||||||
|
debug('caret', comp, options)
|
||||||
|
var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]
|
||||||
|
return comp.replace(r, function (_, M, m, p, pr) {
|
||||||
|
debug('caret', comp, _, M, m, p, pr)
|
||||||
|
var ret
|
||||||
|
|
||||||
|
if (isX(M)) {
|
||||||
|
ret = ''
|
||||||
|
} else if (isX(m)) {
|
||||||
|
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
|
||||||
|
} else if (isX(p)) {
|
||||||
|
if (M === '0') {
|
||||||
|
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
|
||||||
|
} else {
|
||||||
|
ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'
|
||||||
|
}
|
||||||
|
} else if (pr) {
|
||||||
|
debug('replaceCaret pr', pr)
|
||||||
|
if (M === '0') {
|
||||||
|
if (m === '0') {
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
||||||
|
' <' + M + '.' + m + '.' + (+p + 1)
|
||||||
|
} else {
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
||||||
|
' <' + M + '.' + (+m + 1) + '.0'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
||||||
|
' <' + (+M + 1) + '.0.0'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
debug('no pr')
|
||||||
|
if (M === '0') {
|
||||||
|
if (m === '0') {
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p +
|
||||||
|
' <' + M + '.' + m + '.' + (+p + 1)
|
||||||
|
} else {
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p +
|
||||||
|
' <' + M + '.' + (+m + 1) + '.0'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret = '>=' + M + '.' + m + '.' + p +
|
||||||
|
' <' + (+M + 1) + '.0.0'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('caret return', ret)
|
||||||
|
return ret
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function replaceXRanges (comp, options) {
|
||||||
|
debug('replaceXRanges', comp, options)
|
||||||
|
return comp.split(/\s+/).map(function (comp) {
|
||||||
|
return replaceXRange(comp, options)
|
||||||
|
}).join(' ')
|
||||||
|
}
|
||||||
|
|
||||||
|
function replaceXRange (comp, options) {
|
||||||
|
comp = comp.trim()
|
||||||
|
var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]
|
||||||
|
return comp.replace(r, function (ret, gtlt, M, m, p, pr) {
|
||||||
|
debug('xRange', comp, ret, gtlt, M, m, p, pr)
|
||||||
|
var xM = isX(M)
|
||||||
|
var xm = xM || isX(m)
|
||||||
|
var xp = xm || isX(p)
|
||||||
|
var anyX = xp
|
||||||
|
|
||||||
|
if (gtlt === '=' && anyX) {
|
||||||
|
gtlt = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we're including prereleases in the match, then we need
|
||||||
|
// to fix this to -0, the lowest possible prerelease value
|
||||||
|
pr = options.includePrerelease ? '-0' : ''
|
||||||
|
|
||||||
|
if (xM) {
|
||||||
|
if (gtlt === '>' || gtlt === '<') {
|
||||||
|
// nothing is allowed
|
||||||
|
ret = '<0.0.0-0'
|
||||||
|
} else {
|
||||||
|
// nothing is forbidden
|
||||||
|
ret = '*'
|
||||||
|
}
|
||||||
|
} else if (gtlt && anyX) {
|
||||||
|
// we know patch is an x, because we have any x at all.
|
||||||
|
// replace X with 0
|
||||||
|
if (xm) {
|
||||||
|
m = 0
|
||||||
|
}
|
||||||
|
p = 0
|
||||||
|
|
||||||
|
if (gtlt === '>') {
|
||||||
|
// >1 => >=2.0.0
|
||||||
|
// >1.2 => >=1.3.0
|
||||||
|
// >1.2.3 => >= 1.2.4
|
||||||
|
gtlt = '>='
|
||||||
|
if (xm) {
|
||||||
|
M = +M + 1
|
||||||
|
m = 0
|
||||||
|
p = 0
|
||||||
|
} else {
|
||||||
|
m = +m + 1
|
||||||
|
p = 0
|
||||||
|
}
|
||||||
|
} else if (gtlt === '<=') {
|
||||||
|
// <=0.7.x is actually <0.8.0, since any 0.7.x should
|
||||||
|
// pass. Similarly, <=7.x is actually <8.0.0, etc.
|
||||||
|
gtlt = '<'
|
||||||
|
if (xm) {
|
||||||
|
M = +M + 1
|
||||||
|
} else {
|
||||||
|
m = +m + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = gtlt + M + '.' + m + '.' + p + pr
|
||||||
|
} else if (xm) {
|
||||||
|
ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr
|
||||||
|
} else if (xp) {
|
||||||
|
ret = '>=' + M + '.' + m + '.0' + pr +
|
||||||
|
' <' + M + '.' + (+m + 1) + '.0' + pr
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('xRange return', ret)
|
||||||
|
|
||||||
|
return ret
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Because * is AND-ed with everything else in the comparator,
|
||||||
|
// and '' means "any version", just remove the *s entirely.
|
||||||
|
function replaceStars (comp, options) {
|
||||||
|
debug('replaceStars', comp, options)
|
||||||
|
// Looseness is ignored here. star is always as loose as it gets!
|
||||||
|
return comp.trim().replace(re[t.STAR], '')
|
||||||
|
}
|
||||||
|
|
||||||
|
// This function is passed to string.replace(re[t.HYPHENRANGE])
|
||||||
|
// M, m, patch, prerelease, build
|
||||||
|
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
|
||||||
|
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
|
||||||
|
// 1.2 - 3.4 => >=1.2.0 <3.5.0
|
||||||
|
function hyphenReplace ($0,
|
||||||
|
from, fM, fm, fp, fpr, fb,
|
||||||
|
to, tM, tm, tp, tpr, tb) {
|
||||||
|
if (isX(fM)) {
|
||||||
|
from = ''
|
||||||
|
} else if (isX(fm)) {
|
||||||
|
from = '>=' + fM + '.0.0'
|
||||||
|
} else if (isX(fp)) {
|
||||||
|
from = '>=' + fM + '.' + fm + '.0'
|
||||||
|
} else {
|
||||||
|
from = '>=' + from
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isX(tM)) {
|
||||||
|
to = ''
|
||||||
|
} else if (isX(tm)) {
|
||||||
|
to = '<' + (+tM + 1) + '.0.0'
|
||||||
|
} else if (isX(tp)) {
|
||||||
|
to = '<' + tM + '.' + (+tm + 1) + '.0'
|
||||||
|
} else if (tpr) {
|
||||||
|
to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr
|
||||||
|
} else {
|
||||||
|
to = '<=' + to
|
||||||
|
}
|
||||||
|
|
||||||
|
return (from + ' ' + to).trim()
|
||||||
|
}
|
||||||
|
|
||||||
|
// if ANY of the sets match ALL of its comparators, then pass
|
||||||
|
Range.prototype.test = function (version) {
|
||||||
|
if (!version) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof version === 'string') {
|
||||||
|
try {
|
||||||
|
version = new SemVer(version, this.options)
|
||||||
|
} catch (er) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < this.set.length; i++) {
|
||||||
|
if (testSet(this.set[i], version, this.options)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
function testSet (set, version, options) {
|
||||||
|
for (var i = 0; i < set.length; i++) {
|
||||||
|
if (!set[i].test(version)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (version.prerelease.length && !options.includePrerelease) {
|
||||||
|
// Find the set of versions that are allowed to have prereleases
|
||||||
|
// For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
|
||||||
|
// That should allow `1.2.3-pr.2` to pass.
|
||||||
|
// However, `1.2.4-alpha.notready` should NOT be allowed,
|
||||||
|
// even though it's within the range set by the comparators.
|
||||||
|
for (i = 0; i < set.length; i++) {
|
||||||
|
debug(set[i].semver)
|
||||||
|
if (set[i].semver === ANY) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if (set[i].semver.prerelease.length > 0) {
|
||||||
|
var allowed = set[i].semver
|
||||||
|
if (allowed.major === version.major &&
|
||||||
|
allowed.minor === version.minor &&
|
||||||
|
allowed.patch === version.patch) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Version has a -pre, but it's not one of the ones we like.
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.satisfies = satisfies
|
||||||
|
function satisfies (version, range, options) {
|
||||||
|
try {
|
||||||
|
range = new Range(range, options)
|
||||||
|
} catch (er) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return range.test(version)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.maxSatisfying = maxSatisfying
|
||||||
|
function maxSatisfying (versions, range, options) {
|
||||||
|
var max = null
|
||||||
|
var maxSV = null
|
||||||
|
try {
|
||||||
|
var rangeObj = new Range(range, options)
|
||||||
|
} catch (er) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
versions.forEach(function (v) {
|
||||||
|
if (rangeObj.test(v)) {
|
||||||
|
// satisfies(v, range, options)
|
||||||
|
if (!max || maxSV.compare(v) === -1) {
|
||||||
|
// compare(max, v, true)
|
||||||
|
max = v
|
||||||
|
maxSV = new SemVer(max, options)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return max
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.minSatisfying = minSatisfying
|
||||||
|
function minSatisfying (versions, range, options) {
|
||||||
|
var min = null
|
||||||
|
var minSV = null
|
||||||
|
try {
|
||||||
|
var rangeObj = new Range(range, options)
|
||||||
|
} catch (er) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
versions.forEach(function (v) {
|
||||||
|
if (rangeObj.test(v)) {
|
||||||
|
// satisfies(v, range, options)
|
||||||
|
if (!min || minSV.compare(v) === 1) {
|
||||||
|
// compare(min, v, true)
|
||||||
|
min = v
|
||||||
|
minSV = new SemVer(min, options)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return min
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.minVersion = minVersion
|
||||||
|
function minVersion (range, loose) {
|
||||||
|
range = new Range(range, loose)
|
||||||
|
|
||||||
|
var minver = new SemVer('0.0.0')
|
||||||
|
if (range.test(minver)) {
|
||||||
|
return minver
|
||||||
|
}
|
||||||
|
|
||||||
|
minver = new SemVer('0.0.0-0')
|
||||||
|
if (range.test(minver)) {
|
||||||
|
return minver
|
||||||
|
}
|
||||||
|
|
||||||
|
minver = null
|
||||||
|
for (var i = 0; i < range.set.length; ++i) {
|
||||||
|
var comparators = range.set[i]
|
||||||
|
|
||||||
|
comparators.forEach(function (comparator) {
|
||||||
|
// Clone to avoid manipulating the comparator's semver object.
|
||||||
|
var compver = new SemVer(comparator.semver.version)
|
||||||
|
switch (comparator.operator) {
|
||||||
|
case '>':
|
||||||
|
if (compver.prerelease.length === 0) {
|
||||||
|
compver.patch++
|
||||||
|
} else {
|
||||||
|
compver.prerelease.push(0)
|
||||||
|
}
|
||||||
|
compver.raw = compver.format()
|
||||||
|
/* fallthrough */
|
||||||
|
case '':
|
||||||
|
case '>=':
|
||||||
|
if (!minver || gt(minver, compver)) {
|
||||||
|
minver = compver
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case '<':
|
||||||
|
case '<=':
|
||||||
|
/* Ignore maximum versions */
|
||||||
|
break
|
||||||
|
/* istanbul ignore next */
|
||||||
|
default:
|
||||||
|
throw new Error('Unexpected operation: ' + comparator.operator)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (minver && range.test(minver)) {
|
||||||
|
return minver
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.validRange = validRange
|
||||||
|
function validRange (range, options) {
|
||||||
|
try {
|
||||||
|
// Return '*' instead of '' so that truthiness works.
|
||||||
|
// This will throw if it's invalid anyway
|
||||||
|
return new Range(range, options).range || '*'
|
||||||
|
} catch (er) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine if version is less than all the versions possible in the range
|
||||||
|
exports.ltr = ltr
|
||||||
|
function ltr (version, range, options) {
|
||||||
|
return outside(version, range, '<', options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine if version is greater than all the versions possible in the range.
|
||||||
|
exports.gtr = gtr
|
||||||
|
function gtr (version, range, options) {
|
||||||
|
return outside(version, range, '>', options)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.outside = outside
|
||||||
|
function outside (version, range, hilo, options) {
|
||||||
|
version = new SemVer(version, options)
|
||||||
|
range = new Range(range, options)
|
||||||
|
|
||||||
|
var gtfn, ltefn, ltfn, comp, ecomp
|
||||||
|
switch (hilo) {
|
||||||
|
case '>':
|
||||||
|
gtfn = gt
|
||||||
|
ltefn = lte
|
||||||
|
ltfn = lt
|
||||||
|
comp = '>'
|
||||||
|
ecomp = '>='
|
||||||
|
break
|
||||||
|
case '<':
|
||||||
|
gtfn = lt
|
||||||
|
ltefn = gte
|
||||||
|
ltfn = gt
|
||||||
|
comp = '<'
|
||||||
|
ecomp = '<='
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
throw new TypeError('Must provide a hilo val of "<" or ">"')
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it satisifes the range it is not outside
|
||||||
|
if (satisfies(version, range, options)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// From now on, variable terms are as if we're in "gtr" mode.
|
||||||
|
// but note that everything is flipped for the "ltr" function.
|
||||||
|
|
||||||
|
for (var i = 0; i < range.set.length; ++i) {
|
||||||
|
var comparators = range.set[i]
|
||||||
|
|
||||||
|
var high = null
|
||||||
|
var low = null
|
||||||
|
|
||||||
|
comparators.forEach(function (comparator) {
|
||||||
|
if (comparator.semver === ANY) {
|
||||||
|
comparator = new Comparator('>=0.0.0')
|
||||||
|
}
|
||||||
|
high = high || comparator
|
||||||
|
low = low || comparator
|
||||||
|
if (gtfn(comparator.semver, high.semver, options)) {
|
||||||
|
high = comparator
|
||||||
|
} else if (ltfn(comparator.semver, low.semver, options)) {
|
||||||
|
low = comparator
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// If the edge version comparator has a operator then our version
|
||||||
|
// isn't outside it
|
||||||
|
if (high.operator === comp || high.operator === ecomp) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the lowest version comparator has an operator and our version
|
||||||
|
// is less than it then it isn't higher than the range
|
||||||
|
if ((!low.operator || low.operator === comp) &&
|
||||||
|
ltefn(version, low.semver)) {
|
||||||
|
return false
|
||||||
|
} else if (low.operator === ecomp && ltfn(version, low.semver)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.prerelease = prerelease
|
||||||
|
function prerelease (version, options) {
|
||||||
|
var parsed = parse(version, options)
|
||||||
|
return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.intersects = intersects
|
||||||
|
function intersects (r1, r2, options) {
|
||||||
|
r1 = new Range(r1, options)
|
||||||
|
r2 = new Range(r2, options)
|
||||||
|
return r1.intersects(r2)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.coerce = coerce
|
||||||
|
function coerce (version, options) {
|
||||||
|
if (version instanceof SemVer) {
|
||||||
|
return version
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof version === 'number') {
|
||||||
|
version = String(version)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof version !== 'string') {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
options = options || {}
|
||||||
|
|
||||||
|
var match = null
|
||||||
|
if (!options.rtl) {
|
||||||
|
match = version.match(re[t.COERCE])
|
||||||
|
} else {
|
||||||
|
// Find the right-most coercible string that does not share
|
||||||
|
// a terminus with a more left-ward coercible string.
|
||||||
|
// Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
|
||||||
|
//
|
||||||
|
// Walk through the string checking with a /g regexp
|
||||||
|
// Manually set the index so as to pick up overlapping matches.
|
||||||
|
// Stop when we get a match that ends at the string end, since no
|
||||||
|
// coercible string can be more right-ward without the same terminus.
|
||||||
|
var next
|
||||||
|
while ((next = re[t.COERCERTL].exec(version)) &&
|
||||||
|
(!match || match.index + match[0].length !== version.length)
|
||||||
|
) {
|
||||||
|
if (!match ||
|
||||||
|
next.index + next[0].length !== match.index + match[0].length) {
|
||||||
|
match = next
|
||||||
|
}
|
||||||
|
re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
|
||||||
|
}
|
||||||
|
// leave it in a clean state
|
||||||
|
re[t.COERCERTL].lastIndex = -1
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match === null) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
return parse(match[2] +
|
||||||
|
'.' + (match[3] || '0') +
|
||||||
|
'.' + (match[4] || '0'), options)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 281:
|
/***/ 281:
|
||||||
@@ -3410,17 +5056,24 @@ module.exports = require("crypto");
|
|||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const os = __webpack_require__(87);
|
const os = __importStar(__webpack_require__(87));
|
||||||
/**
|
/**
|
||||||
* Commands
|
* Commands
|
||||||
*
|
*
|
||||||
* Command Format:
|
* Command Format:
|
||||||
* ##[name key=value;key=value]message
|
* ::name key=value,key=value::message
|
||||||
*
|
*
|
||||||
* Examples:
|
* Examples:
|
||||||
* ##[warning]This is the user warning message
|
* ::warning::This is the message
|
||||||
* ##[set-secret name=mypassword]definitelyNotAPassword!
|
* ::set-env name=MY_VAR::some value
|
||||||
*/
|
*/
|
||||||
function issueCommand(command, properties, message) {
|
function issueCommand(command, properties, message) {
|
||||||
const cmd = new Command(command, properties, message);
|
const cmd = new Command(command, properties, message);
|
||||||
@@ -3445,34 +5098,53 @@ class Command {
|
|||||||
let cmdStr = CMD_STRING + this.command;
|
let cmdStr = CMD_STRING + this.command;
|
||||||
if (this.properties && Object.keys(this.properties).length > 0) {
|
if (this.properties && Object.keys(this.properties).length > 0) {
|
||||||
cmdStr += ' ';
|
cmdStr += ' ';
|
||||||
|
let first = true;
|
||||||
for (const key in this.properties) {
|
for (const key in this.properties) {
|
||||||
if (this.properties.hasOwnProperty(key)) {
|
if (this.properties.hasOwnProperty(key)) {
|
||||||
const val = this.properties[key];
|
const val = this.properties[key];
|
||||||
if (val) {
|
if (val) {
|
||||||
// safely append the val - avoid blowing up when attempting to
|
if (first) {
|
||||||
// call .replace() if message is not a string for some reason
|
first = false;
|
||||||
cmdStr += `${key}=${escape(`${val || ''}`)},`;
|
}
|
||||||
|
else {
|
||||||
|
cmdStr += ',';
|
||||||
|
}
|
||||||
|
cmdStr += `${key}=${escapeProperty(val)}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cmdStr += CMD_STRING;
|
cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
|
||||||
// safely append the message - avoid blowing up when attempting to
|
|
||||||
// call .replace() if message is not a string for some reason
|
|
||||||
const message = `${this.message || ''}`;
|
|
||||||
cmdStr += escapeData(message);
|
|
||||||
return cmdStr;
|
return cmdStr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function escapeData(s) {
|
/**
|
||||||
return s.replace(/\r/g, '%0D').replace(/\n/g, '%0A');
|
* Sanitizes an input into a string so it can be passed into issueCommand safely
|
||||||
|
* @param input input to sanitize into a string
|
||||||
|
*/
|
||||||
|
function toCommandValue(input) {
|
||||||
|
if (input === null || input === undefined) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
else if (typeof input === 'string' || input instanceof String) {
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
return JSON.stringify(input);
|
||||||
}
|
}
|
||||||
function escape(s) {
|
exports.toCommandValue = toCommandValue;
|
||||||
return s
|
function escapeData(s) {
|
||||||
|
return toCommandValue(s)
|
||||||
|
.replace(/%/g, '%25')
|
||||||
|
.replace(/\r/g, '%0D')
|
||||||
|
.replace(/\n/g, '%0A');
|
||||||
|
}
|
||||||
|
function escapeProperty(s) {
|
||||||
|
return toCommandValue(s)
|
||||||
|
.replace(/%/g, '%25')
|
||||||
.replace(/\r/g, '%0D')
|
.replace(/\r/g, '%0D')
|
||||||
.replace(/\n/g, '%0A')
|
.replace(/\n/g, '%0A')
|
||||||
.replace(/]/g, '%5D')
|
.replace(/:/g, '%3A')
|
||||||
.replace(/;/g, '%3B');
|
.replace(/,/g, '%2C');
|
||||||
}
|
}
|
||||||
//# sourceMappingURL=command.js.map
|
//# sourceMappingURL=command.js.map
|
||||||
|
|
||||||
@@ -3506,26 +5178,30 @@ const fs_1 = __webpack_require__(747);
|
|||||||
const path = __importStar(__webpack_require__(622));
|
const path = __importStar(__webpack_require__(622));
|
||||||
const utils = __importStar(__webpack_require__(15));
|
const utils = __importStar(__webpack_require__(15));
|
||||||
const constants_1 = __webpack_require__(931);
|
const constants_1 = __webpack_require__(931);
|
||||||
function getTarPath(args) {
|
function getTarPath(args, compressionMethod) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
// Explicitly use BSD Tar on Windows
|
|
||||||
const IS_WINDOWS = process.platform === 'win32';
|
const IS_WINDOWS = process.platform === 'win32';
|
||||||
if (IS_WINDOWS) {
|
if (IS_WINDOWS) {
|
||||||
const systemTar = `${process.env['windir']}\\System32\\tar.exe`;
|
const systemTar = `${process.env['windir']}\\System32\\tar.exe`;
|
||||||
if (fs_1.existsSync(systemTar)) {
|
if (compressionMethod !== constants_1.CompressionMethod.Gzip) {
|
||||||
|
// We only use zstandard compression on windows when gnu tar is installed due to
|
||||||
|
// a bug with compressing large files with bsdtar + zstd
|
||||||
|
args.push('--force-local');
|
||||||
|
}
|
||||||
|
else if (fs_1.existsSync(systemTar)) {
|
||||||
return systemTar;
|
return systemTar;
|
||||||
}
|
}
|
||||||
else if (yield utils.useGnuTar()) {
|
else if (yield utils.isGnuTarInstalled()) {
|
||||||
args.push('--force-local');
|
args.push('--force-local');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return yield io.which('tar', true);
|
return yield io.which('tar', true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function execTar(args, cwd) {
|
function execTar(args, compressionMethod, cwd) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
yield exec_1.exec(`"${yield getTarPath(args)}"`, args, { cwd });
|
yield exec_1.exec(`"${yield getTarPath(args, compressionMethod)}"`, args, { cwd });
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
throw new Error(`Tar failed with error: ${error === null || error === void 0 ? void 0 : error.message}`);
|
throw new Error(`Tar failed with error: ${error === null || error === void 0 ? void 0 : error.message}`);
|
||||||
@@ -3544,17 +5220,25 @@ function extractTar(archivePath, compressionMethod) {
|
|||||||
// --d: Decompress.
|
// --d: Decompress.
|
||||||
// --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
|
// --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
|
||||||
// Using 30 here because we also support 32-bit self-hosted runners.
|
// Using 30 here because we also support 32-bit self-hosted runners.
|
||||||
|
function getCompressionProgram() {
|
||||||
|
switch (compressionMethod) {
|
||||||
|
case constants_1.CompressionMethod.Zstd:
|
||||||
|
return ['--use-compress-program', 'zstd -d --long=30'];
|
||||||
|
case constants_1.CompressionMethod.ZstdWithoutLong:
|
||||||
|
return ['--use-compress-program', 'zstd -d'];
|
||||||
|
default:
|
||||||
|
return ['-z'];
|
||||||
|
}
|
||||||
|
}
|
||||||
const args = [
|
const args = [
|
||||||
...(compressionMethod === constants_1.CompressionMethod.Zstd
|
...getCompressionProgram(),
|
||||||
? ['--use-compress-program', 'zstd -d --long=30']
|
|
||||||
: ['-z']),
|
|
||||||
'-xf',
|
'-xf',
|
||||||
archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
|
archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
|
||||||
'-P',
|
'-P',
|
||||||
'-C',
|
'-C',
|
||||||
workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/')
|
workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/')
|
||||||
];
|
];
|
||||||
yield execTar(args);
|
yield execTar(args, compressionMethod);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.extractTar = extractTar;
|
exports.extractTar = extractTar;
|
||||||
@@ -3564,14 +5248,23 @@ function createTar(archiveFolder, sourceDirectories, compressionMethod) {
|
|||||||
const manifestFilename = 'manifest.txt';
|
const manifestFilename = 'manifest.txt';
|
||||||
const cacheFileName = utils.getCacheFileName(compressionMethod);
|
const cacheFileName = utils.getCacheFileName(compressionMethod);
|
||||||
fs_1.writeFileSync(path.join(archiveFolder, manifestFilename), sourceDirectories.join('\n'));
|
fs_1.writeFileSync(path.join(archiveFolder, manifestFilename), sourceDirectories.join('\n'));
|
||||||
|
const workingDirectory = getWorkingDirectory();
|
||||||
// -T#: Compress using # working thread. If # is 0, attempt to detect and use the number of physical CPU cores.
|
// -T#: Compress using # working thread. If # is 0, attempt to detect and use the number of physical CPU cores.
|
||||||
// --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
|
// --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
|
||||||
// Using 30 here because we also support 32-bit self-hosted runners.
|
// Using 30 here because we also support 32-bit self-hosted runners.
|
||||||
const workingDirectory = getWorkingDirectory();
|
// Long range mode is added to zstd in v1.3.2 release, so we will not use --long in older version of zstd.
|
||||||
|
function getCompressionProgram() {
|
||||||
|
switch (compressionMethod) {
|
||||||
|
case constants_1.CompressionMethod.Zstd:
|
||||||
|
return ['--use-compress-program', 'zstd -T0 --long=30'];
|
||||||
|
case constants_1.CompressionMethod.ZstdWithoutLong:
|
||||||
|
return ['--use-compress-program', 'zstd -T0'];
|
||||||
|
default:
|
||||||
|
return ['-z'];
|
||||||
|
}
|
||||||
|
}
|
||||||
const args = [
|
const args = [
|
||||||
...(compressionMethod === constants_1.CompressionMethod.Zstd
|
...getCompressionProgram(),
|
||||||
? ['--use-compress-program', 'zstd -T0 --long=30']
|
|
||||||
: ['-z']),
|
|
||||||
'-cf',
|
'-cf',
|
||||||
cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
|
cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
|
||||||
'-P',
|
'-P',
|
||||||
@@ -3580,7 +5273,7 @@ function createTar(archiveFolder, sourceDirectories, compressionMethod) {
|
|||||||
'--files-from',
|
'--files-from',
|
||||||
manifestFilename
|
manifestFilename
|
||||||
];
|
];
|
||||||
yield execTar(args, archiveFolder);
|
yield execTar(args, compressionMethod, archiveFolder);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.createTar = createTar;
|
exports.createTar = createTar;
|
||||||
@@ -3593,14 +5286,27 @@ exports.createTar = createTar;
|
|||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
if (mod && mod.__esModule) return mod;
|
if (mod && mod.__esModule) return mod;
|
||||||
var result = {};
|
var result = {};
|
||||||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
result["default"] = mod;
|
__setModuleDefault(result, mod);
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.isValidEvent = exports.logWarning = exports.getCacheState = exports.setOutputAndState = exports.setCacheHitOutput = exports.setCacheState = exports.isExactKeyMatch = void 0;
|
||||||
const core = __importStar(__webpack_require__(470));
|
const core = __importStar(__webpack_require__(470));
|
||||||
const constants_1 = __webpack_require__(694);
|
const constants_1 = __webpack_require__(694);
|
||||||
function isExactKeyMatch(key, cacheKey) {
|
function isExactKeyMatch(key, cacheKey) {
|
||||||
@@ -3611,7 +5317,7 @@ function isExactKeyMatch(key, cacheKey) {
|
|||||||
}
|
}
|
||||||
exports.isExactKeyMatch = isExactKeyMatch;
|
exports.isExactKeyMatch = isExactKeyMatch;
|
||||||
function setCacheState(state) {
|
function setCacheState(state) {
|
||||||
core.saveState(constants_1.State.CacheResult, state);
|
core.saveState(constants_1.State.CacheMatchedKey, state);
|
||||||
}
|
}
|
||||||
exports.setCacheState = setCacheState;
|
exports.setCacheState = setCacheState;
|
||||||
function setCacheHitOutput(isCacheHit) {
|
function setCacheHitOutput(isCacheHit) {
|
||||||
@@ -3620,12 +5326,12 @@ function setCacheHitOutput(isCacheHit) {
|
|||||||
exports.setCacheHitOutput = setCacheHitOutput;
|
exports.setCacheHitOutput = setCacheHitOutput;
|
||||||
function setOutputAndState(key, cacheKey) {
|
function setOutputAndState(key, cacheKey) {
|
||||||
setCacheHitOutput(isExactKeyMatch(key, cacheKey));
|
setCacheHitOutput(isExactKeyMatch(key, cacheKey));
|
||||||
// Store the cache result if it exists
|
// Store the matched cache key if it exists
|
||||||
cacheKey && setCacheState(cacheKey);
|
cacheKey && setCacheState(cacheKey);
|
||||||
}
|
}
|
||||||
exports.setOutputAndState = setOutputAndState;
|
exports.setOutputAndState = setOutputAndState;
|
||||||
function getCacheState() {
|
function getCacheState() {
|
||||||
const cacheKey = core.getState(constants_1.State.CacheResult);
|
const cacheKey = core.getState(constants_1.State.CacheMatchedKey);
|
||||||
if (cacheKey) {
|
if (cacheKey) {
|
||||||
core.debug(`Cache state/key: ${cacheKey}`);
|
core.debug(`Cache state/key: ${cacheKey}`);
|
||||||
return cacheKey;
|
return cacheKey;
|
||||||
@@ -3662,10 +5368,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const command_1 = __webpack_require__(431);
|
const command_1 = __webpack_require__(431);
|
||||||
const os = __webpack_require__(87);
|
const os = __importStar(__webpack_require__(87));
|
||||||
const path = __webpack_require__(622);
|
const path = __importStar(__webpack_require__(622));
|
||||||
/**
|
/**
|
||||||
* The code to exit an action
|
* The code to exit an action
|
||||||
*/
|
*/
|
||||||
@@ -3686,11 +5399,13 @@ var ExitCode;
|
|||||||
/**
|
/**
|
||||||
* Sets env variable for this action and future actions in the job
|
* Sets env variable for this action and future actions in the job
|
||||||
* @param name the name of the variable to set
|
* @param name the name of the variable to set
|
||||||
* @param val the value of the variable
|
* @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
|
||||||
*/
|
*/
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
function exportVariable(name, val) {
|
function exportVariable(name, val) {
|
||||||
process.env[name] = val;
|
const convertedVal = command_1.toCommandValue(val);
|
||||||
command_1.issueCommand('set-env', { name }, val);
|
process.env[name] = convertedVal;
|
||||||
|
command_1.issueCommand('set-env', { name }, convertedVal);
|
||||||
}
|
}
|
||||||
exports.exportVariable = exportVariable;
|
exports.exportVariable = exportVariable;
|
||||||
/**
|
/**
|
||||||
@@ -3729,12 +5444,22 @@ exports.getInput = getInput;
|
|||||||
* Sets the value of an output.
|
* Sets the value of an output.
|
||||||
*
|
*
|
||||||
* @param name name of the output to set
|
* @param name name of the output to set
|
||||||
* @param value value to store
|
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
||||||
*/
|
*/
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
function setOutput(name, value) {
|
function setOutput(name, value) {
|
||||||
command_1.issueCommand('set-output', { name }, value);
|
command_1.issueCommand('set-output', { name }, value);
|
||||||
}
|
}
|
||||||
exports.setOutput = setOutput;
|
exports.setOutput = setOutput;
|
||||||
|
/**
|
||||||
|
* Enables or disables the echoing of commands into stdout for the rest of the step.
|
||||||
|
* Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function setCommandEcho(enabled) {
|
||||||
|
command_1.issue('echo', enabled ? 'on' : 'off');
|
||||||
|
}
|
||||||
|
exports.setCommandEcho = setCommandEcho;
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
// Results
|
// Results
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
@@ -3751,6 +5476,13 @@ exports.setFailed = setFailed;
|
|||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
// Logging Commands
|
// Logging Commands
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Gets whether Actions Step Debug is on or not
|
||||||
|
*/
|
||||||
|
function isDebug() {
|
||||||
|
return process.env['RUNNER_DEBUG'] === '1';
|
||||||
|
}
|
||||||
|
exports.isDebug = isDebug;
|
||||||
/**
|
/**
|
||||||
* Writes debug message to user log
|
* Writes debug message to user log
|
||||||
* @param message debug message
|
* @param message debug message
|
||||||
@@ -3761,18 +5493,18 @@ function debug(message) {
|
|||||||
exports.debug = debug;
|
exports.debug = debug;
|
||||||
/**
|
/**
|
||||||
* Adds an error issue
|
* Adds an error issue
|
||||||
* @param message error issue message
|
* @param message error issue message. Errors will be converted to string via toString()
|
||||||
*/
|
*/
|
||||||
function error(message) {
|
function error(message) {
|
||||||
command_1.issue('error', message);
|
command_1.issue('error', message instanceof Error ? message.toString() : message);
|
||||||
}
|
}
|
||||||
exports.error = error;
|
exports.error = error;
|
||||||
/**
|
/**
|
||||||
* Adds an warning issue
|
* Adds an warning issue
|
||||||
* @param message warning issue message
|
* @param message warning issue message. Errors will be converted to string via toString()
|
||||||
*/
|
*/
|
||||||
function warning(message) {
|
function warning(message) {
|
||||||
command_1.issue('warning', message);
|
command_1.issue('warning', message instanceof Error ? message.toString() : message);
|
||||||
}
|
}
|
||||||
exports.warning = warning;
|
exports.warning = warning;
|
||||||
/**
|
/**
|
||||||
@@ -3830,8 +5562,9 @@ exports.group = group;
|
|||||||
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
||||||
*
|
*
|
||||||
* @param name name of the state to store
|
* @param name name of the state to store
|
||||||
* @param value value to store
|
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
||||||
*/
|
*/
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
function saveState(name, value) {
|
function saveState(name, value) {
|
||||||
command_1.issueCommand('save-state', { name }, value);
|
command_1.issueCommand('save-state', { name }, value);
|
||||||
}
|
}
|
||||||
@@ -4602,235 +6335,6 @@ module.exports = require("net");
|
|||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 633:
|
|
||||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
|
||||||
if (mod && mod.__esModule) return mod;
|
|
||||||
var result = {};
|
|
||||||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
||||||
result["default"] = mod;
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
const command_1 = __webpack_require__(734);
|
|
||||||
const os = __importStar(__webpack_require__(87));
|
|
||||||
const path = __importStar(__webpack_require__(622));
|
|
||||||
/**
|
|
||||||
* The code to exit an action
|
|
||||||
*/
|
|
||||||
var ExitCode;
|
|
||||||
(function (ExitCode) {
|
|
||||||
/**
|
|
||||||
* A code indicating that the action was successful
|
|
||||||
*/
|
|
||||||
ExitCode[ExitCode["Success"] = 0] = "Success";
|
|
||||||
/**
|
|
||||||
* A code indicating that the action was a failure
|
|
||||||
*/
|
|
||||||
ExitCode[ExitCode["Failure"] = 1] = "Failure";
|
|
||||||
})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// Variables
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
/**
|
|
||||||
* Sets env variable for this action and future actions in the job
|
|
||||||
* @param name the name of the variable to set
|
|
||||||
* @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
|
|
||||||
*/
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
function exportVariable(name, val) {
|
|
||||||
const convertedVal = command_1.toCommandValue(val);
|
|
||||||
process.env[name] = convertedVal;
|
|
||||||
command_1.issueCommand('set-env', { name }, convertedVal);
|
|
||||||
}
|
|
||||||
exports.exportVariable = exportVariable;
|
|
||||||
/**
|
|
||||||
* Registers a secret which will get masked from logs
|
|
||||||
* @param secret value of the secret
|
|
||||||
*/
|
|
||||||
function setSecret(secret) {
|
|
||||||
command_1.issueCommand('add-mask', {}, secret);
|
|
||||||
}
|
|
||||||
exports.setSecret = setSecret;
|
|
||||||
/**
|
|
||||||
* Prepends inputPath to the PATH (for this action and future actions)
|
|
||||||
* @param inputPath
|
|
||||||
*/
|
|
||||||
function addPath(inputPath) {
|
|
||||||
command_1.issueCommand('add-path', {}, inputPath);
|
|
||||||
process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
|
|
||||||
}
|
|
||||||
exports.addPath = addPath;
|
|
||||||
/**
|
|
||||||
* Gets the value of an input. The value is also trimmed.
|
|
||||||
*
|
|
||||||
* @param name name of the input to get
|
|
||||||
* @param options optional. See InputOptions.
|
|
||||||
* @returns string
|
|
||||||
*/
|
|
||||||
function getInput(name, options) {
|
|
||||||
const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
|
|
||||||
if (options && options.required && !val) {
|
|
||||||
throw new Error(`Input required and not supplied: ${name}`);
|
|
||||||
}
|
|
||||||
return val.trim();
|
|
||||||
}
|
|
||||||
exports.getInput = getInput;
|
|
||||||
/**
|
|
||||||
* Sets the value of an output.
|
|
||||||
*
|
|
||||||
* @param name name of the output to set
|
|
||||||
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
|
||||||
*/
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
function setOutput(name, value) {
|
|
||||||
command_1.issueCommand('set-output', { name }, value);
|
|
||||||
}
|
|
||||||
exports.setOutput = setOutput;
|
|
||||||
/**
|
|
||||||
* Enables or disables the echoing of commands into stdout for the rest of the step.
|
|
||||||
* Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
function setCommandEcho(enabled) {
|
|
||||||
command_1.issue('echo', enabled ? 'on' : 'off');
|
|
||||||
}
|
|
||||||
exports.setCommandEcho = setCommandEcho;
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// Results
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
/**
|
|
||||||
* Sets the action status to failed.
|
|
||||||
* When the action exits it will be with an exit code of 1
|
|
||||||
* @param message add error issue message
|
|
||||||
*/
|
|
||||||
function setFailed(message) {
|
|
||||||
process.exitCode = ExitCode.Failure;
|
|
||||||
error(message);
|
|
||||||
}
|
|
||||||
exports.setFailed = setFailed;
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// Logging Commands
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
/**
|
|
||||||
* Gets whether Actions Step Debug is on or not
|
|
||||||
*/
|
|
||||||
function isDebug() {
|
|
||||||
return process.env['RUNNER_DEBUG'] === '1';
|
|
||||||
}
|
|
||||||
exports.isDebug = isDebug;
|
|
||||||
/**
|
|
||||||
* Writes debug message to user log
|
|
||||||
* @param message debug message
|
|
||||||
*/
|
|
||||||
function debug(message) {
|
|
||||||
command_1.issueCommand('debug', {}, message);
|
|
||||||
}
|
|
||||||
exports.debug = debug;
|
|
||||||
/**
|
|
||||||
* Adds an error issue
|
|
||||||
* @param message error issue message. Errors will be converted to string via toString()
|
|
||||||
*/
|
|
||||||
function error(message) {
|
|
||||||
command_1.issue('error', message instanceof Error ? message.toString() : message);
|
|
||||||
}
|
|
||||||
exports.error = error;
|
|
||||||
/**
|
|
||||||
* Adds an warning issue
|
|
||||||
* @param message warning issue message. Errors will be converted to string via toString()
|
|
||||||
*/
|
|
||||||
function warning(message) {
|
|
||||||
command_1.issue('warning', message instanceof Error ? message.toString() : message);
|
|
||||||
}
|
|
||||||
exports.warning = warning;
|
|
||||||
/**
|
|
||||||
* Writes info to log with console.log.
|
|
||||||
* @param message info message
|
|
||||||
*/
|
|
||||||
function info(message) {
|
|
||||||
process.stdout.write(message + os.EOL);
|
|
||||||
}
|
|
||||||
exports.info = info;
|
|
||||||
/**
|
|
||||||
* Begin an output group.
|
|
||||||
*
|
|
||||||
* Output until the next `groupEnd` will be foldable in this group
|
|
||||||
*
|
|
||||||
* @param name The name of the output group
|
|
||||||
*/
|
|
||||||
function startGroup(name) {
|
|
||||||
command_1.issue('group', name);
|
|
||||||
}
|
|
||||||
exports.startGroup = startGroup;
|
|
||||||
/**
|
|
||||||
* End an output group.
|
|
||||||
*/
|
|
||||||
function endGroup() {
|
|
||||||
command_1.issue('endgroup');
|
|
||||||
}
|
|
||||||
exports.endGroup = endGroup;
|
|
||||||
/**
|
|
||||||
* Wrap an asynchronous function call in a group.
|
|
||||||
*
|
|
||||||
* Returns the same type as the function itself.
|
|
||||||
*
|
|
||||||
* @param name The name of the group
|
|
||||||
* @param fn The function to wrap in the group
|
|
||||||
*/
|
|
||||||
function group(name, fn) {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
startGroup(name);
|
|
||||||
let result;
|
|
||||||
try {
|
|
||||||
result = yield fn();
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
endGroup();
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
exports.group = group;
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// Wrapper action state
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
/**
|
|
||||||
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
|
||||||
*
|
|
||||||
* @param name name of the state to store
|
|
||||||
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
|
||||||
*/
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
function saveState(name, value) {
|
|
||||||
command_1.issueCommand('save-state', { name }, value);
|
|
||||||
}
|
|
||||||
exports.saveState = saveState;
|
|
||||||
/**
|
|
||||||
* Gets the value of an state set by this action's main execution.
|
|
||||||
*
|
|
||||||
* @param name name of the state to get
|
|
||||||
* @returns string
|
|
||||||
*/
|
|
||||||
function getState(name) {
|
|
||||||
return process.env[`STATE_${name}`] || '';
|
|
||||||
}
|
|
||||||
exports.getState = getState;
|
|
||||||
//# sourceMappingURL=core.js.map
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 669:
|
/***/ 669:
|
||||||
/***/ (function(module) {
|
/***/ (function(module) {
|
||||||
|
|
||||||
@@ -5045,6 +6549,25 @@ function isUnixExecutable(stats) {
|
|||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
@@ -5054,13 +6577,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
|
||||||
if (mod && mod.__esModule) return mod;
|
|
||||||
var result = {};
|
|
||||||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
||||||
result["default"] = mod;
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const cache = __importStar(__webpack_require__(692));
|
const cache = __importStar(__webpack_require__(692));
|
||||||
const core = __importStar(__webpack_require__(470));
|
const core = __importStar(__webpack_require__(470));
|
||||||
@@ -5075,7 +6591,7 @@ function run() {
|
|||||||
}
|
}
|
||||||
const state = utils.getCacheState();
|
const state = utils.getCacheState();
|
||||||
// Inputs are re-evaluted before the post action, so we want the original key used for restore
|
// Inputs are re-evaluted before the post action, so we want the original key used for restore
|
||||||
const primaryKey = core.getState(constants_1.State.CacheKey);
|
const primaryKey = core.getState(constants_1.State.CachePrimaryKey);
|
||||||
if (!primaryKey) {
|
if (!primaryKey) {
|
||||||
utils.logWarning(`Error retrieving key from state.`);
|
utils.logWarning(`Error retrieving key from state.`);
|
||||||
return;
|
return;
|
||||||
@@ -5136,7 +6652,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const core = __importStar(__webpack_require__(633));
|
const core = __importStar(__webpack_require__(470));
|
||||||
const path = __importStar(__webpack_require__(622));
|
const path = __importStar(__webpack_require__(622));
|
||||||
const utils = __importStar(__webpack_require__(15));
|
const utils = __importStar(__webpack_require__(15));
|
||||||
const cacheHttpClient = __importStar(__webpack_require__(114));
|
const cacheHttpClient = __importStar(__webpack_require__(114));
|
||||||
@@ -5273,6 +6789,7 @@ exports.saveCache = saveCache;
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.RefKey = exports.Events = exports.State = exports.Outputs = exports.Inputs = void 0;
|
||||||
var Inputs;
|
var Inputs;
|
||||||
(function (Inputs) {
|
(function (Inputs) {
|
||||||
Inputs["Key"] = "key";
|
Inputs["Key"] = "key";
|
||||||
@@ -5285,8 +6802,8 @@ var Outputs;
|
|||||||
})(Outputs = exports.Outputs || (exports.Outputs = {}));
|
})(Outputs = exports.Outputs || (exports.Outputs = {}));
|
||||||
var State;
|
var State;
|
||||||
(function (State) {
|
(function (State) {
|
||||||
State["CacheKey"] = "CACHE_KEY";
|
State["CachePrimaryKey"] = "CACHE_KEY";
|
||||||
State["CacheResult"] = "CACHE_RESULT";
|
State["CacheMatchedKey"] = "CACHE_RESULT";
|
||||||
})(State = exports.State || (exports.State = {}));
|
})(State = exports.State || (exports.State = {}));
|
||||||
var Events;
|
var Events;
|
||||||
(function (Events) {
|
(function (Events) {
|
||||||
@@ -5315,14 +6832,16 @@ function bytesToUuid(buf, offset) {
|
|||||||
var i = offset || 0;
|
var i = offset || 0;
|
||||||
var bth = byteToHex;
|
var bth = byteToHex;
|
||||||
// join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
|
// join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
|
||||||
return ([bth[buf[i++]], bth[buf[i++]],
|
return ([
|
||||||
bth[buf[i++]], bth[buf[i++]], '-',
|
bth[buf[i++]], bth[buf[i++]],
|
||||||
bth[buf[i++]], bth[buf[i++]], '-',
|
bth[buf[i++]], bth[buf[i++]], '-',
|
||||||
bth[buf[i++]], bth[buf[i++]], '-',
|
bth[buf[i++]], bth[buf[i++]], '-',
|
||||||
bth[buf[i++]], bth[buf[i++]], '-',
|
bth[buf[i++]], bth[buf[i++]], '-',
|
||||||
bth[buf[i++]], bth[buf[i++]],
|
bth[buf[i++]], bth[buf[i++]], '-',
|
||||||
bth[buf[i++]], bth[buf[i++]],
|
bth[buf[i++]], bth[buf[i++]],
|
||||||
bth[buf[i++]], bth[buf[i++]]]).join('');
|
bth[buf[i++]], bth[buf[i++]],
|
||||||
|
bth[buf[i++]], bth[buf[i++]]
|
||||||
|
]).join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = bytesToUuid;
|
module.exports = bytesToUuid;
|
||||||
@@ -5347,105 +6866,6 @@ exports.SearchState = SearchState;
|
|||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 734:
|
|
||||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
|
||||||
if (mod && mod.__esModule) return mod;
|
|
||||||
var result = {};
|
|
||||||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
||||||
result["default"] = mod;
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
const os = __importStar(__webpack_require__(87));
|
|
||||||
/**
|
|
||||||
* Commands
|
|
||||||
*
|
|
||||||
* Command Format:
|
|
||||||
* ::name key=value,key=value::message
|
|
||||||
*
|
|
||||||
* Examples:
|
|
||||||
* ::warning::This is the message
|
|
||||||
* ::set-env name=MY_VAR::some value
|
|
||||||
*/
|
|
||||||
function issueCommand(command, properties, message) {
|
|
||||||
const cmd = new Command(command, properties, message);
|
|
||||||
process.stdout.write(cmd.toString() + os.EOL);
|
|
||||||
}
|
|
||||||
exports.issueCommand = issueCommand;
|
|
||||||
function issue(name, message = '') {
|
|
||||||
issueCommand(name, {}, message);
|
|
||||||
}
|
|
||||||
exports.issue = issue;
|
|
||||||
const CMD_STRING = '::';
|
|
||||||
class Command {
|
|
||||||
constructor(command, properties, message) {
|
|
||||||
if (!command) {
|
|
||||||
command = 'missing.command';
|
|
||||||
}
|
|
||||||
this.command = command;
|
|
||||||
this.properties = properties;
|
|
||||||
this.message = message;
|
|
||||||
}
|
|
||||||
toString() {
|
|
||||||
let cmdStr = CMD_STRING + this.command;
|
|
||||||
if (this.properties && Object.keys(this.properties).length > 0) {
|
|
||||||
cmdStr += ' ';
|
|
||||||
let first = true;
|
|
||||||
for (const key in this.properties) {
|
|
||||||
if (this.properties.hasOwnProperty(key)) {
|
|
||||||
const val = this.properties[key];
|
|
||||||
if (val) {
|
|
||||||
if (first) {
|
|
||||||
first = false;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
cmdStr += ',';
|
|
||||||
}
|
|
||||||
cmdStr += `${key}=${escapeProperty(val)}`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
|
|
||||||
return cmdStr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Sanitizes an input into a string so it can be passed into issueCommand safely
|
|
||||||
* @param input input to sanitize into a string
|
|
||||||
*/
|
|
||||||
function toCommandValue(input) {
|
|
||||||
if (input === null || input === undefined) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
else if (typeof input === 'string' || input instanceof String) {
|
|
||||||
return input;
|
|
||||||
}
|
|
||||||
return JSON.stringify(input);
|
|
||||||
}
|
|
||||||
exports.toCommandValue = toCommandValue;
|
|
||||||
function escapeData(s) {
|
|
||||||
return toCommandValue(s)
|
|
||||||
.replace(/%/g, '%25')
|
|
||||||
.replace(/\r/g, '%0D')
|
|
||||||
.replace(/\n/g, '%0A');
|
|
||||||
}
|
|
||||||
function escapeProperty(s) {
|
|
||||||
return toCommandValue(s)
|
|
||||||
.replace(/%/g, '%25')
|
|
||||||
.replace(/\r/g, '%0D')
|
|
||||||
.replace(/\n/g, '%0A')
|
|
||||||
.replace(/:/g, '%3A')
|
|
||||||
.replace(/,/g, '%2C');
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=command.js.map
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 747:
|
/***/ 747:
|
||||||
/***/ (function(module) {
|
/***/ (function(module) {
|
||||||
|
|
||||||
@@ -5790,6 +7210,9 @@ var CacheFilename;
|
|||||||
var CompressionMethod;
|
var CompressionMethod;
|
||||||
(function (CompressionMethod) {
|
(function (CompressionMethod) {
|
||||||
CompressionMethod["Gzip"] = "gzip";
|
CompressionMethod["Gzip"] = "gzip";
|
||||||
|
// Long range mode was added to zstd in v1.3.2.
|
||||||
|
// This enum is for earlier version of zstd that does not have --long support
|
||||||
|
CompressionMethod["ZstdWithoutLong"] = "zstd-without-long";
|
||||||
CompressionMethod["Zstd"] = "zstd";
|
CompressionMethod["Zstd"] = "zstd";
|
||||||
})(CompressionMethod = exports.CompressionMethod || (exports.CompressionMethod = {}));
|
})(CompressionMethod = exports.CompressionMethod || (exports.CompressionMethod = {}));
|
||||||
// Socket timeout in milliseconds during download. If no traffic is received
|
// Socket timeout in milliseconds during download. If no traffic is received
|
||||||
@@ -6062,8 +7485,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const tr = __webpack_require__(9);
|
const tr = __importStar(__webpack_require__(9));
|
||||||
/**
|
/**
|
||||||
* Exec a command.
|
* Exec a command.
|
||||||
* Output will be streamed to the live console.
|
* Output will be streamed to the live console.
|
||||||
|
|||||||
Generated
+1395
-4763
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -26,7 +26,7 @@
|
|||||||
"@actions/core": "^1.2.0",
|
"@actions/core": "^1.2.0",
|
||||||
"@actions/exec": "^1.0.1",
|
"@actions/exec": "^1.0.1",
|
||||||
"@actions/io": "^1.0.1",
|
"@actions/io": "^1.0.1",
|
||||||
"@actions/cache": "^0.1.0"
|
"@actions/cache": "^0.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^24.0.13",
|
"@types/jest": "^24.0.13",
|
||||||
|
|||||||
+2
-2
@@ -9,8 +9,8 @@ export enum Outputs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export enum State {
|
export enum State {
|
||||||
CacheKey = "CACHE_KEY",
|
CachePrimaryKey = "CACHE_KEY",
|
||||||
CacheResult = "CACHE_RESULT"
|
CacheMatchedKey = "CACHE_RESULT"
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum Events {
|
export enum Events {
|
||||||
|
|||||||
+2
-2
@@ -17,7 +17,7 @@ async function run(): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const primaryKey = core.getInput(Inputs.Key, { required: true });
|
const primaryKey = core.getInput(Inputs.Key, { required: true });
|
||||||
core.saveState(State.CacheKey, primaryKey);
|
core.saveState(State.CachePrimaryKey, primaryKey);
|
||||||
|
|
||||||
const restoreKeys = core
|
const restoreKeys = core
|
||||||
.getInput(Inputs.RestoreKeys)
|
.getInput(Inputs.RestoreKeys)
|
||||||
@@ -45,7 +45,7 @@ async function run(): Promise<void> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store the cache result
|
// Store the matched cache key
|
||||||
utils.setCacheState(cacheKey);
|
utils.setCacheState(cacheKey);
|
||||||
|
|
||||||
const isExactKeyMatch = utils.isExactKeyMatch(primaryKey, cacheKey);
|
const isExactKeyMatch = utils.isExactKeyMatch(primaryKey, cacheKey);
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ async function run(): Promise<void> {
|
|||||||
const state = utils.getCacheState();
|
const state = utils.getCacheState();
|
||||||
|
|
||||||
// Inputs are re-evaluted before the post action, so we want the original key used for restore
|
// Inputs are re-evaluted before the post action, so we want the original key used for restore
|
||||||
const primaryKey = core.getState(State.CacheKey);
|
const primaryKey = core.getState(State.CachePrimaryKey);
|
||||||
if (!primaryKey) {
|
if (!primaryKey) {
|
||||||
utils.logWarning(`Error retrieving key from state.`);
|
utils.logWarning(`Error retrieving key from state.`);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export function isExactKeyMatch(key: string, cacheKey?: string): boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function setCacheState(state: string): void {
|
export function setCacheState(state: string): void {
|
||||||
core.saveState(State.CacheResult, state);
|
core.saveState(State.CacheMatchedKey, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setCacheHitOutput(isCacheHit: boolean): void {
|
export function setCacheHitOutput(isCacheHit: boolean): void {
|
||||||
@@ -21,12 +21,12 @@ export function setCacheHitOutput(isCacheHit: boolean): void {
|
|||||||
|
|
||||||
export function setOutputAndState(key: string, cacheKey?: string): void {
|
export function setOutputAndState(key: string, cacheKey?: string): void {
|
||||||
setCacheHitOutput(isExactKeyMatch(key, cacheKey));
|
setCacheHitOutput(isExactKeyMatch(key, cacheKey));
|
||||||
// Store the cache result if it exists
|
// Store the matched cache key if it exists
|
||||||
cacheKey && setCacheState(cacheKey);
|
cacheKey && setCacheState(cacheKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getCacheState(): string | undefined {
|
export function getCacheState(): string | undefined {
|
||||||
const cacheKey = core.getState(State.CacheResult);
|
const cacheKey = core.getState(State.CacheMatchedKey);
|
||||||
if (cacheKey) {
|
if (cacheKey) {
|
||||||
core.debug(`Cache state/key: ${cacheKey}`);
|
core.debug(`Cache state/key: ${cacheKey}`);
|
||||||
return cacheKey;
|
return cacheKey;
|
||||||
|
|||||||
Reference in New Issue
Block a user