index.js
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 11 var preferredCharsets = require('./lib/charset') 12 var preferredEncodings = require('./lib/encoding') 13 var preferredLanguages = require('./lib/language') 14 var preferredMediaTypes = require('./lib/mediaType') 15 16 /** 17 * Module exports. 18 * @public 19 */ 20 21 module.exports = Negotiator; 22 module.exports.Negotiator = Negotiator; 23 24 /** 25 * Create a Negotiator instance from a request. 26 * @param {object} request 27 * @public 28 */ 29 30 function Negotiator(request) { 31 if (!(this instanceof Negotiator)) { 32 return new Negotiator(request); 33 } 34 35 this.request = request; 36 } 37 38 Negotiator.prototype.charset = function charset(available) { 39 var set = this.charsets(available); 40 return set && set[0]; 41 }; 42 43 Negotiator.prototype.charsets = function charsets(available) { 44 return preferredCharsets(this.request.headers['accept-charset'], available); 45 }; 46 47 Negotiator.prototype.encoding = function encoding(available, opts) { 48 var set = this.encodings(available, opts); 49 return set && set[0]; 50 }; 51 52 Negotiator.prototype.encodings = function encodings(available, options) { 53 var opts = options || {}; 54 return preferredEncodings(this.request.headers['accept-encoding'], available, opts.preferred); 55 }; 56 57 Negotiator.prototype.language = function language(available) { 58 var set = this.languages(available); 59 return set && set[0]; 60 }; 61 62 Negotiator.prototype.languages = function languages(available) { 63 return preferredLanguages(this.request.headers['accept-language'], available); 64 }; 65 66 Negotiator.prototype.mediaType = function mediaType(available) { 67 var set = this.mediaTypes(available); 68 return set && set[0]; 69 }; 70 71 Negotiator.prototype.mediaTypes = function mediaTypes(available) { 72 return preferredMediaTypes(this.request.headers.accept, available); 73 }; 74 75 // Backwards compatibility 76 Negotiator.prototype.preferredCharset = Negotiator.prototype.charset; 77 Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets; 78 Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding; 79 Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings; 80 Negotiator.prototype.preferredLanguage = Negotiator.prototype.language; 81 Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages; 82 Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType; 83 Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;