Fix #718 - Extension param now accept multiple extensions

This commit is contained in:
Faisal Salman
2024-06-06 20:02:22 +07:00
parent f7810dbfcf
commit 0a46ac396a
4 changed files with 32 additions and 10 deletions

View File

@@ -49,7 +49,7 @@ declare namespace UAParser {
type RegexMap = ((RegExp | string | (string | RegExp | Function)[])[])[];
type UAParserProps = 'browser' | 'cpu' | 'device' | 'engine' | 'os';
type UAParserExt = Partial<Record<UAParserProps, RegexMap>>;
type UAParserExt = Partial<Record<UAParserProps, RegexMap>> | Partial<Record<UAParserProps, RegexMap>>[];
export function UAParser(uastring?: string, extensions?: UAParserExt, headers?: Record<string, string>): IResult;
export function UAParser(uastring?: string, headers?: Record<string, string>): IResult;

View File

@@ -101,12 +101,21 @@
// Helper
//////////
var extend = function (regexes, extensions) {
var mergedRegexes = {};
for (var i in regexes) {
mergedRegexes[i] = extensions[i] && extensions[i].length % 2 === 0 ? extensions[i].concat(regexes[i]) : regexes[i];
var extend = function (defaultRgx, extensions) {
var mergedRgx = {};
var extraRgx = extensions;
if (!isExtensions(extensions)) {
extraRgx = {};
for (var i in extensions) {
for (var j in extensions[i]) {
extraRgx[j] = extensions[i][j].concat(extraRgx[j] ? extraRgx[j] : []);
}
}
}
return mergedRegexes;
for (var k in defaultRgx) {
mergedRgx[k] = extraRgx[k] && extraRgx[k].length % 2 === 0 ? extraRgx[k].concat(defaultRgx[k]) : defaultRgx[k];
}
return mergedRgx;
},
enumerize = function (arr) {
var enums = {};
@@ -124,9 +133,9 @@
}
return isString(str1) ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;
},
isExtensions = function (obj) {
isExtensions = function (obj, deep) {
for (var prop in obj) {
return /^(browser|cpu|device|engine|os)$/.test(prop);
return /^(browser|cpu|device|engine|os)$/.test(prop) || (deep ? isExtensions(obj[prop]) : false);
}
},
isString = function (val) {
@@ -1163,7 +1172,7 @@
function UAParser (ua, extensions, headers) {
if (typeof ua === OBJ_TYPE) {
if (isExtensions(ua)) {
if (isExtensions(ua, true)) {
if (typeof extensions === OBJ_TYPE) {
headers = extensions; // case UAParser(extensions, headers)
}
@@ -1173,7 +1182,7 @@
extensions = undefined;
}
ua = undefined;
} else if (typeof ua === STR_TYPE && !isExtensions(extensions)) {
} else if (typeof ua === STR_TYPE && !isExtensions(extensions, true)) {
headers = extensions; // case UAParser(ua, headers)
extensions = undefined;
}