@modern-js/server 2.42.1 → 2.43.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 (31) hide show
  1. package/dist/cjs/dev-tools/dev-middleware/index.js +2 -3
  2. package/dist/cjs/dev-tools/dev-middleware/socketServer.js +2 -3
  3. package/dist/cjs/dev-tools/watcher/index.js +2 -3
  4. package/dist/cjs/index.js +3 -1
  5. package/dist/cjs/server/devServer.js +96 -144
  6. package/dist/cjs/server/devServerOld.js +352 -0
  7. package/dist/cjs/server/index.js +14 -3
  8. package/dist/esm/dev-tools/dev-middleware/index.js +1 -2
  9. package/dist/esm/dev-tools/dev-middleware/socketServer.js +1 -2
  10. package/dist/esm/dev-tools/watcher/index.js +1 -2
  11. package/dist/esm/index.js +2 -1
  12. package/dist/esm/server/devServer.js +195 -268
  13. package/dist/esm/server/devServerOld.js +579 -0
  14. package/dist/esm/server/index.js +21 -2
  15. package/dist/esm-node/dev-tools/dev-middleware/index.js +2 -3
  16. package/dist/esm-node/dev-tools/dev-middleware/socketServer.js +2 -3
  17. package/dist/esm-node/dev-tools/watcher/index.js +2 -3
  18. package/dist/esm-node/index.js +2 -1
  19. package/dist/esm-node/server/devServer.js +97 -145
  20. package/dist/esm-node/server/devServerOld.js +318 -0
  21. package/dist/esm-node/server/index.js +12 -2
  22. package/dist/types/dev-tools/dev-middleware/index.d.ts +2 -0
  23. package/dist/types/dev-tools/dev-middleware/socketServer.d.ts +2 -0
  24. package/dist/types/dev-tools/https/index.d.ts +1 -0
  25. package/dist/types/dev-tools/mock/getMockData.d.ts +2 -0
  26. package/dist/types/index.d.ts +4 -4
  27. package/dist/types/server/devServer.d.ts +10 -8
  28. package/dist/types/server/devServerOld.d.ts +37 -0
  29. package/dist/types/server/index.d.ts +4 -1
  30. package/dist/types/types.d.ts +10 -0
  31. package/package.json +12 -10
@@ -3,17 +3,42 @@ import { createServer } from "http";
3
3
  import path from "path";
4
4
  import { createServer as createHttpsServer } from "https";
5
5
  import { API_DIR, SERVER_BUNDLE_DIRECTORY, SERVER_DIR, SHARED_DIR, LOADABLE_STATS_FILE } from "@modern-js/utils";
6
- import { createProxyHandler, ModernServer, AGGRED_DIR, createRenderHandler } from "@modern-js/prod-server";
6
+ import { ModernServer, AGGRED_DIR, createRenderHandler } from "@modern-js/prod-server";
7
7
  import { merge as deepMerge } from "@modern-js/utils/lodash";
8
+ import { fileReader } from "@modern-js/runtime-utils/fileReader";
8
9
  import { getDefaultDevOptions } from "../constants";
9
10
  import { createMockHandler } from "../dev-tools/mock";
10
11
  import { enableRegister } from "../dev-tools/register";
11
12
  import Watcher, { mergeWatchOptions } from "../dev-tools/watcher";
12
- import DevMiddleware from "../dev-tools/dev-middleware";
13
13
  import { workerSSRRender } from "./workerSSRRender";
14
+ const transformToRsbuildServerOptions = (dev) => {
15
+ var _dev_devMiddleware, _dev_before, _dev_after;
16
+ const rsbuildOptions = {
17
+ hmr: Boolean(dev.hot),
18
+ client: dev.client,
19
+ writeToDisk: (_dev_devMiddleware = dev.devMiddleware) === null || _dev_devMiddleware === void 0 ? void 0 : _dev_devMiddleware.writeToDisk,
20
+ compress: dev.compress,
21
+ headers: dev.headers,
22
+ historyApiFallback: dev.historyApiFallback,
23
+ proxy: dev.proxy,
24
+ publicDir: false
25
+ };
26
+ if (((_dev_before = dev.before) === null || _dev_before === void 0 ? void 0 : _dev_before.length) || ((_dev_after = dev.after) === null || _dev_after === void 0 ? void 0 : _dev_after.length)) {
27
+ rsbuildOptions.setupMiddlewares = [
28
+ ...dev.setupMiddlewares || [],
29
+ (middlewares) => {
30
+ middlewares.unshift(...dev.before || []);
31
+ middlewares.push(...dev.after || []);
32
+ }
33
+ ];
34
+ } else if (dev.setupMiddlewares) {
35
+ rsbuildOptions.setupMiddlewares = dev.setupMiddlewares;
36
+ }
37
+ return rsbuildOptions;
38
+ };
14
39
  class ModernDevServer extends ModernServer {
15
40
  getDevOptions(options) {
16
- const devOptions = typeof options.dev === "boolean" ? {} : options.dev;
41
+ const devOptions = options.dev;
17
42
  const defaultOptions = getDefaultDevOptions();
18
43
  return deepMerge(defaultOptions, devOptions);
19
44
  }
@@ -25,40 +50,39 @@ class ModernDevServer extends ModernServer {
25
50
  });
26
51
  });
27
52
  }
28
- applySetupMiddlewares() {
29
- const setupMiddlewares = this.dev.setupMiddlewares || [];
30
- const serverOptions = {
31
- sockWrite: (type, data) => this.devMiddleware.sockWrite(type, data)
32
- };
33
- const befores = [];
34
- const afters = [];
35
- setupMiddlewares.forEach((handler) => {
36
- handler({
37
- unshift: (...handlers) => befores.unshift(...handlers),
38
- push: (...handlers) => afters.push(...handlers)
39
- }, serverOptions);
40
- });
41
- return {
42
- befores,
43
- afters
44
- };
45
- }
46
53
  // Complete the preparation of services
47
54
  async onInit(runner, app) {
48
55
  this.runner = runner;
49
- const { dev } = this;
50
- const { befores, afters } = this.applySetupMiddlewares();
51
- const beforeHandlers = await this.setupBeforeDevMiddleware();
52
- this.addMiddlewareHandler([
53
- ...beforeHandlers,
54
- ...befores
55
- ]);
56
- await this.applyDefaultMiddlewares(app);
57
- const afterHandlers = await this.setupAfterDevMiddleware();
58
- this.addMiddlewareHandler([
59
- ...afters,
60
- ...afterHandlers
61
- ]);
56
+ const { dev, conf } = this;
57
+ const isUseStreamingSSR = (routes) => routes === null || routes === void 0 ? void 0 : routes.some((r) => r.isStream === true);
58
+ const isUseSSRPreload = () => {
59
+ const { server: { ssr, ssrByEntries } } = conf;
60
+ const checkUsePreload = (ssr2) => typeof ssr2 === "object" && Boolean(ssr2.preload);
61
+ return checkUsePreload(ssr) || Object.values(ssrByEntries || {}).some((ssr2) => checkUsePreload(ssr2));
62
+ };
63
+ const { middlewares: rsbuildMiddlewares, close, onUpgrade } = (
64
+ // https://github.com/web-infra-dev/rsbuild/blob/32fbb85e22158d5c4655505ce75e3452ce22dbb1/packages/shared/src/types/server.ts#L112
65
+ await this.getMiddlewares({
66
+ ...transformToRsbuildServerOptions(this.dev),
67
+ compress: !isUseStreamingSSR(this.getRoutes()) && !isUseSSRPreload() && dev.compress,
68
+ htmlFallback: false,
69
+ publicDir: false
70
+ })
71
+ );
72
+ app.on("upgrade", onUpgrade);
73
+ this.rsbuild.onDevCompileDone(({ stats }) => {
74
+ if (stats.toJson({
75
+ all: false
76
+ }).name !== "server") {
77
+ this.onRepack({
78
+ routes: this.getRoutes()
79
+ });
80
+ }
81
+ });
82
+ await this.applyDefaultMiddlewares();
83
+ this.addMiddlewareHandler(rsbuildMiddlewares);
84
+ this.closeCb.push(close);
85
+ this.initFileReader();
62
86
  await super.onInit(runner, app);
63
87
  if (dev.watch) {
64
88
  this.startWatcher();
@@ -68,6 +92,36 @@ class ModernDevServer extends ModernServer {
68
92
  });
69
93
  }
70
94
  }
95
+ initFileReader() {
96
+ var _this_dev_devMiddleware, _this_dev;
97
+ let isInit = false;
98
+ if (((_this_dev = this.dev) === null || _this_dev === void 0 ? void 0 : (_this_dev_devMiddleware = _this_dev.devMiddleware) === null || _this_dev_devMiddleware === void 0 ? void 0 : _this_dev_devMiddleware.writeToDisk) === false) {
99
+ this.addHandler((ctx, next) => {
100
+ var _ctx_res_locals;
101
+ if (isInit) {
102
+ return next();
103
+ }
104
+ isInit = true;
105
+ if (!((_ctx_res_locals = ctx.res.locals) === null || _ctx_res_locals === void 0 ? void 0 : _ctx_res_locals.webpack)) {
106
+ fileReader.reset();
107
+ return next();
108
+ }
109
+ const { devMiddleware: webpackDevMid } = ctx.res.locals.webpack;
110
+ const { outputFileSystem } = webpackDevMid;
111
+ if (outputFileSystem) {
112
+ fileReader.reset(outputFileSystem);
113
+ } else {
114
+ fileReader.reset();
115
+ }
116
+ return next();
117
+ });
118
+ }
119
+ }
120
+ async close() {
121
+ for (const cb of this.closeCb) {
122
+ await cb();
123
+ }
124
+ }
71
125
  // override the ModernServer renderHandler logic
72
126
  getRenderHandler() {
73
127
  if (this.useWorkerSSR) {
@@ -87,36 +141,8 @@ class ModernDevServer extends ModernServer {
87
141
  }
88
142
  return super.getRenderHandler();
89
143
  }
90
- async applyDefaultMiddlewares(app) {
91
- const { pwd, dev, devMiddleware, conf } = this;
92
- const isUseStreamingSSR = (routes) => routes === null || routes === void 0 ? void 0 : routes.some((r) => r.isStream === true);
93
- const isUseSSRPreload = () => {
94
- const { server: { ssr, ssrByEntries } } = conf;
95
- const checkUsePreload = (ssr2) => typeof ssr2 === "object" && Boolean(ssr2.preload);
96
- return checkUsePreload(ssr) || Object.values(ssrByEntries || {}).some((ssr2) => checkUsePreload(ssr2));
97
- };
98
- if (!isUseStreamingSSR(this.getRoutes()) && !isUseSSRPreload() && dev.compress) {
99
- const { default: compression } = await import("http-compression");
100
- this.addHandler((ctx, next) => {
101
- compression({
102
- gzip: true,
103
- brotli: false
104
- })(ctx.req, ctx.res, next);
105
- });
106
- }
107
- this.addHandler((ctx, next) => {
108
- ctx.res.setHeader("Access-Control-Allow-Origin", "*");
109
- if (ctx.path.includes("hot-update")) {
110
- ctx.res.setHeader("Access-Control-Allow-Credentials", "false");
111
- }
112
- const confHeaders = dev.headers;
113
- if (confHeaders) {
114
- for (const [key, value] of Object.entries(confHeaders)) {
115
- ctx.res.setHeader(key, value);
116
- }
117
- }
118
- next();
119
- });
144
+ async applyDefaultMiddlewares() {
145
+ const { pwd } = this;
120
146
  this.mockHandler = createMockHandler({
121
147
  pwd
122
148
  });
@@ -127,43 +153,13 @@ class ModernDevServer extends ModernServer {
127
153
  next();
128
154
  }
129
155
  });
130
- if (dev.proxy) {
131
- const { handlers, handleUpgrade } = createProxyHandler(dev.proxy);
132
- app && handleUpgrade(app);
133
- handlers.forEach((handler) => {
134
- this.addHandler(handler);
135
- });
136
- }
137
- devMiddleware.init(app);
138
- devMiddleware.on("change", (stats) => {
139
- if (stats.toJson({
140
- all: false
141
- }).name !== "server") {
142
- this.onRepack({
143
- routes: this.getRoutes()
144
- });
145
- }
146
- });
147
- this.addHandler((ctx, next) => {
148
- const { req, res } = ctx;
149
- if (devMiddleware.middleware) {
150
- devMiddleware.middleware(req, res, next);
151
- } else {
152
- next();
153
- }
154
- });
155
- if (dev.historyApiFallback) {
156
- const { default: connectHistoryApiFallback } = await import("connect-history-api-fallback");
157
- const historyApiFallbackMiddleware = connectHistoryApiFallback(typeof dev.historyApiFallback === "boolean" ? {} : dev.historyApiFallback);
158
- this.addHandler((ctx, next) => historyApiFallbackMiddleware(ctx.req, ctx.res, next));
159
- }
160
156
  }
161
157
  onRepack(options = {}) {
162
158
  if (Array.isArray(options.routes)) {
163
159
  this.router.reset(this.filterRoutes(options.routes));
164
160
  }
165
161
  this.cleanSSRCache();
166
- this.reader.updateFile();
162
+ fileReader.reset();
167
163
  this.runner.repack();
168
164
  super.onRepack(options);
169
165
  }
@@ -180,32 +176,6 @@ class ModernDevServer extends ModernServer {
180
176
  }
181
177
  warmupSSRBundle() {
182
178
  }
183
- initReader() {
184
- var _this_dev_devMiddleware, _this_dev;
185
- let isInit = false;
186
- if (this.devMiddleware && ((_this_dev = this.dev) === null || _this_dev === void 0 ? void 0 : (_this_dev_devMiddleware = _this_dev.devMiddleware) === null || _this_dev_devMiddleware === void 0 ? void 0 : _this_dev_devMiddleware.writeToDisk) === false) {
187
- this.addHandler((ctx, next) => {
188
- if (isInit) {
189
- return next();
190
- }
191
- isInit = true;
192
- if (!ctx.res.locals.webpack) {
193
- this.reader.init();
194
- return next();
195
- }
196
- const { devMiddleware: webpackDevMid } = ctx.res.locals.webpack;
197
- const { outputFileSystem } = webpackDevMid;
198
- if (outputFileSystem) {
199
- this.reader.init(outputFileSystem);
200
- } else {
201
- this.reader.init();
202
- }
203
- return next();
204
- });
205
- } else {
206
- super.initReader();
207
- }
208
- }
209
179
  async onServerChange({ filepath, event }) {
210
180
  const { pwd } = this;
211
181
  const { mock } = AGGRED_DIR;
@@ -240,28 +210,10 @@ class ModernDevServer extends ModernServer {
240
210
  });
241
211
  }
242
212
  setupStaticMiddleware(_) {
243
- return async (context, next) => {
213
+ return async (_context, next) => {
244
214
  return next();
245
215
  };
246
216
  }
247
- async setupBeforeDevMiddleware() {
248
- const { runner, conf, dev } = this;
249
- const setupMids = dev.before || [];
250
- const pluginMids = await runner.beforeDevServer(conf);
251
- return [
252
- ...setupMids,
253
- ...pluginMids
254
- ].flat();
255
- }
256
- async setupAfterDevMiddleware() {
257
- const { runner, conf, dev } = this;
258
- const setupMids = dev.after || [];
259
- const pluginMids = await runner.afterDevServer(conf);
260
- return [
261
- ...pluginMids,
262
- ...setupMids
263
- ].flat();
264
- }
265
217
  cleanSSRCache() {
266
218
  const { distDir } = this;
267
219
  const bundles = this.router.getBundles();
@@ -317,16 +269,16 @@ class ModernDevServer extends ModernServer {
317
269
  _define_property(this, "dev", void 0);
318
270
  _define_property(this, "useWorkerSSR", void 0);
319
271
  _define_property(this, "appContext", void 0);
320
- _define_property(this, "devMiddleware", void 0);
272
+ _define_property(this, "getMiddlewares", void 0);
273
+ _define_property(this, "rsbuild", void 0);
321
274
  _define_property(this, "watcher", void 0);
275
+ _define_property(this, "closeCb", []);
322
276
  this.appContext = options.appContext;
323
277
  this.workDir = this.pwd;
324
278
  this.useWorkerSSR = Boolean(options.useWorkerSSR);
325
279
  this.dev = this.getDevOptions(options);
326
- this.devMiddleware = new DevMiddleware({
327
- dev: this.dev,
328
- devMiddleware: options.devMiddleware
329
- });
280
+ this.getMiddlewares = options.getMiddlewares;
281
+ this.rsbuild = options.rsbuild;
330
282
  enableRegister(this.pwd, this.conf);
331
283
  }
332
284
  }
@@ -0,0 +1,318 @@
1
+ import { _ as _define_property } from "@swc/helpers/_/_define_property";
2
+ import { createServer } from "http";
3
+ import path from "path";
4
+ import { createServer as createHttpsServer } from "https";
5
+ import { API_DIR, SERVER_BUNDLE_DIRECTORY, SERVER_DIR, SHARED_DIR, LOADABLE_STATS_FILE } from "@modern-js/utils";
6
+ import { createProxyHandler, ModernServer, AGGRED_DIR, createRenderHandler } from "@modern-js/prod-server";
7
+ import { merge as deepMerge } from "@modern-js/utils/lodash";
8
+ import { fileReader } from "@modern-js/runtime-utils/fileReader";
9
+ import { getDefaultDevOptions } from "../constants";
10
+ import { createMockHandler } from "../dev-tools/mock";
11
+ import { enableRegister } from "../dev-tools/register";
12
+ import Watcher, { mergeWatchOptions } from "../dev-tools/watcher";
13
+ import DevMiddleware from "../dev-tools/dev-middleware";
14
+ import { workerSSRRender } from "./workerSSRRender";
15
+ class ModernDevServer extends ModernServer {
16
+ getDevOptions(options) {
17
+ const devOptions = typeof options.dev === "boolean" ? {} : options.dev;
18
+ const defaultOptions = getDefaultDevOptions();
19
+ return deepMerge(defaultOptions, devOptions);
20
+ }
21
+ addMiddlewareHandler(handlers) {
22
+ handlers.forEach((handler) => {
23
+ this.addHandler((ctx, next) => {
24
+ const { req, res } = ctx;
25
+ return handler(req, res, next);
26
+ });
27
+ });
28
+ }
29
+ applySetupMiddlewares() {
30
+ const setupMiddlewares = this.dev.setupMiddlewares || [];
31
+ const serverOptions = {
32
+ sockWrite: (type, data) => this.devMiddleware.sockWrite(type, data)
33
+ };
34
+ const befores = [];
35
+ const afters = [];
36
+ setupMiddlewares.forEach((handler) => {
37
+ handler({
38
+ unshift: (...handlers) => befores.unshift(...handlers),
39
+ push: (...handlers) => afters.push(...handlers)
40
+ }, serverOptions);
41
+ });
42
+ return {
43
+ befores,
44
+ afters
45
+ };
46
+ }
47
+ // Complete the preparation of services
48
+ async onInit(runner, app) {
49
+ this.runner = runner;
50
+ const { dev } = this;
51
+ const { befores, afters } = this.applySetupMiddlewares();
52
+ const beforeHandlers = this.dev.before || [];
53
+ this.addMiddlewareHandler([
54
+ ...beforeHandlers,
55
+ ...befores
56
+ ]);
57
+ await this.applyDefaultMiddlewares(app);
58
+ const afterHandlers = this.dev.after || [];
59
+ this.addMiddlewareHandler([
60
+ ...afters,
61
+ ...afterHandlers
62
+ ]);
63
+ this.initFileReader();
64
+ await super.onInit(runner, app);
65
+ if (dev.watch) {
66
+ this.startWatcher();
67
+ app.on("close", async () => {
68
+ var _this_watcher;
69
+ await ((_this_watcher = this.watcher) === null || _this_watcher === void 0 ? void 0 : _this_watcher.close());
70
+ });
71
+ }
72
+ }
73
+ // override the ModernServer renderHandler logic
74
+ getRenderHandler() {
75
+ if (this.useWorkerSSR) {
76
+ var _this_conf_server, _conf_security;
77
+ const { distDir, staticGenerate, conf, metaName } = this;
78
+ const ssrConfig = (_this_conf_server = this.conf.server) === null || _this_conf_server === void 0 ? void 0 : _this_conf_server.ssr;
79
+ const forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
80
+ return createRenderHandler({
81
+ ssrRender: workerSSRRender,
82
+ distDir,
83
+ staticGenerate,
84
+ conf,
85
+ forceCSR,
86
+ nonce: (_conf_security = conf.security) === null || _conf_security === void 0 ? void 0 : _conf_security.nonce,
87
+ metaName
88
+ });
89
+ }
90
+ return super.getRenderHandler();
91
+ }
92
+ initFileReader() {
93
+ var _this_dev_devMiddleware, _this_dev;
94
+ let isInit = false;
95
+ if (((_this_dev = this.dev) === null || _this_dev === void 0 ? void 0 : (_this_dev_devMiddleware = _this_dev.devMiddleware) === null || _this_dev_devMiddleware === void 0 ? void 0 : _this_dev_devMiddleware.writeToDisk) === false) {
96
+ this.addHandler((ctx, next) => {
97
+ var _ctx_res_locals;
98
+ if (isInit) {
99
+ return next();
100
+ }
101
+ isInit = true;
102
+ if (!((_ctx_res_locals = ctx.res.locals) === null || _ctx_res_locals === void 0 ? void 0 : _ctx_res_locals.webpack)) {
103
+ fileReader.reset();
104
+ return next();
105
+ }
106
+ const { devMiddleware: webpackDevMid } = ctx.res.locals.webpack;
107
+ const { outputFileSystem } = webpackDevMid;
108
+ if (outputFileSystem) {
109
+ fileReader.reset(outputFileSystem);
110
+ } else {
111
+ fileReader.reset();
112
+ }
113
+ return next();
114
+ });
115
+ }
116
+ }
117
+ async applyDefaultMiddlewares(app) {
118
+ const { pwd, dev, devMiddleware, conf } = this;
119
+ const isUseStreamingSSR = (routes) => routes === null || routes === void 0 ? void 0 : routes.some((r) => r.isStream === true);
120
+ const isUseSSRPreload = () => {
121
+ const { server: { ssr, ssrByEntries } } = conf;
122
+ const checkUsePreload = (ssr2) => typeof ssr2 === "object" && Boolean(ssr2.preload);
123
+ return checkUsePreload(ssr) || Object.values(ssrByEntries || {}).some((ssr2) => checkUsePreload(ssr2));
124
+ };
125
+ if (!isUseStreamingSSR(this.getRoutes()) && !isUseSSRPreload() && dev.compress) {
126
+ const { default: compression } = await import("http-compression");
127
+ this.addHandler((ctx, next) => {
128
+ compression({
129
+ gzip: true,
130
+ brotli: false
131
+ })(ctx.req, ctx.res, next);
132
+ });
133
+ }
134
+ this.addHandler((ctx, next) => {
135
+ ctx.res.setHeader("Access-Control-Allow-Origin", "*");
136
+ if (ctx.path.includes("hot-update")) {
137
+ ctx.res.setHeader("Access-Control-Allow-Credentials", "false");
138
+ }
139
+ const confHeaders = dev.headers;
140
+ if (confHeaders) {
141
+ for (const [key, value] of Object.entries(confHeaders)) {
142
+ ctx.res.setHeader(key, value);
143
+ }
144
+ }
145
+ next();
146
+ });
147
+ this.mockHandler = createMockHandler({
148
+ pwd
149
+ });
150
+ this.addHandler((ctx, next) => {
151
+ if (this.mockHandler) {
152
+ this.mockHandler(ctx, next);
153
+ } else {
154
+ next();
155
+ }
156
+ });
157
+ if (dev.proxy) {
158
+ const { handlers, handleUpgrade } = createProxyHandler(dev.proxy);
159
+ app && handleUpgrade(app);
160
+ handlers.forEach((handler) => {
161
+ this.addHandler(handler);
162
+ });
163
+ }
164
+ devMiddleware.init(app);
165
+ devMiddleware.on("change", (stats) => {
166
+ if (stats.toJson({
167
+ all: false
168
+ }).name !== "server") {
169
+ this.onRepack({
170
+ routes: this.getRoutes()
171
+ });
172
+ }
173
+ });
174
+ this.addHandler((ctx, next) => {
175
+ const { req, res } = ctx;
176
+ if (devMiddleware.middleware) {
177
+ devMiddleware.middleware(req, res, next);
178
+ } else {
179
+ next();
180
+ }
181
+ });
182
+ if (dev.historyApiFallback) {
183
+ const { default: connectHistoryApiFallback } = await import("connect-history-api-fallback");
184
+ const historyApiFallbackMiddleware = connectHistoryApiFallback(typeof dev.historyApiFallback === "boolean" ? {} : dev.historyApiFallback);
185
+ this.addHandler((ctx, next) => historyApiFallbackMiddleware(ctx.req, ctx.res, next));
186
+ }
187
+ }
188
+ onRepack(options = {}) {
189
+ if (Array.isArray(options.routes)) {
190
+ this.router.reset(this.filterRoutes(options.routes));
191
+ }
192
+ this.cleanSSRCache();
193
+ fileReader.reset();
194
+ this.runner.repack();
195
+ super.onRepack(options);
196
+ }
197
+ async createHTTPServer(handler) {
198
+ const { dev } = this;
199
+ const devHttpsOption = typeof dev === "object" && dev.https;
200
+ if (devHttpsOption) {
201
+ const { genHttpsOptions } = require("../dev-tools/https");
202
+ const httpsOptions = await genHttpsOptions(devHttpsOption, this.pwd);
203
+ return createHttpsServer(httpsOptions, handler);
204
+ } else {
205
+ return createServer(handler);
206
+ }
207
+ }
208
+ warmupSSRBundle() {
209
+ }
210
+ async onServerChange({ filepath, event }) {
211
+ const { pwd } = this;
212
+ const { mock } = AGGRED_DIR;
213
+ const mockPath = path.normalize(path.join(pwd, mock));
214
+ this.runner.reset();
215
+ if (filepath.startsWith(mockPath)) {
216
+ this.mockHandler = createMockHandler({
217
+ pwd
218
+ });
219
+ } else {
220
+ try {
221
+ const success = this.runner.onApiChange([
222
+ {
223
+ filename: filepath,
224
+ event
225
+ }
226
+ ]);
227
+ if (success !== true) {
228
+ await super.onServerChange({
229
+ filepath
230
+ });
231
+ }
232
+ } catch (e) {
233
+ this.logger.error(e);
234
+ }
235
+ }
236
+ }
237
+ createContext(req, res) {
238
+ return super.createContext(req, res, {
239
+ etag: true,
240
+ metaName: this.metaName
241
+ });
242
+ }
243
+ setupStaticMiddleware(_) {
244
+ return async (context, next) => {
245
+ return next();
246
+ };
247
+ }
248
+ cleanSSRCache() {
249
+ const { distDir } = this;
250
+ const bundles = this.router.getBundles();
251
+ bundles.forEach((bundle) => {
252
+ const filepath = path.join(distDir, bundle);
253
+ if (require.cache[filepath]) {
254
+ delete require.cache[filepath];
255
+ }
256
+ });
257
+ const loadable = path.join(distDir, LOADABLE_STATS_FILE);
258
+ if (require.cache[loadable]) {
259
+ delete require.cache[loadable];
260
+ }
261
+ }
262
+ startWatcher() {
263
+ var _this_conf_server;
264
+ const { pwd, distDir, appContext } = this;
265
+ const { mock } = AGGRED_DIR;
266
+ const apiDir = (appContext === null || appContext === void 0 ? void 0 : appContext.apiDirectory) || API_DIR;
267
+ const sharedDir = (appContext === null || appContext === void 0 ? void 0 : appContext.sharedDirectory) || SHARED_DIR;
268
+ const defaultWatched = [
269
+ `${mock}/**/*`,
270
+ `${SERVER_DIR}/**/*`,
271
+ `${apiDir}/**`,
272
+ `${sharedDir}/**/*`,
273
+ `${distDir}/${SERVER_BUNDLE_DIRECTORY}/*-server-loaders.js`
274
+ ];
275
+ const watchOptions = mergeWatchOptions((_this_conf_server = this.conf.server) === null || _this_conf_server === void 0 ? void 0 : _this_conf_server.watchOptions);
276
+ const defaultWatchedPaths = defaultWatched.map((p) => {
277
+ const finalPath = path.isAbsolute(p) ? p : path.join(pwd, p);
278
+ return path.normalize(finalPath);
279
+ });
280
+ const watcher = new Watcher();
281
+ watcher.createDepTree();
282
+ watcher.listen(defaultWatchedPaths, watchOptions, (filepath, event) => {
283
+ if (filepath.includes("-server-loaders.js")) {
284
+ delete require.cache[filepath];
285
+ return;
286
+ } else {
287
+ watcher.updateDepTree();
288
+ watcher.cleanDepCache(filepath);
289
+ }
290
+ this.onServerChange({
291
+ filepath,
292
+ event
293
+ });
294
+ });
295
+ this.watcher = watcher;
296
+ }
297
+ constructor(options) {
298
+ super(options);
299
+ _define_property(this, "mockHandler", null);
300
+ _define_property(this, "dev", void 0);
301
+ _define_property(this, "useWorkerSSR", void 0);
302
+ _define_property(this, "appContext", void 0);
303
+ _define_property(this, "devMiddleware", void 0);
304
+ _define_property(this, "watcher", void 0);
305
+ this.appContext = options.appContext;
306
+ this.workDir = this.pwd;
307
+ this.useWorkerSSR = Boolean(options.useWorkerSSR);
308
+ this.dev = this.getDevOptions(options);
309
+ this.devMiddleware = new DevMiddleware({
310
+ dev: this.dev,
311
+ devMiddleware: options.devMiddleware
312
+ });
313
+ enableRegister(this.pwd, this.conf);
314
+ }
315
+ }
316
+ export {
317
+ ModernDevServer
318
+ };
@@ -1,5 +1,6 @@
1
1
  import { Server } from "@modern-js/prod-server";
2
- import { ModernDevServer } from "./devServer";
2
+ import { ModernDevServer } from "./devServerOld";
3
+ import { ModernDevServer as ModernDevServerForRsbuild } from "./devServer";
3
4
  const createDevServer = (options) => {
4
5
  return new ModernDevServer(options);
5
6
  };
@@ -11,6 +12,15 @@ class DevServer extends Server {
11
12
  }
12
13
  }
13
14
  }
15
+ class DevServerForRsbuild extends Server {
16
+ constructor(options) {
17
+ super(options);
18
+ if (options.dev) {
19
+ this.serverImpl = (options2) => new ModernDevServerForRsbuild(options2);
20
+ }
21
+ }
22
+ }
14
23
  export {
15
- DevServer
24
+ DevServer,
25
+ DevServerForRsbuild
16
26
  };
@@ -1,5 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
+ /// <reference types="node/http" />
4
+ /// <reference types="@modern-js/prod-server/src/type" />
3
5
  import { Server } from 'http';
4
6
  import { EventEmitter } from 'events';
5
7
  import { DevServerOptions, DevMiddlewareAPI, DevMiddleware as CustomDevMiddleware } from '../../types';
@@ -1,4 +1,6 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node/http" />
3
+ /// <reference types="@modern-js/prod-server/src/type" />
2
4
  import { Server } from 'http';
3
5
  import ws from 'ws';
4
6
  import type webpack from 'webpack';
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import type Buffer from 'buffer';
2
3
  import type { DevServerHttpsOptions } from '../../types';
3
4
  export declare const genHttpsOptions: (userOptions: DevServerHttpsOptions, pwd: string) => Promise<{
@@ -1,4 +1,6 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node/http" />
3
+ /// <reference types="@modern-js/prod-server/src/type" />
2
4
  import { IncomingMessage, ServerResponse } from 'http';
3
5
  import type { ModernServerContext, NextFunction } from '@modern-js/types';
4
6
  export type MockConfig = Record<string, {