From 478627456052d8e83286a2b6a83a64b7dd2ef962 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 4 Jun 2020 16:08:17 +0200 Subject: [PATCH] packages/cli: add output format option to build command --- packages/cli/src/commands/build.ts | 24 ++++++++++++++++++----- packages/cli/src/commands/plugin/build.ts | 4 ++-- packages/cli/src/index.ts | 1 + packages/cli/src/lib/packager/config.ts | 10 +++++----- packages/cli/src/lib/packager/index.ts | 3 ++- packages/cli/src/lib/packager/types.ts | 8 ++++++-- 6 files changed, 35 insertions(+), 15 deletions(-) diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index 2bc661af34..19e4b17352 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -14,10 +14,24 @@ * limitations under the License. */ -import { buildPackage } from '../lib/packager'; +import { buildPackage, Output } from '../lib/packager'; +import { Command } from 'commander'; -export default async () => { - await buildPackage({ - outputs: new Set(['types', 'esm', 'cjs']), - }); +export default async (cmd: Command) => { + let outputs = new Set(); + + const { outputs: outputsStr } = cmd as { outputs?: string }; + if (outputsStr) { + for (const output of outputsStr.split(',') as (keyof typeof Output)[]) { + if (output in Output) { + outputs.add(Output[output]); + } else { + throw new Error(`Unknown output format: ${output}`); + } + } + } else { + outputs = new Set([Output.types, Output.esm, Output.cjs]); + } + + await buildPackage({ outputs }); }; diff --git a/packages/cli/src/commands/plugin/build.ts b/packages/cli/src/commands/plugin/build.ts index 5fa9827116..7e4e5cd36a 100644 --- a/packages/cli/src/commands/plugin/build.ts +++ b/packages/cli/src/commands/plugin/build.ts @@ -14,10 +14,10 @@ * limitations under the License. */ -import { buildPackage } from '../../lib/packager'; +import { buildPackage, Output } from '../../lib/packager'; export default async () => { await buildPackage({ - outputs: new Set(['esm', 'types']), + outputs: new Set([Output.esm, Output.types]), }); }; diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 7eee21c8da..8288f776e1 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -81,6 +81,7 @@ const main = (argv: string[]) => { program .command('build') .description('Build a package for publishing') + .option('--outputs ', 'List of formats to output [types,cjs,esm]') .action(actionHandler(() => require('./commands/build'))); program diff --git a/packages/cli/src/lib/packager/config.ts b/packages/cli/src/lib/packager/config.ts index ab59bab413..aaecd4a148 100644 --- a/packages/cli/src/lib/packager/config.ts +++ b/packages/cli/src/lib/packager/config.ts @@ -26,7 +26,7 @@ import dts from 'rollup-plugin-dts'; import json from '@rollup/plugin-json'; import { RollupOptions, OutputOptions } from 'rollup'; -import { BuildOptions } from './types'; +import { BuildOptions, Output } from './types'; import { paths } from '../paths'; export const makeConfigs = async ( @@ -48,16 +48,16 @@ export const makeConfigs = async ( const configs = new Array(); - if (options.outputs.has('cjs') || options.outputs.has('esm')) { + if (options.outputs.has(Output.cjs) || options.outputs.has(Output.esm)) { const output = new Array(); - if (options.outputs.has('cjs')) { + if (options.outputs.has(Output.cjs)) { output.push({ file: 'dist/index.cjs.js', format: 'commonjs', }); } - if (options.outputs.has('esm')) { + if (options.outputs.has(Output.esm)) { output.push({ file: 'dist/index.esm.js', format: 'module', @@ -88,7 +88,7 @@ export const makeConfigs = async ( }); } - if (options.outputs.has('types')) { + if (options.outputs.has(Output.types)) { configs.push({ input: typesInput, output: { diff --git a/packages/cli/src/lib/packager/index.ts b/packages/cli/src/lib/packager/index.ts index 5a179b9ddc..17aae25ec4 100644 --- a/packages/cli/src/lib/packager/index.ts +++ b/packages/cli/src/lib/packager/index.ts @@ -15,4 +15,5 @@ */ export { buildPackage } from './packager'; -export type { BuildOptions, OutputFormat } from './types'; +export { Output } from './types'; +export type { BuildOptions } from './types'; diff --git a/packages/cli/src/lib/packager/types.ts b/packages/cli/src/lib/packager/types.ts index 49b697c1c6..853789df59 100644 --- a/packages/cli/src/lib/packager/types.ts +++ b/packages/cli/src/lib/packager/types.ts @@ -14,8 +14,12 @@ * limitations under the License. */ -export type OutputFormat = 'esm' | 'cjs' | 'types'; +export enum Output { + esm, + cjs, + types, +} export type BuildOptions = { - outputs: Set; + outputs: Set; };