Skip to content

Commit

Permalink
Add the ability to use an array of versions in Parser.satisfies()
Browse files Browse the repository at this point in the history
  • Loading branch information
Stas Tolpekin committed Feb 26, 2021
1 parent f094114 commit 9f4429a
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 3 deletions.
17 changes: 15 additions & 2 deletions src/parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ class Parser {

allDefinitions.forEach((key) => {
const currentDefinition = checkTree[key];
if (typeof currentDefinition === 'string') {
if (typeof currentDefinition === 'string' || Array.isArray(currentDefinition)) {
browsers[key] = currentDefinition;
browsersCounter += 1;
} else if (typeof currentDefinition === 'object') {
Expand Down Expand Up @@ -399,7 +399,7 @@ class Parser {
const matchingDefinition = Utils.find(browserNames, name => (this.isBrowser(name, true)));

if (matchingDefinition !== void 0) {
return this.compareVersion(browsers[matchingDefinition]);
return this.compareVersions(browsers[matchingDefinition]);
}
}

Expand All @@ -423,6 +423,19 @@ class Parser {
return browserNameLower === defaultBrowserName;
}

/**
* Check if browser version equals the version or equals one of versions
* @param {(string|string[])} versionsOrVersion versions strings array or version string
* @returns {boolean}
*/
compareVersions(versionsOrVersion) {
if (typeof versionsOrVersion === 'string') {
return this.compareVersion(versionsOrVersion);
}

return versionsOrVersion.some(version => this.compareVersion(version));
}

compareVersion(version) {
let expectedResults = [0];
let comparableVersion = version;
Expand Down
8 changes: 7 additions & 1 deletion test/unit/parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ test('Skip parsing shouldn\'t parse', (t) => {
});

test('Parser.satisfies should make simple comparisons', (t) => {
// also covers Parser.compareVersion() method
// also covers Parser.compareVersion() and Parser.compareVersions() methods
t.is(parser.satisfies({ opera: '>42' }), true);
t.is(parser.satisfies({ opera: '<44' }), true);
t.is(parser.satisfies({ opera: '=43.0.2442.1165' }), true);
Expand All @@ -96,6 +96,12 @@ test('Parser.satisfies should make simple comparisons', (t) => {
t.is(parser.satisfies({ opera: '~43' }), true);
});

test('Parser.satisfies should make comparisons with array of versions', (t) => {
// also covers Parser.compareVersion() and Parser.compareVersions() methods
t.is(parser.satisfies({ opera: ['~42', '~43'] }), true);
t.is(parser.satisfies({ opera: ['~40', '~41'] }), false);
});

test('Parser.satisfies should make complex comparison', (t) => {
t.is(parser.satisfies({
macos: {
Expand Down

0 comments on commit 9f4429a

Please sign in to comment.