/** * Polyfill for [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers/Headers), as * specified in the [Fetch Spec](https://fetch.spec.whatwg.org/#headers-class). * * The only known difference between this `Headers` implementation and the spec is the * lack of an `entries` method. * * ### Example * * ``` * import {Headers} from '\@angular/http'; * * var firstHeaders = new Headers(); * firstHeaders.append('Content-Type', 'image/jpeg'); * console.log(firstHeaders.get('Content-Type')) //'image/jpeg' * * // Create headers from Plain Old JavaScript Object * var secondHeaders = new Headers({ * 'X-My-Custom-Header': 'Angular' * }); * console.log(secondHeaders.get('X-My-Custom-Header')); //'Angular' * * var thirdHeaders = new Headers(secondHeaders); * console.log(thirdHeaders.get('X-My-Custom-Header')); //'Angular' * ``` * * \@experimental */ export var Headers = (function () { /** * @param {?=} headers */ function Headers(headers) { var _this = this; /** @internal header names are lower case */ this._headers = new Map(); /** @internal map lower case names to actual names */ this._normalizedNames = new Map(); if (!headers) { return; } if (headers instanceof Headers) { headers.forEach(function (values, name) { values.forEach(function (value) { return _this.append(name, value); }); }); return; } Object.keys(headers).forEach(function (name) { var values = Array.isArray(headers[name]) ? headers[name] : [headers[name]]; _this.delete(name); values.forEach(function (value) { return _this.append(name, value); }); }); } /** * Returns a new Headers instance from the given DOMString of Response Headers * @param {?} headersString * @return {?} */ Headers.fromResponseHeaderString = function (headersString) { var /** @type {?} */ headers = new Headers(); headersString.split('\n').forEach(function (line) { var /** @type {?} */ index = line.indexOf(':'); if (index > 0) { var /** @type {?} */ name_1 = line.slice(0, index); var /** @type {?} */ value = line.slice(index + 1).trim(); headers.set(name_1, value); } }); return headers; }; /** * Appends a header to existing list of header values for a given header name. * @param {?} name * @param {?} value * @return {?} */ Headers.prototype.append = function (name, value) { var /** @type {?} */ values = this.getAll(name); if (values === null) { this.set(name, value); } else { values.push(value); } }; /** * Deletes all header values for the given name. * @param {?} name * @return {?} */ Headers.prototype.delete = function (name) { var /** @type {?} */ lcName = name.toLowerCase(); this._normalizedNames.delete(lcName); this._headers.delete(lcName); }; /** * @param {?} fn * @return {?} */ Headers.prototype.forEach = function (fn) { var _this = this; this._headers.forEach(function (values, lcName) { return fn(values, _this._normalizedNames.get(lcName), _this._headers); }); }; /** * Returns first header that matches given name. * @param {?} name * @return {?} */ Headers.prototype.get = function (name) { var /** @type {?} */ values = this.getAll(name); if (values === null) { return null; } return values.length > 0 ? values[0] : null; }; /** * Checks for existence of header by given name. * @param {?} name * @return {?} */ Headers.prototype.has = function (name) { return this._headers.has(name.toLowerCase()); }; /** * Returns the names of the headers * @return {?} */ Headers.prototype.keys = function () { return Array.from(this._normalizedNames.values()); }; /** * Sets or overrides header value for given name. * @param {?} name * @param {?} value * @return {?} */ Headers.prototype.set = function (name, value) { if (Array.isArray(value)) { if (value.length) { this._headers.set(name.toLowerCase(), [value.join(',')]); } } else { this._headers.set(name.toLowerCase(), [value]); } this.mayBeSetNormalizedName(name); }; /** * Returns values of all headers. * @return {?} */ Headers.prototype.values = function () { return Array.from(this._headers.values()); }; /** * @return {?} */ Headers.prototype.toJSON = function () { var _this = this; var /** @type {?} */ serialized = {}; this._headers.forEach(function (values, name) { var /** @type {?} */ split = []; values.forEach(function (v) { return split.push.apply(split, v.split(',')); }); serialized[_this._normalizedNames.get(name)] = split; }); return serialized; }; /** * Returns list of header values for a given name. * @param {?} name * @return {?} */ Headers.prototype.getAll = function (name) { return this.has(name) ? this._headers.get(name.toLowerCase()) : null; }; /** * This method is not implemented. * @return {?} */ Headers.prototype.entries = function () { throw new Error('"entries" method is not implemented on Headers class'); }; /** * @param {?} name * @return {?} */ Headers.prototype.mayBeSetNormalizedName = function (name) { var /** @type {?} */ lcName = name.toLowerCase(); if (!this._normalizedNames.has(lcName)) { this._normalizedNames.set(lcName, name); } }; return Headers; }()); function Headers_tsickle_Closure_declarations() { /** * \@internal header names are lower case * @type {?} */ Headers.prototype._headers; /** * \@internal map lower case names to actual names * @type {?} */ Headers.prototype._normalizedNames; } //# sourceMappingURL=headers.js.map