You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
1.9 KiB
86 lines
1.9 KiB
var parse = require('spdx-expression-parse'); |
|
var correct = require('spdx-correct'); |
|
|
|
var genericWarning = ( |
|
'license should be ' + |
|
'a valid SPDX license expression (without "LicenseRef"), ' + |
|
'"UNLICENSED", or ' + |
|
'"SEE LICENSE IN <filename>"' |
|
); |
|
|
|
var fileReferenceRE = /^SEE LICEN[CS]E IN (.+)$/; |
|
|
|
function startsWith(prefix, string) { |
|
return string.slice(0, prefix.length) === prefix; |
|
} |
|
|
|
function usesLicenseRef(ast) { |
|
if (ast.hasOwnProperty('license')) { |
|
var license = ast.license; |
|
return ( |
|
startsWith('LicenseRef', license) || |
|
startsWith('DocumentRef', license) |
|
); |
|
} else { |
|
return ( |
|
usesLicenseRef(ast.left) || |
|
usesLicenseRef(ast.right) |
|
); |
|
} |
|
} |
|
|
|
module.exports = function(argument) { |
|
var ast; |
|
|
|
try { |
|
ast = parse(argument); |
|
} catch (e) { |
|
var match |
|
if ( |
|
argument === 'UNLICENSED' || |
|
argument === 'UNLICENCED' |
|
) { |
|
return { |
|
validForOldPackages: true, |
|
validForNewPackages: true, |
|
unlicensed: true |
|
}; |
|
} else if (match = fileReferenceRE.exec(argument)) { |
|
return { |
|
validForOldPackages: true, |
|
validForNewPackages: true, |
|
inFile: match[1] |
|
}; |
|
} else { |
|
var result = { |
|
validForOldPackages: false, |
|
validForNewPackages: false, |
|
warnings: [genericWarning] |
|
}; |
|
if (argument.trim().length !== 0) { |
|
var corrected = correct(argument); |
|
if (corrected) { |
|
result.warnings.push( |
|
'license is similar to the valid expression "' + corrected + '"' |
|
); |
|
} |
|
} |
|
return result; |
|
} |
|
} |
|
|
|
if (usesLicenseRef(ast)) { |
|
return { |
|
validForNewPackages: false, |
|
validForOldPackages: false, |
|
spdx: true, |
|
warnings: [genericWarning] |
|
}; |
|
} else { |
|
return { |
|
validForNewPackages: true, |
|
validForOldPackages: true, |
|
spdx: true |
|
}; |
|
} |
|
};
|
|
|