123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /**
- * headers.js
- *
- * Headers class offers convenient helpers
- */
- module.exports = Headers;
- /**
- * Headers class
- *
- * @param Object headers Response headers
- * @return Void
- */
- function Headers(headers) {
- var self = this;
- this._headers = {};
- // Headers
- if (headers instanceof Headers) {
- headers = headers.raw();
- }
- // plain object
- for (var prop in headers) {
- if (!headers.hasOwnProperty(prop)) {
- continue;
- }
- if (typeof headers[prop] === 'string') {
- this.set(prop, headers[prop]);
- } else if (typeof headers[prop] === 'number' && !isNaN(headers[prop])) {
- this.set(prop, headers[prop].toString());
- } else if (Array.isArray(headers[prop])) {
- headers[prop].forEach(function(item) {
- self.append(prop, item.toString());
- });
- }
- }
- }
- /**
- * Return first header value given name
- *
- * @param String name Header name
- * @return Mixed
- */
- Headers.prototype.get = function(name) {
- var list = this._headers[name.toLowerCase()];
- return list ? list[0] : null;
- };
- /**
- * Return all header values given name
- *
- * @param String name Header name
- * @return Array
- */
- Headers.prototype.getAll = function(name) {
- if (!this.has(name)) {
- return [];
- }
- return this._headers[name.toLowerCase()];
- };
- /**
- * Iterate over all headers
- *
- * @param Function callback Executed for each item with parameters (value, name, thisArg)
- * @param Boolean thisArg `this` context for callback function
- * @return Void
- */
- Headers.prototype.forEach = function(callback, thisArg) {
- Object.getOwnPropertyNames(this._headers).forEach(function(name) {
- this._headers[name].forEach(function(value) {
- callback.call(thisArg, value, name, this)
- }, this)
- }, this)
- }
- /**
- * Overwrite header values given name
- *
- * @param String name Header name
- * @param String value Header value
- * @return Void
- */
- Headers.prototype.set = function(name, value) {
- this._headers[name.toLowerCase()] = [value];
- };
- /**
- * Append a value onto existing header
- *
- * @param String name Header name
- * @param String value Header value
- * @return Void
- */
- Headers.prototype.append = function(name, value) {
- if (!this.has(name)) {
- this.set(name, value);
- return;
- }
- this._headers[name.toLowerCase()].push(value);
- };
- /**
- * Check for header name existence
- *
- * @param String name Header name
- * @return Boolean
- */
- Headers.prototype.has = function(name) {
- return this._headers.hasOwnProperty(name.toLowerCase());
- };
- /**
- * Delete all header values given name
- *
- * @param String name Header name
- * @return Void
- */
- Headers.prototype['delete'] = function(name) {
- delete this._headers[name.toLowerCase()];
- };
- /**
- * Return raw headers (non-spec api)
- *
- * @return Object
- */
- Headers.prototype.raw = function() {
- return this._headers;
- };
|