You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.9 KiB
111 lines
3.9 KiB
const { options } = require('colorette');
|
|
const WebpackCLI = require('./webpack-cli');
|
|
const { core } = require('./utils/cli-flags');
|
|
const versionRunner = require('./groups/runVersion');
|
|
const helpRunner = require('./groups/runHelp');
|
|
const logger = require('./utils/logger');
|
|
const { isCommandUsed } = require('./utils/arg-utils');
|
|
const cliExecuter = require('./utils/cli-executer');
|
|
const argParser = require('./utils/arg-parser');
|
|
require('./utils/process-log');
|
|
process.title = 'webpack-cli';
|
|
|
|
// Create a new instance of the CLI object
|
|
const cli = new WebpackCLI();
|
|
|
|
const parseArgs = (args) => argParser(core, args, true, process.title);
|
|
|
|
const runCLI = async (cliArgs) => {
|
|
let args;
|
|
|
|
const commandIsUsed = isCommandUsed(cliArgs);
|
|
const parsedArgs = parseArgs(cliArgs);
|
|
if (parsedArgs.unknownArgs.includes('help') || parsedArgs.opts.help) {
|
|
options.enabled = !cliArgs.includes('--no-color');
|
|
helpRunner(cliArgs);
|
|
process.exit(0);
|
|
}
|
|
|
|
if (parsedArgs.unknownArgs.includes('version') || parsedArgs.opts.version) {
|
|
options.enabled = !cliArgs.includes('--no-color');
|
|
versionRunner(cliArgs, commandIsUsed);
|
|
process.exit(0);
|
|
}
|
|
|
|
if (commandIsUsed) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
// handle the default webpack entry CLI argument, where instead
|
|
// of doing 'webpack-cli --entry ./index.js' you can simply do
|
|
// 'webpack-cli ./index.js'
|
|
// if the unknown arg starts with a '-', it will be considered
|
|
// an unknown flag rather than an entry
|
|
let entry;
|
|
if (parsedArgs.unknownArgs.length > 0 && !parsedArgs.unknownArgs[0].startsWith('-')) {
|
|
if (parsedArgs.unknownArgs.length === 1) {
|
|
entry = parsedArgs.unknownArgs[0];
|
|
} else {
|
|
entry = [];
|
|
parsedArgs.unknownArgs.forEach((unknown) => {
|
|
if (!unknown.startsWith('-')) {
|
|
entry.push(unknown);
|
|
}
|
|
});
|
|
}
|
|
} else if (parsedArgs.unknownArgs.length > 0) {
|
|
parsedArgs.unknownArgs.forEach((unknown) => {
|
|
logger.warn(`Unknown argument: ${unknown}`);
|
|
});
|
|
const args = await cliExecuter();
|
|
const { opts } = parseArgs(args);
|
|
await cli.run(opts, core);
|
|
return;
|
|
}
|
|
const parsedArgsOpts = parsedArgs.opts;
|
|
// Enable/Disable color on console
|
|
options.enabled = parsedArgsOpts.color ? true : false;
|
|
|
|
if (entry) {
|
|
parsedArgsOpts.entry = entry;
|
|
}
|
|
|
|
const result = await cli.run(parsedArgsOpts, core);
|
|
if (!result) {
|
|
return;
|
|
}
|
|
} catch (err) {
|
|
if (err.name === 'UNKNOWN_VALUE') {
|
|
logger.error(`Parse Error (unknown argument): ${err.value}`);
|
|
return;
|
|
} else if (err.name === 'ALREADY_SET') {
|
|
const argsMap = {};
|
|
const keysToDelete = [];
|
|
cliArgs.forEach((arg, idx) => {
|
|
const oldMapValue = argsMap[arg];
|
|
argsMap[arg] = {
|
|
value: cliArgs[idx],
|
|
pos: idx,
|
|
};
|
|
// Swap idx of overridden value
|
|
if (oldMapValue) {
|
|
argsMap[arg].pos = oldMapValue.pos;
|
|
keysToDelete.push(idx + 1);
|
|
}
|
|
});
|
|
// Filter out the value for the overridden key
|
|
const newArgKeys = Object.keys(argsMap).filter((arg) => !keysToDelete.includes(argsMap[arg].pos));
|
|
|
|
cliArgs = newArgKeys;
|
|
args = argParser('', core, cliArgs);
|
|
await cli.run(args.opts, core);
|
|
logger.warn('\nDuplicate flags found, defaulting to last set value');
|
|
} else {
|
|
logger.error(err);
|
|
return;
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = runCLI;
|
|
|