3072 lines
		
	
	
		
			110 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			3072 lines
		
	
	
		
			110 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | module.exports = | ||
|  | /******/ (function(modules, runtime) { // webpackBootstrap
 | ||
|  | /******/ 	"use strict"; | ||
|  | /******/ 	// The module cache
 | ||
|  | /******/ 	var installedModules = {}; | ||
|  | /******/ | ||
|  | /******/ 	// The require function
 | ||
|  | /******/ 	function __webpack_require__(moduleId) { | ||
|  | /******/ | ||
|  | /******/ 		// Check if module is in cache
 | ||
|  | /******/ 		if(installedModules[moduleId]) { | ||
|  | /******/ 			return installedModules[moduleId].exports; | ||
|  | /******/ 		} | ||
|  | /******/ 		// Create a new module (and put it into the cache)
 | ||
|  | /******/ 		var module = installedModules[moduleId] = { | ||
|  | /******/ 			i: moduleId, | ||
|  | /******/ 			l: false, | ||
|  | /******/ 			exports: {} | ||
|  | /******/ 		}; | ||
|  | /******/ | ||
|  | /******/ 		// Execute the module function
 | ||
|  | /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); | ||
|  | /******/ | ||
|  | /******/ 		// Flag the module as loaded
 | ||
|  | /******/ 		module.l = true; | ||
|  | /******/ | ||
|  | /******/ 		// Return the exports of the module
 | ||
|  | /******/ 		return module.exports; | ||
|  | /******/ 	} | ||
|  | /******/ | ||
|  | /******/ | ||
|  | /******/ 	__webpack_require__.ab = __dirname + "/"; | ||
|  | /******/ | ||
|  | /******/ 	// the startup function
 | ||
|  | /******/ 	function startup() { | ||
|  | /******/ 		// Load entry module and return exports
 | ||
|  | /******/ 		return __webpack_require__(681); | ||
|  | /******/ 	}; | ||
|  | /******/ | ||
|  | /******/ 	// run startup
 | ||
|  | /******/ 	return startup(); | ||
|  | /******/ }) | ||
|  | /************************************************************************/ | ||
|  | /******/ ({ | ||
|  | 
 | ||
|  | /***/ 1: | ||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
|  |     }); | ||
|  | }; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const childProcess = __webpack_require__(129); | ||
|  | const path = __webpack_require__(622); | ||
|  | const util_1 = __webpack_require__(669); | ||
|  | const ioUtil = __webpack_require__(672); | ||
|  | const exec = util_1.promisify(childProcess.exec); | ||
|  | /** | ||
|  |  * 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 } = 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() | ||
|  |             ? 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.
 | ||
|  |             try { | ||
|  |                 if (yield ioUtil.isDirectory(inputPath, true)) { | ||
|  |                     yield exec(`rd /s /q "${inputPath}"`); | ||
|  |                 } | ||
|  |                 else { | ||
|  |                     yield exec(`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 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 exec(`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<void> | ||
|  |  */ | ||
|  | function mkdirP(fsPath) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         yield ioUtil.mkdirP(fsPath); | ||
|  |     }); | ||
|  | } | ||
|  | 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<string>   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.`); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |         try { | ||
|  |             // 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('/') || (ioUtil.IS_WINDOWS && tool.includes('\\'))) { | ||
|  |                 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); | ||
|  |                     } | ||
|  |                 } | ||
|  |             } | ||
|  |             // return the first match
 | ||
|  |             for (const directory of directories) { | ||
|  |                 const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions); | ||
|  |                 if (filePath) { | ||
|  |                     return filePath; | ||
|  |                 } | ||
|  |             } | ||
|  |             return ''; | ||
|  |         } | ||
|  |         catch (err) { | ||
|  |             throw new Error(`which failed with message ${err.message}`); | ||
|  |         } | ||
|  |     }); | ||
|  | } | ||
|  | exports.which = which; | ||
|  | function readCopyOptions(options) { | ||
|  |     const force = options.force == null ? true : options.force; | ||
|  |     const recursive = Boolean(options.recursive); | ||
|  |     return { force, recursive }; | ||
|  | } | ||
|  | 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
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 9: | ||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
|  |     }); | ||
|  | }; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const os = __webpack_require__(87); | ||
|  | const events = __webpack_require__(614); | ||
|  | const child = __webpack_require__(129); | ||
|  | /* 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); | ||
|  |             } | ||
|  |             strBuffer = s; | ||
|  |         } | ||
|  |         catch (err) { | ||
|  |             // streaming lines to console is best effort.  Don't fail a build.
 | ||
|  |             this._debug(`error processing line. Failed with error ${err}`); | ||
|  |         } | ||
|  |     } | ||
|  |     _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* () { | ||
|  |             return new Promise((resolve, reject) => { | ||
|  |                 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); | ||
|  |                 }); | ||
|  |                 const fileName = this._getSpawnFileName(); | ||
|  |                 const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); | ||
|  |                 const 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); | ||
|  |                         } | ||
|  |                         this._processLineBuffer(data, stdbuffer, (line) => { | ||
|  |                             if (this.options.listeners && this.options.listeners.stdline) { | ||
|  |                                 this.options.listeners.stdline(line); | ||
|  |                             } | ||
|  |                         }); | ||
|  |                     }); | ||
|  |                 } | ||
|  |                 const 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); | ||
|  |                         } | ||
|  |                         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); | ||
|  |                     } | ||
|  |                 }); | ||
|  |             }); | ||
|  |         }); | ||
|  |     } | ||
|  | } | ||
|  | 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 = 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
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 16: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("tls"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 87: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("os"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 129: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("child_process"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 139: | ||
|  | /***/ (function(module, __unusedexports, __webpack_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 = __webpack_require__(417); | ||
|  | 
 | ||
|  | module.exports = function nodeRNG() { | ||
|  |   return crypto.randomBytes(16); | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 141: | ||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | 
 | ||
|  | var net = __webpack_require__(631); | ||
|  | var tls = __webpack_require__(16); | ||
|  | var http = __webpack_require__(605); | ||
|  | var https = __webpack_require__(211); | ||
|  | var events = __webpack_require__(614); | ||
|  | var assert = __webpack_require__(357); | ||
|  | var util = __webpack_require__(669); | ||
|  | 
 | ||
|  | 
 | ||
|  | exports.httpOverHttp = httpOverHttp; | ||
|  | exports.httpsOverHttp = httpsOverHttp; | ||
|  | exports.httpOverHttps = httpOverHttps; | ||
|  | exports.httpsOverHttps = httpsOverHttps; | ||
|  | 
 | ||
|  | 
 | ||
|  | function httpOverHttp(options) { | ||
|  |   var agent = new TunnelingAgent(options); | ||
|  |   agent.request = http.request; | ||
|  |   return agent; | ||
|  | } | ||
|  | 
 | ||
|  | function httpsOverHttp(options) { | ||
|  |   var agent = new TunnelingAgent(options); | ||
|  |   agent.request = http.request; | ||
|  |   agent.createSocket = createSecureSocket; | ||
|  |   agent.defaultPort = 443; | ||
|  |   return agent; | ||
|  | } | ||
|  | 
 | ||
|  | function httpOverHttps(options) { | ||
|  |   var agent = new TunnelingAgent(options); | ||
|  |   agent.request = https.request; | ||
|  |   return agent; | ||
|  | } | ||
|  | 
 | ||
|  | function httpsOverHttps(options) { | ||
|  |   var agent = new TunnelingAgent(options); | ||
|  |   agent.request = https.request; | ||
|  |   agent.createSocket = createSecureSocket; | ||
|  |   agent.defaultPort = 443; | ||
|  |   return agent; | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | function TunnelingAgent(options) { | ||
|  |   var self = this; | ||
|  |   self.options = options || {}; | ||
|  |   self.proxyOptions = self.options.proxy || {}; | ||
|  |   self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets; | ||
|  |   self.requests = []; | ||
|  |   self.sockets = []; | ||
|  | 
 | ||
|  |   self.on('free', function onFree(socket, host, port, localAddress) { | ||
|  |     var options = toOptions(host, port, localAddress); | ||
|  |     for (var i = 0, len = self.requests.length; i < len; ++i) { | ||
|  |       var pending = self.requests[i]; | ||
|  |       if (pending.host === options.host && pending.port === options.port) { | ||
|  |         // Detect the request to connect same origin server,
 | ||
|  |         // reuse the connection.
 | ||
|  |         self.requests.splice(i, 1); | ||
|  |         pending.request.onSocket(socket); | ||
|  |         return; | ||
|  |       } | ||
|  |     } | ||
|  |     socket.destroy(); | ||
|  |     self.removeSocket(socket); | ||
|  |   }); | ||
|  | } | ||
|  | util.inherits(TunnelingAgent, events.EventEmitter); | ||
|  | 
 | ||
|  | TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) { | ||
|  |   var self = this; | ||
|  |   var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress)); | ||
|  | 
 | ||
|  |   if (self.sockets.length >= this.maxSockets) { | ||
|  |     // We are over limit so we'll add it to the queue.
 | ||
|  |     self.requests.push(options); | ||
|  |     return; | ||
|  |   } | ||
|  | 
 | ||
|  |   // If we are under maxSockets create a new one.
 | ||
|  |   self.createSocket(options, function(socket) { | ||
|  |     socket.on('free', onFree); | ||
|  |     socket.on('close', onCloseOrRemove); | ||
|  |     socket.on('agentRemove', onCloseOrRemove); | ||
|  |     req.onSocket(socket); | ||
|  | 
 | ||
|  |     function onFree() { | ||
|  |       self.emit('free', socket, options); | ||
|  |     } | ||
|  | 
 | ||
|  |     function onCloseOrRemove(err) { | ||
|  |       self.removeSocket(socket); | ||
|  |       socket.removeListener('free', onFree); | ||
|  |       socket.removeListener('close', onCloseOrRemove); | ||
|  |       socket.removeListener('agentRemove', onCloseOrRemove); | ||
|  |     } | ||
|  |   }); | ||
|  | }; | ||
|  | 
 | ||
|  | TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { | ||
|  |   var self = this; | ||
|  |   var placeholder = {}; | ||
|  |   self.sockets.push(placeholder); | ||
|  | 
 | ||
|  |   var connectOptions = mergeOptions({}, self.proxyOptions, { | ||
|  |     method: 'CONNECT', | ||
|  |     path: options.host + ':' + options.port, | ||
|  |     agent: false, | ||
|  |     headers: { | ||
|  |       host: options.host + ':' + options.port | ||
|  |     } | ||
|  |   }); | ||
|  |   if (options.localAddress) { | ||
|  |     connectOptions.localAddress = options.localAddress; | ||
|  |   } | ||
|  |   if (connectOptions.proxyAuth) { | ||
|  |     connectOptions.headers = connectOptions.headers || {}; | ||
|  |     connectOptions.headers['Proxy-Authorization'] = 'Basic ' + | ||
|  |         new Buffer(connectOptions.proxyAuth).toString('base64'); | ||
|  |   } | ||
|  | 
 | ||
|  |   debug('making CONNECT request'); | ||
|  |   var connectReq = self.request(connectOptions); | ||
|  |   connectReq.useChunkedEncodingByDefault = false; // for v0.6
 | ||
|  |   connectReq.once('response', onResponse); // for v0.6
 | ||
|  |   connectReq.once('upgrade', onUpgrade);   // for v0.6
 | ||
|  |   connectReq.once('connect', onConnect);   // for v0.7 or later
 | ||
|  |   connectReq.once('error', onError); | ||
|  |   connectReq.end(); | ||
|  | 
 | ||
|  |   function onResponse(res) { | ||
|  |     // Very hacky. This is necessary to avoid http-parser leaks.
 | ||
|  |     res.upgrade = true; | ||
|  |   } | ||
|  | 
 | ||
|  |   function onUpgrade(res, socket, head) { | ||
|  |     // Hacky.
 | ||
|  |     process.nextTick(function() { | ||
|  |       onConnect(res, socket, head); | ||
|  |     }); | ||
|  |   } | ||
|  | 
 | ||
|  |   function onConnect(res, socket, head) { | ||
|  |     connectReq.removeAllListeners(); | ||
|  |     socket.removeAllListeners(); | ||
|  | 
 | ||
|  |     if (res.statusCode !== 200) { | ||
|  |       debug('tunneling socket could not be established, statusCode=%d', | ||
|  |         res.statusCode); | ||
|  |       socket.destroy(); | ||
|  |       var error = new Error('tunneling socket could not be established, ' + | ||
|  |         'statusCode=' + res.statusCode); | ||
|  |       error.code = 'ECONNRESET'; | ||
|  |       options.request.emit('error', error); | ||
|  |       self.removeSocket(placeholder); | ||
|  |       return; | ||
|  |     } | ||
|  |     if (head.length > 0) { | ||
|  |       debug('got illegal response body from proxy'); | ||
|  |       socket.destroy(); | ||
|  |       var error = new Error('got illegal response body from proxy'); | ||
|  |       error.code = 'ECONNRESET'; | ||
|  |       options.request.emit('error', error); | ||
|  |       self.removeSocket(placeholder); | ||
|  |       return; | ||
|  |     } | ||
|  |     debug('tunneling connection has established'); | ||
|  |     self.sockets[self.sockets.indexOf(placeholder)] = socket; | ||
|  |     return cb(socket); | ||
|  |   } | ||
|  | 
 | ||
|  |   function onError(cause) { | ||
|  |     connectReq.removeAllListeners(); | ||
|  | 
 | ||
|  |     debug('tunneling socket could not be established, cause=%s\n', | ||
|  |           cause.message, cause.stack); | ||
|  |     var error = new Error('tunneling socket could not be established, ' + | ||
|  |                           'cause=' + cause.message); | ||
|  |     error.code = 'ECONNRESET'; | ||
|  |     options.request.emit('error', error); | ||
|  |     self.removeSocket(placeholder); | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { | ||
|  |   var pos = this.sockets.indexOf(socket) | ||
|  |   if (pos === -1) { | ||
|  |     return; | ||
|  |   } | ||
|  |   this.sockets.splice(pos, 1); | ||
|  | 
 | ||
|  |   var pending = this.requests.shift(); | ||
|  |   if (pending) { | ||
|  |     // If we have pending requests and a socket gets closed a new one
 | ||
|  |     // needs to be created to take over in the pool for the one that closed.
 | ||
|  |     this.createSocket(pending, function(socket) { | ||
|  |       pending.request.onSocket(socket); | ||
|  |     }); | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | function createSecureSocket(options, cb) { | ||
|  |   var self = this; | ||
|  |   TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { | ||
|  |     var hostHeader = options.request.getHeader('host'); | ||
|  |     var tlsOptions = mergeOptions({}, self.options, { | ||
|  |       socket: socket, | ||
|  |       servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host | ||
|  |     }); | ||
|  | 
 | ||
|  |     // 0 is dummy port for v0.6
 | ||
|  |     var secureSocket = tls.connect(0, tlsOptions); | ||
|  |     self.sockets[self.sockets.indexOf(socket)] = secureSocket; | ||
|  |     cb(secureSocket); | ||
|  |   }); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | function toOptions(host, port, localAddress) { | ||
|  |   if (typeof host === 'string') { // since v0.10
 | ||
|  |     return { | ||
|  |       host: host, | ||
|  |       port: port, | ||
|  |       localAddress: localAddress | ||
|  |     }; | ||
|  |   } | ||
|  |   return host; // for v0.11 or later
 | ||
|  | } | ||
|  | 
 | ||
|  | function mergeOptions(target) { | ||
|  |   for (var i = 1, len = arguments.length; i < len; ++i) { | ||
|  |     var overrides = arguments[i]; | ||
|  |     if (typeof overrides === 'object') { | ||
|  |       var keys = Object.keys(overrides); | ||
|  |       for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { | ||
|  |         var k = keys[j]; | ||
|  |         if (overrides[k] !== undefined) { | ||
|  |           target[k] = overrides[k]; | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  |   return target; | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | var debug; | ||
|  | if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { | ||
|  |   debug = function() { | ||
|  |     var args = Array.prototype.slice.call(arguments); | ||
|  |     if (typeof args[0] === 'string') { | ||
|  |       args[0] = 'TUNNEL: ' + args[0]; | ||
|  |     } else { | ||
|  |       args.unshift('TUNNEL:'); | ||
|  |     } | ||
|  |     console.error.apply(console, args); | ||
|  |   } | ||
|  | } else { | ||
|  |   debug = function() {}; | ||
|  | } | ||
|  | exports.debug = debug; // for test
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 154: | ||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
|  |     }); | ||
|  | }; | ||
|  | var __importStar = (this && this.__importStar) || function (mod) { | ||
|  |     if (mod && mod.__esModule) return mod; | ||
|  |     var result = {}; | ||
|  |     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||
|  |     result["default"] = mod; | ||
|  |     return result; | ||
|  | }; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const core = __importStar(__webpack_require__(470)); | ||
|  | const fs = __importStar(__webpack_require__(747)); | ||
|  | const auth_1 = __webpack_require__(226); | ||
|  | const http_client_1 = __webpack_require__(539); | ||
|  | const utils = __importStar(__webpack_require__(443)); | ||
|  | function isSuccessStatusCode(statusCode) { | ||
|  |     if (!statusCode) { | ||
|  |         return false; | ||
|  |     } | ||
|  |     return statusCode >= 200 && statusCode < 300; | ||
|  | } | ||
|  | function isRetryableStatusCode(statusCode) { | ||
|  |     if (!statusCode) { | ||
|  |         return false; | ||
|  |     } | ||
|  |     const retryableStatusCodes = [ | ||
|  |         http_client_1.HttpCodes.BadGateway, | ||
|  |         http_client_1.HttpCodes.ServiceUnavailable, | ||
|  |         http_client_1.HttpCodes.GatewayTimeout | ||
|  |     ]; | ||
|  |     return retryableStatusCodes.includes(statusCode); | ||
|  | } | ||
|  | function getCacheApiUrl(resource) { | ||
|  |     // Ideally we just use ACTIONS_CACHE_URL
 | ||
|  |     const baseUrl = (process.env["ACTIONS_CACHE_URL"] || | ||
|  |         process.env["ACTIONS_RUNTIME_URL"] || | ||
|  |         "").replace("pipelines", "artifactcache"); | ||
|  |     if (!baseUrl) { | ||
|  |         throw new Error("Cache Service Url not found, unable to restore cache."); | ||
|  |     } | ||
|  |     const url = `${baseUrl}_apis/artifactcache/${resource}`; | ||
|  |     core.debug(`Resource Url: ${url}`); | ||
|  |     return url; | ||
|  | } | ||
|  | function createAcceptHeader(type, apiVersion) { | ||
|  |     return `${type};api-version=${apiVersion}`; | ||
|  | } | ||
|  | function getRequestOptions() { | ||
|  |     const requestOptions = { | ||
|  |         headers: { | ||
|  |             Accept: createAcceptHeader("application/json", "6.0-preview.1") | ||
|  |         } | ||
|  |     }; | ||
|  |     return requestOptions; | ||
|  | } | ||
|  | function createHttpClient() { | ||
|  |     const token = process.env["ACTIONS_RUNTIME_TOKEN"] || ""; | ||
|  |     const bearerCredentialHandler = new auth_1.BearerCredentialHandler(token); | ||
|  |     return new http_client_1.HttpClient("actions/cache", [bearerCredentialHandler], getRequestOptions()); | ||
|  | } | ||
|  | function getCacheEntry(keys) { | ||
|  |     var _a; | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         const httpClient = createHttpClient(); | ||
|  |         const resource = `cache?keys=${encodeURIComponent(keys.join(","))}`; | ||
|  |         const response = yield httpClient.getJson(getCacheApiUrl(resource)); | ||
|  |         if (response.statusCode === 204) { | ||
|  |             return null; | ||
|  |         } | ||
|  |         if (!isSuccessStatusCode(response.statusCode)) { | ||
|  |             throw new Error(`Cache service responded with ${response.statusCode}`); | ||
|  |         } | ||
|  |         const cacheResult = response.result; | ||
|  |         const cacheDownloadUrl = (_a = cacheResult) === null || _a === void 0 ? void 0 : _a.archiveLocation; | ||
|  |         if (!cacheDownloadUrl) { | ||
|  |             throw new Error("Cache not found."); | ||
|  |         } | ||
|  |         core.setSecret(cacheDownloadUrl); | ||
|  |         core.debug(`Cache Result:`); | ||
|  |         core.debug(JSON.stringify(cacheResult)); | ||
|  |         return cacheResult; | ||
|  |     }); | ||
|  | } | ||
|  | exports.getCacheEntry = getCacheEntry; | ||
|  | function pipeResponseToStream(response, stream) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         return new Promise(resolve => { | ||
|  |             response.message.pipe(stream).on("close", () => { | ||
|  |                 resolve(); | ||
|  |             }); | ||
|  |         }); | ||
|  |     }); | ||
|  | } | ||
|  | function downloadCache(archiveLocation, archivePath) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         const stream = fs.createWriteStream(archivePath); | ||
|  |         const httpClient = new http_client_1.HttpClient("actions/cache"); | ||
|  |         const downloadResponse = yield httpClient.get(archiveLocation); | ||
|  |         yield pipeResponseToStream(downloadResponse, stream); | ||
|  |     }); | ||
|  | } | ||
|  | exports.downloadCache = downloadCache; | ||
|  | // Reserve Cache
 | ||
|  | function reserveCache(key) { | ||
|  |     var _a, _b, _c; | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         const httpClient = createHttpClient(); | ||
|  |         const reserveCacheRequest = { | ||
|  |             key | ||
|  |         }; | ||
|  |         const response = yield httpClient.postJson(getCacheApiUrl("caches"), reserveCacheRequest); | ||
|  |         return _c = (_b = (_a = response) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b.cacheId, (_c !== null && _c !== void 0 ? _c : -1); | ||
|  |     }); | ||
|  | } | ||
|  | exports.reserveCache = reserveCache; | ||
|  | function getContentRange(start, end) { | ||
|  |     // Format: `bytes start-end/filesize
 | ||
|  |     // start and end are inclusive
 | ||
|  |     // filesize can be *
 | ||
|  |     // For a 200 byte chunk starting at byte 0:
 | ||
|  |     // Content-Range: bytes 0-199/*
 | ||
|  |     return `bytes ${start}-${end}/*`; | ||
|  | } | ||
|  | function uploadChunk(httpClient, resourceUrl, data, start, end) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         core.debug(`Uploading chunk of size ${end - | ||
|  |             start + | ||
|  |             1} bytes at offset ${start} with content range: ${getContentRange(start, end)}`);
 | ||
|  |         const additionalHeaders = { | ||
|  |             "Content-Type": "application/octet-stream", | ||
|  |             "Content-Range": getContentRange(start, end) | ||
|  |         }; | ||
|  |         const uploadChunkRequest = () => __awaiter(this, void 0, void 0, function* () { | ||
|  |             return yield httpClient.sendStream("PATCH", resourceUrl, data, additionalHeaders); | ||
|  |         }); | ||
|  |         const response = yield uploadChunkRequest(); | ||
|  |         if (isSuccessStatusCode(response.message.statusCode)) { | ||
|  |             return; | ||
|  |         } | ||
|  |         if (isRetryableStatusCode(response.message.statusCode)) { | ||
|  |             core.debug(`Received ${response.message.statusCode}, retrying chunk at offset ${start}.`); | ||
|  |             const retryResponse = yield uploadChunkRequest(); | ||
|  |             if (isSuccessStatusCode(retryResponse.message.statusCode)) { | ||
|  |                 return; | ||
|  |             } | ||
|  |         } | ||
|  |         throw new Error(`Cache service responded with ${response.message.statusCode} during chunk upload.`); | ||
|  |     }); | ||
|  | } | ||
|  | function parseEnvNumber(key) { | ||
|  |     const value = Number(process.env[key]); | ||
|  |     if (Number.isNaN(value) || value < 0) { | ||
|  |         return undefined; | ||
|  |     } | ||
|  |     return value; | ||
|  | } | ||
|  | function uploadFile(httpClient, cacheId, archivePath) { | ||
|  |     var _a, _b; | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         // Upload Chunks
 | ||
|  |         const fileSize = fs.statSync(archivePath).size; | ||
|  |         const resourceUrl = getCacheApiUrl(`caches/${cacheId.toString()}`); | ||
|  |         const fd = fs.openSync(archivePath, "r"); | ||
|  |         const concurrency = (_a = parseEnvNumber("CACHE_UPLOAD_CONCURRENCY"), (_a !== null && _a !== void 0 ? _a : 4)); // # of HTTP requests in parallel
 | ||
|  |         const MAX_CHUNK_SIZE = (_b = parseEnvNumber("CACHE_UPLOAD_CHUNK_SIZE"), (_b !== null && _b !== void 0 ? _b : 32 * 1024 * 1024)); // 32 MB Chunks
 | ||
|  |         core.debug(`Concurrency: ${concurrency} and Chunk Size: ${MAX_CHUNK_SIZE}`); | ||
|  |         const parallelUploads = [...new Array(concurrency).keys()]; | ||
|  |         core.debug("Awaiting all uploads"); | ||
|  |         let offset = 0; | ||
|  |         try { | ||
|  |             yield Promise.all(parallelUploads.map(() => __awaiter(this, void 0, void 0, function* () { | ||
|  |                 while (offset < fileSize) { | ||
|  |                     const chunkSize = Math.min(fileSize - offset, MAX_CHUNK_SIZE); | ||
|  |                     const start = offset; | ||
|  |                     const end = offset + chunkSize - 1; | ||
|  |                     offset += MAX_CHUNK_SIZE; | ||
|  |                     const chunk = fs.createReadStream(archivePath, { | ||
|  |                         fd, | ||
|  |                         start, | ||
|  |                         end, | ||
|  |                         autoClose: false | ||
|  |                     }); | ||
|  |                     yield uploadChunk(httpClient, resourceUrl, chunk, start, end); | ||
|  |                 } | ||
|  |             }))); | ||
|  |         } | ||
|  |         finally { | ||
|  |             fs.closeSync(fd); | ||
|  |         } | ||
|  |         return; | ||
|  |     }); | ||
|  | } | ||
|  | function commitCache(httpClient, cacheId, filesize) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         const commitCacheRequest = { size: filesize }; | ||
|  |         return yield httpClient.postJson(getCacheApiUrl(`caches/${cacheId.toString()}`), commitCacheRequest); | ||
|  |     }); | ||
|  | } | ||
|  | function saveCache(cacheId, archivePath) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         const httpClient = createHttpClient(); | ||
|  |         core.debug("Upload cache"); | ||
|  |         yield uploadFile(httpClient, cacheId, archivePath); | ||
|  |         // Commit Cache
 | ||
|  |         core.debug("Commiting cache"); | ||
|  |         const cacheSize = utils.getArchiveFileSize(archivePath); | ||
|  |         const commitCacheResponse = yield commitCache(httpClient, cacheId, cacheSize); | ||
|  |         if (!isSuccessStatusCode(commitCacheResponse.statusCode)) { | ||
|  |             throw new Error(`Cache service responded with ${commitCacheResponse.statusCode} during commit cache.`); | ||
|  |         } | ||
|  |         core.info("Cache saved successfully"); | ||
|  |     }); | ||
|  | } | ||
|  | exports.saveCache = saveCache; | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 211: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("https"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 226: | ||
|  | /***/ (function(__unusedmodule, exports) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | class BasicCredentialHandler { | ||
|  |     constructor(username, password) { | ||
|  |         this.username = username; | ||
|  |         this.password = password; | ||
|  |     } | ||
|  |     prepareRequest(options) { | ||
|  |         options.headers['Authorization'] = 'Basic ' + Buffer.from(this.username + ':' + this.password).toString('base64'); | ||
|  |     } | ||
|  |     // This handler cannot handle 401
 | ||
|  |     canHandleAuthentication(response) { | ||
|  |         return false; | ||
|  |     } | ||
|  |     handleAuthentication(httpClient, requestInfo, objs) { | ||
|  |         return null; | ||
|  |     } | ||
|  | } | ||
|  | 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) { | ||
|  |         options.headers['Authorization'] = 'Bearer ' + this.token; | ||
|  |     } | ||
|  |     // This handler cannot handle 401
 | ||
|  |     canHandleAuthentication(response) { | ||
|  |         return false; | ||
|  |     } | ||
|  |     handleAuthentication(httpClient, requestInfo, objs) { | ||
|  |         return null; | ||
|  |     } | ||
|  | } | ||
|  | 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) { | ||
|  |         options.headers['Authorization'] = 'Basic ' + Buffer.from('PAT:' + this.token).toString('base64'); | ||
|  |     } | ||
|  |     // This handler cannot handle 401
 | ||
|  |     canHandleAuthentication(response) { | ||
|  |         return false; | ||
|  |     } | ||
|  |     handleAuthentication(httpClient, requestInfo, objs) { | ||
|  |         return null; | ||
|  |     } | ||
|  | } | ||
|  | exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 357: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("assert"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 413: | ||
|  | /***/ (function(module, __unusedexports, __webpack_require__) { | ||
|  | 
 | ||
|  | module.exports = __webpack_require__(141); | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 417: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("crypto"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 431: | ||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const os = __webpack_require__(87); | ||
|  | /** | ||
|  |  * Commands | ||
|  |  * | ||
|  |  * Command Format: | ||
|  |  *   ##[name key=value;key=value]message | ||
|  |  * | ||
|  |  * Examples: | ||
|  |  *   ##[warning]This is the user warning message | ||
|  |  *   ##[set-secret name=mypassword]definitelyNotAPassword! | ||
|  |  */ | ||
|  | 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 += ' '; | ||
|  |             for (const key in this.properties) { | ||
|  |                 if (this.properties.hasOwnProperty(key)) { | ||
|  |                     const 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 += CMD_STRING; | ||
|  |         // safely append the message - avoid blowing up when attempting to
 | ||
|  |         // call .replace() if message is not a string for some reason
 | ||
|  |         const message = `${this.message || ''}`; | ||
|  |         cmdStr += escapeData(message); | ||
|  |         return cmdStr; | ||
|  |     } | ||
|  | } | ||
|  | function escapeData(s) { | ||
|  |     return s.replace(/\r/g, '%0D').replace(/\n/g, '%0A'); | ||
|  | } | ||
|  | function escape(s) { | ||
|  |     return s | ||
|  |         .replace(/\r/g, '%0D') | ||
|  |         .replace(/\n/g, '%0A') | ||
|  |         .replace(/]/g, '%5D') | ||
|  |         .replace(/;/g, '%3B'); | ||
|  | } | ||
|  | //# sourceMappingURL=command.js.map
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 443: | ||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
|  |     }); | ||
|  | }; | ||
|  | var __importStar = (this && this.__importStar) || function (mod) { | ||
|  |     if (mod && mod.__esModule) return mod; | ||
|  |     var result = {}; | ||
|  |     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||
|  |     result["default"] = mod; | ||
|  |     return result; | ||
|  | }; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const core = __importStar(__webpack_require__(470)); | ||
|  | const io = __importStar(__webpack_require__(1)); | ||
|  | const fs = __importStar(__webpack_require__(747)); | ||
|  | const os = __importStar(__webpack_require__(87)); | ||
|  | const path = __importStar(__webpack_require__(622)); | ||
|  | const uuidV4 = __importStar(__webpack_require__(826)); | ||
|  | const constants_1 = __webpack_require__(694); | ||
|  | // From https://github.com/actions/toolkit/blob/master/packages/tool-cache/src/tool-cache.ts#L23
 | ||
|  | function createTempDirectory() { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         const IS_WINDOWS = process.platform === "win32"; | ||
|  |         let tempDirectory = process.env["RUNNER_TEMP"] || ""; | ||
|  |         if (!tempDirectory) { | ||
|  |             let baseLocation; | ||
|  |             if (IS_WINDOWS) { | ||
|  |                 // On Windows use the USERPROFILE env variable
 | ||
|  |                 baseLocation = process.env["USERPROFILE"] || "C:\\"; | ||
|  |             } | ||
|  |             else { | ||
|  |                 if (process.platform === "darwin") { | ||
|  |                     baseLocation = "/Users"; | ||
|  |                 } | ||
|  |                 else { | ||
|  |                     baseLocation = "/home"; | ||
|  |                 } | ||
|  |             } | ||
|  |             tempDirectory = path.join(baseLocation, "actions", "temp"); | ||
|  |         } | ||
|  |         const dest = path.join(tempDirectory, uuidV4.default()); | ||
|  |         yield io.mkdirP(dest); | ||
|  |         return dest; | ||
|  |     }); | ||
|  | } | ||
|  | exports.createTempDirectory = createTempDirectory; | ||
|  | function getArchiveFileSize(path) { | ||
|  |     return fs.statSync(path).size; | ||
|  | } | ||
|  | exports.getArchiveFileSize = getArchiveFileSize; | ||
|  | function isExactKeyMatch(key, cacheResult) { | ||
|  |     return !!(cacheResult && | ||
|  |         cacheResult.cacheKey && | ||
|  |         cacheResult.cacheKey.localeCompare(key, undefined, { | ||
|  |             sensitivity: "accent" | ||
|  |         }) === 0); | ||
|  | } | ||
|  | exports.isExactKeyMatch = isExactKeyMatch; | ||
|  | function setCacheState(state) { | ||
|  |     core.saveState(constants_1.State.CacheResult, JSON.stringify(state)); | ||
|  | } | ||
|  | exports.setCacheState = setCacheState; | ||
|  | function setCacheHitOutput(isCacheHit) { | ||
|  |     core.setOutput(constants_1.Outputs.CacheHit, isCacheHit.toString()); | ||
|  | } | ||
|  | exports.setCacheHitOutput = setCacheHitOutput; | ||
|  | function setOutputAndState(key, cacheResult) { | ||
|  |     setCacheHitOutput(isExactKeyMatch(key, cacheResult)); | ||
|  |     // Store the cache result if it exists
 | ||
|  |     cacheResult && setCacheState(cacheResult); | ||
|  | } | ||
|  | exports.setOutputAndState = setOutputAndState; | ||
|  | function getCacheState() { | ||
|  |     const stateData = core.getState(constants_1.State.CacheResult); | ||
|  |     core.debug(`State: ${stateData}`); | ||
|  |     if (stateData) { | ||
|  |         return JSON.parse(stateData); | ||
|  |     } | ||
|  |     return undefined; | ||
|  | } | ||
|  | exports.getCacheState = getCacheState; | ||
|  | function logWarning(message) { | ||
|  |     const warningPrefix = "[warning]"; | ||
|  |     core.info(`${warningPrefix}${message}`); | ||
|  | } | ||
|  | exports.logWarning = logWarning; | ||
|  | function resolvePath(filePath) { | ||
|  |     if (filePath[0] === "~") { | ||
|  |         const home = os.homedir(); | ||
|  |         if (!home) { | ||
|  |             throw new Error("Unable to resolve `~` to HOME"); | ||
|  |         } | ||
|  |         return path.join(home, filePath.slice(1)); | ||
|  |     } | ||
|  |     return path.resolve(filePath); | ||
|  | } | ||
|  | exports.resolvePath = resolvePath; | ||
|  | function getSupportedEvents() { | ||
|  |     return [constants_1.Events.Push, constants_1.Events.PullRequest]; | ||
|  | } | ||
|  | exports.getSupportedEvents = getSupportedEvents; | ||
|  | // Currently the cache token is only authorized for push and pull_request events
 | ||
|  | // All other events will fail when reading and saving the cache
 | ||
|  | // See GitHub Context https://help.github.com/actions/automating-your-workflow-with-github-actions/contexts-and-expression-syntax-for-github-actions#github-context
 | ||
|  | function isValidEvent() { | ||
|  |     const githubEvent = process.env[constants_1.Events.Key] || ""; | ||
|  |     return getSupportedEvents().includes(githubEvent); | ||
|  | } | ||
|  | exports.isValidEvent = isValidEvent; | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 470: | ||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
|  |     }); | ||
|  | }; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const command_1 = __webpack_require__(431); | ||
|  | const os = __webpack_require__(87); | ||
|  | const path = __webpack_require__(622); | ||
|  | /** | ||
|  |  * The code to exit an action | ||
|  |  */ | ||
|  | var ExitCode; | ||
|  | (function (ExitCode) { | ||
|  |     /** | ||
|  |      * A code indicating that the action was successful | ||
|  |      */ | ||
|  |     ExitCode[ExitCode["Success"] = 0] = "Success"; | ||
|  |     /** | ||
|  |      * A code indicating that the action was a failure | ||
|  |      */ | ||
|  |     ExitCode[ExitCode["Failure"] = 1] = "Failure"; | ||
|  | })(ExitCode = exports.ExitCode || (exports.ExitCode = {})); | ||
|  | //-----------------------------------------------------------------------
 | ||
|  | // Variables
 | ||
|  | //-----------------------------------------------------------------------
 | ||
|  | /** | ||
|  |  * Sets env variable for this action and future actions in the job | ||
|  |  * @param name the name of the variable to set | ||
|  |  * @param val the value of the variable | ||
|  |  */ | ||
|  | function exportVariable(name, val) { | ||
|  |     process.env[name] = val; | ||
|  |     command_1.issueCommand('set-env', { name }, val); | ||
|  | } | ||
|  | exports.exportVariable = exportVariable; | ||
|  | /** | ||
|  |  * Registers a secret which will get masked from logs | ||
|  |  * @param secret value of the secret | ||
|  |  */ | ||
|  | function setSecret(secret) { | ||
|  |     command_1.issueCommand('add-mask', {}, secret); | ||
|  | } | ||
|  | exports.setSecret = setSecret; | ||
|  | /** | ||
|  |  * Prepends inputPath to the PATH (for this action and future actions) | ||
|  |  * @param inputPath | ||
|  |  */ | ||
|  | function addPath(inputPath) { | ||
|  |     command_1.issueCommand('add-path', {}, inputPath); | ||
|  |     process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; | ||
|  | } | ||
|  | exports.addPath = addPath; | ||
|  | /** | ||
|  |  * Gets the value of an input.  The value is also trimmed. | ||
|  |  * | ||
|  |  * @param     name     name of the input to get | ||
|  |  * @param     options  optional. See InputOptions. | ||
|  |  * @returns   string | ||
|  |  */ | ||
|  | function getInput(name, options) { | ||
|  |     const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || ''; | ||
|  |     if (options && options.required && !val) { | ||
|  |         throw new Error(`Input required and not supplied: ${name}`); | ||
|  |     } | ||
|  |     return val.trim(); | ||
|  | } | ||
|  | exports.getInput = getInput; | ||
|  | /** | ||
|  |  * Sets the value of an output. | ||
|  |  * | ||
|  |  * @param     name     name of the output to set | ||
|  |  * @param     value    value to store | ||
|  |  */ | ||
|  | function setOutput(name, value) { | ||
|  |     command_1.issueCommand('set-output', { name }, value); | ||
|  | } | ||
|  | exports.setOutput = setOutput; | ||
|  | //-----------------------------------------------------------------------
 | ||
|  | // 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
 | ||
|  | //-----------------------------------------------------------------------
 | ||
|  | /** | ||
|  |  * 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 | ||
|  |  */ | ||
|  | function error(message) { | ||
|  |     command_1.issue('error', message); | ||
|  | } | ||
|  | exports.error = error; | ||
|  | /** | ||
|  |  * Adds an warning issue | ||
|  |  * @param message warning issue message | ||
|  |  */ | ||
|  | function warning(message) { | ||
|  |     command_1.issue('warning', message); | ||
|  | } | ||
|  | exports.warning = warning; | ||
|  | /** | ||
|  |  * Writes info to log with console.log. | ||
|  |  * @param message info message | ||
|  |  */ | ||
|  | function info(message) { | ||
|  |     process.stdout.write(message + os.EOL); | ||
|  | } | ||
|  | exports.info = info; | ||
|  | /** | ||
|  |  * Begin an output group. | ||
|  |  * | ||
|  |  * Output until the next `groupEnd` will be foldable in this group | ||
|  |  * | ||
|  |  * @param name The name of the output group | ||
|  |  */ | ||
|  | function startGroup(name) { | ||
|  |     command_1.issue('group', name); | ||
|  | } | ||
|  | exports.startGroup = startGroup; | ||
|  | /** | ||
|  |  * End an output group. | ||
|  |  */ | ||
|  | function endGroup() { | ||
|  |     command_1.issue('endgroup'); | ||
|  | } | ||
|  | exports.endGroup = endGroup; | ||
|  | /** | ||
|  |  * Wrap an asynchronous function call in a group. | ||
|  |  * | ||
|  |  * Returns the same type as the function itself. | ||
|  |  * | ||
|  |  * @param name The name of the group | ||
|  |  * @param fn The function to wrap in the group | ||
|  |  */ | ||
|  | function group(name, fn) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         startGroup(name); | ||
|  |         let result; | ||
|  |         try { | ||
|  |             result = yield fn(); | ||
|  |         } | ||
|  |         finally { | ||
|  |             endGroup(); | ||
|  |         } | ||
|  |         return result; | ||
|  |     }); | ||
|  | } | ||
|  | exports.group = group; | ||
|  | //-----------------------------------------------------------------------
 | ||
|  | // Wrapper action state
 | ||
|  | //-----------------------------------------------------------------------
 | ||
|  | /** | ||
|  |  * Saves state for current action, the state can only be retrieved by this action's post job execution. | ||
|  |  * | ||
|  |  * @param     name     name of the state to store | ||
|  |  * @param     value    value to store | ||
|  |  */ | ||
|  | function saveState(name, value) { | ||
|  |     command_1.issueCommand('save-state', { name }, value); | ||
|  | } | ||
|  | exports.saveState = saveState; | ||
|  | /** | ||
|  |  * Gets the value of an state set by this action's main execution. | ||
|  |  * | ||
|  |  * @param     name     name of the state to get | ||
|  |  * @returns   string | ||
|  |  */ | ||
|  | function getState(name) { | ||
|  |     return process.env[`STATE_${name}`] || ''; | ||
|  | } | ||
|  | exports.getState = getState; | ||
|  | //# sourceMappingURL=core.js.map
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 539: | ||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const url = __webpack_require__(835); | ||
|  | const http = __webpack_require__(605); | ||
|  | const https = __webpack_require__(211); | ||
|  | const pm = __webpack_require__(950); | ||
|  | let tunnel; | ||
|  | 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["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) { | ||
|  |     let proxyUrl = pm.getProxyUrl(url.parse(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 HttpClientResponse { | ||
|  |     constructor(message) { | ||
|  |         this.message = message; | ||
|  |     } | ||
|  |     readBody() { | ||
|  |         return new Promise(async (resolve, reject) => { | ||
|  |             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) { | ||
|  |     let parsedUrl = url.parse(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 this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); | ||
|  |     } | ||
|  |     get(requestUrl, additionalHeaders) { | ||
|  |         return this.request('GET', requestUrl, null, additionalHeaders || {}); | ||
|  |     } | ||
|  |     del(requestUrl, additionalHeaders) { | ||
|  |         return this.request('DELETE', requestUrl, null, additionalHeaders || {}); | ||
|  |     } | ||
|  |     post(requestUrl, data, additionalHeaders) { | ||
|  |         return this.request('POST', requestUrl, data, additionalHeaders || {}); | ||
|  |     } | ||
|  |     patch(requestUrl, data, additionalHeaders) { | ||
|  |         return this.request('PATCH', requestUrl, data, additionalHeaders || {}); | ||
|  |     } | ||
|  |     put(requestUrl, data, additionalHeaders) { | ||
|  |         return this.request('PUT', requestUrl, data, additionalHeaders || {}); | ||
|  |     } | ||
|  |     head(requestUrl, additionalHeaders) { | ||
|  |         return this.request('HEAD', requestUrl, null, additionalHeaders || {}); | ||
|  |     } | ||
|  |     sendStream(verb, requestUrl, stream, additionalHeaders) { | ||
|  |         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 | ||
|  |      */ | ||
|  |     async getJson(requestUrl, additionalHeaders = {}) { | ||
|  |         additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); | ||
|  |         let res = await this.get(requestUrl, additionalHeaders); | ||
|  |         return this._processResponse(res, this.requestOptions); | ||
|  |     } | ||
|  |     async postJson(requestUrl, obj, additionalHeaders = {}) { | ||
|  |         let 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); | ||
|  |         let res = await this.post(requestUrl, data, additionalHeaders); | ||
|  |         return this._processResponse(res, this.requestOptions); | ||
|  |     } | ||
|  |     async putJson(requestUrl, obj, additionalHeaders = {}) { | ||
|  |         let 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); | ||
|  |         let res = await this.put(requestUrl, data, additionalHeaders); | ||
|  |         return this._processResponse(res, this.requestOptions); | ||
|  |     } | ||
|  |     async patchJson(requestUrl, obj, additionalHeaders = {}) { | ||
|  |         let 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); | ||
|  |         let res = await 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 | ||
|  |      */ | ||
|  |     async request(verb, requestUrl, data, headers) { | ||
|  |         if (this._disposed) { | ||
|  |             throw new Error("Client has already been disposed."); | ||
|  |         } | ||
|  |         let parsedUrl = url.parse(requestUrl); | ||
|  |         let info = this._prepareRequest(verb, parsedUrl, headers); | ||
|  |         // Only perform retries on reads since writes may not be idempotent.
 | ||
|  |         let maxTries = (this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1) ? this._maxRetries + 1 : 1; | ||
|  |         let numTries = 0; | ||
|  |         let response; | ||
|  |         while (numTries < maxTries) { | ||
|  |             response = await this.requestRaw(info, data); | ||
|  |             // Check if it's an authentication challenge
 | ||
|  |             if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) { | ||
|  |                 let authenticationHandler; | ||
|  |                 for (let i = 0; i < this.handlers.length; i++) { | ||
|  |                     if (this.handlers[i].canHandleAuthentication(response)) { | ||
|  |                         authenticationHandler = this.handlers[i]; | ||
|  |                         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 (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 | ||
|  |                 && this._allowRedirects | ||
|  |                 && redirectsRemaining > 0) { | ||
|  |                 const redirectUrl = response.message.headers["location"]; | ||
|  |                 if (!redirectUrl) { | ||
|  |                     // if there's no location to redirect to, we won't
 | ||
|  |                     break; | ||
|  |                 } | ||
|  |                 let parsedRedirectUrl = url.parse(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.
 | ||
|  |                 await response.readBody(); | ||
|  |                 // let's make the request with the new redirectUrl
 | ||
|  |                 info = this._prepareRequest(verb, parsedRedirectUrl, headers); | ||
|  |                 response = await this.requestRaw(info, data); | ||
|  |                 redirectsRemaining--; | ||
|  |             } | ||
|  |             if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { | ||
|  |                 // If not a retry code, return immediately instead of retrying
 | ||
|  |                 return response; | ||
|  |             } | ||
|  |             numTries += 1; | ||
|  |             if (numTries < maxTries) { | ||
|  |                 await response.readBody(); | ||
|  |                 await this._performExponentialBackoff(numTries); | ||
|  |             } | ||
|  |         } | ||
|  |         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 new Promise((resolve, reject) => { | ||
|  |             let callbackForResult = function (err, res) { | ||
|  |                 if (err) { | ||
|  |                     reject(err); | ||
|  |                 } | ||
|  |                 resolve(res); | ||
|  |             }; | ||
|  |             this.requestRawWithCallback(info, data, callbackForResult); | ||
|  |         }); | ||
|  |     } | ||
|  |     /** | ||
|  |      * Raw request with callback. | ||
|  |      * @param info | ||
|  |      * @param data | ||
|  |      * @param onResult | ||
|  |      */ | ||
|  |     requestRawWithCallback(info, data, onResult) { | ||
|  |         let socket; | ||
|  |         if (typeof (data) === 'string') { | ||
|  |             info.options.headers["Content-Length"] = Buffer.byteLength(data, 'utf8'); | ||
|  |         } | ||
|  |         let callbackCalled = false; | ||
|  |         let handleResult = (err, res) => { | ||
|  |             if (!callbackCalled) { | ||
|  |                 callbackCalled = true; | ||
|  |                 onResult(err, res); | ||
|  |             } | ||
|  |         }; | ||
|  |         let req = info.httpModule.request(info.options, (msg) => { | ||
|  |             let res = new HttpClientResponse(msg); | ||
|  |             handleResult(null, res); | ||
|  |         }); | ||
|  |         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), null); | ||
|  |         }); | ||
|  |         req.on('error', function (err) { | ||
|  |             // err has statusCode property
 | ||
|  |             // res should have headers
 | ||
|  |             handleResult(err, null); | ||
|  |         }); | ||
|  |         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) { | ||
|  |         let parsedUrl = url.parse(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) { | ||
|  |             this.handlers.forEach((handler) => { | ||
|  |                 handler.prepareRequest(info.options); | ||
|  |             }); | ||
|  |         } | ||
|  |         return info; | ||
|  |     } | ||
|  |     _mergeHeaders(headers) { | ||
|  |         const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {}); | ||
|  |         if (this.requestOptions && this.requestOptions.headers) { | ||
|  |             return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); | ||
|  |         } | ||
|  |         return lowercaseKeys(headers || {}); | ||
|  |     } | ||
|  |     _getExistingOrDefaultHeader(additionalHeaders, header, _default) { | ||
|  |         const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {}); | ||
|  |         let clientHeader; | ||
|  |         if (this.requestOptions && this.requestOptions.headers) { | ||
|  |             clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; | ||
|  |         } | ||
|  |         return additionalHeaders[header] || clientHeader || _default; | ||
|  |     } | ||
|  |     _getAgent(parsedUrl) { | ||
|  |         let agent; | ||
|  |         let proxyUrl = pm.getProxyUrl(parsedUrl); | ||
|  |         let 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; | ||
|  |         } | ||
|  |         if (useProxy) { | ||
|  |             // If using proxy, need tunnel
 | ||
|  |             if (!tunnel) { | ||
|  |                 tunnel = __webpack_require__(413); | ||
|  |             } | ||
|  |             const agentOptions = { | ||
|  |                 maxSockets: maxSockets, | ||
|  |                 keepAlive: this._keepAlive, | ||
|  |                 proxy: { | ||
|  |                     proxyAuth: proxyUrl.auth, | ||
|  |                     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: 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) { | ||
|  |         retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); | ||
|  |         const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); | ||
|  |         return new Promise(resolve => setTimeout(() => resolve(), ms)); | ||
|  |     } | ||
|  |     static dateTimeDeserializer(key, value) { | ||
|  |         if (typeof value === 'string') { | ||
|  |             let a = new Date(value); | ||
|  |             if (!isNaN(a.valueOf())) { | ||
|  |                 return a; | ||
|  |             } | ||
|  |         } | ||
|  |         return value; | ||
|  |     } | ||
|  |     async _processResponse(res, options) { | ||
|  |         return new Promise(async (resolve, reject) => { | ||
|  |             const statusCode = res.message.statusCode; | ||
|  |             const response = { | ||
|  |                 statusCode: statusCode, | ||
|  |                 result: null, | ||
|  |                 headers: {} | ||
|  |             }; | ||
|  |             // not found leads to null obj returned
 | ||
|  |             if (statusCode == HttpCodes.NotFound) { | ||
|  |                 resolve(response); | ||
|  |             } | ||
|  |             let obj; | ||
|  |             let contents; | ||
|  |             // get the result from the body
 | ||
|  |             try { | ||
|  |                 contents = await res.readBody(); | ||
|  |                 if (contents && contents.length > 0) { | ||
|  |                     if (options && options.deserializeDates) { | ||
|  |                         obj = JSON.parse(contents, HttpClient.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 + ")"; | ||
|  |                 } | ||
|  |                 let err = new Error(msg); | ||
|  |                 // attach statusCode and body obj (if available) to the error object
 | ||
|  |                 err['statusCode'] = statusCode; | ||
|  |                 if (response.result) { | ||
|  |                     err['result'] = response.result; | ||
|  |                 } | ||
|  |                 reject(err); | ||
|  |             } | ||
|  |             else { | ||
|  |                 resolve(response); | ||
|  |             } | ||
|  |         }); | ||
|  |     } | ||
|  | } | ||
|  | exports.HttpClient = HttpClient; | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 605: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("http"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 614: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("events"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 622: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("path"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 631: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("net"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 669: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("util"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 672: | ||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
|  |     }); | ||
|  | }; | ||
|  | var _a; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const assert_1 = __webpack_require__(357); | ||
|  | const fs = __webpack_require__(747); | ||
|  | const path = __webpack_require__(622); | ||
|  | _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; | ||
|  | /** | ||
|  |  * Recursively create a directory at `fsPath`. | ||
|  |  * | ||
|  |  * This implementation is optimistic, meaning it attempts to create the full | ||
|  |  * path first, and backs up the path stack from there. | ||
|  |  * | ||
|  |  * @param fsPath The path to create | ||
|  |  * @param maxDepth The maximum recursion depth | ||
|  |  * @param depth The current recursion depth | ||
|  |  */ | ||
|  | function mkdirP(fsPath, maxDepth = 1000, depth = 1) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         assert_1.ok(fsPath, 'a path argument must be provided'); | ||
|  |         fsPath = path.resolve(fsPath); | ||
|  |         if (depth >= maxDepth) | ||
|  |             return exports.mkdir(fsPath); | ||
|  |         try { | ||
|  |             yield exports.mkdir(fsPath); | ||
|  |             return; | ||
|  |         } | ||
|  |         catch (err) { | ||
|  |             switch (err.code) { | ||
|  |                 case 'ENOENT': { | ||
|  |                     yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1); | ||
|  |                     yield exports.mkdir(fsPath); | ||
|  |                     return; | ||
|  |                 } | ||
|  |                 default: { | ||
|  |                     let stats; | ||
|  |                     try { | ||
|  |                         stats = yield exports.stat(fsPath); | ||
|  |                     } | ||
|  |                     catch (err2) { | ||
|  |                         throw err; | ||
|  |                     } | ||
|  |                     if (!stats.isDirectory()) | ||
|  |                         throw err; | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     }); | ||
|  | } | ||
|  | exports.mkdirP = mkdirP; | ||
|  | /** | ||
|  |  * 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())); | ||
|  | } | ||
|  | //# sourceMappingURL=io-util.js.map
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 681: | ||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
|  |     }); | ||
|  | }; | ||
|  | var __importStar = (this && this.__importStar) || function (mod) { | ||
|  |     if (mod && mod.__esModule) return mod; | ||
|  |     var result = {}; | ||
|  |     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||
|  |     result["default"] = mod; | ||
|  |     return result; | ||
|  | }; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const core = __importStar(__webpack_require__(470)); | ||
|  | const path = __importStar(__webpack_require__(622)); | ||
|  | const cacheHttpClient = __importStar(__webpack_require__(154)); | ||
|  | const constants_1 = __webpack_require__(694); | ||
|  | const tar_1 = __webpack_require__(943); | ||
|  | const utils = __importStar(__webpack_require__(443)); | ||
|  | function run() { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         try { | ||
|  |             if (!utils.isValidEvent()) { | ||
|  |                 utils.logWarning(`Event Validation Error: The event type ${process.env[constants_1.Events.Key]} is not supported. Only ${utils | ||
|  |                     .getSupportedEvents() | ||
|  |                     .join(", ")} events are supported at this time.`);
 | ||
|  |                 return; | ||
|  |             } | ||
|  |             const state = utils.getCacheState(); | ||
|  |             // Inputs are re-evaluted before the post action, so we want the original key used for restore
 | ||
|  |             const primaryKey = core.getState(constants_1.State.CacheKey); | ||
|  |             if (!primaryKey) { | ||
|  |                 utils.logWarning(`Error retrieving key from state.`); | ||
|  |                 return; | ||
|  |             } | ||
|  |             if (utils.isExactKeyMatch(primaryKey, state)) { | ||
|  |                 core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`); | ||
|  |                 return; | ||
|  |             } | ||
|  |             core.debug("Reserving Cache"); | ||
|  |             const cacheId = yield cacheHttpClient.reserveCache(primaryKey); | ||
|  |             if (cacheId == -1) { | ||
|  |                 core.info(`Unable to reserve cache with key ${primaryKey}, another job may be creating this cache.`); | ||
|  |                 return; | ||
|  |             } | ||
|  |             core.debug(`Cache ID: ${cacheId}`); | ||
|  |             const cachePath = utils.resolvePath(core.getInput(constants_1.Inputs.Path, { required: true })); | ||
|  |             core.debug(`Cache Path: ${cachePath}`); | ||
|  |             const archivePath = path.join(yield utils.createTempDirectory(), "cache.tgz"); | ||
|  |             core.debug(`Archive Path: ${archivePath}`); | ||
|  |             yield tar_1.createTar(archivePath, cachePath); | ||
|  |             const fileSizeLimit = 5 * 1024 * 1024 * 1024; // 5GB per repo limit
 | ||
|  |             const archiveFileSize = utils.getArchiveFileSize(archivePath); | ||
|  |             core.debug(`File Size: ${archiveFileSize}`); | ||
|  |             if (archiveFileSize > fileSizeLimit) { | ||
|  |                 utils.logWarning(`Cache size of ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B) is over the 5GB limit, not saving cache.`); | ||
|  |                 return; | ||
|  |             } | ||
|  |             core.debug(`Saving Cache (ID: ${cacheId})`); | ||
|  |             yield cacheHttpClient.saveCache(cacheId, archivePath); | ||
|  |         } | ||
|  |         catch (error) { | ||
|  |             utils.logWarning(error.message); | ||
|  |         } | ||
|  |     }); | ||
|  | } | ||
|  | run(); | ||
|  | exports.default = run; | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 694: | ||
|  | /***/ (function(__unusedmodule, exports) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | var Inputs; | ||
|  | (function (Inputs) { | ||
|  |     Inputs["Key"] = "key"; | ||
|  |     Inputs["Path"] = "path"; | ||
|  |     Inputs["RestoreKeys"] = "restore-keys"; | ||
|  | })(Inputs = exports.Inputs || (exports.Inputs = {})); | ||
|  | var Outputs; | ||
|  | (function (Outputs) { | ||
|  |     Outputs["CacheHit"] = "cache-hit"; | ||
|  | })(Outputs = exports.Outputs || (exports.Outputs = {})); | ||
|  | var State; | ||
|  | (function (State) { | ||
|  |     State["CacheKey"] = "CACHE_KEY"; | ||
|  |     State["CacheResult"] = "CACHE_RESULT"; | ||
|  | })(State = exports.State || (exports.State = {})); | ||
|  | var Events; | ||
|  | (function (Events) { | ||
|  |     Events["Key"] = "GITHUB_EVENT_NAME"; | ||
|  |     Events["Push"] = "push"; | ||
|  |     Events["PullRequest"] = "pull_request"; | ||
|  | })(Events = exports.Events || (exports.Events = {})); | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 722: | ||
|  | /***/ (function(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; | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 747: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("fs"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 826: | ||
|  | /***/ (function(module, __unusedexports, __webpack_require__) { | ||
|  | 
 | ||
|  | var rng = __webpack_require__(139); | ||
|  | var bytesToUuid = __webpack_require__(722); | ||
|  | 
 | ||
|  | 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; | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 835: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("url"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 943: | ||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
|  |     }); | ||
|  | }; | ||
|  | var __importStar = (this && this.__importStar) || function (mod) { | ||
|  |     if (mod && mod.__esModule) return mod; | ||
|  |     var result = {}; | ||
|  |     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||
|  |     result["default"] = mod; | ||
|  |     return result; | ||
|  | }; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const exec_1 = __webpack_require__(986); | ||
|  | const io = __importStar(__webpack_require__(1)); | ||
|  | const fs_1 = __webpack_require__(747); | ||
|  | function getTarPath() { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         // Explicitly use BSD Tar on Windows
 | ||
|  |         const IS_WINDOWS = process.platform === "win32"; | ||
|  |         if (IS_WINDOWS) { | ||
|  |             const systemTar = `${process.env["windir"]}\\System32\\tar.exe`; | ||
|  |             if (fs_1.existsSync(systemTar)) { | ||
|  |                 return systemTar; | ||
|  |             } | ||
|  |         } | ||
|  |         return yield io.which("tar", true); | ||
|  |     }); | ||
|  | } | ||
|  | function execTar(args) { | ||
|  |     var _a, _b; | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         try { | ||
|  |             yield exec_1.exec(`"${yield getTarPath()}"`, args); | ||
|  |         } | ||
|  |         catch (error) { | ||
|  |             const IS_WINDOWS = process.platform === "win32"; | ||
|  |             if (IS_WINDOWS) { | ||
|  |                 throw new Error(`Tar failed with error: ${(_a = error) === null || _a === void 0 ? void 0 : _a.message}. Ensure BSD tar is installed and on the PATH.`); | ||
|  |             } | ||
|  |             throw new Error(`Tar failed with error: ${(_b = error) === null || _b === void 0 ? void 0 : _b.message}`); | ||
|  |         } | ||
|  |     }); | ||
|  | } | ||
|  | function extractTar(archivePath, targetDirectory) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         // Create directory to extract tar into
 | ||
|  |         yield io.mkdirP(targetDirectory); | ||
|  |         const args = ["-xz", "-f", archivePath, "-C", targetDirectory]; | ||
|  |         yield execTar(args); | ||
|  |     }); | ||
|  | } | ||
|  | exports.extractTar = extractTar; | ||
|  | function createTar(archivePath, sourceDirectory) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         const args = ["-cz", "-f", archivePath, "-C", sourceDirectory, "."]; | ||
|  |         yield execTar(args); | ||
|  |     }); | ||
|  | } | ||
|  | exports.createTar = createTar; | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 950: | ||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const url = __webpack_require__(835); | ||
|  | function getProxyUrl(reqUrl) { | ||
|  |     let usingSsl = reqUrl.protocol === 'https:'; | ||
|  |     let proxyUrl; | ||
|  |     if (checkBypass(reqUrl)) { | ||
|  |         return proxyUrl; | ||
|  |     } | ||
|  |     let proxyVar; | ||
|  |     if (usingSsl) { | ||
|  |         proxyVar = process.env["https_proxy"] || | ||
|  |             process.env["HTTPS_PROXY"]; | ||
|  |     } | ||
|  |     else { | ||
|  |         proxyVar = process.env["http_proxy"] || | ||
|  |             process.env["HTTP_PROXY"]; | ||
|  |     } | ||
|  |     if (proxyVar) { | ||
|  |         proxyUrl = url.parse(proxyVar); | ||
|  |     } | ||
|  |     return proxyUrl; | ||
|  | } | ||
|  | exports.getProxyUrl = getProxyUrl; | ||
|  | function checkBypass(reqUrl) { | ||
|  |     if (!reqUrl.hostname) { | ||
|  |         return false; | ||
|  |     } | ||
|  |     let 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
 | ||
|  |     let upperReqHosts = [reqUrl.hostname.toUpperCase()]; | ||
|  |     if (typeof reqPort === 'number') { | ||
|  |         upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); | ||
|  |     } | ||
|  |     // Compare request host against noproxy
 | ||
|  |     for (let 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; | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 986: | ||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
|  |     }); | ||
|  | }; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const tr = __webpack_require__(9); | ||
|  | /** | ||
|  |  * 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<number>    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; | ||
|  | //# sourceMappingURL=exec.js.map
 | ||
|  | 
 | ||
|  | /***/ }) | ||
|  | 
 | ||
|  | /******/ }); |