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