diff --git a/lib/ua/parse.js b/lib/ua/parse.js index b13478e..86e3db3 100644 --- a/lib/ua/parse.js +++ b/lib/ua/parse.js @@ -213,14 +213,14 @@ const orPatch = (or) => { } const andPatchTo = (andTo, andFrom, noEliminate) => { - if (andFrom.hasOwnProperty('$bin')) { - if (!andFrom.$bin) { - andKill(andTo) - return - } else if (andFrom.$bin && !Object.keys(andTo).length) { - andTo.$bin = true - return - } + if (andTo.hasOwnProperty('$bin') && !andTo.$bin) { + return + } else if (andFrom.hasOwnProperty('$bin') && !andFrom.$bin) { + andKill(andTo) + return + } else if (andFrom.$bin && (andTo.$bin || !Object.keys(andTo).length)) { + andTo.$bin = true + return } if (andFrom.$or && andFrom.$or.length) { @@ -549,42 +549,23 @@ const removeOrs = test => { delete test.$or } -const filterUA = (ua, key, filter) => { - for (let operator in filter) { - let val = filter[operator] - - if (operator === '$in') { - ua[key].in = val - } else if (operator === '$nin') { - ua[key].nin = val - } else if (operator === '<=' || operator === '<') { - if (ua[key].max > val) { - ua[key].max = val - } - } else if (operator === '>=' || operator === '>') { - if (ua[key].min < val) { - ua[key].min = val - } - } - } -} - const generateFakeUA = condition => { if (condition.hasOwnProperty('$bin')) { return condition.$bin } - const ua = { - browser: { in: [], nin: [], min: -Infinity, max: Infinity }, - version: { in: [], nin: [], min: -Infinity, max: Infinity }, - prefix: { in: [], nin: [], min: -Infinity, max: Infinity }, - platform: { in: [], nin: [], min: -Infinity, max: Infinity }, - device: { in: [], nin: [], min: -Infinity, max: Infinity }, - webview: { in: [], nin: [], min: -Infinity, max: Infinity } - } + const ua = {} + const keys = ['webview', 'device', 'platform', 'prefix', 'version', 'browser'] + let i = keys.length - for (var key in condition) { - filterUA(ua, key, condition[key]) + while (i--) { + let source = condition[keys[i]] || {} + ua[keys[i]] = { + in: source.$in || [], + nin: source.$nin || [], + min: source['>'] || source['>='] || -Infinity, + max: source['<'] || source['<='] || Infinity + } } return ua