@rsbuild/core 0.1.8 → 0.2.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.
Files changed (110) hide show
  1. package/compiled/commander/package.json +1 -1
  2. package/compiled/connect-history-api-fallback/package.json +1 -1
  3. package/compiled/dotenv/package.json +1 -1
  4. package/compiled/dotenv-expand/package.json +1 -1
  5. package/compiled/http-compression/package.json +1 -1
  6. package/compiled/open/package.json +1 -1
  7. package/compiled/sirv/package.json +1 -1
  8. package/compiled/ws/package.json +1 -1
  9. package/dist/cli/commands.js +6 -3
  10. package/dist/cli/config.d.ts +7 -1
  11. package/dist/cli/config.js +7 -4
  12. package/dist/cli/prepare.js +1 -1
  13. package/dist/createRsbuild.js +2 -1
  14. package/dist/index.d.ts +1 -1
  15. package/dist/index.js +2 -0
  16. package/dist/loadEnv.d.ts +2 -2
  17. package/dist/loadEnv.js +2 -2
  18. package/dist/plugins/asset.js +2 -2
  19. package/dist/plugins/basic.d.ts +5 -0
  20. package/dist/plugins/basic.js +68 -0
  21. package/dist/plugins/fileSize.js +1 -1
  22. package/dist/plugins/html.d.ts +1 -2
  23. package/dist/plugins/html.js +8 -8
  24. package/dist/plugins/index.js +2 -3
  25. package/dist/plugins/inlineChunk.js +25 -28
  26. package/dist/plugins/networkPerformance.js +3 -11
  27. package/dist/plugins/nodeAddons.js +1 -1
  28. package/dist/plugins/preloadOrPrefetch.js +4 -10
  29. package/dist/plugins/wasm.js +1 -1
  30. package/dist/provider/core/createCompiler.js +17 -9
  31. package/dist/provider/core/createContext.d.ts +3 -3
  32. package/dist/provider/core/createContext.js +13 -27
  33. package/dist/provider/core/initConfigs.d.ts +2 -2
  34. package/dist/provider/core/initConfigs.js +4 -3
  35. package/dist/provider/core/initPlugins.js +15 -12
  36. package/dist/provider/core/inspectConfig.d.ts +2 -20
  37. package/dist/provider/core/inspectConfig.js +6 -6
  38. package/dist/provider/css-modules-typescript-pre-loader/index.js +1 -1
  39. package/dist/provider/css-modules-typescript-pre-loader/{postcss-icss-extract-plugin.js → postcssIcssExtractPlugin.js} +5 -5
  40. package/dist/provider/index.d.ts +1 -2
  41. package/dist/provider/index.js +4 -7
  42. package/dist/provider/plugins/css.js +5 -10
  43. package/dist/provider/plugins/less.js +2 -2
  44. package/dist/provider/plugins/minimize.d.ts +1 -4
  45. package/dist/provider/plugins/minimize.js +18 -15
  46. package/dist/provider/plugins/output.js +2 -2
  47. package/dist/provider/plugins/resolve.js +0 -5
  48. package/dist/provider/plugins/rspackProfile.js +7 -4
  49. package/dist/provider/plugins/sass.js +2 -2
  50. package/dist/provider/plugins/server.d.ts +2 -0
  51. package/dist/provider/plugins/server.js +70 -0
  52. package/dist/provider/plugins/swc.js +1 -8
  53. package/dist/provider/provider.js +15 -1
  54. package/dist/provider/shared.d.ts +2 -3
  55. package/dist/provider/shared.js +4 -18
  56. package/dist/rspack/HtmlAppIconPlugin.d.ts +0 -3
  57. package/dist/rspack/HtmlAppIconPlugin.js +2 -2
  58. package/dist/rspack/HtmlBasicPlugin.d.ts +0 -3
  59. package/dist/rspack/HtmlBasicPlugin.js +24 -10
  60. package/dist/rspack/HtmlCrossOriginPlugin.d.ts +0 -3
  61. package/dist/rspack/HtmlCrossOriginPlugin.js +12 -2
  62. package/dist/rspack/HtmlNetworkPerformancePlugin.d.ts +1 -3
  63. package/dist/rspack/HtmlNetworkPerformancePlugin.js +13 -3
  64. package/dist/rspack/HtmlNoncePlugin.d.ts +0 -3
  65. package/dist/rspack/HtmlNoncePlugin.js +12 -2
  66. package/dist/rspack/HtmlTagsPlugin.d.ts +1 -7
  67. package/dist/rspack/HtmlTagsPlugin.js +12 -1
  68. package/dist/rspack/InlineChunkHtmlPlugin.d.ts +2 -3
  69. package/dist/rspack/InlineChunkHtmlPlugin.js +17 -3
  70. package/dist/rspack/RemoveCssSourcemapPlugin.d.ts +1 -3
  71. package/dist/rspack/RemoveCssSourcemapPlugin.js +1 -2
  72. package/dist/rspack/{HtmlPreloadOrPrefetchPlugin/index.d.ts → preload/HtmlPreloadOrPrefetchPlugin.d.ts} +3 -4
  73. package/dist/rspack/{HtmlPreloadOrPrefetchPlugin/index.js → preload/HtmlPreloadOrPrefetchPlugin.js} +17 -7
  74. package/dist/server/{dev-middleware → compiler-dev-middleware}/index.d.ts +2 -2
  75. package/dist/server/{dev-middleware → compiler-dev-middleware}/index.js +3 -3
  76. package/dist/server/{dev-middleware → compiler-dev-middleware}/socketServer.d.ts +2 -2
  77. package/dist/server/devMiddlewares.d.ts +7 -0
  78. package/dist/server/devMiddlewares.js +156 -0
  79. package/dist/server/devServer.d.ts +10 -23
  80. package/dist/server/devServer.js +77 -162
  81. package/dist/server/httpServer.d.ts +8 -0
  82. package/dist/server/httpServer.js +48 -0
  83. package/dist/server/index.d.ts +1 -1
  84. package/dist/server/index.js +2 -0
  85. package/dist/server/prodServer.d.ts +0 -5
  86. package/dist/server/prodServer.js +13 -27
  87. package/package.json +5 -4
  88. package/compiled/jiti/index.js +0 -1885
  89. package/compiled/jiti/license +0 -21
  90. package/compiled/jiti/package.json +0 -1
  91. package/compiled/jiti/types/jiti.d.ts +0 -19
  92. package/compiled/jiti/types/types.d.ts +0 -31
  93. package/dist/plugins/devtool.d.ts +0 -2
  94. package/dist/plugins/devtool.js +0 -46
  95. package/dist/plugins/server.d.ts +0 -2
  96. package/dist/plugins/server.js +0 -56
  97. package/dist/provider/plugins/basic.d.ts +0 -5
  98. package/dist/provider/plugins/basic.js +0 -34
  99. /package/dist/provider/css-modules-typescript-pre-loader/{postcss-icss-extract-plugin.d.ts → postcssIcssExtractPlugin.d.ts} +0 -0
  100. /package/dist/rspack/{HtmlPreloadOrPrefetchPlugin → preload}/helpers/determineAsValue.d.ts +0 -0
  101. /package/dist/rspack/{HtmlPreloadOrPrefetchPlugin → preload}/helpers/determineAsValue.js +0 -0
  102. /package/dist/rspack/{HtmlPreloadOrPrefetchPlugin → preload}/helpers/doesChunkBelongToHtml.d.ts +0 -0
  103. /package/dist/rspack/{HtmlPreloadOrPrefetchPlugin → preload}/helpers/doesChunkBelongToHtml.js +0 -0
  104. /package/dist/rspack/{HtmlPreloadOrPrefetchPlugin → preload}/helpers/extractChunks.d.ts +0 -0
  105. /package/dist/rspack/{HtmlPreloadOrPrefetchPlugin → preload}/helpers/extractChunks.js +0 -0
  106. /package/dist/rspack/{HtmlPreloadOrPrefetchPlugin → preload}/helpers/index.d.ts +0 -0
  107. /package/dist/rspack/{HtmlPreloadOrPrefetchPlugin → preload}/helpers/index.js +0 -0
  108. /package/dist/rspack/{HtmlPreloadOrPrefetchPlugin → preload}/helpers/type.d.ts +0 -0
  109. /package/dist/rspack/{HtmlPreloadOrPrefetchPlugin → preload}/helpers/type.js +0 -0
  110. /package/dist/server/{dev-middleware → compiler-dev-middleware}/socketServer.js +0 -0
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,12 +17,21 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var HtmlPreloadOrPrefetchPlugin_exports = {};
20
30
  __export(HtmlPreloadOrPrefetchPlugin_exports, {
21
- HTMLPreloadOrPrefetchPlugin: () => HTMLPreloadOrPrefetchPlugin
31
+ HtmlPreloadOrPrefetchPlugin: () => HtmlPreloadOrPrefetchPlugin
22
32
  });
23
33
  module.exports = __toCommonJS(HtmlPreloadOrPrefetchPlugin_exports);
34
+ var import_html_webpack_plugin = __toESM(require("html-webpack-plugin"));
24
35
  var import_shared = require("@rsbuild/shared");
25
36
  var import_helpers = require("./helpers");
26
37
  /**
@@ -117,20 +128,19 @@ function generateLinks(options, type, compilation, htmlPluginData, HTMLCount) {
117
128
  }
118
129
  return links;
119
130
  }
120
- class HTMLPreloadOrPrefetchPlugin {
121
- constructor(options, type, HtmlPlugin, HTMLCount) {
131
+ class HtmlPreloadOrPrefetchPlugin {
132
+ constructor(options, type, HTMLCount) {
122
133
  this.resourceHints = [];
123
134
  this.options = {
124
135
  ...defaultOptions,
125
136
  ...typeof options === "boolean" ? {} : options
126
137
  };
127
138
  this.type = type;
128
- this.HtmlPlugin = HtmlPlugin;
129
139
  this.HTMLCount = HTMLCount;
130
140
  }
131
141
  apply(compiler) {
132
142
  compiler.hooks.compilation.tap(this.constructor.name, (compilation) => {
133
- this.HtmlPlugin.getHooks(compilation).beforeAssetTagGeneration.tap(
143
+ import_html_webpack_plugin.default.getHooks(compilation).beforeAssetTagGeneration.tap(
134
144
  `HTML${(0, import_shared.upperFirst)(this.type)}Plugin`,
135
145
  (htmlPluginData) => {
136
146
  this.resourceHints = generateLinks(
@@ -143,7 +153,7 @@ class HTMLPreloadOrPrefetchPlugin {
143
153
  return htmlPluginData;
144
154
  }
145
155
  );
146
- this.HtmlPlugin.getHooks(compilation).alterAssetTags.tap(
156
+ import_html_webpack_plugin.default.getHooks(compilation).alterAssetTags.tap(
147
157
  `HTML${(0, import_shared.upperFirst)(this.type)}Plugin`,
148
158
  (htmlPluginData) => {
149
159
  if (this.resourceHints) {
@@ -163,5 +173,5 @@ class HTMLPreloadOrPrefetchPlugin {
163
173
  }
164
174
  // Annotate the CommonJS export names for ESM import in node:
165
175
  0 && (module.exports = {
166
- HTMLPreloadOrPrefetchPlugin
176
+ HtmlPreloadOrPrefetchPlugin
167
177
  });
@@ -2,10 +2,10 @@
2
2
  /// <reference types="node" />
3
3
  import type { Server } from 'http';
4
4
  import { EventEmitter } from 'events';
5
- import type { DevConfig, DevMiddlewareAPI, DevMiddleware as CustomDevMiddleware } from '@rsbuild/shared';
5
+ import type { RsbuildDevMiddlewareOptions, DevMiddlewareAPI, DevMiddleware as CustomDevMiddleware } from '@rsbuild/shared';
6
6
  type Options = {
7
7
  publicPaths: string[];
8
- dev: DevConfig;
8
+ dev: RsbuildDevMiddlewareOptions['dev'];
9
9
  devMiddleware?: CustomDevMiddleware;
10
10
  };
11
11
  export default class DevMiddleware extends EventEmitter {
@@ -26,11 +26,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var dev_middleware_exports = {};
30
- __export(dev_middleware_exports, {
29
+ var compiler_dev_middleware_exports = {};
30
+ __export(compiler_dev_middleware_exports, {
31
31
  default: () => DevMiddleware
32
32
  });
33
- module.exports = __toCommonJS(dev_middleware_exports);
33
+ module.exports = __toCommonJS(compiler_dev_middleware_exports);
34
34
  var import_events = require("events");
35
35
  var import_socketServer = __toESM(require("./socketServer"));
36
36
  const noop = () => {
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  import type { Server } from 'http';
3
3
  import ws from '../../../compiled/ws';
4
- import { type Stats, type DevConfig } from '@rsbuild/shared';
4
+ import { type Stats, type RsbuildDevMiddlewareOptions } from '@rsbuild/shared';
5
5
  export default class SocketServer {
6
6
  private wsServer;
7
7
  private readonly sockets;
@@ -9,7 +9,7 @@ export default class SocketServer {
9
9
  private app?;
10
10
  private stats?;
11
11
  private timer;
12
- constructor(options: DevConfig);
12
+ constructor(options: RsbuildDevMiddlewareOptions['dev']);
13
13
  prepare(app: Server): void;
14
14
  updateStats(stats: Stats): void;
15
15
  sockWrite(type: string, data?: Record<string, any> | string | boolean): void;
@@ -0,0 +1,7 @@
1
+ /// <reference types="node" />
2
+ import { Server } from 'http';
3
+ import { RequestHandler, RsbuildDevMiddlewareOptions } from '@rsbuild/shared';
4
+ export declare const getMiddlewares: (options: RsbuildDevMiddlewareOptions, app: Server) => Promise<{
5
+ close: () => Promise<void>;
6
+ middlewares: RequestHandler[];
7
+ }>;
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var devMiddlewares_exports = {};
30
+ __export(devMiddlewares_exports, {
31
+ getMiddlewares: () => getMiddlewares
32
+ });
33
+ module.exports = __toCommonJS(devMiddlewares_exports);
34
+ var import_url = __toESM(require("url"));
35
+ var import_compiler_dev_middleware = __toESM(require("./compiler-dev-middleware"));
36
+ var import_middlewares = require("./middlewares");
37
+ var import_path = require("path");
38
+ const applySetupMiddlewares = (dev, devMiddleware) => {
39
+ const setupMiddlewares = dev.setupMiddlewares || [];
40
+ const serverOptions = {
41
+ sockWrite: (type, data) => devMiddleware.sockWrite(type, data)
42
+ };
43
+ const before = [];
44
+ const after = [];
45
+ setupMiddlewares.forEach((handler) => {
46
+ handler(
47
+ {
48
+ unshift: (...handlers) => before.unshift(...handlers),
49
+ push: (...handlers) => after.push(...handlers)
50
+ },
51
+ serverOptions
52
+ );
53
+ });
54
+ return { before, after };
55
+ };
56
+ const applyDefaultMiddlewares = async ({
57
+ app,
58
+ middlewares,
59
+ dev,
60
+ devMiddleware,
61
+ output,
62
+ pwd
63
+ }) => {
64
+ if (dev.compress) {
65
+ const { default: compression } = await Promise.resolve().then(() => __toESM(require("../../compiled/http-compression")));
66
+ middlewares.push((req, res, next) => {
67
+ compression({
68
+ gzip: true,
69
+ brotli: false
70
+ })(req, res, next);
71
+ });
72
+ }
73
+ middlewares.push((req, res, next) => {
74
+ res.setHeader("Access-Control-Allow-Origin", "*");
75
+ const path = req.url ? import_url.default.parse(req.url).pathname : "";
76
+ if (path?.includes("hot-update")) {
77
+ res.setHeader("Access-Control-Allow-Credentials", "false");
78
+ }
79
+ const confHeaders = dev.headers;
80
+ if (confHeaders) {
81
+ for (const [key, value] of Object.entries(confHeaders)) {
82
+ res.setHeader(key, value);
83
+ }
84
+ }
85
+ next();
86
+ });
87
+ if (dev.proxy) {
88
+ const { createProxyMiddleware } = await Promise.resolve().then(() => __toESM(require("./proxy")));
89
+ const { middlewares: proxyMiddlewares } = createProxyMiddleware(
90
+ dev.proxy,
91
+ app
92
+ );
93
+ proxyMiddlewares.forEach((middleware) => {
94
+ middlewares.push(middleware);
95
+ });
96
+ }
97
+ devMiddleware.init(app);
98
+ devMiddleware.middleware && middlewares.push(devMiddleware.middleware);
99
+ if (dev.publicDir && dev.publicDir.name) {
100
+ const { default: sirv } = await Promise.resolve().then(() => __toESM(require("../../compiled/sirv")));
101
+ const { name } = dev.publicDir;
102
+ const publicDir = (0, import_path.isAbsolute)(name) ? name : (0, import_path.join)(pwd, name);
103
+ const assetMiddleware = sirv(publicDir, {
104
+ etag: true,
105
+ dev: true
106
+ });
107
+ middlewares.push(assetMiddleware);
108
+ }
109
+ const { distPath } = output;
110
+ middlewares.push(
111
+ (0, import_middlewares.getHtmlFallbackMiddleware)({
112
+ distPath: (0, import_path.isAbsolute)(distPath) ? distPath : (0, import_path.join)(pwd, distPath),
113
+ callback: devMiddleware.middleware,
114
+ htmlFallback: dev.htmlFallback
115
+ })
116
+ );
117
+ if (dev.historyApiFallback) {
118
+ const { default: connectHistoryApiFallback } = await Promise.resolve().then(() => __toESM(require("../../compiled/connect-history-api-fallback")));
119
+ const historyApiFallbackMiddleware = connectHistoryApiFallback(
120
+ dev.historyApiFallback === true ? {} : dev.historyApiFallback
121
+ );
122
+ middlewares.push(historyApiFallbackMiddleware);
123
+ devMiddleware.middleware && middlewares.push(devMiddleware.middleware);
124
+ }
125
+ middlewares.push(import_middlewares.faviconFallbackMiddleware);
126
+ middlewares.push(import_middlewares.notFoundMiddleware);
127
+ };
128
+ const getMiddlewares = async (options, app) => {
129
+ const middlewares = [];
130
+ const devMiddleware = new import_compiler_dev_middleware.default({
131
+ dev: options.dev,
132
+ publicPaths: options.output.publicPaths,
133
+ devMiddleware: options.devMiddleware
134
+ });
135
+ const { before, after } = applySetupMiddlewares(options.dev, devMiddleware);
136
+ before.forEach((fn) => middlewares.push(fn));
137
+ await applyDefaultMiddlewares({
138
+ app,
139
+ middlewares,
140
+ dev: options.dev,
141
+ devMiddleware,
142
+ output: options.output,
143
+ pwd: options.pwd
144
+ });
145
+ after.forEach((fn) => middlewares.push(fn));
146
+ return {
147
+ close: async () => {
148
+ devMiddleware.close();
149
+ },
150
+ middlewares
151
+ };
152
+ };
153
+ // Annotate the CommonJS export names for ESM import in node:
154
+ 0 && (module.exports = {
155
+ getMiddlewares
156
+ });
@@ -1,30 +1,17 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- /// <reference types="node" />
4
- import { Server } from 'http';
5
- import type { ListenOptions } from 'net';
6
- import { RsbuildDevServerOptions, CreateDevMiddlewareReturns, StartDevServerOptions, StartServerResult } from '@rsbuild/shared';
7
- import connect from '@rsbuild/shared/connect';
1
+ import { CreateDevMiddlewareReturns, StartDevServerOptions, StartServerResult, DevServerAPI } from '@rsbuild/shared';
8
2
  import type { Context } from '../types';
9
- export declare class RsbuildDevServer {
10
- private readonly dev;
11
- private readonly devMiddleware;
12
- private pwd;
13
- private app;
14
- private output;
15
- middlewares: connect.Server;
16
- constructor(options: RsbuildDevServerOptions);
17
- private applySetupMiddlewares;
18
- onInit(app: Server): Promise<void>;
19
- private applyDefaultMiddlewares;
20
- createHTTPServer(): Promise<Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse> | import("https").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>>;
21
- listen(options?: number | ListenOptions | undefined, listener?: (err?: Error) => Promise<void>): void;
22
- close(): void;
23
- }
24
- export declare function startDevServer<Options extends {
3
+ export declare function createDevServer<Options extends {
25
4
  context: Context;
26
5
  }>(options: Options, createDevMiddleware: (options: Options, compiler: StartDevServerOptions['compiler']) => Promise<CreateDevMiddlewareReturns>, {
27
6
  compiler: customCompiler,
7
+ getPortSilently
8
+ }?: StartDevServerOptions & {
9
+ defaultPort?: number;
10
+ }): Promise<DevServerAPI>;
11
+ export declare function startDevServer<Options extends {
12
+ context: Context;
13
+ }>(options: Options, createDevMiddleware: (options: Options, compiler: StartDevServerOptions['compiler']) => Promise<CreateDevMiddlewareReturns>, {
14
+ compiler,
28
15
  printURLs,
29
16
  logger: customLogger,
30
17
  getPortSilently
@@ -28,189 +28,96 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var devServer_exports = {};
30
30
  __export(devServer_exports, {
31
- RsbuildDevServer: () => RsbuildDevServer,
31
+ createDevServer: () => createDevServer,
32
32
  startDevServer: () => startDevServer
33
33
  });
34
34
  module.exports = __toCommonJS(devServer_exports);
35
- var import_http = require("http");
36
- var import_https = require("https");
37
- var import_url = __toESM(require("url"));
38
35
  var import_shared = require("@rsbuild/shared");
39
- var import_dev_middleware = __toESM(require("./dev-middleware"));
40
36
  var import_connect = __toESM(require("@rsbuild/shared/connect"));
41
- var import_proxy = require("./proxy");
42
- var import_middlewares = require("./middlewares");
43
- var import_path = require("path");
44
37
  var import_restart = require("./restart");
45
- class RsbuildDevServer {
46
- constructor(options) {
47
- this.middlewares = (0, import_connect.default)();
48
- this.pwd = options.pwd;
49
- this.dev = options.dev;
50
- this.output = options.output;
51
- this.devMiddleware = new import_dev_middleware.default({
52
- dev: this.dev,
53
- publicPaths: options.output.publicPaths,
54
- devMiddleware: options.devMiddleware
55
- });
56
- }
57
- applySetupMiddlewares() {
58
- const setupMiddlewares = this.dev.setupMiddlewares || [];
59
- const serverOptions = {
60
- sockWrite: (type, data) => this.devMiddleware.sockWrite(type, data)
61
- };
62
- const before = [];
63
- const after = [];
64
- setupMiddlewares.forEach((handler) => {
65
- handler(
66
- {
67
- unshift: (...handlers) => before.unshift(...handlers),
68
- push: (...handlers) => after.push(...handlers)
69
- },
70
- serverOptions
71
- );
72
- });
73
- return { before, after };
74
- }
75
- // Complete the preparation of services
76
- async onInit(app) {
77
- this.app = app;
78
- const { before, after } = this.applySetupMiddlewares();
79
- before.forEach((fn) => this.middlewares.use(fn));
80
- await this.applyDefaultMiddlewares(app);
81
- after.forEach((fn) => this.middlewares.use(fn));
82
- }
83
- async applyDefaultMiddlewares(app) {
84
- const { dev, devMiddleware } = this;
85
- if (dev.compress) {
86
- const { default: compression } = await Promise.resolve().then(() => __toESM(require("../../compiled/http-compression")));
87
- this.middlewares.use((req, res, next) => {
88
- compression({
89
- gzip: true,
90
- brotli: false
91
- })(req, res, next);
92
- });
93
- }
94
- this.middlewares.use((req, res, next) => {
95
- res.setHeader("Access-Control-Allow-Origin", "*");
96
- const path = req.url ? import_url.default.parse(req.url).pathname : "";
97
- if (path?.includes("hot-update")) {
98
- res.setHeader("Access-Control-Allow-Credentials", "false");
99
- }
100
- const confHeaders = dev.headers;
101
- if (confHeaders) {
102
- for (const [key, value] of Object.entries(confHeaders)) {
103
- res.setHeader(key, value);
104
- }
105
- }
106
- next();
107
- });
108
- if (dev.proxy) {
109
- const { middlewares } = (0, import_proxy.createProxyMiddleware)(dev.proxy, app);
110
- middlewares.forEach((middleware) => {
111
- this.middlewares.use(middleware);
112
- });
113
- }
114
- devMiddleware.init(app);
115
- devMiddleware.middleware && this.middlewares.use(devMiddleware.middleware);
116
- if (dev.publicDir && dev.publicDir.name) {
117
- const { default: sirv } = await Promise.resolve().then(() => __toESM(require("../../compiled/sirv")));
118
- const { name } = dev.publicDir;
119
- const publicDir = (0, import_path.isAbsolute)(name) ? name : (0, import_path.join)(this.pwd, name);
120
- const assetMiddleware = sirv(publicDir, {
121
- etag: true,
122
- dev: true
123
- });
124
- this.middlewares.use(assetMiddleware);
125
- }
126
- const { distPath } = this.output;
127
- this.middlewares.use(
128
- (0, import_middlewares.getHtmlFallbackMiddleware)({
129
- distPath: (0, import_path.isAbsolute)(distPath) ? distPath : (0, import_path.join)(this.pwd, distPath),
130
- callback: devMiddleware.middleware,
131
- htmlFallback: this.dev.htmlFallback
132
- })
133
- );
134
- if (dev.historyApiFallback) {
135
- const { default: connectHistoryApiFallback } = await Promise.resolve().then(() => __toESM(require("../../compiled/connect-history-api-fallback")));
136
- const historyApiFallbackMiddleware = connectHistoryApiFallback(
137
- dev.historyApiFallback === true ? {} : dev.historyApiFallback
138
- );
139
- this.middlewares.use(historyApiFallbackMiddleware);
140
- devMiddleware.middleware && this.middlewares.use(devMiddleware.middleware);
141
- }
142
- this.middlewares.use(import_middlewares.faviconFallbackMiddleware);
143
- this.middlewares.use(import_middlewares.notFoundMiddleware);
144
- }
145
- async createHTTPServer() {
146
- const { dev } = this;
147
- const devHttpsOption = typeof dev === "object" && dev.https;
148
- if (devHttpsOption) {
149
- return (0, import_https.createServer)(devHttpsOption, this.middlewares);
150
- } else {
151
- return (0, import_http.createServer)(this.middlewares);
152
- }
153
- }
154
- listen(options, listener) {
155
- const callback = () => {
156
- listener?.();
157
- };
158
- if (typeof options === "object") {
159
- this.app.listen(options, callback);
160
- } else {
161
- this.app.listen(options || 8080, callback);
162
- }
163
- }
164
- close() {
165
- this.devMiddleware.close();
166
- this.app.close();
167
- }
168
- }
169
- async function startDevServer(options, createDevMiddleware, {
38
+ var import_httpServer = require("./httpServer");
39
+ var import_devMiddlewares = require("./devMiddlewares");
40
+ async function createDevServer(options, createDevMiddleware, {
170
41
  compiler: customCompiler,
171
- printURLs = true,
172
- logger: customLogger,
173
42
  getPortSilently
174
43
  } = {}) {
175
44
  if (!process.env.NODE_ENV) {
176
45
  process.env.NODE_ENV = "development";
177
46
  }
178
47
  const rsbuildConfig = options.context.config;
179
- const logger = customLogger ?? import_shared.logger;
180
48
  const { devServerConfig, port, host, https } = await (0, import_shared.getDevOptions)({
181
49
  rsbuildConfig,
182
50
  getPortSilently
183
51
  });
52
+ const defaultRoutes = (0, import_shared.formatRoutes)(
53
+ options.context.entry,
54
+ rsbuildConfig.output?.distPath?.html,
55
+ rsbuildConfig.html?.outputStructure
56
+ );
184
57
  options.context.devServer = {
185
58
  hostname: host,
186
59
  port,
187
60
  https
188
61
  };
189
- const protocol = https ? "https" : "http";
190
- let urls = (0, import_shared.getAddressUrls)(protocol, port, host);
191
- const routes = (0, import_shared.formatRoutes)(
192
- options.context.entry,
193
- rsbuildConfig.output?.distPath?.html,
194
- rsbuildConfig.html?.outputStructure
195
- );
196
- (0, import_shared.debug)("create dev server");
197
62
  const { devMiddleware, compiler } = await createDevMiddleware(
198
63
  options,
199
64
  customCompiler
200
65
  );
201
66
  const publicPaths = compiler.compilers ? compiler.compilers.map(import_shared.getPublicPathFromCompiler) : [(0, import_shared.getPublicPathFromCompiler)(compiler)];
202
- const server = new RsbuildDevServer({
203
- pwd: options.context.rootPath,
204
- devMiddleware,
205
- dev: devServerConfig,
206
- output: {
207
- distPath: rsbuildConfig.output?.distPath?.root || import_shared.ROOT_DIST_DIR,
208
- publicPaths
209
- }
67
+ return {
68
+ resolvedConfig: { devServerConfig, port, host, https, defaultRoutes },
69
+ beforeStart: async () => {
70
+ await options.context.hooks.onBeforeStartDevServerHook.call();
71
+ },
72
+ afterStart: async ({ port: port2, routes }) => {
73
+ await options.context.hooks.onAfterStartDevServerHook.call({
74
+ port: port2,
75
+ routes
76
+ });
77
+ },
78
+ getMiddlewares: async ({
79
+ dev,
80
+ app
81
+ }) => await (0, import_devMiddlewares.getMiddlewares)(
82
+ {
83
+ pwd: options.context.rootPath,
84
+ devMiddleware,
85
+ dev,
86
+ output: {
87
+ distPath: rsbuildConfig.output?.distPath?.root || import_shared.ROOT_DIST_DIR,
88
+ publicPaths
89
+ }
90
+ },
91
+ app
92
+ )
93
+ };
94
+ }
95
+ async function startDevServer(options, createDevMiddleware, {
96
+ compiler,
97
+ printURLs = true,
98
+ logger: customLogger,
99
+ getPortSilently
100
+ } = {}) {
101
+ (0, import_shared.debug)("create dev server");
102
+ const rsbuildServer = await createDevServer(options, createDevMiddleware, {
103
+ compiler,
104
+ printURLs,
105
+ logger: customLogger,
106
+ getPortSilently
107
+ });
108
+ const {
109
+ resolvedConfig: { devServerConfig, port, host, https, defaultRoutes }
110
+ } = rsbuildServer;
111
+ const logger = customLogger ?? import_shared.logger;
112
+ const middlewares = (0, import_connect.default)();
113
+ const httpServer = await (0, import_httpServer.createHttpServer)({
114
+ https: devServerConfig.https,
115
+ middlewares
210
116
  });
211
117
  (0, import_shared.debug)("create dev server done");
212
- await options.context.hooks.onBeforeStartDevServerHook.call();
213
- const httpServer = await server.createHTTPServer();
118
+ await rsbuildServer.beforeStart();
119
+ const protocol = https ? "https" : "http";
120
+ let urls = (0, import_shared.getAddressUrls)(protocol, port, host);
214
121
  if (printURLs) {
215
122
  if ((0, import_shared.isFunction)(printURLs)) {
216
123
  urls = printURLs(urls);
@@ -218,12 +125,16 @@ async function startDevServer(options, createDevMiddleware, {
218
125
  throw new Error("Please return an array in the `printURLs` function.");
219
126
  }
220
127
  }
221
- (0, import_shared.printServerURLs)(urls, routes, logger);
128
+ (0, import_shared.printServerURLs)(urls, defaultRoutes, logger);
222
129
  }
223
- await server.onInit(httpServer);
130
+ const devMiddlewares = await rsbuildServer.getMiddlewares({
131
+ dev: devServerConfig,
132
+ app: httpServer
133
+ });
134
+ devMiddlewares.middlewares.forEach((m) => middlewares.use(m));
224
135
  (0, import_shared.debug)("listen dev server");
225
136
  return new Promise((resolve) => {
226
- server.listen(
137
+ httpServer.listen(
227
138
  {
228
139
  host,
229
140
  port
@@ -233,17 +144,21 @@ async function startDevServer(options, createDevMiddleware, {
233
144
  throw err;
234
145
  }
235
146
  (0, import_shared.debug)("listen dev server done");
236
- await options.context.hooks.onAfterStartDevServerHook.call({
147
+ await rsbuildServer.afterStart({
237
148
  port,
238
- routes
149
+ routes: defaultRoutes
239
150
  });
240
- (0, import_restart.registerCleaner)(() => server.close());
151
+ const onClose = async () => {
152
+ await devMiddlewares.close();
153
+ httpServer.close();
154
+ };
155
+ (0, import_restart.registerCleaner)(onClose);
241
156
  resolve({
242
157
  port,
243
158
  urls: urls.map((item) => item.url),
244
159
  server: {
245
160
  close: async () => {
246
- server.close();
161
+ await onClose();
247
162
  }
248
163
  }
249
164
  });
@@ -253,6 +168,6 @@ async function startDevServer(options, createDevMiddleware, {
253
168
  }
254
169
  // Annotate the CommonJS export names for ESM import in node:
255
170
  0 && (module.exports = {
256
- RsbuildDevServer,
171
+ createDevServer,
257
172
  startDevServer
258
173
  });
@@ -0,0 +1,8 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import type { ServerConfig } from '@rsbuild/shared';
4
+ import type connect from '@rsbuild/shared/connect';
5
+ export declare const createHttpServer: (options: {
6
+ https?: ServerConfig['https'];
7
+ middlewares: connect.Server;
8
+ }) => Promise<import("https").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse> | import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>>;