From d6412be6bc9cf9fb816b1d778ffb21168b98346e Mon Sep 17 00:00:00 2001 From: Erika Rowland <130414394+erikareads@users.noreply.github.com> Date: Tue, 30 Apr 2024 14:23:41 -0700 Subject: [PATCH] Migrate build argument parsing (#11492) Migrate `vc build` to use updated argument parsing helpers. Adds `try/catch` and `handleError` logic that was previously missing. --- .changeset/strange-zoos-sit.md | 2 ++ packages/cli/src/commands/build/command.ts | 2 +- packages/cli/src/commands/build/index.ts | 31 +++++++++++++--------- 3 files changed, 21 insertions(+), 14 deletions(-) create mode 100644 .changeset/strange-zoos-sit.md diff --git a/.changeset/strange-zoos-sit.md b/.changeset/strange-zoos-sit.md new file mode 100644 index 00000000000..a845151cc84 --- /dev/null +++ b/.changeset/strange-zoos-sit.md @@ -0,0 +1,2 @@ +--- +--- diff --git a/packages/cli/src/commands/build/command.ts b/packages/cli/src/commands/build/command.ts index c32d99ba0fa..c559ba3c84b 100644 --- a/packages/cli/src/commands/build/command.ts +++ b/packages/cli/src/commands/build/command.ts @@ -10,7 +10,7 @@ export const buildCommand: Command = { name: 'prod', description: 'Build a production deployment', shorthand: null, - type: String, + type: Boolean, deprecated: false, }, { diff --git a/packages/cli/src/commands/build/index.ts b/packages/cli/src/commands/build/index.ts index 4fbb37bc5e1..78f86e1535c 100644 --- a/packages/cli/src/commands/build/index.ts +++ b/packages/cli/src/commands/build/index.ts @@ -43,7 +43,7 @@ import type { VercelConfig } from '@vercel/client'; import pull from '../pull'; import { staticFiles as getFiles } from '../../util/get-files'; import Client from '../../util/client'; -import getArgs from '../../util/get-args'; +import { parseArguments } from '../../util/get-args'; import cmd from '../../util/output/cmd'; import * as cli from '../../util/pkg-name'; import cliPkg from '../../util/pkg'; @@ -66,12 +66,13 @@ import { import { importBuilders } from '../../util/build/import-builders'; import { initCorepack, cleanupCorepack } from '../../util/build/corepack'; import { sortBuilders } from '../../util/build/sort-builders'; -import { toEnumerableError } from '../../util/error'; +import { handleError, toEnumerableError } from '../../util/error'; import { validateConfig } from '../../util/validate-config'; import { setMonorepoDefaultSettings } from '../../util/build/monorepo'; import { help } from '../help'; import { buildCommand } from './command'; import { scrubArgv } from '../../util/build/scrub-argv'; +import { getFlagsSpecification } from '../../util/get-flags-specification'; type BuildResult = BuildResultV2 | BuildResultV3; @@ -133,22 +134,26 @@ export default async function main(client: Client): Promise { process.env.__VERCEL_BUILD_RUNNING = '1'; } + let parsedArgs = null; + + const flagsSpecification = getFlagsSpecification(buildCommand.options); + // Parse CLI args - const argv = getArgs(client.argv.slice(2), { - '--output': String, - '--prod': Boolean, - '--yes': Boolean, - '-y': '--yes', - }); + try { + parsedArgs = parseArguments(client.argv.slice(2), flagsSpecification); + } catch (error) { + handleError(error); + return 1; + } - if (argv['--help']) { + if (parsedArgs.flags['--help']) { output.print(help(buildCommand, { columns: client.stderr.columns })); return 2; } // Build `target` influences which environment variables will be used - const target = argv['--prod'] ? 'production' : 'preview'; - const yes = Boolean(argv['--yes']); + const target = parsedArgs.flags['--prod'] ? 'production' : 'preview'; + const yes = Boolean(parsedArgs.flags['--yes']); try { await validateNpmrc(cwd); @@ -213,8 +218,8 @@ export default async function main(client: Client): Promise { // Delete output directory from potential previous build const defaultOutputDir = join(cwd, projectRootDirectory, OUTPUT_DIR); - const outputDir = argv['--output'] - ? resolve(argv['--output']) + const outputDir = parsedArgs.flags['--output'] + ? resolve(parsedArgs.flags['--output']) : defaultOutputDir; await Promise.all([ fs.remove(outputDir),