@goa/negotiator
Version:
[fork] HTTP Content Negotiation In ES6 Optimised With Google Closure Compiler.
369 lines (367 loc) • 8.19 kB
JavaScript
'use strict';
let DEPACK_EXPORT;
const http = require('http');'use strict';
const p = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
function q(a) {
return a.split(",").map((b, c) => {
var e = p.exec(b.trim());
if (e) {
b = e[1];
var g = 1;
if (e[2]) {
e = e[2].split(";");
for (let k = 0; k < e.length; k++) {
const d = e[k].trim().split("=");
if ("q" == d[0]) {
g = parseFloat(d[1]);
break;
}
}
}
c = {charset:b, q:g, c};
} else {
c = null;
}
if (c) {
return c;
}
}).filter(Boolean);
}
function r(a, b) {
const c = q(void 0 === a ? "*" : a || "");
if (!b) {
return c.filter(t).sort(u).map(v);
}
const e = b.map((g, k) => {
{
let h = {a:-1, q:0, b:0};
for (let f = 0; f < c.length; f++) {
a: {
var d = c[f];
let l = 0;
if (d.charset.toLowerCase() === g.toLowerCase()) {
l |= 1;
} else {
if ("*" != d.charset) {
d = null;
break a;
}
}
d = {c:k, b:l, a:d.c, q:d.q};
}
d && 0 > (h.b - d.b || h.q - d.q || h.a - d.a) && (h = d);
}
g = h;
}
return g;
});
return e.filter(t).sort(u).map(g => b[e.indexOf(g)]);
}
function u(a, b) {
return b.q - a.q || b.b - a.b || a.a - b.a || a.c - b.c || 0;
}
function v(a) {
return a.charset;
}
function t(a) {
return 0 < a.q;
}
;const w = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
function x(a) {
a = a.split(",");
for (var b = !1, c = 1, e = 0, g = 0; e < a.length; e++) {
var k = e;
var d = w.exec(a[e].trim());
if (d) {
var h = d[1], f = 1;
if (d[2]) {
d = d[2].split(";");
for (var l = 0; l < d.length; l++) {
var m = d[l].trim().split("=");
if ("q" == m[0]) {
f = parseFloat(m[1]);
break;
}
}
}
k = {encoding:h, q:f, c:k};
} else {
k = null;
}
k && (a[g++] = k, b = b || y("identity", k, void 0), c = Math.min(c, k.q || 1));
}
b || (a[g++] = {encoding:"identity", q:c, c:e});
a.length = g;
return a;
}
function y(a, b, c) {
var e = 0;
if (b.encoding.toLowerCase() === a.toLowerCase()) {
e |= 1;
} else {
if ("*" !== b.encoding) {
return null;
}
}
return {c, a:b.c, q:b.q, b:e};
}
function z(a, b) {
var c = x(a || "");
if (!b) {
return c.filter(A).sort(B).map(C);
}
var e = b.map(function(g, k) {
for (var d = {a:-1, q:0, b:0}, h = 0; h < c.length; h++) {
var f = y(g, c[h], k);
f && 0 > (d.b - f.b || d.q - f.q || d.a - f.a) && (d = f);
}
return d;
});
return e.filter(A).sort(B).map(function(g) {
return b[e.indexOf(g)];
});
}
function B(a, b) {
return b.q - a.q || b.b - a.b || a.a - b.a || a.c - b.c || 0;
}
function C(a) {
return a.encoding;
}
function A(a) {
return 0 < a.q;
}
;const D = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/;
function E(a) {
a = a.split(",");
for (var b = 0, c = 0; b < a.length; b++) {
var e = F(a[b].trim(), b);
e && (a[c++] = e);
}
a.length = c;
return a;
}
function F(a, b) {
var c = D.exec(a);
if (!c) {
return null;
}
a = c[1];
var e = c[2], g = a;
e && (g += "-" + e);
var k = 1;
if (c[3]) {
c = c[3].split(";");
for (var d = 0; d < c.length; d++) {
var h = c[d].split("=");
"q" == h[0] && (k = parseFloat(h[1]));
}
}
return {prefix:a, i:e, q:k, c:b, f:g};
}
function G(a, b) {
var c = E(void 0 === a ? "*" : a || "");
if (!b) {
return c.filter(H).sort(I).map(J);
}
var e = b.map(function(g, k) {
for (var d = {a:-1, q:0, b:0}, h = 0; h < c.length; h++) {
a: {
var f = c[h];
var l = k, m = F(g, void 0);
if (m) {
var n = 0;
if (f.f.toLowerCase() === m.f.toLowerCase()) {
n |= 4;
} else {
if (f.prefix.toLowerCase() === m.f.toLowerCase()) {
n |= 2;
} else {
if (f.f.toLowerCase() === m.prefix.toLowerCase()) {
n |= 1;
} else {
if ("*" !== f.f) {
f = null;
break a;
}
}
}
}
f = {c:l, a:f.c, q:f.q, b:n};
} else {
f = null;
}
}
f && 0 > (d.b - f.b || d.q - f.q || d.a - f.a) && (d = f);
}
return d;
});
return e.filter(H).sort(I).map(function(g) {
return b[e.indexOf(g)];
});
}
function I(a, b) {
return b.q - a.q || b.b - a.b || a.a - b.a || a.c - b.c || 0;
}
function J(a) {
return a.f;
}
function H(a) {
return 0 < a.q;
}
;const K = /^\s*([^s/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;
function L(a) {
a = a.split(",");
for (var b = 1, c = 0; b < a.length; b++) {
0 == M(a[c]) % 2 ? a[++c] = a[b] : a[c] += "," + a[b];
}
a.length = c + 1;
for (c = b = 0; b < a.length; b++) {
var e = N(a[b].trim(), b);
e && (a[c++] = e);
}
a.length = c;
return a;
}
function N(a, b) {
var c = K.exec(a);
if (!c) {
return null;
}
a = Object.create(null);
var e = 1, g = c[2], k = c[1];
if (c[3]) {
c = c[3].split(";");
for (var d = 1, h = 0; d < c.length; d++) {
0 == M(c[h]) % 2 ? c[++h] = c[d] : c[h] += ";" + c[d];
}
c.length = h + 1;
for (d = 0; d < c.length; d++) {
c[d] = c[d].trim();
}
c = c.map(O);
for (d = 0; d < c.length; d++) {
var f = c[d];
h = f[0].toLowerCase();
f = (f = f[1]) && '"' === f[0] && '"' === f[f.length - 1] ? f.substr(1, f.length - 2) : f;
if ("q" === h) {
e = parseFloat(f);
break;
}
a[h] = f;
}
}
return {type:k, h:g, g:a, q:e, c:b};
}
function P(a, b, c) {
var e = N(a, void 0);
a = 0;
if (!e) {
return null;
}
if (b.type.toLowerCase() == e.type.toLowerCase()) {
a |= 4;
} else {
if ("*" != b.type) {
return null;
}
}
if (b.h.toLowerCase() == e.h.toLowerCase()) {
a |= 2;
} else {
if ("*" != b.h) {
return null;
}
}
var g = Object.keys(b.g);
if (0 < g.length) {
if (g.every(function(k) {
return "*" == b.g[k] || (b.g[k] || "").toLowerCase() == (e.g[k] || "").toLowerCase();
})) {
a |= 1;
} else {
return null;
}
}
return {c, a:b.c, q:b.q, b:a};
}
function Q(a, b) {
var c = L(void 0 === a ? "*/*" : a || "");
if (!b) {
return c.filter(R).sort(S).map(T);
}
var e = b.map(function(g, k) {
for (var d = {a:-1, q:0, b:0}, h = 0; h < c.length; h++) {
var f = P(g, c[h], k);
f && 0 > (d.b - f.b || d.q - f.q || d.a - f.a) && (d = f);
}
return d;
});
return e.filter(R).sort(S).map(function(g) {
return b[e.indexOf(g)];
});
}
function S(a, b) {
return b.q - a.q || b.b - a.b || a.a - b.a || a.c - b.c || 0;
}
function T(a) {
return a.type + "/" + a.h;
}
function R(a) {
return 0 < a.q;
}
function M(a) {
for (var b = 0, c = 0; -1 !== (c = a.indexOf('"', c));) {
b++, c++;
}
return b;
}
function O(a) {
var b = a.indexOf("=");
if (-1 === b) {
var c = a;
} else {
c = a.substr(0, b);
var e = a.substr(b + 1);
}
return [c, e];
}
;/*
MIT
Copyright(c) 2012 Federico Romero
Copyright(c) 2012-2014 Isaac Z. Schlueter
Copyright(c) 2015 Douglas Christopher Wilson
https://www.npmjs.com/package/negotiator
*/
class U {
constructor(a) {
this.request = a;
this.headers = this.request.headers;
}
charset(a) {
return (a = this.charsets(a)) && a[0];
}
charsets(a) {
return r(this.headers["accept-charset"], a);
}
encoding(a) {
return (a = this.encodings(a)) && a[0];
}
encodings(a) {
return z(this.headers["accept-encoding"], a);
}
language(a) {
return (a = this.languages(a)) && a[0];
}
languages(a) {
return G(this.headers["accept-language"], a);
}
mediaType(a) {
return (a = this.mediaTypes(a)) && a[0];
}
mediaTypes(a) {
return Q(this.headers.accept, a);
}
}
;DEPACK_EXPORT = U;
module.exports = DEPACK_EXPORT
//# sourceMappingURL=depack.js.map