mirror of
				https://kkgithub.com/actions/setup-node.git
				synced 2025-10-31 10:41:57 +08:00 
			
		
		
		
	consume getJson function for better error messages (#110)
This commit is contained in:
		
							
								
								
									
										121
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										121
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @ -10602,6 +10602,15 @@ var HttpCodes; | ||||
|     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 | ||||
| @ -10700,6 +10709,36 @@ class HttpClient { | ||||
|     sendStream(verb, requestUrl, stream, additionalHeaders) { | ||||
|         return this.request(verb, requestUrl, stream, additionalHeaders); | ||||
|     } | ||||
|     /** | ||||
|      * Gets a typed object from an endpoint | ||||
|      * Be aware that not found returns a null.  Other errors (4xx, 5xx) reject the promise | ||||
|      */ | ||||
|     async getJson(requestUrl, additionalHeaders = {}) { | ||||
|         additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); | ||||
|         let res = await this.get(requestUrl, additionalHeaders); | ||||
|         return this._processResponse(res, this.requestOptions); | ||||
|     } | ||||
|     async postJson(requestUrl, obj, additionalHeaders = {}) { | ||||
|         let data = JSON.stringify(obj, null, 2); | ||||
|         additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); | ||||
|         additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); | ||||
|         let res = await this.post(requestUrl, data, additionalHeaders); | ||||
|         return this._processResponse(res, this.requestOptions); | ||||
|     } | ||||
|     async putJson(requestUrl, obj, additionalHeaders = {}) { | ||||
|         let data = JSON.stringify(obj, null, 2); | ||||
|         additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); | ||||
|         additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); | ||||
|         let res = await this.put(requestUrl, data, additionalHeaders); | ||||
|         return this._processResponse(res, this.requestOptions); | ||||
|     } | ||||
|     async patchJson(requestUrl, obj, additionalHeaders = {}) { | ||||
|         let data = JSON.stringify(obj, null, 2); | ||||
|         additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); | ||||
|         additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); | ||||
|         let res = await this.patch(requestUrl, data, additionalHeaders); | ||||
|         return this._processResponse(res, this.requestOptions); | ||||
|     } | ||||
|     /** | ||||
|      * Makes a raw http request. | ||||
|      * All other methods such as get, post, patch, and request ultimately call this. | ||||
| @ -10883,6 +10922,14 @@ class HttpClient { | ||||
|         } | ||||
|         return lowercaseKeys(headers || {}); | ||||
|     } | ||||
|     _getExistingOrDefaultHeader(additionalHeaders, header, _default) { | ||||
|         const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {}); | ||||
|         let clientHeader; | ||||
|         if (this.requestOptions && this.requestOptions.headers) { | ||||
|             clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; | ||||
|         } | ||||
|         return additionalHeaders[header] || clientHeader || _default; | ||||
|     } | ||||
|     _getAgent(parsedUrl) { | ||||
|         let agent; | ||||
|         let proxyUrl = pm.getProxyUrl(parsedUrl); | ||||
| @ -10950,6 +10997,73 @@ class HttpClient { | ||||
|         const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); | ||||
|         return new Promise(resolve => setTimeout(() => resolve(), ms)); | ||||
|     } | ||||
|     static dateTimeDeserializer(key, value) { | ||||
|         if (typeof value === 'string') { | ||||
|             let a = new Date(value); | ||||
|             if (!isNaN(a.valueOf())) { | ||||
|                 return a; | ||||
|             } | ||||
|         } | ||||
|         return value; | ||||
|     } | ||||
|     async _processResponse(res, options) { | ||||
|         return new Promise(async (resolve, reject) => { | ||||
|             const statusCode = res.message.statusCode; | ||||
|             const response = { | ||||
|                 statusCode: statusCode, | ||||
|                 result: null, | ||||
|                 headers: {} | ||||
|             }; | ||||
|             // not found leads to null obj returned | ||||
|             if (statusCode == HttpCodes.NotFound) { | ||||
|                 resolve(response); | ||||
|             } | ||||
|             let obj; | ||||
|             let contents; | ||||
|             // get the result from the body | ||||
|             try { | ||||
|                 contents = await res.readBody(); | ||||
|                 if (contents && contents.length > 0) { | ||||
|                     if (options && options.deserializeDates) { | ||||
|                         obj = JSON.parse(contents, HttpClient.dateTimeDeserializer); | ||||
|                     } | ||||
|                     else { | ||||
|                         obj = JSON.parse(contents); | ||||
|                     } | ||||
|                     response.result = obj; | ||||
|                 } | ||||
|                 response.headers = res.message.headers; | ||||
|             } | ||||
|             catch (err) { | ||||
|                 // Invalid resource (contents not json);  leaving result obj null | ||||
|             } | ||||
|             // note that 3xx redirects are handled by the http layer. | ||||
|             if (statusCode > 299) { | ||||
|                 let msg; | ||||
|                 // if exception/error in body, attempt to get better error | ||||
|                 if (obj && obj.message) { | ||||
|                     msg = obj.message; | ||||
|                 } | ||||
|                 else if (contents && contents.length > 0) { | ||||
|                     // it may be the case that the exception is in the body message as string | ||||
|                     msg = contents; | ||||
|                 } | ||||
|                 else { | ||||
|                     msg = "Failed request: (" + statusCode + ")"; | ||||
|                 } | ||||
|                 let err = new Error(msg); | ||||
|                 // attach statusCode and body obj (if available) to the error object | ||||
|                 err['statusCode'] = statusCode; | ||||
|                 if (response.result) { | ||||
|                     err['result'] = response.result; | ||||
|                 } | ||||
|                 reject(err); | ||||
|             } | ||||
|             else { | ||||
|                 resolve(response); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
| } | ||||
| exports.HttpClient = HttpClient; | ||||
|  | ||||
| @ -11979,7 +12093,6 @@ var __importStar = (this && this.__importStar) || function (mod) { | ||||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||||
| // Load tempDirectory before it gets wiped by tool-cache | ||||
| let tempDirectory = process.env['RUNNER_TEMPDIRECTORY'] || ''; | ||||
| const assert = __importStar(__webpack_require__(357)); | ||||
| const core = __importStar(__webpack_require__(470)); | ||||
| const hc = __importStar(__webpack_require__(539)); | ||||
| const io = __importStar(__webpack_require__(1)); | ||||
| @ -12070,10 +12183,8 @@ function queryLatestMatch(versionSpec) { | ||||
|             allowRetries: true, | ||||
|             maxRetries: 3 | ||||
|         }); | ||||
|         let response = yield httpClient.get(dataUrl); | ||||
|         assert.ok(response.message.statusCode === 200, `Unexpected HTTP status code '${response.message.statusCode}'`); | ||||
|         let body = yield response.readBody(); | ||||
|         let nodeVersions = JSON.parse(body); | ||||
|         let response = yield httpClient.getJson(dataUrl); | ||||
|         let nodeVersions = response.result || []; | ||||
|         nodeVersions.forEach((nodeVersion) => { | ||||
|             // ensure this version supports your os and platform | ||||
|             if (nodeVersion.files.indexOf(dataFileName) >= 0) { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 eric sciple
					eric sciple