UNPKG

2.34 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 // Headers
22 if (headers instanceof Headers) {
23 headers = headers.raw();
24 }
25
26 // plain object
27 for (var prop in headers) {
28 if (!headers.hasOwnProperty(prop)) {
29 continue;
30 }
31
32 if (typeof headers[prop] === 'string') {
33 this.set(prop, headers[prop]);
34
35 } else if (typeof headers[prop] === 'number' && !isNaN(headers[prop])) {
36 this.set(prop, headers[prop].toString());
37
38 } else if (headers[prop] instanceof Array) {
39 headers[prop].forEach(function(item) {
40 self.append(prop, item.toString());
41 });
42 }
43 }
44
45}
46
47/**
48 * Return first header value given name
49 *
50 * @param String name Header name
51 * @return Mixed
52 */
53Headers.prototype.get = function(name) {
54 var list = this._headers[name.toLowerCase()];
55 return list ? list[0] : null;
56};
57
58/**
59 * Return all header values given name
60 *
61 * @param String name Header name
62 * @return Array
63 */
64Headers.prototype.getAll = function(name) {
65 if (!this.has(name)) {
66 return [];
67 }
68
69 return this._headers[name.toLowerCase()];
70};
71
72/**
73 * Overwrite header values given name
74 *
75 * @param String name Header name
76 * @param String value Header value
77 * @return Void
78 */
79Headers.prototype.set = function(name, value) {
80 this._headers[name.toLowerCase()] = [value];
81};
82
83/**
84 * Append a value onto existing header
85 *
86 * @param String name Header name
87 * @param String value Header value
88 * @return Void
89 */
90Headers.prototype.append = function(name, value) {
91 if (!this.has(name)) {
92 this.set(name, value);
93 return;
94 }
95
96 this._headers[name.toLowerCase()].push(value);
97};
98
99/**
100 * Check for header name existence
101 *
102 * @param String name Header name
103 * @return Boolean
104 */
105Headers.prototype.has = function(name) {
106 return this._headers.hasOwnProperty(name.toLowerCase());
107};
108
109/**
110 * Delete all header values given name
111 *
112 * @param String name Header name
113 * @return Void
114 */
115Headers.prototype['delete'] = function(name) {
116 delete this._headers[name.toLowerCase()];
117};
118
119/**
120 * Return raw headers (non-spec api)
121 *
122 * @return Object
123 */
124Headers.prototype.raw = function() {
125 return this._headers;
126};