Permalink
Cannot retrieve contributors at this time
149 lines (149 sloc)
6.19 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/@azure/ms-rest-js/es/lib/xhrHttpClient.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Copyright (c) Microsoft Corporation. All rights reserved. | |
// Licensed under the MIT License. See License.txt in the project root for license information. | |
import { HttpHeaders } from "./httpHeaders"; | |
import { RestError } from "./restError"; | |
/** | |
* A HttpClient implementation that uses XMLHttpRequest to send HTTP requests. | |
*/ | |
var XhrHttpClient = /** @class */ (function () { | |
function XhrHttpClient() { | |
} | |
XhrHttpClient.prototype.sendRequest = function (request) { | |
var xhr = new XMLHttpRequest(); | |
if (request.agentSettings) { | |
throw new Error("HTTP agent settings not supported in browser environment"); | |
} | |
if (request.proxySettings) { | |
throw new Error("HTTP proxy is not supported in browser environment"); | |
} | |
var abortSignal = request.abortSignal; | |
if (abortSignal) { | |
var listener_1 = function () { | |
xhr.abort(); | |
}; | |
abortSignal.addEventListener("abort", listener_1); | |
xhr.addEventListener("readystatechange", function () { | |
if (xhr.readyState === XMLHttpRequest.DONE) { | |
abortSignal.removeEventListener("abort", listener_1); | |
} | |
}); | |
} | |
addProgressListener(xhr.upload, request.onUploadProgress); | |
addProgressListener(xhr, request.onDownloadProgress); | |
if (request.formData) { | |
var formData = request.formData; | |
var requestForm_1 = new FormData(); | |
var appendFormValue = function (key, value) { | |
if (value && value.hasOwnProperty("value") && value.hasOwnProperty("options")) { | |
requestForm_1.append(key, value.value, value.options); | |
} | |
else { | |
requestForm_1.append(key, value); | |
} | |
}; | |
for (var _i = 0, _a = Object.keys(formData); _i < _a.length; _i++) { | |
var formKey = _a[_i]; | |
var formValue = formData[formKey]; | |
if (Array.isArray(formValue)) { | |
for (var j = 0; j < formValue.length; j++) { | |
appendFormValue(formKey, formValue[j]); | |
} | |
} | |
else { | |
appendFormValue(formKey, formValue); | |
} | |
} | |
request.body = requestForm_1; | |
request.formData = undefined; | |
var contentType = request.headers.get("Content-Type"); | |
if (contentType && contentType.indexOf("multipart/form-data") !== -1) { | |
// browser will automatically apply a suitable content-type header | |
request.headers.remove("Content-Type"); | |
} | |
} | |
xhr.open(request.method, request.url); | |
xhr.timeout = request.timeout; | |
xhr.withCredentials = request.withCredentials; | |
for (var _b = 0, _c = request.headers.headersArray(); _b < _c.length; _b++) { | |
var header = _c[_b]; | |
xhr.setRequestHeader(header.name, header.value); | |
} | |
xhr.responseType = request.streamResponseBody ? "blob" : "text"; | |
// tslint:disable-next-line:no-null-keyword | |
xhr.send(request.body === undefined ? null : request.body); | |
if (request.streamResponseBody) { | |
return new Promise(function (resolve, reject) { | |
xhr.addEventListener("readystatechange", function () { | |
// Resolve as soon as headers are loaded | |
if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) { | |
var blobBody = new Promise(function (resolve, reject) { | |
xhr.addEventListener("load", function () { | |
resolve(xhr.response); | |
}); | |
rejectOnTerminalEvent(request, xhr, reject); | |
}); | |
resolve({ | |
request: request, | |
status: xhr.status, | |
headers: parseHeaders(xhr), | |
blobBody: blobBody, | |
}); | |
} | |
}); | |
rejectOnTerminalEvent(request, xhr, reject); | |
}); | |
} | |
else { | |
return new Promise(function (resolve, reject) { | |
xhr.addEventListener("load", function () { | |
return resolve({ | |
request: request, | |
status: xhr.status, | |
headers: parseHeaders(xhr), | |
bodyAsText: xhr.responseText, | |
}); | |
}); | |
rejectOnTerminalEvent(request, xhr, reject); | |
}); | |
} | |
}; | |
return XhrHttpClient; | |
}()); | |
export { XhrHttpClient }; | |
function addProgressListener(xhr, listener) { | |
if (listener) { | |
xhr.addEventListener("progress", function (rawEvent) { | |
return listener({ | |
loadedBytes: rawEvent.loaded, | |
}); | |
}); | |
} | |
} | |
// exported locally for testing | |
export function parseHeaders(xhr) { | |
var responseHeaders = new HttpHeaders(); | |
var headerLines = xhr | |
.getAllResponseHeaders() | |
.trim() | |
.split(/[\r\n]+/); | |
for (var _i = 0, headerLines_1 = headerLines; _i < headerLines_1.length; _i++) { | |
var line = headerLines_1[_i]; | |
var index = line.indexOf(":"); | |
var headerName = line.slice(0, index); | |
var headerValue = line.slice(index + 2); | |
responseHeaders.set(headerName, headerValue); | |
} | |
return responseHeaders; | |
} | |
function rejectOnTerminalEvent(request, xhr, reject) { | |
xhr.addEventListener("error", function () { | |
return reject(new RestError("Failed to send request to " + request.url, RestError.REQUEST_SEND_ERROR, undefined, request)); | |
}); | |
xhr.addEventListener("abort", function () { | |
return reject(new RestError("The request was aborted", RestError.REQUEST_ABORTED_ERROR, undefined, request)); | |
}); | |
xhr.addEventListener("timeout", function () { | |
return reject(new RestError("timeout of " + xhr.timeout + "ms exceeded", RestError.REQUEST_SEND_ERROR, undefined, request)); | |
}); | |
} | |
//# sourceMappingURL=xhrHttpClient.js.map |