UNPKG

npm-dependency-analyzer

Version:

Plugin to validate dependencies, concerning their license and vulnerabities

93 lines (80 loc) 3.11 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = getLicenses; var _report_model = require('../report_model'); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _licenseChecker = require('license-checker'); var _licenseChecker2 = _interopRequireDefault(_licenseChecker); var _bunyan = require('bunyan'); var _bunyan2 = _interopRequireDefault(_bunyan); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const logger = _bunyan2.default.createLogger({ name: 'Fetch-Licenses' }); /** * Create a report license object based in the information available * @param {String} license the license title * @param {Object} dependency the current dependency * @param {String} depAndVersion the dependency and version * @param {Array} invalidLicenses array with all the invalid licenses */ function createLicense(license, dependency, depAndVersion, invalidLicenses) { if (license.includes('Custom')) { return; } let depLicense; if (license.includes('*')) { depLicense = new _report_model.License(license.substring(1, license.length - 1), `Found in license file with version ${depAndVersion}`); } else { depLicense = new _report_model.License(license, `Found in package.json file with version ${depAndVersion}`); } if (invalidLicenses.some(invalid => invalid === depLicense.spdx_id)) { depLicense.valid = false; } dependency.insertLicense(depLicense); } /** * Inserts report license objects into the current dependency * @param {String} license the license title * @param {Object} dependency the current dependency * @param {String} depAndVersion the dependency and version * @param {Array} invalidLicenses array with all the invalid licenses */ function insertLicenseinDependency(dependency, depAndVersion, license, invalidLicenses) { if (_lodash2.default.isArray(license)) { license.forEach(elem => { createLicense(elem, dependency, depAndVersion, invalidLicenses); }); } else { createLicense(license, dependency, depAndVersion, invalidLicenses); } } /** * Fetches licenses for all dependencies * @param {Array} dependencies array of dependencies * @param {Array} invalidLicenses array with invalid licenses */ function getLicenses(dependencies, invalidLicenses) { logger.info('Fetching licenses'); return new Promise((resolve, reject) => { _licenseChecker2.default.init({ start: './' }, (err, allLicenses) => { if (err) { reject(err); } else { const licenseKeys = Object.keys(allLicenses); dependencies.forEach(element => { const licenses = licenseKeys.filter(licenseKey => licenseKey.split('@')[0] === element.title); licenses.forEach(e => { const license = allLicenses[e].licenses; if (license) { insertLicenseinDependency(element, e, license, invalidLicenses); } }); }); logger.info('Finished fetching licenses'); resolve(dependencies); } }); }); }