index.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. var preferredCharsets = require('./lib/charset');
  2. var preferredEncodings = require('./lib/encoding');
  3. var preferredLanguages = require('./lib/language');
  4. var preferredMediaTypes = require('./lib/mediaType');
  5. module.exports = Negotiator;
  6. Negotiator.Negotiator = Negotiator;
  7. function Negotiator(request) {
  8. if (!(this instanceof Negotiator)) {
  9. return new Negotiator(request);
  10. }
  11. this.request = request;
  12. }
  13. Negotiator.prototype.charset = function charset(available) {
  14. var set = this.charsets(available);
  15. return set && set[0];
  16. };
  17. Negotiator.prototype.charsets = function charsets(available) {
  18. return preferredCharsets(this.request.headers['accept-charset'], available);
  19. };
  20. Negotiator.prototype.encoding = function encoding(available) {
  21. var set = this.encodings(available);
  22. return set && set[0];
  23. };
  24. Negotiator.prototype.encodings = function encodings(available) {
  25. return preferredEncodings(this.request.headers['accept-encoding'], available);
  26. };
  27. Negotiator.prototype.language = function language(available) {
  28. var set = this.languages(available);
  29. return set && set[0];
  30. };
  31. Negotiator.prototype.languages = function languages(available) {
  32. return preferredLanguages(this.request.headers['accept-language'], available);
  33. };
  34. Negotiator.prototype.mediaType = function mediaType(available) {
  35. var set = this.mediaTypes(available);
  36. return set && set[0];
  37. };
  38. Negotiator.prototype.mediaTypes = function mediaTypes(available) {
  39. return preferredMediaTypes(this.request.headers.accept, available);
  40. };
  41. // Backwards compatibility
  42. Negotiator.prototype.preferredCharset = Negotiator.prototype.charset;
  43. Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;
  44. Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;
  45. Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;
  46. Negotiator.prototype.preferredLanguage = Negotiator.prototype.language;
  47. Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages;
  48. Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;
  49. Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;