mirror of
https://github.com/storybookjs/storybook.git
synced 2025-04-09 00:19:13 +08:00
Merge branch 'next' into next
This commit is contained in:
commit
c32b7f9bab
@ -1,3 +1,13 @@
|
||||
## 8.1.0-alpha.6
|
||||
|
||||
- CLI: Add --config-dir flag to migrate command - [#26721](https://github.com/storybookjs/storybook/pull/26721), thanks @yannbf!
|
||||
- Core: Add `duration` and `onClick` support to Notification API and improve Notification UI - [#26696](https://github.com/storybookjs/storybook/pull/26696), thanks @ghengeveld!
|
||||
- Dependency: Bump es-module-lexer - [#26737](https://github.com/storybookjs/storybook/pull/26737), thanks @valentinpalkovic!
|
||||
- Dependency: Update globby dependency - [#26733](https://github.com/storybookjs/storybook/pull/26733), thanks @valentinpalkovic!
|
||||
- Dependency: Update postcss-loader in Next.js framework - [#26707](https://github.com/storybookjs/storybook/pull/26707), thanks @valentinpalkovic!
|
||||
- Next.js: Fix next/font usage on Windows machines - [#26700](https://github.com/storybookjs/storybook/pull/26700), thanks @valentinpalkovic!
|
||||
- Webpack: Fix sourcemap generation in webpack react-docgen-loader - [#26676](https://github.com/storybookjs/storybook/pull/26676), thanks @valentinpalkovic!
|
||||
|
||||
## 8.1.0-alpha.5
|
||||
|
||||
- Addon-docs: Fix `react-dom/server` imports breaking stories and docs - [#26557](https://github.com/storybookjs/storybook/pull/26557), thanks @JReinhold!
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-a11y",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Test component compliance with web accessibility standards",
|
||||
"keywords": [
|
||||
"a11y",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-actions",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Get UI feedback when an action is performed on an interactive element",
|
||||
"keywords": [
|
||||
"storybook",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-backgrounds",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Switch backgrounds to view components in different settings",
|
||||
"keywords": [
|
||||
"addon",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-controls",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Interact with component inputs dynamically in the Storybook UI",
|
||||
"keywords": [
|
||||
"addon",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-docs",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Document component usage and properties in Markdown",
|
||||
"keywords": [
|
||||
"addon",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-essentials",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Curated addons to bring out the best of Storybook",
|
||||
"keywords": [
|
||||
"addon",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-mdx-gfm",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "GitHub Flavored Markdown in Storybook",
|
||||
"keywords": [
|
||||
"addon",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-highlight",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Highlight DOM nodes within your stories",
|
||||
"keywords": [
|
||||
"storybook-addons",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-interactions",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Automate, test and debug user interactions",
|
||||
"keywords": [
|
||||
"storybook-addons",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-jest",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "React storybook addon that show component jest report",
|
||||
"keywords": [
|
||||
"addon",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-links",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Link stories together to build demos and prototypes with your UI components",
|
||||
"keywords": [
|
||||
"addon",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-measure",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Inspect layouts by visualizing the box model",
|
||||
"keywords": [
|
||||
"storybook-addons",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-onboarding",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook Addon Onboarding - Introduces a new onboarding experience",
|
||||
"keywords": [
|
||||
"storybook-addons",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-outline",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Outline all elements with CSS to help with layout placement and alignment",
|
||||
"keywords": [
|
||||
"storybook-addons",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-storysource",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "View a story’s source code to see how it works and paste into your app",
|
||||
"keywords": [
|
||||
"addon",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-themes",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Switch between multiple themes for you components in Storybook",
|
||||
"keywords": [
|
||||
"css",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-toolbars",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Create your own toolbar items that control story rendering",
|
||||
"keywords": [
|
||||
"addon",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-viewport",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Build responsive components by adjusting Storybook’s viewport size and orientation",
|
||||
"keywords": [
|
||||
"addon",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/builder-manager",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook manager builder",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/builder-vite",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "A plugin to run and build Storybooks with Vite",
|
||||
"homepage": "https://github.com/storybookjs/storybook/tree/next/code/builders/builder-vite/#readme",
|
||||
"bugs": {
|
||||
@ -54,7 +54,7 @@
|
||||
"@storybook/types": "workspace:*",
|
||||
"@types/find-cache-dir": "^3.2.1",
|
||||
"browser-assert": "^1.2.1",
|
||||
"es-module-lexer": "^0.9.3",
|
||||
"es-module-lexer": "^1.5.0",
|
||||
"express": "^4.17.3",
|
||||
"find-cache-dir": "^3.0.0",
|
||||
"fs-extra": "^11.1.0",
|
||||
|
@ -19,12 +19,14 @@ export async function injectExportOrderPlugin() {
|
||||
// instead of calling `await parse()` every time.
|
||||
const [, exports] = await parse(code);
|
||||
|
||||
if (exports.includes('__namedExportsOrder')) {
|
||||
const exportNames = exports.map((e) => code.substring(e.s, e.e));
|
||||
|
||||
if (exportNames.includes('__namedExportsOrder')) {
|
||||
// user has defined named exports already
|
||||
return undefined;
|
||||
}
|
||||
const s = new MagicString(code);
|
||||
const orderedExports = exports.filter((e) => e !== 'default');
|
||||
const orderedExports = exportNames.filter((e) => e !== 'default');
|
||||
s.append(`;export const __namedExportsOrder = ${JSON.stringify(orderedExports)};`);
|
||||
return {
|
||||
code: s.toString(),
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/builder-webpack5",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook framework-agnostic API",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
@ -78,7 +78,7 @@
|
||||
"cjs-module-lexer": "^1.2.3",
|
||||
"constants-browserify": "^1.0.0",
|
||||
"css-loader": "^6.7.1",
|
||||
"es-module-lexer": "^1.4.1",
|
||||
"es-module-lexer": "^1.5.0",
|
||||
"express": "^4.17.3",
|
||||
"fork-ts-checker-webpack-plugin": "^8.0.0",
|
||||
"fs-extra": "^11.1.0",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/angular",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Angular: Develop Angular components in isolation with hot reloading.",
|
||||
"keywords": [
|
||||
"storybook",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/ember",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Ember: Develop Ember Component in isolation with Hot Reloading.",
|
||||
"homepage": "https://github.com/storybookjs/storybook/tree/next/code/frameworks/ember",
|
||||
"bugs": {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/html-vite",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for HTML and Vite: Develop HTML in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/html-webpack5",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for HTML: View HTML snippets in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/nextjs",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Next.js",
|
||||
"keywords": [
|
||||
"storybook",
|
||||
@ -108,8 +108,8 @@
|
||||
"loader-utils": "^3.2.1",
|
||||
"node-polyfill-webpack-plugin": "^2.0.1",
|
||||
"pnp-webpack-plugin": "^1.7.0",
|
||||
"postcss": "^8.4.21",
|
||||
"postcss-loader": "^7.0.2",
|
||||
"postcss": "^8.4.38",
|
||||
"postcss-loader": "^8.1.1",
|
||||
"react-refresh": "^0.14.0",
|
||||
"resolve-url-loader": "^5.0.0",
|
||||
"sass-loader": "^12.4.0",
|
||||
|
@ -36,7 +36,7 @@ export const configureCss = (baseConfig: WebpackConfig, nextConfig: NextConfig):
|
||||
],
|
||||
// We transform the "target.css" files from next.js into Javascript
|
||||
// for Next.js to support fonts, so it should be ignored by the css-loader.
|
||||
exclude: /next\/.*\/target.css$/,
|
||||
exclude: /next(\\|\/|\\\\).*(\\|\/|\\\\)target\.css$/,
|
||||
};
|
||||
}
|
||||
});
|
||||
|
@ -7,7 +7,7 @@ export function configureNextFont(baseConfig: Configuration, isSWC?: boolean) {
|
||||
|
||||
if (isSWC) {
|
||||
baseConfig.module?.rules?.push({
|
||||
test: /next\/.*\/target.css$/,
|
||||
test: /next(\\|\/|\\\\).*(\\|\/|\\\\)target\.css$/,
|
||||
loader: fontLoaderPath,
|
||||
});
|
||||
} else {
|
||||
|
@ -39,13 +39,9 @@ export async function getFontFaceDeclarations(
|
||||
.map(({ prop, value }: { prop: string; value: string }) => `${prop}: ${value};`)
|
||||
.join('\n');
|
||||
|
||||
const arePathsWin32Format = /^[a-z]:\\/iu.test(options.filename);
|
||||
const cleanWin32Path = (pathString: string): string =>
|
||||
arePathsWin32Format ? pathString.replace(/\\/gu, '/') : pathString;
|
||||
|
||||
const getFontFaceCSS = () => {
|
||||
if (typeof localFontSrc === 'string') {
|
||||
const localFontPath = cleanWin32Path(path.join(parentFolder, localFontSrc));
|
||||
const localFontPath = path.join(parentFolder, localFontSrc).replaceAll('\\', '/');
|
||||
|
||||
return `@font-face {
|
||||
font-family: ${id};
|
||||
@ -55,7 +51,7 @@ export async function getFontFaceDeclarations(
|
||||
}
|
||||
return localFontSrc
|
||||
.map((font) => {
|
||||
const localFontPath = cleanWin32Path(path.join(parentFolder, font.path));
|
||||
const localFontPath = path.join(parentFolder, font.path).replaceAll('\\', '/');
|
||||
|
||||
return `@font-face {
|
||||
font-family: ${id};
|
||||
|
@ -3,6 +3,7 @@ import { getFontFaceDeclarations as getLocalFontFaceDeclarations } from './local
|
||||
import type { LoaderOptions } from './types';
|
||||
import { getCSSMeta } from './utils/get-css-meta';
|
||||
import { setFontDeclarationsInHead } from './utils/set-font-declarations-in-head';
|
||||
import path from 'path';
|
||||
|
||||
type FontFaceDeclaration = {
|
||||
id: string;
|
||||
@ -39,11 +40,19 @@ export default async function storybookNextjsFontLoader(this: any) {
|
||||
|
||||
let fontFaceDeclaration: FontFaceDeclaration | undefined;
|
||||
|
||||
if (options.source.endsWith('next/font/google') || options.source.endsWith('@next/font/google')) {
|
||||
const pathSep = path.sep;
|
||||
|
||||
if (
|
||||
options.source.endsWith(`next${pathSep}font${pathSep}google`) ||
|
||||
options.source.endsWith(`@next${pathSep}font${pathSep}google`)
|
||||
) {
|
||||
fontFaceDeclaration = await getGoogleFontFaceDeclarations(options);
|
||||
}
|
||||
|
||||
if (options.source.endsWith('next/font/local') || options.source.endsWith('@next/font/local')) {
|
||||
if (
|
||||
options.source.endsWith(`next${pathSep}font${pathSep}local`) ||
|
||||
options.source.endsWith(`@next${pathSep}font${pathSep}local`)
|
||||
) {
|
||||
fontFaceDeclaration = await getLocalFontFaceDeclarations(options, rootCtx, swcMode);
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/preact-vite",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Preact and Vite: Develop Preact components in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/preact-webpack5",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Preact: Develop Preact Component in isolation.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/react-vite",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for React and Vite: Develop React components in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/react-webpack5",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for React: Develop React Component in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/server-webpack5",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Server: View HTML snippets from a server in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/svelte-vite",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Svelte and Vite: Develop Svelte components in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/svelte-webpack5",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Svelte: Develop Svelte Component in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/sveltekit",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for SvelteKit",
|
||||
"keywords": [
|
||||
"storybook",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/vue3-vite",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Vue3 and Vite: Develop Vue3 components in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/vue3-webpack5",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Vue 3: Develop Vue 3 Components in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/web-components-vite",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for web-components and Vite: Develop Web Components in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/web-components-webpack5",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for web-components: View web components snippets in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"lit",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/channels",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "sb",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook CLI",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "storybook",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook CLI",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/cli",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook's CLI - install, dev, build, upgrade, and more",
|
||||
"keywords": [
|
||||
"cli",
|
||||
@ -80,7 +80,7 @@
|
||||
"fs-extra": "^11.1.0",
|
||||
"get-npm-tarball-url": "^2.0.3",
|
||||
"giget": "^1.0.0",
|
||||
"globby": "^11.0.2",
|
||||
"globby": "^14.0.1",
|
||||
"jscodeshift": "^0.15.1",
|
||||
"leven": "^3.1.0",
|
||||
"ora": "^5.4.1",
|
||||
|
@ -2,7 +2,6 @@ import chalk from 'chalk';
|
||||
import { dedent } from 'ts-dedent';
|
||||
import { basename } from 'path';
|
||||
import fse from 'fs-extra';
|
||||
import globby from 'globby';
|
||||
import type { Fix } from '../types';
|
||||
|
||||
const MDX1_STYLE_START = /<style>{`/g;
|
||||
@ -48,6 +47,9 @@ export const mdx1to3: Fix<Mdx1to3Options> = {
|
||||
versionRange: ['<7.0.0', '>=8.0.0-alpha.0'],
|
||||
|
||||
async check() {
|
||||
// Dynamically import globby because it is a pure ESM module
|
||||
const { globby } = await import('globby');
|
||||
|
||||
const storiesMdxFiles = await globby('./!(node_modules)**/*.(story|stories).mdx');
|
||||
return storiesMdxFiles.length ? { storiesMdxFiles } : null;
|
||||
},
|
||||
|
@ -4,7 +4,7 @@ import { mdxgfm } from './mdx-gfm';
|
||||
|
||||
vi.mock('globby', () => ({
|
||||
__esModule: true,
|
||||
default: vi.fn().mockResolvedValue(['a/fake/file.mdx']),
|
||||
globby: vi.fn().mockResolvedValue(['a/fake/file.mdx']),
|
||||
}));
|
||||
|
||||
const check = async ({
|
||||
|
@ -1,7 +1,6 @@
|
||||
import { dedent } from 'ts-dedent';
|
||||
import { join } from 'path';
|
||||
import slash from 'slash';
|
||||
import glob from 'globby';
|
||||
import { commonGlobOptions } from '@storybook/core-common';
|
||||
import { updateMainConfig } from '../helpers/mainConfigFile';
|
||||
import type { Fix } from '../types';
|
||||
@ -46,7 +45,10 @@ export const mdxgfm: Fix<Options> = {
|
||||
return false;
|
||||
}
|
||||
|
||||
const files = await glob(pattern, commonGlobOptions(pattern));
|
||||
// Dynamically import globby because it is a pure ESM module
|
||||
const { globby } = await import('globby');
|
||||
|
||||
const files = await globby(pattern, commonGlobOptions(pattern));
|
||||
|
||||
return files.some((f) => f.endsWith('.mdx'));
|
||||
}, Promise.resolve(false));
|
||||
|
@ -126,6 +126,7 @@ command('migrate [migration]')
|
||||
.option('-l --list', 'List available migrations')
|
||||
.option('-g --glob <glob>', 'Glob for files upon which to apply the migration', '**/*.js')
|
||||
.option('-p --parser <babel | babylon | flow | ts | tsx>', 'jscodeshift parser')
|
||||
.option('-c, --config-dir <dir-name>', 'Directory where to load Storybook configurations from')
|
||||
.option(
|
||||
'-n --dry-run',
|
||||
'Dry run: verify the migration exists and show the files to which it will be applied'
|
||||
@ -142,7 +143,6 @@ command('migrate [migration]')
|
||||
list,
|
||||
rename,
|
||||
parser,
|
||||
logger: consoleLogger,
|
||||
}).catch((err) => {
|
||||
logger.error(err);
|
||||
process.exit(1);
|
||||
|
@ -11,7 +11,25 @@ import { getStorybookVersionSpecifier } from './helpers';
|
||||
|
||||
const logger = console;
|
||||
|
||||
export async function migrate(migration: any, { glob, dryRun, list, rename, parser }: any) {
|
||||
type CLIOptions = {
|
||||
glob: string;
|
||||
configDir?: string;
|
||||
dryRun?: boolean;
|
||||
list?: string[];
|
||||
/**
|
||||
* Rename suffix of matching files after codemod has been applied, e.g. ".js:.ts"
|
||||
*/
|
||||
rename?: string;
|
||||
/**
|
||||
* jscodeshift parser
|
||||
*/
|
||||
parser?: 'babel' | 'babylon' | 'flow' | 'ts' | 'tsx';
|
||||
};
|
||||
|
||||
export async function migrate(
|
||||
migration: any,
|
||||
{ glob, dryRun, list, rename, parser, configDir: userSpecifiedConfigDir }: CLIOptions
|
||||
) {
|
||||
if (list) {
|
||||
listCodemods().forEach((key: any) => logger.log(key));
|
||||
} else if (migration) {
|
||||
@ -19,13 +37,14 @@ export async function migrate(migration: any, { glob, dryRun, list, rename, pars
|
||||
const packageManager = JsPackageManagerFactory.getPackageManager();
|
||||
|
||||
const [packageJson, storybookVersion] = await Promise.all([
|
||||
//
|
||||
packageManager.retrievePackageJson(),
|
||||
getCoercedStorybookVersion(packageManager),
|
||||
]);
|
||||
const { configDir: inferredConfigDir, mainConfig: mainConfigPath } =
|
||||
getStorybookInfo(packageJson);
|
||||
const configDir = inferredConfigDir || '.storybook';
|
||||
const { configDir: inferredConfigDir, mainConfig: mainConfigPath } = getStorybookInfo(
|
||||
packageJson,
|
||||
userSpecifiedConfigDir
|
||||
);
|
||||
const configDir = userSpecifiedConfigDir || inferredConfigDir || '.storybook';
|
||||
|
||||
// GUARDS
|
||||
if (!storybookVersion) {
|
||||
|
@ -1,10 +1,21 @@
|
||||
import { describe, beforeEach, it, expect, vi } from 'vitest';
|
||||
import globby from 'globby';
|
||||
import { logger } from '@storybook/node-logger';
|
||||
import { warn } from './warn';
|
||||
|
||||
vi.mock('@storybook/node-logger');
|
||||
vi.mock('globby');
|
||||
|
||||
const mocks = vi.hoisted(() => {
|
||||
return {
|
||||
globby: vi.fn(),
|
||||
};
|
||||
});
|
||||
|
||||
vi.mock('globby', async (importOriginal) => {
|
||||
return {
|
||||
...(await importOriginal<typeof import('globby')>()),
|
||||
globby: mocks.globby,
|
||||
};
|
||||
});
|
||||
|
||||
describe('warn', () => {
|
||||
beforeEach(() => {
|
||||
@ -21,17 +32,17 @@ describe('warn', () => {
|
||||
});
|
||||
|
||||
describe('when TypeScript is not installed as a dependency', () => {
|
||||
it('should not warn if `.tsx?` files are not found', () => {
|
||||
vi.mocked(globby.sync).mockReturnValueOnce([]);
|
||||
warn({
|
||||
it('should not warn if `.tsx?` files are not found', async () => {
|
||||
mocks.globby.mockResolvedValue([]);
|
||||
await warn({
|
||||
hasTSDependency: false,
|
||||
});
|
||||
expect(logger.warn).toHaveBeenCalledTimes(0);
|
||||
});
|
||||
|
||||
it('should warn if `.tsx?` files are found', () => {
|
||||
vi.mocked(globby.sync).mockReturnValueOnce(['a.ts']);
|
||||
warn({
|
||||
it('should warn if `.tsx?` files are found', async () => {
|
||||
mocks.globby.mockResolvedValue(['a.ts']);
|
||||
await warn({
|
||||
hasTSDependency: false,
|
||||
});
|
||||
expect(logger.warn).toHaveBeenCalledTimes(2);
|
||||
|
@ -1,13 +1,18 @@
|
||||
import globby from 'globby';
|
||||
import { logger } from '@storybook/node-logger';
|
||||
|
||||
interface Options {
|
||||
hasTSDependency: boolean;
|
||||
}
|
||||
|
||||
export const warn = ({ hasTSDependency }: Options) => {
|
||||
export const warn = async ({ hasTSDependency }: Options) => {
|
||||
if (!hasTSDependency) {
|
||||
const hasTSFiles = !!globby.sync(['**/*.@(ts|tsx)', '!**/node_modules', '!**/*.d.ts']).length;
|
||||
// Dynamically import globby because it is a pure ESM module
|
||||
const { globby } = await import('globby');
|
||||
|
||||
const files = await globby(['**/*.@(ts|tsx)', '!**/node_modules', '!**/*.d.ts']);
|
||||
|
||||
const hasTSFiles = !!files.length;
|
||||
|
||||
if (hasTSFiles) {
|
||||
logger.warn(
|
||||
'We have detected TypeScript files in your project directory, however TypeScript is not listed as a project dependency.'
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/client-logger",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/codemod",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "A collection of codemod scripts written with JSCodeshift",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
@ -63,7 +63,7 @@
|
||||
"@storybook/types": "workspace:*",
|
||||
"@types/cross-spawn": "^6.0.2",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"globby": "^11.0.2",
|
||||
"globby": "^14.0.1",
|
||||
"jscodeshift": "^0.15.1",
|
||||
"lodash": "^4.17.21",
|
||||
"prettier": "^3.1.1",
|
||||
|
@ -2,7 +2,6 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { promisify } from 'util';
|
||||
import globby from 'globby';
|
||||
import { sync as spawnSync } from 'cross-spawn';
|
||||
import { jscodeshiftToPrettierParser } from './lib/utils';
|
||||
|
||||
@ -63,6 +62,9 @@ export async function runCodemod(
|
||||
if (knownParser !== 'babel') inferredParser = extension;
|
||||
}
|
||||
|
||||
// Dynamically import globby because it is a pure ESM module
|
||||
const { globby } = await import('globby');
|
||||
|
||||
const files = await globby([glob, '!**/node_modules', '!**/dist']);
|
||||
const extensions = new Set(files.map((file) => path.extname(file).slice(1)));
|
||||
const commaSeparatedExtensions = Array.from(extensions).join(',');
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/core-common",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook framework-agnostic API",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { describe, beforeEach, it, expect, vi } from 'vitest';
|
||||
import dedent from 'ts-dedent';
|
||||
import { Yarn2Proxy } from './Yarn2Proxy';
|
||||
|
||||
describe('Yarn 2 Proxy', () => {
|
||||
|
@ -36,6 +36,7 @@ const CRITICAL_YARN2_ERROR_CODES = {
|
||||
YN0083: 'AUTOMERGE_GIT_ERROR',
|
||||
};
|
||||
|
||||
// @ts-expect-error The error codes might be helpful in the future
|
||||
const YARN2_ERROR_CODES = {
|
||||
...CRITICAL_YARN2_ERROR_CODES,
|
||||
YN0000: 'UNNAMED',
|
||||
@ -306,10 +307,12 @@ export class Yarn2Proxy extends JsPackageManager {
|
||||
while ((match = regex.exec(logs)) !== null) {
|
||||
const code = match[1];
|
||||
const message = match[2].replace(/[┌│└]/g, '').trim();
|
||||
if (CRITICAL_YARN2_ERROR_CODES[code]) {
|
||||
if (code in CRITICAL_YARN2_ERROR_CODES) {
|
||||
errorCodesWithMessages.push({
|
||||
code,
|
||||
message: `${CRITICAL_YARN2_ERROR_CODES[code]}\n-> ${message}\n`,
|
||||
message: `${
|
||||
CRITICAL_YARN2_ERROR_CODES[code as keyof typeof CRITICAL_YARN2_ERROR_CODES]
|
||||
}\n-> ${message}\n`,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -1,83 +1,83 @@
|
||||
// auto generated file, do not edit
|
||||
export default {
|
||||
'@storybook/addon-a11y': '8.1.0-alpha.5',
|
||||
'@storybook/addon-actions': '8.1.0-alpha.5',
|
||||
'@storybook/addon-backgrounds': '8.1.0-alpha.5',
|
||||
'@storybook/addon-controls': '8.1.0-alpha.5',
|
||||
'@storybook/addon-docs': '8.1.0-alpha.5',
|
||||
'@storybook/addon-essentials': '8.1.0-alpha.5',
|
||||
'@storybook/addon-highlight': '8.1.0-alpha.5',
|
||||
'@storybook/addon-interactions': '8.1.0-alpha.5',
|
||||
'@storybook/addon-jest': '8.1.0-alpha.5',
|
||||
'@storybook/addon-links': '8.1.0-alpha.5',
|
||||
'@storybook/addon-mdx-gfm': '8.1.0-alpha.5',
|
||||
'@storybook/addon-measure': '8.1.0-alpha.5',
|
||||
'@storybook/addon-onboarding': '8.1.0-alpha.5',
|
||||
'@storybook/addon-outline': '8.1.0-alpha.5',
|
||||
'@storybook/addon-storysource': '8.1.0-alpha.5',
|
||||
'@storybook/addon-themes': '8.1.0-alpha.5',
|
||||
'@storybook/addon-toolbars': '8.1.0-alpha.5',
|
||||
'@storybook/addon-viewport': '8.1.0-alpha.5',
|
||||
'@storybook/angular': '8.1.0-alpha.5',
|
||||
'@storybook/blocks': '8.1.0-alpha.5',
|
||||
'@storybook/builder-manager': '8.1.0-alpha.5',
|
||||
'@storybook/builder-vite': '8.1.0-alpha.5',
|
||||
'@storybook/builder-webpack5': '8.1.0-alpha.5',
|
||||
'@storybook/channels': '8.1.0-alpha.5',
|
||||
'@storybook/cli': '8.1.0-alpha.5',
|
||||
'@storybook/client-logger': '8.1.0-alpha.5',
|
||||
'@storybook/codemod': '8.1.0-alpha.5',
|
||||
'@storybook/components': '8.1.0-alpha.5',
|
||||
'@storybook/core-common': '8.1.0-alpha.5',
|
||||
'@storybook/core-events': '8.1.0-alpha.5',
|
||||
'@storybook/core-server': '8.1.0-alpha.5',
|
||||
'@storybook/core-webpack': '8.1.0-alpha.5',
|
||||
'@storybook/csf-plugin': '8.1.0-alpha.5',
|
||||
'@storybook/csf-tools': '8.1.0-alpha.5',
|
||||
'@storybook/docs-tools': '8.1.0-alpha.5',
|
||||
'@storybook/ember': '8.1.0-alpha.5',
|
||||
'@storybook/html': '8.1.0-alpha.5',
|
||||
'@storybook/html-vite': '8.1.0-alpha.5',
|
||||
'@storybook/html-webpack5': '8.1.0-alpha.5',
|
||||
'@storybook/instrumenter': '8.1.0-alpha.5',
|
||||
'@storybook/manager': '8.1.0-alpha.5',
|
||||
'@storybook/manager-api': '8.1.0-alpha.5',
|
||||
'@storybook/nextjs': '8.1.0-alpha.5',
|
||||
'@storybook/node-logger': '8.1.0-alpha.5',
|
||||
'@storybook/preact': '8.1.0-alpha.5',
|
||||
'@storybook/preact-vite': '8.1.0-alpha.5',
|
||||
'@storybook/preact-webpack5': '8.1.0-alpha.5',
|
||||
'@storybook/preset-create-react-app': '8.1.0-alpha.5',
|
||||
'@storybook/preset-html-webpack': '8.1.0-alpha.5',
|
||||
'@storybook/preset-preact-webpack': '8.1.0-alpha.5',
|
||||
'@storybook/preset-react-webpack': '8.1.0-alpha.5',
|
||||
'@storybook/preset-server-webpack': '8.1.0-alpha.5',
|
||||
'@storybook/preset-svelte-webpack': '8.1.0-alpha.5',
|
||||
'@storybook/preset-vue3-webpack': '8.1.0-alpha.5',
|
||||
'@storybook/preview': '8.1.0-alpha.5',
|
||||
'@storybook/preview-api': '8.1.0-alpha.5',
|
||||
'@storybook/react': '8.1.0-alpha.5',
|
||||
'@storybook/react-dom-shim': '8.1.0-alpha.5',
|
||||
'@storybook/react-vite': '8.1.0-alpha.5',
|
||||
'@storybook/react-webpack5': '8.1.0-alpha.5',
|
||||
'@storybook/router': '8.1.0-alpha.5',
|
||||
'@storybook/server': '8.1.0-alpha.5',
|
||||
'@storybook/server-webpack5': '8.1.0-alpha.5',
|
||||
'@storybook/source-loader': '8.1.0-alpha.5',
|
||||
'@storybook/svelte': '8.1.0-alpha.5',
|
||||
'@storybook/svelte-vite': '8.1.0-alpha.5',
|
||||
'@storybook/svelte-webpack5': '8.1.0-alpha.5',
|
||||
'@storybook/sveltekit': '8.1.0-alpha.5',
|
||||
'@storybook/telemetry': '8.1.0-alpha.5',
|
||||
'@storybook/test': '8.1.0-alpha.5',
|
||||
'@storybook/theming': '8.1.0-alpha.5',
|
||||
'@storybook/types': '8.1.0-alpha.5',
|
||||
'@storybook/vue3': '8.1.0-alpha.5',
|
||||
'@storybook/vue3-vite': '8.1.0-alpha.5',
|
||||
'@storybook/vue3-webpack5': '8.1.0-alpha.5',
|
||||
'@storybook/web-components': '8.1.0-alpha.5',
|
||||
'@storybook/web-components-vite': '8.1.0-alpha.5',
|
||||
'@storybook/web-components-webpack5': '8.1.0-alpha.5',
|
||||
sb: '8.1.0-alpha.5',
|
||||
storybook: '8.1.0-alpha.5',
|
||||
'@storybook/addon-a11y': '8.1.0-alpha.6',
|
||||
'@storybook/addon-actions': '8.1.0-alpha.6',
|
||||
'@storybook/addon-backgrounds': '8.1.0-alpha.6',
|
||||
'@storybook/addon-controls': '8.1.0-alpha.6',
|
||||
'@storybook/addon-docs': '8.1.0-alpha.6',
|
||||
'@storybook/addon-essentials': '8.1.0-alpha.6',
|
||||
'@storybook/addon-highlight': '8.1.0-alpha.6',
|
||||
'@storybook/addon-interactions': '8.1.0-alpha.6',
|
||||
'@storybook/addon-jest': '8.1.0-alpha.6',
|
||||
'@storybook/addon-links': '8.1.0-alpha.6',
|
||||
'@storybook/addon-mdx-gfm': '8.1.0-alpha.6',
|
||||
'@storybook/addon-measure': '8.1.0-alpha.6',
|
||||
'@storybook/addon-onboarding': '8.1.0-alpha.6',
|
||||
'@storybook/addon-outline': '8.1.0-alpha.6',
|
||||
'@storybook/addon-storysource': '8.1.0-alpha.6',
|
||||
'@storybook/addon-themes': '8.1.0-alpha.6',
|
||||
'@storybook/addon-toolbars': '8.1.0-alpha.6',
|
||||
'@storybook/addon-viewport': '8.1.0-alpha.6',
|
||||
'@storybook/angular': '8.1.0-alpha.6',
|
||||
'@storybook/blocks': '8.1.0-alpha.6',
|
||||
'@storybook/builder-manager': '8.1.0-alpha.6',
|
||||
'@storybook/builder-vite': '8.1.0-alpha.6',
|
||||
'@storybook/builder-webpack5': '8.1.0-alpha.6',
|
||||
'@storybook/channels': '8.1.0-alpha.6',
|
||||
'@storybook/cli': '8.1.0-alpha.6',
|
||||
'@storybook/client-logger': '8.1.0-alpha.6',
|
||||
'@storybook/codemod': '8.1.0-alpha.6',
|
||||
'@storybook/components': '8.1.0-alpha.6',
|
||||
'@storybook/core-common': '8.1.0-alpha.6',
|
||||
'@storybook/core-events': '8.1.0-alpha.6',
|
||||
'@storybook/core-server': '8.1.0-alpha.6',
|
||||
'@storybook/core-webpack': '8.1.0-alpha.6',
|
||||
'@storybook/csf-plugin': '8.1.0-alpha.6',
|
||||
'@storybook/csf-tools': '8.1.0-alpha.6',
|
||||
'@storybook/docs-tools': '8.1.0-alpha.6',
|
||||
'@storybook/ember': '8.1.0-alpha.6',
|
||||
'@storybook/html': '8.1.0-alpha.6',
|
||||
'@storybook/html-vite': '8.1.0-alpha.6',
|
||||
'@storybook/html-webpack5': '8.1.0-alpha.6',
|
||||
'@storybook/instrumenter': '8.1.0-alpha.6',
|
||||
'@storybook/manager': '8.1.0-alpha.6',
|
||||
'@storybook/manager-api': '8.1.0-alpha.6',
|
||||
'@storybook/nextjs': '8.1.0-alpha.6',
|
||||
'@storybook/node-logger': '8.1.0-alpha.6',
|
||||
'@storybook/preact': '8.1.0-alpha.6',
|
||||
'@storybook/preact-vite': '8.1.0-alpha.6',
|
||||
'@storybook/preact-webpack5': '8.1.0-alpha.6',
|
||||
'@storybook/preset-create-react-app': '8.1.0-alpha.6',
|
||||
'@storybook/preset-html-webpack': '8.1.0-alpha.6',
|
||||
'@storybook/preset-preact-webpack': '8.1.0-alpha.6',
|
||||
'@storybook/preset-react-webpack': '8.1.0-alpha.6',
|
||||
'@storybook/preset-server-webpack': '8.1.0-alpha.6',
|
||||
'@storybook/preset-svelte-webpack': '8.1.0-alpha.6',
|
||||
'@storybook/preset-vue3-webpack': '8.1.0-alpha.6',
|
||||
'@storybook/preview': '8.1.0-alpha.6',
|
||||
'@storybook/preview-api': '8.1.0-alpha.6',
|
||||
'@storybook/react': '8.1.0-alpha.6',
|
||||
'@storybook/react-dom-shim': '8.1.0-alpha.6',
|
||||
'@storybook/react-vite': '8.1.0-alpha.6',
|
||||
'@storybook/react-webpack5': '8.1.0-alpha.6',
|
||||
'@storybook/router': '8.1.0-alpha.6',
|
||||
'@storybook/server': '8.1.0-alpha.6',
|
||||
'@storybook/server-webpack5': '8.1.0-alpha.6',
|
||||
'@storybook/source-loader': '8.1.0-alpha.6',
|
||||
'@storybook/svelte': '8.1.0-alpha.6',
|
||||
'@storybook/svelte-vite': '8.1.0-alpha.6',
|
||||
'@storybook/svelte-webpack5': '8.1.0-alpha.6',
|
||||
'@storybook/sveltekit': '8.1.0-alpha.6',
|
||||
'@storybook/telemetry': '8.1.0-alpha.6',
|
||||
'@storybook/test': '8.1.0-alpha.6',
|
||||
'@storybook/theming': '8.1.0-alpha.6',
|
||||
'@storybook/types': '8.1.0-alpha.6',
|
||||
'@storybook/vue3': '8.1.0-alpha.6',
|
||||
'@storybook/vue3-vite': '8.1.0-alpha.6',
|
||||
'@storybook/vue3-webpack5': '8.1.0-alpha.6',
|
||||
'@storybook/web-components': '8.1.0-alpha.6',
|
||||
'@storybook/web-components-vite': '8.1.0-alpha.6',
|
||||
'@storybook/web-components-webpack5': '8.1.0-alpha.6',
|
||||
sb: '8.1.0-alpha.6',
|
||||
storybook: '8.1.0-alpha.6',
|
||||
};
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/core-events",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Event names used in storybook core",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/core-server",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook framework-agnostic API",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
@ -83,7 +83,7 @@
|
||||
"detect-port": "^1.3.0",
|
||||
"express": "^4.17.3",
|
||||
"fs-extra": "^11.1.0",
|
||||
"globby": "^11.0.2",
|
||||
"globby": "^14.0.1",
|
||||
"ip": "^2.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"open": "^8.4.0",
|
||||
|
@ -1,7 +1,6 @@
|
||||
import path from 'path';
|
||||
import chalk from 'chalk';
|
||||
import fs from 'fs-extra';
|
||||
import glob from 'globby';
|
||||
import slash from 'slash';
|
||||
import invariant from 'tiny-invariant';
|
||||
|
||||
@ -124,7 +123,11 @@ export class StoryIndexGenerator {
|
||||
const fullGlob = slash(
|
||||
path.join(this.options.workingDir, specifier.directory, specifier.files)
|
||||
);
|
||||
const files = await glob(fullGlob, commonGlobOptions(fullGlob));
|
||||
|
||||
// Dynamically import globby because it is a pure ESM module
|
||||
const { globby } = await import('globby');
|
||||
|
||||
const files = await globby(fullGlob, commonGlobOptions(fullGlob));
|
||||
|
||||
if (files.length === 0) {
|
||||
once.warn(
|
||||
|
@ -2,7 +2,6 @@ import Watchpack from 'watchpack';
|
||||
import slash from 'slash';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import glob from 'globby';
|
||||
import uniq from 'lodash/uniq.js';
|
||||
|
||||
import type { NormalizedStoriesSpecifier, Path } from '@storybook/types';
|
||||
@ -74,8 +73,12 @@ export function watchStorySpecifiers(
|
||||
// because the directoru could already be within the files part (e.g. './x/foo/bar')
|
||||
path.basename(specifier.files)
|
||||
);
|
||||
|
||||
// Dynamically import globby because it is a pure ESM module
|
||||
const { globby } = await import('globby');
|
||||
|
||||
// glob only supports forward slashes
|
||||
const files = await glob(slash(dirGlob), commonGlobOptions(dirGlob));
|
||||
const files = await globby(slash(dirGlob), commonGlobOptions(dirGlob));
|
||||
|
||||
files.forEach((filePath) => {
|
||||
const fileImportPath = toImportPath(
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/core-webpack",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook framework-agnostic API",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/csf-plugin",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Enrich CSF files via static analysis",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/csf-tools",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Parse and manipulate CSF and Storybook config files",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/docs-tools",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Shared utility functions for frameworks to implement docs",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/instrumenter",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/manager-api",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Core Storybook Manager API & Context",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,4 +1,5 @@
|
||||
import type { API_Notification } from '@storybook/types';
|
||||
import partition from 'lodash/partition.js';
|
||||
import type { ModuleFn } from '../lib/types';
|
||||
|
||||
export interface SubState {
|
||||
@ -25,26 +26,24 @@ export interface SubAPI {
|
||||
|
||||
export const init: ModuleFn = ({ store }) => {
|
||||
const api: SubAPI = {
|
||||
addNotification: (notification) => {
|
||||
// Get rid of it if already exists
|
||||
api.clearNotification(notification.id);
|
||||
|
||||
const { notifications } = store.getState();
|
||||
|
||||
store.setState({ notifications: [...notifications, notification] });
|
||||
addNotification: (newNotification) => {
|
||||
store.setState(({ notifications }) => {
|
||||
const [existing, others] = partition(notifications, (n) => n.id === newNotification.id);
|
||||
existing.forEach((notification) => {
|
||||
if (notification.onClear) notification.onClear({ dismissed: false, timeout: false });
|
||||
});
|
||||
return { notifications: [...others, newNotification] };
|
||||
});
|
||||
},
|
||||
|
||||
clearNotification: (id) => {
|
||||
const { notifications } = store.getState();
|
||||
|
||||
const notification = notifications.find((n) => n.id === id);
|
||||
|
||||
if (notification) {
|
||||
store.setState({ notifications: notifications.filter((n) => n.id !== id) });
|
||||
if (notification.onClear) {
|
||||
notification.onClear({ dismissed: false });
|
||||
}
|
||||
}
|
||||
clearNotification: (notificationId) => {
|
||||
store.setState(({ notifications }) => {
|
||||
const [matching, others] = partition(notifications, (n) => n.id === notificationId);
|
||||
matching.forEach((notification) => {
|
||||
if (notification.onClear) notification.onClear({ dismissed: false, timeout: false });
|
||||
});
|
||||
return { notifications: others };
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -2,34 +2,33 @@ import { describe, it, expect, vi } from 'vitest';
|
||||
import { init as initNotifications } from '../modules/notifications';
|
||||
|
||||
describe('notifications API', () => {
|
||||
it('allows adding notifications', () => {
|
||||
const store = {
|
||||
getState: () => ({
|
||||
notifications: [],
|
||||
}),
|
||||
setState: vi.fn(),
|
||||
};
|
||||
const store = {
|
||||
state: { notifications: [] },
|
||||
getState: () => store.state,
|
||||
setState: (update) => {
|
||||
if (typeof update === 'function') {
|
||||
store.state = update(store.state);
|
||||
} else {
|
||||
store.state = update;
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
it('allows adding notifications', () => {
|
||||
const { api } = initNotifications({ store });
|
||||
|
||||
api.addNotification({ id: '1' });
|
||||
expect(store.setState).toHaveBeenCalledWith({
|
||||
expect(store.getState()).toEqual({
|
||||
notifications: [{ id: '1' }],
|
||||
});
|
||||
});
|
||||
|
||||
it('allows removing notifications', () => {
|
||||
const store = {
|
||||
getState: () => ({
|
||||
notifications: [{ id: '1' }, { id: '2' }, { id: '3' }],
|
||||
}),
|
||||
setState: vi.fn(),
|
||||
};
|
||||
|
||||
store.setState({ notifications: [{ id: '1' }, { id: '2' }, { id: '3' }] });
|
||||
const { api } = initNotifications({ store });
|
||||
|
||||
api.clearNotification('2');
|
||||
expect(store.setState).toHaveBeenCalledWith({
|
||||
expect(store.getState()).toEqual({
|
||||
notifications: [{ id: '1' }, { id: '3' }],
|
||||
});
|
||||
});
|
||||
|
@ -1 +1 @@
|
||||
export const version = '8.1.0-alpha.5';
|
||||
export const version = '8.1.0-alpha.6';
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/node-logger",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/preview-api",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/preview",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/react-dom-shim",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/router",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Core Storybook Router",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/source-loader",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Source loader",
|
||||
"keywords": [
|
||||
"lib",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/telemetry",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Telemetry logging for crash reports and usage statistics",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/test",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/theming",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Core Storybook Components",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/types",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Core Storybook TS Types",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -115,9 +115,20 @@ export interface API_SidebarOptions {
|
||||
|
||||
interface OnClearOptions {
|
||||
/**
|
||||
* True when the user dismissed the notification.
|
||||
* True when the user manually dismissed the notification.
|
||||
*/
|
||||
dismissed: boolean;
|
||||
/**
|
||||
* True when the notification timed out after the set duration.
|
||||
*/
|
||||
timeout: boolean;
|
||||
}
|
||||
|
||||
interface OnClickOptions {
|
||||
/**
|
||||
* Function to dismiss the notification.
|
||||
*/
|
||||
onDismiss: () => void;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -130,14 +141,16 @@ interface DeprecatedIconType {
|
||||
}
|
||||
export interface API_Notification {
|
||||
id: string;
|
||||
link: string;
|
||||
content: {
|
||||
headline: string;
|
||||
subHeadline?: string | any;
|
||||
};
|
||||
duration?: number;
|
||||
link?: string;
|
||||
// TODO: Remove DeprecatedIconType in 9.0
|
||||
icon?: React.ReactNode | DeprecatedIconType;
|
||||
onClear?: (options: OnClearOptions) => void;
|
||||
onClick?: (options: OnClickOptions) => void;
|
||||
}
|
||||
|
||||
type API_Versions = Record<string, string>;
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/root",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"private": true,
|
||||
"description": "Storybook root",
|
||||
"homepage": "https://storybook.js.org/",
|
||||
@ -223,7 +223,7 @@
|
||||
"trash": "^7.0.0",
|
||||
"ts-dedent": "^2.0.0",
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^5.3.2",
|
||||
"typescript": "^5.4.3",
|
||||
"util": "^0.12.4",
|
||||
"vite": "^4.0.0",
|
||||
"vitest": "^1.2.2",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/preset-create-react-app",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Create React App preset",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
@ -50,6 +50,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.1",
|
||||
"@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0",
|
||||
"@storybook/types": "workspace:*",
|
||||
"@types/semver": "^7.5.6",
|
||||
"pnp-webpack-plugin": "^1.7.0",
|
||||
|
@ -1,4 +1,5 @@
|
||||
import type { Options } from '@storybook/types';
|
||||
|
||||
import type { PluginOptions as RDTSPluginOptions } from '@storybook/react-docgen-typescript-plugin';
|
||||
|
||||
export interface PluginOptions extends Options {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/preset-html-webpack",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for HTML: View HTML snippets in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/preset-preact-webpack",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Preact: Develop Preact Component in isolation.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/preset-react-webpack",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for React: Develop React Component in isolation with Hot Reloading",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/preset-server-webpack",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Server: View HTML snippets from a server in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/preset-svelte-webpack",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Svelte: Develop Svelte Component in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/preset-vue3-webpack",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook for Vue 3: Develop Vue 3 Components in isolation with Hot Reloading.",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/html",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook HTML renderer",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/preact",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook Preact renderer",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/react",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook React renderer",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
@ -3,7 +3,6 @@ import React from 'react';
|
||||
import { vi, it, expect, afterEach, describe } from 'vitest';
|
||||
import { render, screen, cleanup } from '@testing-library/react';
|
||||
import { addons } from '@storybook/preview-api';
|
||||
//@ts-expect-error our tsconfig.jsn#moduleResolution is set to 'node', which doesn't support this import
|
||||
|
||||
import * as addonInteractionsPreview from '@storybook/addon-interactions/preview';
|
||||
|
||||
@ -92,6 +91,7 @@ describe('projectAnnotations', () => {
|
||||
});
|
||||
|
||||
it('has spies when addon-interactions annotations are added', async () => {
|
||||
//@ts-expect-error TODO investigate
|
||||
const Story = composeStory(stories.WithActionArg, stories.default, addonInteractionsPreview);
|
||||
expect(vi.mocked(Story.args.someActionArg!).mock).toBeDefined();
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/server",
|
||||
"version": "8.1.0-alpha.5",
|
||||
"version": "8.1.0-alpha.6",
|
||||
"description": "Storybook Server renderer",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user