diff --git a/.changeset/legal-ants-stare.md b/.changeset/legal-ants-stare.md new file mode 100644 index 0000000000..0ac64423f0 --- /dev/null +++ b/.changeset/legal-ants-stare.md @@ -0,0 +1,6 @@ +--- +'@lg-tools/build': patch +'@lg-tools/cli': patch +--- + +Refactored lg and lg-build scripts to share build command registration logic, ensuring consistent options and argument handling which fixes an issue where lg-build tsc was not processing args (e.g. --verbose) correctly. Also removed the unused --direct option from the build commands/scripts. diff --git a/packages/icon/scripts/build/build.ts b/packages/icon/scripts/build/build.ts index 82d5d96c2a..ebf752b9c9 100644 --- a/packages/icon/scripts/build/build.ts +++ b/packages/icon/scripts/build/build.ts @@ -28,7 +28,7 @@ function chunkArray(arr: Array, size: number): Array> { * Runs the Rollup build command for index and story files. */ async function buildIndex({ verbose }: { verbose?: boolean }): Promise { - await buildPackage({ direct: true, verbose }); + await buildPackage({ verbose }); } /** diff --git a/tools/build/src/cli-commands.ts b/tools/build/src/cli-commands.ts new file mode 100644 index 0000000000..1beb6ea259 --- /dev/null +++ b/tools/build/src/cli-commands.ts @@ -0,0 +1,38 @@ +import { Command } from 'commander'; + +import { buildPackage } from './rollup/build-package'; +import { buildTSDoc } from './tsdoc/build-tsdoc'; +import { buildTypescript } from './typescript/build-ts'; + +export function registerBundleCommand(command: Command) { + command + .description('Builds a package using Rollup') + .option('-v, --verbose', 'Enable verbose logging', false) + .action(buildPackage); +} + +export function registerBuildTSCommand(command: Command) { + command + .description("Builds a package's TypeScript definitions") + .argument('[pass-through...]', 'Pass-through options for `tsc`') + .option('-v, --verbose', 'Enable verbose logging', false) + .option( + '-d, --downlevel', + 'Downlevel TypeScript packages based on the typesVersions field in package.json', + false, + ) + .option( + '-u, --update', + 'Update package.json typesVersions and exports fields', + false, + ) + .allowUnknownOption(true) + .action(buildTypescript); +} + +export function registerBuildDocsCommand(command: Command) { + command + .description('Build TSDoc documentation') + .option('-v, --verbose', 'Enable verbose logging', false) + .action(buildTSDoc); +} diff --git a/tools/build/src/cli.ts b/tools/build/src/cli.ts index 552cd83481..1aecd7ebbb 100644 --- a/tools/build/src/cli.ts +++ b/tools/build/src/cli.ts @@ -1,43 +1,16 @@ import { Command } from 'commander'; -import { buildPackage } from './rollup/build-package'; -import { buildTSDoc } from './tsdoc/build-tsdoc'; -import { buildTypescript } from './typescript/build-ts'; +import { + registerBuildDocsCommand, + registerBuildTSCommand, + registerBundleCommand, +} from './cli-commands'; const build = new Command('lg-build'); build.description('Build LeafyGreen packages'); -build - .command('bundle') - .description('Bundle packages with Rollup') - .option('-v, --verbose', 'Enable verbose logging', false) - .option( - '-d, --direct', - 'Build package using the lg-build rollup command directly from @lg-tools/build', - true, - ) - .action(buildPackage); - -build - .command('tsc') - .description('Build TypeScript packages') - .option('-v, --verbose', 'Enable verbose logging', false) - .option( - '-d, --downlevel', - 'Downlevel TypeScript packages based on the typesVersions field in package.json', - false, - ) - .option( - '-u, --update', - 'Update package.json typesVersions and exports fields', - false, - ) - .action(buildTypescript); - -build - .command('docs') - .description('Build TSDoc documentation') - .option('-v, --verbose', 'Enable verbose logging', false) - .action(buildTSDoc); +registerBundleCommand(build.command('bundle')); +registerBuildTSCommand(build.command('tsc')); +registerBuildDocsCommand(build.command('docs')); build.parse(process.argv); diff --git a/tools/build/src/index.ts b/tools/build/src/index.ts index 154fa81026..9246e60a82 100644 --- a/tools/build/src/index.ts +++ b/tools/build/src/index.ts @@ -1,4 +1,9 @@ export { buildAll as build } from './buildAll'; +export { + registerBuildDocsCommand, + registerBuildTSCommand, + registerBundleCommand, +} from './cli-commands'; export { buildPackage } from './rollup/build-package'; export { buildTSDoc } from './tsdoc/build-tsdoc'; export { parseTSDoc } from './tsdoc/tsdocParser'; diff --git a/tools/build/src/rollup/build-package.ts b/tools/build/src/rollup/build-package.ts index 685c8d413e..cb5f458913 100644 --- a/tools/build/src/rollup/build-package.ts +++ b/tools/build/src/rollup/build-package.ts @@ -12,12 +12,6 @@ const loadConfigFile = _loadConfigFile as LoadConfigFile; import { bundleStats } from 'rollup-plugin-bundle-stats'; interface BuildPackageOptions { - /** - * Pass this option if the function is called directly, and not via Commander.action. - * We use this option in this package's `bin/build-packages.js` command, - * in order to log a warning to consumers to use the `lg` command from @lg-tools/cli - */ - direct?: boolean; verbose?: boolean; } diff --git a/tools/build/src/typescript/build-ts.ts b/tools/build/src/typescript/build-ts.ts index ed8ca506ac..8eb14192ea 100644 --- a/tools/build/src/typescript/build-ts.ts +++ b/tools/build/src/typescript/build-ts.ts @@ -25,7 +25,7 @@ export function buildTypescript( passThru?: Array, options?: BuildTypescriptOptions, ) { - const { verbose } = options ?? { verbose: false }; + const { verbose, downlevel } = options ?? {}; const packageDir = process.cwd(); const tsConfigPath = path.join(packageDir, 'tsconfig.json'); @@ -34,10 +34,11 @@ export function buildTypescript( process.exit(1); } - verbose && + if (verbose) { console.log(chalk.blue.bold(`Building TypeScript (v${ts.version})`)); - verbose && console.log(chalk.blue('Building TypeScript')); - verbose && console.log(chalk.gray(tsConfigPath)); + console.log(chalk.blue('Building TypeScript')); + console.log(chalk.gray(tsConfigPath)); + } // Any additional options passed in via the CLI const cliCompilerOptions = parsePassThruOptions(passThru); @@ -61,7 +62,7 @@ export function buildTypescript( // Build the project const exitStatus = builder.build(); - if (options?.downlevel) { + if (downlevel) { runTypescriptDownlevel({ verbose, }); diff --git a/tools/cli/src/index.ts b/tools/cli/src/index.ts index 8150e6d607..b2098dfbec 100644 --- a/tools/cli/src/index.ts +++ b/tools/cli/src/index.ts @@ -1,4 +1,8 @@ -import { buildPackage, buildTSDoc, buildTypescript } from '@lg-tools/build'; +import { + registerBuildDocsCommand, + registerBuildTSCommand, + registerBundleCommand, +} from '@lg-tools/build'; import { migrator } from '@lg-tools/codemods'; import { createPackage } from '@lg-tools/create'; import { installLeafyGreen } from '@lg-tools/install'; @@ -224,33 +228,10 @@ cli .action(migrator); /** Build steps */ -cli - .command('build-package') - .description('Builds a package') - .option('-v --verbose', 'Prints additional information to the console', false) - .action(buildPackage); -cli - .command('build-ts') - .description("Builds a package's TypeScript definitions") - .argument('[pass-through...]', 'Pass-through options for `tsc`') - .option('-v --verbose', 'Prints additional information to the console', false) - .option( - '--downlevel', - 'Builds all TS downlevel targets based on the typesVersions field in package.json', - false, - ) - .option( - '-u, --update', - 'Update package.json typesVersions and exports fields', - false, - ) - .allowUnknownOption(true) - .action(buildTypescript); -cli - .command('build-tsdoc') - .description("Builds a package's TSDoc file") - .option('-v --verbose', 'Prints additional information to the console', false) - .action(buildTSDoc); + +registerBundleCommand(cli.command('build-package')); +registerBuildTSCommand(cli.command('build-ts')); +registerBuildDocsCommand(cli.command('build-tsdoc')); /** Merge editor settings */ cli