module.exports = Negotiator; Negotiator.Negotiator = Negotiator; function Negotiator(request) { if (!(this instanceof Negotiator)) return new Negotiator(request); this.request = request; } var set = { charset: 'accept-charset', encoding: 'accept-encoding', language: 'accept-language', mediaType: 'accept' }; function capitalize(string){ return string.charAt(0).toUpperCase() + string.slice(1); } Object.keys(set).forEach(function (k) { var header = set[k], method = require('./'+k+'.js'), singular = k, plural = k + 's'; Negotiator.prototype[plural] = function (available) { return method(this.request.headers[header], available); }; Negotiator.prototype[singular] = function(available) { var set = this[plural](available); if (set) return set[0]; }; // Keep preferred* methods for legacy compatibility Negotiator.prototype['preferred'+capitalize(plural)] = Negotiator.prototype[plural]; Negotiator.prototype['preferred'+capitalize(singular)] = Negotiator.prototype[singular]; })