You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.7 KiB
67 lines
1.7 KiB
function Caseless (dict) { |
|
this.dict = dict || {} |
|
} |
|
Caseless.prototype.set = function (name, value, clobber) { |
|
if (typeof name === 'object') { |
|
for (var i in name) { |
|
this.set(i, name[i], value) |
|
} |
|
} else { |
|
if (typeof clobber === 'undefined') clobber = true |
|
var has = this.has(name) |
|
|
|
if (!clobber && has) this.dict[has] = this.dict[has] + ',' + value |
|
else this.dict[has || name] = value |
|
return has |
|
} |
|
} |
|
Caseless.prototype.has = function (name) { |
|
var keys = Object.keys(this.dict) |
|
, name = name.toLowerCase() |
|
; |
|
for (var i=0;i<keys.length;i++) { |
|
if (keys[i].toLowerCase() === name) return keys[i] |
|
} |
|
return false |
|
} |
|
Caseless.prototype.get = function (name) { |
|
name = name.toLowerCase() |
|
var result, _key |
|
var headers = this.dict |
|
Object.keys(headers).forEach(function (key) { |
|
_key = key.toLowerCase() |
|
if (name === _key) result = headers[key] |
|
}) |
|
return result |
|
} |
|
Caseless.prototype.swap = function (name) { |
|
var has = this.has(name) |
|
if (has === name) return |
|
if (!has) throw new Error('There is no header than matches "'+name+'"') |
|
this.dict[name] = this.dict[has] |
|
delete this.dict[has] |
|
} |
|
Caseless.prototype.del = function (name) { |
|
var has = this.has(name) |
|
return delete this.dict[has || name] |
|
} |
|
|
|
module.exports = function (dict) {return new Caseless(dict)} |
|
module.exports.httpify = function (resp, headers) { |
|
var c = new Caseless(headers) |
|
resp.setHeader = function (key, value, clobber) { |
|
if (typeof value === 'undefined') return |
|
return c.set(key, value, clobber) |
|
} |
|
resp.hasHeader = function (key) { |
|
return c.has(key) |
|
} |
|
resp.getHeader = function (key) { |
|
return c.get(key) |
|
} |
|
resp.removeHeader = function (key) { |
|
return c.del(key) |
|
} |
|
resp.headers = c.dict |
|
return c |
|
}
|
|
|