Skip to content

Commit 906ad72

Browse files
Merge pull request #32216 from storybookjs/valentin/add-error-handling-to-mock-preview-parsing
Mock: Catch errors when transforming preview files
2 parents b0f9e0d + 1e2ff7b commit 906ad72

File tree

2 files changed

+28
-8
lines changed

2 files changed

+28
-8
lines changed

code/core/src/core-server/presets/vitePlugins/vite-mock/plugin.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,12 @@ export function viteMockPlugin(options: MockPluginOptions): Plugin[] {
167167
name: 'storybook:mock-loader-preview',
168168
transform(code, id) {
169169
if (id === normalizedPreviewConfigPath) {
170-
return rewriteSbMockImportCalls(code);
170+
try {
171+
return rewriteSbMockImportCalls(code);
172+
} catch (e) {
173+
logger.debug(`Could not transform sb.mock(import(...)) calls in ${id}: ${e}`);
174+
return null;
175+
}
171176
}
172177
return null;
173178
},
Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,30 @@
1-
import type { LoaderContext } from 'webpack';
1+
import { logger } from 'storybook/internal/node-logger';
2+
3+
import type { LoaderDefinition } from 'webpack';
24

35
import { rewriteSbMockImportCalls } from '../../../mocking-utils/extract';
46

57
/**
68
* A Webpack loader that normalize sb.mock(import(...)) calls to sb.mock(...)
79
*
8-
* @param {string} source The original source code of the preview config file.
9-
* @this {LoaderContext<{}>} The Webpack loader context.
10+
* @param source The original source code of the preview config file.
11+
* @this The Webpack loader context.
1012
*/
11-
export default function storybookMockTransformLoader(this: LoaderContext<{}>, source: string) {
12-
const result = rewriteSbMockImportCalls(source);
13+
const storybookMockTransformLoader: LoaderDefinition = function mockTransformLoaderFn(
14+
source,
15+
sourceMap,
16+
meta
17+
) {
1318
const callback = this.async();
14-
callback(null, result.code, result.map || undefined);
15-
}
19+
20+
try {
21+
const result = rewriteSbMockImportCalls(source);
22+
callback(null, result.code, result.map || undefined, meta);
23+
} catch (error) {
24+
const filePath = this.resourcePath;
25+
logger.debug(`Could not transform sb.mock(import(...)) calls in ${filePath}: ${error}`);
26+
callback(null, source, sourceMap, meta);
27+
}
28+
};
29+
30+
export default storybookMockTransformLoader;

0 commit comments

Comments
 (0)