* use most permissive license color * revert to possible non-array licenseToColor argument
98 lines
2.3 KiB
JavaScript
98 lines
2.3 KiB
JavaScript
'use strict'
|
|
|
|
const { toArray } = require('./badge-data')
|
|
|
|
const licenseTypes = {
|
|
// permissive licenses - not public domain and not copyleft
|
|
permissive: {
|
|
spdxLicenseIds: [
|
|
'AFL-3.0',
|
|
'Apache-2.0',
|
|
'Artistic-2.0',
|
|
'BSD-2-Clause',
|
|
'BSD-3-Clause',
|
|
'BSD-3-Clause-Clear',
|
|
'BSL-1.0',
|
|
'CC-BY-4.0',
|
|
'ECL-2.0',
|
|
'ISC',
|
|
'MIT',
|
|
'MS-PL',
|
|
'NCSA',
|
|
'PostgreSQL',
|
|
'Zlib',
|
|
],
|
|
color: 'green',
|
|
priority: '2',
|
|
},
|
|
// copyleft licenses require 'Disclose source' (https://choosealicense.com/appendix/#disclose-source)
|
|
// or 'Same license' (https://choosealicense.com/appendix/#same-license)
|
|
copyleft: {
|
|
spdxLicenseIds: [
|
|
'AGPL-3.0',
|
|
'CC-BY-SA-4.0',
|
|
'EPL-1.0',
|
|
'EUPL-1.1',
|
|
'GPL-2.0',
|
|
'GPL-3.0',
|
|
'LGPL-2.1',
|
|
'LGPL-3.0',
|
|
'LPPL-1.3c',
|
|
'MPL-2.0',
|
|
'MS-RL',
|
|
'OFL-1.1',
|
|
'OSL-3.0',
|
|
],
|
|
color: 'orange',
|
|
priority: '1',
|
|
},
|
|
// public domain licenses do not require 'License and copyright notice' (https://choosealicense.com/appendix/#include-copyright)
|
|
'public-domain': {
|
|
spdxLicenseIds: ['CC0-1.0', 'Unlicense', 'WTFPL'],
|
|
color: '7cd958',
|
|
priority: '3',
|
|
},
|
|
}
|
|
|
|
const licenseToColorMap = {}
|
|
Object.keys(licenseTypes).forEach(licenseType => {
|
|
const { spdxLicenseIds, color, priority } = licenseTypes[licenseType]
|
|
spdxLicenseIds.forEach(license => {
|
|
licenseToColorMap[license] = { color, priority }
|
|
})
|
|
})
|
|
const defaultLicenseColor = 'lightgrey'
|
|
const licenseToColor = spdxId => {
|
|
if (!Array.isArray(spdxId)) {
|
|
return (
|
|
(licenseToColorMap[spdxId] && licenseToColorMap[spdxId].color) ||
|
|
defaultLicenseColor
|
|
)
|
|
}
|
|
const licenseType = spdxId
|
|
.filter(i => licenseToColorMap[i])
|
|
.map(i => licenseToColorMap[i])
|
|
.reduce((a, b) => (a.priority > b.priority ? a : b), {
|
|
color: defaultLicenseColor,
|
|
priority: 0,
|
|
})
|
|
return licenseType.color
|
|
}
|
|
|
|
function renderLicenseBadge({ license, licenses }) {
|
|
if (licenses === undefined) {
|
|
licenses = toArray(license)
|
|
}
|
|
|
|
if (licenses.length === 0) {
|
|
return { message: 'missing', color: 'red' }
|
|
}
|
|
|
|
return {
|
|
message: licenses.join(', '),
|
|
color: licenseToColor(licenses),
|
|
}
|
|
}
|
|
|
|
module.exports = { licenseToColor, renderLicenseBadge }
|