Skip to content
Merged
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
Expand Up @@ -347,7 +347,7 @@ describe('preview specific functionality', () => {
import { type Preview } from '@storybook/react-vite';
export const decorators = []
const preview = {

parameters: {
options: {}
}
Expand All @@ -368,4 +368,42 @@ describe('preview specific functionality', () => {
});
`);
});

it('should add default export when preview only has side-effect imports', async () => {
await expect(
transform(dedent`
import './preview.scss'
`)
).resolves.toMatchInlineSnapshot(`
import { definePreview } from '@storybook/react-vite';

import './preview.scss';

export default definePreview({});
`);
});

it('should add default export when preview file is empty', async () => {
await expect(transform('')).resolves.toMatchInlineSnapshot(`
import { definePreview } from '@storybook/react-vite';

export default definePreview({});
`);
});

it('should add default export when preview only has multiple side-effect imports', async () => {
await expect(
transform(dedent`
import './preview.scss'
import './global.css'
`)
).resolves.toMatchInlineSnapshot(`
import { definePreview } from '@storybook/react-vite';

import './global.css';
import './preview.scss';

export default definePreview({});
`);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,21 @@ export async function configToCsfFactory(

// Add the new export default declaration
programNode.body.push(t.exportDefaultDeclaration(defineConfigCall));
} else if (configType === 'preview') {
Comment thread
kasperpeulen marked this conversation as resolved.
/**
* Scenario 4: No exports (empty file or only side-effect imports)
*
* ```
* import './preview.scss';
* ```
*
* Transform into: `import './preview.scss'; export default definePreview({})`
*
* This is needed because story files using CSF factories import from preview, so the preview
* file must have a default export.
*/
const defineConfigCall = t.callExpression(t.identifier(methodName), [t.objectExpression([])]);
programNode.body.push(t.exportDefaultDeclaration(defineConfigCall));
}

const configImport = t.importDeclaration(
Expand Down