@modern-js/server 0.0.0-plugins-202111301002 → 0.0.0-runtime-2021112193858
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 +59 -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/hook-api/route.js +37 -0
- package/dist/js/modern/libs/{hook-api.js → hook-api/template.js} +0 -0
- 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/ssr.js +1 -1
- package/dist/js/modern/libs/route/index.js +4 -0
- package/dist/js/modern/libs/route/matcher.js +4 -0
- package/dist/js/modern/libs/route/route.js +1 -1
- package/dist/js/modern/server/dev-server/dev-server-split.js +28 -0
- package/dist/js/modern/server/{dev-server.js → dev-server/dev-server.js} +41 -22
- package/dist/js/modern/server/dev-server/index.js +2 -0
- package/dist/js/modern/server/index.js +65 -63
- package/dist/js/modern/server/modern-server-split.js +81 -0
- package/dist/js/modern/server/modern-server.js +121 -70
- package/dist/js/modern/utils.js +11 -3
- 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/hook-api/route.js +46 -0
- package/dist/js/node/libs/{hook-api.js → hook-api/template.js} +0 -0
- 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/ssr.js +1 -1
- package/dist/js/node/libs/route/index.js +4 -0
- package/dist/js/node/libs/route/matcher.js +4 -0
- package/dist/js/node/libs/route/route.js +1 -1
- package/dist/js/node/server/dev-server/dev-server-split.js +41 -0
- package/dist/js/node/server/{dev-server.js → dev-server/dev-server.js} +42 -21
- package/dist/js/node/server/dev-server/index.js +27 -0
- package/dist/js/node/server/index.js +72 -64
- package/dist/js/node/server/modern-server-split.js +97 -0
- package/dist/js/node/server/modern-server.js +124 -71
- package/dist/js/node/utils.js +14 -4
- package/dist/types/libs/context/context.d.ts +5 -5
- package/dist/types/libs/context/index.d.ts +3 -3
- package/dist/types/libs/hook-api/route.d.ts +13 -0
- package/dist/types/libs/{hook-api.d.ts → hook-api/template.d.ts} +0 -0
- package/dist/types/libs/metrics.d.ts +3 -0
- package/dist/types/libs/render/type.d.ts +2 -2
- package/dist/types/libs/route/index.d.ts +1 -0
- package/dist/types/libs/route/matcher.d.ts +1 -0
- package/dist/types/libs/route/route.d.ts +2 -10
- package/dist/types/server/dev-server/dev-server-split.d.ts +15 -0
- package/dist/types/server/{dev-server.d.ts → dev-server/dev-server.d.ts} +6 -5
- package/dist/types/server/dev-server/index.d.ts +2 -0
- package/dist/types/server/index.d.ts +3 -1
- package/dist/types/server/modern-server-split.d.ts +26 -0
- package/dist/types/server/modern-server.d.ts +20 -12
- package/dist/types/type.d.ts +9 -4
- package/dist/types/utils.d.ts +3 -2
- package/package.json +18 -20
- package/src/libs/context/context.ts +12 -8
- package/src/libs/context/index.ts +3 -3
- package/src/libs/hook-api/route.ts +38 -0
- package/src/libs/{hook-api.ts → hook-api/template.ts} +0 -0
- package/src/libs/{measure.ts → metrics.ts} +3 -3
- package/src/libs/render/ssr.ts +1 -1
- package/src/libs/render/type.ts +2 -2
- package/src/libs/route/index.ts +4 -0
- package/src/libs/route/matcher.ts +4 -0
- package/src/libs/route/route.ts +4 -20
- package/src/server/{web-server.ts → dev-server/dev-server-split.ts} +12 -14
- package/src/server/{dev-server.ts → dev-server/dev-server.ts} +62 -33
- package/src/server/dev-server/index.ts +2 -0
- package/src/server/index.ts +81 -48
- package/src/server/modern-server-split.ts +97 -0
- package/src/server/modern-server.ts +140 -90
- package/src/type.ts +9 -4
- package/src/utils.ts +16 -2
- package/dist/js/modern/server/api-server.js +0 -36
- package/dist/js/modern/server/web-server.js +0 -30
- package/dist/js/node/server/api-server.js +0 -50
- package/dist/js/node/server/web-server.js +0 -44
- package/dist/types/libs/measure.d.ts +0 -3
- package/dist/types/server/api-server.d.ts +0 -17
- package/dist/types/server/web-server.d.ts +0 -15
- package/src/server/api-server.ts +0 -47
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { ModernServer } from "./modern-server";
|
|
2
|
+
export class ModernSSRServer extends ModernServer {
|
|
3
|
+
// Todo should not invoke any route hook in modernSSRServer
|
|
4
|
+
async warmupSSRBundle() {// empty
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
verifyMatch(context, matched) {
|
|
8
|
+
if (matched.generate().isApi) {
|
|
9
|
+
this.render404(context);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
prepareAPIHandler(_m, _) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async prepareWebHandler(extension) {
|
|
18
|
+
return super.prepareWebHandler(extension);
|
|
19
|
+
} // protected filterRoutes(routes: ModernRouteInterface[]) {
|
|
20
|
+
// return routes.filter(route => route.entryName);
|
|
21
|
+
// }
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
async preServerInit() {// empty
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
export class ModernAPIServer extends ModernServer {
|
|
29
|
+
async emitRouteHook(_, _input) {// empty
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async warmupSSRBundle() {// empty
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
prepareWebHandler(_) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async prepareAPIHandler(mode, extension) {
|
|
40
|
+
return super.prepareAPIHandler(mode, extension);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
filterRoutes(routes) {
|
|
44
|
+
return routes.filter(route => route.isApi);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async preServerInit() {// empty
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
export class ModernWebServer extends ModernServer {
|
|
52
|
+
async warmupSSRBundle() {// empty
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async handleAPI(context) {
|
|
56
|
+
const {
|
|
57
|
+
proxyTarget
|
|
58
|
+
} = this;
|
|
59
|
+
|
|
60
|
+
if (!(proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.api)) {
|
|
61
|
+
this.proxy();
|
|
62
|
+
} else {
|
|
63
|
+
this.render404(context);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async handleWeb(context, route) {
|
|
68
|
+
const {
|
|
69
|
+
proxyTarget
|
|
70
|
+
} = this;
|
|
71
|
+
|
|
72
|
+
if (route.isSSR && proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.ssr) {
|
|
73
|
+
return this.proxy();
|
|
74
|
+
} else {
|
|
75
|
+
// if no proxyTarget but access web server, degradation to csr
|
|
76
|
+
route.isSSR = false;
|
|
77
|
+
return super.handleWeb(context, route);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const _excluded = ["getMiddlewares"];
|
|
2
2
|
|
|
3
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
3
|
+
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; }
|
|
4
4
|
|
|
5
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
5
|
+
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; }
|
|
6
6
|
|
|
7
7
|
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; }
|
|
8
8
|
|
|
@@ -11,10 +11,11 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
|
|
|
11
11
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
12
12
|
|
|
13
13
|
/* eslint-disable max-lines */
|
|
14
|
+
import { createServer } from 'http';
|
|
14
15
|
import util from 'util';
|
|
15
16
|
import path from 'path';
|
|
16
17
|
import { fs, ROUTE_SPEC_FILE } from '@modern-js/utils';
|
|
17
|
-
import {
|
|
18
|
+
import { createMiddlewareCollecter } from '@modern-js/server-utils';
|
|
18
19
|
import mime from 'mime-types';
|
|
19
20
|
import axios from 'axios';
|
|
20
21
|
import { RouteMatchManager } from "../libs/route";
|
|
@@ -25,7 +26,8 @@ import * as reader from "../libs/render/reader";
|
|
|
25
26
|
import { createProxyHandler } from "../libs/proxy";
|
|
26
27
|
import { createContext } from "../libs/context";
|
|
27
28
|
import { AGGRED_DIR, ApiServerMode, ERROR_DIGEST, ERROR_PAGE_TEXT } from "../constants";
|
|
28
|
-
import { createTemplateAPI } from "../libs/hook-api";
|
|
29
|
+
import { createTemplateAPI } from "../libs/hook-api/template";
|
|
30
|
+
import { createRouteAPI } from "../libs/hook-api/route";
|
|
29
31
|
const API_DIR = './api';
|
|
30
32
|
const SERVER_DIR = './server';
|
|
31
33
|
export class ModernServer {
|
|
@@ -39,8 +41,9 @@ export class ModernServer {
|
|
|
39
41
|
routes,
|
|
40
42
|
staticGenerate,
|
|
41
43
|
logger,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
metrics,
|
|
45
|
+
proxyTarget
|
|
46
|
+
}) {
|
|
44
47
|
this.pwd = void 0;
|
|
45
48
|
this.distDir = void 0;
|
|
46
49
|
this.workDir = void 0;
|
|
@@ -48,9 +51,10 @@ export class ModernServer {
|
|
|
48
51
|
this.conf = void 0;
|
|
49
52
|
this.handlers = [];
|
|
50
53
|
this.presetRoutes = void 0;
|
|
51
|
-
this.logger = void 0;
|
|
52
|
-
this.measure = void 0;
|
|
53
54
|
this.runner = void 0;
|
|
55
|
+
this.logger = void 0;
|
|
56
|
+
this.metrics = void 0;
|
|
57
|
+
this.proxyTarget = void 0;
|
|
54
58
|
this.isDev = false;
|
|
55
59
|
this.staticFileHandler = void 0;
|
|
56
60
|
this.routeRenderHandler = void 0;
|
|
@@ -64,14 +68,14 @@ export class ModernServer {
|
|
|
64
68
|
|
|
65
69
|
this.isDev = Boolean(dev);
|
|
66
70
|
this.pwd = pwd;
|
|
67
|
-
this.distDir = path.join(pwd, config.output.path || '');
|
|
71
|
+
this.distDir = path.join(pwd, config.output.path || 'dist');
|
|
68
72
|
this.workDir = this.isDev ? pwd : this.distDir;
|
|
69
73
|
this.conf = config;
|
|
70
|
-
this.runner = runner;
|
|
71
74
|
this.logger = logger;
|
|
72
|
-
this.
|
|
75
|
+
this.metrics = metrics;
|
|
73
76
|
this.router = new RouteMatchManager();
|
|
74
77
|
this.presetRoutes = routes;
|
|
78
|
+
this.proxyTarget = proxyTarget;
|
|
75
79
|
|
|
76
80
|
if (staticGenerate) {
|
|
77
81
|
this.staticGenerate = staticGenerate;
|
|
@@ -86,9 +90,10 @@ export class ModernServer {
|
|
|
86
90
|
} // server prepare
|
|
87
91
|
|
|
88
92
|
|
|
89
|
-
async init() {
|
|
93
|
+
async init(runner) {
|
|
90
94
|
var _conf$bff;
|
|
91
95
|
|
|
96
|
+
this.runner = runner;
|
|
92
97
|
const {
|
|
93
98
|
distDir,
|
|
94
99
|
isDev,
|
|
@@ -153,19 +158,10 @@ export class ModernServer {
|
|
|
153
158
|
|
|
154
159
|
close() {
|
|
155
160
|
reader.close();
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
warmupSSRBundle() {
|
|
160
|
-
const {
|
|
161
|
-
distDir
|
|
162
|
-
} = this;
|
|
163
|
-
const bundles = this.router.getBundles();
|
|
164
|
-
bundles.forEach(bundle => {
|
|
165
|
-
const filepath = path.join(distDir, bundle); // if error, just throw and let process die
|
|
161
|
+
}
|
|
166
162
|
|
|
167
|
-
|
|
168
|
-
|
|
163
|
+
async createHTTPServer(handler) {
|
|
164
|
+
return createServer(handler);
|
|
169
165
|
} // read route spec from route.json
|
|
170
166
|
|
|
171
167
|
|
|
@@ -199,20 +195,8 @@ export class ModernServer {
|
|
|
199
195
|
async prepareFrameHandler() {
|
|
200
196
|
const {
|
|
201
197
|
workDir,
|
|
202
|
-
runner
|
|
203
|
-
|
|
204
|
-
} = this; // inner tool, gather user inject
|
|
205
|
-
|
|
206
|
-
let userAPIExt = [];
|
|
207
|
-
let userWebExt = [];
|
|
208
|
-
|
|
209
|
-
if (!conf.server.disableUserExtension) {
|
|
210
|
-
({
|
|
211
|
-
api: userAPIExt,
|
|
212
|
-
web: userWebExt
|
|
213
|
-
} = gather(workDir));
|
|
214
|
-
} // server hook, gather plugin inject
|
|
215
|
-
|
|
198
|
+
runner
|
|
199
|
+
} = this; // server hook, gather plugin inject
|
|
216
200
|
|
|
217
201
|
const _createMiddlewareColl = createMiddlewareCollecter(),
|
|
218
202
|
{
|
|
@@ -229,16 +213,21 @@ export class ModernServer {
|
|
|
229
213
|
const serverDir = path.join(workDir, SERVER_DIR); // get api or web server handler from server-framework plugin
|
|
230
214
|
|
|
231
215
|
if (await fs.pathExists(path.join(serverDir))) {
|
|
232
|
-
const webExtension = mergeExtension(pluginWebExt
|
|
216
|
+
const webExtension = mergeExtension(pluginWebExt);
|
|
233
217
|
this.frameWebHandler = await this.prepareWebHandler(webExtension);
|
|
234
218
|
}
|
|
235
219
|
|
|
236
220
|
if (fs.existsSync(apiDir)) {
|
|
237
221
|
const mode = fs.existsSync(path.join(apiDir, AGGRED_DIR.lambda)) ? ApiServerMode.frame : ApiServerMode.func; // if use lambda/, mean framework style of writing, then discard user extension
|
|
238
222
|
|
|
239
|
-
const apiExtension = mergeExtension(pluginAPIExt
|
|
223
|
+
const apiExtension = mergeExtension(pluginAPIExt);
|
|
240
224
|
this.frameAPIHandler = await this.prepareAPIHandler(mode, apiExtension);
|
|
241
225
|
}
|
|
226
|
+
} // Todo
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
async proxy() {
|
|
230
|
+
return null;
|
|
242
231
|
}
|
|
243
232
|
/* —————————————————————— function will be overwrite —————————————————————— */
|
|
244
233
|
|
|
@@ -270,7 +259,7 @@ export class ModernServer {
|
|
|
270
259
|
pwd: workDir,
|
|
271
260
|
mode,
|
|
272
261
|
config: extension,
|
|
273
|
-
prefix
|
|
262
|
+
prefix: Array.isArray(prefix) ? prefix[0] : prefix
|
|
274
263
|
}, {
|
|
275
264
|
onLast: () => null
|
|
276
265
|
});
|
|
@@ -280,34 +269,54 @@ export class ModernServer {
|
|
|
280
269
|
return routes;
|
|
281
270
|
}
|
|
282
271
|
|
|
272
|
+
async emitRouteHook(eventName, input) {
|
|
273
|
+
return this.runner[eventName](input, {
|
|
274
|
+
onLast: noop
|
|
275
|
+
});
|
|
276
|
+
} // warmup ssr function
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
warmupSSRBundle() {
|
|
280
|
+
const {
|
|
281
|
+
distDir
|
|
282
|
+
} = this;
|
|
283
|
+
const bundles = this.router.getBundles();
|
|
284
|
+
bundles.forEach(bundle => {
|
|
285
|
+
const filepath = path.join(distDir, bundle); // if error, just throw and let process die
|
|
286
|
+
|
|
287
|
+
require(filepath);
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
|
|
283
291
|
async preServerInit() {
|
|
284
292
|
const {
|
|
285
|
-
conf
|
|
293
|
+
conf,
|
|
294
|
+
runner
|
|
286
295
|
} = this;
|
|
287
|
-
const preMiddleware = await
|
|
288
|
-
preMiddleware.forEach(mid => {
|
|
296
|
+
const preMiddleware = await runner.preServerInit(conf);
|
|
297
|
+
preMiddleware.flat().forEach(mid => {
|
|
289
298
|
this.addHandler(mid);
|
|
290
299
|
});
|
|
291
300
|
}
|
|
292
301
|
|
|
293
|
-
|
|
294
|
-
const
|
|
302
|
+
async handleAPI(context) {
|
|
303
|
+
const {
|
|
304
|
+
req,
|
|
305
|
+
res
|
|
306
|
+
} = context;
|
|
295
307
|
|
|
296
|
-
if (
|
|
297
|
-
|
|
308
|
+
if (!this.frameAPIHandler) {
|
|
309
|
+
throw new Error('can not found api hanlder');
|
|
298
310
|
}
|
|
299
311
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
const curFavicon = faviconByEntries[f];
|
|
312
|
+
await this.frameAPIHandler(req, res);
|
|
313
|
+
}
|
|
303
314
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
});
|
|
308
|
-
}
|
|
315
|
+
async handleWeb(context, route) {
|
|
316
|
+
return this.routeRenderHandler(context, route);
|
|
317
|
+
}
|
|
309
318
|
|
|
310
|
-
|
|
319
|
+
verifyMatch(_c, _m) {// empty
|
|
311
320
|
}
|
|
312
321
|
/* —————————————————————— private function —————————————————————— */
|
|
313
322
|
// handler route.json, include api / csr / ssr
|
|
@@ -318,25 +327,43 @@ export class ModernServer {
|
|
|
318
327
|
const {
|
|
319
328
|
req,
|
|
320
329
|
res
|
|
321
|
-
} = context;
|
|
330
|
+
} = context;
|
|
331
|
+
await this.emitRouteHook('beforeMatch', {
|
|
332
|
+
context
|
|
333
|
+
}); // match routes in the route spec
|
|
322
334
|
|
|
323
335
|
const matched = this.router.match(context.url);
|
|
324
336
|
|
|
325
337
|
if (!matched) {
|
|
326
338
|
this.render404(context);
|
|
327
339
|
return;
|
|
340
|
+
} else {
|
|
341
|
+
this.verifyMatch(context, matched);
|
|
328
342
|
}
|
|
329
343
|
|
|
330
|
-
|
|
331
|
-
|
|
344
|
+
if (res.headersSent) {
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
const routeAPI = createRouteAPI(matched, this.router);
|
|
349
|
+
await this.emitRouteHook('afterMatch', {
|
|
350
|
+
context,
|
|
351
|
+
routeAPI
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
if (res.headersSent) {
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
const {
|
|
359
|
+
current
|
|
360
|
+
} = routeAPI;
|
|
361
|
+
const route = current.generate();
|
|
362
|
+
const params = current.parseURLParams(context.url);
|
|
332
363
|
context.setParams(params); // route is api service
|
|
333
364
|
|
|
334
365
|
if (route.isApi) {
|
|
335
|
-
|
|
336
|
-
throw new Error('can not found api hanlder');
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
await this.frameAPIHandler(req, res);
|
|
366
|
+
this.handleAPI(context);
|
|
340
367
|
return;
|
|
341
368
|
}
|
|
342
369
|
|
|
@@ -349,7 +376,13 @@ export class ModernServer {
|
|
|
349
376
|
return;
|
|
350
377
|
}
|
|
351
378
|
|
|
352
|
-
|
|
379
|
+
if (route.entryName) {
|
|
380
|
+
await this.emitRouteHook('beforeRender', {
|
|
381
|
+
context
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
const file = await this.handleWeb(context, route);
|
|
353
386
|
|
|
354
387
|
if (!file) {
|
|
355
388
|
this.render404(context);
|
|
@@ -367,11 +400,9 @@ export class ModernServer {
|
|
|
367
400
|
|
|
368
401
|
if (route.entryName) {
|
|
369
402
|
const templateAPI = createTemplateAPI(file.content.toString());
|
|
370
|
-
await this.
|
|
403
|
+
await this.emitRouteHook('afterRender', {
|
|
371
404
|
context,
|
|
372
405
|
templateAPI
|
|
373
|
-
}, {
|
|
374
|
-
onLast: noop
|
|
375
406
|
});
|
|
376
407
|
await this.injectMicroFE(context, templateAPI);
|
|
377
408
|
response = templateAPI.get();
|
|
@@ -491,7 +522,7 @@ export class ModernServer {
|
|
|
491
522
|
res.statusCode = 200;
|
|
492
523
|
const context = createContext(req, res, {
|
|
493
524
|
logger: this.logger,
|
|
494
|
-
|
|
525
|
+
metrics: this.metrics
|
|
495
526
|
});
|
|
496
527
|
|
|
497
528
|
try {
|
|
@@ -539,5 +570,25 @@ export class ModernServer {
|
|
|
539
570
|
res.end(createErrorDocument(status, text));
|
|
540
571
|
}
|
|
541
572
|
|
|
573
|
+
prepareFavicons(favicon, faviconByEntries) {
|
|
574
|
+
const faviconNames = [];
|
|
575
|
+
|
|
576
|
+
if (favicon) {
|
|
577
|
+
faviconNames.push(favicon.substring(favicon.lastIndexOf('/') + 1));
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
if (faviconByEntries) {
|
|
581
|
+
Object.keys(faviconByEntries).forEach(f => {
|
|
582
|
+
const curFavicon = faviconByEntries[f];
|
|
583
|
+
|
|
584
|
+
if (curFavicon) {
|
|
585
|
+
faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf('/') + 1));
|
|
586
|
+
}
|
|
587
|
+
});
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
return faviconNames;
|
|
591
|
+
}
|
|
592
|
+
|
|
542
593
|
}
|
|
543
594
|
/* eslint-enable max-lines */
|
package/dist/js/modern/utils.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export const mergeExtension =
|
|
1
|
+
export const mergeExtension = users => {
|
|
2
2
|
const output = [];
|
|
3
3
|
return {
|
|
4
|
-
middleware: output.concat(users)
|
|
4
|
+
middleware: output.concat(users)
|
|
5
5
|
};
|
|
6
6
|
};
|
|
7
7
|
export const toMessage = (dig, e) => {
|
|
@@ -47,4 +47,12 @@ export const createErrorDocument = (status, text) => {
|
|
|
47
47
|
</body>
|
|
48
48
|
</html>
|
|
49
49
|
`;
|
|
50
|
-
};
|
|
50
|
+
}; // This can live anywhere in your codebase:
|
|
51
|
+
|
|
52
|
+
export function applyMixins(derivedCtor, constructors) {
|
|
53
|
+
constructors.forEach(baseCtor => {
|
|
54
|
+
Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
|
|
55
|
+
Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) || Object.create(null));
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
@@ -11,9 +11,9 @@ var _serverUtils = require("@modern-js/server-utils");
|
|
|
11
11
|
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
13
|
|
|
14
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
14
|
+
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; }
|
|
15
15
|
|
|
16
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
16
|
+
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; }
|
|
17
17
|
|
|
18
18
|
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; }
|
|
19
19
|
|
|
@@ -7,9 +7,9 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _utils = require("@modern-js/utils");
|
|
9
9
|
|
|
10
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
10
|
+
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; }
|
|
11
11
|
|
|
12
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
12
|
+
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; }
|
|
13
13
|
|
|
14
14
|
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; }
|
|
15
15
|
|
|
@@ -27,17 +27,29 @@ class ModernServerContext {
|
|
|
27
27
|
*/
|
|
28
28
|
constructor(req, res, {
|
|
29
29
|
logger,
|
|
30
|
-
|
|
30
|
+
metrics
|
|
31
31
|
}) {
|
|
32
32
|
this.req = void 0;
|
|
33
33
|
this.res = void 0;
|
|
34
34
|
this.params = {};
|
|
35
35
|
this.logger = void 0;
|
|
36
|
-
this.
|
|
36
|
+
this.metrics = void 0;
|
|
37
37
|
this.req = req;
|
|
38
38
|
this.res = res;
|
|
39
39
|
this.logger = logger;
|
|
40
|
-
this.
|
|
40
|
+
this.metrics = metrics;
|
|
41
|
+
this.bind();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
bind() {
|
|
45
|
+
const {
|
|
46
|
+
req,
|
|
47
|
+
res
|
|
48
|
+
} = this;
|
|
49
|
+
|
|
50
|
+
req.get = key => this.getReqHeader(key);
|
|
51
|
+
|
|
52
|
+
res.set = (key, value) => this.res.setHeader(key, value);
|
|
41
53
|
}
|
|
42
54
|
|
|
43
55
|
setParams(params) {
|
|
@@ -66,10 +78,6 @@ class ModernServerContext {
|
|
|
66
78
|
return this.req.headers;
|
|
67
79
|
}
|
|
68
80
|
|
|
69
|
-
set headers(val) {
|
|
70
|
-
this.req.headers = val;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
81
|
get method() {
|
|
74
82
|
return this.req.method;
|
|
75
83
|
}
|
|
@@ -15,10 +15,10 @@ var _context = require("./context");
|
|
|
15
15
|
|
|
16
16
|
const createContext = (req, res, {
|
|
17
17
|
logger,
|
|
18
|
-
|
|
18
|
+
metrics
|
|
19
19
|
}) => new _context.ModernServerContext(req, res, {
|
|
20
20
|
logger,
|
|
21
|
-
|
|
21
|
+
metrics
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
exports.createContext = createContext;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createRouteAPI = void 0;
|
|
7
|
+
|
|
8
|
+
class RouteAPI {
|
|
9
|
+
constructor(matched, router) {
|
|
10
|
+
this.router = void 0;
|
|
11
|
+
this.current = void 0;
|
|
12
|
+
this.current = matched;
|
|
13
|
+
this.router = router;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
cur() {
|
|
17
|
+
return this.current.generate();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
get(entryName) {
|
|
21
|
+
const {
|
|
22
|
+
router
|
|
23
|
+
} = this;
|
|
24
|
+
const matched = router.matchEntry(entryName);
|
|
25
|
+
return matched ? matched.generate() : null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
use(entryName) {
|
|
29
|
+
const {
|
|
30
|
+
router
|
|
31
|
+
} = this;
|
|
32
|
+
const matched = router.matchEntry(entryName);
|
|
33
|
+
|
|
34
|
+
if (matched) {
|
|
35
|
+
this.current = matched;
|
|
36
|
+
return true;
|
|
37
|
+
} else {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const createRouteAPI = (matched, router) => new RouteAPI(matched, router);
|
|
45
|
+
|
|
46
|
+
exports.createRouteAPI = createRouteAPI;
|
|
File without changes
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
const
|
|
6
|
+
exports.metrics = void 0;
|
|
7
|
+
const metrics = {
|
|
8
8
|
gauges() {// no impl
|
|
9
9
|
},
|
|
10
10
|
|
|
@@ -15,4 +15,4 @@ const measure = {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
};
|
|
18
|
-
exports.
|
|
18
|
+
exports.metrics = metrics;
|
|
@@ -7,9 +7,9 @@ exports.createProxyHandler = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _httpProxyMiddleware = require("http-proxy-middleware");
|
|
9
9
|
|
|
10
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
10
|
+
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; }
|
|
11
11
|
|
|
12
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
12
|
+
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; }
|
|
13
13
|
|
|
14
14
|
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; }
|
|
15
15
|
|
|
@@ -8,9 +8,9 @@ var _cacheable = require("./cacheable");
|
|
|
8
8
|
|
|
9
9
|
var _matchedCache = require("./matched-cache");
|
|
10
10
|
|
|
11
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
11
|
+
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; }
|
|
12
12
|
|
|
13
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
13
|
+
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; }
|
|
14
14
|
|
|
15
15
|
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; }
|
|
16
16
|
|
|
@@ -11,9 +11,9 @@ var _util = require("./util");
|
|
|
11
11
|
|
|
12
12
|
var _constants = require("../../../constants");
|
|
13
13
|
|
|
14
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
14
|
+
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; }
|
|
15
15
|
|
|
16
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
16
|
+
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; }
|
|
17
17
|
|
|
18
18
|
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; }
|
|
19
19
|
|
|
@@ -64,6 +64,10 @@ class RouteMatchManager {
|
|
|
64
64
|
return best;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
matchEntry(entryname) {
|
|
68
|
+
return this.matchers.find(matcher => matcher.matchEntry(entryname));
|
|
69
|
+
}
|
|
70
|
+
|
|
67
71
|
getBundles() {
|
|
68
72
|
const bundles = this.specs.filter(route => route.isSSR).map(route => route.bundle);
|
|
69
73
|
return bundles;
|