Skip to content

Commit 7292bf8

Browse files
UberMouseclaude
andauthored
feat(heft-storybook-plugin): add --quiet opt-out and --no-open flag (#5681)
* allow omitting --quiet flag in heft-storybook-plugin without requiring --verbose * add --no-open flag to heft-storybook-plugin to suppress browser launch in serve mode Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Taylor Lodge <ubermouse@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 86d53ab commit 7292bf8

4 files changed

Lines changed: 46 additions & 3 deletions

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"changes": [
3+
{
4+
"packageName": "@rushstack/heft-storybook-plugin",
5+
"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",
6+
"type": "minor"
7+
}
8+
],
9+
"packageName": "@rushstack/heft-storybook-plugin"
10+
}

heft-plugins/heft-storybook-plugin/heft-plugin.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
"longName": "--docs",
2424
"description": "Execute storybook in docs mode.",
2525
"parameterKind": "flag"
26+
},
27+
{
28+
"longName": "--no-open",
29+
"description": "Pass --no-open to the storybook CLI so it does not automatically open a browser window in serve mode.",
30+
"parameterKind": "flag"
2631
}
2732
]
2833
}

heft-plugins/heft-storybook-plugin/src/StorybookPlugin.ts

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,13 @@ export interface IStorybookPluginOptions {
164164
* which disables Storybook's telemetry data collection.
165165
*/
166166
disableTelemetry?: boolean;
167+
168+
/**
169+
* Specifies whether to run storybook in quiet mode (--quiet).
170+
*
171+
* @defaultValue `true`
172+
*/
173+
quiet?: boolean;
167174
}
168175

169176
interface IRunStorybookOptions extends IPrepareStorybookOptions {
@@ -183,6 +190,7 @@ interface IPrepareStorybookOptions extends IStorybookPluginOptions {
183190
isServeMode: boolean;
184191
isTestMode: boolean;
185192
isDocsMode: boolean;
193+
isNoOpenMode: boolean;
186194
}
187195

188196
const DEFAULT_STORYBOOK_VERSION: StorybookCliVersion = StorybookCliVersion.STORYBOOK7;
@@ -220,6 +228,7 @@ const DEFAULT_STORYBOOK_CLI_CONFIG: Record<StorybookCliVersion, IStorybookCliCal
220228
const STORYBOOK_FLAG_NAME: '--storybook' = '--storybook';
221229
const STORYBOOK_TEST_FLAG_NAME: '--storybook-test' = '--storybook-test';
222230
const DOCS_FLAG_NAME: '--docs' = '--docs';
231+
const NO_OPEN_FLAG_NAME: '--no-open' = '--no-open';
223232

224233
/** @public */
225234
export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPluginOptions> {
@@ -237,6 +246,8 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
237246
const storybookTestParameter: CommandLineFlagParameter =
238247
taskSession.parameters.getFlagParameter(STORYBOOK_TEST_FLAG_NAME);
239248
const docsParameter: CommandLineFlagParameter = taskSession.parameters.getFlagParameter(DOCS_FLAG_NAME);
249+
const noOpenParameter: CommandLineFlagParameter =
250+
taskSession.parameters.getFlagParameter(NO_OPEN_FLAG_NAME);
240251

241252
const parseResult: IParsedPackageNameOrError = PackageName.tryParse(options.storykitPackageName);
242253
if (parseResult.error) {
@@ -300,6 +311,7 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
300311
isServeMode,
301312
isTestMode: storybookTestParameter.value,
302313
isDocsMode: docsParameter.value,
314+
isNoOpenMode: noOpenParameter.value,
303315
...options
304316
});
305317
await this._runStorybookAsync(runStorybookOptions, options);
@@ -458,7 +470,8 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
458470
runStorybookOptions: IRunStorybookOptions,
459471
options: IStorybookPluginOptions
460472
): Promise<void> {
461-
const { logger, resolvedModulePath, verbose, isServeMode, isTestMode, isDocsMode } = runStorybookOptions;
473+
const { logger, resolvedModulePath, verbose, isServeMode, isTestMode, isDocsMode, isNoOpenMode } =
474+
runStorybookOptions;
462475
let { workingDirectory, outputFolder } = runStorybookOptions;
463476
logger.terminal.writeLine('Running Storybook compilation');
464477
logger.terminal.writeVerboseLine(`Loading Storybook module "${resolvedModulePath}"`);
@@ -493,7 +506,7 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
493506
storybookArgs.push('--webpack-stats-json');
494507
}
495508

496-
if (!verbose) {
509+
if (options.quiet !== false && !verbose) {
497510
storybookArgs.push('--quiet');
498511
}
499512

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

521+
if (isServeMode && isNoOpenMode) {
522+
storybookArgs.push('--no-open');
523+
}
524+
508525
const storybookEnv: NodeJS.ProcessEnv = {
509526
...process.env,
510527
// Prevent corepack from prompting to pin a package manager version
@@ -525,7 +542,13 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
525542
storybookCliVersion === StorybookCliVersion.STORYBOOK8
526543
);
527544
} else {
528-
await this._invokeAsSubprocessAsync(logger, resolvedModulePath, storybookArgs, workingDirectory, storybookEnv);
545+
await this._invokeAsSubprocessAsync(
546+
logger,
547+
resolvedModulePath,
548+
storybookArgs,
549+
workingDirectory,
550+
storybookEnv
551+
);
529552
}
530553
}
531554

heft-plugins/heft-storybook-plugin/src/schemas/storybook.schema.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@
4242
"title": "Specifies whether to disable Storybook telemetry.",
4343
"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.",
4444
"type": "boolean"
45+
},
46+
"quiet": {
47+
"title": "Specifies whether to run storybook in quiet mode (--quiet).",
48+
"description": "If this is true, then it will run storybook in quiet mode. Defaults to true.",
49+
"type": "boolean"
4550
}
4651
}
4752
}

0 commit comments

Comments
 (0)