diff --git a/lib/cli/src/repro-generators/configs.ts b/lib/cli/src/repro-generators/configs.ts index 241819736707..f1b5b10fcb26 100644 --- a/lib/cli/src/repro-generators/configs.ts +++ b/lib/cli/src/repro-generators/configs.ts @@ -13,6 +13,11 @@ export interface Parameters { autoDetect?: boolean; /** Dependencies to add before building Storybook */ additionalDeps?: string[]; + /** Files to add before installing Storybook */ + additionalFiles?: { + path: string; + contents: string; + }[]; /** Add typescript dependency and creates a tsconfig.json file */ typescript?: boolean; /** Merge configurations to main.js before running the tests */ @@ -119,7 +124,7 @@ const baseAngular: Parameters = { framework: 'angular', name: 'angular', version: 'latest', - generator: `npx -p @angular/cli@{{version}} ng new {{appName}} --routing=true --minimal=true --style=scss --skipInstall=true --strict`, + generator: `npx -p @angular/cli@{{version}} ng new {{appName}} --routing=true --minimal=true --style=scss --skip-install=true --strict`, }; export const angular10: Parameters = { diff --git a/lib/cli/src/repro-generators/scripts.ts b/lib/cli/src/repro-generators/scripts.ts index 28efd6ce0d24..21a608f5fea1 100644 --- a/lib/cli/src/repro-generators/scripts.ts +++ b/lib/cli/src/repro-generators/scripts.ts @@ -1,5 +1,5 @@ import path from 'path'; -import { readJSON, writeJSON } from 'fs-extra'; +import { readJSON, writeJSON, outputFile } from 'fs-extra'; import shell, { ExecOptions } from 'shelljs'; import chalk from 'chalk'; import { cra, cra_typescript } from './configs'; @@ -22,6 +22,11 @@ export interface Parameters { ensureDir?: boolean; /** Dependencies to add before building Storybook */ additionalDeps?: string[]; + /** Files to add before installing Storybook */ + additionalFiles?: { + path: string; + contents: string; + }[]; /** Add typescript dependency and creates a tsconfig.json file */ typescript?: boolean; } @@ -136,6 +141,16 @@ const generate = async ({ cwd, name, appName, version, generator }: Options) => ); }; +const addAdditionalFiles = async ({ additionalFiles, cwd }: Options) => { + logger.info(`⤵️ Adding required files`); + + await Promise.all( + additionalFiles.map(async (file) => { + await outputFile(path.resolve(cwd, file.path), file.contents, { encoding: 'UTF-8' }); + }) + ); +}; + const initStorybook = async ({ cwd, autoDetect = true, name, e2e }: Options) => { const type = autoDetect ? '' : `--type ${name}`; const linkable = e2e ? '' : '--linkable'; @@ -228,6 +243,7 @@ export const createAndInit = async ( logger.log(); await doTask(generate, { ...options, cwd: options.creationPath }); + await doTask(addAdditionalFiles, { ...options, cwd }, !!options.additionalFiles); if (e2e) { await doTask(addPackageResolutions, options); }