@modern-js/storybook-builder 2.49.4 → 2.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/build.js CHANGED
@@ -35,8 +35,6 @@ __export(build_exports, {
35
35
  });
36
36
  module.exports = __toCommonJS(build_exports);
37
37
  var import_path = require("path");
38
- var import_webpack_dev_middleware = __toESM(require("webpack-dev-middleware"));
39
- var import_webpack_hot_middleware = __toESM(require("webpack-hot-middleware"));
40
38
  var import_serve_static = __toESM(require("serve-static"));
41
39
  var import_utils = require("@modern-js/utils");
42
40
  var import_core = require("./core");
@@ -48,7 +46,7 @@ const getConfig = async (options) => {
48
46
  };
49
47
  const build = async ({ options }) => {
50
48
  const config = await getConfig(options);
51
- const compiler = await (0, import_core.getCompiler)(process.cwd(), config, options);
49
+ const builder = await (0, import_core.createBuilder)(process.cwd(), config, options);
52
50
  const previewResolvedDir = (0, import_path.dirname)(require.resolve("@storybook/preview/package.json"));
53
51
  const previewDirOrigin = (0, import_path.join)(previewResolvedDir, "dist");
54
52
  const previewDirTarget = (0, import_path.join)(options.outputDir || "", `sb-preview`);
@@ -61,22 +59,18 @@ const build = async ({ options }) => {
61
59
  return true;
62
60
  }
63
61
  });
64
- const compilation = new Promise((resolve, reject) => {
65
- compiler.run((err, stats2) => {
66
- if (err) {
67
- reject(err);
68
- } else {
69
- resolve(stats2);
70
- }
71
- });
62
+ let stats;
63
+ builder.onAfterBuild((params) => {
64
+ stats = params.stats;
72
65
  });
73
- const [stats] = await Promise.all([
74
- compilation,
66
+ await Promise.all([
67
+ builder.build(),
75
68
  previewFiles
76
69
  ]);
77
70
  return stats;
78
71
  };
79
- const start = async ({ options, router, startTime }) => {
72
+ let server;
73
+ const start = async ({ options, router, startTime, server: storybookServer }) => {
80
74
  const previewResolvedDir = (0, import_path.dirname)(require.resolve("@storybook/preview/package.json"));
81
75
  const previewDirOrigin = (0, import_path.join)(previewResolvedDir, "dist");
82
76
  router.use(`/sb-preview`, (0, import_serve_static.default)(previewDirOrigin, {
@@ -84,28 +78,21 @@ const start = async ({ options, router, startTime }) => {
84
78
  maxAge: "5m"
85
79
  }));
86
80
  const config = await getConfig(options);
87
- const compiler = await (0, import_core.getCompiler)(process.cwd(), config, options);
88
- const middleware = (0, import_webpack_dev_middleware.default)(compiler, {
89
- writeToDisk: false,
90
- // builder can log errors, so not using dev-middleware logs
91
- stats: false
92
- });
93
- router.use(middleware);
94
- router.use((0, import_webpack_hot_middleware.default)(compiler, {
95
- log: false
96
- }));
97
- const stats = await new Promise((resolve) => {
98
- middleware.waitUntilValid((stats2) => {
81
+ const builder = await (0, import_core.createBuilder)(process.cwd(), config, options);
82
+ const waitFirstCompileDone = new Promise((resolve) => {
83
+ builder.onDevCompileDone(({ stats: stats2, isFirstCompile }) => {
84
+ if (!isFirstCompile) {
85
+ return;
86
+ }
99
87
  resolve(stats2);
100
88
  });
101
89
  });
102
- if (!stats) {
103
- throw new Error("build failed");
104
- }
105
- const statsJson = stats.toJson();
106
- if (statsJson.errors.length > 1) {
107
- throw stats;
108
- }
90
+ const rsbuildServer = await builder.createDevServer();
91
+ server = rsbuildServer;
92
+ router.use(rsbuildServer.middlewares);
93
+ storybookServer.on("upgrade", rsbuildServer.onHTTPUpgrade);
94
+ await rsbuildServer.afterListen();
95
+ const stats = await waitFirstCompileDone;
109
96
  return {
110
97
  bail,
111
98
  stats,
@@ -114,6 +101,7 @@ const start = async ({ options, router, startTime }) => {
114
101
  };
115
102
  const bail = async () => {
116
103
  await (0, import_plugin_storybook.finalize)();
104
+ await (server === null || server === void 0 ? void 0 : server.close());
117
105
  };
118
106
  // Annotate the CommonJS export names for ESM import in node:
119
107
  0 && (module.exports = {
package/dist/cjs/core.js CHANGED
@@ -18,7 +18,7 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var core_exports = {};
20
20
  __export(core_exports, {
21
- getCompiler: () => getCompiler
21
+ createBuilder: () => createBuilder
22
22
  });
23
23
  module.exports = __toCommonJS(core_exports);
24
24
  var import_uni_builder = require("@modern-js/uni-builder");
@@ -26,7 +26,7 @@ var import_core = require("@rsbuild/core");
26
26
  var import_core2 = require("@modern-js/core");
27
27
  var import_utils = require("./utils");
28
28
  var import_plugin_storybook = require("./plugin-storybook");
29
- async function getCompiler(cwd, builderOptions, options) {
29
+ async function createBuilder(cwd, builderOptions, options) {
30
30
  const { bundler } = builderOptions;
31
31
  const { presets } = options;
32
32
  const entries = await presets.apply("entries", []);
@@ -49,9 +49,9 @@ async function getCompiler(cwd, builderOptions, options) {
49
49
  (0, import_plugin_storybook.pluginStorybook)(cwd, options),
50
50
  ...finalConfig.builderPlugins || []
51
51
  ]);
52
- return builder.createCompiler();
52
+ return builder;
53
53
  }
54
54
  // Annotate the CommonJS export names for ESM import in node:
55
55
  0 && (module.exports = {
56
- getCompiler
56
+ createBuilder
57
57
  });
@@ -74,7 +74,8 @@ const pluginStorybook = (cwd, options) => {
74
74
  await applyDefines(builderConfig, options);
75
75
  await applyHTML(builderConfig, options);
76
76
  await applyReact(builderConfig, options);
77
- applyExternals(builderConfig);
77
+ applyOutput(builderConfig);
78
+ applyServerConfig(builderConfig, options);
78
79
  });
79
80
  const modifyConfig = async (config) => {
80
81
  var _config;
@@ -250,7 +251,20 @@ async function applyMdxLoader(config, options) {
250
251
  ]
251
252
  });
252
253
  }
253
- function applyExternals(builderConfig) {
254
+ function applyServerConfig(builderConfig, options) {
255
+ var _builderConfig;
256
+ var _server;
257
+ (_server = (_builderConfig = builderConfig).server) !== null && _server !== void 0 ? _server : _builderConfig.server = {};
258
+ builderConfig.server = {
259
+ ...builderConfig.server || {},
260
+ port: options.port,
261
+ host: "localhost",
262
+ htmlFallback: false,
263
+ strictPort: true,
264
+ printUrls: false
265
+ };
266
+ }
267
+ function applyOutput(builderConfig) {
254
268
  var _builderConfig_output;
255
269
  const config = (0, import_core.mergeRsbuildConfig)({
256
270
  output: {
@@ -259,7 +273,9 @@ function applyExternals(builderConfig) {
259
273
  }
260
274
  }, {
261
275
  output: {
262
- externals: import_globals.globalsNameReferenceMap
276
+ externals: import_globals.globalsNameReferenceMap,
277
+ // storybook will generator other files in other pipeline
278
+ cleanDistPath: false
263
279
  }
264
280
  });
265
281
  builderConfig.output = config.output;
@@ -34,7 +34,6 @@ __export(preset_exports, {
34
34
  });
35
35
  module.exports = __toCommonJS(preset_exports);
36
36
  var import_path = require("path");
37
- var import_build = require("./build");
38
37
  var import_utils = require("./utils");
39
38
  const previewMainTemplate = () => {
40
39
  return require.resolve("@modern-js/storybook-builder/templates/preview.ejs");
@@ -42,15 +41,8 @@ const previewMainTemplate = () => {
42
41
  function getStoriesConfigPath(cwd) {
43
42
  return (0, import_path.resolve)((0, import_path.join)(cwd, import_utils.STORYBOOK_CONFIG_ENTRY));
44
43
  }
45
- const entries = async (_, options) => {
44
+ const entries = async (_) => {
46
45
  const result = [];
47
- const { bundler } = await (0, import_build.getConfig)(options);
48
- if (options.configType === "DEVELOPMENT") {
49
- result.push(...[
50
- `${require.resolve("webpack-hot-middleware/client")}?reload=true&quiet=false&noInfo=${options.quiet}`,
51
- bundler === "rspack" ? require.resolve("@rspack/plugin-react-refresh/react-refresh-entry") : null
52
- ].filter(Boolean));
53
- }
54
46
  result.push(getStoriesConfigPath(process.cwd()));
55
47
  return result;
56
48
  };
package/dist/esm/build.js CHANGED
@@ -1,9 +1,7 @@
1
1
  import { dirname, join, parse } from "path";
2
- import webpackDevMiddleware from "webpack-dev-middleware";
3
- import webpackHotMiddleware from "webpack-hot-middleware";
4
2
  import serveStatic from "serve-static";
5
3
  import { fs } from "@modern-js/utils";
6
- import { getCompiler } from "./core";
4
+ import { createBuilder } from "./core";
7
5
  import { finalize } from "./plugin-storybook";
8
6
  const getConfig = async (options) => {
9
7
  const { presets } = options;
@@ -12,7 +10,7 @@ const getConfig = async (options) => {
12
10
  };
13
11
  const build = async ({ options }) => {
14
12
  const config = await getConfig(options);
15
- const compiler = await getCompiler(process.cwd(), config, options);
13
+ const builder = await createBuilder(process.cwd(), config, options);
16
14
  const previewResolvedDir = dirname(
17
15
  require.resolve("@storybook/preview/package.json")
18
16
  );
@@ -27,22 +25,19 @@ const build = async ({ options }) => {
27
25
  return true;
28
26
  }
29
27
  });
30
- const compilation = new Promise((resolve, reject) => {
31
- compiler.run((err, stats2) => {
32
- if (err) {
33
- reject(err);
34
- } else {
35
- resolve(stats2);
36
- }
37
- });
28
+ let stats;
29
+ builder.onAfterBuild((params) => {
30
+ stats = params.stats;
38
31
  });
39
- const [stats] = await Promise.all([compilation, previewFiles]);
32
+ await Promise.all([builder.build(), previewFiles]);
40
33
  return stats;
41
34
  };
35
+ let server;
42
36
  const start = async ({
43
37
  options,
44
38
  router,
45
- startTime
39
+ startTime,
40
+ server: storybookServer
46
41
  }) => {
47
42
  const previewResolvedDir = dirname(
48
43
  require.resolve("@storybook/preview/package.json")
@@ -53,26 +48,21 @@ const start = async ({
53
48
  serveStatic(previewDirOrigin, { immutable: true, maxAge: "5m" })
54
49
  );
55
50
  const config = await getConfig(options);
56
- const compiler = await getCompiler(process.cwd(), config, options);
57
- const middleware = webpackDevMiddleware(compiler, {
58
- writeToDisk: false,
59
- // builder can log errors, so not using dev-middleware logs
60
- stats: false
61
- });
62
- router.use(middleware);
63
- router.use(webpackHotMiddleware(compiler, { log: false }));
64
- const stats = await new Promise((resolve) => {
65
- middleware.waitUntilValid((stats2) => {
51
+ const builder = await createBuilder(process.cwd(), config, options);
52
+ const waitFirstCompileDone = new Promise((resolve) => {
53
+ builder.onDevCompileDone(({ stats: stats2, isFirstCompile }) => {
54
+ if (!isFirstCompile) {
55
+ return;
56
+ }
66
57
  resolve(stats2);
67
58
  });
68
59
  });
69
- if (!stats) {
70
- throw new Error("build failed");
71
- }
72
- const statsJson = stats.toJson();
73
- if (statsJson.errors.length > 1) {
74
- throw stats;
75
- }
60
+ const rsbuildServer = await builder.createDevServer();
61
+ server = rsbuildServer;
62
+ router.use(rsbuildServer.middlewares);
63
+ storybookServer.on("upgrade", rsbuildServer.onHTTPUpgrade);
64
+ await rsbuildServer.afterListen();
65
+ const stats = await waitFirstCompileDone;
76
66
  return {
77
67
  bail,
78
68
  stats,
@@ -81,6 +71,7 @@ const start = async ({
81
71
  };
82
72
  const bail = async () => {
83
73
  await finalize();
74
+ await (server == null ? void 0 : server.close());
84
75
  };
85
76
  export {
86
77
  bail,
package/dist/esm/core.js CHANGED
@@ -3,7 +3,7 @@ import { mergeRsbuildConfig } from "@rsbuild/core";
3
3
  import { loadConfig } from "@modern-js/core";
4
4
  import { getConfigFileName, runWithErrorMsg } from "./utils";
5
5
  import { pluginStorybook, addonBabelAdapter } from "./plugin-storybook";
6
- async function getCompiler(cwd, builderOptions, options) {
6
+ async function createBuilder(cwd, builderOptions, options) {
7
7
  const { bundler } = builderOptions;
8
8
  const { presets } = options;
9
9
  const entries = await presets.apply("entries", []);
@@ -32,8 +32,8 @@ async function getCompiler(cwd, builderOptions, options) {
32
32
  pluginStorybook(cwd, options),
33
33
  ...finalConfig.builderPlugins || []
34
34
  ]);
35
- return builder.createCompiler();
35
+ return builder;
36
36
  }
37
37
  export {
38
- getCompiler
38
+ createBuilder
39
39
  };
@@ -62,7 +62,8 @@ const pluginStorybook = (cwd, options) => {
62
62
  await applyDefines(builderConfig, options);
63
63
  await applyHTML(builderConfig, options);
64
64
  await applyReact(builderConfig, options);
65
- applyExternals(builderConfig);
65
+ applyOutput(builderConfig);
66
+ applyServerConfig(builderConfig, options);
66
67
  });
67
68
  const modifyConfig = async (config) => {
68
69
  var _a;
@@ -252,7 +253,19 @@ async function applyMdxLoader(config, options) {
252
253
  }
253
254
  );
254
255
  }
255
- function applyExternals(builderConfig) {
256
+ function applyServerConfig(builderConfig, options) {
257
+ var _a;
258
+ (_a = builderConfig.server) != null ? _a : builderConfig.server = {};
259
+ builderConfig.server = {
260
+ ...builderConfig.server || {},
261
+ port: options.port,
262
+ host: "localhost",
263
+ htmlFallback: false,
264
+ strictPort: true,
265
+ printUrls: false
266
+ };
267
+ }
268
+ function applyOutput(builderConfig) {
256
269
  var _a;
257
270
  const config = mergeRsbuildConfig(
258
271
  {
@@ -263,7 +276,9 @@ function applyExternals(builderConfig) {
263
276
  },
264
277
  {
265
278
  output: {
266
- externals: globalsNameReferenceMap
279
+ externals: globalsNameReferenceMap,
280
+ // storybook will generator other files in other pipeline
281
+ cleanDistPath: false
267
282
  }
268
283
  }
269
284
  );
@@ -1,5 +1,4 @@
1
1
  import { join, resolve } from "path";
2
- import { getConfig } from "./build";
3
2
  import { STORYBOOK_CONFIG_ENTRY } from "./utils";
4
3
  const previewMainTemplate = () => {
5
4
  return require.resolve("@modern-js/storybook-builder/templates/preview.ejs");
@@ -7,17 +6,8 @@ const previewMainTemplate = () => {
7
6
  function getStoriesConfigPath(cwd) {
8
7
  return resolve(join(cwd, STORYBOOK_CONFIG_ENTRY));
9
8
  }
10
- const entries = async (_, options) => {
9
+ const entries = async (_) => {
11
10
  const result = [];
12
- const { bundler } = await getConfig(options);
13
- if (options.configType === "DEVELOPMENT") {
14
- result.push(
15
- ...[
16
- `${require.resolve("webpack-hot-middleware/client")}?reload=true&quiet=false&noInfo=${options.quiet}`,
17
- bundler === "rspack" ? require.resolve("@rspack/plugin-react-refresh/react-refresh-entry") : null
18
- ].filter(Boolean)
19
- );
20
- }
21
11
  result.push(getStoriesConfigPath(process.cwd()));
22
12
  return result;
23
13
  };
@@ -1,4 +1,4 @@
1
+ import { UniBuilderInstance } from '@modern-js/uni-builder';
1
2
  import type { Options } from '@storybook/types';
2
- import type { Compiler } from 'webpack-dev-middleware';
3
3
  import type { BuilderOptions } from './types';
4
- export declare function getCompiler(cwd: string, builderOptions: BuilderOptions, options: Options): Promise<Compiler>;
4
+ export declare function createBuilder(cwd: string, builderOptions: BuilderOptions, options: Options): Promise<UniBuilderInstance>;
@@ -1,5 +1,5 @@
1
1
  import type { Options } from '@storybook/types';
2
2
  import type { UniBuilderConfig } from '@modern-js/uni-builder';
3
3
  export declare const previewMainTemplate: () => string;
4
- export declare const entries: (_: unknown, options: Options) => Promise<string[]>;
4
+ export declare const entries: (_: unknown) => Promise<string[]>;
5
5
  export declare const modern: (builderConfig: UniBuilderConfig, options: Options) => UniBuilderConfig;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modern-js/storybook-builder",
3
- "version": "2.49.4",
3
+ "version": "2.51.0",
4
4
  "description": "modern.js support for storybook",
5
5
  "repository": {
6
6
  "type": "git",
@@ -51,9 +51,8 @@
51
51
  },
52
52
  "license": "MIT",
53
53
  "dependencies": {
54
- "@rsbuild/shared": "0.6.15",
55
- "@rsbuild/core": "0.6.15",
56
- "@rspack/plugin-react-refresh": "0.4.5",
54
+ "@rsbuild/shared": "0.7.1",
55
+ "@rsbuild/core": "0.7.1",
57
56
  "@storybook/components": "~7.6.12",
58
57
  "@storybook/core-common": "~7.6.12",
59
58
  "@storybook/csf-plugin": "~7.6.12",
@@ -72,21 +71,18 @@
72
71
  "remark-slug": "^7.0.1",
73
72
  "serve-static": "^1.14.1",
74
73
  "tinypool": "^0.8.0",
75
- "webpack-dev-middleware": "6.1.3",
76
- "webpack-hot-middleware": "^2.25.4",
77
- "@modern-js/uni-builder": "2.49.4",
78
- "@modern-js/core": "2.49.4",
79
- "@modern-js/runtime": "2.49.4",
80
- "@modern-js/utils": "2.49.4"
74
+ "@modern-js/uni-builder": "2.51.0",
75
+ "@modern-js/core": "2.51.0",
76
+ "@modern-js/runtime": "2.51.0",
77
+ "@modern-js/utils": "2.51.0"
81
78
  },
82
79
  "devDependencies": {
83
80
  "@storybook/types": "~7.6.12",
84
81
  "@types/babel__core": "^7.20.1",
85
82
  "@types/serve-static": "^1.13.10",
86
- "@types/webpack-hot-middleware": "^2.25.6",
87
83
  "typescript": "^5.2.2",
88
- "@scripts/build": "2.49.4",
89
- "@modern-js/core": "2.49.4"
84
+ "@modern-js/core": "2.51.0",
85
+ "@scripts/build": "2.51.0"
90
86
  },
91
87
  "publishConfig": {
92
88
  "registry": "https://registry.npmjs.org/",