build(cache): Update cache tool version
Graceful handling of error (non-validation one)
This commit is contained in:
		
							parent
							
								
									62808131e1
								
							
						
					
					
						commit
						d397c16c56
					
				
							
								
								
									
										1865
									
								
								dist/cleanup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1865
									
								
								dist/cleanup/index.js
									
									
									
									
										vendored
									
									
								
							| @ -90,17 +90,18 @@ function restoreCache(paths, primaryKey, restoreKeys, options) { | |||||||
|             checkKey(key); |             checkKey(key); | ||||||
|         } |         } | ||||||
|         const compressionMethod = yield utils.getCompressionMethod(); |         const compressionMethod = yield utils.getCompressionMethod(); | ||||||
|         // path are needed to compute version
 |         let archivePath = ''; | ||||||
|         const cacheEntry = yield cacheHttpClient.getCacheEntry(keys, paths, { |  | ||||||
|             compressionMethod |  | ||||||
|         }); |  | ||||||
|         if (!(cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.archiveLocation)) { |  | ||||||
|             // Cache not found
 |  | ||||||
|             return undefined; |  | ||||||
|         } |  | ||||||
|         const archivePath = path.join(yield utils.createTempDirectory(), utils.getCacheFileName(compressionMethod)); |  | ||||||
|         core.debug(`Archive Path: ${archivePath}`); |  | ||||||
|         try { |         try { | ||||||
|  |             // path are needed to compute version
 | ||||||
|  |             const cacheEntry = yield cacheHttpClient.getCacheEntry(keys, paths, { | ||||||
|  |                 compressionMethod | ||||||
|  |             }); | ||||||
|  |             if (!(cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.archiveLocation)) { | ||||||
|  |                 // Cache not found
 | ||||||
|  |                 return undefined; | ||||||
|  |             } | ||||||
|  |             archivePath = path.join(yield utils.createTempDirectory(), utils.getCacheFileName(compressionMethod)); | ||||||
|  |             core.debug(`Archive Path: ${archivePath}`); | ||||||
|             // Download the cache from the cache entry
 |             // Download the cache from the cache entry
 | ||||||
|             yield cacheHttpClient.downloadCache(cacheEntry.archiveLocation, archivePath, options); |             yield cacheHttpClient.downloadCache(cacheEntry.archiveLocation, archivePath, options); | ||||||
|             if (core.isDebug()) { |             if (core.isDebug()) { | ||||||
| @ -110,6 +111,17 @@ function restoreCache(paths, primaryKey, restoreKeys, options) { | |||||||
|             core.info(`Cache Size: ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B)`); |             core.info(`Cache Size: ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B)`); | ||||||
|             yield tar_1.extractTar(archivePath, compressionMethod); |             yield tar_1.extractTar(archivePath, compressionMethod); | ||||||
|             core.info('Cache restored successfully'); |             core.info('Cache restored successfully'); | ||||||
|  |             return cacheEntry.cacheKey; | ||||||
|  |         } | ||||||
|  |         catch (error) { | ||||||
|  |             const typedError = error; | ||||||
|  |             if (typedError.name === ValidationError.name) { | ||||||
|  |                 throw error; | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 // Supress all non-validation cache related errors because caching should be optional
 | ||||||
|  |                 core.warning(`Failed to restore: ${error.message}`); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         finally { |         finally { | ||||||
|             // Try to delete the archive to save space
 |             // Try to delete the archive to save space
 | ||||||
| @ -120,7 +132,7 @@ function restoreCache(paths, primaryKey, restoreKeys, options) { | |||||||
|                 core.debug(`Failed to delete archive: ${error}`); |                 core.debug(`Failed to delete archive: ${error}`); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         return cacheEntry.cacheKey; |         return undefined; | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| exports.restoreCache = restoreCache; | exports.restoreCache = restoreCache; | ||||||
| @ -138,10 +150,13 @@ function saveCache(paths, key, options) { | |||||||
|         checkPaths(paths); |         checkPaths(paths); | ||||||
|         checkKey(key); |         checkKey(key); | ||||||
|         const compressionMethod = yield utils.getCompressionMethod(); |         const compressionMethod = yield utils.getCompressionMethod(); | ||||||
|         let cacheId = null; |         let cacheId = -1; | ||||||
|         const cachePaths = yield utils.resolvePaths(paths); |         const cachePaths = yield utils.resolvePaths(paths); | ||||||
|         core.debug('Cache Paths:'); |         core.debug('Cache Paths:'); | ||||||
|         core.debug(`${JSON.stringify(cachePaths)}`); |         core.debug(`${JSON.stringify(cachePaths)}`); | ||||||
|  |         if (cachePaths.length === 0) { | ||||||
|  |             throw new Error(`Path Validation Error: Path(s) specified in the action for caching do(es) not exist, hence no cache is being saved.`); | ||||||
|  |         } | ||||||
|         const archiveFolder = yield utils.createTempDirectory(); |         const archiveFolder = yield utils.createTempDirectory(); | ||||||
|         const archivePath = path.join(archiveFolder, utils.getCacheFileName(compressionMethod)); |         const archivePath = path.join(archiveFolder, utils.getCacheFileName(compressionMethod)); | ||||||
|         core.debug(`Archive Path: ${archivePath}`); |         core.debug(`Archive Path: ${archivePath}`); | ||||||
| @ -174,6 +189,18 @@ function saveCache(paths, key, options) { | |||||||
|             core.debug(`Saving Cache (ID: ${cacheId})`); |             core.debug(`Saving Cache (ID: ${cacheId})`); | ||||||
|             yield cacheHttpClient.saveCache(cacheId, archivePath, options); |             yield cacheHttpClient.saveCache(cacheId, archivePath, options); | ||||||
|         } |         } | ||||||
|  |         catch (error) { | ||||||
|  |             const typedError = error; | ||||||
|  |             if (typedError.name === ValidationError.name) { | ||||||
|  |                 throw error; | ||||||
|  |             } | ||||||
|  |             else if (typedError.name === ReserveCacheError.name) { | ||||||
|  |                 core.info(`Failed to save: ${typedError.message}`); | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 core.warning(`Failed to save: ${typedError.message}`); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|         finally { |         finally { | ||||||
|             // Try to delete the archive to save space
 |             // Try to delete the archive to save space
 | ||||||
|             try { |             try { | ||||||
| @ -214,8 +241,8 @@ var __importStar = (this && this.__importStar) || function (mod) { | |||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| const core = __importStar(__nccwpck_require__(2186)); | const core = __importStar(__nccwpck_require__(2186)); | ||||||
| const http_client_1 = __nccwpck_require__(9925); | const http_client_1 = __nccwpck_require__(1825); | ||||||
| const auth_1 = __nccwpck_require__(3702); | const auth_1 = __nccwpck_require__(2001); | ||||||
| const crypto = __importStar(__nccwpck_require__(6113)); | const crypto = __importStar(__nccwpck_require__(6113)); | ||||||
| const fs = __importStar(__nccwpck_require__(7147)); | const fs = __importStar(__nccwpck_require__(7147)); | ||||||
| const url_1 = __nccwpck_require__(7310); | const url_1 = __nccwpck_require__(7310); | ||||||
| @ -647,7 +674,7 @@ var __importStar = (this && this.__importStar) || function (mod) { | |||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| const core = __importStar(__nccwpck_require__(2186)); | const core = __importStar(__nccwpck_require__(2186)); | ||||||
| const http_client_1 = __nccwpck_require__(9925); | const http_client_1 = __nccwpck_require__(1825); | ||||||
| const storage_blob_1 = __nccwpck_require__(4100); | const storage_blob_1 = __nccwpck_require__(4100); | ||||||
| const buffer = __importStar(__nccwpck_require__(4300)); | const buffer = __importStar(__nccwpck_require__(4300)); | ||||||
| const fs = __importStar(__nccwpck_require__(7147)); | const fs = __importStar(__nccwpck_require__(7147)); | ||||||
| @ -885,7 +912,7 @@ var __importStar = (this && this.__importStar) || function (mod) { | |||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| const core = __importStar(__nccwpck_require__(2186)); | const core = __importStar(__nccwpck_require__(2186)); | ||||||
| const http_client_1 = __nccwpck_require__(9925); | const http_client_1 = __nccwpck_require__(1825); | ||||||
| const constants_1 = __nccwpck_require__(8840); | const constants_1 = __nccwpck_require__(8840); | ||||||
| function isSuccessStatusCode(statusCode) { | function isSuccessStatusCode(statusCode) { | ||||||
|     if (!statusCode) { |     if (!statusCode) { | ||||||
| @ -962,7 +989,7 @@ function retryTypedResponse(name, method, maxAttempts = constants_1.DefaultRetry | |||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         return yield retry(name, method, (response) => response.statusCode, maxAttempts, delay,  |         return yield retry(name, method, (response) => response.statusCode, maxAttempts, delay,  | ||||||
|         // If the error object contains the statusCode property, extract it and return
 |         // If the error object contains the statusCode property, extract it and return
 | ||||||
|         // an ITypedResponse<T> so it can be processed by the retry logic.
 |         // an TypedResponse<T> so it can be processed by the retry logic.
 | ||||||
|         (error) => { |         (error) => { | ||||||
|             if (error instanceof http_client_1.HttpClientError) { |             if (error instanceof http_client_1.HttpClientError) { | ||||||
|                 return { |                 return { | ||||||
| @ -1120,6 +1147,8 @@ function createTar(archiveFolder, sourceDirectories, compressionMethod) { | |||||||
|             ...getCompressionProgram(), |             ...getCompressionProgram(), | ||||||
|             '-cf', |             '-cf', | ||||||
|             cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), |             cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), | ||||||
|  |             '--exclude', | ||||||
|  |             cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), | ||||||
|             '-P', |             '-P', | ||||||
|             '-C', |             '-C', | ||||||
|             workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), |             workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), | ||||||
| @ -2292,6 +2321,774 @@ exports.SearchState = SearchState; | |||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
|  | /***/ 2001: | ||||||
|  | /***/ (function(__unused_webpack_module, exports) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|  |     }); | ||||||
|  | }; | ||||||
|  | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | exports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0; | ||||||
|  | class BasicCredentialHandler { | ||||||
|  |     constructor(username, password) { | ||||||
|  |         this.username = username; | ||||||
|  |         this.password = password; | ||||||
|  |     } | ||||||
|  |     prepareRequest(options) { | ||||||
|  |         if (!options.headers) { | ||||||
|  |             throw Error('The request has no headers'); | ||||||
|  |         } | ||||||
|  |         options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`; | ||||||
|  |     } | ||||||
|  |     // This handler cannot handle 401
 | ||||||
|  |     canHandleAuthentication() { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     handleAuthentication() { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             throw new Error('not implemented'); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.BasicCredentialHandler = BasicCredentialHandler; | ||||||
|  | class BearerCredentialHandler { | ||||||
|  |     constructor(token) { | ||||||
|  |         this.token = token; | ||||||
|  |     } | ||||||
|  |     // currently implements pre-authorization
 | ||||||
|  |     // TODO: support preAuth = false where it hooks on 401
 | ||||||
|  |     prepareRequest(options) { | ||||||
|  |         if (!options.headers) { | ||||||
|  |             throw Error('The request has no headers'); | ||||||
|  |         } | ||||||
|  |         options.headers['Authorization'] = `Bearer ${this.token}`; | ||||||
|  |     } | ||||||
|  |     // This handler cannot handle 401
 | ||||||
|  |     canHandleAuthentication() { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     handleAuthentication() { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             throw new Error('not implemented'); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.BearerCredentialHandler = BearerCredentialHandler; | ||||||
|  | class PersonalAccessTokenCredentialHandler { | ||||||
|  |     constructor(token) { | ||||||
|  |         this.token = token; | ||||||
|  |     } | ||||||
|  |     // currently implements pre-authorization
 | ||||||
|  |     // TODO: support preAuth = false where it hooks on 401
 | ||||||
|  |     prepareRequest(options) { | ||||||
|  |         if (!options.headers) { | ||||||
|  |             throw Error('The request has no headers'); | ||||||
|  |         } | ||||||
|  |         options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`; | ||||||
|  |     } | ||||||
|  |     // This handler cannot handle 401
 | ||||||
|  |     canHandleAuthentication() { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     handleAuthentication() { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             throw new Error('not implemented'); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; | ||||||
|  | //# sourceMappingURL=auth.js.map
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 1825: | ||||||
|  | /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | /* eslint-disable @typescript-eslint/no-explicit-any */ | ||||||
|  | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||||||
|  | }) : (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     o[k2] = m[k]; | ||||||
|  | })); | ||||||
|  | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||||||
|  |     Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||||||
|  | }) : function(o, v) { | ||||||
|  |     o["default"] = v; | ||||||
|  | }); | ||||||
|  | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|  |     if (mod && mod.__esModule) return mod; | ||||||
|  |     var result = {}; | ||||||
|  |     if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||||||
|  |     __setModuleDefault(result, mod); | ||||||
|  |     return result; | ||||||
|  | }; | ||||||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|  |     }); | ||||||
|  | }; | ||||||
|  | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0; | ||||||
|  | const http = __importStar(__nccwpck_require__(3685)); | ||||||
|  | const https = __importStar(__nccwpck_require__(5687)); | ||||||
|  | const pm = __importStar(__nccwpck_require__(4977)); | ||||||
|  | const tunnel = __importStar(__nccwpck_require__(4294)); | ||||||
|  | var HttpCodes; | ||||||
|  | (function (HttpCodes) { | ||||||
|  |     HttpCodes[HttpCodes["OK"] = 200] = "OK"; | ||||||
|  |     HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; | ||||||
|  |     HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; | ||||||
|  |     HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; | ||||||
|  |     HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; | ||||||
|  |     HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; | ||||||
|  |     HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; | ||||||
|  |     HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; | ||||||
|  |     HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; | ||||||
|  |     HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; | ||||||
|  |     HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; | ||||||
|  |     HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; | ||||||
|  |     HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; | ||||||
|  |     HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; | ||||||
|  |     HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; | ||||||
|  |     HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; | ||||||
|  |     HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; | ||||||
|  |     HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; | ||||||
|  |     HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; | ||||||
|  |     HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; | ||||||
|  |     HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; | ||||||
|  |     HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; | ||||||
|  |     HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; | ||||||
|  |     HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; | ||||||
|  |     HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; | ||||||
|  |     HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; | ||||||
|  |     HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; | ||||||
|  | })(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); | ||||||
|  | var Headers; | ||||||
|  | (function (Headers) { | ||||||
|  |     Headers["Accept"] = "accept"; | ||||||
|  |     Headers["ContentType"] = "content-type"; | ||||||
|  | })(Headers = exports.Headers || (exports.Headers = {})); | ||||||
|  | var MediaTypes; | ||||||
|  | (function (MediaTypes) { | ||||||
|  |     MediaTypes["ApplicationJson"] = "application/json"; | ||||||
|  | })(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); | ||||||
|  | /** | ||||||
|  |  * Returns the proxy URL, depending upon the supplied url and proxy environment variables. | ||||||
|  |  * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 | ||||||
|  |  */ | ||||||
|  | function getProxyUrl(serverUrl) { | ||||||
|  |     const proxyUrl = pm.getProxyUrl(new URL(serverUrl)); | ||||||
|  |     return proxyUrl ? proxyUrl.href : ''; | ||||||
|  | } | ||||||
|  | exports.getProxyUrl = getProxyUrl; | ||||||
|  | const HttpRedirectCodes = [ | ||||||
|  |     HttpCodes.MovedPermanently, | ||||||
|  |     HttpCodes.ResourceMoved, | ||||||
|  |     HttpCodes.SeeOther, | ||||||
|  |     HttpCodes.TemporaryRedirect, | ||||||
|  |     HttpCodes.PermanentRedirect | ||||||
|  | ]; | ||||||
|  | const HttpResponseRetryCodes = [ | ||||||
|  |     HttpCodes.BadGateway, | ||||||
|  |     HttpCodes.ServiceUnavailable, | ||||||
|  |     HttpCodes.GatewayTimeout | ||||||
|  | ]; | ||||||
|  | const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; | ||||||
|  | const ExponentialBackoffCeiling = 10; | ||||||
|  | const ExponentialBackoffTimeSlice = 5; | ||||||
|  | class HttpClientError extends Error { | ||||||
|  |     constructor(message, statusCode) { | ||||||
|  |         super(message); | ||||||
|  |         this.name = 'HttpClientError'; | ||||||
|  |         this.statusCode = statusCode; | ||||||
|  |         Object.setPrototypeOf(this, HttpClientError.prototype); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.HttpClientError = HttpClientError; | ||||||
|  | class HttpClientResponse { | ||||||
|  |     constructor(message) { | ||||||
|  |         this.message = message; | ||||||
|  |     } | ||||||
|  |     readBody() { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { | ||||||
|  |                 let output = Buffer.alloc(0); | ||||||
|  |                 this.message.on('data', (chunk) => { | ||||||
|  |                     output = Buffer.concat([output, chunk]); | ||||||
|  |                 }); | ||||||
|  |                 this.message.on('end', () => { | ||||||
|  |                     resolve(output.toString()); | ||||||
|  |                 }); | ||||||
|  |             })); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.HttpClientResponse = HttpClientResponse; | ||||||
|  | function isHttps(requestUrl) { | ||||||
|  |     const parsedUrl = new URL(requestUrl); | ||||||
|  |     return parsedUrl.protocol === 'https:'; | ||||||
|  | } | ||||||
|  | exports.isHttps = isHttps; | ||||||
|  | class HttpClient { | ||||||
|  |     constructor(userAgent, handlers, requestOptions) { | ||||||
|  |         this._ignoreSslError = false; | ||||||
|  |         this._allowRedirects = true; | ||||||
|  |         this._allowRedirectDowngrade = false; | ||||||
|  |         this._maxRedirects = 50; | ||||||
|  |         this._allowRetries = false; | ||||||
|  |         this._maxRetries = 1; | ||||||
|  |         this._keepAlive = false; | ||||||
|  |         this._disposed = false; | ||||||
|  |         this.userAgent = userAgent; | ||||||
|  |         this.handlers = handlers || []; | ||||||
|  |         this.requestOptions = requestOptions; | ||||||
|  |         if (requestOptions) { | ||||||
|  |             if (requestOptions.ignoreSslError != null) { | ||||||
|  |                 this._ignoreSslError = requestOptions.ignoreSslError; | ||||||
|  |             } | ||||||
|  |             this._socketTimeout = requestOptions.socketTimeout; | ||||||
|  |             if (requestOptions.allowRedirects != null) { | ||||||
|  |                 this._allowRedirects = requestOptions.allowRedirects; | ||||||
|  |             } | ||||||
|  |             if (requestOptions.allowRedirectDowngrade != null) { | ||||||
|  |                 this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; | ||||||
|  |             } | ||||||
|  |             if (requestOptions.maxRedirects != null) { | ||||||
|  |                 this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); | ||||||
|  |             } | ||||||
|  |             if (requestOptions.keepAlive != null) { | ||||||
|  |                 this._keepAlive = requestOptions.keepAlive; | ||||||
|  |             } | ||||||
|  |             if (requestOptions.allowRetries != null) { | ||||||
|  |                 this._allowRetries = requestOptions.allowRetries; | ||||||
|  |             } | ||||||
|  |             if (requestOptions.maxRetries != null) { | ||||||
|  |                 this._maxRetries = requestOptions.maxRetries; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     options(requestUrl, additionalHeaders) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     get(requestUrl, additionalHeaders) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return this.request('GET', requestUrl, null, additionalHeaders || {}); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     del(requestUrl, additionalHeaders) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return this.request('DELETE', requestUrl, null, additionalHeaders || {}); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     post(requestUrl, data, additionalHeaders) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return this.request('POST', requestUrl, data, additionalHeaders || {}); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     patch(requestUrl, data, additionalHeaders) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return this.request('PATCH', requestUrl, data, additionalHeaders || {}); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     put(requestUrl, data, additionalHeaders) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return this.request('PUT', requestUrl, data, additionalHeaders || {}); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     head(requestUrl, additionalHeaders) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return this.request('HEAD', requestUrl, null, additionalHeaders || {}); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     sendStream(verb, requestUrl, stream, additionalHeaders) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return this.request(verb, requestUrl, stream, additionalHeaders); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Gets a typed object from an endpoint | ||||||
|  |      * Be aware that not found returns a null.  Other errors (4xx, 5xx) reject the promise | ||||||
|  |      */ | ||||||
|  |     getJson(requestUrl, additionalHeaders = {}) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); | ||||||
|  |             const res = yield this.get(requestUrl, additionalHeaders); | ||||||
|  |             return this._processResponse(res, this.requestOptions); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     postJson(requestUrl, obj, additionalHeaders = {}) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             const data = JSON.stringify(obj, null, 2); | ||||||
|  |             additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); | ||||||
|  |             additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); | ||||||
|  |             const res = yield this.post(requestUrl, data, additionalHeaders); | ||||||
|  |             return this._processResponse(res, this.requestOptions); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     putJson(requestUrl, obj, additionalHeaders = {}) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             const data = JSON.stringify(obj, null, 2); | ||||||
|  |             additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); | ||||||
|  |             additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); | ||||||
|  |             const res = yield this.put(requestUrl, data, additionalHeaders); | ||||||
|  |             return this._processResponse(res, this.requestOptions); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     patchJson(requestUrl, obj, additionalHeaders = {}) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             const data = JSON.stringify(obj, null, 2); | ||||||
|  |             additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); | ||||||
|  |             additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); | ||||||
|  |             const res = yield this.patch(requestUrl, data, additionalHeaders); | ||||||
|  |             return this._processResponse(res, this.requestOptions); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Makes a raw http request. | ||||||
|  |      * All other methods such as get, post, patch, and request ultimately call this. | ||||||
|  |      * Prefer get, del, post and patch | ||||||
|  |      */ | ||||||
|  |     request(verb, requestUrl, data, headers) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             if (this._disposed) { | ||||||
|  |                 throw new Error('Client has already been disposed.'); | ||||||
|  |             } | ||||||
|  |             const parsedUrl = new URL(requestUrl); | ||||||
|  |             let info = this._prepareRequest(verb, parsedUrl, headers); | ||||||
|  |             // Only perform retries on reads since writes may not be idempotent.
 | ||||||
|  |             const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) | ||||||
|  |                 ? this._maxRetries + 1 | ||||||
|  |                 : 1; | ||||||
|  |             let numTries = 0; | ||||||
|  |             let response; | ||||||
|  |             do { | ||||||
|  |                 response = yield this.requestRaw(info, data); | ||||||
|  |                 // Check if it's an authentication challenge
 | ||||||
|  |                 if (response && | ||||||
|  |                     response.message && | ||||||
|  |                     response.message.statusCode === HttpCodes.Unauthorized) { | ||||||
|  |                     let authenticationHandler; | ||||||
|  |                     for (const handler of this.handlers) { | ||||||
|  |                         if (handler.canHandleAuthentication(response)) { | ||||||
|  |                             authenticationHandler = handler; | ||||||
|  |                             break; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     if (authenticationHandler) { | ||||||
|  |                         return authenticationHandler.handleAuthentication(this, info, data); | ||||||
|  |                     } | ||||||
|  |                     else { | ||||||
|  |                         // We have received an unauthorized response but have no handlers to handle it.
 | ||||||
|  |                         // Let the response return to the caller.
 | ||||||
|  |                         return response; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 let redirectsRemaining = this._maxRedirects; | ||||||
|  |                 while (response.message.statusCode && | ||||||
|  |                     HttpRedirectCodes.includes(response.message.statusCode) && | ||||||
|  |                     this._allowRedirects && | ||||||
|  |                     redirectsRemaining > 0) { | ||||||
|  |                     const redirectUrl = response.message.headers['location']; | ||||||
|  |                     if (!redirectUrl) { | ||||||
|  |                         // if there's no location to redirect to, we won't
 | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  |                     const parsedRedirectUrl = new URL(redirectUrl); | ||||||
|  |                     if (parsedUrl.protocol === 'https:' && | ||||||
|  |                         parsedUrl.protocol !== parsedRedirectUrl.protocol && | ||||||
|  |                         !this._allowRedirectDowngrade) { | ||||||
|  |                         throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); | ||||||
|  |                     } | ||||||
|  |                     // we need to finish reading the response before reassigning response
 | ||||||
|  |                     // which will leak the open socket.
 | ||||||
|  |                     yield response.readBody(); | ||||||
|  |                     // strip authorization header if redirected to a different hostname
 | ||||||
|  |                     if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { | ||||||
|  |                         for (const header in headers) { | ||||||
|  |                             // header names are case insensitive
 | ||||||
|  |                             if (header.toLowerCase() === 'authorization') { | ||||||
|  |                                 delete headers[header]; | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     // let's make the request with the new redirectUrl
 | ||||||
|  |                     info = this._prepareRequest(verb, parsedRedirectUrl, headers); | ||||||
|  |                     response = yield this.requestRaw(info, data); | ||||||
|  |                     redirectsRemaining--; | ||||||
|  |                 } | ||||||
|  |                 if (!response.message.statusCode || | ||||||
|  |                     !HttpResponseRetryCodes.includes(response.message.statusCode)) { | ||||||
|  |                     // If not a retry code, return immediately instead of retrying
 | ||||||
|  |                     return response; | ||||||
|  |                 } | ||||||
|  |                 numTries += 1; | ||||||
|  |                 if (numTries < maxTries) { | ||||||
|  |                     yield response.readBody(); | ||||||
|  |                     yield this._performExponentialBackoff(numTries); | ||||||
|  |                 } | ||||||
|  |             } while (numTries < maxTries); | ||||||
|  |             return response; | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Needs to be called if keepAlive is set to true in request options. | ||||||
|  |      */ | ||||||
|  |     dispose() { | ||||||
|  |         if (this._agent) { | ||||||
|  |             this._agent.destroy(); | ||||||
|  |         } | ||||||
|  |         this._disposed = true; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Raw request. | ||||||
|  |      * @param info | ||||||
|  |      * @param data | ||||||
|  |      */ | ||||||
|  |     requestRaw(info, data) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return new Promise((resolve, reject) => { | ||||||
|  |                 function callbackForResult(err, res) { | ||||||
|  |                     if (err) { | ||||||
|  |                         reject(err); | ||||||
|  |                     } | ||||||
|  |                     else if (!res) { | ||||||
|  |                         // If `err` is not passed, then `res` must be passed.
 | ||||||
|  |                         reject(new Error('Unknown error')); | ||||||
|  |                     } | ||||||
|  |                     else { | ||||||
|  |                         resolve(res); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 this.requestRawWithCallback(info, data, callbackForResult); | ||||||
|  |             }); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Raw request with callback. | ||||||
|  |      * @param info | ||||||
|  |      * @param data | ||||||
|  |      * @param onResult | ||||||
|  |      */ | ||||||
|  |     requestRawWithCallback(info, data, onResult) { | ||||||
|  |         if (typeof data === 'string') { | ||||||
|  |             if (!info.options.headers) { | ||||||
|  |                 info.options.headers = {}; | ||||||
|  |             } | ||||||
|  |             info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); | ||||||
|  |         } | ||||||
|  |         let callbackCalled = false; | ||||||
|  |         function handleResult(err, res) { | ||||||
|  |             if (!callbackCalled) { | ||||||
|  |                 callbackCalled = true; | ||||||
|  |                 onResult(err, res); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         const req = info.httpModule.request(info.options, (msg) => { | ||||||
|  |             const res = new HttpClientResponse(msg); | ||||||
|  |             handleResult(undefined, res); | ||||||
|  |         }); | ||||||
|  |         let socket; | ||||||
|  |         req.on('socket', sock => { | ||||||
|  |             socket = sock; | ||||||
|  |         }); | ||||||
|  |         // If we ever get disconnected, we want the socket to timeout eventually
 | ||||||
|  |         req.setTimeout(this._socketTimeout || 3 * 60000, () => { | ||||||
|  |             if (socket) { | ||||||
|  |                 socket.end(); | ||||||
|  |             } | ||||||
|  |             handleResult(new Error(`Request timeout: ${info.options.path}`)); | ||||||
|  |         }); | ||||||
|  |         req.on('error', function (err) { | ||||||
|  |             // err has statusCode property
 | ||||||
|  |             // res should have headers
 | ||||||
|  |             handleResult(err); | ||||||
|  |         }); | ||||||
|  |         if (data && typeof data === 'string') { | ||||||
|  |             req.write(data, 'utf8'); | ||||||
|  |         } | ||||||
|  |         if (data && typeof data !== 'string') { | ||||||
|  |             data.on('close', function () { | ||||||
|  |                 req.end(); | ||||||
|  |             }); | ||||||
|  |             data.pipe(req); | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             req.end(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Gets an http agent. This function is useful when you need an http agent that handles | ||||||
|  |      * routing through a proxy server - depending upon the url and proxy environment variables. | ||||||
|  |      * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 | ||||||
|  |      */ | ||||||
|  |     getAgent(serverUrl) { | ||||||
|  |         const parsedUrl = new URL(serverUrl); | ||||||
|  |         return this._getAgent(parsedUrl); | ||||||
|  |     } | ||||||
|  |     _prepareRequest(method, requestUrl, headers) { | ||||||
|  |         const info = {}; | ||||||
|  |         info.parsedUrl = requestUrl; | ||||||
|  |         const usingSsl = info.parsedUrl.protocol === 'https:'; | ||||||
|  |         info.httpModule = usingSsl ? https : http; | ||||||
|  |         const defaultPort = usingSsl ? 443 : 80; | ||||||
|  |         info.options = {}; | ||||||
|  |         info.options.host = info.parsedUrl.hostname; | ||||||
|  |         info.options.port = info.parsedUrl.port | ||||||
|  |             ? parseInt(info.parsedUrl.port) | ||||||
|  |             : defaultPort; | ||||||
|  |         info.options.path = | ||||||
|  |             (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); | ||||||
|  |         info.options.method = method; | ||||||
|  |         info.options.headers = this._mergeHeaders(headers); | ||||||
|  |         if (this.userAgent != null) { | ||||||
|  |             info.options.headers['user-agent'] = this.userAgent; | ||||||
|  |         } | ||||||
|  |         info.options.agent = this._getAgent(info.parsedUrl); | ||||||
|  |         // gives handlers an opportunity to participate
 | ||||||
|  |         if (this.handlers) { | ||||||
|  |             for (const handler of this.handlers) { | ||||||
|  |                 handler.prepareRequest(info.options); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return info; | ||||||
|  |     } | ||||||
|  |     _mergeHeaders(headers) { | ||||||
|  |         if (this.requestOptions && this.requestOptions.headers) { | ||||||
|  |             return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {})); | ||||||
|  |         } | ||||||
|  |         return lowercaseKeys(headers || {}); | ||||||
|  |     } | ||||||
|  |     _getExistingOrDefaultHeader(additionalHeaders, header, _default) { | ||||||
|  |         let clientHeader; | ||||||
|  |         if (this.requestOptions && this.requestOptions.headers) { | ||||||
|  |             clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; | ||||||
|  |         } | ||||||
|  |         return additionalHeaders[header] || clientHeader || _default; | ||||||
|  |     } | ||||||
|  |     _getAgent(parsedUrl) { | ||||||
|  |         let agent; | ||||||
|  |         const proxyUrl = pm.getProxyUrl(parsedUrl); | ||||||
|  |         const useProxy = proxyUrl && proxyUrl.hostname; | ||||||
|  |         if (this._keepAlive && useProxy) { | ||||||
|  |             agent = this._proxyAgent; | ||||||
|  |         } | ||||||
|  |         if (this._keepAlive && !useProxy) { | ||||||
|  |             agent = this._agent; | ||||||
|  |         } | ||||||
|  |         // if agent is already assigned use that agent.
 | ||||||
|  |         if (agent) { | ||||||
|  |             return agent; | ||||||
|  |         } | ||||||
|  |         const usingSsl = parsedUrl.protocol === 'https:'; | ||||||
|  |         let maxSockets = 100; | ||||||
|  |         if (this.requestOptions) { | ||||||
|  |             maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; | ||||||
|  |         } | ||||||
|  |         // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis.
 | ||||||
|  |         if (proxyUrl && proxyUrl.hostname) { | ||||||
|  |             const agentOptions = { | ||||||
|  |                 maxSockets, | ||||||
|  |                 keepAlive: this._keepAlive, | ||||||
|  |                 proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && { | ||||||
|  |                     proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` | ||||||
|  |                 })), { host: proxyUrl.hostname, port: proxyUrl.port }) | ||||||
|  |             }; | ||||||
|  |             let tunnelAgent; | ||||||
|  |             const overHttps = proxyUrl.protocol === 'https:'; | ||||||
|  |             if (usingSsl) { | ||||||
|  |                 tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; | ||||||
|  |             } | ||||||
|  |             agent = tunnelAgent(agentOptions); | ||||||
|  |             this._proxyAgent = agent; | ||||||
|  |         } | ||||||
|  |         // if reusing agent across request and tunneling agent isn't assigned create a new agent
 | ||||||
|  |         if (this._keepAlive && !agent) { | ||||||
|  |             const options = { keepAlive: this._keepAlive, maxSockets }; | ||||||
|  |             agent = usingSsl ? new https.Agent(options) : new http.Agent(options); | ||||||
|  |             this._agent = agent; | ||||||
|  |         } | ||||||
|  |         // if not using private agent and tunnel agent isn't setup then use global agent
 | ||||||
|  |         if (!agent) { | ||||||
|  |             agent = usingSsl ? https.globalAgent : http.globalAgent; | ||||||
|  |         } | ||||||
|  |         if (usingSsl && this._ignoreSslError) { | ||||||
|  |             // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
 | ||||||
|  |             // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
 | ||||||
|  |             // we have to cast it to any and change it directly
 | ||||||
|  |             agent.options = Object.assign(agent.options || {}, { | ||||||
|  |                 rejectUnauthorized: false | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  |         return agent; | ||||||
|  |     } | ||||||
|  |     _performExponentialBackoff(retryNumber) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); | ||||||
|  |             const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); | ||||||
|  |             return new Promise(resolve => setTimeout(() => resolve(), ms)); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     _processResponse(res, options) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { | ||||||
|  |                 const statusCode = res.message.statusCode || 0; | ||||||
|  |                 const response = { | ||||||
|  |                     statusCode, | ||||||
|  |                     result: null, | ||||||
|  |                     headers: {} | ||||||
|  |                 }; | ||||||
|  |                 // not found leads to null obj returned
 | ||||||
|  |                 if (statusCode === HttpCodes.NotFound) { | ||||||
|  |                     resolve(response); | ||||||
|  |                 } | ||||||
|  |                 // get the result from the body
 | ||||||
|  |                 function dateTimeDeserializer(key, value) { | ||||||
|  |                     if (typeof value === 'string') { | ||||||
|  |                         const a = new Date(value); | ||||||
|  |                         if (!isNaN(a.valueOf())) { | ||||||
|  |                             return a; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     return value; | ||||||
|  |                 } | ||||||
|  |                 let obj; | ||||||
|  |                 let contents; | ||||||
|  |                 try { | ||||||
|  |                     contents = yield res.readBody(); | ||||||
|  |                     if (contents && contents.length > 0) { | ||||||
|  |                         if (options && options.deserializeDates) { | ||||||
|  |                             obj = JSON.parse(contents, dateTimeDeserializer); | ||||||
|  |                         } | ||||||
|  |                         else { | ||||||
|  |                             obj = JSON.parse(contents); | ||||||
|  |                         } | ||||||
|  |                         response.result = obj; | ||||||
|  |                     } | ||||||
|  |                     response.headers = res.message.headers; | ||||||
|  |                 } | ||||||
|  |                 catch (err) { | ||||||
|  |                     // Invalid resource (contents not json);  leaving result obj null
 | ||||||
|  |                 } | ||||||
|  |                 // note that 3xx redirects are handled by the http layer.
 | ||||||
|  |                 if (statusCode > 299) { | ||||||
|  |                     let msg; | ||||||
|  |                     // if exception/error in body, attempt to get better error
 | ||||||
|  |                     if (obj && obj.message) { | ||||||
|  |                         msg = obj.message; | ||||||
|  |                     } | ||||||
|  |                     else if (contents && contents.length > 0) { | ||||||
|  |                         // it may be the case that the exception is in the body message as string
 | ||||||
|  |                         msg = contents; | ||||||
|  |                     } | ||||||
|  |                     else { | ||||||
|  |                         msg = `Failed request: (${statusCode})`; | ||||||
|  |                     } | ||||||
|  |                     const err = new HttpClientError(msg, statusCode); | ||||||
|  |                     err.result = response.result; | ||||||
|  |                     reject(err); | ||||||
|  |                 } | ||||||
|  |                 else { | ||||||
|  |                     resolve(response); | ||||||
|  |                 } | ||||||
|  |             })); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.HttpClient = HttpClient; | ||||||
|  | const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); | ||||||
|  | //# sourceMappingURL=index.js.map
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 4977: | ||||||
|  | /***/ ((__unused_webpack_module, exports) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | exports.checkBypass = exports.getProxyUrl = void 0; | ||||||
|  | function getProxyUrl(reqUrl) { | ||||||
|  |     const usingSsl = reqUrl.protocol === 'https:'; | ||||||
|  |     if (checkBypass(reqUrl)) { | ||||||
|  |         return undefined; | ||||||
|  |     } | ||||||
|  |     const proxyVar = (() => { | ||||||
|  |         if (usingSsl) { | ||||||
|  |             return process.env['https_proxy'] || process.env['HTTPS_PROXY']; | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             return process.env['http_proxy'] || process.env['HTTP_PROXY']; | ||||||
|  |         } | ||||||
|  |     })(); | ||||||
|  |     if (proxyVar) { | ||||||
|  |         return new URL(proxyVar); | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |         return undefined; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.getProxyUrl = getProxyUrl; | ||||||
|  | function checkBypass(reqUrl) { | ||||||
|  |     if (!reqUrl.hostname) { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; | ||||||
|  |     if (!noProxy) { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     // Determine the request port
 | ||||||
|  |     let reqPort; | ||||||
|  |     if (reqUrl.port) { | ||||||
|  |         reqPort = Number(reqUrl.port); | ||||||
|  |     } | ||||||
|  |     else if (reqUrl.protocol === 'http:') { | ||||||
|  |         reqPort = 80; | ||||||
|  |     } | ||||||
|  |     else if (reqUrl.protocol === 'https:') { | ||||||
|  |         reqPort = 443; | ||||||
|  |     } | ||||||
|  |     // Format the request hostname and hostname with port
 | ||||||
|  |     const upperReqHosts = [reqUrl.hostname.toUpperCase()]; | ||||||
|  |     if (typeof reqPort === 'number') { | ||||||
|  |         upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); | ||||||
|  |     } | ||||||
|  |     // Compare request host against noproxy
 | ||||||
|  |     for (const upperNoProxyItem of noProxy | ||||||
|  |         .split(',') | ||||||
|  |         .map(x => x.trim().toUpperCase()) | ||||||
|  |         .filter(x => x)) { | ||||||
|  |         if (upperReqHosts.some(x => x === upperNoProxyItem)) { | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return false; | ||||||
|  | } | ||||||
|  | exports.checkBypass = checkBypass; | ||||||
|  | //# sourceMappingURL=proxy.js.map
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
| /***/ 3771: | /***/ 3771: | ||||||
| /***/ ((module, exports) => { | /***/ ((module, exports) => { | ||||||
| 
 | 
 | ||||||
| @ -6131,72 +6928,6 @@ class SearchState { | |||||||
| exports.SearchState = SearchState; | exports.SearchState = SearchState; | ||||||
| //# sourceMappingURL=internal-search-state.js.map
 | //# sourceMappingURL=internal-search-state.js.map
 | ||||||
| 
 | 
 | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 3702: |  | ||||||
| /***/ ((__unused_webpack_module, exports) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); |  | ||||||
| class BasicCredentialHandler { |  | ||||||
|     constructor(username, password) { |  | ||||||
|         this.username = username; |  | ||||||
|         this.password = password; |  | ||||||
|     } |  | ||||||
|     prepareRequest(options) { |  | ||||||
|         options.headers['Authorization'] = |  | ||||||
|             'Basic ' + |  | ||||||
|                 Buffer.from(this.username + ':' + this.password).toString('base64'); |  | ||||||
|     } |  | ||||||
|     // This handler cannot handle 401
 |  | ||||||
|     canHandleAuthentication(response) { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|     handleAuthentication(httpClient, requestInfo, objs) { |  | ||||||
|         return null; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| exports.BasicCredentialHandler = BasicCredentialHandler; |  | ||||||
| class BearerCredentialHandler { |  | ||||||
|     constructor(token) { |  | ||||||
|         this.token = token; |  | ||||||
|     } |  | ||||||
|     // currently implements pre-authorization
 |  | ||||||
|     // TODO: support preAuth = false where it hooks on 401
 |  | ||||||
|     prepareRequest(options) { |  | ||||||
|         options.headers['Authorization'] = 'Bearer ' + this.token; |  | ||||||
|     } |  | ||||||
|     // This handler cannot handle 401
 |  | ||||||
|     canHandleAuthentication(response) { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|     handleAuthentication(httpClient, requestInfo, objs) { |  | ||||||
|         return null; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| exports.BearerCredentialHandler = BearerCredentialHandler; |  | ||||||
| class PersonalAccessTokenCredentialHandler { |  | ||||||
|     constructor(token) { |  | ||||||
|         this.token = token; |  | ||||||
|     } |  | ||||||
|     // currently implements pre-authorization
 |  | ||||||
|     // TODO: support preAuth = false where it hooks on 401
 |  | ||||||
|     prepareRequest(options) { |  | ||||||
|         options.headers['Authorization'] = |  | ||||||
|             'Basic ' + Buffer.from('PAT:' + this.token).toString('base64'); |  | ||||||
|     } |  | ||||||
|     // This handler cannot handle 401
 |  | ||||||
|     canHandleAuthentication(response) { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|     handleAuthentication(httpClient, requestInfo, objs) { |  | ||||||
|         return null; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 9925: | /***/ 9925: | ||||||
| @ -65385,178 +66116,178 @@ try { | |||||||
| /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * @fileoverview this file provides methods handling dependency cache |  * @fileoverview this file provides methods handling dependency cache | ||||||
|  */ |  */ | ||||||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||||||
|     if (k2 === undefined) k2 = k; |     if (k2 === undefined) k2 = k; | ||||||
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); |     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||||||
| }) : (function(o, m, k, k2) { | }) : (function(o, m, k, k2) { | ||||||
|     if (k2 === undefined) k2 = k; |     if (k2 === undefined) k2 = k; | ||||||
|     o[k2] = m[k]; |     o[k2] = m[k]; | ||||||
| })); | })); | ||||||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||||||
|     Object.defineProperty(o, "default", { enumerable: true, value: v }); |     Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||||||
| }) : function(o, v) { | }) : function(o, v) { | ||||||
|     o["default"] = v; |     o["default"] = v; | ||||||
| }); | }); | ||||||
| var __importStar = (this && this.__importStar) || function (mod) { | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|     if (mod && mod.__esModule) return mod; |     if (mod && mod.__esModule) return mod; | ||||||
|     var result = {}; |     var result = {}; | ||||||
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); |     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||||||
|     __setModuleDefault(result, mod); |     __setModuleDefault(result, mod); | ||||||
|     return result; |     return result; | ||||||
| }; | }; | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|     return new (P || (P = Promise))(function (resolve, reject) { |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } |         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 rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||||
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| var __importDefault = (this && this.__importDefault) || function (mod) { | var __importDefault = (this && this.__importDefault) || function (mod) { | ||||||
|     return (mod && mod.__esModule) ? mod : { "default": mod }; |     return (mod && mod.__esModule) ? mod : { "default": mod }; | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| exports.save = exports.restore = void 0; | exports.save = exports.restore = void 0; | ||||||
| const path_1 = __nccwpck_require__(1017); | const path_1 = __nccwpck_require__(1017); | ||||||
| const os_1 = __importDefault(__nccwpck_require__(2037)); | const os_1 = __importDefault(__nccwpck_require__(2037)); | ||||||
| const cache = __importStar(__nccwpck_require__(7799)); | const cache = __importStar(__nccwpck_require__(7799)); | ||||||
| const core = __importStar(__nccwpck_require__(2186)); | const core = __importStar(__nccwpck_require__(2186)); | ||||||
| const glob = __importStar(__nccwpck_require__(8090)); | const glob = __importStar(__nccwpck_require__(8090)); | ||||||
| const STATE_CACHE_PRIMARY_KEY = 'cache-primary-key'; | const STATE_CACHE_PRIMARY_KEY = 'cache-primary-key'; | ||||||
| const CACHE_MATCHED_KEY = 'cache-matched-key'; | const CACHE_MATCHED_KEY = 'cache-matched-key'; | ||||||
| const CACHE_KEY_PREFIX = 'setup-java'; | const CACHE_KEY_PREFIX = 'setup-java'; | ||||||
| const supportedPackageManager = [ | const supportedPackageManager = [ | ||||||
|     { |     { | ||||||
|         id: 'maven', |         id: 'maven', | ||||||
|         path: [path_1.join(os_1.default.homedir(), '.m2', 'repository')], |         path: [path_1.join(os_1.default.homedir(), '.m2', 'repository')], | ||||||
|         // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---maven
 |         // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---maven
 | ||||||
|         pattern: ['**/pom.xml'] |         pattern: ['**/pom.xml'] | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|         id: 'gradle', |         id: 'gradle', | ||||||
|         path: [path_1.join(os_1.default.homedir(), '.gradle', 'caches'), path_1.join(os_1.default.homedir(), '.gradle', 'wrapper')], |         path: [path_1.join(os_1.default.homedir(), '.gradle', 'caches'), path_1.join(os_1.default.homedir(), '.gradle', 'wrapper')], | ||||||
|         // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---gradle
 |         // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---gradle
 | ||||||
|         pattern: ['**/*.gradle*', '**/gradle-wrapper.properties'] |         pattern: ['**/*.gradle*', '**/gradle-wrapper.properties'] | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|         id: 'sbt', |         id: 'sbt', | ||||||
|         path: [ |         path: [ | ||||||
|             path_1.join(os_1.default.homedir(), '.ivy2', 'cache'), |             path_1.join(os_1.default.homedir(), '.ivy2', 'cache'), | ||||||
|             path_1.join(os_1.default.homedir(), '.sbt'), |             path_1.join(os_1.default.homedir(), '.sbt'), | ||||||
|             getCoursierCachePath() |             getCoursierCachePath() | ||||||
|         ], |         ], | ||||||
|         pattern: ['**/*.sbt', '**/project/build.properties', '**/project/**.{scala,sbt}'] |         pattern: ['**/*.sbt', '**/project/build.properties', '**/project/**.{scala,sbt}'] | ||||||
|     } |     } | ||||||
| ]; | ]; | ||||||
| function getCoursierCachePath() { | function getCoursierCachePath() { | ||||||
|     if (os_1.default.type() === 'Linux') |     if (os_1.default.type() === 'Linux') | ||||||
|         return path_1.join(os_1.default.homedir(), '.cache', 'coursier'); |         return path_1.join(os_1.default.homedir(), '.cache', 'coursier'); | ||||||
|     if (os_1.default.type() === 'Darwin') |     if (os_1.default.type() === 'Darwin') | ||||||
|         return path_1.join(os_1.default.homedir(), 'Library', 'Caches', 'Coursier'); |         return path_1.join(os_1.default.homedir(), 'Library', 'Caches', 'Coursier'); | ||||||
|     return path_1.join(os_1.default.homedir(), 'AppData', 'Local', 'Coursier', 'Cache'); |     return path_1.join(os_1.default.homedir(), 'AppData', 'Local', 'Coursier', 'Cache'); | ||||||
| } | } | ||||||
| function findPackageManager(id) { | function findPackageManager(id) { | ||||||
|     const packageManager = supportedPackageManager.find(packageManager => packageManager.id === id); |     const packageManager = supportedPackageManager.find(packageManager => packageManager.id === id); | ||||||
|     if (packageManager === undefined) { |     if (packageManager === undefined) { | ||||||
|         throw new Error(`unknown package manager specified: ${id}`); |         throw new Error(`unknown package manager specified: ${id}`); | ||||||
|     } |     } | ||||||
|     return packageManager; |     return packageManager; | ||||||
| } | } | ||||||
| /** | /** | ||||||
|  * A function that generates a cache key to use. |  * A function that generates a cache key to use. | ||||||
|  * Format of the generated key will be "${{ platform }}-${{ id }}-${{ fileHash }}"". |  * Format of the generated key will be "${{ platform }}-${{ id }}-${{ fileHash }}"". | ||||||
|  * If there is no file matched to {@link PackageManager.path}, the generated key ends with a dash (-). |  * If there is no file matched to {@link PackageManager.path}, the generated key ends with a dash (-). | ||||||
|  * @see {@link https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows#matching-a-cache-key|spec of cache key}
 |  * @see {@link https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows#matching-a-cache-key|spec of cache key}
 | ||||||
|  */ |  */ | ||||||
| function computeCacheKey(packageManager) { | function computeCacheKey(packageManager) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         const hash = yield glob.hashFiles(packageManager.pattern.join('\n')); |         const hash = yield glob.hashFiles(packageManager.pattern.join('\n')); | ||||||
|         return `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${packageManager.id}-${hash}`; |         return `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${packageManager.id}-${hash}`; | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| /** | /** | ||||||
|  * Restore the dependency cache |  * Restore the dependency cache | ||||||
|  * @param id ID of the package manager, should be "maven" or "gradle" |  * @param id ID of the package manager, should be "maven" or "gradle" | ||||||
|  */ |  */ | ||||||
| function restore(id) { | function restore(id) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         const packageManager = findPackageManager(id); |         const packageManager = findPackageManager(id); | ||||||
|         const primaryKey = yield computeCacheKey(packageManager); |         const primaryKey = yield computeCacheKey(packageManager); | ||||||
|         core.debug(`primary key is ${primaryKey}`); |         core.debug(`primary key is ${primaryKey}`); | ||||||
|         core.saveState(STATE_CACHE_PRIMARY_KEY, primaryKey); |         core.saveState(STATE_CACHE_PRIMARY_KEY, primaryKey); | ||||||
|         if (primaryKey.endsWith('-')) { |         if (primaryKey.endsWith('-')) { | ||||||
|             throw new Error(`No file in ${process.cwd()} matched to [${packageManager.pattern}], make sure you have checked out the target repository`); |             throw new Error(`No file in ${process.cwd()} matched to [${packageManager.pattern}], make sure you have checked out the target repository`); | ||||||
|         } |         } | ||||||
|         const matchedKey = yield cache.restoreCache(packageManager.path, primaryKey, [ |         const matchedKey = yield cache.restoreCache(packageManager.path, primaryKey, [ | ||||||
|             `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${id}` |             `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${id}` | ||||||
|         ]); |         ]); | ||||||
|         if (matchedKey) { |         if (matchedKey) { | ||||||
|             core.saveState(CACHE_MATCHED_KEY, matchedKey); |             core.saveState(CACHE_MATCHED_KEY, matchedKey); | ||||||
|             core.setOutput('cache-hit', matchedKey === primaryKey); |             core.setOutput('cache-hit', matchedKey === primaryKey); | ||||||
|             core.info(`Cache restored from key: ${matchedKey}`); |             core.info(`Cache restored from key: ${matchedKey}`); | ||||||
|         } |         } | ||||||
|         else { |         else { | ||||||
|             core.setOutput('cache-hit', false); |             core.setOutput('cache-hit', false); | ||||||
|             core.info(`${packageManager.id} cache is not found`); |             core.info(`${packageManager.id} cache is not found`); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| exports.restore = restore; | exports.restore = restore; | ||||||
| /** | /** | ||||||
|  * Save the dependency cache |  * Save the dependency cache | ||||||
|  * @param id ID of the package manager, should be "maven" or "gradle" |  * @param id ID of the package manager, should be "maven" or "gradle" | ||||||
|  */ |  */ | ||||||
| function save(id) { | function save(id) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         const packageManager = findPackageManager(id); |         const packageManager = findPackageManager(id); | ||||||
|         const matchedKey = core.getState(CACHE_MATCHED_KEY); |         const matchedKey = core.getState(CACHE_MATCHED_KEY); | ||||||
|         // Inputs are re-evaluted before the post action, so we want the original key used for restore
 |         // Inputs are re-evaluted before the post action, so we want the original key used for restore
 | ||||||
|         const primaryKey = core.getState(STATE_CACHE_PRIMARY_KEY); |         const primaryKey = core.getState(STATE_CACHE_PRIMARY_KEY); | ||||||
|         if (!primaryKey) { |         if (!primaryKey) { | ||||||
|             core.warning('Error retrieving key from state.'); |             core.warning('Error retrieving key from state.'); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         else if (matchedKey === primaryKey) { |         else if (matchedKey === primaryKey) { | ||||||
|             // no change in target directories
 |             // no change in target directories
 | ||||||
|             core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`); |             core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         try { |         try { | ||||||
|             yield cache.saveCache(packageManager.path, primaryKey); |             yield cache.saveCache(packageManager.path, primaryKey); | ||||||
|             core.info(`Cache saved with the key: ${primaryKey}`); |             core.info(`Cache saved with the key: ${primaryKey}`); | ||||||
|         } |         } | ||||||
|         catch (error) { |         catch (error) { | ||||||
|             if (error.name === cache.ReserveCacheError.name) { |             if (error.name === cache.ReserveCacheError.name) { | ||||||
|                 core.info(error.message); |                 core.info(error.message); | ||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
|                 if (isProbablyGradleDaemonProblem(packageManager, error)) { |                 if (isProbablyGradleDaemonProblem(packageManager, error)) { | ||||||
|                     core.warning('Failed to save Gradle cache on Windows. If tar.exe reported "Permission denied", try to run Gradle with `--no-daemon` option. Refer to https://github.com/actions/cache/issues/454 for details.'); |                     core.warning('Failed to save Gradle cache on Windows. If tar.exe reported "Permission denied", try to run Gradle with `--no-daemon` option. Refer to https://github.com/actions/cache/issues/454 for details.'); | ||||||
|                 } |                 } | ||||||
|                 throw error; |                 throw error; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| exports.save = save; | exports.save = save; | ||||||
| /** | /** | ||||||
|  * @param packageManager the specified package manager by user |  * @param packageManager the specified package manager by user | ||||||
|  * @param error the error thrown by the saveCache |  * @param error the error thrown by the saveCache | ||||||
|  * @returns true if the given error seems related to the {@link https://github.com/actions/cache/issues/454|running Gradle Daemon issue}.
 |  * @returns true if the given error seems related to the {@link https://github.com/actions/cache/issues/454|running Gradle Daemon issue}.
 | ||||||
|  * @see {@link https://github.com/actions/cache/issues/454#issuecomment-840493935|why --no-daemon is necessary}
 |  * @see {@link https://github.com/actions/cache/issues/454#issuecomment-840493935|why --no-daemon is necessary}
 | ||||||
|  */ |  */ | ||||||
| function isProbablyGradleDaemonProblem(packageManager, error) { | function isProbablyGradleDaemonProblem(packageManager, error) { | ||||||
|     if (packageManager.id !== 'gradle' || process.env['RUNNER_OS'] !== 'Windows') { |     if (packageManager.id !== 'gradle' || process.env['RUNNER_OS'] !== 'Windows') { | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|     const message = error.message || ''; |     const message = error.message || ''; | ||||||
|     return message.startsWith('Tar failed with error: '); |     return message.startsWith('Tar failed with error: '); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| @ -65565,99 +66296,99 @@ function isProbablyGradleDaemonProblem(packageManager, error) { | |||||||
| /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||||||
|     if (k2 === undefined) k2 = k; |     if (k2 === undefined) k2 = k; | ||||||
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); |     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||||||
| }) : (function(o, m, k, k2) { | }) : (function(o, m, k, k2) { | ||||||
|     if (k2 === undefined) k2 = k; |     if (k2 === undefined) k2 = k; | ||||||
|     o[k2] = m[k]; |     o[k2] = m[k]; | ||||||
| })); | })); | ||||||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||||||
|     Object.defineProperty(o, "default", { enumerable: true, value: v }); |     Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||||||
| }) : function(o, v) { | }) : function(o, v) { | ||||||
|     o["default"] = v; |     o["default"] = v; | ||||||
| }); | }); | ||||||
| var __importStar = (this && this.__importStar) || function (mod) { | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|     if (mod && mod.__esModule) return mod; |     if (mod && mod.__esModule) return mod; | ||||||
|     var result = {}; |     var result = {}; | ||||||
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); |     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||||||
|     __setModuleDefault(result, mod); |     __setModuleDefault(result, mod); | ||||||
|     return result; |     return result; | ||||||
| }; | }; | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|     return new (P || (P = Promise))(function (resolve, reject) { |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } |         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 rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||||
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| exports.run = void 0; | exports.run = void 0; | ||||||
| const core = __importStar(__nccwpck_require__(2186)); | const core = __importStar(__nccwpck_require__(2186)); | ||||||
| const gpg = __importStar(__nccwpck_require__(3759)); | const gpg = __importStar(__nccwpck_require__(3759)); | ||||||
| const constants = __importStar(__nccwpck_require__(9042)); | const constants = __importStar(__nccwpck_require__(9042)); | ||||||
| const util_1 = __nccwpck_require__(2629); | const util_1 = __nccwpck_require__(2629); | ||||||
| const cache_1 = __nccwpck_require__(4810); | const cache_1 = __nccwpck_require__(4810); | ||||||
| function removePrivateKeyFromKeychain() { | function removePrivateKeyFromKeychain() { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         if (core.getInput(constants.INPUT_GPG_PRIVATE_KEY, { required: false })) { |         if (core.getInput(constants.INPUT_GPG_PRIVATE_KEY, { required: false })) { | ||||||
|             core.info('Removing private key from keychain'); |             core.info('Removing private key from keychain'); | ||||||
|             try { |             try { | ||||||
|                 const keyFingerprint = core.getState(constants.STATE_GPG_PRIVATE_KEY_FINGERPRINT); |                 const keyFingerprint = core.getState(constants.STATE_GPG_PRIVATE_KEY_FINGERPRINT); | ||||||
|                 yield gpg.deleteKey(keyFingerprint); |                 yield gpg.deleteKey(keyFingerprint); | ||||||
|             } |             } | ||||||
|             catch (error) { |             catch (error) { | ||||||
|                 core.setFailed(`Failed to remove private key due to: ${error.message}`); |                 core.setFailed(`Failed to remove private key due to: ${error.message}`); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| /** | /** | ||||||
|  * Check given input and run a save process for the specified package manager |  * Check given input and run a save process for the specified package manager | ||||||
|  * @returns Promise that will be resolved when the save process finishes |  * @returns Promise that will be resolved when the save process finishes | ||||||
|  */ |  */ | ||||||
| function saveCache() { | function saveCache() { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         const jobStatus = util_1.isJobStatusSuccess(); |         const jobStatus = util_1.isJobStatusSuccess(); | ||||||
|         const cache = core.getInput(constants.INPUT_CACHE); |         const cache = core.getInput(constants.INPUT_CACHE); | ||||||
|         return jobStatus && cache ? cache_1.save(cache) : Promise.resolve(); |         return jobStatus && cache ? cache_1.save(cache) : Promise.resolve(); | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| /** | /** | ||||||
|  * The save process is best-effort, and it should not make the workflow fail |  * The save process is best-effort, and it should not make the workflow fail | ||||||
|  * even though this process throws an error. |  * even though this process throws an error. | ||||||
|  * @param promise the promise to ignore error from |  * @param promise the promise to ignore error from | ||||||
|  * @returns Promise that will ignore error reported by the given promise |  * @returns Promise that will ignore error reported by the given promise | ||||||
|  */ |  */ | ||||||
| function ignoreError(promise) { | function ignoreError(promise) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         return new Promise(resolve => { |         return new Promise(resolve => { | ||||||
|             promise |             promise | ||||||
|                 .catch(error => { |                 .catch(error => { | ||||||
|                 core.warning(error); |                 core.warning(error); | ||||||
|                 resolve(void 0); |                 resolve(void 0); | ||||||
|             }) |             }) | ||||||
|                 .then(resolve); |                 .then(resolve); | ||||||
|         }); |         }); | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| function run() { | function run() { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         yield removePrivateKeyFromKeychain(); |         yield removePrivateKeyFromKeychain(); | ||||||
|         yield ignoreError(saveCache()); |         yield ignoreError(saveCache()); | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| exports.run = run; | exports.run = run; | ||||||
| if (require.main === require.cache[eval('__filename')]) { | if (require.main === require.cache[eval('__filename')]) { | ||||||
|     run(); |     run(); | ||||||
| } | } | ||||||
| else { | else { | ||||||
|     // https://nodejs.org/api/modules.html#modules_accessing_the_main_module
 |     // https://nodejs.org/api/modules.html#modules_accessing_the_main_module
 | ||||||
|     core.info('the script is loaded as a module, so skipping the execution'); |     core.info('the script is loaded as a module, so skipping the execution'); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| @ -65666,28 +66397,28 @@ else { | |||||||
| /***/ ((__unused_webpack_module, exports) => { | /***/ ((__unused_webpack_module, exports) => { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_JOB_STATUS = exports.INPUT_CACHE = exports.INPUT_DEFAULT_GPG_PASSPHRASE = exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = exports.INPUT_GPG_PASSPHRASE = exports.INPUT_GPG_PRIVATE_KEY = exports.INPUT_OVERWRITE_SETTINGS = exports.INPUT_SETTINGS_PATH = exports.INPUT_SERVER_PASSWORD = exports.INPUT_SERVER_USERNAME = exports.INPUT_SERVER_ID = exports.INPUT_CHECK_LATEST = exports.INPUT_JDK_FILE = exports.INPUT_DISTRIBUTION = exports.INPUT_JAVA_PACKAGE = exports.INPUT_ARCHITECTURE = exports.INPUT_JAVA_VERSION = exports.MACOS_JAVA_CONTENT_POSTFIX = void 0; | exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_JOB_STATUS = exports.INPUT_CACHE = exports.INPUT_DEFAULT_GPG_PASSPHRASE = exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = exports.INPUT_GPG_PASSPHRASE = exports.INPUT_GPG_PRIVATE_KEY = exports.INPUT_OVERWRITE_SETTINGS = exports.INPUT_SETTINGS_PATH = exports.INPUT_SERVER_PASSWORD = exports.INPUT_SERVER_USERNAME = exports.INPUT_SERVER_ID = exports.INPUT_CHECK_LATEST = exports.INPUT_JDK_FILE = exports.INPUT_DISTRIBUTION = exports.INPUT_JAVA_PACKAGE = exports.INPUT_ARCHITECTURE = exports.INPUT_JAVA_VERSION = exports.MACOS_JAVA_CONTENT_POSTFIX = void 0; | ||||||
| exports.MACOS_JAVA_CONTENT_POSTFIX = 'Contents/Home'; | exports.MACOS_JAVA_CONTENT_POSTFIX = 'Contents/Home'; | ||||||
| exports.INPUT_JAVA_VERSION = 'java-version'; | exports.INPUT_JAVA_VERSION = 'java-version'; | ||||||
| exports.INPUT_ARCHITECTURE = 'architecture'; | exports.INPUT_ARCHITECTURE = 'architecture'; | ||||||
| exports.INPUT_JAVA_PACKAGE = 'java-package'; | exports.INPUT_JAVA_PACKAGE = 'java-package'; | ||||||
| exports.INPUT_DISTRIBUTION = 'distribution'; | exports.INPUT_DISTRIBUTION = 'distribution'; | ||||||
| exports.INPUT_JDK_FILE = 'jdkFile'; | exports.INPUT_JDK_FILE = 'jdkFile'; | ||||||
| exports.INPUT_CHECK_LATEST = 'check-latest'; | exports.INPUT_CHECK_LATEST = 'check-latest'; | ||||||
| exports.INPUT_SERVER_ID = 'server-id'; | exports.INPUT_SERVER_ID = 'server-id'; | ||||||
| exports.INPUT_SERVER_USERNAME = 'server-username'; | exports.INPUT_SERVER_USERNAME = 'server-username'; | ||||||
| exports.INPUT_SERVER_PASSWORD = 'server-password'; | exports.INPUT_SERVER_PASSWORD = 'server-password'; | ||||||
| exports.INPUT_SETTINGS_PATH = 'settings-path'; | exports.INPUT_SETTINGS_PATH = 'settings-path'; | ||||||
| exports.INPUT_OVERWRITE_SETTINGS = 'overwrite-settings'; | exports.INPUT_OVERWRITE_SETTINGS = 'overwrite-settings'; | ||||||
| exports.INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; | exports.INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; | ||||||
| exports.INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; | exports.INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; | ||||||
| exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; | exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; | ||||||
| exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; | exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; | ||||||
| exports.INPUT_CACHE = 'cache'; | exports.INPUT_CACHE = 'cache'; | ||||||
| exports.INPUT_JOB_STATUS = 'job-status'; | exports.INPUT_JOB_STATUS = 'job-status'; | ||||||
| exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; | exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| @ -65696,74 +66427,74 @@ exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; | |||||||
| /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||||||
|     if (k2 === undefined) k2 = k; |     if (k2 === undefined) k2 = k; | ||||||
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); |     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||||||
| }) : (function(o, m, k, k2) { | }) : (function(o, m, k, k2) { | ||||||
|     if (k2 === undefined) k2 = k; |     if (k2 === undefined) k2 = k; | ||||||
|     o[k2] = m[k]; |     o[k2] = m[k]; | ||||||
| })); | })); | ||||||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||||||
|     Object.defineProperty(o, "default", { enumerable: true, value: v }); |     Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||||||
| }) : function(o, v) { | }) : function(o, v) { | ||||||
|     o["default"] = v; |     o["default"] = v; | ||||||
| }); | }); | ||||||
| var __importStar = (this && this.__importStar) || function (mod) { | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|     if (mod && mod.__esModule) return mod; |     if (mod && mod.__esModule) return mod; | ||||||
|     var result = {}; |     var result = {}; | ||||||
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); |     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||||||
|     __setModuleDefault(result, mod); |     __setModuleDefault(result, mod); | ||||||
|     return result; |     return result; | ||||||
| }; | }; | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|     return new (P || (P = Promise))(function (resolve, reject) { |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } |         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 rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||||
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| exports.deleteKey = exports.importKey = exports.PRIVATE_KEY_FILE = void 0; | exports.deleteKey = exports.importKey = exports.PRIVATE_KEY_FILE = void 0; | ||||||
| const fs = __importStar(__nccwpck_require__(7147)); | const fs = __importStar(__nccwpck_require__(7147)); | ||||||
| const path = __importStar(__nccwpck_require__(1017)); | const path = __importStar(__nccwpck_require__(1017)); | ||||||
| const io = __importStar(__nccwpck_require__(7436)); | const io = __importStar(__nccwpck_require__(7436)); | ||||||
| const exec = __importStar(__nccwpck_require__(1514)); | const exec = __importStar(__nccwpck_require__(1514)); | ||||||
| const util = __importStar(__nccwpck_require__(2629)); | const util = __importStar(__nccwpck_require__(2629)); | ||||||
| exports.PRIVATE_KEY_FILE = path.join(util.getTempDir(), 'private-key.asc'); | exports.PRIVATE_KEY_FILE = path.join(util.getTempDir(), 'private-key.asc'); | ||||||
| const PRIVATE_KEY_FINGERPRINT_REGEX = /\w{40}/; | const PRIVATE_KEY_FINGERPRINT_REGEX = /\w{40}/; | ||||||
| function importKey(privateKey) { | function importKey(privateKey) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         fs.writeFileSync(exports.PRIVATE_KEY_FILE, privateKey, { |         fs.writeFileSync(exports.PRIVATE_KEY_FILE, privateKey, { | ||||||
|             encoding: 'utf-8', |             encoding: 'utf-8', | ||||||
|             flag: 'w' |             flag: 'w' | ||||||
|         }); |         }); | ||||||
|         let output = ''; |         let output = ''; | ||||||
|         const options = { |         const options = { | ||||||
|             silent: true, |             silent: true, | ||||||
|             listeners: { |             listeners: { | ||||||
|                 stdout: (data) => { |                 stdout: (data) => { | ||||||
|                     output += data.toString(); |                     output += data.toString(); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         }; |         }; | ||||||
|         yield exec.exec('gpg', ['--batch', '--import-options', 'import-show', '--import', exports.PRIVATE_KEY_FILE], options); |         yield exec.exec('gpg', ['--batch', '--import-options', 'import-show', '--import', exports.PRIVATE_KEY_FILE], options); | ||||||
|         yield io.rmRF(exports.PRIVATE_KEY_FILE); |         yield io.rmRF(exports.PRIVATE_KEY_FILE); | ||||||
|         const match = output.match(PRIVATE_KEY_FINGERPRINT_REGEX); |         const match = output.match(PRIVATE_KEY_FINGERPRINT_REGEX); | ||||||
|         return match && match[0]; |         return match && match[0]; | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| exports.importKey = importKey; | exports.importKey = importKey; | ||||||
| function deleteKey(keyFingerprint) { | function deleteKey(keyFingerprint) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         yield exec.exec('gpg', ['--batch', '--yes', '--delete-secret-and-public-key', keyFingerprint], { |         yield exec.exec('gpg', ['--batch', '--yes', '--delete-secret-and-public-key', keyFingerprint], { | ||||||
|             silent: true |             silent: true | ||||||
|         }); |         }); | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| exports.deleteKey = deleteKey; | exports.deleteKey = deleteKey; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| @ -65772,135 +66503,135 @@ exports.deleteKey = deleteKey; | |||||||
| /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||||||
|     if (k2 === undefined) k2 = k; |     if (k2 === undefined) k2 = k; | ||||||
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); |     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||||||
| }) : (function(o, m, k, k2) { | }) : (function(o, m, k, k2) { | ||||||
|     if (k2 === undefined) k2 = k; |     if (k2 === undefined) k2 = k; | ||||||
|     o[k2] = m[k]; |     o[k2] = m[k]; | ||||||
| })); | })); | ||||||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||||||
|     Object.defineProperty(o, "default", { enumerable: true, value: v }); |     Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||||||
| }) : function(o, v) { | }) : function(o, v) { | ||||||
|     o["default"] = v; |     o["default"] = v; | ||||||
| }); | }); | ||||||
| var __importStar = (this && this.__importStar) || function (mod) { | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|     if (mod && mod.__esModule) return mod; |     if (mod && mod.__esModule) return mod; | ||||||
|     var result = {}; |     var result = {}; | ||||||
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); |     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||||||
|     __setModuleDefault(result, mod); |     __setModuleDefault(result, mod); | ||||||
|     return result; |     return result; | ||||||
| }; | }; | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|     return new (P || (P = Promise))(function (resolve, reject) { |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } |         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 rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||||
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| var __importDefault = (this && this.__importDefault) || function (mod) { | var __importDefault = (this && this.__importDefault) || function (mod) { | ||||||
|     return (mod && mod.__esModule) ? mod : { "default": mod }; |     return (mod && mod.__esModule) ? mod : { "default": mod }; | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| exports.isCacheFeatureAvailable = exports.isGhes = exports.isJobStatusSuccess = exports.getToolcachePath = exports.isVersionSatisfies = exports.getDownloadArchiveExtension = exports.extractJdkFile = exports.getVersionFromToolcachePath = exports.getBooleanInput = exports.getTempDir = void 0; | exports.isCacheFeatureAvailable = exports.isGhes = exports.isJobStatusSuccess = exports.getToolcachePath = exports.isVersionSatisfies = exports.getDownloadArchiveExtension = exports.extractJdkFile = exports.getVersionFromToolcachePath = exports.getBooleanInput = exports.getTempDir = void 0; | ||||||
| const os_1 = __importDefault(__nccwpck_require__(2037)); | const os_1 = __importDefault(__nccwpck_require__(2037)); | ||||||
| const path_1 = __importDefault(__nccwpck_require__(1017)); | const path_1 = __importDefault(__nccwpck_require__(1017)); | ||||||
| const fs = __importStar(__nccwpck_require__(7147)); | const fs = __importStar(__nccwpck_require__(7147)); | ||||||
| const semver = __importStar(__nccwpck_require__(1383)); | const semver = __importStar(__nccwpck_require__(1383)); | ||||||
| const cache = __importStar(__nccwpck_require__(7799)); | const cache = __importStar(__nccwpck_require__(7799)); | ||||||
| const core = __importStar(__nccwpck_require__(2186)); | const core = __importStar(__nccwpck_require__(2186)); | ||||||
| const tc = __importStar(__nccwpck_require__(7784)); | const tc = __importStar(__nccwpck_require__(7784)); | ||||||
| const constants_1 = __nccwpck_require__(9042); | const constants_1 = __nccwpck_require__(9042); | ||||||
| function getTempDir() { | function getTempDir() { | ||||||
|     let tempDirectory = process.env['RUNNER_TEMP'] || os_1.default.tmpdir(); |     let tempDirectory = process.env['RUNNER_TEMP'] || os_1.default.tmpdir(); | ||||||
|     return tempDirectory; |     return tempDirectory; | ||||||
| } | } | ||||||
| exports.getTempDir = getTempDir; | exports.getTempDir = getTempDir; | ||||||
| function getBooleanInput(inputName, defaultValue = false) { | function getBooleanInput(inputName, defaultValue = false) { | ||||||
|     return (core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE'; |     return (core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE'; | ||||||
| } | } | ||||||
| exports.getBooleanInput = getBooleanInput; | exports.getBooleanInput = getBooleanInput; | ||||||
| function getVersionFromToolcachePath(toolPath) { | function getVersionFromToolcachePath(toolPath) { | ||||||
|     if (toolPath) { |     if (toolPath) { | ||||||
|         return path_1.default.basename(path_1.default.dirname(toolPath)); |         return path_1.default.basename(path_1.default.dirname(toolPath)); | ||||||
|     } |     } | ||||||
|     return toolPath; |     return toolPath; | ||||||
| } | } | ||||||
| exports.getVersionFromToolcachePath = getVersionFromToolcachePath; | exports.getVersionFromToolcachePath = getVersionFromToolcachePath; | ||||||
| function extractJdkFile(toolPath, extension) { | function extractJdkFile(toolPath, extension) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         if (!extension) { |         if (!extension) { | ||||||
|             extension = toolPath.endsWith('.tar.gz') ? 'tar.gz' : path_1.default.extname(toolPath); |             extension = toolPath.endsWith('.tar.gz') ? 'tar.gz' : path_1.default.extname(toolPath); | ||||||
|             if (extension.startsWith('.')) { |             if (extension.startsWith('.')) { | ||||||
|                 extension = extension.substring(1); |                 extension = extension.substring(1); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         switch (extension) { |         switch (extension) { | ||||||
|             case 'tar.gz': |             case 'tar.gz': | ||||||
|             case 'tar': |             case 'tar': | ||||||
|                 return yield tc.extractTar(toolPath); |                 return yield tc.extractTar(toolPath); | ||||||
|             case 'zip': |             case 'zip': | ||||||
|                 return yield tc.extractZip(toolPath); |                 return yield tc.extractZip(toolPath); | ||||||
|             default: |             default: | ||||||
|                 return yield tc.extract7z(toolPath); |                 return yield tc.extract7z(toolPath); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| exports.extractJdkFile = extractJdkFile; | exports.extractJdkFile = extractJdkFile; | ||||||
| function getDownloadArchiveExtension() { | function getDownloadArchiveExtension() { | ||||||
|     return process.platform === 'win32' ? 'zip' : 'tar.gz'; |     return process.platform === 'win32' ? 'zip' : 'tar.gz'; | ||||||
| } | } | ||||||
| exports.getDownloadArchiveExtension = getDownloadArchiveExtension; | exports.getDownloadArchiveExtension = getDownloadArchiveExtension; | ||||||
| function isVersionSatisfies(range, version) { | function isVersionSatisfies(range, version) { | ||||||
|     var _a; |     var _a; | ||||||
|     if (semver.valid(range)) { |     if (semver.valid(range)) { | ||||||
|         // if full version with build digit is provided as a range (such as '1.2.3+4')
 |         // if full version with build digit is provided as a range (such as '1.2.3+4')
 | ||||||
|         // we should check for exact equal via compareBuild
 |         // we should check for exact equal via compareBuild
 | ||||||
|         // since semver.satisfies doesn't handle 4th digit
 |         // since semver.satisfies doesn't handle 4th digit
 | ||||||
|         const semRange = semver.parse(range); |         const semRange = semver.parse(range); | ||||||
|         if (semRange && ((_a = semRange.build) === null || _a === void 0 ? void 0 : _a.length) > 0) { |         if (semRange && ((_a = semRange.build) === null || _a === void 0 ? void 0 : _a.length) > 0) { | ||||||
|             return semver.compareBuild(range, version) === 0; |             return semver.compareBuild(range, version) === 0; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     return semver.satisfies(version, range); |     return semver.satisfies(version, range); | ||||||
| } | } | ||||||
| exports.isVersionSatisfies = isVersionSatisfies; | exports.isVersionSatisfies = isVersionSatisfies; | ||||||
| function getToolcachePath(toolName, version, architecture) { | function getToolcachePath(toolName, version, architecture) { | ||||||
|     var _a; |     var _a; | ||||||
|     const toolcacheRoot = (_a = process.env['RUNNER_TOOL_CACHE']) !== null && _a !== void 0 ? _a : ''; |     const toolcacheRoot = (_a = process.env['RUNNER_TOOL_CACHE']) !== null && _a !== void 0 ? _a : ''; | ||||||
|     const fullPath = path_1.default.join(toolcacheRoot, toolName, version, architecture); |     const fullPath = path_1.default.join(toolcacheRoot, toolName, version, architecture); | ||||||
|     if (fs.existsSync(fullPath)) { |     if (fs.existsSync(fullPath)) { | ||||||
|         return fullPath; |         return fullPath; | ||||||
|     } |     } | ||||||
|     return null; |     return null; | ||||||
| } | } | ||||||
| exports.getToolcachePath = getToolcachePath; | exports.getToolcachePath = getToolcachePath; | ||||||
| function isJobStatusSuccess() { | function isJobStatusSuccess() { | ||||||
|     const jobStatus = core.getInput(constants_1.INPUT_JOB_STATUS); |     const jobStatus = core.getInput(constants_1.INPUT_JOB_STATUS); | ||||||
|     return jobStatus === 'success'; |     return jobStatus === 'success'; | ||||||
| } | } | ||||||
| exports.isJobStatusSuccess = isJobStatusSuccess; | exports.isJobStatusSuccess = isJobStatusSuccess; | ||||||
| function isGhes() { | function isGhes() { | ||||||
|     const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com'); |     const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com'); | ||||||
|     return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; |     return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; | ||||||
| } | } | ||||||
| exports.isGhes = isGhes; | exports.isGhes = isGhes; | ||||||
| function isCacheFeatureAvailable() { | function isCacheFeatureAvailable() { | ||||||
|     if (!cache.isFeatureAvailable()) { |     if (!cache.isFeatureAvailable()) { | ||||||
|         if (isGhes()) { |         if (isGhes()) { | ||||||
|             throw new Error('Caching is only supported on GHES version >= 3.5. If you are on a version >= 3.5, please check with your GHES admin if the Actions cache service is enabled or not.'); |             throw new Error('Caching is only supported on GHES version >= 3.5. If you are on a version >= 3.5, please check with your GHES admin if the Actions cache service is enabled or not.'); | ||||||
|         } |         } | ||||||
|         else { |         else { | ||||||
|             core.warning('The runner was not able to contact the cache service. Caching will be skipped'); |             core.warning('The runner was not able to contact the cache service. Caching will be skipped'); | ||||||
|         } |         } | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| exports.isCacheFeatureAvailable = isCacheFeatureAvailable; | exports.isCacheFeatureAvailable = isCacheFeatureAvailable; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
|  | |||||||
							
								
								
									
										13159
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13159
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										34
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										34
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -9,7 +9,7 @@ | |||||||
|       "version": "3.1.1", |       "version": "3.1.1", | ||||||
|       "license": "MIT", |       "license": "MIT", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "@actions/cache": "^2.0.2", |         "@actions/cache": "^3.0.0", | ||||||
|         "@actions/core": "^1.2.6", |         "@actions/core": "^1.2.6", | ||||||
|         "@actions/exec": "^1.0.4", |         "@actions/exec": "^1.0.4", | ||||||
|         "@actions/glob": "^0.2.0", |         "@actions/glob": "^0.2.0", | ||||||
| @ -32,14 +32,14 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/@actions/cache": { |     "node_modules/@actions/cache": { | ||||||
|       "version": "2.0.2", |       "version": "3.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-2.0.2.tgz", |       "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.0.tgz", | ||||||
|       "integrity": "sha512-K1DCaW/OtHj5mV7hI7HEXiceX3rM4Nc0iG2hfYsrkEy6GiOeqlCC/LyICrBZIRDM6+vSrS12tg1ORl4hghomBA==", |       "integrity": "sha512-GL9CT1Fnu+pqs8TTB621q8Xa8Cilw2n9MwvbgMedetH7L1q2n6jY61gzbwGbKgtVbp3gVJ12aNMi4osSGXx3KQ==", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "@actions/core": "^1.2.6", |         "@actions/core": "^1.2.6", | ||||||
|         "@actions/exec": "^1.0.1", |         "@actions/exec": "^1.0.1", | ||||||
|         "@actions/glob": "^0.1.0", |         "@actions/glob": "^0.1.0", | ||||||
|         "@actions/http-client": "^1.0.9", |         "@actions/http-client": "^2.0.1", | ||||||
|         "@actions/io": "^1.0.1", |         "@actions/io": "^1.0.1", | ||||||
|         "@azure/ms-rest-js": "^2.6.0", |         "@azure/ms-rest-js": "^2.6.0", | ||||||
|         "@azure/storage-blob": "^12.8.0", |         "@azure/storage-blob": "^12.8.0", | ||||||
| @ -56,6 +56,14 @@ | |||||||
|         "minimatch": "^3.0.4" |         "minimatch": "^3.0.4" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/@actions/cache/node_modules/@actions/http-client": { | ||||||
|  |       "version": "2.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz", | ||||||
|  |       "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "tunnel": "^0.0.6" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/@actions/cache/node_modules/semver": { |     "node_modules/@actions/cache/node_modules/semver": { | ||||||
|       "version": "6.3.0", |       "version": "6.3.0", | ||||||
|       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", |       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", | ||||||
| @ -6664,14 +6672,14 @@ | |||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@actions/cache": { |     "@actions/cache": { | ||||||
|       "version": "2.0.2", |       "version": "3.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-2.0.2.tgz", |       "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.0.tgz", | ||||||
|       "integrity": "sha512-K1DCaW/OtHj5mV7hI7HEXiceX3rM4Nc0iG2hfYsrkEy6GiOeqlCC/LyICrBZIRDM6+vSrS12tg1ORl4hghomBA==", |       "integrity": "sha512-GL9CT1Fnu+pqs8TTB621q8Xa8Cilw2n9MwvbgMedetH7L1q2n6jY61gzbwGbKgtVbp3gVJ12aNMi4osSGXx3KQ==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "@actions/core": "^1.2.6", |         "@actions/core": "^1.2.6", | ||||||
|         "@actions/exec": "^1.0.1", |         "@actions/exec": "^1.0.1", | ||||||
|         "@actions/glob": "^0.1.0", |         "@actions/glob": "^0.1.0", | ||||||
|         "@actions/http-client": "^1.0.9", |         "@actions/http-client": "^2.0.1", | ||||||
|         "@actions/io": "^1.0.1", |         "@actions/io": "^1.0.1", | ||||||
|         "@azure/ms-rest-js": "^2.6.0", |         "@azure/ms-rest-js": "^2.6.0", | ||||||
|         "@azure/storage-blob": "^12.8.0", |         "@azure/storage-blob": "^12.8.0", | ||||||
| @ -6688,6 +6696,14 @@ | |||||||
|             "minimatch": "^3.0.4" |             "minimatch": "^3.0.4" | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|  |         "@actions/http-client": { | ||||||
|  |           "version": "2.0.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz", | ||||||
|  |           "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==", | ||||||
|  |           "requires": { | ||||||
|  |             "tunnel": "^0.0.6" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|         "semver": { |         "semver": { | ||||||
|           "version": "6.3.0", |           "version": "6.3.0", | ||||||
|           "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", |           "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", | ||||||
|  | |||||||
| @ -24,7 +24,7 @@ | |||||||
|   "author": "GitHub", |   "author": "GitHub", | ||||||
|   "license": "MIT", |   "license": "MIT", | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@actions/cache": "^2.0.2", |     "@actions/cache": "^3.0.0", | ||||||
|     "@actions/core": "^1.2.6", |     "@actions/core": "^1.2.6", | ||||||
|     "@actions/exec": "^1.0.4", |     "@actions/exec": "^1.0.4", | ||||||
|     "@actions/glob": "^0.2.0", |     "@actions/glob": "^0.2.0", | ||||||
| @ -45,4 +45,4 @@ | |||||||
|     "ts-jest": "^27.0.5", |     "ts-jest": "^27.0.5", | ||||||
|     "typescript": "^4.2.3" |     "typescript": "^4.2.3" | ||||||
|   } |   } | ||||||
| } | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user