rollup-plugin-license
Version:
Rollup plugin to add license banner to the final bundle and output third party licenses
146 lines (117 loc) • 5.68 kB
JavaScript
/**
* The MIT License (MIT)
*
* Copyright (c) 2016 Mickael Jeanroy
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var _ = require('lodash');
var EOL = require('./eol.js');
var Person = require('./person.js');
/**
* Dependency structure.
*/
var Dependency = function () {
/**
* Create new dependency from package description.
*
* @param {Object} pkg Package description.
* @constructor
*/
function Dependency(pkg) {
_classCallCheck(this, Dependency);
var dependency = _.pick(pkg, ['name', 'author', 'contributors', 'maintainers', 'version', 'description', 'license', 'licenses', 'repository', 'homepage', 'private']);
// Parse the author field to get an object.
if (dependency.author) {
dependency.author = new Person(dependency.author);
}
// Parse the contributor array.
if (dependency.contributors) {
// Translate to an array if it is not already.
if (_.isString(dependency.contributors)) {
dependency.contributors = [dependency.contributors];
}
// Parse each contributor to produce a single object for each person.
dependency.contributors = _.map(dependency.contributors, function (contributor) {
return new Person(contributor);
});
}
// The `licenses` field is deprecated but may be used in some packages.
// Map it to a standard license field.
if (!dependency.license && dependency.licenses) {
// Map it to a valid license field.
// See: https://docs.npmjs.com/files/package.json#license
dependency.license = '(' + _.chain(dependency.licenses).map(function (license) {
return license.type || license;
}).join(' OR ').value() + ')';
// Remove it.
delete dependency.licenses;
}
_.extend(this, dependency);
}
/**
* Serialize dependency as a string.
*
* @param {string} prefix Optional prefix prepended to the output string.
* @param {suffix} suffix Optional suffix appended to the output string.
* @param {string} joiner Optional character used to join all the lines.
* @return {string} The dependency correctly formatted.
*/
_createClass(Dependency, [{
key: 'text',
value: function text() {
var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var suffix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
var joiner = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EOL;
var lines = [];
lines.push(prefix + 'Name: ' + this.name + suffix);
lines.push(prefix + 'Version: ' + this.version + suffix);
lines.push(prefix + 'License: ' + this.license + suffix);
lines.push(prefix + 'Private: ' + (this.private || false) + suffix);
if (this.description) {
lines.push(prefix + 'Description: ' + (this.description || false) + suffix);
}
if (this.repository) {
lines.push(prefix + 'Repository: ' + this.repository.url + suffix);
}
if (this.homepage) {
lines.push(prefix + 'Homepage: ' + this.homepage + suffix);
}
if (this.author) {
lines.push(prefix + 'Author: ' + this.author.text() + suffix);
}
if (this.contributors) {
lines.push(prefix + 'Contributors:' + suffix);
var allContributors = _.chain(this.contributors).map(function (contributor) {
return contributor.text();
}).map(function (line) {
return prefix + ' ' + line + suffix;
}).value();
lines.push.apply(lines, _toConsumableArray(allContributors));
}
return lines.join(joiner);
}
}]);
return Dependency;
}();
module.exports = Dependency;