UNPKG

2.11 kBJavaScriptView Raw
1
2/**
3 * headers.js
4 *
5 * Headers class offers convenient helpers
6 */
7
8module.exports = Headers;
9
10/**
11 * Headers class
12 *
13 * @param Object headers Response headers
14 * @return Void
15 */
16function Headers(headers) {
17
18 var self = this;
19 this._headers = {};
20
21 for (var prop in headers) {
22 if (!headers.hasOwnProperty(prop)) {
23 continue;
24 }
25
26 if (typeof headers[prop] === 'string') {
27 this.set(prop, headers[prop]);
28 } else if (headers[prop].length > 0) {
29 headers[prop].forEach(function(item) {
30 self.append(prop, item);
31 });
32 }
33 }
34
35}
36
37/**
38 * Return first header value given name
39 *
40 * @param String name Header name
41 * @return Mixed
42 */
43Headers.prototype.get = function(name) {
44 var list = this._headers[name.toLowerCase()];
45 return list ? list[0] : null;
46};
47
48/**
49 * Return all header values given name
50 *
51 * @param String name Header name
52 * @return Array
53 */
54Headers.prototype.getAll = function(name) {
55 if (!this.has(name)) {
56 return [];
57 }
58
59 return this._headers[name.toLowerCase()];
60};
61
62/**
63 * Overwrite header values given name
64 *
65 * @param String name Header name
66 * @param String value Header value
67 * @return Void
68 */
69Headers.prototype.set = function(name, value) {
70 this._headers[name.toLowerCase()] = [value];
71};
72
73/**
74 * Append a value onto existing header
75 *
76 * @param String name Header name
77 * @param String value Header value
78 * @return Void
79 */
80Headers.prototype.append = function(name, value) {
81 if (!this.has(name)) {
82 this.set(name, value);
83 return;
84 }
85
86 this._headers[name.toLowerCase()].push(value);
87};
88
89/**
90 * Check for header name existence
91 *
92 * @param String name Header name
93 * @return Boolean
94 */
95Headers.prototype.has = function(name) {
96 return this._headers.hasOwnProperty(name.toLowerCase());
97};
98
99/**
100 * Delete all header values given name
101 *
102 * @param String name Header name
103 * @return Void
104 */
105Headers.prototype['delete'] = function(name) {
106 delete this._headers[name.toLowerCase()];
107};
108
109/**
110 * Return raw headers (non-spec api)
111 *
112 * @return Object
113 */
114Headers.prototype.raw = function() {
115 return this._headers;
116};