Skip to content

Commit 8f1777c

Browse files
authored
Merge pull request #30846 from storybookjs/version-patch-from-8.6.7
Release: Patch 8.6.8
2 parents 5aa300f + 9c10146 commit 8f1777c

File tree

19 files changed

+276
-100
lines changed

19 files changed

+276
-100
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
## 8.6.8
2+
3+
- Angular: Export all files in Angular package.json - [#30849](https://github.com/storybookjs/storybook/pull/30849), thanks @kasperpeulen!
4+
- CLI: Don't add packageManager entry to package.json automatically - [#30855](https://github.com/storybookjs/storybook/pull/30855), thanks @kasperpeulen!
5+
- React: Allow portable stories to be used in SSR - [#30847](https://github.com/storybookjs/storybook/pull/30847), thanks @kasperpeulen!
6+
- Svelte: Adjust Svelte typings to include Svelte 5 function components - [#30852](https://github.com/storybookjs/storybook/pull/30852), thanks @dummdidumm!
7+
- Telemetry: Make sure that telemetry doesn't fail on init - [#30857](https://github.com/storybookjs/storybook/pull/30857), thanks @kasperpeulen!
8+
- Vite: Update HMR filter to target specific story file types - [#30845](https://github.com/storybookjs/storybook/pull/30845), thanks @kasperpeulen!
9+
110
## 8.6.7
211

312
- React-Native-Web: Fix errors in CLI template stories - [#30821](https://github.com/storybookjs/storybook/pull/30821), thanks @dannyhw!

code/builders/builder-vite/src/plugins/strip-story-hmr-boundaries.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import type { Plugin } from 'vite';
99
export async function stripStoryHMRBoundary(): Promise<Plugin> {
1010
const { createFilter } = await import('vite');
1111

12-
const filter = createFilter(/\.stories\.\w+$/);
12+
const filter = createFilter(/\.stories\.(tsx?|jsx?|svelte|vue)$/);
1313
return {
1414
name: 'storybook:strip-hmr-boundary-plugin',
1515
enforce: 'post',

code/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,6 @@
355355
"deep-object-diff": "^1.1.0",
356356
"dequal": "^2.0.2",
357357
"detect-indent": "^7.0.1",
358-
"detect-package-manager": "^3.0.2",
359358
"detect-port": "^1.3.0",
360359
"diff": "^5.2.0",
361360
"downshift": "^9.0.4",
@@ -383,6 +382,7 @@
383382
"nanoid": "^4.0.2",
384383
"npmlog": "^7.0.0",
385384
"open": "^8.4.0",
385+
"package-manager-detector": "^1.1.0",
386386
"picocolors": "^1.1.0",
387387
"picomatch": "^2.3.0",
388388
"picoquery": "^1.4.0",

code/core/src/telemetry/storybook-metadata.test.ts

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,24 @@ import path from 'node:path';
33
import type { MockInstance } from 'vitest';
44
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
55

6+
import { getProjectRoot } from '@storybook/core/common';
67
import type { PackageJson, StorybookConfig } from '@storybook/core/types';
78

9+
import { detect } from 'package-manager-detector';
10+
11+
import { getMonorepoType } from '../telemetry/get-monorepo-type';
12+
import {
13+
getActualPackageJson,
14+
getActualPackageVersion,
15+
getActualPackageVersions,
16+
} from './package-json';
817
import { computeStorybookMetadata, metaFrameworks, sanitizeAddonName } from './storybook-metadata';
918

19+
vi.mock(import('./package-json'), { spy: true });
20+
vi.mock(import('./get-monorepo-type'), { spy: true });
21+
vi.mock(import('package-manager-detector'), { spy: true });
22+
vi.mock(import('@storybook/core/common'), { spy: true });
23+
1024
const packageJsonMock: PackageJson = {
1125
name: 'some-user-project',
1226
version: 'x.x.x',
@@ -18,46 +32,32 @@ const mainJsMock: StorybookConfig = {
1832
stories: [],
1933
};
2034

21-
vi.mock('./package-json', () => {
22-
const getActualPackageVersion = vi.fn((name) =>
23-
Promise.resolve({
24-
name,
25-
version: 'x.x.x',
26-
})
27-
);
35+
beforeEach(() => {
36+
vi.mocked(detect).mockImplementation(async () => ({
37+
name: 'yarn',
38+
version: '3.1.1',
39+
agent: 'yarn@berry',
40+
}));
2841

29-
const getActualPackageVersions = vi.fn((packages) =>
30-
Promise.all(Object.keys(packages).map(getActualPackageVersion))
31-
);
42+
vi.mocked(getProjectRoot).mockImplementation(() => process.cwd());
43+
44+
vi.mocked(getMonorepoType).mockImplementation(() => 'Nx');
3245

33-
const getActualPackageJson = vi.fn(() => ({
46+
vi.mocked(getActualPackageJson).mockImplementation(async () => ({
3447
dependencies: {
3548
'@storybook/react': 'x.x.x',
3649
'@storybook/builder-vite': 'x.x.x',
3750
},
3851
}));
3952

40-
return {
41-
getActualPackageVersions,
42-
getActualPackageVersion,
43-
getActualPackageJson,
44-
};
45-
});
46-
47-
vi.mock('./get-monorepo-type', () => ({
48-
getMonorepoType: () => 'Nx',
49-
}));
50-
51-
vi.mock('detect-package-manager', () => ({
52-
detect: () => 'Yarn',
53-
getNpmVersion: () => '3.1.1',
54-
}));
53+
vi.mocked(getActualPackageVersion).mockImplementation(async (name) => ({
54+
name,
55+
version: 'x.x.x',
56+
}));
5557

56-
vi.mock('@storybook/core/common', async (importOriginal) => {
57-
return {
58-
...(await importOriginal<typeof import('@storybook/core/common')>()),
59-
getProjectRoot: () => process.cwd(),
60-
};
58+
vi.mocked(getActualPackageVersions).mockImplementation((packages) =>
59+
Promise.all(Object.keys(packages).map(getActualPackageVersion))
60+
);
6161
});
6262

6363
const originalSep = path.sep;

code/core/src/telemetry/storybook-metadata.ts

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@ import {
55
getStorybookConfiguration,
66
getStorybookInfo,
77
loadMainConfig,
8+
versions,
89
} from '@storybook/core/common';
910
import type { PackageJson, StorybookConfig } from '@storybook/core/types';
1011

1112
import { readConfig } from '@storybook/core/csf-tools';
1213

13-
import { detect, getNpmVersion } from 'detect-package-manager';
1414
import { findPackage, findPackagePath } from 'fd-package-json';
15+
import { detect } from 'package-manager-detector';
1516

1617
import { getApplicationFileCount } from './get-application-file-count';
1718
import { getChromaticVersionSpecifier } from './get-chromatic-version';
@@ -51,7 +52,7 @@ export const computeStorybookMetadata = async ({
5152
}: {
5253
packageJsonPath: string;
5354
packageJson: PackageJson;
54-
mainConfig: StorybookConfig & Record<string, any>;
55+
mainConfig?: StorybookConfig & Record<string, any>;
5556
}): Promise<StorybookMetadata> => {
5657
const metadata: Partial<StorybookMetadata> = {
5758
generatedAt: new Date().getTime(),
@@ -115,16 +116,27 @@ export const computeStorybookMetadata = async ({
115116

116117
try {
117118
const packageManagerType = await detect({ cwd: getProjectRoot() });
118-
const packageManagerVersion = await getNpmVersion(packageManagerType);
119+
if (packageManagerType) {
120+
metadata.packageManager = {
121+
type: packageManagerType.name,
122+
version: packageManagerType.version,
123+
agent: packageManagerType.agent,
124+
};
125+
}
119126

120-
metadata.packageManager = {
121-
type: packageManagerType,
122-
version: packageManagerVersion,
123-
};
124127
// Better be safe than sorry, some codebases/paths might end up breaking with something like "spawn pnpm ENOENT"
125128
// so we just set the package manager if the detection is successful
126129
} catch (err) {}
127130

131+
const language = allDependencies.typescript ? 'typescript' : 'javascript';
132+
133+
if (!mainConfig) {
134+
return {
135+
...metadata,
136+
storybookVersionSpecifier: versions.storybook,
137+
language,
138+
};
139+
}
128140
metadata.hasCustomBabel = !!mainConfig.babel;
129141
metadata.hasCustomWebpack = !!mainConfig.webpackFinal;
130142
metadata.hasStaticDirs = !!mainConfig.staticDirs;
@@ -196,8 +208,6 @@ export const computeStorybookMetadata = async ({
196208
storybookPackages[name].version = version;
197209
});
198210

199-
const language = allDependencies.typescript ? 'typescript' : 'javascript';
200-
201211
const hasStorybookEslint = !!allDependencies['eslint-plugin-storybook'];
202212

203213
const storybookInfo = getStorybookInfo(packageJson);
@@ -268,7 +278,7 @@ export const getStorybookMetadata = async (_configDir?: string) => {
268278
'--config-dir'
269279
) as string)) ??
270280
'.storybook';
271-
const mainConfig = await loadMainConfig({ configDir });
281+
const mainConfig = await loadMainConfig({ configDir }).catch(() => undefined);
272282
cachedMetadata = await computeStorybookMetadata({ mainConfig, packageJson, packageJsonPath });
273283
return cachedMetadata;
274284
};

code/core/src/telemetry/types.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { StorybookConfig, TypescriptOptions } from '@storybook/core/types';
22

3-
import type { PM } from 'detect-package-manager';
3+
import type { DetectResult } from 'package-manager-detector';
44

55
import type { MonorepoType } from './get-monorepo-type';
66

@@ -47,8 +47,9 @@ export type StorybookMetadata = {
4747
renderer?: string;
4848
monorepo?: MonorepoType;
4949
packageManager?: {
50-
type: PM;
51-
version: string;
50+
type: DetectResult['name'];
51+
version: DetectResult['version'];
52+
agent: DetectResult['agent'];
5253
};
5354
typescriptOptions?: Partial<TypescriptOptions>;
5455
addons?: Record<string, StorybookAddon>;

code/frameworks/angular/package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,17 @@
2323
"exports": {
2424
".": {
2525
"types": "./dist/index.d.ts",
26-
"node": "./dist/index.js",
2726
"import": "./dist/index.mjs",
2827
"require": "./dist/index.js"
2928
},
3029
"./preset": "./preset.js",
3130
"./node": {
3231
"types": "./dist/node/index.d.ts",
33-
"node": "./dist/node/index.js",
3432
"import": "./dist/node/index.js",
3533
"require": "./dist/node/index.js"
3634
},
37-
"./package.json": "./package.json"
35+
"./package.json": "./package.json",
36+
"./*": "./*"
3837
},
3938
"main": "dist/index.js",
4039
"module": "dist/index.mjs",

code/frameworks/ember/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
"import": "./dist/node/index.js",
3131
"require": "./dist/node/index.js"
3232
},
33-
"./package.json": "./package.json"
33+
"./package.json": "./package.json",
34+
"./*": "./*"
3435
},
3536
"main": "dist/index.js",
3637
"module": "dist/index.mjs",

code/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,5 +303,6 @@
303303
"Dependency Upgrades"
304304
]
305305
]
306-
}
306+
},
307+
"deferredNextVersion": "8.6.8"
307308
}

code/renderers/react/src/act-compat.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
// https://github.com/testing-library/react-testing-library/blob/3dcd8a9649e25054c0e650d95fca2317b7008576/src/act-compat.js
33
import * as React from 'react';
44

5-
import * as DeprecatedReactTestUtils from 'react-dom/test-utils';
6-
75
declare const globalThis: {
86
IS_REACT_ACT_ENVIRONMENT: boolean;
97
};
@@ -13,9 +11,6 @@ declare const globalThis: {
1311
// We do check if act exists, but webpack will still throw an error on compile time
1412
const clonedReact = { ...React };
1513

16-
const reactAct =
17-
typeof clonedReact.act === 'function' ? clonedReact.act : DeprecatedReactTestUtils.act;
18-
1914
export function setReactActEnvironment(isReactActEnvironment: boolean) {
2015
globalThis.IS_REACT_ACT_ENVIRONMENT = isReactActEnvironment;
2116
}
@@ -67,7 +62,15 @@ function withGlobalActEnvironment(actImplementation: (callback: () => void) => P
6762
};
6863
}
6964

70-
export const act =
71-
process.env.NODE_ENV === 'production'
65+
export const getAct = async () => {
66+
// Lazy loading this makes sure that @storybook/react can be loaded in SSR contexts
67+
// For example when SSR'ing portable stories
68+
const reactAct =
69+
typeof clonedReact.act === 'function'
70+
? clonedReact.act
71+
: (await import('react-dom/test-utils')).act;
72+
73+
return process.env.NODE_ENV === 'production'
7274
? (cb: (...args: any[]) => any) => cb()
7375
: withGlobalActEnvironment(reactAct);
76+
};

0 commit comments

Comments
 (0)