var spdxExpressionParse = require('spdx-expression-parse'); var MIT_LICENSE = /ermission is hereby granted, free of charge, to any/; var BSD_LICENSE = /edistribution and use in source and binary forms, with or withou/; var BSD_SOURCE_CODE_LICENSE = /edistribution and use of this software in source and binary forms, with or withou/; var WTFPL_LICENSE = /DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE/; var ISC_LICENSE = /The ISC License/; var MIT = /\bMIT\b/; var BSD = /\bBSD\b/; var ISC = /\bISC\b/; var GPL = /\bGNU GENERAL PUBLIC LICENSE\s*Version ([^,]*)/i; var LGPL = /(?:LESSER|LIBRARY) GENERAL PUBLIC LICENSE\s*Version ([^,]*)/i; var APACHE = /\bApache License\b/; var WTFPL = /\bWTFPL\b/; // https://creativecommons.org/publicdomain/zero/1.0/ var CC0_1_0 = /The\s+person\s+who\s+associated\s+a\s+work\s+with\s+this\s+deed\s+has\s+dedicated\s+the\s+work\s+to\s+the\s+public\s+domain\s+by\s+waiving\s+all\s+of\s+his\s+or\s+her\s+rights\s+to\s+the\s+work\s+worldwide\s+under\s+copyright\s+law,\s+including\s+all\s+related\s+and\s+neighboring\s+rights,\s+to\s+the\s+extent\s+allowed\s+by\s+law.\s+You\s+can\s+copy,\s+modify,\s+distribute\s+and\s+perform\s+the\s+work,\s+even\s+for\s+commercial\s+purposes,\s+all\s+without\s+asking\s+permission./i; // jshint ignore:line var PUBLIC_DOMAIN = /[Pp]ublic [Dd]omain/; var IS_URL = /(https?:\/\/[-a-zA-Z0-9\/.]*)/; var IS_FILE_REFERENCE = /SEE LICENSE IN (.*)/i; module.exports = function(str) { var match, version; try { spdxExpressionParse(str || ''); return str; } catch (error) { // nothing } if (str) { str = str.replace('\n', ''); } if (typeof str === 'undefined' || !str) { return 'Undefined'; } else if (ISC_LICENSE.test(str)) { return 'ISC*'; } else if (MIT_LICENSE.test(str)) { return 'MIT*'; } else if (BSD_LICENSE.test(str)) { return 'BSD*'; } else if (BSD_SOURCE_CODE_LICENSE.test(str)) { // https://spdx.org/licenses/BSD-Source-Code.html return 'BSD-Source-Code*'; } else if (WTFPL_LICENSE.test(str)) { return 'WTFPL*'; } else if (ISC.test(str)) { return 'ISC*'; } else if (MIT.test(str)) { return 'MIT*'; } else if (BSD.test(str)) { return 'BSD*'; } else if (WTFPL.test(str)) { return 'WTFPL*'; } else if (APACHE.test(str)) { return 'Apache*'; } else if (CC0_1_0.test(str)) { return 'CC0-1.0*'; } else if(GPL.test(str)) { match = GPL.exec(str); version = match[1]; /*istanbul ignore else*/ if(version.length === 1) { version = version + '.0'; } return 'GPL-'+version+'*'; } else if(LGPL.test(str)) { match = LGPL.exec(str); version = match[1]; if(version.length === 1) { version = version + '.0'; } return 'LGPL-'+version+'*'; } else if(PUBLIC_DOMAIN.test(str)) { return 'Public Domain'; } else { match = IS_URL.exec(str) || IS_FILE_REFERENCE.exec(str); if(match) { return 'Custom: ' + match[1]; } else { return null; } } };