From 9ef451be2e62fa6dbc42d70ef18a9f1df2850979 Mon Sep 17 00:00:00 2001 From: Aaron Date: Sun, 25 Jun 2023 12:23:04 -0500 Subject: [PATCH] feat: Support more CLI flags for `build` and `dev` (#9) --- demo/package.json | 7 ++++++- src/cli/commands/build.ts | 30 ++++++++++++++++++++------- src/cli/commands/dev.ts | 38 ++++++++++++++++++++++------------ src/cli/commands/init.ts | 2 +- src/cli/commands/prepare.ts | 26 +++++++++++++++-------- src/cli/index.ts | 16 +++++++------- src/cli/utils/defineCommand.ts | 6 +++--- 7 files changed, 81 insertions(+), 44 deletions(-) diff --git a/demo/package.json b/demo/package.json index 795934b0..34156e2c 100644 --- a/demo/package.json +++ b/demo/package.json @@ -1,11 +1,16 @@ { - "name": "Demo Extension", + "name": "Demo", "version": "1.0.0", "description": "Demo extension for WXT", "type": "module", "scripts": { "dev": "pnpm -w build && wxt", "build": "pnpm -w build && wxt build", + "build:all": "pnpm -w build && run-s -s build:all:*", + "build:all:chrome-mv3": "wxt build", + "build:all:chrome-mv2": "wxt build --mv2", + "build:all:firefox-mv3": "wxt build -b firefox --mv3", + "build:all:firefox-mv2": "wxt build -b firefox", "prepare": "pnpm -w build && wxt prepare" }, "dependencies": { diff --git a/src/cli/commands/build.ts b/src/cli/commands/build.ts index 5aea9503..fd246d39 100644 --- a/src/cli/commands/build.ts +++ b/src/cli/commands/build.ts @@ -1,12 +1,26 @@ import * as wxt from '../..'; -import { getInternalConfig } from '../../utils/getInternalConfig'; import { defineCommand } from '../utils/defineCommand'; -export const build = defineCommand( - async (root: any, { mode, config: configFile }: any) => { - const cliConfig: wxt.InlineConfig = { root, mode, configFile }; - const config = await getInternalConfig(cliConfig, mode); +export const build = defineCommand< + [ + root: string | undefined, + flags: { + mode?: string; + config?: string; + browser?: wxt.TargetBrowser; + mv3?: boolean; + mv2?: boolean; + }, + ] +>(async (root, flags) => { + const mode = flags.mode ?? 'production'; + const cliConfig: wxt.InlineConfig = { + root, + mode, + browser: flags.browser, + manifestVersion: flags.mv3 ? 3 : flags.mv2 ? 2 : undefined, + configFile: flags.config, + }; - await wxt.build(config); - }, -); + await wxt.build(cliConfig); +}); diff --git a/src/cli/commands/dev.ts b/src/cli/commands/dev.ts index a6003fd7..0d23b2db 100644 --- a/src/cli/commands/dev.ts +++ b/src/cli/commands/dev.ts @@ -1,17 +1,29 @@ import * as wxt from '../..'; import { defineCommand } from '../utils/defineCommand'; -export const dev = defineCommand( - async (root: any, { mode, config: configFile }: any) => { - const cliConfig: wxt.InlineConfig = { - mode, - root, - configFile, - }; - const server = await wxt.createServer(cliConfig); +export const dev = defineCommand< + [ + root: string | undefined, + flags: { + mode?: string; + config?: string; + browser?: wxt.TargetBrowser; + mv3?: boolean; + mv2?: boolean; + }, + ] +>(async (root, flags) => { + const mode = flags.mode ?? 'development'; + const cliConfig: wxt.InlineConfig = { + root, + mode, + browser: flags.browser, + manifestVersion: flags.mv3 ? 3 : flags.mv2 ? 2 : undefined, + configFile: flags.config, + }; - await server.listen(server.port); - server.logger.success(`Started dev server @ ${server.origin}`); - return true; - }, -); + const server = await wxt.createServer(cliConfig); + await server.listen(server.port); + server.logger.success(`Started dev server @ ${server.origin}`); + return true; +}); diff --git a/src/cli/commands/init.ts b/src/cli/commands/init.ts index 45253a39..6ac0dd8c 100644 --- a/src/cli/commands/init.ts +++ b/src/cli/commands/init.ts @@ -1,6 +1,6 @@ import { consola } from 'consola'; import { defineCommand } from '../utils/defineCommand'; -export const init = defineCommand(async (directory: any) => { +export const init = defineCommand<[directory?: string]>(async (directory) => { consola.warn('wxt init: Not implemented'); }); diff --git a/src/cli/commands/prepare.ts b/src/cli/commands/prepare.ts index 1c341fd2..93fe3016 100644 --- a/src/cli/commands/prepare.ts +++ b/src/cli/commands/prepare.ts @@ -4,14 +4,22 @@ import { generateTypesDir } from '../../utils/generateTypesDir'; import { defineCommand } from '../utils/defineCommand'; import * as wxt from '../..'; -export const prepare = defineCommand( - async (root: any, { mode, config: configFile }: any) => { - const cliConfig: wxt.InlineConfig = { root, mode, configFile }; - const config = await getInternalConfig(cliConfig, 'build'); +export const prepare = defineCommand< + [ + root: string | undefined, + flags: { + config?: string; + }, + ] +>(async (root, flags) => { + const cliConfig: wxt.InlineConfig = { + root, + configFile: flags.config, + }; + const config = await getInternalConfig(cliConfig, 'build'); - config.logger.info('Generating types...'); + config.logger.info('Generating types...'); - const entrypoints = await findEntrypoints(config); - await generateTypesDir(entrypoints, config); - }, -); + const entrypoints = await findEntrypoints(config); + await generateTypesDir(entrypoints, config); +}); diff --git a/src/cli/index.ts b/src/cli/index.ts index d4feaac8..97656e3f 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -12,12 +12,10 @@ cli.version(version); cli .command('[root]', 'start dev server') .option('-c, --config ', 'use specified config file') - .option('-b, --browser ', 'specify a browser', { - type: ['chrome', 'firefox'], - }) - .option('-m, --mode ', 'set env mode', { - default: 'development', - }) + .option('-m, --mode ', 'set env mode') + .option('-b, --browser ', 'specify a browser') + .option('--mv3', 'target manifest v3') + .option('--mv2', 'target manifest v2') .action(commands.dev); // BUILD @@ -25,15 +23,15 @@ 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') .action(commands.build); // PREPARE cli .command('prepare [root]', 'prepare') .option('-c, --config ', 'use specified config file') - .option('-m, --mode ', 'set env mode', { - default: 'production', - }) .action(commands.prepare); // PUBLISH diff --git a/src/cli/utils/defineCommand.ts b/src/cli/utils/defineCommand.ts index 64442352..a6dddf01 100644 --- a/src/cli/utils/defineCommand.ts +++ b/src/cli/utils/defineCommand.ts @@ -2,10 +2,10 @@ import { consola } from 'consola'; import { printHeader } from './printHeader'; import { formatDuration } from '../../utils/formatDuration'; -export function defineCommand( - cb: (...args: any[]) => void | boolean | Promise, +export function defineCommand( + cb: (...args: TArgs) => void | boolean | Promise, ) { - return async (...args: any[]) => { + return async (...args: TArgs) => { const startTime = Date.now(); try { printHeader();