Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"changes": [
{
"packageName": "@rushstack/heft-storybook-plugin",
"comment": "Add `quiet` option to control whether --quiet is passed to the Storybook CLI, and add `--no-open` flag to suppress automatic browser launch in serve mode",
"type": "minor"
}
],
"packageName": "@rushstack/heft-storybook-plugin"
}
5 changes: 5 additions & 0 deletions heft-plugins/heft-storybook-plugin/heft-plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@
"longName": "--docs",
"description": "Execute storybook in docs mode.",
"parameterKind": "flag"
},
{
"longName": "--no-open",
"description": "Pass --no-open to the storybook CLI so it does not automatically open a browser window in serve mode.",
"parameterKind": "flag"
}
]
}
Expand Down
29 changes: 26 additions & 3 deletions heft-plugins/heft-storybook-plugin/src/StorybookPlugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,13 @@ export interface IStorybookPluginOptions {
* which disables Storybook's telemetry data collection.
*/
disableTelemetry?: boolean;

/**
* Specifies whether to run storybook in quiet mode (--quiet).
*
* @defaultValue `true`
*/
quiet?: boolean;
}

interface IRunStorybookOptions extends IPrepareStorybookOptions {
Expand All @@ -183,6 +190,7 @@ interface IPrepareStorybookOptions extends IStorybookPluginOptions {
isServeMode: boolean;
isTestMode: boolean;
isDocsMode: boolean;
isNoOpenMode: boolean;
}

const DEFAULT_STORYBOOK_VERSION: StorybookCliVersion = StorybookCliVersion.STORYBOOK7;
Expand Down Expand Up @@ -220,6 +228,7 @@ const DEFAULT_STORYBOOK_CLI_CONFIG: Record<StorybookCliVersion, IStorybookCliCal
const STORYBOOK_FLAG_NAME: '--storybook' = '--storybook';
const STORYBOOK_TEST_FLAG_NAME: '--storybook-test' = '--storybook-test';
const DOCS_FLAG_NAME: '--docs' = '--docs';
const NO_OPEN_FLAG_NAME: '--no-open' = '--no-open';

/** @public */
export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPluginOptions> {
Expand All @@ -237,6 +246,8 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
const storybookTestParameter: CommandLineFlagParameter =
taskSession.parameters.getFlagParameter(STORYBOOK_TEST_FLAG_NAME);
const docsParameter: CommandLineFlagParameter = taskSession.parameters.getFlagParameter(DOCS_FLAG_NAME);
const noOpenParameter: CommandLineFlagParameter =
taskSession.parameters.getFlagParameter(NO_OPEN_FLAG_NAME);

const parseResult: IParsedPackageNameOrError = PackageName.tryParse(options.storykitPackageName);
if (parseResult.error) {
Expand Down Expand Up @@ -300,6 +311,7 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
isServeMode,
isTestMode: storybookTestParameter.value,
isDocsMode: docsParameter.value,
isNoOpenMode: noOpenParameter.value,
...options
});
await this._runStorybookAsync(runStorybookOptions, options);
Expand Down Expand Up @@ -458,7 +470,8 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
runStorybookOptions: IRunStorybookOptions,
options: IStorybookPluginOptions
): Promise<void> {
const { logger, resolvedModulePath, verbose, isServeMode, isTestMode, isDocsMode } = runStorybookOptions;
const { logger, resolvedModulePath, verbose, isServeMode, isTestMode, isDocsMode, isNoOpenMode } =
runStorybookOptions;
let { workingDirectory, outputFolder } = runStorybookOptions;
logger.terminal.writeLine('Running Storybook compilation');
logger.terminal.writeVerboseLine(`Loading Storybook module "${resolvedModulePath}"`);
Expand Down Expand Up @@ -493,7 +506,7 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
storybookArgs.push('--webpack-stats-json');
}

if (!verbose) {
if (options.quiet !== false && !verbose) {
storybookArgs.push('--quiet');
}

Expand All @@ -505,6 +518,10 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
storybookArgs.push('--docs');
}

if (isServeMode && isNoOpenMode) {
storybookArgs.push('--no-open');
}

const storybookEnv: NodeJS.ProcessEnv = {
...process.env,
// Prevent corepack from prompting to pin a package manager version
Expand All @@ -525,7 +542,13 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
storybookCliVersion === StorybookCliVersion.STORYBOOK8
);
} else {
await this._invokeAsSubprocessAsync(logger, resolvedModulePath, storybookArgs, workingDirectory, storybookEnv);
await this._invokeAsSubprocessAsync(
logger,
resolvedModulePath,
storybookArgs,
workingDirectory,
storybookEnv
);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@
"title": "Specifies whether to disable Storybook telemetry.",
"description": "If true, sets the STORYBOOK_DISABLE_TELEMETRY=1 environment variable when invoking the Storybook subprocess, which disables Storybook's telemetry data collection. Defaults to false.",
"type": "boolean"
},
"quiet": {
"title": "Specifies whether to run storybook in quiet mode (--quiet).",
"description": "If this is true, then it will run storybook in quiet mode. Defaults to true.",
"type": "boolean"
}
}
}
Loading