| var arrayFindIndex = require('array-find-index') | |
| var parse = require('spdx-expression-parse') | |
| var ranges = require('spdx-ranges') | |
| var notALicenseIdentifier = ' is not a simple license identifier' | |
| var rangeComparison = function (comparison) { | |
| return function (first, second) { | |
| var firstAST = parse(first) | |
| if (!firstAST.hasOwnProperty('license')) { | |
| throw new Error('"' + first + '"' + notALicenseIdentifier) | |
| } | |
| var secondAST = parse(second) | |
| if (!secondAST.hasOwnProperty('license')) { | |
| throw new Error('"' + second + '"' + notALicenseIdentifier) | |
| } | |
| return ranges.some(function (range) { | |
| var firstLicense = firstAST.license | |
| var indexOfFirst = arrayFindIndex(range, function (element) { | |
| return ( | |
| element === firstLicense || | |
| ( | |
| Array.isArray(element) && | |
| element.indexOf(firstLicense) !== -1 | |
| ) | |
| ) | |
| }) | |
| if (indexOfFirst < 0) { | |
| return false | |
| } | |
| var secondLicense = secondAST.license | |
| var indexOfSecond = arrayFindIndex(range, function (element) { | |
| return ( | |
| element === secondLicense || | |
| ( | |
| Array.isArray(element) && | |
| element.indexOf(secondLicense) !== -1 | |
| ) | |
| ) | |
| }) | |
| if (indexOfSecond < 0) { | |
| return false | |
| } | |
| return comparison(indexOfFirst, indexOfSecond) | |
| }) | |
| } | |
| } | |
| exports.gt = rangeComparison(function (first, second) { | |
| return first > second | |
| }) | |
| exports.lt = rangeComparison(function (first, second) { | |
| return first < second | |
| }) | |
| exports.eq = rangeComparison(function (first, second) { | |
| return first === second | |
| }) |