mirror of
https://github.com/lancedikson/bowser
synced 2024-10-27 20:34:22 +00:00
add ability to check OS with satisfies
This commit is contained in:
parent
f09411489c
commit
1d72cd9fa9
@ -398,8 +398,17 @@ class Parser {
|
||||
const browserNames = Object.keys(browsers);
|
||||
const matchingDefinition = Utils.find(browserNames, name => (this.isBrowser(name, true)));
|
||||
|
||||
if (matchingDefinition !== void 0) {
|
||||
return this.compareVersion(browsers[matchingDefinition]);
|
||||
if (matchingDefinition !== void 0 && !checkTree.OS) {
|
||||
return this.compareBrowserVersion(browsers[matchingDefinition]);
|
||||
}
|
||||
|
||||
if (matchingDefinition !== void 0 && checkTree.OS) {
|
||||
return this.compareBrowserVersion(browsers[matchingDefinition])
|
||||
&& this.compareOSVersion(checkTree.OS);
|
||||
}
|
||||
|
||||
if (checkTree.OS) {
|
||||
return this.compareOSVersion(checkTree.OS);
|
||||
}
|
||||
}
|
||||
|
||||
@ -423,39 +432,47 @@ class Parser {
|
||||
return browserNameLower === defaultBrowserName;
|
||||
}
|
||||
|
||||
compareVersion(version) {
|
||||
compareBrowserVersion(versionToCompare) {
|
||||
const currentBrowserVersion = this.getBrowserVersion();
|
||||
return this.compareVersion(currentBrowserVersion, versionToCompare);
|
||||
}
|
||||
|
||||
compareOSVersion(versionToCompare) {
|
||||
const currentOSVersion = this.getOSVersion();
|
||||
return this.compareVersion(currentOSVersion, versionToCompare);
|
||||
}
|
||||
|
||||
compareVersion = (version, versionToCompare) => {
|
||||
let expectedResults = [0];
|
||||
let comparableVersion = version;
|
||||
let comparableVersion = versionToCompare;
|
||||
let isLoose = false;
|
||||
|
||||
const currentBrowserVersion = this.getBrowserVersion();
|
||||
|
||||
if (typeof currentBrowserVersion !== 'string') {
|
||||
if (typeof version !== 'string') {
|
||||
return void 0;
|
||||
}
|
||||
|
||||
if (version[0] === '>' || version[0] === '<') {
|
||||
comparableVersion = version.substr(1);
|
||||
if (version[1] === '=') {
|
||||
if (versionToCompare[0] === '>' || versionToCompare[0] === '<') {
|
||||
comparableVersion = versionToCompare.substr(1);
|
||||
if (versionToCompare[1] === '=') {
|
||||
isLoose = true;
|
||||
comparableVersion = version.substr(2);
|
||||
comparableVersion = versionToCompare.substr(2);
|
||||
} else {
|
||||
expectedResults = [];
|
||||
}
|
||||
if (version[0] === '>') {
|
||||
if (versionToCompare[0] === '>') {
|
||||
expectedResults.push(1);
|
||||
} else {
|
||||
expectedResults.push(-1);
|
||||
}
|
||||
} else if (version[0] === '=') {
|
||||
comparableVersion = version.substr(1);
|
||||
} else if (version[0] === '~') {
|
||||
} else if (versionToCompare[0] === '=') {
|
||||
comparableVersion = versionToCompare.substr(1);
|
||||
} else if (versionToCompare[0] === '~') {
|
||||
isLoose = true;
|
||||
comparableVersion = version.substr(1);
|
||||
comparableVersion = versionToCompare.substr(1);
|
||||
}
|
||||
|
||||
return expectedResults.indexOf(
|
||||
Utils.compareVersions(currentBrowserVersion, comparableVersion, isLoose),
|
||||
Utils.compareVersions(version, comparableVersion, isLoose),
|
||||
) > -1;
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,9 @@ const edgeParser = new Parser(EDGE_UA, true);
|
||||
const FOCUS_UA = 'Mozilla/5.0 (Linux; Android 7.1.1) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/1.2.1 Chrome/59.0.3071.125';
|
||||
const focusParser = new Parser(FOCUS_UA, true);
|
||||
|
||||
const IPHONE_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1';
|
||||
const iphoneParser = new Parser(IPHONE_UA, true);
|
||||
|
||||
test('constructor', (t) => {
|
||||
t.truthy(parser instanceof Parser);
|
||||
});
|
||||
@ -155,8 +158,27 @@ test('Parser.satisfies for versionless UA strings', (t) => {
|
||||
test('Parser.satisfies should consider aliases while handling browsers', (t) => {
|
||||
t.is(edgeParser.satisfies({ 'Microsoft Edge': '=41.1.35.1' }), true);
|
||||
t.is(edgeParser.satisfies({ 'microsoft edge': '=41.1.35.1' }), true);
|
||||
t.is(edgeParser.satisfies({ 'edge': '=41.1.35.1' }), true);
|
||||
t.is(edgeParser.satisfies({ 'Edge': '=41.1.35.1' }), true);
|
||||
t.is(edgeParser.satisfies({ edge: '=41.1.35.1' }), true);
|
||||
t.is(edgeParser.satisfies({ Edge: '=41.1.35.1' }), true);
|
||||
});
|
||||
|
||||
test('Parser.satisfies should consider OS while handling browsers', (t) => {
|
||||
t.is(parser.satisfies({ macos: { OS: '>=8.0.0' } }), true);
|
||||
t.is(parser.satisfies({ macos: { OS: '>=8.0.0', chrome: '>50' } }), true);
|
||||
t.is(iphoneParser.satisfies({
|
||||
windows: {
|
||||
OS: '>=10',
|
||||
},
|
||||
macos: {
|
||||
OS: '>=10.13',
|
||||
},
|
||||
android: {
|
||||
OS: '>=7',
|
||||
},
|
||||
iOS: {
|
||||
OS: '>=8.4',
|
||||
},
|
||||
}), true);
|
||||
});
|
||||
|
||||
test('Parser.is should pass', (t) => {
|
||||
|
Loading…
Reference in New Issue
Block a user