From c8274b6bdcdbca4c2899e6c06222ee1d9134eb80 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Fri, 29 May 2026 14:36:01 +0200 Subject: [PATCH 1/4] feat: add telemetry support for Storybook configuration - Introduced telemetry functionality in withStorybook for React Native. - Added environment variable to disable telemetry. - Unified telemetry event handling across different Storybook configurations. --- packages/react-native/src/metro/withStorybook.ts | 4 +--- packages/react-native/src/repack/withStorybook.ts | 9 ++++++++- packages/react-native/src/withStorybook.ts | 7 +++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/react-native/src/metro/withStorybook.ts b/packages/react-native/src/metro/withStorybook.ts index 20a1f777ca..b870a5f173 100644 --- a/packages/react-native/src/metro/withStorybook.ts +++ b/packages/react-native/src/metro/withStorybook.ts @@ -146,9 +146,7 @@ export function withStorybook( const disableTelemetry = optionalEnvToBoolean(process.env.STORYBOOK_DISABLE_TELEMETRY); if (!disableTelemetry && enabled) { - const event = process.env.NODE_ENV === 'production' ? 'build' : 'dev'; - - telemetry(event, {}).catch((e) => {}); + telemetry('dev', {}).catch((e) => {}); } if (!enabled) { diff --git a/packages/react-native/src/repack/withStorybook.ts b/packages/react-native/src/repack/withStorybook.ts index cac8a9f8f5..df2dc3ff01 100644 --- a/packages/react-native/src/repack/withStorybook.ts +++ b/packages/react-native/src/repack/withStorybook.ts @@ -2,7 +2,8 @@ import * as path from 'path'; import { generate } from '../../scripts/generate'; import { createChannelServer } from '../metro/channelServer'; import type { WebsocketsOptions } from '../types'; -import { loadWebsocketEnvOverrides } from '../env-tools'; +import { envVariableToBoolean, loadWebsocketEnvOverrides } from '../env-tools'; +import { telemetry } from 'storybook/internal/telemetry'; /** * Minimal compiler types for webpack/rspack compatibility. @@ -138,6 +139,12 @@ export class StorybookPlugin { return; } + const disableTelemetry = envVariableToBoolean(process.env.STORYBOOK_DISABLE_TELEMETRY, false); + + if (!disableTelemetry && enabled) { + telemetry('dev', {}).catch((e) => {}); + } + this.applyEnabled(compiler, { configPath, websockets, diff --git a/packages/react-native/src/withStorybook.ts b/packages/react-native/src/withStorybook.ts index db9a321ff6..b9fc0a640a 100644 --- a/packages/react-native/src/withStorybook.ts +++ b/packages/react-native/src/withStorybook.ts @@ -7,6 +7,7 @@ import type { WithStorybookOptions } from './metro/utils'; import { generate } from '../scripts/generate'; import { createChannelServer } from './metro/channelServer'; import { envVariableToBoolean, loadWebsocketEnvOverrides } from './env-tools'; +import { telemetry } from 'storybook/internal/telemetry'; function isMetroConfig(config: unknown): config is MetroConfig { return config != null && typeof config === 'object' && 'transformer' in config; @@ -14,6 +15,8 @@ function isMetroConfig(config: unknown): config is MetroConfig { export function withStorybook(config: T, options: WithStorybookOptions = {}): T { const enabled = envVariableToBoolean(process.env.STORYBOOK_ENABLED, options.enabled ?? false); + const disableTelemetry = envVariableToBoolean(process.env.STORYBOOK_DISABLE_TELEMETRY, false); + if (!enabled) { return config; } @@ -24,6 +27,10 @@ export function withStorybook(config: T, options: WithStorybo ); const settings = { ...options }; + if (!disableTelemetry && enabled) { + telemetry('dev', {}).catch((e) => {}); + } + if (!server) { settings.experimental_mcp = false; } From d39cc4cd3cd4e48caf29182045e1c0c367df3bfa Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Fri, 29 May 2026 14:40:37 +0200 Subject: [PATCH 2/4] Add telemetry support for on-device Storybook - Introduced telemetry functionality when on-device Storybook is enabled. - Added an option to opt-out via the `STORYBOOK_DISABLE_TELEMETRY` environment variable. - Telemetry is managed through the unified `withStorybook` wrapper and the Re.Pack plugin. --- .changeset/add-storybook-telemetry.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/add-storybook-telemetry.md diff --git a/.changeset/add-storybook-telemetry.md b/.changeset/add-storybook-telemetry.md new file mode 100644 index 0000000000..76aad4cfc6 --- /dev/null +++ b/.changeset/add-storybook-telemetry.md @@ -0,0 +1,5 @@ +--- +'@storybook/react-native': patch +--- + +Add Storybook telemetry when on-device Storybook is enabled, with opt-out via `STORYBOOK_DISABLE_TELEMETRY`. Telemetry runs from the unified `withStorybook` wrapper and the Re.Pack plugin. From baee65d1b9fa79d092c4e61f2176f2a75d58d5d9 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Fri, 29 May 2026 14:40:44 +0200 Subject: [PATCH 3/4] Fix duplicate telemetry mock in withStorybook tests --- packages/react-native/src/withStorybook.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/react-native/src/withStorybook.test.ts b/packages/react-native/src/withStorybook.test.ts index 27b4133057..1a5796e274 100644 --- a/packages/react-native/src/withStorybook.test.ts +++ b/packages/react-native/src/withStorybook.test.ts @@ -16,6 +16,10 @@ jest.mock('storybook/internal/telemetry', () => ({ telemetry: jest.fn(() => Promise.resolve()), })); +jest.mock('storybook/internal/telemetry', () => ({ + telemetry: jest.fn(() => Promise.resolve()), +})); + describe('withStorybook (unified)', () => { const metroConfig = { resolver: {}, transformer: {} } as MetroConfig; From 4b31413f15fba7e47ab6ddf1d762390e0e92b2ea Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Fri, 29 May 2026 14:42:52 +0200 Subject: [PATCH 4/4] Add telemetry mock for Storybook tests - Introduced a mock for the telemetry module in the withStorybook test file to ensure proper testing of telemetry functionality. --- packages/react-native/src/repack/withStorybook.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/react-native/src/repack/withStorybook.test.ts b/packages/react-native/src/repack/withStorybook.test.ts index 09f523fb93..06e067cf7e 100644 --- a/packages/react-native/src/repack/withStorybook.test.ts +++ b/packages/react-native/src/repack/withStorybook.test.ts @@ -9,6 +9,10 @@ jest.mock('../../scripts/generate', () => ({ generate: jest.fn(), })); +jest.mock('storybook/internal/telemetry', () => ({ + telemetry: jest.fn(() => Promise.resolve()), +})); + const { generate } = require('../../scripts/generate') as typeof import('../../scripts/generate'); function createCompilerMock() {