diff --git a/src/parser.js b/src/parser.js index 2f9f39f..988316d 100644 --- a/src/parser.js +++ b/src/parser.js @@ -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') { @@ -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]); } } @@ -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; diff --git a/test/unit/parser.js b/test/unit/parser.js index 66036fd..82519f5 100644 --- a/test/unit/parser.js +++ b/test/unit/parser.js @@ -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); @@ -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: {