@modern-js/server 1.1.2 → 1.1.4-rc.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.
- package/CHANGELOG.md +46 -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/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/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/cache/type.js +0 -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/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 +64 -62
- package/dist/js/modern/server/modern-server-split.js +81 -0
- package/dist/js/modern/server/modern-server.js +117 -59
- package/dist/js/modern/type.js +0 -1
- 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/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/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/route/index.js +4 -0
- package/dist/js/node/libs/route/matcher.js +4 -0
- 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 +71 -63
- package/dist/js/node/server/modern-server-split.js +97 -0
- package/dist/js/node/server/modern-server.js +120 -60
- package/dist/js/node/utils.js +14 -4
- 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/route/index.d.ts +1 -0
- package/dist/types/libs/route/matcher.d.ts +1 -0
- 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 +19 -11
- package/dist/types/type.d.ts +5 -0
- package/dist/types/utils.d.ts +3 -2
- package/package.json +12 -11
- package/src/libs/hook-api/route.ts +38 -0
- package/src/libs/{hook-api.ts → hook-api/template.ts} +0 -0
- package/src/libs/route/index.ts +4 -0
- package/src/libs/route/matcher.ts +4 -0
- 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 +80 -47
- package/src/server/modern-server-split.ts +97 -0
- package/src/server/modern-server.ts +135 -81
- package/src/type.ts +5 -0
- 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/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
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.ModernServer = void 0;
|
|
7
7
|
|
|
8
|
+
var _http = require("http");
|
|
9
|
+
|
|
8
10
|
var _util = _interopRequireDefault(require("util"));
|
|
9
11
|
|
|
10
12
|
var _path = _interopRequireDefault(require("path"));
|
|
@@ -33,7 +35,9 @@ var _context = require("../libs/context");
|
|
|
33
35
|
|
|
34
36
|
var _constants = require("../constants");
|
|
35
37
|
|
|
36
|
-
var
|
|
38
|
+
var _template = require("../libs/hook-api/template");
|
|
39
|
+
|
|
40
|
+
var _route2 = require("../libs/hook-api/route");
|
|
37
41
|
|
|
38
42
|
const _excluded = ["getMiddlewares"];
|
|
39
43
|
|
|
@@ -43,9 +47,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
43
47
|
|
|
44
48
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
45
49
|
|
|
46
|
-
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; }
|
|
47
51
|
|
|
48
|
-
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; }
|
|
49
53
|
|
|
50
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; }
|
|
51
55
|
|
|
@@ -67,8 +71,9 @@ class ModernServer {
|
|
|
67
71
|
routes,
|
|
68
72
|
staticGenerate,
|
|
69
73
|
logger,
|
|
70
|
-
measure
|
|
71
|
-
|
|
74
|
+
measure,
|
|
75
|
+
proxyTarget
|
|
76
|
+
}) {
|
|
72
77
|
this.pwd = void 0;
|
|
73
78
|
this.distDir = void 0;
|
|
74
79
|
this.workDir = void 0;
|
|
@@ -76,9 +81,10 @@ class ModernServer {
|
|
|
76
81
|
this.conf = void 0;
|
|
77
82
|
this.handlers = [];
|
|
78
83
|
this.presetRoutes = void 0;
|
|
84
|
+
this.runner = void 0;
|
|
79
85
|
this.logger = void 0;
|
|
80
86
|
this.measure = void 0;
|
|
81
|
-
this.
|
|
87
|
+
this.proxyTarget = void 0;
|
|
82
88
|
this.isDev = false;
|
|
83
89
|
this.staticFileHandler = void 0;
|
|
84
90
|
this.routeRenderHandler = void 0;
|
|
@@ -92,14 +98,14 @@ class ModernServer {
|
|
|
92
98
|
|
|
93
99
|
this.isDev = Boolean(dev);
|
|
94
100
|
this.pwd = pwd;
|
|
95
|
-
this.distDir = _path.default.join(pwd, config.output.path || '');
|
|
101
|
+
this.distDir = _path.default.join(pwd, config.output.path || 'dist');
|
|
96
102
|
this.workDir = this.isDev ? pwd : this.distDir;
|
|
97
103
|
this.conf = config;
|
|
98
|
-
this.runner = runner;
|
|
99
104
|
this.logger = logger;
|
|
100
105
|
this.measure = measure;
|
|
101
106
|
this.router = new _route.RouteMatchManager();
|
|
102
107
|
this.presetRoutes = routes;
|
|
108
|
+
this.proxyTarget = proxyTarget;
|
|
103
109
|
|
|
104
110
|
if (staticGenerate) {
|
|
105
111
|
this.staticGenerate = staticGenerate;
|
|
@@ -114,9 +120,10 @@ class ModernServer {
|
|
|
114
120
|
} // server prepare
|
|
115
121
|
|
|
116
122
|
|
|
117
|
-
async init() {
|
|
123
|
+
async init(runner) {
|
|
118
124
|
var _conf$bff;
|
|
119
125
|
|
|
126
|
+
this.runner = runner;
|
|
120
127
|
const {
|
|
121
128
|
distDir,
|
|
122
129
|
isDev,
|
|
@@ -181,20 +188,10 @@ class ModernServer {
|
|
|
181
188
|
|
|
182
189
|
close() {
|
|
183
190
|
reader.close();
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
warmupSSRBundle() {
|
|
188
|
-
const {
|
|
189
|
-
distDir
|
|
190
|
-
} = this;
|
|
191
|
-
const bundles = this.router.getBundles();
|
|
192
|
-
bundles.forEach(bundle => {
|
|
193
|
-
const filepath = _path.default.join(distDir, bundle); // if error, just throw and let process die
|
|
194
|
-
|
|
191
|
+
}
|
|
195
192
|
|
|
196
|
-
|
|
197
|
-
|
|
193
|
+
async createHTTPServer(handler) {
|
|
194
|
+
return (0, _http.createServer)(handler);
|
|
198
195
|
} // read route spec from route.json
|
|
199
196
|
|
|
200
197
|
|
|
@@ -230,12 +227,7 @@ class ModernServer {
|
|
|
230
227
|
const {
|
|
231
228
|
workDir,
|
|
232
229
|
runner
|
|
233
|
-
} = this; //
|
|
234
|
-
|
|
235
|
-
const {
|
|
236
|
-
api: userAPIExt,
|
|
237
|
-
web: userWebExt
|
|
238
|
-
} = (0, _serverUtils.gather)(workDir); // server hook, gather plugin inject
|
|
230
|
+
} = this; // server hook, gather plugin inject
|
|
239
231
|
|
|
240
232
|
const _createMiddlewareColl = (0, _serverUtils.createMiddlewareCollecter)(),
|
|
241
233
|
{
|
|
@@ -255,16 +247,21 @@ class ModernServer {
|
|
|
255
247
|
|
|
256
248
|
|
|
257
249
|
if (await _utils.fs.pathExists(_path.default.join(serverDir))) {
|
|
258
|
-
const webExtension = (0, _utils2.mergeExtension)(pluginWebExt
|
|
250
|
+
const webExtension = (0, _utils2.mergeExtension)(pluginWebExt);
|
|
259
251
|
this.frameWebHandler = await this.prepareWebHandler(webExtension);
|
|
260
252
|
}
|
|
261
253
|
|
|
262
254
|
if (_utils.fs.existsSync(apiDir)) {
|
|
263
255
|
const mode = _utils.fs.existsSync(_path.default.join(apiDir, _constants.AGGRED_DIR.lambda)) ? _constants.ApiServerMode.frame : _constants.ApiServerMode.func; // if use lambda/, mean framework style of writing, then discard user extension
|
|
264
256
|
|
|
265
|
-
const apiExtension = (0, _utils2.mergeExtension)(pluginAPIExt
|
|
257
|
+
const apiExtension = (0, _utils2.mergeExtension)(pluginAPIExt);
|
|
266
258
|
this.frameAPIHandler = await this.prepareAPIHandler(mode, apiExtension);
|
|
267
259
|
}
|
|
260
|
+
} // Todo
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
async proxy() {
|
|
264
|
+
return null;
|
|
268
265
|
}
|
|
269
266
|
/* —————————————————————— function will be overwrite —————————————————————— */
|
|
270
267
|
|
|
@@ -296,7 +293,7 @@ class ModernServer {
|
|
|
296
293
|
pwd: workDir,
|
|
297
294
|
mode,
|
|
298
295
|
config: extension,
|
|
299
|
-
prefix
|
|
296
|
+
prefix: Array.isArray(prefix) ? prefix[0] : prefix
|
|
300
297
|
}, {
|
|
301
298
|
onLast: () => null
|
|
302
299
|
});
|
|
@@ -306,34 +303,55 @@ class ModernServer {
|
|
|
306
303
|
return routes;
|
|
307
304
|
}
|
|
308
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
|
+
|
|
309
326
|
async preServerInit() {
|
|
310
327
|
const {
|
|
311
|
-
conf
|
|
328
|
+
conf,
|
|
329
|
+
runner
|
|
312
330
|
} = this;
|
|
313
|
-
const preMiddleware = await
|
|
314
|
-
preMiddleware.forEach(mid => {
|
|
331
|
+
const preMiddleware = await runner.preServerInit(conf);
|
|
332
|
+
preMiddleware.flat().forEach(mid => {
|
|
315
333
|
this.addHandler(mid);
|
|
316
334
|
});
|
|
317
335
|
}
|
|
318
336
|
|
|
319
|
-
|
|
320
|
-
const
|
|
337
|
+
async handleAPI(context) {
|
|
338
|
+
const {
|
|
339
|
+
req,
|
|
340
|
+
res
|
|
341
|
+
} = context;
|
|
321
342
|
|
|
322
|
-
if (
|
|
323
|
-
|
|
343
|
+
if (!this.frameAPIHandler) {
|
|
344
|
+
throw new Error('can not found api hanlder');
|
|
324
345
|
}
|
|
325
346
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
const curFavicon = faviconByEntries[f];
|
|
347
|
+
await this.frameAPIHandler(req, res);
|
|
348
|
+
}
|
|
329
349
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
});
|
|
334
|
-
}
|
|
350
|
+
async handleWeb(context, route) {
|
|
351
|
+
return this.routeRenderHandler(context, route);
|
|
352
|
+
}
|
|
335
353
|
|
|
336
|
-
|
|
354
|
+
verifyMatch(_c, _m) {// empty
|
|
337
355
|
}
|
|
338
356
|
/* —————————————————————— private function —————————————————————— */
|
|
339
357
|
// handler route.json, include api / csr / ssr
|
|
@@ -344,25 +362,43 @@ class ModernServer {
|
|
|
344
362
|
const {
|
|
345
363
|
req,
|
|
346
364
|
res
|
|
347
|
-
} = context;
|
|
365
|
+
} = context;
|
|
366
|
+
await this.emitRouteHook('beforeMatch', {
|
|
367
|
+
context
|
|
368
|
+
}); // match routes in the route spec
|
|
348
369
|
|
|
349
370
|
const matched = this.router.match(context.url);
|
|
350
371
|
|
|
351
372
|
if (!matched) {
|
|
352
373
|
this.render404(context);
|
|
353
374
|
return;
|
|
375
|
+
} else {
|
|
376
|
+
this.verifyMatch(context, matched);
|
|
354
377
|
}
|
|
355
378
|
|
|
356
|
-
|
|
357
|
-
|
|
379
|
+
if (res.headersSent) {
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
const routeAPI = (0, _route2.createRouteAPI)(matched, this.router);
|
|
384
|
+
await this.emitRouteHook('afterMatch', {
|
|
385
|
+
context,
|
|
386
|
+
routeAPI
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
if (res.headersSent) {
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
const {
|
|
394
|
+
current
|
|
395
|
+
} = routeAPI;
|
|
396
|
+
const route = current.generate();
|
|
397
|
+
const params = current.parseURLParams(context.url);
|
|
358
398
|
context.setParams(params); // route is api service
|
|
359
399
|
|
|
360
400
|
if (route.isApi) {
|
|
361
|
-
|
|
362
|
-
throw new Error('can not found api hanlder');
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
await this.frameAPIHandler(req, res);
|
|
401
|
+
this.handleAPI(context);
|
|
366
402
|
return;
|
|
367
403
|
}
|
|
368
404
|
|
|
@@ -375,7 +411,13 @@ class ModernServer {
|
|
|
375
411
|
return;
|
|
376
412
|
}
|
|
377
413
|
|
|
378
|
-
|
|
414
|
+
if (route.entryName) {
|
|
415
|
+
await this.emitRouteHook('beforeRender', {
|
|
416
|
+
context
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
const file = await this.handleWeb(context, route);
|
|
379
421
|
|
|
380
422
|
if (!file) {
|
|
381
423
|
this.render404(context);
|
|
@@ -392,12 +434,10 @@ class ModernServer {
|
|
|
392
434
|
let response = file.content;
|
|
393
435
|
|
|
394
436
|
if (route.entryName) {
|
|
395
|
-
const templateAPI = (0,
|
|
396
|
-
await this.
|
|
437
|
+
const templateAPI = (0, _template.createTemplateAPI)(file.content.toString());
|
|
438
|
+
await this.emitRouteHook('afterRender', {
|
|
397
439
|
context,
|
|
398
440
|
templateAPI
|
|
399
|
-
}, {
|
|
400
|
-
onLast: _utils2.noop
|
|
401
441
|
});
|
|
402
442
|
await this.injectMicroFE(context, templateAPI);
|
|
403
443
|
response = templateAPI.get();
|
|
@@ -565,6 +605,26 @@ class ModernServer {
|
|
|
565
605
|
res.end((0, _utils2.createErrorDocument)(status, text));
|
|
566
606
|
}
|
|
567
607
|
|
|
608
|
+
prepareFavicons(favicon, faviconByEntries) {
|
|
609
|
+
const faviconNames = [];
|
|
610
|
+
|
|
611
|
+
if (favicon) {
|
|
612
|
+
faviconNames.push(favicon.substring(favicon.lastIndexOf('/') + 1));
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
if (faviconByEntries) {
|
|
616
|
+
Object.keys(faviconByEntries).forEach(f => {
|
|
617
|
+
const curFavicon = faviconByEntries[f];
|
|
618
|
+
|
|
619
|
+
if (curFavicon) {
|
|
620
|
+
faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf('/') + 1));
|
|
621
|
+
}
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
return faviconNames;
|
|
626
|
+
}
|
|
627
|
+
|
|
568
628
|
}
|
|
569
629
|
/* eslint-enable max-lines */
|
|
570
630
|
|
package/dist/js/node/utils.js
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
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
|
-
const mergeExtension =
|
|
9
|
+
const mergeExtension = users => {
|
|
9
10
|
const output = [];
|
|
10
11
|
return {
|
|
11
|
-
middleware: output.concat(users)
|
|
12
|
+
middleware: output.concat(users)
|
|
12
13
|
};
|
|
13
14
|
};
|
|
14
15
|
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { RouteMatchManager, RouteMatcher } from '../route';
|
|
2
|
+
|
|
3
|
+
declare class RouteAPI {
|
|
4
|
+
private readonly router;
|
|
5
|
+
private current;
|
|
6
|
+
constructor(matched: RouteMatcher, router: RouteMatchManager);
|
|
7
|
+
cur(): import("../route").ModernRoute;
|
|
8
|
+
get(entryName: string): import("../route").ModernRoute | null;
|
|
9
|
+
use(entryName: string): boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export declare const createRouteAPI: (matched: RouteMatcher, router: RouteMatchManager) => RouteAPI;
|
|
13
|
+
export {};
|
|
File without changes
|
|
@@ -8,6 +8,7 @@ export declare class RouteMatchManager {
|
|
|
8
8
|
private best;
|
|
9
9
|
reset(specs: ModernRouteInterface[]): void;
|
|
10
10
|
match(pathname: string): RouteMatcher | undefined;
|
|
11
|
+
matchEntry(entryname: string): RouteMatcher | undefined;
|
|
11
12
|
getBundles(): (string | undefined)[];
|
|
12
13
|
}
|
|
13
14
|
export type { ModernRouteInterface, RouteMatcher, ModernRoute };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { APIServerStartInput } from '@modern-js/server-plugin';
|
|
2
|
+
import { ModernDevServer } from './dev-server';
|
|
3
|
+
import { mergeExtension } from "../../utils.d";
|
|
4
|
+
import { ModernRouteInterface } from "../../libs/route";
|
|
5
|
+
import { ApiServerMode } from "../../constants.d";
|
|
6
|
+
export declare class ModernSSRDevServer extends ModernDevServer {
|
|
7
|
+
protected prepareAPIHandler(_m: ApiServerMode, _: APIServerStartInput['config']): any;
|
|
8
|
+
protected prepareWebHandler(extension: ReturnType<typeof mergeExtension>): Promise<import("@modern-js/server-plugin").Adapter>;
|
|
9
|
+
protected filterRoutes(routes: ModernRouteInterface[]): ModernRouteInterface[];
|
|
10
|
+
}
|
|
11
|
+
export declare class ModernAPIDevServer extends ModernDevServer {
|
|
12
|
+
protected prepareAPIHandler(mode: ApiServerMode, extension: APIServerStartInput['config']): Promise<import("@modern-js/server-plugin").Adapter>;
|
|
13
|
+
protected filterRoutes(routes: ModernRouteInterface[]): ModernRouteInterface[];
|
|
14
|
+
protected preServerInit(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { Server } from 'http';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import http, { Server, IncomingMessage, ServerResponse } from 'http';
|
|
3
|
+
import { ModernServer } from '../modern-server';
|
|
4
|
+
import { ModernServerOptions, ServerHookRunner, ReadyOptions } from "../../type.d";
|
|
5
5
|
export declare class ModernDevServer extends ModernServer {
|
|
6
6
|
private devProxyHandler;
|
|
7
7
|
private mockHandler;
|
|
@@ -10,11 +10,12 @@ export declare class ModernDevServer extends ModernServer {
|
|
|
10
10
|
private socketServer;
|
|
11
11
|
private watcher;
|
|
12
12
|
private devMiddleware;
|
|
13
|
-
constructor(options: ModernServerOptions
|
|
14
|
-
init(): Promise<void>;
|
|
13
|
+
constructor(options: ModernServerOptions);
|
|
14
|
+
init(runner: ServerHookRunner): Promise<void>;
|
|
15
15
|
ready(options?: ReadyOptions): void;
|
|
16
16
|
onListening(app: Server): void;
|
|
17
17
|
close(): Promise<void>;
|
|
18
|
+
createHTTPServer(handler: (req: IncomingMessage, res: ServerResponse, next?: () => void) => void): Promise<http.Server | import("https").Server>;
|
|
18
19
|
private setupCompiler;
|
|
19
20
|
private setupDevServerPlugin;
|
|
20
21
|
private setupHooks;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { IncomingMessage, ServerResponse, Server as httpServer } from 'http';
|
|
3
|
-
import { ModernServerOptions, ReadyOptions } from
|
|
3
|
+
import { ModernServerOptions, ReadyOptions } from "../type.d";
|
|
4
4
|
export declare class Server {
|
|
5
5
|
options: ModernServerOptions;
|
|
6
6
|
private server;
|
|
@@ -15,4 +15,6 @@ export declare class Server {
|
|
|
15
15
|
close(): Promise<void>;
|
|
16
16
|
private createProdServer;
|
|
17
17
|
private createDevServer;
|
|
18
|
+
private createHookRunner;
|
|
19
|
+
private initAppContext;
|
|
18
20
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { APIServerStartInput } from '@modern-js/server-plugin';
|
|
2
|
+
import { ModernServer } from './modern-server';
|
|
3
|
+
import { mergeExtension } from "../utils.d";
|
|
4
|
+
import { ModernRoute, ModernRouteInterface, RouteMatcher } from "../libs/route";
|
|
5
|
+
import { ApiServerMode } from "../constants.d";
|
|
6
|
+
import { ModernServerContext } from "../libs/context";
|
|
7
|
+
export declare class ModernSSRServer extends ModernServer {
|
|
8
|
+
protected warmupSSRBundle(): Promise<void>;
|
|
9
|
+
protected verifyMatch(context: ModernServerContext, matched: RouteMatcher): void;
|
|
10
|
+
protected prepareAPIHandler(_m: ApiServerMode, _: APIServerStartInput['config']): any;
|
|
11
|
+
protected prepareWebHandler(extension: ReturnType<typeof mergeExtension>): Promise<import("@modern-js/server-plugin").Adapter>;
|
|
12
|
+
protected preServerInit(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export declare class ModernAPIServer extends ModernServer {
|
|
15
|
+
protected emitRouteHook(_: string, _input: any): Promise<void>;
|
|
16
|
+
protected warmupSSRBundle(): Promise<void>;
|
|
17
|
+
protected prepareWebHandler(_: ReturnType<typeof mergeExtension>): any;
|
|
18
|
+
protected prepareAPIHandler(mode: ApiServerMode, extension: APIServerStartInput['config']): Promise<import("@modern-js/server-plugin").Adapter>;
|
|
19
|
+
protected filterRoutes(routes: ModernRouteInterface[]): ModernRouteInterface[];
|
|
20
|
+
protected preServerInit(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
export declare class ModernWebServer extends ModernServer {
|
|
23
|
+
protected warmupSSRBundle(): Promise<void>;
|
|
24
|
+
protected handleAPI(context: ModernServerContext): Promise<void>;
|
|
25
|
+
protected handleWeb(context: ModernServerContext, route: ModernRoute): Promise<any>;
|
|
26
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { IncomingMessage, ServerResponse, Server } from 'http';
|
|
3
|
-
import { Adapter } from '@modern-js/server-plugin';
|
|
3
|
+
import { Adapter, APIServerStartInput } from '@modern-js/server-plugin';
|
|
4
4
|
import type { NormalizedConfig } from '@modern-js/core';
|
|
5
|
-
import { ModernServerOptions, NextFunction, ServerHookRunner, Measure, Logger, ReadyOptions } from
|
|
6
|
-
import { RouteMatchManager, ModernRouteInterface } from
|
|
7
|
-
import { mergeExtension } from
|
|
5
|
+
import { ModernServerOptions, NextFunction, ServerHookRunner, Measure, Logger, ReadyOptions } from "../type.d";
|
|
6
|
+
import { RouteMatchManager, ModernRouteInterface, ModernRoute, RouteMatcher } from "../libs/route";
|
|
7
|
+
import { mergeExtension } from "../utils.d";
|
|
8
8
|
import { ModernServerContext } from "../libs/context";
|
|
9
9
|
import { ApiServerMode } from "../constants.d";
|
|
10
10
|
declare type ModernServerHandler = (context: ModernServerContext, next: NextFunction) => Promise<void> | void;
|
|
@@ -17,9 +17,10 @@ export declare class ModernServer {
|
|
|
17
17
|
protected conf: NormalizedConfig;
|
|
18
18
|
protected handlers: ModernServerAsyncHandler[];
|
|
19
19
|
protected presetRoutes?: ModernRouteInterface[];
|
|
20
|
+
protected runner: ServerHookRunner;
|
|
20
21
|
protected readonly logger: Logger;
|
|
21
22
|
protected readonly measure: Measure;
|
|
22
|
-
|
|
23
|
+
protected readonly proxyTarget: ModernServerOptions['proxyTarget'];
|
|
23
24
|
private readonly isDev;
|
|
24
25
|
private staticFileHandler;
|
|
25
26
|
private routeRenderHandler;
|
|
@@ -35,28 +36,35 @@ export declare class ModernServer {
|
|
|
35
36
|
routes,
|
|
36
37
|
staticGenerate,
|
|
37
38
|
logger,
|
|
38
|
-
measure
|
|
39
|
-
|
|
39
|
+
measure,
|
|
40
|
+
proxyTarget
|
|
41
|
+
}: ModernServerOptions);
|
|
40
42
|
getRequestHandler(): (req: IncomingMessage, res: ServerResponse, next?: () => void) => void;
|
|
41
|
-
init(): Promise<void>;
|
|
43
|
+
init(runner: ServerHookRunner): Promise<void>;
|
|
42
44
|
ready(_: ReadyOptions): void;
|
|
43
45
|
onListening(_: Server): void;
|
|
44
46
|
close(): void;
|
|
45
|
-
|
|
47
|
+
createHTTPServer(handler: (req: IncomingMessage, res: ServerResponse, next?: () => void) => void): Promise<Server>;
|
|
46
48
|
protected readRouteSpec(): ModernRouteInterface[];
|
|
47
49
|
protected addHandler(handler: ModernServerHandler): void;
|
|
48
50
|
protected render404(context: ModernServerContext): void;
|
|
49
51
|
protected prepareFrameHandler(): Promise<void>;
|
|
52
|
+
protected proxy(): Promise<any>;
|
|
50
53
|
protected prepareWebHandler(extension: ReturnType<typeof mergeExtension>): Promise<Adapter>;
|
|
51
|
-
protected prepareAPIHandler(mode: ApiServerMode, extension:
|
|
54
|
+
protected prepareAPIHandler(mode: ApiServerMode, extension: APIServerStartInput['config']): Promise<Adapter>;
|
|
52
55
|
protected filterRoutes(routes: ModernRouteInterface[]): ModernRouteInterface[];
|
|
56
|
+
protected emitRouteHook(eventName: 'beforeMatch' | 'afterMatch' | 'beforeRender' | 'afterRender', input: any): Promise<any>;
|
|
57
|
+
protected warmupSSRBundle(): void;
|
|
53
58
|
protected preServerInit(): Promise<void>;
|
|
54
|
-
|
|
59
|
+
protected handleAPI(context: ModernServerContext): Promise<void>;
|
|
60
|
+
protected handleWeb(context: ModernServerContext, route: ModernRoute): Promise<import("@/type").RenderResult | null>;
|
|
61
|
+
protected verifyMatch(_c: ModernServerContext, _m: RouteMatcher): void;
|
|
55
62
|
private routeHandler;
|
|
56
63
|
private injectMicroFE;
|
|
57
64
|
private compose;
|
|
58
65
|
private requestHandler;
|
|
59
66
|
private onError;
|
|
60
67
|
private renderErrorPage;
|
|
68
|
+
private prepareFavicons;
|
|
61
69
|
}
|
|
62
70
|
export {};
|
package/dist/types/type.d.ts
CHANGED
|
@@ -45,7 +45,12 @@ export declare type ModernServerOptions = {
|
|
|
45
45
|
logger?: Logger;
|
|
46
46
|
measure?: Measure;
|
|
47
47
|
apiOnly?: boolean;
|
|
48
|
+
ssrOnly?: boolean;
|
|
48
49
|
webOnly?: boolean;
|
|
50
|
+
proxyTarget?: {
|
|
51
|
+
ssr?: string;
|
|
52
|
+
api?: string;
|
|
53
|
+
};
|
|
49
54
|
};
|
|
50
55
|
export declare type RenderResult = {
|
|
51
56
|
content: string | Buffer;
|
package/dist/types/utils.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export declare const mergeExtension: (users: any[]
|
|
1
|
+
export declare const mergeExtension: (users: any[]) => {
|
|
2
2
|
middleware: any[];
|
|
3
3
|
};
|
|
4
4
|
export declare const toMessage: (dig: string, e: Error | string) => string;
|
|
5
5
|
export declare const noop: () => void;
|
|
6
|
-
export declare const createErrorDocument: (status: number, text: string) => string;
|
|
6
|
+
export declare const createErrorDocument: (status: number, text: string) => string;
|
|
7
|
+
export declare function applyMixins(derivedCtor: any, constructors: any[]): void;
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"modern",
|
|
12
12
|
"modern.js"
|
|
13
13
|
],
|
|
14
|
-
"version": "1.1.
|
|
14
|
+
"version": "1.1.4-rc.0",
|
|
15
15
|
"jsnext:source": "./src/index.ts",
|
|
16
16
|
"types": "./dist/types/index.d.ts",
|
|
17
17
|
"main": "./dist/js/node/index.js",
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
"@babel/preset-typescript": "^7.15.0",
|
|
34
34
|
"@babel/register": "^7.15.3",
|
|
35
35
|
"@babel/runtime": "^7",
|
|
36
|
-
"@modern-js/core": "^1.1.
|
|
37
|
-
"@modern-js/hmr-client": "^1.1.
|
|
38
|
-
"@modern-js/server-plugin": "^1.1.
|
|
39
|
-
"@modern-js/server-utils": "^1.1.
|
|
40
|
-
"@modern-js/bff-utils": "^1.1.
|
|
41
|
-
"@modern-js/utils": "^1.1.
|
|
36
|
+
"@modern-js/core": "^1.1.4-rc.0",
|
|
37
|
+
"@modern-js/hmr-client": "^1.1.2-rc.0",
|
|
38
|
+
"@modern-js/server-plugin": "^1.1.2",
|
|
39
|
+
"@modern-js/server-utils": "^1.1.3-rc.0",
|
|
40
|
+
"@modern-js/bff-utils": "^1.1.2-rc.0",
|
|
41
|
+
"@modern-js/utils": "^1.1.4-rc.0",
|
|
42
42
|
"axios": "^0.21.4",
|
|
43
43
|
"babel-plugin-module-resolver": "^4.1.0",
|
|
44
44
|
"chokidar": "^3.5.2",
|
|
@@ -61,9 +61,9 @@
|
|
|
61
61
|
"ws": "^8.2.0"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@modern-js/module-tools": "^1.1.
|
|
65
|
-
"@modern-js/plugin-testing": "^1.1.
|
|
66
|
-
"@modern-js/types": "^1.1.
|
|
64
|
+
"@modern-js/module-tools": "^1.1.1",
|
|
65
|
+
"@modern-js/plugin-testing": "^1.1.1",
|
|
66
|
+
"@modern-js/types": "^1.1.3-rc.0",
|
|
67
67
|
"@types/jest": "^26",
|
|
68
68
|
"@types/lru-cache": "^5.1.1",
|
|
69
69
|
"@types/mime-types": "^2.1.0",
|
|
@@ -98,5 +98,6 @@
|
|
|
98
98
|
"build": "modern build",
|
|
99
99
|
"dev": "modern build --watch",
|
|
100
100
|
"test": "modern test --passWithNoTests"
|
|
101
|
-
}
|
|
101
|
+
},
|
|
102
|
+
"readme": "\n<p align=\"center\">\n <a href=\"https://modernjs.dev\" target=\"blank\"><img src=\"https://lf3-static.bytednsdoc.com/obj/eden-cn/ylaelkeh7nuhfnuhf/modernjs-cover.png\" width=\"300\" alt=\"Modern.js Logo\" /></a>\n</p>\n<p align=\"center\">\n现代 Web 工程体系\n <br/>\n <a href=\"https://modernjs.dev\" target=\"blank\">\n modernjs.dev\n </a>\n</p>\n<p align=\"center\">\n The meta-framework suite designed from scratch for frontend-focused modern web development\n</p>\n\n# Introduction\n\n> The doc site ([modernjs.dev](https://modernjs.dev)) and articles are only available in Chinese for now, we are planning to add English versions soon.\n\n- [Modern.js: Hello, World!](https://zhuanlan.zhihu.com/p/426707646)\n\n## Getting Started\n\n- [Quick Start](https://modernjs.dev/docs/start)\n- [Guides](https://modernjs.dev/docs/guides)\n- [API References](https://modernjs.dev/docs/apis)\n\n## Contributing\n\n- [Contributing Guide](https://github.com/modern-js-dev/modern.js/blob/main/CONTRIBUTING.md)\n"
|
|
102
103
|
}
|