index.js (1786B)
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 }