aurelia-http-client
Version:
A simple, restful, message-based wrapper around XMLHttpRequest.
94 lines (85 loc) • 2.59 kB
JavaScript
/**
* Represents http request/response headers.
*/
export class Headers {
/**
* Creates an instance of the headers class.
* @param headers A set of key/values to initialize the headers with.
*/
constructor(headers?: Object = {}) {
this.headers = {};
// Convert object to set with case insensitive keys
for (let key in headers) {
this.headers[key.toLowerCase()] = {key, value: headers[key]};
}
}
/**
* Adds a header.
* @param key The header key.
* @param value The header value.
*/
add(key: string, value: string): void {
this.headers[key.toLowerCase()] = {key, value};
}
/**
* Gets a header value.
* @param key The header key.
* @return The header value.
*/
get(key: string): string {
let header = this.headers[key.toLowerCase()];
return header ? header.value : undefined;
}
/**
* Clears the headers.
*/
clear(): void {
this.headers = {};
}
/**
* Determines whether or not the indicated header exists in the collection.
* @param header The header key to check.
* @return True if it exists, false otherwise.
*/
has(header: string): boolean {
return this.headers.hasOwnProperty(header.toLowerCase());
}
/**
* Configures an XMR object with the headers.
* @param xhr The XHRT instance to configure.
*/
configureXHR(xhr: XHR): void {
for (let name in this.headers) {
if (this.headers.hasOwnProperty(name)) {
xhr.setRequestHeader(this.headers[name].key, this.headers[name].value);
}
}
}
/**
* XmlHttpRequest's getAllResponseHeaders() method returns a string of response
* headers according to the format described here:
* http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders-method
* This method parses that string into a user-friendly key/value pair object.
* @param headerStr The string from the XHR.
* @return A Headers instance containing the parsed headers.
*/
static parse(headerStr: string): Headers {
let headers = new Headers();
if (!headerStr) {
return headers;
}
let headerPairs = headerStr.split('\u000d\u000a');
for (let i = 0; i < headerPairs.length; i++) {
let headerPair = headerPairs[i];
// Can't use split() here because it does the wrong thing
// if the header value has the string ": " in it.
let index = headerPair.indexOf('\u003a\u0020');
if (index > 0) {
let key = headerPair.substring(0, index);
let val = headerPair.substring(index + 2);
headers.add(key, val);
}
}
return headers;
}
}