@modern-js/server 0.0.0-nightly-20231214170701 → 0.0.0-nightly-20231215170639

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.
@@ -3,14 +3,38 @@ 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
8
  import { getDefaultDevOptions } from "../constants";
9
9
  import { createMockHandler } from "../dev-tools/mock";
10
10
  import { enableRegister } from "../dev-tools/register";
11
11
  import Watcher, { mergeWatchOptions } from "../dev-tools/watcher";
12
- import DevMiddleware from "../dev-tools/dev-middleware";
13
12
  import { workerSSRRender } from "./workerSSRRender";
13
+ const transformToRsbuildServerOptions = (dev) => {
14
+ var _dev_devMiddleware, _dev_before, _dev_after;
15
+ const rsbuildOptions = {
16
+ hmr: Boolean(dev.hot),
17
+ client: dev.client,
18
+ writeToDisk: (_dev_devMiddleware = dev.devMiddleware) === null || _dev_devMiddleware === void 0 ? void 0 : _dev_devMiddleware.writeToDisk,
19
+ compress: dev.compress,
20
+ headers: dev.headers,
21
+ historyApiFallback: dev.historyApiFallback,
22
+ proxy: dev.proxy,
23
+ publicDir: false
24
+ };
25
+ 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)) {
26
+ rsbuildOptions.setupMiddlewares = [
27
+ ...dev.setupMiddlewares || [],
28
+ (middlewares) => {
29
+ middlewares.unshift(...dev.before || []);
30
+ middlewares.push(...dev.after || []);
31
+ }
32
+ ];
33
+ } else if (dev.setupMiddlewares) {
34
+ rsbuildOptions.setupMiddlewares = dev.setupMiddlewares;
35
+ }
36
+ return rsbuildOptions;
37
+ };
14
38
  class ModernDevServer extends ModernServer {
15
39
  getDevOptions(options) {
16
40
  const devOptions = typeof options.dev === "boolean" ? {} : options.dev;
@@ -25,40 +49,38 @@ class ModernDevServer extends ModernServer {
25
49
  });
26
50
  });
27
51
  }
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
52
  // Complete the preparation of services
47
53
  async onInit(runner, app) {
48
54
  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
- ]);
55
+ const { dev, conf } = this;
56
+ const isUseStreamingSSR = (routes) => routes === null || routes === void 0 ? void 0 : routes.some((r) => r.isStream === true);
57
+ const isUseSSRPreload = () => {
58
+ const { server: { ssr, ssrByEntries } } = conf;
59
+ const checkUsePreload = (ssr2) => typeof ssr2 === "object" && Boolean(ssr2.preload);
60
+ return checkUsePreload(ssr) || Object.values(ssrByEntries || {}).some((ssr2) => checkUsePreload(ssr2));
61
+ };
62
+ const { middlewares: rsbuildMiddlewares, close, onUpgrade } = (
63
+ // https://github.com/web-infra-dev/rsbuild/blob/32fbb85e22158d5c4655505ce75e3452ce22dbb1/packages/shared/src/types/server.ts#L112
64
+ await this.getMiddlewares({
65
+ ...transformToRsbuildServerOptions(this.dev),
66
+ compress: !isUseStreamingSSR(this.getRoutes()) && !isUseSSRPreload() && dev.compress,
67
+ htmlFallback: false,
68
+ publicDir: false
69
+ })
70
+ );
71
+ app.on("upgrade", onUpgrade);
72
+ this.rsbuild.onDevCompileDone(({ stats }) => {
73
+ if (stats.toJson({
74
+ all: false
75
+ }).name !== "server") {
76
+ this.onRepack({
77
+ routes: this.getRoutes()
78
+ });
79
+ }
80
+ });
81
+ await this.applyDefaultMiddlewares();
82
+ this.addMiddlewareHandler(rsbuildMiddlewares);
83
+ this.closeCb.push(close);
62
84
  await super.onInit(runner, app);
63
85
  if (dev.watch) {
64
86
  this.startWatcher();
@@ -68,6 +90,11 @@ class ModernDevServer extends ModernServer {
68
90
  });
69
91
  }
70
92
  }
93
+ async close() {
94
+ for (const cb of this.closeCb) {
95
+ await cb();
96
+ }
97
+ }
71
98
  // override the ModernServer renderHandler logic
72
99
  getRenderHandler() {
73
100
  if (this.useWorkerSSR) {
@@ -87,36 +114,8 @@ class ModernDevServer extends ModernServer {
87
114
  }
88
115
  return super.getRenderHandler();
89
116
  }
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
- });
117
+ async applyDefaultMiddlewares() {
118
+ const { pwd } = this;
120
119
  this.mockHandler = createMockHandler({
121
120
  pwd
122
121
  });
@@ -127,36 +126,6 @@ class ModernDevServer extends ModernServer {
127
126
  next();
128
127
  }
129
128
  });
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
129
  }
161
130
  onRepack(options = {}) {
162
131
  if (Array.isArray(options.routes)) {
@@ -183,13 +152,14 @@ class ModernDevServer extends ModernServer {
183
152
  initReader() {
184
153
  var _this_dev_devMiddleware, _this_dev;
185
154
  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) {
155
+ 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) {
187
156
  this.addHandler((ctx, next) => {
157
+ var _ctx_res_locals;
188
158
  if (isInit) {
189
159
  return next();
190
160
  }
191
161
  isInit = true;
192
- if (!ctx.res.locals.webpack) {
162
+ if (!((_ctx_res_locals = ctx.res.locals) === null || _ctx_res_locals === void 0 ? void 0 : _ctx_res_locals.webpack)) {
193
163
  this.reader.init();
194
164
  return next();
195
165
  }
@@ -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,317 @@
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 { getDefaultDevOptions } from "../constants";
9
+ import { createMockHandler } from "../dev-tools/mock";
10
+ import { enableRegister } from "../dev-tools/register";
11
+ import Watcher, { mergeWatchOptions } from "../dev-tools/watcher";
12
+ import DevMiddleware from "../dev-tools/dev-middleware";
13
+ import { workerSSRRender } from "./workerSSRRender";
14
+ class ModernDevServer extends ModernServer {
15
+ getDevOptions(options) {
16
+ const devOptions = typeof options.dev === "boolean" ? {} : options.dev;
17
+ const defaultOptions = getDefaultDevOptions();
18
+ return deepMerge(defaultOptions, devOptions);
19
+ }
20
+ addMiddlewareHandler(handlers) {
21
+ handlers.forEach((handler) => {
22
+ this.addHandler((ctx, next) => {
23
+ const { req, res } = ctx;
24
+ return handler(req, res, next);
25
+ });
26
+ });
27
+ }
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
+ // Complete the preparation of services
47
+ async onInit(runner, app) {
48
+ this.runner = runner;
49
+ const { dev } = this;
50
+ const { befores, afters } = this.applySetupMiddlewares();
51
+ const beforeHandlers = this.dev.before || [];
52
+ this.addMiddlewareHandler([
53
+ ...beforeHandlers,
54
+ ...befores
55
+ ]);
56
+ await this.applyDefaultMiddlewares(app);
57
+ const afterHandlers = this.dev.after || [];
58
+ this.addMiddlewareHandler([
59
+ ...afters,
60
+ ...afterHandlers
61
+ ]);
62
+ await super.onInit(runner, app);
63
+ if (dev.watch) {
64
+ this.startWatcher();
65
+ app.on("close", async () => {
66
+ var _this_watcher;
67
+ await ((_this_watcher = this.watcher) === null || _this_watcher === void 0 ? void 0 : _this_watcher.close());
68
+ });
69
+ }
70
+ }
71
+ // override the ModernServer renderHandler logic
72
+ getRenderHandler() {
73
+ if (this.useWorkerSSR) {
74
+ var _this_conf_server, _conf_security;
75
+ const { distDir, staticGenerate, conf, metaName } = this;
76
+ const ssrConfig = (_this_conf_server = this.conf.server) === null || _this_conf_server === void 0 ? void 0 : _this_conf_server.ssr;
77
+ const forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
78
+ return createRenderHandler({
79
+ ssrRender: workerSSRRender,
80
+ distDir,
81
+ staticGenerate,
82
+ conf,
83
+ forceCSR,
84
+ nonce: (_conf_security = conf.security) === null || _conf_security === void 0 ? void 0 : _conf_security.nonce,
85
+ metaName
86
+ });
87
+ }
88
+ return super.getRenderHandler();
89
+ }
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
+ });
120
+ this.mockHandler = createMockHandler({
121
+ pwd
122
+ });
123
+ this.addHandler((ctx, next) => {
124
+ if (this.mockHandler) {
125
+ this.mockHandler(ctx, next);
126
+ } else {
127
+ next();
128
+ }
129
+ });
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
+ }
161
+ onRepack(options = {}) {
162
+ if (Array.isArray(options.routes)) {
163
+ this.router.reset(this.filterRoutes(options.routes));
164
+ }
165
+ this.cleanSSRCache();
166
+ this.reader.updateFile();
167
+ this.runner.repack();
168
+ super.onRepack(options);
169
+ }
170
+ async createHTTPServer(handler) {
171
+ const { dev } = this;
172
+ const devHttpsOption = typeof dev === "object" && dev.https;
173
+ if (devHttpsOption) {
174
+ const { genHttpsOptions } = require("../dev-tools/https");
175
+ const httpsOptions = await genHttpsOptions(devHttpsOption, this.pwd);
176
+ return createHttpsServer(httpsOptions, handler);
177
+ } else {
178
+ return createServer(handler);
179
+ }
180
+ }
181
+ warmupSSRBundle() {
182
+ }
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
+ async onServerChange({ filepath, event }) {
210
+ const { pwd } = this;
211
+ const { mock } = AGGRED_DIR;
212
+ const mockPath = path.normalize(path.join(pwd, mock));
213
+ this.runner.reset();
214
+ if (filepath.startsWith(mockPath)) {
215
+ this.mockHandler = createMockHandler({
216
+ pwd
217
+ });
218
+ } else {
219
+ try {
220
+ const success = this.runner.onApiChange([
221
+ {
222
+ filename: filepath,
223
+ event
224
+ }
225
+ ]);
226
+ if (success !== true) {
227
+ await super.onServerChange({
228
+ filepath
229
+ });
230
+ }
231
+ } catch (e) {
232
+ this.logger.error(e);
233
+ }
234
+ }
235
+ }
236
+ createContext(req, res) {
237
+ return super.createContext(req, res, {
238
+ etag: true,
239
+ metaName: this.metaName
240
+ });
241
+ }
242
+ setupStaticMiddleware(_) {
243
+ return async (context, next) => {
244
+ return next();
245
+ };
246
+ }
247
+ cleanSSRCache() {
248
+ const { distDir } = this;
249
+ const bundles = this.router.getBundles();
250
+ bundles.forEach((bundle) => {
251
+ const filepath = path.join(distDir, bundle);
252
+ if (require.cache[filepath]) {
253
+ delete require.cache[filepath];
254
+ }
255
+ });
256
+ const loadable = path.join(distDir, LOADABLE_STATS_FILE);
257
+ if (require.cache[loadable]) {
258
+ delete require.cache[loadable];
259
+ }
260
+ }
261
+ startWatcher() {
262
+ var _this_conf_server;
263
+ const { pwd, distDir, appContext } = this;
264
+ const { mock } = AGGRED_DIR;
265
+ const apiDir = (appContext === null || appContext === void 0 ? void 0 : appContext.apiDirectory) || API_DIR;
266
+ const sharedDir = (appContext === null || appContext === void 0 ? void 0 : appContext.sharedDirectory) || SHARED_DIR;
267
+ const defaultWatched = [
268
+ `${mock}/**/*`,
269
+ `${SERVER_DIR}/**/*`,
270
+ `${apiDir}/**`,
271
+ `${sharedDir}/**/*`,
272
+ `${distDir}/${SERVER_BUNDLE_DIRECTORY}/*-server-loaders.js`
273
+ ];
274
+ const watchOptions = mergeWatchOptions((_this_conf_server = this.conf.server) === null || _this_conf_server === void 0 ? void 0 : _this_conf_server.watchOptions);
275
+ const defaultWatchedPaths = defaultWatched.map((p) => {
276
+ const finalPath = path.isAbsolute(p) ? p : path.join(pwd, p);
277
+ return path.normalize(finalPath);
278
+ });
279
+ const watcher = new Watcher();
280
+ watcher.createDepTree();
281
+ watcher.listen(defaultWatchedPaths, watchOptions, (filepath, event) => {
282
+ if (filepath.includes("-server-loaders.js")) {
283
+ delete require.cache[filepath];
284
+ return;
285
+ } else {
286
+ watcher.updateDepTree();
287
+ watcher.cleanDepCache(filepath);
288
+ }
289
+ this.onServerChange({
290
+ filepath,
291
+ event
292
+ });
293
+ });
294
+ this.watcher = watcher;
295
+ }
296
+ constructor(options) {
297
+ super(options);
298
+ _define_property(this, "mockHandler", null);
299
+ _define_property(this, "dev", void 0);
300
+ _define_property(this, "useWorkerSSR", void 0);
301
+ _define_property(this, "appContext", void 0);
302
+ _define_property(this, "devMiddleware", void 0);
303
+ _define_property(this, "watcher", void 0);
304
+ this.appContext = options.appContext;
305
+ this.workDir = this.pwd;
306
+ this.useWorkerSSR = Boolean(options.useWorkerSSR);
307
+ this.dev = this.getDevOptions(options);
308
+ this.devMiddleware = new DevMiddleware({
309
+ dev: this.dev,
310
+ devMiddleware: options.devMiddleware
311
+ });
312
+ enableRegister(this.pwd, this.conf);
313
+ }
314
+ }
315
+ export {
316
+ ModernDevServer
317
+ };
@@ -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,6 +1,6 @@
1
- import { DevServer as Server } from './server';
1
+ import { DevServer as Server, DevServerForRsbuild as ServerForRsbuild } from './server';
2
2
  import type { ModernDevServerOptions } from './types';
3
- export { Server };
3
+ export { Server, ServerForRsbuild };
4
4
  export type { ModernDevServerOptions };
5
5
  declare const _default: (options: ModernDevServerOptions) => Promise<Server>;
6
6
  export default _default;
@@ -7,19 +7,21 @@ import { NextFunction, ServerHookRunner, ModernServer, BuildOptions } from '@mod
7
7
  import type { ModernServerContext } from '@modern-js/types';
8
8
  import { RenderHandler } from '@modern-js/prod-server/src/libs/render';
9
9
  import { WatchEvent } from '../dev-tools/watcher';
10
- import type { ModernDevServerOptions } from '../types';
10
+ import type { ModernDevServerOptionsNew } from '../types';
11
11
  export declare class ModernDevServer extends ModernServer {
12
12
  private mockHandler;
13
13
  private readonly dev;
14
14
  private readonly useWorkerSSR;
15
15
  private readonly appContext;
16
- private readonly devMiddleware;
16
+ private getMiddlewares;
17
+ private rsbuild;
17
18
  private watcher?;
18
- constructor(options: ModernDevServerOptions);
19
+ private closeCb;
20
+ constructor(options: ModernDevServerOptionsNew);
19
21
  private getDevOptions;
20
22
  private addMiddlewareHandler;
21
- private applySetupMiddlewares;
22
23
  onInit(runner: ServerHookRunner, app: Server): Promise<void>;
24
+ close(): Promise<void>;
23
25
  getRenderHandler(): RenderHandler;
24
26
  private applyDefaultMiddlewares;
25
27
  onRepack(options?: BuildOptions): void;
@@ -31,9 +33,7 @@ export declare class ModernDevServer extends ModernServer {
31
33
  event: WatchEvent;
32
34
  }): Promise<void>;
33
35
  protected createContext(req: IncomingMessage, res: ServerResponse): import("@modern-js/prod-server/src/libs/context").ModernServerContext;
34
- protected setupStaticMiddleware(_: string): (context: ModernServerContext, next: NextFunction) => Promise<void>;
35
- private setupBeforeDevMiddleware;
36
- private setupAfterDevMiddleware;
36
+ protected setupStaticMiddleware(_: string): (_context: ModernServerContext, next: NextFunction) => Promise<void>;
37
37
  private cleanSSRCache;
38
38
  private startWatcher;
39
39
  }
@@ -0,0 +1,37 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /// <reference types="node/http" />
4
+ /// <reference types="@modern-js/prod-server/src/type" />
5
+ import { IncomingMessage, Server, ServerResponse } from 'http';
6
+ import { NextFunction, ServerHookRunner, ModernServer, BuildOptions } from '@modern-js/prod-server';
7
+ import type { ModernServerContext } from '@modern-js/types';
8
+ import { RenderHandler } from '@modern-js/prod-server/src/libs/render';
9
+ import { WatchEvent } from '../dev-tools/watcher';
10
+ import type { ModernDevServerOptions } from '../types';
11
+ export declare class ModernDevServer extends ModernServer {
12
+ private mockHandler;
13
+ private readonly dev;
14
+ private readonly useWorkerSSR;
15
+ private readonly appContext;
16
+ private readonly devMiddleware;
17
+ private watcher?;
18
+ constructor(options: ModernDevServerOptions);
19
+ private getDevOptions;
20
+ private addMiddlewareHandler;
21
+ private applySetupMiddlewares;
22
+ onInit(runner: ServerHookRunner, app: Server): Promise<void>;
23
+ getRenderHandler(): RenderHandler;
24
+ private applyDefaultMiddlewares;
25
+ onRepack(options?: BuildOptions): void;
26
+ createHTTPServer(handler: (req: IncomingMessage, res: ServerResponse, next?: () => void) => void): Promise<Server<typeof IncomingMessage, typeof ServerResponse> | import("https").Server<typeof IncomingMessage, typeof ServerResponse>>;
27
+ protected warmupSSRBundle(): void;
28
+ protected initReader(): void;
29
+ protected onServerChange({ filepath, event, }: {
30
+ filepath: string;
31
+ event: WatchEvent;
32
+ }): Promise<void>;
33
+ protected createContext(req: IncomingMessage, res: ServerResponse): import("@modern-js/prod-server/src/libs/context").ModernServerContext;
34
+ protected setupStaticMiddleware(_: string): (context: ModernServerContext, next: NextFunction) => Promise<void>;
35
+ private cleanSSRCache;
36
+ private startWatcher;
37
+ }