accept-language
Advanced tools
Comparing version 3.0.17 to 3.0.18
@@ -5,3 +5,3 @@ "use strict"; | ||
var stable = require("stable"); | ||
var AcceptLanguage = (function () { | ||
var AcceptLanguage = /** @class */ (function () { | ||
function AcceptLanguage() { | ||
@@ -29,7 +29,24 @@ this.languageTagsWithValues = {}; | ||
languageTagWithValues.value = languageTagString; | ||
var lowerCasedLanguageTagWithValues = { | ||
language: { | ||
language: langtag.language.language.toLowerCase(), | ||
extlang: langtag.language.extlang.map(function (e) { return e.toLowerCase(); }), | ||
}, | ||
region: langtag.region && langtag.region.toLowerCase(), | ||
script: langtag.script && langtag.script.toLowerCase(), | ||
variant: langtag.variant.map(function (v) { return v.toLowerCase(); }), | ||
privateuse: langtag.privateuse.map(function (p) { return p.toLowerCase(); }), | ||
extension: langtag.extension.map(function (e) { | ||
return { | ||
extension: e.extension && e.extension.map(function (e) { return e.toLowerCase(); }), | ||
singleton: e.singleton.toLowerCase(), | ||
}; | ||
}), | ||
value: languageTagString, | ||
}; | ||
if (!_this.languageTagsWithValues[language]) { | ||
_this.languageTagsWithValues[language] = [languageTagWithValues]; | ||
_this.languageTagsWithValues[language] = [lowerCasedLanguageTagWithValues]; | ||
} | ||
else { | ||
_this.languageTagsWithValues[language].push(languageTagWithValues); | ||
_this.languageTagsWithValues[language].push(lowerCasedLanguageTagWithValues); | ||
} | ||
@@ -63,7 +80,31 @@ }); | ||
var definedLangTag = _b[_a]; | ||
var unmatchedRequestedSubTag = 0; | ||
for (var _c = 0, _d = ['privateuse', 'extension', 'variant', 'region', 'script']; _c < _d.length; _c++) { | ||
var prop = _d[_c]; | ||
// Continue fast. | ||
var definedLanguagePropertValue = definedLangTag[prop]; | ||
if (!definedLanguagePropertValue) { | ||
var requestedLanguagePropertyValue_1 = requestedLangTag[prop]; | ||
if (requestedLanguagePropertyValue_1) { | ||
unmatchedRequestedSubTag++; | ||
} | ||
switch (prop) { | ||
case 'privateuse': | ||
case 'variant': | ||
for (var i = 0; i < requestedLanguagePropertyValue_1.length; i++) { | ||
if (requestedLanguagePropertyValue_1[i]) { | ||
unmatchedRequestedSubTag++; | ||
} | ||
} | ||
break; | ||
case 'extension': | ||
for (var i = 0; i < requestedLanguagePropertyValue_1.length; i++) { | ||
var extension = requestedLanguagePropertyValue_1[i].extension; | ||
for (var ei = 0; ei < extension.length; ei++) { | ||
if (!requestedLanguagePropertyValue_1[i].extension[ei]) { | ||
unmatchedRequestedSubTag++; | ||
} | ||
} | ||
} | ||
break; | ||
} | ||
continue; | ||
@@ -75,35 +116,52 @@ } | ||
var requestedLanguagePropertyValue = requestedLangTag[prop]; | ||
if (definedLanguagePropertValue && !requestedLanguagePropertyValue) { | ||
if (!requestedLanguagePropertyValue) { | ||
continue middle; | ||
} | ||
else if (prop === 'privateuse' || prop === 'variant') { | ||
for (var i = 0; i < definedLanguagePropertValue.length; i++) { | ||
if (definedLanguagePropertValue[i] !== requestedLanguagePropertyValue[i]) { | ||
continue middle; | ||
} | ||
} | ||
} | ||
else if (prop === 'extension') { | ||
for (var i = 0; i < definedLanguagePropertValue.length; i++) { | ||
var extensions = definedLanguagePropertValue[i].extension; | ||
for (var ei = 0; ei < extensions.length; ei++) { | ||
if (!requestedLanguagePropertyValue[i]) { | ||
switch (prop) { | ||
case 'privateuse': | ||
case 'variant': | ||
for (var i = 0; i < definedLanguagePropertValue.length; i++) { | ||
if (!requestedLanguagePropertyValue[i] || definedLanguagePropertValue[i] !== requestedLanguagePropertyValue[i].toLowerCase()) { | ||
continue middle; | ||
} | ||
if (extensions[ei] !== requestedLanguagePropertyValue[i].extension[ei]) { | ||
continue middle; | ||
} | ||
break; | ||
case 'extension': | ||
for (var i = 0; i < definedLanguagePropertValue.length; i++) { | ||
var extension = definedLanguagePropertValue[i].extension; | ||
for (var ei = 0; ei < extension.length; ei++) { | ||
if (!requestedLanguagePropertyValue[i]) { | ||
continue middle; | ||
} | ||
if (!requestedLanguagePropertyValue[i].extension[ei]) { | ||
continue middle; | ||
} | ||
if (extension[ei] !== requestedLanguagePropertyValue[i].extension[ei].toLowerCase()) { | ||
continue middle; | ||
} | ||
} | ||
} | ||
} | ||
break; | ||
default: | ||
if (definedLanguagePropertValue !== requestedLanguagePropertyValue.toLowerCase()) { | ||
continue middle; | ||
} | ||
} | ||
else if (definedLanguagePropertValue !== requestedLanguagePropertyValue) { | ||
continue middle; | ||
} | ||
} | ||
result.push(definedLangTag.value); | ||
result.push({ | ||
unmatchedRequestedSubTag: unmatchedRequestedSubTag, | ||
quality: languageTag.quality, | ||
languageTag: definedLangTag.value | ||
}); | ||
} | ||
} | ||
return result.length > 0 ? result : [this.defaultLanguageTag]; | ||
return result.length > 0 ? stable(result, function (a, b) { | ||
var quality = b.quality - a.quality; | ||
if (quality != 0) { | ||
return quality; | ||
} | ||
return a.unmatchedRequestedSubTag - b.unmatchedRequestedSubTag; | ||
}).map(function (l) { return l.languageTag; }) : [this.defaultLanguageTag]; | ||
function parseAndSortLanguageTags(languagePriorityList) { | ||
return stable(languagePriorityList.split(',').map(function (weightedLanguageRange) { | ||
return languagePriorityList.split(',').map(function (weightedLanguageRange) { | ||
var components = weightedLanguageRange.replace(/\s+/, '').split(';'); | ||
@@ -123,6 +181,2 @@ return { | ||
return languageTag; | ||
}) | ||
// Sort by quality | ||
, function (a, b) { | ||
return b.quality - a.quality; | ||
}); | ||
@@ -143,1 +197,2 @@ } | ||
exports.default = create(); | ||
//# sourceMappingURL=AcceptLanguage.js.map |
{ | ||
"name": "accept-language", | ||
"version": "3.0.17", | ||
"version": "3.0.18", | ||
"description": "Accept-Language parser for nodejs", | ||
@@ -26,6 +26,8 @@ "main": "Build/Source/AcceptLanguage.js", | ||
"devDependencies": { | ||
"@types/chai": "^3.4.32", | ||
"@types/mocha": "^2.2.31", | ||
"@types/node": "^8.0.31", | ||
"chai": "~1.9.1", | ||
"mocha": "^2.2.5", | ||
"chai": "~1.9.1", | ||
"@types/chai": "^3.4.32", | ||
"@types/mocha": "^2.2.31" | ||
"source-map-support": "^0.4.18" | ||
}, | ||
@@ -32,0 +34,0 @@ "dependencies": { |
21579
8
235
6