87 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			87 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 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 | ||
|  |     }; | ||
|  |   } | ||
|  | }; |