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