| 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 | 
|     }; | 
|   } | 
| }; |