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