From 0eefc58f2dd4cd5395a777aa03980f290f3ca687 Mon Sep 17 00:00:00 2001 From: Mickael Jeanroy Date: Mon, 21 Aug 2017 22:32:17 +0200 Subject: [PATCH] release: release version --- dist/dependency.js | 146 ++++++++++++++++ dist/eol.js | 27 +++ dist/generate-block-comment.js | 37 +++++ dist/index.js | 102 ++++++++++++ dist/license-plugin.js | 295 +++++++++++++++++++++++++++++++++ dist/person.js | 114 +++++++++++++ package.json | 2 +- 7 files changed, 722 insertions(+), 1 deletion(-) create mode 100644 dist/dependency.js create mode 100644 dist/eol.js create mode 100644 dist/generate-block-comment.js create mode 100644 dist/index.js create mode 100644 dist/license-plugin.js create mode 100644 dist/person.js diff --git a/dist/dependency.js b/dist/dependency.js new file mode 100644 index 00000000..caf64e79 --- /dev/null +++ b/dist/dependency.js @@ -0,0 +1,146 @@ +/** + * 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. + */ + +'use strict'; + +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; \ No newline at end of file diff --git a/dist/eol.js b/dist/eol.js new file mode 100644 index 00000000..abef5043 --- /dev/null +++ b/dist/eol.js @@ -0,0 +1,27 @@ +/** + * 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. + */ + +'use strict'; + +module.exports = '\n'; \ No newline at end of file diff --git a/dist/generate-block-comment.js b/dist/generate-block-comment.js new file mode 100644 index 00000000..75e734e3 --- /dev/null +++ b/dist/generate-block-comment.js @@ -0,0 +1,37 @@ +/** + * 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. + */ + +'use strict'; + +var commenting = require('commenting'); + +/** + * Generate block comment from given text content. + * + * @param {string} text Text content. + * @return {string} Block comment. + */ +module.exports = function generateBlockComment(text) { + return commenting(text.trim(), { extension: '.js' }); +}; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 00000000..0796d1b1 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,102 @@ +/** + * 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. + */ + +'use strict'; + +var _ = require('lodash'); +var LicensePlugin = require('./license-plugin.js'); + +module.exports = function () { + var _options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var plugin = new LicensePlugin(_options); + + return { + /** + * Name of the plugin, used automatically by rollup. + * @type {string} + */ + name: plugin.name, + + /** + * Function called by rollup when a JS file is loaded: it is used to scan + * third-party dependencies. + * + * @param {string} id JS file path. + * @return {void} + */ + load: function load(id) { + plugin.scanDependency(id); + }, + + + /** + * Function called by rollup to read global options: if source map parameter + * is truthy, enable it on the plugin. + * + * @param {object} opts Rollup options. + * @return {void} + */ + options: function options(opts) { + if (!opts) { + return; + } + + if (_.has(_options, 'sourceMap') || _.has(_options, 'sourcemap')) { + // SourceMap has been set on the plugin itself. + return; + } + + // Rollup >= 0.48 replace `sourceMap` with `sourcemap`. + // If `sourcemap` is disabled globally, disable it on the plugin. + if (opts.sourceMap === false || opts.sourcemap === false) { + plugin.disableSourceMap(); + } + }, + + + /** + * Function called by rollup when the final bundle is generated: it is used + * to prepend the banner file on the generated bundle. + * + * @param {string} code Bundle content. + * @return {void} + */ + transformBundle: function transformBundle(code) { + return plugin.prependBanner(code); + }, + + + /** + * Function called by rollup when the final bundle will be written on disk: it + * is used to generate a file containing a summary of all third-party dependencies + * with license information. + * + * @return {void} + */ + ongenerate: function ongenerate() { + plugin.exportThirdParties(); + } + }; +}; \ No newline at end of file diff --git a/dist/license-plugin.js b/dist/license-plugin.js new file mode 100644 index 00000000..e190f3ae --- /dev/null +++ b/dist/license-plugin.js @@ -0,0 +1,295 @@ +/** + * 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. + */ + +'use strict'; + +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var fs = require('fs'); +var path = require('path'); +var mkdirp = require('mkdirp'); +var _ = require('lodash'); +var moment = require('moment'); +var MagicString = require('magic-string'); +var Dependency = require('./dependency.js'); +var generateBlockComment = require('./generate-block-comment.js'); +var EOL = require('./eol.js'); + +/** + * Rollup Plugin. + */ + +var LicensePlugin = function () { + /** + * Initialize plugin. + * + * @param {Object} options Plugin options. + */ + function LicensePlugin() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, LicensePlugin); + + // Plugin name, used by rollup. + this.name = 'rollup-plugin-license'; + + this._options = options; + this._cwd = process.cwd(); + this._dependencies = {}; + this._pkg = require(path.join(this._cwd, 'package.json')); + this._debug = options.debug || false; + + // SourceMap can now be disable/enable on the plugin. + this._sourceMap = options.sourceMap !== false && options.sourcemap !== false; + + // This is a cache storing a directory path to associated package. + // This is an improvement to avoid looking for package information for + // already scanned directory. + this._cache = {}; + } + + /** + * Enable source map. + * + * @return {void} + */ + + + _createClass(LicensePlugin, [{ + key: 'disableSourceMap', + value: function disableSourceMap() { + this._sourceMap = false; + } + + /** + * Hook triggered by `rollup` to load code from given path file. + * + * This hook is used here to analyze a JavaScript file to extract + * associated `package.json` file and store the main information about + * it (license, author, etc.). + * + * This method is used to analyse all the files added to the final bundle + * to extract license informations. + * + * @param {string} id Module identifier. + * @return {void} + */ + + }, { + key: 'scanDependency', + value: function scanDependency(id) { + var _this = this; + + this.debug('scanning ' + id); + + // Look for the `package.json` file + var dir = path.parse(id).dir; + var pkg = null; + + var scannedDirs = []; + + while (dir && dir !== this._cwd) { + // Try the cache. + if (_.has(this._cache, dir)) { + pkg = this._cache[dir]; + if (pkg) { + this.debug('found package.json in cache (package: ' + pkg.name + ')'); + this.addDependency(pkg); + } + + break; + } + + scannedDirs.push(dir); + + var pkgPath = path.join(dir, 'package.json'); + var exists = fs.existsSync(pkgPath); + if (exists) { + this.debug('found package.json at: ' + pkgPath + ', read it'); + + // Read `package.json` file + pkg = require(pkgPath); + + // Add the new dependency to the set of third-party dependencies. + this.addDependency(pkg); + + // We can stop now. + break; + } + + // Go up in the directory tree. + dir = path.normalize(path.join(dir, '..')); + } + + // Update the cache + _.forEach(scannedDirs, function (scannedDir) { + _this._cache[scannedDir] = pkg; + }); + } + + /** + * Hook triggered by `rollup` to transform the final generated bundle. + * This hook is used here to prepend the license banner to the final bundle. + * + * @param {string} code The bundle content. + * @return {Object} The result containing the code and, optionnally, the source map + * if it has been enabled (using `enableSourceMap` method). + */ + + }, { + key: 'prependBanner', + value: function prependBanner(code) { + // Create a magicString: do not manipulate the string directly since it + // will be used to generate the sourcemap. + var magicString = new MagicString(code); + + var banner = this._options.banner; + + var content = void 0; + if (_.isString(banner)) { + this.debug('prepend banner from template'); + content = banner; + } else if (banner) { + var file = banner.file; + this.debug('prepend banner from file: ' + file); + + var filePath = path.resolve(file); + var exists = fs.existsSync(filePath); + if (exists) { + var encoding = banner.encoding || 'utf-8'; + this.debug('use encoding: ' + encoding); + content = fs.readFileSync(filePath, encoding); + } else { + this.debug('template file does not exist, skip.'); + } + } + + if (content) { + // Create the template function with lodash. + var tmpl = _.template(content); + + // Generate the banner. + var pkg = this._pkg; + var dependencies = _.values(this._dependencies); + var text = tmpl({ _: _, moment: moment, pkg: pkg, dependencies: dependencies }); + + // Make a block comment if needed + var trimmedBanner = text.trim(); + var start = trimmedBanner.slice(0, 3); + if (start !== '/**' && start !== '/*!') { + text = generateBlockComment(text); + } + + // Prepend the banner. + magicString.prepend('' + text + EOL); + } + + var result = { + code: magicString.toString() + }; + + if (this._sourceMap) { + result.map = magicString.generateMap({ + hires: true + }); + } + + return result; + } + + /** + * Add new dependency to the bundle descriptor. + * + * @param {Object} pkg Dependency package information. + * @return {void} + */ + + }, { + key: 'addDependency', + value: function addDependency(pkg) { + var name = pkg.name; + if (!_.has(this._dependencies, name)) { + this._dependencies[name] = new Dependency(pkg); + } + } + + /** + * Generate third-party dependencies summary. + * + * @param {boolean} includePrivate Flag that can be used to include / exclude private dependencies. + * @return {void} + */ + + }, { + key: 'exportThirdParties', + value: function exportThirdParties() { + var thirdParty = this._options.thirdParty; + if (!thirdParty) { + return; + } + + var output = thirdParty.output; + if (output) { + this.debug('exporting third-party summary to ' + output); + + // Create directory if it does not already exist. + mkdirp(path.parse(output).dir); + + var includePrivate = thirdParty.includePrivate; + var text = _.chain(this._dependencies).values().filter(function (dependency) { + return includePrivate || !dependency.private; + }).map(function (dependency) { + return dependency.text(); + }).join('' + EOL + EOL + '---' + EOL + EOL).trim().value(); + + var encoding = thirdParty.encoding || 'utf-8'; + this.debug('use encoding: ' + encoding); + + fs.writeFileSync(output, text || 'No third parties dependencies', { + encoding: encoding + }); + } + } + + /** + * Log debug message if debug mode is enabled. + * + * @param {string} msg Log message. + */ + + }, { + key: 'debug', + value: function debug(msg) { + if (this._debug) { + console.log('[' + this.name + '] -- ' + msg); + } + } + }]); + + return LicensePlugin; +}(); + +module.exports = LicensePlugin; \ No newline at end of file diff --git a/dist/person.js b/dist/person.js new file mode 100644 index 00000000..1403cbb9 --- /dev/null +++ b/dist/person.js @@ -0,0 +1,114 @@ +/** + * 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. + */ + +'use strict'; + +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var _ = require('lodash'); + +/** + * Person, defined by: + * - A name. + * - An email (optional). + * - An URL (optional). + */ + +var Person = function () { + /** + * Create the person. + * + * If parameter is a string, it will be automatically parsed according to + * this format: NAME (URL) (where email and url are optional). + * + * @param {string|object} person The person identity. + * @constructor + */ + function Person(person) { + _classCallCheck(this, Person); + + if (_.isString(person)) { + var o = {}; + + var current = 'name'; + + for (var i = 0, size = person.length; i < size; ++i) { + var character = person.charAt(i); + if (character === '<') { + current = 'email'; + } else if (character === '(') { + current = 'url'; + } else if (character !== ')' && character !== '>') { + o[current] = (o[current] || '') + character; + } + } + + _.forEach(['name', 'email', 'url'], function (prop) { + if (_.has(o, prop)) { + o[prop] = _.trim(o[prop]); + } + }); + + person = o; + } + + _.extend(this, person); + } + + /** + * Serialize the person to a string with the following format: + * NAME (URL) + * + * @param {string} prefix Optional prefix prepended to the output string. + * @param {string} suffix Optional suffix appended to the output string. + * @return {string} The person as a string. + */ + + + _createClass(Person, [{ + 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 text = '' + this.name; + + if (this.email) { + text += ' <' + this.email + '>'; + } + + if (this.url) { + text += ' (' + this.url + ')'; + } + + return '' + prefix + text + suffix; + } + }]); + + return Person; +}(); + +module.exports = Person; \ No newline at end of file diff --git a/package.json b/package.json index 17fc1f43..ea027395 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rollup-plugin-license", - "version": "0.4.0", + "version": "0.5.0", "description": "Rollup plugin to add license banner to the final bundle and output third party licenses", "main": "dist/index.js", "scripts": {