Files
moeka-project/packages/cap-vite/src/cli.ts
T
2026-08-26 19:49:58 +08:00

62 lines
1.7 KiB
TypeScript

const usage = 'cap-vite [vite args...] -- <ios|android> [cap run args...]'
const helpText = [
'Run a Vite dev server and forward a second argument group to `cap run`.',
'',
'Usage:',
` ${usage}`,
'',
'Examples:',
' cap-vite -- ios --target "iPhone 16 Pro"',
' cap-vite --host 0.0.0.0 --port 5173 -- android --target emulator-5554 --flavor release',
'',
'Notes:',
' Arguments before `--` are forwarded to Vite.',
' Arguments after `--` are forwarded to `cap run`.',
' After the dev server starts, press `R` to re-run `cap run`.',
].join('\n')
export interface ParsedCapViteCliArgs {
capArgs: string[]
viteArgs: string[]
}
export function getCapViteCliHelpText(): string {
return helpText
}
export function getCapViteCliUsage(): string {
return usage
}
// TODO: CLI and `cap run` argument handling are hand-rolled (see also `resolveCapRunArgs` /
// `hasCapacitorTargetArg` in native.ts). If parsing rules keep growing, adopt a dedicated argv
// library (cac is already a dependency—consider subcommands or a small wrapper) so flags like
// `--target` / `--target=`, env-based defaults, and validation stay in one maintainable layer.
export function parseCapViteCliArgs(argv: string[]): null | ParsedCapViteCliArgs {
if (argv.length === 1 && (argv[0] === '--help' || argv[0] === '-h')) {
return null
}
const separatorIndex = argv.indexOf('--')
if (separatorIndex === -1) {
throw new Error(usage)
}
const capArgs = argv.slice(separatorIndex + 1)
if (capArgs.length === 0) {
throw new Error(usage)
}
const platform = capArgs[0]
if (platform !== 'android' && platform !== 'ios') {
throw new Error(usage)
}
return {
capArgs,
viteArgs: argv.slice(0, separatorIndex),
}
}