@modern-js/server 1.1.3 → 1.1.5-beta.1
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/CHANGELOG.md +19 -0
- package/dist/js/modern/dev-tools/babel/register.js +2 -2
- package/dist/js/modern/dev-tools/mock/getMockData.js +2 -2
- package/dist/js/modern/libs/context/context.js +15 -7
- package/dist/js/modern/libs/context/index.js +2 -2
- package/dist/js/modern/libs/{measure.js → metrics.js} +2 -2
- package/dist/js/modern/libs/proxy.js +2 -2
- package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +2 -2
- package/dist/js/modern/libs/render/cache/index.js +2 -2
- package/dist/js/modern/libs/render/index.js +6 -2
- package/dist/js/modern/libs/render/ssr.js +3 -2
- package/dist/js/modern/libs/route/route.js +1 -1
- package/dist/js/modern/server/dev-server/dev-server-split.js +2 -6
- package/dist/js/modern/server/dev-server/dev-server.js +11 -2
- package/dist/js/modern/server/dev-server/index.js +1 -1
- package/dist/js/modern/server/index.js +17 -15
- package/dist/js/modern/server/modern-server-split.js +55 -6
- package/dist/js/modern/server/modern-server.js +96 -56
- package/dist/js/modern/utils.js +9 -1
- package/dist/js/node/dev-tools/babel/register.js +2 -2
- package/dist/js/node/dev-tools/mock/getMockData.js +2 -2
- package/dist/js/node/libs/context/context.js +15 -7
- package/dist/js/node/libs/context/index.js +2 -2
- package/dist/js/node/libs/{measure.js → metrics.js} +3 -3
- package/dist/js/node/libs/proxy.js +2 -2
- package/dist/js/node/libs/render/cache/__tests__/cache.test.js +2 -2
- package/dist/js/node/libs/render/cache/index.js +2 -2
- package/dist/js/node/libs/render/index.js +6 -2
- package/dist/js/node/libs/render/ssr.js +3 -2
- package/dist/js/node/libs/route/route.js +1 -1
- package/dist/js/node/server/dev-server/dev-server-split.js +5 -9
- package/dist/js/node/server/dev-server/dev-server.js +11 -2
- package/dist/js/node/server/dev-server/index.js +4 -4
- package/dist/js/node/server/index.js +16 -14
- package/dist/js/node/server/modern-server-split.js +61 -9
- package/dist/js/node/server/modern-server.js +97 -57
- package/dist/js/node/utils.js +12 -2
- package/dist/types/libs/context/context.d.ts +5 -5
- package/dist/types/libs/context/index.d.ts +3 -3
- package/dist/types/libs/metrics.d.ts +3 -0
- package/dist/types/libs/render/index.d.ts +10 -1
- package/dist/types/libs/render/ssr.d.ts +2 -1
- package/dist/types/libs/render/type.d.ts +2 -21
- package/dist/types/libs/route/route.d.ts +2 -10
- package/dist/types/server/dev-server/dev-server-split.d.ts +3 -4
- package/dist/types/server/dev-server/index.d.ts +1 -1
- package/dist/types/server/modern-server-split.d.ts +15 -5
- package/dist/types/server/modern-server.d.ts +14 -7
- package/dist/types/type.d.ts +11 -5
- package/dist/types/utils.d.ts +2 -1
- package/package.json +5 -5
- package/src/libs/context/context.ts +12 -8
- package/src/libs/context/index.ts +3 -3
- package/src/libs/{measure.ts → metrics.ts} +3 -3
- package/src/libs/render/index.ts +21 -11
- package/src/libs/render/ssr.ts +5 -1
- package/src/libs/render/type.ts +3 -16
- package/src/libs/route/route.ts +4 -20
- package/src/server/dev-server/dev-server-split.ts +3 -7
- package/src/server/dev-server/dev-server.ts +14 -12
- package/src/server/dev-server/index.ts +1 -1
- package/src/server/index.ts +21 -14
- package/src/server/modern-server-split.ts +59 -7
- package/src/server/modern-server.ts +109 -64
- package/src/type.ts +12 -5
- package/src/utils.ts +14 -0
- package/dist/types/libs/measure.d.ts +0 -3
|
@@ -17,13 +17,13 @@ var _modernServer = require("./modern-server");
|
|
|
17
17
|
|
|
18
18
|
var _modernServerSplit = require("./modern-server-split");
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _metrics = require("../libs/metrics");
|
|
21
21
|
|
|
22
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
23
|
|
|
24
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
24
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
25
25
|
|
|
26
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
26
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
27
27
|
|
|
28
28
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
29
29
|
|
|
@@ -52,7 +52,7 @@ class Server {
|
|
|
52
52
|
options
|
|
53
53
|
} = this;
|
|
54
54
|
options.logger = options.logger || _utils.logger;
|
|
55
|
-
options.
|
|
55
|
+
options.metrics = options.metrics || _metrics.metrics; // initialize server
|
|
56
56
|
|
|
57
57
|
if (options.dev) {
|
|
58
58
|
this.server = this.createDevServer();
|
|
@@ -95,9 +95,11 @@ class Server {
|
|
|
95
95
|
} = this;
|
|
96
96
|
|
|
97
97
|
if (options.apiOnly) {
|
|
98
|
-
return new _modernServerSplit.
|
|
98
|
+
return new _modernServerSplit.ModernAPIServer(options);
|
|
99
|
+
} else if (options.ssrOnly) {
|
|
100
|
+
return new _modernServerSplit.ModernSSRServer(options);
|
|
99
101
|
} else if (options.webOnly) {
|
|
100
|
-
return new _modernServerSplit.
|
|
102
|
+
return new _modernServerSplit.ModernWebServer(options);
|
|
101
103
|
} else {
|
|
102
104
|
return new _modernServer.ModernServer(options);
|
|
103
105
|
}
|
|
@@ -109,15 +111,15 @@ class Server {
|
|
|
109
111
|
} = this;
|
|
110
112
|
|
|
111
113
|
const {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
+
ModernAPIDevServer,
|
|
115
|
+
ModernSSRDevServer,
|
|
114
116
|
ModernDevServer
|
|
115
117
|
} = require("./dev-server");
|
|
116
118
|
|
|
117
119
|
if (options.apiOnly) {
|
|
118
|
-
return new
|
|
119
|
-
} else if (options.
|
|
120
|
-
return new
|
|
120
|
+
return new ModernAPIDevServer(options);
|
|
121
|
+
} else if (options.ssrOnly) {
|
|
122
|
+
return new ModernSSRDevServer(options);
|
|
121
123
|
} else {
|
|
122
124
|
return new ModernDevServer(options);
|
|
123
125
|
}
|
|
@@ -129,6 +131,9 @@ class Server {
|
|
|
129
131
|
const {
|
|
130
132
|
options
|
|
131
133
|
} = this;
|
|
134
|
+
(_options$plugins = options.plugins) === null || _options$plugins === void 0 ? void 0 : _options$plugins.forEach(p => {
|
|
135
|
+
_serverPlugin.serverManager.usePlugin(p);
|
|
136
|
+
});
|
|
132
137
|
const appContext = await this.initAppContext();
|
|
133
138
|
|
|
134
139
|
_serverPlugin.serverManager.run(() => {
|
|
@@ -139,9 +144,6 @@ class Server {
|
|
|
139
144
|
}));
|
|
140
145
|
});
|
|
141
146
|
|
|
142
|
-
(_options$plugins = options.plugins) === null || _options$plugins === void 0 ? void 0 : _options$plugins.forEach(p => {
|
|
143
|
-
_serverPlugin.serverManager.usePlugin(p);
|
|
144
|
-
});
|
|
145
147
|
return _serverPlugin.serverManager.init({});
|
|
146
148
|
}
|
|
147
149
|
|
|
@@ -3,28 +3,46 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.ModernWebServer = exports.ModernSSRServer = exports.ModernAPIServer = void 0;
|
|
7
7
|
|
|
8
8
|
var _modernServer = require("./modern-server");
|
|
9
9
|
|
|
10
|
-
class
|
|
10
|
+
class ModernSSRServer extends _modernServer.ModernServer {
|
|
11
|
+
// Todo should not invoke any route hook in modernSSRServer
|
|
12
|
+
async warmupSSRBundle() {// empty
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
verifyMatch(context, matched) {
|
|
16
|
+
if (matched.generate().isApi) {
|
|
17
|
+
this.render404(context);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
11
21
|
prepareAPIHandler(_m, _) {
|
|
12
22
|
return null;
|
|
13
23
|
}
|
|
14
24
|
|
|
15
25
|
async prepareWebHandler(extension) {
|
|
16
26
|
return super.prepareWebHandler(extension);
|
|
17
|
-
}
|
|
27
|
+
} // protected filterRoutes(routes: ModernRouteInterface[]) {
|
|
28
|
+
// return routes.filter(route => route.entryName);
|
|
29
|
+
// }
|
|
18
30
|
|
|
19
|
-
|
|
20
|
-
|
|
31
|
+
|
|
32
|
+
async preServerInit() {// empty
|
|
21
33
|
}
|
|
22
34
|
|
|
23
35
|
}
|
|
24
36
|
|
|
25
|
-
exports.
|
|
37
|
+
exports.ModernSSRServer = ModernSSRServer;
|
|
38
|
+
|
|
39
|
+
class ModernAPIServer extends _modernServer.ModernServer {
|
|
40
|
+
async emitRouteHook(_, _input) {// empty
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async warmupSSRBundle() {// empty
|
|
44
|
+
}
|
|
26
45
|
|
|
27
|
-
class APIModernServer extends _modernServer.ModernServer {
|
|
28
46
|
prepareWebHandler(_) {
|
|
29
47
|
return null;
|
|
30
48
|
}
|
|
@@ -37,9 +55,43 @@ class APIModernServer extends _modernServer.ModernServer {
|
|
|
37
55
|
return routes.filter(route => route.isApi);
|
|
38
56
|
}
|
|
39
57
|
|
|
40
|
-
async preServerInit() {//
|
|
58
|
+
async preServerInit() {// empty
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
exports.ModernAPIServer = ModernAPIServer;
|
|
64
|
+
|
|
65
|
+
class ModernWebServer extends _modernServer.ModernServer {
|
|
66
|
+
async warmupSSRBundle() {// empty
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async handleAPI(context) {
|
|
70
|
+
const {
|
|
71
|
+
proxyTarget
|
|
72
|
+
} = this;
|
|
73
|
+
|
|
74
|
+
if (!(proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.api)) {
|
|
75
|
+
this.proxy();
|
|
76
|
+
} else {
|
|
77
|
+
this.render404(context);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async handleWeb(context, route) {
|
|
82
|
+
const {
|
|
83
|
+
proxyTarget
|
|
84
|
+
} = this;
|
|
85
|
+
|
|
86
|
+
if (route.isSSR && proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.ssr) {
|
|
87
|
+
return this.proxy();
|
|
88
|
+
} else {
|
|
89
|
+
// if no proxyTarget but access web server, degradation to csr
|
|
90
|
+
route.isSSR = false;
|
|
91
|
+
return super.handleWeb(context, route);
|
|
92
|
+
}
|
|
41
93
|
}
|
|
42
94
|
|
|
43
95
|
}
|
|
44
96
|
|
|
45
|
-
exports.
|
|
97
|
+
exports.ModernWebServer = ModernWebServer;
|
|
@@ -47,9 +47,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
47
47
|
|
|
48
48
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
49
49
|
|
|
50
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
50
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
51
51
|
|
|
52
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
52
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
53
53
|
|
|
54
54
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
55
55
|
|
|
@@ -71,7 +71,8 @@ class ModernServer {
|
|
|
71
71
|
routes,
|
|
72
72
|
staticGenerate,
|
|
73
73
|
logger,
|
|
74
|
-
|
|
74
|
+
metrics,
|
|
75
|
+
proxyTarget
|
|
75
76
|
}) {
|
|
76
77
|
this.pwd = void 0;
|
|
77
78
|
this.distDir = void 0;
|
|
@@ -82,7 +83,8 @@ class ModernServer {
|
|
|
82
83
|
this.presetRoutes = void 0;
|
|
83
84
|
this.runner = void 0;
|
|
84
85
|
this.logger = void 0;
|
|
85
|
-
this.
|
|
86
|
+
this.metrics = void 0;
|
|
87
|
+
this.proxyTarget = void 0;
|
|
86
88
|
this.isDev = false;
|
|
87
89
|
this.staticFileHandler = void 0;
|
|
88
90
|
this.routeRenderHandler = void 0;
|
|
@@ -96,13 +98,14 @@ class ModernServer {
|
|
|
96
98
|
|
|
97
99
|
this.isDev = Boolean(dev);
|
|
98
100
|
this.pwd = pwd;
|
|
99
|
-
this.distDir = _path.default.join(pwd, config.output.path || '');
|
|
101
|
+
this.distDir = _path.default.join(pwd, config.output.path || 'dist');
|
|
100
102
|
this.workDir = this.isDev ? pwd : this.distDir;
|
|
101
103
|
this.conf = config;
|
|
102
104
|
this.logger = logger;
|
|
103
|
-
this.
|
|
105
|
+
this.metrics = metrics;
|
|
104
106
|
this.router = new _route.RouteMatchManager();
|
|
105
107
|
this.presetRoutes = routes;
|
|
108
|
+
this.proxyTarget = proxyTarget;
|
|
106
109
|
|
|
107
110
|
if (staticGenerate) {
|
|
108
111
|
this.staticGenerate = staticGenerate;
|
|
@@ -189,20 +192,6 @@ class ModernServer {
|
|
|
189
192
|
|
|
190
193
|
async createHTTPServer(handler) {
|
|
191
194
|
return (0, _http.createServer)(handler);
|
|
192
|
-
} // warmup ssr function
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
warmupSSRBundle() {
|
|
196
|
-
const {
|
|
197
|
-
distDir
|
|
198
|
-
} = this;
|
|
199
|
-
const bundles = this.router.getBundles();
|
|
200
|
-
bundles.forEach(bundle => {
|
|
201
|
-
const filepath = _path.default.join(distDir, bundle); // if error, just throw and let process die
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
require(filepath);
|
|
205
|
-
});
|
|
206
195
|
} // read route spec from route.json
|
|
207
196
|
|
|
208
197
|
|
|
@@ -268,6 +257,11 @@ class ModernServer {
|
|
|
268
257
|
const apiExtension = (0, _utils2.mergeExtension)(pluginAPIExt);
|
|
269
258
|
this.frameAPIHandler = await this.prepareAPIHandler(mode, apiExtension);
|
|
270
259
|
}
|
|
260
|
+
} // Todo
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
async proxy() {
|
|
264
|
+
return null;
|
|
271
265
|
}
|
|
272
266
|
/* —————————————————————— function will be overwrite —————————————————————— */
|
|
273
267
|
|
|
@@ -309,34 +303,59 @@ class ModernServer {
|
|
|
309
303
|
return routes;
|
|
310
304
|
}
|
|
311
305
|
|
|
306
|
+
async emitRouteHook(eventName, input) {
|
|
307
|
+
return this.runner[eventName](input, {
|
|
308
|
+
onLast: _utils2.noop
|
|
309
|
+
});
|
|
310
|
+
} // warmup ssr function
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
warmupSSRBundle() {
|
|
314
|
+
const {
|
|
315
|
+
distDir
|
|
316
|
+
} = this;
|
|
317
|
+
const bundles = this.router.getBundles();
|
|
318
|
+
bundles.forEach(bundle => {
|
|
319
|
+
const filepath = _path.default.join(distDir, bundle); // if error, just throw and let process die
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
require(filepath);
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
|
|
312
326
|
async preServerInit() {
|
|
313
327
|
const {
|
|
314
|
-
conf
|
|
328
|
+
conf,
|
|
329
|
+
runner
|
|
315
330
|
} = this;
|
|
316
|
-
const preMiddleware = await
|
|
331
|
+
const preMiddleware = await runner.preServerInit(conf);
|
|
317
332
|
preMiddleware.flat().forEach(mid => {
|
|
318
333
|
this.addHandler(mid);
|
|
319
334
|
});
|
|
320
335
|
}
|
|
321
336
|
|
|
322
|
-
|
|
323
|
-
const
|
|
337
|
+
async handleAPI(context) {
|
|
338
|
+
const {
|
|
339
|
+
req,
|
|
340
|
+
res
|
|
341
|
+
} = context;
|
|
324
342
|
|
|
325
|
-
if (
|
|
326
|
-
|
|
343
|
+
if (!this.frameAPIHandler) {
|
|
344
|
+
throw new Error('can not found api hanlder');
|
|
327
345
|
}
|
|
328
346
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
const curFavicon = faviconByEntries[f];
|
|
347
|
+
await this.frameAPIHandler(req, res);
|
|
348
|
+
}
|
|
332
349
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
350
|
+
async handleWeb(context, route) {
|
|
351
|
+
return this.routeRenderHandler({
|
|
352
|
+
ctx: context,
|
|
353
|
+
route,
|
|
354
|
+
runner: this.runner
|
|
355
|
+
});
|
|
356
|
+
}
|
|
338
357
|
|
|
339
|
-
|
|
358
|
+
verifyMatch(_c, _m) {// empty
|
|
340
359
|
}
|
|
341
360
|
/* —————————————————————— private function —————————————————————— */
|
|
342
361
|
// handler route.json, include api / csr / ssr
|
|
@@ -348,10 +367,8 @@ class ModernServer {
|
|
|
348
367
|
req,
|
|
349
368
|
res
|
|
350
369
|
} = context;
|
|
351
|
-
await this.
|
|
370
|
+
await this.emitRouteHook('beforeMatch', {
|
|
352
371
|
context
|
|
353
|
-
}, {
|
|
354
|
-
onLast: _utils2.noop
|
|
355
372
|
}); // match routes in the route spec
|
|
356
373
|
|
|
357
374
|
const matched = this.router.match(context.url);
|
|
@@ -359,14 +376,18 @@ class ModernServer {
|
|
|
359
376
|
if (!matched) {
|
|
360
377
|
this.render404(context);
|
|
361
378
|
return;
|
|
379
|
+
} else {
|
|
380
|
+
this.verifyMatch(context, matched);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
if (res.headersSent) {
|
|
384
|
+
return;
|
|
362
385
|
}
|
|
363
386
|
|
|
364
387
|
const routeAPI = (0, _route2.createRouteAPI)(matched, this.router);
|
|
365
|
-
await this.
|
|
388
|
+
await this.emitRouteHook('afterMatch', {
|
|
366
389
|
context,
|
|
367
390
|
routeAPI
|
|
368
|
-
}, {
|
|
369
|
-
onLast: _utils2.noop
|
|
370
391
|
});
|
|
371
392
|
|
|
372
393
|
if (res.headersSent) {
|
|
@@ -381,11 +402,7 @@ class ModernServer {
|
|
|
381
402
|
context.setParams(params); // route is api service
|
|
382
403
|
|
|
383
404
|
if (route.isApi) {
|
|
384
|
-
|
|
385
|
-
throw new Error('can not found api hanlder');
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
await this.frameAPIHandler(req, res);
|
|
405
|
+
this.handleAPI(context);
|
|
389
406
|
return;
|
|
390
407
|
}
|
|
391
408
|
|
|
@@ -398,12 +415,13 @@ class ModernServer {
|
|
|
398
415
|
return;
|
|
399
416
|
}
|
|
400
417
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
}
|
|
406
|
-
|
|
418
|
+
if (route.entryName) {
|
|
419
|
+
await this.emitRouteHook('beforeRender', {
|
|
420
|
+
context
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
const file = await this.handleWeb(context, route);
|
|
407
425
|
|
|
408
426
|
if (!file) {
|
|
409
427
|
this.render404(context);
|
|
@@ -421,11 +439,9 @@ class ModernServer {
|
|
|
421
439
|
|
|
422
440
|
if (route.entryName) {
|
|
423
441
|
const templateAPI = (0, _template.createTemplateAPI)(file.content.toString());
|
|
424
|
-
await this.
|
|
442
|
+
await this.emitRouteHook('afterRender', {
|
|
425
443
|
context,
|
|
426
444
|
templateAPI
|
|
427
|
-
}, {
|
|
428
|
-
onLast: _utils2.noop
|
|
429
445
|
});
|
|
430
446
|
await this.injectMicroFE(context, templateAPI);
|
|
431
447
|
response = templateAPI.get();
|
|
@@ -545,7 +561,7 @@ class ModernServer {
|
|
|
545
561
|
res.statusCode = 200;
|
|
546
562
|
const context = (0, _context.createContext)(req, res, {
|
|
547
563
|
logger: this.logger,
|
|
548
|
-
|
|
564
|
+
metrics: this.metrics
|
|
549
565
|
});
|
|
550
566
|
|
|
551
567
|
try {
|
|
@@ -578,7 +594,11 @@ class ModernServer {
|
|
|
578
594
|
|
|
579
595
|
if (entryName === status.toString() || entryName === '_error') {
|
|
580
596
|
try {
|
|
581
|
-
const file = await this.routeRenderHandler(
|
|
597
|
+
const file = await this.routeRenderHandler({
|
|
598
|
+
route,
|
|
599
|
+
ctx: context,
|
|
600
|
+
runner: this.runner
|
|
601
|
+
});
|
|
582
602
|
|
|
583
603
|
if (file) {
|
|
584
604
|
context.res.end(file.content);
|
|
@@ -593,6 +613,26 @@ class ModernServer {
|
|
|
593
613
|
res.end((0, _utils2.createErrorDocument)(status, text));
|
|
594
614
|
}
|
|
595
615
|
|
|
616
|
+
prepareFavicons(favicon, faviconByEntries) {
|
|
617
|
+
const faviconNames = [];
|
|
618
|
+
|
|
619
|
+
if (favicon) {
|
|
620
|
+
faviconNames.push(favicon.substring(favicon.lastIndexOf('/') + 1));
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
if (faviconByEntries) {
|
|
624
|
+
Object.keys(faviconByEntries).forEach(f => {
|
|
625
|
+
const curFavicon = faviconByEntries[f];
|
|
626
|
+
|
|
627
|
+
if (curFavicon) {
|
|
628
|
+
faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf('/') + 1));
|
|
629
|
+
}
|
|
630
|
+
});
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
return faviconNames;
|
|
634
|
+
}
|
|
635
|
+
|
|
596
636
|
}
|
|
597
637
|
/* eslint-enable max-lines */
|
|
598
638
|
|
package/dist/js/node/utils.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.applyMixins = applyMixins;
|
|
6
7
|
exports.toMessage = exports.noop = exports.mergeExtension = exports.createErrorDocument = void 0;
|
|
7
8
|
|
|
8
9
|
const mergeExtension = users => {
|
|
@@ -63,6 +64,15 @@ const createErrorDocument = (status, text) => {
|
|
|
63
64
|
</body>
|
|
64
65
|
</html>
|
|
65
66
|
`;
|
|
66
|
-
};
|
|
67
|
+
}; // This can live anywhere in your codebase:
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
exports.createErrorDocument = createErrorDocument;
|
|
67
71
|
|
|
68
|
-
|
|
72
|
+
function applyMixins(derivedCtor, constructors) {
|
|
73
|
+
constructors.forEach(baseCtor => {
|
|
74
|
+
Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
|
|
75
|
+
Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) || Object.create(null));
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { IncomingMessage, ServerResponse } from 'http';
|
|
3
3
|
import { URL } from 'url';
|
|
4
4
|
import qs from 'querystring';
|
|
5
|
-
import type { ModernServerContext as ModernServerContextInterface,
|
|
5
|
+
import type { ModernServerContext as ModernServerContextInterface, Metrics, Logger } from '@modern-js/types/server';
|
|
6
6
|
export declare class ModernServerContext implements ModernServerContextInterface {
|
|
7
7
|
/**
|
|
8
8
|
* http request
|
|
@@ -19,18 +19,18 @@ export declare class ModernServerContext implements ModernServerContextInterface
|
|
|
19
19
|
|
|
20
20
|
params: Record<string, string>;
|
|
21
21
|
logger: Logger;
|
|
22
|
-
|
|
22
|
+
metrics?: Metrics;
|
|
23
23
|
constructor(req: IncomingMessage, res: ServerResponse, {
|
|
24
24
|
logger,
|
|
25
|
-
|
|
25
|
+
metrics
|
|
26
26
|
}: {
|
|
27
27
|
logger: Logger;
|
|
28
|
-
|
|
28
|
+
metrics: Metrics;
|
|
29
29
|
});
|
|
30
|
+
private bind;
|
|
30
31
|
setParams(params: Record<string, string>): void;
|
|
31
32
|
getReqHeader(key: string): string | string[];
|
|
32
33
|
get headers(): import("http").IncomingHttpHeaders;
|
|
33
|
-
set headers(val: import("http").IncomingHttpHeaders);
|
|
34
34
|
get method(): string;
|
|
35
35
|
get url(): string;
|
|
36
36
|
set url(val: string);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { IncomingMessage, ServerResponse } from 'http';
|
|
2
|
-
import {
|
|
2
|
+
import { Metrics, Logger } from '../../type';
|
|
3
3
|
import { ModernServerContext } from './context';
|
|
4
4
|
export declare const createContext: (req: IncomingMessage, res: ServerResponse, {
|
|
5
5
|
logger,
|
|
6
|
-
|
|
6
|
+
metrics
|
|
7
7
|
}: {
|
|
8
8
|
logger: Logger;
|
|
9
|
-
|
|
9
|
+
metrics: Metrics;
|
|
10
10
|
}) => ModernServerContext;
|
|
11
11
|
export { ModernServerContext };
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { RenderResult } from '../../type';
|
|
2
2
|
import { ModernRoute } from '../route';
|
|
3
3
|
import { ModernServerContext } from '../context';
|
|
4
|
+
import { ServerHookRunner } from "../../type.d";
|
|
4
5
|
export declare const createRenderHandler: ({
|
|
5
6
|
distDir,
|
|
6
7
|
staticGenerate
|
|
7
8
|
}: {
|
|
8
9
|
distDir: string;
|
|
9
10
|
staticGenerate: boolean;
|
|
10
|
-
}) => (
|
|
11
|
+
}) => ({
|
|
12
|
+
ctx,
|
|
13
|
+
route,
|
|
14
|
+
runner
|
|
15
|
+
}: {
|
|
16
|
+
ctx: ModernServerContext;
|
|
17
|
+
route: ModernRoute;
|
|
18
|
+
runner: ServerHookRunner;
|
|
19
|
+
}) => Promise<RenderResult | null>;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { ModernServerContext } from '../context';
|
|
2
2
|
import { RenderResult } from '../../type';
|
|
3
|
+
import { ServerHookRunner } from "../../type.d";
|
|
3
4
|
export declare const render: (ctx: ModernServerContext, renderOptions: {
|
|
4
5
|
distDir: string;
|
|
5
6
|
bundle: string;
|
|
6
7
|
template: string;
|
|
7
8
|
entryName: string;
|
|
8
9
|
staticGenerate: boolean;
|
|
9
|
-
}) => Promise<RenderResult>;
|
|
10
|
+
}, runner: ServerHookRunner) => Promise<RenderResult>;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
/// <reference types="react" />
|
|
3
|
-
import {
|
|
4
|
-
import { Measure, Logger } from '../../type';
|
|
2
|
+
import { BaseSSRServerContext } from '@modern-js/types/server';
|
|
5
3
|
declare type MetaKeyMap = {
|
|
6
4
|
header?: string[];
|
|
7
5
|
query?: string[];
|
|
@@ -24,24 +22,7 @@ export declare enum RenderLevel {
|
|
|
24
22
|
SERVER_PREFETCH = 1,
|
|
25
23
|
SERVER_RENDER = 2,
|
|
26
24
|
}
|
|
27
|
-
export declare type SSRServerContext = {
|
|
28
|
-
request: {
|
|
29
|
-
params: Record<string, string>;
|
|
30
|
-
pathname: string;
|
|
31
|
-
query: Record<string, string>;
|
|
32
|
-
headers: IncomingHttpHeaders;
|
|
33
|
-
cookie?: string;
|
|
34
|
-
};
|
|
35
|
-
redirection: {
|
|
36
|
-
url?: string;
|
|
37
|
-
status?: number;
|
|
38
|
-
};
|
|
39
|
-
distDir: string;
|
|
40
|
-
template: string;
|
|
41
|
-
entryName: string;
|
|
42
|
-
logger: Logger;
|
|
43
|
-
measure?: Measure;
|
|
44
|
-
loadableManifest?: string;
|
|
25
|
+
export declare type SSRServerContext = BaseSSRServerContext & {
|
|
45
26
|
cacheConfig?: CacheConfig;
|
|
46
27
|
staticGenerate?: boolean;
|
|
47
28
|
};
|
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
urlPath: string;
|
|
4
|
-
entryPath?: string;
|
|
5
|
-
isSPA?: boolean;
|
|
6
|
-
isSSR?: boolean;
|
|
7
|
-
isApi?: boolean;
|
|
8
|
-
bundle?: string;
|
|
9
|
-
enableModernMode?: boolean;
|
|
10
|
-
}
|
|
1
|
+
import { ServerRoute as ModernRouteInterface } from '@modern-js/types';
|
|
2
|
+
export type { ModernRouteInterface };
|
|
11
3
|
export declare class ModernRoute implements ModernRouteInterface {
|
|
12
4
|
entryName: string;
|
|
13
5
|
urlPath: string;
|
|
@@ -3,14 +3,13 @@ import { ModernDevServer } from './dev-server';
|
|
|
3
3
|
import { mergeExtension } from "../../utils.d";
|
|
4
4
|
import { ModernRouteInterface } from "../../libs/route";
|
|
5
5
|
import { ApiServerMode } from "../../constants.d";
|
|
6
|
-
export declare class
|
|
6
|
+
export declare class ModernSSRDevServer extends ModernDevServer {
|
|
7
7
|
protected prepareAPIHandler(_m: ApiServerMode, _: APIServerStartInput['config']): any;
|
|
8
8
|
protected prepareWebHandler(extension: ReturnType<typeof mergeExtension>): Promise<import("@modern-js/server-plugin").Adapter>;
|
|
9
9
|
protected filterRoutes(routes: ModernRouteInterface[]): ModernRouteInterface[];
|
|
10
10
|
}
|
|
11
|
-
export declare class
|
|
12
|
-
protected
|
|
13
|
-
protected prepareAPIHandler(mode: ApiServerMode, extension: ReturnType<typeof mergeExtension>): Promise<import("@modern-js/server-plugin").Adapter>;
|
|
11
|
+
export declare class ModernAPIDevServer extends ModernDevServer {
|
|
12
|
+
protected prepareAPIHandler(mode: ApiServerMode, extension: APIServerStartInput['config']): Promise<import("@modern-js/server-plugin").Adapter>;
|
|
14
13
|
protected filterRoutes(routes: ModernRouteInterface[]): ModernRouteInterface[];
|
|
15
14
|
protected preServerInit(): Promise<void>;
|
|
16
15
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { ModernAPIDevServer, ModernSSRDevServer } from './dev-server-split';
|
|
2
2
|
export { ModernDevServer } from './dev-server';
|