blob: 7b33349f8f650e5c2d751718fc16279a5e8ff2fc [file] [log] [blame]
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
})