454 lines
16 KiB
JavaScript
454 lines
16 KiB
JavaScript
/*
|
|
@license
|
|
Rollup.js v2.3.3
|
|
Sat, 04 Apr 2020 22:17:48 GMT - commit d18cb37d7c328a63c36761583ce456275f164462
|
|
|
|
|
|
https://github.com/rollup/rollup
|
|
|
|
Released under the MIT License.
|
|
*/
|
|
'use strict';
|
|
|
|
var rollup_js = require('./rollup.js');
|
|
var path = require('path');
|
|
|
|
let enabled =
|
|
!("NO_COLOR" in process.env) &&
|
|
process.env.FORCE_COLOR !== "0" &&
|
|
(process.platform === "win32" ||
|
|
(process.stdout != null &&
|
|
process.stdout.isTTY &&
|
|
process.env.TERM &&
|
|
process.env.TERM !== "dumb"));
|
|
|
|
const rawInit = (open, close, searchRegex, replaceValue) => s =>
|
|
enabled
|
|
? open +
|
|
(~(s += "").indexOf(close, 4) // skip opening \x1b[
|
|
? s.replace(searchRegex, replaceValue)
|
|
: s) +
|
|
close
|
|
: s;
|
|
|
|
const init = (open, close) => {
|
|
return rawInit(
|
|
`\x1b[${open}m`,
|
|
`\x1b[${close}m`,
|
|
new RegExp(`\\x1b\\[${close}m`, "g"),
|
|
`\x1b[${open}m`
|
|
)
|
|
};
|
|
|
|
var colorette = {
|
|
options: Object.defineProperty({}, "enabled", {
|
|
get: () => enabled,
|
|
set: value => (enabled = value)
|
|
}),
|
|
reset: init(0, 0),
|
|
bold: rawInit("\x1b[1m", "\x1b[22m", /\x1b\[22m/g, "\x1b[22m\x1b[1m"),
|
|
dim: rawInit("\x1b[2m", "\x1b[22m", /\x1b\[22m/g, "\x1b[22m\x1b[2m"),
|
|
italic: init(3, 23),
|
|
underline: init(4, 24),
|
|
inverse: init(7, 27),
|
|
hidden: init(8, 28),
|
|
strikethrough: init(9, 29),
|
|
black: init(30, 39),
|
|
red: init(31, 39),
|
|
green: init(32, 39),
|
|
yellow: init(33, 39),
|
|
blue: init(34, 39),
|
|
magenta: init(35, 39),
|
|
cyan: init(36, 39),
|
|
white: init(37, 39),
|
|
gray: init(90, 39),
|
|
bgBlack: init(40, 49),
|
|
bgRed: init(41, 49),
|
|
bgGreen: init(42, 49),
|
|
bgYellow: init(43, 49),
|
|
bgBlue: init(44, 49),
|
|
bgMagenta: init(45, 49),
|
|
bgCyan: init(46, 49),
|
|
bgWhite: init(47, 49),
|
|
blackBright: init(90, 39),
|
|
redBright: init(91, 39),
|
|
greenBright: init(92, 39),
|
|
yellowBright: init(93, 39),
|
|
blueBright: init(94, 39),
|
|
magentaBright: init(95, 39),
|
|
cyanBright: init(96, 39),
|
|
whiteBright: init(97, 39),
|
|
bgBlackBright: init(100, 49),
|
|
bgRedBright: init(101, 49),
|
|
bgGreenBright: init(102, 49),
|
|
bgYellowBright: init(103, 49),
|
|
bgBlueBright: init(104, 49),
|
|
bgMagentaBright: init(105, 49),
|
|
bgCyanBright: init(106, 49),
|
|
bgWhiteBright: init(107, 49)
|
|
};
|
|
|
|
// @see https://no-color.org
|
|
// @see https://www.npmjs.com/package/chalk
|
|
if (process.env.FORCE_COLOR === '0' || process.env.NO_COLOR) {
|
|
colorette.options.enabled = false;
|
|
}
|
|
// log to stderr to keep `rollup main.js > bundle.js` from breaking
|
|
const stderr = console.error.bind(console);
|
|
function handleError(err, recover = false) {
|
|
let description = err.message || err;
|
|
if (err.name)
|
|
description = `${err.name}: ${description}`;
|
|
const message = (err.plugin
|
|
? `(plugin ${(err).plugin}) ${description}`
|
|
: description) || err;
|
|
stderr(colorette.bold(colorette.red(`[!] ${colorette.bold(message.toString())}`)));
|
|
if (err.url) {
|
|
stderr(colorette.cyan(err.url));
|
|
}
|
|
if (err.loc) {
|
|
stderr(`${rollup_js.relativeId((err.loc.file || err.id))} (${err.loc.line}:${err.loc.column})`);
|
|
}
|
|
else if (err.id) {
|
|
stderr(rollup_js.relativeId(err.id));
|
|
}
|
|
if (err.frame) {
|
|
stderr(colorette.dim(err.frame));
|
|
}
|
|
if (err.stack) {
|
|
stderr(colorette.dim(err.stack));
|
|
}
|
|
stderr('');
|
|
if (!recover)
|
|
process.exit(1);
|
|
}
|
|
|
|
function batchWarnings() {
|
|
let deferredWarnings = new Map();
|
|
let count = 0;
|
|
return {
|
|
get count() {
|
|
return count;
|
|
},
|
|
add: (warning) => {
|
|
count += 1;
|
|
if (warning.code in deferredHandlers) {
|
|
if (!deferredWarnings.has(warning.code))
|
|
deferredWarnings.set(warning.code, []);
|
|
deferredWarnings.get(warning.code).push(warning);
|
|
}
|
|
else if (warning.code in immediateHandlers) {
|
|
immediateHandlers[warning.code](warning);
|
|
}
|
|
else {
|
|
title(warning.message);
|
|
if (warning.url)
|
|
info(warning.url);
|
|
const id = (warning.loc && warning.loc.file) || warning.id;
|
|
if (id) {
|
|
const loc = warning.loc
|
|
? `${rollup_js.relativeId(id)}: (${warning.loc.line}:${warning.loc.column})`
|
|
: rollup_js.relativeId(id);
|
|
stderr(colorette.bold(rollup_js.relativeId(loc)));
|
|
}
|
|
if (warning.frame)
|
|
info(warning.frame);
|
|
}
|
|
},
|
|
flush: () => {
|
|
if (count === 0)
|
|
return;
|
|
const codes = Array.from(deferredWarnings.keys()).sort((a, b) => deferredWarnings.get(b).length - deferredWarnings.get(a).length);
|
|
for (const code of codes) {
|
|
deferredHandlers[code](deferredWarnings.get(code));
|
|
}
|
|
deferredWarnings = new Map();
|
|
count = 0;
|
|
}
|
|
};
|
|
}
|
|
const immediateHandlers = {
|
|
UNKNOWN_OPTION: warning => {
|
|
title(`You have passed an unrecognized option`);
|
|
stderr(warning.message);
|
|
},
|
|
MISSING_NODE_BUILTINS: warning => {
|
|
title(`Missing shims for Node.js built-ins`);
|
|
const detail = warning.modules.length === 1
|
|
? `'${warning.modules[0]}'`
|
|
: `${warning
|
|
.modules.slice(0, -1)
|
|
.map((name) => `'${name}'`)
|
|
.join(', ')} and '${warning.modules.slice(-1)}'`;
|
|
stderr(`Creating a browser bundle that depends on ${detail}. You might need to include https://www.npmjs.com/package/rollup-plugin-node-builtins`);
|
|
}
|
|
};
|
|
const deferredHandlers = {
|
|
CIRCULAR_DEPENDENCY(warnings) {
|
|
title(`Circular dependenc${warnings.length > 1 ? 'ies' : 'y'}`);
|
|
const displayed = warnings.length > 5 ? warnings.slice(0, 3) : warnings;
|
|
for (const warning of displayed) {
|
|
stderr(warning.cycle.join(' -> '));
|
|
}
|
|
if (warnings.length > displayed.length) {
|
|
stderr(`...and ${warnings.length - displayed.length} more`);
|
|
}
|
|
},
|
|
EMPTY_BUNDLE(warnings) {
|
|
title(`Generated${warnings.length === 1 ? ' an' : ''} empty ${warnings.length > 1 ? 'chunks' : 'chunk'}`);
|
|
stderr(warnings.map(warning => warning.chunkName).join(', '));
|
|
},
|
|
EVAL(warnings) {
|
|
title('Use of eval is strongly discouraged');
|
|
info('https://rollupjs.org/guide/en/#avoiding-eval');
|
|
showTruncatedWarnings(warnings);
|
|
},
|
|
MISSING_EXPORT(warnings) {
|
|
title('Missing exports');
|
|
info('https://rollupjs.org/guide/en/#error-name-is-not-exported-by-module');
|
|
for (const warning of warnings) {
|
|
stderr(colorette.bold(warning.importer));
|
|
stderr(`${warning.missing} is not exported by ${warning.exporter}`);
|
|
stderr(colorette.gray(warning.frame));
|
|
}
|
|
},
|
|
MISSING_GLOBAL_NAME(warnings) {
|
|
title(`Missing global variable ${warnings.length > 1 ? 'names' : 'name'}`);
|
|
stderr(`Use output.globals to specify browser global variable names corresponding to external modules`);
|
|
for (const warning of warnings) {
|
|
stderr(`${colorette.bold(warning.source)} (guessing '${warning.guess}')`);
|
|
}
|
|
},
|
|
MIXED_EXPORTS: (warnings) => {
|
|
title('Mixing named and default exports');
|
|
info(`https://rollupjs.org/guide/en/#output-exports`);
|
|
stderr(colorette.bold('The following entry modules are using named and default exports together:'));
|
|
const displayedWarnings = warnings.length > 5 ? warnings.slice(0, 3) : warnings;
|
|
for (const warning of displayedWarnings) {
|
|
stderr(rollup_js.relativeId(warning.id));
|
|
}
|
|
if (displayedWarnings.length < warnings.length) {
|
|
stderr(`...and ${warnings.length - displayedWarnings.length} other entry modules`);
|
|
}
|
|
stderr(`\nConsumers of your bundle will have to use chunk['default'] to access their default export, which may not be what you want. Use \`output.exports: 'named'\` to disable this warning`);
|
|
},
|
|
NAMESPACE_CONFLICT(warnings) {
|
|
title(`Conflicting re-exports`);
|
|
for (const warning of warnings) {
|
|
stderr(`${colorette.bold(rollup_js.relativeId(warning.reexporter))} re-exports '${warning.name}' from both ${rollup_js.relativeId(warning.sources[0])} and ${rollup_js.relativeId(warning.sources[1])} (will be ignored)`);
|
|
}
|
|
},
|
|
NON_EXISTENT_EXPORT(warnings) {
|
|
title(`Import of non-existent ${warnings.length > 1 ? 'exports' : 'export'}`);
|
|
showTruncatedWarnings(warnings);
|
|
},
|
|
PLUGIN_WARNING(warnings) {
|
|
const nestedByPlugin = nest(warnings, 'plugin');
|
|
for (const { key: plugin, items } of nestedByPlugin) {
|
|
const nestedByMessage = nest(items, 'message');
|
|
let lastUrl = '';
|
|
for (const { key: message, items } of nestedByMessage) {
|
|
title(`Plugin ${plugin}: ${message}`);
|
|
for (const warning of items) {
|
|
if (warning.url && warning.url !== lastUrl)
|
|
info((lastUrl = warning.url));
|
|
if (warning.id) {
|
|
let loc = rollup_js.relativeId(warning.id);
|
|
if (warning.loc) {
|
|
loc += `: (${warning.loc.line}:${warning.loc.column})`;
|
|
}
|
|
stderr(colorette.bold(loc));
|
|
}
|
|
if (warning.frame)
|
|
info(warning.frame);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
SOURCEMAP_BROKEN(warnings) {
|
|
title(`Broken sourcemap`);
|
|
info('https://rollupjs.org/guide/en/#warning-sourcemap-is-likely-to-be-incorrect');
|
|
const plugins = Array.from(new Set(warnings.map(w => w.plugin).filter(Boolean)));
|
|
const detail = plugins.length > 1
|
|
? ` (such as ${plugins
|
|
.slice(0, -1)
|
|
.map(p => `'${p}'`)
|
|
.join(', ')} and '${plugins.slice(-1)}')`
|
|
: ` (such as '${plugins[0]}')`;
|
|
stderr(`Plugins that transform code${detail} should generate accompanying sourcemaps`);
|
|
},
|
|
THIS_IS_UNDEFINED(warnings) {
|
|
title('`this` has been rewritten to `undefined`');
|
|
info('https://rollupjs.org/guide/en/#error-this-is-undefined');
|
|
showTruncatedWarnings(warnings);
|
|
},
|
|
UNRESOLVED_IMPORT(warnings) {
|
|
title('Unresolved dependencies');
|
|
info('https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency');
|
|
const dependencies = new Map();
|
|
for (const warning of warnings) {
|
|
if (!dependencies.has(warning.source))
|
|
dependencies.set(warning.source, []);
|
|
dependencies.get(warning.source).push(warning.importer);
|
|
}
|
|
for (const dependency of dependencies.keys()) {
|
|
const importers = dependencies.get(dependency);
|
|
stderr(`${colorette.bold(dependency)} (imported by ${importers.join(', ')})`);
|
|
}
|
|
},
|
|
UNUSED_EXTERNAL_IMPORT(warnings) {
|
|
title('Unused external imports');
|
|
for (const warning of warnings) {
|
|
stderr(`${warning.names} imported from external module '${warning.source}' but never used`);
|
|
}
|
|
}
|
|
};
|
|
function title(str) {
|
|
stderr(colorette.bold(colorette.yellow(`(!) ${str}`)));
|
|
}
|
|
function info(url) {
|
|
stderr(colorette.gray(url));
|
|
}
|
|
function nest(array, prop) {
|
|
const nested = [];
|
|
const lookup = new Map();
|
|
for (const item of array) {
|
|
const key = item[prop];
|
|
if (!lookup.has(key)) {
|
|
lookup.set(key, {
|
|
items: [],
|
|
key
|
|
});
|
|
nested.push(lookup.get(key));
|
|
}
|
|
lookup.get(key).items.push(item);
|
|
}
|
|
return nested;
|
|
}
|
|
function showTruncatedWarnings(warnings) {
|
|
const nestedByModule = nest(warnings, 'id');
|
|
const displayedByModule = nestedByModule.length > 5 ? nestedByModule.slice(0, 3) : nestedByModule;
|
|
for (const { key: id, items } of displayedByModule) {
|
|
stderr(colorette.bold(rollup_js.relativeId(id)));
|
|
stderr(colorette.gray(items[0].frame));
|
|
if (items.length > 1) {
|
|
stderr(`...and ${items.length - 1} other ${items.length > 2 ? 'occurrences' : 'occurrence'}`);
|
|
}
|
|
}
|
|
if (nestedByModule.length > displayedByModule.length) {
|
|
stderr(`\n...and ${nestedByModule.length - displayedByModule.length} other files`);
|
|
}
|
|
}
|
|
|
|
const stdinName = '-';
|
|
let stdinResult = null;
|
|
function stdinPlugin() {
|
|
return {
|
|
name: 'stdin',
|
|
resolveId(id) {
|
|
if (id === stdinName) {
|
|
return id;
|
|
}
|
|
},
|
|
load(id) {
|
|
if (id === stdinName) {
|
|
return stdinResult || (stdinResult = readStdin());
|
|
}
|
|
}
|
|
};
|
|
}
|
|
function readStdin() {
|
|
return new Promise((resolve, reject) => {
|
|
const chunks = [];
|
|
process.stdin.setEncoding('utf8');
|
|
process.stdin
|
|
.on('data', chunk => chunks.push(chunk))
|
|
.on('end', () => {
|
|
const result = chunks.join('');
|
|
resolve(result);
|
|
})
|
|
.on('error', err => {
|
|
reject(err);
|
|
});
|
|
});
|
|
}
|
|
|
|
function addCommandPluginsToInputOptions(inputOptions, command) {
|
|
if (command.stdin !== false) {
|
|
inputOptions.plugins.push(stdinPlugin());
|
|
}
|
|
const commandPlugin = command.plugin;
|
|
if (commandPlugin) {
|
|
const plugins = Array.isArray(commandPlugin) ? commandPlugin : [commandPlugin];
|
|
for (const plugin of plugins) {
|
|
if (/[={}]/.test(plugin)) {
|
|
// -p plugin=value
|
|
// -p "{transform(c,i){...}}"
|
|
loadAndRegisterPlugin(inputOptions, plugin);
|
|
}
|
|
else {
|
|
// split out plugins joined by commas
|
|
// -p node-resolve,commonjs,buble
|
|
plugin.split(',').forEach((plugin) => loadAndRegisterPlugin(inputOptions, plugin));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function loadAndRegisterPlugin(inputOptions, pluginText) {
|
|
let plugin = null;
|
|
let pluginArg = undefined;
|
|
if (pluginText[0] === '{') {
|
|
// -p "{transform(c,i){...}}"
|
|
plugin = new Function('return ' + pluginText);
|
|
}
|
|
else {
|
|
const match = pluginText.match(/^([@.\/\\\w|^{}|-]+)(=(.*))?$/);
|
|
if (match) {
|
|
// -p plugin
|
|
// -p plugin=arg
|
|
pluginText = match[1];
|
|
pluginArg = new Function('return ' + match[3])();
|
|
}
|
|
else {
|
|
throw new Error(`Invalid --plugin argument format: ${JSON.stringify(pluginText)}`);
|
|
}
|
|
if (!/^\.|^rollup-plugin-|[@\/\\]/.test(pluginText)) {
|
|
// Try using plugin prefix variations first if applicable.
|
|
// Prefix order is significant - left has higher precedence.
|
|
for (const prefix of ['@rollup/plugin-', 'rollup-plugin-']) {
|
|
try {
|
|
plugin = require(prefix + pluginText);
|
|
break;
|
|
}
|
|
catch (ex) {
|
|
// if this does not work, we try requiring the actual name below
|
|
}
|
|
}
|
|
}
|
|
if (!plugin) {
|
|
try {
|
|
if (pluginText[0] == '.')
|
|
pluginText = path.resolve(pluginText);
|
|
plugin = require(pluginText);
|
|
}
|
|
catch (ex) {
|
|
throw new Error(`Cannot load plugin "${pluginText}"`);
|
|
}
|
|
}
|
|
}
|
|
if (typeof plugin === 'object' && pluginText in plugin) {
|
|
// some plugins do not use `export default` for their entry point.
|
|
// attempt to use the plugin name as the named import name.
|
|
plugin = plugin[pluginText];
|
|
}
|
|
inputOptions.plugins.push(typeof plugin === 'function' ? plugin.call(plugin, pluginArg) : plugin);
|
|
}
|
|
|
|
exports.addCommandPluginsToInputOptions = addCommandPluginsToInputOptions;
|
|
exports.batchWarnings = batchWarnings;
|
|
exports.color = colorette;
|
|
exports.handleError = handleError;
|
|
exports.stderr = stderr;
|
|
exports.stdinName = stdinName;
|
|
//# sourceMappingURL=commandPlugins.js.map
|