From 65e66987c0a93be7606bdbf3573f33d65ab87b9b Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Wed, 3 Apr 2024 10:06:08 +0200 Subject: [PATCH] CLI: Add --config-dir flag to migrate command --- code/lib/cli/src/generate.ts | 2 +- code/lib/cli/src/migrate.ts | 29 ++++++++++++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/code/lib/cli/src/generate.ts b/code/lib/cli/src/generate.ts index 6830aea3d1c2..36de347730a7 100644 --- a/code/lib/cli/src/generate.ts +++ b/code/lib/cli/src/generate.ts @@ -126,6 +126,7 @@ command('migrate [migration]') .option('-l --list', 'List available migrations') .option('-g --glob ', 'Glob for files upon which to apply the migration', '**/*.js') .option('-p --parser ', 'jscodeshift parser') + .option('-c, --config-dir ', 'Directory where to load Storybook configurations from') .option( '-n --dry-run', 'Dry run: verify the migration exists and show the files to which it will be applied' @@ -142,7 +143,6 @@ command('migrate [migration]') list, rename, parser, - logger: consoleLogger, }).catch((err) => { logger.error(err); process.exit(1); diff --git a/code/lib/cli/src/migrate.ts b/code/lib/cli/src/migrate.ts index 29ee10dc82a3..fc85c75d9609 100644 --- a/code/lib/cli/src/migrate.ts +++ b/code/lib/cli/src/migrate.ts @@ -11,7 +11,25 @@ import { getStorybookVersionSpecifier } from './helpers'; const logger = console; -export async function migrate(migration: any, { glob, dryRun, list, rename, parser }: any) { +type CLIOptions = { + glob: string; + configDir?: string; + dryRun?: boolean; + list?: string[]; + /** + * Rename suffix of matching files after codemod has been applied, e.g. ".js:.ts" + */ + rename?: string; + /** + * jscodeshift parser + */ + parser?: 'babel' | 'babylon' | 'flow' | 'ts' | 'tsx'; +}; + +export async function migrate( + migration: any, + { glob, dryRun, list, rename, parser, configDir: userSpecifiedConfigDir }: CLIOptions +) { if (list) { listCodemods().forEach((key: any) => logger.log(key)); } else if (migration) { @@ -19,13 +37,14 @@ export async function migrate(migration: any, { glob, dryRun, list, rename, pars const packageManager = JsPackageManagerFactory.getPackageManager(); const [packageJson, storybookVersion] = await Promise.all([ - // packageManager.retrievePackageJson(), getCoercedStorybookVersion(packageManager), ]); - const { configDir: inferredConfigDir, mainConfig: mainConfigPath } = - getStorybookInfo(packageJson); - const configDir = inferredConfigDir || '.storybook'; + const { configDir: inferredConfigDir, mainConfig: mainConfigPath } = getStorybookInfo( + packageJson, + userSpecifiedConfigDir + ); + const configDir = userSpecifiedConfigDir || inferredConfigDir || '.storybook'; // GUARDS if (!storybookVersion) {