@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.
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/server/devServer.js +70 -118
- package/dist/cjs/server/devServerOld.js +351 -0
- package/dist/cjs/server/index.js +14 -3
- package/dist/esm/index.js +2 -1
- package/dist/esm/server/devServer.js +166 -238
- package/dist/esm/server/devServerOld.js +579 -0
- package/dist/esm/server/index.js +21 -2
- package/dist/esm-node/index.js +2 -1
- package/dist/esm-node/server/devServer.js +71 -119
- package/dist/esm-node/server/devServerOld.js +317 -0
- package/dist/esm-node/server/index.js +12 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/server/devServer.d.ts +7 -7
- package/dist/types/server/devServerOld.d.ts +37 -0
- package/dist/types/server/index.d.ts +4 -1
- package/dist/types/types.d.ts +8 -0
- package/package.json +11 -9
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
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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(
|
|
124
|
-
const { pwd
|
|
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 (
|
|
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 (
|
|
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, "
|
|
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.
|
|
360
|
-
|
|
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
|
+
});
|
package/dist/cjs/server/index.js
CHANGED
|
@@ -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
|
|
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
|
};
|