webserv
Version:
a quick, flexible, fully typed development server
43 lines • 1.7 kB
JavaScript
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function getAccepts(accepts) {
return accepts.split(',').map((_) => {
const [accept, quality = 1] = _.split(';q=');
const [type, subtype] = accept.split('/');
return {
type,
subtype,
quality: typeof quality === 'number' ? quality : parseInt(quality, 10)
};
});
}
function contentNegotiator(handlers, defaultHandler) {
return (accepts = '*/*') => {
const list = getAccepts(accepts);
let found = { handler: defaultHandler, quality: 0 };
for (let { type, subtype, quality } of list) {
for (let meta of handlers) {
if ((type === '*' || (type === meta.type && (subtype === '*' || subtype === meta.subtype))) &&
quality > found.quality) {
found = { handler: meta.handler, quality };
}
if (found.quality === 1) {
break;
}
}
}
return found.handler;
};
}
exports.contentNegotiator = contentNegotiator;
});
//# sourceMappingURL=contentNegotiator.js.map