output installed version number after setup (#51)
* output installed version number after setup * set output for the installed version
This commit is contained in:
		
							parent
							
								
									ebe4d7eb5f
								
							
						
					
					
						commit
						f8fb48e9f7
					
				| @ -9,6 +9,9 @@ inputs: | |||||||
|   architecture: |   architecture: | ||||||
|     description: 'The target architecture (x86, x64) of the Python interpreter.' |     description: 'The target architecture (x86, x64) of the Python interpreter.' | ||||||
|     default: 'x64' |     default: 'x64' | ||||||
|  | outputs: | ||||||
|  |   python-version: | ||||||
|  |     description: "The installed python version. Useful when given a version range as input." | ||||||
| runs: | runs: | ||||||
|   using: 'node12' |   using: 'node12' | ||||||
|   main: 'dist/index.js' |   main: 'dist/index.js' | ||||||
|  | |||||||
							
								
								
									
										5314
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5314
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @ -34,7 +34,7 @@ module.exports = | |||||||
| /******/ 	// the startup function
 | /******/ 	// the startup function
 | ||||||
| /******/ 	function startup() { | /******/ 	function startup() { | ||||||
| /******/ 		// Load entry module and return exports
 | /******/ 		// Load entry module and return exports
 | ||||||
| /******/ 		return __webpack_require__(429); | /******/ 		return __webpack_require__(645); | ||||||
| /******/ 	}; | /******/ 	}; | ||||||
| /******/ | /******/ | ||||||
| /******/ 	// run startup
 | /******/ 	// run startup
 | ||||||
| @ -43,6 +43,882 @@ module.exports = | |||||||
| /************************************************************************/ | /************************************************************************/ | ||||||
| /******/ ({ | /******/ ({ | ||||||
| 
 | 
 | ||||||
|  | /***/ 1: | ||||||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|  |     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) : new P(function (resolve) { resolve(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 task lib perspective,
 | ||||||
|  |             // it feels like we should not do this. Checking the current directory seems like more of a use
 | ||||||
|  |             // case of a shell, and the which() function exposed by the task lib should strive for consistency
 | ||||||
|  |             // across platforms.
 | ||||||
|  |             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) { | ||||||
|  |     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) : new P(function (resolve) { resolve(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 preceed a quote,
 | ||||||
|  |         //    e.g.  hello \world    => "hello \world"
 | ||||||
|  |         //          hello\"world    => "hello\\""world"
 | ||||||
|  |         //          hello\\"world   => "hello\\\\""world"
 | ||||||
|  |         //          hello world\    => "hello world\\"
 | ||||||
|  |         //
 | ||||||
|  |         //    technically this is not required for a cmd.exe command line, or the batch argument parser.
 | ||||||
|  |         //    the reasons for including this as a .cmd quoting rule are:
 | ||||||
|  |         //
 | ||||||
|  |         //    a) this is optimized for the scenario where the argument is passed from the .cmd file to an
 | ||||||
|  |         //       external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule.
 | ||||||
|  |         //
 | ||||||
|  |         //    b) it's what we've been doing previously (by deferring to node default behavior) and we
 | ||||||
|  |         //       haven't heard any complaints about that aspect.
 | ||||||
|  |         //
 | ||||||
|  |         // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be
 | ||||||
|  |         // escaped when used on the command line directly - even though within a .cmd file % can be escaped
 | ||||||
|  |         // by using %%.
 | ||||||
|  |         //
 | ||||||
|  |         // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts
 | ||||||
|  |         // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing.
 | ||||||
|  |         //
 | ||||||
|  |         // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would
 | ||||||
|  |         // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the
 | ||||||
|  |         // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args
 | ||||||
|  |         // to an external program.
 | ||||||
|  |         //
 | ||||||
|  |         // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file.
 | ||||||
|  |         // % can be escaped within a .cmd file.
 | ||||||
|  |         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: | /***/ 16: | ||||||
| /***/ (function(module) { | /***/ (function(module) { | ||||||
| 
 | 
 | ||||||
| @ -62,6 +938,276 @@ module.exports = require("os"); | |||||||
| 
 | 
 | ||||||
| module.exports = require("child_process"); | 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; | ||||||
|  |   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; | ||||||
|  |   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 | ||||||
|  |   }); | ||||||
|  |   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) { | ||||||
|  |       assert.equal(head.length, 0); | ||||||
|  |       debug('tunneling connection has established'); | ||||||
|  |       self.sockets[self.sockets.indexOf(placeholder)] = socket; | ||||||
|  |       cb(socket); | ||||||
|  |     } else { | ||||||
|  |       debug('tunneling socket could not be established, statusCode=%d', | ||||||
|  |             res.statusCode); | ||||||
|  |       var error = new Error('tunneling socket could not be established, ' + | ||||||
|  |                             'statusCode=' + res.statusCode); | ||||||
|  |       error.code = 'ECONNRESET'; | ||||||
|  |       options.request.emit('error', error); | ||||||
|  |       self.removeSocket(placeholder); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   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
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 211: | /***/ 211: | ||||||
| @ -71,1453 +1217,7 @@ module.exports = require("https"); | |||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 357: | /***/ 280: | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = require("assert"); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 417: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = require("crypto"); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 429: |  | ||||||
| /***/ (function(module, __unusedexports, __webpack_require__) { |  | ||||||
| 
 |  | ||||||
| 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__(264); |  | ||||||
| /******/ 	}; |  | ||||||
| /******/ |  | ||||||
| /******/ 	// run startup
 |  | ||||||
| /******/ 	return startup(); |  | ||||||
| /******/ }) |  | ||||||
| /************************************************************************/ |  | ||||||
| /******/ ({ |  | ||||||
| 
 |  | ||||||
| /***/ 16: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __webpack_require__(16); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 87: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __webpack_require__(87); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 129: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __webpack_require__(129); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 211: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __webpack_require__(211); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 264: |  | ||||||
| /***/ (function(module, __unusedexports, __nested_webpack_require_1833__) { |  | ||||||
| 
 |  | ||||||
| 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__(429); |  | ||||||
| /******/ 	}; |  | ||||||
| /******/ |  | ||||||
| /******/ 	// run startup
 |  | ||||||
| /******/ 	return startup(); |  | ||||||
| /******/ }) |  | ||||||
| /************************************************************************/ |  | ||||||
| /******/ ({ |  | ||||||
| 
 |  | ||||||
| /***/ 16: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1833__(16); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 87: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1833__(87); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 129: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1833__(129); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 211: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1833__(211); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 357: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1833__(357); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 417: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1833__(417); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 429: |  | ||||||
| /***/ (function(module, __unusedexports, __nested_webpack_require_2019__) { |  | ||||||
| 
 |  | ||||||
| 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__(264); |  | ||||||
| /******/ 	}; |  | ||||||
| /******/ |  | ||||||
| /******/ 	// run startup
 |  | ||||||
| /******/ 	return startup(); |  | ||||||
| /******/ }) |  | ||||||
| /************************************************************************/ |  | ||||||
| /******/ ({ |  | ||||||
| 
 |  | ||||||
| /***/ 16: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_2019__(16); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 87: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_2019__(87); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 129: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_2019__(129); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 211: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_2019__(211); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 264: |  | ||||||
| /***/ (function(module, __unusedexports, __nested_webpack_require_1759__) { |  | ||||||
| 
 |  | ||||||
| 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__(264); |  | ||||||
| /******/ 	}; |  | ||||||
| /******/ |  | ||||||
| /******/ 	// run startup
 |  | ||||||
| /******/ 	return startup(); |  | ||||||
| /******/ }) |  | ||||||
| /************************************************************************/ |  | ||||||
| /******/ ({ |  | ||||||
| 
 |  | ||||||
| /***/ 16: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(16); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 87: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(87); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 129: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(129); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 211: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(211); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 264: |  | ||||||
| /***/ (function(module, __unusedexports, __nested_webpack_require_1759__) { |  | ||||||
| 
 |  | ||||||
| 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__(264); |  | ||||||
| /******/ 	}; |  | ||||||
| /******/ |  | ||||||
| /******/ 	// run startup
 |  | ||||||
| /******/ 	return startup(); |  | ||||||
| /******/ }) |  | ||||||
| /************************************************************************/ |  | ||||||
| /******/ ({ |  | ||||||
| 
 |  | ||||||
| /***/ 16: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(16); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 87: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(87); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 129: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(129); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 211: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(211); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 264: |  | ||||||
| /***/ (function(module, __unusedexports, __nested_webpack_require_1759__) { |  | ||||||
| 
 |  | ||||||
| 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__(264); |  | ||||||
| /******/ 	}; |  | ||||||
| /******/ |  | ||||||
| /******/ 	// run startup
 |  | ||||||
| /******/ 	return startup(); |  | ||||||
| /******/ }) |  | ||||||
| /************************************************************************/ |  | ||||||
| /******/ ({ |  | ||||||
| 
 |  | ||||||
| /***/ 16: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(16); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 87: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(87); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 129: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(129); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 211: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(211); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 264: |  | ||||||
| /***/ (function(module, __unusedexports, __nested_webpack_require_1759__) { |  | ||||||
| 
 |  | ||||||
| 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__(264); |  | ||||||
| /******/ 	}; |  | ||||||
| /******/ |  | ||||||
| /******/ 	// run startup
 |  | ||||||
| /******/ 	return startup(); |  | ||||||
| /******/ }) |  | ||||||
| /************************************************************************/ |  | ||||||
| /******/ ({ |  | ||||||
| 
 |  | ||||||
| /***/ 16: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(16); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 87: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(87); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 129: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(129); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 211: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(211); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 264: |  | ||||||
| /***/ (function(module, __unusedexports, __nested_webpack_require_1759__) { |  | ||||||
| 
 |  | ||||||
| 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__(264); |  | ||||||
| /******/ 	}; |  | ||||||
| /******/ |  | ||||||
| /******/ 	// run startup
 |  | ||||||
| /******/ 	return startup(); |  | ||||||
| /******/ }) |  | ||||||
| /************************************************************************/ |  | ||||||
| /******/ ({ |  | ||||||
| 
 |  | ||||||
| /***/ 16: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(16); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 87: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(87); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 129: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(129); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 211: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(211); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 264: |  | ||||||
| /***/ (function(module, __unusedexports, __nested_webpack_require_1759__) { |  | ||||||
| 
 |  | ||||||
| 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__(492); |  | ||||||
| /******/ 	}; |  | ||||||
| /******/ |  | ||||||
| /******/ 	// run startup
 |  | ||||||
| /******/ 	return startup(); |  | ||||||
| /******/ }) |  | ||||||
| /************************************************************************/ |  | ||||||
| /******/ ({ |  | ||||||
| 
 |  | ||||||
| /***/ 16: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(16); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 87: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(87); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 113: |  | ||||||
| /***/ (function(__unusedmodule, exports, __nested_webpack_require_1581__) { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| // Copyright (c) Microsoft. All rights reserved.
 |  | ||||||
| // Licensed under the MIT license. See LICENSE file in the project root for full license information.
 |  | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { |  | ||||||
|     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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } |  | ||||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); |  | ||||||
|     }); |  | ||||||
| }; |  | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); |  | ||||||
| const url = __nested_webpack_require_1581__(835); |  | ||||||
| const http = __nested_webpack_require_1581__(605); |  | ||||||
| const https = __nested_webpack_require_1581__(211); |  | ||||||
| let fs; |  | ||||||
| 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 = {})); |  | ||||||
| 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((resolve, reject) => __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             let output = ''; |  | ||||||
|             this.message.on('data', (chunk) => { |  | ||||||
|                 output += chunk; |  | ||||||
|             }); |  | ||||||
|             this.message.on('end', () => { |  | ||||||
|                 resolve(output); |  | ||||||
|             }); |  | ||||||
|         })); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| exports.HttpClientResponse = HttpClientResponse; |  | ||||||
| function isHttps(requestUrl) { |  | ||||||
|     let parsedUrl = url.parse(requestUrl); |  | ||||||
|     return parsedUrl.protocol === 'https:'; |  | ||||||
| } |  | ||||||
| exports.isHttps = isHttps; |  | ||||||
| var EnvironmentVariables; |  | ||||||
| (function (EnvironmentVariables) { |  | ||||||
|     EnvironmentVariables["HTTP_PROXY"] = "HTTP_PROXY"; |  | ||||||
|     EnvironmentVariables["HTTPS_PROXY"] = "HTTPS_PROXY"; |  | ||||||
| })(EnvironmentVariables || (EnvironmentVariables = {})); |  | ||||||
| class HttpClient { |  | ||||||
|     constructor(userAgent, handlers, requestOptions) { |  | ||||||
|         this._ignoreSslError = false; |  | ||||||
|         this._allowRedirects = true; |  | ||||||
|         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; |  | ||||||
|             this._httpProxy = requestOptions.proxy; |  | ||||||
|             if (requestOptions.proxy && requestOptions.proxy.proxyBypassHosts) { |  | ||||||
|                 this._httpProxyBypassHosts = []; |  | ||||||
|                 requestOptions.proxy.proxyBypassHosts.forEach(bypass => { |  | ||||||
|                     this._httpProxyBypassHosts.push(new RegExp(bypass, 'i')); |  | ||||||
|                 }); |  | ||||||
|             } |  | ||||||
|             this._certConfig = requestOptions.cert; |  | ||||||
|             if (this._certConfig) { |  | ||||||
|                 // If using cert, need fs
 |  | ||||||
|                 fs = __nested_webpack_require_1581__(747); |  | ||||||
|                 // cache the cert content into memory, so we don't have to read it from disk every time 
 |  | ||||||
|                 if (this._certConfig.caFile && fs.existsSync(this._certConfig.caFile)) { |  | ||||||
|                     this._ca = fs.readFileSync(this._certConfig.caFile, 'utf8'); |  | ||||||
|                 } |  | ||||||
|                 if (this._certConfig.certFile && fs.existsSync(this._certConfig.certFile)) { |  | ||||||
|                     this._cert = fs.readFileSync(this._certConfig.certFile, 'utf8'); |  | ||||||
|                 } |  | ||||||
|                 if (this._certConfig.keyFile && fs.existsSync(this._certConfig.keyFile)) { |  | ||||||
|                     this._key = fs.readFileSync(this._certConfig.keyFile, 'utf8'); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             if (requestOptions.allowRedirects != null) { |  | ||||||
|                 this._allowRedirects = requestOptions.allowRedirects; |  | ||||||
|             } |  | ||||||
|             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); |  | ||||||
|     } |  | ||||||
|     /** |  | ||||||
|      * Makes a raw http request. |  | ||||||
|      * All other methods such as get, post, patch, and request ultimately call this. |  | ||||||
|      * Prefer get, del, post and patch |  | ||||||
|      */ |  | ||||||
|     request(verb, requestUrl, data, headers) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             if (this._disposed) { |  | ||||||
|                 throw new Error("Client has already been disposed."); |  | ||||||
|             } |  | ||||||
|             let info = this._prepareRequest(verb, requestUrl, 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 = yield 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; |  | ||||||
|                     } |  | ||||||
|                     // we need to finish reading the response before reassigning response
 |  | ||||||
|                     // which will leak the open socket.
 |  | ||||||
|                     yield response.readBody(); |  | ||||||
|                     // let's make the request with the new redirectUrl
 |  | ||||||
|                     info = this._prepareRequest(verb, redirectUrl, headers); |  | ||||||
|                     response = yield 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) { |  | ||||||
|                     yield response.readBody(); |  | ||||||
|                     yield 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; |  | ||||||
|         let isDataString = typeof (data) === 'string'; |  | ||||||
|         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(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     _prepareRequest(method, requestUrl, headers) { |  | ||||||
|         const info = {}; |  | ||||||
|         info.parsedUrl = url.parse(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); |  | ||||||
|         info.options.headers["user-agent"] = this.userAgent; |  | ||||||
|         info.options.agent = this._getAgent(requestUrl); |  | ||||||
|         // gives handlers an opportunity to participate
 |  | ||||||
|         if (this.handlers && !this._isPresigned(requestUrl)) { |  | ||||||
|             this.handlers.forEach((handler) => { |  | ||||||
|                 handler.prepareRequest(info.options); |  | ||||||
|             }); |  | ||||||
|         } |  | ||||||
|         return info; |  | ||||||
|     } |  | ||||||
|     _isPresigned(requestUrl) { |  | ||||||
|         if (this.requestOptions && this.requestOptions.presignedUrlPatterns) { |  | ||||||
|             const patterns = this.requestOptions.presignedUrlPatterns; |  | ||||||
|             for (let i = 0; i < patterns.length; i++) { |  | ||||||
|                 if (requestUrl.match(patterns[i])) { |  | ||||||
|                     return true; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|     _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 || {}); |  | ||||||
|     } |  | ||||||
|     _getAgent(requestUrl) { |  | ||||||
|         let agent; |  | ||||||
|         let proxy = this._getProxy(requestUrl); |  | ||||||
|         let useProxy = proxy.proxyUrl && proxy.proxyUrl.hostname && !this._isBypassProxy(requestUrl); |  | ||||||
|         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; |  | ||||||
|         } |  | ||||||
|         let parsedUrl = url.parse(requestUrl); |  | ||||||
|         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 = __nested_webpack_require_1581__(802); |  | ||||||
|             } |  | ||||||
|             const agentOptions = { |  | ||||||
|                 maxSockets: maxSockets, |  | ||||||
|                 keepAlive: this._keepAlive, |  | ||||||
|                 proxy: { |  | ||||||
|                     proxyAuth: proxy.proxyAuth, |  | ||||||
|                     host: proxy.proxyUrl.hostname, |  | ||||||
|                     port: proxy.proxyUrl.port |  | ||||||
|                 }, |  | ||||||
|             }; |  | ||||||
|             let tunnelAgent; |  | ||||||
|             const overHttps = proxy.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 }); |  | ||||||
|         } |  | ||||||
|         if (usingSsl && this._certConfig) { |  | ||||||
|             agent.options = Object.assign(agent.options || {}, { ca: this._ca, cert: this._cert, key: this._key, passphrase: this._certConfig.passphrase }); |  | ||||||
|         } |  | ||||||
|         return agent; |  | ||||||
|     } |  | ||||||
|     _getProxy(requestUrl) { |  | ||||||
|         const parsedUrl = url.parse(requestUrl); |  | ||||||
|         let usingSsl = parsedUrl.protocol === 'https:'; |  | ||||||
|         let proxyConfig = this._httpProxy; |  | ||||||
|         // fallback to http_proxy and https_proxy env
 |  | ||||||
|         let https_proxy = process.env[EnvironmentVariables.HTTPS_PROXY]; |  | ||||||
|         let http_proxy = process.env[EnvironmentVariables.HTTP_PROXY]; |  | ||||||
|         if (!proxyConfig) { |  | ||||||
|             if (https_proxy && usingSsl) { |  | ||||||
|                 proxyConfig = { |  | ||||||
|                     proxyUrl: https_proxy |  | ||||||
|                 }; |  | ||||||
|             } |  | ||||||
|             else if (http_proxy) { |  | ||||||
|                 proxyConfig = { |  | ||||||
|                     proxyUrl: http_proxy |  | ||||||
|                 }; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         let proxyUrl; |  | ||||||
|         let proxyAuth; |  | ||||||
|         if (proxyConfig) { |  | ||||||
|             if (proxyConfig.proxyUrl.length > 0) { |  | ||||||
|                 proxyUrl = url.parse(proxyConfig.proxyUrl); |  | ||||||
|             } |  | ||||||
|             if (proxyConfig.proxyUsername || proxyConfig.proxyPassword) { |  | ||||||
|                 proxyAuth = proxyConfig.proxyUsername + ":" + proxyConfig.proxyPassword; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return { proxyUrl: proxyUrl, proxyAuth: proxyAuth }; |  | ||||||
|     } |  | ||||||
|     _isBypassProxy(requestUrl) { |  | ||||||
|         if (!this._httpProxyBypassHosts) { |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
|         let bypass = false; |  | ||||||
|         this._httpProxyBypassHosts.forEach(bypassHost => { |  | ||||||
|             if (bypassHost.test(requestUrl)) { |  | ||||||
|                 bypass = true; |  | ||||||
|             } |  | ||||||
|         }); |  | ||||||
|         return bypass; |  | ||||||
|     } |  | ||||||
|     _performExponentialBackoff(retryNumber) { |  | ||||||
|         retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); |  | ||||||
|         const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); |  | ||||||
|         return new Promise(resolve => setTimeout(() => resolve(), ms)); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| exports.HttpClient = HttpClient; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 129: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(129); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 146: |  | ||||||
| /***/ (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; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 211: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(211); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 227: |  | ||||||
| /***/ (function(__unusedmodule, exports, __nested_webpack_require_22880__) { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); |  | ||||||
| const os = __nested_webpack_require_22880__(87); |  | ||||||
| /** |  | ||||||
|  * Commands |  | ||||||
|  * |  | ||||||
|  * Command Format: |  | ||||||
|  *   ##[name key=value;key=value]message |  | ||||||
|  * |  | ||||||
|  * Examples: |  | ||||||
|  *   ##[warning]This is the user warning message |  | ||||||
|  *   ##[set-secret name=mypassword]definatelyNotAPassword! |  | ||||||
|  */ |  | ||||||
| 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_PREFIX = '##['; |  | ||||||
| class Command { |  | ||||||
|     constructor(command, properties, message) { |  | ||||||
|         if (!command) { |  | ||||||
|             command = 'missing.command'; |  | ||||||
|         } |  | ||||||
|         this.command = command; |  | ||||||
|         this.properties = properties; |  | ||||||
|         this.message = message; |  | ||||||
|     } |  | ||||||
|     toString() { |  | ||||||
|         let cmdStr = CMD_PREFIX + 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 += ']'; |  | ||||||
|         // 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
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 245: |  | ||||||
| /***/ (function(__unusedmodule, exports, __nested_webpack_require_25158__) { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { |  | ||||||
|     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) : new P(function (resolve) { resolve(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 os = __importStar(__nested_webpack_require_25158__(87)); |  | ||||||
| const path = __importStar(__nested_webpack_require_25158__(622)); |  | ||||||
| const semver = __importStar(__nested_webpack_require_25158__(284)); |  | ||||||
| let cacheDirectory = process.env['RUNNER_TOOLSDIRECTORY'] || ''; |  | ||||||
| if (!cacheDirectory) { |  | ||||||
|     let baseLocation; |  | ||||||
|     if (process.platform === 'win32') { |  | ||||||
|         // On windows use the USERPROFILE env variable
 |  | ||||||
|         baseLocation = process.env['USERPROFILE'] || 'C:\\'; |  | ||||||
|     } |  | ||||||
|     else { |  | ||||||
|         if (process.platform === 'darwin') { |  | ||||||
|             baseLocation = '/Users'; |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             baseLocation = '/home'; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     cacheDirectory = path.join(baseLocation, 'actions', 'cache'); |  | ||||||
| } |  | ||||||
| const core = __importStar(__nested_webpack_require_25158__(694)); |  | ||||||
| const tc = __importStar(__nested_webpack_require_25158__(871)); |  | ||||||
| const IS_WINDOWS = process.platform === 'win32'; |  | ||||||
| // Python has "scripts" or "bin" directories where command-line tools that come with packages are installed.
 |  | ||||||
| // This is where pip is, along with anything that pip installs.
 |  | ||||||
| // There is a seperate directory for `pip install --user`.
 |  | ||||||
| //
 |  | ||||||
| // For reference, these directories are as follows:
 |  | ||||||
| //   macOS / Linux:
 |  | ||||||
| //      <sys.prefix>/bin (by default /usr/local/bin, but not on hosted agents -- see the `else`)
 |  | ||||||
| //      (--user) ~/.local/bin
 |  | ||||||
| //   Windows:
 |  | ||||||
| //      <Python installation dir>\Scripts
 |  | ||||||
| //      (--user) %APPDATA%\Python\PythonXY\Scripts
 |  | ||||||
| // See https://docs.python.org/3/library/sysconfig.html
 |  | ||||||
| function binDir(installDir) { |  | ||||||
|     if (IS_WINDOWS) { |  | ||||||
|         return path.join(installDir, 'Scripts'); |  | ||||||
|     } |  | ||||||
|     else { |  | ||||||
|         return path.join(installDir, 'bin'); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| // Note on the tool cache layout for PyPy:
 |  | ||||||
| // PyPy has its own versioning scheme that doesn't follow the Python versioning scheme.
 |  | ||||||
| // A particular version of PyPy may contain one or more versions of the Python interpreter.
 |  | ||||||
| // For example, PyPy 7.0 contains Python 2.7, 3.5, and 3.6-alpha.
 |  | ||||||
| // We only care about the Python version, so we don't use the PyPy version for the tool cache.
 |  | ||||||
| function usePyPy(majorVersion, architecture) { |  | ||||||
|     const findPyPy = tc.find.bind(undefined, 'PyPy', majorVersion.toString()); |  | ||||||
|     let installDir = findPyPy(architecture); |  | ||||||
|     if (!installDir && IS_WINDOWS) { |  | ||||||
|         // PyPy only precompiles binaries for x86, but the architecture parameter defaults to x64.
 |  | ||||||
|         // On Hosted VS2017, we only install an x86 version.
 |  | ||||||
|         // Fall back to x86.
 |  | ||||||
|         installDir = findPyPy('x86'); |  | ||||||
|     } |  | ||||||
|     if (!installDir) { |  | ||||||
|         // PyPy not installed in $(Agent.ToolsDirectory)
 |  | ||||||
|         throw new Error(`PyPy ${majorVersion} not found`); |  | ||||||
|     } |  | ||||||
|     // For PyPy, Windows uses 'bin', not 'Scripts'.
 |  | ||||||
|     const _binDir = path.join(installDir, 'bin'); |  | ||||||
|     // On Linux and macOS, the Python interpreter is in 'bin'.
 |  | ||||||
|     // On Windows, it is in the installation root.
 |  | ||||||
|     const pythonLocation = IS_WINDOWS ? installDir : _binDir; |  | ||||||
|     core.exportVariable('pythonLocation', pythonLocation); |  | ||||||
|     core.addPath(installDir); |  | ||||||
|     core.addPath(_binDir); |  | ||||||
| } |  | ||||||
| function useCpythonVersion(version, architecture) { |  | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|         const desugaredVersionSpec = desugarDevVersion(version); |  | ||||||
|         const semanticVersionSpec = pythonVersionToSemantic(desugaredVersionSpec); |  | ||||||
|         core.debug(`Semantic version spec of ${version} is ${semanticVersionSpec}`); |  | ||||||
|         const installDir = tc.find('Python', semanticVersionSpec, architecture); |  | ||||||
|         if (!installDir) { |  | ||||||
|             // Fail and list available versions
 |  | ||||||
|             const x86Versions = tc |  | ||||||
|                 .findAllVersions('Python', 'x86') |  | ||||||
|                 .map(s => `${s} (x86)`) |  | ||||||
|                 .join(os.EOL); |  | ||||||
|             const x64Versions = tc |  | ||||||
|                 .findAllVersions('Python', 'x64') |  | ||||||
|                 .map(s => `${s} (x64)`) |  | ||||||
|                 .join(os.EOL); |  | ||||||
|             throw new Error([ |  | ||||||
|                 `Version ${version} with arch ${architecture} not found`, |  | ||||||
|                 'Available versions:', |  | ||||||
|                 x86Versions, |  | ||||||
|                 x64Versions |  | ||||||
|             ].join(os.EOL)); |  | ||||||
|         } |  | ||||||
|         core.exportVariable('pythonLocation', installDir); |  | ||||||
|         core.addPath(installDir); |  | ||||||
|         core.addPath(binDir(installDir)); |  | ||||||
|         if (IS_WINDOWS) { |  | ||||||
|             // Add --user directory
 |  | ||||||
|             // `installDir` from tool cache should look like $AGENT_TOOLSDIRECTORY/Python/<semantic version>/x64/
 |  | ||||||
|             // So if `findLocalTool` succeeded above, we must have a conformant `installDir`
 |  | ||||||
|             const version = path.basename(path.dirname(installDir)); |  | ||||||
|             const major = semver.major(version); |  | ||||||
|             const minor = semver.minor(version); |  | ||||||
|             const userScriptsDir = path.join(process.env['APPDATA'] || '', 'Python', `Python${major}${minor}`, 'Scripts'); |  | ||||||
|             core.addPath(userScriptsDir); |  | ||||||
|         } |  | ||||||
|         // On Linux and macOS, pip will create the --user directory and add it to PATH as needed.
 |  | ||||||
|     }); |  | ||||||
| } |  | ||||||
| /** Convert versions like `3.8-dev` to a version like `>= 3.8.0-a0`. */ |  | ||||||
| function desugarDevVersion(versionSpec) { |  | ||||||
|     if (versionSpec.endsWith('-dev')) { |  | ||||||
|         const versionRoot = versionSpec.slice(0, -'-dev'.length); |  | ||||||
|         return `>= ${versionRoot}.0-a0`; |  | ||||||
|     } |  | ||||||
|     else { |  | ||||||
|         return versionSpec; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| /** |  | ||||||
|  * Python's prelease versions look like `3.7.0b2`. |  | ||||||
|  * This is the one part of Python versioning that does not look like semantic versioning, which specifies `3.7.0-b2`. |  | ||||||
|  * If the version spec contains prerelease versions, we need to convert them to the semantic version equivalent. |  | ||||||
|  */ |  | ||||||
| function pythonVersionToSemantic(versionSpec) { |  | ||||||
|     const prereleaseVersion = /(\d+\.\d+\.\d+)((?:a|b|rc)\d*)/g; |  | ||||||
|     return versionSpec.replace(prereleaseVersion, '$1-$2'); |  | ||||||
| } |  | ||||||
| exports.pythonVersionToSemantic = pythonVersionToSemantic; |  | ||||||
| function findPythonVersion(version, architecture) { |  | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|         switch (version.toUpperCase()) { |  | ||||||
|             case 'PYPY2': |  | ||||||
|                 return usePyPy(2, architecture); |  | ||||||
|             case 'PYPY3': |  | ||||||
|                 return usePyPy(3, architecture); |  | ||||||
|             default: |  | ||||||
|                 return yield useCpythonVersion(version, architecture); |  | ||||||
|         } |  | ||||||
|     }); |  | ||||||
| } |  | ||||||
| exports.findPythonVersion = findPythonVersion; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 284: |  | ||||||
| /***/ (function(module, exports) { | /***/ (function(module, exports) { | ||||||
| 
 | 
 | ||||||
| exports = module.exports = SemVer | exports = module.exports = SemVer | ||||||
| @ -3123,62 +2823,100 @@ function coerce (version, options) { | |||||||
| /***/ 357: | /***/ 357: | ||||||
| /***/ (function(module) { | /***/ (function(module) { | ||||||
| 
 | 
 | ||||||
| module.exports = __nested_webpack_require_1759__(357); | module.exports = require("assert"); | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 413: | ||||||
|  | /***/ (function(module, __unusedexports, __webpack_require__) { | ||||||
|  | 
 | ||||||
|  | module.exports = __webpack_require__(141); | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 417: | /***/ 417: | ||||||
| /***/ (function(module) { | /***/ (function(module) { | ||||||
| 
 | 
 | ||||||
| module.exports = __nested_webpack_require_1759__(417); | module.exports = require("crypto"); | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 430: | /***/ 431: | ||||||
| /***/ (function(__unusedmodule, exports, __nested_webpack_require_76482__) { | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { |  | ||||||
|     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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } |  | ||||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); |  | ||||||
|     }); |  | ||||||
| }; |  | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
| const tr = __nested_webpack_require_76482__(654); | const os = __webpack_require__(87); | ||||||
| /** | /** | ||||||
|  * Exec a command. |  * Commands | ||||||
|  * 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. |  * Command Format: | ||||||
|  * @param     args               optional arguments for tool. Escaping is handled by the lib. |  *   ##[name key=value;key=value]message | ||||||
|  * @param     options            optional exec options.  See ExecOptions |  * | ||||||
|  * @returns   Promise<number>    exit code |  * Examples: | ||||||
|  |  *   ##[warning]This is the user warning message | ||||||
|  |  *   ##[set-secret name=mypassword]definatelyNotAPassword! | ||||||
|  */ |  */ | ||||||
| function exec(commandLine, args, options) { | function issueCommand(command, properties, message) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     const cmd = new Command(command, properties, message); | ||||||
|         const commandArgs = tr.argStringToArray(commandLine); |     process.stdout.write(cmd.toString() + os.EOL); | ||||||
|         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; | exports.issueCommand = issueCommand; | ||||||
| //# sourceMappingURL=exec.js.map
 | function issue(name, message) { | ||||||
|  |     issueCommand(name, {}, message); | ||||||
|  | } | ||||||
|  | exports.issue = issue; | ||||||
|  | const CMD_PREFIX = '##['; | ||||||
|  | class Command { | ||||||
|  |     constructor(command, properties, message) { | ||||||
|  |         if (!command) { | ||||||
|  |             command = 'missing.command'; | ||||||
|  |         } | ||||||
|  |         this.command = command; | ||||||
|  |         this.properties = properties; | ||||||
|  |         this.message = message; | ||||||
|  |     } | ||||||
|  |     toString() { | ||||||
|  |         let cmdStr = CMD_PREFIX + 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 += ']'; | ||||||
|  |         // 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
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 492: | /***/ 434: | ||||||
| /***/ (function(__unusedmodule, exports, __nested_webpack_require_78363__) { | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| @ -3198,689 +2936,172 @@ var __importStar = (this && this.__importStar) || function (mod) { | |||||||
|     return result; |     return result; | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
| const core = __importStar(__nested_webpack_require_78363__(694)); | const os = __importStar(__webpack_require__(87)); | ||||||
| const finder = __importStar(__nested_webpack_require_78363__(245)); | const path = __importStar(__webpack_require__(622)); | ||||||
| const path = __importStar(__nested_webpack_require_78363__(622)); | const semver = __importStar(__webpack_require__(280)); | ||||||
| function run() { | let cacheDirectory = process.env['RUNNER_TOOLSDIRECTORY'] || ''; | ||||||
|     return __awaiter(this, void 0, void 0, function* () { | if (!cacheDirectory) { | ||||||
|         try { |     let baseLocation; | ||||||
|             let version = core.getInput('python-version'); |     if (process.platform === 'win32') { | ||||||
|             if (version) { |         // On windows use the USERPROFILE env variable
 | ||||||
|                 const arch = core.getInput('architecture', { required: true }); |         baseLocation = process.env['USERPROFILE'] || 'C:\\'; | ||||||
|                 yield finder.findPythonVersion(version, arch); |  | ||||||
|     } |     } | ||||||
|             const matchersPath = path.join(__dirname, '..', '.github'); |     else { | ||||||
|             console.log(`##[add-matcher]${path.join(matchersPath, 'python.json')}`); |         if (process.platform === 'darwin') { | ||||||
|  |             baseLocation = '/Users'; | ||||||
|         } |         } | ||||||
|         catch (err) { |         else { | ||||||
|             core.setFailed(err.message); |             baseLocation = '/home'; | ||||||
|         } |         } | ||||||
|     }); |     } | ||||||
|  |     cacheDirectory = path.join(baseLocation, 'actions', 'cache'); | ||||||
| } | } | ||||||
| run(); | const core = __importStar(__webpack_require__(470)); | ||||||
| 
 | const tc = __importStar(__webpack_require__(533)); | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 605: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(605); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 614: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(614); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 622: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(622); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 631: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(631); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 654: |  | ||||||
| /***/ (function(__unusedmodule, exports, __nested_webpack_require_80537__) { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { |  | ||||||
|     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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } |  | ||||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); |  | ||||||
|     }); |  | ||||||
| }; |  | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); |  | ||||||
| const os = __nested_webpack_require_80537__(87); |  | ||||||
| const events = __nested_webpack_require_80537__(614); |  | ||||||
| const child = __nested_webpack_require_80537__(129); |  | ||||||
| /* eslint-disable @typescript-eslint/unbound-method */ |  | ||||||
| const IS_WINDOWS = process.platform === 'win32'; | const IS_WINDOWS = process.platform === 'win32'; | ||||||
| /* | // Python has "scripts" or "bin" directories where command-line tools that come with packages are installed.
 | ||||||
|  * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way. | // This is where pip is, along with anything that pip installs.
 | ||||||
|  */ | // There is a seperate directory for `pip install --user`.
 | ||||||
| class ToolRunner extends events.EventEmitter { | //
 | ||||||
|     constructor(toolPath, args, options) { | // For reference, these directories are as follows:
 | ||||||
|         super(); | //   macOS / Linux:
 | ||||||
|         if (!toolPath) { | //      <sys.prefix>/bin (by default /usr/local/bin, but not on hosted agents -- see the `else`)
 | ||||||
|             throw new Error("Parameter 'toolPath' cannot be null or empty."); | //      (--user) ~/.local/bin
 | ||||||
|         } | //   Windows:
 | ||||||
|         this.toolPath = toolPath; | //      <Python installation dir>\Scripts
 | ||||||
|         this.args = args || []; | //      (--user) %APPDATA%\Python\PythonXY\Scripts
 | ||||||
|         this.options = options || {}; | // See https://docs.python.org/3/library/sysconfig.html
 | ||||||
|     } | function binDir(installDir) { | ||||||
|     _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) { |     if (IS_WINDOWS) { | ||||||
|             // Windows + cmd file
 |         return path.join(installDir, 'Scripts'); | ||||||
|             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 { |     else { | ||||||
|             // OSX/Linux - this can likely be improved with some form of quoting.
 |         return path.join(installDir, 'bin'); | ||||||
|             // 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}`; |  | ||||||
|     } |     } | ||||||
|  | } | ||||||
|  | // Note on the tool cache layout for PyPy:
 | ||||||
|  | // PyPy has its own versioning scheme that doesn't follow the Python versioning scheme.
 | ||||||
|  | // A particular version of PyPy may contain one or more versions of the Python interpreter.
 | ||||||
|  | // For example, PyPy 7.0 contains Python 2.7, 3.5, and 3.6-alpha.
 | ||||||
|  | // We only care about the Python version, so we don't use the PyPy version for the tool cache.
 | ||||||
|  | function usePyPy(majorVersion, architecture) { | ||||||
|  |     const findPyPy = tc.find.bind(undefined, 'PyPy', majorVersion.toString()); | ||||||
|  |     let installDir = findPyPy(architecture); | ||||||
|  |     if (!installDir && IS_WINDOWS) { | ||||||
|  |         // PyPy only precompiles binaries for x86, but the architecture parameter defaults to x64.
 | ||||||
|  |         // On our Windows virtual environments, we only install an x86 version.
 | ||||||
|  |         // Fall back to x86.
 | ||||||
|  |         installDir = findPyPy('x86'); | ||||||
|     } |     } | ||||||
|         return cmd; |     if (!installDir) { | ||||||
|  |         // PyPy not installed in $(Agent.ToolsDirectory)
 | ||||||
|  |         throw new Error(`PyPy ${majorVersion} not found`); | ||||||
|     } |     } | ||||||
|     _processLineBuffer(data, strBuffer, onLine) { |     // For PyPy, Windows uses 'bin', not 'Scripts'.
 | ||||||
|         try { |     const _binDir = path.join(installDir, 'bin'); | ||||||
|             let s = strBuffer + data.toString(); |     // On Linux and macOS, the Python interpreter is in 'bin'.
 | ||||||
|             let n = s.indexOf(os.EOL); |     // On Windows, it is in the installation root.
 | ||||||
|             while (n > -1) { |     const pythonLocation = IS_WINDOWS ? installDir : _binDir; | ||||||
|                 const line = s.substring(0, n); |     core.exportVariable('pythonLocation', pythonLocation); | ||||||
|                 onLine(line); |     core.addPath(installDir); | ||||||
|                 // the rest of the string ...
 |     core.addPath(_binDir); | ||||||
|                 s = s.substring(n + os.EOL.length); |     const impl = 'pypy' + majorVersion.toString(); | ||||||
|                 n = s.indexOf(os.EOL); |     core.setOutput('python-version', impl); | ||||||
|             } |     return { impl: impl, version: versionFromPath(installDir) }; | ||||||
|             strBuffer = s; | } | ||||||
|         } | function useCpythonVersion(version, architecture) { | ||||||
|         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 preceed a quote,
 |  | ||||||
|         //    e.g.  hello \world    => "hello \world"
 |  | ||||||
|         //          hello\"world    => "hello\\""world"
 |  | ||||||
|         //          hello\\"world   => "hello\\\\""world"
 |  | ||||||
|         //          hello world\    => "hello world\\"
 |  | ||||||
|         //
 |  | ||||||
|         //    technically this is not required for a cmd.exe command line, or the batch argument parser.
 |  | ||||||
|         //    the reasons for including this as a .cmd quoting rule are:
 |  | ||||||
|         //
 |  | ||||||
|         //    a) this is optimized for the scenario where the argument is passed from the .cmd file to an
 |  | ||||||
|         //       external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule.
 |  | ||||||
|         //
 |  | ||||||
|         //    b) it's what we've been doing previously (by deferring to node default behavior) and we
 |  | ||||||
|         //       haven't heard any complaints about that aspect.
 |  | ||||||
|         //
 |  | ||||||
|         // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be
 |  | ||||||
|         // escaped when used on the command line directly - even though within a .cmd file % can be escaped
 |  | ||||||
|         // by using %%.
 |  | ||||||
|         //
 |  | ||||||
|         // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts
 |  | ||||||
|         // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing.
 |  | ||||||
|         //
 |  | ||||||
|         // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would
 |  | ||||||
|         // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the
 |  | ||||||
|         // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args
 |  | ||||||
|         // to an external program.
 |  | ||||||
|         //
 |  | ||||||
|         // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file.
 |  | ||||||
|         // % can be escaped within a .cmd file.
 |  | ||||||
|         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 __awaiter(this, void 0, void 0, function* () { | ||||||
|             return new Promise((resolve, reject) => { |         const desugaredVersionSpec = desugarDevVersion(version); | ||||||
|                 this._debug(`exec tool: ${this.toolPath}`); |         const semanticVersionSpec = pythonVersionToSemantic(desugaredVersionSpec); | ||||||
|                 this._debug('arguments:'); |         core.debug(`Semantic version spec of ${version} is ${semanticVersionSpec}`); | ||||||
|                 for (const arg of this.args) { |         const installDir = tc.find('Python', semanticVersionSpec, architecture); | ||||||
|                     this._debug(`   ${arg}`); |         if (!installDir) { | ||||||
|  |             // Fail and list available versions
 | ||||||
|  |             const x86Versions = tc | ||||||
|  |                 .findAllVersions('Python', 'x86') | ||||||
|  |                 .map(s => `${s} (x86)`) | ||||||
|  |                 .join(os.EOL); | ||||||
|  |             const x64Versions = tc | ||||||
|  |                 .findAllVersions('Python', 'x64') | ||||||
|  |                 .map(s => `${s} (x64)`) | ||||||
|  |                 .join(os.EOL); | ||||||
|  |             throw new Error([ | ||||||
|  |                 `Version ${version} with arch ${architecture} not found`, | ||||||
|  |                 'Available versions:', | ||||||
|  |                 x86Versions, | ||||||
|  |                 x64Versions | ||||||
|  |             ].join(os.EOL)); | ||||||
|         } |         } | ||||||
|                 const optionsNonNull = this._cloneExecOptions(this.options); |         core.exportVariable('pythonLocation', installDir); | ||||||
|                 if (!optionsNonNull.silent && optionsNonNull.outStream) { |         core.addPath(installDir); | ||||||
|                     optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL); |         core.addPath(binDir(installDir)); | ||||||
|  |         if (IS_WINDOWS) { | ||||||
|  |             // Add --user directory
 | ||||||
|  |             // `installDir` from tool cache should look like $RUNNER_TOOL_CACHE/Python/<semantic version>/x64/
 | ||||||
|  |             // So if `findLocalTool` succeeded above, we must have a conformant `installDir`
 | ||||||
|  |             const version = path.basename(path.dirname(installDir)); | ||||||
|  |             const major = semver.major(version); | ||||||
|  |             const minor = semver.minor(version); | ||||||
|  |             const userScriptsDir = path.join(process.env['APPDATA'] || '', 'Python', `Python${major}${minor}`, 'Scripts'); | ||||||
|  |             core.addPath(userScriptsDir); | ||||||
|         } |         } | ||||||
|                 const state = new ExecState(optionsNonNull, this.toolPath); |         // On Linux and macOS, pip will create the --user directory and add it to PATH as needed.
 | ||||||
|                 state.on('debug', (message) => { |         const installed = versionFromPath(installDir); | ||||||
|                     this._debug(message); |         core.setOutput('python-version', installed); | ||||||
|  |         return { impl: 'CPython', version: installed }; | ||||||
|     }); |     }); | ||||||
|                 const fileName = this._getSpawnFileName(); | } | ||||||
|                 const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); | /** Convert versions like `3.8-dev` to a version like `>= 3.8.0-a0`. */ | ||||||
|                 const stdbuffer = ''; | function desugarDevVersion(versionSpec) { | ||||||
|                 if (cp.stdout) { |     if (versionSpec.endsWith('-dev')) { | ||||||
|                     cp.stdout.on('data', (data) => { |         const versionRoot = versionSpec.slice(0, -'-dev'.length); | ||||||
|                         if (this.options.listeners && this.options.listeners.stdout) { |         return `>= ${versionRoot}.0-a0`; | ||||||
|                             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 { |     else { | ||||||
|                         resolve(exitCode); |         return versionSpec; | ||||||
|                     } |  | ||||||
|                 }); |  | ||||||
|             }); |  | ||||||
|         }); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
| exports.ToolRunner = ToolRunner; | /** Extracts python version from install path from hosted tool cache as described in README.md */ | ||||||
|  | function versionFromPath(installDir) { | ||||||
|  |     const parts = installDir.split(path.sep); | ||||||
|  |     const idx = parts.findIndex(part => part === 'PyPy' || part === 'Python'); | ||||||
|  |     return parts[idx + 1] || ''; | ||||||
|  | } | ||||||
| /** | /** | ||||||
|  * Convert an arg string to an array of args. Handles escaping |  * Python's prelease versions look like `3.7.0b2`. | ||||||
|  * |  * This is the one part of Python versioning that does not look like semantic versioning, which specifies `3.7.0-b2`. | ||||||
|  * @param    argString   string of arguments |  * If the version spec contains prerelease versions, we need to convert them to the semantic version equivalent. | ||||||
|  * @returns  string[]    array of arguments |  | ||||||
|  */ |  */ | ||||||
| function argStringToArray(argString) { | function pythonVersionToSemantic(versionSpec) { | ||||||
|     const args = []; |     const prereleaseVersion = /(\d+\.\d+\.\d+)((?:a|b|rc)\d*)/g; | ||||||
|     let inQuotes = false; |     return versionSpec.replace(prereleaseVersion, '$1-$2'); | ||||||
|     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; | exports.pythonVersionToSemantic = pythonVersionToSemantic; | ||||||
| class ExecState extends events.EventEmitter { | function findPythonVersion(version, architecture) { | ||||||
|     constructor(options, toolPath) { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         super(); |         switch (version.toUpperCase()) { | ||||||
|         this.processClosed = false; // tracks whether the process has exited and stdio is closed
 |             case 'PYPY2': | ||||||
|         this.processError = ''; |                 return usePyPy(2, architecture); | ||||||
|         this.processExitCode = 0; |             case 'PYPY3': | ||||||
|         this.processExited = false; // tracks whether the process has exited
 |                 return usePyPy(3, architecture); | ||||||
|         this.processStderr = false; // tracks whether stderr was written to
 |             default: | ||||||
|         this.delay = 10000; // 10 seconds
 |                 return yield useCpythonVersion(version, architecture); | ||||||
|         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
 | exports.findPythonVersion = findPythonVersion; | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 669: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(669); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 683: |  | ||||||
| /***/ (function(module, __unusedexports, __nested_webpack_require_104122__) { |  | ||||||
| 
 |  | ||||||
| var rng = __nested_webpack_require_104122__(853); |  | ||||||
| var bytesToUuid = __nested_webpack_require_104122__(146); |  | ||||||
| 
 |  | ||||||
| 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; |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 694: | /***/ 470: | ||||||
| /***/ (function(__unusedmodule, exports, __nested_webpack_require_104920__) { | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
| const command_1 = __nested_webpack_require_104920__(227); | const command_1 = __webpack_require__(431); | ||||||
| const path = __nested_webpack_require_104920__(622); | const path = __webpack_require__(622); | ||||||
| /** | /** | ||||||
|  * The code to exit an action |  * The code to exit an action | ||||||
|  */ |  */ | ||||||
| @ -3996,300 +3217,8 @@ exports.warning = warning; | |||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 725: | /***/ 533: | ||||||
| /***/ (function(__unusedmodule, exports, __nested_webpack_require_108646__) { | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| var net = __nested_webpack_require_108646__(631); |  | ||||||
| var tls = __nested_webpack_require_108646__(16); |  | ||||||
| var http = __nested_webpack_require_108646__(605); |  | ||||||
| var https = __nested_webpack_require_108646__(211); |  | ||||||
| var events = __nested_webpack_require_108646__(614); |  | ||||||
| var assert = __nested_webpack_require_108646__(357); |  | ||||||
| var util = __nested_webpack_require_108646__(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; |  | ||||||
|   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; |  | ||||||
|   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 |  | ||||||
|   }); |  | ||||||
|   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) { |  | ||||||
|       assert.equal(head.length, 0); |  | ||||||
|       debug('tunneling connection has established'); |  | ||||||
|       self.sockets[self.sockets.indexOf(placeholder)] = socket; |  | ||||||
|       cb(socket); |  | ||||||
|     } else { |  | ||||||
|       debug('tunneling socket could not be established, statusCode=%d', |  | ||||||
|             res.statusCode); |  | ||||||
|       var error = new Error('tunneling socket could not be established, ' + |  | ||||||
|                             'statusCode=' + res.statusCode); |  | ||||||
|       error.code = 'ECONNRESET'; |  | ||||||
|       options.request.emit('error', error); |  | ||||||
|       self.removeSocket(placeholder); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   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
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 747: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(747); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 802: |  | ||||||
| /***/ (function(module, __unusedexports, __nested_webpack_require_116266__) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_116266__(725); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 835: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(835); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 853: |  | ||||||
| /***/ (function(module, __unusedexports, __nested_webpack_require_116482__) { |  | ||||||
| 
 |  | ||||||
| // Unique ID creation requires a high quality random # generator.  In node.js
 |  | ||||||
| // this is pretty straight-forward - we use the crypto API.
 |  | ||||||
| 
 |  | ||||||
| var crypto = __nested_webpack_require_116482__(417); |  | ||||||
| 
 |  | ||||||
| module.exports = function nodeRNG() { |  | ||||||
|   return crypto.randomBytes(16); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 871: |  | ||||||
| /***/ (function(__unusedmodule, exports, __nested_webpack_require_116832__) { |  | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| @ -4302,16 +3231,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge | |||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
| const core = __nested_webpack_require_116832__(694); | const core = __webpack_require__(470); | ||||||
| const io = __nested_webpack_require_116832__(999); | const io = __webpack_require__(1); | ||||||
| const fs = __nested_webpack_require_116832__(747); | const fs = __webpack_require__(747); | ||||||
| const os = __nested_webpack_require_116832__(87); | const os = __webpack_require__(87); | ||||||
| const path = __nested_webpack_require_116832__(622); | const path = __webpack_require__(622); | ||||||
| const httpm = __nested_webpack_require_116832__(113); | const httpm = __webpack_require__(874); | ||||||
| const semver = __nested_webpack_require_116832__(284); | const semver = __webpack_require__(280); | ||||||
| const uuidV4 = __nested_webpack_require_116832__(683); | const uuidV4 = __webpack_require__(826); | ||||||
| const exec_1 = __nested_webpack_require_116832__(430); | const exec_1 = __webpack_require__(986); | ||||||
| const assert_1 = __nested_webpack_require_116832__(357); | const assert_1 = __webpack_require__(357); | ||||||
| class HTTPError extends Error { | class HTTPError extends Error { | ||||||
|     constructor(httpStatusCode) { |     constructor(httpStatusCode) { | ||||||
|         super(`Unexpected HTTP response: ${httpStatusCode}`); |         super(`Unexpected HTTP response: ${httpStatusCode}`); | ||||||
| @ -4539,7 +3468,7 @@ function extractZipWin(file, dest) { | |||||||
| } | } | ||||||
| function extractZipNix(file, dest) { | function extractZipNix(file, dest) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         const unzipPath = __nested_webpack_require_116832__.ab + "unzip"; |         const unzipPath = __webpack_require__.ab + "unzip"; | ||||||
|         yield exec_1.exec(`"${unzipPath}"`, [file], { cwd: dest }); |         yield exec_1.exec(`"${unzipPath}"`, [file], { cwd: dest }); | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| @ -4731,8 +3660,89 @@ function _evaluateVersions(versions, versionSpec) { | |||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 960: | /***/ 605: | ||||||
| /***/ (function(__unusedmodule, exports, __nested_webpack_require_134321__) { | /***/ (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"); | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 645: | ||||||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|  |     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) : new P(function (resolve) { resolve(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 finder = __importStar(__webpack_require__(434)); | ||||||
|  | const path = __importStar(__webpack_require__(622)); | ||||||
|  | function run() { | ||||||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |         try { | ||||||
|  |             let version = core.getInput('python-version'); | ||||||
|  |             if (version) { | ||||||
|  |                 const arch = core.getInput('architecture', { required: true }); | ||||||
|  |                 const installed = yield finder.findPythonVersion(version, arch); | ||||||
|  |                 console.log(`Successfully setup ${installed.impl} (${installed.version}).`); | ||||||
|  |             } | ||||||
|  |             const matchersPath = path.join(__dirname, '..', '.github'); | ||||||
|  |             console.log(`##[add-matcher]${path.join(matchersPath, 'python.json')}`); | ||||||
|  |         } | ||||||
|  |         catch (err) { | ||||||
|  |             core.setFailed(err.message); | ||||||
|  |         } | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  | run(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 669: | ||||||
|  | /***/ (function(module) { | ||||||
|  | 
 | ||||||
|  | module.exports = require("util"); | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 672: | ||||||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| @ -4746,9 +3756,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge | |||||||
| }; | }; | ||||||
| var _a; | var _a; | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
| const assert_1 = __nested_webpack_require_134321__(357); | const assert_1 = __webpack_require__(357); | ||||||
| const fs = __nested_webpack_require_134321__(747); | const fs = __webpack_require__(747); | ||||||
| const path = __nested_webpack_require_134321__(622); | 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; | _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'; | exports.IS_WINDOWS = process.platform === 'win32'; | ||||||
| function exists(fsPath) { | function exists(fsPath) { | ||||||
| @ -4932,8 +3942,552 @@ function isUnixExecutable(stats) { | |||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 999: | /***/ 722: | ||||||
| /***/ (function(__unusedmodule, exports, __nested_webpack_require_142111__) { | /***/ (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"); | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 874: | ||||||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | // Copyright (c) Microsoft. All rights reserved.
 | ||||||
|  | // Licensed under the MIT license. See LICENSE file in the project root for full license information.
 | ||||||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|  |     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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||||||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|  |     }); | ||||||
|  | }; | ||||||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
|  | const url = __webpack_require__(835); | ||||||
|  | const http = __webpack_require__(605); | ||||||
|  | const https = __webpack_require__(211); | ||||||
|  | let fs; | ||||||
|  | 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 = {})); | ||||||
|  | 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((resolve, reject) => __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             let output = ''; | ||||||
|  |             this.message.on('data', (chunk) => { | ||||||
|  |                 output += chunk; | ||||||
|  |             }); | ||||||
|  |             this.message.on('end', () => { | ||||||
|  |                 resolve(output); | ||||||
|  |             }); | ||||||
|  |         })); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.HttpClientResponse = HttpClientResponse; | ||||||
|  | function isHttps(requestUrl) { | ||||||
|  |     let parsedUrl = url.parse(requestUrl); | ||||||
|  |     return parsedUrl.protocol === 'https:'; | ||||||
|  | } | ||||||
|  | exports.isHttps = isHttps; | ||||||
|  | var EnvironmentVariables; | ||||||
|  | (function (EnvironmentVariables) { | ||||||
|  |     EnvironmentVariables["HTTP_PROXY"] = "HTTP_PROXY"; | ||||||
|  |     EnvironmentVariables["HTTPS_PROXY"] = "HTTPS_PROXY"; | ||||||
|  | })(EnvironmentVariables || (EnvironmentVariables = {})); | ||||||
|  | class HttpClient { | ||||||
|  |     constructor(userAgent, handlers, requestOptions) { | ||||||
|  |         this._ignoreSslError = false; | ||||||
|  |         this._allowRedirects = true; | ||||||
|  |         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; | ||||||
|  |             this._httpProxy = requestOptions.proxy; | ||||||
|  |             if (requestOptions.proxy && requestOptions.proxy.proxyBypassHosts) { | ||||||
|  |                 this._httpProxyBypassHosts = []; | ||||||
|  |                 requestOptions.proxy.proxyBypassHosts.forEach(bypass => { | ||||||
|  |                     this._httpProxyBypassHosts.push(new RegExp(bypass, 'i')); | ||||||
|  |                 }); | ||||||
|  |             } | ||||||
|  |             this._certConfig = requestOptions.cert; | ||||||
|  |             if (this._certConfig) { | ||||||
|  |                 // If using cert, need fs
 | ||||||
|  |                 fs = __webpack_require__(747); | ||||||
|  |                 // cache the cert content into memory, so we don't have to read it from disk every time 
 | ||||||
|  |                 if (this._certConfig.caFile && fs.existsSync(this._certConfig.caFile)) { | ||||||
|  |                     this._ca = fs.readFileSync(this._certConfig.caFile, 'utf8'); | ||||||
|  |                 } | ||||||
|  |                 if (this._certConfig.certFile && fs.existsSync(this._certConfig.certFile)) { | ||||||
|  |                     this._cert = fs.readFileSync(this._certConfig.certFile, 'utf8'); | ||||||
|  |                 } | ||||||
|  |                 if (this._certConfig.keyFile && fs.existsSync(this._certConfig.keyFile)) { | ||||||
|  |                     this._key = fs.readFileSync(this._certConfig.keyFile, 'utf8'); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             if (requestOptions.allowRedirects != null) { | ||||||
|  |                 this._allowRedirects = requestOptions.allowRedirects; | ||||||
|  |             } | ||||||
|  |             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); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Makes a raw http request. | ||||||
|  |      * All other methods such as get, post, patch, and request ultimately call this. | ||||||
|  |      * Prefer get, del, post and patch | ||||||
|  |      */ | ||||||
|  |     request(verb, requestUrl, data, headers) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             if (this._disposed) { | ||||||
|  |                 throw new Error("Client has already been disposed."); | ||||||
|  |             } | ||||||
|  |             let info = this._prepareRequest(verb, requestUrl, 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 = yield 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; | ||||||
|  |                     } | ||||||
|  |                     // we need to finish reading the response before reassigning response
 | ||||||
|  |                     // which will leak the open socket.
 | ||||||
|  |                     yield response.readBody(); | ||||||
|  |                     // let's make the request with the new redirectUrl
 | ||||||
|  |                     info = this._prepareRequest(verb, redirectUrl, headers); | ||||||
|  |                     response = yield 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) { | ||||||
|  |                     yield response.readBody(); | ||||||
|  |                     yield 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; | ||||||
|  |         let isDataString = typeof (data) === 'string'; | ||||||
|  |         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(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     _prepareRequest(method, requestUrl, headers) { | ||||||
|  |         const info = {}; | ||||||
|  |         info.parsedUrl = url.parse(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); | ||||||
|  |         info.options.headers["user-agent"] = this.userAgent; | ||||||
|  |         info.options.agent = this._getAgent(requestUrl); | ||||||
|  |         // gives handlers an opportunity to participate
 | ||||||
|  |         if (this.handlers && !this._isPresigned(requestUrl)) { | ||||||
|  |             this.handlers.forEach((handler) => { | ||||||
|  |                 handler.prepareRequest(info.options); | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  |         return info; | ||||||
|  |     } | ||||||
|  |     _isPresigned(requestUrl) { | ||||||
|  |         if (this.requestOptions && this.requestOptions.presignedUrlPatterns) { | ||||||
|  |             const patterns = this.requestOptions.presignedUrlPatterns; | ||||||
|  |             for (let i = 0; i < patterns.length; i++) { | ||||||
|  |                 if (requestUrl.match(patterns[i])) { | ||||||
|  |                     return true; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     _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 || {}); | ||||||
|  |     } | ||||||
|  |     _getAgent(requestUrl) { | ||||||
|  |         let agent; | ||||||
|  |         let proxy = this._getProxy(requestUrl); | ||||||
|  |         let useProxy = proxy.proxyUrl && proxy.proxyUrl.hostname && !this._isBypassProxy(requestUrl); | ||||||
|  |         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; | ||||||
|  |         } | ||||||
|  |         let parsedUrl = url.parse(requestUrl); | ||||||
|  |         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: proxy.proxyAuth, | ||||||
|  |                     host: proxy.proxyUrl.hostname, | ||||||
|  |                     port: proxy.proxyUrl.port | ||||||
|  |                 }, | ||||||
|  |             }; | ||||||
|  |             let tunnelAgent; | ||||||
|  |             const overHttps = proxy.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 }); | ||||||
|  |         } | ||||||
|  |         if (usingSsl && this._certConfig) { | ||||||
|  |             agent.options = Object.assign(agent.options || {}, { ca: this._ca, cert: this._cert, key: this._key, passphrase: this._certConfig.passphrase }); | ||||||
|  |         } | ||||||
|  |         return agent; | ||||||
|  |     } | ||||||
|  |     _getProxy(requestUrl) { | ||||||
|  |         const parsedUrl = url.parse(requestUrl); | ||||||
|  |         let usingSsl = parsedUrl.protocol === 'https:'; | ||||||
|  |         let proxyConfig = this._httpProxy; | ||||||
|  |         // fallback to http_proxy and https_proxy env
 | ||||||
|  |         let https_proxy = process.env[EnvironmentVariables.HTTPS_PROXY]; | ||||||
|  |         let http_proxy = process.env[EnvironmentVariables.HTTP_PROXY]; | ||||||
|  |         if (!proxyConfig) { | ||||||
|  |             if (https_proxy && usingSsl) { | ||||||
|  |                 proxyConfig = { | ||||||
|  |                     proxyUrl: https_proxy | ||||||
|  |                 }; | ||||||
|  |             } | ||||||
|  |             else if (http_proxy) { | ||||||
|  |                 proxyConfig = { | ||||||
|  |                     proxyUrl: http_proxy | ||||||
|  |                 }; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         let proxyUrl; | ||||||
|  |         let proxyAuth; | ||||||
|  |         if (proxyConfig) { | ||||||
|  |             if (proxyConfig.proxyUrl.length > 0) { | ||||||
|  |                 proxyUrl = url.parse(proxyConfig.proxyUrl); | ||||||
|  |             } | ||||||
|  |             if (proxyConfig.proxyUsername || proxyConfig.proxyPassword) { | ||||||
|  |                 proxyAuth = proxyConfig.proxyUsername + ":" + proxyConfig.proxyPassword; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return { proxyUrl: proxyUrl, proxyAuth: proxyAuth }; | ||||||
|  |     } | ||||||
|  |     _isBypassProxy(requestUrl) { | ||||||
|  |         if (!this._httpProxyBypassHosts) { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |         let bypass = false; | ||||||
|  |         this._httpProxyBypassHosts.forEach(bypassHost => { | ||||||
|  |             if (bypassHost.test(requestUrl)) { | ||||||
|  |                 bypass = true; | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |         return bypass; | ||||||
|  |     } | ||||||
|  |     _performExponentialBackoff(retryNumber) { | ||||||
|  |         retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); | ||||||
|  |         const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); | ||||||
|  |         return new Promise(resolve => setTimeout(() => resolve(), ms)); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.HttpClient = HttpClient; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 986: | ||||||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| @ -4946,860 +4500,32 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge | |||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
| const childProcess = __nested_webpack_require_142111__(129); | const tr = __webpack_require__(9); | ||||||
| const path = __nested_webpack_require_142111__(622); |  | ||||||
| const util_1 = __nested_webpack_require_142111__(669); |  | ||||||
| const ioUtil = __nested_webpack_require_142111__(960); |  | ||||||
| const exec = util_1.promisify(childProcess.exec); |  | ||||||
| /** | /** | ||||||
|  * Copies a file or folder. |  * Exec a command. | ||||||
|  * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js
 |  * Output will be streamed to the live console. | ||||||
|  |  * Returns promise with return code | ||||||
|  * |  * | ||||||
|  * @param     source    source path |  * @param     commandLine        command to execute (can include additional args). Must be correctly escaped. | ||||||
|  * @param     dest      destination path |  * @param     args               optional arguments for tool. Escaping is handled by the lib. | ||||||
|  * @param     options   optional. See CopyOptions. |  * @param     options            optional exec options.  See ExecOptions | ||||||
|  |  * @returns   Promise<number>    exit code | ||||||
|  */ |  */ | ||||||
| function cp(source, dest, options = {}) { | function exec(commandLine, args, options) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         const { force, recursive } = readCopyOptions(options); |         const commandArgs = tr.argStringToArray(commandLine); | ||||||
|         const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null; |         if (commandArgs.length === 0) { | ||||||
|         // Dest is an existing file, but not forcing
 |             throw new Error(`Parameter 'commandLine' cannot be null or empty.`); | ||||||
|         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); |  | ||||||
|         } |         } | ||||||
|  |         // 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.cp = cp; | exports.exec = exec; | ||||||
| /** | //# sourceMappingURL=exec.js.map
 | ||||||
|  * 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 task lib perspective,
 |  | ||||||
|             // it feels like we should not do this. Checking the current directory seems like more of a use
 |  | ||||||
|             // case of a shell, and the which() function exposed by the task lib should strive for consistency
 |  | ||||||
|             // across platforms.
 |  | ||||||
|             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
 |  | ||||||
| 
 |  | ||||||
| /***/ }) |  | ||||||
| 
 |  | ||||||
| /******/ }); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 357: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(357); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 417: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(417); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 605: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(605); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 614: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(614); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 622: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(622); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 631: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(631); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 669: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(669); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 747: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(747); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 835: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(835); |  | ||||||
| 
 |  | ||||||
| /***/ }) |  | ||||||
| 
 |  | ||||||
| /******/ }); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 357: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(357); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 417: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(417); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 605: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(605); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 614: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(614); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 622: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(622); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 631: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(631); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 669: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(669); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 747: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(747); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 835: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(835); |  | ||||||
| 
 |  | ||||||
| /***/ }) |  | ||||||
| 
 |  | ||||||
| /******/ }); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 357: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(357); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 417: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(417); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 605: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(605); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 614: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(614); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 622: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(622); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 631: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(631); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 669: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(669); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 747: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(747); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 835: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(835); |  | ||||||
| 
 |  | ||||||
| /***/ }) |  | ||||||
| 
 |  | ||||||
| /******/ }); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 357: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(357); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 417: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(417); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 605: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(605); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 614: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(614); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 622: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(622); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 631: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(631); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 669: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(669); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 747: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(747); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 835: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(835); |  | ||||||
| 
 |  | ||||||
| /***/ }) |  | ||||||
| 
 |  | ||||||
| /******/ }); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 357: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(357); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 417: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(417); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 605: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(605); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 614: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(614); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 622: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(622); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 631: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(631); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 669: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(669); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 747: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(747); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 835: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1759__(835); |  | ||||||
| 
 |  | ||||||
| /***/ }) |  | ||||||
| 
 |  | ||||||
| /******/ }); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 357: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_2019__(357); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 417: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_2019__(417); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 605: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_2019__(605); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 614: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_2019__(614); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 622: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_2019__(622); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 631: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_2019__(631); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 669: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_2019__(669); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 747: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_2019__(747); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 835: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_2019__(835); |  | ||||||
| 
 |  | ||||||
| /***/ }) |  | ||||||
| 
 |  | ||||||
| /******/ }); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 605: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1833__(605); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 614: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1833__(614); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 622: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1833__(622); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 631: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1833__(631); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 669: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1833__(669); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 747: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1833__(747); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 835: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __nested_webpack_require_1833__(835); |  | ||||||
| 
 |  | ||||||
| /***/ }) |  | ||||||
| 
 |  | ||||||
| /******/ }); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 357: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __webpack_require__(357); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 417: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __webpack_require__(417); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 605: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __webpack_require__(605); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 614: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __webpack_require__(614); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 622: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __webpack_require__(622); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 631: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __webpack_require__(631); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 669: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __webpack_require__(669); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 747: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __webpack_require__(747); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 835: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = __webpack_require__(835); |  | ||||||
| 
 |  | ||||||
| /***/ }) |  | ||||||
| 
 |  | ||||||
| /******/ }); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 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"); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 747: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = require("fs"); |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 835: |  | ||||||
| /***/ (function(module) { |  | ||||||
| 
 |  | ||||||
| module.exports = require("url"); |  | ||||||
| 
 | 
 | ||||||
| /***/ }) | /***/ }) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -51,7 +51,7 @@ function binDir(installDir: string): string { | |||||||
| // A particular version of PyPy may contain one or more versions of the Python interpreter.
 | // A particular version of PyPy may contain one or more versions of the Python interpreter.
 | ||||||
| // For example, PyPy 7.0 contains Python 2.7, 3.5, and 3.6-alpha.
 | // For example, PyPy 7.0 contains Python 2.7, 3.5, and 3.6-alpha.
 | ||||||
| // We only care about the Python version, so we don't use the PyPy version for the tool cache.
 | // We only care about the Python version, so we don't use the PyPy version for the tool cache.
 | ||||||
| function usePyPy(majorVersion: 2 | 3, architecture: string): void { | function usePyPy(majorVersion: 2 | 3, architecture: string): InstalledVersion { | ||||||
|   const findPyPy = tc.find.bind(undefined, 'PyPy', majorVersion.toString()); |   const findPyPy = tc.find.bind(undefined, 'PyPy', majorVersion.toString()); | ||||||
|   let installDir: string | null = findPyPy(architecture); |   let installDir: string | null = findPyPy(architecture); | ||||||
| 
 | 
 | ||||||
| @ -77,12 +77,17 @@ function usePyPy(majorVersion: 2 | 3, architecture: string): void { | |||||||
| 
 | 
 | ||||||
|   core.addPath(installDir); |   core.addPath(installDir); | ||||||
|   core.addPath(_binDir); |   core.addPath(_binDir); | ||||||
|  | 
 | ||||||
|  |   const impl = 'pypy' + majorVersion.toString(); | ||||||
|  |   core.setOutput('python-version', impl); | ||||||
|  | 
 | ||||||
|  |   return {impl: impl, version: versionFromPath(installDir)}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| async function useCpythonVersion( | async function useCpythonVersion( | ||||||
|   version: string, |   version: string, | ||||||
|   architecture: string |   architecture: string | ||||||
| ): Promise<void> { | ): Promise<InstalledVersion> { | ||||||
|   const desugaredVersionSpec = desugarDevVersion(version); |   const desugaredVersionSpec = desugarDevVersion(version); | ||||||
|   const semanticVersionSpec = pythonVersionToSemantic(desugaredVersionSpec); |   const semanticVersionSpec = pythonVersionToSemantic(desugaredVersionSpec); | ||||||
|   core.debug(`Semantic version spec of ${version} is ${semanticVersionSpec}`); |   core.debug(`Semantic version spec of ${version} is ${semanticVersionSpec}`); | ||||||
| @ -135,6 +140,11 @@ async function useCpythonVersion( | |||||||
|     core.addPath(userScriptsDir); |     core.addPath(userScriptsDir); | ||||||
|   } |   } | ||||||
|   // On Linux and macOS, pip will create the --user directory and add it to PATH as needed.
 |   // On Linux and macOS, pip will create the --user directory and add it to PATH as needed.
 | ||||||
|  | 
 | ||||||
|  |   const installed = versionFromPath(installDir); | ||||||
|  |   core.setOutput('python-version', installed); | ||||||
|  | 
 | ||||||
|  |   return {impl: 'CPython', version: installed}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** Convert versions like `3.8-dev` to a version like `>= 3.8.0-a0`. */ | /** Convert versions like `3.8-dev` to a version like `>= 3.8.0-a0`. */ | ||||||
| @ -147,6 +157,19 @@ function desugarDevVersion(versionSpec: string) { | |||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /** Extracts python version from install path from hosted tool cache as described in README.md */ | ||||||
|  | function versionFromPath(installDir: string) { | ||||||
|  |   const parts = installDir.split(path.sep); | ||||||
|  |   const idx = parts.findIndex(part => part === 'PyPy' || part === 'Python'); | ||||||
|  | 
 | ||||||
|  |   return parts[idx + 1] || ''; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface InstalledVersion { | ||||||
|  |   impl: string; | ||||||
|  |   version: string; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * Python's prelease versions look like `3.7.0b2`. |  * Python's prelease versions look like `3.7.0b2`. | ||||||
|  * This is the one part of Python versioning that does not look like semantic versioning, which specifies `3.7.0-b2`. |  * This is the one part of Python versioning that does not look like semantic versioning, which specifies `3.7.0-b2`. | ||||||
| @ -160,7 +183,7 @@ export function pythonVersionToSemantic(versionSpec: string) { | |||||||
| export async function findPythonVersion( | export async function findPythonVersion( | ||||||
|   version: string, |   version: string, | ||||||
|   architecture: string |   architecture: string | ||||||
| ): Promise<void> { | ): Promise<InstalledVersion> { | ||||||
|   switch (version.toUpperCase()) { |   switch (version.toUpperCase()) { | ||||||
|     case 'PYPY2': |     case 'PYPY2': | ||||||
|       return usePyPy(2, architecture); |       return usePyPy(2, architecture); | ||||||
|  | |||||||
| @ -7,7 +7,10 @@ async function run() { | |||||||
|     let version = core.getInput('python-version'); |     let version = core.getInput('python-version'); | ||||||
|     if (version) { |     if (version) { | ||||||
|       const arch: string = core.getInput('architecture', {required: true}); |       const arch: string = core.getInput('architecture', {required: true}); | ||||||
|       await finder.findPythonVersion(version, arch); |       const installed = await finder.findPythonVersion(version, arch); | ||||||
|  |       console.log( | ||||||
|  |         `Successfully setup ${installed.impl} (${installed.version}).` | ||||||
|  |       ); | ||||||
|     } |     } | ||||||
|     const matchersPath = path.join(__dirname, '..', '.github'); |     const matchersPath = path.join(__dirname, '..', '.github'); | ||||||
|     console.log(`##[add-matcher]${path.join(matchersPath, 'python.json')}`); |     console.log(`##[add-matcher]${path.join(matchersPath, 'python.json')}`); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user