diff --git a/lib/ua/parse.js b/lib/ua/parse.js index 86e3db3..46992bd 100644 --- a/lib/ua/parse.js +++ b/lib/ua/parse.js @@ -221,6 +221,8 @@ const andPatchTo = (andTo, andFrom, noEliminate) => { } else if (andFrom.$bin && (andTo.$bin || !Object.keys(andTo).length)) { andTo.$bin = true return + } else if (andTo.$bin && !Object.keys(andFrom).length) { + delete andTo.$bin } if (andFrom.$or && andFrom.$or.length) { @@ -560,12 +562,15 @@ const generateFakeUA = condition => { while (i--) { let source = condition[keys[i]] || {} - ua[keys[i]] = { - in: source.$in || [], - nin: source.$nin || [], - min: source['>'] || source['>='] || -Infinity, - max: source['<'] || source['<='] || Infinity - } + let min = source['>'] || source['>='] || -Infinity + let max = source['<'] || source['<='] || Infinity + + ua[keys[i]] = source.$in ? source.$in[0] + : source.$nin ? `not-${source.$nin.join('-')}` + : min !== -Infinity && max !== Infinity ? (min + max) / 2 + : min !== -Infinity ? +min + 1 + : max !== Infinity ? +max - 1 + : 'any' } return ua @@ -586,17 +591,10 @@ module.exports = ua => { } list = list.map(condition => { - const ua = generateFakeUA(condition) - for (let key in ua) { - ua[key] = ua[key].in.length ? ua[key].in[0] - : ua[key].nin.length ? `not-${ua[key].nin.join('-')}` - : ua[key].min !== -Infinity && ua[key].max !== Infinity ? (ua[key].min + ua[key].max) / 2 - : ua[key].min !== -Infinity ? +ua[key].min + 1 - : ua[key].max !== Infinity ? +ua[key].max - 1 - : 'any' + return { + condition, + ua: JSON.stringify(generateFakeUA(condition)) } - - return { condition, ua: JSON.stringify(ua) } }) const rules = [