diff --git a/build/index.js b/build/index.js index 73815ee..7937a8a 100644 --- a/build/index.js +++ b/build/index.js @@ -1,18404 +1,129 @@ -/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ 7351: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.issue = exports.issueCommand = void 0; -const os = __importStar(__nccwpck_require__(2037)); -const utils_1 = __nccwpck_require__(5278); -/** - * 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; - } -} -function escapeData(s) { - return utils_1.toCommandValue(s) - .replace(/%/g, '%25') - .replace(/\r/g, '%0D') - .replace(/\n/g, '%0A'); -} -function escapeProperty(s) { - return utils_1.toCommandValue(s) - .replace(/%/g, '%25') - .replace(/\r/g, '%0D') - .replace(/\n/g, '%0A') - .replace(/:/g, '%3A') - .replace(/,/g, '%2C'); -} -//# sourceMappingURL=command.js.map - -/***/ }), - -/***/ 2186: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -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()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0; -const command_1 = __nccwpck_require__(7351); -const file_command_1 = __nccwpck_require__(717); -const utils_1 = __nccwpck_require__(5278); -const os = __importStar(__nccwpck_require__(2037)); -const path = __importStar(__nccwpck_require__(1017)); -const oidc_utils_1 = __nccwpck_require__(8041); -/** - * 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 = utils_1.toCommandValue(val); - process.env[name] = convertedVal; - const filePath = process.env['GITHUB_ENV'] || ''; - if (filePath) { - return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val)); - } - 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) { - const filePath = process.env['GITHUB_PATH'] || ''; - if (filePath) { - file_command_1.issueFileCommand('PATH', inputPath); - } - else { - command_1.issueCommand('add-path', {}, inputPath); - } - process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; -} -exports.addPath = addPath; -/** - * Gets the value of an input. - * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed. - * Returns an empty string if the value is not defined. - * - * @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}`); - } - if (options && options.trimWhitespace === false) { - return val; - } - return val.trim(); -} -exports.getInput = getInput; -/** - * Gets the values of an multiline input. Each value is also trimmed. - * - * @param name name of the input to get - * @param options optional. See InputOptions. - * @returns string[] - * - */ -function getMultilineInput(name, options) { - const inputs = getInput(name, options) - .split('\n') - .filter(x => x !== ''); - if (options && options.trimWhitespace === false) { - return inputs; - } - return inputs.map(input => input.trim()); -} -exports.getMultilineInput = getMultilineInput; -/** - * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification. - * Support boolean input list: `true | True | TRUE | false | False | FALSE` . - * The return value is also in boolean type. - * ref: https://yaml.org/spec/1.2/spec.html#id2804923 - * - * @param name name of the input to get - * @param options optional. See InputOptions. - * @returns boolean - */ -function getBooleanInput(name, options) { - const trueValue = ['true', 'True', 'TRUE']; - const falseValue = ['false', 'False', 'FALSE']; - const val = getInput(name, options); - if (trueValue.includes(val)) - return true; - if (falseValue.includes(val)) - return false; - throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` + - `Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); -} -exports.getBooleanInput = getBooleanInput; -/** - * 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) { - const filePath = process.env['GITHUB_OUTPUT'] || ''; - if (filePath) { - return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value)); - } - process.stdout.write(os.EOL); - command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(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() - * @param properties optional properties to add to the annotation. - */ -function error(message, properties = {}) { - command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); -} -exports.error = error; -/** - * Adds a warning issue - * @param message warning issue message. Errors will be converted to string via toString() - * @param properties optional properties to add to the annotation. - */ -function warning(message, properties = {}) { - command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); -} -exports.warning = warning; -/** - * Adds a notice issue - * @param message notice issue message. Errors will be converted to string via toString() - * @param properties optional properties to add to the annotation. - */ -function notice(message, properties = {}) { - command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); -} -exports.notice = notice; -/** - * 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) { - const filePath = process.env['GITHUB_STATE'] || ''; - if (filePath) { - return file_command_1.issueFileCommand('STATE', file_command_1.prepareKeyValueMessage(name, value)); - } - command_1.issueCommand('save-state', { name }, utils_1.toCommandValue(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; -function getIDToken(aud) { - return __awaiter(this, void 0, void 0, function* () { - return yield oidc_utils_1.OidcClient.getIDToken(aud); - }); -} -exports.getIDToken = getIDToken; -/** - * Summary exports - */ -var summary_1 = __nccwpck_require__(1327); -Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } })); -/** - * @deprecated use core.summary - */ -var summary_2 = __nccwpck_require__(1327); -Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } })); -/** - * Path exports - */ -var path_utils_1 = __nccwpck_require__(2981); -Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } })); -Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } })); -Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } })); -//# sourceMappingURL=core.js.map - -/***/ }), - -/***/ 717: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"use strict"; - -// For internal use, subject to change. -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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.prepareKeyValueMessage = exports.issueFileCommand = void 0; -// We use any as a valid input type -/* eslint-disable @typescript-eslint/no-explicit-any */ -const fs = __importStar(__nccwpck_require__(7147)); -const os = __importStar(__nccwpck_require__(2037)); -const uuid_1 = __nccwpck_require__(5840); -const utils_1 = __nccwpck_require__(5278); -function issueFileCommand(command, message) { - const filePath = process.env[`GITHUB_${command}`]; - if (!filePath) { - throw new Error(`Unable to find environment variable for file command ${command}`); - } - if (!fs.existsSync(filePath)) { - throw new Error(`Missing file at path: ${filePath}`); - } - fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, { - encoding: 'utf8' - }); -} -exports.issueFileCommand = issueFileCommand; -function prepareKeyValueMessage(key, value) { - const delimiter = `ghadelimiter_${uuid_1.v4()}`; - const convertedValue = utils_1.toCommandValue(value); - // These should realistically never happen, but just in case someone finds a - // way to exploit uuid generation let's not allow keys or values that contain - // the delimiter. - if (key.includes(delimiter)) { - throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`); - } - if (convertedValue.includes(delimiter)) { - throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`); - } - return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`; -} -exports.prepareKeyValueMessage = prepareKeyValueMessage; -//# sourceMappingURL=file-command.js.map - -/***/ }), - -/***/ 8041: -/***/ (function(__unused_webpack_module, exports, __nccwpck_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()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.OidcClient = void 0; -const http_client_1 = __nccwpck_require__(6255); -const auth_1 = __nccwpck_require__(5526); -const core_1 = __nccwpck_require__(2186); -class OidcClient { - static createHttpClient(allowRetry = true, maxRetry = 10) { - const requestOptions = { - allowRetries: allowRetry, - maxRetries: maxRetry - }; - return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions); - } - static getRequestToken() { - const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN']; - if (!token) { - throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable'); - } - return token; - } - static getIDTokenUrl() { - const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL']; - if (!runtimeUrl) { - throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable'); - } - return runtimeUrl; - } - static getCall(id_token_url) { - var _a; - return __awaiter(this, void 0, void 0, function* () { - const httpclient = OidcClient.createHttpClient(); - const res = yield httpclient - .getJson(id_token_url) - .catch(error => { - throw new Error(`Failed to get ID Token. \n - Error Code : ${error.statusCode}\n - Error Message: ${error.result.message}`); - }); - const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value; - if (!id_token) { - throw new Error('Response json body do not have ID Token field'); - } - return id_token; - }); - } - static getIDToken(audience) { - return __awaiter(this, void 0, void 0, function* () { - try { - // New ID Token is requested from action service - let id_token_url = OidcClient.getIDTokenUrl(); - if (audience) { - const encodedAudience = encodeURIComponent(audience); - id_token_url = `${id_token_url}&audience=${encodedAudience}`; - } - core_1.debug(`ID token url is ${id_token_url}`); - const id_token = yield OidcClient.getCall(id_token_url); - core_1.setSecret(id_token); - return id_token; - } - catch (error) { - throw new Error(`Error message: ${error.message}`); - } - }); - } -} -exports.OidcClient = OidcClient; -//# sourceMappingURL=oidc-utils.js.map - -/***/ }), - -/***/ 2981: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0; -const path = __importStar(__nccwpck_require__(1017)); -/** - * toPosixPath converts the given path to the posix form. On Windows, \\ will be - * replaced with /. - * - * @param pth. Path to transform. - * @return string Posix path. - */ -function toPosixPath(pth) { - return pth.replace(/[\\]/g, '/'); -} -exports.toPosixPath = toPosixPath; -/** - * toWin32Path converts the given path to the win32 form. On Linux, / will be - * replaced with \\. - * - * @param pth. Path to transform. - * @return string Win32 path. - */ -function toWin32Path(pth) { - return pth.replace(/[/]/g, '\\'); -} -exports.toWin32Path = toWin32Path; -/** - * toPlatformPath converts the given path to a platform-specific path. It does - * this by replacing instances of / and \ with the platform-specific path - * separator. - * - * @param pth The path to platformize. - * @return string The platform-specific path. - */ -function toPlatformPath(pth) { - return pth.replace(/[/\\]/g, path.sep); -} -exports.toPlatformPath = toPlatformPath; -//# sourceMappingURL=path-utils.js.map - -/***/ }), - -/***/ 1327: -/***/ (function(__unused_webpack_module, exports, __nccwpck_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()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0; -const os_1 = __nccwpck_require__(2037); -const fs_1 = __nccwpck_require__(7147); -const { access, appendFile, writeFile } = fs_1.promises; -exports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY'; -exports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary'; -class Summary { - constructor() { - this._buffer = ''; - } - /** - * Finds the summary file path from the environment, rejects if env var is not found or file does not exist - * Also checks r/w permissions. - * - * @returns step summary file path - */ - filePath() { - return __awaiter(this, void 0, void 0, function* () { - if (this._filePath) { - return this._filePath; - } - const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR]; - if (!pathFromEnv) { - throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`); - } - try { - yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK); - } - catch (_a) { - throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`); - } - this._filePath = pathFromEnv; - return this._filePath; - }); - } - /** - * Wraps content in an HTML tag, adding any HTML attributes - * - * @param {string} tag HTML tag to wrap - * @param {string | null} content content within the tag - * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add - * - * @returns {string} content wrapped in HTML element - */ - wrap(tag, content, attrs = {}) { - const htmlAttrs = Object.entries(attrs) - .map(([key, value]) => ` ${key}="${value}"`) - .join(''); - if (!content) { - return `<${tag}${htmlAttrs}>`; - } - return `<${tag}${htmlAttrs}>${content}`; - } - /** - * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default. - * - * @param {SummaryWriteOptions} [options] (optional) options for write operation - * - * @returns {Promise} summary instance - */ - write(options) { - return __awaiter(this, void 0, void 0, function* () { - const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite); - const filePath = yield this.filePath(); - const writeFunc = overwrite ? writeFile : appendFile; - yield writeFunc(filePath, this._buffer, { encoding: 'utf8' }); - return this.emptyBuffer(); - }); - } - /** - * Clears the summary buffer and wipes the summary file - * - * @returns {Summary} summary instance - */ - clear() { - return __awaiter(this, void 0, void 0, function* () { - return this.emptyBuffer().write({ overwrite: true }); - }); - } - /** - * Returns the current summary buffer as a string - * - * @returns {string} string of summary buffer - */ - stringify() { - return this._buffer; - } - /** - * If the summary buffer is empty - * - * @returns {boolen} true if the buffer is empty - */ - isEmptyBuffer() { - return this._buffer.length === 0; - } - /** - * Resets the summary buffer without writing to summary file - * - * @returns {Summary} summary instance - */ - emptyBuffer() { - this._buffer = ''; - return this; - } - /** - * Adds raw text to the summary buffer - * - * @param {string} text content to add - * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false) - * - * @returns {Summary} summary instance - */ - addRaw(text, addEOL = false) { - this._buffer += text; - return addEOL ? this.addEOL() : this; - } - /** - * Adds the operating system-specific end-of-line marker to the buffer - * - * @returns {Summary} summary instance - */ - addEOL() { - return this.addRaw(os_1.EOL); - } - /** - * Adds an HTML codeblock to the summary buffer - * - * @param {string} code content to render within fenced code block - * @param {string} lang (optional) language to syntax highlight code - * - * @returns {Summary} summary instance - */ - addCodeBlock(code, lang) { - const attrs = Object.assign({}, (lang && { lang })); - const element = this.wrap('pre', this.wrap('code', code), attrs); - return this.addRaw(element).addEOL(); - } - /** - * Adds an HTML list to the summary buffer - * - * @param {string[]} items list of items to render - * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false) - * - * @returns {Summary} summary instance - */ - addList(items, ordered = false) { - const tag = ordered ? 'ol' : 'ul'; - const listItems = items.map(item => this.wrap('li', item)).join(''); - const element = this.wrap(tag, listItems); - return this.addRaw(element).addEOL(); - } - /** - * Adds an HTML table to the summary buffer - * - * @param {SummaryTableCell[]} rows table rows - * - * @returns {Summary} summary instance - */ - addTable(rows) { - const tableBody = rows - .map(row => { - const cells = row - .map(cell => { - if (typeof cell === 'string') { - return this.wrap('td', cell); - } - const { header, data, colspan, rowspan } = cell; - const tag = header ? 'th' : 'td'; - const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan })); - return this.wrap(tag, data, attrs); - }) - .join(''); - return this.wrap('tr', cells); - }) - .join(''); - const element = this.wrap('table', tableBody); - return this.addRaw(element).addEOL(); - } - /** - * Adds a collapsable HTML details element to the summary buffer - * - * @param {string} label text for the closed state - * @param {string} content collapsable content - * - * @returns {Summary} summary instance - */ - addDetails(label, content) { - const element = this.wrap('details', this.wrap('summary', label) + content); - return this.addRaw(element).addEOL(); - } - /** - * Adds an HTML image tag to the summary buffer - * - * @param {string} src path to the image you to embed - * @param {string} alt text description of the image - * @param {SummaryImageOptions} options (optional) addition image attributes - * - * @returns {Summary} summary instance - */ - addImage(src, alt, options) { - const { width, height } = options || {}; - const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height })); - const element = this.wrap('img', null, Object.assign({ src, alt }, attrs)); - return this.addRaw(element).addEOL(); - } - /** - * Adds an HTML section heading element - * - * @param {string} text heading text - * @param {number | string} [level=1] (optional) the heading level, default: 1 - * - * @returns {Summary} summary instance - */ - addHeading(text, level) { - const tag = `h${level}`; - const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag) - ? tag - : 'h1'; - const element = this.wrap(allowedTag, text); - return this.addRaw(element).addEOL(); - } - /** - * Adds an HTML thematic break (
) to the summary buffer - * - * @returns {Summary} summary instance - */ - addSeparator() { - const element = this.wrap('hr', null); - return this.addRaw(element).addEOL(); - } - /** - * Adds an HTML line break (
) to the summary buffer - * - * @returns {Summary} summary instance - */ - addBreak() { - const element = this.wrap('br', null); - return this.addRaw(element).addEOL(); - } - /** - * Adds an HTML blockquote to the summary buffer - * - * @param {string} text quote text - * @param {string} cite (optional) citation url - * - * @returns {Summary} summary instance - */ - addQuote(text, cite) { - const attrs = Object.assign({}, (cite && { cite })); - const element = this.wrap('blockquote', text, attrs); - return this.addRaw(element).addEOL(); - } - /** - * Adds an HTML anchor tag to the summary buffer - * - * @param {string} text link text/content - * @param {string} href hyperlink - * - * @returns {Summary} summary instance - */ - addLink(text, href) { - const element = this.wrap('a', text, { href }); - return this.addRaw(element).addEOL(); - } -} -const _summary = new Summary(); -/** - * @deprecated use `core.summary` - */ -exports.markdownSummary = _summary; -exports.summary = _summary; -//# sourceMappingURL=summary.js.map - -/***/ }), - -/***/ 5278: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -// We use any as a valid input type -/* eslint-disable @typescript-eslint/no-explicit-any */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.toCommandProperties = exports.toCommandValue = void 0; -/** - * 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; -/** - * - * @param annotationProperties - * @returns The command properties to send with the actual annotation command - * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646 - */ -function toCommandProperties(annotationProperties) { - if (!Object.keys(annotationProperties).length) { - return {}; - } - return { - title: annotationProperties.title, - file: annotationProperties.file, - line: annotationProperties.startLine, - endLine: annotationProperties.endLine, - col: annotationProperties.startColumn, - endColumn: annotationProperties.endColumn - }; -} -exports.toCommandProperties = toCommandProperties; -//# sourceMappingURL=utils.js.map - -/***/ }), - -/***/ 1514: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -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()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getExecOutput = exports.exec = void 0; -const string_decoder_1 = __nccwpck_require__(1576); -const tr = __importStar(__nccwpck_require__(8159)); -/** - * Exec a command. - * Output will be streamed to the live console. - * Returns promise with return code - * - * @param commandLine command to execute (can include additional args). Must be correctly escaped. - * @param args optional arguments for tool. Escaping is handled by the lib. - * @param options optional exec options. See ExecOptions - * @returns Promise exit code - */ -function exec(commandLine, args, options) { - return __awaiter(this, void 0, void 0, function* () { - const commandArgs = tr.argStringToArray(commandLine); - if (commandArgs.length === 0) { - throw new Error(`Parameter 'commandLine' cannot be null or empty.`); - } - // Path to tool to execute should be first arg - const toolPath = commandArgs[0]; - args = commandArgs.slice(1).concat(args || []); - const runner = new tr.ToolRunner(toolPath, args, options); - return runner.exec(); - }); -} -exports.exec = exec; -/** - * Exec a command and get the output. - * Output will be streamed to the live console. - * Returns promise with the exit code and collected stdout and stderr - * - * @param commandLine command to execute (can include additional args). Must be correctly escaped. - * @param args optional arguments for tool. Escaping is handled by the lib. - * @param options optional exec options. See ExecOptions - * @returns Promise exit code, stdout, and stderr - */ -function getExecOutput(commandLine, args, options) { - var _a, _b; - return __awaiter(this, void 0, void 0, function* () { - let stdout = ''; - let stderr = ''; - //Using string decoder covers the case where a mult-byte character is split - const stdoutDecoder = new string_decoder_1.StringDecoder('utf8'); - const stderrDecoder = new string_decoder_1.StringDecoder('utf8'); - const originalStdoutListener = (_a = options === null || options === void 0 ? void 0 : options.listeners) === null || _a === void 0 ? void 0 : _a.stdout; - const originalStdErrListener = (_b = options === null || options === void 0 ? void 0 : options.listeners) === null || _b === void 0 ? void 0 : _b.stderr; - const stdErrListener = (data) => { - stderr += stderrDecoder.write(data); - if (originalStdErrListener) { - originalStdErrListener(data); - } - }; - const stdOutListener = (data) => { - stdout += stdoutDecoder.write(data); - if (originalStdoutListener) { - originalStdoutListener(data); - } - }; - const listeners = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.listeners), { stdout: stdOutListener, stderr: stdErrListener }); - const exitCode = yield exec(commandLine, args, Object.assign(Object.assign({}, options), { listeners })); - //flush any remaining characters - stdout += stdoutDecoder.end(); - stderr += stderrDecoder.end(); - return { - exitCode, - stdout, - stderr - }; - }); -} -exports.getExecOutput = getExecOutput; -//# sourceMappingURL=exec.js.map - -/***/ }), - -/***/ 8159: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -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()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.argStringToArray = exports.ToolRunner = void 0; -const os = __importStar(__nccwpck_require__(2037)); -const events = __importStar(__nccwpck_require__(2361)); -const child = __importStar(__nccwpck_require__(2081)); -const path = __importStar(__nccwpck_require__(1017)); -const io = __importStar(__nccwpck_require__(7436)); -const ioUtil = __importStar(__nccwpck_require__(1962)); -const timers_1 = __nccwpck_require__(9512); -/* eslint-disable @typescript-eslint/unbound-method */ -const IS_WINDOWS = process.platform === 'win32'; -/* - * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way. - */ -class ToolRunner extends events.EventEmitter { - constructor(toolPath, args, options) { - super(); - if (!toolPath) { - throw new Error("Parameter 'toolPath' cannot be null or empty."); - } - this.toolPath = toolPath; - this.args = args || []; - this.options = options || {}; - } - _debug(message) { - if (this.options.listeners && this.options.listeners.debug) { - this.options.listeners.debug(message); - } - } - _getCommandString(options, noPrefix) { - const toolPath = this._getSpawnFileName(); - const args = this._getSpawnArgs(options); - let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool - if (IS_WINDOWS) { - // Windows + cmd file - if (this._isCmdFile()) { - cmd += toolPath; - for (const a of args) { - cmd += ` ${a}`; - } - } - // Windows + verbatim - else if (options.windowsVerbatimArguments) { - cmd += `"${toolPath}"`; - for (const a of args) { - cmd += ` ${a}`; - } - } - // Windows (regular) - else { - cmd += this._windowsQuoteCmdArg(toolPath); - for (const a of args) { - cmd += ` ${this._windowsQuoteCmdArg(a)}`; - } - } - } - else { - // OSX/Linux - this can likely be improved with some form of quoting. - // creating processes on Unix is fundamentally different than Windows. - // on Unix, execvp() takes an arg array. - cmd += toolPath; - for (const a of args) { - cmd += ` ${a}`; - } - } - return cmd; - } - _processLineBuffer(data, strBuffer, onLine) { - try { - let s = strBuffer + data.toString(); - let n = s.indexOf(os.EOL); - while (n > -1) { - const line = s.substring(0, n); - onLine(line); - // the rest of the string ... - s = s.substring(n + os.EOL.length); - n = s.indexOf(os.EOL); - } - return s; - } - catch (err) { - // streaming lines to console is best effort. Don't fail a build. - this._debug(`error processing line. Failed with error ${err}`); - return ''; - } - } - _getSpawnFileName() { - if (IS_WINDOWS) { - if (this._isCmdFile()) { - return process.env['COMSPEC'] || 'cmd.exe'; - } - } - return this.toolPath; - } - _getSpawnArgs(options) { - if (IS_WINDOWS) { - if (this._isCmdFile()) { - let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`; - for (const a of this.args) { - argline += ' '; - argline += options.windowsVerbatimArguments - ? a - : this._windowsQuoteCmdArg(a); - } - argline += '"'; - return [argline]; - } - } - return this.args; - } - _endsWith(str, end) { - return str.endsWith(end); - } - _isCmdFile() { - const upperToolPath = this.toolPath.toUpperCase(); - return (this._endsWith(upperToolPath, '.CMD') || - this._endsWith(upperToolPath, '.BAT')); - } - _windowsQuoteCmdArg(arg) { - // for .exe, apply the normal quoting rules that libuv applies - if (!this._isCmdFile()) { - return this._uvQuoteCmdArg(arg); - } - // otherwise apply quoting rules specific to the cmd.exe command line parser. - // the libuv rules are generic and are not designed specifically for cmd.exe - // command line parser. - // - // for a detailed description of the cmd.exe command line parser, refer to - // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912 - // need quotes for empty arg - if (!arg) { - return '""'; - } - // determine whether the arg needs to be quoted - const cmdSpecialChars = [ - ' ', - '\t', - '&', - '(', - ')', - '[', - ']', - '{', - '}', - '^', - '=', - ';', - '!', - "'", - '+', - ',', - '`', - '~', - '|', - '<', - '>', - '"' - ]; - let needsQuotes = false; - for (const char of arg) { - if (cmdSpecialChars.some(x => x === char)) { - needsQuotes = true; - break; - } - } - // short-circuit if quotes not needed - if (!needsQuotes) { - return arg; - } - // the following quoting rules are very similar to the rules that by libuv applies. - // - // 1) wrap the string in quotes - // - // 2) double-up quotes - i.e. " => "" - // - // this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately - // doesn't work well with a cmd.exe command line. - // - // note, replacing " with "" also works well if the arg is passed to a downstream .NET console app. - // for example, the command line: - // foo.exe "myarg:""my val""" - // is parsed by a .NET console app into an arg array: - // [ "myarg:\"my val\"" ] - // which is the same end result when applying libuv quoting rules. although the actual - // command line from libuv quoting rules would look like: - // foo.exe "myarg:\"my val\"" - // - // 3) double-up slashes that precede a quote, - // e.g. hello \world => "hello \world" - // hello\"world => "hello\\""world" - // hello\\"world => "hello\\\\""world" - // hello world\ => "hello world\\" - // - // technically this is not required for a cmd.exe command line, or the batch argument parser. - // the reasons for including this as a .cmd quoting rule are: - // - // a) this is optimized for the scenario where the argument is passed from the .cmd file to an - // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule. - // - // b) it's what we've been doing previously (by deferring to node default behavior) and we - // haven't heard any complaints about that aspect. - // - // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be - // escaped when used on the command line directly - even though within a .cmd file % can be escaped - // by using %%. - // - // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts - // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing. - // - // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would - // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the - // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args - // to an external program. - // - // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file. - // % can be escaped within a .cmd file. - let reverse = '"'; - let quoteHit = true; - for (let i = arg.length; i > 0; i--) { - // walk the string in reverse - reverse += arg[i - 1]; - if (quoteHit && arg[i - 1] === '\\') { - reverse += '\\'; // double the slash - } - else if (arg[i - 1] === '"') { - quoteHit = true; - reverse += '"'; // double the quote - } - else { - quoteHit = false; - } - } - reverse += '"'; - return reverse - .split('') - .reverse() - .join(''); - } - _uvQuoteCmdArg(arg) { - // Tool runner wraps child_process.spawn() and needs to apply the same quoting as - // Node in certain cases where the undocumented spawn option windowsVerbatimArguments - // is used. - // - // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV, - // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details), - // pasting copyright notice from Node within this function: - // - // Copyright Joyent, Inc. and other Node contributors. All rights reserved. - // - // Permission is hereby granted, free of charge, to any person obtaining a copy - // of this software and associated documentation files (the "Software"), to - // deal in the Software without restriction, including without limitation the - // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - // sell copies of the Software, and to permit persons to whom the Software is - // furnished to do so, subject to the following conditions: - // - // The above copyright notice and this permission notice shall be included in - // all copies or substantial portions of the Software. - // - // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - // IN THE SOFTWARE. - if (!arg) { - // Need double quotation for empty argument - return '""'; - } - if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) { - // No quotation needed - return arg; - } - if (!arg.includes('"') && !arg.includes('\\')) { - // No embedded double quotes or backslashes, so I can just wrap - // quote marks around the whole thing. - return `"${arg}"`; - } - // Expected input/output: - // input : hello"world - // output: "hello\"world" - // input : hello""world - // output: "hello\"\"world" - // input : hello\world - // output: hello\world - // input : hello\\world - // output: hello\\world - // input : hello\"world - // output: "hello\\\"world" - // input : hello\\"world - // output: "hello\\\\\"world" - // input : hello world\ - // output: "hello world\\" - note the comment in libuv actually reads "hello world\" - // but it appears the comment is wrong, it should be "hello world\\" - let reverse = '"'; - let quoteHit = true; - for (let i = arg.length; i > 0; i--) { - // walk the string in reverse - reverse += arg[i - 1]; - if (quoteHit && arg[i - 1] === '\\') { - reverse += '\\'; - } - else if (arg[i - 1] === '"') { - quoteHit = true; - reverse += '\\'; - } - else { - quoteHit = false; - } - } - reverse += '"'; - return reverse - .split('') - .reverse() - .join(''); - } - _cloneExecOptions(options) { - options = options || {}; - const result = { - cwd: options.cwd || process.cwd(), - env: options.env || process.env, - silent: options.silent || false, - windowsVerbatimArguments: options.windowsVerbatimArguments || false, - failOnStdErr: options.failOnStdErr || false, - ignoreReturnCode: options.ignoreReturnCode || false, - delay: options.delay || 10000 - }; - result.outStream = options.outStream || process.stdout; - result.errStream = options.errStream || process.stderr; - return result; - } - _getSpawnOptions(options, toolPath) { - options = options || {}; - const result = {}; - result.cwd = options.cwd; - result.env = options.env; - result['windowsVerbatimArguments'] = - options.windowsVerbatimArguments || this._isCmdFile(); - if (options.windowsVerbatimArguments) { - result.argv0 = `"${toolPath}"`; - } - return result; - } - /** - * Exec a tool. - * Output will be streamed to the live console. - * Returns promise with return code - * - * @param tool path to tool to exec - * @param options optional exec options. See ExecOptions - * @returns number - */ - exec() { - 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) => __awaiter(this, void 0, void 0, function* () { - this._debug(`exec tool: ${this.toolPath}`); - this._debug('arguments:'); - for (const arg of this.args) { - this._debug(` ${arg}`); - } - const optionsNonNull = this._cloneExecOptions(this.options); - if (!optionsNonNull.silent && optionsNonNull.outStream) { - optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL); - } - const state = new ExecState(optionsNonNull, this.toolPath); - state.on('debug', (message) => { - this._debug(message); - }); - if (this.options.cwd && !(yield ioUtil.exists(this.options.cwd))) { - return reject(new Error(`The cwd: ${this.options.cwd} does not exist!`)); - } - const fileName = this._getSpawnFileName(); - const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); - let stdbuffer = ''; - if (cp.stdout) { - cp.stdout.on('data', (data) => { - if (this.options.listeners && this.options.listeners.stdout) { - this.options.listeners.stdout(data); - } - if (!optionsNonNull.silent && optionsNonNull.outStream) { - optionsNonNull.outStream.write(data); - } - stdbuffer = this._processLineBuffer(data, stdbuffer, (line) => { - if (this.options.listeners && this.options.listeners.stdline) { - this.options.listeners.stdline(line); - } - }); - }); - } - let errbuffer = ''; - if (cp.stderr) { - cp.stderr.on('data', (data) => { - state.processStderr = true; - if (this.options.listeners && this.options.listeners.stderr) { - this.options.listeners.stderr(data); - } - if (!optionsNonNull.silent && - optionsNonNull.errStream && - optionsNonNull.outStream) { - const s = optionsNonNull.failOnStdErr - ? optionsNonNull.errStream - : optionsNonNull.outStream; - s.write(data); - } - errbuffer = this._processLineBuffer(data, errbuffer, (line) => { - if (this.options.listeners && this.options.listeners.errline) { - this.options.listeners.errline(line); - } - }); - }); - } - cp.on('error', (err) => { - state.processError = err.message; - state.processExited = true; - state.processClosed = true; - state.CheckComplete(); - }); - cp.on('exit', (code) => { - state.processExitCode = code; - state.processExited = true; - this._debug(`Exit code ${code} received from tool '${this.toolPath}'`); - state.CheckComplete(); - }); - cp.on('close', (code) => { - state.processExitCode = code; - state.processExited = true; - state.processClosed = true; - this._debug(`STDIO streams have closed for tool '${this.toolPath}'`); - state.CheckComplete(); - }); - state.on('done', (error, exitCode) => { - if (stdbuffer.length > 0) { - this.emit('stdline', stdbuffer); - } - if (errbuffer.length > 0) { - this.emit('errline', errbuffer); - } - cp.removeAllListeners(); - if (error) { - reject(error); - } - else { - resolve(exitCode); - } - }); - if (this.options.input) { - if (!cp.stdin) { - throw new Error('child process missing stdin'); - } - cp.stdin.end(this.options.input); - } - })); - }); - } -} -exports.ToolRunner = ToolRunner; -/** - * Convert an arg string to an array of args. Handles escaping - * - * @param argString string of arguments - * @returns string[] array of arguments - */ -function argStringToArray(argString) { - const args = []; - let inQuotes = false; - let escaped = false; - let arg = ''; - function append(c) { - // we only escape double quotes. - if (escaped && c !== '"') { - arg += '\\'; - } - arg += c; - escaped = false; - } - for (let i = 0; i < argString.length; i++) { - const c = argString.charAt(i); - if (c === '"') { - if (!escaped) { - inQuotes = !inQuotes; - } - else { - append(c); - } - continue; - } - if (c === '\\' && escaped) { - append(c); - continue; - } - if (c === '\\' && inQuotes) { - escaped = true; - continue; - } - if (c === ' ' && !inQuotes) { - if (arg.length > 0) { - args.push(arg); - arg = ''; - } - continue; - } - append(c); - } - if (arg.length > 0) { - args.push(arg.trim()); - } - return args; -} -exports.argStringToArray = argStringToArray; -class ExecState extends events.EventEmitter { - constructor(options, toolPath) { - super(); - this.processClosed = false; // tracks whether the process has exited and stdio is closed - this.processError = ''; - this.processExitCode = 0; - this.processExited = false; // tracks whether the process has exited - this.processStderr = false; // tracks whether stderr was written to - this.delay = 10000; // 10 seconds - this.done = false; - this.timeout = null; - if (!toolPath) { - throw new Error('toolPath must not be empty'); - } - this.options = options; - this.toolPath = toolPath; - if (options.delay) { - this.delay = options.delay; - } - } - CheckComplete() { - if (this.done) { - return; - } - if (this.processClosed) { - this._setResult(); - } - else if (this.processExited) { - this.timeout = timers_1.setTimeout(ExecState.HandleTimeout, this.delay, this); - } - } - _debug(message) { - this.emit('debug', message); - } - _setResult() { - // determine whether there is an error - let error; - if (this.processExited) { - if (this.processError) { - error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`); - } - else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) { - error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`); - } - else if (this.processStderr && this.options.failOnStdErr) { - error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`); - } - } - // clear the timeout - if (this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } - this.done = true; - this.emit('done', error, this.processExitCode); - } - static HandleTimeout(state) { - if (state.done) { - return; - } - if (!state.processClosed && state.processExited) { - const message = `The STDIO streams did not close within ${state.delay / - 1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`; - state._debug(message); - } - state._setResult(); - } -} -//# sourceMappingURL=toolrunner.js.map - -/***/ }), - -/***/ 5526: -/***/ (function(__unused_webpack_module, exports) { - -"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()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0; -class BasicCredentialHandler { - constructor(username, password) { - this.username = username; - this.password = password; - } - prepareRequest(options) { - if (!options.headers) { - throw Error('The request has no headers'); - } - options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`; - } - // This handler cannot handle 401 - canHandleAuthentication() { - return false; - } - handleAuthentication() { - return __awaiter(this, void 0, void 0, function* () { - throw new Error('not implemented'); - }); - } -} -exports.BasicCredentialHandler = BasicCredentialHandler; -class BearerCredentialHandler { - constructor(token) { - this.token = token; - } - // currently implements pre-authorization - // TODO: support preAuth = false where it hooks on 401 - prepareRequest(options) { - if (!options.headers) { - throw Error('The request has no headers'); - } - options.headers['Authorization'] = `Bearer ${this.token}`; - } - // This handler cannot handle 401 - canHandleAuthentication() { - return false; - } - handleAuthentication() { - return __awaiter(this, void 0, void 0, function* () { - throw new Error('not implemented'); - }); - } -} -exports.BearerCredentialHandler = BearerCredentialHandler; -class PersonalAccessTokenCredentialHandler { - constructor(token) { - this.token = token; - } - // currently implements pre-authorization - // TODO: support preAuth = false where it hooks on 401 - prepareRequest(options) { - if (!options.headers) { - throw Error('The request has no headers'); - } - options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`; - } - // This handler cannot handle 401 - canHandleAuthentication() { - return false; - } - handleAuthentication() { - return __awaiter(this, void 0, void 0, function* () { - throw new Error('not implemented'); - }); - } -} -exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; -//# sourceMappingURL=auth.js.map - -/***/ }), - -/***/ 6255: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"use strict"; - -/* eslint-disable @typescript-eslint/no-explicit-any */ -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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -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()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0; -const http = __importStar(__nccwpck_require__(3685)); -const https = __importStar(__nccwpck_require__(5687)); -const pm = __importStar(__nccwpck_require__(9835)); -const tunnel = __importStar(__nccwpck_require__(4294)); -var HttpCodes; -(function (HttpCodes) { - HttpCodes[HttpCodes["OK"] = 200] = "OK"; - HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; - HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; - HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; - HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; - HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; - HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; - HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; - HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; - HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; - HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; - HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; - HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; - HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; - HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; - HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; - HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; - HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; - HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; - HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; - HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; - HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; - HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; - HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; - HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; - HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; - HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; -})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); -var Headers; -(function (Headers) { - Headers["Accept"] = "accept"; - Headers["ContentType"] = "content-type"; -})(Headers = exports.Headers || (exports.Headers = {})); -var MediaTypes; -(function (MediaTypes) { - MediaTypes["ApplicationJson"] = "application/json"; -})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); -/** - * Returns the proxy URL, depending upon the supplied url and proxy environment variables. - * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com - */ -function getProxyUrl(serverUrl) { - const proxyUrl = pm.getProxyUrl(new URL(serverUrl)); - return proxyUrl ? proxyUrl.href : ''; -} -exports.getProxyUrl = getProxyUrl; -const HttpRedirectCodes = [ - HttpCodes.MovedPermanently, - HttpCodes.ResourceMoved, - HttpCodes.SeeOther, - HttpCodes.TemporaryRedirect, - HttpCodes.PermanentRedirect -]; -const HttpResponseRetryCodes = [ - HttpCodes.BadGateway, - HttpCodes.ServiceUnavailable, - HttpCodes.GatewayTimeout -]; -const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; -const ExponentialBackoffCeiling = 10; -const ExponentialBackoffTimeSlice = 5; -class HttpClientError extends Error { - constructor(message, statusCode) { - super(message); - this.name = 'HttpClientError'; - this.statusCode = statusCode; - Object.setPrototypeOf(this, HttpClientError.prototype); - } -} -exports.HttpClientError = HttpClientError; -class HttpClientResponse { - constructor(message) { - this.message = message; - } - readBody() { - return __awaiter(this, void 0, void 0, function* () { - return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { - let output = Buffer.alloc(0); - this.message.on('data', (chunk) => { - output = Buffer.concat([output, chunk]); - }); - this.message.on('end', () => { - resolve(output.toString()); - }); - })); - }); - } -} -exports.HttpClientResponse = HttpClientResponse; -function isHttps(requestUrl) { - const parsedUrl = new URL(requestUrl); - return parsedUrl.protocol === 'https:'; -} -exports.isHttps = isHttps; -class HttpClient { - constructor(userAgent, handlers, requestOptions) { - this._ignoreSslError = false; - this._allowRedirects = true; - this._allowRedirectDowngrade = false; - this._maxRedirects = 50; - this._allowRetries = false; - this._maxRetries = 1; - this._keepAlive = false; - this._disposed = false; - this.userAgent = userAgent; - this.handlers = handlers || []; - this.requestOptions = requestOptions; - if (requestOptions) { - if (requestOptions.ignoreSslError != null) { - this._ignoreSslError = requestOptions.ignoreSslError; - } - this._socketTimeout = requestOptions.socketTimeout; - if (requestOptions.allowRedirects != null) { - this._allowRedirects = requestOptions.allowRedirects; - } - if (requestOptions.allowRedirectDowngrade != null) { - this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; - } - if (requestOptions.maxRedirects != null) { - this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); - } - if (requestOptions.keepAlive != null) { - this._keepAlive = requestOptions.keepAlive; - } - if (requestOptions.allowRetries != null) { - this._allowRetries = requestOptions.allowRetries; - } - if (requestOptions.maxRetries != null) { - this._maxRetries = requestOptions.maxRetries; - } - } - } - options(requestUrl, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); - }); - } - get(requestUrl, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('GET', requestUrl, null, additionalHeaders || {}); - }); - } - del(requestUrl, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('DELETE', requestUrl, null, additionalHeaders || {}); - }); - } - post(requestUrl, data, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('POST', requestUrl, data, additionalHeaders || {}); - }); - } - patch(requestUrl, data, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('PATCH', requestUrl, data, additionalHeaders || {}); - }); - } - put(requestUrl, data, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('PUT', requestUrl, data, additionalHeaders || {}); - }); - } - head(requestUrl, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('HEAD', requestUrl, null, additionalHeaders || {}); - }); - } - sendStream(verb, requestUrl, stream, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request(verb, requestUrl, stream, additionalHeaders); - }); - } - /** - * Gets a typed object from an endpoint - * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise - */ - getJson(requestUrl, additionalHeaders = {}) { - return __awaiter(this, void 0, void 0, function* () { - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - const res = yield this.get(requestUrl, additionalHeaders); - return this._processResponse(res, this.requestOptions); - }); - } - postJson(requestUrl, obj, additionalHeaders = {}) { - return __awaiter(this, void 0, void 0, function* () { - const data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - const res = yield this.post(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); - }); - } - putJson(requestUrl, obj, additionalHeaders = {}) { - return __awaiter(this, void 0, void 0, function* () { - const data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - const res = yield this.put(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); - }); - } - patchJson(requestUrl, obj, additionalHeaders = {}) { - return __awaiter(this, void 0, void 0, function* () { - const data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - const res = yield this.patch(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); - }); - } - /** - * Makes a raw http request. - * All other methods such as get, post, patch, and request ultimately call this. - * Prefer get, del, post and patch - */ - request(verb, requestUrl, data, headers) { - return __awaiter(this, void 0, void 0, function* () { - if (this._disposed) { - throw new Error('Client has already been disposed.'); - } - const parsedUrl = new URL(requestUrl); - let info = this._prepareRequest(verb, parsedUrl, headers); - // Only perform retries on reads since writes may not be idempotent. - const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) - ? this._maxRetries + 1 - : 1; - let numTries = 0; - let response; - do { - response = yield this.requestRaw(info, data); - // Check if it's an authentication challenge - if (response && - response.message && - response.message.statusCode === HttpCodes.Unauthorized) { - let authenticationHandler; - for (const handler of this.handlers) { - if (handler.canHandleAuthentication(response)) { - authenticationHandler = handler; - break; - } - } - if (authenticationHandler) { - return authenticationHandler.handleAuthentication(this, info, data); - } - else { - // We have received an unauthorized response but have no handlers to handle it. - // Let the response return to the caller. - return response; - } - } - let redirectsRemaining = this._maxRedirects; - while (response.message.statusCode && - HttpRedirectCodes.includes(response.message.statusCode) && - this._allowRedirects && - redirectsRemaining > 0) { - const redirectUrl = response.message.headers['location']; - if (!redirectUrl) { - // if there's no location to redirect to, we won't - break; - } - const parsedRedirectUrl = new URL(redirectUrl); - if (parsedUrl.protocol === 'https:' && - parsedUrl.protocol !== parsedRedirectUrl.protocol && - !this._allowRedirectDowngrade) { - throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); - } - // we need to finish reading the response before reassigning response - // which will leak the open socket. - yield response.readBody(); - // strip authorization header if redirected to a different hostname - if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { - for (const header in headers) { - // header names are case insensitive - if (header.toLowerCase() === 'authorization') { - delete headers[header]; - } - } - } - // let's make the request with the new redirectUrl - info = this._prepareRequest(verb, parsedRedirectUrl, headers); - response = yield this.requestRaw(info, data); - redirectsRemaining--; - } - if (!response.message.statusCode || - !HttpResponseRetryCodes.includes(response.message.statusCode)) { - // If not a retry code, return immediately instead of retrying - return response; - } - numTries += 1; - if (numTries < maxTries) { - yield response.readBody(); - yield this._performExponentialBackoff(numTries); - } - } while (numTries < maxTries); - return response; - }); - } - /** - * Needs to be called if keepAlive is set to true in request options. - */ - dispose() { - if (this._agent) { - this._agent.destroy(); - } - this._disposed = true; - } - /** - * Raw request. - * @param info - * @param data - */ - requestRaw(info, data) { - return __awaiter(this, void 0, void 0, function* () { - return new Promise((resolve, reject) => { - function callbackForResult(err, res) { - if (err) { - reject(err); - } - else if (!res) { - // If `err` is not passed, then `res` must be passed. - reject(new Error('Unknown error')); - } - else { - resolve(res); - } - } - this.requestRawWithCallback(info, data, callbackForResult); - }); - }); - } - /** - * Raw request with callback. - * @param info - * @param data - * @param onResult - */ - requestRawWithCallback(info, data, onResult) { - if (typeof data === 'string') { - if (!info.options.headers) { - info.options.headers = {}; - } - info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); - } - let callbackCalled = false; - function handleResult(err, res) { - if (!callbackCalled) { - callbackCalled = true; - onResult(err, res); - } - } - const req = info.httpModule.request(info.options, (msg) => { - const res = new HttpClientResponse(msg); - handleResult(undefined, res); - }); - let socket; - req.on('socket', sock => { - socket = sock; - }); - // If we ever get disconnected, we want the socket to timeout eventually - req.setTimeout(this._socketTimeout || 3 * 60000, () => { - if (socket) { - socket.end(); - } - handleResult(new Error(`Request timeout: ${info.options.path}`)); - }); - req.on('error', function (err) { - // err has statusCode property - // res should have headers - handleResult(err); - }); - if (data && typeof data === 'string') { - req.write(data, 'utf8'); - } - if (data && typeof data !== 'string') { - data.on('close', function () { - req.end(); - }); - data.pipe(req); - } - else { - req.end(); - } - } - /** - * Gets an http agent. This function is useful when you need an http agent that handles - * routing through a proxy server - depending upon the url and proxy environment variables. - * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com - */ - getAgent(serverUrl) { - const parsedUrl = new URL(serverUrl); - return this._getAgent(parsedUrl); - } - _prepareRequest(method, requestUrl, headers) { - const info = {}; - info.parsedUrl = requestUrl; - const usingSsl = info.parsedUrl.protocol === 'https:'; - info.httpModule = usingSsl ? https : http; - const defaultPort = usingSsl ? 443 : 80; - info.options = {}; - info.options.host = info.parsedUrl.hostname; - info.options.port = info.parsedUrl.port - ? parseInt(info.parsedUrl.port) - : defaultPort; - info.options.path = - (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); - info.options.method = method; - info.options.headers = this._mergeHeaders(headers); - if (this.userAgent != null) { - info.options.headers['user-agent'] = this.userAgent; - } - info.options.agent = this._getAgent(info.parsedUrl); - // gives handlers an opportunity to participate - if (this.handlers) { - for (const handler of this.handlers) { - handler.prepareRequest(info.options); - } - } - return info; - } - _mergeHeaders(headers) { - if (this.requestOptions && this.requestOptions.headers) { - return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {})); - } - return lowercaseKeys(headers || {}); - } - _getExistingOrDefaultHeader(additionalHeaders, header, _default) { - let clientHeader; - if (this.requestOptions && this.requestOptions.headers) { - clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; - } - return additionalHeaders[header] || clientHeader || _default; - } - _getAgent(parsedUrl) { - let agent; - const proxyUrl = pm.getProxyUrl(parsedUrl); - const useProxy = proxyUrl && proxyUrl.hostname; - if (this._keepAlive && useProxy) { - agent = this._proxyAgent; - } - if (this._keepAlive && !useProxy) { - agent = this._agent; - } - // if agent is already assigned use that agent. - if (agent) { - return agent; - } - const usingSsl = parsedUrl.protocol === 'https:'; - let maxSockets = 100; - if (this.requestOptions) { - maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; - } - // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis. - if (proxyUrl && proxyUrl.hostname) { - const agentOptions = { - maxSockets, - keepAlive: this._keepAlive, - proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && { - proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` - })), { host: proxyUrl.hostname, port: proxyUrl.port }) - }; - let tunnelAgent; - const overHttps = proxyUrl.protocol === 'https:'; - if (usingSsl) { - tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; - } - else { - tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; - } - agent = tunnelAgent(agentOptions); - this._proxyAgent = agent; - } - // if reusing agent across request and tunneling agent isn't assigned create a new agent - if (this._keepAlive && !agent) { - const options = { keepAlive: this._keepAlive, maxSockets }; - agent = usingSsl ? new https.Agent(options) : new http.Agent(options); - this._agent = agent; - } - // if not using private agent and tunnel agent isn't setup then use global agent - if (!agent) { - agent = usingSsl ? https.globalAgent : http.globalAgent; - } - if (usingSsl && this._ignoreSslError) { - // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process - // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options - // we have to cast it to any and change it directly - agent.options = Object.assign(agent.options || {}, { - rejectUnauthorized: false - }); - } - return agent; - } - _performExponentialBackoff(retryNumber) { - return __awaiter(this, void 0, void 0, function* () { - retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); - const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); - return new Promise(resolve => setTimeout(() => resolve(), ms)); - }); - } - _processResponse(res, options) { - return __awaiter(this, void 0, void 0, function* () { - return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { - const statusCode = res.message.statusCode || 0; - const response = { - statusCode, - result: null, - headers: {} - }; - // not found leads to null obj returned - if (statusCode === HttpCodes.NotFound) { - resolve(response); - } - // get the result from the body - function dateTimeDeserializer(key, value) { - if (typeof value === 'string') { - const a = new Date(value); - if (!isNaN(a.valueOf())) { - return a; - } - } - return value; - } - let obj; - let contents; - try { - contents = yield res.readBody(); - if (contents && contents.length > 0) { - if (options && options.deserializeDates) { - obj = JSON.parse(contents, dateTimeDeserializer); - } - else { - obj = JSON.parse(contents); - } - response.result = obj; - } - response.headers = res.message.headers; - } - catch (err) { - // Invalid resource (contents not json); leaving result obj null - } - // note that 3xx redirects are handled by the http layer. - if (statusCode > 299) { - let msg; - // if exception/error in body, attempt to get better error - if (obj && obj.message) { - msg = obj.message; - } - else if (contents && contents.length > 0) { - // it may be the case that the exception is in the body message as string - msg = contents; - } - else { - msg = `Failed request: (${statusCode})`; - } - const err = new HttpClientError(msg, statusCode); - err.result = response.result; - reject(err); - } - else { - resolve(response); - } - })); - }); - } -} -exports.HttpClient = HttpClient; -const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); -//# sourceMappingURL=index.js.map - -/***/ }), - -/***/ 9835: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.checkBypass = exports.getProxyUrl = void 0; -function getProxyUrl(reqUrl) { - const usingSsl = reqUrl.protocol === 'https:'; - if (checkBypass(reqUrl)) { - return undefined; - } - const proxyVar = (() => { - if (usingSsl) { - return process.env['https_proxy'] || process.env['HTTPS_PROXY']; - } - else { - return process.env['http_proxy'] || process.env['HTTP_PROXY']; - } - })(); - if (proxyVar) { - return new URL(proxyVar); - } - else { - return undefined; - } -} -exports.getProxyUrl = getProxyUrl; -function checkBypass(reqUrl) { - if (!reqUrl.hostname) { - return false; - } - const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; - if (!noProxy) { - return false; - } - // Determine the request port - let reqPort; - if (reqUrl.port) { - reqPort = Number(reqUrl.port); - } - else if (reqUrl.protocol === 'http:') { - reqPort = 80; - } - else if (reqUrl.protocol === 'https:') { - reqPort = 443; - } - // Format the request hostname and hostname with port - const upperReqHosts = [reqUrl.hostname.toUpperCase()]; - if (typeof reqPort === 'number') { - upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); - } - // Compare request host against noproxy - for (const upperNoProxyItem of noProxy - .split(',') - .map(x => x.trim().toUpperCase()) - .filter(x => x)) { - if (upperReqHosts.some(x => x === upperNoProxyItem)) { - return true; - } - } - return false; -} -exports.checkBypass = checkBypass; -//# sourceMappingURL=proxy.js.map - -/***/ }), - -/***/ 1962: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -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 _a; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getCmdPath = exports.tryGetExecutablePath = exports.isRooted = exports.isDirectory = exports.exists = exports.IS_WINDOWS = exports.unlink = exports.symlink = exports.stat = exports.rmdir = exports.rename = exports.readlink = exports.readdir = exports.mkdir = exports.lstat = exports.copyFile = exports.chmod = void 0; -const fs = __importStar(__nccwpck_require__(7147)); -const path = __importStar(__nccwpck_require__(1017)); -_a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink; -exports.IS_WINDOWS = process.platform === 'win32'; -function exists(fsPath) { - return __awaiter(this, void 0, void 0, function* () { - try { - yield exports.stat(fsPath); - } - catch (err) { - if (err.code === 'ENOENT') { - return false; - } - throw err; - } - return true; - }); -} -exports.exists = exists; -function isDirectory(fsPath, useStat = false) { - return __awaiter(this, void 0, void 0, function* () { - const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath); - return stats.isDirectory(); - }); -} -exports.isDirectory = isDirectory; -/** - * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like: - * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases). - */ -function isRooted(p) { - p = normalizeSeparators(p); - if (!p) { - throw new Error('isRooted() parameter "p" cannot be empty'); - } - if (exports.IS_WINDOWS) { - return (p.startsWith('\\') || /^[A-Z]:/i.test(p) // e.g. \ or \hello or \\hello - ); // e.g. C: or C:\hello - } - return p.startsWith('/'); -} -exports.isRooted = isRooted; -/** - * Best effort attempt to determine whether a file exists and is executable. - * @param filePath file path to check - * @param extensions additional file extensions to try - * @return if file exists and is executable, returns the file path. otherwise empty string. - */ -function tryGetExecutablePath(filePath, extensions) { - return __awaiter(this, void 0, void 0, function* () { - let stats = undefined; - try { - // test file exists - stats = yield exports.stat(filePath); - } - catch (err) { - if (err.code !== 'ENOENT') { - // eslint-disable-next-line no-console - console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); - } - } - if (stats && stats.isFile()) { - if (exports.IS_WINDOWS) { - // on Windows, test for valid extension - const upperExt = path.extname(filePath).toUpperCase(); - if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) { - return filePath; - } - } - else { - if (isUnixExecutable(stats)) { - return filePath; - } - } - } - // try each extension - const originalFilePath = filePath; - for (const extension of extensions) { - filePath = originalFilePath + extension; - stats = undefined; - try { - stats = yield exports.stat(filePath); - } - catch (err) { - if (err.code !== 'ENOENT') { - // eslint-disable-next-line no-console - console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); - } - } - if (stats && stats.isFile()) { - if (exports.IS_WINDOWS) { - // preserve the case of the actual file (since an extension was appended) - try { - const directory = path.dirname(filePath); - const upperName = path.basename(filePath).toUpperCase(); - for (const actualName of yield exports.readdir(directory)) { - if (upperName === actualName.toUpperCase()) { - filePath = path.join(directory, actualName); - break; - } - } - } - catch (err) { - // eslint-disable-next-line no-console - console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`); - } - return filePath; - } - else { - if (isUnixExecutable(stats)) { - return filePath; - } - } - } - } - return ''; - }); -} -exports.tryGetExecutablePath = tryGetExecutablePath; -function normalizeSeparators(p) { - p = p || ''; - if (exports.IS_WINDOWS) { - // convert slashes on Windows - p = p.replace(/\//g, '\\'); - // remove redundant slashes - return p.replace(/\\\\+/g, '\\'); - } - // remove redundant slashes - return p.replace(/\/\/+/g, '/'); -} -// on Mac/Linux, test the execute bit -// R W X R W X R W X -// 256 128 64 32 16 8 4 2 1 -function isUnixExecutable(stats) { - return ((stats.mode & 1) > 0 || - ((stats.mode & 8) > 0 && stats.gid === process.getgid()) || - ((stats.mode & 64) > 0 && stats.uid === process.getuid())); -} -// Get the path of cmd.exe in windows -function getCmdPath() { - var _a; - return (_a = process.env['COMSPEC']) !== null && _a !== void 0 ? _a : `cmd.exe`; -} -exports.getCmdPath = getCmdPath; -//# sourceMappingURL=io-util.js.map - -/***/ }), - -/***/ 7436: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -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()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.findInPath = exports.which = exports.mkdirP = exports.rmRF = exports.mv = exports.cp = void 0; -const assert_1 = __nccwpck_require__(9491); -const childProcess = __importStar(__nccwpck_require__(2081)); -const path = __importStar(__nccwpck_require__(1017)); -const util_1 = __nccwpck_require__(3837); -const ioUtil = __importStar(__nccwpck_require__(1962)); -const exec = util_1.promisify(childProcess.exec); -const execFile = util_1.promisify(childProcess.execFile); -/** - * Copies a file or folder. - * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js - * - * @param source source path - * @param dest destination path - * @param options optional. See CopyOptions. - */ -function cp(source, dest, options = {}) { - return __awaiter(this, void 0, void 0, function* () { - const { force, recursive, copySourceDirectory } = readCopyOptions(options); - const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null; - // Dest is an existing file, but not forcing - if (destStat && destStat.isFile() && !force) { - return; - } - // If dest is an existing directory, should copy inside. - const newDest = destStat && destStat.isDirectory() && copySourceDirectory - ? path.join(dest, path.basename(source)) - : dest; - if (!(yield ioUtil.exists(source))) { - throw new Error(`no such file or directory: ${source}`); - } - const sourceStat = yield ioUtil.stat(source); - if (sourceStat.isDirectory()) { - if (!recursive) { - throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`); - } - else { - yield cpDirRecursive(source, newDest, 0, force); - } - } - else { - if (path.relative(source, newDest) === '') { - // a file cannot be copied to itself - throw new Error(`'${newDest}' and '${source}' are the same file`); - } - yield copyFile(source, newDest, force); - } - }); -} -exports.cp = cp; -/** - * Moves a path. - * - * @param source source path - * @param dest destination path - * @param options optional. See MoveOptions. - */ -function mv(source, dest, options = {}) { - return __awaiter(this, void 0, void 0, function* () { - if (yield ioUtil.exists(dest)) { - let destExists = true; - if (yield ioUtil.isDirectory(dest)) { - // If dest is directory copy src into dest - dest = path.join(dest, path.basename(source)); - destExists = yield ioUtil.exists(dest); - } - if (destExists) { - if (options.force == null || options.force) { - yield rmRF(dest); - } - else { - throw new Error('Destination already exists'); - } - } - } - yield mkdirP(path.dirname(dest)); - yield ioUtil.rename(source, dest); - }); -} -exports.mv = mv; -/** - * Remove a path recursively with force - * - * @param inputPath path to remove - */ -function rmRF(inputPath) { - return __awaiter(this, void 0, void 0, function* () { - if (ioUtil.IS_WINDOWS) { - // Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another - // program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del. - // Check for invalid characters - // https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file - if (/[*"<>|]/.test(inputPath)) { - throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows'); - } - try { - const cmdPath = ioUtil.getCmdPath(); - if (yield ioUtil.isDirectory(inputPath, true)) { - yield exec(`${cmdPath} /s /c "rd /s /q "%inputPath%""`, { - env: { inputPath } - }); - } - else { - yield exec(`${cmdPath} /s /c "del /f /a "%inputPath%""`, { - env: { inputPath } - }); - } - } - catch (err) { - // if you try to delete a file that doesn't exist, desired result is achieved - // other errors are valid - if (err.code !== 'ENOENT') - throw err; - } - // Shelling out fails to remove a symlink folder with missing source, this unlink catches that - try { - yield ioUtil.unlink(inputPath); - } - catch (err) { - // if you try to delete a file that doesn't exist, desired result is achieved - // other errors are valid - if (err.code !== 'ENOENT') - throw err; - } - } - else { - let isDir = false; - try { - isDir = yield ioUtil.isDirectory(inputPath); - } - catch (err) { - // if you try to delete a file that doesn't exist, desired result is achieved - // other errors are valid - if (err.code !== 'ENOENT') - throw err; - return; - } - if (isDir) { - yield execFile(`rm`, [`-rf`, `${inputPath}`]); - } - else { - yield ioUtil.unlink(inputPath); - } - } - }); -} -exports.rmRF = rmRF; -/** - * Make a directory. Creates the full path with folders in between - * Will throw if it fails - * - * @param fsPath path to create - * @returns Promise - */ -function mkdirP(fsPath) { - return __awaiter(this, void 0, void 0, function* () { - assert_1.ok(fsPath, 'a path argument must be provided'); - yield ioUtil.mkdir(fsPath, { recursive: true }); - }); -} -exports.mkdirP = mkdirP; -/** - * Returns path of a tool had the tool actually been invoked. Resolves via paths. - * If you check and the tool does not exist, it will throw. - * - * @param tool name of the tool - * @param check whether to check if tool exists - * @returns Promise path to tool - */ -function which(tool, check) { - return __awaiter(this, void 0, void 0, function* () { - if (!tool) { - throw new Error("parameter 'tool' is required"); - } - // recursive when check=true - if (check) { - const result = yield which(tool, false); - if (!result) { - if (ioUtil.IS_WINDOWS) { - throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`); - } - else { - throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`); - } - } - return result; - } - const matches = yield findInPath(tool); - if (matches && matches.length > 0) { - return matches[0]; - } - return ''; - }); -} -exports.which = which; -/** - * Returns a list of all occurrences of the given tool on the system path. - * - * @returns Promise the paths of the tool - */ -function findInPath(tool) { - return __awaiter(this, void 0, void 0, function* () { - if (!tool) { - throw new Error("parameter 'tool' is required"); - } - // build the list of extensions to try - const extensions = []; - if (ioUtil.IS_WINDOWS && process.env['PATHEXT']) { - for (const extension of process.env['PATHEXT'].split(path.delimiter)) { - if (extension) { - extensions.push(extension); - } - } - } - // if it's rooted, return it if exists. otherwise return empty. - if (ioUtil.isRooted(tool)) { - const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions); - if (filePath) { - return [filePath]; - } - return []; - } - // if any path separators, return empty - if (tool.includes(path.sep)) { - return []; - } - // build the list of directories - // - // Note, technically "where" checks the current directory on Windows. From a toolkit perspective, - // it feels like we should not do this. Checking the current directory seems like more of a use - // case of a shell, and the which() function exposed by the toolkit should strive for consistency - // across platforms. - const directories = []; - if (process.env.PATH) { - for (const p of process.env.PATH.split(path.delimiter)) { - if (p) { - directories.push(p); - } - } - } - // find all matches - const matches = []; - for (const directory of directories) { - const filePath = yield ioUtil.tryGetExecutablePath(path.join(directory, tool), extensions); - if (filePath) { - matches.push(filePath); - } - } - return matches; - }); -} -exports.findInPath = findInPath; -function readCopyOptions(options) { - const force = options.force == null ? true : options.force; - const recursive = Boolean(options.recursive); - const copySourceDirectory = options.copySourceDirectory == null - ? true - : Boolean(options.copySourceDirectory); - return { force, recursive, copySourceDirectory }; -} -function cpDirRecursive(sourceDir, destDir, currentDepth, force) { - return __awaiter(this, void 0, void 0, function* () { - // Ensure there is not a run away recursive copy - if (currentDepth >= 255) - return; - currentDepth++; - yield mkdirP(destDir); - const files = yield ioUtil.readdir(sourceDir); - for (const fileName of files) { - const srcFile = `${sourceDir}/${fileName}`; - const destFile = `${destDir}/${fileName}`; - const srcFileStat = yield ioUtil.lstat(srcFile); - if (srcFileStat.isDirectory()) { - // Recurse - yield cpDirRecursive(srcFile, destFile, currentDepth, force); - } - else { - yield copyFile(srcFile, destFile, force); - } - } - // Change the mode for the newly created directory - yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode); - }); -} -// Buffered file copy -function copyFile(srcFile, destFile, force) { - return __awaiter(this, void 0, void 0, function* () { - if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) { - // unlink/re-link it - try { - yield ioUtil.lstat(destFile); - yield ioUtil.unlink(destFile); - } - catch (e) { - // Try to override file permission - if (e.code === 'EPERM') { - yield ioUtil.chmod(destFile, '0666'); - yield ioUtil.unlink(destFile); - } - // other errors = it doesn't exist, no work to do - } - // Copy over symlink - const symlinkFull = yield ioUtil.readlink(srcFile); - yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null); - } - else if (!(yield ioUtil.exists(destFile)) || force) { - yield ioUtil.copyFile(srcFile, destFile); - } - }); -} -//# sourceMappingURL=io.js.map - -/***/ }), - -/***/ 2473: -/***/ (function(module, exports, __nccwpck_require__) { - -"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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -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()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports._readLinuxVersionFile = exports._getOsVersion = exports._findMatch = void 0; -const semver = __importStar(__nccwpck_require__(5911)); -const core_1 = __nccwpck_require__(2186); -// needs to be require for core node modules to be mocked -/* eslint @typescript-eslint/no-require-imports: 0 */ -const os = __nccwpck_require__(2037); -const cp = __nccwpck_require__(2081); -const fs = __nccwpck_require__(7147); -function _findMatch(versionSpec, stable, candidates, archFilter) { - return __awaiter(this, void 0, void 0, function* () { - const platFilter = os.platform(); - let result; - let match; - let file; - for (const candidate of candidates) { - const version = candidate.version; - core_1.debug(`check ${version} satisfies ${versionSpec}`); - if (semver.satisfies(version, versionSpec) && - (!stable || candidate.stable === stable)) { - file = candidate.files.find(item => { - core_1.debug(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); - let chk = item.arch === archFilter && item.platform === platFilter; - if (chk && item.platform_version) { - const osVersion = module.exports._getOsVersion(); - if (osVersion === item.platform_version) { - chk = true; - } - else { - chk = semver.satisfies(osVersion, item.platform_version); - } - } - return chk; - }); - if (file) { - core_1.debug(`matched ${candidate.version}`); - match = candidate; - break; - } - } - } - if (match && file) { - // clone since we're mutating the file list to be only the file that matches - result = Object.assign({}, match); - result.files = [file]; - } - return result; - }); -} -exports._findMatch = _findMatch; -function _getOsVersion() { - // TODO: add windows and other linux, arm variants - // right now filtering on version is only an ubuntu and macos scenario for tools we build for hosted (python) - const plat = os.platform(); - let version = ''; - if (plat === 'darwin') { - version = cp.execSync('sw_vers -productVersion').toString(); - } - else if (plat === 'linux') { - // lsb_release process not in some containers, readfile - // Run cat /etc/lsb-release - // DISTRIB_ID=Ubuntu - // DISTRIB_RELEASE=18.04 - // DISTRIB_CODENAME=bionic - // DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS" - const lsbContents = module.exports._readLinuxVersionFile(); - if (lsbContents) { - const lines = lsbContents.split('\n'); - for (const line of lines) { - const parts = line.split('='); - if (parts.length === 2 && - (parts[0].trim() === 'VERSION_ID' || - parts[0].trim() === 'DISTRIB_RELEASE')) { - version = parts[1] - .trim() - .replace(/^"/, '') - .replace(/"$/, ''); - break; - } - } - } - } - return version; -} -exports._getOsVersion = _getOsVersion; -function _readLinuxVersionFile() { - const lsbReleaseFile = '/etc/lsb-release'; - const osReleaseFile = '/etc/os-release'; - let contents = ''; - if (fs.existsSync(lsbReleaseFile)) { - contents = fs.readFileSync(lsbReleaseFile).toString(); - } - else if (fs.existsSync(osReleaseFile)) { - contents = fs.readFileSync(osReleaseFile).toString(); - } - return contents; -} -exports._readLinuxVersionFile = _readLinuxVersionFile; -//# sourceMappingURL=manifest.js.map - -/***/ }), - -/***/ 8279: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -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()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.RetryHelper = void 0; -const core = __importStar(__nccwpck_require__(2186)); -/** - * Internal class for retries - */ -class RetryHelper { - constructor(maxAttempts, minSeconds, maxSeconds) { - if (maxAttempts < 1) { - throw new Error('max attempts should be greater than or equal to 1'); - } - this.maxAttempts = maxAttempts; - this.minSeconds = Math.floor(minSeconds); - this.maxSeconds = Math.floor(maxSeconds); - if (this.minSeconds > this.maxSeconds) { - throw new Error('min seconds should be less than or equal to max seconds'); - } - } - execute(action, isRetryable) { - return __awaiter(this, void 0, void 0, function* () { - let attempt = 1; - while (attempt < this.maxAttempts) { - // Try - try { - return yield action(); - } - catch (err) { - if (isRetryable && !isRetryable(err)) { - throw err; - } - core.info(err.message); - } - // Sleep - const seconds = this.getSleepAmount(); - core.info(`Waiting ${seconds} seconds before trying again`); - yield this.sleep(seconds); - attempt++; - } - // Last attempt - return yield action(); - }); - } - getSleepAmount() { - return (Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + - this.minSeconds); - } - sleep(seconds) { - return __awaiter(this, void 0, void 0, function* () { - return new Promise(resolve => setTimeout(resolve, seconds * 1000)); - }); - } -} -exports.RetryHelper = RetryHelper; -//# sourceMappingURL=retry-helper.js.map - -/***/ }), - -/***/ 7784: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -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 __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.evaluateVersions = exports.isExplicitVersion = exports.findFromManifest = exports.getManifestFromRepo = exports.findAllVersions = exports.find = exports.cacheFile = exports.cacheDir = exports.extractZip = exports.extractXar = exports.extractTar = exports.extract7z = exports.downloadTool = exports.HTTPError = void 0; -const core = __importStar(__nccwpck_require__(2186)); -const io = __importStar(__nccwpck_require__(7436)); -const fs = __importStar(__nccwpck_require__(7147)); -const mm = __importStar(__nccwpck_require__(2473)); -const os = __importStar(__nccwpck_require__(2037)); -const path = __importStar(__nccwpck_require__(1017)); -const httpm = __importStar(__nccwpck_require__(6255)); -const semver = __importStar(__nccwpck_require__(5911)); -const stream = __importStar(__nccwpck_require__(2781)); -const util = __importStar(__nccwpck_require__(3837)); -const assert_1 = __nccwpck_require__(9491); -const v4_1 = __importDefault(__nccwpck_require__(7468)); -const exec_1 = __nccwpck_require__(1514); -const retry_helper_1 = __nccwpck_require__(8279); -class HTTPError extends Error { - constructor(httpStatusCode) { - super(`Unexpected HTTP response: ${httpStatusCode}`); - this.httpStatusCode = httpStatusCode; - Object.setPrototypeOf(this, new.target.prototype); - } -} -exports.HTTPError = HTTPError; -const IS_WINDOWS = process.platform === 'win32'; -const IS_MAC = process.platform === 'darwin'; -const userAgent = 'actions/tool-cache'; -/** - * Download a tool from an url and stream it into a file - * - * @param url url of tool to download - * @param dest path to download tool - * @param auth authorization header - * @param headers other headers - * @returns path to downloaded tool - */ -function downloadTool(url, dest, auth, headers) { - return __awaiter(this, void 0, void 0, function* () { - dest = dest || path.join(_getTempDirectory(), v4_1.default()); - yield io.mkdirP(path.dirname(dest)); - core.debug(`Downloading ${url}`); - core.debug(`Destination ${dest}`); - const maxAttempts = 3; - const minSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS', 10); - const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20); - const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds); - return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { - return yield downloadToolAttempt(url, dest || '', auth, headers); - }), (err) => { - if (err instanceof HTTPError && err.httpStatusCode) { - // Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests - if (err.httpStatusCode < 500 && - err.httpStatusCode !== 408 && - err.httpStatusCode !== 429) { - return false; - } - } - // Otherwise retry - return true; - }); - }); -} -exports.downloadTool = downloadTool; -function downloadToolAttempt(url, dest, auth, headers) { - return __awaiter(this, void 0, void 0, function* () { - if (fs.existsSync(dest)) { - throw new Error(`Destination file path ${dest} already exists`); - } - // Get the response headers - const http = new httpm.HttpClient(userAgent, [], { - allowRetries: false - }); - if (auth) { - core.debug('set auth'); - if (headers === undefined) { - headers = {}; - } - headers.authorization = auth; - } - const response = yield http.get(url, headers); - if (response.message.statusCode !== 200) { - const err = new HTTPError(response.message.statusCode); - core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); - throw err; - } - // Download the response body - const pipeline = util.promisify(stream.pipeline); - const responseMessageFactory = _getGlobal('TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY', () => response.message); - const readStream = responseMessageFactory(); - let succeeded = false; - try { - yield pipeline(readStream, fs.createWriteStream(dest)); - core.debug('download complete'); - succeeded = true; - return dest; - } - finally { - // Error, delete dest before retry - if (!succeeded) { - core.debug('download failed'); - try { - yield io.rmRF(dest); - } - catch (err) { - core.debug(`Failed to delete '${dest}'. ${err.message}`); - } - } - } - }); -} -/** - * Extract a .7z file - * - * @param file path to the .7z file - * @param dest destination directory. Optional. - * @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this - * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will - * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is - * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line - * interface, it is smaller than the full command line interface, and it does support long paths. At the - * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website. - * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path - * to 7zr.exe can be pass to this function. - * @returns path to the destination directory - */ -function extract7z(file, dest, _7zPath) { - return __awaiter(this, void 0, void 0, function* () { - assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS'); - assert_1.ok(file, 'parameter "file" is required'); - dest = yield _createExtractFolder(dest); - const originalCwd = process.cwd(); - process.chdir(dest); - if (_7zPath) { - try { - const logLevel = core.isDebug() ? '-bb1' : '-bb0'; - const args = [ - 'x', - logLevel, - '-bd', - '-sccUTF-8', - file - ]; - const options = { - silent: true - }; - yield exec_1.exec(`"${_7zPath}"`, args, options); - } - finally { - process.chdir(originalCwd); - } - } - else { - const escapedScript = path - .join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1') - .replace(/'/g, "''") - .replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines - const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`; - const args = [ - '-NoLogo', - '-Sta', - '-NoProfile', - '-NonInteractive', - '-ExecutionPolicy', - 'Unrestricted', - '-Command', - command - ]; - const options = { - silent: true - }; - try { - const powershellPath = yield io.which('powershell', true); - yield exec_1.exec(`"${powershellPath}"`, args, options); - } - finally { - process.chdir(originalCwd); - } - } - return dest; - }); -} -exports.extract7z = extract7z; -/** - * Extract a compressed tar archive - * - * @param file path to the tar - * @param dest destination directory. Optional. - * @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional. - * @returns path to the destination directory - */ -function extractTar(file, dest, flags = 'xz') { - return __awaiter(this, void 0, void 0, function* () { - if (!file) { - throw new Error("parameter 'file' is required"); - } - // Create dest - dest = yield _createExtractFolder(dest); - // Determine whether GNU tar - core.debug('Checking tar --version'); - let versionOutput = ''; - yield exec_1.exec('tar --version', [], { - ignoreReturnCode: true, - silent: true, - listeners: { - stdout: (data) => (versionOutput += data.toString()), - stderr: (data) => (versionOutput += data.toString()) - } - }); - core.debug(versionOutput.trim()); - const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR'); - // Initialize args - let args; - if (flags instanceof Array) { - args = flags; - } - else { - args = [flags]; - } - if (core.isDebug() && !flags.includes('v')) { - args.push('-v'); - } - let destArg = dest; - let fileArg = file; - if (IS_WINDOWS && isGnuTar) { - args.push('--force-local'); - destArg = dest.replace(/\\/g, '/'); - // Technically only the dest needs to have `/` but for aesthetic consistency - // convert slashes in the file arg too. - fileArg = file.replace(/\\/g, '/'); - } - if (isGnuTar) { - // Suppress warnings when using GNU tar to extract archives created by BSD tar - args.push('--warning=no-unknown-keyword'); - args.push('--overwrite'); - } - args.push('-C', destArg, '-f', fileArg); - yield exec_1.exec(`tar`, args); - return dest; - }); -} -exports.extractTar = extractTar; -/** - * Extract a xar compatible archive - * - * @param file path to the archive - * @param dest destination directory. Optional. - * @param flags flags for the xar. Optional. - * @returns path to the destination directory - */ -function extractXar(file, dest, flags = []) { - return __awaiter(this, void 0, void 0, function* () { - assert_1.ok(IS_MAC, 'extractXar() not supported on current OS'); - assert_1.ok(file, 'parameter "file" is required'); - dest = yield _createExtractFolder(dest); - let args; - if (flags instanceof Array) { - args = flags; - } - else { - args = [flags]; - } - args.push('-x', '-C', dest, '-f', file); - if (core.isDebug()) { - args.push('-v'); - } - const xarPath = yield io.which('xar', true); - yield exec_1.exec(`"${xarPath}"`, _unique(args)); - return dest; - }); -} -exports.extractXar = extractXar; -/** - * Extract a zip - * - * @param file path to the zip - * @param dest destination directory. Optional. - * @returns path to the destination directory - */ -function extractZip(file, dest) { - return __awaiter(this, void 0, void 0, function* () { - if (!file) { - throw new Error("parameter 'file' is required"); - } - dest = yield _createExtractFolder(dest); - if (IS_WINDOWS) { - yield extractZipWin(file, dest); - } - else { - yield extractZipNix(file, dest); - } - return dest; - }); -} -exports.extractZip = extractZip; -function extractZipWin(file, dest) { - return __awaiter(this, void 0, void 0, function* () { - // build the powershell command - const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines - const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - const pwshPath = yield io.which('pwsh', false); - //To match the file overwrite behavior on nix systems, we use the overwrite = true flag for ExtractToDirectory - //and the -Force flag for Expand-Archive as a fallback - if (pwshPath) { - //attempt to use pwsh with ExtractToDirectory, if this fails attempt Expand-Archive - const pwshCommand = [ - `$ErrorActionPreference = 'Stop' ;`, - `try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ;`, - `try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}', $true) }`, - `catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${escapedFile}' -DestinationPath '${escapedDest}' -Force } else { throw $_ } } ;` - ].join(' '); - const args = [ - '-NoLogo', - '-NoProfile', - '-NonInteractive', - '-ExecutionPolicy', - 'Unrestricted', - '-Command', - pwshCommand - ]; - core.debug(`Using pwsh at path: ${pwshPath}`); - yield exec_1.exec(`"${pwshPath}"`, args); - } - else { - const powershellCommand = [ - `$ErrorActionPreference = 'Stop' ;`, - `try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ;`, - `if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath '${escapedFile}' -DestinationPath '${escapedDest}' -Force }`, - `else {[System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}', $true) }` - ].join(' '); - const args = [ - '-NoLogo', - '-Sta', - '-NoProfile', - '-NonInteractive', - '-ExecutionPolicy', - 'Unrestricted', - '-Command', - powershellCommand - ]; - const powershellPath = yield io.which('powershell', true); - core.debug(`Using powershell at path: ${powershellPath}`); - yield exec_1.exec(`"${powershellPath}"`, args); - } - }); -} -function extractZipNix(file, dest) { - return __awaiter(this, void 0, void 0, function* () { - const unzipPath = yield io.which('unzip', true); - const args = [file]; - if (!core.isDebug()) { - args.unshift('-q'); - } - args.unshift('-o'); //overwrite with -o, otherwise a prompt is shown which freezes the run - yield exec_1.exec(`"${unzipPath}"`, args, { cwd: dest }); - }); -} -/** - * Caches a directory and installs it into the tool cacheDir - * - * @param sourceDir the directory to cache into tools - * @param tool tool name - * @param version version of the tool. semver format - * @param arch architecture of the tool. Optional. Defaults to machine architecture - */ -function cacheDir(sourceDir, tool, version, arch) { - return __awaiter(this, void 0, void 0, function* () { - version = semver.clean(version) || version; - arch = arch || os.arch(); - core.debug(`Caching tool ${tool} ${version} ${arch}`); - core.debug(`source dir: ${sourceDir}`); - if (!fs.statSync(sourceDir).isDirectory()) { - throw new Error('sourceDir is not a directory'); - } - // Create the tool dir - const destPath = yield _createToolPath(tool, version, arch); - // copy each child item. do not move. move can fail on Windows - // due to anti-virus software having an open handle on a file. - for (const itemName of fs.readdirSync(sourceDir)) { - const s = path.join(sourceDir, itemName); - yield io.cp(s, destPath, { recursive: true }); - } - // write .complete - _completeToolPath(tool, version, arch); - return destPath; - }); -} -exports.cacheDir = cacheDir; -/** - * Caches a downloaded file (GUID) and installs it - * into the tool cache with a given targetName - * - * @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid. - * @param targetFile the name of the file name in the tools directory - * @param tool tool name - * @param version version of the tool. semver format - * @param arch architecture of the tool. Optional. Defaults to machine architecture - */ -function cacheFile(sourceFile, targetFile, tool, version, arch) { - return __awaiter(this, void 0, void 0, function* () { - version = semver.clean(version) || version; - arch = arch || os.arch(); - core.debug(`Caching tool ${tool} ${version} ${arch}`); - core.debug(`source file: ${sourceFile}`); - if (!fs.statSync(sourceFile).isFile()) { - throw new Error('sourceFile is not a file'); - } - // create the tool dir - const destFolder = yield _createToolPath(tool, version, arch); - // copy instead of move. move can fail on Windows due to - // anti-virus software having an open handle on a file. - const destPath = path.join(destFolder, targetFile); - core.debug(`destination file ${destPath}`); - yield io.cp(sourceFile, destPath); - // write .complete - _completeToolPath(tool, version, arch); - return destFolder; - }); -} -exports.cacheFile = cacheFile; -/** - * Finds the path to a tool version in the local installed tool cache - * - * @param toolName name of the tool - * @param versionSpec version of the tool - * @param arch optional arch. defaults to arch of computer - */ -function find(toolName, versionSpec, arch) { - if (!toolName) { - throw new Error('toolName parameter is required'); - } - if (!versionSpec) { - throw new Error('versionSpec parameter is required'); - } - arch = arch || os.arch(); - // attempt to resolve an explicit version - if (!isExplicitVersion(versionSpec)) { - const localVersions = findAllVersions(toolName, arch); - const match = evaluateVersions(localVersions, versionSpec); - versionSpec = match; - } - // check for the explicit version in the cache - let toolPath = ''; - if (versionSpec) { - versionSpec = semver.clean(versionSpec) || ''; - const cachePath = path.join(_getCacheDirectory(), toolName, versionSpec, arch); - core.debug(`checking cache: ${cachePath}`); - if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { - core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`); - toolPath = cachePath; - } - else { - core.debug('not found'); - } - } - return toolPath; -} -exports.find = find; -/** - * Finds the paths to all versions of a tool that are installed in the local tool cache - * - * @param toolName name of the tool - * @param arch optional arch. defaults to arch of computer - */ -function findAllVersions(toolName, arch) { - const versions = []; - arch = arch || os.arch(); - const toolPath = path.join(_getCacheDirectory(), toolName); - if (fs.existsSync(toolPath)) { - const children = fs.readdirSync(toolPath); - for (const child of children) { - if (isExplicitVersion(child)) { - const fullPath = path.join(toolPath, child, arch || ''); - if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) { - versions.push(child); - } - } - } - } - return versions; -} -exports.findAllVersions = findAllVersions; -function getManifestFromRepo(owner, repo, auth, branch = 'master') { - return __awaiter(this, void 0, void 0, function* () { - let releases = []; - const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${branch}`; - const http = new httpm.HttpClient('tool-cache'); - const headers = {}; - if (auth) { - core.debug('set auth'); - headers.authorization = auth; - } - const response = yield http.getJson(treeUrl, headers); - if (!response.result) { - return releases; - } - let manifestUrl = ''; - for (const item of response.result.tree) { - if (item.path === 'versions-manifest.json') { - manifestUrl = item.url; - break; - } - } - headers['accept'] = 'application/vnd.github.VERSION.raw'; - let versionsRaw = yield (yield http.get(manifestUrl, headers)).readBody(); - if (versionsRaw) { - // shouldn't be needed but protects against invalid json saved with BOM - versionsRaw = versionsRaw.replace(/^\uFEFF/, ''); - try { - releases = JSON.parse(versionsRaw); - } - catch (_a) { - core.debug('Invalid json'); - } - } - return releases; - }); -} -exports.getManifestFromRepo = getManifestFromRepo; -function findFromManifest(versionSpec, stable, manifest, archFilter = os.arch()) { - return __awaiter(this, void 0, void 0, function* () { - // wrap the internal impl - const match = yield mm._findMatch(versionSpec, stable, manifest, archFilter); - return match; - }); -} -exports.findFromManifest = findFromManifest; -function _createExtractFolder(dest) { - return __awaiter(this, void 0, void 0, function* () { - if (!dest) { - // create a temp dir - dest = path.join(_getTempDirectory(), v4_1.default()); - } - yield io.mkdirP(dest); - return dest; - }); -} -function _createToolPath(tool, version, arch) { - return __awaiter(this, void 0, void 0, function* () { - const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); - core.debug(`destination ${folderPath}`); - const markerPath = `${folderPath}.complete`; - yield io.rmRF(folderPath); - yield io.rmRF(markerPath); - yield io.mkdirP(folderPath); - return folderPath; - }); -} -function _completeToolPath(tool, version, arch) { - const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); - const markerPath = `${folderPath}.complete`; - fs.writeFileSync(markerPath, ''); - core.debug('finished caching tool'); -} -/** - * Check if version string is explicit - * - * @param versionSpec version string to check - */ -function isExplicitVersion(versionSpec) { - const c = semver.clean(versionSpec) || ''; - core.debug(`isExplicit: ${c}`); - const valid = semver.valid(c) != null; - core.debug(`explicit? ${valid}`); - return valid; -} -exports.isExplicitVersion = isExplicitVersion; -/** - * Get the highest satisfiying semantic version in `versions` which satisfies `versionSpec` - * - * @param versions array of versions to evaluate - * @param versionSpec semantic version spec to satisfy - */ -function evaluateVersions(versions, versionSpec) { - let version = ''; - core.debug(`evaluating ${versions.length} versions`); - versions = versions.sort((a, b) => { - if (semver.gt(a, b)) { - return 1; - } - return -1; - }); - for (let i = versions.length - 1; i >= 0; i--) { - const potential = versions[i]; - const satisfied = semver.satisfies(potential, versionSpec); - if (satisfied) { - version = potential; - break; - } - } - if (version) { - core.debug(`matched: ${version}`); - } - else { - core.debug('match not found'); - } - return version; -} -exports.evaluateVersions = evaluateVersions; -/** - * Gets RUNNER_TOOL_CACHE - */ -function _getCacheDirectory() { - const cacheDirectory = process.env['RUNNER_TOOL_CACHE'] || ''; - assert_1.ok(cacheDirectory, 'Expected RUNNER_TOOL_CACHE to be defined'); - return cacheDirectory; -} -/** - * Gets RUNNER_TEMP - */ -function _getTempDirectory() { - const tempDirectory = process.env['RUNNER_TEMP'] || ''; - assert_1.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined'); - return tempDirectory; -} -/** - * Gets a global variable - */ -function _getGlobal(key, defaultValue) { - /* eslint-disable @typescript-eslint/no-explicit-any */ - const value = global[key]; - /* eslint-enable @typescript-eslint/no-explicit-any */ - return value !== undefined ? value : defaultValue; -} -/** - * Returns an array of unique values. - * @param values Values to make unique. - */ -function _unique(values) { - return Array.from(new Set(values)); -} -//# sourceMappingURL=tool-cache.js.map - -/***/ }), - -/***/ 7701: -/***/ ((module) => { - -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ -var byteToHex = []; -for (var i = 0; i < 256; ++i) { - byteToHex[i] = (i + 0x100).toString(16).substr(1); -} - -function bytesToUuid(buf, offset) { - var i = offset || 0; - var bth = byteToHex; - // 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++]], - 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(''); -} - -module.exports = bytesToUuid; - - -/***/ }), - -/***/ 7269: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -// Unique ID creation requires a high quality random # generator. In node.js -// this is pretty straight-forward - we use the crypto API. - -var crypto = __nccwpck_require__(6113); - -module.exports = function nodeRNG() { - return crypto.randomBytes(16); -}; - - -/***/ }), - -/***/ 7468: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -var rng = __nccwpck_require__(7269); -var bytesToUuid = __nccwpck_require__(7701); - -function v4(options, buf, offset) { - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options === 'binary' ? new Array(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ++ii) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || bytesToUuid(rnds); -} - -module.exports = v4; - - -/***/ }), - -/***/ 8676: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getOS = void 0; -const installToolsOnOS_1 = __nccwpck_require__(4490); -const getOS = () => (process.env["Agent_OS"] && installToolsOnOS_1.OSTypeMapper[process.env["Agent_OS"]]) || - process.platform; -exports.getOS = getOS; - - -/***/ }), - -/***/ 8562: -/***/ (function(module, exports, __nccwpck_require__) { - -"use strict"; - -//Starter file for the npm package client tools installer. -//This package installs client tools based on the main function's input. -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (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 (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.main = void 0; -const fileSystemUtils_1 = __nccwpck_require__(7755); -__nccwpck_require__(4227); -const installToolsOnOS_1 = __nccwpck_require__(4490); -const tl = __importStar(__nccwpck_require__(8908)); -//usecase: keypair-signing-standard keypairs -//gpg-signing-GPG -//default-keypair -async function main(usecase = "") { - console.log("usecase called for installation is ", usecase); - var outputVar = { ret_code: 1, imp_file_paths: {} }; - try { - //temp path to store downloaded file - const tempDirectoryPath = (0, fileSystemUtils_1.getTempDirectory)(); - console.log("using path ", tempDirectoryPath); - //PKCS#11 configFile Path - const configFilePath = await (0, installToolsOnOS_1.installToolsBasedOnOS)(tempDirectoryPath, usecase, outputVar); - //PKCS#11 configFile only required for keypair-signing - if (usecase != "gpg-signing") { - console.info("\nPKCS11 config file written in path: ", configFilePath); - tl.setVariable("PKCS11_CONFIG", configFilePath, false, true); - outputVar.imp_file_paths.PKCS11_CONFIG = configFilePath; - console.info("\nPKCS11 config file written in path: ", configFilePath); - } - console.log("\nSTM tools setup completed"); - return JSON.stringify(outputVar); - } - catch (err) { - console.error("\nerror when executing setup task of STM", err); - return JSON.stringify(outputVar); - } -} -exports.main = main; -module.exports = { main }; - - -/***/ }), - -/***/ 4643: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"use strict"; - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (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 (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.installLinuxTools = void 0; -const fs_1 = __importDefault(__nccwpck_require__(7147)); -const path_1 = __importDefault(__nccwpck_require__(1017)); -const tl = __importStar(__nccwpck_require__(8908)); -const services_1 = __nccwpck_require__(1968); -const runLinuxTools_1 = __nccwpck_require__(875); -async function installLinuxTools(installationPath, toolToBeUsed, usecase, outputVar) { - const directoryPath = `${installationPath}//DigiCert One Signing Manager Tools/`; - try { - fs_1.default.mkdirSync(`${directoryPath}`); - } - catch (err) { } - const extractPath = await (0, runLinuxTools_1.runLnxToolBasedInstallationOrExtraction)(toolToBeUsed, directoryPath, usecase); - console.log("path where the stm tools were installed/extracted is ", extractPath); - outputVar.imp_file_paths["extractPath"] = extractPath; - //making the smctl executable file - const setExecutableFlagForSmctl = tl - .tool("chmod") - .arg("+x") - .arg(path_1.default.join(extractPath, "smctl")); - const syncRetCode = await setExecutableFlagForSmctl.exec(); - console.log("set executable flag for smctl ", syncRetCode); - let configFilePath = ""; - //pkcs11 library installation - if (usecase != "gpg-signing") { - const pkcs11FileName = "smpkcs11.so"; - //Configures the pkcs#11 - configFilePath = await (0, services_1.getConfigFilePath)(pkcs11FileName, extractPath); - } - return configFilePath; -} -exports.installLinuxTools = installLinuxTools; - - -/***/ }), - -/***/ 5011: -/***/ (function(module, exports, __nccwpck_require__) { - -"use strict"; - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (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 (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.installMacTools = void 0; -const fs_1 = __importDefault(__nccwpck_require__(7147)); -const path_1 = __importDefault(__nccwpck_require__(1017)); -const tl = __importStar(__nccwpck_require__(8908)); -const services_1 = __nccwpck_require__(1968); -const runMacTools_1 = __nccwpck_require__(2542); -async function installMacTools(installationPath, toolToBeUsed, usecase, outputVar) { - const directoryPath = `${installationPath}//DigiCert One Signing Manager Tools/`; - try { - fs_1.default.mkdirSync(`${directoryPath}`); - } - catch (err) { } - const extractPath = await (0, runMacTools_1.runMacToolBasedInstallationOrExtraction)(toolToBeUsed, directoryPath, usecase); - console.log("path where the ssm tools were installed/extracted is ", extractPath); - outputVar.imp_file_paths["extractPath"] = extractPath; - //making the smctl executable file - const setExecutableFlagForSmctl = tl - .tool("chmod") - .arg("+x") - .arg(path_1.default.join(extractPath, "smctl")); - const syncRetCode = await setExecutableFlagForSmctl.exec(); - console.log("set executable flag for smctl ", syncRetCode); - let configFilePath = ""; - //pkcs11 library installation - if (usecase != "gpg-signing") { - const pkcs11FileName = "smpkcs11.dmg"; - //pkcs11 library installation - configFilePath = await (0, services_1.getConfigFilePath)(pkcs11FileName, extractPath); - } - return configFilePath; -} -exports.installMacTools = installMacTools; -module.exports = { installMacTools }; - - -/***/ }), - -/***/ 4490: -/***/ ((module, exports, __nccwpck_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.installToolsBasedOnOS = exports.OSToToolMapper = exports.OSToToolMappergpg = exports.OSTypeMapper = void 0; -__nccwpck_require__(4227); -const installwindowsTools_1 = __nccwpck_require__(371); -const installLinuxTools_1 = __nccwpck_require__(4643); -const installMacTools_1 = __nccwpck_require__(5011); -const OsType_1 = __nccwpck_require__(8676); -const azure_pipelines_task_lib_1 = __nccwpck_require__(8908); -exports.OSTypeMapper = { - [azure_pipelines_task_lib_1.Platform.Windows.toString()]: "win32", - [azure_pipelines_task_lib_1.Platform.Linux.toString()]: "linux", - [azure_pipelines_task_lib_1.Platform.MacOS.toString()]: "darwin", -}; -//tools required for gpg usecase -exports.OSToToolMappergpg = { - linux: ["smctl-linux-x64", "ssm-scd-linux-x64"], - win32: ["ssm-scd-windows-x64", "smctl-windows-x64"], - darwin: ["smctk-apple-any", "smctl-mac-x64", "ssm-scd-mac-x64"], -}; -//tools required for keypair usecase -exports.OSToToolMapper = { - linux: ["smtools-linux-x64.zip"], - win32: ["smtools-windows-x64.msi"], - darwin: ["smctk-apple-any", "smctl-mac-x64", "smpkcs11-mac-x64"], -}; -async function installToolsBasedOnOS(installationPath, usecase, outputVar) { - const OS = (0, OsType_1.getOS)(); - let toolToBeUsed; - switch (usecase) { - case "keypair-signing": - toolToBeUsed = exports.OSToToolMapper[OS]; - usecase = "keypair-signing"; - break; - case "gpg-signing": - toolToBeUsed = exports.OSToToolMappergpg[OS]; - usecase = "gpg-signing"; - break; - default: - toolToBeUsed = exports.OSToToolMapper[OS]; - usecase = ""; - break; - } - if (OS == "win32") { - return await (0, installwindowsTools_1.installWindowsTools)(installationPath, toolToBeUsed, usecase, outputVar); - } - else if (OS == "linux") { - return await (0, installLinuxTools_1.installLinuxTools)(installationPath, toolToBeUsed, usecase, outputVar); - } - else { - return await (0, installMacTools_1.installMacTools)(installationPath, toolToBeUsed, usecase, outputVar); - } -} -exports.installToolsBasedOnOS = installToolsBasedOnOS; -module.exports = { installToolsBasedOnOS, getOS: OsType_1.getOS }; - - -/***/ }), - -/***/ 371: -/***/ (function(module, exports, __nccwpck_require__) { - -"use strict"; - -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.installWindowsTools = void 0; -const fs_1 = __importDefault(__nccwpck_require__(7147)); -const services_1 = __nccwpck_require__(1968); -const runwintools_1 = __nccwpck_require__(5246); -async function installWindowsTools(installationPath, toolToBeUsed, usecase, outputVar) { - //Keypair signing employs a msi installation, which extracts tools into a subdirectory called DigiCert One Signing Manager Tools. - //To make it more generic, we're going to create a folder called DigiCert One Signing Manager Tools in the gpg usecase. - const directoryPath = usecase == "gpg-signing" - ? `${installationPath}//DigiCert One Signing Manager Tools/` - : `${installationPath}`; - try { - fs_1.default.mkdirSync(`${directoryPath}`); - } - catch (err) { } - //function extracts all tools and returns the installed path - const extractPath = await (0, runwintools_1.runWinToolBasedInstallationOrExtraction)(toolToBeUsed, directoryPath, usecase); - if (usecase == "gpg-signing") { - console.log("GPG signing: path where the stm tools were installed/extracted is ", directoryPath); - } - else { - console.log("Keypair signing: path where the stm tools were installed/extracted is ", extractPath); - } - outputVar.imp_file_paths["directoryPath"] = directoryPath; - outputVar.imp_file_paths["extractPath"] = extractPath; - let configFilePath = ""; - //pkcs11 library installation - if (usecase != "gpg-signing") { - const pkcs11FileName = "smpkcs11.dll"; - //Configures the pkcs#11 - configFilePath = await (0, services_1.getConfigFilePath)(pkcs11FileName, extractPath); - } - return configFilePath; -} -exports.installWindowsTools = installWindowsTools; -module.exports = { installWindowsTools }; - - -/***/ }), - -/***/ 875: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"use strict"; - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (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 (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.runLnxToolBasedInstallationOrExtraction = void 0; -const toolLib = __importStar(__nccwpck_require__(3681)); -const path_1 = __importDefault(__nccwpck_require__(1017)); -const services_1 = __nccwpck_require__(1968); -async function runLnxToolBasedInstallationOrExtraction(toolToBeUsed, tempDirectoryPath, usecase) { - let extractPath = tempDirectoryPath; - for (let i = 0; i < toolToBeUsed.length; i++) { - //initiates an API call and writes files to a specified temporary location. - const clientToolsDownloadPath = await (0, services_1.callApi)(toolToBeUsed[i], tempDirectoryPath); - if (usecase == "" || usecase == "keypair-signing") { - //cheks for .zip file - if (toolToBeUsed[i].includes(".zip")) { - console.log("tool is in a zip file trying to extract it", clientToolsDownloadPath); - //extracts zip - await toolLib.extractZip(clientToolsDownloadPath, tempDirectoryPath); - extractPath = path_1.default.join(tempDirectoryPath, toolToBeUsed[i].replace(".zip", "")); - console.log("zip extraction complete , path is ", extractPath); - } - } - } - return extractPath; -} -exports.runLnxToolBasedInstallationOrExtraction = runLnxToolBasedInstallationOrExtraction; - - -/***/ }), - -/***/ 2542: -/***/ (function(module, exports, __nccwpck_require__) { - -"use strict"; - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (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 (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.runMacToolBasedInstallationOrExtraction = void 0; -const toolLib = __importStar(__nccwpck_require__(3681)); -const path_1 = __importDefault(__nccwpck_require__(1017)); -const services_1 = __nccwpck_require__(1968); -async function runMacToolBasedInstallationOrExtraction(toolToBeUsed, tempDirectoryPath, usecase) { - let extractPath = tempDirectoryPath; - for (let i = 0; i < toolToBeUsed.length; i++) { - //initiates an API call and writes files to a specified temporary location. - let clientToolsDownloadPath = await (0, services_1.callApi)(toolToBeUsed[i], tempDirectoryPath); - if (services_1.toolDownloaded[toolToBeUsed[i]].includes(".zip")) { - console.log("tool is in a zip file trying to extract it", clientToolsDownloadPath); - //extracts zip - await toolLib.extractZip(clientToolsDownloadPath, tempDirectoryPath); - clientToolsDownloadPath = path_1.default.join(tempDirectoryPath, services_1.toolDownloaded[toolToBeUsed[i]].replace(".zip", "")); - console.log("zip extraction complete , path is ", clientToolsDownloadPath); - } - } - return extractPath; -} -exports.runMacToolBasedInstallationOrExtraction = runMacToolBasedInstallationOrExtraction; -module.exports = { runMacToolBasedInstallationOrExtraction }; - - -/***/ }), - -/***/ 5246: -/***/ (function(module, exports, __nccwpck_require__) { - -"use strict"; - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (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 (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.runWinToolBasedInstallationOrExtraction = void 0; -const path_1 = __importDefault(__nccwpck_require__(1017)); -const services_1 = __nccwpck_require__(1968); -const tl = __importStar(__nccwpck_require__(8908)); -async function runWinToolBasedInstallationOrExtraction(toolToBeUsed, tempDirectoryPath, usecase) { - let extractPath = ""; - for (let i = 0; i < toolToBeUsed.length; i++) { - //initiates an API call and writes files to a specified temporary location - await (0, services_1.callApi)(toolToBeUsed[i], tempDirectoryPath); - if (usecase == "" || usecase == "keypair-signing") { - //checking for .msi files - if (toolToBeUsed[i].includes(".msi")) { - extractPath = path_1.default.join(tempDirectoryPath, toolToBeUsed[i].replace(".msi", "")); - //tool to run .msi file - const msiRunner = tl - .tool("msiexec") - .arg([ - `/i`, - `${tempDirectoryPath}\\${toolToBeUsed}`, - "/quiet", - `INSTALLDIR=${extractPath}`, - ]); - const regReturnCode = await msiRunner.exec(); - //Please provide admin privileges if the regReturnCode is 1625-30 - if (regReturnCode != 0) { - throw new Error(`Installation of msi failed with return code ${regReturnCode}`); - } - console.log("installation of smctl returned code", regReturnCode); - } - if (!shouldCheckIfToolsInstalled()) { - //tool for locating installations Where the installation is already in place - const installationLocation = tl - .tool("wmic") - .arg([ - "product", - "where", - "Vendor='DigiCert Inc.' and name='DigiCert One Signing Manager Tools'", - "get", - "installlocation", - "/format:list", - ]) - .execSync(); - const { stdout } = installationLocation; - extractPath = stdout.split("=")[1].trim(); - } - } - } - return extractPath; -} -exports.runWinToolBasedInstallationOrExtraction = runWinToolBasedInstallationOrExtraction; -//will be false in the hosted environment because it makes no sense to look for what we just extracted -//If an installation already exists in a self-hosted environment, this is true -const shouldCheckIfToolsInstalled = () => { - return process.env.SHOULD_CHECK_INSTALLED == "false"; -}; -module.exports = { runWinToolBasedInstallationOrExtraction, getAPICall: services_1.getAPICall }; - - -/***/ }), - -/***/ 7755: -/***/ (function(module, exports, __nccwpck_require__) { - -"use strict"; - -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getTempDirectory = void 0; -const path_1 = __importDefault(__nccwpck_require__(1017)); -const os_1 = __importDefault(__nccwpck_require__(2037)); -const getTempDirectory = () => (process.env.AGENT_WORKFOLDER && - path_1.default.join(process.env.AGENT_WORKFOLDER, "_temp")) || - os_1.default.tmpdir(); -exports.getTempDirectory = getTempDirectory; -module.exports = { getTempDirectory: exports.getTempDirectory }; - - -/***/ }), - -/***/ 1968: -/***/ (function(module, exports, __nccwpck_require__) { - -"use strict"; - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (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 (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.callApi = exports.toolDownloaded = exports.getConfigFilePath = exports.getAPICall = exports.uiAPIPrefix = void 0; -const axios_1 = __importDefault(__nccwpck_require__(6545)); -const tl = __importStar(__nccwpck_require__(8908)); -const path_1 = __importDefault(__nccwpck_require__(1017)); -const fs_1 = __importDefault(__nccwpck_require__(7147)); -const getHost = () => { - return "https://demo.one.digicert.com"; -}; -exports.uiAPIPrefix = "signingmanager/api-ui/v1"; -const getAPICall = async (uri, config) => { - const apiKey = extractAndValidateApiKey(); - const options = { - ...config, - }; - if (apiKey) { - options.headers = { - "x-api-key": apiKey, - }; - } - const host = getHost(); - const response = await axios_1.default.get(`${host}/${uri}`, options); - return response.data || []; -}; -exports.getAPICall = getAPICall; -function extractAndValidateApiKey() { - return tl.getInput("APIKey", false) || process.env.SM_API_KEY; -} -const getConfigFilePath = async (pkcs11FileName, extractPath) => { - const configFilePath = path_1.default.join(extractPath, "pkcs11properties.cfg"); - console.info("The pkcs11 library path set is ", path_1.default.join(extractPath, pkcs11FileName), "and config file path is ", configFilePath); - fs_1.default.writeFileSync(configFilePath, `name=signingmanager\r\nlibrary=${path_1.default.join(extractPath, pkcs11FileName)}\r\nslotListIndex=0`); - return configFilePath; -}; -exports.getConfigFilePath = getConfigFilePath; -exports.toolDownloaded = { - "ssm-scd-windows-x64": "ssm-scd.exe", - "smpkcs11-windows-x64": "smpkcs11.dll", - "smksp-windows-x86": "smksp-x86.dll", - "smksp-windows-x64": "smksp-x64.dll", - "smctl-windows-x64": "smctl.exe", - "smtools-windows-x64.msi": "smtools-windows-x64.msi", - "smtools-linux-x64.zip": "smtools-linux-x64.zip", - "smpkcs11-linux-x64": "smpkcs11.dll", - "smctl-linux-x64": "smctl", - "ssm-scd-linux-x64": "ssm-scd", - "smctk-apple-any": "smtools-mac-x64.zip", - "smctl-mac-x64": "smctl", - "smpkcs11-mac-x64": "smpkcs11.dmg", - "ssm-scd-mac-x64": "ssm-scd.dmg", -}; -const callApi = async (toolToBeUsed, getTempDirectoryPath) => { - const urlToDownloadTool = `${exports.uiAPIPrefix}/releases/noauth/${toolToBeUsed}/download`; - console.log(`Tool to be downloaded and used ${toolToBeUsed} and url is ${urlToDownloadTool}`); - const toolFileData = await (0, exports.getAPICall)(urlToDownloadTool, { - responseType: "arraybuffer", - }); - //file writing part - const clientToolsDownloadPath = path_1.default.join(getTempDirectoryPath, exports.toolDownloaded[toolToBeUsed]); - fs_1.default.writeFileSync(clientToolsDownloadPath, toolFileData); - console.log("file after write ", fs_1.default.statSync(clientToolsDownloadPath).size); - return clientToolsDownloadPath; -}; -exports.callApi = callApi; -module.exports = { - getAPICall: exports.getAPICall, - getConfigFilePath: exports.getConfigFilePath, - callApi: exports.callApi, - extractAndValidateApiKey, - toolDownloaded: exports.toolDownloaded, -}; - - -/***/ }), - -/***/ 2650: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports._exposeCertSettings = exports._exposeProxySettings = exports._normalizeSeparators = exports._isRooted = exports._getDirectoryName = exports._ensureRooted = exports._isUncPath = exports._loadData = exports._ensurePatternRooted = exports._getFindInfoFromPattern = exports._cloneMatchOptions = exports._legacyFindFiles_convertPatternToRegExp = exports._which = exports._checkPath = exports._exist = exports._debug = exports._error = exports._warning = exports._command = exports._getVariableKey = exports._getVariable = exports._loc = exports._setResourcePath = exports._setErrStream = exports._setStdStream = exports._writeLine = exports._endsWith = exports._startsWith = exports._vault = exports._knownVariableMap = void 0; -var fs = __nccwpck_require__(7147); -var path = __nccwpck_require__(1017); -var os = __nccwpck_require__(2037); -var minimatch = __nccwpck_require__(3973); -var util = __nccwpck_require__(3837); -var tcm = __nccwpck_require__(4529); -var vm = __nccwpck_require__(2937); -var semver = __nccwpck_require__(6858); -var crypto = __nccwpck_require__(6113); -/** - * Hash table of known variable info. The formatted env var name is the lookup key. - * - * The purpose of this hash table is to keep track of known variables. The hash table - * needs to be maintained for multiple reasons: - * 1) to distinguish between env vars and job vars - * 2) to distinguish between secret vars and public - * 3) to know the real variable name and not just the formatted env var name. - */ -exports._knownVariableMap = {}; -//----------------------------------------------------- -// Validation Checks -//----------------------------------------------------- -// async await needs generators in node 4.x+ -if (semver.lt(process.versions.node, '4.2.0')) { - _warning('Tasks require a new agent. Upgrade your agent or node to 4.2.0 or later'); -} -//----------------------------------------------------- -// String convenience -//----------------------------------------------------- -function _startsWith(str, start) { - return str.slice(0, start.length) == start; -} -exports._startsWith = _startsWith; -function _endsWith(str, end) { - return str.slice(-end.length) == end; -} -exports._endsWith = _endsWith; -//----------------------------------------------------- -// General Helpers -//----------------------------------------------------- -var _outStream = process.stdout; -var _errStream = process.stderr; -function _writeLine(str) { - _outStream.write(str + os.EOL); -} -exports._writeLine = _writeLine; -function _setStdStream(stdStream) { - _outStream = stdStream; -} -exports._setStdStream = _setStdStream; -function _setErrStream(errStream) { - _errStream = errStream; -} -exports._setErrStream = _setErrStream; -//----------------------------------------------------- -// Loc Helpers -//----------------------------------------------------- -var _locStringCache = {}; -var _resourceFiles = {}; -var _libResourceFileLoaded = false; -var _resourceCulture = 'en-US'; -function _loadResJson(resjsonFile) { - var resJson; - if (_exist(resjsonFile)) { - var resjsonContent = fs.readFileSync(resjsonFile, 'utf8').toString(); - // remove BOM - if (resjsonContent.indexOf('\uFEFF') == 0) { - resjsonContent = resjsonContent.slice(1); - } - try { - resJson = JSON.parse(resjsonContent); - } - catch (err) { - _debug('unable to parse resjson with err: ' + err.message); - } - } - else { - _debug('.resjson file not found: ' + resjsonFile); - } - return resJson; -} -function _loadLocStrings(resourceFile, culture) { - var locStrings = {}; - if (_exist(resourceFile)) { - var resourceJson = require(resourceFile); - if (resourceJson && resourceJson.hasOwnProperty('messages')) { - var locResourceJson; - // load up resource resjson for different culture - var localizedResourceFile = path.join(path.dirname(resourceFile), 'Strings', 'resources.resjson'); - var upperCulture = culture.toUpperCase(); - var cultures = []; - try { - cultures = fs.readdirSync(localizedResourceFile); - } - catch (ex) { } - for (var i = 0; i < cultures.length; i++) { - if (cultures[i].toUpperCase() == upperCulture) { - localizedResourceFile = path.join(localizedResourceFile, cultures[i], 'resources.resjson'); - if (_exist(localizedResourceFile)) { - locResourceJson = _loadResJson(localizedResourceFile); - } - break; - } - } - for (var key in resourceJson.messages) { - if (locResourceJson && locResourceJson.hasOwnProperty('loc.messages.' + key)) { - locStrings[key] = locResourceJson['loc.messages.' + key]; - } - else { - locStrings[key] = resourceJson.messages[key]; - } - } - } - } - else { - _warning('LIB_ResourceFile does not exist'); - } - return locStrings; -} -/** - * Sets the location of the resources json. This is typically the task.json file. - * Call once at the beginning of the script before any calls to loc. - * @param path Full path to the json. - * @param ignoreWarnings Won't throw warnings if path already set. - * @returns void - */ -function _setResourcePath(path, ignoreWarnings) { - if (ignoreWarnings === void 0) { ignoreWarnings = false; } - if (process.env['TASKLIB_INPROC_UNITS']) { - _resourceFiles = {}; - _libResourceFileLoaded = false; - _locStringCache = {}; - _resourceCulture = 'en-US'; - } - if (!_resourceFiles[path]) { - _checkPath(path, 'resource file path'); - _resourceFiles[path] = path; - _debug('adding resource file: ' + path); - _resourceCulture = _getVariable('system.culture') || _resourceCulture; - var locStrs = _loadLocStrings(path, _resourceCulture); - for (var key in locStrs) { - //cache loc string - _locStringCache[key] = locStrs[key]; - } - } - else { - if (ignoreWarnings) { - _debug(_loc('LIB_ResourceFileAlreadySet', path)); - } - else { - _warning(_loc('LIB_ResourceFileAlreadySet', path)); - } - } -} -exports._setResourcePath = _setResourcePath; -/** - * Gets the localized string from the json resource file. Optionally formats with additional params. - * - * @param key key of the resources string in the resource file - * @param param additional params for formatting the string - * @returns string - */ -function _loc(key) { - var param = []; - for (var _i = 1; _i < arguments.length; _i++) { - param[_i - 1] = arguments[_i]; - } - if (!_libResourceFileLoaded) { - // merge loc strings from azure-pipelines-task-lib. - var libResourceFile = __nccwpck_require__.ab + "lib.json"; - var libLocStrs = _loadLocStrings(__nccwpck_require__.ab + "lib.json", _resourceCulture); - for (var libKey in libLocStrs) { - //cache azure-pipelines-task-lib loc string - _locStringCache[libKey] = libLocStrs[libKey]; - } - _libResourceFileLoaded = true; - } - var locString; - ; - if (_locStringCache.hasOwnProperty(key)) { - locString = _locStringCache[key]; - } - else { - if (Object.keys(_resourceFiles).length <= 0) { - _warning("Resource file haven't been set, can't find loc string for key: " + key); - } - else { - _warning("Can't find loc string for key: " + key); - } - locString = key; - } - if (param.length > 0) { - return util.format.apply(this, [locString].concat(param)); - } - else { - return locString; - } -} -exports._loc = _loc; -//----------------------------------------------------- -// Input Helpers -//----------------------------------------------------- -/** - * Gets a variable value that is defined on the build/release definition or set at runtime. - * - * @param name name of the variable to get - * @returns string - */ -function _getVariable(name) { - var varval; - // get the metadata - var info; - var key = _getVariableKey(name); - if (exports._knownVariableMap.hasOwnProperty(key)) { - info = exports._knownVariableMap[key]; - } - if (info && info.secret) { - // get the secret value - varval = exports._vault.retrieveSecret('SECRET_' + key); - } - else { - // get the public value - varval = process.env[key]; - // fallback for pre 2.104.1 agent - if (!varval && name.toUpperCase() == 'AGENT.JOBSTATUS') { - varval = process.env['agent.jobstatus']; - } - } - _debug(name + '=' + varval); - return varval; -} -exports._getVariable = _getVariable; -function _getVariableKey(name) { - if (!name) { - throw new Error(_loc('LIB_ParameterIsRequired', 'name')); - } - return name.replace(/\./g, '_').replace(/ /g, '_').toUpperCase(); -} -exports._getVariableKey = _getVariableKey; -//----------------------------------------------------- -// Cmd Helpers -//----------------------------------------------------- -function _command(command, properties, message) { - var taskCmd = new tcm.TaskCommand(command, properties, message); - _writeLine(taskCmd.toString()); -} -exports._command = _command; -function _warning(message) { - _command('task.issue', { 'type': 'warning' }, message); -} -exports._warning = _warning; -function _error(message) { - _command('task.issue', { 'type': 'error' }, message); -} -exports._error = _error; -function _debug(message) { - _command('task.debug', null, message); -} -exports._debug = _debug; -// //----------------------------------------------------- -// // Disk Functions -// //----------------------------------------------------- -/** - * Returns whether a path exists. - * - * @param path path to check - * @returns boolean - */ -function _exist(path) { - var exist = false; - try { - exist = !!(path && fs.statSync(path) != null); - } - catch (err) { - if (err && err.code === 'ENOENT') { - exist = false; - } - else { - throw err; - } - } - return exist; -} -exports._exist = _exist; -/** - * Checks whether a path exists. - * If the path does not exist, it will throw. - * - * @param p path to check - * @param name name only used in error message to identify the path - * @returns void - */ -function _checkPath(p, name) { - _debug('check path : ' + p); - if (!_exist(p)) { - throw new Error(_loc('LIB_PathNotFound', name, p)); - } -} -exports._checkPath = _checkPath; -/** - * Returns path of a tool had the tool actually been invoked. Resolves via paths. - * If you check and the tool does not exist, it will throw. - * - * @param tool name of the tool - * @param check whether to check if tool exists - * @returns string - */ -function _which(tool, check) { - if (!tool) { - throw new Error('parameter \'tool\' is required'); - } - // recursive when check=true - if (check) { - var result = _which(tool, false); - if (result) { - return result; - } - else { - if (process.platform == 'win32') { - throw new Error(_loc('LIB_WhichNotFound_Win', tool)); - } - else { - throw new Error(_loc('LIB_WhichNotFound_Linux', tool)); - } - } - } - _debug("which '" + tool + "'"); - try { - // build the list of extensions to try - var extensions = []; - if (process.platform == 'win32' && process.env['PATHEXT']) { - for (var _i = 0, _a = process.env['PATHEXT'].split(path.delimiter); _i < _a.length; _i++) { - var extension = _a[_i]; - if (extension) { - extensions.push(extension); - } - } - } - // if it's rooted, return it if exists. otherwise return empty. - if (_isRooted(tool)) { - var filePath = _tryGetExecutablePath(tool, extensions); - if (filePath) { - _debug("found: '" + filePath + "'"); - return filePath; - } - _debug('not found'); - return ''; - } - // if any path separators, return empty - if (tool.indexOf('/') >= 0 || (process.platform == 'win32' && tool.indexOf('\\') >= 0)) { - _debug('not found'); - return ''; - } - // build the list of directories - // - // Note, technically "where" checks the current directory on Windows. From a task lib perspective, - // it feels like we should not do this. Checking the current directory seems like more of a use - // case of a shell, and the which() function exposed by the task lib should strive for consistency - // across platforms. - var directories = []; - if (process.env['PATH']) { - for (var _b = 0, _c = process.env['PATH'].split(path.delimiter); _b < _c.length; _b++) { - var p = _c[_b]; - if (p) { - directories.push(p); - } - } - } - // return the first match - for (var _d = 0, directories_1 = directories; _d < directories_1.length; _d++) { - var directory = directories_1[_d]; - var filePath = _tryGetExecutablePath(directory + path.sep + tool, extensions); - if (filePath) { - _debug("found: '" + filePath + "'"); - return filePath; - } - } - _debug('not found'); - return ''; - } - catch (err) { - throw new Error(_loc('LIB_OperationFailed', 'which', err.message)); - } -} -exports._which = _which; -/** - * Best effort attempt to determine whether a file exists and is executable. - * @param filePath file path to check - * @param extensions additional file extensions to try - * @return if file exists and is executable, returns the file path. otherwise empty string. - */ -function _tryGetExecutablePath(filePath, extensions) { - try { - // test file exists - var stats = fs.statSync(filePath); - if (stats.isFile()) { - if (process.platform == 'win32') { - // on Windows, test for valid extension - var isExecutable = false; - var fileName = path.basename(filePath); - var dotIndex = fileName.lastIndexOf('.'); - if (dotIndex >= 0) { - var upperExt_1 = fileName.substr(dotIndex).toUpperCase(); - if (extensions.some(function (validExt) { return validExt.toUpperCase() == upperExt_1; })) { - return filePath; - } - } - } - else { - if (isUnixExecutable(stats)) { - return filePath; - } - } - } - } - catch (err) { - if (err.code != 'ENOENT') { - _debug("Unexpected error attempting to determine if executable file exists '" + filePath + "': " + err); - } - } - // try each extension - var originalFilePath = filePath; - for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) { - var extension = extensions_1[_i]; - var found = false; - var filePath_1 = originalFilePath + extension; - try { - var stats = fs.statSync(filePath_1); - if (stats.isFile()) { - if (process.platform == 'win32') { - // preserve the case of the actual file (since an extension was appended) - try { - var directory = path.dirname(filePath_1); - var upperName = path.basename(filePath_1).toUpperCase(); - for (var _a = 0, _b = fs.readdirSync(directory); _a < _b.length; _a++) { - var actualName = _b[_a]; - if (upperName == actualName.toUpperCase()) { - filePath_1 = path.join(directory, actualName); - break; - } - } - } - catch (err) { - _debug("Unexpected error attempting to determine the actual case of the file '" + filePath_1 + "': " + err); - } - return filePath_1; - } - else { - if (isUnixExecutable(stats)) { - return filePath_1; - } - } - } - } - catch (err) { - if (err.code != 'ENOENT') { - _debug("Unexpected error attempting to determine if executable file exists '" + filePath_1 + "': " + err); - } - } - } - return ''; -} -// on Mac/Linux, test the execute bit -// R W X R W X R W X -// 256 128 64 32 16 8 4 2 1 -function isUnixExecutable(stats) { - return (stats.mode & 1) > 0 || ((stats.mode & 8) > 0 && stats.gid === process.getgid()) || ((stats.mode & 64) > 0 && stats.uid === process.getuid()); -} -function _legacyFindFiles_convertPatternToRegExp(pattern) { - pattern = (process.platform == 'win32' ? pattern.replace(/\\/g, '/') : pattern) // normalize separator on Windows - .replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') // regex escape - from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - .replace(/\\\/\\\*\\\*\\\//g, '((\/.+/)|(\/))') // replace directory globstar, e.g. /hello/**/world - .replace(/\\\*\\\*/g, '.*') // replace remaining globstars with a wildcard that can span directory separators, e.g. /hello/**dll - .replace(/\\\*/g, '[^\/]*') // replace asterisks with a wildcard that cannot span directory separators, e.g. /hello/*.dll - .replace(/\\\?/g, '[^\/]'); // replace single character wildcards, e.g. /hello/log?.dll - pattern = "^" + pattern + "$"; - var flags = process.platform == 'win32' ? 'i' : ''; - return new RegExp(pattern, flags); -} -exports._legacyFindFiles_convertPatternToRegExp = _legacyFindFiles_convertPatternToRegExp; -function _cloneMatchOptions(matchOptions) { - return { - debug: matchOptions.debug, - nobrace: matchOptions.nobrace, - noglobstar: matchOptions.noglobstar, - dot: matchOptions.dot, - noext: matchOptions.noext, - nocase: matchOptions.nocase, - nonull: matchOptions.nonull, - matchBase: matchOptions.matchBase, - nocomment: matchOptions.nocomment, - nonegate: matchOptions.nonegate, - flipNegate: matchOptions.flipNegate - }; -} -exports._cloneMatchOptions = _cloneMatchOptions; -function _getFindInfoFromPattern(defaultRoot, pattern, matchOptions) { - // parameter validation - if (!defaultRoot) { - throw new Error('getFindRootFromPattern() parameter defaultRoot cannot be empty'); - } - if (!pattern) { - throw new Error('getFindRootFromPattern() parameter pattern cannot be empty'); - } - if (!matchOptions.nobrace) { - throw new Error('getFindRootFromPattern() expected matchOptions.nobrace to be true'); - } - // for the sake of determining the findPath, pretend nocase=false - matchOptions = _cloneMatchOptions(matchOptions); - matchOptions.nocase = false; - // check if basename only and matchBase=true - if (matchOptions.matchBase && - !_isRooted(pattern) && - (process.platform == 'win32' ? pattern.replace(/\\/g, '/') : pattern).indexOf('/') < 0) { - return { - adjustedPattern: pattern, - findPath: defaultRoot, - statOnly: false, - }; - } - // the technique applied by this function is to use the information on the Minimatch object determine - // the findPath. Minimatch breaks the pattern into path segments, and exposes information about which - // segments are literal vs patterns. - // - // note, the technique currently imposes a limitation for drive-relative paths with a glob in the - // first segment, e.g. C:hello*/world. it's feasible to overcome this limitation, but is left unsolved - // for now. - var minimatchObj = new minimatch.Minimatch(pattern, matchOptions); - // the "set" property is an array of arrays of parsed path segment info. the outer array should only - // contain one item, otherwise something went wrong. brace expansion can result in multiple arrays, - // but that should be turned off by the time this function is reached. - if (minimatchObj.set.length != 1) { - throw new Error('getFindRootFromPattern() expected Minimatch(...).set.length to be 1. Actual: ' + minimatchObj.set.length); - } - var literalSegments = []; - for (var _i = 0, _a = minimatchObj.set[0]; _i < _a.length; _i++) { - var parsedSegment = _a[_i]; - if (typeof parsedSegment == 'string') { - // the item is a string when the original input for the path segment does not contain any - // unescaped glob characters. - // - // note, the string here is already unescaped (i.e. glob escaping removed), so it is ready - // to pass to find() as-is. for example, an input string 'hello\\*world' => 'hello*world'. - literalSegments.push(parsedSegment); - continue; - } - break; - } - // join the literal segments back together. Minimatch converts '\' to '/' on Windows, then squashes - // consequetive slashes, and finally splits on slash. this means that UNC format is lost, but can - // be detected from the original pattern. - var joinedSegments = literalSegments.join('/'); - if (joinedSegments && process.platform == 'win32' && _startsWith(pattern.replace(/\\/g, '/'), '//')) { - joinedSegments = '/' + joinedSegments; // restore UNC format - } - // determine the find path - var findPath; - if (_isRooted(pattern)) { // the pattern was rooted - findPath = joinedSegments; - } - else if (joinedSegments) { // the pattern was not rooted, and literal segments were found - findPath = _ensureRooted(defaultRoot, joinedSegments); - } - else { // the pattern was not rooted, and no literal segments were found - findPath = defaultRoot; - } - // clean up the path - if (findPath) { - findPath = _getDirectoryName(_ensureRooted(findPath, '_')); // hack to remove unnecessary trailing slash - findPath = _normalizeSeparators(findPath); // normalize slashes - } - return { - adjustedPattern: _ensurePatternRooted(defaultRoot, pattern), - findPath: findPath, - statOnly: literalSegments.length == minimatchObj.set[0].length, - }; -} -exports._getFindInfoFromPattern = _getFindInfoFromPattern; -function _ensurePatternRooted(root, p) { - if (!root) { - throw new Error('ensurePatternRooted() parameter "root" cannot be empty'); - } - if (!p) { - throw new Error('ensurePatternRooted() parameter "p" cannot be empty'); - } - if (_isRooted(p)) { - return p; - } - // normalize root - root = _normalizeSeparators(root); - // escape special glob characters - root = (process.platform == 'win32' ? root : root.replace(/\\/g, '\\\\')) // escape '\' on OSX/Linux - .replace(/(\[)(?=[^\/]+\])/g, '[[]') // escape '[' when ']' follows within the path segment - .replace(/\?/g, '[?]') // escape '?' - .replace(/\*/g, '[*]') // escape '*' - .replace(/\+\(/g, '[+](') // escape '+(' - .replace(/@\(/g, '[@](') // escape '@(' - .replace(/!\(/g, '[!]('); // escape '!(' - return _ensureRooted(root, p); -} -exports._ensurePatternRooted = _ensurePatternRooted; -//------------------------------------------------------------------- -// Populate the vault with sensitive data. Inputs and Endpoints -//------------------------------------------------------------------- -function _loadData() { - // in agent, prefer TempDirectory then workFolder. - // In interactive dev mode, it won't be - var keyPath = _getVariable("agent.TempDirectory") || _getVariable("agent.workFolder") || process.cwd(); - exports._vault = new vm.Vault(keyPath); - exports._knownVariableMap = {}; - _debug('loading inputs and endpoints'); - var loaded = 0; - for (var envvar in process.env) { - if (_startsWith(envvar, 'INPUT_') || - _startsWith(envvar, 'ENDPOINT_AUTH_') || - _startsWith(envvar, 'SECUREFILE_TICKET_') || - _startsWith(envvar, 'SECRET_') || - _startsWith(envvar, 'VSTS_TASKVARIABLE_')) { - // Record the secret variable metadata. This is required by getVariable to know whether - // to retrieve the value from the vault. In a 2.104.1 agent or higher, this metadata will - // be overwritten when the VSTS_SECRET_VARIABLES env var is processed below. - if (_startsWith(envvar, 'SECRET_')) { - var variableName = envvar.substring('SECRET_'.length); - if (variableName) { - // This is technically not the variable name (has underscores instead of dots), - // but it's good enough to make getVariable work in a pre-2.104.1 agent where - // the VSTS_SECRET_VARIABLES env var is not defined. - exports._knownVariableMap[_getVariableKey(variableName)] = { name: variableName, secret: true }; - } - } - // store the secret - var value = process.env[envvar]; - if (value) { - ++loaded; - _debug('loading ' + envvar); - exports._vault.storeSecret(envvar, value); - delete process.env[envvar]; - } - } - } - _debug('loaded ' + loaded); - // store public variable metadata - var names; - try { - names = JSON.parse(process.env['VSTS_PUBLIC_VARIABLES'] || '[]'); - } - catch (err) { - throw new Error('Failed to parse VSTS_PUBLIC_VARIABLES as JSON. ' + err); // may occur during interactive testing - } - names.forEach(function (name) { - exports._knownVariableMap[_getVariableKey(name)] = { name: name, secret: false }; - }); - delete process.env['VSTS_PUBLIC_VARIABLES']; - // store secret variable metadata - try { - names = JSON.parse(process.env['VSTS_SECRET_VARIABLES'] || '[]'); - } - catch (err) { - throw new Error('Failed to parse VSTS_SECRET_VARIABLES as JSON. ' + err); // may occur during interactive testing - } - names.forEach(function (name) { - exports._knownVariableMap[_getVariableKey(name)] = { name: name, secret: true }; - }); - delete process.env['VSTS_SECRET_VARIABLES']; - // avoid loading twice (overwrites .taskkey) - global['_vsts_task_lib_loaded'] = true; -} -exports._loadData = _loadData; -//-------------------------------------------------------------------------------- -// Internal path helpers. -//-------------------------------------------------------------------------------- -/** - * Defines if path is unc-path. - * - * @param path a path to a file. - * @returns true if path starts with double backslash, otherwise returns false. - */ -function _isUncPath(path) { - return /^\\\\[^\\]/.test(path); -} -exports._isUncPath = _isUncPath; -function _ensureRooted(root, p) { - if (!root) { - throw new Error('ensureRooted() parameter "root" cannot be empty'); - } - if (!p) { - throw new Error('ensureRooted() parameter "p" cannot be empty'); - } - if (_isRooted(p)) { - return p; - } - if (process.platform == 'win32' && root.match(/^[A-Z]:$/i)) { // e.g. C: - return root + p; - } - // ensure root ends with a separator - if (_endsWith(root, '/') || (process.platform == 'win32' && _endsWith(root, '\\'))) { - // root already ends with a separator - } - else { - root += path.sep; // append separator - } - return root + p; -} -exports._ensureRooted = _ensureRooted; -/** - * Determines the parent path and trims trailing slashes (when safe). Path separators are normalized - * in the result. This function works similar to the .NET System.IO.Path.GetDirectoryName() method. - * For example, C:\hello\world\ returns C:\hello\world (trailing slash removed). Returns empty when - * no higher directory can be determined. - */ -function _getDirectoryName(p) { - // short-circuit if empty - if (!p) { - return ''; - } - // normalize separators - p = _normalizeSeparators(p); - // on Windows, the goal of this function is to match the behavior of - // [System.IO.Path]::GetDirectoryName(), e.g. - // C:/ => - // C:/hello => C:\ - // C:/hello/ => C:\hello - // C:/hello/world => C:\hello - // C:/hello/world/ => C:\hello\world - // C: => - // C:hello => C: - // C:hello/ => C:hello - // / => - // /hello => \ - // /hello/ => \hello - // //hello => - // //hello/ => - // //hello/world => - // //hello/world/ => \\hello\world - // - // unfortunately, path.dirname() can't simply be used. for example, on Windows - // it yields different results from Path.GetDirectoryName: - // C:/ => C:/ - // C:/hello => C:/ - // C:/hello/ => C:/ - // C:/hello/world => C:/hello - // C:/hello/world/ => C:/hello - // C: => C: - // C:hello => C: - // C:hello/ => C: - // / => / - // /hello => / - // /hello/ => / - // //hello => / - // //hello/ => / - // //hello/world => //hello/world - // //hello/world/ => //hello/world/ - // //hello/world/again => //hello/world/ - // //hello/world/again/ => //hello/world/ - // //hello/world/again/again => //hello/world/again - // //hello/world/again/again/ => //hello/world/again - if (process.platform == 'win32') { - if (/^[A-Z]:\\?[^\\]+$/i.test(p)) { // e.g. C:\hello or C:hello - return p.charAt(2) == '\\' ? p.substring(0, 3) : p.substring(0, 2); - } - else if (/^[A-Z]:\\?$/i.test(p)) { // e.g. C:\ or C: - return ''; - } - var lastSlashIndex = p.lastIndexOf('\\'); - if (lastSlashIndex < 0) { // file name only - return ''; - } - else if (p == '\\') { // relative root - return ''; - } - else if (lastSlashIndex == 0) { // e.g. \\hello - return '\\'; - } - else if (/^\\\\[^\\]+(\\[^\\]*)?$/.test(p)) { // UNC root, e.g. \\hello or \\hello\ or \\hello\world - return ''; - } - return p.substring(0, lastSlashIndex); // e.g. hello\world => hello or hello\world\ => hello\world - // note, this means trailing slashes for non-root directories - // (i.e. not C:\, \, or \\unc\) will simply be removed. - } - // OSX/Linux - if (p.indexOf('/') < 0) { // file name only - return ''; - } - else if (p == '/') { - return ''; - } - else if (_endsWith(p, '/')) { - return p.substring(0, p.length - 1); - } - return path.dirname(p); -} -exports._getDirectoryName = _getDirectoryName; -/** - * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like: - * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases). - */ -function _isRooted(p) { - p = _normalizeSeparators(p); - if (!p) { - throw new Error('isRooted() parameter "p" cannot be empty'); - } - if (process.platform == 'win32') { - return _startsWith(p, '\\') || // e.g. \ or \hello or \\hello - /^[A-Z]:/i.test(p); // e.g. C: or C:\hello - } - return _startsWith(p, '/'); // e.g. /hello -} -exports._isRooted = _isRooted; -function _normalizeSeparators(p) { - p = p || ''; - if (process.platform == 'win32') { - // convert slashes on Windows - p = p.replace(/\//g, '\\'); - // remove redundant slashes - var isUnc = /^\\\\+[^\\]/.test(p); // e.g. \\hello - return (isUnc ? '\\' : '') + p.replace(/\\\\+/g, '\\'); // preserve leading // for UNC - } - // remove redundant slashes - return p.replace(/\/\/+/g, '/'); -} -exports._normalizeSeparators = _normalizeSeparators; -//----------------------------------------------------- -// Expose proxy information to vsts-node-api -//----------------------------------------------------- -function _exposeProxySettings() { - var proxyUrl = _getVariable('Agent.ProxyUrl'); - if (proxyUrl && proxyUrl.length > 0) { - var proxyUsername = _getVariable('Agent.ProxyUsername'); - var proxyPassword = _getVariable('Agent.ProxyPassword'); - var proxyBypassHostsJson = _getVariable('Agent.ProxyBypassList'); - global['_vsts_task_lib_proxy_url'] = proxyUrl; - global['_vsts_task_lib_proxy_username'] = proxyUsername; - global['_vsts_task_lib_proxy_bypass'] = proxyBypassHostsJson; - global['_vsts_task_lib_proxy_password'] = _exposeTaskLibSecret('proxy', proxyPassword || ''); - _debug('expose agent proxy configuration.'); - global['_vsts_task_lib_proxy'] = true; - } -} -exports._exposeProxySettings = _exposeProxySettings; -//----------------------------------------------------- -// Expose certificate information to vsts-node-api -//----------------------------------------------------- -function _exposeCertSettings() { - var ca = _getVariable('Agent.CAInfo'); - if (ca) { - global['_vsts_task_lib_cert_ca'] = ca; - } - var clientCert = _getVariable('Agent.ClientCert'); - if (clientCert) { - var clientCertKey = _getVariable('Agent.ClientCertKey'); - var clientCertArchive = _getVariable('Agent.ClientCertArchive'); - var clientCertPassword = _getVariable('Agent.ClientCertPassword'); - global['_vsts_task_lib_cert_clientcert'] = clientCert; - global['_vsts_task_lib_cert_key'] = clientCertKey; - global['_vsts_task_lib_cert_archive'] = clientCertArchive; - global['_vsts_task_lib_cert_passphrase'] = _exposeTaskLibSecret('cert', clientCertPassword || ''); - } - if (ca || clientCert) { - _debug('expose agent certificate configuration.'); - global['_vsts_task_lib_cert'] = true; - } - var skipCertValidation = _getVariable('Agent.SkipCertValidation') || 'false'; - if (skipCertValidation) { - global['_vsts_task_lib_skip_cert_validation'] = skipCertValidation.toUpperCase() === 'TRUE'; - } -} -exports._exposeCertSettings = _exposeCertSettings; -// We store the encryption key on disk and hold the encrypted content and key file in memory -// return base64encoded:base64encoded -// downstream vsts-node-api will retrieve the secret later -function _exposeTaskLibSecret(keyFile, secret) { - if (secret) { - var encryptKey = crypto.randomBytes(256); - var cipher = crypto.createCipher("aes-256-ctr", encryptKey); - var encryptedContent = cipher.update(secret, "utf8", "hex"); - encryptedContent += cipher.final("hex"); - var storageFile = path.join(_getVariable('Agent.TempDirectory') || _getVariable("agent.workFolder") || process.cwd(), keyFile); - fs.writeFileSync(storageFile, encryptKey.toString('base64'), { encoding: 'utf8' }); - return new Buffer(storageFile).toString('base64') + ':' + new Buffer(encryptedContent).toString('base64'); - } -} - - -/***/ }), - -/***/ 8908: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.updateReleaseName = exports.addBuildTag = exports.updateBuildNumber = exports.uploadBuildLog = exports.associateArtifact = exports.uploadArtifact = exports.logIssue = exports.logDetail = exports.setProgress = exports.setEndpoint = exports.addAttachment = exports.uploadSummary = exports.prependPath = exports.uploadFile = exports.CodeCoverageEnabler = exports.CodeCoveragePublisher = exports.TestPublisher = exports.getHttpCertConfiguration = exports.getHttpProxyConfiguration = exports.findMatch = exports.filter = exports.match = exports.tool = exports.execSync = exports.exec = exports.rmRF = exports.legacyFindFiles = exports.find = exports.retry = exports.mv = exports.cp = exports.ls = exports.which = exports.resolve = exports.mkdirP = exports.popd = exports.pushd = exports.cd = exports.checkPath = exports.cwd = exports.getAgentMode = exports.getPlatform = exports.osType = exports.writeFile = exports.exist = exports.stats = exports.debug = exports.error = exports.warning = exports.command = exports.setTaskVariable = exports.getTaskVariable = exports.getSecureFileTicket = exports.getSecureFileName = exports.getEndpointAuthorization = exports.getEndpointAuthorizationParameterRequired = exports.getEndpointAuthorizationParameter = exports.getEndpointAuthorizationSchemeRequired = exports.getEndpointAuthorizationScheme = exports.getEndpointDataParameterRequired = exports.getEndpointDataParameter = exports.getEndpointUrlRequired = exports.getEndpointUrl = exports.getPathInputRequired = exports.getPathInput = exports.filePathSupplied = exports.getDelimitedInput = exports.getBoolInput = exports.getInputRequired = exports.getInput = exports.setSecret = exports.setVariable = exports.getVariables = exports.assertAgent = exports.getVariable = exports.loc = exports.setResourcePath = exports.setResult = exports.setErrStream = exports.setStdStream = exports.AgentHostedMode = exports.Platform = exports.FieldType = exports.ArtifactType = exports.IssueType = exports.TaskState = exports.TaskResult = void 0; -var shell = __nccwpck_require__(3516); -var childProcess = __nccwpck_require__(2081); -var fs = __nccwpck_require__(7147); -var path = __nccwpck_require__(1017); -var os = __nccwpck_require__(2037); -var minimatch = __nccwpck_require__(3973); -var im = __nccwpck_require__(2650); -var tcm = __nccwpck_require__(4529); -var trm = __nccwpck_require__(5571); -var semver = __nccwpck_require__(6858); -var TaskResult; -(function (TaskResult) { - TaskResult[TaskResult["Succeeded"] = 0] = "Succeeded"; - TaskResult[TaskResult["SucceededWithIssues"] = 1] = "SucceededWithIssues"; - TaskResult[TaskResult["Failed"] = 2] = "Failed"; - TaskResult[TaskResult["Cancelled"] = 3] = "Cancelled"; - TaskResult[TaskResult["Skipped"] = 4] = "Skipped"; -})(TaskResult = exports.TaskResult || (exports.TaskResult = {})); -var TaskState; -(function (TaskState) { - TaskState[TaskState["Unknown"] = 0] = "Unknown"; - TaskState[TaskState["Initialized"] = 1] = "Initialized"; - TaskState[TaskState["InProgress"] = 2] = "InProgress"; - TaskState[TaskState["Completed"] = 3] = "Completed"; -})(TaskState = exports.TaskState || (exports.TaskState = {})); -var IssueType; -(function (IssueType) { - IssueType[IssueType["Error"] = 0] = "Error"; - IssueType[IssueType["Warning"] = 1] = "Warning"; -})(IssueType = exports.IssueType || (exports.IssueType = {})); -var ArtifactType; -(function (ArtifactType) { - ArtifactType[ArtifactType["Container"] = 0] = "Container"; - ArtifactType[ArtifactType["FilePath"] = 1] = "FilePath"; - ArtifactType[ArtifactType["VersionControl"] = 2] = "VersionControl"; - ArtifactType[ArtifactType["GitRef"] = 3] = "GitRef"; - ArtifactType[ArtifactType["TfvcLabel"] = 4] = "TfvcLabel"; -})(ArtifactType = exports.ArtifactType || (exports.ArtifactType = {})); -var FieldType; -(function (FieldType) { - FieldType[FieldType["AuthParameter"] = 0] = "AuthParameter"; - FieldType[FieldType["DataParameter"] = 1] = "DataParameter"; - FieldType[FieldType["Url"] = 2] = "Url"; -})(FieldType = exports.FieldType || (exports.FieldType = {})); -/** Platforms supported by our build agent */ -var Platform; -(function (Platform) { - Platform[Platform["Windows"] = 0] = "Windows"; - Platform[Platform["MacOS"] = 1] = "MacOS"; - Platform[Platform["Linux"] = 2] = "Linux"; -})(Platform = exports.Platform || (exports.Platform = {})); -var AgentHostedMode; -(function (AgentHostedMode) { - AgentHostedMode[AgentHostedMode["Unknown"] = 0] = "Unknown"; - AgentHostedMode[AgentHostedMode["SelfHosted"] = 1] = "SelfHosted"; - AgentHostedMode[AgentHostedMode["MsHosted"] = 2] = "MsHosted"; -})(AgentHostedMode = exports.AgentHostedMode || (exports.AgentHostedMode = {})); -//----------------------------------------------------- -// General Helpers -//----------------------------------------------------- -exports.setStdStream = im._setStdStream; -exports.setErrStream = im._setErrStream; -//----------------------------------------------------- -// Results -//----------------------------------------------------- -/** - * Sets the result of the task. - * Execution will continue. - * If not set, task will be Succeeded. - * If multiple calls are made to setResult the most pessimistic call wins (Failed) regardless of the order of calls. - * - * @param result TaskResult enum of Succeeded, SucceededWithIssues, Failed, Cancelled or Skipped. - * @param message A message which will be logged as an error issue if the result is Failed. - * @param done Optional. Instructs the agent the task is done. This is helpful when child processes - * may still be running and prevent node from fully exiting. This argument is supported - * from agent version 2.142.0 or higher (otherwise will no-op). - * @returns void - */ -function setResult(result, message, done) { - exports.debug('task result: ' + TaskResult[result]); - // add an error issue - if (result == TaskResult.Failed && message) { - exports.error(message); - } - else if (result == TaskResult.SucceededWithIssues && message) { - exports.warning(message); - } - // task.complete - var properties = { 'result': TaskResult[result] }; - if (done) { - properties['done'] = 'true'; - } - exports.command('task.complete', properties, message); -} -exports.setResult = setResult; -// -// Catching all exceptions -// -process.on('uncaughtException', function (err) { - setResult(TaskResult.Failed, exports.loc('LIB_UnhandledEx', err.message)); - exports.error(String(err.stack)); -}); -//----------------------------------------------------- -// Loc Helpers -//----------------------------------------------------- -exports.setResourcePath = im._setResourcePath; -exports.loc = im._loc; -//----------------------------------------------------- -// Input Helpers -//----------------------------------------------------- -exports.getVariable = im._getVariable; -/** - * Asserts the agent version is at least the specified minimum. - * - * @param minimum minimum version version - must be 2.104.1 or higher - */ -function assertAgent(minimum) { - if (semver.lt(minimum, '2.104.1')) { - throw new Error('assertAgent() requires the parameter to be 2.104.1 or higher'); - } - var agent = exports.getVariable('Agent.Version'); - if (agent && semver.lt(agent, minimum)) { - throw new Error("Agent version " + minimum + " or higher is required"); - } -} -exports.assertAgent = assertAgent; -/** - * Gets a snapshot of the current state of all job variables available to the task. - * Requires a 2.104.1 agent or higher for full functionality. - * - * Limitations on an agent prior to 2.104.1: - * 1) The return value does not include all public variables. Only public variables - * that have been added using setVariable are returned. - * 2) The name returned for each secret variable is the formatted environment variable - * name, not the actual variable name (unless it was set explicitly at runtime using - * setVariable). - * - * @returns VariableInfo[] - */ -function getVariables() { - return Object.keys(im._knownVariableMap) - .map(function (key) { - var info = im._knownVariableMap[key]; - return { name: info.name, value: exports.getVariable(info.name), secret: info.secret }; - }); -} -exports.getVariables = getVariables; -/** - * Sets a variable which will be available to subsequent tasks as well. - * - * @param name name of the variable to set - * @param val value to set - * @param secret whether variable is secret. Multi-line secrets are not allowed. Optional, defaults to false - * @param isOutput whether variable is an output variable. Optional, defaults to false - * @returns void - */ -function setVariable(name, val, secret, isOutput) { - if (secret === void 0) { secret = false; } - if (isOutput === void 0) { isOutput = false; } - // once a secret always a secret - var key = im._getVariableKey(name); - if (im._knownVariableMap.hasOwnProperty(key)) { - secret = secret || im._knownVariableMap[key].secret; - } - // store the value - var varValue = val || ''; - exports.debug('set ' + name + '=' + (secret && varValue ? '********' : varValue)); - if (secret) { - if (varValue && varValue.match(/\r|\n/) && ("" + process.env['SYSTEM_UNSAFEALLOWMULTILINESECRET']).toUpperCase() != 'TRUE') { - throw new Error(exports.loc('LIB_MultilineSecret')); - } - im._vault.storeSecret('SECRET_' + key, varValue); - delete process.env[key]; - } - else { - process.env[key] = varValue; - } - // store the metadata - im._knownVariableMap[key] = { name: name, secret: secret }; - // write the setvariable command - exports.command('task.setvariable', { 'variable': name || '', isOutput: (isOutput || false).toString(), 'issecret': (secret || false).toString() }, varValue); -} -exports.setVariable = setVariable; -/** - * Registers a value with the logger, so the value will be masked from the logs. Multi-line secrets are not allowed. - * - * @param val value to register - */ -function setSecret(val) { - if (val) { - if (val.match(/\r|\n/) && ("" + process.env['SYSTEM_UNSAFEALLOWMULTILINESECRET']).toUpperCase() !== 'TRUE') { - throw new Error(exports.loc('LIB_MultilineSecret')); - } - exports.command('task.setsecret', {}, val); - } -} -exports.setSecret = setSecret; -/** - * Gets the value of an input. - * If required is true and the value is not set, it will throw. - * - * @param name name of the input to get - * @param required whether input is required. optional, defaults to false - * @returns string - */ -function getInput(name, required) { - var inval = im._vault.retrieveSecret('INPUT_' + im._getVariableKey(name)); - if (required && !inval) { - throw new Error(exports.loc('LIB_InputRequired', name)); - } - exports.debug(name + '=' + inval); - return inval; -} -exports.getInput = getInput; -/** - * Gets the value of an input. - * If the value is not set, it will throw. - * - * @param name name of the input to get - * @returns string - */ -function getInputRequired(name) { - return getInput(name, true); -} -exports.getInputRequired = getInputRequired; -/** - * Gets the value of an input and converts to a bool. Convenience. - * If required is true and the value is not set, it will throw. - * If required is false and the value is not set, returns false. - * - * @param name name of the bool input to get - * @param required whether input is required. optional, defaults to false - * @returns boolean - */ -function getBoolInput(name, required) { - return (getInput(name, required) || '').toUpperCase() == "TRUE"; -} -exports.getBoolInput = getBoolInput; -/** - * Gets the value of an input and splits the value using a delimiter (space, comma, etc). - * Empty values are removed. This function is useful for splitting an input containing a simple - * list of items - such as build targets. - * IMPORTANT: Do not use this function for splitting additional args! Instead use argString(), which - * follows normal argument splitting rules and handles values encapsulated by quotes. - * If required is true and the value is not set, it will throw. - * - * @param name name of the input to get - * @param delim delimiter to split on - * @param required whether input is required. optional, defaults to false - * @returns string[] - */ -function getDelimitedInput(name, delim, required) { - var inputVal = getInput(name, required); - if (!inputVal) { - return []; - } - var result = []; - inputVal.split(delim).forEach(function (x) { - if (x) { - result.push(x); - } - }); - return result; -} -exports.getDelimitedInput = getDelimitedInput; -/** - * Checks whether a path inputs value was supplied by the user - * File paths are relative with a picker, so an empty path is the root of the repo. - * Useful if you need to condition work (like append an arg) if a value was supplied - * - * @param name name of the path input to check - * @returns boolean - */ -function filePathSupplied(name) { - // normalize paths - var pathValue = this.resolve(this.getPathInput(name) || ''); - var repoRoot = this.resolve(exports.getVariable('build.sourcesDirectory') || exports.getVariable('system.defaultWorkingDirectory') || ''); - var supplied = pathValue !== repoRoot; - exports.debug(name + 'path supplied :' + supplied); - return supplied; -} -exports.filePathSupplied = filePathSupplied; -/** - * Gets the value of a path input - * It will be quoted for you if it isn't already and contains spaces - * If required is true and the value is not set, it will throw. - * If check is true and the path does not exist, it will throw. - * - * @param name name of the input to get - * @param required whether input is required. optional, defaults to false - * @param check whether path is checked. optional, defaults to false - * @returns string - */ -function getPathInput(name, required, check) { - var inval = getInput(name, required); - if (inval) { - if (check) { - exports.checkPath(inval, name); - } - } - return inval; -} -exports.getPathInput = getPathInput; -/** - * Gets the value of a path input - * It will be quoted for you if it isn't already and contains spaces - * If the value is not set, it will throw. - * If check is true and the path does not exist, it will throw. - * - * @param name name of the input to get - * @param check whether path is checked. optional, defaults to false - * @returns string - */ -function getPathInputRequired(name, check) { - return getPathInput(name, true, check); -} -exports.getPathInputRequired = getPathInputRequired; -//----------------------------------------------------- -// Endpoint Helpers -//----------------------------------------------------- -/** - * Gets the url for a service endpoint - * If the url was not set and is not optional, it will throw. - * - * @param id name of the service endpoint - * @param optional whether the url is optional - * @returns string - */ -function getEndpointUrl(id, optional) { - var urlval = process.env['ENDPOINT_URL_' + id]; - if (!optional && !urlval) { - throw new Error(exports.loc('LIB_EndpointNotExist', id)); - } - exports.debug(id + '=' + urlval); - return urlval; -} -exports.getEndpointUrl = getEndpointUrl; -/** - * Gets the url for a service endpoint - * If the url was not set, it will throw. - * - * @param id name of the service endpoint - * @returns string - */ -function getEndpointUrlRequired(id) { - return getEndpointUrl(id, false); -} -exports.getEndpointUrlRequired = getEndpointUrlRequired; -/* - * Gets the endpoint data parameter value with specified key for a service endpoint - * If the endpoint data parameter was not set and is not optional, it will throw. - * - * @param id name of the service endpoint - * @param key of the parameter - * @param optional whether the endpoint data is optional - * @returns {string} value of the endpoint data parameter - */ -function getEndpointDataParameter(id, key, optional) { - var dataParamVal = process.env['ENDPOINT_DATA_' + id + '_' + key.toUpperCase()]; - if (!optional && !dataParamVal) { - throw new Error(exports.loc('LIB_EndpointDataNotExist', id, key)); - } - exports.debug(id + ' data ' + key + ' = ' + dataParamVal); - return dataParamVal; -} -exports.getEndpointDataParameter = getEndpointDataParameter; -/* - * Gets the endpoint data parameter value with specified key for a service endpoint - * If the endpoint data parameter was not set, it will throw. - * - * @param id name of the service endpoint - * @param key of the parameter - * @returns {string} value of the endpoint data parameter - */ -function getEndpointDataParameterRequired(id, key) { - return getEndpointDataParameter(id, key, false); -} -exports.getEndpointDataParameterRequired = getEndpointDataParameterRequired; -/** - * Gets the endpoint authorization scheme for a service endpoint - * If the endpoint authorization scheme is not set and is not optional, it will throw. - * - * @param id name of the service endpoint - * @param optional whether the endpoint authorization scheme is optional - * @returns {string} value of the endpoint authorization scheme - */ -function getEndpointAuthorizationScheme(id, optional) { - var authScheme = im._vault.retrieveSecret('ENDPOINT_AUTH_SCHEME_' + id); - if (!optional && !authScheme) { - throw new Error(exports.loc('LIB_EndpointAuthNotExist', id)); - } - exports.debug(id + ' auth scheme = ' + authScheme); - return authScheme; -} -exports.getEndpointAuthorizationScheme = getEndpointAuthorizationScheme; -/** - * Gets the endpoint authorization scheme for a service endpoint - * If the endpoint authorization scheme is not set, it will throw. - * - * @param id name of the service endpoint - * @returns {string} value of the endpoint authorization scheme - */ -function getEndpointAuthorizationSchemeRequired(id) { - return getEndpointAuthorizationScheme(id, false); -} -exports.getEndpointAuthorizationSchemeRequired = getEndpointAuthorizationSchemeRequired; -/** - * Gets the endpoint authorization parameter value for a service endpoint with specified key - * If the endpoint authorization parameter is not set and is not optional, it will throw. - * - * @param id name of the service endpoint - * @param key key to find the endpoint authorization parameter - * @param optional optional whether the endpoint authorization scheme is optional - * @returns {string} value of the endpoint authorization parameter value - */ -function getEndpointAuthorizationParameter(id, key, optional) { - var authParam = im._vault.retrieveSecret('ENDPOINT_AUTH_PARAMETER_' + id + '_' + key.toUpperCase()); - if (!optional && !authParam) { - throw new Error(exports.loc('LIB_EndpointAuthNotExist', id)); - } - exports.debug(id + ' auth param ' + key + ' = ' + authParam); - return authParam; -} -exports.getEndpointAuthorizationParameter = getEndpointAuthorizationParameter; -/** - * Gets the endpoint authorization parameter value for a service endpoint with specified key - * If the endpoint authorization parameter is not set, it will throw. - * - * @param id name of the service endpoint - * @param key key to find the endpoint authorization parameter - * @returns {string} value of the endpoint authorization parameter value - */ -function getEndpointAuthorizationParameterRequired(id, key) { - return getEndpointAuthorizationParameter(id, key, false); -} -exports.getEndpointAuthorizationParameterRequired = getEndpointAuthorizationParameterRequired; -/** - * Gets the authorization details for a service endpoint - * If the authorization was not set and is not optional, it will set the task result to Failed. - * - * @param id name of the service endpoint - * @param optional whether the url is optional - * @returns string - */ -function getEndpointAuthorization(id, optional) { - var aval = im._vault.retrieveSecret('ENDPOINT_AUTH_' + id); - if (!optional && !aval) { - setResult(TaskResult.Failed, exports.loc('LIB_EndpointAuthNotExist', id)); - } - exports.debug(id + ' exists ' + (!!aval)); - var auth; - try { - if (aval) { - auth = JSON.parse(aval); - } - } - catch (err) { - throw new Error(exports.loc('LIB_InvalidEndpointAuth', aval)); - } - return auth; -} -exports.getEndpointAuthorization = getEndpointAuthorization; -//----------------------------------------------------- -// SecureFile Helpers -//----------------------------------------------------- -/** - * Gets the name for a secure file - * - * @param id secure file id - * @returns string - */ -function getSecureFileName(id) { - var name = process.env['SECUREFILE_NAME_' + id]; - exports.debug('secure file name for id ' + id + ' = ' + name); - return name; -} -exports.getSecureFileName = getSecureFileName; -/** - * Gets the secure file ticket that can be used to download the secure file contents - * - * @param id name of the secure file - * @returns {string} secure file ticket - */ -function getSecureFileTicket(id) { - var ticket = im._vault.retrieveSecret('SECUREFILE_TICKET_' + id); - exports.debug('secure file ticket for id ' + id + ' = ' + ticket); - return ticket; -} -exports.getSecureFileTicket = getSecureFileTicket; -//----------------------------------------------------- -// Task Variable Helpers -//----------------------------------------------------- -/** - * Gets a variable value that is set by previous step from the same wrapper task. - * Requires a 2.115.0 agent or higher. - * - * @param name name of the variable to get - * @returns string - */ -function getTaskVariable(name) { - assertAgent('2.115.0'); - var inval = im._vault.retrieveSecret('VSTS_TASKVARIABLE_' + im._getVariableKey(name)); - if (inval) { - inval = inval.trim(); - } - exports.debug('task variable: ' + name + '=' + inval); - return inval; -} -exports.getTaskVariable = getTaskVariable; -/** - * Sets a task variable which will only be available to subsequent steps belong to the same wrapper task. - * Requires a 2.115.0 agent or higher. - * - * @param name name of the variable to set - * @param val value to set - * @param secret whether variable is secret. optional, defaults to false - * @returns void - */ -function setTaskVariable(name, val, secret) { - if (secret === void 0) { secret = false; } - assertAgent('2.115.0'); - var key = im._getVariableKey(name); - // store the value - var varValue = val || ''; - exports.debug('set task variable: ' + name + '=' + (secret && varValue ? '********' : varValue)); - im._vault.storeSecret('VSTS_TASKVARIABLE_' + key, varValue); - delete process.env[key]; - // write the command - exports.command('task.settaskvariable', { 'variable': name || '', 'issecret': (secret || false).toString() }, varValue); -} -exports.setTaskVariable = setTaskVariable; -//----------------------------------------------------- -// Cmd Helpers -//----------------------------------------------------- -exports.command = im._command; -exports.warning = im._warning; -exports.error = im._error; -exports.debug = im._debug; -//----------------------------------------------------- -// Disk Functions -//----------------------------------------------------- -function _checkShell(cmd, continueOnError) { - var se = shell.error(); - if (se) { - exports.debug(cmd + ' failed'); - var errMsg = exports.loc('LIB_OperationFailed', cmd, se); - exports.debug(errMsg); - if (!continueOnError) { - throw new Error(errMsg); - } - } -} -/** - * Get's stat on a path. - * Useful for checking whether a file or directory. Also getting created, modified and accessed time. - * see [fs.stat](https://nodejs.org/api/fs.html#fs_class_fs_stats) - * - * @param path path to check - * @returns fsStat - */ -function stats(path) { - return fs.statSync(path); -} -exports.stats = stats; -exports.exist = im._exist; -function writeFile(file, data, options) { - if (typeof (options) === 'string') { - fs.writeFileSync(file, data, { encoding: options }); - } - else { - fs.writeFileSync(file, data, options); - } -} -exports.writeFile = writeFile; -/** - * @deprecated Use `getPlatform` - * Useful for determining the host operating system. - * see [os.type](https://nodejs.org/api/os.html#os_os_type) - * - * @return the name of the operating system - */ -function osType() { - return os.type(); -} -exports.osType = osType; -/** - * Determine the operating system the build agent is running on. - * @returns {Platform} - * @throws {Error} Platform is not supported by our agent - */ -function getPlatform() { - switch (process.platform) { - case 'win32': return Platform.Windows; - case 'darwin': return Platform.MacOS; - case 'linux': return Platform.Linux; - default: throw Error(exports.loc('LIB_PlatformNotSupported', process.platform)); - } -} -exports.getPlatform = getPlatform; -/** - * Return hosted type of Agent - * @returns {AgentHostedMode} - */ -function getAgentMode() { - var agentCloudId = exports.getVariable('Agent.CloudId'); - if (agentCloudId === undefined) - return AgentHostedMode.Unknown; - if (agentCloudId) - return AgentHostedMode.MsHosted; - return AgentHostedMode.SelfHosted; -} -exports.getAgentMode = getAgentMode; -/** - * Returns the process's current working directory. - * see [process.cwd](https://nodejs.org/api/process.html#process_process_cwd) - * - * @return the path to the current working directory of the process - */ -function cwd() { - return process.cwd(); -} -exports.cwd = cwd; -exports.checkPath = im._checkPath; -/** - * Change working directory. - * - * @param path new working directory path - * @returns void - */ -function cd(path) { - if (path) { - shell.cd(path); - _checkShell('cd'); - } -} -exports.cd = cd; -/** - * Change working directory and push it on the stack - * - * @param path new working directory path - * @returns void - */ -function pushd(path) { - shell.pushd(path); - _checkShell('pushd'); -} -exports.pushd = pushd; -/** - * Change working directory back to previously pushed directory - * - * @returns void - */ -function popd() { - shell.popd(); - _checkShell('popd'); -} -exports.popd = popd; -/** - * Make a directory. Creates the full path with folders in between - * Will throw if it fails - * - * @param p path to create - * @returns void - */ -function mkdirP(p) { - if (!p) { - throw new Error(exports.loc('LIB_ParameterIsRequired', 'p')); - } - // build a stack of directories to create - var stack = []; - var testDir = p; - while (true) { - // validate the loop is not out of control - if (stack.length >= (process.env['TASKLIB_TEST_MKDIRP_FAILSAFE'] || 1000)) { - // let the framework throw - exports.debug('loop is out of control'); - fs.mkdirSync(p); - return; - } - exports.debug("testing directory '" + testDir + "'"); - var stats_1 = void 0; - try { - stats_1 = fs.statSync(testDir); - } - catch (err) { - if (err.code == 'ENOENT') { - // validate the directory is not the drive root - var parentDir = path.dirname(testDir); - if (testDir == parentDir) { - throw new Error(exports.loc('LIB_MkdirFailedInvalidDriveRoot', p, testDir)); // Unable to create directory '{p}'. Root directory does not exist: '{testDir}' - } - // push the dir and test the parent - stack.push(testDir); - testDir = parentDir; - continue; - } - else if (err.code == 'UNKNOWN') { - throw new Error(exports.loc('LIB_MkdirFailedInvalidShare', p, testDir)); // Unable to create directory '{p}'. Unable to verify the directory exists: '{testDir}'. If directory is a file share, please verify the share name is correct, the share is online, and the current process has permission to access the share. - } - else { - throw err; - } - } - if (!stats_1.isDirectory()) { - throw new Error(exports.loc('LIB_MkdirFailedFileExists', p, testDir)); // Unable to create directory '{p}'. Conflicting file exists: '{testDir}' - } - // testDir exists - break; - } - // create each directory - while (stack.length) { - var dir = stack.pop(); // non-null because `stack.length` was truthy - exports.debug("mkdir '" + dir + "'"); - try { - fs.mkdirSync(dir); - } - catch (err) { - throw new Error(exports.loc('LIB_MkdirFailed', p, err.message)); // Unable to create directory '{p}'. {err.message} - } - } -} -exports.mkdirP = mkdirP; -/** - * Resolves a sequence of paths or path segments into an absolute path. - * Calls node.js path.resolve() - * Allows L0 testing with consistent path formats on Mac/Linux and Windows in the mock implementation - * @param pathSegments - * @returns {string} - */ -function resolve() { - var pathSegments = []; - for (var _i = 0; _i < arguments.length; _i++) { - pathSegments[_i] = arguments[_i]; - } - var absolutePath = path.resolve.apply(this, pathSegments); - exports.debug('Absolute path for pathSegments: ' + pathSegments + ' = ' + absolutePath); - return absolutePath; -} -exports.resolve = resolve; -exports.which = im._which; -/** - * Returns array of files in the given path, or in current directory if no path provided. See shelljs.ls - * @param {string} options Available options: -R (recursive), -A (all files, include files beginning with ., except for . and ..) - * @param {string[]} paths Paths to search. - * @return {string[]} An array of files in the given path(s). - */ -function ls(options, paths) { - if (options) { - return shell.ls(options, paths); - } - else { - return shell.ls(paths); - } -} -exports.ls = ls; -/** - * Copies a file or folder. - * - * @param source source path - * @param dest destination path - * @param options string -r, -f or -rf for recursive and force - * @param continueOnError optional. whether to continue on error - * @param retryCount optional. Retry count to copy the file. It might help to resolve intermittent issues e.g. with UNC target paths on a remote host. - */ -function cp(source, dest, options, continueOnError, retryCount) { - if (retryCount === void 0) { retryCount = 0; } - while (retryCount >= 0) { - try { - if (options) { - shell.cp(options, source, dest); - } - else { - shell.cp(source, dest); - } - _checkShell('cp', false); - break; - } - catch (e) { - if (retryCount <= 0) { - if (continueOnError) { - exports.warning(e); - break; - } - else { - throw e; - } - } - else { - console.log(exports.loc('LIB_CopyFileFailed', retryCount)); - retryCount--; - } - } - } -} -exports.cp = cp; -/** - * Moves a path. - * - * @param source source path - * @param dest destination path - * @param options string -f or -n for force and no clobber - * @param continueOnError optional. whether to continue on error - */ -function mv(source, dest, options, continueOnError) { - if (options) { - shell.mv(options, source, dest); - } - else { - shell.mv(source, dest); - } - _checkShell('mv', continueOnError); -} -exports.mv = mv; -/** - * Tries to execute a function a specified number of times. - * - * @param func a function to be executed. - * @param args executed function arguments array. - * @param retryOptions optional. Defaults to { continueOnError: false, retryCount: 0 }. - * @returns the same as the usual function. - */ -function retry(func, args, retryOptions) { - if (retryOptions === void 0) { retryOptions = { continueOnError: false, retryCount: 0 }; } - while (retryOptions.retryCount >= 0) { - try { - return func.apply(void 0, args); - } - catch (e) { - if (retryOptions.retryCount <= 0) { - if (retryOptions.continueOnError) { - exports.warning(e); - break; - } - else { - throw e; - } - } - else { - exports.debug("Attempt to execute function \"" + (func === null || func === void 0 ? void 0 : func.name) + "\" failed, retries left: " + retryOptions.retryCount); - retryOptions.retryCount--; - } - } - } -} -exports.retry = retry; -/** - * Gets info about item stats. - * - * @param path a path to the item to be processed. - * @param followSymbolicLink indicates whether to traverse descendants of symbolic link directories. - * @param allowBrokenSymbolicLinks when true, broken symbolic link will not cause an error. - * @returns fs.Stats - */ -function _getStats(path, followSymbolicLink, allowBrokenSymbolicLinks) { - // stat returns info about the target of a symlink (or symlink chain), - // lstat returns info about a symlink itself - var stats; - if (followSymbolicLink) { - try { - // use stat (following symlinks) - stats = fs.statSync(path); - } - catch (err) { - if (err.code == 'ENOENT' && allowBrokenSymbolicLinks) { - // fallback to lstat (broken symlinks allowed) - stats = fs.lstatSync(path); - exports.debug(" " + path + " (broken symlink)"); - } - else { - throw err; - } - } - } - else { - // use lstat (not following symlinks) - stats = fs.lstatSync(path); - } - return stats; -} -/** - * Recursively finds all paths a given path. Returns an array of paths. - * - * @param findPath path to search - * @param options optional. defaults to { followSymbolicLinks: true }. following soft links is generally appropriate unless deleting files. - * @returns string[] - */ -function find(findPath, options) { - if (!findPath) { - exports.debug('no path specified'); - return []; - } - // normalize the path, otherwise the first result is inconsistently formatted from the rest of the results - // because path.join() performs normalization. - findPath = path.normalize(findPath); - // debug trace the parameters - exports.debug("findPath: '" + findPath + "'"); - options = options || _getDefaultFindOptions(); - _debugFindOptions(options); - // return empty if not exists - try { - fs.lstatSync(findPath); - } - catch (err) { - if (err.code == 'ENOENT') { - exports.debug('0 results'); - return []; - } - throw err; - } - try { - var result = []; - // push the first item - var stack = [new _FindItem(findPath, 1)]; - var traversalChain = []; // used to detect cycles - var _loop_1 = function () { - // pop the next item and push to the result array - var item = stack.pop(); // non-null because `stack.length` was truthy - var stats_2 = void 0; - try { - // `item.path` equals `findPath` for the first item to be processed, when the `result` array is empty - var isPathToSearch = !result.length; - // following specified symlinks only if current path equals specified path - var followSpecifiedSymbolicLink = options.followSpecifiedSymbolicLink && isPathToSearch; - // following all symlinks or following symlink for the specified path - var followSymbolicLink = options.followSymbolicLinks || followSpecifiedSymbolicLink; - // stat the item. The stat info is used further below to determine whether to traverse deeper - stats_2 = _getStats(item.path, followSymbolicLink, options.allowBrokenSymbolicLinks); - } - catch (err) { - if (err.code == 'ENOENT' && options.skipMissingFiles) { - exports.warning("No such file or directory: \"" + item.path + "\" - skipping."); - return "continue"; - } - throw err; - } - result.push(item.path); - // note, isDirectory() returns false for the lstat of a symlink - if (stats_2.isDirectory()) { - exports.debug(" " + item.path + " (directory)"); - if (options.followSymbolicLinks) { - // get the realpath - var realPath_1; - if (im._isUncPath(item.path)) { - // Sometimes there are spontaneous issues when working with unc-paths, so retries have been added for them. - realPath_1 = retry(fs.realpathSync, [item.path], { continueOnError: false, retryCount: 5 }); - } - else { - realPath_1 = fs.realpathSync(item.path); - } - // fixup the traversal chain to match the item level - while (traversalChain.length >= item.level) { - traversalChain.pop(); - } - // test for a cycle - if (traversalChain.some(function (x) { return x == realPath_1; })) { - exports.debug(' cycle detected'); - return "continue"; - } - // update the traversal chain - traversalChain.push(realPath_1); - } - // push the child items in reverse onto the stack - var childLevel_1 = item.level + 1; - var childItems = fs.readdirSync(item.path) - .map(function (childName) { return new _FindItem(path.join(item.path, childName), childLevel_1); }); - for (var i = childItems.length - 1; i >= 0; i--) { - stack.push(childItems[i]); - } - } - else { - exports.debug(" " + item.path + " (file)"); - } - }; - while (stack.length) { - _loop_1(); - } - exports.debug(result.length + " results"); - return result; - } - catch (err) { - throw new Error(exports.loc('LIB_OperationFailed', 'find', err.message)); - } -} -exports.find = find; -var _FindItem = /** @class */ (function () { - function _FindItem(path, level) { - this.path = path; - this.level = level; - } - return _FindItem; -}()); -function _debugFindOptions(options) { - exports.debug("findOptions.allowBrokenSymbolicLinks: '" + options.allowBrokenSymbolicLinks + "'"); - exports.debug("findOptions.followSpecifiedSymbolicLink: '" + options.followSpecifiedSymbolicLink + "'"); - exports.debug("findOptions.followSymbolicLinks: '" + options.followSymbolicLinks + "'"); - exports.debug("findOptions.skipMissingFiles: '" + options.skipMissingFiles + "'"); -} -function _getDefaultFindOptions() { - return { - allowBrokenSymbolicLinks: false, - followSpecifiedSymbolicLink: true, - followSymbolicLinks: true, - skipMissingFiles: false - }; -} -/** - * Prefer tl.find() and tl.match() instead. This function is for backward compatibility - * when porting tasks to Node from the PowerShell or PowerShell3 execution handler. - * - * @param rootDirectory path to root unrooted patterns with - * @param pattern include and exclude patterns - * @param includeFiles whether to include files in the result. defaults to true when includeFiles and includeDirectories are both false - * @param includeDirectories whether to include directories in the result - * @returns string[] - */ -function legacyFindFiles(rootDirectory, pattern, includeFiles, includeDirectories) { - if (!pattern) { - throw new Error('pattern parameter cannot be empty'); - } - exports.debug("legacyFindFiles rootDirectory: '" + rootDirectory + "'"); - exports.debug("pattern: '" + pattern + "'"); - exports.debug("includeFiles: '" + includeFiles + "'"); - exports.debug("includeDirectories: '" + includeDirectories + "'"); - if (!includeFiles && !includeDirectories) { - includeFiles = true; - } - // organize the patterns into include patterns and exclude patterns - var includePatterns = []; - var excludePatterns = []; - pattern = pattern.replace(/;;/g, '\0'); - for (var _i = 0, _a = pattern.split(';'); _i < _a.length; _i++) { - var pat = _a[_i]; - if (!pat) { - continue; - } - pat = pat.replace(/\0/g, ';'); - // determine whether include pattern and remove any include/exclude prefix. - // include patterns start with +: or anything other than -: - // exclude patterns start with -: - var isIncludePattern = void 0; - if (im._startsWith(pat, '+:')) { - pat = pat.substring(2); - isIncludePattern = true; - } - else if (im._startsWith(pat, '-:')) { - pat = pat.substring(2); - isIncludePattern = false; - } - else { - isIncludePattern = true; - } - // validate pattern does not end with a slash - if (im._endsWith(pat, '/') || (process.platform == 'win32' && im._endsWith(pat, '\\'))) { - throw new Error(exports.loc('LIB_InvalidPattern', pat)); - } - // root the pattern - if (rootDirectory && !path.isAbsolute(pat)) { - pat = path.join(rootDirectory, pat); - // remove trailing slash sometimes added by path.join() on Windows, e.g. - // path.join('\\\\hello', 'world') => '\\\\hello\\world\\' - // path.join('//hello', 'world') => '\\\\hello\\world\\' - if (im._endsWith(pat, '\\')) { - pat = pat.substring(0, pat.length - 1); - } - } - if (isIncludePattern) { - includePatterns.push(pat); - } - else { - excludePatterns.push(im._legacyFindFiles_convertPatternToRegExp(pat)); - } - } - // find and apply patterns - var count = 0; - var result = _legacyFindFiles_getMatchingItems(includePatterns, excludePatterns, !!includeFiles, !!includeDirectories); - exports.debug('all matches:'); - for (var _b = 0, result_1 = result; _b < result_1.length; _b++) { - var resultItem = result_1[_b]; - exports.debug(' ' + resultItem); - } - exports.debug('total matched: ' + result.length); - return result; -} -exports.legacyFindFiles = legacyFindFiles; -function _legacyFindFiles_getMatchingItems(includePatterns, excludePatterns, includeFiles, includeDirectories) { - exports.debug('getMatchingItems()'); - for (var _i = 0, includePatterns_1 = includePatterns; _i < includePatterns_1.length; _i++) { - var pattern = includePatterns_1[_i]; - exports.debug("includePattern: '" + pattern + "'"); - } - for (var _a = 0, excludePatterns_1 = excludePatterns; _a < excludePatterns_1.length; _a++) { - var pattern = excludePatterns_1[_a]; - exports.debug("excludePattern: " + pattern); - } - exports.debug('includeFiles: ' + includeFiles); - exports.debug('includeDirectories: ' + includeDirectories); - var allFiles = {}; - var _loop_2 = function (pattern) { - // determine the directory to search - // - // note, getDirectoryName removes redundant path separators - var findPath = void 0; - var starIndex = pattern.indexOf('*'); - var questionIndex = pattern.indexOf('?'); - if (starIndex < 0 && questionIndex < 0) { - // if no wildcards are found, use the directory name portion of the path. - // if there is no directory name (file name only in pattern or drive root), - // this will return empty string. - findPath = im._getDirectoryName(pattern); - } - else { - // extract the directory prior to the first wildcard - var index = Math.min(starIndex >= 0 ? starIndex : questionIndex, questionIndex >= 0 ? questionIndex : starIndex); - findPath = im._getDirectoryName(pattern.substring(0, index)); - } - // note, due to this short-circuit and the above usage of getDirectoryName, this - // function has the same limitations regarding drive roots as the powershell - // implementation. - // - // also note, since getDirectoryName eliminates slash redundancies, some additional - // work may be required if removal of this limitation is attempted. - if (!findPath) { - return "continue"; - } - var patternRegex = im._legacyFindFiles_convertPatternToRegExp(pattern); - // find files/directories - var items = find(findPath, { followSymbolicLinks: true }) - .filter(function (item) { - if (includeFiles && includeDirectories) { - return true; - } - var isDir = fs.statSync(item).isDirectory(); - return (includeFiles && !isDir) || (includeDirectories && isDir); - }) - .forEach(function (item) { - var normalizedPath = process.platform == 'win32' ? item.replace(/\\/g, '/') : item; // normalize separators - // **/times/** will not match C:/fun/times because there isn't a trailing slash - // so try both if including directories - var alternatePath = normalizedPath + "/"; // potential bug: it looks like this will result in a false - // positive if the item is a regular file and not a directory - var isMatch = false; - if (patternRegex.test(normalizedPath) || (includeDirectories && patternRegex.test(alternatePath))) { - isMatch = true; - // test whether the path should be excluded - for (var _i = 0, excludePatterns_2 = excludePatterns; _i < excludePatterns_2.length; _i++) { - var regex = excludePatterns_2[_i]; - if (regex.test(normalizedPath) || (includeDirectories && regex.test(alternatePath))) { - isMatch = false; - break; - } - } - } - if (isMatch) { - allFiles[item] = item; - } - }); - }; - for (var _b = 0, includePatterns_2 = includePatterns; _b < includePatterns_2.length; _b++) { - var pattern = includePatterns_2[_b]; - _loop_2(pattern); - } - return Object.keys(allFiles).sort(); -} -/** - * Remove a path recursively with force - * - * @param inputPath path to remove - * @throws when the file or directory exists but could not be deleted. - */ -function rmRF(inputPath) { - exports.debug('rm -rf ' + inputPath); - if (getPlatform() == Platform.Windows) { - // Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another - // program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del. - try { - if (fs.statSync(inputPath).isDirectory()) { - exports.debug('removing directory ' + inputPath); - childProcess.execSync("rd /s /q \"" + inputPath + "\""); - } - else { - exports.debug('removing file ' + inputPath); - childProcess.execSync("del /f /a \"" + inputPath + "\""); - } - } - catch (err) { - // if you try to delete a file that doesn't exist, desired result is achieved - // other errors are valid - if (err.code != 'ENOENT') { - throw new Error(exports.loc('LIB_OperationFailed', 'rmRF', err.message)); - } - } - // Shelling out fails to remove a symlink folder with missing source, this unlink catches that - try { - fs.unlinkSync(inputPath); - } - catch (err) { - // if you try to delete a file that doesn't exist, desired result is achieved - // other errors are valid - if (err.code != 'ENOENT') { - throw new Error(exports.loc('LIB_OperationFailed', 'rmRF', err.message)); - } - } - } - else { - // get the lstats in order to workaround a bug in shelljs@0.3.0 where symlinks - // with missing targets are not handled correctly by "rm('-rf', path)" - var lstats = void 0; - try { - lstats = fs.lstatSync(inputPath); - } - catch (err) { - // if you try to delete a file that doesn't exist, desired result is achieved - // other errors are valid - if (err.code == 'ENOENT') { - return; - } - throw new Error(exports.loc('LIB_OperationFailed', 'rmRF', err.message)); - } - if (lstats.isDirectory()) { - exports.debug('removing directory'); - shell.rm('-rf', inputPath); - var errMsg = shell.error(); - if (errMsg) { - throw new Error(exports.loc('LIB_OperationFailed', 'rmRF', errMsg)); - } - return; - } - exports.debug('removing file'); - try { - fs.unlinkSync(inputPath); - } - catch (err) { - throw new Error(exports.loc('LIB_OperationFailed', 'rmRF', err.message)); - } - } -} -exports.rmRF = rmRF; -/** - * Exec a tool. Convenience wrapper over ToolRunner to exec with args in one call. - * Output will be streamed to the live console. - * Returns promise with return code - * - * @param tool path to tool to exec - * @param args an arg string or array of args - * @param options optional exec options. See IExecOptions - * @returns number - */ -function exec(tool, args, options) { - var tr = this.tool(tool); - tr.on('debug', function (data) { - exports.debug(data); - }); - if (args) { - if (args instanceof Array) { - tr.arg(args); - } - else if (typeof (args) === 'string') { - tr.line(args); - } - } - return tr.exec(options); -} -exports.exec = exec; -/** - * Exec a tool synchronously. Convenience wrapper over ToolRunner to execSync with args in one call. - * Output will be *not* be streamed to the live console. It will be returned after execution is complete. - * Appropriate for short running tools - * Returns IExecResult with output and return code - * - * @param tool path to tool to exec - * @param args an arg string or array of args - * @param options optional exec options. See IExecSyncOptions - * @returns IExecSyncResult - */ -function execSync(tool, args, options) { - var tr = this.tool(tool); - tr.on('debug', function (data) { - exports.debug(data); - }); - if (args) { - if (args instanceof Array) { - tr.arg(args); - } - else if (typeof (args) === 'string') { - tr.line(args); - } - } - return tr.execSync(options); -} -exports.execSync = execSync; -/** - * Convenience factory to create a ToolRunner. - * - * @param tool path to tool to exec - * @returns ToolRunner - */ -function tool(tool) { - var tr = new trm.ToolRunner(tool); - tr.on('debug', function (message) { - exports.debug(message); - }); - return tr; -} -exports.tool = tool; -/** - * Applies glob patterns to a list of paths. Supports interleaved exclude patterns. - * - * @param list array of paths - * @param patterns patterns to apply. supports interleaved exclude patterns. - * @param patternRoot optional. default root to apply to unrooted patterns. not applied to basename-only patterns when matchBase:true. - * @param options optional. defaults to { dot: true, nobrace: true, nocase: process.platform == 'win32' }. - */ -function match(list, patterns, patternRoot, options) { - // trace parameters - exports.debug("patternRoot: '" + patternRoot + "'"); - options = options || _getDefaultMatchOptions(); // default match options - _debugMatchOptions(options); - // convert pattern to an array - if (typeof patterns == 'string') { - patterns = [patterns]; - } - // hashtable to keep track of matches - var map = {}; - var originalOptions = options; - for (var _i = 0, patterns_1 = patterns; _i < patterns_1.length; _i++) { - var pattern = patterns_1[_i]; - exports.debug("pattern: '" + pattern + "'"); - // trim and skip empty - pattern = (pattern || '').trim(); - if (!pattern) { - exports.debug('skipping empty pattern'); - continue; - } - // clone match options - var options_1 = im._cloneMatchOptions(originalOptions); - // skip comments - if (!options_1.nocomment && im._startsWith(pattern, '#')) { - exports.debug('skipping comment'); - continue; - } - // set nocomment - brace expansion could result in a leading '#' - options_1.nocomment = true; - // determine whether pattern is include or exclude - var negateCount = 0; - if (!options_1.nonegate) { - while (pattern.charAt(negateCount) == '!') { - negateCount++; - } - pattern = pattern.substring(negateCount); // trim leading '!' - if (negateCount) { - exports.debug("trimmed leading '!'. pattern: '" + pattern + "'"); - } - } - var isIncludePattern = negateCount == 0 || - (negateCount % 2 == 0 && !options_1.flipNegate) || - (negateCount % 2 == 1 && options_1.flipNegate); - // set nonegate - brace expansion could result in a leading '!' - options_1.nonegate = true; - options_1.flipNegate = false; - // expand braces - required to accurately root patterns - var expanded = void 0; - var preExpanded = pattern; - if (options_1.nobrace) { - expanded = [pattern]; - } - else { - // convert slashes on Windows before calling braceExpand(). unfortunately this means braces cannot - // be escaped on Windows, this limitation is consistent with current limitations of minimatch (3.0.3). - exports.debug('expanding braces'); - var convertedPattern = process.platform == 'win32' ? pattern.replace(/\\/g, '/') : pattern; - expanded = minimatch.braceExpand(convertedPattern); - } - // set nobrace - options_1.nobrace = true; - for (var _a = 0, expanded_1 = expanded; _a < expanded_1.length; _a++) { - var pattern_1 = expanded_1[_a]; - if (expanded.length != 1 || pattern_1 != preExpanded) { - exports.debug("pattern: '" + pattern_1 + "'"); - } - // trim and skip empty - pattern_1 = (pattern_1 || '').trim(); - if (!pattern_1) { - exports.debug('skipping empty pattern'); - continue; - } - // root the pattern when all of the following conditions are true: - if (patternRoot && // patternRoot supplied - !im._isRooted(pattern_1) && // AND pattern not rooted - // AND matchBase:false or not basename only - (!options_1.matchBase || (process.platform == 'win32' ? pattern_1.replace(/\\/g, '/') : pattern_1).indexOf('/') >= 0)) { - pattern_1 = im._ensureRooted(patternRoot, pattern_1); - exports.debug("rooted pattern: '" + pattern_1 + "'"); - } - if (isIncludePattern) { - // apply the pattern - exports.debug('applying include pattern against original list'); - var matchResults = minimatch.match(list, pattern_1, options_1); - exports.debug(matchResults.length + ' matches'); - // union the results - for (var _b = 0, matchResults_1 = matchResults; _b < matchResults_1.length; _b++) { - var matchResult = matchResults_1[_b]; - map[matchResult] = true; - } - } - else { - // apply the pattern - exports.debug('applying exclude pattern against original list'); - var matchResults = minimatch.match(list, pattern_1, options_1); - exports.debug(matchResults.length + ' matches'); - // substract the results - for (var _c = 0, matchResults_2 = matchResults; _c < matchResults_2.length; _c++) { - var matchResult = matchResults_2[_c]; - delete map[matchResult]; - } - } - } - } - // return a filtered version of the original list (preserves order and prevents duplication) - var result = list.filter(function (item) { return map.hasOwnProperty(item); }); - exports.debug(result.length + ' final results'); - return result; -} -exports.match = match; -/** - * Filter to apply glob patterns - * - * @param pattern pattern to apply - * @param options optional. defaults to { dot: true, nobrace: true, nocase: process.platform == 'win32' }. - */ -function filter(pattern, options) { - options = options || _getDefaultMatchOptions(); - return minimatch.filter(pattern, options); -} -exports.filter = filter; -function _debugMatchOptions(options) { - exports.debug("matchOptions.debug: '" + options.debug + "'"); - exports.debug("matchOptions.nobrace: '" + options.nobrace + "'"); - exports.debug("matchOptions.noglobstar: '" + options.noglobstar + "'"); - exports.debug("matchOptions.dot: '" + options.dot + "'"); - exports.debug("matchOptions.noext: '" + options.noext + "'"); - exports.debug("matchOptions.nocase: '" + options.nocase + "'"); - exports.debug("matchOptions.nonull: '" + options.nonull + "'"); - exports.debug("matchOptions.matchBase: '" + options.matchBase + "'"); - exports.debug("matchOptions.nocomment: '" + options.nocomment + "'"); - exports.debug("matchOptions.nonegate: '" + options.nonegate + "'"); - exports.debug("matchOptions.flipNegate: '" + options.flipNegate + "'"); -} -function _getDefaultMatchOptions() { - return { - debug: false, - nobrace: true, - noglobstar: false, - dot: true, - noext: false, - nocase: process.platform == 'win32', - nonull: false, - matchBase: false, - nocomment: false, - nonegate: false, - flipNegate: false - }; -} -/** - * Determines the find root from a list of patterns. Performs the find and then applies the glob patterns. - * Supports interleaved exclude patterns. Unrooted patterns are rooted using defaultRoot, unless - * matchOptions.matchBase is specified and the pattern is a basename only. For matchBase cases, the - * defaultRoot is used as the find root. - * - * @param defaultRoot default path to root unrooted patterns. falls back to System.DefaultWorkingDirectory or process.cwd(). - * @param patterns pattern or array of patterns to apply - * @param findOptions defaults to { followSymbolicLinks: true }. following soft links is generally appropriate unless deleting files. - * @param matchOptions defaults to { dot: true, nobrace: true, nocase: process.platform == 'win32' } - */ -function findMatch(defaultRoot, patterns, findOptions, matchOptions) { - // apply defaults for parameters and trace - defaultRoot = defaultRoot || this.getVariable('system.defaultWorkingDirectory') || process.cwd(); - exports.debug("defaultRoot: '" + defaultRoot + "'"); - patterns = patterns || []; - patterns = typeof patterns == 'string' ? [patterns] : patterns; - findOptions = findOptions || _getDefaultFindOptions(); - _debugFindOptions(findOptions); - matchOptions = matchOptions || _getDefaultMatchOptions(); - _debugMatchOptions(matchOptions); - // normalize slashes for root dir - defaultRoot = im._normalizeSeparators(defaultRoot); - var results = {}; - var originalMatchOptions = matchOptions; - for (var _i = 0, _a = (patterns || []); _i < _a.length; _i++) { - var pattern = _a[_i]; - exports.debug("pattern: '" + pattern + "'"); - // trim and skip empty - pattern = (pattern || '').trim(); - if (!pattern) { - exports.debug('skipping empty pattern'); - continue; - } - // clone match options - var matchOptions_1 = im._cloneMatchOptions(originalMatchOptions); - // skip comments - if (!matchOptions_1.nocomment && im._startsWith(pattern, '#')) { - exports.debug('skipping comment'); - continue; - } - // set nocomment - brace expansion could result in a leading '#' - matchOptions_1.nocomment = true; - // determine whether pattern is include or exclude - var negateCount = 0; - if (!matchOptions_1.nonegate) { - while (pattern.charAt(negateCount) == '!') { - negateCount++; - } - pattern = pattern.substring(negateCount); // trim leading '!' - if (negateCount) { - exports.debug("trimmed leading '!'. pattern: '" + pattern + "'"); - } - } - var isIncludePattern = negateCount == 0 || - (negateCount % 2 == 0 && !matchOptions_1.flipNegate) || - (negateCount % 2 == 1 && matchOptions_1.flipNegate); - // set nonegate - brace expansion could result in a leading '!' - matchOptions_1.nonegate = true; - matchOptions_1.flipNegate = false; - // expand braces - required to accurately interpret findPath - var expanded = void 0; - var preExpanded = pattern; - if (matchOptions_1.nobrace) { - expanded = [pattern]; - } - else { - // convert slashes on Windows before calling braceExpand(). unfortunately this means braces cannot - // be escaped on Windows, this limitation is consistent with current limitations of minimatch (3.0.3). - exports.debug('expanding braces'); - var convertedPattern = process.platform == 'win32' ? pattern.replace(/\\/g, '/') : pattern; - expanded = minimatch.braceExpand(convertedPattern); - } - // set nobrace - matchOptions_1.nobrace = true; - for (var _b = 0, expanded_2 = expanded; _b < expanded_2.length; _b++) { - var pattern_2 = expanded_2[_b]; - if (expanded.length != 1 || pattern_2 != preExpanded) { - exports.debug("pattern: '" + pattern_2 + "'"); - } - // trim and skip empty - pattern_2 = (pattern_2 || '').trim(); - if (!pattern_2) { - exports.debug('skipping empty pattern'); - continue; - } - if (isIncludePattern) { - // determine the findPath - var findInfo = im._getFindInfoFromPattern(defaultRoot, pattern_2, matchOptions_1); - var findPath = findInfo.findPath; - exports.debug("findPath: '" + findPath + "'"); - if (!findPath) { - exports.debug('skipping empty path'); - continue; - } - // perform the find - exports.debug("statOnly: '" + findInfo.statOnly + "'"); - var findResults = []; - if (findInfo.statOnly) { - // simply stat the path - all path segments were used to build the path - try { - fs.statSync(findPath); - findResults.push(findPath); - } - catch (err) { - if (err.code != 'ENOENT') { - throw err; - } - exports.debug('ENOENT'); - } - } - else { - findResults = find(findPath, findOptions); - } - exports.debug("found " + findResults.length + " paths"); - // apply the pattern - exports.debug('applying include pattern'); - if (findInfo.adjustedPattern != pattern_2) { - exports.debug("adjustedPattern: '" + findInfo.adjustedPattern + "'"); - pattern_2 = findInfo.adjustedPattern; - } - var matchResults = minimatch.match(findResults, pattern_2, matchOptions_1); - exports.debug(matchResults.length + ' matches'); - // union the results - for (var _c = 0, matchResults_3 = matchResults; _c < matchResults_3.length; _c++) { - var matchResult = matchResults_3[_c]; - var key = process.platform == 'win32' ? matchResult.toUpperCase() : matchResult; - results[key] = matchResult; - } - } - else { - // check if basename only and matchBase=true - if (matchOptions_1.matchBase && - !im._isRooted(pattern_2) && - (process.platform == 'win32' ? pattern_2.replace(/\\/g, '/') : pattern_2).indexOf('/') < 0) { - // do not root the pattern - exports.debug('matchBase and basename only'); - } - else { - // root the exclude pattern - pattern_2 = im._ensurePatternRooted(defaultRoot, pattern_2); - exports.debug("after ensurePatternRooted, pattern: '" + pattern_2 + "'"); - } - // apply the pattern - exports.debug('applying exclude pattern'); - var matchResults = minimatch.match(Object.keys(results).map(function (key) { return results[key]; }), pattern_2, matchOptions_1); - exports.debug(matchResults.length + ' matches'); - // substract the results - for (var _d = 0, matchResults_4 = matchResults; _d < matchResults_4.length; _d++) { - var matchResult = matchResults_4[_d]; - var key = process.platform == 'win32' ? matchResult.toUpperCase() : matchResult; - delete results[key]; - } - } - } - } - var finalResult = Object.keys(results) - .map(function (key) { return results[key]; }) - .sort(); - exports.debug(finalResult.length + ' final results'); - return finalResult; -} -exports.findMatch = findMatch; -/** - * Build Proxy URL in the following format: protocol://username:password@hostname:port - * @param proxyUrl Url address of the proxy server (eg: http://example.com) - * @param proxyUsername Proxy username (optional) - * @param proxyPassword Proxy password (optional) - * @returns string - */ -function getProxyFormattedUrl(proxyUrl, proxyUsername, proxyPassword) { - var parsedUrl = new URL(proxyUrl); - var proxyAddress = parsedUrl.protocol + "//" + parsedUrl.host; - if (proxyUsername) { - proxyAddress = parsedUrl.protocol + "//" + proxyUsername + ":" + proxyPassword + "@" + parsedUrl.host; - } - return proxyAddress; -} -/** - * Gets http proxy configuration used by Build/Release agent - * - * @return ProxyConfiguration - */ -function getHttpProxyConfiguration(requestUrl) { - var proxyUrl = exports.getVariable('Agent.ProxyUrl'); - if (proxyUrl && proxyUrl.length > 0) { - var proxyUsername = exports.getVariable('Agent.ProxyUsername'); - var proxyPassword = exports.getVariable('Agent.ProxyPassword'); - var proxyBypassHosts = JSON.parse(exports.getVariable('Agent.ProxyBypassList') || '[]'); - var bypass_1 = false; - if (requestUrl) { - proxyBypassHosts.forEach(function (bypassHost) { - if (new RegExp(bypassHost, 'i').test(requestUrl)) { - bypass_1 = true; - } - }); - } - if (bypass_1) { - return null; - } - else { - var proxyAddress = getProxyFormattedUrl(proxyUrl, proxyUsername, proxyPassword); - return { - proxyUrl: proxyUrl, - proxyUsername: proxyUsername, - proxyPassword: proxyPassword, - proxyBypassHosts: proxyBypassHosts, - proxyFormattedUrl: proxyAddress - }; - } - } - else { - return null; - } -} -exports.getHttpProxyConfiguration = getHttpProxyConfiguration; -/** - * Gets http certificate configuration used by Build/Release agent - * - * @return CertConfiguration - */ -function getHttpCertConfiguration() { - var ca = exports.getVariable('Agent.CAInfo'); - var clientCert = exports.getVariable('Agent.ClientCert'); - if (ca || clientCert) { - var certConfig = {}; - certConfig.caFile = ca; - certConfig.certFile = clientCert; - if (clientCert) { - var clientCertKey = exports.getVariable('Agent.ClientCertKey'); - var clientCertArchive = exports.getVariable('Agent.ClientCertArchive'); - var clientCertPassword = exports.getVariable('Agent.ClientCertPassword'); - certConfig.keyFile = clientCertKey; - certConfig.certArchiveFile = clientCertArchive; - certConfig.passphrase = clientCertPassword; - } - return certConfig; - } - else { - return null; - } -} -exports.getHttpCertConfiguration = getHttpCertConfiguration; -//----------------------------------------------------- -// Test Publisher -//----------------------------------------------------- -var TestPublisher = /** @class */ (function () { - function TestPublisher(testRunner) { - this.testRunner = testRunner; - } - TestPublisher.prototype.publish = function (resultFiles, mergeResults, platform, config, runTitle, publishRunAttachments, testRunSystem) { - // Could have used an initializer, but wanted to avoid reordering parameters when converting to strict null checks - // (A parameter cannot both be optional and have an initializer) - testRunSystem = testRunSystem || "VSTSTask"; - var properties = {}; - properties['type'] = this.testRunner; - if (mergeResults) { - properties['mergeResults'] = mergeResults; - } - if (platform) { - properties['platform'] = platform; - } - if (config) { - properties['config'] = config; - } - if (runTitle) { - properties['runTitle'] = runTitle; - } - if (publishRunAttachments) { - properties['publishRunAttachments'] = publishRunAttachments; - } - if (resultFiles) { - properties['resultFiles'] = Array.isArray(resultFiles) ? resultFiles.join() : resultFiles; - } - properties['testRunSystem'] = testRunSystem; - exports.command('results.publish', properties, ''); - }; - return TestPublisher; -}()); -exports.TestPublisher = TestPublisher; -//----------------------------------------------------- -// Code coverage Publisher -//----------------------------------------------------- -var CodeCoveragePublisher = /** @class */ (function () { - function CodeCoveragePublisher() { - } - CodeCoveragePublisher.prototype.publish = function (codeCoverageTool, summaryFileLocation, reportDirectory, additionalCodeCoverageFiles) { - var properties = {}; - if (codeCoverageTool) { - properties['codecoveragetool'] = codeCoverageTool; - } - if (summaryFileLocation) { - properties['summaryfile'] = summaryFileLocation; - } - if (reportDirectory) { - properties['reportdirectory'] = reportDirectory; - } - if (additionalCodeCoverageFiles) { - properties['additionalcodecoveragefiles'] = Array.isArray(additionalCodeCoverageFiles) ? additionalCodeCoverageFiles.join() : additionalCodeCoverageFiles; - } - exports.command('codecoverage.publish', properties, ""); - }; - return CodeCoveragePublisher; -}()); -exports.CodeCoveragePublisher = CodeCoveragePublisher; -//----------------------------------------------------- -// Code coverage Publisher -//----------------------------------------------------- -var CodeCoverageEnabler = /** @class */ (function () { - function CodeCoverageEnabler(buildTool, ccTool) { - this.buildTool = buildTool; - this.ccTool = ccTool; - } - CodeCoverageEnabler.prototype.enableCodeCoverage = function (buildProps) { - buildProps['buildtool'] = this.buildTool; - buildProps['codecoveragetool'] = this.ccTool; - exports.command('codecoverage.enable', buildProps, ""); - }; - return CodeCoverageEnabler; -}()); -exports.CodeCoverageEnabler = CodeCoverageEnabler; -//----------------------------------------------------- -// Task Logging Commands -//----------------------------------------------------- -/** - * Upload user interested file as additional log information - * to the current timeline record. - * - * The file shall be available for download along with task logs. - * - * @param path Path to the file that should be uploaded. - * @returns void - */ -function uploadFile(path) { - exports.command("task.uploadfile", null, path); -} -exports.uploadFile = uploadFile; -/** - * Instruction for the agent to update the PATH environment variable. - * The specified directory is prepended to the PATH. - * The updated environment variable will be reflected in subsequent tasks. - * - * @param path Local directory path. - * @returns void - */ -function prependPath(path) { - assertAgent("2.115.0"); - exports.command("task.prependpath", null, path); -} -exports.prependPath = prependPath; -/** - * Upload and attach summary markdown to current timeline record. - * This summary shall be added to the build/release summary and - * not available for download with logs. - * - * @param path Local directory path. - * @returns void - */ -function uploadSummary(path) { - exports.command("task.uploadsummary", null, path); -} -exports.uploadSummary = uploadSummary; -/** - * Upload and attach attachment to current timeline record. - * These files are not available for download with logs. - * These can only be referred to by extensions using the type or name values. - * - * @param type Attachment type. - * @param name Attachment name. - * @param path Attachment path. - * @returns void - */ -function addAttachment(type, name, path) { - exports.command("task.addattachment", { "type": type, "name": name }, path); -} -exports.addAttachment = addAttachment; -/** - * Set an endpoint field with given value. - * Value updated will be retained in the endpoint for - * the subsequent tasks that execute within the same job. - * - * @param id Endpoint id. - * @param field FieldType enum of AuthParameter, DataParameter or Url. - * @param key Key. - * @param value Value for key or url. - * @returns void - */ -function setEndpoint(id, field, key, value) { - exports.command("task.setendpoint", { "id": id, "field": FieldType[field].toLowerCase(), "key": key }, value); -} -exports.setEndpoint = setEndpoint; -/** - * Set progress and current operation for current task. - * - * @param percent Percentage of completion. - * @param currentOperation Current pperation. - * @returns void - */ -function setProgress(percent, currentOperation) { - exports.command("task.setprogress", { "value": "" + percent }, currentOperation); -} -exports.setProgress = setProgress; -/** - * Indicates whether to write the logging command directly to the host or to the output pipeline. - * - * @param id Timeline record Guid. - * @param parentId Parent timeline record Guid. - * @param recordType Record type. - * @param recordName Record name. - * @param order Order of timeline record. - * @param startTime Start time. - * @param finishTime End time. - * @param progress Percentage of completion. - * @param state TaskState enum of Unknown, Initialized, InProgress or Completed. - * @param result TaskResult enum of Succeeded, SucceededWithIssues, Failed, Cancelled or Skipped. - * @param message current operation - * @returns void - */ -function logDetail(id, message, parentId, recordType, recordName, order, startTime, finishTime, progress, state, result) { - var properties = { - "id": id, - "parentid": parentId, - "type": recordType, - "name": recordName, - "order": order ? order.toString() : undefined, - "starttime": startTime, - "finishtime": finishTime, - "progress": progress ? progress.toString() : undefined, - "state": state ? TaskState[state] : undefined, - "result": result ? TaskResult[result] : undefined - }; - exports.command("task.logdetail", properties, message); -} -exports.logDetail = logDetail; -/** - * Log error or warning issue to timeline record of current task. - * - * @param type IssueType enum of Error or Warning. - * @param sourcePath Source file location. - * @param lineNumber Line number. - * @param columnNumber Column number. - * @param code Error or warning code. - * @param message Error or warning message. - * @returns void - */ -function logIssue(type, message, sourcePath, lineNumber, columnNumber, errorCode) { - var properties = { - "type": IssueType[type].toLowerCase(), - "code": errorCode, - "sourcepath": sourcePath, - "linenumber": lineNumber ? lineNumber.toString() : undefined, - "columnnumber": columnNumber ? columnNumber.toString() : undefined, - }; - exports.command("task.logissue", properties, message); -} -exports.logIssue = logIssue; -//----------------------------------------------------- -// Artifact Logging Commands -//----------------------------------------------------- -/** - * Upload user interested file as additional log information - * to the current timeline record. - * - * The file shall be available for download along with task logs. - * - * @param containerFolder Folder that the file will upload to, folder will be created if needed. - * @param path Path to the file that should be uploaded. - * @param name Artifact name. - * @returns void - */ -function uploadArtifact(containerFolder, path, name) { - exports.command("artifact.upload", { "containerfolder": containerFolder, "artifactname": name }, path); -} -exports.uploadArtifact = uploadArtifact; -/** - * Create an artifact link, artifact location is required to be - * a file container path, VC path or UNC share path. - * - * The file shall be available for download along with task logs. - * - * @param name Artifact name. - * @param path Path to the file that should be associated. - * @param artifactType ArtifactType enum of Container, FilePath, VersionControl, GitRef or TfvcLabel. - * @returns void - */ -function associateArtifact(name, path, artifactType) { - exports.command("artifact.associate", { "type": ArtifactType[artifactType].toLowerCase(), "artifactname": name }, path); -} -exports.associateArtifact = associateArtifact; -//----------------------------------------------------- -// Build Logging Commands -//----------------------------------------------------- -/** - * Upload user interested log to build’s container “logs\tool” folder. - * - * @param path Path to the file that should be uploaded. - * @returns void - */ -function uploadBuildLog(path) { - exports.command("build.uploadlog", null, path); -} -exports.uploadBuildLog = uploadBuildLog; -/** - * Update build number for current build. - * - * @param value Value to be assigned as the build number. - * @returns void - */ -function updateBuildNumber(value) { - exports.command("build.updatebuildnumber", null, value); -} -exports.updateBuildNumber = updateBuildNumber; -/** - * Add a tag for current build. - * - * @param value Tag value. - * @returns void - */ -function addBuildTag(value) { - exports.command("build.addbuildtag", null, value); -} -exports.addBuildTag = addBuildTag; -//----------------------------------------------------- -// Release Logging Commands -//----------------------------------------------------- -/** - * Update release name for current release. - * - * @param value Value to be assigned as the release name. - * @returns void - */ -function updateReleaseName(name) { - assertAgent("2.132.0"); - exports.command("release.updatereleasename", null, name); -} -exports.updateReleaseName = updateReleaseName; -//----------------------------------------------------- -// Tools -//----------------------------------------------------- -exports.TaskCommand = tcm.TaskCommand; -exports.commandFromString = tcm.commandFromString; -exports.ToolRunner = trm.ToolRunner; -//----------------------------------------------------- -// Validation Checks -//----------------------------------------------------- -// async await needs generators in node 4.x+ -if (semver.lt(process.versions.node, '4.2.0')) { - exports.warning('Tasks require a new agent. Upgrade your agent or node to 4.2.0 or later'); -} -//------------------------------------------------------------------- -// Populate the vault with sensitive data. Inputs and Endpoints -//------------------------------------------------------------------- -// avoid loading twice (overwrites .taskkey) -if (!global['_vsts_task_lib_loaded']) { - im._loadData(); - im._exposeProxySettings(); - im._exposeCertSettings(); -} - - -/***/ }), - -/***/ 4529: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.commandFromString = exports.TaskCommand = void 0; -// -// Command Format: -// ##vso[artifact.command key=value;key=value]user message -// -// Examples: -// ##vso[task.progress value=58] -// ##vso[task.issue type=warning;]This is the user warning message -// -var CMD_PREFIX = '##vso['; -var TaskCommand = /** @class */ (function () { - function TaskCommand(command, properties, message) { - if (!command) { - command = 'missing.command'; - } - this.command = command; - this.properties = properties; - this.message = message; - } - TaskCommand.prototype.toString = function () { - var cmdStr = CMD_PREFIX + this.command; - if (this.properties && Object.keys(this.properties).length > 0) { - cmdStr += ' '; - for (var key in this.properties) { - if (this.properties.hasOwnProperty(key)) { - var val = this.properties[key]; - if (val) { - // safely append the val - avoid blowing up when attempting to - // call .replace() if message is not a string for some reason - cmdStr += key + '=' + escape('' + (val || '')) + ';'; - } - } - } - } - cmdStr += ']'; - // safely append the message - avoid blowing up when attempting to - // call .replace() if message is not a string for some reason - var message = '' + (this.message || ''); - cmdStr += escapedata(message); - return cmdStr; - }; - return TaskCommand; -}()); -exports.TaskCommand = TaskCommand; -function commandFromString(commandLine) { - var preLen = CMD_PREFIX.length; - var lbPos = commandLine.indexOf('['); - var rbPos = commandLine.indexOf(']'); - if (lbPos == -1 || rbPos == -1 || rbPos - lbPos < 3) { - throw new Error('Invalid command brackets'); - } - var cmdInfo = commandLine.substring(lbPos + 1, rbPos); - var spaceIdx = cmdInfo.indexOf(' '); - var command = cmdInfo; - var properties = {}; - if (spaceIdx > 0) { - command = cmdInfo.trim().substring(0, spaceIdx); - var propSection = cmdInfo.trim().substring(spaceIdx + 1); - var propLines = propSection.split(';'); - propLines.forEach(function (propLine) { - propLine = propLine.trim(); - if (propLine.length > 0) { - var eqIndex = propLine.indexOf('='); - if (eqIndex == -1) { - throw new Error('Invalid property: ' + propLine); - } - var key = propLine.substring(0, eqIndex); - var val = propLine.substring(eqIndex + 1); - properties[key] = unescape(val); - } - }); - } - var msg = unescapedata(commandLine.substring(rbPos + 1)); - var cmd = new TaskCommand(command, properties, msg); - return cmd; -} -exports.commandFromString = commandFromString; -function escapedata(s) { - return s.replace(/%/g, '%AZP25') - .replace(/\r/g, '%0D') - .replace(/\n/g, '%0A'); -} -function unescapedata(s) { - return s.replace(/%0D/g, '\r') - .replace(/%0A/g, '\n') - .replace(/%AZP25/g, '%'); -} -function escape(s) { - return s.replace(/%/g, '%AZP25') - .replace(/\r/g, '%0D') - .replace(/\n/g, '%0A') - .replace(/]/g, '%5D') - .replace(/;/g, '%3B'); -} -function unescape(s) { - return s.replace(/%0D/g, '\r') - .replace(/%0A/g, '\n') - .replace(/%5D/g, ']') - .replace(/%3B/g, ';') - .replace(/%AZP25/g, '%'); -} - - -/***/ }), - -/***/ 5571: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.ToolRunner = void 0; -var Q = __nccwpck_require__(6172); -var os = __nccwpck_require__(2037); -var events = __nccwpck_require__(2361); -var child = __nccwpck_require__(2081); -var im = __nccwpck_require__(2650); -var fs = __nccwpck_require__(7147); -var ToolRunner = /** @class */ (function (_super) { - __extends(ToolRunner, _super); - function ToolRunner(toolPath) { - var _this = _super.call(this) || this; - _this.cmdSpecialChars = [' ', '\t', '&', '(', ')', '[', ']', '{', '}', '^', '=', ';', '!', '\'', '+', ',', '`', '~', '|', '<', '>', '"']; - if (!toolPath) { - throw new Error('Parameter \'toolPath\' cannot be null or empty.'); - } - _this.toolPath = im._which(toolPath, true); - _this.args = []; - _this._debug('toolRunner toolPath: ' + toolPath); - return _this; - } - ToolRunner.prototype._debug = function (message) { - this.emit('debug', message); - }; - ToolRunner.prototype._argStringToArray = function (argString) { - var args = []; - var inQuotes = false; - var escaped = false; - var lastCharWasSpace = true; - var arg = ''; - var append = function (c) { - // we only escape double quotes. - if (escaped) { - if (c !== '"') { - arg += '\\'; - } - else { - arg.slice(0, -1); - } - } - arg += c; - escaped = false; - }; - for (var i = 0; i < argString.length; i++) { - var c = argString.charAt(i); - if (c === ' ' && !inQuotes) { - if (!lastCharWasSpace) { - args.push(arg); - arg = ''; - } - lastCharWasSpace = true; - continue; - } - else { - lastCharWasSpace = false; - } - if (c === '"') { - if (!escaped) { - inQuotes = !inQuotes; - } - else { - append(c); - } - continue; - } - if (c === "\\" && escaped) { - append(c); - continue; - } - if (c === "\\" && inQuotes) { - escaped = true; - continue; - } - append(c); - lastCharWasSpace = false; - } - if (!lastCharWasSpace) { - args.push(arg.trim()); - } - return args; - }; - ToolRunner.prototype._getCommandString = function (options, noPrefix) { - var _this = this; - var toolPath = this._getSpawnFileName(); - var args = this._getSpawnArgs(options); - var cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool - var commandParts = []; - if (process.platform == 'win32') { - // Windows + cmd file - if (this._isCmdFile()) { - commandParts.push(toolPath); - commandParts = commandParts.concat(args); - } - // Windows + verbatim - else if (options.windowsVerbatimArguments) { - commandParts.push("\"" + toolPath + "\""); - commandParts = commandParts.concat(args); - } - else if (options.shell) { - commandParts.push(this._windowsQuoteCmdArg(toolPath)); - commandParts = commandParts.concat(args); - } - // Windows (regular) - else { - commandParts.push(this._windowsQuoteCmdArg(toolPath)); - commandParts = commandParts.concat(args.map(function (arg) { return _this._windowsQuoteCmdArg(arg); })); - } - } - else { - // OSX/Linux - this can likely be improved with some form of quoting. - // creating processes on Unix is fundamentally different than Windows. - // on Unix, execvp() takes an arg array. - commandParts.push(toolPath); - commandParts = commandParts.concat(args); - } - cmd += commandParts.join(' '); - // append second tool - if (this.pipeOutputToTool) { - cmd += ' | ' + this.pipeOutputToTool._getCommandString(options, /*noPrefix:*/ true); - } - return cmd; - }; - ToolRunner.prototype._processLineBuffer = function (data, strBuffer, onLine) { - try { - var s = strBuffer + data.toString(); - var n = s.indexOf(os.EOL); - while (n > -1) { - var line = s.substring(0, n); - onLine(line); - // the rest of the string ... - s = s.substring(n + os.EOL.length); - n = s.indexOf(os.EOL); - } - strBuffer = s; - } - catch (err) { - // streaming lines to console is best effort. Don't fail a build. - this._debug('error processing line'); - } - }; - /** - * Wraps an arg string with specified char if it's not already wrapped - * @returns {string} Arg wrapped with specified char - * @param {string} arg Input argument string - * @param {string} wrapChar A char input string should be wrapped with - */ - ToolRunner.prototype._wrapArg = function (arg, wrapChar) { - if (!this._isWrapped(arg, wrapChar)) { - return "" + wrapChar + arg + wrapChar; - } - return arg; - }; - /** - * Unwraps an arg string wrapped with specified char - * @param arg Arg wrapped with specified char - * @param wrapChar A char to be removed - */ - ToolRunner.prototype._unwrapArg = function (arg, wrapChar) { - if (this._isWrapped(arg, wrapChar)) { - var pattern = new RegExp("(^\\\\?" + wrapChar + ")|(\\\\?" + wrapChar + "$)", 'g'); - return arg.trim().replace(pattern, ''); - } - return arg; - }; - /** - * Determine if arg string is wrapped with specified char - * @param arg Input arg string - */ - ToolRunner.prototype._isWrapped = function (arg, wrapChar) { - var pattern = new RegExp("^\\\\?" + wrapChar + ".+\\\\?" + wrapChar + "$"); - return pattern.test(arg.trim()); - }; - ToolRunner.prototype._getSpawnFileName = function (options) { - if (process.platform == 'win32') { - if (this._isCmdFile()) { - return process.env['COMSPEC'] || 'cmd.exe'; - } - } - if (options && options.shell) { - return this._wrapArg(this.toolPath, '"'); - } - return this.toolPath; - }; - ToolRunner.prototype._getSpawnArgs = function (options) { - var _this = this; - if (process.platform == 'win32') { - if (this._isCmdFile()) { - var argline = "/D /S /C \"" + this._windowsQuoteCmdArg(this.toolPath); - for (var i = 0; i < this.args.length; i++) { - argline += ' '; - argline += options.windowsVerbatimArguments ? this.args[i] : this._windowsQuoteCmdArg(this.args[i]); - } - argline += '"'; - return [argline]; - } - if (options.windowsVerbatimArguments) { - // note, in Node 6.x options.argv0 can be used instead of overriding args.slice and args.unshift. - // for more details, refer to https://github.com/nodejs/node/blob/v6.x/lib/child_process.js - var args_1 = this.args.slice(0); // copy the array - // override slice to prevent Node from creating a copy of the arg array. - // we need Node to use the "unshift" override below. - args_1.slice = function () { - if (arguments.length != 1 || arguments[0] != 0) { - throw new Error('Unexpected arguments passed to args.slice when windowsVerbatimArguments flag is set.'); - } - return args_1; - }; - // override unshift - // - // when using the windowsVerbatimArguments option, Node does not quote the tool path when building - // the cmdline parameter for the win32 function CreateProcess(). an unquoted space in the tool path - // causes problems for tools when attempting to parse their own command line args. tools typically - // assume their arguments begin after arg 0. - // - // by hijacking unshift, we can quote the tool path when it pushed onto the args array. Node builds - // the cmdline parameter from the args array. - // - // note, we can't simply pass a quoted tool path to Node for multiple reasons: - // 1) Node verifies the file exists (calls win32 function GetFileAttributesW) and the check returns - // false if the path is quoted. - // 2) Node passes the tool path as the application parameter to CreateProcess, which expects the - // path to be unquoted. - // - // also note, in addition to the tool path being embedded within the cmdline parameter, Node also - // passes the tool path to CreateProcess via the application parameter (optional parameter). when - // present, Windows uses the application parameter to determine which file to run, instead of - // interpreting the file from the cmdline parameter. - args_1.unshift = function () { - if (arguments.length != 1) { - throw new Error('Unexpected arguments passed to args.unshift when windowsVerbatimArguments flag is set.'); - } - return Array.prototype.unshift.call(args_1, "\"" + arguments[0] + "\""); // quote the file name - }; - return args_1; - } - else if (options.shell) { - var args = []; - for (var _i = 0, _a = this.args; _i < _a.length; _i++) { - var arg = _a[_i]; - if (this._needQuotesForCmd(arg, '%')) { - args.push(this._wrapArg(arg, '"')); - } - else { - args.push(arg); - } - } - return args; - } - } - else if (options.shell) { - return this.args.map(function (arg) { - if (_this._isWrapped(arg, "'")) { - return arg; - } - // remove wrapping double quotes to avoid escaping - arg = _this._unwrapArg(arg, '"'); - arg = _this._escapeChar(arg, '"'); - return _this._wrapArg(arg, '"'); - }); - } - return this.args; - }; - /** - * Escape specified character. - * @param arg String to escape char in - * @param charToEscape Char should be escaped - */ - ToolRunner.prototype._escapeChar = function (arg, charToEscape) { - var escChar = "\\"; - var output = ''; - var charIsEscaped = false; - for (var _i = 0, arg_1 = arg; _i < arg_1.length; _i++) { - var char = arg_1[_i]; - if (char === charToEscape && !charIsEscaped) { - output += escChar + char; - } - else { - output += char; - } - charIsEscaped = char === escChar && !charIsEscaped; - } - return output; - }; - ToolRunner.prototype._isCmdFile = function () { - var upperToolPath = this.toolPath.toUpperCase(); - return im._endsWith(upperToolPath, '.CMD') || im._endsWith(upperToolPath, '.BAT'); - }; - /** - * Determine whether the cmd arg needs to be quoted. Returns true if arg contains any of special chars array. - * @param arg The cmd command arg. - * @param additionalChars Additional chars which should be also checked. - */ - ToolRunner.prototype._needQuotesForCmd = function (arg, additionalChars) { - var specialChars = this.cmdSpecialChars; - if (additionalChars) { - specialChars = this.cmdSpecialChars.concat(additionalChars); - } - var _loop_1 = function (char) { - if (specialChars.some(function (x) { return x === char; })) { - return { value: true }; - } - }; - for (var _i = 0, arg_2 = arg; _i < arg_2.length; _i++) { - var char = arg_2[_i]; - var state_1 = _loop_1(char); - if (typeof state_1 === "object") - return state_1.value; - } - return false; - }; - ToolRunner.prototype._windowsQuoteCmdArg = function (arg) { - // for .exe, apply the normal quoting rules that libuv applies - if (!this._isCmdFile()) { - return this._uv_quote_cmd_arg(arg); - } - // otherwise apply quoting rules specific to the cmd.exe command line parser. - // the libuv rules are generic and are not designed specifically for cmd.exe - // command line parser. - // - // for a detailed description of the cmd.exe command line parser, refer to - // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912 - // need quotes for empty arg - if (!arg) { - return '""'; - } - // determine whether the arg needs to be quoted - var needsQuotes = this._needQuotesForCmd(arg); - // short-circuit if quotes not needed - if (!needsQuotes) { - return arg; - } - // the following quoting rules are very similar to the rules that by libuv applies. - // - // 1) wrap the string in quotes - // - // 2) double-up quotes - i.e. " => "" - // - // this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately - // doesn't work well with a cmd.exe command line. - // - // note, replacing " with "" also works well if the arg is passed to a downstream .NET console app. - // for example, the command line: - // foo.exe "myarg:""my val""" - // is parsed by a .NET console app into an arg array: - // [ "myarg:\"my val\"" ] - // which is the same end result when applying libuv quoting rules. although the actual - // command line from libuv quoting rules would look like: - // foo.exe "myarg:\"my val\"" - // - // 3) double-up slashes that preceed a quote, - // e.g. hello \world => "hello \world" - // hello\"world => "hello\\""world" - // hello\\"world => "hello\\\\""world" - // hello world\ => "hello world\\" - // - // technically this is not required for a cmd.exe command line, or the batch argument parser. - // the reasons for including this as a .cmd quoting rule are: - // - // a) this is optimized for the scenario where the argument is passed from the .cmd file to an - // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule. - // - // b) it's what we've been doing previously (by deferring to node default behavior) and we - // haven't heard any complaints about that aspect. - // - // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be - // escaped when used on the command line directly - even though within a .cmd file % can be escaped - // by using %%. - // - // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts - // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing. - // - // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would - // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the - // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args - // to an external program. - // - // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file. - // % can be escaped within a .cmd file. - var reverse = '"'; - var quote_hit = true; - for (var i = arg.length; i > 0; i--) { // walk the string in reverse - reverse += arg[i - 1]; - if (quote_hit && arg[i - 1] == '\\') { - reverse += '\\'; // double the slash - } - else if (arg[i - 1] == '"') { - quote_hit = true; - reverse += '"'; // double the quote - } - else { - quote_hit = false; - } - } - reverse += '"'; - return reverse.split('').reverse().join(''); - }; - ToolRunner.prototype._uv_quote_cmd_arg = function (arg) { - // Tool runner wraps child_process.spawn() and needs to apply the same quoting as - // Node in certain cases where the undocumented spawn option windowsVerbatimArguments - // is used. - // - // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV, - // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details), - // pasting copyright notice from Node within this function: - // - // Copyright Joyent, Inc. and other Node contributors. All rights reserved. - // - // Permission is hereby granted, free of charge, to any person obtaining a copy - // of this software and associated documentation files (the "Software"), to - // deal in the Software without restriction, including without limitation the - // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - // sell copies of the Software, and to permit persons to whom the Software is - // furnished to do so, subject to the following conditions: - // - // The above copyright notice and this permission notice shall be included in - // all copies or substantial portions of the Software. - // - // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - // IN THE SOFTWARE. - if (!arg) { - // Need double quotation for empty argument - return '""'; - } - if (arg.indexOf(' ') < 0 && arg.indexOf('\t') < 0 && arg.indexOf('"') < 0) { - // No quotation needed - return arg; - } - if (arg.indexOf('"') < 0 && arg.indexOf('\\') < 0) { - // No embedded double quotes or backslashes, so I can just wrap - // quote marks around the whole thing. - return "\"" + arg + "\""; - } - // Expected input/output: - // input : hello"world - // output: "hello\"world" - // input : hello""world - // output: "hello\"\"world" - // input : hello\world - // output: hello\world - // input : hello\\world - // output: hello\\world - // input : hello\"world - // output: "hello\\\"world" - // input : hello\\"world - // output: "hello\\\\\"world" - // input : hello world\ - // output: "hello world\\" - note the comment in libuv actually reads "hello world\" - // but it appears the comment is wrong, it should be "hello world\\" - var reverse = '"'; - var quote_hit = true; - for (var i = arg.length; i > 0; i--) { // walk the string in reverse - reverse += arg[i - 1]; - if (quote_hit && arg[i - 1] == '\\') { - reverse += '\\'; - } - else if (arg[i - 1] == '"') { - quote_hit = true; - reverse += '\\'; - } - else { - quote_hit = false; - } - } - reverse += '"'; - return reverse.split('').reverse().join(''); - }; - ToolRunner.prototype._cloneExecOptions = function (options) { - options = options || {}; - var result = { - cwd: options.cwd || process.cwd(), - env: options.env || process.env, - silent: options.silent || false, - failOnStdErr: options.failOnStdErr || false, - ignoreReturnCode: options.ignoreReturnCode || false, - windowsVerbatimArguments: options.windowsVerbatimArguments || false, - shell: options.shell || false - }; - result.outStream = options.outStream || process.stdout; - result.errStream = options.errStream || process.stderr; - return result; - }; - ToolRunner.prototype._getSpawnOptions = function (options) { - options = options || {}; - var result = {}; - result.cwd = options.cwd; - result.env = options.env; - result.shell = options.shell; - result['windowsVerbatimArguments'] = options.windowsVerbatimArguments || this._isCmdFile(); - return result; - }; - ToolRunner.prototype._getSpawnSyncOptions = function (options) { - var result = {}; - result.cwd = options.cwd; - result.env = options.env; - result.shell = options.shell; - result['windowsVerbatimArguments'] = options.windowsVerbatimArguments || this._isCmdFile(); - return result; - }; - ToolRunner.prototype.execWithPiping = function (pipeOutputToTool, options) { - var _this = this; - var _a, _b, _c, _d; - var defer = Q.defer(); - this._debug('exec tool: ' + this.toolPath); - this._debug('arguments:'); - this.args.forEach(function (arg) { - _this._debug(' ' + arg); - }); - var success = true; - var optionsNonNull = this._cloneExecOptions(options); - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL); - } - var cp; - var toolPath = pipeOutputToTool.toolPath; - var toolPathFirst; - var successFirst = true; - var returnCodeFirst; - var fileStream; - var waitingEvents = 0; // number of process or stream events we are waiting on to complete - var returnCode = 0; - var error; - toolPathFirst = this.toolPath; - // Following node documentation example from this link on how to pipe output of one process to another - // https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options - //start the child process for both tools - waitingEvents++; - var cpFirst = child.spawn(this._getSpawnFileName(optionsNonNull), this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(optionsNonNull)); - waitingEvents++; - cp = child.spawn(pipeOutputToTool._getSpawnFileName(optionsNonNull), pipeOutputToTool._getSpawnArgs(optionsNonNull), pipeOutputToTool._getSpawnOptions(optionsNonNull)); - fileStream = this.pipeOutputToFile ? fs.createWriteStream(this.pipeOutputToFile) : null; - if (fileStream) { - waitingEvents++; - fileStream.on('finish', function () { - waitingEvents--; //file write is complete - fileStream = null; - if (waitingEvents == 0) { - if (error) { - defer.reject(error); - } - else { - defer.resolve(returnCode); - } - } - }); - fileStream.on('error', function (err) { - waitingEvents--; //there were errors writing to the file, write is done - _this._debug("Failed to pipe output of " + toolPathFirst + " to file " + _this.pipeOutputToFile + ". Error = " + err); - fileStream = null; - if (waitingEvents == 0) { - if (error) { - defer.reject(error); - } - else { - defer.resolve(returnCode); - } - } - }); - } - //pipe stdout of first tool to stdin of second tool - (_a = cpFirst.stdout) === null || _a === void 0 ? void 0 : _a.on('data', function (data) { - var _a; - try { - if (fileStream) { - fileStream.write(data); - } - (_a = cp.stdin) === null || _a === void 0 ? void 0 : _a.write(data); - } - catch (err) { - _this._debug('Failed to pipe output of ' + toolPathFirst + ' to ' + toolPath); - _this._debug(toolPath + ' might have exited due to errors prematurely. Verify the arguments passed are valid.'); - } - }); - (_b = cpFirst.stderr) === null || _b === void 0 ? void 0 : _b.on('data', function (data) { - if (fileStream) { - fileStream.write(data); - } - successFirst = !optionsNonNull.failOnStdErr; - if (!optionsNonNull.silent) { - var s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; - s.write(data); - } - }); - cpFirst.on('error', function (err) { - var _a; - waitingEvents--; //first process is complete with errors - if (fileStream) { - fileStream.end(); - } - (_a = cp.stdin) === null || _a === void 0 ? void 0 : _a.end(); - error = new Error(toolPathFirst + ' failed. ' + err.message); - if (waitingEvents == 0) { - defer.reject(error); - } - }); - cpFirst.on('close', function (code, signal) { - var _a; - waitingEvents--; //first process is complete - if (code != 0 && !optionsNonNull.ignoreReturnCode) { - successFirst = false; - returnCodeFirst = code; - returnCode = returnCodeFirst; - } - _this._debug('success of first tool:' + successFirst); - if (fileStream) { - fileStream.end(); - } - (_a = cp.stdin) === null || _a === void 0 ? void 0 : _a.end(); - if (waitingEvents == 0) { - if (error) { - defer.reject(error); - } - else { - defer.resolve(returnCode); - } - } - }); - var stdbuffer = ''; - (_c = cp.stdout) === null || _c === void 0 ? void 0 : _c.on('data', function (data) { - _this.emit('stdout', data); - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(data); - } - _this._processLineBuffer(data, stdbuffer, function (line) { - _this.emit('stdline', line); - }); - }); - var errbuffer = ''; - (_d = cp.stderr) === null || _d === void 0 ? void 0 : _d.on('data', function (data) { - _this.emit('stderr', data); - success = !optionsNonNull.failOnStdErr; - if (!optionsNonNull.silent) { - var s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; - s.write(data); - } - _this._processLineBuffer(data, errbuffer, function (line) { - _this.emit('errline', line); - }); - }); - cp.on('error', function (err) { - waitingEvents--; //process is done with errors - error = new Error(toolPath + ' failed. ' + err.message); - if (waitingEvents == 0) { - defer.reject(error); - } - }); - cp.on('close', function (code, signal) { - waitingEvents--; //process is complete - _this._debug('rc:' + code); - returnCode = code; - if (stdbuffer.length > 0) { - _this.emit('stdline', stdbuffer); - } - if (errbuffer.length > 0) { - _this.emit('errline', errbuffer); - } - if (code != 0 && !optionsNonNull.ignoreReturnCode) { - success = false; - } - _this._debug('success:' + success); - if (!successFirst) { //in the case output is piped to another tool, check exit code of both tools - error = new Error(toolPathFirst + ' failed with return code: ' + returnCodeFirst); - } - else if (!success) { - error = new Error(toolPath + ' failed with return code: ' + code); - } - if (waitingEvents == 0) { - if (error) { - defer.reject(error); - } - else { - defer.resolve(returnCode); - } - } - }); - return defer.promise; - }; - /** - * Add argument - * Append an argument or an array of arguments - * returns ToolRunner for chaining - * - * @param val string cmdline or array of strings - * @returns ToolRunner - */ - ToolRunner.prototype.arg = function (val) { - if (!val) { - return this; - } - if (val instanceof Array) { - this._debug(this.toolPath + ' arg: ' + JSON.stringify(val)); - this.args = this.args.concat(val); - } - else if (typeof (val) === 'string') { - this._debug(this.toolPath + ' arg: ' + val); - this.args = this.args.concat(val.trim()); - } - return this; - }; - /** - * Parses an argument line into one or more arguments - * e.g. .line('"arg one" two -z') is equivalent to .arg(['arg one', 'two', '-z']) - * returns ToolRunner for chaining - * - * @param val string argument line - * @returns ToolRunner - */ - ToolRunner.prototype.line = function (val) { - if (!val) { - return this; - } - this._debug(this.toolPath + ' arg: ' + val); - this.args = this.args.concat(this._argStringToArray(val)); - return this; - }; - /** - * Add argument(s) if a condition is met - * Wraps arg(). See arg for details - * returns ToolRunner for chaining - * - * @param condition boolean condition - * @param val string cmdline or array of strings - * @returns ToolRunner - */ - ToolRunner.prototype.argIf = function (condition, val) { - if (condition) { - this.arg(val); - } - return this; - }; - /** - * Pipe output of exec() to another tool - * @param tool - * @param file optional filename to additionally stream the output to. - * @returns {ToolRunner} - */ - ToolRunner.prototype.pipeExecOutputToTool = function (tool, file) { - this.pipeOutputToTool = tool; - this.pipeOutputToFile = file; - return this; - }; - /** - * Exec a tool. - * Output will be streamed to the live console. - * Returns promise with return code - * - * @param tool path to tool to exec - * @param options optional exec options. See IExecOptions - * @returns number - */ - ToolRunner.prototype.exec = function (options) { - var _this = this; - var _a, _b, _c; - if (this.pipeOutputToTool) { - return this.execWithPiping(this.pipeOutputToTool, options); - } - var defer = Q.defer(); - this._debug('exec tool: ' + this.toolPath); - this._debug('arguments:'); - this.args.forEach(function (arg) { - _this._debug(' ' + arg); - }); - var optionsNonNull = this._cloneExecOptions(options); - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL); - } - var state = new ExecState(optionsNonNull, this.toolPath); - state.on('debug', function (message) { - _this._debug(message); - }); - var cp = child.spawn(this._getSpawnFileName(options), this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(options)); - this.childProcess = cp; - // it is possible for the child process to end its last line without a new line. - // because stdout is buffered, this causes the last line to not get sent to the parent - // stream. Adding this event forces a flush before the child streams are closed. - (_a = cp.stdout) === null || _a === void 0 ? void 0 : _a.on('finish', function () { - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(os.EOL); - } - }); - var stdbuffer = ''; - (_b = cp.stdout) === null || _b === void 0 ? void 0 : _b.on('data', function (data) { - _this.emit('stdout', data); - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(data); - } - _this._processLineBuffer(data, stdbuffer, function (line) { - _this.emit('stdline', line); - }); - }); - var errbuffer = ''; - (_c = cp.stderr) === null || _c === void 0 ? void 0 : _c.on('data', function (data) { - state.processStderr = true; - _this.emit('stderr', data); - if (!optionsNonNull.silent) { - var s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; - s.write(data); - } - _this._processLineBuffer(data, errbuffer, function (line) { - _this.emit('errline', line); - }); - }); - cp.on('error', function (err) { - state.processError = err.message; - state.processExited = true; - state.processClosed = true; - state.CheckComplete(); - }); - cp.on('exit', function (code, signal) { - state.processExitCode = code; - state.processExited = true; - _this._debug("Exit code " + code + " received from tool '" + _this.toolPath + "'"); - state.CheckComplete(); - }); - cp.on('close', function (code, signal) { - state.processExitCode = code; - state.processExited = true; - state.processClosed = true; - _this._debug("STDIO streams have closed for tool '" + _this.toolPath + "'"); - state.CheckComplete(); - }); - state.on('done', function (error, exitCode) { - if (stdbuffer.length > 0) { - _this.emit('stdline', stdbuffer); - } - if (errbuffer.length > 0) { - _this.emit('errline', errbuffer); - } - cp.removeAllListeners(); - if (error) { - defer.reject(error); - } - else { - defer.resolve(exitCode); - } - }); - return defer.promise; - }; - /** - * Exec a tool synchronously. - * Output will be *not* be streamed to the live console. It will be returned after execution is complete. - * Appropriate for short running tools - * Returns IExecSyncResult with output and return code - * - * @param tool path to tool to exec - * @param options optional exec options. See IExecSyncOptions - * @returns IExecSyncResult - */ - ToolRunner.prototype.execSync = function (options) { - var _this = this; - this._debug('exec tool: ' + this.toolPath); - this._debug('arguments:'); - this.args.forEach(function (arg) { - _this._debug(' ' + arg); - }); - var success = true; - options = this._cloneExecOptions(options); - if (!options.silent) { - options.outStream.write(this._getCommandString(options) + os.EOL); - } - var r = child.spawnSync(this._getSpawnFileName(options), this._getSpawnArgs(options), this._getSpawnSyncOptions(options)); - if (!options.silent && r.stdout && r.stdout.length > 0) { - options.outStream.write(r.stdout); - } - if (!options.silent && r.stderr && r.stderr.length > 0) { - options.errStream.write(r.stderr); - } - var res = { code: r.status, error: r.error }; - res.stdout = (r.stdout) ? r.stdout.toString() : ''; - res.stderr = (r.stderr) ? r.stderr.toString() : ''; - return res; - }; - /** - * Used to close child process by sending SIGNINT signal. - * It allows executed script to have some additional logic on SIGINT, before exiting. - */ - ToolRunner.prototype.killChildProcess = function () { - if (this.childProcess) { - this.childProcess.kill(); - } - }; - return ToolRunner; -}(events.EventEmitter)); -exports.ToolRunner = ToolRunner; -var ExecState = /** @class */ (function (_super) { - __extends(ExecState, _super); - function ExecState(options, toolPath) { - var _this = _super.call(this) || this; - _this.delay = 10000; // 10 seconds - _this.timeout = null; - if (!toolPath) { - throw new Error('toolPath must not be empty'); - } - _this.options = options; - _this.toolPath = toolPath; - var delay = process.env['TASKLIB_TEST_TOOLRUNNER_EXITDELAY']; - if (delay) { - _this.delay = parseInt(delay); - } - return _this; - } - ExecState.prototype.CheckComplete = function () { - if (this.done) { - return; - } - if (this.processClosed) { - this._setResult(); - } - else if (this.processExited) { - this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this); - } - }; - ExecState.prototype._debug = function (message) { - this.emit('debug', message); - }; - ExecState.prototype._setResult = function () { - // determine whether there is an error - var error; - if (this.processExited) { - if (this.processError) { - error = new Error(im._loc('LIB_ProcessError', this.toolPath, this.processError)); - } - else if (this.processExitCode != 0 && !this.options.ignoreReturnCode) { - error = new Error(im._loc('LIB_ProcessExitCode', this.toolPath, this.processExitCode)); - } - else if (this.processStderr && this.options.failOnStdErr) { - error = new Error(im._loc('LIB_ProcessStderr', this.toolPath)); - } - } - // clear the timeout - if (this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } - this.done = true; - this.emit('done', error, this.processExitCode); - }; - ExecState.HandleTimeout = function (state) { - if (state.done) { - return; - } - if (!state.processClosed && state.processExited) { - console.log(im._loc('LIB_StdioNotClosed', state.delay / 1000, state.toolPath)); - state._debug(im._loc('LIB_StdioNotClosed', state.delay / 1000, state.toolPath)); - } - state._setResult(); - }; - return ExecState; -}(events.EventEmitter)); - - -/***/ }), - -/***/ 2937: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Vault = void 0; -var fs = __nccwpck_require__(7147); -var path = __nccwpck_require__(1017); -var crypto = __nccwpck_require__(6113); -var uuidV4 = __nccwpck_require__(4283); -var algorithm = "aes-256-ctr"; -var encryptEncoding = 'hex'; -var unencryptedEncoding = 'utf8'; -// -// Store sensitive data in proc. -// Main goal: Protects tasks which would dump envvars from leaking secrets inadvertently -// the task lib clears after storing. -// Also protects against a dump of a process getting the secrets -// The secret is generated and stored externally for the lifetime of the task. -// -var Vault = /** @class */ (function () { - function Vault(keyPath) { - this._keyFile = path.join(keyPath, '.taskkey'); - this._store = {}; - this.genKey(); - } - Vault.prototype.initialize = function () { - }; - Vault.prototype.storeSecret = function (name, data) { - if (!name || name.length == 0) { - return false; - } - name = name.toLowerCase(); - if (!data || data.length == 0) { - if (this._store.hasOwnProperty(name)) { - delete this._store[name]; - } - return false; - } - var key = this.getKey(); - var iv = crypto.randomBytes(16); - var cipher = crypto.createCipheriv(algorithm, key, iv); - var crypted = cipher.update(data, unencryptedEncoding, encryptEncoding); - var cryptedFinal = cipher.final(encryptEncoding); - this._store[name] = iv.toString(encryptEncoding) + crypted + cryptedFinal; - return true; - }; - Vault.prototype.retrieveSecret = function (name) { - var secret; - name = (name || '').toLowerCase(); - if (this._store.hasOwnProperty(name)) { - var key = this.getKey(); - var data = this._store[name]; - var ivDataBuffer = Buffer.from(data, encryptEncoding); - var iv = ivDataBuffer.slice(0, 16); - var encryptedText = ivDataBuffer.slice(16); - var decipher = crypto.createDecipheriv(algorithm, key, iv); - var dec = decipher.update(encryptedText, encryptEncoding, unencryptedEncoding); - var decFinal = decipher.final(unencryptedEncoding); - secret = dec + decFinal; - } - return secret; - }; - Vault.prototype.getKey = function () { - var key = fs.readFileSync(this._keyFile).toString('utf8'); - // Key needs to be hashed to correct length to match algorithm (aes-256-ctr) - return crypto.createHash('sha256').update(key).digest(); - }; - Vault.prototype.genKey = function () { - fs.writeFileSync(this._keyFile, uuidV4(), { encoding: 'utf8' }); - }; - return Vault; -}()); -exports.Vault = Vault; - - -/***/ }), - -/***/ 6858: -/***/ ((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 - -var MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6 - -// The actual regexps go on exports.re -var re = exports.re = [] -var safeRe = exports.safeRe = [] -var src = exports.src = [] -var R = 0 - -var LETTERDASHNUMBER = '[a-zA-Z0-9-]' - -// Replace some greedy regex tokens to prevent regex dos issues. These regex are -// used internally via the safeRe object since all inputs in this library get -// normalized first to trim and collapse all extra whitespace. The original -// regexes are exported for userland consumption and lower level usage. A -// future breaking change could export the safer regex only with a note that -// all input should have extra whitespace removed. -var safeRegexReplacements = [ - ['\\s', 1], - ['\\d', MAX_LENGTH], - [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH], -] - -function makeSafeRe (value) { - for (var i = 0; i < safeRegexReplacements.length; i++) { - var token = safeRegexReplacements[i][0] - var max = safeRegexReplacements[i][1] - value = value - .split(token + '*').join(token + '{0,' + max + '}') - .split(token + '+').join(token + '{1,' + max + '}') - } - return value -} - -// 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. - -var NUMERICIDENTIFIER = R++ -src[NUMERICIDENTIFIER] = '0|[1-9]\\d*' -var NUMERICIDENTIFIERLOOSE = R++ -src[NUMERICIDENTIFIERLOOSE] = '\\d+' - -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. - -var NONNUMERICIDENTIFIER = R++ -src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-]' + LETTERDASHNUMBER + '*' - -// ## Main Version -// Three dot-separated numeric identifiers. - -var MAINVERSION = R++ -src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + - '(' + src[NUMERICIDENTIFIER] + ')\\.' + - '(' + src[NUMERICIDENTIFIER] + ')' - -var MAINVERSIONLOOSE = R++ -src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[NUMERICIDENTIFIERLOOSE] + ')' - -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. - -var PRERELEASEIDENTIFIER = R++ -src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + - '|' + src[NONNUMERICIDENTIFIER] + ')' - -var PRERELEASEIDENTIFIERLOOSE = R++ -src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + - '|' + src[NONNUMERICIDENTIFIER] + ')' - -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. - -var PRERELEASE = R++ -src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + - '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))' - -var PRERELEASELOOSE = R++ -src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + - '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))' - -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. - -var BUILDIDENTIFIER = R++ -src[BUILDIDENTIFIER] = LETTERDASHNUMBER + '+' - -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. - -var BUILD = R++ -src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + - '(?:\\.' + src[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. - -var FULL = R++ -var FULLPLAIN = 'v?' + src[MAINVERSION] + - src[PRERELEASE] + '?' + - src[BUILD] + '?' - -src[FULL] = '^' + 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. -var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + - src[PRERELEASELOOSE] + '?' + - src[BUILD] + '?' - -var LOOSE = R++ -src[LOOSE] = '^' + LOOSEPLAIN + '$' - -var GTLT = R++ -src[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. -var XRANGEIDENTIFIERLOOSE = R++ -src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' -var XRANGEIDENTIFIER = R++ -src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*' - -var XRANGEPLAIN = R++ -src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + - '(?:' + src[PRERELEASE] + ')?' + - src[BUILD] + '?' + - ')?)?' - -var XRANGEPLAINLOOSE = R++ -src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:' + src[PRERELEASELOOSE] + ')?' + - src[BUILD] + '?' + - ')?)?' - -var XRANGE = R++ -src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$' -var XRANGELOOSE = R++ -src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$' - -// Coercion. -// Extract anything that could conceivably be a part of a valid semver -var COERCE = R++ -src[COERCE] = '(?:^|[^\\d])' + - '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + - '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + - '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + - '(?:$|[^\\d])' - -// Tilde ranges. -// Meaning is "reasonably at or greater than" -var LONETILDE = R++ -src[LONETILDE] = '(?:~>?)' - -var TILDETRIM = R++ -src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+' -re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g') -safeRe[TILDETRIM] = new RegExp(makeSafeRe(src[TILDETRIM]), 'g') -var tildeTrimReplace = '$1~' - -var TILDE = R++ -src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$' -var TILDELOOSE = R++ -src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$' - -// Caret ranges. -// Meaning is "at least and backwards compatible with" -var LONECARET = R++ -src[LONECARET] = '(?:\\^)' - -var CARETTRIM = R++ -src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+' -re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g') -safeRe[CARETTRIM] = new RegExp(makeSafeRe(src[CARETTRIM]), 'g') -var caretTrimReplace = '$1^' - -var CARET = R++ -src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$' -var CARETLOOSE = R++ -src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$' - -// A simple gt/lt/eq thing, or just "" to indicate "any version" -var COMPARATORLOOSE = R++ -src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$' -var COMPARATOR = R++ -src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$' - -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -var COMPARATORTRIM = R++ -src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + - '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')' - -// this one has to use the /g flag -re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g') -safeRe[COMPARATORTRIM] = new RegExp(makeSafeRe(src[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. -var HYPHENRANGE = R++ -src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + - '\\s+-\\s+' + - '(' + src[XRANGEPLAIN] + ')' + - '\\s*$' - -var HYPHENRANGELOOSE = R++ -src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + - '\\s+-\\s+' + - '(' + src[XRANGEPLAINLOOSE] + ')' + - '\\s*$' - -// Star ranges basically just allow anything at all. -var STAR = R++ -src[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]) - - // Replace all greedy whitespace to prevent regex dos issues. These regex are - // used internally via the safeRe object since all inputs in this library get - // normalized first to trim and collapse all extra whitespace. The original - // regexes are exported for userland consumption and lower level usage. A - // future breaking change could export the safer regex only with a note that - // all input should have extra whitespace removed. - safeRe[i] = new RegExp(makeSafeRe(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 ? safeRe[LOOSE] : safeRe[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 ? safeRe[LOOSE] : safeRe[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) -} - -// 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.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.compare(a, b, loose) - }) -} - -exports.rsort = rsort -function rsort (list, loose) { - return list.sort(function (a, b) { - return exports.rcompare(a, b, 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) - } - - comp = comp.trim().split(/\s+/).join(' ') - 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 ? safeRe[COMPARATORLOOSE] : safeRe[COMPARATOR] - var m = comp.match(r) - - if (!m) { - throw new TypeError('Invalid comparator: ' + comp) - } - - this.operator = 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) { - return true - } - - if (typeof version === 'string') { - version = new SemVer(version, this.options) - } - - 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 === '') { - rangeTmp = new Range(comp.value, options) - return satisfies(this.value, rangeTmp, options) - } else if (comp.operator === '') { - 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 reduce all whitespace as much as possible so we do not have to rely - // on potentially slow regexes like \s*. This is then stored and used for - // future error messages as well. - this.raw = range - .trim() - .split(/\s+/) - .join(' ') - - // First, split based on boolean or || - this.set = this.raw.split('||').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: ' + this.raw) - } - - 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 - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - var hr = loose ? safeRe[HYPHENRANGELOOSE] : safeRe[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(safeRe[COMPARATORTRIM], comparatorTrimReplace) - debug('comparator trim', range, safeRe[COMPARATORTRIM]) - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(safeRe[TILDETRIM], tildeTrimReplace) - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(safeRe[CARETTRIM], caretTrimReplace) - - // At this point, the range is completely trimmed and - // ready to be split into comparators. - var compRe = loose ? safeRe[COMPARATORLOOSE] : safeRe[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 thisComparators.every(function (thisComparator) { - return range.set.some(function (rangeComparators) { - return rangeComparators.every(function (rangeComparator) { - return thisComparator.intersects(rangeComparator, options) - }) - }) - }) - }) -} - -// 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 ? safeRe[TILDELOOSE] : safeRe[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 ? safeRe[CARETLOOSE] : safeRe[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 ? safeRe[XRANGELOOSE] : safeRe[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 (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<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 - } else if (xm) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' - } else if (xp) { - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' - } - - 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(safeRe[STAR], '') -} - -// This function is passed to string.replace(safeRe[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') { - version = new SemVer(version, this.options) - } - - 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) { - if (version instanceof SemVer) { - return version - } - - if (typeof version !== 'string') { - return null - } - - var match = version.match(safeRe[COERCE]) - - if (match == null) { - return null - } - - return parse(match[1] + - '.' + (match[2] || '0') + - '.' + (match[3] || '0')) -} - - -/***/ }), - -/***/ 4365: -/***/ ((module) => { - -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ -var byteToHex = []; -for (var i = 0; i < 256; ++i) { - byteToHex[i] = (i + 0x100).toString(16).substr(1); -} - -function bytesToUuid(buf, offset) { - var i = offset || 0; - var bth = byteToHex; - // 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++]], - 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(''); -} - -module.exports = bytesToUuid; - - -/***/ }), - -/***/ 8425: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -// Unique ID creation requires a high quality random # generator. In node.js -// this is pretty straight-forward - we use the crypto API. - -var crypto = __nccwpck_require__(6113); - -module.exports = function nodeRNG() { - return crypto.randomBytes(16); -}; - - -/***/ }), - -/***/ 4283: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -var rng = __nccwpck_require__(8425); -var bytesToUuid = __nccwpck_require__(4365); - -function v4(options, buf, offset) { - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options === 'binary' ? new Array(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ++ii) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || bytesToUuid(rnds); -} - -module.exports = v4; - - -/***/ }), - -/***/ 6545: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -module.exports = __nccwpck_require__(2618); - -/***/ }), - -/***/ 8104: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); -var settle = __nccwpck_require__(3211); -var buildFullPath = __nccwpck_require__(1934); -var buildURL = __nccwpck_require__(646); -var http = __nccwpck_require__(3685); -var https = __nccwpck_require__(5687); -var httpFollow = (__nccwpck_require__(7707).http); -var httpsFollow = (__nccwpck_require__(7707).https); -var url = __nccwpck_require__(7310); -var zlib = __nccwpck_require__(9796); -var pkg = __nccwpck_require__(8593); -var createError = __nccwpck_require__(5226); -var enhanceError = __nccwpck_require__(1516); - -var isHttps = /https:?/; - -/** - * - * @param {http.ClientRequestArgs} options - * @param {AxiosProxyConfig} proxy - * @param {string} location - */ -function setProxy(options, proxy, location) { - options.hostname = proxy.host; - options.host = proxy.host; - options.port = proxy.port; - options.path = location; - - // Basic proxy authorization - if (proxy.auth) { - var base64 = Buffer.from(proxy.auth.username + ':' + proxy.auth.password, 'utf8').toString('base64'); - options.headers['Proxy-Authorization'] = 'Basic ' + base64; - } - - // If a proxy is used, any redirects must also pass through the proxy - options.beforeRedirect = function beforeRedirect(redirection) { - redirection.headers.host = redirection.host; - setProxy(redirection, proxy, redirection.href); - }; -} - -/*eslint consistent-return:0*/ -module.exports = function httpAdapter(config) { - return new Promise(function dispatchHttpRequest(resolvePromise, rejectPromise) { - var resolve = function resolve(value) { - resolvePromise(value); - }; - var reject = function reject(value) { - rejectPromise(value); - }; - var data = config.data; - var headers = config.headers; - - // Set User-Agent (required by some servers) - // See https://github.com/axios/axios/issues/69 - if ('User-Agent' in headers || 'user-agent' in headers) { - // User-Agent is specified; handle case where no UA header is desired - if (!headers['User-Agent'] && !headers['user-agent']) { - delete headers['User-Agent']; - delete headers['user-agent']; - } - // Otherwise, use specified value - } else { - // Only set header if it hasn't been set in config - headers['User-Agent'] = 'axios/' + pkg.version; - } - - if (data && !utils.isStream(data)) { - if (Buffer.isBuffer(data)) { - // Nothing to do... - } else if (utils.isArrayBuffer(data)) { - data = Buffer.from(new Uint8Array(data)); - } else if (utils.isString(data)) { - data = Buffer.from(data, 'utf-8'); - } else { - return reject(createError( - 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream', - config - )); - } - - // Add Content-Length header if data exists - headers['Content-Length'] = data.length; - } - - // HTTP basic authentication - var auth = undefined; - if (config.auth) { - var username = config.auth.username || ''; - var password = config.auth.password || ''; - auth = username + ':' + password; - } - - // Parse url - var fullPath = buildFullPath(config.baseURL, config.url); - var parsed = url.parse(fullPath); - var protocol = parsed.protocol || 'http:'; - - if (!auth && parsed.auth) { - var urlAuth = parsed.auth.split(':'); - var urlUsername = urlAuth[0] || ''; - var urlPassword = urlAuth[1] || ''; - auth = urlUsername + ':' + urlPassword; - } - - if (auth) { - delete headers.Authorization; - } - - var isHttpsRequest = isHttps.test(protocol); - var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent; - - var options = { - path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, ''), - method: config.method.toUpperCase(), - headers: headers, - agent: agent, - agents: { http: config.httpAgent, https: config.httpsAgent }, - auth: auth - }; - - if (config.socketPath) { - options.socketPath = config.socketPath; - } else { - options.hostname = parsed.hostname; - options.port = parsed.port; - } - - var proxy = config.proxy; - if (!proxy && proxy !== false) { - var proxyEnv = protocol.slice(0, -1) + '_proxy'; - var proxyUrl = process.env[proxyEnv] || process.env[proxyEnv.toUpperCase()]; - if (proxyUrl) { - var parsedProxyUrl = url.parse(proxyUrl); - var noProxyEnv = process.env.no_proxy || process.env.NO_PROXY; - var shouldProxy = true; - - if (noProxyEnv) { - var noProxy = noProxyEnv.split(',').map(function trim(s) { - return s.trim(); - }); - - shouldProxy = !noProxy.some(function proxyMatch(proxyElement) { - if (!proxyElement) { - return false; - } - if (proxyElement === '*') { - return true; - } - if (proxyElement[0] === '.' && - parsed.hostname.substr(parsed.hostname.length - proxyElement.length) === proxyElement) { - return true; - } - - return parsed.hostname === proxyElement; - }); - } - - if (shouldProxy) { - proxy = { - host: parsedProxyUrl.hostname, - port: parsedProxyUrl.port, - protocol: parsedProxyUrl.protocol - }; - - if (parsedProxyUrl.auth) { - var proxyUrlAuth = parsedProxyUrl.auth.split(':'); - proxy.auth = { - username: proxyUrlAuth[0], - password: proxyUrlAuth[1] - }; - } - } - } - } - - if (proxy) { - options.headers.host = parsed.hostname + (parsed.port ? ':' + parsed.port : ''); - setProxy(options, proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path); - } - - var transport; - var isHttpsProxy = isHttpsRequest && (proxy ? isHttps.test(proxy.protocol) : true); - if (config.transport) { - transport = config.transport; - } else if (config.maxRedirects === 0) { - transport = isHttpsProxy ? https : http; - } else { - if (config.maxRedirects) { - options.maxRedirects = config.maxRedirects; - } - transport = isHttpsProxy ? httpsFollow : httpFollow; - } - - if (config.maxBodyLength > -1) { - options.maxBodyLength = config.maxBodyLength; - } - - // Create the request - var req = transport.request(options, function handleResponse(res) { - if (req.aborted) return; - - // uncompress the response body transparently if required - var stream = res; - - // return the last request in case of redirects - var lastRequest = res.req || req; - - - // if no content, is HEAD request or decompress disabled we should not decompress - if (res.statusCode !== 204 && lastRequest.method !== 'HEAD' && config.decompress !== false) { - switch (res.headers['content-encoding']) { - /*eslint default-case:0*/ - case 'gzip': - case 'compress': - case 'deflate': - // add the unzipper to the body stream processing pipeline - stream = stream.pipe(zlib.createUnzip()); - - // remove the content-encoding in order to not confuse downstream operations - delete res.headers['content-encoding']; - break; - } - } - - var response = { - status: res.statusCode, - statusText: res.statusMessage, - headers: res.headers, - config: config, - request: lastRequest - }; - - if (config.responseType === 'stream') { - response.data = stream; - settle(resolve, reject, response); - } else { - var responseBuffer = []; - var totalResponseBytes = 0; - stream.on('data', function handleStreamData(chunk) { - responseBuffer.push(chunk); - totalResponseBytes += chunk.length; - - // make sure the content length is not over the maxContentLength if specified - if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) { - stream.destroy(); - reject(createError('maxContentLength size of ' + config.maxContentLength + ' exceeded', - config, null, lastRequest)); - } - }); - - stream.on('error', function handleStreamError(err) { - if (req.aborted) return; - reject(enhanceError(err, config, null, lastRequest)); - }); - - stream.on('end', function handleStreamEnd() { - var responseData = Buffer.concat(responseBuffer); - if (config.responseType !== 'arraybuffer') { - responseData = responseData.toString(config.responseEncoding); - if (!config.responseEncoding || config.responseEncoding === 'utf8') { - responseData = utils.stripBOM(responseData); - } - } - - response.data = responseData; - settle(resolve, reject, response); - }); - } - }); - - // Handle errors - req.on('error', function handleRequestError(err) { - if (req.aborted && err.code !== 'ERR_FR_TOO_MANY_REDIRECTS') return; - reject(enhanceError(err, config, null, req)); - }); - - // Handle request timeout - if (config.timeout) { - // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types. - var timeout = parseInt(config.timeout, 10); - - if (isNaN(timeout)) { - reject(createError( - 'error trying to parse `config.timeout` to int', - config, - 'ERR_PARSE_TIMEOUT', - req - )); - - return; - } - - // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system. - // And timer callback will be fired, and abort() will be invoked before connection, then get "socket hang up" and code ECONNRESET. - // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up. - // And then these socket which be hang up will devoring CPU little by little. - // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect. - req.setTimeout(timeout, function handleRequestTimeout() { - req.abort(); - reject(createError( - 'timeout of ' + timeout + 'ms exceeded', - config, - config.transitional && config.transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED', - req - )); - }); - } - - if (config.cancelToken) { - // Handle cancellation - config.cancelToken.promise.then(function onCanceled(cancel) { - if (req.aborted) return; - - req.abort(); - reject(cancel); - }); - } - - // Send the request - if (utils.isStream(data)) { - data.on('error', function handleStreamError(err) { - reject(enhanceError(err, config, null, req)); - }).pipe(req); - } else { - req.end(data); - } - }); -}; - - -/***/ }), - -/***/ 3454: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); -var settle = __nccwpck_require__(3211); -var cookies = __nccwpck_require__(1545); -var buildURL = __nccwpck_require__(646); -var buildFullPath = __nccwpck_require__(1934); -var parseHeaders = __nccwpck_require__(6455); -var isURLSameOrigin = __nccwpck_require__(3608); -var createError = __nccwpck_require__(5226); - -module.exports = function xhrAdapter(config) { - return new Promise(function dispatchXhrRequest(resolve, reject) { - var requestData = config.data; - var requestHeaders = config.headers; - var responseType = config.responseType; - - if (utils.isFormData(requestData)) { - delete requestHeaders['Content-Type']; // Let the browser set it - } - - var request = new XMLHttpRequest(); - - // HTTP basic authentication - if (config.auth) { - var username = config.auth.username || ''; - var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; - requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); - } - - var fullPath = buildFullPath(config.baseURL, config.url); - request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); - - // Set the request timeout in MS - request.timeout = config.timeout; - - function onloadend() { - if (!request) { - return; - } - // Prepare the response - var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; - var responseData = !responseType || responseType === 'text' || responseType === 'json' ? - request.responseText : request.response; - var response = { - data: responseData, - status: request.status, - statusText: request.statusText, - headers: responseHeaders, - config: config, - request: request - }; - - settle(resolve, reject, response); - - // Clean up request - request = null; - } - - if ('onloadend' in request) { - // Use onloadend if available - request.onloadend = onloadend; - } else { - // Listen for ready state to emulate onloadend - request.onreadystatechange = function handleLoad() { - if (!request || request.readyState !== 4) { - return; - } - - // The request errored out and we didn't get a response, this will be - // handled by onerror instead - // With one exception: request that using file: protocol, most browsers - // will return status as 0 even though it's a successful request - if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { - return; - } - // readystate handler is calling before onerror or ontimeout handlers, - // so we should call onloadend on the next 'tick' - setTimeout(onloadend); - }; - } - - // Handle browser request cancellation (as opposed to a manual cancellation) - request.onabort = function handleAbort() { - if (!request) { - return; - } - - reject(createError('Request aborted', config, 'ECONNABORTED', request)); - - // Clean up request - request = null; - }; - - // Handle low level network errors - request.onerror = function handleError() { - // Real errors are hidden from us by the browser - // onerror should only fire if it's a network error - reject(createError('Network Error', config, null, request)); - - // Clean up request - request = null; - }; - - // Handle timeout - request.ontimeout = function handleTimeout() { - var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded'; - if (config.timeoutErrorMessage) { - timeoutErrorMessage = config.timeoutErrorMessage; - } - reject(createError( - timeoutErrorMessage, - config, - config.transitional && config.transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED', - request)); - - // Clean up request - request = null; - }; - - // Add xsrf header - // This is only done if running in a standard browser environment. - // Specifically not if we're in a web worker, or react-native. - if (utils.isStandardBrowserEnv()) { - // Add xsrf header - var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? - cookies.read(config.xsrfCookieName) : - undefined; - - if (xsrfValue) { - requestHeaders[config.xsrfHeaderName] = xsrfValue; - } - } - - // Add headers to the request - if ('setRequestHeader' in request) { - utils.forEach(requestHeaders, function setRequestHeader(val, key) { - if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { - // Remove Content-Type if data is undefined - delete requestHeaders[key]; - } else { - // Otherwise add header to the request - request.setRequestHeader(key, val); - } - }); - } - - // Add withCredentials to request if needed - if (!utils.isUndefined(config.withCredentials)) { - request.withCredentials = !!config.withCredentials; - } - - // Add responseType to request if needed - if (responseType && responseType !== 'json') { - request.responseType = config.responseType; - } - - // Handle progress if needed - if (typeof config.onDownloadProgress === 'function') { - request.addEventListener('progress', config.onDownloadProgress); - } - - // Not all browsers support upload events - if (typeof config.onUploadProgress === 'function' && request.upload) { - request.upload.addEventListener('progress', config.onUploadProgress); - } - - if (config.cancelToken) { - // Handle cancellation - config.cancelToken.promise.then(function onCanceled(cancel) { - if (!request) { - return; - } - - request.abort(); - reject(cancel); - // Clean up request - request = null; - }); - } - - if (!requestData) { - requestData = null; - } - - // Send the request - request.send(requestData); - }); -}; - - -/***/ }), - -/***/ 2618: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); -var bind = __nccwpck_require__(7065); -var Axios = __nccwpck_require__(8178); -var mergeConfig = __nccwpck_require__(4831); -var defaults = __nccwpck_require__(8190); - -/** - * Create an instance of Axios - * - * @param {Object} defaultConfig The default config for the instance - * @return {Axios} A new instance of Axios - */ -function createInstance(defaultConfig) { - var context = new Axios(defaultConfig); - var instance = bind(Axios.prototype.request, context); - - // Copy axios.prototype to instance - utils.extend(instance, Axios.prototype, context); - - // Copy context to instance - utils.extend(instance, context); - - return instance; -} - -// Create the default instance to be exported -var axios = createInstance(defaults); - -// Expose Axios class to allow class inheritance -axios.Axios = Axios; - -// Factory for creating new instances -axios.create = function create(instanceConfig) { - return createInstance(mergeConfig(axios.defaults, instanceConfig)); -}; - -// Expose Cancel & CancelToken -axios.Cancel = __nccwpck_require__(8875); -axios.CancelToken = __nccwpck_require__(1587); -axios.isCancel = __nccwpck_require__(4057); - -// Expose all/spread -axios.all = function all(promises) { - return Promise.all(promises); -}; -axios.spread = __nccwpck_require__(4850); - -// Expose isAxiosError -axios.isAxiosError = __nccwpck_require__(650); - -module.exports = axios; - -// Allow use of default import syntax in TypeScript -module.exports["default"] = axios; - - -/***/ }), - -/***/ 8875: -/***/ ((module) => { - -"use strict"; - - -/** - * A `Cancel` is an object that is thrown when an operation is canceled. - * - * @class - * @param {string=} message The message. - */ -function Cancel(message) { - this.message = message; -} - -Cancel.prototype.toString = function toString() { - return 'Cancel' + (this.message ? ': ' + this.message : ''); -}; - -Cancel.prototype.__CANCEL__ = true; - -module.exports = Cancel; - - -/***/ }), - -/***/ 1587: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var Cancel = __nccwpck_require__(8875); - -/** - * A `CancelToken` is an object that can be used to request cancellation of an operation. - * - * @class - * @param {Function} executor The executor function. - */ -function CancelToken(executor) { - if (typeof executor !== 'function') { - throw new TypeError('executor must be a function.'); - } - - var resolvePromise; - this.promise = new Promise(function promiseExecutor(resolve) { - resolvePromise = resolve; - }); - - var token = this; - executor(function cancel(message) { - if (token.reason) { - // Cancellation has already been requested - return; - } - - token.reason = new Cancel(message); - resolvePromise(token.reason); - }); -} - -/** - * Throws a `Cancel` if cancellation has been requested. - */ -CancelToken.prototype.throwIfRequested = function throwIfRequested() { - if (this.reason) { - throw this.reason; - } -}; - -/** - * Returns an object that contains a new `CancelToken` and a function that, when called, - * cancels the `CancelToken`. - */ -CancelToken.source = function source() { - var cancel; - var token = new CancelToken(function executor(c) { - cancel = c; - }); - return { - token: token, - cancel: cancel - }; -}; - -module.exports = CancelToken; - - -/***/ }), - -/***/ 4057: -/***/ ((module) => { - -"use strict"; - - -module.exports = function isCancel(value) { - return !!(value && value.__CANCEL__); -}; - - -/***/ }), - -/***/ 8178: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); -var buildURL = __nccwpck_require__(646); -var InterceptorManager = __nccwpck_require__(3214); -var dispatchRequest = __nccwpck_require__(5062); -var mergeConfig = __nccwpck_require__(4831); -var validator = __nccwpck_require__(1632); - -var validators = validator.validators; -/** - * Create a new instance of Axios - * - * @param {Object} instanceConfig The default config for the instance - */ -function Axios(instanceConfig) { - this.defaults = instanceConfig; - this.interceptors = { - request: new InterceptorManager(), - response: new InterceptorManager() - }; -} - -/** - * Dispatch a request - * - * @param {Object} config The config specific for this request (merged with this.defaults) - */ -Axios.prototype.request = function request(config) { - /*eslint no-param-reassign:0*/ - // Allow for axios('example/url'[, config]) a la fetch API - if (typeof config === 'string') { - config = arguments[1] || {}; - config.url = arguments[0]; - } else { - config = config || {}; - } - - config = mergeConfig(this.defaults, config); - - // Set config.method - if (config.method) { - config.method = config.method.toLowerCase(); - } else if (this.defaults.method) { - config.method = this.defaults.method.toLowerCase(); - } else { - config.method = 'get'; - } - - var transitional = config.transitional; - - if (transitional !== undefined) { - validator.assertOptions(transitional, { - silentJSONParsing: validators.transitional(validators.boolean, '1.0.0'), - forcedJSONParsing: validators.transitional(validators.boolean, '1.0.0'), - clarifyTimeoutError: validators.transitional(validators.boolean, '1.0.0') - }, false); - } - - // filter out skipped interceptors - var requestInterceptorChain = []; - var synchronousRequestInterceptors = true; - this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { - if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { - return; - } - - synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; - - requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); - }); - - var responseInterceptorChain = []; - this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { - responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); - }); - - var promise; - - if (!synchronousRequestInterceptors) { - var chain = [dispatchRequest, undefined]; - - Array.prototype.unshift.apply(chain, requestInterceptorChain); - chain = chain.concat(responseInterceptorChain); - - promise = Promise.resolve(config); - while (chain.length) { - promise = promise.then(chain.shift(), chain.shift()); - } - - return promise; - } - - - var newConfig = config; - while (requestInterceptorChain.length) { - var onFulfilled = requestInterceptorChain.shift(); - var onRejected = requestInterceptorChain.shift(); - try { - newConfig = onFulfilled(newConfig); - } catch (error) { - onRejected(error); - break; - } - } - - try { - promise = dispatchRequest(newConfig); - } catch (error) { - return Promise.reject(error); - } - - while (responseInterceptorChain.length) { - promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift()); - } - - return promise; -}; - -Axios.prototype.getUri = function getUri(config) { - config = mergeConfig(this.defaults, config); - return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, ''); -}; - -// Provide aliases for supported request methods -utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function(url, config) { - return this.request(mergeConfig(config || {}, { - method: method, - url: url, - data: (config || {}).data - })); - }; -}); - -utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function(url, data, config) { - return this.request(mergeConfig(config || {}, { - method: method, - url: url, - data: data - })); - }; -}); - -module.exports = Axios; - - -/***/ }), - -/***/ 3214: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); - -function InterceptorManager() { - this.handlers = []; -} - -/** - * Add a new interceptor to the stack - * - * @param {Function} fulfilled The function to handle `then` for a `Promise` - * @param {Function} rejected The function to handle `reject` for a `Promise` - * - * @return {Number} An ID used to remove interceptor later - */ -InterceptorManager.prototype.use = function use(fulfilled, rejected, options) { - this.handlers.push({ - fulfilled: fulfilled, - rejected: rejected, - synchronous: options ? options.synchronous : false, - runWhen: options ? options.runWhen : null - }); - return this.handlers.length - 1; -}; - -/** - * Remove an interceptor from the stack - * - * @param {Number} id The ID that was returned by `use` - */ -InterceptorManager.prototype.eject = function eject(id) { - if (this.handlers[id]) { - this.handlers[id] = null; - } -}; - -/** - * Iterate over all the registered interceptors - * - * This method is particularly useful for skipping over any - * interceptors that may have become `null` calling `eject`. - * - * @param {Function} fn The function to call for each interceptor - */ -InterceptorManager.prototype.forEach = function forEach(fn) { - utils.forEach(this.handlers, function forEachHandler(h) { - if (h !== null) { - fn(h); - } - }); -}; - -module.exports = InterceptorManager; - - -/***/ }), - -/***/ 1934: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var isAbsoluteURL = __nccwpck_require__(1301); -var combineURLs = __nccwpck_require__(7189); - -/** - * Creates a new URL by combining the baseURL with the requestedURL, - * only when the requestedURL is not already an absolute URL. - * If the requestURL is absolute, this function returns the requestedURL untouched. - * - * @param {string} baseURL The base URL - * @param {string} requestedURL Absolute or relative URL to combine - * @returns {string} The combined full path - */ -module.exports = function buildFullPath(baseURL, requestedURL) { - if (baseURL && !isAbsoluteURL(requestedURL)) { - return combineURLs(baseURL, requestedURL); - } - return requestedURL; -}; - - -/***/ }), - -/***/ 5226: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var enhanceError = __nccwpck_require__(1516); - -/** - * Create an Error with the specified message, config, error code, request and response. - * - * @param {string} message The error message. - * @param {Object} config The config. - * @param {string} [code] The error code (for example, 'ECONNABORTED'). - * @param {Object} [request] The request. - * @param {Object} [response] The response. - * @returns {Error} The created error. - */ -module.exports = function createError(message, config, code, request, response) { - var error = new Error(message); - return enhanceError(error, config, code, request, response); -}; - - -/***/ }), - -/***/ 5062: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); -var transformData = __nccwpck_require__(9812); -var isCancel = __nccwpck_require__(4057); -var defaults = __nccwpck_require__(8190); - -/** - * Throws a `Cancel` if cancellation has been requested. - */ -function throwIfCancellationRequested(config) { - if (config.cancelToken) { - config.cancelToken.throwIfRequested(); - } -} - -/** - * Dispatch a request to the server using the configured adapter. - * - * @param {object} config The config that is to be used for the request - * @returns {Promise} The Promise to be fulfilled - */ -module.exports = function dispatchRequest(config) { - throwIfCancellationRequested(config); - - // Ensure headers exist - config.headers = config.headers || {}; - - // Transform request data - config.data = transformData.call( - config, - config.data, - config.headers, - config.transformRequest - ); - - // Flatten headers - config.headers = utils.merge( - config.headers.common || {}, - config.headers[config.method] || {}, - config.headers - ); - - utils.forEach( - ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], - function cleanHeaderConfig(method) { - delete config.headers[method]; - } - ); - - var adapter = config.adapter || defaults.adapter; - - return adapter(config).then(function onAdapterResolution(response) { - throwIfCancellationRequested(config); - - // Transform response data - response.data = transformData.call( - config, - response.data, - response.headers, - config.transformResponse - ); - - return response; - }, function onAdapterRejection(reason) { - if (!isCancel(reason)) { - throwIfCancellationRequested(config); - - // Transform response data - if (reason && reason.response) { - reason.response.data = transformData.call( - config, - reason.response.data, - reason.response.headers, - config.transformResponse - ); - } - } - - return Promise.reject(reason); - }); -}; - - -/***/ }), - -/***/ 1516: -/***/ ((module) => { - -"use strict"; - - -/** - * Update an Error with the specified config, error code, and response. - * - * @param {Error} error The error to update. - * @param {Object} config The config. - * @param {string} [code] The error code (for example, 'ECONNABORTED'). - * @param {Object} [request] The request. - * @param {Object} [response] The response. - * @returns {Error} The error. - */ -module.exports = function enhanceError(error, config, code, request, response) { - error.config = config; - if (code) { - error.code = code; - } - - error.request = request; - error.response = response; - error.isAxiosError = true; - - error.toJSON = function toJSON() { - return { - // Standard - message: this.message, - name: this.name, - // Microsoft - description: this.description, - number: this.number, - // Mozilla - fileName: this.fileName, - lineNumber: this.lineNumber, - columnNumber: this.columnNumber, - stack: this.stack, - // Axios - config: this.config, - code: this.code - }; - }; - return error; -}; - - -/***/ }), - -/***/ 4831: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); - -/** - * Config-specific merge-function which creates a new config-object - * by merging two configuration objects together. - * - * @param {Object} config1 - * @param {Object} config2 - * @returns {Object} New object resulting from merging config2 to config1 - */ -module.exports = function mergeConfig(config1, config2) { - // eslint-disable-next-line no-param-reassign - config2 = config2 || {}; - var config = {}; - - var valueFromConfig2Keys = ['url', 'method', 'data']; - var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params']; - var defaultToConfig2Keys = [ - 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer', - 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', - 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress', - 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent', - 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding' - ]; - var directMergeKeys = ['validateStatus']; - - function getMergedValue(target, source) { - if (utils.isPlainObject(target) && utils.isPlainObject(source)) { - return utils.merge(target, source); - } else if (utils.isPlainObject(source)) { - return utils.merge({}, source); - } else if (utils.isArray(source)) { - return source.slice(); - } - return source; - } - - function mergeDeepProperties(prop) { - if (!utils.isUndefined(config2[prop])) { - config[prop] = getMergedValue(config1[prop], config2[prop]); - } else if (!utils.isUndefined(config1[prop])) { - config[prop] = getMergedValue(undefined, config1[prop]); - } - } - - utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) { - if (!utils.isUndefined(config2[prop])) { - config[prop] = getMergedValue(undefined, config2[prop]); - } - }); - - utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties); - - utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) { - if (!utils.isUndefined(config2[prop])) { - config[prop] = getMergedValue(undefined, config2[prop]); - } else if (!utils.isUndefined(config1[prop])) { - config[prop] = getMergedValue(undefined, config1[prop]); - } - }); - - utils.forEach(directMergeKeys, function merge(prop) { - if (prop in config2) { - config[prop] = getMergedValue(config1[prop], config2[prop]); - } else if (prop in config1) { - config[prop] = getMergedValue(undefined, config1[prop]); - } - }); - - var axiosKeys = valueFromConfig2Keys - .concat(mergeDeepPropertiesKeys) - .concat(defaultToConfig2Keys) - .concat(directMergeKeys); - - var otherKeys = Object - .keys(config1) - .concat(Object.keys(config2)) - .filter(function filterAxiosKeys(key) { - return axiosKeys.indexOf(key) === -1; - }); - - utils.forEach(otherKeys, mergeDeepProperties); - - return config; -}; - - -/***/ }), - -/***/ 3211: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var createError = __nccwpck_require__(5226); - -/** - * Resolve or reject a Promise based on response status. - * - * @param {Function} resolve A function that resolves the promise. - * @param {Function} reject A function that rejects the promise. - * @param {object} response The response. - */ -module.exports = function settle(resolve, reject, response) { - var validateStatus = response.config.validateStatus; - if (!response.status || !validateStatus || validateStatus(response.status)) { - resolve(response); - } else { - reject(createError( - 'Request failed with status code ' + response.status, - response.config, - null, - response.request, - response - )); - } -}; - - -/***/ }), - -/***/ 9812: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); -var defaults = __nccwpck_require__(8190); - -/** - * Transform the data for a request or a response - * - * @param {Object|String} data The data to be transformed - * @param {Array} headers The headers for the request or response - * @param {Array|Function} fns A single function or Array of functions - * @returns {*} The resulting transformed data - */ -module.exports = function transformData(data, headers, fns) { - var context = this || defaults; - /*eslint no-param-reassign:0*/ - utils.forEach(fns, function transform(fn) { - data = fn.call(context, data, headers); - }); - - return data; -}; - - -/***/ }), - -/***/ 8190: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); -var normalizeHeaderName = __nccwpck_require__(6240); -var enhanceError = __nccwpck_require__(1516); - -var DEFAULT_CONTENT_TYPE = { - 'Content-Type': 'application/x-www-form-urlencoded' -}; - -function setContentTypeIfUnset(headers, value) { - if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { - headers['Content-Type'] = value; - } -} - -function getDefaultAdapter() { - var adapter; - if (typeof XMLHttpRequest !== 'undefined') { - // For browsers use XHR adapter - adapter = __nccwpck_require__(3454); - } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { - // For node use HTTP adapter - adapter = __nccwpck_require__(8104); - } - return adapter; -} - -function stringifySafely(rawValue, parser, encoder) { - if (utils.isString(rawValue)) { - try { - (parser || JSON.parse)(rawValue); - return utils.trim(rawValue); - } catch (e) { - if (e.name !== 'SyntaxError') { - throw e; - } - } - } - - return (encoder || JSON.stringify)(rawValue); -} - -var defaults = { - - transitional: { - silentJSONParsing: true, - forcedJSONParsing: true, - clarifyTimeoutError: false - }, - - adapter: getDefaultAdapter(), - - transformRequest: [function transformRequest(data, headers) { - normalizeHeaderName(headers, 'Accept'); - normalizeHeaderName(headers, 'Content-Type'); - - if (utils.isFormData(data) || - utils.isArrayBuffer(data) || - utils.isBuffer(data) || - utils.isStream(data) || - utils.isFile(data) || - utils.isBlob(data) - ) { - return data; - } - if (utils.isArrayBufferView(data)) { - return data.buffer; - } - if (utils.isURLSearchParams(data)) { - setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); - return data.toString(); - } - if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) { - setContentTypeIfUnset(headers, 'application/json'); - return stringifySafely(data); - } - return data; - }], - - transformResponse: [function transformResponse(data) { - var transitional = this.transitional; - var silentJSONParsing = transitional && transitional.silentJSONParsing; - var forcedJSONParsing = transitional && transitional.forcedJSONParsing; - var strictJSONParsing = !silentJSONParsing && this.responseType === 'json'; - - if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) { - try { - return JSON.parse(data); - } catch (e) { - if (strictJSONParsing) { - if (e.name === 'SyntaxError') { - throw enhanceError(e, this, 'E_JSON_PARSE'); - } - throw e; - } - } - } - - return data; - }], - - /** - * A timeout in milliseconds to abort a request. If set to 0 (default) a - * timeout is not created. - */ - timeout: 0, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN', - - maxContentLength: -1, - maxBodyLength: -1, - - validateStatus: function validateStatus(status) { - return status >= 200 && status < 300; - } -}; - -defaults.headers = { - common: { - 'Accept': 'application/json, text/plain, */*' - } -}; - -utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { - defaults.headers[method] = {}; -}); - -utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { - defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); -}); - -module.exports = defaults; - - -/***/ }), - -/***/ 7065: -/***/ ((module) => { - -"use strict"; - - -module.exports = function bind(fn, thisArg) { - return function wrap() { - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - return fn.apply(thisArg, args); - }; -}; - - -/***/ }), - -/***/ 646: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); - -function encode(val) { - return encodeURIComponent(val). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, '+'). - replace(/%5B/gi, '['). - replace(/%5D/gi, ']'); -} - -/** - * Build a URL by appending params to the end - * - * @param {string} url The base of the url (e.g., http://www.google.com) - * @param {object} [params] The params to be appended - * @returns {string} The formatted url - */ -module.exports = function buildURL(url, params, paramsSerializer) { - /*eslint no-param-reassign:0*/ - if (!params) { - return url; - } - - var serializedParams; - if (paramsSerializer) { - serializedParams = paramsSerializer(params); - } else if (utils.isURLSearchParams(params)) { - serializedParams = params.toString(); - } else { - var parts = []; - - utils.forEach(params, function serialize(val, key) { - if (val === null || typeof val === 'undefined') { - return; - } - - if (utils.isArray(val)) { - key = key + '[]'; - } else { - val = [val]; - } - - utils.forEach(val, function parseValue(v) { - if (utils.isDate(v)) { - v = v.toISOString(); - } else if (utils.isObject(v)) { - v = JSON.stringify(v); - } - parts.push(encode(key) + '=' + encode(v)); - }); - }); - - serializedParams = parts.join('&'); - } - - if (serializedParams) { - var hashmarkIndex = url.indexOf('#'); - if (hashmarkIndex !== -1) { - url = url.slice(0, hashmarkIndex); - } - - url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; - } - - return url; -}; - - -/***/ }), - -/***/ 7189: -/***/ ((module) => { - -"use strict"; - - -/** - * Creates a new URL by combining the specified URLs - * - * @param {string} baseURL The base URL - * @param {string} relativeURL The relative URL - * @returns {string} The combined URL - */ -module.exports = function combineURLs(baseURL, relativeURL) { - return relativeURL - ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') - : baseURL; -}; - - -/***/ }), - -/***/ 1545: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); - -module.exports = ( - utils.isStandardBrowserEnv() ? - - // Standard browser envs support document.cookie - (function standardBrowserEnv() { - return { - write: function write(name, value, expires, path, domain, secure) { - var cookie = []; - cookie.push(name + '=' + encodeURIComponent(value)); - - if (utils.isNumber(expires)) { - cookie.push('expires=' + new Date(expires).toGMTString()); - } - - if (utils.isString(path)) { - cookie.push('path=' + path); - } - - if (utils.isString(domain)) { - cookie.push('domain=' + domain); - } - - if (secure === true) { - cookie.push('secure'); - } - - document.cookie = cookie.join('; '); - }, - - read: function read(name) { - var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); - return (match ? decodeURIComponent(match[3]) : null); - }, - - remove: function remove(name) { - this.write(name, '', Date.now() - 86400000); - } - }; - })() : - - // Non standard browser env (web workers, react-native) lack needed support. - (function nonStandardBrowserEnv() { - return { - write: function write() {}, - read: function read() { return null; }, - remove: function remove() {} - }; - })() -); - - -/***/ }), - -/***/ 1301: -/***/ ((module) => { - -"use strict"; - - -/** - * Determines whether the specified URL is absolute - * - * @param {string} url The URL to test - * @returns {boolean} True if the specified URL is absolute, otherwise false - */ -module.exports = function isAbsoluteURL(url) { - // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). - // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed - // by any combination of letters, digits, plus, period, or hyphen. - return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); -}; - - -/***/ }), - -/***/ 650: -/***/ ((module) => { - -"use strict"; - - -/** - * Determines whether the payload is an error thrown by Axios - * - * @param {*} payload The value to test - * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false - */ -module.exports = function isAxiosError(payload) { - return (typeof payload === 'object') && (payload.isAxiosError === true); -}; - - -/***/ }), - -/***/ 3608: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); - -module.exports = ( - utils.isStandardBrowserEnv() ? - - // Standard browser envs have full support of the APIs needed to test - // whether the request URL is of the same origin as current location. - (function standardBrowserEnv() { - var msie = /(msie|trident)/i.test(navigator.userAgent); - var urlParsingNode = document.createElement('a'); - var originURL; - - /** - * Parse a URL to discover it's components - * - * @param {String} url The URL to be parsed - * @returns {Object} - */ - function resolveURL(url) { - var href = url; - - if (msie) { - // IE needs attribute set twice to normalize properties - urlParsingNode.setAttribute('href', href); - href = urlParsingNode.href; - } - - urlParsingNode.setAttribute('href', href); - - // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: (urlParsingNode.pathname.charAt(0) === '/') ? - urlParsingNode.pathname : - '/' + urlParsingNode.pathname - }; - } - - originURL = resolveURL(window.location.href); - - /** - * Determine if a URL shares the same origin as the current location - * - * @param {String} requestURL The URL to test - * @returns {boolean} True if URL shares the same origin, otherwise false - */ - return function isURLSameOrigin(requestURL) { - var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; - return (parsed.protocol === originURL.protocol && - parsed.host === originURL.host); - }; - })() : - - // Non standard browser envs (web workers, react-native) lack needed support. - (function nonStandardBrowserEnv() { - return function isURLSameOrigin() { - return true; - }; - })() -); - - -/***/ }), - -/***/ 6240: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); - -module.exports = function normalizeHeaderName(headers, normalizedName) { - utils.forEach(headers, function processHeader(value, name) { - if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { - headers[normalizedName] = value; - delete headers[name]; - } - }); -}; - - -/***/ }), - -/***/ 6455: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var utils = __nccwpck_require__(328); - -// Headers whose duplicates are ignored by node -// c.f. https://nodejs.org/api/http.html#http_message_headers -var ignoreDuplicateOf = [ - 'age', 'authorization', 'content-length', 'content-type', 'etag', - 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', - 'last-modified', 'location', 'max-forwards', 'proxy-authorization', - 'referer', 'retry-after', 'user-agent' -]; - -/** - * Parse headers into an object - * - * ``` - * Date: Wed, 27 Aug 2014 08:58:49 GMT - * Content-Type: application/json - * Connection: keep-alive - * Transfer-Encoding: chunked - * ``` - * - * @param {String} headers Headers needing to be parsed - * @returns {Object} Headers parsed into an object - */ -module.exports = function parseHeaders(headers) { - var parsed = {}; - var key; - var val; - var i; - - if (!headers) { return parsed; } - - utils.forEach(headers.split('\n'), function parser(line) { - i = line.indexOf(':'); - key = utils.trim(line.substr(0, i)).toLowerCase(); - val = utils.trim(line.substr(i + 1)); - - if (key) { - if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { - return; - } - if (key === 'set-cookie') { - parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); - } else { - parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; - } - } - }); - - return parsed; -}; - - -/***/ }), - -/***/ 4850: -/***/ ((module) => { - -"use strict"; - - -/** - * Syntactic sugar for invoking a function and expanding an array for arguments. - * - * Common use case would be to use `Function.prototype.apply`. - * - * ```js - * function f(x, y, z) {} - * var args = [1, 2, 3]; - * f.apply(null, args); - * ``` - * - * With `spread` this example can be re-written. - * - * ```js - * spread(function(x, y, z) {})([1, 2, 3]); - * ``` - * - * @param {Function} callback - * @returns {Function} - */ -module.exports = function spread(callback) { - return function wrap(arr) { - return callback.apply(null, arr); - }; -}; - - -/***/ }), - -/***/ 1632: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var pkg = __nccwpck_require__(8593); - -var validators = {}; - -// eslint-disable-next-line func-names -['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) { - validators[type] = function validator(thing) { - return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; - }; -}); - -var deprecatedWarnings = {}; -var currentVerArr = pkg.version.split('.'); - -/** - * Compare package versions - * @param {string} version - * @param {string?} thanVersion - * @returns {boolean} - */ -function isOlderVersion(version, thanVersion) { - var pkgVersionArr = thanVersion ? thanVersion.split('.') : currentVerArr; - var destVer = version.split('.'); - for (var i = 0; i < 3; i++) { - if (pkgVersionArr[i] > destVer[i]) { - return true; - } else if (pkgVersionArr[i] < destVer[i]) { - return false; - } - } - return false; -} - -/** - * Transitional option validator - * @param {function|boolean?} validator - * @param {string?} version - * @param {string} message - * @returns {function} - */ -validators.transitional = function transitional(validator, version, message) { - var isDeprecated = version && isOlderVersion(version); - - function formatMessage(opt, desc) { - return '[Axios v' + pkg.version + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); - } - - // eslint-disable-next-line func-names - return function(value, opt, opts) { - if (validator === false) { - throw new Error(formatMessage(opt, ' has been removed in ' + version)); - } - - if (isDeprecated && !deprecatedWarnings[opt]) { - deprecatedWarnings[opt] = true; - // eslint-disable-next-line no-console - console.warn( - formatMessage( - opt, - ' has been deprecated since v' + version + ' and will be removed in the near future' - ) - ); - } - - return validator ? validator(value, opt, opts) : true; - }; -}; - -/** - * Assert object's properties type - * @param {object} options - * @param {object} schema - * @param {boolean?} allowUnknown - */ - -function assertOptions(options, schema, allowUnknown) { - if (typeof options !== 'object') { - throw new TypeError('options must be an object'); - } - var keys = Object.keys(options); - var i = keys.length; - while (i-- > 0) { - var opt = keys[i]; - var validator = schema[opt]; - if (validator) { - var value = options[opt]; - var result = value === undefined || validator(value, opt, options); - if (result !== true) { - throw new TypeError('option ' + opt + ' must be ' + result); - } - continue; - } - if (allowUnknown !== true) { - throw Error('Unknown option ' + opt); - } - } -} - -module.exports = { - isOlderVersion: isOlderVersion, - assertOptions: assertOptions, - validators: validators -}; - - -/***/ }), - -/***/ 328: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var bind = __nccwpck_require__(7065); - -// utils is a library of generic helper functions non-specific to axios - -var toString = Object.prototype.toString; - -/** - * Determine if a value is an Array - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an Array, otherwise false - */ -function isArray(val) { - return toString.call(val) === '[object Array]'; -} - -/** - * Determine if a value is undefined - * - * @param {Object} val The value to test - * @returns {boolean} True if the value is undefined, otherwise false - */ -function isUndefined(val) { - return typeof val === 'undefined'; -} - -/** - * Determine if a value is a Buffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Buffer, otherwise false - */ -function isBuffer(val) { - return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) - && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); -} - -/** - * Determine if a value is an ArrayBuffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an ArrayBuffer, otherwise false - */ -function isArrayBuffer(val) { - return toString.call(val) === '[object ArrayBuffer]'; -} - -/** - * Determine if a value is a FormData - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an FormData, otherwise false - */ -function isFormData(val) { - return (typeof FormData !== 'undefined') && (val instanceof FormData); -} - -/** - * Determine if a value is a view on an ArrayBuffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false - */ -function isArrayBufferView(val) { - var result; - if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { - result = ArrayBuffer.isView(val); - } else { - result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer); - } - return result; -} - -/** - * Determine if a value is a String - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a String, otherwise false - */ -function isString(val) { - return typeof val === 'string'; -} - -/** - * Determine if a value is a Number - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Number, otherwise false - */ -function isNumber(val) { - return typeof val === 'number'; -} - -/** - * Determine if a value is an Object - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an Object, otherwise false - */ -function isObject(val) { - return val !== null && typeof val === 'object'; -} - -/** - * Determine if a value is a plain Object - * - * @param {Object} val The value to test - * @return {boolean} True if value is a plain Object, otherwise false - */ -function isPlainObject(val) { - if (toString.call(val) !== '[object Object]') { - return false; - } - - var prototype = Object.getPrototypeOf(val); - return prototype === null || prototype === Object.prototype; -} - -/** - * Determine if a value is a Date - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Date, otherwise false - */ -function isDate(val) { - return toString.call(val) === '[object Date]'; -} - -/** - * Determine if a value is a File - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a File, otherwise false - */ -function isFile(val) { - return toString.call(val) === '[object File]'; -} - -/** - * Determine if a value is a Blob - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Blob, otherwise false - */ -function isBlob(val) { - return toString.call(val) === '[object Blob]'; -} - -/** - * Determine if a value is a Function - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Function, otherwise false - */ -function isFunction(val) { - return toString.call(val) === '[object Function]'; -} - -/** - * Determine if a value is a Stream - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Stream, otherwise false - */ -function isStream(val) { - return isObject(val) && isFunction(val.pipe); -} - -/** - * Determine if a value is a URLSearchParams object - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a URLSearchParams object, otherwise false - */ -function isURLSearchParams(val) { - return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams; -} - -/** - * Trim excess whitespace off the beginning and end of a string - * - * @param {String} str The String to trim - * @returns {String} The String freed of excess whitespace - */ -function trim(str) { - return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ''); -} - -/** - * Determine if we're running in a standard browser environment - * - * This allows axios to run in a web worker, and react-native. - * Both environments support XMLHttpRequest, but not fully standard globals. - * - * web workers: - * typeof window -> undefined - * typeof document -> undefined - * - * react-native: - * navigator.product -> 'ReactNative' - * nativescript - * navigator.product -> 'NativeScript' or 'NS' - */ -function isStandardBrowserEnv() { - if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || - navigator.product === 'NativeScript' || - navigator.product === 'NS')) { - return false; - } - return ( - typeof window !== 'undefined' && - typeof document !== 'undefined' - ); -} - -/** - * Iterate over an Array or an Object invoking a function for each item. - * - * If `obj` is an Array callback will be called passing - * the value, index, and complete array for each item. - * - * If 'obj' is an Object callback will be called passing - * the value, key, and complete object for each property. - * - * @param {Object|Array} obj The object to iterate - * @param {Function} fn The callback to invoke for each item - */ -function forEach(obj, fn) { - // Don't bother if no value provided - if (obj === null || typeof obj === 'undefined') { - return; - } - - // Force an array if not already something iterable - if (typeof obj !== 'object') { - /*eslint no-param-reassign:0*/ - obj = [obj]; - } - - if (isArray(obj)) { - // Iterate over array values - for (var i = 0, l = obj.length; i < l; i++) { - fn.call(null, obj[i], i, obj); - } - } else { - // Iterate over object keys - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - fn.call(null, obj[key], key, obj); - } - } - } -} - -/** - * Accepts varargs expecting each argument to be an object, then - * immutably merges the properties of each object and returns result. - * - * When multiple objects contain the same key the later object in - * the arguments list will take precedence. - * - * Example: - * - * ```js - * var result = merge({foo: 123}, {foo: 456}); - * console.log(result.foo); // outputs 456 - * ``` - * - * @param {Object} obj1 Object to merge - * @returns {Object} Result of all merge properties - */ -function merge(/* obj1, obj2, obj3, ... */) { - var result = {}; - function assignValue(val, key) { - if (isPlainObject(result[key]) && isPlainObject(val)) { - result[key] = merge(result[key], val); - } else if (isPlainObject(val)) { - result[key] = merge({}, val); - } else if (isArray(val)) { - result[key] = val.slice(); - } else { - result[key] = val; - } - } - - for (var i = 0, l = arguments.length; i < l; i++) { - forEach(arguments[i], assignValue); - } - return result; -} - -/** - * Extends object a by mutably adding to it the properties of object b. - * - * @param {Object} a The object to be extended - * @param {Object} b The object to copy properties from - * @param {Object} thisArg The object to bind function to - * @return {Object} The resulting value of object a - */ -function extend(a, b, thisArg) { - forEach(b, function assignValue(val, key) { - if (thisArg && typeof val === 'function') { - a[key] = bind(val, thisArg); - } else { - a[key] = val; - } - }); - return a; -} - -/** - * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) - * - * @param {string} content with BOM - * @return {string} content value without BOM - */ -function stripBOM(content) { - if (content.charCodeAt(0) === 0xFEFF) { - content = content.slice(1); - } - return content; -} - -module.exports = { - isArray: isArray, - isArrayBuffer: isArrayBuffer, - isBuffer: isBuffer, - isFormData: isFormData, - isArrayBufferView: isArrayBufferView, - isString: isString, - isNumber: isNumber, - isObject: isObject, - isPlainObject: isPlainObject, - isUndefined: isUndefined, - isDate: isDate, - isFile: isFile, - isBlob: isBlob, - isFunction: isFunction, - isStream: isStream, - isURLSearchParams: isURLSearchParams, - isStandardBrowserEnv: isStandardBrowserEnv, - forEach: forEach, - merge: merge, - extend: extend, - trim: trim, - stripBOM: stripBOM -}; - - -/***/ }), - -/***/ 4473: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports._exposeCertSettings = exports._exposeProxySettings = exports._normalizeSeparators = exports._isRooted = exports._getDirectoryName = exports._ensureRooted = exports._isUncPath = exports._loadData = exports._ensurePatternRooted = exports._getFindInfoFromPattern = exports._cloneMatchOptions = exports._legacyFindFiles_convertPatternToRegExp = exports._which = exports._checkPath = exports._exist = exports._debug = exports._error = exports._warning = exports._command = exports._getVariableKey = exports._getVariable = exports._loc = exports._setResourcePath = exports._setErrStream = exports._setStdStream = exports._writeLine = exports._endsWith = exports._startsWith = exports._vault = exports._knownVariableMap = void 0; -var fs = __nccwpck_require__(7147); -var path = __nccwpck_require__(1017); -var os = __nccwpck_require__(2037); -var minimatch = __nccwpck_require__(3973); -var util = __nccwpck_require__(3837); -var tcm = __nccwpck_require__(1964); -var vm = __nccwpck_require__(7203); -var semver = __nccwpck_require__(9184); -var crypto = __nccwpck_require__(6113); -/** - * Hash table of known variable info. The formatted env var name is the lookup key. - * - * The purpose of this hash table is to keep track of known variables. The hash table - * needs to be maintained for multiple reasons: - * 1) to distinguish between env vars and job vars - * 2) to distinguish between secret vars and public - * 3) to know the real variable name and not just the formatted env var name. - */ -exports._knownVariableMap = {}; -//----------------------------------------------------- -// Validation Checks -//----------------------------------------------------- -// async await needs generators in node 4.x+ -if (semver.lt(process.versions.node, '4.2.0')) { - _warning('Tasks require a new agent. Upgrade your agent or node to 4.2.0 or later'); -} -//----------------------------------------------------- -// String convenience -//----------------------------------------------------- -function _startsWith(str, start) { - return str.slice(0, start.length) == start; -} -exports._startsWith = _startsWith; -function _endsWith(str, end) { - return str.slice(-end.length) == end; -} -exports._endsWith = _endsWith; -//----------------------------------------------------- -// General Helpers -//----------------------------------------------------- -var _outStream = process.stdout; -var _errStream = process.stderr; -function _writeLine(str) { - _outStream.write(str + os.EOL); -} -exports._writeLine = _writeLine; -function _setStdStream(stdStream) { - _outStream = stdStream; -} -exports._setStdStream = _setStdStream; -function _setErrStream(errStream) { - _errStream = errStream; -} -exports._setErrStream = _setErrStream; -//----------------------------------------------------- -// Loc Helpers -//----------------------------------------------------- -var _locStringCache = {}; -var _resourceFiles = {}; -var _libResourceFileLoaded = false; -var _resourceCulture = 'en-US'; -function _loadResJson(resjsonFile) { - var resJson; - if (_exist(resjsonFile)) { - var resjsonContent = fs.readFileSync(resjsonFile, 'utf8').toString(); - // remove BOM - if (resjsonContent.indexOf('\uFEFF') == 0) { - resjsonContent = resjsonContent.slice(1); - } - try { - resJson = JSON.parse(resjsonContent); - } - catch (err) { - _debug('unable to parse resjson with err: ' + err.message); - } - } - else { - _debug('.resjson file not found: ' + resjsonFile); - } - return resJson; -} -function _loadLocStrings(resourceFile, culture) { - var locStrings = {}; - if (_exist(resourceFile)) { - var resourceJson = require(resourceFile); - if (resourceJson && resourceJson.hasOwnProperty('messages')) { - var locResourceJson; - // load up resource resjson for different culture - var localizedResourceFile = path.join(path.dirname(resourceFile), 'Strings', 'resources.resjson'); - var upperCulture = culture.toUpperCase(); - var cultures = []; - try { - cultures = fs.readdirSync(localizedResourceFile); - } - catch (ex) { } - for (var i = 0; i < cultures.length; i++) { - if (cultures[i].toUpperCase() == upperCulture) { - localizedResourceFile = path.join(localizedResourceFile, cultures[i], 'resources.resjson'); - if (_exist(localizedResourceFile)) { - locResourceJson = _loadResJson(localizedResourceFile); - } - break; - } - } - for (var key in resourceJson.messages) { - if (locResourceJson && locResourceJson.hasOwnProperty('loc.messages.' + key)) { - locStrings[key] = locResourceJson['loc.messages.' + key]; - } - else { - locStrings[key] = resourceJson.messages[key]; - } - } - } - } - else { - _warning('LIB_ResourceFile does not exist'); - } - return locStrings; -} -/** - * Sets the location of the resources json. This is typically the task.json file. - * Call once at the beginning of the script before any calls to loc. - * @param path Full path to the json. - * @param ignoreWarnings Won't throw warnings if path already set. - * @returns void - */ -function _setResourcePath(path, ignoreWarnings) { - if (ignoreWarnings === void 0) { ignoreWarnings = false; } - if (process.env['TASKLIB_INPROC_UNITS']) { - _resourceFiles = {}; - _libResourceFileLoaded = false; - _locStringCache = {}; - _resourceCulture = 'en-US'; - } - if (!_resourceFiles[path]) { - _checkPath(path, 'resource file path'); - _resourceFiles[path] = path; - _debug('adding resource file: ' + path); - _resourceCulture = _getVariable('system.culture') || _resourceCulture; - var locStrs = _loadLocStrings(path, _resourceCulture); - for (var key in locStrs) { - //cache loc string - _locStringCache[key] = locStrs[key]; - } - } - else { - if (ignoreWarnings) { - _debug(_loc('LIB_ResourceFileAlreadySet', path)); - } - else { - _warning(_loc('LIB_ResourceFileAlreadySet', path)); - } - } -} -exports._setResourcePath = _setResourcePath; -/** - * Gets the localized string from the json resource file. Optionally formats with additional params. - * - * @param key key of the resources string in the resource file - * @param param additional params for formatting the string - * @returns string - */ -function _loc(key) { - var param = []; - for (var _i = 1; _i < arguments.length; _i++) { - param[_i - 1] = arguments[_i]; - } - if (!_libResourceFileLoaded) { - // merge loc strings from azure-pipelines-task-lib. - var libResourceFile = __nccwpck_require__.ab + "lib2.json"; - var libLocStrs = _loadLocStrings(__nccwpck_require__.ab + "lib2.json", _resourceCulture); - for (var libKey in libLocStrs) { - //cache azure-pipelines-task-lib loc string - _locStringCache[libKey] = libLocStrs[libKey]; - } - _libResourceFileLoaded = true; - } - var locString; - ; - if (_locStringCache.hasOwnProperty(key)) { - locString = _locStringCache[key]; - } - else { - if (Object.keys(_resourceFiles).length <= 0) { - _warning("Resource file haven't been set, can't find loc string for key: " + key); - } - else { - _warning("Can't find loc string for key: " + key); - } - locString = key; - } - if (param.length > 0) { - return util.format.apply(this, [locString].concat(param)); - } - else { - return locString; - } -} -exports._loc = _loc; -//----------------------------------------------------- -// Input Helpers -//----------------------------------------------------- -/** - * Gets a variable value that is defined on the build/release definition or set at runtime. - * - * @param name name of the variable to get - * @returns string - */ -function _getVariable(name) { - var varval; - // get the metadata - var info; - var key = _getVariableKey(name); - if (exports._knownVariableMap.hasOwnProperty(key)) { - info = exports._knownVariableMap[key]; - } - if (info && info.secret) { - // get the secret value - varval = exports._vault.retrieveSecret('SECRET_' + key); - } - else { - // get the public value - varval = process.env[key]; - // fallback for pre 2.104.1 agent - if (!varval && name.toUpperCase() == 'AGENT.JOBSTATUS') { - varval = process.env['agent.jobstatus']; - } - } - _debug(name + '=' + varval); - return varval; -} -exports._getVariable = _getVariable; -function _getVariableKey(name) { - if (!name) { - throw new Error(_loc('LIB_ParameterIsRequired', 'name')); - } - return name.replace(/\./g, '_').replace(/ /g, '_').toUpperCase(); -} -exports._getVariableKey = _getVariableKey; -//----------------------------------------------------- -// Cmd Helpers -//----------------------------------------------------- -function _command(command, properties, message) { - var taskCmd = new tcm.TaskCommand(command, properties, message); - _writeLine(taskCmd.toString()); -} -exports._command = _command; -function _warning(message) { - _command('task.issue', { 'type': 'warning' }, message); -} -exports._warning = _warning; -function _error(message) { - _command('task.issue', { 'type': 'error' }, message); -} -exports._error = _error; -function _debug(message) { - _command('task.debug', null, message); -} -exports._debug = _debug; -// //----------------------------------------------------- -// // Disk Functions -// //----------------------------------------------------- -/** - * Returns whether a path exists. - * - * @param path path to check - * @returns boolean - */ -function _exist(path) { - var exist = false; - try { - exist = !!(path && fs.statSync(path) != null); - } - catch (err) { - if (err && err.code === 'ENOENT') { - exist = false; - } - else { - throw err; - } - } - return exist; -} -exports._exist = _exist; -/** - * Checks whether a path exists. - * If the path does not exist, it will throw. - * - * @param p path to check - * @param name name only used in error message to identify the path - * @returns void - */ -function _checkPath(p, name) { - _debug('check path : ' + p); - if (!_exist(p)) { - throw new Error(_loc('LIB_PathNotFound', name, p)); - } -} -exports._checkPath = _checkPath; -/** - * Returns path of a tool had the tool actually been invoked. Resolves via paths. - * If you check and the tool does not exist, it will throw. - * - * @param tool name of the tool - * @param check whether to check if tool exists - * @returns string - */ -function _which(tool, check) { - if (!tool) { - throw new Error('parameter \'tool\' is required'); - } - // recursive when check=true - if (check) { - var result = _which(tool, false); - if (result) { - return result; - } - else { - if (process.platform == 'win32') { - throw new Error(_loc('LIB_WhichNotFound_Win', tool)); - } - else { - throw new Error(_loc('LIB_WhichNotFound_Linux', tool)); - } - } - } - _debug("which '" + tool + "'"); - try { - // build the list of extensions to try - var extensions = []; - if (process.platform == 'win32' && process.env['PATHEXT']) { - for (var _i = 0, _a = process.env['PATHEXT'].split(path.delimiter); _i < _a.length; _i++) { - var extension = _a[_i]; - if (extension) { - extensions.push(extension); - } - } - } - // if it's rooted, return it if exists. otherwise return empty. - if (_isRooted(tool)) { - var filePath = _tryGetExecutablePath(tool, extensions); - if (filePath) { - _debug("found: '" + filePath + "'"); - return filePath; - } - _debug('not found'); - return ''; - } - // if any path separators, return empty - if (tool.indexOf('/') >= 0 || (process.platform == 'win32' && tool.indexOf('\\') >= 0)) { - _debug('not found'); - return ''; - } - // build the list of directories - // - // Note, technically "where" checks the current directory on Windows. From a task lib perspective, - // it feels like we should not do this. Checking the current directory seems like more of a use - // case of a shell, and the which() function exposed by the task lib should strive for consistency - // across platforms. - var directories = []; - if (process.env['PATH']) { - for (var _b = 0, _c = process.env['PATH'].split(path.delimiter); _b < _c.length; _b++) { - var p = _c[_b]; - if (p) { - directories.push(p); - } - } - } - // return the first match - for (var _d = 0, directories_1 = directories; _d < directories_1.length; _d++) { - var directory = directories_1[_d]; - var filePath = _tryGetExecutablePath(directory + path.sep + tool, extensions); - if (filePath) { - _debug("found: '" + filePath + "'"); - return filePath; - } - } - _debug('not found'); - return ''; - } - catch (err) { - throw new Error(_loc('LIB_OperationFailed', 'which', err.message)); - } -} -exports._which = _which; -/** - * Best effort attempt to determine whether a file exists and is executable. - * @param filePath file path to check - * @param extensions additional file extensions to try - * @return if file exists and is executable, returns the file path. otherwise empty string. - */ -function _tryGetExecutablePath(filePath, extensions) { - try { - // test file exists - var stats = fs.statSync(filePath); - if (stats.isFile()) { - if (process.platform == 'win32') { - // on Windows, test for valid extension - var isExecutable = false; - var fileName = path.basename(filePath); - var dotIndex = fileName.lastIndexOf('.'); - if (dotIndex >= 0) { - var upperExt_1 = fileName.substr(dotIndex).toUpperCase(); - if (extensions.some(function (validExt) { return validExt.toUpperCase() == upperExt_1; })) { - return filePath; - } - } - } - else { - if (isUnixExecutable(stats)) { - return filePath; - } - } - } - } - catch (err) { - if (err.code != 'ENOENT') { - _debug("Unexpected error attempting to determine if executable file exists '" + filePath + "': " + err); - } - } - // try each extension - var originalFilePath = filePath; - for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) { - var extension = extensions_1[_i]; - var found = false; - var filePath_1 = originalFilePath + extension; - try { - var stats = fs.statSync(filePath_1); - if (stats.isFile()) { - if (process.platform == 'win32') { - // preserve the case of the actual file (since an extension was appended) - try { - var directory = path.dirname(filePath_1); - var upperName = path.basename(filePath_1).toUpperCase(); - for (var _a = 0, _b = fs.readdirSync(directory); _a < _b.length; _a++) { - var actualName = _b[_a]; - if (upperName == actualName.toUpperCase()) { - filePath_1 = path.join(directory, actualName); - break; - } - } - } - catch (err) { - _debug("Unexpected error attempting to determine the actual case of the file '" + filePath_1 + "': " + err); - } - return filePath_1; - } - else { - if (isUnixExecutable(stats)) { - return filePath_1; - } - } - } - } - catch (err) { - if (err.code != 'ENOENT') { - _debug("Unexpected error attempting to determine if executable file exists '" + filePath_1 + "': " + err); - } - } - } - return ''; -} -// on Mac/Linux, test the execute bit -// R W X R W X R W X -// 256 128 64 32 16 8 4 2 1 -function isUnixExecutable(stats) { - return (stats.mode & 1) > 0 || ((stats.mode & 8) > 0 && stats.gid === process.getgid()) || ((stats.mode & 64) > 0 && stats.uid === process.getuid()); -} -function _legacyFindFiles_convertPatternToRegExp(pattern) { - pattern = (process.platform == 'win32' ? pattern.replace(/\\/g, '/') : pattern) // normalize separator on Windows - .replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') // regex escape - from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - .replace(/\\\/\\\*\\\*\\\//g, '((\/.+/)|(\/))') // replace directory globstar, e.g. /hello/**/world - .replace(/\\\*\\\*/g, '.*') // replace remaining globstars with a wildcard that can span directory separators, e.g. /hello/**dll - .replace(/\\\*/g, '[^\/]*') // replace asterisks with a wildcard that cannot span directory separators, e.g. /hello/*.dll - .replace(/\\\?/g, '[^\/]'); // replace single character wildcards, e.g. /hello/log?.dll - pattern = "^" + pattern + "$"; - var flags = process.platform == 'win32' ? 'i' : ''; - return new RegExp(pattern, flags); -} -exports._legacyFindFiles_convertPatternToRegExp = _legacyFindFiles_convertPatternToRegExp; -function _cloneMatchOptions(matchOptions) { - return { - debug: matchOptions.debug, - nobrace: matchOptions.nobrace, - noglobstar: matchOptions.noglobstar, - dot: matchOptions.dot, - noext: matchOptions.noext, - nocase: matchOptions.nocase, - nonull: matchOptions.nonull, - matchBase: matchOptions.matchBase, - nocomment: matchOptions.nocomment, - nonegate: matchOptions.nonegate, - flipNegate: matchOptions.flipNegate - }; -} -exports._cloneMatchOptions = _cloneMatchOptions; -function _getFindInfoFromPattern(defaultRoot, pattern, matchOptions) { - // parameter validation - if (!defaultRoot) { - throw new Error('getFindRootFromPattern() parameter defaultRoot cannot be empty'); - } - if (!pattern) { - throw new Error('getFindRootFromPattern() parameter pattern cannot be empty'); - } - if (!matchOptions.nobrace) { - throw new Error('getFindRootFromPattern() expected matchOptions.nobrace to be true'); - } - // for the sake of determining the findPath, pretend nocase=false - matchOptions = _cloneMatchOptions(matchOptions); - matchOptions.nocase = false; - // check if basename only and matchBase=true - if (matchOptions.matchBase && - !_isRooted(pattern) && - (process.platform == 'win32' ? pattern.replace(/\\/g, '/') : pattern).indexOf('/') < 0) { - return { - adjustedPattern: pattern, - findPath: defaultRoot, - statOnly: false, - }; - } - // the technique applied by this function is to use the information on the Minimatch object determine - // the findPath. Minimatch breaks the pattern into path segments, and exposes information about which - // segments are literal vs patterns. - // - // note, the technique currently imposes a limitation for drive-relative paths with a glob in the - // first segment, e.g. C:hello*/world. it's feasible to overcome this limitation, but is left unsolved - // for now. - var minimatchObj = new minimatch.Minimatch(pattern, matchOptions); - // the "set" property is an array of arrays of parsed path segment info. the outer array should only - // contain one item, otherwise something went wrong. brace expansion can result in multiple arrays, - // but that should be turned off by the time this function is reached. - if (minimatchObj.set.length != 1) { - throw new Error('getFindRootFromPattern() expected Minimatch(...).set.length to be 1. Actual: ' + minimatchObj.set.length); - } - var literalSegments = []; - for (var _i = 0, _a = minimatchObj.set[0]; _i < _a.length; _i++) { - var parsedSegment = _a[_i]; - if (typeof parsedSegment == 'string') { - // the item is a string when the original input for the path segment does not contain any - // unescaped glob characters. - // - // note, the string here is already unescaped (i.e. glob escaping removed), so it is ready - // to pass to find() as-is. for example, an input string 'hello\\*world' => 'hello*world'. - literalSegments.push(parsedSegment); - continue; - } - break; - } - // join the literal segments back together. Minimatch converts '\' to '/' on Windows, then squashes - // consequetive slashes, and finally splits on slash. this means that UNC format is lost, but can - // be detected from the original pattern. - var joinedSegments = literalSegments.join('/'); - if (joinedSegments && process.platform == 'win32' && _startsWith(pattern.replace(/\\/g, '/'), '//')) { - joinedSegments = '/' + joinedSegments; // restore UNC format - } - // determine the find path - var findPath; - if (_isRooted(pattern)) { // the pattern was rooted - findPath = joinedSegments; - } - else if (joinedSegments) { // the pattern was not rooted, and literal segments were found - findPath = _ensureRooted(defaultRoot, joinedSegments); - } - else { // the pattern was not rooted, and no literal segments were found - findPath = defaultRoot; - } - // clean up the path - if (findPath) { - findPath = _getDirectoryName(_ensureRooted(findPath, '_')); // hack to remove unnecessary trailing slash - findPath = _normalizeSeparators(findPath); // normalize slashes - } - return { - adjustedPattern: _ensurePatternRooted(defaultRoot, pattern), - findPath: findPath, - statOnly: literalSegments.length == minimatchObj.set[0].length, - }; -} -exports._getFindInfoFromPattern = _getFindInfoFromPattern; -function _ensurePatternRooted(root, p) { - if (!root) { - throw new Error('ensurePatternRooted() parameter "root" cannot be empty'); - } - if (!p) { - throw new Error('ensurePatternRooted() parameter "p" cannot be empty'); - } - if (_isRooted(p)) { - return p; - } - // normalize root - root = _normalizeSeparators(root); - // escape special glob characters - root = (process.platform == 'win32' ? root : root.replace(/\\/g, '\\\\')) // escape '\' on OSX/Linux - .replace(/(\[)(?=[^\/]+\])/g, '[[]') // escape '[' when ']' follows within the path segment - .replace(/\?/g, '[?]') // escape '?' - .replace(/\*/g, '[*]') // escape '*' - .replace(/\+\(/g, '[+](') // escape '+(' - .replace(/@\(/g, '[@](') // escape '@(' - .replace(/!\(/g, '[!]('); // escape '!(' - return _ensureRooted(root, p); -} -exports._ensurePatternRooted = _ensurePatternRooted; -//------------------------------------------------------------------- -// Populate the vault with sensitive data. Inputs and Endpoints -//------------------------------------------------------------------- -function _loadData() { - // in agent, prefer TempDirectory then workFolder. - // In interactive dev mode, it won't be - var keyPath = _getVariable("agent.TempDirectory") || _getVariable("agent.workFolder") || process.cwd(); - exports._vault = new vm.Vault(keyPath); - exports._knownVariableMap = {}; - _debug('loading inputs and endpoints'); - var loaded = 0; - for (var envvar in process.env) { - if (_startsWith(envvar, 'INPUT_') || - _startsWith(envvar, 'ENDPOINT_AUTH_') || - _startsWith(envvar, 'SECUREFILE_TICKET_') || - _startsWith(envvar, 'SECRET_') || - _startsWith(envvar, 'VSTS_TASKVARIABLE_')) { - // Record the secret variable metadata. This is required by getVariable to know whether - // to retrieve the value from the vault. In a 2.104.1 agent or higher, this metadata will - // be overwritten when the VSTS_SECRET_VARIABLES env var is processed below. - if (_startsWith(envvar, 'SECRET_')) { - var variableName = envvar.substring('SECRET_'.length); - if (variableName) { - // This is technically not the variable name (has underscores instead of dots), - // but it's good enough to make getVariable work in a pre-2.104.1 agent where - // the VSTS_SECRET_VARIABLES env var is not defined. - exports._knownVariableMap[_getVariableKey(variableName)] = { name: variableName, secret: true }; - } - } - // store the secret - var value = process.env[envvar]; - if (value) { - ++loaded; - _debug('loading ' + envvar); - exports._vault.storeSecret(envvar, value); - delete process.env[envvar]; - } - } - } - _debug('loaded ' + loaded); - // store public variable metadata - var names; - try { - names = JSON.parse(process.env['VSTS_PUBLIC_VARIABLES'] || '[]'); - } - catch (err) { - throw new Error('Failed to parse VSTS_PUBLIC_VARIABLES as JSON. ' + err); // may occur during interactive testing - } - names.forEach(function (name) { - exports._knownVariableMap[_getVariableKey(name)] = { name: name, secret: false }; - }); - delete process.env['VSTS_PUBLIC_VARIABLES']; - // store secret variable metadata - try { - names = JSON.parse(process.env['VSTS_SECRET_VARIABLES'] || '[]'); - } - catch (err) { - throw new Error('Failed to parse VSTS_SECRET_VARIABLES as JSON. ' + err); // may occur during interactive testing - } - names.forEach(function (name) { - exports._knownVariableMap[_getVariableKey(name)] = { name: name, secret: true }; - }); - delete process.env['VSTS_SECRET_VARIABLES']; - // avoid loading twice (overwrites .taskkey) - global['_vsts_task_lib_loaded'] = true; -} -exports._loadData = _loadData; -//-------------------------------------------------------------------------------- -// Internal path helpers. -//-------------------------------------------------------------------------------- -/** - * Defines if path is unc-path. - * - * @param path a path to a file. - * @returns true if path starts with double backslash, otherwise returns false. - */ -function _isUncPath(path) { - return /^\\\\[^\\]/.test(path); -} -exports._isUncPath = _isUncPath; -function _ensureRooted(root, p) { - if (!root) { - throw new Error('ensureRooted() parameter "root" cannot be empty'); - } - if (!p) { - throw new Error('ensureRooted() parameter "p" cannot be empty'); - } - if (_isRooted(p)) { - return p; - } - if (process.platform == 'win32' && root.match(/^[A-Z]:$/i)) { // e.g. C: - return root + p; - } - // ensure root ends with a separator - if (_endsWith(root, '/') || (process.platform == 'win32' && _endsWith(root, '\\'))) { - // root already ends with a separator - } - else { - root += path.sep; // append separator - } - return root + p; -} -exports._ensureRooted = _ensureRooted; -/** - * Determines the parent path and trims trailing slashes (when safe). Path separators are normalized - * in the result. This function works similar to the .NET System.IO.Path.GetDirectoryName() method. - * For example, C:\hello\world\ returns C:\hello\world (trailing slash removed). Returns empty when - * no higher directory can be determined. - */ -function _getDirectoryName(p) { - // short-circuit if empty - if (!p) { - return ''; - } - // normalize separators - p = _normalizeSeparators(p); - // on Windows, the goal of this function is to match the behavior of - // [System.IO.Path]::GetDirectoryName(), e.g. - // C:/ => - // C:/hello => C:\ - // C:/hello/ => C:\hello - // C:/hello/world => C:\hello - // C:/hello/world/ => C:\hello\world - // C: => - // C:hello => C: - // C:hello/ => C:hello - // / => - // /hello => \ - // /hello/ => \hello - // //hello => - // //hello/ => - // //hello/world => - // //hello/world/ => \\hello\world - // - // unfortunately, path.dirname() can't simply be used. for example, on Windows - // it yields different results from Path.GetDirectoryName: - // C:/ => C:/ - // C:/hello => C:/ - // C:/hello/ => C:/ - // C:/hello/world => C:/hello - // C:/hello/world/ => C:/hello - // C: => C: - // C:hello => C: - // C:hello/ => C: - // / => / - // /hello => / - // /hello/ => / - // //hello => / - // //hello/ => / - // //hello/world => //hello/world - // //hello/world/ => //hello/world/ - // //hello/world/again => //hello/world/ - // //hello/world/again/ => //hello/world/ - // //hello/world/again/again => //hello/world/again - // //hello/world/again/again/ => //hello/world/again - if (process.platform == 'win32') { - if (/^[A-Z]:\\?[^\\]+$/i.test(p)) { // e.g. C:\hello or C:hello - return p.charAt(2) == '\\' ? p.substring(0, 3) : p.substring(0, 2); - } - else if (/^[A-Z]:\\?$/i.test(p)) { // e.g. C:\ or C: - return ''; - } - var lastSlashIndex = p.lastIndexOf('\\'); - if (lastSlashIndex < 0) { // file name only - return ''; - } - else if (p == '\\') { // relative root - return ''; - } - else if (lastSlashIndex == 0) { // e.g. \\hello - return '\\'; - } - else if (/^\\\\[^\\]+(\\[^\\]*)?$/.test(p)) { // UNC root, e.g. \\hello or \\hello\ or \\hello\world - return ''; - } - return p.substring(0, lastSlashIndex); // e.g. hello\world => hello or hello\world\ => hello\world - // note, this means trailing slashes for non-root directories - // (i.e. not C:\, \, or \\unc\) will simply be removed. - } - // OSX/Linux - if (p.indexOf('/') < 0) { // file name only - return ''; - } - else if (p == '/') { - return ''; - } - else if (_endsWith(p, '/')) { - return p.substring(0, p.length - 1); - } - return path.dirname(p); -} -exports._getDirectoryName = _getDirectoryName; -/** - * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like: - * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases). - */ -function _isRooted(p) { - p = _normalizeSeparators(p); - if (!p) { - throw new Error('isRooted() parameter "p" cannot be empty'); - } - if (process.platform == 'win32') { - return _startsWith(p, '\\') || // e.g. \ or \hello or \\hello - /^[A-Z]:/i.test(p); // e.g. C: or C:\hello - } - return _startsWith(p, '/'); // e.g. /hello -} -exports._isRooted = _isRooted; -function _normalizeSeparators(p) { - p = p || ''; - if (process.platform == 'win32') { - // convert slashes on Windows - p = p.replace(/\//g, '\\'); - // remove redundant slashes - var isUnc = /^\\\\+[^\\]/.test(p); // e.g. \\hello - return (isUnc ? '\\' : '') + p.replace(/\\\\+/g, '\\'); // preserve leading // for UNC - } - // remove redundant slashes - return p.replace(/\/\/+/g, '/'); -} -exports._normalizeSeparators = _normalizeSeparators; -//----------------------------------------------------- -// Expose proxy information to vsts-node-api -//----------------------------------------------------- -function _exposeProxySettings() { - var proxyUrl = _getVariable('Agent.ProxyUrl'); - if (proxyUrl && proxyUrl.length > 0) { - var proxyUsername = _getVariable('Agent.ProxyUsername'); - var proxyPassword = _getVariable('Agent.ProxyPassword'); - var proxyBypassHostsJson = _getVariable('Agent.ProxyBypassList'); - global['_vsts_task_lib_proxy_url'] = proxyUrl; - global['_vsts_task_lib_proxy_username'] = proxyUsername; - global['_vsts_task_lib_proxy_bypass'] = proxyBypassHostsJson; - global['_vsts_task_lib_proxy_password'] = _exposeTaskLibSecret('proxy', proxyPassword || ''); - _debug('expose agent proxy configuration.'); - global['_vsts_task_lib_proxy'] = true; - } -} -exports._exposeProxySettings = _exposeProxySettings; -//----------------------------------------------------- -// Expose certificate information to vsts-node-api -//----------------------------------------------------- -function _exposeCertSettings() { - var ca = _getVariable('Agent.CAInfo'); - if (ca) { - global['_vsts_task_lib_cert_ca'] = ca; - } - var clientCert = _getVariable('Agent.ClientCert'); - if (clientCert) { - var clientCertKey = _getVariable('Agent.ClientCertKey'); - var clientCertArchive = _getVariable('Agent.ClientCertArchive'); - var clientCertPassword = _getVariable('Agent.ClientCertPassword'); - global['_vsts_task_lib_cert_clientcert'] = clientCert; - global['_vsts_task_lib_cert_key'] = clientCertKey; - global['_vsts_task_lib_cert_archive'] = clientCertArchive; - global['_vsts_task_lib_cert_passphrase'] = _exposeTaskLibSecret('cert', clientCertPassword || ''); - } - if (ca || clientCert) { - _debug('expose agent certificate configuration.'); - global['_vsts_task_lib_cert'] = true; - } - var skipCertValidation = _getVariable('Agent.SkipCertValidation') || 'false'; - if (skipCertValidation) { - global['_vsts_task_lib_skip_cert_validation'] = skipCertValidation.toUpperCase() === 'TRUE'; - } -} -exports._exposeCertSettings = _exposeCertSettings; -// We store the encryption key on disk and hold the encrypted content and key file in memory -// return base64encoded:base64encoded -// downstream vsts-node-api will retrieve the secret later -function _exposeTaskLibSecret(keyFile, secret) { - if (secret) { - var encryptKey = crypto.randomBytes(256); - var cipher = crypto.createCipher("aes-256-ctr", encryptKey); - var encryptedContent = cipher.update(secret, "utf8", "hex"); - encryptedContent += cipher.final("hex"); - var storageFile = path.join(_getVariable('Agent.TempDirectory') || _getVariable("agent.workFolder") || process.cwd(), keyFile); - fs.writeFileSync(storageFile, encryptKey.toString('base64'), { encoding: 'utf8' }); - return new Buffer(storageFile).toString('base64') + ':' + new Buffer(encryptedContent).toString('base64'); - } -} - - -/***/ }), - -/***/ 7845: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.updateReleaseName = exports.addBuildTag = exports.updateBuildNumber = exports.uploadBuildLog = exports.associateArtifact = exports.uploadArtifact = exports.logIssue = exports.logDetail = exports.setProgress = exports.setEndpoint = exports.addAttachment = exports.uploadSummary = exports.prependPath = exports.uploadFile = exports.CodeCoverageEnabler = exports.CodeCoveragePublisher = exports.TestPublisher = exports.getHttpCertConfiguration = exports.getHttpProxyConfiguration = exports.findMatch = exports.filter = exports.match = exports.tool = exports.execSync = exports.exec = exports.rmRF = exports.legacyFindFiles = exports.find = exports.retry = exports.mv = exports.cp = exports.ls = exports.which = exports.resolve = exports.mkdirP = exports.popd = exports.pushd = exports.cd = exports.checkPath = exports.cwd = exports.getAgentMode = exports.getPlatform = exports.osType = exports.writeFile = exports.exist = exports.stats = exports.debug = exports.error = exports.warning = exports.command = exports.setTaskVariable = exports.getTaskVariable = exports.getSecureFileTicket = exports.getSecureFileName = exports.getEndpointAuthorization = exports.getEndpointAuthorizationParameterRequired = exports.getEndpointAuthorizationParameter = exports.getEndpointAuthorizationSchemeRequired = exports.getEndpointAuthorizationScheme = exports.getEndpointDataParameterRequired = exports.getEndpointDataParameter = exports.getEndpointUrlRequired = exports.getEndpointUrl = exports.getPathInputRequired = exports.getPathInput = exports.filePathSupplied = exports.getDelimitedInput = exports.getBoolInput = exports.getInputRequired = exports.getInput = exports.setSecret = exports.setVariable = exports.getVariables = exports.assertAgent = exports.getVariable = exports.loc = exports.setResourcePath = exports.setResult = exports.setErrStream = exports.setStdStream = exports.AgentHostedMode = exports.Platform = exports.FieldType = exports.ArtifactType = exports.IssueType = exports.TaskState = exports.TaskResult = void 0; -var shell = __nccwpck_require__(3516); -var childProcess = __nccwpck_require__(2081); -var fs = __nccwpck_require__(7147); -var path = __nccwpck_require__(1017); -var os = __nccwpck_require__(2037); -var minimatch = __nccwpck_require__(3973); -var im = __nccwpck_require__(4473); -var tcm = __nccwpck_require__(1964); -var trm = __nccwpck_require__(6588); -var semver = __nccwpck_require__(9184); -var TaskResult; -(function (TaskResult) { - TaskResult[TaskResult["Succeeded"] = 0] = "Succeeded"; - TaskResult[TaskResult["SucceededWithIssues"] = 1] = "SucceededWithIssues"; - TaskResult[TaskResult["Failed"] = 2] = "Failed"; - TaskResult[TaskResult["Cancelled"] = 3] = "Cancelled"; - TaskResult[TaskResult["Skipped"] = 4] = "Skipped"; -})(TaskResult = exports.TaskResult || (exports.TaskResult = {})); -var TaskState; -(function (TaskState) { - TaskState[TaskState["Unknown"] = 0] = "Unknown"; - TaskState[TaskState["Initialized"] = 1] = "Initialized"; - TaskState[TaskState["InProgress"] = 2] = "InProgress"; - TaskState[TaskState["Completed"] = 3] = "Completed"; -})(TaskState = exports.TaskState || (exports.TaskState = {})); -var IssueType; -(function (IssueType) { - IssueType[IssueType["Error"] = 0] = "Error"; - IssueType[IssueType["Warning"] = 1] = "Warning"; -})(IssueType = exports.IssueType || (exports.IssueType = {})); -var ArtifactType; -(function (ArtifactType) { - ArtifactType[ArtifactType["Container"] = 0] = "Container"; - ArtifactType[ArtifactType["FilePath"] = 1] = "FilePath"; - ArtifactType[ArtifactType["VersionControl"] = 2] = "VersionControl"; - ArtifactType[ArtifactType["GitRef"] = 3] = "GitRef"; - ArtifactType[ArtifactType["TfvcLabel"] = 4] = "TfvcLabel"; -})(ArtifactType = exports.ArtifactType || (exports.ArtifactType = {})); -var FieldType; -(function (FieldType) { - FieldType[FieldType["AuthParameter"] = 0] = "AuthParameter"; - FieldType[FieldType["DataParameter"] = 1] = "DataParameter"; - FieldType[FieldType["Url"] = 2] = "Url"; -})(FieldType = exports.FieldType || (exports.FieldType = {})); -/** Platforms supported by our build agent */ -var Platform; -(function (Platform) { - Platform[Platform["Windows"] = 0] = "Windows"; - Platform[Platform["MacOS"] = 1] = "MacOS"; - Platform[Platform["Linux"] = 2] = "Linux"; -})(Platform = exports.Platform || (exports.Platform = {})); -var AgentHostedMode; -(function (AgentHostedMode) { - AgentHostedMode[AgentHostedMode["Unknown"] = 0] = "Unknown"; - AgentHostedMode[AgentHostedMode["SelfHosted"] = 1] = "SelfHosted"; - AgentHostedMode[AgentHostedMode["MsHosted"] = 2] = "MsHosted"; -})(AgentHostedMode = exports.AgentHostedMode || (exports.AgentHostedMode = {})); -//----------------------------------------------------- -// General Helpers -//----------------------------------------------------- -exports.setStdStream = im._setStdStream; -exports.setErrStream = im._setErrStream; -//----------------------------------------------------- -// Results -//----------------------------------------------------- -/** - * Sets the result of the task. - * Execution will continue. - * If not set, task will be Succeeded. - * If multiple calls are made to setResult the most pessimistic call wins (Failed) regardless of the order of calls. - * - * @param result TaskResult enum of Succeeded, SucceededWithIssues, Failed, Cancelled or Skipped. - * @param message A message which will be logged as an error issue if the result is Failed. - * @param done Optional. Instructs the agent the task is done. This is helpful when child processes - * may still be running and prevent node from fully exiting. This argument is supported - * from agent version 2.142.0 or higher (otherwise will no-op). - * @returns void - */ -function setResult(result, message, done) { - exports.debug('task result: ' + TaskResult[result]); - // add an error issue - if (result == TaskResult.Failed && message) { - exports.error(message); - } - else if (result == TaskResult.SucceededWithIssues && message) { - exports.warning(message); - } - // task.complete - var properties = { 'result': TaskResult[result] }; - if (done) { - properties['done'] = 'true'; - } - exports.command('task.complete', properties, message); -} -exports.setResult = setResult; -// -// Catching all exceptions -// -process.on('uncaughtException', function (err) { - setResult(TaskResult.Failed, exports.loc('LIB_UnhandledEx', err.message)); - exports.error(String(err.stack)); -}); -//----------------------------------------------------- -// Loc Helpers -//----------------------------------------------------- -exports.setResourcePath = im._setResourcePath; -exports.loc = im._loc; -//----------------------------------------------------- -// Input Helpers -//----------------------------------------------------- -exports.getVariable = im._getVariable; -/** - * Asserts the agent version is at least the specified minimum. - * - * @param minimum minimum version version - must be 2.104.1 or higher - */ -function assertAgent(minimum) { - if (semver.lt(minimum, '2.104.1')) { - throw new Error('assertAgent() requires the parameter to be 2.104.1 or higher'); - } - var agent = exports.getVariable('Agent.Version'); - if (agent && semver.lt(agent, minimum)) { - throw new Error("Agent version " + minimum + " or higher is required"); - } -} -exports.assertAgent = assertAgent; -/** - * Gets a snapshot of the current state of all job variables available to the task. - * Requires a 2.104.1 agent or higher for full functionality. - * - * Limitations on an agent prior to 2.104.1: - * 1) The return value does not include all public variables. Only public variables - * that have been added using setVariable are returned. - * 2) The name returned for each secret variable is the formatted environment variable - * name, not the actual variable name (unless it was set explicitly at runtime using - * setVariable). - * - * @returns VariableInfo[] - */ -function getVariables() { - return Object.keys(im._knownVariableMap) - .map(function (key) { - var info = im._knownVariableMap[key]; - return { name: info.name, value: exports.getVariable(info.name), secret: info.secret }; - }); -} -exports.getVariables = getVariables; -/** - * Sets a variable which will be available to subsequent tasks as well. - * - * @param name name of the variable to set - * @param val value to set - * @param secret whether variable is secret. Multi-line secrets are not allowed. Optional, defaults to false - * @param isOutput whether variable is an output variable. Optional, defaults to false - * @returns void - */ -function setVariable(name, val, secret, isOutput) { - if (secret === void 0) { secret = false; } - if (isOutput === void 0) { isOutput = false; } - // once a secret always a secret - var key = im._getVariableKey(name); - if (im._knownVariableMap.hasOwnProperty(key)) { - secret = secret || im._knownVariableMap[key].secret; - } - // store the value - var varValue = val || ''; - exports.debug('set ' + name + '=' + (secret && varValue ? '********' : varValue)); - if (secret) { - if (varValue && varValue.match(/\r|\n/) && ("" + process.env['SYSTEM_UNSAFEALLOWMULTILINESECRET']).toUpperCase() != 'TRUE') { - throw new Error(exports.loc('LIB_MultilineSecret')); - } - im._vault.storeSecret('SECRET_' + key, varValue); - delete process.env[key]; - } - else { - process.env[key] = varValue; - } - // store the metadata - im._knownVariableMap[key] = { name: name, secret: secret }; - // write the setvariable command - exports.command('task.setvariable', { 'variable': name || '', isOutput: (isOutput || false).toString(), 'issecret': (secret || false).toString() }, varValue); -} -exports.setVariable = setVariable; -/** - * Registers a value with the logger, so the value will be masked from the logs. Multi-line secrets are not allowed. - * - * @param val value to register - */ -function setSecret(val) { - if (val) { - if (val.match(/\r|\n/) && ("" + process.env['SYSTEM_UNSAFEALLOWMULTILINESECRET']).toUpperCase() !== 'TRUE') { - throw new Error(exports.loc('LIB_MultilineSecret')); - } - exports.command('task.setsecret', {}, val); - } -} -exports.setSecret = setSecret; -/** - * Gets the value of an input. - * If required is true and the value is not set, it will throw. - * - * @param name name of the input to get - * @param required whether input is required. optional, defaults to false - * @returns string - */ -function getInput(name, required) { - var inval = im._vault.retrieveSecret('INPUT_' + im._getVariableKey(name)); - if (required && !inval) { - throw new Error(exports.loc('LIB_InputRequired', name)); - } - exports.debug(name + '=' + inval); - return inval; -} -exports.getInput = getInput; -/** - * Gets the value of an input. - * If the value is not set, it will throw. - * - * @param name name of the input to get - * @returns string - */ -function getInputRequired(name) { - return getInput(name, true); -} -exports.getInputRequired = getInputRequired; -/** - * Gets the value of an input and converts to a bool. Convenience. - * If required is true and the value is not set, it will throw. - * If required is false and the value is not set, returns false. - * - * @param name name of the bool input to get - * @param required whether input is required. optional, defaults to false - * @returns boolean - */ -function getBoolInput(name, required) { - return (getInput(name, required) || '').toUpperCase() == "TRUE"; -} -exports.getBoolInput = getBoolInput; -/** - * Gets the value of an input and splits the value using a delimiter (space, comma, etc). - * Empty values are removed. This function is useful for splitting an input containing a simple - * list of items - such as build targets. - * IMPORTANT: Do not use this function for splitting additional args! Instead use argString(), which - * follows normal argument splitting rules and handles values encapsulated by quotes. - * If required is true and the value is not set, it will throw. - * - * @param name name of the input to get - * @param delim delimiter to split on - * @param required whether input is required. optional, defaults to false - * @returns string[] - */ -function getDelimitedInput(name, delim, required) { - var inputVal = getInput(name, required); - if (!inputVal) { - return []; - } - var result = []; - inputVal.split(delim).forEach(function (x) { - if (x) { - result.push(x); - } - }); - return result; -} -exports.getDelimitedInput = getDelimitedInput; -/** - * Checks whether a path inputs value was supplied by the user - * File paths are relative with a picker, so an empty path is the root of the repo. - * Useful if you need to condition work (like append an arg) if a value was supplied - * - * @param name name of the path input to check - * @returns boolean - */ -function filePathSupplied(name) { - // normalize paths - var pathValue = this.resolve(this.getPathInput(name) || ''); - var repoRoot = this.resolve(exports.getVariable('build.sourcesDirectory') || exports.getVariable('system.defaultWorkingDirectory') || ''); - var supplied = pathValue !== repoRoot; - exports.debug(name + 'path supplied :' + supplied); - return supplied; -} -exports.filePathSupplied = filePathSupplied; -/** - * Gets the value of a path input - * It will be quoted for you if it isn't already and contains spaces - * If required is true and the value is not set, it will throw. - * If check is true and the path does not exist, it will throw. - * - * @param name name of the input to get - * @param required whether input is required. optional, defaults to false - * @param check whether path is checked. optional, defaults to false - * @returns string - */ -function getPathInput(name, required, check) { - var inval = getInput(name, required); - if (inval) { - if (check) { - exports.checkPath(inval, name); - } - } - return inval; -} -exports.getPathInput = getPathInput; -/** - * Gets the value of a path input - * It will be quoted for you if it isn't already and contains spaces - * If the value is not set, it will throw. - * If check is true and the path does not exist, it will throw. - * - * @param name name of the input to get - * @param check whether path is checked. optional, defaults to false - * @returns string - */ -function getPathInputRequired(name, check) { - return getPathInput(name, true, check); -} -exports.getPathInputRequired = getPathInputRequired; -//----------------------------------------------------- -// Endpoint Helpers -//----------------------------------------------------- -/** - * Gets the url for a service endpoint - * If the url was not set and is not optional, it will throw. - * - * @param id name of the service endpoint - * @param optional whether the url is optional - * @returns string - */ -function getEndpointUrl(id, optional) { - var urlval = process.env['ENDPOINT_URL_' + id]; - if (!optional && !urlval) { - throw new Error(exports.loc('LIB_EndpointNotExist', id)); - } - exports.debug(id + '=' + urlval); - return urlval; -} -exports.getEndpointUrl = getEndpointUrl; -/** - * Gets the url for a service endpoint - * If the url was not set, it will throw. - * - * @param id name of the service endpoint - * @returns string - */ -function getEndpointUrlRequired(id) { - return getEndpointUrl(id, false); -} -exports.getEndpointUrlRequired = getEndpointUrlRequired; -/* - * Gets the endpoint data parameter value with specified key for a service endpoint - * If the endpoint data parameter was not set and is not optional, it will throw. - * - * @param id name of the service endpoint - * @param key of the parameter - * @param optional whether the endpoint data is optional - * @returns {string} value of the endpoint data parameter - */ -function getEndpointDataParameter(id, key, optional) { - var dataParamVal = process.env['ENDPOINT_DATA_' + id + '_' + key.toUpperCase()]; - if (!optional && !dataParamVal) { - throw new Error(exports.loc('LIB_EndpointDataNotExist', id, key)); - } - exports.debug(id + ' data ' + key + ' = ' + dataParamVal); - return dataParamVal; -} -exports.getEndpointDataParameter = getEndpointDataParameter; -/* - * Gets the endpoint data parameter value with specified key for a service endpoint - * If the endpoint data parameter was not set, it will throw. - * - * @param id name of the service endpoint - * @param key of the parameter - * @returns {string} value of the endpoint data parameter - */ -function getEndpointDataParameterRequired(id, key) { - return getEndpointDataParameter(id, key, false); -} -exports.getEndpointDataParameterRequired = getEndpointDataParameterRequired; -/** - * Gets the endpoint authorization scheme for a service endpoint - * If the endpoint authorization scheme is not set and is not optional, it will throw. - * - * @param id name of the service endpoint - * @param optional whether the endpoint authorization scheme is optional - * @returns {string} value of the endpoint authorization scheme - */ -function getEndpointAuthorizationScheme(id, optional) { - var authScheme = im._vault.retrieveSecret('ENDPOINT_AUTH_SCHEME_' + id); - if (!optional && !authScheme) { - throw new Error(exports.loc('LIB_EndpointAuthNotExist', id)); - } - exports.debug(id + ' auth scheme = ' + authScheme); - return authScheme; -} -exports.getEndpointAuthorizationScheme = getEndpointAuthorizationScheme; -/** - * Gets the endpoint authorization scheme for a service endpoint - * If the endpoint authorization scheme is not set, it will throw. - * - * @param id name of the service endpoint - * @returns {string} value of the endpoint authorization scheme - */ -function getEndpointAuthorizationSchemeRequired(id) { - return getEndpointAuthorizationScheme(id, false); -} -exports.getEndpointAuthorizationSchemeRequired = getEndpointAuthorizationSchemeRequired; -/** - * Gets the endpoint authorization parameter value for a service endpoint with specified key - * If the endpoint authorization parameter is not set and is not optional, it will throw. - * - * @param id name of the service endpoint - * @param key key to find the endpoint authorization parameter - * @param optional optional whether the endpoint authorization scheme is optional - * @returns {string} value of the endpoint authorization parameter value - */ -function getEndpointAuthorizationParameter(id, key, optional) { - var authParam = im._vault.retrieveSecret('ENDPOINT_AUTH_PARAMETER_' + id + '_' + key.toUpperCase()); - if (!optional && !authParam) { - throw new Error(exports.loc('LIB_EndpointAuthNotExist', id)); - } - exports.debug(id + ' auth param ' + key + ' = ' + authParam); - return authParam; -} -exports.getEndpointAuthorizationParameter = getEndpointAuthorizationParameter; -/** - * Gets the endpoint authorization parameter value for a service endpoint with specified key - * If the endpoint authorization parameter is not set, it will throw. - * - * @param id name of the service endpoint - * @param key key to find the endpoint authorization parameter - * @returns {string} value of the endpoint authorization parameter value - */ -function getEndpointAuthorizationParameterRequired(id, key) { - return getEndpointAuthorizationParameter(id, key, false); -} -exports.getEndpointAuthorizationParameterRequired = getEndpointAuthorizationParameterRequired; -/** - * Gets the authorization details for a service endpoint - * If the authorization was not set and is not optional, it will set the task result to Failed. - * - * @param id name of the service endpoint - * @param optional whether the url is optional - * @returns string - */ -function getEndpointAuthorization(id, optional) { - var aval = im._vault.retrieveSecret('ENDPOINT_AUTH_' + id); - if (!optional && !aval) { - setResult(TaskResult.Failed, exports.loc('LIB_EndpointAuthNotExist', id)); - } - exports.debug(id + ' exists ' + (!!aval)); - var auth; - try { - if (aval) { - auth = JSON.parse(aval); - } - } - catch (err) { - throw new Error(exports.loc('LIB_InvalidEndpointAuth', aval)); - } - return auth; -} -exports.getEndpointAuthorization = getEndpointAuthorization; -//----------------------------------------------------- -// SecureFile Helpers -//----------------------------------------------------- -/** - * Gets the name for a secure file - * - * @param id secure file id - * @returns string - */ -function getSecureFileName(id) { - var name = process.env['SECUREFILE_NAME_' + id]; - exports.debug('secure file name for id ' + id + ' = ' + name); - return name; -} -exports.getSecureFileName = getSecureFileName; -/** - * Gets the secure file ticket that can be used to download the secure file contents - * - * @param id name of the secure file - * @returns {string} secure file ticket - */ -function getSecureFileTicket(id) { - var ticket = im._vault.retrieveSecret('SECUREFILE_TICKET_' + id); - exports.debug('secure file ticket for id ' + id + ' = ' + ticket); - return ticket; -} -exports.getSecureFileTicket = getSecureFileTicket; -//----------------------------------------------------- -// Task Variable Helpers -//----------------------------------------------------- -/** - * Gets a variable value that is set by previous step from the same wrapper task. - * Requires a 2.115.0 agent or higher. - * - * @param name name of the variable to get - * @returns string - */ -function getTaskVariable(name) { - assertAgent('2.115.0'); - var inval = im._vault.retrieveSecret('VSTS_TASKVARIABLE_' + im._getVariableKey(name)); - if (inval) { - inval = inval.trim(); - } - exports.debug('task variable: ' + name + '=' + inval); - return inval; -} -exports.getTaskVariable = getTaskVariable; -/** - * Sets a task variable which will only be available to subsequent steps belong to the same wrapper task. - * Requires a 2.115.0 agent or higher. - * - * @param name name of the variable to set - * @param val value to set - * @param secret whether variable is secret. optional, defaults to false - * @returns void - */ -function setTaskVariable(name, val, secret) { - if (secret === void 0) { secret = false; } - assertAgent('2.115.0'); - var key = im._getVariableKey(name); - // store the value - var varValue = val || ''; - exports.debug('set task variable: ' + name + '=' + (secret && varValue ? '********' : varValue)); - im._vault.storeSecret('VSTS_TASKVARIABLE_' + key, varValue); - delete process.env[key]; - // write the command - exports.command('task.settaskvariable', { 'variable': name || '', 'issecret': (secret || false).toString() }, varValue); -} -exports.setTaskVariable = setTaskVariable; -//----------------------------------------------------- -// Cmd Helpers -//----------------------------------------------------- -exports.command = im._command; -exports.warning = im._warning; -exports.error = im._error; -exports.debug = im._debug; -//----------------------------------------------------- -// Disk Functions -//----------------------------------------------------- -function _checkShell(cmd, continueOnError) { - var se = shell.error(); - if (se) { - exports.debug(cmd + ' failed'); - var errMsg = exports.loc('LIB_OperationFailed', cmd, se); - exports.debug(errMsg); - if (!continueOnError) { - throw new Error(errMsg); - } - } -} -/** - * Get's stat on a path. - * Useful for checking whether a file or directory. Also getting created, modified and accessed time. - * see [fs.stat](https://nodejs.org/api/fs.html#fs_class_fs_stats) - * - * @param path path to check - * @returns fsStat - */ -function stats(path) { - return fs.statSync(path); -} -exports.stats = stats; -exports.exist = im._exist; -function writeFile(file, data, options) { - if (typeof (options) === 'string') { - fs.writeFileSync(file, data, { encoding: options }); - } - else { - fs.writeFileSync(file, data, options); - } -} -exports.writeFile = writeFile; -/** - * @deprecated Use `getPlatform` - * Useful for determining the host operating system. - * see [os.type](https://nodejs.org/api/os.html#os_os_type) - * - * @return the name of the operating system - */ -function osType() { - return os.type(); -} -exports.osType = osType; -/** - * Determine the operating system the build agent is running on. - * @returns {Platform} - * @throws {Error} Platform is not supported by our agent - */ -function getPlatform() { - switch (process.platform) { - case 'win32': return Platform.Windows; - case 'darwin': return Platform.MacOS; - case 'linux': return Platform.Linux; - default: throw Error(exports.loc('LIB_PlatformNotSupported', process.platform)); - } -} -exports.getPlatform = getPlatform; -/** - * Return hosted type of Agent - * @returns {AgentHostedMode} - */ -function getAgentMode() { - var agentCloudId = exports.getVariable('Agent.CloudId'); - if (agentCloudId === undefined) - return AgentHostedMode.Unknown; - if (agentCloudId) - return AgentHostedMode.MsHosted; - return AgentHostedMode.SelfHosted; -} -exports.getAgentMode = getAgentMode; -/** - * Returns the process's current working directory. - * see [process.cwd](https://nodejs.org/api/process.html#process_process_cwd) - * - * @return the path to the current working directory of the process - */ -function cwd() { - return process.cwd(); -} -exports.cwd = cwd; -exports.checkPath = im._checkPath; -/** - * Change working directory. - * - * @param path new working directory path - * @returns void - */ -function cd(path) { - if (path) { - shell.cd(path); - _checkShell('cd'); - } -} -exports.cd = cd; -/** - * Change working directory and push it on the stack - * - * @param path new working directory path - * @returns void - */ -function pushd(path) { - shell.pushd(path); - _checkShell('pushd'); -} -exports.pushd = pushd; -/** - * Change working directory back to previously pushed directory - * - * @returns void - */ -function popd() { - shell.popd(); - _checkShell('popd'); -} -exports.popd = popd; -/** - * Make a directory. Creates the full path with folders in between - * Will throw if it fails - * - * @param p path to create - * @returns void - */ -function mkdirP(p) { - if (!p) { - throw new Error(exports.loc('LIB_ParameterIsRequired', 'p')); - } - // build a stack of directories to create - var stack = []; - var testDir = p; - while (true) { - // validate the loop is not out of control - if (stack.length >= (process.env['TASKLIB_TEST_MKDIRP_FAILSAFE'] || 1000)) { - // let the framework throw - exports.debug('loop is out of control'); - fs.mkdirSync(p); - return; - } - exports.debug("testing directory '" + testDir + "'"); - var stats_1 = void 0; - try { - stats_1 = fs.statSync(testDir); - } - catch (err) { - if (err.code == 'ENOENT') { - // validate the directory is not the drive root - var parentDir = path.dirname(testDir); - if (testDir == parentDir) { - throw new Error(exports.loc('LIB_MkdirFailedInvalidDriveRoot', p, testDir)); // Unable to create directory '{p}'. Root directory does not exist: '{testDir}' - } - // push the dir and test the parent - stack.push(testDir); - testDir = parentDir; - continue; - } - else if (err.code == 'UNKNOWN') { - throw new Error(exports.loc('LIB_MkdirFailedInvalidShare', p, testDir)); // Unable to create directory '{p}'. Unable to verify the directory exists: '{testDir}'. If directory is a file share, please verify the share name is correct, the share is online, and the current process has permission to access the share. - } - else { - throw err; - } - } - if (!stats_1.isDirectory()) { - throw new Error(exports.loc('LIB_MkdirFailedFileExists', p, testDir)); // Unable to create directory '{p}'. Conflicting file exists: '{testDir}' - } - // testDir exists - break; - } - // create each directory - while (stack.length) { - var dir = stack.pop(); // non-null because `stack.length` was truthy - exports.debug("mkdir '" + dir + "'"); - try { - fs.mkdirSync(dir); - } - catch (err) { - throw new Error(exports.loc('LIB_MkdirFailed', p, err.message)); // Unable to create directory '{p}'. {err.message} - } - } -} -exports.mkdirP = mkdirP; -/** - * Resolves a sequence of paths or path segments into an absolute path. - * Calls node.js path.resolve() - * Allows L0 testing with consistent path formats on Mac/Linux and Windows in the mock implementation - * @param pathSegments - * @returns {string} - */ -function resolve() { - var pathSegments = []; - for (var _i = 0; _i < arguments.length; _i++) { - pathSegments[_i] = arguments[_i]; - } - var absolutePath = path.resolve.apply(this, pathSegments); - exports.debug('Absolute path for pathSegments: ' + pathSegments + ' = ' + absolutePath); - return absolutePath; -} -exports.resolve = resolve; -exports.which = im._which; -/** - * Returns array of files in the given path, or in current directory if no path provided. See shelljs.ls - * @param {string} options Available options: -R (recursive), -A (all files, include files beginning with ., except for . and ..) - * @param {string[]} paths Paths to search. - * @return {string[]} An array of files in the given path(s). - */ -function ls(options, paths) { - if (options) { - return shell.ls(options, paths); - } - else { - return shell.ls(paths); - } -} -exports.ls = ls; -/** - * Copies a file or folder. - * - * @param source source path - * @param dest destination path - * @param options string -r, -f or -rf for recursive and force - * @param continueOnError optional. whether to continue on error - * @param retryCount optional. Retry count to copy the file. It might help to resolve intermittent issues e.g. with UNC target paths on a remote host. - */ -function cp(source, dest, options, continueOnError, retryCount) { - if (retryCount === void 0) { retryCount = 0; } - while (retryCount >= 0) { - try { - if (options) { - shell.cp(options, source, dest); - } - else { - shell.cp(source, dest); - } - _checkShell('cp', false); - break; - } - catch (e) { - if (retryCount <= 0) { - if (continueOnError) { - exports.warning(e); - break; - } - else { - throw e; - } - } - else { - console.log(exports.loc('LIB_CopyFileFailed', retryCount)); - retryCount--; - } - } - } -} -exports.cp = cp; -/** - * Moves a path. - * - * @param source source path - * @param dest destination path - * @param options string -f or -n for force and no clobber - * @param continueOnError optional. whether to continue on error - */ -function mv(source, dest, options, continueOnError) { - if (options) { - shell.mv(options, source, dest); - } - else { - shell.mv(source, dest); - } - _checkShell('mv', continueOnError); -} -exports.mv = mv; -/** - * Tries to execute a function a specified number of times. - * - * @param func a function to be executed. - * @param args executed function arguments array. - * @param retryOptions optional. Defaults to { continueOnError: false, retryCount: 0 }. - * @returns the same as the usual function. - */ -function retry(func, args, retryOptions) { - if (retryOptions === void 0) { retryOptions = { continueOnError: false, retryCount: 0 }; } - while (retryOptions.retryCount >= 0) { - try { - return func.apply(void 0, args); - } - catch (e) { - if (retryOptions.retryCount <= 0) { - if (retryOptions.continueOnError) { - exports.warning(e); - break; - } - else { - throw e; - } - } - else { - exports.debug("Attempt to execute function \"" + (func === null || func === void 0 ? void 0 : func.name) + "\" failed, retries left: " + retryOptions.retryCount); - retryOptions.retryCount--; - } - } - } -} -exports.retry = retry; -/** - * Gets info about item stats. - * - * @param path a path to the item to be processed. - * @param followSymbolicLink indicates whether to traverse descendants of symbolic link directories. - * @param allowBrokenSymbolicLinks when true, broken symbolic link will not cause an error. - * @returns fs.Stats - */ -function _getStats(path, followSymbolicLink, allowBrokenSymbolicLinks) { - // stat returns info about the target of a symlink (or symlink chain), - // lstat returns info about a symlink itself - var stats; - if (followSymbolicLink) { - try { - // use stat (following symlinks) - stats = fs.statSync(path); - } - catch (err) { - if (err.code == 'ENOENT' && allowBrokenSymbolicLinks) { - // fallback to lstat (broken symlinks allowed) - stats = fs.lstatSync(path); - exports.debug(" " + path + " (broken symlink)"); - } - else { - throw err; - } - } - } - else { - // use lstat (not following symlinks) - stats = fs.lstatSync(path); - } - return stats; -} -/** - * Recursively finds all paths a given path. Returns an array of paths. - * - * @param findPath path to search - * @param options optional. defaults to { followSymbolicLinks: true }. following soft links is generally appropriate unless deleting files. - * @returns string[] - */ -function find(findPath, options) { - if (!findPath) { - exports.debug('no path specified'); - return []; - } - // normalize the path, otherwise the first result is inconsistently formatted from the rest of the results - // because path.join() performs normalization. - findPath = path.normalize(findPath); - // debug trace the parameters - exports.debug("findPath: '" + findPath + "'"); - options = options || _getDefaultFindOptions(); - _debugFindOptions(options); - // return empty if not exists - try { - fs.lstatSync(findPath); - } - catch (err) { - if (err.code == 'ENOENT') { - exports.debug('0 results'); - return []; - } - throw err; - } - try { - var result = []; - // push the first item - var stack = [new _FindItem(findPath, 1)]; - var traversalChain = []; // used to detect cycles - var _loop_1 = function () { - // pop the next item and push to the result array - var item = stack.pop(); // non-null because `stack.length` was truthy - var stats_2 = void 0; - try { - // `item.path` equals `findPath` for the first item to be processed, when the `result` array is empty - var isPathToSearch = !result.length; - // following specified symlinks only if current path equals specified path - var followSpecifiedSymbolicLink = options.followSpecifiedSymbolicLink && isPathToSearch; - // following all symlinks or following symlink for the specified path - var followSymbolicLink = options.followSymbolicLinks || followSpecifiedSymbolicLink; - // stat the item. The stat info is used further below to determine whether to traverse deeper - stats_2 = _getStats(item.path, followSymbolicLink, options.allowBrokenSymbolicLinks); - } - catch (err) { - if (err.code == 'ENOENT' && options.skipMissingFiles) { - exports.warning("No such file or directory: \"" + item.path + "\" - skipping."); - return "continue"; - } - throw err; - } - result.push(item.path); - // note, isDirectory() returns false for the lstat of a symlink - if (stats_2.isDirectory()) { - exports.debug(" " + item.path + " (directory)"); - if (options.followSymbolicLinks) { - // get the realpath - var realPath_1; - if (im._isUncPath(item.path)) { - // Sometimes there are spontaneous issues when working with unc-paths, so retries have been added for them. - realPath_1 = retry(fs.realpathSync, [item.path], { continueOnError: false, retryCount: 5 }); - } - else { - realPath_1 = fs.realpathSync(item.path); - } - // fixup the traversal chain to match the item level - while (traversalChain.length >= item.level) { - traversalChain.pop(); - } - // test for a cycle - if (traversalChain.some(function (x) { return x == realPath_1; })) { - exports.debug(' cycle detected'); - return "continue"; - } - // update the traversal chain - traversalChain.push(realPath_1); - } - // push the child items in reverse onto the stack - var childLevel_1 = item.level + 1; - var childItems = fs.readdirSync(item.path) - .map(function (childName) { return new _FindItem(path.join(item.path, childName), childLevel_1); }); - for (var i = childItems.length - 1; i >= 0; i--) { - stack.push(childItems[i]); - } - } - else { - exports.debug(" " + item.path + " (file)"); - } - }; - while (stack.length) { - _loop_1(); - } - exports.debug(result.length + " results"); - return result; - } - catch (err) { - throw new Error(exports.loc('LIB_OperationFailed', 'find', err.message)); - } -} -exports.find = find; -var _FindItem = /** @class */ (function () { - function _FindItem(path, level) { - this.path = path; - this.level = level; - } - return _FindItem; -}()); -function _debugFindOptions(options) { - exports.debug("findOptions.allowBrokenSymbolicLinks: '" + options.allowBrokenSymbolicLinks + "'"); - exports.debug("findOptions.followSpecifiedSymbolicLink: '" + options.followSpecifiedSymbolicLink + "'"); - exports.debug("findOptions.followSymbolicLinks: '" + options.followSymbolicLinks + "'"); - exports.debug("findOptions.skipMissingFiles: '" + options.skipMissingFiles + "'"); -} -function _getDefaultFindOptions() { - return { - allowBrokenSymbolicLinks: false, - followSpecifiedSymbolicLink: true, - followSymbolicLinks: true, - skipMissingFiles: false - }; -} -/** - * Prefer tl.find() and tl.match() instead. This function is for backward compatibility - * when porting tasks to Node from the PowerShell or PowerShell3 execution handler. - * - * @param rootDirectory path to root unrooted patterns with - * @param pattern include and exclude patterns - * @param includeFiles whether to include files in the result. defaults to true when includeFiles and includeDirectories are both false - * @param includeDirectories whether to include directories in the result - * @returns string[] - */ -function legacyFindFiles(rootDirectory, pattern, includeFiles, includeDirectories) { - if (!pattern) { - throw new Error('pattern parameter cannot be empty'); - } - exports.debug("legacyFindFiles rootDirectory: '" + rootDirectory + "'"); - exports.debug("pattern: '" + pattern + "'"); - exports.debug("includeFiles: '" + includeFiles + "'"); - exports.debug("includeDirectories: '" + includeDirectories + "'"); - if (!includeFiles && !includeDirectories) { - includeFiles = true; - } - // organize the patterns into include patterns and exclude patterns - var includePatterns = []; - var excludePatterns = []; - pattern = pattern.replace(/;;/g, '\0'); - for (var _i = 0, _a = pattern.split(';'); _i < _a.length; _i++) { - var pat = _a[_i]; - if (!pat) { - continue; - } - pat = pat.replace(/\0/g, ';'); - // determine whether include pattern and remove any include/exclude prefix. - // include patterns start with +: or anything other than -: - // exclude patterns start with -: - var isIncludePattern = void 0; - if (im._startsWith(pat, '+:')) { - pat = pat.substring(2); - isIncludePattern = true; - } - else if (im._startsWith(pat, '-:')) { - pat = pat.substring(2); - isIncludePattern = false; - } - else { - isIncludePattern = true; - } - // validate pattern does not end with a slash - if (im._endsWith(pat, '/') || (process.platform == 'win32' && im._endsWith(pat, '\\'))) { - throw new Error(exports.loc('LIB_InvalidPattern', pat)); - } - // root the pattern - if (rootDirectory && !path.isAbsolute(pat)) { - pat = path.join(rootDirectory, pat); - // remove trailing slash sometimes added by path.join() on Windows, e.g. - // path.join('\\\\hello', 'world') => '\\\\hello\\world\\' - // path.join('//hello', 'world') => '\\\\hello\\world\\' - if (im._endsWith(pat, '\\')) { - pat = pat.substring(0, pat.length - 1); - } - } - if (isIncludePattern) { - includePatterns.push(pat); - } - else { - excludePatterns.push(im._legacyFindFiles_convertPatternToRegExp(pat)); - } - } - // find and apply patterns - var count = 0; - var result = _legacyFindFiles_getMatchingItems(includePatterns, excludePatterns, !!includeFiles, !!includeDirectories); - exports.debug('all matches:'); - for (var _b = 0, result_1 = result; _b < result_1.length; _b++) { - var resultItem = result_1[_b]; - exports.debug(' ' + resultItem); - } - exports.debug('total matched: ' + result.length); - return result; -} -exports.legacyFindFiles = legacyFindFiles; -function _legacyFindFiles_getMatchingItems(includePatterns, excludePatterns, includeFiles, includeDirectories) { - exports.debug('getMatchingItems()'); - for (var _i = 0, includePatterns_1 = includePatterns; _i < includePatterns_1.length; _i++) { - var pattern = includePatterns_1[_i]; - exports.debug("includePattern: '" + pattern + "'"); - } - for (var _a = 0, excludePatterns_1 = excludePatterns; _a < excludePatterns_1.length; _a++) { - var pattern = excludePatterns_1[_a]; - exports.debug("excludePattern: " + pattern); - } - exports.debug('includeFiles: ' + includeFiles); - exports.debug('includeDirectories: ' + includeDirectories); - var allFiles = {}; - var _loop_2 = function (pattern) { - // determine the directory to search - // - // note, getDirectoryName removes redundant path separators - var findPath = void 0; - var starIndex = pattern.indexOf('*'); - var questionIndex = pattern.indexOf('?'); - if (starIndex < 0 && questionIndex < 0) { - // if no wildcards are found, use the directory name portion of the path. - // if there is no directory name (file name only in pattern or drive root), - // this will return empty string. - findPath = im._getDirectoryName(pattern); - } - else { - // extract the directory prior to the first wildcard - var index = Math.min(starIndex >= 0 ? starIndex : questionIndex, questionIndex >= 0 ? questionIndex : starIndex); - findPath = im._getDirectoryName(pattern.substring(0, index)); - } - // note, due to this short-circuit and the above usage of getDirectoryName, this - // function has the same limitations regarding drive roots as the powershell - // implementation. - // - // also note, since getDirectoryName eliminates slash redundancies, some additional - // work may be required if removal of this limitation is attempted. - if (!findPath) { - return "continue"; - } - var patternRegex = im._legacyFindFiles_convertPatternToRegExp(pattern); - // find files/directories - var items = find(findPath, { followSymbolicLinks: true }) - .filter(function (item) { - if (includeFiles && includeDirectories) { - return true; - } - var isDir = fs.statSync(item).isDirectory(); - return (includeFiles && !isDir) || (includeDirectories && isDir); - }) - .forEach(function (item) { - var normalizedPath = process.platform == 'win32' ? item.replace(/\\/g, '/') : item; // normalize separators - // **/times/** will not match C:/fun/times because there isn't a trailing slash - // so try both if including directories - var alternatePath = normalizedPath + "/"; // potential bug: it looks like this will result in a false - // positive if the item is a regular file and not a directory - var isMatch = false; - if (patternRegex.test(normalizedPath) || (includeDirectories && patternRegex.test(alternatePath))) { - isMatch = true; - // test whether the path should be excluded - for (var _i = 0, excludePatterns_2 = excludePatterns; _i < excludePatterns_2.length; _i++) { - var regex = excludePatterns_2[_i]; - if (regex.test(normalizedPath) || (includeDirectories && regex.test(alternatePath))) { - isMatch = false; - break; - } - } - } - if (isMatch) { - allFiles[item] = item; - } - }); - }; - for (var _b = 0, includePatterns_2 = includePatterns; _b < includePatterns_2.length; _b++) { - var pattern = includePatterns_2[_b]; - _loop_2(pattern); - } - return Object.keys(allFiles).sort(); -} -/** - * Remove a path recursively with force - * - * @param inputPath path to remove - * @throws when the file or directory exists but could not be deleted. - */ -function rmRF(inputPath) { - exports.debug('rm -rf ' + inputPath); - if (getPlatform() == Platform.Windows) { - // Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another - // program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del. - try { - if (fs.statSync(inputPath).isDirectory()) { - exports.debug('removing directory ' + inputPath); - childProcess.execSync("rd /s /q \"" + inputPath + "\""); - } - else { - exports.debug('removing file ' + inputPath); - childProcess.execSync("del /f /a \"" + inputPath + "\""); - } - } - catch (err) { - // if you try to delete a file that doesn't exist, desired result is achieved - // other errors are valid - if (err.code != 'ENOENT') { - throw new Error(exports.loc('LIB_OperationFailed', 'rmRF', err.message)); - } - } - // Shelling out fails to remove a symlink folder with missing source, this unlink catches that - try { - fs.unlinkSync(inputPath); - } - catch (err) { - // if you try to delete a file that doesn't exist, desired result is achieved - // other errors are valid - if (err.code != 'ENOENT') { - throw new Error(exports.loc('LIB_OperationFailed', 'rmRF', err.message)); - } - } - } - else { - // get the lstats in order to workaround a bug in shelljs@0.3.0 where symlinks - // with missing targets are not handled correctly by "rm('-rf', path)" - var lstats = void 0; - try { - lstats = fs.lstatSync(inputPath); - } - catch (err) { - // if you try to delete a file that doesn't exist, desired result is achieved - // other errors are valid - if (err.code == 'ENOENT') { - return; - } - throw new Error(exports.loc('LIB_OperationFailed', 'rmRF', err.message)); - } - if (lstats.isDirectory()) { - exports.debug('removing directory'); - shell.rm('-rf', inputPath); - var errMsg = shell.error(); - if (errMsg) { - throw new Error(exports.loc('LIB_OperationFailed', 'rmRF', errMsg)); - } - return; - } - exports.debug('removing file'); - try { - fs.unlinkSync(inputPath); - } - catch (err) { - throw new Error(exports.loc('LIB_OperationFailed', 'rmRF', err.message)); - } - } -} -exports.rmRF = rmRF; -/** - * Exec a tool. Convenience wrapper over ToolRunner to exec with args in one call. - * Output will be streamed to the live console. - * Returns promise with return code - * - * @param tool path to tool to exec - * @param args an arg string or array of args - * @param options optional exec options. See IExecOptions - * @returns number - */ -function exec(tool, args, options) { - var tr = this.tool(tool); - tr.on('debug', function (data) { - exports.debug(data); - }); - if (args) { - if (args instanceof Array) { - tr.arg(args); - } - else if (typeof (args) === 'string') { - tr.line(args); - } - } - return tr.exec(options); -} -exports.exec = exec; -/** - * Exec a tool synchronously. Convenience wrapper over ToolRunner to execSync with args in one call. - * Output will be *not* be streamed to the live console. It will be returned after execution is complete. - * Appropriate for short running tools - * Returns IExecResult with output and return code - * - * @param tool path to tool to exec - * @param args an arg string or array of args - * @param options optional exec options. See IExecSyncOptions - * @returns IExecSyncResult - */ -function execSync(tool, args, options) { - var tr = this.tool(tool); - tr.on('debug', function (data) { - exports.debug(data); - }); - if (args) { - if (args instanceof Array) { - tr.arg(args); - } - else if (typeof (args) === 'string') { - tr.line(args); - } - } - return tr.execSync(options); -} -exports.execSync = execSync; -/** - * Convenience factory to create a ToolRunner. - * - * @param tool path to tool to exec - * @returns ToolRunner - */ -function tool(tool) { - var tr = new trm.ToolRunner(tool); - tr.on('debug', function (message) { - exports.debug(message); - }); - return tr; -} -exports.tool = tool; -/** - * Applies glob patterns to a list of paths. Supports interleaved exclude patterns. - * - * @param list array of paths - * @param patterns patterns to apply. supports interleaved exclude patterns. - * @param patternRoot optional. default root to apply to unrooted patterns. not applied to basename-only patterns when matchBase:true. - * @param options optional. defaults to { dot: true, nobrace: true, nocase: process.platform == 'win32' }. - */ -function match(list, patterns, patternRoot, options) { - // trace parameters - exports.debug("patternRoot: '" + patternRoot + "'"); - options = options || _getDefaultMatchOptions(); // default match options - _debugMatchOptions(options); - // convert pattern to an array - if (typeof patterns == 'string') { - patterns = [patterns]; - } - // hashtable to keep track of matches - var map = {}; - var originalOptions = options; - for (var _i = 0, patterns_1 = patterns; _i < patterns_1.length; _i++) { - var pattern = patterns_1[_i]; - exports.debug("pattern: '" + pattern + "'"); - // trim and skip empty - pattern = (pattern || '').trim(); - if (!pattern) { - exports.debug('skipping empty pattern'); - continue; - } - // clone match options - var options_1 = im._cloneMatchOptions(originalOptions); - // skip comments - if (!options_1.nocomment && im._startsWith(pattern, '#')) { - exports.debug('skipping comment'); - continue; - } - // set nocomment - brace expansion could result in a leading '#' - options_1.nocomment = true; - // determine whether pattern is include or exclude - var negateCount = 0; - if (!options_1.nonegate) { - while (pattern.charAt(negateCount) == '!') { - negateCount++; - } - pattern = pattern.substring(negateCount); // trim leading '!' - if (negateCount) { - exports.debug("trimmed leading '!'. pattern: '" + pattern + "'"); - } - } - var isIncludePattern = negateCount == 0 || - (negateCount % 2 == 0 && !options_1.flipNegate) || - (negateCount % 2 == 1 && options_1.flipNegate); - // set nonegate - brace expansion could result in a leading '!' - options_1.nonegate = true; - options_1.flipNegate = false; - // expand braces - required to accurately root patterns - var expanded = void 0; - var preExpanded = pattern; - if (options_1.nobrace) { - expanded = [pattern]; - } - else { - // convert slashes on Windows before calling braceExpand(). unfortunately this means braces cannot - // be escaped on Windows, this limitation is consistent with current limitations of minimatch (3.0.3). - exports.debug('expanding braces'); - var convertedPattern = process.platform == 'win32' ? pattern.replace(/\\/g, '/') : pattern; - expanded = minimatch.braceExpand(convertedPattern); - } - // set nobrace - options_1.nobrace = true; - for (var _a = 0, expanded_1 = expanded; _a < expanded_1.length; _a++) { - var pattern_1 = expanded_1[_a]; - if (expanded.length != 1 || pattern_1 != preExpanded) { - exports.debug("pattern: '" + pattern_1 + "'"); - } - // trim and skip empty - pattern_1 = (pattern_1 || '').trim(); - if (!pattern_1) { - exports.debug('skipping empty pattern'); - continue; - } - // root the pattern when all of the following conditions are true: - if (patternRoot && // patternRoot supplied - !im._isRooted(pattern_1) && // AND pattern not rooted - // AND matchBase:false or not basename only - (!options_1.matchBase || (process.platform == 'win32' ? pattern_1.replace(/\\/g, '/') : pattern_1).indexOf('/') >= 0)) { - pattern_1 = im._ensureRooted(patternRoot, pattern_1); - exports.debug("rooted pattern: '" + pattern_1 + "'"); - } - if (isIncludePattern) { - // apply the pattern - exports.debug('applying include pattern against original list'); - var matchResults = minimatch.match(list, pattern_1, options_1); - exports.debug(matchResults.length + ' matches'); - // union the results - for (var _b = 0, matchResults_1 = matchResults; _b < matchResults_1.length; _b++) { - var matchResult = matchResults_1[_b]; - map[matchResult] = true; - } - } - else { - // apply the pattern - exports.debug('applying exclude pattern against original list'); - var matchResults = minimatch.match(list, pattern_1, options_1); - exports.debug(matchResults.length + ' matches'); - // substract the results - for (var _c = 0, matchResults_2 = matchResults; _c < matchResults_2.length; _c++) { - var matchResult = matchResults_2[_c]; - delete map[matchResult]; - } - } - } - } - // return a filtered version of the original list (preserves order and prevents duplication) - var result = list.filter(function (item) { return map.hasOwnProperty(item); }); - exports.debug(result.length + ' final results'); - return result; -} -exports.match = match; -/** - * Filter to apply glob patterns - * - * @param pattern pattern to apply - * @param options optional. defaults to { dot: true, nobrace: true, nocase: process.platform == 'win32' }. - */ -function filter(pattern, options) { - options = options || _getDefaultMatchOptions(); - return minimatch.filter(pattern, options); -} -exports.filter = filter; -function _debugMatchOptions(options) { - exports.debug("matchOptions.debug: '" + options.debug + "'"); - exports.debug("matchOptions.nobrace: '" + options.nobrace + "'"); - exports.debug("matchOptions.noglobstar: '" + options.noglobstar + "'"); - exports.debug("matchOptions.dot: '" + options.dot + "'"); - exports.debug("matchOptions.noext: '" + options.noext + "'"); - exports.debug("matchOptions.nocase: '" + options.nocase + "'"); - exports.debug("matchOptions.nonull: '" + options.nonull + "'"); - exports.debug("matchOptions.matchBase: '" + options.matchBase + "'"); - exports.debug("matchOptions.nocomment: '" + options.nocomment + "'"); - exports.debug("matchOptions.nonegate: '" + options.nonegate + "'"); - exports.debug("matchOptions.flipNegate: '" + options.flipNegate + "'"); -} -function _getDefaultMatchOptions() { - return { - debug: false, - nobrace: true, - noglobstar: false, - dot: true, - noext: false, - nocase: process.platform == 'win32', - nonull: false, - matchBase: false, - nocomment: false, - nonegate: false, - flipNegate: false - }; -} -/** - * Determines the find root from a list of patterns. Performs the find and then applies the glob patterns. - * Supports interleaved exclude patterns. Unrooted patterns are rooted using defaultRoot, unless - * matchOptions.matchBase is specified and the pattern is a basename only. For matchBase cases, the - * defaultRoot is used as the find root. - * - * @param defaultRoot default path to root unrooted patterns. falls back to System.DefaultWorkingDirectory or process.cwd(). - * @param patterns pattern or array of patterns to apply - * @param findOptions defaults to { followSymbolicLinks: true }. following soft links is generally appropriate unless deleting files. - * @param matchOptions defaults to { dot: true, nobrace: true, nocase: process.platform == 'win32' } - */ -function findMatch(defaultRoot, patterns, findOptions, matchOptions) { - // apply defaults for parameters and trace - defaultRoot = defaultRoot || this.getVariable('system.defaultWorkingDirectory') || process.cwd(); - exports.debug("defaultRoot: '" + defaultRoot + "'"); - patterns = patterns || []; - patterns = typeof patterns == 'string' ? [patterns] : patterns; - findOptions = findOptions || _getDefaultFindOptions(); - _debugFindOptions(findOptions); - matchOptions = matchOptions || _getDefaultMatchOptions(); - _debugMatchOptions(matchOptions); - // normalize slashes for root dir - defaultRoot = im._normalizeSeparators(defaultRoot); - var results = {}; - var originalMatchOptions = matchOptions; - for (var _i = 0, _a = (patterns || []); _i < _a.length; _i++) { - var pattern = _a[_i]; - exports.debug("pattern: '" + pattern + "'"); - // trim and skip empty - pattern = (pattern || '').trim(); - if (!pattern) { - exports.debug('skipping empty pattern'); - continue; - } - // clone match options - var matchOptions_1 = im._cloneMatchOptions(originalMatchOptions); - // skip comments - if (!matchOptions_1.nocomment && im._startsWith(pattern, '#')) { - exports.debug('skipping comment'); - continue; - } - // set nocomment - brace expansion could result in a leading '#' - matchOptions_1.nocomment = true; - // determine whether pattern is include or exclude - var negateCount = 0; - if (!matchOptions_1.nonegate) { - while (pattern.charAt(negateCount) == '!') { - negateCount++; - } - pattern = pattern.substring(negateCount); // trim leading '!' - if (negateCount) { - exports.debug("trimmed leading '!'. pattern: '" + pattern + "'"); - } - } - var isIncludePattern = negateCount == 0 || - (negateCount % 2 == 0 && !matchOptions_1.flipNegate) || - (negateCount % 2 == 1 && matchOptions_1.flipNegate); - // set nonegate - brace expansion could result in a leading '!' - matchOptions_1.nonegate = true; - matchOptions_1.flipNegate = false; - // expand braces - required to accurately interpret findPath - var expanded = void 0; - var preExpanded = pattern; - if (matchOptions_1.nobrace) { - expanded = [pattern]; - } - else { - // convert slashes on Windows before calling braceExpand(). unfortunately this means braces cannot - // be escaped on Windows, this limitation is consistent with current limitations of minimatch (3.0.3). - exports.debug('expanding braces'); - var convertedPattern = process.platform == 'win32' ? pattern.replace(/\\/g, '/') : pattern; - expanded = minimatch.braceExpand(convertedPattern); - } - // set nobrace - matchOptions_1.nobrace = true; - for (var _b = 0, expanded_2 = expanded; _b < expanded_2.length; _b++) { - var pattern_2 = expanded_2[_b]; - if (expanded.length != 1 || pattern_2 != preExpanded) { - exports.debug("pattern: '" + pattern_2 + "'"); - } - // trim and skip empty - pattern_2 = (pattern_2 || '').trim(); - if (!pattern_2) { - exports.debug('skipping empty pattern'); - continue; - } - if (isIncludePattern) { - // determine the findPath - var findInfo = im._getFindInfoFromPattern(defaultRoot, pattern_2, matchOptions_1); - var findPath = findInfo.findPath; - exports.debug("findPath: '" + findPath + "'"); - if (!findPath) { - exports.debug('skipping empty path'); - continue; - } - // perform the find - exports.debug("statOnly: '" + findInfo.statOnly + "'"); - var findResults = []; - if (findInfo.statOnly) { - // simply stat the path - all path segments were used to build the path - try { - fs.statSync(findPath); - findResults.push(findPath); - } - catch (err) { - if (err.code != 'ENOENT') { - throw err; - } - exports.debug('ENOENT'); - } - } - else { - findResults = find(findPath, findOptions); - } - exports.debug("found " + findResults.length + " paths"); - // apply the pattern - exports.debug('applying include pattern'); - if (findInfo.adjustedPattern != pattern_2) { - exports.debug("adjustedPattern: '" + findInfo.adjustedPattern + "'"); - pattern_2 = findInfo.adjustedPattern; - } - var matchResults = minimatch.match(findResults, pattern_2, matchOptions_1); - exports.debug(matchResults.length + ' matches'); - // union the results - for (var _c = 0, matchResults_3 = matchResults; _c < matchResults_3.length; _c++) { - var matchResult = matchResults_3[_c]; - var key = process.platform == 'win32' ? matchResult.toUpperCase() : matchResult; - results[key] = matchResult; - } - } - else { - // check if basename only and matchBase=true - if (matchOptions_1.matchBase && - !im._isRooted(pattern_2) && - (process.platform == 'win32' ? pattern_2.replace(/\\/g, '/') : pattern_2).indexOf('/') < 0) { - // do not root the pattern - exports.debug('matchBase and basename only'); - } - else { - // root the exclude pattern - pattern_2 = im._ensurePatternRooted(defaultRoot, pattern_2); - exports.debug("after ensurePatternRooted, pattern: '" + pattern_2 + "'"); - } - // apply the pattern - exports.debug('applying exclude pattern'); - var matchResults = minimatch.match(Object.keys(results).map(function (key) { return results[key]; }), pattern_2, matchOptions_1); - exports.debug(matchResults.length + ' matches'); - // substract the results - for (var _d = 0, matchResults_4 = matchResults; _d < matchResults_4.length; _d++) { - var matchResult = matchResults_4[_d]; - var key = process.platform == 'win32' ? matchResult.toUpperCase() : matchResult; - delete results[key]; - } - } - } - } - var finalResult = Object.keys(results) - .map(function (key) { return results[key]; }) - .sort(); - exports.debug(finalResult.length + ' final results'); - return finalResult; -} -exports.findMatch = findMatch; -/** - * Build Proxy URL in the following format: protocol://username:password@hostname:port - * @param proxyUrl Url address of the proxy server (eg: http://example.com) - * @param proxyUsername Proxy username (optional) - * @param proxyPassword Proxy password (optional) - * @returns string - */ -function getProxyFormattedUrl(proxyUrl, proxyUsername, proxyPassword) { - var parsedUrl = new URL(proxyUrl); - var proxyAddress = parsedUrl.protocol + "//" + parsedUrl.host; - if (proxyUsername) { - proxyAddress = parsedUrl.protocol + "//" + proxyUsername + ":" + proxyPassword + "@" + parsedUrl.host; - } - return proxyAddress; -} -/** - * Gets http proxy configuration used by Build/Release agent - * - * @return ProxyConfiguration - */ -function getHttpProxyConfiguration(requestUrl) { - var proxyUrl = exports.getVariable('Agent.ProxyUrl'); - if (proxyUrl && proxyUrl.length > 0) { - var proxyUsername = exports.getVariable('Agent.ProxyUsername'); - var proxyPassword = exports.getVariable('Agent.ProxyPassword'); - var proxyBypassHosts = JSON.parse(exports.getVariable('Agent.ProxyBypassList') || '[]'); - var bypass_1 = false; - if (requestUrl) { - proxyBypassHosts.forEach(function (bypassHost) { - if (new RegExp(bypassHost, 'i').test(requestUrl)) { - bypass_1 = true; - } - }); - } - if (bypass_1) { - return null; - } - else { - var proxyAddress = getProxyFormattedUrl(proxyUrl, proxyUsername, proxyPassword); - return { - proxyUrl: proxyUrl, - proxyUsername: proxyUsername, - proxyPassword: proxyPassword, - proxyBypassHosts: proxyBypassHosts, - proxyFormattedUrl: proxyAddress - }; - } - } - else { - return null; - } -} -exports.getHttpProxyConfiguration = getHttpProxyConfiguration; -/** - * Gets http certificate configuration used by Build/Release agent - * - * @return CertConfiguration - */ -function getHttpCertConfiguration() { - var ca = exports.getVariable('Agent.CAInfo'); - var clientCert = exports.getVariable('Agent.ClientCert'); - if (ca || clientCert) { - var certConfig = {}; - certConfig.caFile = ca; - certConfig.certFile = clientCert; - if (clientCert) { - var clientCertKey = exports.getVariable('Agent.ClientCertKey'); - var clientCertArchive = exports.getVariable('Agent.ClientCertArchive'); - var clientCertPassword = exports.getVariable('Agent.ClientCertPassword'); - certConfig.keyFile = clientCertKey; - certConfig.certArchiveFile = clientCertArchive; - certConfig.passphrase = clientCertPassword; - } - return certConfig; - } - else { - return null; - } -} -exports.getHttpCertConfiguration = getHttpCertConfiguration; -//----------------------------------------------------- -// Test Publisher -//----------------------------------------------------- -var TestPublisher = /** @class */ (function () { - function TestPublisher(testRunner) { - this.testRunner = testRunner; - } - TestPublisher.prototype.publish = function (resultFiles, mergeResults, platform, config, runTitle, publishRunAttachments, testRunSystem) { - // Could have used an initializer, but wanted to avoid reordering parameters when converting to strict null checks - // (A parameter cannot both be optional and have an initializer) - testRunSystem = testRunSystem || "VSTSTask"; - var properties = {}; - properties['type'] = this.testRunner; - if (mergeResults) { - properties['mergeResults'] = mergeResults; - } - if (platform) { - properties['platform'] = platform; - } - if (config) { - properties['config'] = config; - } - if (runTitle) { - properties['runTitle'] = runTitle; - } - if (publishRunAttachments) { - properties['publishRunAttachments'] = publishRunAttachments; - } - if (resultFiles) { - properties['resultFiles'] = Array.isArray(resultFiles) ? resultFiles.join() : resultFiles; - } - properties['testRunSystem'] = testRunSystem; - exports.command('results.publish', properties, ''); - }; - return TestPublisher; -}()); -exports.TestPublisher = TestPublisher; -//----------------------------------------------------- -// Code coverage Publisher -//----------------------------------------------------- -var CodeCoveragePublisher = /** @class */ (function () { - function CodeCoveragePublisher() { - } - CodeCoveragePublisher.prototype.publish = function (codeCoverageTool, summaryFileLocation, reportDirectory, additionalCodeCoverageFiles) { - var properties = {}; - if (codeCoverageTool) { - properties['codecoveragetool'] = codeCoverageTool; - } - if (summaryFileLocation) { - properties['summaryfile'] = summaryFileLocation; - } - if (reportDirectory) { - properties['reportdirectory'] = reportDirectory; - } - if (additionalCodeCoverageFiles) { - properties['additionalcodecoveragefiles'] = Array.isArray(additionalCodeCoverageFiles) ? additionalCodeCoverageFiles.join() : additionalCodeCoverageFiles; - } - exports.command('codecoverage.publish', properties, ""); - }; - return CodeCoveragePublisher; -}()); -exports.CodeCoveragePublisher = CodeCoveragePublisher; -//----------------------------------------------------- -// Code coverage Publisher -//----------------------------------------------------- -var CodeCoverageEnabler = /** @class */ (function () { - function CodeCoverageEnabler(buildTool, ccTool) { - this.buildTool = buildTool; - this.ccTool = ccTool; - } - CodeCoverageEnabler.prototype.enableCodeCoverage = function (buildProps) { - buildProps['buildtool'] = this.buildTool; - buildProps['codecoveragetool'] = this.ccTool; - exports.command('codecoverage.enable', buildProps, ""); - }; - return CodeCoverageEnabler; -}()); -exports.CodeCoverageEnabler = CodeCoverageEnabler; -//----------------------------------------------------- -// Task Logging Commands -//----------------------------------------------------- -/** - * Upload user interested file as additional log information - * to the current timeline record. - * - * The file shall be available for download along with task logs. - * - * @param path Path to the file that should be uploaded. - * @returns void - */ -function uploadFile(path) { - exports.command("task.uploadfile", null, path); -} -exports.uploadFile = uploadFile; -/** - * Instruction for the agent to update the PATH environment variable. - * The specified directory is prepended to the PATH. - * The updated environment variable will be reflected in subsequent tasks. - * - * @param path Local directory path. - * @returns void - */ -function prependPath(path) { - assertAgent("2.115.0"); - exports.command("task.prependpath", null, path); -} -exports.prependPath = prependPath; -/** - * Upload and attach summary markdown to current timeline record. - * This summary shall be added to the build/release summary and - * not available for download with logs. - * - * @param path Local directory path. - * @returns void - */ -function uploadSummary(path) { - exports.command("task.uploadsummary", null, path); -} -exports.uploadSummary = uploadSummary; -/** - * Upload and attach attachment to current timeline record. - * These files are not available for download with logs. - * These can only be referred to by extensions using the type or name values. - * - * @param type Attachment type. - * @param name Attachment name. - * @param path Attachment path. - * @returns void - */ -function addAttachment(type, name, path) { - exports.command("task.addattachment", { "type": type, "name": name }, path); -} -exports.addAttachment = addAttachment; -/** - * Set an endpoint field with given value. - * Value updated will be retained in the endpoint for - * the subsequent tasks that execute within the same job. - * - * @param id Endpoint id. - * @param field FieldType enum of AuthParameter, DataParameter or Url. - * @param key Key. - * @param value Value for key or url. - * @returns void - */ -function setEndpoint(id, field, key, value) { - exports.command("task.setendpoint", { "id": id, "field": FieldType[field].toLowerCase(), "key": key }, value); -} -exports.setEndpoint = setEndpoint; -/** - * Set progress and current operation for current task. - * - * @param percent Percentage of completion. - * @param currentOperation Current pperation. - * @returns void - */ -function setProgress(percent, currentOperation) { - exports.command("task.setprogress", { "value": "" + percent }, currentOperation); -} -exports.setProgress = setProgress; -/** - * Indicates whether to write the logging command directly to the host or to the output pipeline. - * - * @param id Timeline record Guid. - * @param parentId Parent timeline record Guid. - * @param recordType Record type. - * @param recordName Record name. - * @param order Order of timeline record. - * @param startTime Start time. - * @param finishTime End time. - * @param progress Percentage of completion. - * @param state TaskState enum of Unknown, Initialized, InProgress or Completed. - * @param result TaskResult enum of Succeeded, SucceededWithIssues, Failed, Cancelled or Skipped. - * @param message current operation - * @returns void - */ -function logDetail(id, message, parentId, recordType, recordName, order, startTime, finishTime, progress, state, result) { - var properties = { - "id": id, - "parentid": parentId, - "type": recordType, - "name": recordName, - "order": order ? order.toString() : undefined, - "starttime": startTime, - "finishtime": finishTime, - "progress": progress ? progress.toString() : undefined, - "state": state ? TaskState[state] : undefined, - "result": result ? TaskResult[result] : undefined - }; - exports.command("task.logdetail", properties, message); -} -exports.logDetail = logDetail; -/** - * Log error or warning issue to timeline record of current task. - * - * @param type IssueType enum of Error or Warning. - * @param sourcePath Source file location. - * @param lineNumber Line number. - * @param columnNumber Column number. - * @param code Error or warning code. - * @param message Error or warning message. - * @returns void - */ -function logIssue(type, message, sourcePath, lineNumber, columnNumber, errorCode) { - var properties = { - "type": IssueType[type].toLowerCase(), - "code": errorCode, - "sourcepath": sourcePath, - "linenumber": lineNumber ? lineNumber.toString() : undefined, - "columnnumber": columnNumber ? columnNumber.toString() : undefined, - }; - exports.command("task.logissue", properties, message); -} -exports.logIssue = logIssue; -//----------------------------------------------------- -// Artifact Logging Commands -//----------------------------------------------------- -/** - * Upload user interested file as additional log information - * to the current timeline record. - * - * The file shall be available for download along with task logs. - * - * @param containerFolder Folder that the file will upload to, folder will be created if needed. - * @param path Path to the file that should be uploaded. - * @param name Artifact name. - * @returns void - */ -function uploadArtifact(containerFolder, path, name) { - exports.command("artifact.upload", { "containerfolder": containerFolder, "artifactname": name }, path); -} -exports.uploadArtifact = uploadArtifact; -/** - * Create an artifact link, artifact location is required to be - * a file container path, VC path or UNC share path. - * - * The file shall be available for download along with task logs. - * - * @param name Artifact name. - * @param path Path to the file that should be associated. - * @param artifactType ArtifactType enum of Container, FilePath, VersionControl, GitRef or TfvcLabel. - * @returns void - */ -function associateArtifact(name, path, artifactType) { - exports.command("artifact.associate", { "type": ArtifactType[artifactType].toLowerCase(), "artifactname": name }, path); -} -exports.associateArtifact = associateArtifact; -//----------------------------------------------------- -// Build Logging Commands -//----------------------------------------------------- -/** - * Upload user interested log to build’s container “logs\tool” folder. - * - * @param path Path to the file that should be uploaded. - * @returns void - */ -function uploadBuildLog(path) { - exports.command("build.uploadlog", null, path); -} -exports.uploadBuildLog = uploadBuildLog; -/** - * Update build number for current build. - * - * @param value Value to be assigned as the build number. - * @returns void - */ -function updateBuildNumber(value) { - exports.command("build.updatebuildnumber", null, value); -} -exports.updateBuildNumber = updateBuildNumber; -/** - * Add a tag for current build. - * - * @param value Tag value. - * @returns void - */ -function addBuildTag(value) { - exports.command("build.addbuildtag", null, value); -} -exports.addBuildTag = addBuildTag; -//----------------------------------------------------- -// Release Logging Commands -//----------------------------------------------------- -/** - * Update release name for current release. - * - * @param value Value to be assigned as the release name. - * @returns void - */ -function updateReleaseName(name) { - assertAgent("2.132.0"); - exports.command("release.updatereleasename", null, name); -} -exports.updateReleaseName = updateReleaseName; -//----------------------------------------------------- -// Tools -//----------------------------------------------------- -exports.TaskCommand = tcm.TaskCommand; -exports.commandFromString = tcm.commandFromString; -exports.ToolRunner = trm.ToolRunner; -//----------------------------------------------------- -// Validation Checks -//----------------------------------------------------- -// async await needs generators in node 4.x+ -if (semver.lt(process.versions.node, '4.2.0')) { - exports.warning('Tasks require a new agent. Upgrade your agent or node to 4.2.0 or later'); -} -//------------------------------------------------------------------- -// Populate the vault with sensitive data. Inputs and Endpoints -//------------------------------------------------------------------- -// avoid loading twice (overwrites .taskkey) -if (!global['_vsts_task_lib_loaded']) { - im._loadData(); - im._exposeProxySettings(); - im._exposeCertSettings(); -} - - -/***/ }), - -/***/ 1964: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.commandFromString = exports.TaskCommand = void 0; -// -// Command Format: -// ##vso[artifact.command key=value;key=value]user message -// -// Examples: -// ##vso[task.progress value=58] -// ##vso[task.issue type=warning;]This is the user warning message -// -var CMD_PREFIX = '##vso['; -var TaskCommand = /** @class */ (function () { - function TaskCommand(command, properties, message) { - if (!command) { - command = 'missing.command'; - } - this.command = command; - this.properties = properties; - this.message = message; - } - TaskCommand.prototype.toString = function () { - var cmdStr = CMD_PREFIX + this.command; - if (this.properties && Object.keys(this.properties).length > 0) { - cmdStr += ' '; - for (var key in this.properties) { - if (this.properties.hasOwnProperty(key)) { - var val = this.properties[key]; - if (val) { - // safely append the val - avoid blowing up when attempting to - // call .replace() if message is not a string for some reason - cmdStr += key + '=' + escape('' + (val || '')) + ';'; - } - } - } - } - cmdStr += ']'; - // safely append the message - avoid blowing up when attempting to - // call .replace() if message is not a string for some reason - var message = '' + (this.message || ''); - cmdStr += escapedata(message); - return cmdStr; - }; - return TaskCommand; -}()); -exports.TaskCommand = TaskCommand; -function commandFromString(commandLine) { - var preLen = CMD_PREFIX.length; - var lbPos = commandLine.indexOf('['); - var rbPos = commandLine.indexOf(']'); - if (lbPos == -1 || rbPos == -1 || rbPos - lbPos < 3) { - throw new Error('Invalid command brackets'); - } - var cmdInfo = commandLine.substring(lbPos + 1, rbPos); - var spaceIdx = cmdInfo.indexOf(' '); - var command = cmdInfo; - var properties = {}; - if (spaceIdx > 0) { - command = cmdInfo.trim().substring(0, spaceIdx); - var propSection = cmdInfo.trim().substring(spaceIdx + 1); - var propLines = propSection.split(';'); - propLines.forEach(function (propLine) { - propLine = propLine.trim(); - if (propLine.length > 0) { - var eqIndex = propLine.indexOf('='); - if (eqIndex == -1) { - throw new Error('Invalid property: ' + propLine); - } - var key = propLine.substring(0, eqIndex); - var val = propLine.substring(eqIndex + 1); - properties[key] = unescape(val); - } - }); - } - var msg = unescapedata(commandLine.substring(rbPos + 1)); - var cmd = new TaskCommand(command, properties, msg); - return cmd; -} -exports.commandFromString = commandFromString; -function escapedata(s) { - return s.replace(/%/g, '%AZP25') - .replace(/\r/g, '%0D') - .replace(/\n/g, '%0A'); -} -function unescapedata(s) { - return s.replace(/%0D/g, '\r') - .replace(/%0A/g, '\n') - .replace(/%AZP25/g, '%'); -} -function escape(s) { - return s.replace(/%/g, '%AZP25') - .replace(/\r/g, '%0D') - .replace(/\n/g, '%0A') - .replace(/]/g, '%5D') - .replace(/;/g, '%3B'); -} -function unescape(s) { - return s.replace(/%0D/g, '\r') - .replace(/%0A/g, '\n') - .replace(/%5D/g, ']') - .replace(/%3B/g, ';') - .replace(/%AZP25/g, '%'); -} - - -/***/ }), - -/***/ 6588: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.ToolRunner = void 0; -var Q = __nccwpck_require__(6172); -var os = __nccwpck_require__(2037); -var events = __nccwpck_require__(2361); -var child = __nccwpck_require__(2081); -var im = __nccwpck_require__(4473); -var fs = __nccwpck_require__(7147); -var ToolRunner = /** @class */ (function (_super) { - __extends(ToolRunner, _super); - function ToolRunner(toolPath) { - var _this = _super.call(this) || this; - _this.cmdSpecialChars = [' ', '\t', '&', '(', ')', '[', ']', '{', '}', '^', '=', ';', '!', '\'', '+', ',', '`', '~', '|', '<', '>', '"']; - if (!toolPath) { - throw new Error('Parameter \'toolPath\' cannot be null or empty.'); - } - _this.toolPath = im._which(toolPath, true); - _this.args = []; - _this._debug('toolRunner toolPath: ' + toolPath); - return _this; - } - ToolRunner.prototype._debug = function (message) { - this.emit('debug', message); - }; - ToolRunner.prototype._argStringToArray = function (argString) { - var args = []; - var inQuotes = false; - var escaped = false; - var lastCharWasSpace = true; - var arg = ''; - var append = function (c) { - // we only escape double quotes. - if (escaped) { - if (c !== '"') { - arg += '\\'; - } - else { - arg.slice(0, -1); - } - } - arg += c; - escaped = false; - }; - for (var i = 0; i < argString.length; i++) { - var c = argString.charAt(i); - if (c === ' ' && !inQuotes) { - if (!lastCharWasSpace) { - args.push(arg); - arg = ''; - } - lastCharWasSpace = true; - continue; - } - else { - lastCharWasSpace = false; - } - if (c === '"') { - if (!escaped) { - inQuotes = !inQuotes; - } - else { - append(c); - } - continue; - } - if (c === "\\" && escaped) { - append(c); - continue; - } - if (c === "\\" && inQuotes) { - escaped = true; - continue; - } - append(c); - lastCharWasSpace = false; - } - if (!lastCharWasSpace) { - args.push(arg.trim()); - } - return args; - }; - ToolRunner.prototype._getCommandString = function (options, noPrefix) { - var _this = this; - var toolPath = this._getSpawnFileName(); - var args = this._getSpawnArgs(options); - var cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool - var commandParts = []; - if (process.platform == 'win32') { - // Windows + cmd file - if (this._isCmdFile()) { - commandParts.push(toolPath); - commandParts = commandParts.concat(args); - } - // Windows + verbatim - else if (options.windowsVerbatimArguments) { - commandParts.push("\"" + toolPath + "\""); - commandParts = commandParts.concat(args); - } - else if (options.shell) { - commandParts.push(this._windowsQuoteCmdArg(toolPath)); - commandParts = commandParts.concat(args); - } - // Windows (regular) - else { - commandParts.push(this._windowsQuoteCmdArg(toolPath)); - commandParts = commandParts.concat(args.map(function (arg) { return _this._windowsQuoteCmdArg(arg); })); - } - } - else { - // OSX/Linux - this can likely be improved with some form of quoting. - // creating processes on Unix is fundamentally different than Windows. - // on Unix, execvp() takes an arg array. - commandParts.push(toolPath); - commandParts = commandParts.concat(args); - } - cmd += commandParts.join(' '); - // append second tool - if (this.pipeOutputToTool) { - cmd += ' | ' + this.pipeOutputToTool._getCommandString(options, /*noPrefix:*/ true); - } - return cmd; - }; - ToolRunner.prototype._processLineBuffer = function (data, strBuffer, onLine) { - try { - var s = strBuffer + data.toString(); - var n = s.indexOf(os.EOL); - while (n > -1) { - var line = s.substring(0, n); - onLine(line); - // the rest of the string ... - s = s.substring(n + os.EOL.length); - n = s.indexOf(os.EOL); - } - strBuffer = s; - } - catch (err) { - // streaming lines to console is best effort. Don't fail a build. - this._debug('error processing line'); - } - }; - /** - * Wraps an arg string with specified char if it's not already wrapped - * @returns {string} Arg wrapped with specified char - * @param {string} arg Input argument string - * @param {string} wrapChar A char input string should be wrapped with - */ - ToolRunner.prototype._wrapArg = function (arg, wrapChar) { - if (!this._isWrapped(arg, wrapChar)) { - return "" + wrapChar + arg + wrapChar; - } - return arg; - }; - /** - * Unwraps an arg string wrapped with specified char - * @param arg Arg wrapped with specified char - * @param wrapChar A char to be removed - */ - ToolRunner.prototype._unwrapArg = function (arg, wrapChar) { - if (this._isWrapped(arg, wrapChar)) { - var pattern = new RegExp("(^\\\\?" + wrapChar + ")|(\\\\?" + wrapChar + "$)", 'g'); - return arg.trim().replace(pattern, ''); - } - return arg; - }; - /** - * Determine if arg string is wrapped with specified char - * @param arg Input arg string - */ - ToolRunner.prototype._isWrapped = function (arg, wrapChar) { - var pattern = new RegExp("^\\\\?" + wrapChar + ".+\\\\?" + wrapChar + "$"); - return pattern.test(arg.trim()); - }; - ToolRunner.prototype._getSpawnFileName = function (options) { - if (process.platform == 'win32') { - if (this._isCmdFile()) { - return process.env['COMSPEC'] || 'cmd.exe'; - } - } - if (options && options.shell) { - return this._wrapArg(this.toolPath, '"'); - } - return this.toolPath; - }; - ToolRunner.prototype._getSpawnArgs = function (options) { - var _this = this; - if (process.platform == 'win32') { - if (this._isCmdFile()) { - var argline = "/D /S /C \"" + this._windowsQuoteCmdArg(this.toolPath); - for (var i = 0; i < this.args.length; i++) { - argline += ' '; - argline += options.windowsVerbatimArguments ? this.args[i] : this._windowsQuoteCmdArg(this.args[i]); - } - argline += '"'; - return [argline]; - } - if (options.windowsVerbatimArguments) { - // note, in Node 6.x options.argv0 can be used instead of overriding args.slice and args.unshift. - // for more details, refer to https://github.com/nodejs/node/blob/v6.x/lib/child_process.js - var args_1 = this.args.slice(0); // copy the array - // override slice to prevent Node from creating a copy of the arg array. - // we need Node to use the "unshift" override below. - args_1.slice = function () { - if (arguments.length != 1 || arguments[0] != 0) { - throw new Error('Unexpected arguments passed to args.slice when windowsVerbatimArguments flag is set.'); - } - return args_1; - }; - // override unshift - // - // when using the windowsVerbatimArguments option, Node does not quote the tool path when building - // the cmdline parameter for the win32 function CreateProcess(). an unquoted space in the tool path - // causes problems for tools when attempting to parse their own command line args. tools typically - // assume their arguments begin after arg 0. - // - // by hijacking unshift, we can quote the tool path when it pushed onto the args array. Node builds - // the cmdline parameter from the args array. - // - // note, we can't simply pass a quoted tool path to Node for multiple reasons: - // 1) Node verifies the file exists (calls win32 function GetFileAttributesW) and the check returns - // false if the path is quoted. - // 2) Node passes the tool path as the application parameter to CreateProcess, which expects the - // path to be unquoted. - // - // also note, in addition to the tool path being embedded within the cmdline parameter, Node also - // passes the tool path to CreateProcess via the application parameter (optional parameter). when - // present, Windows uses the application parameter to determine which file to run, instead of - // interpreting the file from the cmdline parameter. - args_1.unshift = function () { - if (arguments.length != 1) { - throw new Error('Unexpected arguments passed to args.unshift when windowsVerbatimArguments flag is set.'); - } - return Array.prototype.unshift.call(args_1, "\"" + arguments[0] + "\""); // quote the file name - }; - return args_1; - } - else if (options.shell) { - var args = []; - for (var _i = 0, _a = this.args; _i < _a.length; _i++) { - var arg = _a[_i]; - if (this._needQuotesForCmd(arg, '%')) { - args.push(this._wrapArg(arg, '"')); - } - else { - args.push(arg); - } - } - return args; - } - } - else if (options.shell) { - return this.args.map(function (arg) { - if (_this._isWrapped(arg, "'")) { - return arg; - } - // remove wrapping double quotes to avoid escaping - arg = _this._unwrapArg(arg, '"'); - arg = _this._escapeChar(arg, '"'); - return _this._wrapArg(arg, '"'); - }); - } - return this.args; - }; - /** - * Escape specified character. - * @param arg String to escape char in - * @param charToEscape Char should be escaped - */ - ToolRunner.prototype._escapeChar = function (arg, charToEscape) { - var escChar = "\\"; - var output = ''; - var charIsEscaped = false; - for (var _i = 0, arg_1 = arg; _i < arg_1.length; _i++) { - var char = arg_1[_i]; - if (char === charToEscape && !charIsEscaped) { - output += escChar + char; - } - else { - output += char; - } - charIsEscaped = char === escChar && !charIsEscaped; - } - return output; - }; - ToolRunner.prototype._isCmdFile = function () { - var upperToolPath = this.toolPath.toUpperCase(); - return im._endsWith(upperToolPath, '.CMD') || im._endsWith(upperToolPath, '.BAT'); - }; - /** - * Determine whether the cmd arg needs to be quoted. Returns true if arg contains any of special chars array. - * @param arg The cmd command arg. - * @param additionalChars Additional chars which should be also checked. - */ - ToolRunner.prototype._needQuotesForCmd = function (arg, additionalChars) { - var specialChars = this.cmdSpecialChars; - if (additionalChars) { - specialChars = this.cmdSpecialChars.concat(additionalChars); - } - var _loop_1 = function (char) { - if (specialChars.some(function (x) { return x === char; })) { - return { value: true }; - } - }; - for (var _i = 0, arg_2 = arg; _i < arg_2.length; _i++) { - var char = arg_2[_i]; - var state_1 = _loop_1(char); - if (typeof state_1 === "object") - return state_1.value; - } - return false; - }; - ToolRunner.prototype._windowsQuoteCmdArg = function (arg) { - // for .exe, apply the normal quoting rules that libuv applies - if (!this._isCmdFile()) { - return this._uv_quote_cmd_arg(arg); - } - // otherwise apply quoting rules specific to the cmd.exe command line parser. - // the libuv rules are generic and are not designed specifically for cmd.exe - // command line parser. - // - // for a detailed description of the cmd.exe command line parser, refer to - // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912 - // need quotes for empty arg - if (!arg) { - return '""'; - } - // determine whether the arg needs to be quoted - var needsQuotes = this._needQuotesForCmd(arg); - // short-circuit if quotes not needed - if (!needsQuotes) { - return arg; - } - // the following quoting rules are very similar to the rules that by libuv applies. - // - // 1) wrap the string in quotes - // - // 2) double-up quotes - i.e. " => "" - // - // this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately - // doesn't work well with a cmd.exe command line. - // - // note, replacing " with "" also works well if the arg is passed to a downstream .NET console app. - // for example, the command line: - // foo.exe "myarg:""my val""" - // is parsed by a .NET console app into an arg array: - // [ "myarg:\"my val\"" ] - // which is the same end result when applying libuv quoting rules. although the actual - // command line from libuv quoting rules would look like: - // foo.exe "myarg:\"my val\"" - // - // 3) double-up slashes that preceed a quote, - // e.g. hello \world => "hello \world" - // hello\"world => "hello\\""world" - // hello\\"world => "hello\\\\""world" - // hello world\ => "hello world\\" - // - // technically this is not required for a cmd.exe command line, or the batch argument parser. - // the reasons for including this as a .cmd quoting rule are: - // - // a) this is optimized for the scenario where the argument is passed from the .cmd file to an - // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule. - // - // b) it's what we've been doing previously (by deferring to node default behavior) and we - // haven't heard any complaints about that aspect. - // - // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be - // escaped when used on the command line directly - even though within a .cmd file % can be escaped - // by using %%. - // - // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts - // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing. - // - // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would - // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the - // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args - // to an external program. - // - // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file. - // % can be escaped within a .cmd file. - var reverse = '"'; - var quote_hit = true; - for (var i = arg.length; i > 0; i--) { // walk the string in reverse - reverse += arg[i - 1]; - if (quote_hit && arg[i - 1] == '\\') { - reverse += '\\'; // double the slash - } - else if (arg[i - 1] == '"') { - quote_hit = true; - reverse += '"'; // double the quote - } - else { - quote_hit = false; - } - } - reverse += '"'; - return reverse.split('').reverse().join(''); - }; - ToolRunner.prototype._uv_quote_cmd_arg = function (arg) { - // Tool runner wraps child_process.spawn() and needs to apply the same quoting as - // Node in certain cases where the undocumented spawn option windowsVerbatimArguments - // is used. - // - // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV, - // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details), - // pasting copyright notice from Node within this function: - // - // Copyright Joyent, Inc. and other Node contributors. All rights reserved. - // - // Permission is hereby granted, free of charge, to any person obtaining a copy - // of this software and associated documentation files (the "Software"), to - // deal in the Software without restriction, including without limitation the - // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - // sell copies of the Software, and to permit persons to whom the Software is - // furnished to do so, subject to the following conditions: - // - // The above copyright notice and this permission notice shall be included in - // all copies or substantial portions of the Software. - // - // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - // IN THE SOFTWARE. - if (!arg) { - // Need double quotation for empty argument - return '""'; - } - if (arg.indexOf(' ') < 0 && arg.indexOf('\t') < 0 && arg.indexOf('"') < 0) { - // No quotation needed - return arg; - } - if (arg.indexOf('"') < 0 && arg.indexOf('\\') < 0) { - // No embedded double quotes or backslashes, so I can just wrap - // quote marks around the whole thing. - return "\"" + arg + "\""; - } - // Expected input/output: - // input : hello"world - // output: "hello\"world" - // input : hello""world - // output: "hello\"\"world" - // input : hello\world - // output: hello\world - // input : hello\\world - // output: hello\\world - // input : hello\"world - // output: "hello\\\"world" - // input : hello\\"world - // output: "hello\\\\\"world" - // input : hello world\ - // output: "hello world\\" - note the comment in libuv actually reads "hello world\" - // but it appears the comment is wrong, it should be "hello world\\" - var reverse = '"'; - var quote_hit = true; - for (var i = arg.length; i > 0; i--) { // walk the string in reverse - reverse += arg[i - 1]; - if (quote_hit && arg[i - 1] == '\\') { - reverse += '\\'; - } - else if (arg[i - 1] == '"') { - quote_hit = true; - reverse += '\\'; - } - else { - quote_hit = false; - } - } - reverse += '"'; - return reverse.split('').reverse().join(''); - }; - ToolRunner.prototype._cloneExecOptions = function (options) { - options = options || {}; - var result = { - cwd: options.cwd || process.cwd(), - env: options.env || process.env, - silent: options.silent || false, - failOnStdErr: options.failOnStdErr || false, - ignoreReturnCode: options.ignoreReturnCode || false, - windowsVerbatimArguments: options.windowsVerbatimArguments || false, - shell: options.shell || false - }; - result.outStream = options.outStream || process.stdout; - result.errStream = options.errStream || process.stderr; - return result; - }; - ToolRunner.prototype._getSpawnOptions = function (options) { - options = options || {}; - var result = {}; - result.cwd = options.cwd; - result.env = options.env; - result.shell = options.shell; - result['windowsVerbatimArguments'] = options.windowsVerbatimArguments || this._isCmdFile(); - return result; - }; - ToolRunner.prototype._getSpawnSyncOptions = function (options) { - var result = {}; - result.cwd = options.cwd; - result.env = options.env; - result.shell = options.shell; - result['windowsVerbatimArguments'] = options.windowsVerbatimArguments || this._isCmdFile(); - return result; - }; - ToolRunner.prototype.execWithPiping = function (pipeOutputToTool, options) { - var _this = this; - var _a, _b, _c, _d; - var defer = Q.defer(); - this._debug('exec tool: ' + this.toolPath); - this._debug('arguments:'); - this.args.forEach(function (arg) { - _this._debug(' ' + arg); - }); - var success = true; - var optionsNonNull = this._cloneExecOptions(options); - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL); - } - var cp; - var toolPath = pipeOutputToTool.toolPath; - var toolPathFirst; - var successFirst = true; - var returnCodeFirst; - var fileStream; - var waitingEvents = 0; // number of process or stream events we are waiting on to complete - var returnCode = 0; - var error; - toolPathFirst = this.toolPath; - // Following node documentation example from this link on how to pipe output of one process to another - // https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options - //start the child process for both tools - waitingEvents++; - var cpFirst = child.spawn(this._getSpawnFileName(optionsNonNull), this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(optionsNonNull)); - waitingEvents++; - cp = child.spawn(pipeOutputToTool._getSpawnFileName(optionsNonNull), pipeOutputToTool._getSpawnArgs(optionsNonNull), pipeOutputToTool._getSpawnOptions(optionsNonNull)); - fileStream = this.pipeOutputToFile ? fs.createWriteStream(this.pipeOutputToFile) : null; - if (fileStream) { - waitingEvents++; - fileStream.on('finish', function () { - waitingEvents--; //file write is complete - fileStream = null; - if (waitingEvents == 0) { - if (error) { - defer.reject(error); - } - else { - defer.resolve(returnCode); - } - } - }); - fileStream.on('error', function (err) { - waitingEvents--; //there were errors writing to the file, write is done - _this._debug("Failed to pipe output of " + toolPathFirst + " to file " + _this.pipeOutputToFile + ". Error = " + err); - fileStream = null; - if (waitingEvents == 0) { - if (error) { - defer.reject(error); - } - else { - defer.resolve(returnCode); - } - } - }); - } - //pipe stdout of first tool to stdin of second tool - (_a = cpFirst.stdout) === null || _a === void 0 ? void 0 : _a.on('data', function (data) { - var _a; - try { - if (fileStream) { - fileStream.write(data); - } - (_a = cp.stdin) === null || _a === void 0 ? void 0 : _a.write(data); - } - catch (err) { - _this._debug('Failed to pipe output of ' + toolPathFirst + ' to ' + toolPath); - _this._debug(toolPath + ' might have exited due to errors prematurely. Verify the arguments passed are valid.'); - } - }); - (_b = cpFirst.stderr) === null || _b === void 0 ? void 0 : _b.on('data', function (data) { - if (fileStream) { - fileStream.write(data); - } - successFirst = !optionsNonNull.failOnStdErr; - if (!optionsNonNull.silent) { - var s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; - s.write(data); - } - }); - cpFirst.on('error', function (err) { - var _a; - waitingEvents--; //first process is complete with errors - if (fileStream) { - fileStream.end(); - } - (_a = cp.stdin) === null || _a === void 0 ? void 0 : _a.end(); - error = new Error(toolPathFirst + ' failed. ' + err.message); - if (waitingEvents == 0) { - defer.reject(error); - } - }); - cpFirst.on('close', function (code, signal) { - var _a; - waitingEvents--; //first process is complete - if (code != 0 && !optionsNonNull.ignoreReturnCode) { - successFirst = false; - returnCodeFirst = code; - returnCode = returnCodeFirst; - } - _this._debug('success of first tool:' + successFirst); - if (fileStream) { - fileStream.end(); - } - (_a = cp.stdin) === null || _a === void 0 ? void 0 : _a.end(); - if (waitingEvents == 0) { - if (error) { - defer.reject(error); - } - else { - defer.resolve(returnCode); - } - } - }); - var stdbuffer = ''; - (_c = cp.stdout) === null || _c === void 0 ? void 0 : _c.on('data', function (data) { - _this.emit('stdout', data); - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(data); - } - _this._processLineBuffer(data, stdbuffer, function (line) { - _this.emit('stdline', line); - }); - }); - var errbuffer = ''; - (_d = cp.stderr) === null || _d === void 0 ? void 0 : _d.on('data', function (data) { - _this.emit('stderr', data); - success = !optionsNonNull.failOnStdErr; - if (!optionsNonNull.silent) { - var s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; - s.write(data); - } - _this._processLineBuffer(data, errbuffer, function (line) { - _this.emit('errline', line); - }); - }); - cp.on('error', function (err) { - waitingEvents--; //process is done with errors - error = new Error(toolPath + ' failed. ' + err.message); - if (waitingEvents == 0) { - defer.reject(error); - } - }); - cp.on('close', function (code, signal) { - waitingEvents--; //process is complete - _this._debug('rc:' + code); - returnCode = code; - if (stdbuffer.length > 0) { - _this.emit('stdline', stdbuffer); - } - if (errbuffer.length > 0) { - _this.emit('errline', errbuffer); - } - if (code != 0 && !optionsNonNull.ignoreReturnCode) { - success = false; - } - _this._debug('success:' + success); - if (!successFirst) { //in the case output is piped to another tool, check exit code of both tools - error = new Error(toolPathFirst + ' failed with return code: ' + returnCodeFirst); - } - else if (!success) { - error = new Error(toolPath + ' failed with return code: ' + code); - } - if (waitingEvents == 0) { - if (error) { - defer.reject(error); - } - else { - defer.resolve(returnCode); - } - } - }); - return defer.promise; - }; - /** - * Add argument - * Append an argument or an array of arguments - * returns ToolRunner for chaining - * - * @param val string cmdline or array of strings - * @returns ToolRunner - */ - ToolRunner.prototype.arg = function (val) { - if (!val) { - return this; - } - if (val instanceof Array) { - this._debug(this.toolPath + ' arg: ' + JSON.stringify(val)); - this.args = this.args.concat(val); - } - else if (typeof (val) === 'string') { - this._debug(this.toolPath + ' arg: ' + val); - this.args = this.args.concat(val.trim()); - } - return this; - }; - /** - * Parses an argument line into one or more arguments - * e.g. .line('"arg one" two -z') is equivalent to .arg(['arg one', 'two', '-z']) - * returns ToolRunner for chaining - * - * @param val string argument line - * @returns ToolRunner - */ - ToolRunner.prototype.line = function (val) { - if (!val) { - return this; - } - this._debug(this.toolPath + ' arg: ' + val); - this.args = this.args.concat(this._argStringToArray(val)); - return this; - }; - /** - * Add argument(s) if a condition is met - * Wraps arg(). See arg for details - * returns ToolRunner for chaining - * - * @param condition boolean condition - * @param val string cmdline or array of strings - * @returns ToolRunner - */ - ToolRunner.prototype.argIf = function (condition, val) { - if (condition) { - this.arg(val); - } - return this; - }; - /** - * Pipe output of exec() to another tool - * @param tool - * @param file optional filename to additionally stream the output to. - * @returns {ToolRunner} - */ - ToolRunner.prototype.pipeExecOutputToTool = function (tool, file) { - this.pipeOutputToTool = tool; - this.pipeOutputToFile = file; - return this; - }; - /** - * Exec a tool. - * Output will be streamed to the live console. - * Returns promise with return code - * - * @param tool path to tool to exec - * @param options optional exec options. See IExecOptions - * @returns number - */ - ToolRunner.prototype.exec = function (options) { - var _this = this; - var _a, _b, _c; - if (this.pipeOutputToTool) { - return this.execWithPiping(this.pipeOutputToTool, options); - } - var defer = Q.defer(); - this._debug('exec tool: ' + this.toolPath); - this._debug('arguments:'); - this.args.forEach(function (arg) { - _this._debug(' ' + arg); - }); - var optionsNonNull = this._cloneExecOptions(options); - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL); - } - var state = new ExecState(optionsNonNull, this.toolPath); - state.on('debug', function (message) { - _this._debug(message); - }); - var cp = child.spawn(this._getSpawnFileName(options), this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(options)); - this.childProcess = cp; - // it is possible for the child process to end its last line without a new line. - // because stdout is buffered, this causes the last line to not get sent to the parent - // stream. Adding this event forces a flush before the child streams are closed. - (_a = cp.stdout) === null || _a === void 0 ? void 0 : _a.on('finish', function () { - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(os.EOL); - } - }); - var stdbuffer = ''; - (_b = cp.stdout) === null || _b === void 0 ? void 0 : _b.on('data', function (data) { - _this.emit('stdout', data); - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(data); - } - _this._processLineBuffer(data, stdbuffer, function (line) { - _this.emit('stdline', line); - }); - }); - var errbuffer = ''; - (_c = cp.stderr) === null || _c === void 0 ? void 0 : _c.on('data', function (data) { - state.processStderr = true; - _this.emit('stderr', data); - if (!optionsNonNull.silent) { - var s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; - s.write(data); - } - _this._processLineBuffer(data, errbuffer, function (line) { - _this.emit('errline', line); - }); - }); - cp.on('error', function (err) { - state.processError = err.message; - state.processExited = true; - state.processClosed = true; - state.CheckComplete(); - }); - cp.on('exit', function (code, signal) { - state.processExitCode = code; - state.processExited = true; - _this._debug("Exit code " + code + " received from tool '" + _this.toolPath + "'"); - state.CheckComplete(); - }); - cp.on('close', function (code, signal) { - state.processExitCode = code; - state.processExited = true; - state.processClosed = true; - _this._debug("STDIO streams have closed for tool '" + _this.toolPath + "'"); - state.CheckComplete(); - }); - state.on('done', function (error, exitCode) { - if (stdbuffer.length > 0) { - _this.emit('stdline', stdbuffer); - } - if (errbuffer.length > 0) { - _this.emit('errline', errbuffer); - } - cp.removeAllListeners(); - if (error) { - defer.reject(error); - } - else { - defer.resolve(exitCode); - } - }); - return defer.promise; - }; - /** - * Exec a tool synchronously. - * Output will be *not* be streamed to the live console. It will be returned after execution is complete. - * Appropriate for short running tools - * Returns IExecSyncResult with output and return code - * - * @param tool path to tool to exec - * @param options optional exec options. See IExecSyncOptions - * @returns IExecSyncResult - */ - ToolRunner.prototype.execSync = function (options) { - var _this = this; - this._debug('exec tool: ' + this.toolPath); - this._debug('arguments:'); - this.args.forEach(function (arg) { - _this._debug(' ' + arg); - }); - var success = true; - options = this._cloneExecOptions(options); - if (!options.silent) { - options.outStream.write(this._getCommandString(options) + os.EOL); - } - var r = child.spawnSync(this._getSpawnFileName(options), this._getSpawnArgs(options), this._getSpawnSyncOptions(options)); - if (!options.silent && r.stdout && r.stdout.length > 0) { - options.outStream.write(r.stdout); - } - if (!options.silent && r.stderr && r.stderr.length > 0) { - options.errStream.write(r.stderr); - } - var res = { code: r.status, error: r.error }; - res.stdout = (r.stdout) ? r.stdout.toString() : ''; - res.stderr = (r.stderr) ? r.stderr.toString() : ''; - return res; - }; - /** - * Used to close child process by sending SIGNINT signal. - * It allows executed script to have some additional logic on SIGINT, before exiting. - */ - ToolRunner.prototype.killChildProcess = function () { - if (this.childProcess) { - this.childProcess.kill(); - } - }; - return ToolRunner; -}(events.EventEmitter)); -exports.ToolRunner = ToolRunner; -var ExecState = /** @class */ (function (_super) { - __extends(ExecState, _super); - function ExecState(options, toolPath) { - var _this = _super.call(this) || this; - _this.delay = 10000; // 10 seconds - _this.timeout = null; - if (!toolPath) { - throw new Error('toolPath must not be empty'); - } - _this.options = options; - _this.toolPath = toolPath; - var delay = process.env['TASKLIB_TEST_TOOLRUNNER_EXITDELAY']; - if (delay) { - _this.delay = parseInt(delay); - } - return _this; - } - ExecState.prototype.CheckComplete = function () { - if (this.done) { - return; - } - if (this.processClosed) { - this._setResult(); - } - else if (this.processExited) { - this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this); - } - }; - ExecState.prototype._debug = function (message) { - this.emit('debug', message); - }; - ExecState.prototype._setResult = function () { - // determine whether there is an error - var error; - if (this.processExited) { - if (this.processError) { - error = new Error(im._loc('LIB_ProcessError', this.toolPath, this.processError)); - } - else if (this.processExitCode != 0 && !this.options.ignoreReturnCode) { - error = new Error(im._loc('LIB_ProcessExitCode', this.toolPath, this.processExitCode)); - } - else if (this.processStderr && this.options.failOnStdErr) { - error = new Error(im._loc('LIB_ProcessStderr', this.toolPath)); - } - } - // clear the timeout - if (this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } - this.done = true; - this.emit('done', error, this.processExitCode); - }; - ExecState.HandleTimeout = function (state) { - if (state.done) { - return; - } - if (!state.processClosed && state.processExited) { - console.log(im._loc('LIB_StdioNotClosed', state.delay / 1000, state.toolPath)); - state._debug(im._loc('LIB_StdioNotClosed', state.delay / 1000, state.toolPath)); - } - state._setResult(); - }; - return ExecState; -}(events.EventEmitter)); - - -/***/ }), - -/***/ 7203: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Vault = void 0; -var fs = __nccwpck_require__(7147); -var path = __nccwpck_require__(1017); -var crypto = __nccwpck_require__(6113); -var uuidV4 = __nccwpck_require__(4758); -var algorithm = "aes-256-ctr"; -var encryptEncoding = 'hex'; -var unencryptedEncoding = 'utf8'; -// -// Store sensitive data in proc. -// Main goal: Protects tasks which would dump envvars from leaking secrets inadvertently -// the task lib clears after storing. -// Also protects against a dump of a process getting the secrets -// The secret is generated and stored externally for the lifetime of the task. -// -var Vault = /** @class */ (function () { - function Vault(keyPath) { - this._keyFile = path.join(keyPath, '.taskkey'); - this._store = {}; - this.genKey(); - } - Vault.prototype.initialize = function () { - }; - Vault.prototype.storeSecret = function (name, data) { - if (!name || name.length == 0) { - return false; - } - name = name.toLowerCase(); - if (!data || data.length == 0) { - if (this._store.hasOwnProperty(name)) { - delete this._store[name]; - } - return false; - } - var key = this.getKey(); - var iv = crypto.randomBytes(16); - var cipher = crypto.createCipheriv(algorithm, key, iv); - var crypted = cipher.update(data, unencryptedEncoding, encryptEncoding); - var cryptedFinal = cipher.final(encryptEncoding); - this._store[name] = iv.toString(encryptEncoding) + crypted + cryptedFinal; - return true; - }; - Vault.prototype.retrieveSecret = function (name) { - var secret; - name = (name || '').toLowerCase(); - if (this._store.hasOwnProperty(name)) { - var key = this.getKey(); - var data = this._store[name]; - var ivDataBuffer = Buffer.from(data, encryptEncoding); - var iv = ivDataBuffer.slice(0, 16); - var encryptedText = ivDataBuffer.slice(16); - var decipher = crypto.createDecipheriv(algorithm, key, iv); - var dec = decipher.update(encryptedText, encryptEncoding, unencryptedEncoding); - var decFinal = decipher.final(unencryptedEncoding); - secret = dec + decFinal; - } - return secret; - }; - Vault.prototype.getKey = function () { - var key = fs.readFileSync(this._keyFile).toString('utf8'); - // Key needs to be hashed to correct length to match algorithm (aes-256-ctr) - return crypto.createHash('sha256').update(key).digest(); - }; - Vault.prototype.genKey = function () { - fs.writeFileSync(this._keyFile, uuidV4(), { encoding: 'utf8' }); - }; - return Vault; -}()); -exports.Vault = Vault; - - -/***/ }), - -/***/ 9184: -/***/ ((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 - -var MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6 - -// The actual regexps go on exports.re -var re = exports.re = [] -var safeRe = exports.safeRe = [] -var src = exports.src = [] -var R = 0 - -var LETTERDASHNUMBER = '[a-zA-Z0-9-]' - -// Replace some greedy regex tokens to prevent regex dos issues. These regex are -// used internally via the safeRe object since all inputs in this library get -// normalized first to trim and collapse all extra whitespace. The original -// regexes are exported for userland consumption and lower level usage. A -// future breaking change could export the safer regex only with a note that -// all input should have extra whitespace removed. -var safeRegexReplacements = [ - ['\\s', 1], - ['\\d', MAX_LENGTH], - [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH], -] - -function makeSafeRe (value) { - for (var i = 0; i < safeRegexReplacements.length; i++) { - var token = safeRegexReplacements[i][0] - var max = safeRegexReplacements[i][1] - value = value - .split(token + '*').join(token + '{0,' + max + '}') - .split(token + '+').join(token + '{1,' + max + '}') - } - return value -} - -// 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. - -var NUMERICIDENTIFIER = R++ -src[NUMERICIDENTIFIER] = '0|[1-9]\\d*' -var NUMERICIDENTIFIERLOOSE = R++ -src[NUMERICIDENTIFIERLOOSE] = '\\d+' - -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. - -var NONNUMERICIDENTIFIER = R++ -src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-]' + LETTERDASHNUMBER + '*' - -// ## Main Version -// Three dot-separated numeric identifiers. - -var MAINVERSION = R++ -src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + - '(' + src[NUMERICIDENTIFIER] + ')\\.' + - '(' + src[NUMERICIDENTIFIER] + ')' - -var MAINVERSIONLOOSE = R++ -src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[NUMERICIDENTIFIERLOOSE] + ')' - -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. - -var PRERELEASEIDENTIFIER = R++ -src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + - '|' + src[NONNUMERICIDENTIFIER] + ')' - -var PRERELEASEIDENTIFIERLOOSE = R++ -src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + - '|' + src[NONNUMERICIDENTIFIER] + ')' - -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. - -var PRERELEASE = R++ -src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + - '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))' - -var PRERELEASELOOSE = R++ -src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + - '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))' - -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. - -var BUILDIDENTIFIER = R++ -src[BUILDIDENTIFIER] = LETTERDASHNUMBER + '+' - -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. - -var BUILD = R++ -src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + - '(?:\\.' + src[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. - -var FULL = R++ -var FULLPLAIN = 'v?' + src[MAINVERSION] + - src[PRERELEASE] + '?' + - src[BUILD] + '?' - -src[FULL] = '^' + 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. -var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + - src[PRERELEASELOOSE] + '?' + - src[BUILD] + '?' - -var LOOSE = R++ -src[LOOSE] = '^' + LOOSEPLAIN + '$' - -var GTLT = R++ -src[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. -var XRANGEIDENTIFIERLOOSE = R++ -src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' -var XRANGEIDENTIFIER = R++ -src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*' - -var XRANGEPLAIN = R++ -src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + - '(?:' + src[PRERELEASE] + ')?' + - src[BUILD] + '?' + - ')?)?' - -var XRANGEPLAINLOOSE = R++ -src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:' + src[PRERELEASELOOSE] + ')?' + - src[BUILD] + '?' + - ')?)?' - -var XRANGE = R++ -src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$' -var XRANGELOOSE = R++ -src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$' - -// Coercion. -// Extract anything that could conceivably be a part of a valid semver -var COERCE = R++ -src[COERCE] = '(?:^|[^\\d])' + - '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + - '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + - '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + - '(?:$|[^\\d])' - -// Tilde ranges. -// Meaning is "reasonably at or greater than" -var LONETILDE = R++ -src[LONETILDE] = '(?:~>?)' - -var TILDETRIM = R++ -src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+' -re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g') -safeRe[TILDETRIM] = new RegExp(makeSafeRe(src[TILDETRIM]), 'g') -var tildeTrimReplace = '$1~' - -var TILDE = R++ -src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$' -var TILDELOOSE = R++ -src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$' - -// Caret ranges. -// Meaning is "at least and backwards compatible with" -var LONECARET = R++ -src[LONECARET] = '(?:\\^)' - -var CARETTRIM = R++ -src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+' -re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g') -safeRe[CARETTRIM] = new RegExp(makeSafeRe(src[CARETTRIM]), 'g') -var caretTrimReplace = '$1^' - -var CARET = R++ -src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$' -var CARETLOOSE = R++ -src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$' - -// A simple gt/lt/eq thing, or just "" to indicate "any version" -var COMPARATORLOOSE = R++ -src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$' -var COMPARATOR = R++ -src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$' - -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -var COMPARATORTRIM = R++ -src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + - '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')' - -// this one has to use the /g flag -re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g') -safeRe[COMPARATORTRIM] = new RegExp(makeSafeRe(src[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. -var HYPHENRANGE = R++ -src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + - '\\s+-\\s+' + - '(' + src[XRANGEPLAIN] + ')' + - '\\s*$' - -var HYPHENRANGELOOSE = R++ -src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + - '\\s+-\\s+' + - '(' + src[XRANGEPLAINLOOSE] + ')' + - '\\s*$' - -// Star ranges basically just allow anything at all. -var STAR = R++ -src[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]) - - // Replace all greedy whitespace to prevent regex dos issues. These regex are - // used internally via the safeRe object since all inputs in this library get - // normalized first to trim and collapse all extra whitespace. The original - // regexes are exported for userland consumption and lower level usage. A - // future breaking change could export the safer regex only with a note that - // all input should have extra whitespace removed. - safeRe[i] = new RegExp(makeSafeRe(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 ? safeRe[LOOSE] : safeRe[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 ? safeRe[LOOSE] : safeRe[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) -} - -// 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.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.compare(a, b, loose) - }) -} - -exports.rsort = rsort -function rsort (list, loose) { - return list.sort(function (a, b) { - return exports.rcompare(a, b, 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) - } - - comp = comp.trim().split(/\s+/).join(' ') - 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 ? safeRe[COMPARATORLOOSE] : safeRe[COMPARATOR] - var m = comp.match(r) - - if (!m) { - throw new TypeError('Invalid comparator: ' + comp) - } - - this.operator = 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) { - return true - } - - if (typeof version === 'string') { - version = new SemVer(version, this.options) - } - - 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 === '') { - rangeTmp = new Range(comp.value, options) - return satisfies(this.value, rangeTmp, options) - } else if (comp.operator === '') { - 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 reduce all whitespace as much as possible so we do not have to rely - // on potentially slow regexes like \s*. This is then stored and used for - // future error messages as well. - this.raw = range - .trim() - .split(/\s+/) - .join(' ') - - // First, split based on boolean or || - this.set = this.raw.split('||').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: ' + this.raw) - } - - 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 - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - var hr = loose ? safeRe[HYPHENRANGELOOSE] : safeRe[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(safeRe[COMPARATORTRIM], comparatorTrimReplace) - debug('comparator trim', range, safeRe[COMPARATORTRIM]) - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(safeRe[TILDETRIM], tildeTrimReplace) - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(safeRe[CARETTRIM], caretTrimReplace) - - // At this point, the range is completely trimmed and - // ready to be split into comparators. - var compRe = loose ? safeRe[COMPARATORLOOSE] : safeRe[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 thisComparators.every(function (thisComparator) { - return range.set.some(function (rangeComparators) { - return rangeComparators.every(function (rangeComparator) { - return thisComparator.intersects(rangeComparator, options) - }) - }) - }) - }) -} - -// 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 ? safeRe[TILDELOOSE] : safeRe[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 ? safeRe[CARETLOOSE] : safeRe[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 ? safeRe[XRANGELOOSE] : safeRe[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 (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<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 - } else if (xm) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' - } else if (xp) { - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' - } - - 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(safeRe[STAR], '') -} - -// This function is passed to string.replace(safeRe[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') { - version = new SemVer(version, this.options) - } - - 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) { - if (version instanceof SemVer) { - return version - } - - if (typeof version !== 'string') { - return null - } - - var match = version.match(safeRe[COERCE]) - - if (match == null) { - return null - } - - return parse(match[1] + - '.' + (match[2] || '0') + - '.' + (match[3] || '0')) -} - - -/***/ }), - -/***/ 1513: -/***/ ((module) => { - -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ -var byteToHex = []; -for (var i = 0; i < 256; ++i) { - byteToHex[i] = (i + 0x100).toString(16).substr(1); -} - -function bytesToUuid(buf, offset) { - var i = offset || 0; - var bth = byteToHex; - // 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++]], - 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(''); -} - -module.exports = bytesToUuid; - - -/***/ }), - -/***/ 9984: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -// Unique ID creation requires a high quality random # generator. In node.js -// this is pretty straight-forward - we use the crypto API. - -var crypto = __nccwpck_require__(6113); - -module.exports = function nodeRNG() { - return crypto.randomBytes(16); -}; - - -/***/ }), - -/***/ 4758: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -var rng = __nccwpck_require__(9984); -var bytesToUuid = __nccwpck_require__(1513); - -function v4(options, buf, offset) { - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options === 'binary' ? new Array(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ++ii) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || bytesToUuid(rnds); -} - -module.exports = v4; - - -/***/ }), - -/***/ 3681: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"use strict"; +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ +/***/ 7351: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.issue = exports.issueCommand = void 0; +const os = __importStar(__nccwpck_require__(2037)); +const utils_1 = __nccwpck_require__(5278); +/** + * 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; + } +} +function escapeData(s) { + return utils_1.toCommandValue(s) + .replace(/%/g, '%25') + .replace(/\r/g, '%0D') + .replace(/\n/g, '%0A'); +} +function escapeProperty(s) { + return utils_1.toCommandValue(s) + .replace(/%/g, '%25') + .replace(/\r/g, '%0D') + .replace(/\n/g, '%0A') + .replace(/:/g, '%3A') + .replace(/,/g, '%2C'); +} +//# sourceMappingURL=command.js.map + +/***/ }), + +/***/ 2186: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; 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) { @@ -18409,18844 +134,37119 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.scrape = exports.extractZip = exports.extractTar = exports.extract7z = exports.cacheFile = exports.cacheDir = exports.downloadTool = exports.findLocalToolVersions = exports.findLocalTool = exports.evaluateVersions = exports.cleanVersion = exports.isExplicitVersion = exports.prependPath = exports.debug = void 0; -const httpm = __nccwpck_require__(5538); -const path = __nccwpck_require__(1017); -const os = __nccwpck_require__(2037); -const process = __nccwpck_require__(7282); -const fs = __nccwpck_require__(7147); -const semver = __nccwpck_require__(9184); -const tl = __nccwpck_require__(7845); -const cmp = __nccwpck_require__(2568); -const uuidV4 = __nccwpck_require__(4758); -let pkg = __nccwpck_require__(9099); -let userAgent = 'vsts-task-installer/' + pkg.version; -let requestOptions = { - // ignoreSslError: true, - proxy: tl.getHttpProxyConfiguration(), - cert: tl.getHttpCertConfiguration(), - allowRedirects: true, - allowRetries: true, - maxRetries: 2 -}; -tl.setResourcePath(__nccwpck_require__.ab + "lib1.json"); -function debug(message) { - tl.debug(message); -} -exports.debug = debug; -function prependPath(toolPath) { - tl.assertAgent('2.115.0'); - if (!toolPath) { - throw new Error('Parameter toolPath must not be null or empty'); - } - else if (!tl.exist(toolPath) || !tl.stats(toolPath).isDirectory()) { - throw new Error('Directory does not exist: ' + toolPath); - } - // todo: add a test for path - console.log(tl.loc('TOOL_LIB_PrependPath', toolPath)); - let newPath = toolPath + path.delimiter + process.env['PATH']; - tl.debug('new Path: ' + newPath); - process.env['PATH'] = newPath; - // instruct the agent to set this path on future tasks - console.log('##vso[task.prependpath]' + toolPath); -} -exports.prependPath = prependPath; -function delay(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); -} -//----------------------------- -// Version Functions -//----------------------------- +exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0; +const command_1 = __nccwpck_require__(7351); +const file_command_1 = __nccwpck_require__(717); +const utils_1 = __nccwpck_require__(5278); +const os = __importStar(__nccwpck_require__(2037)); +const path = __importStar(__nccwpck_require__(1017)); +const oidc_utils_1 = __nccwpck_require__(8041); /** - * Checks if a version spec is an explicit version (e.g. 1.0.1 or v1.0.1) - * As opposed to a version spec like 1.x - * - * @param versionSpec + * The code to exit an action */ -function isExplicitVersion(versionSpec) { - let c = semver.clean(versionSpec); - tl.debug('isExplicit: ' + c); - let valid = semver.valid(c) != null; - tl.debug('explicit? ' + valid); - return valid; +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 = utils_1.toCommandValue(val); + process.env[name] = convertedVal; + const filePath = process.env['GITHUB_ENV'] || ''; + if (filePath) { + return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val)); + } + command_1.issueCommand('set-env', { name }, convertedVal); } -exports.isExplicitVersion = isExplicitVersion; +exports.exportVariable = exportVariable; /** - * Returns cleaned (removed leading/trailing whitespace, remove '=v' prefix) - * and parsed version, or null if version is invalid. + * Registers a secret which will get masked from logs + * @param secret value of the secret */ -function cleanVersion(version) { - tl.debug('cleaning: ' + version); - return semver.clean(version); +function setSecret(secret) { + command_1.issueCommand('add-mask', {}, secret); } -exports.cleanVersion = cleanVersion; +exports.setSecret = setSecret; /** - * evaluates a list of versions and returns the latest version matching the version spec - * - * @param versions an array of versions to evaluate - * @param versionSpec a version spec (e.g. 1.x) + * Prepends inputPath to the PATH (for this action and future actions) + * @param inputPath */ -function evaluateVersions(versions, versionSpec) { - let version; - tl.debug('evaluating ' + versions.length + ' versions'); - versions = versions.sort(cmp); - for (let i = versions.length - 1; i >= 0; i--) { - let potential = versions[i]; - let satisfied = semver.satisfies(potential, versionSpec); - if (satisfied) { - version = potential; - break; - } - } - if (version) { - tl.debug('matched: ' + version); +function addPath(inputPath) { + const filePath = process.env['GITHUB_PATH'] || ''; + if (filePath) { + file_command_1.issueFileCommand('PATH', inputPath); } else { - tl.debug('match not found'); + command_1.issueCommand('add-path', {}, inputPath); } - return version; + process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; } -exports.evaluateVersions = evaluateVersions; -//----------------------------- -// Local Tool Cache Functions -//----------------------------- +exports.addPath = addPath; /** - * finds the path to a tool in the local installed tool cache + * Gets the value of an input. + * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed. + * Returns an empty string if the value is not defined. * - * @param toolName name of the tool - * @param versionSpec version of the tool - * @param arch optional arch. defaults to arch of computer + * @param name name of the input to get + * @param options optional. See InputOptions. + * @returns string */ -function findLocalTool(toolName, versionSpec, arch) { - if (!toolName) { - throw new Error('toolName parameter is required'); - } - if (!versionSpec) { - throw new Error('versionSpec parameter is required'); +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}`); } - arch = arch || os.arch(); - // attempt to resolve an explicit version - if (!isExplicitVersion(versionSpec)) { - let localVersions = findLocalToolVersions(toolName, arch); - let match = evaluateVersions(localVersions, versionSpec); - versionSpec = match; + if (options && options.trimWhitespace === false) { + return val; } - // check for the explicit version in the cache - let toolPath; - if (versionSpec) { - versionSpec = semver.clean(versionSpec); - let cacheRoot = _getCacheRoot(); - let cachePath = path.join(cacheRoot, toolName, versionSpec, arch); - tl.debug('checking cache: ' + cachePath); - if (tl.exist(cachePath) && tl.exist(`${cachePath}.complete`)) { - console.log(tl.loc('TOOL_LIB_FoundInCache', toolName, versionSpec, arch)); - toolPath = cachePath; - } - else { - tl.debug('not found'); - } + return val.trim(); +} +exports.getInput = getInput; +/** + * Gets the values of an multiline input. Each value is also trimmed. + * + * @param name name of the input to get + * @param options optional. See InputOptions. + * @returns string[] + * + */ +function getMultilineInput(name, options) { + const inputs = getInput(name, options) + .split('\n') + .filter(x => x !== ''); + if (options && options.trimWhitespace === false) { + return inputs; } - return toolPath; + return inputs.map(input => input.trim()); } -exports.findLocalTool = findLocalTool; +exports.getMultilineInput = getMultilineInput; /** - * Retrieves the versions of a tool that is intalled in the local tool cache + * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification. + * Support boolean input list: `true | True | TRUE | false | False | FALSE` . + * The return value is also in boolean type. + * ref: https://yaml.org/spec/1.2/spec.html#id2804923 * - * @param toolName name of the tool - * @param arch optional arch. defaults to arch of computer + * @param name name of the input to get + * @param options optional. See InputOptions. + * @returns boolean */ -function findLocalToolVersions(toolName, arch) { - let versions = []; - arch = arch || os.arch(); - let toolPath = path.join(_getCacheRoot(), toolName); - if (tl.exist(toolPath)) { - let children = tl.ls('', [toolPath]); - children.forEach((child) => { - if (isExplicitVersion(child)) { - let fullPath = path.join(toolPath, child, arch); - if (tl.exist(fullPath) && tl.exist(`${fullPath}.complete`)) { - versions.push(child); - } - } - }); +function getBooleanInput(name, options) { + const trueValue = ['true', 'True', 'TRUE']; + const falseValue = ['false', 'False', 'FALSE']; + const val = getInput(name, options); + if (trueValue.includes(val)) + return true; + if (falseValue.includes(val)) + return false; + throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` + + `Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); +} +exports.getBooleanInput = getBooleanInput; +/** + * 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) { + const filePath = process.env['GITHUB_OUTPUT'] || ''; + if (filePath) { + return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value)); } - return versions; + process.stdout.write(os.EOL); + command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(value)); } -exports.findLocalToolVersions = findLocalToolVersions; -//--------------------- -// Download Functions -//--------------------- -// -// TODO: keep extension intact -// +exports.setOutput = setOutput; /** - * Download a tool from an url and stream it into a file + * 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. * - * @param url url of tool to download - * @param fileName optional fileName. Should typically not use (will be a guid for reliability). Can pass fileName with an absolute path. - * @param handlers optional handlers array. Auth handlers to pass to the HttpClient for the tool download. - * @param additionalHeaders optional custom HTTP headers. This is passed to the REST client that downloads the tool. */ -function downloadTool(url, fileName, handlers, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { - try { - handlers = handlers || null; - let http = new httpm.HttpClient(userAgent, handlers, requestOptions); - tl.debug(fileName); - fileName = fileName || uuidV4(); - // check if it's an absolute path already - var destPath; - if (path.isAbsolute(fileName)) { - destPath = fileName; - } - else { - destPath = path.join(_getAgentTemp(), fileName); - } - // make sure that the folder exists - tl.mkdirP(path.dirname(destPath)); - console.log(tl.loc('TOOL_LIB_Downloading', url)); - tl.debug('destination ' + destPath); - if (fs.existsSync(destPath)) { - throw new Error("Destination file path already exists"); - } - tl.debug('downloading'); - let response = yield http.get(url, additionalHeaders); - if (response.message.statusCode != 200) { - let err = new Error('Unexpected HTTP response: ' + response.message.statusCode); - err['httpStatusCode'] = response.message.statusCode; - tl.debug(`Failed to download "${fileName}" from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); - throw err; - } - let downloadedContentLength = _getContentLengthOfDownloadedFile(response); - if (!isNaN(downloadedContentLength)) { - tl.debug(`Content-Length of downloaded file: ${downloadedContentLength}`); - } - else { - tl.debug(`Content-Length header missing`); - } - tl.debug('creating stream'); - let file = fs.createWriteStream(destPath); - file.on('open', (fd) => __awaiter(this, void 0, void 0, function* () { - try { - let stream = response.message.pipe(file); - stream.on('close', () => { - tl.debug('download complete'); - let fileSizeInBytes; - try { - fileSizeInBytes = _getFileSizeOnDisk(destPath); - } - catch (err) { - fileSizeInBytes = NaN; - tl.warning(`Unable to check file size of ${destPath} due to error: ${err.Message}`); - } - if (!isNaN(fileSizeInBytes)) { - tl.debug(`Downloaded file size: ${fileSizeInBytes} bytes`); - } - else { - tl.debug(`File size on disk was not found`); - } - if (!isNaN(downloadedContentLength) && - !isNaN(fileSizeInBytes) && - fileSizeInBytes !== downloadedContentLength) { - tl.warning(`Content-Length (${downloadedContentLength} bytes) did not match downloaded file size (${fileSizeInBytes} bytes).`); - } - resolve(destPath); - }); - } - catch (err) { - reject(err); - } - })); - file.on('error', (err) => { - file.end(); - reject(err); - }); - } - catch (error) { - reject(error); - } - })); - }); +function setCommandEcho(enabled) { + command_1.issue('echo', enabled ? 'on' : 'off'); } -exports.downloadTool = downloadTool; -//--------------------- -// Size functions -//--------------------- +exports.setCommandEcho = setCommandEcho; +//----------------------------------------------------------------------- +// Results +//----------------------------------------------------------------------- /** - * Gets size of downloaded file from "Content-Length" header - * - * @param response response for request to get the file - * @returns number if the 'content-length' is not empty, otherwise NaN + * 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 _getContentLengthOfDownloadedFile(response) { - let contentLengthHeader = response.message.headers['content-length']; - let parsedContentLength = parseInt(contentLengthHeader); - return parsedContentLength; +function setFailed(message) { + process.exitCode = ExitCode.Failure; + error(message); } +exports.setFailed = setFailed; +//----------------------------------------------------------------------- +// Logging Commands +//----------------------------------------------------------------------- /** - * Gets size of file saved to disk - * - * @param filePath the path to the file, saved to the disk - * @returns size of file saved to disk + * Gets whether Actions Step Debug is on or not */ -function _getFileSizeOnDisk(filePath) { - let fileStats = fs.statSync(filePath); - let fileSizeInBytes = fileStats.size; - return fileSizeInBytes; +function isDebug() { + return process.env['RUNNER_DEBUG'] === '1'; } -//--------------------- -// Install Functions -//--------------------- -function _createToolPath(tool, version, arch) { - // todo: add test for clean - let folderPath = path.join(_getCacheRoot(), tool, semver.clean(version), arch); - tl.debug('destination ' + folderPath); - let markerPath = `${folderPath}.complete`; - tl.rmRF(folderPath); - tl.rmRF(markerPath); - tl.mkdirP(folderPath); - return folderPath; +exports.isDebug = isDebug; +/** + * Writes debug message to user log + * @param message debug message + */ +function debug(message) { + command_1.issueCommand('debug', {}, message); } -function _completeToolPath(tool, version, arch) { - let folderPath = path.join(_getCacheRoot(), tool, semver.clean(version), arch); - let markerPath = `${folderPath}.complete`; - tl.writeFile(markerPath, ''); - tl.debug('finished caching tool'); +exports.debug = debug; +/** + * Adds an error issue + * @param message error issue message. Errors will be converted to string via toString() + * @param properties optional properties to add to the annotation. + */ +function error(message, properties = {}) { + command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); } +exports.error = error; /** - * Caches a directory and installs it into the tool cacheDir - * - * @param sourceDir the directory to cache into tools - * @param tool tool name - * @param version version of the tool. semver format - * @param arch architecture of the tool. Optional. Defaults to machine architecture + * Adds a warning issue + * @param message warning issue message. Errors will be converted to string via toString() + * @param properties optional properties to add to the annotation. */ -function cacheDir(sourceDir, tool, version, arch) { - return __awaiter(this, void 0, void 0, function* () { - version = semver.clean(version); - arch = arch || os.arch(); - console.log(tl.loc('TOOL_LIB_CachingTool', tool, version, arch)); - tl.debug('source dir: ' + sourceDir); - if (!tl.stats(sourceDir).isDirectory()) { - throw new Error('sourceDir is not a directory'); - } - // create the tool dir - let destPath = _createToolPath(tool, version, arch); - // copy each child item. do not move. move can fail on Windows - // due to anti-virus software having an open handle on a file. - for (let itemName of fs.readdirSync(sourceDir)) { - let s = path.join(sourceDir, itemName); - tl.cp(s, destPath + '/', '-r'); - } - // write .complete - _completeToolPath(tool, version, arch); - return destPath; - }); +function warning(message, properties = {}) { + command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); } -exports.cacheDir = cacheDir; +exports.warning = warning; /** - * Caches a downloaded file (GUID) and installs it - * into the tool cache with a given targetName + * Adds a notice issue + * @param message notice issue message. Errors will be converted to string via toString() + * @param properties optional properties to add to the annotation. + */ +function notice(message, properties = {}) { + command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); +} +exports.notice = notice; +/** + * 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. * - * @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid. - * @param targetFile the name of the file name in the tools directory - * @param tool tool name - * @param version version of the tool. semver format - * @param arch architecture of the tool. Optional. Defaults to machine architecture + * Output until the next `groupEnd` will be foldable in this group + * + * @param name The name of the output group */ -function cacheFile(sourceFile, targetFile, tool, version, arch) { - return __awaiter(this, void 0, void 0, function* () { - version = semver.clean(version); - arch = arch || os.arch(); - console.log(tl.loc('TOOL_LIB_CachingTool', tool, version, arch)); - tl.debug('source file:' + sourceFile); - if (!tl.stats(sourceFile).isFile()) { - throw new Error('sourceFile is not a file'); - } - // create the tool dir - let destFolder = _createToolPath(tool, version, arch); - // copy instead of move. move can fail on Windows due to - // anti-virus software having an open handle on a file. - let destPath = path.join(destFolder, targetFile); - tl.debug('destination file' + destPath); - tl.cp(sourceFile, destPath); - // write .complete - _completeToolPath(tool, version, arch); - return destFolder; - }); +function startGroup(name) { + command_1.issue('group', name); } -exports.cacheFile = cacheFile; -//--------------------- -// Extract Functions -//--------------------- +exports.startGroup = startGroup; /** - * Extract a .7z file + * End an output group. + */ +function endGroup() { + command_1.issue('endgroup'); +} +exports.endGroup = endGroup; +/** + * Wrap an asynchronous function call in a group. * - * @param file path to the .7z file - * @param dest destination directory. Optional. - * @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this - * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will - * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is - * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line - * interface, it is smaller than the full command line interface, and it does support long paths. At the - * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website. - * Be sure to check the current license agreement. If 7zr.exe is bundled with your task, then the path - * to 7zr.exe can be pass to this function. - * @param overwriteDest Overwrite files in destination catalog. Optional. - * @returns path to the destination directory + * 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 extract7z(file, dest, _7zPath, overwriteDest) { +function group(name, fn) { return __awaiter(this, void 0, void 0, function* () { - if (process.platform != 'win32') { - throw new Error('extract7z() not supported on current OS'); - } - if (!file) { - throw new Error("parameter 'file' is required"); - } - console.log(tl.loc('TOOL_LIB_ExtractingArchive')); - dest = _createExtractFolder(dest); - let originalCwd = process.cwd(); + startGroup(name); + let result; try { - process.chdir(dest); - if (_7zPath) { - // extract - const _7z = tl.tool(_7zPath); - if (overwriteDest) { - _7z.arg('-aoa'); - } - _7z.arg('x') // eXtract files with full paths - .arg('-bb1') // -bb[0-3] : set output log level - .arg('-bd') // disable progress indicator - .arg('-sccUTF-8') // set charset for for console input/output - .arg(file); - yield _7z.exec(); - } - else { - // extract - let escapedScript = path.join(__dirname, 'Invoke-7zdec.ps1').replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines - let escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - let escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - const overrideDestDirectory = overwriteDest ? 1 : 0; - const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}' -OverrideDestDirectory ${overrideDestDirectory}`; - let powershellPath = tl.which('powershell', true); - let powershell = tl.tool(powershellPath) - .line('-NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command') - .arg(command); - powershell.on('stdout', (buffer) => { - process.stdout.write(buffer); - }); - powershell.on('stderr', (buffer) => { - process.stderr.write(buffer); - }); - yield powershell.exec({ silent: true }); - } + result = yield fn(); } finally { - process.chdir(originalCwd); + endGroup(); } - return dest; + return result; }); } -exports.extract7z = extract7z; +exports.group = group; +//----------------------------------------------------------------------- +// Wrapper action state +//----------------------------------------------------------------------- /** - * installs a tool from a tar by extracting the tar and installing it into the tool cache + * Saves state for current action, the state can only be retrieved by this action's post job execution. * - * @param file file path of the tar - * @param tool name of tool in the tool cache - * @param version version of the tool - * @param arch arch of the tool. optional. defaults to the arch of the machine - * @param options IExtractOptions - * @param destination destination directory. optional. + * @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 */ -function extractTar(file, destination) { +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function saveState(name, value) { + const filePath = process.env['GITHUB_STATE'] || ''; + if (filePath) { + return file_command_1.issueFileCommand('STATE', file_command_1.prepareKeyValueMessage(name, value)); + } + command_1.issueCommand('save-state', { name }, utils_1.toCommandValue(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; +function getIDToken(aud) { return __awaiter(this, void 0, void 0, function* () { - // mkdir -p node/4.7.0/x64 - // tar xzC ./node/4.7.0/x64 -f node-v4.7.0-darwin-x64.tar.gz --strip-components 1 - console.log(tl.loc('TOOL_LIB_ExtractingArchive')); - let dest = _createExtractFolder(destination); - let tr = tl.tool('tar'); - tr.arg(['xC', dest, '-f', file]); - yield tr.exec(); - return dest; + return yield oidc_utils_1.OidcClient.getIDToken(aud); }); } -exports.extractTar = extractTar; -function extractZip(file, destination) { - return __awaiter(this, void 0, void 0, function* () { - if (!file) { - throw new Error("parameter 'file' is required"); - } - console.log(tl.loc('TOOL_LIB_ExtractingArchive')); - let dest = _createExtractFolder(destination); - if (process.platform == 'win32') { - // build the powershell command - let escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines - let escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - let command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`; - // change the console output code page to UTF-8. - // TODO: FIX WHICH: let chcpPath = tl.which('chcp.com', true); - let chcpPath = path.join(process.env.windir, "system32", "chcp.com"); - yield tl.exec(chcpPath, '65001'); - // run powershell - let powershell = tl.tool('powershell') - .line('-NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command') - .arg(command); - yield powershell.exec(); - } - else { - let unzip = tl.tool('unzip') - .arg(file); - yield unzip.exec({ cwd: dest }); - } - return dest; - }); -} -exports.extractZip = extractZip; -function _createExtractFolder(dest) { - if (!dest) { - // create a temp dir - dest = path.join(_getAgentTemp(), uuidV4()); - } - tl.mkdirP(dest); - return dest; -} -//--------------------- -// Query Functions -//--------------------- -// default input will be >= LTS version. drop label different than value. -// v4 (LTS) would have a value of 4.x -// option to always download? (not cache), TTL? +exports.getIDToken = getIDToken; /** - * Scrape a web page for versions by regex - * - * @param url url to scrape - * @param regex regex to use for version matches - * @param handlers optional handlers array. Auth handlers to pass to the HttpClient for the tool download. + * Summary exports */ -function scrape(url, regex, handlers) { - return __awaiter(this, void 0, void 0, function* () { - handlers = handlers || null; - let http = new httpm.HttpClient(userAgent, handlers, requestOptions); - let output = yield (yield http.get(url)).readBody(); - let matches = output.match(regex); - let seen = {}; - let versions = []; - for (let i = 0; i < matches.length; i++) { - let ver = semver.clean(matches[i]); - if (!seen.hasOwnProperty(ver)) { - seen[ver] = true; - versions.push(ver); - } - } - return versions; +var summary_1 = __nccwpck_require__(1327); +Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } })); +/** + * @deprecated use core.summary + */ +var summary_2 = __nccwpck_require__(1327); +Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } })); +/** + * Path exports + */ +var path_utils_1 = __nccwpck_require__(2981); +Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } })); +Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } })); +Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } })); +//# sourceMappingURL=core.js.map + +/***/ }), + +/***/ 717: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +// For internal use, subject to change. +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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.prepareKeyValueMessage = exports.issueFileCommand = void 0; +// We use any as a valid input type +/* eslint-disable @typescript-eslint/no-explicit-any */ +const fs = __importStar(__nccwpck_require__(7147)); +const os = __importStar(__nccwpck_require__(2037)); +const uuid_1 = __nccwpck_require__(5840); +const utils_1 = __nccwpck_require__(5278); +function issueFileCommand(command, message) { + const filePath = process.env[`GITHUB_${command}`]; + if (!filePath) { + throw new Error(`Unable to find environment variable for file command ${command}`); + } + if (!fs.existsSync(filePath)) { + throw new Error(`Missing file at path: ${filePath}`); + } + fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, { + encoding: 'utf8' }); } -exports.scrape = scrape; -function _getCacheRoot() { - tl.assertAgent('2.115.0'); - let cacheRoot = tl.getVariable('Agent.ToolsDirectory'); - if (!cacheRoot) { - throw new Error('Agent.ToolsDirectory is not set'); +exports.issueFileCommand = issueFileCommand; +function prepareKeyValueMessage(key, value) { + const delimiter = `ghadelimiter_${uuid_1.v4()}`; + const convertedValue = utils_1.toCommandValue(value); + // These should realistically never happen, but just in case someone finds a + // way to exploit uuid generation let's not allow keys or values that contain + // the delimiter. + if (key.includes(delimiter)) { + throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`); } - return cacheRoot; -} -function _getAgentTemp() { - tl.assertAgent('2.115.0'); - let tempDirectory = tl.getVariable('Agent.TempDirectory'); - if (!tempDirectory) { - throw new Error('Agent.TempDirectory is not set'); + if (convertedValue.includes(delimiter)) { + throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`); } - return tempDirectory; + return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`; } - - -/***/ }), - -/***/ 9417: -/***/ ((module) => { - -"use strict"; - -module.exports = balanced; -function balanced(a, b, str) { - if (a instanceof RegExp) a = maybeMatch(a, str); - if (b instanceof RegExp) b = maybeMatch(b, str); - - var r = range(a, b, str); - - return r && { - start: r[0], - end: r[1], - pre: str.slice(0, r[0]), - body: str.slice(r[0] + a.length, r[1]), - post: str.slice(r[1] + b.length) - }; -} - -function maybeMatch(reg, str) { - var m = str.match(reg); - return m ? m[0] : null; -} - -balanced.range = range; -function range(a, b, str) { - var begs, beg, left, right, result; - var ai = str.indexOf(a); - var bi = str.indexOf(b, ai + 1); - var i = ai; - - if (ai >= 0 && bi > 0) { - if(a===b) { - return [ai, bi]; - } - begs = []; - left = str.length; - - while (i >= 0 && !result) { - if (i == ai) { - begs.push(i); - ai = str.indexOf(a, i + 1); - } else if (begs.length == 1) { - result = [ begs.pop(), bi ]; - } else { - beg = begs.pop(); - if (beg < left) { - left = beg; - right = bi; - } - - bi = str.indexOf(b, i + 1); - } - - i = ai < bi && ai >= 0 ? ai : bi; - } - - if (begs.length) { - result = [ left, right ]; - } - } - - return result; -} - - -/***/ }), - -/***/ 3717: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -var concatMap = __nccwpck_require__(6891); -var balanced = __nccwpck_require__(9417); - -module.exports = expandTop; - -var escSlash = '\0SLASH'+Math.random()+'\0'; -var escOpen = '\0OPEN'+Math.random()+'\0'; -var escClose = '\0CLOSE'+Math.random()+'\0'; -var escComma = '\0COMMA'+Math.random()+'\0'; -var escPeriod = '\0PERIOD'+Math.random()+'\0'; - -function numeric(str) { - return parseInt(str, 10) == str - ? parseInt(str, 10) - : str.charCodeAt(0); -} - -function escapeBraces(str) { - return str.split('\\\\').join(escSlash) - .split('\\{').join(escOpen) - .split('\\}').join(escClose) - .split('\\,').join(escComma) - .split('\\.').join(escPeriod); -} - -function unescapeBraces(str) { - return str.split(escSlash).join('\\') - .split(escOpen).join('{') - .split(escClose).join('}') - .split(escComma).join(',') - .split(escPeriod).join('.'); -} - - -// Basically just str.split(","), but handling cases -// where we have nested braced sections, which should be -// treated as individual members, like {a,{b,c},d} -function parseCommaParts(str) { - if (!str) - return ['']; - - var parts = []; - var m = balanced('{', '}', str); - - if (!m) - return str.split(','); - - var pre = m.pre; - var body = m.body; - var post = m.post; - var p = pre.split(','); - - p[p.length-1] += '{' + body + '}'; - var postParts = parseCommaParts(post); - if (post.length) { - p[p.length-1] += postParts.shift(); - p.push.apply(p, postParts); - } - - parts.push.apply(parts, p); - - return parts; -} - -function expandTop(str) { - if (!str) - return []; - - // I don't know why Bash 4.3 does this, but it does. - // Anything starting with {} will have the first two bytes preserved - // but *only* at the top level, so {},a}b will not expand to anything, - // but a{},b}c will be expanded to [a}c,abc]. - // One could argue that this is a bug in Bash, but since the goal of - // this module is to match Bash's rules, we escape a leading {} - if (str.substr(0, 2) === '{}') { - str = '\\{\\}' + str.substr(2); - } - - return expand(escapeBraces(str), true).map(unescapeBraces); -} - -function identity(e) { - return e; -} - -function embrace(str) { - return '{' + str + '}'; -} -function isPadded(el) { - return /^-?0\d/.test(el); -} - -function lte(i, y) { - return i <= y; -} -function gte(i, y) { - return i >= y; -} - -function expand(str, isTop) { - var expansions = []; - - var m = balanced('{', '}', str); - if (!m || /\$$/.test(m.pre)) return [str]; - - var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); - var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); - var isSequence = isNumericSequence || isAlphaSequence; - var isOptions = m.body.indexOf(',') >= 0; - if (!isSequence && !isOptions) { - // {a},b} - if (m.post.match(/,.*\}/)) { - str = m.pre + '{' + m.body + escClose + m.post; - return expand(str); - } - return [str]; - } - - var n; - if (isSequence) { - n = m.body.split(/\.\./); - } else { - n = parseCommaParts(m.body); - if (n.length === 1) { - // x{{a,b}}y ==> x{a}y x{b}y - n = expand(n[0], false).map(embrace); - if (n.length === 1) { - var post = m.post.length - ? expand(m.post, false) - : ['']; - return post.map(function(p) { - return m.pre + n[0] + p; - }); - } - } - } - - // at this point, n is the parts, and we know it's not a comma set - // with a single entry. - - // no need to expand pre, since it is guaranteed to be free of brace-sets - var pre = m.pre; - var post = m.post.length - ? expand(m.post, false) - : ['']; - - var N; - - if (isSequence) { - var x = numeric(n[0]); - var y = numeric(n[1]); - var width = Math.max(n[0].length, n[1].length) - var incr = n.length == 3 - ? Math.abs(numeric(n[2])) - : 1; - var test = lte; - var reverse = y < x; - if (reverse) { - incr *= -1; - test = gte; - } - var pad = n.some(isPadded); - - N = []; - - for (var i = x; test(i, y); i += incr) { - var c; - if (isAlphaSequence) { - c = String.fromCharCode(i); - if (c === '\\') - c = ''; - } else { - c = String(i); - if (pad) { - var need = width - c.length; - if (need > 0) { - var z = new Array(need + 1).join('0'); - if (i < 0) - c = '-' + z + c.slice(1); - else - c = z + c; - } - } - } - N.push(c); - } - } else { - N = concatMap(n, function(el) { return expand(el, false) }); - } - - for (var j = 0; j < N.length; j++) { - for (var k = 0; k < post.length; k++) { - var expansion = pre + N[j] + post[k]; - if (!isTop || isSequence || expansion) - expansions.push(expansion); - } - } - - return expansions; -} - - - -/***/ }), - -/***/ 9227: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var bind = __nccwpck_require__(8334); - -var $apply = __nccwpck_require__(5101); -var $call = __nccwpck_require__(2808); -var $reflectApply = __nccwpck_require__(8309); - -/** @type {import('./actualApply')} */ -module.exports = $reflectApply || bind.call($call, $apply); - - -/***/ }), - -/***/ 5101: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./functionApply')} */ -module.exports = Function.prototype.apply; - - -/***/ }), - -/***/ 2808: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./functionCall')} */ -module.exports = Function.prototype.call; - - -/***/ }), - -/***/ 6815: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var bind = __nccwpck_require__(8334); -var $TypeError = __nccwpck_require__(6361); - -var $call = __nccwpck_require__(2808); -var $actualApply = __nccwpck_require__(9227); - -/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */ -module.exports = function callBindBasic(args) { - if (args.length < 1 || typeof args[0] !== 'function') { - throw new $TypeError('a function is required'); - } - return $actualApply(bind, $call, args); -}; - - -/***/ }), - -/***/ 8309: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./reflectApply')} */ -module.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply; - - -/***/ }), - -/***/ 8803: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var GetIntrinsic = __nccwpck_require__(4538); - -var callBind = __nccwpck_require__(2977); - -var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf')); - -module.exports = function callBoundIntrinsic(name, allowMissing) { - var intrinsic = GetIntrinsic(name, !!allowMissing); - if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { - return callBind(intrinsic); - } - return intrinsic; -}; - - -/***/ }), - -/***/ 2977: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var bind = __nccwpck_require__(8334); -var GetIntrinsic = __nccwpck_require__(4538); - -var $apply = GetIntrinsic('%Function.prototype.apply%'); -var $call = GetIntrinsic('%Function.prototype.call%'); -var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply); - -var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true); -var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); -var $max = GetIntrinsic('%Math.max%'); - -if ($defineProperty) { - try { - $defineProperty({}, 'a', { value: 1 }); - } catch (e) { - // IE 8 has a broken defineProperty - $defineProperty = null; - } -} - -module.exports = function callBind(originalFunction) { - var func = $reflectApply(bind, $call, arguments); - if ($gOPD && $defineProperty) { - var desc = $gOPD(func, 'length'); - if (desc.configurable) { - // original length, plus the receiver, minus any additional arguments (after the receiver) - $defineProperty( - func, - 'length', - { value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) } - ); - } - } - return func; -}; - -var applyBind = function applyBind() { - return $reflectApply(bind, $apply, arguments); -}; - -if ($defineProperty) { - $defineProperty(module.exports, 'apply', { value: applyBind }); -} else { - module.exports.apply = applyBind; -} - - -/***/ }), - -/***/ 6891: -/***/ ((module) => { - -module.exports = function (xs, fn) { - var res = []; - for (var i = 0; i < xs.length; i++) { - var x = fn(xs[i], i); - if (isArray(x)) res.push.apply(res, x); - else res.push(x); - } - return res; -}; - -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; - - -/***/ }), - -/***/ 8222: -/***/ ((module, exports, __nccwpck_require__) => { - -/* eslint-env browser */ - -/** - * This is the web browser implementation of `debug()`. - */ - -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; -exports.storage = localstorage(); -exports.destroy = (() => { - let warned = false; - - return () => { - if (!warned) { - warned = true; - console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); - } - }; -})(); - -/** - * Colors. - */ - -exports.colors = [ - '#0000CC', - '#0000FF', - '#0033CC', - '#0033FF', - '#0066CC', - '#0066FF', - '#0099CC', - '#0099FF', - '#00CC00', - '#00CC33', - '#00CC66', - '#00CC99', - '#00CCCC', - '#00CCFF', - '#3300CC', - '#3300FF', - '#3333CC', - '#3333FF', - '#3366CC', - '#3366FF', - '#3399CC', - '#3399FF', - '#33CC00', - '#33CC33', - '#33CC66', - '#33CC99', - '#33CCCC', - '#33CCFF', - '#6600CC', - '#6600FF', - '#6633CC', - '#6633FF', - '#66CC00', - '#66CC33', - '#9900CC', - '#9900FF', - '#9933CC', - '#9933FF', - '#99CC00', - '#99CC33', - '#CC0000', - '#CC0033', - '#CC0066', - '#CC0099', - '#CC00CC', - '#CC00FF', - '#CC3300', - '#CC3333', - '#CC3366', - '#CC3399', - '#CC33CC', - '#CC33FF', - '#CC6600', - '#CC6633', - '#CC9900', - '#CC9933', - '#CCCC00', - '#CCCC33', - '#FF0000', - '#FF0033', - '#FF0066', - '#FF0099', - '#FF00CC', - '#FF00FF', - '#FF3300', - '#FF3333', - '#FF3366', - '#FF3399', - '#FF33CC', - '#FF33FF', - '#FF6600', - '#FF6633', - '#FF9900', - '#FF9933', - '#FFCC00', - '#FFCC33' -]; - -/** - * Currently only WebKit-based Web Inspectors, Firefox >= v31, - * and the Firebug extension (any Firefox version) are known - * to support "%c" CSS customizations. - * - * TODO: add a `localStorage` variable to explicitly enable/disable colors - */ - -// eslint-disable-next-line complexity -function useColors() { - // NB: In an Electron preload script, document will be defined but not fully - // initialized. Since we know we're in Chrome, we'll just detect this case - // explicitly - if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { - return true; - } - - // Internet Explorer and Edge do not support colors. - if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { - return false; - } - - // Is webkit? http://stackoverflow.com/a/16459606/376773 - // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 - return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || - // Is firebug? http://stackoverflow.com/a/398120/376773 - (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || - // Is firefox >= v31? - // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || - // Double check webkit in userAgent just in case we are in a worker - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); -} - -/** - * Colorize log arguments if enabled. - * - * @api public - */ - -function formatArgs(args) { - args[0] = (this.useColors ? '%c' : '') + - this.namespace + - (this.useColors ? ' %c' : ' ') + - args[0] + - (this.useColors ? '%c ' : ' ') + - '+' + module.exports.humanize(this.diff); - - if (!this.useColors) { - return; - } - - const c = 'color: ' + this.color; - args.splice(1, 0, c, 'color: inherit'); - - // The final "%c" is somewhat tricky, because there could be other - // arguments passed either before or after the %c, so we need to - // figure out the correct index to insert the CSS into - let index = 0; - let lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, match => { - if (match === '%%') { - return; - } - index++; - if (match === '%c') { - // We only are interested in the *last* %c - // (the user may have provided their own) - lastC = index; - } - }); - - args.splice(lastC, 0, c); -} - -/** - * Invokes `console.debug()` when available. - * No-op when `console.debug` is not a "function". - * If `console.debug` is not available, falls back - * to `console.log`. - * - * @api public - */ -exports.log = console.debug || console.log || (() => {}); - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ -function save(namespaces) { - try { - if (namespaces) { - exports.storage.setItem('debug', namespaces); - } else { - exports.storage.removeItem('debug'); - } - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } -} - -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ -function load() { - let r; - try { - r = exports.storage.getItem('debug'); - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } - - // If debug isn't set in LS, and we're in Electron, try to load $DEBUG - if (!r && typeof process !== 'undefined' && 'env' in process) { - r = process.env.DEBUG; - } - - return r; -} - -/** - * Localstorage attempts to return the localstorage. - * - * This is necessary because safari throws - * when a user disables cookies/localstorage - * and you attempt to access it. - * - * @return {LocalStorage} - * @api private - */ - -function localstorage() { - try { - // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context - // The Browser also has localStorage in the global context. - return localStorage; - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } -} - -module.exports = __nccwpck_require__(6243)(exports); - -const {formatters} = module.exports; - -/** - * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. - */ - -formatters.j = function (v) { - try { - return JSON.stringify(v); - } catch (error) { - return '[UnexpectedJSONParseError]: ' + error.message; - } -}; - - -/***/ }), - -/***/ 6243: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - - -/** - * This is the common logic for both the Node.js and web browser - * implementations of `debug()`. - */ - -function setup(env) { - createDebug.debug = createDebug; - createDebug.default = createDebug; - createDebug.coerce = coerce; - createDebug.disable = disable; - createDebug.enable = enable; - createDebug.enabled = enabled; - createDebug.humanize = __nccwpck_require__(900); - createDebug.destroy = destroy; - - Object.keys(env).forEach(key => { - createDebug[key] = env[key]; - }); - - /** - * The currently active debug mode names, and names to skip. - */ - - createDebug.names = []; - createDebug.skips = []; - - /** - * Map of special "%n" handling functions, for the debug "format" argument. - * - * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". - */ - createDebug.formatters = {}; - - /** - * Selects a color for a debug namespace - * @param {String} namespace The namespace string for the debug instance to be colored - * @return {Number|String} An ANSI color code for the given namespace - * @api private - */ - function selectColor(namespace) { - let hash = 0; - - for (let i = 0; i < namespace.length; i++) { - hash = ((hash << 5) - hash) + namespace.charCodeAt(i); - hash |= 0; // Convert to 32bit integer - } - - return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; - } - createDebug.selectColor = selectColor; - - /** - * Create a debugger with the given `namespace`. - * - * @param {String} namespace - * @return {Function} - * @api public - */ - function createDebug(namespace) { - let prevTime; - let enableOverride = null; - let namespacesCache; - let enabledCache; - - function debug(...args) { - // Disabled? - if (!debug.enabled) { - return; - } - - const self = debug; - - // Set `diff` timestamp - const curr = Number(new Date()); - const ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - - args[0] = createDebug.coerce(args[0]); - - if (typeof args[0] !== 'string') { - // Anything else let's inspect with %O - args.unshift('%O'); - } - - // Apply any `formatters` transformations - let index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { - // If we encounter an escaped % then don't increase the array index - if (match === '%%') { - return '%'; - } - index++; - const formatter = createDebug.formatters[format]; - if (typeof formatter === 'function') { - const val = args[index]; - match = formatter.call(self, val); - - // Now we need to remove `args[index]` since it's inlined in the `format` - args.splice(index, 1); - index--; - } - return match; - }); - - // Apply env-specific formatting (colors, etc.) - createDebug.formatArgs.call(self, args); - - const logFn = self.log || createDebug.log; - logFn.apply(self, args); - } - - debug.namespace = namespace; - debug.useColors = createDebug.useColors(); - debug.color = createDebug.selectColor(namespace); - debug.extend = extend; - debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. - - Object.defineProperty(debug, 'enabled', { - enumerable: true, - configurable: false, - get: () => { - if (enableOverride !== null) { - return enableOverride; - } - if (namespacesCache !== createDebug.namespaces) { - namespacesCache = createDebug.namespaces; - enabledCache = createDebug.enabled(namespace); - } - - return enabledCache; - }, - set: v => { - enableOverride = v; - } - }); - - // Env-specific initialization logic for debug instances - if (typeof createDebug.init === 'function') { - createDebug.init(debug); - } - - return debug; - } - - function extend(namespace, delimiter) { - const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); - newDebug.log = this.log; - return newDebug; - } - - /** - * Enables a debug mode by namespaces. This can include modes - * separated by a colon and wildcards. - * - * @param {String} namespaces - * @api public - */ - function enable(namespaces) { - createDebug.save(namespaces); - createDebug.namespaces = namespaces; - - createDebug.names = []; - createDebug.skips = []; - - let i; - const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); - const len = split.length; - - for (i = 0; i < len; i++) { - if (!split[i]) { - // ignore empty strings - continue; - } - - namespaces = split[i].replace(/\*/g, '.*?'); - - if (namespaces[0] === '-') { - createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$')); - } else { - createDebug.names.push(new RegExp('^' + namespaces + '$')); - } - } - } - - /** - * Disable debug output. - * - * @return {String} namespaces - * @api public - */ - function disable() { - const namespaces = [ - ...createDebug.names.map(toNamespace), - ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) - ].join(','); - createDebug.enable(''); - return namespaces; - } - - /** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - function enabled(name) { - if (name[name.length - 1] === '*') { - return true; - } - - let i; - let len; - - for (i = 0, len = createDebug.skips.length; i < len; i++) { - if (createDebug.skips[i].test(name)) { - return false; - } - } - - for (i = 0, len = createDebug.names.length; i < len; i++) { - if (createDebug.names[i].test(name)) { - return true; - } - } - - return false; - } - - /** - * Convert regexp to namespace - * - * @param {RegExp} regxep - * @return {String} namespace - * @api private - */ - function toNamespace(regexp) { - return regexp.toString() - .substring(2, regexp.toString().length - 2) - .replace(/\.\*\?$/, '*'); - } - - /** - * Coerce `val`. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - function coerce(val) { - if (val instanceof Error) { - return val.stack || val.message; - } - return val; - } - - /** - * XXX DO NOT USE. This is a temporary stub function. - * XXX It WILL be removed in the next major release. - */ - function destroy() { - console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); - } - - createDebug.enable(createDebug.load()); - - return createDebug; -} - -module.exports = setup; - - -/***/ }), - -/***/ 8237: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -/** - * Detect Electron renderer / nwjs process, which is node, but we should - * treat as a browser. - */ - -if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { - module.exports = __nccwpck_require__(8222); -} else { - module.exports = __nccwpck_require__(5332); -} - - -/***/ }), - -/***/ 5332: -/***/ ((module, exports, __nccwpck_require__) => { - -/** - * Module dependencies. - */ - -const tty = __nccwpck_require__(6224); -const util = __nccwpck_require__(3837); - -/** - * This is the Node.js implementation of `debug()`. - */ - -exports.init = init; -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; -exports.destroy = util.deprecate( - () => {}, - 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' -); - -/** - * Colors. - */ - -exports.colors = [6, 2, 3, 4, 5, 1]; - -try { - // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) - // eslint-disable-next-line import/no-extraneous-dependencies - const supportsColor = __nccwpck_require__(9318); - - if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { - exports.colors = [ - 20, - 21, - 26, - 27, - 32, - 33, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 56, - 57, - 62, - 63, - 68, - 69, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 92, - 93, - 98, - 99, - 112, - 113, - 128, - 129, - 134, - 135, - 148, - 149, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 178, - 179, - 184, - 185, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 214, - 215, - 220, - 221 - ]; - } -} catch (error) { - // Swallow - we only care if `supports-color` is available; it doesn't have to be. -} - -/** - * Build up the default `inspectOpts` object from the environment variables. - * - * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js - */ - -exports.inspectOpts = Object.keys(process.env).filter(key => { - return /^debug_/i.test(key); -}).reduce((obj, key) => { - // Camel-case - const prop = key - .substring(6) - .toLowerCase() - .replace(/_([a-z])/g, (_, k) => { - return k.toUpperCase(); - }); - - // Coerce string value into JS value - let val = process.env[key]; - if (/^(yes|on|true|enabled)$/i.test(val)) { - val = true; - } else if (/^(no|off|false|disabled)$/i.test(val)) { - val = false; - } else if (val === 'null') { - val = null; - } else { - val = Number(val); - } - - obj[prop] = val; - return obj; -}, {}); - -/** - * Is stdout a TTY? Colored output is enabled when `true`. - */ - -function useColors() { - return 'colors' in exports.inspectOpts ? - Boolean(exports.inspectOpts.colors) : - tty.isatty(process.stderr.fd); -} - -/** - * Adds ANSI color escape codes if enabled. - * - * @api public - */ - -function formatArgs(args) { - const {namespace: name, useColors} = this; - - if (useColors) { - const c = this.color; - const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); - const prefix = ` ${colorCode};1m${name} \u001B[0m`; - - args[0] = prefix + args[0].split('\n').join('\n' + prefix); - args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); - } else { - args[0] = getDate() + name + ' ' + args[0]; - } -} - -function getDate() { - if (exports.inspectOpts.hideDate) { - return ''; - } - return new Date().toISOString() + ' '; -} - -/** - * Invokes `util.format()` with the specified arguments and writes to stderr. - */ - -function log(...args) { - return process.stderr.write(util.format(...args) + '\n'); -} - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ -function save(namespaces) { - if (namespaces) { - process.env.DEBUG = namespaces; - } else { - // If you set a process.env field to null or undefined, it gets cast to the - // string 'null' or 'undefined'. Just delete instead. - delete process.env.DEBUG; - } -} - -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ - -function load() { - return process.env.DEBUG; -} - -/** - * Init logic for `debug` instances. - * - * Create a new `inspectOpts` object in case `useColors` is set - * differently for a particular `debug` instance. - */ - -function init(debug) { - debug.inspectOpts = {}; - - const keys = Object.keys(exports.inspectOpts); - for (let i = 0; i < keys.length; i++) { - debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; - } -} - -module.exports = __nccwpck_require__(6243)(exports); - -const {formatters} = module.exports; - -/** - * Map %o to `util.inspect()`, all on a single line. - */ - -formatters.o = function (v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts) - .split('\n') - .map(str => str.trim()) - .join(' '); -}; - -/** - * Map %O to `util.inspect()`, allowing multiple lines if needed. - */ - -formatters.O = function (v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts); -}; - - -/***/ }), - -/***/ 4227: -/***/ ((__unused_webpack_module, __unused_webpack_exports, __nccwpck_require__) => { - -(function () { - (__nccwpck_require__(2437).config)( - Object.assign( - {}, - __nccwpck_require__(5158), - __nccwpck_require__(5478)(process.argv) - ) - ) -})() - - -/***/ }), - -/***/ 5478: -/***/ ((module) => { - -const re = /^dotenv_config_(encoding|path|debug|override)=(.+)$/ - -module.exports = function optionMatcher (args) { - return args.reduce(function (acc, cur) { - const matches = cur.match(re) - if (matches) { - acc[matches[1]] = matches[2] - } - return acc - }, {}) -} - - -/***/ }), - -/***/ 5158: -/***/ ((module) => { - -// ../config.js accepts options via environment variables -const options = {} - -if (process.env.DOTENV_CONFIG_ENCODING != null) { - options.encoding = process.env.DOTENV_CONFIG_ENCODING -} - -if (process.env.DOTENV_CONFIG_PATH != null) { - options.path = process.env.DOTENV_CONFIG_PATH -} - -if (process.env.DOTENV_CONFIG_DEBUG != null) { - options.debug = process.env.DOTENV_CONFIG_DEBUG -} - -if (process.env.DOTENV_CONFIG_OVERRIDE != null) { - options.override = process.env.DOTENV_CONFIG_OVERRIDE -} - -module.exports = options - - -/***/ }), - -/***/ 2437: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const fs = __nccwpck_require__(7147) -const path = __nccwpck_require__(1017) -const os = __nccwpck_require__(2037) -const packageJson = __nccwpck_require__(9968) - -const version = packageJson.version - -const LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg - -// Parser src into an Object -function parse (src) { - const obj = {} - - // Convert buffer to string - let lines = src.toString() - - // Convert line breaks to same format - lines = lines.replace(/\r\n?/mg, '\n') - - let match - while ((match = LINE.exec(lines)) != null) { - const key = match[1] - - // Default undefined or null to empty string - let value = (match[2] || '') - - // Remove whitespace - value = value.trim() - - // Check if double quoted - const maybeQuote = value[0] - - // Remove surrounding quotes - value = value.replace(/^(['"`])([\s\S]*)\1$/mg, '$2') - - // Expand newlines if double quoted - if (maybeQuote === '"') { - value = value.replace(/\\n/g, '\n') - value = value.replace(/\\r/g, '\r') - } - - // Add to object - obj[key] = value - } - - return obj -} - -function _log (message) { - console.log(`[dotenv@${version}][DEBUG] ${message}`) -} - -function _resolveHome (envPath) { - return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath -} - -// Populates process.env from .env file -function config (options) { - let dotenvPath = path.resolve(process.cwd(), '.env') - let encoding = 'utf8' - const debug = Boolean(options && options.debug) - const override = Boolean(options && options.override) - - if (options) { - if (options.path != null) { - dotenvPath = _resolveHome(options.path) - } - if (options.encoding != null) { - encoding = options.encoding - } - } - - try { - // Specifying an encoding returns a string instead of a buffer - const parsed = DotenvModule.parse(fs.readFileSync(dotenvPath, { encoding })) - - Object.keys(parsed).forEach(function (key) { - if (!Object.prototype.hasOwnProperty.call(process.env, key)) { - process.env[key] = parsed[key] - } else { - if (override === true) { - process.env[key] = parsed[key] - } - - if (debug) { - if (override === true) { - _log(`"${key}" is already defined in \`process.env\` and WAS overwritten`) - } else { - _log(`"${key}" is already defined in \`process.env\` and was NOT overwritten`) - } - } - } - }) - - return { parsed } - } catch (e) { - if (debug) { - _log(`Failed to load ${dotenvPath} ${e.message}`) - } - - return { error: e } - } -} - -const DotenvModule = { - config, - parse -} - -module.exports.config = DotenvModule.config -module.exports.parse = DotenvModule.parse -module.exports = DotenvModule - - -/***/ }), - -/***/ 2693: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var callBind = __nccwpck_require__(6815); -var gOPD = __nccwpck_require__(8501); - -var hasProtoAccessor; -try { - // eslint-disable-next-line no-extra-parens, no-proto - hasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype; -} catch (e) { - if (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') { - throw e; - } -} - -// eslint-disable-next-line no-extra-parens -var desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__')); - -var $Object = Object; -var $getPrototypeOf = $Object.getPrototypeOf; - -/** @type {import('./get')} */ -module.exports = desc && typeof desc.get === 'function' - ? callBind([desc.get]) - : typeof $getPrototypeOf === 'function' - ? /** @type {import('./get')} */ function getDunder(value) { - // eslint-disable-next-line eqeqeq - return $getPrototypeOf(value == null ? value : $Object(value)); - } - : false; - - -/***/ }), - -/***/ 6123: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('.')} */ -var $defineProperty = Object.defineProperty || false; -if ($defineProperty) { - try { - $defineProperty({}, 'a', { value: 1 }); - } catch (e) { - // IE 8 has a broken defineProperty - $defineProperty = false; - } -} - -module.exports = $defineProperty; - - -/***/ }), - -/***/ 1933: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./eval')} */ -module.exports = EvalError; - - -/***/ }), - -/***/ 8015: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('.')} */ -module.exports = Error; - - -/***/ }), - -/***/ 4415: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./range')} */ -module.exports = RangeError; - - -/***/ }), - -/***/ 6279: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./ref')} */ -module.exports = ReferenceError; - - -/***/ }), - -/***/ 5474: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./syntax')} */ -module.exports = SyntaxError; - - -/***/ }), - -/***/ 6361: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./type')} */ -module.exports = TypeError; - - -/***/ }), - -/***/ 5065: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./uri')} */ -module.exports = URIError; - - -/***/ }), - -/***/ 8308: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('.')} */ -module.exports = Object; - - -/***/ }), - -/***/ 1133: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -var debug; - -module.exports = function () { - if (!debug) { - try { - /* eslint global-require: off */ - debug = __nccwpck_require__(8237)("follow-redirects"); - } - catch (error) { /* */ } - if (typeof debug !== "function") { - debug = function () { /* */ }; - } - } - debug.apply(null, arguments); -}; - - -/***/ }), - -/***/ 7707: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -var url = __nccwpck_require__(7310); -var URL = url.URL; -var http = __nccwpck_require__(3685); -var https = __nccwpck_require__(5687); -var Writable = (__nccwpck_require__(2781).Writable); -var assert = __nccwpck_require__(9491); -var debug = __nccwpck_require__(1133); - -// Preventive platform detection -// istanbul ignore next -(function detectUnsupportedEnvironment() { - var looksLikeNode = typeof process !== "undefined"; - var looksLikeBrowser = typeof window !== "undefined" && typeof document !== "undefined"; - var looksLikeV8 = isFunction(Error.captureStackTrace); - if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) { - console.warn("The follow-redirects package should be excluded from browser builds."); - } -}()); - -// Whether to use the native URL object or the legacy url module -var useNativeURL = false; -try { - assert(new URL("")); -} -catch (error) { - useNativeURL = error.code === "ERR_INVALID_URL"; -} - -// URL fields to preserve in copy operations -var preservedUrlFields = [ - "auth", - "host", - "hostname", - "href", - "path", - "pathname", - "port", - "protocol", - "query", - "search", - "hash", -]; - -// Create handlers that pass events from native requests -var events = ["abort", "aborted", "connect", "error", "socket", "timeout"]; -var eventHandlers = Object.create(null); -events.forEach(function (event) { - eventHandlers[event] = function (arg1, arg2, arg3) { - this._redirectable.emit(event, arg1, arg2, arg3); - }; -}); - -// Error types with codes -var InvalidUrlError = createErrorType( - "ERR_INVALID_URL", - "Invalid URL", - TypeError -); -var RedirectionError = createErrorType( - "ERR_FR_REDIRECTION_FAILURE", - "Redirected request failed" -); -var TooManyRedirectsError = createErrorType( - "ERR_FR_TOO_MANY_REDIRECTS", - "Maximum number of redirects exceeded", - RedirectionError -); -var MaxBodyLengthExceededError = createErrorType( - "ERR_FR_MAX_BODY_LENGTH_EXCEEDED", - "Request body larger than maxBodyLength limit" -); -var WriteAfterEndError = createErrorType( - "ERR_STREAM_WRITE_AFTER_END", - "write after end" -); - -// istanbul ignore next -var destroy = Writable.prototype.destroy || noop; - -// An HTTP(S) request that can be redirected -function RedirectableRequest(options, responseCallback) { - // Initialize the request - Writable.call(this); - this._sanitizeOptions(options); - this._options = options; - this._ended = false; - this._ending = false; - this._redirectCount = 0; - this._redirects = []; - this._requestBodyLength = 0; - this._requestBodyBuffers = []; - - // Attach a callback if passed - if (responseCallback) { - this.on("response", responseCallback); - } - - // React to responses of native requests - var self = this; - this._onNativeResponse = function (response) { - try { - self._processResponse(response); - } - catch (cause) { - self.emit("error", cause instanceof RedirectionError ? - cause : new RedirectionError({ cause: cause })); - } - }; - - // Perform the first request - this._performRequest(); -} -RedirectableRequest.prototype = Object.create(Writable.prototype); - -RedirectableRequest.prototype.abort = function () { - destroyRequest(this._currentRequest); - this._currentRequest.abort(); - this.emit("abort"); -}; - -RedirectableRequest.prototype.destroy = function (error) { - destroyRequest(this._currentRequest, error); - destroy.call(this, error); - return this; -}; - -// Writes buffered data to the current native request -RedirectableRequest.prototype.write = function (data, encoding, callback) { - // Writing is not allowed if end has been called - if (this._ending) { - throw new WriteAfterEndError(); - } - - // Validate input and shift parameters if necessary - if (!isString(data) && !isBuffer(data)) { - throw new TypeError("data should be a string, Buffer or Uint8Array"); - } - if (isFunction(encoding)) { - callback = encoding; - encoding = null; - } - - // Ignore empty buffers, since writing them doesn't invoke the callback - // https://github.com/nodejs/node/issues/22066 - if (data.length === 0) { - if (callback) { - callback(); - } - return; - } - // Only write when we don't exceed the maximum body length - if (this._requestBodyLength + data.length <= this._options.maxBodyLength) { - this._requestBodyLength += data.length; - this._requestBodyBuffers.push({ data: data, encoding: encoding }); - this._currentRequest.write(data, encoding, callback); - } - // Error when we exceed the maximum body length - else { - this.emit("error", new MaxBodyLengthExceededError()); - this.abort(); - } -}; - -// Ends the current native request -RedirectableRequest.prototype.end = function (data, encoding, callback) { - // Shift parameters if necessary - if (isFunction(data)) { - callback = data; - data = encoding = null; - } - else if (isFunction(encoding)) { - callback = encoding; - encoding = null; - } - - // Write data if needed and end - if (!data) { - this._ended = this._ending = true; - this._currentRequest.end(null, null, callback); - } - else { - var self = this; - var currentRequest = this._currentRequest; - this.write(data, encoding, function () { - self._ended = true; - currentRequest.end(null, null, callback); - }); - this._ending = true; - } -}; - -// Sets a header value on the current native request -RedirectableRequest.prototype.setHeader = function (name, value) { - this._options.headers[name] = value; - this._currentRequest.setHeader(name, value); -}; - -// Clears a header value on the current native request -RedirectableRequest.prototype.removeHeader = function (name) { - delete this._options.headers[name]; - this._currentRequest.removeHeader(name); -}; - -// Global timeout for all underlying requests -RedirectableRequest.prototype.setTimeout = function (msecs, callback) { - var self = this; - - // Destroys the socket on timeout - function destroyOnTimeout(socket) { - socket.setTimeout(msecs); - socket.removeListener("timeout", socket.destroy); - socket.addListener("timeout", socket.destroy); - } - - // Sets up a timer to trigger a timeout event - function startTimer(socket) { - if (self._timeout) { - clearTimeout(self._timeout); - } - self._timeout = setTimeout(function () { - self.emit("timeout"); - clearTimer(); - }, msecs); - destroyOnTimeout(socket); - } - - // Stops a timeout from triggering - function clearTimer() { - // Clear the timeout - if (self._timeout) { - clearTimeout(self._timeout); - self._timeout = null; - } - - // Clean up all attached listeners - self.removeListener("abort", clearTimer); - self.removeListener("error", clearTimer); - self.removeListener("response", clearTimer); - self.removeListener("close", clearTimer); - if (callback) { - self.removeListener("timeout", callback); - } - if (!self.socket) { - self._currentRequest.removeListener("socket", startTimer); - } - } - - // Attach callback if passed - if (callback) { - this.on("timeout", callback); - } - - // Start the timer if or when the socket is opened - if (this.socket) { - startTimer(this.socket); - } - else { - this._currentRequest.once("socket", startTimer); - } - - // Clean up on events - this.on("socket", destroyOnTimeout); - this.on("abort", clearTimer); - this.on("error", clearTimer); - this.on("response", clearTimer); - this.on("close", clearTimer); - - return this; -}; - -// Proxy all other public ClientRequest methods -[ - "flushHeaders", "getHeader", - "setNoDelay", "setSocketKeepAlive", -].forEach(function (method) { - RedirectableRequest.prototype[method] = function (a, b) { - return this._currentRequest[method](a, b); - }; -}); - -// Proxy all public ClientRequest properties -["aborted", "connection", "socket"].forEach(function (property) { - Object.defineProperty(RedirectableRequest.prototype, property, { - get: function () { return this._currentRequest[property]; }, - }); -}); - -RedirectableRequest.prototype._sanitizeOptions = function (options) { - // Ensure headers are always present - if (!options.headers) { - options.headers = {}; - } - - // Since http.request treats host as an alias of hostname, - // but the url module interprets host as hostname plus port, - // eliminate the host property to avoid confusion. - if (options.host) { - // Use hostname if set, because it has precedence - if (!options.hostname) { - options.hostname = options.host; - } - delete options.host; - } - - // Complete the URL object when necessary - if (!options.pathname && options.path) { - var searchPos = options.path.indexOf("?"); - if (searchPos < 0) { - options.pathname = options.path; - } - else { - options.pathname = options.path.substring(0, searchPos); - options.search = options.path.substring(searchPos); - } - } -}; - - -// Executes the next native request (initial or redirect) -RedirectableRequest.prototype._performRequest = function () { - // Load the native protocol - var protocol = this._options.protocol; - var nativeProtocol = this._options.nativeProtocols[protocol]; - if (!nativeProtocol) { - throw new TypeError("Unsupported protocol " + protocol); - } - - // If specified, use the agent corresponding to the protocol - // (HTTP and HTTPS use different types of agents) - if (this._options.agents) { - var scheme = protocol.slice(0, -1); - this._options.agent = this._options.agents[scheme]; - } - - // Create the native request and set up its event handlers - var request = this._currentRequest = - nativeProtocol.request(this._options, this._onNativeResponse); - request._redirectable = this; - for (var event of events) { - request.on(event, eventHandlers[event]); - } - - // RFC7230§5.3.1: When making a request directly to an origin server, […] - // a client MUST send only the absolute path […] as the request-target. - this._currentUrl = /^\//.test(this._options.path) ? - url.format(this._options) : - // When making a request to a proxy, […] - // a client MUST send the target URI in absolute-form […]. - this._options.path; - - // End a redirected request - // (The first request must be ended explicitly with RedirectableRequest#end) - if (this._isRedirect) { - // Write the request entity and end - var i = 0; - var self = this; - var buffers = this._requestBodyBuffers; - (function writeNext(error) { - // Only write if this request has not been redirected yet - // istanbul ignore else - if (request === self._currentRequest) { - // Report any write errors - // istanbul ignore if - if (error) { - self.emit("error", error); - } - // Write the next buffer if there are still left - else if (i < buffers.length) { - var buffer = buffers[i++]; - // istanbul ignore else - if (!request.finished) { - request.write(buffer.data, buffer.encoding, writeNext); - } - } - // End the request if `end` has been called on us - else if (self._ended) { - request.end(); - } - } - }()); - } -}; - -// Processes a response from the current native request -RedirectableRequest.prototype._processResponse = function (response) { - // Store the redirected response - var statusCode = response.statusCode; - if (this._options.trackRedirects) { - this._redirects.push({ - url: this._currentUrl, - headers: response.headers, - statusCode: statusCode, - }); - } - - // RFC7231§6.4: The 3xx (Redirection) class of status code indicates - // that further action needs to be taken by the user agent in order to - // fulfill the request. If a Location header field is provided, - // the user agent MAY automatically redirect its request to the URI - // referenced by the Location field value, - // even if the specific status code is not understood. - - // If the response is not a redirect; return it as-is - var location = response.headers.location; - if (!location || this._options.followRedirects === false || - statusCode < 300 || statusCode >= 400) { - response.responseUrl = this._currentUrl; - response.redirects = this._redirects; - this.emit("response", response); - - // Clean up - this._requestBodyBuffers = []; - return; - } - - // The response is a redirect, so abort the current request - destroyRequest(this._currentRequest); - // Discard the remainder of the response to avoid waiting for data - response.destroy(); - - // RFC7231§6.4: A client SHOULD detect and intervene - // in cyclical redirections (i.e., "infinite" redirection loops). - if (++this._redirectCount > this._options.maxRedirects) { - throw new TooManyRedirectsError(); - } - - // Store the request headers if applicable - var requestHeaders; - var beforeRedirect = this._options.beforeRedirect; - if (beforeRedirect) { - requestHeaders = Object.assign({ - // The Host header was set by nativeProtocol.request - Host: response.req.getHeader("host"), - }, this._options.headers); - } - - // RFC7231§6.4: Automatic redirection needs to done with - // care for methods not known to be safe, […] - // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change - // the request method from POST to GET for the subsequent request. - var method = this._options.method; - if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" || - // RFC7231§6.4.4: The 303 (See Other) status code indicates that - // the server is redirecting the user agent to a different resource […] - // A user agent can perform a retrieval request targeting that URI - // (a GET or HEAD request if using HTTP) […] - (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) { - this._options.method = "GET"; - // Drop a possible entity and headers related to it - this._requestBodyBuffers = []; - removeMatchingHeaders(/^content-/i, this._options.headers); - } - - // Drop the Host header, as the redirect might lead to a different host - var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers); - - // If the redirect is relative, carry over the host of the last request - var currentUrlParts = parseUrl(this._currentUrl); - var currentHost = currentHostHeader || currentUrlParts.host; - var currentUrl = /^\w+:/.test(location) ? this._currentUrl : - url.format(Object.assign(currentUrlParts, { host: currentHost })); - - // Create the redirected request - var redirectUrl = resolveUrl(location, currentUrl); - debug("redirecting to", redirectUrl.href); - this._isRedirect = true; - spreadUrlObject(redirectUrl, this._options); - - // Drop confidential headers when redirecting to a less secure protocol - // or to a different domain that is not a superdomain - if (redirectUrl.protocol !== currentUrlParts.protocol && - redirectUrl.protocol !== "https:" || - redirectUrl.host !== currentHost && - !isSubdomain(redirectUrl.host, currentHost)) { - removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers); - } - - // Evaluate the beforeRedirect callback - if (isFunction(beforeRedirect)) { - var responseDetails = { - headers: response.headers, - statusCode: statusCode, - }; - var requestDetails = { - url: currentUrl, - method: method, - headers: requestHeaders, - }; - beforeRedirect(this._options, responseDetails, requestDetails); - this._sanitizeOptions(this._options); - } - - // Perform the redirected request - this._performRequest(); -}; - -// Wraps the key/value object of protocols with redirect functionality -function wrap(protocols) { - // Default settings - var exports = { - maxRedirects: 21, - maxBodyLength: 10 * 1024 * 1024, - }; - - // Wrap each protocol - var nativeProtocols = {}; - Object.keys(protocols).forEach(function (scheme) { - var protocol = scheme + ":"; - var nativeProtocol = nativeProtocols[protocol] = protocols[scheme]; - var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol); - - // Executes a request, following redirects - function request(input, options, callback) { - // Parse parameters, ensuring that input is an object - if (isURL(input)) { - input = spreadUrlObject(input); - } - else if (isString(input)) { - input = spreadUrlObject(parseUrl(input)); - } - else { - callback = options; - options = validateUrl(input); - input = { protocol: protocol }; - } - if (isFunction(options)) { - callback = options; - options = null; - } - - // Set defaults - options = Object.assign({ - maxRedirects: exports.maxRedirects, - maxBodyLength: exports.maxBodyLength, - }, input, options); - options.nativeProtocols = nativeProtocols; - if (!isString(options.host) && !isString(options.hostname)) { - options.hostname = "::1"; - } - - assert.equal(options.protocol, protocol, "protocol mismatch"); - debug("options", options); - return new RedirectableRequest(options, callback); - } - - // Executes a GET request, following redirects - function get(input, options, callback) { - var wrappedRequest = wrappedProtocol.request(input, options, callback); - wrappedRequest.end(); - return wrappedRequest; - } - - // Expose the properties on the wrapped protocol - Object.defineProperties(wrappedProtocol, { - request: { value: request, configurable: true, enumerable: true, writable: true }, - get: { value: get, configurable: true, enumerable: true, writable: true }, - }); - }); - return exports; -} - -function noop() { /* empty */ } - -function parseUrl(input) { - var parsed; - // istanbul ignore else - if (useNativeURL) { - parsed = new URL(input); - } - else { - // Ensure the URL is valid and absolute - parsed = validateUrl(url.parse(input)); - if (!isString(parsed.protocol)) { - throw new InvalidUrlError({ input }); - } - } - return parsed; -} - -function resolveUrl(relative, base) { - // istanbul ignore next - return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative)); -} - -function validateUrl(input) { - if (/^\[/.test(input.hostname) && !/^\[[:0-9a-f]+\]$/i.test(input.hostname)) { - throw new InvalidUrlError({ input: input.href || input }); - } - if (/^\[/.test(input.host) && !/^\[[:0-9a-f]+\](:\d+)?$/i.test(input.host)) { - throw new InvalidUrlError({ input: input.href || input }); - } - return input; -} - -function spreadUrlObject(urlObject, target) { - var spread = target || {}; - for (var key of preservedUrlFields) { - spread[key] = urlObject[key]; - } - - // Fix IPv6 hostname - if (spread.hostname.startsWith("[")) { - spread.hostname = spread.hostname.slice(1, -1); - } - // Ensure port is a number - if (spread.port !== "") { - spread.port = Number(spread.port); - } - // Concatenate path - spread.path = spread.search ? spread.pathname + spread.search : spread.pathname; - - return spread; -} - -function removeMatchingHeaders(regex, headers) { - var lastValue; - for (var header in headers) { - if (regex.test(header)) { - lastValue = headers[header]; - delete headers[header]; - } - } - return (lastValue === null || typeof lastValue === "undefined") ? - undefined : String(lastValue).trim(); -} - -function createErrorType(code, message, baseClass) { - // Create constructor - function CustomError(properties) { - // istanbul ignore else - if (isFunction(Error.captureStackTrace)) { - Error.captureStackTrace(this, this.constructor); - } - Object.assign(this, properties || {}); - this.code = code; - this.message = this.cause ? message + ": " + this.cause.message : message; - } - - // Attach constructor and set default properties - CustomError.prototype = new (baseClass || Error)(); - Object.defineProperties(CustomError.prototype, { - constructor: { - value: CustomError, - enumerable: false, - }, - name: { - value: "Error [" + code + "]", - enumerable: false, - }, - }); - return CustomError; -} - -function destroyRequest(request, error) { - for (var event of events) { - request.removeListener(event, eventHandlers[event]); - } - request.on("error", noop); - request.destroy(error); -} - -function isSubdomain(subdomain, domain) { - assert(isString(subdomain) && isString(domain)); - var dot = subdomain.length - domain.length - 1; - return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain); -} - -function isString(value) { - return typeof value === "string" || value instanceof String; -} - -function isFunction(value) { - return typeof value === "function"; -} - -function isBuffer(value) { - return typeof value === "object" && ("length" in value); -} - -function isURL(value) { - return URL && value instanceof URL; -} - -// Exports -module.exports = wrap({ http: http, https: https }); -module.exports.wrap = wrap; - - -/***/ }), - -/***/ 6863: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -module.exports = realpath -realpath.realpath = realpath -realpath.sync = realpathSync -realpath.realpathSync = realpathSync -realpath.monkeypatch = monkeypatch -realpath.unmonkeypatch = unmonkeypatch - -var fs = __nccwpck_require__(7147) -var origRealpath = fs.realpath -var origRealpathSync = fs.realpathSync - -var version = process.version -var ok = /^v[0-5]\./.test(version) -var old = __nccwpck_require__(1734) - -function newError (er) { - return er && er.syscall === 'realpath' && ( - er.code === 'ELOOP' || - er.code === 'ENOMEM' || - er.code === 'ENAMETOOLONG' - ) -} - -function realpath (p, cache, cb) { - if (ok) { - return origRealpath(p, cache, cb) - } - - if (typeof cache === 'function') { - cb = cache - cache = null - } - origRealpath(p, cache, function (er, result) { - if (newError(er)) { - old.realpath(p, cache, cb) - } else { - cb(er, result) - } - }) -} - -function realpathSync (p, cache) { - if (ok) { - return origRealpathSync(p, cache) - } - - try { - return origRealpathSync(p, cache) - } catch (er) { - if (newError(er)) { - return old.realpathSync(p, cache) - } else { - throw er - } - } -} - -function monkeypatch () { - fs.realpath = realpath - fs.realpathSync = realpathSync -} - -function unmonkeypatch () { - fs.realpath = origRealpath - fs.realpathSync = origRealpathSync -} - - -/***/ }), - -/***/ 1734: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var pathModule = __nccwpck_require__(1017); -var isWindows = process.platform === 'win32'; -var fs = __nccwpck_require__(7147); - -// JavaScript implementation of realpath, ported from node pre-v6 - -var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG); - -function rethrow() { - // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and - // is fairly slow to generate. - var callback; - if (DEBUG) { - var backtrace = new Error; - callback = debugCallback; - } else - callback = missingCallback; - - return callback; - - function debugCallback(err) { - if (err) { - backtrace.message = err.message; - err = backtrace; - missingCallback(err); - } - } - - function missingCallback(err) { - if (err) { - if (process.throwDeprecation) - throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs - else if (!process.noDeprecation) { - var msg = 'fs: missing callback ' + (err.stack || err.message); - if (process.traceDeprecation) - console.trace(msg); - else - console.error(msg); - } - } - } -} - -function maybeCallback(cb) { - return typeof cb === 'function' ? cb : rethrow(); -} - -var normalize = pathModule.normalize; - -// Regexp that finds the next partion of a (partial) path -// result is [base_with_slash, base], e.g. ['somedir/', 'somedir'] -if (isWindows) { - var nextPartRe = /(.*?)(?:[\/\\]+|$)/g; -} else { - var nextPartRe = /(.*?)(?:[\/]+|$)/g; -} - -// Regex to find the device root, including trailing slash. E.g. 'c:\\'. -if (isWindows) { - var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/; -} else { - var splitRootRe = /^[\/]*/; -} - -exports.realpathSync = function realpathSync(p, cache) { - // make p is absolute - p = pathModule.resolve(p); - - if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { - return cache[p]; - } - - var original = p, - seenLinks = {}, - knownHard = {}; - - // current character position in p - var pos; - // the partial path so far, including a trailing slash if any - var current; - // the partial path without a trailing slash (except when pointing at a root) - var base; - // the partial path scanned in the previous round, with slash - var previous; - - start(); - - function start() { - // Skip over roots - var m = splitRootRe.exec(p); - pos = m[0].length; - current = m[0]; - base = m[0]; - previous = ''; - - // On windows, check that the root exists. On unix there is no need. - if (isWindows && !knownHard[base]) { - fs.lstatSync(base); - knownHard[base] = true; - } - } - - // walk down the path, swapping out linked pathparts for their real - // values - // NB: p.length changes. - while (pos < p.length) { - // find the next part - nextPartRe.lastIndex = pos; - var result = nextPartRe.exec(p); - previous = current; - current += result[0]; - base = previous + result[1]; - pos = nextPartRe.lastIndex; - - // continue if not a symlink - if (knownHard[base] || (cache && cache[base] === base)) { - continue; - } - - var resolvedLink; - if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { - // some known symbolic link. no need to stat again. - resolvedLink = cache[base]; - } else { - var stat = fs.lstatSync(base); - if (!stat.isSymbolicLink()) { - knownHard[base] = true; - if (cache) cache[base] = base; - continue; - } - - // read the link if it wasn't read before - // dev/ino always return 0 on windows, so skip the check. - var linkTarget = null; - if (!isWindows) { - var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); - if (seenLinks.hasOwnProperty(id)) { - linkTarget = seenLinks[id]; - } - } - if (linkTarget === null) { - fs.statSync(base); - linkTarget = fs.readlinkSync(base); - } - resolvedLink = pathModule.resolve(previous, linkTarget); - // track this, if given a cache. - if (cache) cache[base] = resolvedLink; - if (!isWindows) seenLinks[id] = linkTarget; - } - - // resolve the link, then start over - p = pathModule.resolve(resolvedLink, p.slice(pos)); - start(); - } - - if (cache) cache[original] = p; - - return p; -}; - - -exports.realpath = function realpath(p, cache, cb) { - if (typeof cb !== 'function') { - cb = maybeCallback(cache); - cache = null; - } - - // make p is absolute - p = pathModule.resolve(p); - - if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { - return process.nextTick(cb.bind(null, null, cache[p])); - } - - var original = p, - seenLinks = {}, - knownHard = {}; - - // current character position in p - var pos; - // the partial path so far, including a trailing slash if any - var current; - // the partial path without a trailing slash (except when pointing at a root) - var base; - // the partial path scanned in the previous round, with slash - var previous; - - start(); - - function start() { - // Skip over roots - var m = splitRootRe.exec(p); - pos = m[0].length; - current = m[0]; - base = m[0]; - previous = ''; - - // On windows, check that the root exists. On unix there is no need. - if (isWindows && !knownHard[base]) { - fs.lstat(base, function(err) { - if (err) return cb(err); - knownHard[base] = true; - LOOP(); - }); - } else { - process.nextTick(LOOP); - } - } - - // walk down the path, swapping out linked pathparts for their real - // values - function LOOP() { - // stop if scanned past end of path - if (pos >= p.length) { - if (cache) cache[original] = p; - return cb(null, p); - } - - // find the next part - nextPartRe.lastIndex = pos; - var result = nextPartRe.exec(p); - previous = current; - current += result[0]; - base = previous + result[1]; - pos = nextPartRe.lastIndex; - - // continue if not a symlink - if (knownHard[base] || (cache && cache[base] === base)) { - return process.nextTick(LOOP); - } - - if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { - // known symbolic link. no need to stat again. - return gotResolvedLink(cache[base]); - } - - return fs.lstat(base, gotStat); - } - - function gotStat(err, stat) { - if (err) return cb(err); - - // if not a symlink, skip to the next path part - if (!stat.isSymbolicLink()) { - knownHard[base] = true; - if (cache) cache[base] = base; - return process.nextTick(LOOP); - } - - // stat & read the link if not read before - // call gotTarget as soon as the link target is known - // dev/ino always return 0 on windows, so skip the check. - if (!isWindows) { - var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); - if (seenLinks.hasOwnProperty(id)) { - return gotTarget(null, seenLinks[id], base); - } - } - fs.stat(base, function(err) { - if (err) return cb(err); - - fs.readlink(base, function(err, target) { - if (!isWindows) seenLinks[id] = target; - gotTarget(err, target); - }); - }); - } - - function gotTarget(err, target, base) { - if (err) return cb(err); - - var resolvedLink = pathModule.resolve(previous, target); - if (cache) cache[base] = resolvedLink; - gotResolvedLink(resolvedLink); - } - - function gotResolvedLink(resolvedLink) { - // resolve the link, then start over - p = pathModule.resolve(resolvedLink, p.slice(pos)); - start(); - } -}; - - -/***/ }), - -/***/ 9320: -/***/ ((module) => { - -"use strict"; - - -/* eslint no-invalid-this: 1 */ - -var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; -var toStr = Object.prototype.toString; -var max = Math.max; -var funcType = '[object Function]'; - -var concatty = function concatty(a, b) { - var arr = []; - - for (var i = 0; i < a.length; i += 1) { - arr[i] = a[i]; - } - for (var j = 0; j < b.length; j += 1) { - arr[j + a.length] = b[j]; - } - - return arr; -}; - -var slicy = function slicy(arrLike, offset) { - var arr = []; - for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) { - arr[j] = arrLike[i]; - } - return arr; -}; - -var joiny = function (arr, joiner) { - var str = ''; - for (var i = 0; i < arr.length; i += 1) { - str += arr[i]; - if (i + 1 < arr.length) { - str += joiner; - } - } - return str; -}; - -module.exports = function bind(that) { - var target = this; - if (typeof target !== 'function' || toStr.apply(target) !== funcType) { - throw new TypeError(ERROR_MESSAGE + target); - } - var args = slicy(arguments, 1); - - var bound; - var binder = function () { - if (this instanceof bound) { - var result = target.apply( - this, - concatty(args, arguments) - ); - if (Object(result) === result) { - return result; - } - return this; - } - return target.apply( - that, - concatty(args, arguments) - ); - - }; - - var boundLength = max(0, target.length - args.length); - var boundArgs = []; - for (var i = 0; i < boundLength; i++) { - boundArgs[i] = '$' + i; - } - - bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder); - - if (target.prototype) { - var Empty = function Empty() {}; - Empty.prototype = target.prototype; - bound.prototype = new Empty(); - Empty.prototype = null; - } - - return bound; -}; - - -/***/ }), - -/***/ 8334: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var implementation = __nccwpck_require__(9320); - -module.exports = Function.prototype.bind || implementation; - - -/***/ }), - -/***/ 4538: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var undefined; - -var $Object = __nccwpck_require__(8308); - -var $Error = __nccwpck_require__(8015); -var $EvalError = __nccwpck_require__(1933); -var $RangeError = __nccwpck_require__(4415); -var $ReferenceError = __nccwpck_require__(6279); -var $SyntaxError = __nccwpck_require__(5474); -var $TypeError = __nccwpck_require__(6361); -var $URIError = __nccwpck_require__(5065); - -var abs = __nccwpck_require__(9775); -var floor = __nccwpck_require__(924); -var max = __nccwpck_require__(2419); -var min = __nccwpck_require__(3373); -var pow = __nccwpck_require__(8029); -var round = __nccwpck_require__(9396); -var sign = __nccwpck_require__(9091); - -var $Function = Function; - -// eslint-disable-next-line consistent-return -var getEvalledConstructor = function (expressionSyntax) { - try { - return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); - } catch (e) {} -}; - -var $gOPD = __nccwpck_require__(8501); -var $defineProperty = __nccwpck_require__(6123); - -var throwTypeError = function () { - throw new $TypeError(); -}; -var ThrowTypeError = $gOPD - ? (function () { - try { - // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties - arguments.callee; // IE 8 does not throw here - return throwTypeError; - } catch (calleeThrows) { - try { - // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '') - return $gOPD(arguments, 'callee').get; - } catch (gOPDthrows) { - return throwTypeError; - } - } - }()) - : throwTypeError; - -var hasSymbols = __nccwpck_require__(587)(); - -var getProto = __nccwpck_require__(3592); -var $ObjectGPO = __nccwpck_require__(5045); -var $ReflectGPO = __nccwpck_require__(8859); - -var $apply = __nccwpck_require__(5101); -var $call = __nccwpck_require__(2808); - -var needsEval = {}; - -var TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array); - -var INTRINSICS = { - __proto__: null, - '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError, - '%Array%': Array, - '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, - '%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined, - '%AsyncFromSyncIteratorPrototype%': undefined, - '%AsyncFunction%': needsEval, - '%AsyncGenerator%': needsEval, - '%AsyncGeneratorFunction%': needsEval, - '%AsyncIteratorPrototype%': needsEval, - '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, - '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt, - '%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array, - '%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array, - '%Boolean%': Boolean, - '%DataView%': typeof DataView === 'undefined' ? undefined : DataView, - '%Date%': Date, - '%decodeURI%': decodeURI, - '%decodeURIComponent%': decodeURIComponent, - '%encodeURI%': encodeURI, - '%encodeURIComponent%': encodeURIComponent, - '%Error%': $Error, - '%eval%': eval, // eslint-disable-line no-eval - '%EvalError%': $EvalError, - '%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array, - '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, - '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, - '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry, - '%Function%': $Function, - '%GeneratorFunction%': needsEval, - '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, - '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, - '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, - '%isFinite%': isFinite, - '%isNaN%': isNaN, - '%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined, - '%JSON%': typeof JSON === 'object' ? JSON : undefined, - '%Map%': typeof Map === 'undefined' ? undefined : Map, - '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()), - '%Math%': Math, - '%Number%': Number, - '%Object%': $Object, - '%Object.getOwnPropertyDescriptor%': $gOPD, - '%parseFloat%': parseFloat, - '%parseInt%': parseInt, - '%Promise%': typeof Promise === 'undefined' ? undefined : Promise, - '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, - '%RangeError%': $RangeError, - '%ReferenceError%': $ReferenceError, - '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, - '%RegExp%': RegExp, - '%Set%': typeof Set === 'undefined' ? undefined : Set, - '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()), - '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, - '%String%': String, - '%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined, - '%Symbol%': hasSymbols ? Symbol : undefined, - '%SyntaxError%': $SyntaxError, - '%ThrowTypeError%': ThrowTypeError, - '%TypedArray%': TypedArray, - '%TypeError%': $TypeError, - '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, - '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, - '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, - '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, - '%URIError%': $URIError, - '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, - '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef, - '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet, - - '%Function.prototype.call%': $call, - '%Function.prototype.apply%': $apply, - '%Object.defineProperty%': $defineProperty, - '%Object.getPrototypeOf%': $ObjectGPO, - '%Math.abs%': abs, - '%Math.floor%': floor, - '%Math.max%': max, - '%Math.min%': min, - '%Math.pow%': pow, - '%Math.round%': round, - '%Math.sign%': sign, - '%Reflect.getPrototypeOf%': $ReflectGPO -}; - -if (getProto) { - try { - null.error; // eslint-disable-line no-unused-expressions - } catch (e) { - // https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229 - var errorProto = getProto(getProto(e)); - INTRINSICS['%Error.prototype%'] = errorProto; - } -} - -var doEval = function doEval(name) { - var value; - if (name === '%AsyncFunction%') { - value = getEvalledConstructor('async function () {}'); - } else if (name === '%GeneratorFunction%') { - value = getEvalledConstructor('function* () {}'); - } else if (name === '%AsyncGeneratorFunction%') { - value = getEvalledConstructor('async function* () {}'); - } else if (name === '%AsyncGenerator%') { - var fn = doEval('%AsyncGeneratorFunction%'); - if (fn) { - value = fn.prototype; - } - } else if (name === '%AsyncIteratorPrototype%') { - var gen = doEval('%AsyncGenerator%'); - if (gen && getProto) { - value = getProto(gen.prototype); - } - } - - INTRINSICS[name] = value; - - return value; -}; - -var LEGACY_ALIASES = { - __proto__: null, - '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], - '%ArrayPrototype%': ['Array', 'prototype'], - '%ArrayProto_entries%': ['Array', 'prototype', 'entries'], - '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], - '%ArrayProto_keys%': ['Array', 'prototype', 'keys'], - '%ArrayProto_values%': ['Array', 'prototype', 'values'], - '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], - '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], - '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], - '%BooleanPrototype%': ['Boolean', 'prototype'], - '%DataViewPrototype%': ['DataView', 'prototype'], - '%DatePrototype%': ['Date', 'prototype'], - '%ErrorPrototype%': ['Error', 'prototype'], - '%EvalErrorPrototype%': ['EvalError', 'prototype'], - '%Float32ArrayPrototype%': ['Float32Array', 'prototype'], - '%Float64ArrayPrototype%': ['Float64Array', 'prototype'], - '%FunctionPrototype%': ['Function', 'prototype'], - '%Generator%': ['GeneratorFunction', 'prototype'], - '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], - '%Int8ArrayPrototype%': ['Int8Array', 'prototype'], - '%Int16ArrayPrototype%': ['Int16Array', 'prototype'], - '%Int32ArrayPrototype%': ['Int32Array', 'prototype'], - '%JSONParse%': ['JSON', 'parse'], - '%JSONStringify%': ['JSON', 'stringify'], - '%MapPrototype%': ['Map', 'prototype'], - '%NumberPrototype%': ['Number', 'prototype'], - '%ObjectPrototype%': ['Object', 'prototype'], - '%ObjProto_toString%': ['Object', 'prototype', 'toString'], - '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], - '%PromisePrototype%': ['Promise', 'prototype'], - '%PromiseProto_then%': ['Promise', 'prototype', 'then'], - '%Promise_all%': ['Promise', 'all'], - '%Promise_reject%': ['Promise', 'reject'], - '%Promise_resolve%': ['Promise', 'resolve'], - '%RangeErrorPrototype%': ['RangeError', 'prototype'], - '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], - '%RegExpPrototype%': ['RegExp', 'prototype'], - '%SetPrototype%': ['Set', 'prototype'], - '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], - '%StringPrototype%': ['String', 'prototype'], - '%SymbolPrototype%': ['Symbol', 'prototype'], - '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], - '%TypedArrayPrototype%': ['TypedArray', 'prototype'], - '%TypeErrorPrototype%': ['TypeError', 'prototype'], - '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], - '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], - '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], - '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], - '%URIErrorPrototype%': ['URIError', 'prototype'], - '%WeakMapPrototype%': ['WeakMap', 'prototype'], - '%WeakSetPrototype%': ['WeakSet', 'prototype'] -}; - -var bind = __nccwpck_require__(8334); -var hasOwn = __nccwpck_require__(2157); -var $concat = bind.call($call, Array.prototype.concat); -var $spliceApply = bind.call($apply, Array.prototype.splice); -var $replace = bind.call($call, String.prototype.replace); -var $strSlice = bind.call($call, String.prototype.slice); -var $exec = bind.call($call, RegExp.prototype.exec); - -/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */ -var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; -var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */ -var stringToPath = function stringToPath(string) { - var first = $strSlice(string, 0, 1); - var last = $strSlice(string, -1); - if (first === '%' && last !== '%') { - throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`'); - } else if (last === '%' && first !== '%') { - throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`'); - } - var result = []; - $replace(string, rePropName, function (match, number, quote, subString) { - result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match; - }); - return result; -}; -/* end adaptation */ - -var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { - var intrinsicName = name; - var alias; - if (hasOwn(LEGACY_ALIASES, intrinsicName)) { - alias = LEGACY_ALIASES[intrinsicName]; - intrinsicName = '%' + alias[0] + '%'; - } - - if (hasOwn(INTRINSICS, intrinsicName)) { - var value = INTRINSICS[intrinsicName]; - if (value === needsEval) { - value = doEval(intrinsicName); - } - if (typeof value === 'undefined' && !allowMissing) { - throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); - } - - return { - alias: alias, - name: intrinsicName, - value: value - }; - } - - throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); -}; - -module.exports = function GetIntrinsic(name, allowMissing) { - if (typeof name !== 'string' || name.length === 0) { - throw new $TypeError('intrinsic name must be a non-empty string'); - } - if (arguments.length > 1 && typeof allowMissing !== 'boolean') { - throw new $TypeError('"allowMissing" argument must be a boolean'); - } - - if ($exec(/^%?[^%]*%?$/, name) === null) { - throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name'); - } - var parts = stringToPath(name); - var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; - - var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); - var intrinsicRealName = intrinsic.name; - var value = intrinsic.value; - var skipFurtherCaching = false; - - var alias = intrinsic.alias; - if (alias) { - intrinsicBaseName = alias[0]; - $spliceApply(parts, $concat([0, 1], alias)); - } - - for (var i = 1, isOwn = true; i < parts.length; i += 1) { - var part = parts[i]; - var first = $strSlice(part, 0, 1); - var last = $strSlice(part, -1); - if ( - ( - (first === '"' || first === "'" || first === '`') - || (last === '"' || last === "'" || last === '`') - ) - && first !== last - ) { - throw new $SyntaxError('property names with quotes must have matching quotes'); - } - if (part === 'constructor' || !isOwn) { - skipFurtherCaching = true; - } - - intrinsicBaseName += '.' + part; - intrinsicRealName = '%' + intrinsicBaseName + '%'; - - if (hasOwn(INTRINSICS, intrinsicRealName)) { - value = INTRINSICS[intrinsicRealName]; - } else if (value != null) { - if (!(part in value)) { - if (!allowMissing) { - throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.'); - } - return void undefined; - } - if ($gOPD && (i + 1) >= parts.length) { - var desc = $gOPD(value, part); - isOwn = !!desc; - - // By convention, when a data property is converted to an accessor - // property to emulate a data property that does not suffer from - // the override mistake, that accessor's getter is marked with - // an `originalValue` property. Here, when we detect this, we - // uphold the illusion by pretending to see that original data - // property, i.e., returning the value rather than the getter - // itself. - if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { - value = desc.get; - } else { - value = value[part]; - } - } else { - isOwn = hasOwn(value, part); - value = value[part]; - } - - if (isOwn && !skipFurtherCaching) { - INTRINSICS[intrinsicRealName] = value; - } - } - } - return value; -}; - - -/***/ }), - -/***/ 5045: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var $Object = __nccwpck_require__(8308); - -/** @type {import('./Object.getPrototypeOf')} */ -module.exports = $Object.getPrototypeOf || null; - - -/***/ }), - -/***/ 8859: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./Reflect.getPrototypeOf')} */ -module.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null; - - -/***/ }), - -/***/ 3592: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var reflectGetProto = __nccwpck_require__(8859); -var originalGetProto = __nccwpck_require__(5045); - -var getDunderProto = __nccwpck_require__(2693); - -/** @type {import('.')} */ -module.exports = reflectGetProto - ? function getProto(O) { - // @ts-expect-error TS can't narrow inside a closure, for some reason - return reflectGetProto(O); - } - : originalGetProto - ? function getProto(O) { - if (!O || (typeof O !== 'object' && typeof O !== 'function')) { - throw new TypeError('getProto: not an object'); - } - // @ts-expect-error TS can't narrow inside a closure, for some reason - return originalGetProto(O); - } - : getDunderProto - ? function getProto(O) { - // @ts-expect-error TS can't narrow inside a closure, for some reason - return getDunderProto(O); - } - : null; - - -/***/ }), - -/***/ 7625: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -exports.setopts = setopts -exports.ownProp = ownProp -exports.makeAbs = makeAbs -exports.finish = finish -exports.mark = mark -exports.isIgnored = isIgnored -exports.childrenIgnored = childrenIgnored - -function ownProp (obj, field) { - return Object.prototype.hasOwnProperty.call(obj, field) -} - -var fs = __nccwpck_require__(7147) -var path = __nccwpck_require__(1017) -var minimatch = __nccwpck_require__(6453) -var isAbsolute = __nccwpck_require__(8714) -var Minimatch = minimatch.Minimatch - -function alphasort (a, b) { - return a.localeCompare(b, 'en') -} - -function setupIgnores (self, options) { - self.ignore = options.ignore || [] - - if (!Array.isArray(self.ignore)) - self.ignore = [self.ignore] - - if (self.ignore.length) { - self.ignore = self.ignore.map(ignoreMap) - } -} - -// ignore patterns are always in dot:true mode. -function ignoreMap (pattern) { - var gmatcher = null - if (pattern.slice(-3) === '/**') { - var gpattern = pattern.replace(/(\/\*\*)+$/, '') - gmatcher = new Minimatch(gpattern, { dot: true }) - } - - return { - matcher: new Minimatch(pattern, { dot: true }), - gmatcher: gmatcher - } -} - -function setopts (self, pattern, options) { - if (!options) - options = {} - - // base-matching: just use globstar for that. - if (options.matchBase && -1 === pattern.indexOf("/")) { - if (options.noglobstar) { - throw new Error("base matching requires globstar") - } - pattern = "**/" + pattern - } - - self.silent = !!options.silent - self.pattern = pattern - self.strict = options.strict !== false - self.realpath = !!options.realpath - self.realpathCache = options.realpathCache || Object.create(null) - self.follow = !!options.follow - self.dot = !!options.dot - self.mark = !!options.mark - self.nodir = !!options.nodir - if (self.nodir) - self.mark = true - self.sync = !!options.sync - self.nounique = !!options.nounique - self.nonull = !!options.nonull - self.nosort = !!options.nosort - self.nocase = !!options.nocase - self.stat = !!options.stat - self.noprocess = !!options.noprocess - self.absolute = !!options.absolute - self.fs = options.fs || fs - - self.maxLength = options.maxLength || Infinity - self.cache = options.cache || Object.create(null) - self.statCache = options.statCache || Object.create(null) - self.symlinks = options.symlinks || Object.create(null) - - setupIgnores(self, options) - - self.changedCwd = false - var cwd = process.cwd() - if (!ownProp(options, "cwd")) - self.cwd = cwd - else { - self.cwd = path.resolve(options.cwd) - self.changedCwd = self.cwd !== cwd - } - - self.root = options.root || path.resolve(self.cwd, "/") - self.root = path.resolve(self.root) - if (process.platform === "win32") - self.root = self.root.replace(/\\/g, "/") - - // TODO: is an absolute `cwd` supposed to be resolved against `root`? - // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test') - self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd) - if (process.platform === "win32") - self.cwdAbs = self.cwdAbs.replace(/\\/g, "/") - self.nomount = !!options.nomount - - // disable comments and negation in Minimatch. - // Note that they are not supported in Glob itself anyway. - options.nonegate = true - options.nocomment = true - // always treat \ in patterns as escapes, not path separators - options.allowWindowsEscape = false - - self.minimatch = new Minimatch(pattern, options) - self.options = self.minimatch.options -} - -function finish (self) { - var nou = self.nounique - var all = nou ? [] : Object.create(null) - - for (var i = 0, l = self.matches.length; i < l; i ++) { - var matches = self.matches[i] - if (!matches || Object.keys(matches).length === 0) { - if (self.nonull) { - // do like the shell, and spit out the literal glob - var literal = self.minimatch.globSet[i] - if (nou) - all.push(literal) - else - all[literal] = true - } - } else { - // had matches - var m = Object.keys(matches) - if (nou) - all.push.apply(all, m) - else - m.forEach(function (m) { - all[m] = true - }) - } - } - - if (!nou) - all = Object.keys(all) - - if (!self.nosort) - all = all.sort(alphasort) - - // at *some* point we statted all of these - if (self.mark) { - for (var i = 0; i < all.length; i++) { - all[i] = self._mark(all[i]) - } - if (self.nodir) { - all = all.filter(function (e) { - var notDir = !(/\/$/.test(e)) - var c = self.cache[e] || self.cache[makeAbs(self, e)] - if (notDir && c) - notDir = c !== 'DIR' && !Array.isArray(c) - return notDir - }) - } - } - - if (self.ignore.length) - all = all.filter(function(m) { - return !isIgnored(self, m) - }) - - self.found = all -} - -function mark (self, p) { - var abs = makeAbs(self, p) - var c = self.cache[abs] - var m = p - if (c) { - var isDir = c === 'DIR' || Array.isArray(c) - var slash = p.slice(-1) === '/' - - if (isDir && !slash) - m += '/' - else if (!isDir && slash) - m = m.slice(0, -1) - - if (m !== p) { - var mabs = makeAbs(self, m) - self.statCache[mabs] = self.statCache[abs] - self.cache[mabs] = self.cache[abs] - } - } - - return m -} - -// lotta situps... -function makeAbs (self, f) { - var abs = f - if (f.charAt(0) === '/') { - abs = path.join(self.root, f) - } else if (isAbsolute(f) || f === '') { - abs = f - } else if (self.changedCwd) { - abs = path.resolve(self.cwd, f) - } else { - abs = path.resolve(f) - } - - if (process.platform === 'win32') - abs = abs.replace(/\\/g, '/') - - return abs -} - - -// Return true, if pattern ends with globstar '**', for the accompanying parent directory. -// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents -function isIgnored (self, path) { - if (!self.ignore.length) - return false - - return self.ignore.some(function(item) { - return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) - }) -} - -function childrenIgnored (self, path) { - if (!self.ignore.length) - return false - - return self.ignore.some(function(item) { - return !!(item.gmatcher && item.gmatcher.match(path)) - }) -} - - -/***/ }), - -/***/ 1957: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -// Approach: -// -// 1. Get the minimatch set -// 2. For each pattern in the set, PROCESS(pattern, false) -// 3. Store matches per-set, then uniq them -// -// PROCESS(pattern, inGlobStar) -// Get the first [n] items from pattern that are all strings -// Join these together. This is PREFIX. -// If there is no more remaining, then stat(PREFIX) and -// add to matches if it succeeds. END. -// -// If inGlobStar and PREFIX is symlink and points to dir -// set ENTRIES = [] -// else readdir(PREFIX) as ENTRIES -// If fail, END -// -// with ENTRIES -// If pattern[n] is GLOBSTAR -// // handle the case where the globstar match is empty -// // by pruning it out, and testing the resulting pattern -// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) -// // handle other cases. -// for ENTRY in ENTRIES (not dotfiles) -// // attach globstar + tail onto the entry -// // Mark that this entry is a globstar match -// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) -// -// else // not globstar -// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) -// Test ENTRY against pattern[n] -// If fails, continue -// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) -// -// Caveat: -// Cache all stats and readdirs results to minimize syscall. Since all -// we ever care about is existence and directory-ness, we can just keep -// `true` for files, and [children,...] for directories, or `false` for -// things that don't exist. - -module.exports = glob - -var rp = __nccwpck_require__(6863) -var minimatch = __nccwpck_require__(6453) -var Minimatch = minimatch.Minimatch -var inherits = __nccwpck_require__(4124) -var EE = (__nccwpck_require__(2361).EventEmitter) -var path = __nccwpck_require__(1017) -var assert = __nccwpck_require__(9491) -var isAbsolute = __nccwpck_require__(8714) -var globSync = __nccwpck_require__(9010) -var common = __nccwpck_require__(7625) -var setopts = common.setopts -var ownProp = common.ownProp -var inflight = __nccwpck_require__(2492) -var util = __nccwpck_require__(3837) -var childrenIgnored = common.childrenIgnored -var isIgnored = common.isIgnored - -var once = __nccwpck_require__(1223) - -function glob (pattern, options, cb) { - if (typeof options === 'function') cb = options, options = {} - if (!options) options = {} - - if (options.sync) { - if (cb) - throw new TypeError('callback provided to sync glob') - return globSync(pattern, options) - } - - return new Glob(pattern, options, cb) -} - -glob.sync = globSync -var GlobSync = glob.GlobSync = globSync.GlobSync - -// old api surface -glob.glob = glob - -function extend (origin, add) { - if (add === null || typeof add !== 'object') { - return origin - } - - var keys = Object.keys(add) - var i = keys.length - while (i--) { - origin[keys[i]] = add[keys[i]] - } - return origin -} - -glob.hasMagic = function (pattern, options_) { - var options = extend({}, options_) - options.noprocess = true - - var g = new Glob(pattern, options) - var set = g.minimatch.set - - if (!pattern) - return false - - if (set.length > 1) - return true - - for (var j = 0; j < set[0].length; j++) { - if (typeof set[0][j] !== 'string') - return true - } - - return false -} - -glob.Glob = Glob -inherits(Glob, EE) -function Glob (pattern, options, cb) { - if (typeof options === 'function') { - cb = options - options = null - } - - if (options && options.sync) { - if (cb) - throw new TypeError('callback provided to sync glob') - return new GlobSync(pattern, options) - } - - if (!(this instanceof Glob)) - return new Glob(pattern, options, cb) - - setopts(this, pattern, options) - this._didRealPath = false - - // process each pattern in the minimatch set - var n = this.minimatch.set.length - - // The matches are stored as {: true,...} so that - // duplicates are automagically pruned. - // Later, we do an Object.keys() on these. - // Keep them as a list so we can fill in when nonull is set. - this.matches = new Array(n) - - if (typeof cb === 'function') { - cb = once(cb) - this.on('error', cb) - this.on('end', function (matches) { - cb(null, matches) - }) - } - - var self = this - this._processing = 0 - - this._emitQueue = [] - this._processQueue = [] - this.paused = false - - if (this.noprocess) - return this - - if (n === 0) - return done() - - var sync = true - for (var i = 0; i < n; i ++) { - this._process(this.minimatch.set[i], i, false, done) - } - sync = false - - function done () { - --self._processing - if (self._processing <= 0) { - if (sync) { - process.nextTick(function () { - self._finish() - }) - } else { - self._finish() - } - } - } -} - -Glob.prototype._finish = function () { - assert(this instanceof Glob) - if (this.aborted) - return - - if (this.realpath && !this._didRealpath) - return this._realpath() - - common.finish(this) - this.emit('end', this.found) -} - -Glob.prototype._realpath = function () { - if (this._didRealpath) - return - - this._didRealpath = true - - var n = this.matches.length - if (n === 0) - return this._finish() - - var self = this - for (var i = 0; i < this.matches.length; i++) - this._realpathSet(i, next) - - function next () { - if (--n === 0) - self._finish() - } -} - -Glob.prototype._realpathSet = function (index, cb) { - var matchset = this.matches[index] - if (!matchset) - return cb() - - var found = Object.keys(matchset) - var self = this - var n = found.length - - if (n === 0) - return cb() - - var set = this.matches[index] = Object.create(null) - found.forEach(function (p, i) { - // If there's a problem with the stat, then it means that - // one or more of the links in the realpath couldn't be - // resolved. just return the abs value in that case. - p = self._makeAbs(p) - rp.realpath(p, self.realpathCache, function (er, real) { - if (!er) - set[real] = true - else if (er.syscall === 'stat') - set[p] = true - else - self.emit('error', er) // srsly wtf right here - - if (--n === 0) { - self.matches[index] = set - cb() - } - }) - }) -} - -Glob.prototype._mark = function (p) { - return common.mark(this, p) -} - -Glob.prototype._makeAbs = function (f) { - return common.makeAbs(this, f) -} - -Glob.prototype.abort = function () { - this.aborted = true - this.emit('abort') -} - -Glob.prototype.pause = function () { - if (!this.paused) { - this.paused = true - this.emit('pause') - } -} - -Glob.prototype.resume = function () { - if (this.paused) { - this.emit('resume') - this.paused = false - if (this._emitQueue.length) { - var eq = this._emitQueue.slice(0) - this._emitQueue.length = 0 - for (var i = 0; i < eq.length; i ++) { - var e = eq[i] - this._emitMatch(e[0], e[1]) - } - } - if (this._processQueue.length) { - var pq = this._processQueue.slice(0) - this._processQueue.length = 0 - for (var i = 0; i < pq.length; i ++) { - var p = pq[i] - this._processing-- - this._process(p[0], p[1], p[2], p[3]) - } - } - } -} - -Glob.prototype._process = function (pattern, index, inGlobStar, cb) { - assert(this instanceof Glob) - assert(typeof cb === 'function') - - if (this.aborted) - return - - this._processing++ - if (this.paused) { - this._processQueue.push([pattern, index, inGlobStar, cb]) - return - } - - //console.error('PROCESS %d', this._processing, pattern) - - // Get the first [n] parts of pattern that are all strings. - var n = 0 - while (typeof pattern[n] === 'string') { - n ++ - } - // now n is the index of the first one that is *not* a string. - - // see if there's anything else - var prefix - switch (n) { - // if not, then this is rather simple - case pattern.length: - this._processSimple(pattern.join('/'), index, cb) - return - - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null - break - - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's 'absolute' like /foo/bar, - // or 'relative' like '../baz' - prefix = pattern.slice(0, n).join('/') - break - } - - var remain = pattern.slice(n) - - // get the list of entries. - var read - if (prefix === null) - read = '.' - else if (isAbsolute(prefix) || - isAbsolute(pattern.map(function (p) { - return typeof p === 'string' ? p : '[*]' - }).join('/'))) { - if (!prefix || !isAbsolute(prefix)) - prefix = '/' + prefix - read = prefix - } else - read = prefix - - var abs = this._makeAbs(read) - - //if ignored, skip _processing - if (childrenIgnored(this, read)) - return cb() - - var isGlobStar = remain[0] === minimatch.GLOBSTAR - if (isGlobStar) - this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) - else - this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) -} - -Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { - var self = this - this._readdir(abs, inGlobStar, function (er, entries) { - return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) - }) -} - -Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { - - // if the abs isn't a dir, then nothing can match! - if (!entries) - return cb() - - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = remain[0] - var negate = !!this.minimatch.negate - var rawGlob = pn._glob - var dotOk = this.dot || rawGlob.charAt(0) === '.' - - var matchedEntries = [] - for (var i = 0; i < entries.length; i++) { - var e = entries[i] - if (e.charAt(0) !== '.' || dotOk) { - var m - if (negate && !prefix) { - m = !e.match(pn) - } else { - m = e.match(pn) - } - if (m) - matchedEntries.push(e) - } - } - - //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) - - var len = matchedEntries.length - // If there are no matched entries, then nothing matches. - if (len === 0) - return cb() - - // if this is the last remaining pattern bit, then no need for - // an additional stat *unless* the user has specified mark or - // stat explicitly. We know they exist, since readdir returned - // them. - - if (remain.length === 1 && !this.mark && !this.stat) { - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - if (prefix) { - if (prefix !== '/') - e = prefix + '/' + e - else - e = prefix + e - } - - if (e.charAt(0) === '/' && !this.nomount) { - e = path.join(this.root, e) - } - this._emitMatch(index, e) - } - // This was the last one, and no stats were needed - return cb() - } - - // now test all matched entries as stand-ins for that part - // of the pattern. - remain.shift() - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - var newPattern - if (prefix) { - if (prefix !== '/') - e = prefix + '/' + e - else - e = prefix + e - } - this._process([e].concat(remain), index, inGlobStar, cb) - } - cb() -} - -Glob.prototype._emitMatch = function (index, e) { - if (this.aborted) - return - - if (isIgnored(this, e)) - return - - if (this.paused) { - this._emitQueue.push([index, e]) - return - } - - var abs = isAbsolute(e) ? e : this._makeAbs(e) - - if (this.mark) - e = this._mark(e) - - if (this.absolute) - e = abs - - if (this.matches[index][e]) - return - - if (this.nodir) { - var c = this.cache[abs] - if (c === 'DIR' || Array.isArray(c)) - return - } - - this.matches[index][e] = true - - var st = this.statCache[abs] - if (st) - this.emit('stat', e, st) - - this.emit('match', e) -} - -Glob.prototype._readdirInGlobStar = function (abs, cb) { - if (this.aborted) - return - - // follow all symlinked directories forever - // just proceed as if this is a non-globstar situation - if (this.follow) - return this._readdir(abs, false, cb) - - var lstatkey = 'lstat\0' + abs - var self = this - var lstatcb = inflight(lstatkey, lstatcb_) - - if (lstatcb) - self.fs.lstat(abs, lstatcb) - - function lstatcb_ (er, lstat) { - if (er && er.code === 'ENOENT') - return cb() - - var isSym = lstat && lstat.isSymbolicLink() - self.symlinks[abs] = isSym - - // If it's not a symlink or a dir, then it's definitely a regular file. - // don't bother doing a readdir in that case. - if (!isSym && lstat && !lstat.isDirectory()) { - self.cache[abs] = 'FILE' - cb() - } else - self._readdir(abs, false, cb) - } -} - -Glob.prototype._readdir = function (abs, inGlobStar, cb) { - if (this.aborted) - return - - cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) - if (!cb) - return - - //console.error('RD %j %j', +inGlobStar, abs) - if (inGlobStar && !ownProp(this.symlinks, abs)) - return this._readdirInGlobStar(abs, cb) - - if (ownProp(this.cache, abs)) { - var c = this.cache[abs] - if (!c || c === 'FILE') - return cb() - - if (Array.isArray(c)) - return cb(null, c) - } - - var self = this - self.fs.readdir(abs, readdirCb(this, abs, cb)) -} - -function readdirCb (self, abs, cb) { - return function (er, entries) { - if (er) - self._readdirError(abs, er, cb) - else - self._readdirEntries(abs, entries, cb) - } -} - -Glob.prototype._readdirEntries = function (abs, entries, cb) { - if (this.aborted) - return - - // if we haven't asked to stat everything, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. - if (!this.mark && !this.stat) { - for (var i = 0; i < entries.length; i ++) { - var e = entries[i] - if (abs === '/') - e = abs + e - else - e = abs + '/' + e - this.cache[e] = true - } - } - - this.cache[abs] = entries - return cb(null, entries) -} - -Glob.prototype._readdirError = function (f, er, cb) { - if (this.aborted) - return - - // handle errors, and cache the information - switch (er.code) { - case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 - case 'ENOTDIR': // totally normal. means it *does* exist. - var abs = this._makeAbs(f) - this.cache[abs] = 'FILE' - if (abs === this.cwdAbs) { - var error = new Error(er.code + ' invalid cwd ' + this.cwd) - error.path = this.cwd - error.code = er.code - this.emit('error', error) - this.abort() - } - break - - case 'ENOENT': // not terribly unusual - case 'ELOOP': - case 'ENAMETOOLONG': - case 'UNKNOWN': - this.cache[this._makeAbs(f)] = false - break - - default: // some unusual error. Treat as failure. - this.cache[this._makeAbs(f)] = false - if (this.strict) { - this.emit('error', er) - // If the error is handled, then we abort - // if not, we threw out of here - this.abort() - } - if (!this.silent) - console.error('glob error', er) - break - } - - return cb() -} - -Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { - var self = this - this._readdir(abs, inGlobStar, function (er, entries) { - self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) - }) -} - - -Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { - //console.error('pgs2', prefix, remain[0], entries) - - // no entries means not a dir, so it can never have matches - // foo.txt/** doesn't match foo.txt - if (!entries) - return cb() - - // test without the globstar, and with every child both below - // and replacing the globstar. - var remainWithoutGlobStar = remain.slice(1) - var gspref = prefix ? [ prefix ] : [] - var noGlobStar = gspref.concat(remainWithoutGlobStar) - - // the noGlobStar pattern exits the inGlobStar state - this._process(noGlobStar, index, false, cb) - - var isSym = this.symlinks[abs] - var len = entries.length - - // If it's a symlink, and we're in a globstar, then stop - if (isSym && inGlobStar) - return cb() - - for (var i = 0; i < len; i++) { - var e = entries[i] - if (e.charAt(0) === '.' && !this.dot) - continue - - // these two cases enter the inGlobStar state - var instead = gspref.concat(entries[i], remainWithoutGlobStar) - this._process(instead, index, true, cb) - - var below = gspref.concat(entries[i], remain) - this._process(below, index, true, cb) - } - - cb() -} - -Glob.prototype._processSimple = function (prefix, index, cb) { - // XXX review this. Shouldn't it be doing the mounting etc - // before doing stat? kinda weird? - var self = this - this._stat(prefix, function (er, exists) { - self._processSimple2(prefix, index, er, exists, cb) - }) -} -Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { - - //console.error('ps2', prefix, exists) - - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - // If it doesn't exist, then just mark the lack of results - if (!exists) - return cb() - - if (prefix && isAbsolute(prefix) && !this.nomount) { - var trail = /[\/\\]$/.test(prefix) - if (prefix.charAt(0) === '/') { - prefix = path.join(this.root, prefix) - } else { - prefix = path.resolve(this.root, prefix) - if (trail) - prefix += '/' - } - } - - if (process.platform === 'win32') - prefix = prefix.replace(/\\/g, '/') - - // Mark this as a match - this._emitMatch(index, prefix) - cb() -} - -// Returns either 'DIR', 'FILE', or false -Glob.prototype._stat = function (f, cb) { - var abs = this._makeAbs(f) - var needDir = f.slice(-1) === '/' - - if (f.length > this.maxLength) - return cb() - - if (!this.stat && ownProp(this.cache, abs)) { - var c = this.cache[abs] - - if (Array.isArray(c)) - c = 'DIR' - - // It exists, but maybe not how we need it - if (!needDir || c === 'DIR') - return cb(null, c) - - if (needDir && c === 'FILE') - return cb() - - // otherwise we have to stat, because maybe c=true - // if we know it exists, but not what it is. - } - - var exists - var stat = this.statCache[abs] - if (stat !== undefined) { - if (stat === false) - return cb(null, stat) - else { - var type = stat.isDirectory() ? 'DIR' : 'FILE' - if (needDir && type === 'FILE') - return cb() - else - return cb(null, type, stat) - } - } - - var self = this - var statcb = inflight('stat\0' + abs, lstatcb_) - if (statcb) - self.fs.lstat(abs, statcb) - - function lstatcb_ (er, lstat) { - if (lstat && lstat.isSymbolicLink()) { - // If it's a symlink, then treat it as the target, unless - // the target does not exist, then treat it as a file. - return self.fs.stat(abs, function (er, stat) { - if (er) - self._stat2(f, abs, null, lstat, cb) - else - self._stat2(f, abs, er, stat, cb) - }) - } else { - self._stat2(f, abs, er, lstat, cb) - } - } -} - -Glob.prototype._stat2 = function (f, abs, er, stat, cb) { - if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { - this.statCache[abs] = false - return cb() - } - - var needDir = f.slice(-1) === '/' - this.statCache[abs] = stat - - if (abs.slice(-1) === '/' && stat && !stat.isDirectory()) - return cb(null, false, stat) - - var c = true - if (stat) - c = stat.isDirectory() ? 'DIR' : 'FILE' - this.cache[abs] = this.cache[abs] || c - - if (needDir && c === 'FILE') - return cb() - - return cb(null, c, stat) -} - - -/***/ }), - -/***/ 6453: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -module.exports = minimatch -minimatch.Minimatch = Minimatch - -var path = (function () { try { return __nccwpck_require__(1017) } catch (e) {}}()) || { - sep: '/' -} -minimatch.sep = path.sep - -var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} -var expand = __nccwpck_require__(3717) - -var plTypes = { - '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, - '?': { open: '(?:', close: ')?' }, - '+': { open: '(?:', close: ')+' }, - '*': { open: '(?:', close: ')*' }, - '@': { open: '(?:', close: ')' } -} - -// any single thing other than / -// don't need to escape / when using new RegExp() -var qmark = '[^/]' - -// * => any number of characters -var star = qmark + '*?' - -// ** when dots are allowed. Anything goes, except .. and . -// not (^ or / followed by one or two dots followed by $ or /), -// followed by anything, any number of times. -var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' - -// not a ^ or / followed by a dot, -// followed by anything, any number of times. -var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' - -// characters that need to be escaped in RegExp. -var reSpecials = charSet('().*{}+?[]^$\\!') - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split('').reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -var slashSplit = /\/+/ - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function ext (a, b) { - b = b || {} - var t = {} - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - return t -} - -minimatch.defaults = function (def) { - if (!def || typeof def !== 'object' || !Object.keys(def).length) { - return minimatch - } - - var orig = minimatch - - var m = function minimatch (p, pattern, options) { - return orig(p, pattern, ext(def, options)) - } - - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - } - m.Minimatch.defaults = function defaults (options) { - return orig.defaults(ext(def, options)).Minimatch - } - - m.filter = function filter (pattern, options) { - return orig.filter(pattern, ext(def, options)) - } - - m.defaults = function defaults (options) { - return orig.defaults(ext(def, options)) - } - - m.makeRe = function makeRe (pattern, options) { - return orig.makeRe(pattern, ext(def, options)) - } - - m.braceExpand = function braceExpand (pattern, options) { - return orig.braceExpand(pattern, ext(def, options)) - } - - m.match = function (list, pattern, options) { - return orig.match(list, pattern, ext(def, options)) - } - - return m -} - -Minimatch.defaults = function (def) { - return minimatch.defaults(def).Minimatch -} - -function minimatch (p, pattern, options) { - assertValidPattern(pattern) - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - return false - } - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options) - } - - assertValidPattern(pattern) - - if (!options) options = {} - - pattern = pattern.trim() - - // windows support: need to use /, not \ - if (!options.allowWindowsEscape && path.sep !== '/') { - pattern = pattern.split(path.sep).join('/') - } - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - this.partial = !!options.partial - - // make the set of regexps etc. - this.make() -} - -Minimatch.prototype.debug = function () {} - -Minimatch.prototype.make = make -function make () { - var pattern = this.pattern - var options = this.options - - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } - - // step 1: figure out negation, etc. - this.parseNegate() - - // step 2: expand braces - var set = this.globSet = this.braceExpand() - - if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) } - - this.debug(this.pattern, set) - - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - - this.debug(this.pattern, set) - - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) - - this.debug(this.pattern, set) - - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return s.indexOf(false) === -1 - }) - - this.debug(this.pattern, set) - - this.set = set -} - -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - var negate = false - var options = this.options - var negateOffset = 0 - - if (options.nonegate) return - - for (var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === '!' - ; i++) { - negate = !negate - negateOffset++ - } - - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return braceExpand(pattern, options) -} - -Minimatch.prototype.braceExpand = braceExpand - -function braceExpand (pattern, options) { - if (!options) { - if (this instanceof Minimatch) { - options = this.options - } else { - options = {} - } - } - - pattern = typeof pattern === 'undefined' - ? this.pattern : pattern - - assertValidPattern(pattern) - - // Thanks to Yeting Li for - // improving this regexp to avoid a ReDOS vulnerability. - if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { - // shortcut. no need to expand. - return [pattern] - } - - return expand(pattern) -} - -var MAX_PATTERN_LENGTH = 1024 * 64 -var assertValidPattern = function (pattern) { - if (typeof pattern !== 'string') { - throw new TypeError('invalid pattern') - } - - if (pattern.length > MAX_PATTERN_LENGTH) { - throw new TypeError('pattern is too long') - } -} - -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -var SUBPARSE = {} -function parse (pattern, isSub) { - assertValidPattern(pattern) - - var options = this.options - - // shortcuts - if (pattern === '**') { - if (!options.noglobstar) - return GLOBSTAR - else - pattern = '*' - } - if (pattern === '') return '' - - var re = '' - var hasMagic = !!options.nocase - var escaping = false - // ? => one single character - var patternListStack = [] - var negativeLists = [] - var stateChar - var inClass = false - var reClassStart = -1 - var classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - var patternStart = pattern.charAt(0) === '.' ? '' // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' - : '(?!\\.)' - var self = this - - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case '*': - re += star - hasMagic = true - break - case '?': - re += qmark - hasMagic = true - break - default: - re += '\\' + stateChar - break - } - self.debug('clearStateChar %j %j', stateChar, re) - stateChar = false - } - } - - for (var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i++) { - this.debug('%s\t%s %s %j', pattern, i, re, c) - - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += '\\' + c - escaping = false - continue - } - - switch (c) { - /* istanbul ignore next */ - case '/': { - // completely not allowed, even escaped. - // Should already be path-split by now. - return false - } - - case '\\': - clearStateChar() - escaping = true - continue - - // the various stateChar values - // for the "extglob" stuff. - case '?': - case '*': - case '+': - case '@': - case '!': - this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) - - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - this.debug(' in class') - if (c === '!' && i === classStart + 1) c = '^' - re += c - continue - } - - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - self.debug('call clearStateChar %j', stateChar) - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue - - case '(': - if (inClass) { - re += '(' - continue - } - - if (!stateChar) { - re += '\\(' - continue - } - - patternListStack.push({ - type: stateChar, - start: i - 1, - reStart: re.length, - open: plTypes[stateChar].open, - close: plTypes[stateChar].close - }) - // negation is (?:(?!js)[^/]*) - re += stateChar === '!' ? '(?:(?!(?:' : '(?:' - this.debug('plType %j %j', stateChar, re) - stateChar = false - continue - - case ')': - if (inClass || !patternListStack.length) { - re += '\\)' - continue - } - - clearStateChar() - hasMagic = true - var pl = patternListStack.pop() - // negation is (?:(?!js)[^/]*) - // The others are (?:) - re += pl.close - if (pl.type === '!') { - negativeLists.push(pl) - } - pl.reEnd = re.length - continue - - case '|': - if (inClass || !patternListStack.length || escaping) { - re += '\\|' - escaping = false - continue - } - - clearStateChar() - re += '|' - continue - - // these are mostly the same in regexp and glob - case '[': - // swallow any state-tracking char before the [ - clearStateChar() - - if (inClass) { - re += '\\' + c - continue - } - - inClass = true - classStart = i - reClassStart = re.length - re += c - continue - - case ']': - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += '\\' + c - escaping = false - continue - } - - // handle the case where we left a class open. - // "[z-a]" is valid, equivalent to "\[z-a\]" - // split where the last [ was, make sure we don't have - // an invalid re. if so, re-walk the contents of the - // would-be class to re-translate any characters that - // were passed through as-is - // TODO: It would probably be faster to determine this - // without a try/catch and a new RegExp, but it's tricky - // to do safely. For now, this is safe and works. - var cs = pattern.substring(classStart + 1, i) - try { - RegExp('[' + cs + ']') - } catch (er) { - // not a valid class! - var sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' - hasMagic = hasMagic || sp[1] - inClass = false - continue - } - - // finish up the class. - hasMagic = true - inClass = false - re += c - continue - - default: - // swallow any state char that wasn't consumed - clearStateChar() - - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === '^' && inClass)) { - re += '\\' - } - - re += c - - } // switch - } // for - - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - cs = pattern.substr(classStart + 1) - sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] - hasMagic = hasMagic || sp[1] - } - - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + pl.open.length) - this.debug('setting tail', re, pl) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = '\\' - } - - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + '|' - }) - - this.debug('tail=%j\n %s', tail, tail, pl, re) - var t = pl.type === '*' ? star - : pl.type === '?' ? qmark - : '\\' + pl.type - - hasMagic = true - re = re.slice(0, pl.reStart) + t + '\\(' + tail - } - - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += '\\\\' - } - - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case '[': case '.': case '(': addPatternStart = true - } - - // Hack to work around lack of negative lookbehind in JS - // A pattern like: *.!(x).!(y|z) needs to ensure that a name - // like 'a.xyz.yz' doesn't match. So, the first negative - // lookahead, has to look ALL the way ahead, to the end of - // the pattern. - for (var n = negativeLists.length - 1; n > -1; n--) { - var nl = negativeLists[n] - - var nlBefore = re.slice(0, nl.reStart) - var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) - var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) - var nlAfter = re.slice(nl.reEnd) - - nlLast += nlAfter - - // Handle nested stuff like *(*.js|!(*.json)), where open parens - // mean that we should *not* include the ) in the bit that is considered - // "after" the negated section. - var openParensBefore = nlBefore.split('(').length - 1 - var cleanAfter = nlAfter - for (i = 0; i < openParensBefore; i++) { - cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') - } - nlAfter = cleanAfter - - var dollar = '' - if (nlAfter === '' && isSub !== SUBPARSE) { - dollar = '$' - } - var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast - re = newRe - } - - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== '' && hasMagic) { - re = '(?=.)' + re - } - - if (addPatternStart) { - re = patternStart + re - } - - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [re, hasMagic] - } - - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } - - var flags = options.nocase ? 'i' : '' - try { - var regExp = new RegExp('^' + re + '$', flags) - } catch (er) /* istanbul ignore next - should be impossible */ { - // If it was an invalid regular expression, then it can't match - // anything. This trick looks for a character after the end of - // the string, which is of course impossible, except in multi-line - // mode, but it's not a /m regex. - return new RegExp('$.') - } - - regExp._glob = pattern - regExp._src = re - - return regExp -} - -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() -} - -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) { - this.regexp = false - return this.regexp - } - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - var flags = options.nocase ? 'i' : '' - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === 'string') ? regExpEscape(p) - : p._src - }).join('\\\/') - }).join('|') - - // must match entire pattern - // ending in a * or ** will make it less strict. - re = '^(?:' + re + ')$' - - // can match anything, as long as it's not this. - if (this.negate) re = '^(?!' + re + ').*$' - - try { - this.regexp = new RegExp(re, flags) - } catch (ex) /* istanbul ignore next - should be impossible */ { - this.regexp = false - } - return this.regexp -} - -minimatch.match = function (list, pattern, options) { - options = options || {} - var mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (mm.options.nonull && !list.length) { - list.push(pattern) - } - return list -} - -Minimatch.prototype.match = function match (f, partial) { - if (typeof partial === 'undefined') partial = this.partial - this.debug('match', f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === '' - - if (f === '/' && partial) return true - - var options = this.options - - // windows: need to use /, not \ - if (path.sep !== '/') { - f = f.split(path.sep).join('/') - } - - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - this.debug(this.pattern, 'split', f) - - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. - - var set = this.set - this.debug(this.pattern, 'set', set) - - // Find the basename of the path by looking for the last non-empty segment - var filename - var i - for (i = f.length - 1; i >= 0; i--) { - filename = f[i] - if (filename) break - } - - for (i = 0; i < set.length; i++) { - var pattern = set[i] - var file = f - if (options.matchBase && pattern.length === 1) { - file = [filename] - } - var hit = this.matchOne(file, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } - } - - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} - -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options - - this.debug('matchOne', - { 'this': this, file: file, pattern: pattern }) - - this.debug('matchOne', file.length, pattern.length) - - for (var fi = 0, - pi = 0, - fl = file.length, - pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi++, pi++) { - this.debug('matchOne loop') - var p = pattern[pi] - var f = file[fi] - - this.debug(pattern, p, f) - - // should be impossible. - // some invalid regexp stuff in the set. - /* istanbul ignore if */ - if (p === false) return false - - if (p === GLOBSTAR) { - this.debug('GLOBSTAR', [pattern, p, f]) - - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // - // a/**/b/**/c matching a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - var pr = pi + 1 - if (pr === pl) { - this.debug('** at the end') - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for (; fi < fl; fi++) { - if (file[fi] === '.' || file[fi] === '..' || - (!options.dot && file[fi].charAt(0) === '.')) return false - } - return true - } - - // ok, let's see if we can swallow whatever we can. - while (fr < fl) { - var swallowee = file[fr] - - this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) - - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug('globstar found match!', fr, fl, swallowee) - // found a match. - return true - } else { - // can't swallow "." or ".." ever. - // can only swallow ".foo" when explicitly asked. - if (swallowee === '.' || swallowee === '..' || - (!options.dot && swallowee.charAt(0) === '.')) { - this.debug('dot detected!', file, fr, pattern, pr) - break - } - - // ** swallows a segment, and continue. - this.debug('globstar swallow a segment, and continue') - fr++ - } - } - - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - /* istanbul ignore if */ - if (partial) { - // ran out of file - this.debug('\n>>> no match, partial?', file, fr, pattern, pr) - if (fr === fl) return true - } - return false - } - - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === 'string') { - hit = f === p - this.debug('string match', p, f, hit) - } else { - hit = f.match(p) - this.debug('pattern match', p, f, hit) - } - - if (!hit) return false - } - - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else /* istanbul ignore else */ if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - return (fi === fl - 1) && (file[fi] === '') - } - - // should be unreachable. - /* istanbul ignore next */ - throw new Error('wtf?') -} - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, '$1') -} - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') -} - - -/***/ }), - -/***/ 9010: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -module.exports = globSync -globSync.GlobSync = GlobSync - -var rp = __nccwpck_require__(6863) -var minimatch = __nccwpck_require__(6453) -var Minimatch = minimatch.Minimatch -var Glob = (__nccwpck_require__(1957).Glob) -var util = __nccwpck_require__(3837) -var path = __nccwpck_require__(1017) -var assert = __nccwpck_require__(9491) -var isAbsolute = __nccwpck_require__(8714) -var common = __nccwpck_require__(7625) -var setopts = common.setopts -var ownProp = common.ownProp -var childrenIgnored = common.childrenIgnored -var isIgnored = common.isIgnored - -function globSync (pattern, options) { - if (typeof options === 'function' || arguments.length === 3) - throw new TypeError('callback provided to sync glob\n'+ - 'See: https://github.com/isaacs/node-glob/issues/167') - - return new GlobSync(pattern, options).found -} - -function GlobSync (pattern, options) { - if (!pattern) - throw new Error('must provide pattern') - - if (typeof options === 'function' || arguments.length === 3) - throw new TypeError('callback provided to sync glob\n'+ - 'See: https://github.com/isaacs/node-glob/issues/167') - - if (!(this instanceof GlobSync)) - return new GlobSync(pattern, options) - - setopts(this, pattern, options) - - if (this.noprocess) - return this - - var n = this.minimatch.set.length - this.matches = new Array(n) - for (var i = 0; i < n; i ++) { - this._process(this.minimatch.set[i], i, false) - } - this._finish() -} - -GlobSync.prototype._finish = function () { - assert.ok(this instanceof GlobSync) - if (this.realpath) { - var self = this - this.matches.forEach(function (matchset, index) { - var set = self.matches[index] = Object.create(null) - for (var p in matchset) { - try { - p = self._makeAbs(p) - var real = rp.realpathSync(p, self.realpathCache) - set[real] = true - } catch (er) { - if (er.syscall === 'stat') - set[self._makeAbs(p)] = true - else - throw er - } - } - }) - } - common.finish(this) -} - - -GlobSync.prototype._process = function (pattern, index, inGlobStar) { - assert.ok(this instanceof GlobSync) - - // Get the first [n] parts of pattern that are all strings. - var n = 0 - while (typeof pattern[n] === 'string') { - n ++ - } - // now n is the index of the first one that is *not* a string. - - // See if there's anything else - var prefix - switch (n) { - // if not, then this is rather simple - case pattern.length: - this._processSimple(pattern.join('/'), index) - return - - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null - break - - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's 'absolute' like /foo/bar, - // or 'relative' like '../baz' - prefix = pattern.slice(0, n).join('/') - break - } - - var remain = pattern.slice(n) - - // get the list of entries. - var read - if (prefix === null) - read = '.' - else if (isAbsolute(prefix) || - isAbsolute(pattern.map(function (p) { - return typeof p === 'string' ? p : '[*]' - }).join('/'))) { - if (!prefix || !isAbsolute(prefix)) - prefix = '/' + prefix - read = prefix - } else - read = prefix - - var abs = this._makeAbs(read) - - //if ignored, skip processing - if (childrenIgnored(this, read)) - return - - var isGlobStar = remain[0] === minimatch.GLOBSTAR - if (isGlobStar) - this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) - else - this._processReaddir(prefix, read, abs, remain, index, inGlobStar) -} - - -GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { - var entries = this._readdir(abs, inGlobStar) - - // if the abs isn't a dir, then nothing can match! - if (!entries) - return - - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = remain[0] - var negate = !!this.minimatch.negate - var rawGlob = pn._glob - var dotOk = this.dot || rawGlob.charAt(0) === '.' - - var matchedEntries = [] - for (var i = 0; i < entries.length; i++) { - var e = entries[i] - if (e.charAt(0) !== '.' || dotOk) { - var m - if (negate && !prefix) { - m = !e.match(pn) - } else { - m = e.match(pn) - } - if (m) - matchedEntries.push(e) - } - } - - var len = matchedEntries.length - // If there are no matched entries, then nothing matches. - if (len === 0) - return - - // if this is the last remaining pattern bit, then no need for - // an additional stat *unless* the user has specified mark or - // stat explicitly. We know they exist, since readdir returned - // them. - - if (remain.length === 1 && !this.mark && !this.stat) { - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - if (prefix) { - if (prefix.slice(-1) !== '/') - e = prefix + '/' + e - else - e = prefix + e - } - - if (e.charAt(0) === '/' && !this.nomount) { - e = path.join(this.root, e) - } - this._emitMatch(index, e) - } - // This was the last one, and no stats were needed - return - } - - // now test all matched entries as stand-ins for that part - // of the pattern. - remain.shift() - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - var newPattern - if (prefix) - newPattern = [prefix, e] - else - newPattern = [e] - this._process(newPattern.concat(remain), index, inGlobStar) - } -} - - -GlobSync.prototype._emitMatch = function (index, e) { - if (isIgnored(this, e)) - return - - var abs = this._makeAbs(e) - - if (this.mark) - e = this._mark(e) - - if (this.absolute) { - e = abs - } - - if (this.matches[index][e]) - return - - if (this.nodir) { - var c = this.cache[abs] - if (c === 'DIR' || Array.isArray(c)) - return - } - - this.matches[index][e] = true - - if (this.stat) - this._stat(e) -} - - -GlobSync.prototype._readdirInGlobStar = function (abs) { - // follow all symlinked directories forever - // just proceed as if this is a non-globstar situation - if (this.follow) - return this._readdir(abs, false) - - var entries - var lstat - var stat - try { - lstat = this.fs.lstatSync(abs) - } catch (er) { - if (er.code === 'ENOENT') { - // lstat failed, doesn't exist - return null - } - } - - var isSym = lstat && lstat.isSymbolicLink() - this.symlinks[abs] = isSym - - // If it's not a symlink or a dir, then it's definitely a regular file. - // don't bother doing a readdir in that case. - if (!isSym && lstat && !lstat.isDirectory()) - this.cache[abs] = 'FILE' - else - entries = this._readdir(abs, false) - - return entries -} - -GlobSync.prototype._readdir = function (abs, inGlobStar) { - var entries - - if (inGlobStar && !ownProp(this.symlinks, abs)) - return this._readdirInGlobStar(abs) - - if (ownProp(this.cache, abs)) { - var c = this.cache[abs] - if (!c || c === 'FILE') - return null - - if (Array.isArray(c)) - return c - } - - try { - return this._readdirEntries(abs, this.fs.readdirSync(abs)) - } catch (er) { - this._readdirError(abs, er) - return null - } -} - -GlobSync.prototype._readdirEntries = function (abs, entries) { - // if we haven't asked to stat everything, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. - if (!this.mark && !this.stat) { - for (var i = 0; i < entries.length; i ++) { - var e = entries[i] - if (abs === '/') - e = abs + e - else - e = abs + '/' + e - this.cache[e] = true - } - } - - this.cache[abs] = entries - - // mark and cache dir-ness - return entries -} - -GlobSync.prototype._readdirError = function (f, er) { - // handle errors, and cache the information - switch (er.code) { - case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 - case 'ENOTDIR': // totally normal. means it *does* exist. - var abs = this._makeAbs(f) - this.cache[abs] = 'FILE' - if (abs === this.cwdAbs) { - var error = new Error(er.code + ' invalid cwd ' + this.cwd) - error.path = this.cwd - error.code = er.code - throw error - } - break - - case 'ENOENT': // not terribly unusual - case 'ELOOP': - case 'ENAMETOOLONG': - case 'UNKNOWN': - this.cache[this._makeAbs(f)] = false - break - - default: // some unusual error. Treat as failure. - this.cache[this._makeAbs(f)] = false - if (this.strict) - throw er - if (!this.silent) - console.error('glob error', er) - break - } -} - -GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { - - var entries = this._readdir(abs, inGlobStar) - - // no entries means not a dir, so it can never have matches - // foo.txt/** doesn't match foo.txt - if (!entries) - return - - // test without the globstar, and with every child both below - // and replacing the globstar. - var remainWithoutGlobStar = remain.slice(1) - var gspref = prefix ? [ prefix ] : [] - var noGlobStar = gspref.concat(remainWithoutGlobStar) - - // the noGlobStar pattern exits the inGlobStar state - this._process(noGlobStar, index, false) - - var len = entries.length - var isSym = this.symlinks[abs] - - // If it's a symlink, and we're in a globstar, then stop - if (isSym && inGlobStar) - return - - for (var i = 0; i < len; i++) { - var e = entries[i] - if (e.charAt(0) === '.' && !this.dot) - continue - - // these two cases enter the inGlobStar state - var instead = gspref.concat(entries[i], remainWithoutGlobStar) - this._process(instead, index, true) - - var below = gspref.concat(entries[i], remain) - this._process(below, index, true) - } -} - -GlobSync.prototype._processSimple = function (prefix, index) { - // XXX review this. Shouldn't it be doing the mounting etc - // before doing stat? kinda weird? - var exists = this._stat(prefix) - - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - // If it doesn't exist, then just mark the lack of results - if (!exists) - return - - if (prefix && isAbsolute(prefix) && !this.nomount) { - var trail = /[\/\\]$/.test(prefix) - if (prefix.charAt(0) === '/') { - prefix = path.join(this.root, prefix) - } else { - prefix = path.resolve(this.root, prefix) - if (trail) - prefix += '/' - } - } - - if (process.platform === 'win32') - prefix = prefix.replace(/\\/g, '/') - - // Mark this as a match - this._emitMatch(index, prefix) -} - -// Returns either 'DIR', 'FILE', or false -GlobSync.prototype._stat = function (f) { - var abs = this._makeAbs(f) - var needDir = f.slice(-1) === '/' - - if (f.length > this.maxLength) - return false - - if (!this.stat && ownProp(this.cache, abs)) { - var c = this.cache[abs] - - if (Array.isArray(c)) - c = 'DIR' - - // It exists, but maybe not how we need it - if (!needDir || c === 'DIR') - return c - - if (needDir && c === 'FILE') - return false - - // otherwise we have to stat, because maybe c=true - // if we know it exists, but not what it is. - } - - var exists - var stat = this.statCache[abs] - if (!stat) { - var lstat - try { - lstat = this.fs.lstatSync(abs) - } catch (er) { - if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { - this.statCache[abs] = false - return false - } - } - - if (lstat && lstat.isSymbolicLink()) { - try { - stat = this.fs.statSync(abs) - } catch (er) { - stat = lstat - } - } else { - stat = lstat - } - } - - this.statCache[abs] = stat - - var c = true - if (stat) - c = stat.isDirectory() ? 'DIR' : 'FILE' - - this.cache[abs] = this.cache[abs] || c - - if (needDir && c === 'FILE') - return false - - return c -} - -GlobSync.prototype._mark = function (p) { - return common.mark(this, p) -} - -GlobSync.prototype._makeAbs = function (f) { - return common.makeAbs(this, f) -} - - -/***/ }), - -/***/ 7087: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./gOPD')} */ -module.exports = Object.getOwnPropertyDescriptor; - - -/***/ }), - -/***/ 8501: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -/** @type {import('.')} */ -var $gOPD = __nccwpck_require__(7087); - -if ($gOPD) { - try { - $gOPD([], 'length'); - } catch (e) { - // IE 8 has a broken gOPD - $gOPD = null; - } -} - -module.exports = $gOPD; - - -/***/ }), - -/***/ 1621: -/***/ ((module) => { - -"use strict"; - -module.exports = (flag, argv) => { - argv = argv || process.argv; - const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); - const pos = argv.indexOf(prefix + flag); - const terminatorPos = argv.indexOf('--'); - return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); -}; - - -/***/ }), - -/***/ 587: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var origSymbol = typeof Symbol !== 'undefined' && Symbol; -var hasSymbolSham = __nccwpck_require__(7747); - -/** @type {import('.')} */ -module.exports = function hasNativeSymbols() { - if (typeof origSymbol !== 'function') { return false; } - if (typeof Symbol !== 'function') { return false; } - if (typeof origSymbol('foo') !== 'symbol') { return false; } - if (typeof Symbol('bar') !== 'symbol') { return false; } - - return hasSymbolSham(); -}; - - -/***/ }), - -/***/ 7747: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./shams')} */ -/* eslint complexity: [2, 18], max-statements: [2, 33] */ -module.exports = function hasSymbols() { - if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } - if (typeof Symbol.iterator === 'symbol') { return true; } - - /** @type {{ [k in symbol]?: unknown }} */ - var obj = {}; - var sym = Symbol('test'); - var symObj = Object(sym); - if (typeof sym === 'string') { return false; } - - if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } - if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } - - // temp disabled per https://github.com/ljharb/object.assign/issues/17 - // if (sym instanceof Symbol) { return false; } - // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 - // if (!(symObj instanceof Symbol)) { return false; } - - // if (typeof Symbol.prototype.toString !== 'function') { return false; } - // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } - - var symVal = 42; - obj[sym] = symVal; - for (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop - if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } - - if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } - - var syms = Object.getOwnPropertySymbols(obj); - if (syms.length !== 1 || syms[0] !== sym) { return false; } - - if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } - - if (typeof Object.getOwnPropertyDescriptor === 'function') { - // eslint-disable-next-line no-extra-parens - var descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym)); - if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } - } - - return true; -}; - - -/***/ }), - -/***/ 2157: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var call = Function.prototype.call; -var $hasOwn = Object.prototype.hasOwnProperty; -var bind = __nccwpck_require__(8334); - -/** @type {import('.')} */ -module.exports = bind.call(call, $hasOwn); - - -/***/ }), - -/***/ 2492: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -var wrappy = __nccwpck_require__(2940) -var reqs = Object.create(null) -var once = __nccwpck_require__(1223) - -module.exports = wrappy(inflight) - -function inflight (key, cb) { - if (reqs[key]) { - reqs[key].push(cb) - return null - } else { - reqs[key] = [cb] - return makeres(key) - } -} - -function makeres (key) { - return once(function RES () { - var cbs = reqs[key] - var len = cbs.length - var args = slice(arguments) - - // XXX It's somewhat ambiguous whether a new callback added in this - // pass should be queued for later execution if something in the - // list of callbacks throws, or if it should just be discarded. - // However, it's such an edge case that it hardly matters, and either - // choice is likely as surprising as the other. - // As it happens, we do go ahead and schedule it for later execution. - try { - for (var i = 0; i < len; i++) { - cbs[i].apply(null, args) - } - } finally { - if (cbs.length > len) { - // added more in the interim. - // de-zalgo, just in case, but don't call again. - cbs.splice(0, len) - process.nextTick(function () { - RES.apply(null, args) - }) - } else { - delete reqs[key] - } - } - }) -} - -function slice (args) { - var length = args.length - var array = [] - - for (var i = 0; i < length; i++) array[i] = args[i] - return array -} - - -/***/ }), - -/***/ 4124: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -try { - var util = __nccwpck_require__(3837); - /* istanbul ignore next */ - if (typeof util.inherits !== 'function') throw ''; - module.exports = util.inherits; -} catch (e) { - /* istanbul ignore next */ - module.exports = __nccwpck_require__(8544); -} - - -/***/ }), - -/***/ 8544: -/***/ ((module) => { - -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }) - } - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } - } -} - - -/***/ }), - -/***/ 9775: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./abs')} */ -module.exports = Math.abs; - - -/***/ }), - -/***/ 924: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./floor')} */ -module.exports = Math.floor; - - -/***/ }), - -/***/ 7661: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./isNaN')} */ -module.exports = Number.isNaN || function isNaN(a) { - return a !== a; -}; - - -/***/ }), - -/***/ 2419: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./max')} */ -module.exports = Math.max; - - -/***/ }), - -/***/ 3373: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./min')} */ -module.exports = Math.min; - - -/***/ }), - -/***/ 8029: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./pow')} */ -module.exports = Math.pow; - - -/***/ }), - -/***/ 9396: -/***/ ((module) => { - -"use strict"; - - -/** @type {import('./round')} */ -module.exports = Math.round; - - -/***/ }), - -/***/ 9091: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var $isNaN = __nccwpck_require__(7661); - -/** @type {import('./sign')} */ -module.exports = function sign(number) { - if ($isNaN(number) || number === 0) { - return number; - } - return number < 0 ? -1 : +1; -}; - - -/***/ }), - -/***/ 3973: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -module.exports = minimatch -minimatch.Minimatch = Minimatch - -const path = (() => { try { return __nccwpck_require__(1017) } catch (e) {}})() || { - sep: '/' -} -minimatch.sep = path.sep - -const GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} -const expand = __nccwpck_require__(3717) - -const plTypes = { - '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, - '?': { open: '(?:', close: ')?' }, - '+': { open: '(?:', close: ')+' }, - '*': { open: '(?:', close: ')*' }, - '@': { open: '(?:', close: ')' } -} - -// any single thing other than / -// don't need to escape / when using new RegExp() -const qmark = '[^/]' - -// * => any number of characters -const star = qmark + '*?' - -// ** when dots are allowed. Anything goes, except .. and . -// not (^ or / followed by one or two dots followed by $ or /), -// followed by anything, any number of times. -const twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' - -// not a ^ or / followed by a dot, -// followed by anything, any number of times. -const twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' - -// characters that need to be escaped in RegExp. -const reSpecials = charSet('().*{}+?[]^$\\!') - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split('').reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -const slashSplit = /\/+/ - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function ext (a, b) { - a = a || {} - b = b || {} - const t = {} - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - return t -} - -minimatch.defaults = function (def) { - if (!def || typeof def !== 'object' || !Object.keys(def).length) { - return minimatch - } - - const orig = minimatch - - const m = function minimatch (p, pattern, options) { - return orig(p, pattern, ext(def, options)) - } - - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - } - m.Minimatch.defaults = options => { - return orig.defaults(ext(def, options)).Minimatch - } - - m.filter = function filter (pattern, options) { - return orig.filter(pattern, ext(def, options)) - } - - m.defaults = function defaults (options) { - return orig.defaults(ext(def, options)) - } - - m.makeRe = function makeRe (pattern, options) { - return orig.makeRe(pattern, ext(def, options)) - } - - m.braceExpand = function braceExpand (pattern, options) { - return orig.braceExpand(pattern, ext(def, options)) - } - - m.match = function (list, pattern, options) { - return orig.match(list, pattern, ext(def, options)) - } - - return m -} - -Minimatch.defaults = function (def) { - return minimatch.defaults(def).Minimatch -} - -function minimatch (p, pattern, options) { - assertValidPattern(pattern) - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - return false - } - - // "" only matches "" - if (pattern.trim() === '') return p === '' - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options) - } - - assertValidPattern(pattern) - - if (!options) options = {} - pattern = pattern.trim() - - // windows support: need to use /, not \ - if (path.sep !== '/') { - pattern = pattern.split(path.sep).join('/') - } - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - - // make the set of regexps etc. - this.make() -} - -Minimatch.prototype.debug = function () {} - -Minimatch.prototype.make = make -function make () { - // don't do it more than once. - if (this._made) return - - var pattern = this.pattern - var options = this.options - - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } - - // step 1: figure out negation, etc. - this.parseNegate() - - // step 2: expand braces - var set = this.globSet = this.braceExpand() - - if (options.debug) this.debug = console.error - - this.debug(this.pattern, set) - - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - - this.debug(this.pattern, set) - - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) - - this.debug(this.pattern, set) - - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return s.indexOf(false) === -1 - }) - - this.debug(this.pattern, set) - - this.set = set -} - -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - var negate = false - var options = this.options - var negateOffset = 0 - - if (options.nonegate) return - - for (var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === '!' - ; i++) { - negate = !negate - negateOffset++ - } - - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return braceExpand(pattern, options) -} - -Minimatch.prototype.braceExpand = braceExpand - -function braceExpand (pattern, options) { - if (!options) { - if (this instanceof Minimatch) { - options = this.options - } else { - options = {} - } - } - - pattern = typeof pattern === 'undefined' - ? this.pattern : pattern - - assertValidPattern(pattern) - - if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { - // shortcut. no need to expand. - return [pattern] - } - - return expand(pattern) -} - -const MAX_PATTERN_LENGTH = 1024 * 64 -const assertValidPattern = pattern => { - if (typeof pattern !== 'string') { - throw new TypeError('invalid pattern') - } - - if (pattern.length > MAX_PATTERN_LENGTH) { - throw new TypeError('pattern is too long') - } -} - -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -const SUBPARSE = {} -function parse (pattern, isSub) { - assertValidPattern(pattern) - - var options = this.options - - // shortcuts - if (!options.noglobstar && pattern === '**') return GLOBSTAR - if (pattern === '') return '' - - var re = '' - var hasMagic = false - var escaping = false - // ? => one single character - var patternListStack = [] - var negativeLists = [] - var stateChar - var inClass = false - var reClassStart = -1 - var classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - var patternStart = pattern.charAt(0) === '.' ? '' // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' - : '(?!\\.)' - var self = this - - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case '*': - re += star - hasMagic = true - break - case '?': - re += qmark - hasMagic = true - break - default: - re += '\\' + stateChar - break - } - self.debug('clearStateChar %j %j', stateChar, re) - stateChar = false - } - } - - for (var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i++) { - this.debug('%s\t%s %s %j', pattern, i, re, c) - - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += '\\' + c - escaping = false - continue - } - - switch (c) { - case '/': /* istanbul ignore next */ { - // completely not allowed, even escaped. - // Should already be path-split by now. - return false - } - - case '\\': - clearStateChar() - escaping = true - continue - - // the various stateChar values - // for the "extglob" stuff. - case '?': - case '*': - case '+': - case '@': - case '!': - this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) - - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - this.debug(' in class') - if (c === '!' && i === classStart + 1) c = '^' - re += c - continue - } - - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - self.debug('call clearStateChar %j', stateChar) - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue - - case '(': - if (inClass) { - re += '(' - continue - } - - if (!stateChar) { - re += '\\(' - continue - } - - patternListStack.push({ - type: stateChar, - start: i - 1, - reStart: re.length, - open: plTypes[stateChar].open, - close: plTypes[stateChar].close - }) - // negation is (?:(?!js)[^/]*) - re += stateChar === '!' ? '(?:(?!(?:' : '(?:' - this.debug('plType %j %j', stateChar, re) - stateChar = false - continue - - case ')': - if (inClass || !patternListStack.length) { - re += '\\)' - continue - } - - clearStateChar() - hasMagic = true - var pl = patternListStack.pop() - // negation is (?:(?!js)[^/]*) - // The others are (?:) - re += pl.close - if (pl.type === '!') { - negativeLists.push(pl) - } - pl.reEnd = re.length - continue - - case '|': - if (inClass || !patternListStack.length || escaping) { - re += '\\|' - escaping = false - continue - } - - clearStateChar() - re += '|' - continue - - // these are mostly the same in regexp and glob - case '[': - // swallow any state-tracking char before the [ - clearStateChar() - - if (inClass) { - re += '\\' + c - continue - } - - inClass = true - classStart = i - reClassStart = re.length - re += c - continue - - case ']': - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += '\\' + c - escaping = false - continue - } - - // handle the case where we left a class open. - // "[z-a]" is valid, equivalent to "\[z-a\]" - if (inClass) { - // split where the last [ was, make sure we don't have - // an invalid re. if so, re-walk the contents of the - // would-be class to re-translate any characters that - // were passed through as-is - // TODO: It would probably be faster to determine this - // without a try/catch and a new RegExp, but it's tricky - // to do safely. For now, this is safe and works. - var cs = pattern.substring(classStart + 1, i) - try { - RegExp('[' + cs + ']') - } catch (er) { - // not a valid class! - var sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' - hasMagic = hasMagic || sp[1] - inClass = false - continue - } - } - - // finish up the class. - hasMagic = true - inClass = false - re += c - continue - - default: - // swallow any state char that wasn't consumed - clearStateChar() - - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === '^' && inClass)) { - re += '\\' - } - - re += c - - } // switch - } // for - - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - cs = pattern.substr(classStart + 1) - sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] - hasMagic = hasMagic || sp[1] - } - - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + pl.open.length) - this.debug('setting tail', re, pl) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = '\\' - } - - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + '|' - }) - - this.debug('tail=%j\n %s', tail, tail, pl, re) - var t = pl.type === '*' ? star - : pl.type === '?' ? qmark - : '\\' + pl.type - - hasMagic = true - re = re.slice(0, pl.reStart) + t + '\\(' + tail - } - - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += '\\\\' - } - - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case '.': - case '[': - case '(': addPatternStart = true - } - - // Hack to work around lack of negative lookbehind in JS - // A pattern like: *.!(x).!(y|z) needs to ensure that a name - // like 'a.xyz.yz' doesn't match. So, the first negative - // lookahead, has to look ALL the way ahead, to the end of - // the pattern. - for (var n = negativeLists.length - 1; n > -1; n--) { - var nl = negativeLists[n] - - var nlBefore = re.slice(0, nl.reStart) - var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) - var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) - var nlAfter = re.slice(nl.reEnd) - - nlLast += nlAfter - - // Handle nested stuff like *(*.js|!(*.json)), where open parens - // mean that we should *not* include the ) in the bit that is considered - // "after" the negated section. - var openParensBefore = nlBefore.split('(').length - 1 - var cleanAfter = nlAfter - for (i = 0; i < openParensBefore; i++) { - cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') - } - nlAfter = cleanAfter - - var dollar = '' - if (nlAfter === '' && isSub !== SUBPARSE) { - dollar = '$' - } - var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast - re = newRe - } - - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== '' && hasMagic) { - re = '(?=.)' + re - } - - if (addPatternStart) { - re = patternStart + re - } - - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [re, hasMagic] - } - - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } - - var flags = options.nocase ? 'i' : '' - try { - var regExp = new RegExp('^' + re + '$', flags) - } catch (er) /* istanbul ignore next - should be impossible */ { - // If it was an invalid regular expression, then it can't match - // anything. This trick looks for a character after the end of - // the string, which is of course impossible, except in multi-line - // mode, but it's not a /m regex. - return new RegExp('$.') - } - - regExp._glob = pattern - regExp._src = re - - return regExp -} - -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() -} - -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) { - this.regexp = false - return this.regexp - } - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - var flags = options.nocase ? 'i' : '' - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === 'string') ? regExpEscape(p) - : p._src - }).join('\\\/') - }).join('|') - - // must match entire pattern - // ending in a * or ** will make it less strict. - re = '^(?:' + re + ')$' - - // can match anything, as long as it's not this. - if (this.negate) re = '^(?!' + re + ').*$' - - try { - this.regexp = new RegExp(re, flags) - } catch (ex) /* istanbul ignore next - should be impossible */ { - this.regexp = false - } - return this.regexp -} - -minimatch.match = function (list, pattern, options) { - options = options || {} - const mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (mm.options.nonull && !list.length) { - list.push(pattern) - } - return list -} - -Minimatch.prototype.match = match -function match (f, partial) { - this.debug('match', f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === '' - - if (f === '/' && partial) return true - - var options = this.options - - // windows: need to use /, not \ - if (path.sep !== '/') { - f = f.split(path.sep).join('/') - } - - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - this.debug(this.pattern, 'split', f) - - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. - - var set = this.set - this.debug(this.pattern, 'set', set) - - // Find the basename of the path by looking for the last non-empty segment - var filename - var i - for (i = f.length - 1; i >= 0; i--) { - filename = f[i] - if (filename) break - } - - for (i = 0; i < set.length; i++) { - var pattern = set[i] - var file = f - if (options.matchBase && pattern.length === 1) { - file = [filename] - } - var hit = this.matchOne(file, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } - } - - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} - -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options - - this.debug('matchOne', - { 'this': this, file: file, pattern: pattern }) - - this.debug('matchOne', file.length, pattern.length) - - for (var fi = 0, - pi = 0, - fl = file.length, - pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi++, pi++) { - this.debug('matchOne loop') - var p = pattern[pi] - var f = file[fi] - - this.debug(pattern, p, f) - - // should be impossible. - // some invalid regexp stuff in the set. - /* istanbul ignore if */ - if (p === false) return false - - if (p === GLOBSTAR) { - this.debug('GLOBSTAR', [pattern, p, f]) - - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // - // a/**/b/**/c matching a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - var pr = pi + 1 - if (pr === pl) { - this.debug('** at the end') - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for (; fi < fl; fi++) { - if (file[fi] === '.' || file[fi] === '..' || - (!options.dot && file[fi].charAt(0) === '.')) return false - } - return true - } - - // ok, let's see if we can swallow whatever we can. - while (fr < fl) { - var swallowee = file[fr] - - this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) - - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug('globstar found match!', fr, fl, swallowee) - // found a match. - return true - } else { - // can't swallow "." or ".." ever. - // can only swallow ".foo" when explicitly asked. - if (swallowee === '.' || swallowee === '..' || - (!options.dot && swallowee.charAt(0) === '.')) { - this.debug('dot detected!', file, fr, pattern, pr) - break - } - - // ** swallows a segment, and continue. - this.debug('globstar swallow a segment, and continue') - fr++ - } - } - - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - /* istanbul ignore if */ - if (partial) { - // ran out of file - this.debug('\n>>> no match, partial?', file, fr, pattern, pr) - if (fr === fl) return true - } - return false - } - - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === 'string') { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p - } - this.debug('string match', p, f, hit) - } else { - hit = f.match(p) - this.debug('pattern match', p, f, hit) - } - - if (!hit) return false - } - - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else /* istanbul ignore else */ if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - return (fi === fl - 1) && (file[fi] === '') - } - - // should be unreachable. - /* istanbul ignore next */ - throw new Error('wtf?') -} - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, '$1') -} - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') -} - - -/***/ }), - -/***/ 900: -/***/ ((module) => { - -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var w = d * 7; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ - -module.exports = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === 'string' && val.length > 0) { - return parse(val); - } else if (type === 'number' && isFinite(val)) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - 'val is not a non-empty string or a valid number. val=' + - JSON.stringify(val) - ); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - case 'weeks': - case 'week': - case 'w': - return n * w; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - default: - return undefined; - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtShort(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return Math.round(ms / d) + 'd'; - } - if (msAbs >= h) { - return Math.round(ms / h) + 'h'; - } - if (msAbs >= m) { - return Math.round(ms / m) + 'm'; - } - if (msAbs >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtLong(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return plural(ms, msAbs, d, 'day'); - } - if (msAbs >= h) { - return plural(ms, msAbs, h, 'hour'); - } - if (msAbs >= m) { - return plural(ms, msAbs, m, 'minute'); - } - if (msAbs >= s) { - return plural(ms, msAbs, s, 'second'); - } - return ms + ' ms'; -} - -/** - * Pluralization helper. - */ - -function plural(ms, msAbs, n, name) { - var isPlural = msAbs >= n * 1.5; - return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); -} - - -/***/ }), - -/***/ 504: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -var hasMap = typeof Map === 'function' && Map.prototype; -var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null; -var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null; -var mapForEach = hasMap && Map.prototype.forEach; -var hasSet = typeof Set === 'function' && Set.prototype; -var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null; -var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null; -var setForEach = hasSet && Set.prototype.forEach; -var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype; -var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null; -var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype; -var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null; -var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype; -var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; -var booleanValueOf = Boolean.prototype.valueOf; -var objectToString = Object.prototype.toString; -var functionToString = Function.prototype.toString; -var $match = String.prototype.match; -var $slice = String.prototype.slice; -var $replace = String.prototype.replace; -var $toUpperCase = String.prototype.toUpperCase; -var $toLowerCase = String.prototype.toLowerCase; -var $test = RegExp.prototype.test; -var $concat = Array.prototype.concat; -var $join = Array.prototype.join; -var $arrSlice = Array.prototype.slice; -var $floor = Math.floor; -var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null; -var gOPS = Object.getOwnPropertySymbols; -var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null; -var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object'; -// ie, `has-tostringtag/shams -var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol') - ? Symbol.toStringTag - : null; -var isEnumerable = Object.prototype.propertyIsEnumerable; - -var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ( - [].__proto__ === Array.prototype // eslint-disable-line no-proto - ? function (O) { - return O.__proto__; // eslint-disable-line no-proto - } - : null -); - -function addNumericSeparator(num, str) { - if ( - num === Infinity - || num === -Infinity - || num !== num - || (num && num > -1000 && num < 1000) - || $test.call(/e/, str) - ) { - return str; - } - var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; - if (typeof num === 'number') { - var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num) - if (int !== num) { - var intStr = String(int); - var dec = $slice.call(str, intStr.length + 1); - return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, ''); - } - } - return $replace.call(str, sepRegex, '$&_'); -} - -var utilInspect = __nccwpck_require__(7265); -var inspectCustom = utilInspect.custom; -var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null; - -module.exports = function inspect_(obj, options, depth, seen) { - var opts = options || {}; - - if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) { - throw new TypeError('option "quoteStyle" must be "single" or "double"'); - } - if ( - has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number' - ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity - : opts.maxStringLength !== null - ) - ) { - throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); - } - var customInspect = has(opts, 'customInspect') ? opts.customInspect : true; - if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') { - throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`'); - } - - if ( - has(opts, 'indent') - && opts.indent !== null - && opts.indent !== '\t' - && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0) - ) { - throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); - } - if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') { - throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); - } - var numericSeparator = opts.numericSeparator; - - if (typeof obj === 'undefined') { - return 'undefined'; - } - if (obj === null) { - return 'null'; - } - if (typeof obj === 'boolean') { - return obj ? 'true' : 'false'; - } - - if (typeof obj === 'string') { - return inspectString(obj, opts); - } - if (typeof obj === 'number') { - if (obj === 0) { - return Infinity / obj > 0 ? '0' : '-0'; - } - var str = String(obj); - return numericSeparator ? addNumericSeparator(obj, str) : str; - } - if (typeof obj === 'bigint') { - var bigIntStr = String(obj) + 'n'; - return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; - } - - var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth; - if (typeof depth === 'undefined') { depth = 0; } - if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') { - return isArray(obj) ? '[Array]' : '[Object]'; - } - - var indent = getIndent(opts, depth); - - if (typeof seen === 'undefined') { - seen = []; - } else if (indexOf(seen, obj) >= 0) { - return '[Circular]'; - } - - function inspect(value, from, noIndent) { - if (from) { - seen = $arrSlice.call(seen); - seen.push(from); - } - if (noIndent) { - var newOpts = { - depth: opts.depth - }; - if (has(opts, 'quoteStyle')) { - newOpts.quoteStyle = opts.quoteStyle; - } - return inspect_(value, newOpts, depth + 1, seen); - } - return inspect_(value, opts, depth + 1, seen); - } - - if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable - var name = nameOf(obj); - var keys = arrObjKeys(obj, inspect); - return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : ''); - } - if (isSymbol(obj)) { - var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj); - return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString; - } - if (isElement(obj)) { - var s = '<' + $toLowerCase.call(String(obj.nodeName)); - var attrs = obj.attributes || []; - for (var i = 0; i < attrs.length; i++) { - s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts); - } - s += '>'; - if (obj.childNodes && obj.childNodes.length) { s += '...'; } - s += ''; - return s; - } - if (isArray(obj)) { - if (obj.length === 0) { return '[]'; } - var xs = arrObjKeys(obj, inspect); - if (indent && !singleLineValues(xs)) { - return '[' + indentedJoin(xs, indent) + ']'; - } - return '[ ' + $join.call(xs, ', ') + ' ]'; - } - if (isError(obj)) { - var parts = arrObjKeys(obj, inspect); - if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) { - return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }'; - } - if (parts.length === 0) { return '[' + String(obj) + ']'; } - return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }'; - } - if (typeof obj === 'object' && customInspect) { - if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) { - return utilInspect(obj, { depth: maxDepth - depth }); - } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') { - return obj.inspect(); - } - } - if (isMap(obj)) { - var mapParts = []; - mapForEach.call(obj, function (value, key) { - mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj)); - }); - return collectionOf('Map', mapSize.call(obj), mapParts, indent); - } - if (isSet(obj)) { - var setParts = []; - setForEach.call(obj, function (value) { - setParts.push(inspect(value, obj)); - }); - return collectionOf('Set', setSize.call(obj), setParts, indent); - } - if (isWeakMap(obj)) { - return weakCollectionOf('WeakMap'); - } - if (isWeakSet(obj)) { - return weakCollectionOf('WeakSet'); - } - if (isWeakRef(obj)) { - return weakCollectionOf('WeakRef'); - } - if (isNumber(obj)) { - return markBoxed(inspect(Number(obj))); - } - if (isBigInt(obj)) { - return markBoxed(inspect(bigIntValueOf.call(obj))); - } - if (isBoolean(obj)) { - return markBoxed(booleanValueOf.call(obj)); - } - if (isString(obj)) { - return markBoxed(inspect(String(obj))); - } - if (!isDate(obj) && !isRegExp(obj)) { - var ys = arrObjKeys(obj, inspect); - var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; - var protoTag = obj instanceof Object ? '' : 'null prototype'; - var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : ''; - var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : ''; - var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : ''); - if (ys.length === 0) { return tag + '{}'; } - if (indent) { - return tag + '{' + indentedJoin(ys, indent) + '}'; - } - return tag + '{ ' + $join.call(ys, ', ') + ' }'; - } - return String(obj); -}; - -function wrapQuotes(s, defaultStyle, opts) { - var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'"; - return quoteChar + s + quoteChar; -} - -function quote(s) { - return $replace.call(String(s), /"/g, '"'); -} - -function isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } -function isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } -function isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } -function isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } -function isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } -function isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } -function isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } - -// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives -function isSymbol(obj) { - if (hasShammedSymbols) { - return obj && typeof obj === 'object' && obj instanceof Symbol; - } - if (typeof obj === 'symbol') { - return true; - } - if (!obj || typeof obj !== 'object' || !symToString) { - return false; - } - try { - symToString.call(obj); - return true; - } catch (e) {} - return false; -} - -function isBigInt(obj) { - if (!obj || typeof obj !== 'object' || !bigIntValueOf) { - return false; - } - try { - bigIntValueOf.call(obj); - return true; - } catch (e) {} - return false; -} - -var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; }; -function has(obj, key) { - return hasOwn.call(obj, key); -} - -function toStr(obj) { - return objectToString.call(obj); -} - -function nameOf(f) { - if (f.name) { return f.name; } - var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); - if (m) { return m[1]; } - return null; -} - -function indexOf(xs, x) { - if (xs.indexOf) { return xs.indexOf(x); } - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) { return i; } - } - return -1; -} - -function isMap(x) { - if (!mapSize || !x || typeof x !== 'object') { - return false; - } - try { - mapSize.call(x); - try { - setSize.call(x); - } catch (s) { - return true; - } - return x instanceof Map; // core-js workaround, pre-v2.5.0 - } catch (e) {} - return false; -} - -function isWeakMap(x) { - if (!weakMapHas || !x || typeof x !== 'object') { - return false; - } - try { - weakMapHas.call(x, weakMapHas); - try { - weakSetHas.call(x, weakSetHas); - } catch (s) { - return true; - } - return x instanceof WeakMap; // core-js workaround, pre-v2.5.0 - } catch (e) {} - return false; -} - -function isWeakRef(x) { - if (!weakRefDeref || !x || typeof x !== 'object') { - return false; - } - try { - weakRefDeref.call(x); - return true; - } catch (e) {} - return false; -} - -function isSet(x) { - if (!setSize || !x || typeof x !== 'object') { - return false; - } - try { - setSize.call(x); - try { - mapSize.call(x); - } catch (m) { - return true; - } - return x instanceof Set; // core-js workaround, pre-v2.5.0 - } catch (e) {} - return false; -} - -function isWeakSet(x) { - if (!weakSetHas || !x || typeof x !== 'object') { - return false; - } - try { - weakSetHas.call(x, weakSetHas); - try { - weakMapHas.call(x, weakMapHas); - } catch (s) { - return true; - } - return x instanceof WeakSet; // core-js workaround, pre-v2.5.0 - } catch (e) {} - return false; -} - -function isElement(x) { - if (!x || typeof x !== 'object') { return false; } - if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) { - return true; - } - return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function'; -} - -function inspectString(str, opts) { - if (str.length > opts.maxStringLength) { - var remaining = str.length - opts.maxStringLength; - var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : ''); - return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; - } - // eslint-disable-next-line no-control-regex - var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte); - return wrapQuotes(s, 'single', opts); -} - -function lowbyte(c) { - var n = c.charCodeAt(0); - var x = { - 8: 'b', - 9: 't', - 10: 'n', - 12: 'f', - 13: 'r' - }[n]; - if (x) { return '\\' + x; } - return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16)); -} - -function markBoxed(str) { - return 'Object(' + str + ')'; -} - -function weakCollectionOf(type) { - return type + ' { ? }'; -} - -function collectionOf(type, size, entries, indent) { - var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', '); - return type + ' (' + size + ') {' + joinedEntries + '}'; -} - -function singleLineValues(xs) { - for (var i = 0; i < xs.length; i++) { - if (indexOf(xs[i], '\n') >= 0) { - return false; - } - } - return true; -} - -function getIndent(opts, depth) { - var baseIndent; - if (opts.indent === '\t') { - baseIndent = '\t'; - } else if (typeof opts.indent === 'number' && opts.indent > 0) { - baseIndent = $join.call(Array(opts.indent + 1), ' '); - } else { - return null; - } - return { - base: baseIndent, - prev: $join.call(Array(depth + 1), baseIndent) - }; -} - -function indentedJoin(xs, indent) { - if (xs.length === 0) { return ''; } - var lineJoiner = '\n' + indent.prev + indent.base; - return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev; -} - -function arrObjKeys(obj, inspect) { - var isArr = isArray(obj); - var xs = []; - if (isArr) { - xs.length = obj.length; - for (var i = 0; i < obj.length; i++) { - xs[i] = has(obj, i) ? inspect(obj[i], obj) : ''; - } - } - var syms = typeof gOPS === 'function' ? gOPS(obj) : []; - var symMap; - if (hasShammedSymbols) { - symMap = {}; - for (var k = 0; k < syms.length; k++) { - symMap['$' + syms[k]] = syms[k]; - } - } - - for (var key in obj) { // eslint-disable-line no-restricted-syntax - if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue - if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue - if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) { - // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section - continue; // eslint-disable-line no-restricted-syntax, no-continue - } else if ($test.call(/[^\w$]/, key)) { - xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj)); - } else { - xs.push(key + ': ' + inspect(obj[key], obj)); - } - } - if (typeof gOPS === 'function') { - for (var j = 0; j < syms.length; j++) { - if (isEnumerable.call(obj, syms[j])) { - xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj)); - } - } - } - return xs; -} - - -/***/ }), - -/***/ 7265: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -module.exports = __nccwpck_require__(3837).inspect; - - -/***/ }), - -/***/ 1223: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -var wrappy = __nccwpck_require__(2940) -module.exports = wrappy(once) -module.exports.strict = wrappy(onceStrict) - -once.proto = once(function () { - Object.defineProperty(Function.prototype, 'once', { - value: function () { - return once(this) - }, - configurable: true - }) - - Object.defineProperty(Function.prototype, 'onceStrict', { - value: function () { - return onceStrict(this) - }, - configurable: true - }) -}) - -function once (fn) { - var f = function () { - if (f.called) return f.value - f.called = true - return f.value = fn.apply(this, arguments) - } - f.called = false - return f -} - -function onceStrict (fn) { - var f = function () { - if (f.called) - throw new Error(f.onceError) - f.called = true - return f.value = fn.apply(this, arguments) - } - var name = fn.name || 'Function wrapped with `once`' - f.onceError = name + " shouldn't be called more than once" - f.called = false - return f -} - - -/***/ }), - -/***/ 8714: -/***/ ((module) => { - -"use strict"; - - -function posix(path) { - return path.charAt(0) === '/'; -} - -function win32(path) { - // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 - var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; - var result = splitDeviceRe.exec(path); - var device = result[1] || ''; - var isUnc = Boolean(device && device.charAt(1) !== ':'); - - // UNC paths are always absolute - return Boolean(result[2] || isUnc); -} - -module.exports = process.platform === 'win32' ? win32 : posix; -module.exports.posix = posix; -module.exports.win32 = win32; - - -/***/ }), - -/***/ 6172: -/***/ ((module) => { - -// vim:ts=4:sts=4:sw=4: -/*! - * - * Copyright 2009-2017 Kris Kowal under the terms of the MIT - * license found at https://github.com/kriskowal/q/blob/v1/LICENSE - * - * With parts by Tyler Close - * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found - * at http://www.opensource.org/licenses/mit-license.html - * Forked at ref_send.js version: 2009-05-11 - * - * With parts by Mark Miller - * Copyright (C) 2011 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -(function (definition) { - "use strict"; - - // This file will function properly as a