[6a3a178] | 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 | }
|
---|