import cac from 'cac'; import { version } from '~/version'; import { build, clean, createServer, initialize, prepare, zip } from '~/core'; import consola, { LogLevels } from 'consola'; import { printHeader } from '~/core/utils/log'; import { formatDuration } from '~/core/utils/time'; const cli = cac('wxt'); cli.help(); cli.version(version); cli.option('--debug', 'enable debug mode'); // DEV cli .command('[root]', 'start dev server') .option('-c, --config ', 'use specified config file') .option('-m, --mode ', 'set env mode') .option('-b, --browser ', 'specify a browser') .option('--mv3', 'target manifest v3') .option('--mv2', 'target manifest v2') .action( wrapAction(async (root, flags) => { const server = await createServer({ root, mode: flags.mode, browser: flags.browser, manifestVersion: flags.mv3 ? 3 : flags.mv2 ? 2 : undefined, configFile: flags.config, debug: flags.debug, }); await server.start(); return { isOngoing: true }; }), ); // BUILD cli .command('build [root]', 'build for production') .option('-c, --config ', 'use specified config file') .option('-m, --mode ', 'set env mode') .option('-b, --browser ', 'specify a browser') .option('--mv3', 'target manifest v3') .option('--mv2', 'target manifest v2') .option('--analyze', 'visualize extension bundle') .action( wrapAction(async (root, flags) => { await build({ root, mode: flags.mode, browser: flags.browser, manifestVersion: flags.mv3 ? 3 : flags.mv2 ? 2 : undefined, configFile: flags.config, debug: flags.debug, analysis: { enabled: flags.analyze, }, }); }), ); // ZIP cli .command('zip [root]', 'build for production and zip output') .option('-c, --config ', 'use specified config file') .option('-m, --mode ', 'set env mode') .option('-b, --browser ', 'specify a browser') .option('--mv3', 'target manifest v3') .option('--mv2', 'target manifest v2') .action( wrapAction(async (root, flags) => { await zip({ root, mode: flags.mode, browser: flags.browser, manifestVersion: flags.mv3 ? 3 : flags.mv2 ? 2 : undefined, configFile: flags.config, debug: flags.debug, }); }), ); // PREPARE cli .command('prepare [root]', 'prepare typescript project') .option('-c, --config ', 'use specified config file') .action( wrapAction(async (root, flags) => { await prepare({ root, configFile: flags.config, debug: flags.debug, }); }), ); // CLEAN cli .command('clean [root]', 'clean generated files and caches') .alias('cleanup') .action( wrapAction(async (root, flags) => { await clean(root); }), ); // INIT cli .command('init [directory]', 'initialize a new project') .option('-t, --template