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