1 | function Caseless (dict) {
|
---|
2 | this.dict = dict || {}
|
---|
3 | }
|
---|
4 | Caseless.prototype.set = function (name, value, clobber) {
|
---|
5 | if (typeof name === 'object') {
|
---|
6 | for (var i in name) {
|
---|
7 | this.set(i, name[i], value)
|
---|
8 | }
|
---|
9 | } else {
|
---|
10 | if (typeof clobber === 'undefined') clobber = true
|
---|
11 | var has = this.has(name)
|
---|
12 |
|
---|
13 | if (!clobber && has) this.dict[has] = this.dict[has] + ',' + value
|
---|
14 | else this.dict[has || name] = value
|
---|
15 | return has
|
---|
16 | }
|
---|
17 | }
|
---|
18 | Caseless.prototype.has = function (name) {
|
---|
19 | var keys = Object.keys(this.dict)
|
---|
20 | , name = name.toLowerCase()
|
---|
21 | ;
|
---|
22 | for (var i=0;i<keys.length;i++) {
|
---|
23 | if (keys[i].toLowerCase() === name) return keys[i]
|
---|
24 | }
|
---|
25 | return false
|
---|
26 | }
|
---|
27 | Caseless.prototype.get = function (name) {
|
---|
28 | name = name.toLowerCase()
|
---|
29 | var result, _key
|
---|
30 | var headers = this.dict
|
---|
31 | Object.keys(headers).forEach(function (key) {
|
---|
32 | _key = key.toLowerCase()
|
---|
33 | if (name === _key) result = headers[key]
|
---|
34 | })
|
---|
35 | return result
|
---|
36 | }
|
---|
37 | Caseless.prototype.swap = function (name) {
|
---|
38 | var has = this.has(name)
|
---|
39 | if (has === name) return
|
---|
40 | if (!has) throw new Error('There is no header than matches "'+name+'"')
|
---|
41 | this.dict[name] = this.dict[has]
|
---|
42 | delete this.dict[has]
|
---|
43 | }
|
---|
44 | Caseless.prototype.del = function (name) {
|
---|
45 | var has = this.has(name)
|
---|
46 | return delete this.dict[has || name]
|
---|
47 | }
|
---|
48 |
|
---|
49 | module.exports = function (dict) {return new Caseless(dict)}
|
---|
50 | module.exports.httpify = function (resp, headers) {
|
---|
51 | var c = new Caseless(headers)
|
---|
52 | resp.setHeader = function (key, value, clobber) {
|
---|
53 | if (typeof value === 'undefined') return
|
---|
54 | return c.set(key, value, clobber)
|
---|
55 | }
|
---|
56 | resp.hasHeader = function (key) {
|
---|
57 | return c.has(key)
|
---|
58 | }
|
---|
59 | resp.getHeader = function (key) {
|
---|
60 | return c.get(key)
|
---|
61 | }
|
---|
62 | resp.removeHeader = function (key) {
|
---|
63 | return c.del(key)
|
---|
64 | }
|
---|
65 | resp.headers = c.dict
|
---|
66 | return c
|
---|
67 | }
|
---|