Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CSF: Rename preview.js globals to initialGlobals #27517

Merged
merged 17 commits into from
Jun 11, 2024
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
16 changes: 16 additions & 0 deletions MIGRATION.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<h1>Migration</h1>

- [From version 8.1.x to 8.2.x](#from-version-81x-to-82x)
- [Preview.js globals renamed to initialGlobals](#previewjs-globals-renamed-to-initialglobals)
- [From version 8.0.x to 8.1.x](#from-version-80x-to-81x)
- [Portable stories](#portable-stories)
- [@storybook/nextjs requires specific path aliases to be setup](#storybooknextjs-requires-specific-path-aliases-to-be-setup)
Expand Down Expand Up @@ -411,6 +413,20 @@
- [Packages renaming](#packages-renaming)
- [Deprecated embedded addons](#deprecated-embedded-addons)

## From version 8.1.x to 8.2.x

### Preview.js globals renamed to initialGlobals

Starting in 8.2 `preview.js` `globals` are deprecated and have been renamed to `initialGlobals`. We will remove `preview.js` `globals` in 9.0.

```diff
// .storybook/preview.js
export default {
- globals: [ a: 1, b: 2 ],
+ initiaGlobals: [ a: 1, b: 2 ],
}
```

## From version 8.0.x to 8.1.x

### Portable stories
Expand Down
2 changes: 1 addition & 1 deletion code/addons/backgrounds/src/preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ export const parameters = {
},
};

export const globals = {
export const initialGlobals = {
[PARAM_KEY]: null as any,
};
2 changes: 1 addition & 1 deletion code/addons/links/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
"prep": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/addon-bundle.ts"
},
"dependencies": {
"@storybook/csf": "^0.1.7",
"@storybook/csf": "^0.1.8",
"@storybook/global": "^5.0.0",
"ts-dedent": "^2.0.0"
},
Expand Down
2 changes: 1 addition & 1 deletion code/addons/measure/src/preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ import { PARAM_KEY } from './constants';

export const decorators: Addon_DecoratorFunction[] = [withMeasure];

export const globals = {
export const initialGlobals = {
[PARAM_KEY]: false,
};
2 changes: 1 addition & 1 deletion code/addons/outline/src/preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ import { PARAM_KEY } from './constants';

export const decorators: Addon_DecoratorFunction[] = [withOutline];

export const globals = {
export const initialGlobals = {
[PARAM_KEY]: false,
};
2 changes: 1 addition & 1 deletion code/addons/viewport/src/preview.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export const globals = { viewport: 'reset', viewportRotated: false };
export const initialGlobals = { viewport: 'reset', viewportRotated: false };
2 changes: 1 addition & 1 deletion code/addons/viewport/src/shortcuts.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { type API } from '@storybook/manager-api';
import { ADDON_ID } from './constants';
import { globals as defaultGlobals } from './preview';
import { initialGlobals as defaultGlobals } from './preview';

const getCurrentViewportIndex = (viewportsKeys: string[], current: string): number =>
viewportsKeys.indexOf(current);
Expand Down
2 changes: 2 additions & 0 deletions code/lib/cli/src/automigrate/fixes/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import { addonPostCSS } from './addon-postcss';
import { vta } from './vta';
import { upgradeStorybookRelatedDependencies } from './upgrade-storybook-related-dependencies';
import { autodocsTags } from './autodocs-tags';
import { initialGlobals } from './initial-globals';

export * from '../types';

Expand Down Expand Up @@ -62,6 +63,7 @@ export const allFixes: Fix[] = [
upgradeStorybookRelatedDependencies,
vta,
autodocsTags,
initialGlobals,
];

export const initFixes: Fix[] = [eslintPlugin];
33 changes: 33 additions & 0 deletions code/lib/cli/src/automigrate/fixes/initial-globals.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/* eslint-disable no-underscore-dangle */
import { vi, expect, it } from 'vitest';
import path from 'path';
import * as fsExtra from 'fs-extra';
import { initialGlobals } from './initial-globals';

vi.mock('fs-extra', async () => import('../../../../../__mocks__/fs-extra'));

const previewConfigPath = path.join('.storybook', 'preview.js');
const check = async (previewContents: string) => {
vi.mocked<typeof import('../../../../../__mocks__/fs-extra')>(fsExtra as any).__setMockFiles({
[previewConfigPath]: previewContents,
});
return initialGlobals.check({
packageManager: {} as any,
configDir: '',
mainConfig: {} as any,
storybookVersion: '8.0',
previewConfigPath,
});
};

it('no globals setting', async () => {
await expect(check(`export default { tags: ['a', 'b']}`)).resolves.toBeFalsy();
});

it('initialGlobals setting', async () => {
await expect(check(`export default { initialGlobals: { a: 1 } }`)).resolves.toBeFalsy();
});

it('globals setting', async () => {
await expect(check(`export default { globals: { a: 1 } }`)).resolves.toBeTruthy();
});
tmeasday marked this conversation as resolved.
Show resolved Hide resolved
52 changes: 52 additions & 0 deletions code/lib/cli/src/automigrate/fixes/initial-globals.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { dedent } from 'ts-dedent';
import chalk from 'chalk';
import { readFile, writeFile } from 'fs-extra';
import type { Expression } from '@babel/types';
import type { ConfigFile } from '@storybook/csf-tools';
import { loadConfig, formatConfig } from '@storybook/csf-tools';
import type { Fix } from '../types';

const MIGRATION =
'https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#previewjs-globals-renamed-to-initialglobals';

interface Options {
previewConfig: ConfigFile;
previewConfigPath: string;
globals: Expression;
}

/**
* Rename preview.js globals to initialGlobals
*/
export const initialGlobals: Fix<Options> = {
id: 'initial-globals',
versionRange: ['*.*.*', '>=8.0.*'],
async check({ previewConfigPath }) {
if (!previewConfigPath) return null;

const previewConfig = loadConfig((await readFile(previewConfigPath)).toString()).parse();
const globals = previewConfig.getFieldNode(['globals']) as Expression;
if (!globals) return null;

return { globals, previewConfig, previewConfigPath };
},

prompt({ previewConfigPath }) {
return dedent`
The ${chalk.cyan('globals')} setting in ${chalk.cyan(previewConfigPath)} is deprecated
and has been renamed to ${chalk.cyan('initialGlobals')}.

Learn more: ${chalk.yellow(MIGRATION)}

Rename ${chalk.cyan('globals')} to ${chalk.cyan('initalGlobals')}?
`;
},

async run({ dryRun, result }) {
result.previewConfig.removeField(['globals']);
result.previewConfig.setFieldNode(['initialGlobals'], result.globals);
if (!dryRun) {
await writeFile(result.previewConfigPath, formatConfig(result.previewConfig));
}
},
};
2 changes: 1 addition & 1 deletion code/lib/codemod/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
"@babel/core": "^7.24.4",
"@babel/preset-env": "^7.24.4",
"@babel/types": "^7.24.0",
"@storybook/csf": "^0.1.7",
"@storybook/csf": "^0.1.8",
"@storybook/csf-tools": "workspace:*",
"@storybook/node-logger": "workspace:*",
"@storybook/types": "workspace:*",
Expand Down
2 changes: 1 addition & 1 deletion code/lib/core-events/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@
"prep": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/bundle.ts"
},
"dependencies": {
"@storybook/csf": "^0.1.7",
"@storybook/csf": "^0.1.8",
"ts-dedent": "^2.0.0"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion code/lib/core-server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
"@storybook/channels": "workspace:*",
"@storybook/core-common": "workspace:*",
"@storybook/core-events": "workspace:*",
"@storybook/csf": "^0.1.7",
"@storybook/csf": "^0.1.8",
"@storybook/csf-tools": "workspace:*",
"@storybook/docs-mdx": "3.1.0-next.0",
"@storybook/global": "^5.0.0",
Expand Down
2 changes: 1 addition & 1 deletion code/lib/csf-tools/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"@babel/parser": "^7.24.4",
"@babel/traverse": "^7.24.1",
"@babel/types": "^7.24.0",
"@storybook/csf": "^0.1.7",
"@storybook/csf": "^0.1.8",
"@storybook/types": "workspace:*",
"fs-extra": "^11.1.0",
"recast": "^0.23.5",
Expand Down
36 changes: 36 additions & 0 deletions code/lib/csf-tools/src/ConfigFile.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -756,6 +756,42 @@ describe('ConfigFile', () => {
};
`);
});
it('root globals as variable', () => {
expect(
removeField(
['globals'],
dedent`
const preview = { globals: { a: 1 }, bar: { a: 1 } };
export default preview;
`
)
).toMatchInlineSnapshot(`
const preview = {
bar: { a: 1 }
};
export default preview;
`);
});

it('root globals satsifies as variable', () => {
expect(
removeField(
['globals'],
dedent`
const preview = {
globals: { a: 1 },
bar: { a: 1 }
} satisfies Foo;
export default preview;
`
)
).toMatchInlineSnapshot(`
const preview = {
bar: { a: 1 }
} satisfies Foo;
export default preview;
`);
});
});

describe('quotes', () => {
Expand Down
17 changes: 13 additions & 4 deletions code/lib/csf-tools/src/ConfigFile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -493,10 +493,19 @@ export class ConfigFile {
}
}
// default export
if (t.isExportDefaultDeclaration(node) && t.isObjectExpression(node.declaration)) {
const properties = node.declaration.properties as t.ObjectProperty[];
removeProperty(properties, path[0]);
removedRootProperty = true;
if (t.isExportDefaultDeclaration(node)) {
let decl: t.Expression | undefined | null = node.declaration as t.Expression;
if (t.isIdentifier(decl)) {
decl = _findVarInitialization(decl.name, this._ast.program);
}
if (t.isTSAsExpression(decl) || t.isTSSatisfiesExpression(decl)) {
decl = decl.expression;
}
if (t.isObjectExpression(decl)) {
const properties = decl.properties as t.ObjectProperty[];
removeProperty(properties, path[0]);
removedRootProperty = true;
}
}
// module.exports
if (
Expand Down
2 changes: 1 addition & 1 deletion code/lib/manager-api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
"@storybook/channels": "workspace:*",
"@storybook/client-logger": "workspace:*",
"@storybook/core-events": "workspace:*",
"@storybook/csf": "^0.1.7",
"@storybook/csf": "^0.1.8",
"@storybook/global": "^5.0.0",
"@storybook/icons": "^1.2.5",
"@storybook/router": "workspace:*",
Expand Down
2 changes: 1 addition & 1 deletion code/lib/preview-api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
"@storybook/channels": "workspace:*",
"@storybook/client-logger": "workspace:*",
"@storybook/core-events": "workspace:*",
"@storybook/csf": "^0.1.7",
"@storybook/csf": "^0.1.8",
"@storybook/global": "^5.0.0",
"@storybook/types": "workspace:*",
"@types/qs": "^6.9.5",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ export const docsRenderer = {
};
export const teardownrenderToCanvas: Mock<[TeardownRenderToCanvas]> = vi.fn();
export const projectAnnotations = {
globals: { a: 'b' },
initialGlobals: { a: 'b' },
globalTypes: {},
decorators: [vi.fn((s) => s())],
render: vi.fn(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3353,7 +3353,7 @@ describe('PreviewWeb', () => {
return {
...projectAnnotations,
args: { global: 'added' },
globals: { a: 'edited' },
initialGlobals: { a: 'edited' },
decorators: [newGlobalDecorator],
};
};
Expand Down
8 changes: 4 additions & 4 deletions code/lib/preview-api/src/modules/store/StoryStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,10 @@ export class StoryStore<TRenderer extends Renderer> {
this.storyIndex = new StoryIndexStore(storyIndex);

this.projectAnnotations = normalizeProjectAnnotations(projectAnnotations);
const { globals, globalTypes } = projectAnnotations;
const { initialGlobals, globalTypes } = this.projectAnnotations;

this.args = new ArgsStore();
this.globals = new GlobalsStore({ globals, globalTypes });
this.globals = new GlobalsStore({ globals: initialGlobals, globalTypes });
this.hooks = {};
this.cleanupCallbacks = {};

Expand All @@ -95,8 +95,8 @@ export class StoryStore<TRenderer extends Renderer> {
setProjectAnnotations(projectAnnotations: ProjectAnnotations<TRenderer>) {
// By changing `this.projectAnnotations, we implicitly invalidate the `prepareStoryWithCache`
this.projectAnnotations = normalizeProjectAnnotations(projectAnnotations);
const { globals, globalTypes } = projectAnnotations;
this.globals.set({ globals, globalTypes });
const { initialGlobals, globalTypes } = projectAnnotations;
this.globals.set({ globals: initialGlobals, globalTypes });
}

// This means that one of the CSF files has changed.
Expand Down
Loading