4805 lines
		
	
	
		
			152 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			4805 lines
		
	
	
		
			152 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | module.exports = | ||
|  | /******/ (function(modules, runtime) { // webpackBootstrap
 | ||
|  | /******/ 	"use strict"; | ||
|  | /******/ 	// The module cache
 | ||
|  | /******/ 	var installedModules = {}; | ||
|  | /******/ | ||
|  | /******/ 	// The require function
 | ||
|  | /******/ 	function __webpack_require__(moduleId) { | ||
|  | /******/ | ||
|  | /******/ 		// Check if module is in cache
 | ||
|  | /******/ 		if(installedModules[moduleId]) { | ||
|  | /******/ 			return installedModules[moduleId].exports; | ||
|  | /******/ 		} | ||
|  | /******/ 		// Create a new module (and put it into the cache)
 | ||
|  | /******/ 		var module = installedModules[moduleId] = { | ||
|  | /******/ 			i: moduleId, | ||
|  | /******/ 			l: false, | ||
|  | /******/ 			exports: {} | ||
|  | /******/ 		}; | ||
|  | /******/ | ||
|  | /******/ 		// Execute the module function
 | ||
|  | /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); | ||
|  | /******/ | ||
|  | /******/ 		// Flag the module as loaded
 | ||
|  | /******/ 		module.l = true; | ||
|  | /******/ | ||
|  | /******/ 		// Return the exports of the module
 | ||
|  | /******/ 		return module.exports; | ||
|  | /******/ 	} | ||
|  | /******/ | ||
|  | /******/ | ||
|  | /******/ 	__webpack_require__.ab = __dirname + "/"; | ||
|  | /******/ | ||
|  | /******/ 	// the startup function
 | ||
|  | /******/ 	function startup() { | ||
|  | /******/ 		// Load entry module and return exports
 | ||
|  | /******/ 		return __webpack_require__(264); | ||
|  | /******/ 	}; | ||
|  | /******/ | ||
|  | /******/ 	// run startup
 | ||
|  | /******/ 	return startup(); | ||
|  | /******/ }) | ||
|  | /************************************************************************/ | ||
|  | /******/ ({ | ||
|  | 
 | ||
|  | /***/ 16: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("tls"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 87: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("os"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 129: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("child_process"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 211: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("https"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 264: | ||
|  | /***/ (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_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) { | ||
|  | 
 | ||
|  | exports = module.exports = SemVer | ||
|  | 
 | ||
|  | var debug | ||
|  | /* istanbul ignore next */ | ||
|  | if (typeof process === 'object' && | ||
|  |     process.env && | ||
|  |     process.env.NODE_DEBUG && | ||
|  |     /\bsemver\b/i.test(process.env.NODE_DEBUG)) { | ||
|  |   debug = function () { | ||
|  |     var args = Array.prototype.slice.call(arguments, 0) | ||
|  |     args.unshift('SEMVER') | ||
|  |     console.log.apply(console, args) | ||
|  |   } | ||
|  | } else { | ||
|  |   debug = function () {} | ||
|  | } | ||
|  | 
 | ||
|  | // Note: this is the semver.org version of the spec that it implements
 | ||
|  | // Not necessarily the package version of this code.
 | ||
|  | exports.SEMVER_SPEC_VERSION = '2.0.0' | ||
|  | 
 | ||
|  | var MAX_LENGTH = 256 | ||
|  | var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || | ||
|  |   /* istanbul ignore next */ 9007199254740991 | ||
|  | 
 | ||
|  | // Max safe segment length for coercion.
 | ||
|  | var MAX_SAFE_COMPONENT_LENGTH = 16 | ||
|  | 
 | ||
|  | // The actual regexps go on exports.re
 | ||
|  | var re = exports.re = [] | ||
|  | var src = exports.src = [] | ||
|  | var t = exports.tokens = {} | ||
|  | var R = 0 | ||
|  | 
 | ||
|  | function tok (n) { | ||
|  |   t[n] = R++ | ||
|  | } | ||
|  | 
 | ||
|  | // The following Regular Expressions can be used for tokenizing,
 | ||
|  | // validating, and parsing SemVer version strings.
 | ||
|  | 
 | ||
|  | // ## Numeric Identifier
 | ||
|  | // A single `0`, or a non-zero digit followed by zero or more digits.
 | ||
|  | 
 | ||
|  | tok('NUMERICIDENTIFIER') | ||
|  | src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*' | ||
|  | tok('NUMERICIDENTIFIERLOOSE') | ||
|  | src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+' | ||
|  | 
 | ||
|  | // ## Non-numeric Identifier
 | ||
|  | // Zero or more digits, followed by a letter or hyphen, and then zero or
 | ||
|  | // more letters, digits, or hyphens.
 | ||
|  | 
 | ||
|  | tok('NONNUMERICIDENTIFIER') | ||
|  | src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' | ||
|  | 
 | ||
|  | // ## Main Version
 | ||
|  | // Three dot-separated numeric identifiers.
 | ||
|  | 
 | ||
|  | tok('MAINVERSION') | ||
|  | src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + | ||
|  |                    '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + | ||
|  |                    '(' + src[t.NUMERICIDENTIFIER] + ')' | ||
|  | 
 | ||
|  | tok('MAINVERSIONLOOSE') | ||
|  | src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + | ||
|  |                         '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + | ||
|  |                         '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')' | ||
|  | 
 | ||
|  | // ## Pre-release Version Identifier
 | ||
|  | // A numeric identifier, or a non-numeric identifier.
 | ||
|  | 
 | ||
|  | tok('PRERELEASEIDENTIFIER') | ||
|  | src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] + | ||
|  |                             '|' + src[t.NONNUMERICIDENTIFIER] + ')' | ||
|  | 
 | ||
|  | tok('PRERELEASEIDENTIFIERLOOSE') | ||
|  | src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] + | ||
|  |                                  '|' + src[t.NONNUMERICIDENTIFIER] + ')' | ||
|  | 
 | ||
|  | // ## Pre-release Version
 | ||
|  | // Hyphen, followed by one or more dot-separated pre-release version
 | ||
|  | // identifiers.
 | ||
|  | 
 | ||
|  | tok('PRERELEASE') | ||
|  | src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] + | ||
|  |                   '(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))' | ||
|  | 
 | ||
|  | tok('PRERELEASELOOSE') | ||
|  | src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] + | ||
|  |                        '(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))' | ||
|  | 
 | ||
|  | // ## Build Metadata Identifier
 | ||
|  | // Any combination of digits, letters, or hyphens.
 | ||
|  | 
 | ||
|  | tok('BUILDIDENTIFIER') | ||
|  | src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+' | ||
|  | 
 | ||
|  | // ## Build Metadata
 | ||
|  | // Plus sign, followed by one or more period-separated build metadata
 | ||
|  | // identifiers.
 | ||
|  | 
 | ||
|  | tok('BUILD') | ||
|  | src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] + | ||
|  |              '(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))' | ||
|  | 
 | ||
|  | // ## Full Version String
 | ||
|  | // A main version, followed optionally by a pre-release version and
 | ||
|  | // build metadata.
 | ||
|  | 
 | ||
|  | // Note that the only major, minor, patch, and pre-release sections of
 | ||
|  | // the version string are capturing groups.  The build metadata is not a
 | ||
|  | // capturing group, because it should not ever be used in version
 | ||
|  | // comparison.
 | ||
|  | 
 | ||
|  | tok('FULL') | ||
|  | tok('FULLPLAIN') | ||
|  | src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] + | ||
|  |                   src[t.PRERELEASE] + '?' + | ||
|  |                   src[t.BUILD] + '?' | ||
|  | 
 | ||
|  | src[t.FULL] = '^' + src[t.FULLPLAIN] + '$' | ||
|  | 
 | ||
|  | // like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
 | ||
|  | // also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
 | ||
|  | // common in the npm registry.
 | ||
|  | tok('LOOSEPLAIN') | ||
|  | src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] + | ||
|  |                   src[t.PRERELEASELOOSE] + '?' + | ||
|  |                   src[t.BUILD] + '?' | ||
|  | 
 | ||
|  | tok('LOOSE') | ||
|  | src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$' | ||
|  | 
 | ||
|  | tok('GTLT') | ||
|  | src[t.GTLT] = '((?:<|>)?=?)' | ||
|  | 
 | ||
|  | // Something like "2.*" or "1.2.x".
 | ||
|  | // Note that "x.x" is a valid xRange identifer, meaning "any version"
 | ||
|  | // Only the first item is strictly required.
 | ||
|  | tok('XRANGEIDENTIFIERLOOSE') | ||
|  | src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' | ||
|  | tok('XRANGEIDENTIFIER') | ||
|  | src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*' | ||
|  | 
 | ||
|  | tok('XRANGEPLAIN') | ||
|  | src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' + | ||
|  |                    '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + | ||
|  |                    '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + | ||
|  |                    '(?:' + src[t.PRERELEASE] + ')?' + | ||
|  |                    src[t.BUILD] + '?' + | ||
|  |                    ')?)?' | ||
|  | 
 | ||
|  | tok('XRANGEPLAINLOOSE') | ||
|  | src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + | ||
|  |                         '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + | ||
|  |                         '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + | ||
|  |                         '(?:' + src[t.PRERELEASELOOSE] + ')?' + | ||
|  |                         src[t.BUILD] + '?' + | ||
|  |                         ')?)?' | ||
|  | 
 | ||
|  | tok('XRANGE') | ||
|  | src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$' | ||
|  | tok('XRANGELOOSE') | ||
|  | src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$' | ||
|  | 
 | ||
|  | // Coercion.
 | ||
|  | // Extract anything that could conceivably be a part of a valid semver
 | ||
|  | tok('COERCE') | ||
|  | src[t.COERCE] = '(^|[^\\d])' + | ||
|  |               '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + | ||
|  |               '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + | ||
|  |               '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + | ||
|  |               '(?:$|[^\\d])' | ||
|  | tok('COERCERTL') | ||
|  | re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g') | ||
|  | 
 | ||
|  | // Tilde ranges.
 | ||
|  | // Meaning is "reasonably at or greater than"
 | ||
|  | tok('LONETILDE') | ||
|  | src[t.LONETILDE] = '(?:~>?)' | ||
|  | 
 | ||
|  | tok('TILDETRIM') | ||
|  | src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+' | ||
|  | re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g') | ||
|  | var tildeTrimReplace = '$1~' | ||
|  | 
 | ||
|  | tok('TILDE') | ||
|  | src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$' | ||
|  | tok('TILDELOOSE') | ||
|  | src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$' | ||
|  | 
 | ||
|  | // Caret ranges.
 | ||
|  | // Meaning is "at least and backwards compatible with"
 | ||
|  | tok('LONECARET') | ||
|  | src[t.LONECARET] = '(?:\\^)' | ||
|  | 
 | ||
|  | tok('CARETTRIM') | ||
|  | src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+' | ||
|  | re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g') | ||
|  | var caretTrimReplace = '$1^' | ||
|  | 
 | ||
|  | tok('CARET') | ||
|  | src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$' | ||
|  | tok('CARETLOOSE') | ||
|  | src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$' | ||
|  | 
 | ||
|  | // A simple gt/lt/eq thing, or just "" to indicate "any version"
 | ||
|  | tok('COMPARATORLOOSE') | ||
|  | src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$' | ||
|  | tok('COMPARATOR') | ||
|  | src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$' | ||
|  | 
 | ||
|  | // An expression to strip any whitespace between the gtlt and the thing
 | ||
|  | // it modifies, so that `> 1.2.3` ==> `>1.2.3`
 | ||
|  | tok('COMPARATORTRIM') | ||
|  | src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] + | ||
|  |                       '\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')' | ||
|  | 
 | ||
|  | // this one has to use the /g flag
 | ||
|  | re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g') | ||
|  | var comparatorTrimReplace = '$1$2$3' | ||
|  | 
 | ||
|  | // Something like `1.2.3 - 1.2.4`
 | ||
|  | // Note that these all use the loose form, because they'll be
 | ||
|  | // checked against either the strict or loose comparator form
 | ||
|  | // later.
 | ||
|  | tok('HYPHENRANGE') | ||
|  | src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' + | ||
|  |                    '\\s+-\\s+' + | ||
|  |                    '(' + src[t.XRANGEPLAIN] + ')' + | ||
|  |                    '\\s*$' | ||
|  | 
 | ||
|  | tok('HYPHENRANGELOOSE') | ||
|  | src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' + | ||
|  |                         '\\s+-\\s+' + | ||
|  |                         '(' + src[t.XRANGEPLAINLOOSE] + ')' + | ||
|  |                         '\\s*$' | ||
|  | 
 | ||
|  | // Star ranges basically just allow anything at all.
 | ||
|  | tok('STAR') | ||
|  | src[t.STAR] = '(<|>)?=?\\s*\\*' | ||
|  | 
 | ||
|  | // Compile to actual regexp objects.
 | ||
|  | // All are flag-free, unless they were created above with a flag.
 | ||
|  | for (var i = 0; i < R; i++) { | ||
|  |   debug(i, src[i]) | ||
|  |   if (!re[i]) { | ||
|  |     re[i] = new RegExp(src[i]) | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | exports.parse = parse | ||
|  | function parse (version, options) { | ||
|  |   if (!options || typeof options !== 'object') { | ||
|  |     options = { | ||
|  |       loose: !!options, | ||
|  |       includePrerelease: false | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   if (version instanceof SemVer) { | ||
|  |     return version | ||
|  |   } | ||
|  | 
 | ||
|  |   if (typeof version !== 'string') { | ||
|  |     return null | ||
|  |   } | ||
|  | 
 | ||
|  |   if (version.length > MAX_LENGTH) { | ||
|  |     return null | ||
|  |   } | ||
|  | 
 | ||
|  |   var r = options.loose ? re[t.LOOSE] : re[t.FULL] | ||
|  |   if (!r.test(version)) { | ||
|  |     return null | ||
|  |   } | ||
|  | 
 | ||
|  |   try { | ||
|  |     return new SemVer(version, options) | ||
|  |   } catch (er) { | ||
|  |     return null | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | exports.valid = valid | ||
|  | function valid (version, options) { | ||
|  |   var v = parse(version, options) | ||
|  |   return v ? v.version : null | ||
|  | } | ||
|  | 
 | ||
|  | exports.clean = clean | ||
|  | function clean (version, options) { | ||
|  |   var s = parse(version.trim().replace(/^[=v]+/, ''), options) | ||
|  |   return s ? s.version : null | ||
|  | } | ||
|  | 
 | ||
|  | exports.SemVer = SemVer | ||
|  | 
 | ||
|  | function SemVer (version, options) { | ||
|  |   if (!options || typeof options !== 'object') { | ||
|  |     options = { | ||
|  |       loose: !!options, | ||
|  |       includePrerelease: false | ||
|  |     } | ||
|  |   } | ||
|  |   if (version instanceof SemVer) { | ||
|  |     if (version.loose === options.loose) { | ||
|  |       return version | ||
|  |     } else { | ||
|  |       version = version.version | ||
|  |     } | ||
|  |   } else if (typeof version !== 'string') { | ||
|  |     throw new TypeError('Invalid Version: ' + version) | ||
|  |   } | ||
|  | 
 | ||
|  |   if (version.length > MAX_LENGTH) { | ||
|  |     throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') | ||
|  |   } | ||
|  | 
 | ||
|  |   if (!(this instanceof SemVer)) { | ||
|  |     return new SemVer(version, options) | ||
|  |   } | ||
|  | 
 | ||
|  |   debug('SemVer', version, options) | ||
|  |   this.options = options | ||
|  |   this.loose = !!options.loose | ||
|  | 
 | ||
|  |   var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) | ||
|  | 
 | ||
|  |   if (!m) { | ||
|  |     throw new TypeError('Invalid Version: ' + version) | ||
|  |   } | ||
|  | 
 | ||
|  |   this.raw = version | ||
|  | 
 | ||
|  |   // these are actually numbers
 | ||
|  |   this.major = +m[1] | ||
|  |   this.minor = +m[2] | ||
|  |   this.patch = +m[3] | ||
|  | 
 | ||
|  |   if (this.major > MAX_SAFE_INTEGER || this.major < 0) { | ||
|  |     throw new TypeError('Invalid major version') | ||
|  |   } | ||
|  | 
 | ||
|  |   if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { | ||
|  |     throw new TypeError('Invalid minor version') | ||
|  |   } | ||
|  | 
 | ||
|  |   if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { | ||
|  |     throw new TypeError('Invalid patch version') | ||
|  |   } | ||
|  | 
 | ||
|  |   // numberify any prerelease numeric ids
 | ||
|  |   if (!m[4]) { | ||
|  |     this.prerelease = [] | ||
|  |   } else { | ||
|  |     this.prerelease = m[4].split('.').map(function (id) { | ||
|  |       if (/^[0-9]+$/.test(id)) { | ||
|  |         var num = +id | ||
|  |         if (num >= 0 && num < MAX_SAFE_INTEGER) { | ||
|  |           return num | ||
|  |         } | ||
|  |       } | ||
|  |       return id | ||
|  |     }) | ||
|  |   } | ||
|  | 
 | ||
|  |   this.build = m[5] ? m[5].split('.') : [] | ||
|  |   this.format() | ||
|  | } | ||
|  | 
 | ||
|  | SemVer.prototype.format = function () { | ||
|  |   this.version = this.major + '.' + this.minor + '.' + this.patch | ||
|  |   if (this.prerelease.length) { | ||
|  |     this.version += '-' + this.prerelease.join('.') | ||
|  |   } | ||
|  |   return this.version | ||
|  | } | ||
|  | 
 | ||
|  | SemVer.prototype.toString = function () { | ||
|  |   return this.version | ||
|  | } | ||
|  | 
 | ||
|  | SemVer.prototype.compare = function (other) { | ||
|  |   debug('SemVer.compare', this.version, this.options, other) | ||
|  |   if (!(other instanceof SemVer)) { | ||
|  |     other = new SemVer(other, this.options) | ||
|  |   } | ||
|  | 
 | ||
|  |   return this.compareMain(other) || this.comparePre(other) | ||
|  | } | ||
|  | 
 | ||
|  | SemVer.prototype.compareMain = function (other) { | ||
|  |   if (!(other instanceof SemVer)) { | ||
|  |     other = new SemVer(other, this.options) | ||
|  |   } | ||
|  | 
 | ||
|  |   return compareIdentifiers(this.major, other.major) || | ||
|  |          compareIdentifiers(this.minor, other.minor) || | ||
|  |          compareIdentifiers(this.patch, other.patch) | ||
|  | } | ||
|  | 
 | ||
|  | SemVer.prototype.comparePre = function (other) { | ||
|  |   if (!(other instanceof SemVer)) { | ||
|  |     other = new SemVer(other, this.options) | ||
|  |   } | ||
|  | 
 | ||
|  |   // NOT having a prerelease is > having one
 | ||
|  |   if (this.prerelease.length && !other.prerelease.length) { | ||
|  |     return -1 | ||
|  |   } else if (!this.prerelease.length && other.prerelease.length) { | ||
|  |     return 1 | ||
|  |   } else if (!this.prerelease.length && !other.prerelease.length) { | ||
|  |     return 0 | ||
|  |   } | ||
|  | 
 | ||
|  |   var i = 0 | ||
|  |   do { | ||
|  |     var a = this.prerelease[i] | ||
|  |     var b = other.prerelease[i] | ||
|  |     debug('prerelease compare', i, a, b) | ||
|  |     if (a === undefined && b === undefined) { | ||
|  |       return 0 | ||
|  |     } else if (b === undefined) { | ||
|  |       return 1 | ||
|  |     } else if (a === undefined) { | ||
|  |       return -1 | ||
|  |     } else if (a === b) { | ||
|  |       continue | ||
|  |     } else { | ||
|  |       return compareIdentifiers(a, b) | ||
|  |     } | ||
|  |   } while (++i) | ||
|  | } | ||
|  | 
 | ||
|  | SemVer.prototype.compareBuild = function (other) { | ||
|  |   if (!(other instanceof SemVer)) { | ||
|  |     other = new SemVer(other, this.options) | ||
|  |   } | ||
|  | 
 | ||
|  |   var i = 0 | ||
|  |   do { | ||
|  |     var a = this.build[i] | ||
|  |     var b = other.build[i] | ||
|  |     debug('prerelease compare', i, a, b) | ||
|  |     if (a === undefined && b === undefined) { | ||
|  |       return 0 | ||
|  |     } else if (b === undefined) { | ||
|  |       return 1 | ||
|  |     } else if (a === undefined) { | ||
|  |       return -1 | ||
|  |     } else if (a === b) { | ||
|  |       continue | ||
|  |     } else { | ||
|  |       return compareIdentifiers(a, b) | ||
|  |     } | ||
|  |   } while (++i) | ||
|  | } | ||
|  | 
 | ||
|  | // preminor will bump the version up to the next minor release, and immediately
 | ||
|  | // down to pre-release. premajor and prepatch work the same way.
 | ||
|  | SemVer.prototype.inc = function (release, identifier) { | ||
|  |   switch (release) { | ||
|  |     case 'premajor': | ||
|  |       this.prerelease.length = 0 | ||
|  |       this.patch = 0 | ||
|  |       this.minor = 0 | ||
|  |       this.major++ | ||
|  |       this.inc('pre', identifier) | ||
|  |       break | ||
|  |     case 'preminor': | ||
|  |       this.prerelease.length = 0 | ||
|  |       this.patch = 0 | ||
|  |       this.minor++ | ||
|  |       this.inc('pre', identifier) | ||
|  |       break | ||
|  |     case 'prepatch': | ||
|  |       // If this is already a prerelease, it will bump to the next version
 | ||
|  |       // drop any prereleases that might already exist, since they are not
 | ||
|  |       // relevant at this point.
 | ||
|  |       this.prerelease.length = 0 | ||
|  |       this.inc('patch', identifier) | ||
|  |       this.inc('pre', identifier) | ||
|  |       break | ||
|  |     // If the input is a non-prerelease version, this acts the same as
 | ||
|  |     // prepatch.
 | ||
|  |     case 'prerelease': | ||
|  |       if (this.prerelease.length === 0) { | ||
|  |         this.inc('patch', identifier) | ||
|  |       } | ||
|  |       this.inc('pre', identifier) | ||
|  |       break | ||
|  | 
 | ||
|  |     case 'major': | ||
|  |       // If this is a pre-major version, bump up to the same major version.
 | ||
|  |       // Otherwise increment major.
 | ||
|  |       // 1.0.0-5 bumps to 1.0.0
 | ||
|  |       // 1.1.0 bumps to 2.0.0
 | ||
|  |       if (this.minor !== 0 || | ||
|  |           this.patch !== 0 || | ||
|  |           this.prerelease.length === 0) { | ||
|  |         this.major++ | ||
|  |       } | ||
|  |       this.minor = 0 | ||
|  |       this.patch = 0 | ||
|  |       this.prerelease = [] | ||
|  |       break | ||
|  |     case 'minor': | ||
|  |       // If this is a pre-minor version, bump up to the same minor version.
 | ||
|  |       // Otherwise increment minor.
 | ||
|  |       // 1.2.0-5 bumps to 1.2.0
 | ||
|  |       // 1.2.1 bumps to 1.3.0
 | ||
|  |       if (this.patch !== 0 || this.prerelease.length === 0) { | ||
|  |         this.minor++ | ||
|  |       } | ||
|  |       this.patch = 0 | ||
|  |       this.prerelease = [] | ||
|  |       break | ||
|  |     case 'patch': | ||
|  |       // If this is not a pre-release version, it will increment the patch.
 | ||
|  |       // If it is a pre-release it will bump up to the same patch version.
 | ||
|  |       // 1.2.0-5 patches to 1.2.0
 | ||
|  |       // 1.2.0 patches to 1.2.1
 | ||
|  |       if (this.prerelease.length === 0) { | ||
|  |         this.patch++ | ||
|  |       } | ||
|  |       this.prerelease = [] | ||
|  |       break | ||
|  |     // This probably shouldn't be used publicly.
 | ||
|  |     // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
 | ||
|  |     case 'pre': | ||
|  |       if (this.prerelease.length === 0) { | ||
|  |         this.prerelease = [0] | ||
|  |       } else { | ||
|  |         var i = this.prerelease.length | ||
|  |         while (--i >= 0) { | ||
|  |           if (typeof this.prerelease[i] === 'number') { | ||
|  |             this.prerelease[i]++ | ||
|  |             i = -2 | ||
|  |           } | ||
|  |         } | ||
|  |         if (i === -1) { | ||
|  |           // didn't increment anything
 | ||
|  |           this.prerelease.push(0) | ||
|  |         } | ||
|  |       } | ||
|  |       if (identifier) { | ||
|  |         // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
 | ||
|  |         // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
 | ||
|  |         if (this.prerelease[0] === identifier) { | ||
|  |           if (isNaN(this.prerelease[1])) { | ||
|  |             this.prerelease = [identifier, 0] | ||
|  |           } | ||
|  |         } else { | ||
|  |           this.prerelease = [identifier, 0] | ||
|  |         } | ||
|  |       } | ||
|  |       break | ||
|  | 
 | ||
|  |     default: | ||
|  |       throw new Error('invalid increment argument: ' + release) | ||
|  |   } | ||
|  |   this.format() | ||
|  |   this.raw = this.version | ||
|  |   return this | ||
|  | } | ||
|  | 
 | ||
|  | exports.inc = inc | ||
|  | function inc (version, release, loose, identifier) { | ||
|  |   if (typeof (loose) === 'string') { | ||
|  |     identifier = loose | ||
|  |     loose = undefined | ||
|  |   } | ||
|  | 
 | ||
|  |   try { | ||
|  |     return new SemVer(version, loose).inc(release, identifier).version | ||
|  |   } catch (er) { | ||
|  |     return null | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | exports.diff = diff | ||
|  | function diff (version1, version2) { | ||
|  |   if (eq(version1, version2)) { | ||
|  |     return null | ||
|  |   } else { | ||
|  |     var v1 = parse(version1) | ||
|  |     var v2 = parse(version2) | ||
|  |     var prefix = '' | ||
|  |     if (v1.prerelease.length || v2.prerelease.length) { | ||
|  |       prefix = 'pre' | ||
|  |       var defaultResult = 'prerelease' | ||
|  |     } | ||
|  |     for (var key in v1) { | ||
|  |       if (key === 'major' || key === 'minor' || key === 'patch') { | ||
|  |         if (v1[key] !== v2[key]) { | ||
|  |           return prefix + key | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |     return defaultResult // may be undefined
 | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | exports.compareIdentifiers = compareIdentifiers | ||
|  | 
 | ||
|  | var numeric = /^[0-9]+$/ | ||
|  | function compareIdentifiers (a, b) { | ||
|  |   var anum = numeric.test(a) | ||
|  |   var bnum = numeric.test(b) | ||
|  | 
 | ||
|  |   if (anum && bnum) { | ||
|  |     a = +a | ||
|  |     b = +b | ||
|  |   } | ||
|  | 
 | ||
|  |   return a === b ? 0 | ||
|  |     : (anum && !bnum) ? -1 | ||
|  |     : (bnum && !anum) ? 1 | ||
|  |     : a < b ? -1 | ||
|  |     : 1 | ||
|  | } | ||
|  | 
 | ||
|  | exports.rcompareIdentifiers = rcompareIdentifiers | ||
|  | function rcompareIdentifiers (a, b) { | ||
|  |   return compareIdentifiers(b, a) | ||
|  | } | ||
|  | 
 | ||
|  | exports.major = major | ||
|  | function major (a, loose) { | ||
|  |   return new SemVer(a, loose).major | ||
|  | } | ||
|  | 
 | ||
|  | exports.minor = minor | ||
|  | function minor (a, loose) { | ||
|  |   return new SemVer(a, loose).minor | ||
|  | } | ||
|  | 
 | ||
|  | exports.patch = patch | ||
|  | function patch (a, loose) { | ||
|  |   return new SemVer(a, loose).patch | ||
|  | } | ||
|  | 
 | ||
|  | exports.compare = compare | ||
|  | function compare (a, b, loose) { | ||
|  |   return new SemVer(a, loose).compare(new SemVer(b, loose)) | ||
|  | } | ||
|  | 
 | ||
|  | exports.compareLoose = compareLoose | ||
|  | function compareLoose (a, b) { | ||
|  |   return compare(a, b, true) | ||
|  | } | ||
|  | 
 | ||
|  | exports.compareBuild = compareBuild | ||
|  | function compareBuild (a, b, loose) { | ||
|  |   var versionA = new SemVer(a, loose) | ||
|  |   var versionB = new SemVer(b, loose) | ||
|  |   return versionA.compare(versionB) || versionA.compareBuild(versionB) | ||
|  | } | ||
|  | 
 | ||
|  | exports.rcompare = rcompare | ||
|  | function rcompare (a, b, loose) { | ||
|  |   return compare(b, a, loose) | ||
|  | } | ||
|  | 
 | ||
|  | exports.sort = sort | ||
|  | function sort (list, loose) { | ||
|  |   return list.sort(function (a, b) { | ||
|  |     return exports.compareBuild(a, b, loose) | ||
|  |   }) | ||
|  | } | ||
|  | 
 | ||
|  | exports.rsort = rsort | ||
|  | function rsort (list, loose) { | ||
|  |   return list.sort(function (a, b) { | ||
|  |     return exports.compareBuild(b, a, loose) | ||
|  |   }) | ||
|  | } | ||
|  | 
 | ||
|  | exports.gt = gt | ||
|  | function gt (a, b, loose) { | ||
|  |   return compare(a, b, loose) > 0 | ||
|  | } | ||
|  | 
 | ||
|  | exports.lt = lt | ||
|  | function lt (a, b, loose) { | ||
|  |   return compare(a, b, loose) < 0 | ||
|  | } | ||
|  | 
 | ||
|  | exports.eq = eq | ||
|  | function eq (a, b, loose) { | ||
|  |   return compare(a, b, loose) === 0 | ||
|  | } | ||
|  | 
 | ||
|  | exports.neq = neq | ||
|  | function neq (a, b, loose) { | ||
|  |   return compare(a, b, loose) !== 0 | ||
|  | } | ||
|  | 
 | ||
|  | exports.gte = gte | ||
|  | function gte (a, b, loose) { | ||
|  |   return compare(a, b, loose) >= 0 | ||
|  | } | ||
|  | 
 | ||
|  | exports.lte = lte | ||
|  | function lte (a, b, loose) { | ||
|  |   return compare(a, b, loose) <= 0 | ||
|  | } | ||
|  | 
 | ||
|  | exports.cmp = cmp | ||
|  | function cmp (a, op, b, loose) { | ||
|  |   switch (op) { | ||
|  |     case '===': | ||
|  |       if (typeof a === 'object') | ||
|  |         a = a.version | ||
|  |       if (typeof b === 'object') | ||
|  |         b = b.version | ||
|  |       return a === b | ||
|  | 
 | ||
|  |     case '!==': | ||
|  |       if (typeof a === 'object') | ||
|  |         a = a.version | ||
|  |       if (typeof b === 'object') | ||
|  |         b = b.version | ||
|  |       return a !== b | ||
|  | 
 | ||
|  |     case '': | ||
|  |     case '=': | ||
|  |     case '==': | ||
|  |       return eq(a, b, loose) | ||
|  | 
 | ||
|  |     case '!=': | ||
|  |       return neq(a, b, loose) | ||
|  | 
 | ||
|  |     case '>': | ||
|  |       return gt(a, b, loose) | ||
|  | 
 | ||
|  |     case '>=': | ||
|  |       return gte(a, b, loose) | ||
|  | 
 | ||
|  |     case '<': | ||
|  |       return lt(a, b, loose) | ||
|  | 
 | ||
|  |     case '<=': | ||
|  |       return lte(a, b, loose) | ||
|  | 
 | ||
|  |     default: | ||
|  |       throw new TypeError('Invalid operator: ' + op) | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | exports.Comparator = Comparator | ||
|  | function Comparator (comp, options) { | ||
|  |   if (!options || typeof options !== 'object') { | ||
|  |     options = { | ||
|  |       loose: !!options, | ||
|  |       includePrerelease: false | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   if (comp instanceof Comparator) { | ||
|  |     if (comp.loose === !!options.loose) { | ||
|  |       return comp | ||
|  |     } else { | ||
|  |       comp = comp.value | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   if (!(this instanceof Comparator)) { | ||
|  |     return new Comparator(comp, options) | ||
|  |   } | ||
|  | 
 | ||
|  |   debug('comparator', comp, options) | ||
|  |   this.options = options | ||
|  |   this.loose = !!options.loose | ||
|  |   this.parse(comp) | ||
|  | 
 | ||
|  |   if (this.semver === ANY) { | ||
|  |     this.value = '' | ||
|  |   } else { | ||
|  |     this.value = this.operator + this.semver.version | ||
|  |   } | ||
|  | 
 | ||
|  |   debug('comp', this) | ||
|  | } | ||
|  | 
 | ||
|  | var ANY = {} | ||
|  | Comparator.prototype.parse = function (comp) { | ||
|  |   var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] | ||
|  |   var m = comp.match(r) | ||
|  | 
 | ||
|  |   if (!m) { | ||
|  |     throw new TypeError('Invalid comparator: ' + comp) | ||
|  |   } | ||
|  | 
 | ||
|  |   this.operator = m[1] !== undefined ? m[1] : '' | ||
|  |   if (this.operator === '=') { | ||
|  |     this.operator = '' | ||
|  |   } | ||
|  | 
 | ||
|  |   // if it literally is just '>' or '' then allow anything.
 | ||
|  |   if (!m[2]) { | ||
|  |     this.semver = ANY | ||
|  |   } else { | ||
|  |     this.semver = new SemVer(m[2], this.options.loose) | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | Comparator.prototype.toString = function () { | ||
|  |   return this.value | ||
|  | } | ||
|  | 
 | ||
|  | Comparator.prototype.test = function (version) { | ||
|  |   debug('Comparator.test', version, this.options.loose) | ||
|  | 
 | ||
|  |   if (this.semver === ANY || version === ANY) { | ||
|  |     return true | ||
|  |   } | ||
|  | 
 | ||
|  |   if (typeof version === 'string') { | ||
|  |     try { | ||
|  |       version = new SemVer(version, this.options) | ||
|  |     } catch (er) { | ||
|  |       return false | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return cmp(version, this.operator, this.semver, this.options) | ||
|  | } | ||
|  | 
 | ||
|  | Comparator.prototype.intersects = function (comp, options) { | ||
|  |   if (!(comp instanceof Comparator)) { | ||
|  |     throw new TypeError('a Comparator is required') | ||
|  |   } | ||
|  | 
 | ||
|  |   if (!options || typeof options !== 'object') { | ||
|  |     options = { | ||
|  |       loose: !!options, | ||
|  |       includePrerelease: false | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   var rangeTmp | ||
|  | 
 | ||
|  |   if (this.operator === '') { | ||
|  |     if (this.value === '') { | ||
|  |       return true | ||
|  |     } | ||
|  |     rangeTmp = new Range(comp.value, options) | ||
|  |     return satisfies(this.value, rangeTmp, options) | ||
|  |   } else if (comp.operator === '') { | ||
|  |     if (comp.value === '') { | ||
|  |       return true | ||
|  |     } | ||
|  |     rangeTmp = new Range(this.value, options) | ||
|  |     return satisfies(comp.semver, rangeTmp, options) | ||
|  |   } | ||
|  | 
 | ||
|  |   var sameDirectionIncreasing = | ||
|  |     (this.operator === '>=' || this.operator === '>') && | ||
|  |     (comp.operator === '>=' || comp.operator === '>') | ||
|  |   var sameDirectionDecreasing = | ||
|  |     (this.operator === '<=' || this.operator === '<') && | ||
|  |     (comp.operator === '<=' || comp.operator === '<') | ||
|  |   var sameSemVer = this.semver.version === comp.semver.version | ||
|  |   var differentDirectionsInclusive = | ||
|  |     (this.operator === '>=' || this.operator === '<=') && | ||
|  |     (comp.operator === '>=' || comp.operator === '<=') | ||
|  |   var oppositeDirectionsLessThan = | ||
|  |     cmp(this.semver, '<', comp.semver, options) && | ||
|  |     ((this.operator === '>=' || this.operator === '>') && | ||
|  |     (comp.operator === '<=' || comp.operator === '<')) | ||
|  |   var oppositeDirectionsGreaterThan = | ||
|  |     cmp(this.semver, '>', comp.semver, options) && | ||
|  |     ((this.operator === '<=' || this.operator === '<') && | ||
|  |     (comp.operator === '>=' || comp.operator === '>')) | ||
|  | 
 | ||
|  |   return sameDirectionIncreasing || sameDirectionDecreasing || | ||
|  |     (sameSemVer && differentDirectionsInclusive) || | ||
|  |     oppositeDirectionsLessThan || oppositeDirectionsGreaterThan | ||
|  | } | ||
|  | 
 | ||
|  | exports.Range = Range | ||
|  | function Range (range, options) { | ||
|  |   if (!options || typeof options !== 'object') { | ||
|  |     options = { | ||
|  |       loose: !!options, | ||
|  |       includePrerelease: false | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   if (range instanceof Range) { | ||
|  |     if (range.loose === !!options.loose && | ||
|  |         range.includePrerelease === !!options.includePrerelease) { | ||
|  |       return range | ||
|  |     } else { | ||
|  |       return new Range(range.raw, options) | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   if (range instanceof Comparator) { | ||
|  |     return new Range(range.value, options) | ||
|  |   } | ||
|  | 
 | ||
|  |   if (!(this instanceof Range)) { | ||
|  |     return new Range(range, options) | ||
|  |   } | ||
|  | 
 | ||
|  |   this.options = options | ||
|  |   this.loose = !!options.loose | ||
|  |   this.includePrerelease = !!options.includePrerelease | ||
|  | 
 | ||
|  |   // First, split based on boolean or ||
 | ||
|  |   this.raw = range | ||
|  |   this.set = range.split(/\s*\|\|\s*/).map(function (range) { | ||
|  |     return this.parseRange(range.trim()) | ||
|  |   }, this).filter(function (c) { | ||
|  |     // throw out any that are not relevant for whatever reason
 | ||
|  |     return c.length | ||
|  |   }) | ||
|  | 
 | ||
|  |   if (!this.set.length) { | ||
|  |     throw new TypeError('Invalid SemVer Range: ' + range) | ||
|  |   } | ||
|  | 
 | ||
|  |   this.format() | ||
|  | } | ||
|  | 
 | ||
|  | Range.prototype.format = function () { | ||
|  |   this.range = this.set.map(function (comps) { | ||
|  |     return comps.join(' ').trim() | ||
|  |   }).join('||').trim() | ||
|  |   return this.range | ||
|  | } | ||
|  | 
 | ||
|  | Range.prototype.toString = function () { | ||
|  |   return this.range | ||
|  | } | ||
|  | 
 | ||
|  | Range.prototype.parseRange = function (range) { | ||
|  |   var loose = this.options.loose | ||
|  |   range = range.trim() | ||
|  |   // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
 | ||
|  |   var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] | ||
|  |   range = range.replace(hr, hyphenReplace) | ||
|  |   debug('hyphen replace', range) | ||
|  |   // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
 | ||
|  |   range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) | ||
|  |   debug('comparator trim', range, re[t.COMPARATORTRIM]) | ||
|  | 
 | ||
|  |   // `~ 1.2.3` => `~1.2.3`
 | ||
|  |   range = range.replace(re[t.TILDETRIM], tildeTrimReplace) | ||
|  | 
 | ||
|  |   // `^ 1.2.3` => `^1.2.3`
 | ||
|  |   range = range.replace(re[t.CARETTRIM], caretTrimReplace) | ||
|  | 
 | ||
|  |   // normalize spaces
 | ||
|  |   range = range.split(/\s+/).join(' ') | ||
|  | 
 | ||
|  |   // At this point, the range is completely trimmed and
 | ||
|  |   // ready to be split into comparators.
 | ||
|  | 
 | ||
|  |   var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] | ||
|  |   var set = range.split(' ').map(function (comp) { | ||
|  |     return parseComparator(comp, this.options) | ||
|  |   }, this).join(' ').split(/\s+/) | ||
|  |   if (this.options.loose) { | ||
|  |     // in loose mode, throw out any that are not valid comparators
 | ||
|  |     set = set.filter(function (comp) { | ||
|  |       return !!comp.match(compRe) | ||
|  |     }) | ||
|  |   } | ||
|  |   set = set.map(function (comp) { | ||
|  |     return new Comparator(comp, this.options) | ||
|  |   }, this) | ||
|  | 
 | ||
|  |   return set | ||
|  | } | ||
|  | 
 | ||
|  | Range.prototype.intersects = function (range, options) { | ||
|  |   if (!(range instanceof Range)) { | ||
|  |     throw new TypeError('a Range is required') | ||
|  |   } | ||
|  | 
 | ||
|  |   return this.set.some(function (thisComparators) { | ||
|  |     return ( | ||
|  |       isSatisfiable(thisComparators, options) && | ||
|  |       range.set.some(function (rangeComparators) { | ||
|  |         return ( | ||
|  |           isSatisfiable(rangeComparators, options) && | ||
|  |           thisComparators.every(function (thisComparator) { | ||
|  |             return rangeComparators.every(function (rangeComparator) { | ||
|  |               return thisComparator.intersects(rangeComparator, options) | ||
|  |             }) | ||
|  |           }) | ||
|  |         ) | ||
|  |       }) | ||
|  |     ) | ||
|  |   }) | ||
|  | } | ||
|  | 
 | ||
|  | // take a set of comparators and determine whether there
 | ||
|  | // exists a version which can satisfy it
 | ||
|  | function isSatisfiable (comparators, options) { | ||
|  |   var result = true | ||
|  |   var remainingComparators = comparators.slice() | ||
|  |   var testComparator = remainingComparators.pop() | ||
|  | 
 | ||
|  |   while (result && remainingComparators.length) { | ||
|  |     result = remainingComparators.every(function (otherComparator) { | ||
|  |       return testComparator.intersects(otherComparator, options) | ||
|  |     }) | ||
|  | 
 | ||
|  |     testComparator = remainingComparators.pop() | ||
|  |   } | ||
|  | 
 | ||
|  |   return result | ||
|  | } | ||
|  | 
 | ||
|  | // Mostly just for testing and legacy API reasons
 | ||
|  | exports.toComparators = toComparators | ||
|  | function toComparators (range, options) { | ||
|  |   return new Range(range, options).set.map(function (comp) { | ||
|  |     return comp.map(function (c) { | ||
|  |       return c.value | ||
|  |     }).join(' ').trim().split(' ') | ||
|  |   }) | ||
|  | } | ||
|  | 
 | ||
|  | // comprised of xranges, tildes, stars, and gtlt's at this point.
 | ||
|  | // already replaced the hyphen ranges
 | ||
|  | // turn into a set of JUST comparators.
 | ||
|  | function parseComparator (comp, options) { | ||
|  |   debug('comp', comp, options) | ||
|  |   comp = replaceCarets(comp, options) | ||
|  |   debug('caret', comp) | ||
|  |   comp = replaceTildes(comp, options) | ||
|  |   debug('tildes', comp) | ||
|  |   comp = replaceXRanges(comp, options) | ||
|  |   debug('xrange', comp) | ||
|  |   comp = replaceStars(comp, options) | ||
|  |   debug('stars', comp) | ||
|  |   return comp | ||
|  | } | ||
|  | 
 | ||
|  | function isX (id) { | ||
|  |   return !id || id.toLowerCase() === 'x' || id === '*' | ||
|  | } | ||
|  | 
 | ||
|  | // ~, ~> --> * (any, kinda silly)
 | ||
|  | // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
 | ||
|  | // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
 | ||
|  | // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
 | ||
|  | // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
 | ||
|  | // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
 | ||
|  | function replaceTildes (comp, options) { | ||
|  |   return comp.trim().split(/\s+/).map(function (comp) { | ||
|  |     return replaceTilde(comp, options) | ||
|  |   }).join(' ') | ||
|  | } | ||
|  | 
 | ||
|  | function replaceTilde (comp, options) { | ||
|  |   var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] | ||
|  |   return comp.replace(r, function (_, M, m, p, pr) { | ||
|  |     debug('tilde', comp, _, M, m, p, pr) | ||
|  |     var ret | ||
|  | 
 | ||
|  |     if (isX(M)) { | ||
|  |       ret = '' | ||
|  |     } else if (isX(m)) { | ||
|  |       ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' | ||
|  |     } else if (isX(p)) { | ||
|  |       // ~1.2 == >=1.2.0 <1.3.0
 | ||
|  |       ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' | ||
|  |     } else if (pr) { | ||
|  |       debug('replaceTilde pr', pr) | ||
|  |       ret = '>=' + M + '.' + m + '.' + p + '-' + pr + | ||
|  |             ' <' + M + '.' + (+m + 1) + '.0' | ||
|  |     } else { | ||
|  |       // ~1.2.3 == >=1.2.3 <1.3.0
 | ||
|  |       ret = '>=' + M + '.' + m + '.' + p + | ||
|  |             ' <' + M + '.' + (+m + 1) + '.0' | ||
|  |     } | ||
|  | 
 | ||
|  |     debug('tilde return', ret) | ||
|  |     return ret | ||
|  |   }) | ||
|  | } | ||
|  | 
 | ||
|  | // ^ --> * (any, kinda silly)
 | ||
|  | // ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
 | ||
|  | // ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
 | ||
|  | // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
 | ||
|  | // ^1.2.3 --> >=1.2.3 <2.0.0
 | ||
|  | // ^1.2.0 --> >=1.2.0 <2.0.0
 | ||
|  | function replaceCarets (comp, options) { | ||
|  |   return comp.trim().split(/\s+/).map(function (comp) { | ||
|  |     return replaceCaret(comp, options) | ||
|  |   }).join(' ') | ||
|  | } | ||
|  | 
 | ||
|  | function replaceCaret (comp, options) { | ||
|  |   debug('caret', comp, options) | ||
|  |   var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] | ||
|  |   return comp.replace(r, function (_, M, m, p, pr) { | ||
|  |     debug('caret', comp, _, M, m, p, pr) | ||
|  |     var ret | ||
|  | 
 | ||
|  |     if (isX(M)) { | ||
|  |       ret = '' | ||
|  |     } else if (isX(m)) { | ||
|  |       ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' | ||
|  |     } else if (isX(p)) { | ||
|  |       if (M === '0') { | ||
|  |         ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' | ||
|  |       } else { | ||
|  |         ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' | ||
|  |       } | ||
|  |     } else if (pr) { | ||
|  |       debug('replaceCaret pr', pr) | ||
|  |       if (M === '0') { | ||
|  |         if (m === '0') { | ||
|  |           ret = '>=' + M + '.' + m + '.' + p + '-' + pr + | ||
|  |                 ' <' + M + '.' + m + '.' + (+p + 1) | ||
|  |         } else { | ||
|  |           ret = '>=' + M + '.' + m + '.' + p + '-' + pr + | ||
|  |                 ' <' + M + '.' + (+m + 1) + '.0' | ||
|  |         } | ||
|  |       } else { | ||
|  |         ret = '>=' + M + '.' + m + '.' + p + '-' + pr + | ||
|  |               ' <' + (+M + 1) + '.0.0' | ||
|  |       } | ||
|  |     } else { | ||
|  |       debug('no pr') | ||
|  |       if (M === '0') { | ||
|  |         if (m === '0') { | ||
|  |           ret = '>=' + M + '.' + m + '.' + p + | ||
|  |                 ' <' + M + '.' + m + '.' + (+p + 1) | ||
|  |         } else { | ||
|  |           ret = '>=' + M + '.' + m + '.' + p + | ||
|  |                 ' <' + M + '.' + (+m + 1) + '.0' | ||
|  |         } | ||
|  |       } else { | ||
|  |         ret = '>=' + M + '.' + m + '.' + p + | ||
|  |               ' <' + (+M + 1) + '.0.0' | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     debug('caret return', ret) | ||
|  |     return ret | ||
|  |   }) | ||
|  | } | ||
|  | 
 | ||
|  | function replaceXRanges (comp, options) { | ||
|  |   debug('replaceXRanges', comp, options) | ||
|  |   return comp.split(/\s+/).map(function (comp) { | ||
|  |     return replaceXRange(comp, options) | ||
|  |   }).join(' ') | ||
|  | } | ||
|  | 
 | ||
|  | function replaceXRange (comp, options) { | ||
|  |   comp = comp.trim() | ||
|  |   var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] | ||
|  |   return comp.replace(r, function (ret, gtlt, M, m, p, pr) { | ||
|  |     debug('xRange', comp, ret, gtlt, M, m, p, pr) | ||
|  |     var xM = isX(M) | ||
|  |     var xm = xM || isX(m) | ||
|  |     var xp = xm || isX(p) | ||
|  |     var anyX = xp | ||
|  | 
 | ||
|  |     if (gtlt === '=' && anyX) { | ||
|  |       gtlt = '' | ||
|  |     } | ||
|  | 
 | ||
|  |     // if we're including prereleases in the match, then we need
 | ||
|  |     // to fix this to -0, the lowest possible prerelease value
 | ||
|  |     pr = options.includePrerelease ? '-0' : '' | ||
|  | 
 | ||
|  |     if (xM) { | ||
|  |       if (gtlt === '>' || gtlt === '<') { | ||
|  |         // nothing is allowed
 | ||
|  |         ret = '<0.0.0-0' | ||
|  |       } else { | ||
|  |         // nothing is forbidden
 | ||
|  |         ret = '*' | ||
|  |       } | ||
|  |     } else if (gtlt && anyX) { | ||
|  |       // we know patch is an x, because we have any x at all.
 | ||
|  |       // replace X with 0
 | ||
|  |       if (xm) { | ||
|  |         m = 0 | ||
|  |       } | ||
|  |       p = 0 | ||
|  | 
 | ||
|  |       if (gtlt === '>') { | ||
|  |         // >1 => >=2.0.0
 | ||
|  |         // >1.2 => >=1.3.0
 | ||
|  |         // >1.2.3 => >= 1.2.4
 | ||
|  |         gtlt = '>=' | ||
|  |         if (xm) { | ||
|  |           M = +M + 1 | ||
|  |           m = 0 | ||
|  |           p = 0 | ||
|  |         } else { | ||
|  |           m = +m + 1 | ||
|  |           p = 0 | ||
|  |         } | ||
|  |       } else if (gtlt === '<=') { | ||
|  |         // <=0.7.x is actually <0.8.0, since any 0.7.x should
 | ||
|  |         // pass.  Similarly, <=7.x is actually <8.0.0, etc.
 | ||
|  |         gtlt = '<' | ||
|  |         if (xm) { | ||
|  |           M = +M + 1 | ||
|  |         } else { | ||
|  |           m = +m + 1 | ||
|  |         } | ||
|  |       } | ||
|  | 
 | ||
|  |       ret = gtlt + M + '.' + m + '.' + p + pr | ||
|  |     } else if (xm) { | ||
|  |       ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr | ||
|  |     } else if (xp) { | ||
|  |       ret = '>=' + M + '.' + m + '.0' + pr + | ||
|  |         ' <' + M + '.' + (+m + 1) + '.0' + pr | ||
|  |     } | ||
|  | 
 | ||
|  |     debug('xRange return', ret) | ||
|  | 
 | ||
|  |     return ret | ||
|  |   }) | ||
|  | } | ||
|  | 
 | ||
|  | // Because * is AND-ed with everything else in the comparator,
 | ||
|  | // and '' means "any version", just remove the *s entirely.
 | ||
|  | function replaceStars (comp, options) { | ||
|  |   debug('replaceStars', comp, options) | ||
|  |   // Looseness is ignored here.  star is always as loose as it gets!
 | ||
|  |   return comp.trim().replace(re[t.STAR], '') | ||
|  | } | ||
|  | 
 | ||
|  | // This function is passed to string.replace(re[t.HYPHENRANGE])
 | ||
|  | // M, m, patch, prerelease, build
 | ||
|  | // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
 | ||
|  | // 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
 | ||
|  | // 1.2 - 3.4 => >=1.2.0 <3.5.0
 | ||
|  | function hyphenReplace ($0, | ||
|  |   from, fM, fm, fp, fpr, fb, | ||
|  |   to, tM, tm, tp, tpr, tb) { | ||
|  |   if (isX(fM)) { | ||
|  |     from = '' | ||
|  |   } else if (isX(fm)) { | ||
|  |     from = '>=' + fM + '.0.0' | ||
|  |   } else if (isX(fp)) { | ||
|  |     from = '>=' + fM + '.' + fm + '.0' | ||
|  |   } else { | ||
|  |     from = '>=' + from | ||
|  |   } | ||
|  | 
 | ||
|  |   if (isX(tM)) { | ||
|  |     to = '' | ||
|  |   } else if (isX(tm)) { | ||
|  |     to = '<' + (+tM + 1) + '.0.0' | ||
|  |   } else if (isX(tp)) { | ||
|  |     to = '<' + tM + '.' + (+tm + 1) + '.0' | ||
|  |   } else if (tpr) { | ||
|  |     to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr | ||
|  |   } else { | ||
|  |     to = '<=' + to | ||
|  |   } | ||
|  | 
 | ||
|  |   return (from + ' ' + to).trim() | ||
|  | } | ||
|  | 
 | ||
|  | // if ANY of the sets match ALL of its comparators, then pass
 | ||
|  | Range.prototype.test = function (version) { | ||
|  |   if (!version) { | ||
|  |     return false | ||
|  |   } | ||
|  | 
 | ||
|  |   if (typeof version === 'string') { | ||
|  |     try { | ||
|  |       version = new SemVer(version, this.options) | ||
|  |     } catch (er) { | ||
|  |       return false | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   for (var i = 0; i < this.set.length; i++) { | ||
|  |     if (testSet(this.set[i], version, this.options)) { | ||
|  |       return true | ||
|  |     } | ||
|  |   } | ||
|  |   return false | ||
|  | } | ||
|  | 
 | ||
|  | function testSet (set, version, options) { | ||
|  |   for (var i = 0; i < set.length; i++) { | ||
|  |     if (!set[i].test(version)) { | ||
|  |       return false | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   if (version.prerelease.length && !options.includePrerelease) { | ||
|  |     // Find the set of versions that are allowed to have prereleases
 | ||
|  |     // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
 | ||
|  |     // That should allow `1.2.3-pr.2` to pass.
 | ||
|  |     // However, `1.2.4-alpha.notready` should NOT be allowed,
 | ||
|  |     // even though it's within the range set by the comparators.
 | ||
|  |     for (i = 0; i < set.length; i++) { | ||
|  |       debug(set[i].semver) | ||
|  |       if (set[i].semver === ANY) { | ||
|  |         continue | ||
|  |       } | ||
|  | 
 | ||
|  |       if (set[i].semver.prerelease.length > 0) { | ||
|  |         var allowed = set[i].semver | ||
|  |         if (allowed.major === version.major && | ||
|  |             allowed.minor === version.minor && | ||
|  |             allowed.patch === version.patch) { | ||
|  |           return true | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     // Version has a -pre, but it's not one of the ones we like.
 | ||
|  |     return false | ||
|  |   } | ||
|  | 
 | ||
|  |   return true | ||
|  | } | ||
|  | 
 | ||
|  | exports.satisfies = satisfies | ||
|  | function satisfies (version, range, options) { | ||
|  |   try { | ||
|  |     range = new Range(range, options) | ||
|  |   } catch (er) { | ||
|  |     return false | ||
|  |   } | ||
|  |   return range.test(version) | ||
|  | } | ||
|  | 
 | ||
|  | exports.maxSatisfying = maxSatisfying | ||
|  | function maxSatisfying (versions, range, options) { | ||
|  |   var max = null | ||
|  |   var maxSV = null | ||
|  |   try { | ||
|  |     var rangeObj = new Range(range, options) | ||
|  |   } catch (er) { | ||
|  |     return null | ||
|  |   } | ||
|  |   versions.forEach(function (v) { | ||
|  |     if (rangeObj.test(v)) { | ||
|  |       // satisfies(v, range, options)
 | ||
|  |       if (!max || maxSV.compare(v) === -1) { | ||
|  |         // compare(max, v, true)
 | ||
|  |         max = v | ||
|  |         maxSV = new SemVer(max, options) | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  |   return max | ||
|  | } | ||
|  | 
 | ||
|  | exports.minSatisfying = minSatisfying | ||
|  | function minSatisfying (versions, range, options) { | ||
|  |   var min = null | ||
|  |   var minSV = null | ||
|  |   try { | ||
|  |     var rangeObj = new Range(range, options) | ||
|  |   } catch (er) { | ||
|  |     return null | ||
|  |   } | ||
|  |   versions.forEach(function (v) { | ||
|  |     if (rangeObj.test(v)) { | ||
|  |       // satisfies(v, range, options)
 | ||
|  |       if (!min || minSV.compare(v) === 1) { | ||
|  |         // compare(min, v, true)
 | ||
|  |         min = v | ||
|  |         minSV = new SemVer(min, options) | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  |   return min | ||
|  | } | ||
|  | 
 | ||
|  | exports.minVersion = minVersion | ||
|  | function minVersion (range, loose) { | ||
|  |   range = new Range(range, loose) | ||
|  | 
 | ||
|  |   var minver = new SemVer('0.0.0') | ||
|  |   if (range.test(minver)) { | ||
|  |     return minver | ||
|  |   } | ||
|  | 
 | ||
|  |   minver = new SemVer('0.0.0-0') | ||
|  |   if (range.test(minver)) { | ||
|  |     return minver | ||
|  |   } | ||
|  | 
 | ||
|  |   minver = null | ||
|  |   for (var i = 0; i < range.set.length; ++i) { | ||
|  |     var comparators = range.set[i] | ||
|  | 
 | ||
|  |     comparators.forEach(function (comparator) { | ||
|  |       // Clone to avoid manipulating the comparator's semver object.
 | ||
|  |       var compver = new SemVer(comparator.semver.version) | ||
|  |       switch (comparator.operator) { | ||
|  |         case '>': | ||
|  |           if (compver.prerelease.length === 0) { | ||
|  |             compver.patch++ | ||
|  |           } else { | ||
|  |             compver.prerelease.push(0) | ||
|  |           } | ||
|  |           compver.raw = compver.format() | ||
|  |           /* fallthrough */ | ||
|  |         case '': | ||
|  |         case '>=': | ||
|  |           if (!minver || gt(minver, compver)) { | ||
|  |             minver = compver | ||
|  |           } | ||
|  |           break | ||
|  |         case '<': | ||
|  |         case '<=': | ||
|  |           /* Ignore maximum versions */ | ||
|  |           break | ||
|  |         /* istanbul ignore next */ | ||
|  |         default: | ||
|  |           throw new Error('Unexpected operation: ' + comparator.operator) | ||
|  |       } | ||
|  |     }) | ||
|  |   } | ||
|  | 
 | ||
|  |   if (minver && range.test(minver)) { | ||
|  |     return minver | ||
|  |   } | ||
|  | 
 | ||
|  |   return null | ||
|  | } | ||
|  | 
 | ||
|  | exports.validRange = validRange | ||
|  | function validRange (range, options) { | ||
|  |   try { | ||
|  |     // Return '*' instead of '' so that truthiness works.
 | ||
|  |     // This will throw if it's invalid anyway
 | ||
|  |     return new Range(range, options).range || '*' | ||
|  |   } catch (er) { | ||
|  |     return null | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | // Determine if version is less than all the versions possible in the range
 | ||
|  | exports.ltr = ltr | ||
|  | function ltr (version, range, options) { | ||
|  |   return outside(version, range, '<', options) | ||
|  | } | ||
|  | 
 | ||
|  | // Determine if version is greater than all the versions possible in the range.
 | ||
|  | exports.gtr = gtr | ||
|  | function gtr (version, range, options) { | ||
|  |   return outside(version, range, '>', options) | ||
|  | } | ||
|  | 
 | ||
|  | exports.outside = outside | ||
|  | function outside (version, range, hilo, options) { | ||
|  |   version = new SemVer(version, options) | ||
|  |   range = new Range(range, options) | ||
|  | 
 | ||
|  |   var gtfn, ltefn, ltfn, comp, ecomp | ||
|  |   switch (hilo) { | ||
|  |     case '>': | ||
|  |       gtfn = gt | ||
|  |       ltefn = lte | ||
|  |       ltfn = lt | ||
|  |       comp = '>' | ||
|  |       ecomp = '>=' | ||
|  |       break | ||
|  |     case '<': | ||
|  |       gtfn = lt | ||
|  |       ltefn = gte | ||
|  |       ltfn = gt | ||
|  |       comp = '<' | ||
|  |       ecomp = '<=' | ||
|  |       break | ||
|  |     default: | ||
|  |       throw new TypeError('Must provide a hilo val of "<" or ">"') | ||
|  |   } | ||
|  | 
 | ||
|  |   // If it satisifes the range it is not outside
 | ||
|  |   if (satisfies(version, range, options)) { | ||
|  |     return false | ||
|  |   } | ||
|  | 
 | ||
|  |   // From now on, variable terms are as if we're in "gtr" mode.
 | ||
|  |   // but note that everything is flipped for the "ltr" function.
 | ||
|  | 
 | ||
|  |   for (var i = 0; i < range.set.length; ++i) { | ||
|  |     var comparators = range.set[i] | ||
|  | 
 | ||
|  |     var high = null | ||
|  |     var low = null | ||
|  | 
 | ||
|  |     comparators.forEach(function (comparator) { | ||
|  |       if (comparator.semver === ANY) { | ||
|  |         comparator = new Comparator('>=0.0.0') | ||
|  |       } | ||
|  |       high = high || comparator | ||
|  |       low = low || comparator | ||
|  |       if (gtfn(comparator.semver, high.semver, options)) { | ||
|  |         high = comparator | ||
|  |       } else if (ltfn(comparator.semver, low.semver, options)) { | ||
|  |         low = comparator | ||
|  |       } | ||
|  |     }) | ||
|  | 
 | ||
|  |     // If the edge version comparator has a operator then our version
 | ||
|  |     // isn't outside it
 | ||
|  |     if (high.operator === comp || high.operator === ecomp) { | ||
|  |       return false | ||
|  |     } | ||
|  | 
 | ||
|  |     // If the lowest version comparator has an operator and our version
 | ||
|  |     // is less than it then it isn't higher than the range
 | ||
|  |     if ((!low.operator || low.operator === comp) && | ||
|  |         ltefn(version, low.semver)) { | ||
|  |       return false | ||
|  |     } else if (low.operator === ecomp && ltfn(version, low.semver)) { | ||
|  |       return false | ||
|  |     } | ||
|  |   } | ||
|  |   return true | ||
|  | } | ||
|  | 
 | ||
|  | exports.prerelease = prerelease | ||
|  | function prerelease (version, options) { | ||
|  |   var parsed = parse(version, options) | ||
|  |   return (parsed && parsed.prerelease.length) ? parsed.prerelease : null | ||
|  | } | ||
|  | 
 | ||
|  | exports.intersects = intersects | ||
|  | function intersects (r1, r2, options) { | ||
|  |   r1 = new Range(r1, options) | ||
|  |   r2 = new Range(r2, options) | ||
|  |   return r1.intersects(r2) | ||
|  | } | ||
|  | 
 | ||
|  | exports.coerce = coerce | ||
|  | function coerce (version, options) { | ||
|  |   if (version instanceof SemVer) { | ||
|  |     return version | ||
|  |   } | ||
|  | 
 | ||
|  |   if (typeof version === 'number') { | ||
|  |     version = String(version) | ||
|  |   } | ||
|  | 
 | ||
|  |   if (typeof version !== 'string') { | ||
|  |     return null | ||
|  |   } | ||
|  | 
 | ||
|  |   options = options || {} | ||
|  | 
 | ||
|  |   var match = null | ||
|  |   if (!options.rtl) { | ||
|  |     match = version.match(re[t.COERCE]) | ||
|  |   } else { | ||
|  |     // Find the right-most coercible string that does not share
 | ||
|  |     // a terminus with a more left-ward coercible string.
 | ||
|  |     // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
 | ||
|  |     //
 | ||
|  |     // Walk through the string checking with a /g regexp
 | ||
|  |     // Manually set the index so as to pick up overlapping matches.
 | ||
|  |     // Stop when we get a match that ends at the string end, since no
 | ||
|  |     // coercible string can be more right-ward without the same terminus.
 | ||
|  |     var next | ||
|  |     while ((next = re[t.COERCERTL].exec(version)) && | ||
|  |       (!match || match.index + match[0].length !== version.length) | ||
|  |     ) { | ||
|  |       if (!match || | ||
|  |           next.index + next[0].length !== match.index + match[0].length) { | ||
|  |         match = next | ||
|  |       } | ||
|  |       re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length | ||
|  |     } | ||
|  |     // leave it in a clean state
 | ||
|  |     re[t.COERCERTL].lastIndex = -1 | ||
|  |   } | ||
|  | 
 | ||
|  |   if (match === null) { | ||
|  |     return null | ||
|  |   } | ||
|  | 
 | ||
|  |   return parse(match[2] + | ||
|  |     '.' + (match[3] || '0') + | ||
|  |     '.' + (match[4] || '0'), options) | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 357: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = __nested_webpack_require_1759__(357); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 417: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = __nested_webpack_require_1759__(417); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 430: | ||
|  | /***/ (function(__unusedmodule, exports, __nested_webpack_require_76482__) { | ||
|  | 
 | ||
|  | "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 tr = __nested_webpack_require_76482__(654); | ||
|  | /** | ||
|  |  * Exec a command. | ||
|  |  * Output will be streamed to the live console. | ||
|  |  * Returns promise with return code | ||
|  |  * | ||
|  |  * @param     commandLine        command to execute (can include additional args). Must be correctly escaped. | ||
|  |  * @param     args               optional arguments for tool. Escaping is handled by the lib. | ||
|  |  * @param     options            optional exec options.  See ExecOptions | ||
|  |  * @returns   Promise<number>    exit code | ||
|  |  */ | ||
|  | function exec(commandLine, args, options) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         const commandArgs = tr.argStringToArray(commandLine); | ||
|  |         if (commandArgs.length === 0) { | ||
|  |             throw new Error(`Parameter 'commandLine' cannot be null or empty.`); | ||
|  |         } | ||
|  |         // Path to tool to execute should be first arg
 | ||
|  |         const toolPath = commandArgs[0]; | ||
|  |         args = commandArgs.slice(1).concat(args || []); | ||
|  |         const runner = new tr.ToolRunner(toolPath, args, options); | ||
|  |         return runner.exec(); | ||
|  |     }); | ||
|  | } | ||
|  | exports.exec = exec; | ||
|  | //# sourceMappingURL=exec.js.map
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 492: | ||
|  | /***/ (function(__unusedmodule, exports, __nested_webpack_require_78363__) { | ||
|  | 
 | ||
|  | "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(__nested_webpack_require_78363__(694)); | ||
|  | const finder = __importStar(__nested_webpack_require_78363__(245)); | ||
|  | const path = __importStar(__nested_webpack_require_78363__(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 }); | ||
|  |                 yield finder.findPythonVersion(version, arch); | ||
|  |             } | ||
|  |             const matchersPath = path.join(__dirname, '..', '.github'); | ||
|  |             console.log(`##[add-matcher]${path.join(matchersPath, 'python.json')}`); | ||
|  |         } | ||
|  |         catch (err) { | ||
|  |             core.setFailed(err.message); | ||
|  |         } | ||
|  |     }); | ||
|  | } | ||
|  | run(); | ||
|  | 
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 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'; | ||
|  | /* | ||
|  |  * 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
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 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: | ||
|  | /***/ (function(__unusedmodule, exports, __nested_webpack_require_104920__) { | ||
|  | 
 | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const command_1 = __nested_webpack_require_104920__(227); | ||
|  | const path = __nested_webpack_require_104920__(622); | ||
|  | /** | ||
|  |  * The code to exit an action | ||
|  |  */ | ||
|  | var ExitCode; | ||
|  | (function (ExitCode) { | ||
|  |     /** | ||
|  |      * A code indicating that the action was successful | ||
|  |      */ | ||
|  |     ExitCode[ExitCode["Success"] = 0] = "Success"; | ||
|  |     /** | ||
|  |      * A code indicating that the action was a failure | ||
|  |      */ | ||
|  |     ExitCode[ExitCode["Failure"] = 1] = "Failure"; | ||
|  | })(ExitCode = exports.ExitCode || (exports.ExitCode = {})); | ||
|  | //-----------------------------------------------------------------------
 | ||
|  | // Variables
 | ||
|  | //-----------------------------------------------------------------------
 | ||
|  | /** | ||
|  |  * sets env variable for this action and future actions in the job | ||
|  |  * @param name the name of the variable to set | ||
|  |  * @param val the value of the variable | ||
|  |  */ | ||
|  | function exportVariable(name, val) { | ||
|  |     process.env[name] = val; | ||
|  |     command_1.issueCommand('set-env', { name }, val); | ||
|  | } | ||
|  | exports.exportVariable = exportVariable; | ||
|  | /** | ||
|  |  * exports the variable and registers a secret which will get masked from logs | ||
|  |  * @param name the name of the variable to set | ||
|  |  * @param val value of the secret | ||
|  |  */ | ||
|  | function exportSecret(name, val) { | ||
|  |     exportVariable(name, val); | ||
|  |     command_1.issueCommand('set-secret', {}, val); | ||
|  | } | ||
|  | exports.exportSecret = exportSecret; | ||
|  | /** | ||
|  |  * Prepends inputPath to the PATH (for this action and future actions) | ||
|  |  * @param inputPath | ||
|  |  */ | ||
|  | function addPath(inputPath) { | ||
|  |     command_1.issueCommand('add-path', {}, inputPath); | ||
|  |     process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; | ||
|  | } | ||
|  | exports.addPath = addPath; | ||
|  | /** | ||
|  |  * Gets the value of an input.  The value is also trimmed. | ||
|  |  * | ||
|  |  * @param     name     name of the input to get | ||
|  |  * @param     options  optional. See InputOptions. | ||
|  |  * @returns   string | ||
|  |  */ | ||
|  | function getInput(name, options) { | ||
|  |     const val = process.env[`INPUT_${name.replace(' ', '_').toUpperCase()}`] || ''; | ||
|  |     if (options && options.required && !val) { | ||
|  |         throw new Error(`Input required and not supplied: ${name}`); | ||
|  |     } | ||
|  |     return val.trim(); | ||
|  | } | ||
|  | exports.getInput = getInput; | ||
|  | /** | ||
|  |  * Sets the value of an output. | ||
|  |  * | ||
|  |  * @param     name     name of the output to set | ||
|  |  * @param     value    value to store | ||
|  |  */ | ||
|  | function setOutput(name, value) { | ||
|  |     command_1.issueCommand('set-output', { name }, value); | ||
|  | } | ||
|  | exports.setOutput = setOutput; | ||
|  | //-----------------------------------------------------------------------
 | ||
|  | // Results
 | ||
|  | //-----------------------------------------------------------------------
 | ||
|  | /** | ||
|  |  * Sets the action status to failed. | ||
|  |  * When the action exits it will be with an exit code of 1 | ||
|  |  * @param message add error issue message | ||
|  |  */ | ||
|  | function setFailed(message) { | ||
|  |     process.exitCode = ExitCode.Failure; | ||
|  |     error(message); | ||
|  | } | ||
|  | exports.setFailed = setFailed; | ||
|  | //-----------------------------------------------------------------------
 | ||
|  | // Logging Commands
 | ||
|  | //-----------------------------------------------------------------------
 | ||
|  | /** | ||
|  |  * Writes debug message to user log | ||
|  |  * @param message debug message | ||
|  |  */ | ||
|  | function debug(message) { | ||
|  |     command_1.issueCommand('debug', {}, message); | ||
|  | } | ||
|  | exports.debug = debug; | ||
|  | /** | ||
|  |  * Adds an error issue | ||
|  |  * @param message error issue message | ||
|  |  */ | ||
|  | function error(message) { | ||
|  |     command_1.issue('error', message); | ||
|  | } | ||
|  | exports.error = error; | ||
|  | /** | ||
|  |  * Adds an warning issue | ||
|  |  * @param message warning issue message | ||
|  |  */ | ||
|  | function warning(message) { | ||
|  |     command_1.issue('warning', message); | ||
|  | } | ||
|  | exports.warning = warning; | ||
|  | //# sourceMappingURL=core.js.map
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 725: | ||
|  | /***/ (function(__unusedmodule, exports, __nested_webpack_require_108646__) { | ||
|  | 
 | ||
|  | "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"; | ||
|  | 
 | ||
|  | 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 core = __nested_webpack_require_116832__(694); | ||
|  | const io = __nested_webpack_require_116832__(999); | ||
|  | const fs = __nested_webpack_require_116832__(747); | ||
|  | const os = __nested_webpack_require_116832__(87); | ||
|  | const path = __nested_webpack_require_116832__(622); | ||
|  | const httpm = __nested_webpack_require_116832__(113); | ||
|  | const semver = __nested_webpack_require_116832__(284); | ||
|  | const uuidV4 = __nested_webpack_require_116832__(683); | ||
|  | const exec_1 = __nested_webpack_require_116832__(430); | ||
|  | const assert_1 = __nested_webpack_require_116832__(357); | ||
|  | class HTTPError extends Error { | ||
|  |     constructor(httpStatusCode) { | ||
|  |         super(`Unexpected HTTP response: ${httpStatusCode}`); | ||
|  |         this.httpStatusCode = httpStatusCode; | ||
|  |         Object.setPrototypeOf(this, new.target.prototype); | ||
|  |     } | ||
|  | } | ||
|  | exports.HTTPError = HTTPError; | ||
|  | const IS_WINDOWS = process.platform === 'win32'; | ||
|  | const userAgent = 'actions/tool-cache'; | ||
|  | // On load grab temp directory and cache directory and remove them from env (currently don't want to expose this)
 | ||
|  | let tempDirectory = process.env['RUNNER_TEMP'] || ''; | ||
|  | let cacheRoot = process.env['RUNNER_TOOL_CACHE'] || ''; | ||
|  | // If directories not found, place them in common temp locations
 | ||
|  | if (!tempDirectory || !cacheRoot) { | ||
|  |     let baseLocation; | ||
|  |     if (IS_WINDOWS) { | ||
|  |         // On windows use the USERPROFILE env variable
 | ||
|  |         baseLocation = process.env['USERPROFILE'] || 'C:\\'; | ||
|  |     } | ||
|  |     else { | ||
|  |         if (process.platform === 'darwin') { | ||
|  |             baseLocation = '/Users'; | ||
|  |         } | ||
|  |         else { | ||
|  |             baseLocation = '/home'; | ||
|  |         } | ||
|  |     } | ||
|  |     if (!tempDirectory) { | ||
|  |         tempDirectory = path.join(baseLocation, 'actions', 'temp'); | ||
|  |     } | ||
|  |     if (!cacheRoot) { | ||
|  |         cacheRoot = path.join(baseLocation, 'actions', 'cache'); | ||
|  |     } | ||
|  | } | ||
|  | /** | ||
|  |  * Download a tool from an url and stream it into a file | ||
|  |  * | ||
|  |  * @param url       url of tool to download | ||
|  |  * @returns         path to downloaded tool | ||
|  |  */ | ||
|  | function downloadTool(url) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         // Wrap in a promise so that we can resolve from within stream callbacks
 | ||
|  |         return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { | ||
|  |             try { | ||
|  |                 const http = new httpm.HttpClient(userAgent, [], { | ||
|  |                     allowRetries: true, | ||
|  |                     maxRetries: 3 | ||
|  |                 }); | ||
|  |                 const destPath = path.join(tempDirectory, uuidV4()); | ||
|  |                 yield io.mkdirP(tempDirectory); | ||
|  |                 core.debug(`Downloading ${url}`); | ||
|  |                 core.debug(`Downloading ${destPath}`); | ||
|  |                 if (fs.existsSync(destPath)) { | ||
|  |                     throw new Error(`Destination file path ${destPath} already exists`); | ||
|  |                 } | ||
|  |                 const response = yield http.get(url); | ||
|  |                 if (response.message.statusCode !== 200) { | ||
|  |                     const err = new HTTPError(response.message.statusCode); | ||
|  |                     core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); | ||
|  |                     throw err; | ||
|  |                 } | ||
|  |                 const file = fs.createWriteStream(destPath); | ||
|  |                 file.on('open', () => __awaiter(this, void 0, void 0, function* () { | ||
|  |                     try { | ||
|  |                         const stream = response.message.pipe(file); | ||
|  |                         stream.on('close', () => { | ||
|  |                             core.debug('download complete'); | ||
|  |                             resolve(destPath); | ||
|  |                         }); | ||
|  |                     } | ||
|  |                     catch (err) { | ||
|  |                         core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); | ||
|  |                         reject(err); | ||
|  |                     } | ||
|  |                 })); | ||
|  |                 file.on('error', err => { | ||
|  |                     file.end(); | ||
|  |                     reject(err); | ||
|  |                 }); | ||
|  |             } | ||
|  |             catch (err) { | ||
|  |                 reject(err); | ||
|  |             } | ||
|  |         })); | ||
|  |     }); | ||
|  | } | ||
|  | exports.downloadTool = downloadTool; | ||
|  | /** | ||
|  |  * Extract a .7z file | ||
|  |  * | ||
|  |  * @param file     path to the .7z file | ||
|  |  * @param dest     destination directory. Optional. | ||
|  |  * @param _7zPath  path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this | ||
|  |  * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will | ||
|  |  * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is | ||
|  |  * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line | ||
|  |  * interface, it is smaller than the full command line interface, and it does support long paths. At the | ||
|  |  * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website. | ||
|  |  * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path | ||
|  |  * to 7zr.exe can be pass to this function. | ||
|  |  * @returns        path to the destination directory | ||
|  |  */ | ||
|  | function extract7z(file, dest, _7zPath) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS'); | ||
|  |         assert_1.ok(file, 'parameter "file" is required'); | ||
|  |         dest = dest || (yield _createExtractFolder(dest)); | ||
|  |         const originalCwd = process.cwd(); | ||
|  |         process.chdir(dest); | ||
|  |         if (_7zPath) { | ||
|  |             try { | ||
|  |                 const args = [ | ||
|  |                     'x', | ||
|  |                     '-bb1', | ||
|  |                     '-bd', | ||
|  |                     '-sccUTF-8', | ||
|  |                     file | ||
|  |                 ]; | ||
|  |                 const options = { | ||
|  |                     silent: true | ||
|  |                 }; | ||
|  |                 yield exec_1.exec(`"${_7zPath}"`, args, options); | ||
|  |             } | ||
|  |             finally { | ||
|  |                 process.chdir(originalCwd); | ||
|  |             } | ||
|  |         } | ||
|  |         else { | ||
|  |             const escapedScript = path | ||
|  |                 .join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1') | ||
|  |                 .replace(/'/g, "''") | ||
|  |                 .replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
 | ||
|  |             const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); | ||
|  |             const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); | ||
|  |             const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`; | ||
|  |             const args = [ | ||
|  |                 '-NoLogo', | ||
|  |                 '-Sta', | ||
|  |                 '-NoProfile', | ||
|  |                 '-NonInteractive', | ||
|  |                 '-ExecutionPolicy', | ||
|  |                 'Unrestricted', | ||
|  |                 '-Command', | ||
|  |                 command | ||
|  |             ]; | ||
|  |             const options = { | ||
|  |                 silent: true | ||
|  |             }; | ||
|  |             try { | ||
|  |                 const powershellPath = yield io.which('powershell', true); | ||
|  |                 yield exec_1.exec(`"${powershellPath}"`, args, options); | ||
|  |             } | ||
|  |             finally { | ||
|  |                 process.chdir(originalCwd); | ||
|  |             } | ||
|  |         } | ||
|  |         return dest; | ||
|  |     }); | ||
|  | } | ||
|  | exports.extract7z = extract7z; | ||
|  | /** | ||
|  |  * Extract a tar | ||
|  |  * | ||
|  |  * @param file     path to the tar | ||
|  |  * @param dest     destination directory. Optional. | ||
|  |  * @returns        path to the destination directory | ||
|  |  */ | ||
|  | function extractTar(file, dest) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         if (!file) { | ||
|  |             throw new Error("parameter 'file' is required"); | ||
|  |         } | ||
|  |         dest = dest || (yield _createExtractFolder(dest)); | ||
|  |         const tarPath = yield io.which('tar', true); | ||
|  |         yield exec_1.exec(`"${tarPath}"`, ['xzC', dest, '-f', file]); | ||
|  |         return dest; | ||
|  |     }); | ||
|  | } | ||
|  | exports.extractTar = extractTar; | ||
|  | /** | ||
|  |  * Extract a zip | ||
|  |  * | ||
|  |  * @param file     path to the zip | ||
|  |  * @param dest     destination directory. Optional. | ||
|  |  * @returns        path to the destination directory | ||
|  |  */ | ||
|  | function extractZip(file, dest) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         if (!file) { | ||
|  |             throw new Error("parameter 'file' is required"); | ||
|  |         } | ||
|  |         dest = dest || (yield _createExtractFolder(dest)); | ||
|  |         if (IS_WINDOWS) { | ||
|  |             yield extractZipWin(file, dest); | ||
|  |         } | ||
|  |         else { | ||
|  |             yield extractZipNix(file, dest); | ||
|  |         } | ||
|  |         return dest; | ||
|  |     }); | ||
|  | } | ||
|  | exports.extractZip = extractZip; | ||
|  | function extractZipWin(file, dest) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         // build the powershell command
 | ||
|  |         const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
 | ||
|  |         const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); | ||
|  |         const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`; | ||
|  |         // run powershell
 | ||
|  |         const powershellPath = yield io.which('powershell'); | ||
|  |         const args = [ | ||
|  |             '-NoLogo', | ||
|  |             '-Sta', | ||
|  |             '-NoProfile', | ||
|  |             '-NonInteractive', | ||
|  |             '-ExecutionPolicy', | ||
|  |             'Unrestricted', | ||
|  |             '-Command', | ||
|  |             command | ||
|  |         ]; | ||
|  |         yield exec_1.exec(`"${powershellPath}"`, args); | ||
|  |     }); | ||
|  | } | ||
|  | function extractZipNix(file, dest) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         const unzipPath = __nested_webpack_require_116832__.ab + "unzip"; | ||
|  |         yield exec_1.exec(`"${unzipPath}"`, [file], { cwd: dest }); | ||
|  |     }); | ||
|  | } | ||
|  | /** | ||
|  |  * Caches a directory and installs it into the tool cacheDir | ||
|  |  * | ||
|  |  * @param sourceDir    the directory to cache into tools | ||
|  |  * @param tool          tool name | ||
|  |  * @param version       version of the tool.  semver format | ||
|  |  * @param arch          architecture of the tool.  Optional.  Defaults to machine architecture | ||
|  |  */ | ||
|  | function cacheDir(sourceDir, tool, version, arch) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         version = semver.clean(version) || version; | ||
|  |         arch = arch || os.arch(); | ||
|  |         core.debug(`Caching tool ${tool} ${version} ${arch}`); | ||
|  |         core.debug(`source dir: ${sourceDir}`); | ||
|  |         if (!fs.statSync(sourceDir).isDirectory()) { | ||
|  |             throw new Error('sourceDir is not a directory'); | ||
|  |         } | ||
|  |         // Create the tool dir
 | ||
|  |         const destPath = yield _createToolPath(tool, version, arch); | ||
|  |         // copy each child item. do not move. move can fail on Windows
 | ||
|  |         // due to anti-virus software having an open handle on a file.
 | ||
|  |         for (const itemName of fs.readdirSync(sourceDir)) { | ||
|  |             const s = path.join(sourceDir, itemName); | ||
|  |             yield io.cp(s, destPath, { recursive: true }); | ||
|  |         } | ||
|  |         // write .complete
 | ||
|  |         _completeToolPath(tool, version, arch); | ||
|  |         return destPath; | ||
|  |     }); | ||
|  | } | ||
|  | exports.cacheDir = cacheDir; | ||
|  | /** | ||
|  |  * Caches a downloaded file (GUID) and installs it | ||
|  |  * into the tool cache with a given targetName | ||
|  |  * | ||
|  |  * @param sourceFile    the file to cache into tools.  Typically a result of downloadTool which is a guid. | ||
|  |  * @param targetFile    the name of the file name in the tools directory | ||
|  |  * @param tool          tool name | ||
|  |  * @param version       version of the tool.  semver format | ||
|  |  * @param arch          architecture of the tool.  Optional.  Defaults to machine architecture | ||
|  |  */ | ||
|  | function cacheFile(sourceFile, targetFile, tool, version, arch) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         version = semver.clean(version) || version; | ||
|  |         arch = arch || os.arch(); | ||
|  |         core.debug(`Caching tool ${tool} ${version} ${arch}`); | ||
|  |         core.debug(`source file: ${sourceFile}`); | ||
|  |         if (!fs.statSync(sourceFile).isFile()) { | ||
|  |             throw new Error('sourceFile is not a file'); | ||
|  |         } | ||
|  |         // create the tool dir
 | ||
|  |         const destFolder = yield _createToolPath(tool, version, arch); | ||
|  |         // copy instead of move. move can fail on Windows due to
 | ||
|  |         // anti-virus software having an open handle on a file.
 | ||
|  |         const destPath = path.join(destFolder, targetFile); | ||
|  |         core.debug(`destination file ${destPath}`); | ||
|  |         yield io.cp(sourceFile, destPath); | ||
|  |         // write .complete
 | ||
|  |         _completeToolPath(tool, version, arch); | ||
|  |         return destFolder; | ||
|  |     }); | ||
|  | } | ||
|  | exports.cacheFile = cacheFile; | ||
|  | /** | ||
|  |  * Finds the path to a tool version in the local installed tool cache | ||
|  |  * | ||
|  |  * @param toolName      name of the tool | ||
|  |  * @param versionSpec   version of the tool | ||
|  |  * @param arch          optional arch.  defaults to arch of computer | ||
|  |  */ | ||
|  | function find(toolName, versionSpec, arch) { | ||
|  |     if (!toolName) { | ||
|  |         throw new Error('toolName parameter is required'); | ||
|  |     } | ||
|  |     if (!versionSpec) { | ||
|  |         throw new Error('versionSpec parameter is required'); | ||
|  |     } | ||
|  |     arch = arch || os.arch(); | ||
|  |     // attempt to resolve an explicit version
 | ||
|  |     if (!_isExplicitVersion(versionSpec)) { | ||
|  |         const localVersions = findAllVersions(toolName, arch); | ||
|  |         const match = _evaluateVersions(localVersions, versionSpec); | ||
|  |         versionSpec = match; | ||
|  |     } | ||
|  |     // check for the explicit version in the cache
 | ||
|  |     let toolPath = ''; | ||
|  |     if (versionSpec) { | ||
|  |         versionSpec = semver.clean(versionSpec) || ''; | ||
|  |         const cachePath = path.join(cacheRoot, toolName, versionSpec, arch); | ||
|  |         core.debug(`checking cache: ${cachePath}`); | ||
|  |         if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { | ||
|  |             core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`); | ||
|  |             toolPath = cachePath; | ||
|  |         } | ||
|  |         else { | ||
|  |             core.debug('not found'); | ||
|  |         } | ||
|  |     } | ||
|  |     return toolPath; | ||
|  | } | ||
|  | exports.find = find; | ||
|  | /** | ||
|  |  * Finds the paths to all versions of a tool that are installed in the local tool cache | ||
|  |  * | ||
|  |  * @param toolName  name of the tool | ||
|  |  * @param arch      optional arch.  defaults to arch of computer | ||
|  |  */ | ||
|  | function findAllVersions(toolName, arch) { | ||
|  |     const versions = []; | ||
|  |     arch = arch || os.arch(); | ||
|  |     const toolPath = path.join(cacheRoot, toolName); | ||
|  |     if (fs.existsSync(toolPath)) { | ||
|  |         const children = fs.readdirSync(toolPath); | ||
|  |         for (const child of children) { | ||
|  |             if (_isExplicitVersion(child)) { | ||
|  |                 const fullPath = path.join(toolPath, child, arch || ''); | ||
|  |                 if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) { | ||
|  |                     versions.push(child); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  |     return versions; | ||
|  | } | ||
|  | exports.findAllVersions = findAllVersions; | ||
|  | function _createExtractFolder(dest) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         if (!dest) { | ||
|  |             // create a temp dir
 | ||
|  |             dest = path.join(tempDirectory, uuidV4()); | ||
|  |         } | ||
|  |         yield io.mkdirP(dest); | ||
|  |         return dest; | ||
|  |     }); | ||
|  | } | ||
|  | function _createToolPath(tool, version, arch) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || ''); | ||
|  |         core.debug(`destination ${folderPath}`); | ||
|  |         const markerPath = `${folderPath}.complete`; | ||
|  |         yield io.rmRF(folderPath); | ||
|  |         yield io.rmRF(markerPath); | ||
|  |         yield io.mkdirP(folderPath); | ||
|  |         return folderPath; | ||
|  |     }); | ||
|  | } | ||
|  | function _completeToolPath(tool, version, arch) { | ||
|  |     const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || ''); | ||
|  |     const markerPath = `${folderPath}.complete`; | ||
|  |     fs.writeFileSync(markerPath, ''); | ||
|  |     core.debug('finished caching tool'); | ||
|  | } | ||
|  | function _isExplicitVersion(versionSpec) { | ||
|  |     const c = semver.clean(versionSpec) || ''; | ||
|  |     core.debug(`isExplicit: ${c}`); | ||
|  |     const valid = semver.valid(c) != null; | ||
|  |     core.debug(`explicit? ${valid}`); | ||
|  |     return valid; | ||
|  | } | ||
|  | function _evaluateVersions(versions, versionSpec) { | ||
|  |     let version = ''; | ||
|  |     core.debug(`evaluating ${versions.length} versions`); | ||
|  |     versions = versions.sort((a, b) => { | ||
|  |         if (semver.gt(a, b)) { | ||
|  |             return 1; | ||
|  |         } | ||
|  |         return -1; | ||
|  |     }); | ||
|  |     for (let i = versions.length - 1; i >= 0; i--) { | ||
|  |         const potential = versions[i]; | ||
|  |         const satisfied = semver.satisfies(potential, versionSpec); | ||
|  |         if (satisfied) { | ||
|  |             version = potential; | ||
|  |             break; | ||
|  |         } | ||
|  |     } | ||
|  |     if (version) { | ||
|  |         core.debug(`matched: ${version}`); | ||
|  |     } | ||
|  |     else { | ||
|  |         core.debug('match not found'); | ||
|  |     } | ||
|  |     return version; | ||
|  | } | ||
|  | //# sourceMappingURL=tool-cache.js.map
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 960: | ||
|  | /***/ (function(__unusedmodule, exports, __nested_webpack_require_134321__) { | ||
|  | 
 | ||
|  | "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 _a; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const assert_1 = __nested_webpack_require_134321__(357); | ||
|  | const fs = __nested_webpack_require_134321__(747); | ||
|  | const path = __nested_webpack_require_134321__(622); | ||
|  | _a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink; | ||
|  | exports.IS_WINDOWS = process.platform === 'win32'; | ||
|  | function exists(fsPath) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         try { | ||
|  |             yield exports.stat(fsPath); | ||
|  |         } | ||
|  |         catch (err) { | ||
|  |             if (err.code === 'ENOENT') { | ||
|  |                 return false; | ||
|  |             } | ||
|  |             throw err; | ||
|  |         } | ||
|  |         return true; | ||
|  |     }); | ||
|  | } | ||
|  | exports.exists = exists; | ||
|  | function isDirectory(fsPath, useStat = false) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath); | ||
|  |         return stats.isDirectory(); | ||
|  |     }); | ||
|  | } | ||
|  | exports.isDirectory = isDirectory; | ||
|  | /** | ||
|  |  * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like: | ||
|  |  * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases). | ||
|  |  */ | ||
|  | function isRooted(p) { | ||
|  |     p = normalizeSeparators(p); | ||
|  |     if (!p) { | ||
|  |         throw new Error('isRooted() parameter "p" cannot be empty'); | ||
|  |     } | ||
|  |     if (exports.IS_WINDOWS) { | ||
|  |         return (p.startsWith('\\') || /^[A-Z]:/i.test(p) // e.g. \ or \hello or \\hello
 | ||
|  |         ); // e.g. C: or C:\hello
 | ||
|  |     } | ||
|  |     return p.startsWith('/'); | ||
|  | } | ||
|  | exports.isRooted = isRooted; | ||
|  | /** | ||
|  |  * Recursively create a directory at `fsPath`. | ||
|  |  * | ||
|  |  * This implementation is optimistic, meaning it attempts to create the full | ||
|  |  * path first, and backs up the path stack from there. | ||
|  |  * | ||
|  |  * @param fsPath The path to create | ||
|  |  * @param maxDepth The maximum recursion depth | ||
|  |  * @param depth The current recursion depth | ||
|  |  */ | ||
|  | function mkdirP(fsPath, maxDepth = 1000, depth = 1) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         assert_1.ok(fsPath, 'a path argument must be provided'); | ||
|  |         fsPath = path.resolve(fsPath); | ||
|  |         if (depth >= maxDepth) | ||
|  |             return exports.mkdir(fsPath); | ||
|  |         try { | ||
|  |             yield exports.mkdir(fsPath); | ||
|  |             return; | ||
|  |         } | ||
|  |         catch (err) { | ||
|  |             switch (err.code) { | ||
|  |                 case 'ENOENT': { | ||
|  |                     yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1); | ||
|  |                     yield exports.mkdir(fsPath); | ||
|  |                     return; | ||
|  |                 } | ||
|  |                 default: { | ||
|  |                     let stats; | ||
|  |                     try { | ||
|  |                         stats = yield exports.stat(fsPath); | ||
|  |                     } | ||
|  |                     catch (err2) { | ||
|  |                         throw err; | ||
|  |                     } | ||
|  |                     if (!stats.isDirectory()) | ||
|  |                         throw err; | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     }); | ||
|  | } | ||
|  | exports.mkdirP = mkdirP; | ||
|  | /** | ||
|  |  * Best effort attempt to determine whether a file exists and is executable. | ||
|  |  * @param filePath    file path to check | ||
|  |  * @param extensions  additional file extensions to try | ||
|  |  * @return if file exists and is executable, returns the file path. otherwise empty string. | ||
|  |  */ | ||
|  | function tryGetExecutablePath(filePath, extensions) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         let stats = undefined; | ||
|  |         try { | ||
|  |             // test file exists
 | ||
|  |             stats = yield exports.stat(filePath); | ||
|  |         } | ||
|  |         catch (err) { | ||
|  |             if (err.code !== 'ENOENT') { | ||
|  |                 // eslint-disable-next-line no-console
 | ||
|  |                 console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); | ||
|  |             } | ||
|  |         } | ||
|  |         if (stats && stats.isFile()) { | ||
|  |             if (exports.IS_WINDOWS) { | ||
|  |                 // on Windows, test for valid extension
 | ||
|  |                 const upperExt = path.extname(filePath).toUpperCase(); | ||
|  |                 if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) { | ||
|  |                     return filePath; | ||
|  |                 } | ||
|  |             } | ||
|  |             else { | ||
|  |                 if (isUnixExecutable(stats)) { | ||
|  |                     return filePath; | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |         // try each extension
 | ||
|  |         const originalFilePath = filePath; | ||
|  |         for (const extension of extensions) { | ||
|  |             filePath = originalFilePath + extension; | ||
|  |             stats = undefined; | ||
|  |             try { | ||
|  |                 stats = yield exports.stat(filePath); | ||
|  |             } | ||
|  |             catch (err) { | ||
|  |                 if (err.code !== 'ENOENT') { | ||
|  |                     // eslint-disable-next-line no-console
 | ||
|  |                     console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); | ||
|  |                 } | ||
|  |             } | ||
|  |             if (stats && stats.isFile()) { | ||
|  |                 if (exports.IS_WINDOWS) { | ||
|  |                     // preserve the case of the actual file (since an extension was appended)
 | ||
|  |                     try { | ||
|  |                         const directory = path.dirname(filePath); | ||
|  |                         const upperName = path.basename(filePath).toUpperCase(); | ||
|  |                         for (const actualName of yield exports.readdir(directory)) { | ||
|  |                             if (upperName === actualName.toUpperCase()) { | ||
|  |                                 filePath = path.join(directory, actualName); | ||
|  |                                 break; | ||
|  |                             } | ||
|  |                         } | ||
|  |                     } | ||
|  |                     catch (err) { | ||
|  |                         // eslint-disable-next-line no-console
 | ||
|  |                         console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`); | ||
|  |                     } | ||
|  |                     return filePath; | ||
|  |                 } | ||
|  |                 else { | ||
|  |                     if (isUnixExecutable(stats)) { | ||
|  |                         return filePath; | ||
|  |                     } | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |         return ''; | ||
|  |     }); | ||
|  | } | ||
|  | exports.tryGetExecutablePath = tryGetExecutablePath; | ||
|  | function normalizeSeparators(p) { | ||
|  |     p = p || ''; | ||
|  |     if (exports.IS_WINDOWS) { | ||
|  |         // convert slashes on Windows
 | ||
|  |         p = p.replace(/\//g, '\\'); | ||
|  |         // remove redundant slashes
 | ||
|  |         return p.replace(/\\\\+/g, '\\'); | ||
|  |     } | ||
|  |     // remove redundant slashes
 | ||
|  |     return p.replace(/\/\/+/g, '/'); | ||
|  | } | ||
|  | // on Mac/Linux, test the execute bit
 | ||
|  | //     R   W  X  R  W X R W X
 | ||
|  | //   256 128 64 32 16 8 4 2 1
 | ||
|  | function isUnixExecutable(stats) { | ||
|  |     return ((stats.mode & 1) > 0 || | ||
|  |         ((stats.mode & 8) > 0 && stats.gid === process.getgid()) || | ||
|  |         ((stats.mode & 64) > 0 && stats.uid === process.getuid())); | ||
|  | } | ||
|  | //# sourceMappingURL=io-util.js.map
 | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 999: | ||
|  | /***/ (function(__unusedmodule, exports, __nested_webpack_require_142111__) { | ||
|  | 
 | ||
|  | "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 = __nested_webpack_require_142111__(129); | ||
|  | 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. | ||
|  |  * 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
 | ||
|  | 
 | ||
|  | /***/ }) | ||
|  | 
 | ||
|  | /******/ }); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 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); | ||
|  | 
 | ||
|  | /***/ }) | ||
|  | 
 | ||
|  | /******/ }); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 357: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("assert"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 417: | ||
|  | /***/ (function(module) { | ||
|  | 
 | ||
|  | module.exports = require("crypto"); | ||
|  | 
 | ||
|  | /***/ }), | ||
|  | 
 | ||
|  | /***/ 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"); | ||
|  | 
 | ||
|  | /***/ }) | ||
|  | 
 | ||
|  | /******/ }); |