@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
@@ -44,8 +44,7 @@ function getHMRClientPath(client) {
44
44
  const clientEntry = `${require.resolve("@modern-js/server/hmr-client")}?${host}${path}${port}${protocol}`;
45
45
  return clientEntry;
46
46
  }
47
- var DevMiddleware;
48
- DevMiddleware = class DevMiddleware2 extends import_events.EventEmitter {
47
+ class DevMiddleware extends import_events.EventEmitter {
49
48
  init(app) {
50
49
  app.on("listening", () => {
51
50
  this.socketServer.prepare(app);
@@ -92,4 +91,4 @@ DevMiddleware = class DevMiddleware2 extends import_events.EventEmitter {
92
91
  this.middleware = this.setupDevMiddleware(devMiddleware);
93
92
  }
94
93
  }
95
- };
94
+ }
@@ -34,8 +34,7 @@ module.exports = __toCommonJS(socketServer_exports);
34
34
  var import_define_property = require("@swc/helpers/_/_define_property");
35
35
  var import_ws = __toESM(require("ws"));
36
36
  var import_utils = require("@modern-js/utils");
37
- var SocketServer;
38
- SocketServer = class SocketServer2 {
37
+ class SocketServer {
39
38
  // create socket, install socket handler, bind socket event
40
39
  prepare(app) {
41
40
  var _this_options_client;
@@ -176,4 +175,4 @@ SocketServer = class SocketServer2 {
176
175
  (0, import_define_property._)(this, "timer", null);
177
176
  this.options = options;
178
177
  }
179
- };
178
+ }
@@ -76,8 +76,7 @@ const mergeWatchOptions = (options) => {
76
76
  };
77
77
  return finalWatchOptions;
78
78
  };
79
- var Watcher;
80
- Watcher = class Watcher2 {
79
+ class Watcher {
81
80
  listen(files, options, callback) {
82
81
  const watched = files.filter(Boolean);
83
82
  const filenames = watched.map((filename) => filename.replace(/\\/g, "/"));
@@ -130,7 +129,7 @@ Watcher = class Watcher2 {
130
129
  (0, import_define_property._)(this, "dependencyTree", null);
131
130
  (0, import_define_property._)(this, "watcher", void 0);
132
131
  }
133
- };
132
+ }
134
133
  // Annotate the CommonJS export names for ESM import in node:
135
134
  0 && (module.exports = {
136
135
  defaultWatchOptions,
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
  });
@@ -38,15 +38,40 @@ var import_https = require("https");
38
38
  var import_utils = require("@modern-js/utils");
39
39
  var import_prod_server = require("@modern-js/prod-server");
40
40
  var import_lodash = require("@modern-js/utils/lodash");
41
+ var import_fileReader = require("@modern-js/runtime-utils/fileReader");
41
42
  var import_constants = require("../constants");
42
43
  var import_mock = require("../dev-tools/mock");
43
44
  var import_register = require("../dev-tools/register");
44
45
  var import_watcher = __toESM(require("../dev-tools/watcher"));
45
- var import_dev_middleware = __toESM(require("../dev-tools/dev-middleware"));
46
46
  var import_workerSSRRender = require("./workerSSRRender");
47
+ const transformToRsbuildServerOptions = (dev) => {
48
+ var _dev_devMiddleware, _dev_before, _dev_after;
49
+ const rsbuildOptions = {
50
+ hmr: Boolean(dev.hot),
51
+ client: dev.client,
52
+ writeToDisk: (_dev_devMiddleware = dev.devMiddleware) === null || _dev_devMiddleware === void 0 ? void 0 : _dev_devMiddleware.writeToDisk,
53
+ compress: dev.compress,
54
+ headers: dev.headers,
55
+ historyApiFallback: dev.historyApiFallback,
56
+ proxy: dev.proxy,
57
+ publicDir: false
58
+ };
59
+ 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)) {
60
+ rsbuildOptions.setupMiddlewares = [
61
+ ...dev.setupMiddlewares || [],
62
+ (middlewares) => {
63
+ middlewares.unshift(...dev.before || []);
64
+ middlewares.push(...dev.after || []);
65
+ }
66
+ ];
67
+ } else if (dev.setupMiddlewares) {
68
+ rsbuildOptions.setupMiddlewares = dev.setupMiddlewares;
69
+ }
70
+ return rsbuildOptions;
71
+ };
47
72
  class ModernDevServer extends import_prod_server.ModernServer {
48
73
  getDevOptions(options) {
49
- const devOptions = typeof options.dev === "boolean" ? {} : options.dev;
74
+ const devOptions = options.dev;
50
75
  const defaultOptions = (0, import_constants.getDefaultDevOptions)();
51
76
  return (0, import_lodash.merge)(defaultOptions, devOptions);
52
77
  }
@@ -58,40 +83,39 @@ class ModernDevServer extends import_prod_server.ModernServer {
58
83
  });
59
84
  });
60
85
  }
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
86
  // Complete the preparation of services
80
87
  async onInit(runner, app) {
81
88
  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
- ]);
89
+ const { dev, conf } = this;
90
+ const isUseStreamingSSR = (routes) => routes === null || routes === void 0 ? void 0 : routes.some((r) => r.isStream === true);
91
+ const isUseSSRPreload = () => {
92
+ const { server: { ssr, ssrByEntries } } = conf;
93
+ const checkUsePreload = (ssr2) => typeof ssr2 === "object" && Boolean(ssr2.preload);
94
+ return checkUsePreload(ssr) || Object.values(ssrByEntries || {}).some((ssr2) => checkUsePreload(ssr2));
95
+ };
96
+ const { middlewares: rsbuildMiddlewares, close, onUpgrade } = (
97
+ // https://github.com/web-infra-dev/rsbuild/blob/32fbb85e22158d5c4655505ce75e3452ce22dbb1/packages/shared/src/types/server.ts#L112
98
+ await this.getMiddlewares({
99
+ ...transformToRsbuildServerOptions(this.dev),
100
+ compress: !isUseStreamingSSR(this.getRoutes()) && !isUseSSRPreload() && dev.compress,
101
+ htmlFallback: false,
102
+ publicDir: false
103
+ })
104
+ );
105
+ app.on("upgrade", onUpgrade);
106
+ this.rsbuild.onDevCompileDone(({ stats }) => {
107
+ if (stats.toJson({
108
+ all: false
109
+ }).name !== "server") {
110
+ this.onRepack({
111
+ routes: this.getRoutes()
112
+ });
113
+ }
114
+ });
115
+ await this.applyDefaultMiddlewares();
116
+ this.addMiddlewareHandler(rsbuildMiddlewares);
117
+ this.closeCb.push(close);
118
+ this.initFileReader();
95
119
  await super.onInit(runner, app);
96
120
  if (dev.watch) {
97
121
  this.startWatcher();
@@ -101,6 +125,36 @@ class ModernDevServer extends import_prod_server.ModernServer {
101
125
  });
102
126
  }
103
127
  }
128
+ initFileReader() {
129
+ var _this_dev_devMiddleware, _this_dev;
130
+ let isInit = false;
131
+ 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) {
132
+ this.addHandler((ctx, next) => {
133
+ var _ctx_res_locals;
134
+ if (isInit) {
135
+ return next();
136
+ }
137
+ isInit = true;
138
+ if (!((_ctx_res_locals = ctx.res.locals) === null || _ctx_res_locals === void 0 ? void 0 : _ctx_res_locals.webpack)) {
139
+ import_fileReader.fileReader.reset();
140
+ return next();
141
+ }
142
+ const { devMiddleware: webpackDevMid } = ctx.res.locals.webpack;
143
+ const { outputFileSystem } = webpackDevMid;
144
+ if (outputFileSystem) {
145
+ import_fileReader.fileReader.reset(outputFileSystem);
146
+ } else {
147
+ import_fileReader.fileReader.reset();
148
+ }
149
+ return next();
150
+ });
151
+ }
152
+ }
153
+ async close() {
154
+ for (const cb of this.closeCb) {
155
+ await cb();
156
+ }
157
+ }
104
158
  // override the ModernServer renderHandler logic
105
159
  getRenderHandler() {
106
160
  if (this.useWorkerSSR) {
@@ -120,36 +174,8 @@ class ModernDevServer extends import_prod_server.ModernServer {
120
174
  }
121
175
  return super.getRenderHandler();
122
176
  }
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
- });
177
+ async applyDefaultMiddlewares() {
178
+ const { pwd } = this;
153
179
  this.mockHandler = (0, import_mock.createMockHandler)({
154
180
  pwd
155
181
  });
@@ -160,43 +186,13 @@ class ModernDevServer extends import_prod_server.ModernServer {
160
186
  next();
161
187
  }
162
188
  });
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
189
  }
194
190
  onRepack(options = {}) {
195
191
  if (Array.isArray(options.routes)) {
196
192
  this.router.reset(this.filterRoutes(options.routes));
197
193
  }
198
194
  this.cleanSSRCache();
199
- this.reader.updateFile();
195
+ import_fileReader.fileReader.reset();
200
196
  this.runner.repack();
201
197
  super.onRepack(options);
202
198
  }
@@ -213,32 +209,6 @@ class ModernDevServer extends import_prod_server.ModernServer {
213
209
  }
214
210
  warmupSSRBundle() {
215
211
  }
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
212
  async onServerChange({ filepath, event }) {
243
213
  const { pwd } = this;
244
214
  const { mock } = import_prod_server.AGGRED_DIR;
@@ -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
  }