Skip to content

Commit

Permalink
performance
Browse files Browse the repository at this point in the history
  • Loading branch information
mstdokumaci committed Mar 23, 2017
1 parent ba198bc commit 6756404
Showing 1 changed file with 19 additions and 38 deletions.
57 changes: 19 additions & 38 deletions lib/ua/parse.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 6756404

Please sign in to comment.