1/*! 2 * negotiator 3 * Copyright(c) 2012 Federico Romero 4 * Copyright(c) 2012-2014 Isaac Z. Schlueter 5 * Copyright(c) 2015 Douglas Christopher Wilson 6 * MIT Licensed 7 */ 8 9'use strict'; 10 11var preferredCharsets = require('./lib/charset') 12var preferredEncodings = require('./lib/encoding') 13var preferredLanguages = require('./lib/language') 14var preferredMediaTypes = require('./lib/mediaType') 15 16/** 17 * Module exports. 18 * @public 19 */ 20 21module.exports = Negotiator; 22module.exports.Negotiator = Negotiator; 23 24/** 25 * Create a Negotiator instance from a request. 26 * @param {object} request 27 * @public 28 */ 29 30function Negotiator(request) { 31 if (!(this instanceof Negotiator)) { 32 return new Negotiator(request); 33 } 34 35 this.request = request; 36} 37 38Negotiator.prototype.charset = function charset(available) { 39 var set = this.charsets(available); 40 return set && set[0]; 41}; 42 43Negotiator.prototype.charsets = function charsets(available) { 44 return preferredCharsets(this.request.headers['accept-charset'], available); 45}; 46 47Negotiator.prototype.encoding = function encoding(available) { 48 var set = this.encodings(available); 49 return set && set[0]; 50}; 51 52Negotiator.prototype.encodings = function encodings(available) { 53 return preferredEncodings(this.request.headers['accept-encoding'], available); 54}; 55 56Negotiator.prototype.language = function language(available) { 57 var set = this.languages(available); 58 return set && set[0]; 59}; 60 61Negotiator.prototype.languages = function languages(available) { 62 return preferredLanguages(this.request.headers['accept-language'], available); 63}; 64 65Negotiator.prototype.mediaType = function mediaType(available) { 66 var set = this.mediaTypes(available); 67 return set && set[0]; 68}; 69 70Negotiator.prototype.mediaTypes = function mediaTypes(available) { 71 return preferredMediaTypes(this.request.headers.accept, available); 72}; 73 74// Backwards compatibility 75Negotiator.prototype.preferredCharset = Negotiator.prototype.charset; 76Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets; 77Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding; 78Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings; 79Negotiator.prototype.preferredLanguage = Negotiator.prototype.language; 80Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages; 81Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType; 82Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes; 83