[apps/tidep0084.git] / prebuilt / iot-gateway / node_modules / engine.io / node_modules / negotiator / lib / mediaType.js
diff --git a/prebuilt/iot-gateway/node_modules/engine.io/node_modules/negotiator/lib/mediaType.js b/prebuilt/iot-gateway/node_modules/engine.io/node_modules/negotiator/lib/mediaType.js
+++ /dev/null
@@ -1,122 +0,0 @@
-module.exports = preferredMediaTypes;
-preferredMediaTypes.preferredMediaTypes = preferredMediaTypes;
-
-function parseAccept(accept) {
- return accept.split(',').map(function(e, i) {
- return parseMediaType(e.trim(), i);
- }).filter(function(e) {
- return e;
- });
-};
-
-function parseMediaType(s, i) {
- var match = s.match(/\s*(\S+?)\/([^;\s]+)\s*(?:;(.*))?/);
- if (!match) return null;
-
- var type = match[1],
- subtype = match[2],
- full = "" + type + "/" + subtype,
- params = {},
- q = 1;
-
- if (match[3]) {
- params = match[3].split(';').map(function(s) {
- return s.trim().split('=');
- }).reduce(function (set, p) {
- set[p[0]] = p[1];
- return set
- }, params);
-
- if (params.q != null) {
- q = parseFloat(params.q);
- delete params.q;
- }
- }
-
- return {
- type: type,
- subtype: subtype,
- params: params,
- q: q,
- i: i,
- full: full
- };
-}
-
-function getMediaTypePriority(type, accepted) {
- return (accepted.map(function(a) {
- return specify(type, a);
- }).filter(Boolean).sort(function (a, b) {
- if(a.s == b.s) {
- return a.q > b.q ? -1 : 1;
- } else {
- return a.s > b.s ? -1 : 1;
- }
- })[0] || {s: 0, q: 0});
-}
-
-function specify(type, spec) {
- var p = parseMediaType(type);
- var s = 0;
-
- if (!p) {
- return null;
- }
-
- if(spec.type.toLowerCase() == p.type.toLowerCase()) {
- s |= 4
- } else if(spec.type != '*') {
- return null;
- }
-
- if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {
- s |= 2
- } else if(spec.subtype != '*') {
- return null;
- }
-
- var keys = Object.keys(spec.params);
- if (keys.length > 0) {
- if (keys.every(function (k) {
- return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase();
- })) {
- s |= 1
- } else {
- return null
- }
- }
-
- return {
- q: spec.q,
- s: s,
- }
-
-}
-
-function preferredMediaTypes(accept, provided) {
- // RFC 2616 sec 14.2: no header = */*
- accept = parseAccept(accept === undefined ? '*/*' : accept || '');
- if (provided) {
- return provided.map(function(type) {
- return [type, getMediaTypePriority(type, accept)];
- }).filter(function(pair) {
- return pair[1].q > 0;
- }).sort(function(a, b) {
- var pa = a[1];
- var pb = b[1];
- return (pb.q - pa.q) || (pb.s - pa.s) || (pa.i - pb.i);
- }).map(function(pair) {
- return pair[0];
- });
-
- } else {
- return accept.sort(function (a, b) {
- // revsort
- return (b.q - a.q) || (a.i - b.i);
- }).filter(function(type) {
- return type.q > 0;
- }).map(function(type) {
- return type.full;
- });
- }
-}