mirror of
				https://github.com/actions/setup-node.git
				synced 2025-11-04 13:29:12 +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