Files
angular-docs-cn/modules/angular2/src/http/headers.ts
T

111 lines
2.9 KiB
TypeScript
Raw Normal View History

2015-04-28 23:07:55 -07:00
import {
isPresent,
isBlank,
isJsObject,
isType,
StringWrapper,
BaseException
2015-08-20 14:28:25 -07:00
} from 'angular2/src/core/facade/lang';
2015-04-28 23:07:55 -07:00
import {
isListLikeIterable,
List,
Map,
MapWrapper,
ListWrapper,
StringMap
2015-08-20 14:28:25 -07:00
} from 'angular2/src/core/facade/collection';
2015-04-28 23:07:55 -07:00
2015-06-09 15:18:57 -07:00
/**
* 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 from the spec is the lack of an `entries` method.
*/
2015-04-28 23:07:55 -07:00
export class Headers {
_headersMap: Map<string, List<string>>;
constructor(headers?: Headers | StringMap<string, any>) {
2015-04-28 23:07:55 -07:00
if (isBlank(headers)) {
this._headersMap = new Map();
2015-04-28 23:07:55 -07:00
return;
}
if (headers instanceof Headers) {
2015-04-28 23:07:55 -07:00
this._headersMap = (<Headers>headers)._headersMap;
} else if (headers instanceof StringMap) {
2015-07-07 20:03:00 -07:00
this._headersMap = MapWrapper.createFromStringMap<List<string>>(headers);
2015-04-28 23:07:55 -07:00
MapWrapper.forEach(this._headersMap, (v, k) => {
if (!isListLikeIterable(v)) {
var list = [];
list.push(v);
this._headersMap.set(k, list);
2015-04-28 23:07:55 -07:00
}
});
}
}
/**
* Appends a header to existing list of header values for a given header name.
*/
2015-04-28 23:07:55 -07:00
append(name: string, value: string): void {
var mapName = this._headersMap.get(name);
var list = isListLikeIterable(mapName) ? mapName : [];
list.push(value);
this._headersMap.set(name, list);
2015-04-28 23:07:55 -07:00
}
/**
* Deletes all header values for the given name.
*/
2015-04-28 23:07:55 -07:00
delete (name: string): void { MapWrapper.delete(this._headersMap, name); }
forEach(fn: Function) { MapWrapper.forEach(this._headersMap, fn); }
2015-04-28 23:07:55 -07:00
/**
* Returns first header that matches given name.
*/
get(header: string): string { return ListWrapper.first(this._headersMap.get(header)); }
2015-04-28 23:07:55 -07:00
/**
* Check for existence of header by given name.
*/
has(header: string): boolean { return this._headersMap.has(header); }
2015-04-28 23:07:55 -07:00
/**
* Provides names of set headers
*/
keys(): List<string> { return MapWrapper.keys(this._headersMap); }
2015-04-28 23:07:55 -07:00
/**
* Sets or overrides header value for given name.
*/
2015-04-28 23:07:55 -07:00
set(header: string, value: string | List<string>): void {
var list = [];
if (isListLikeIterable(value)) {
var pushValue = (<List<string>>value).join(',');
list.push(pushValue);
2015-04-28 23:07:55 -07:00
} else {
list.push(value);
2015-04-28 23:07:55 -07:00
}
this._headersMap.set(header, list);
2015-04-28 23:07:55 -07:00
}
/**
* Returns values of all headers.
*/
values(): List<List<string>> { return MapWrapper.values(this._headersMap); }
2015-04-28 23:07:55 -07:00
/**
* Returns list of header values for a given name.
*/
getAll(header: string): Array<string> {
var headers = this._headersMap.get(header);
return isListLikeIterable(headers) ? headers : [];
}
2015-04-28 23:07:55 -07:00
/**
* This method is not implemented.
*/
2015-04-28 23:07:55 -07:00
entries() { throw new BaseException('"entries" method is not implemented on Headers class'); }
}