@modern-js/server 1.1.2 → 1.1.3-beta.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/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/route/index.js +4 -0
- package/dist/js/modern/libs/route/matcher.js +4 -0
- package/dist/js/modern/server/{web-server.js → dev-server/dev-server-split.js} +9 -7
- 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 +61 -62
- package/dist/js/modern/server/{api-server.js → modern-server-split.js} +6 -10
- package/dist/js/modern/server/modern-server.js +48 -20
- package/dist/js/modern/utils.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/route/index.js +4 -0
- package/dist/js/node/libs/route/matcher.js +4 -0
- package/dist/js/node/server/{api-server.js → dev-server/dev-server-split.js} +7 -12
- 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 +67 -63
- package/dist/js/node/server/{web-server.js → modern-server-split.js} +10 -9
- package/dist/js/node/server/modern-server.js +50 -20
- package/dist/js/node/utils.js +2 -2
- 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/{api-server.d.ts → dev-server/dev-server-split.d.ts} +7 -8
- 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/{web-server.d.ts → modern-server-split.d.ts} +5 -4
- package/dist/types/server/modern-server.d.ts +6 -5
- package/dist/types/utils.d.ts +1 -1
- package/package.json +19 -17
- 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/{api-server.ts → dev-server/dev-server-split.ts} +9 -11
- package/src/server/{dev-server.ts → dev-server/dev-server.ts} +56 -23
- package/src/server/dev-server/index.ts +2 -0
- package/src/server/index.ts +69 -46
- package/src/server/{web-server.ts → modern-server-split.ts} +12 -10
- package/src/server/modern-server.ts +54 -34
- package/src/utils.ts +2 -2
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/* eslint-disable max-lines */
|
|
2
|
-
import { IncomingMessage, ServerResponse, Server } from 'http';
|
|
2
|
+
import { IncomingMessage, ServerResponse, Server, createServer } from 'http';
|
|
3
3
|
import util from 'util';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { fs, ROUTE_SPEC_FILE } from '@modern-js/utils';
|
|
6
|
-
import { Adapter } from '@modern-js/server-plugin';
|
|
7
|
-
import {
|
|
6
|
+
import { Adapter, APIServerStartInput } from '@modern-js/server-plugin';
|
|
7
|
+
import { createMiddlewareCollecter } from '@modern-js/server-utils';
|
|
8
8
|
import type { NormalizedConfig } from '@modern-js/core';
|
|
9
9
|
import mime from 'mime-types';
|
|
10
10
|
import axios from 'axios';
|
|
@@ -30,7 +30,8 @@ import {
|
|
|
30
30
|
ERROR_DIGEST,
|
|
31
31
|
ERROR_PAGE_TEXT,
|
|
32
32
|
} from '@/constants';
|
|
33
|
-
import { createTemplateAPI } from '@/libs/hook-api';
|
|
33
|
+
import { createTemplateAPI } from '@/libs/hook-api/template';
|
|
34
|
+
import { createRouteAPI } from '@/libs/hook-api/route';
|
|
34
35
|
|
|
35
36
|
type ModernServerHandler = (
|
|
36
37
|
context: ModernServerContext,
|
|
@@ -63,12 +64,12 @@ export class ModernServer {
|
|
|
63
64
|
|
|
64
65
|
protected presetRoutes?: ModernRouteInterface[];
|
|
65
66
|
|
|
67
|
+
protected runner!: ServerHookRunner;
|
|
68
|
+
|
|
66
69
|
protected readonly logger: Logger;
|
|
67
70
|
|
|
68
71
|
protected readonly measure: Measure;
|
|
69
72
|
|
|
70
|
-
private readonly runner: ServerHookRunner;
|
|
71
|
-
|
|
72
73
|
private readonly isDev: boolean = false;
|
|
73
74
|
|
|
74
75
|
private staticFileHandler!: ReturnType<typeof createStaticFileHandler>;
|
|
@@ -85,18 +86,15 @@ export class ModernServer {
|
|
|
85
86
|
|
|
86
87
|
private proxyHandler: ReturnType<typeof createProxyHandler> = null;
|
|
87
88
|
|
|
88
|
-
constructor(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}: ModernServerOptions,
|
|
98
|
-
runner: ServerHookRunner,
|
|
99
|
-
) {
|
|
89
|
+
constructor({
|
|
90
|
+
pwd,
|
|
91
|
+
config,
|
|
92
|
+
dev,
|
|
93
|
+
routes,
|
|
94
|
+
staticGenerate,
|
|
95
|
+
logger,
|
|
96
|
+
measure,
|
|
97
|
+
}: ModernServerOptions) {
|
|
100
98
|
require('ignore-styles');
|
|
101
99
|
this.isDev = Boolean(dev);
|
|
102
100
|
|
|
@@ -104,7 +102,6 @@ export class ModernServer {
|
|
|
104
102
|
this.distDir = path.join(pwd, config.output.path || '');
|
|
105
103
|
this.workDir = this.isDev ? pwd : this.distDir;
|
|
106
104
|
this.conf = config;
|
|
107
|
-
this.runner = runner;
|
|
108
105
|
this.logger = logger!;
|
|
109
106
|
this.measure = measure!;
|
|
110
107
|
this.router = new RouteMatchManager();
|
|
@@ -122,7 +119,9 @@ export class ModernServer {
|
|
|
122
119
|
}
|
|
123
120
|
|
|
124
121
|
// server prepare
|
|
125
|
-
public async init() {
|
|
122
|
+
public async init(runner: ServerHookRunner) {
|
|
123
|
+
this.runner = runner;
|
|
124
|
+
|
|
126
125
|
const { distDir, isDev, staticGenerate, conf } = this;
|
|
127
126
|
|
|
128
127
|
this.addHandler((ctx: ModernServerContext, next: NextFunction) => {
|
|
@@ -198,6 +197,16 @@ export class ModernServer {
|
|
|
198
197
|
reader.close();
|
|
199
198
|
}
|
|
200
199
|
|
|
200
|
+
public async createHTTPServer(
|
|
201
|
+
handler: (
|
|
202
|
+
req: IncomingMessage,
|
|
203
|
+
res: ServerResponse,
|
|
204
|
+
next?: () => void,
|
|
205
|
+
) => void,
|
|
206
|
+
) {
|
|
207
|
+
return createServer(handler);
|
|
208
|
+
}
|
|
209
|
+
|
|
201
210
|
// warmup ssr function
|
|
202
211
|
protected warmupSSRBundle() {
|
|
203
212
|
const { distDir } = this;
|
|
@@ -241,9 +250,6 @@ export class ModernServer {
|
|
|
241
250
|
protected async prepareFrameHandler() {
|
|
242
251
|
const { workDir, runner } = this;
|
|
243
252
|
|
|
244
|
-
// inner tool, gather user inject
|
|
245
|
-
const { api: userAPIExt, web: userWebExt } = gather(workDir);
|
|
246
|
-
|
|
247
253
|
// server hook, gather plugin inject
|
|
248
254
|
const { getMiddlewares, ...collector } = createMiddlewareCollecter();
|
|
249
255
|
|
|
@@ -255,7 +261,7 @@ export class ModernServer {
|
|
|
255
261
|
|
|
256
262
|
// get api or web server handler from server-framework plugin
|
|
257
263
|
if (await fs.pathExists(path.join(serverDir))) {
|
|
258
|
-
const webExtension = mergeExtension(pluginWebExt
|
|
264
|
+
const webExtension = mergeExtension(pluginWebExt);
|
|
259
265
|
this.frameWebHandler = await this.prepareWebHandler(webExtension);
|
|
260
266
|
}
|
|
261
267
|
|
|
@@ -265,11 +271,11 @@ export class ModernServer {
|
|
|
265
271
|
: ApiServerMode.func;
|
|
266
272
|
|
|
267
273
|
// if use lambda/, mean framework style of writing, then discard user extension
|
|
268
|
-
const apiExtension = mergeExtension(
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
274
|
+
const apiExtension = mergeExtension(pluginAPIExt);
|
|
275
|
+
this.frameAPIHandler = await this.prepareAPIHandler(mode, {
|
|
276
|
+
...apiExtension,
|
|
277
|
+
modernJsConfig: this.conf,
|
|
278
|
+
});
|
|
273
279
|
}
|
|
274
280
|
}
|
|
275
281
|
|
|
@@ -290,7 +296,7 @@ export class ModernServer {
|
|
|
290
296
|
|
|
291
297
|
protected async prepareAPIHandler(
|
|
292
298
|
mode: ApiServerMode,
|
|
293
|
-
extension:
|
|
299
|
+
extension: APIServerStartInput['config'],
|
|
294
300
|
) {
|
|
295
301
|
const { workDir, runner, conf } = this;
|
|
296
302
|
const { bff } = conf as ConfWithBFF;
|
|
@@ -301,7 +307,7 @@ export class ModernServer {
|
|
|
301
307
|
pwd: workDir,
|
|
302
308
|
mode,
|
|
303
309
|
config: extension,
|
|
304
|
-
prefix,
|
|
310
|
+
prefix: Array.isArray(prefix) ? prefix[0] : prefix,
|
|
305
311
|
},
|
|
306
312
|
{ onLast: () => null as any },
|
|
307
313
|
);
|
|
@@ -316,7 +322,7 @@ export class ModernServer {
|
|
|
316
322
|
const preMiddleware: ModernServerAsyncHandler[] =
|
|
317
323
|
await this.runner.preServerInit(conf);
|
|
318
324
|
|
|
319
|
-
preMiddleware.forEach(mid => {
|
|
325
|
+
preMiddleware.flat().forEach(mid => {
|
|
320
326
|
this.addHandler(mid);
|
|
321
327
|
});
|
|
322
328
|
}
|
|
@@ -349,6 +355,8 @@ export class ModernServer {
|
|
|
349
355
|
private async routeHandler(context: ModernServerContext) {
|
|
350
356
|
const { req, res } = context;
|
|
351
357
|
|
|
358
|
+
await this.runner.beforeMatch({ context }, { onLast: noop as any });
|
|
359
|
+
|
|
352
360
|
// match routes in the route spec
|
|
353
361
|
const matched = this.router.match(context.url);
|
|
354
362
|
if (!matched) {
|
|
@@ -356,8 +364,19 @@ export class ModernServer {
|
|
|
356
364
|
return;
|
|
357
365
|
}
|
|
358
366
|
|
|
359
|
-
const
|
|
360
|
-
|
|
367
|
+
const routeAPI = createRouteAPI(matched, this.router);
|
|
368
|
+
await this.runner.afterMatch(
|
|
369
|
+
{ context, routeAPI },
|
|
370
|
+
{ onLast: noop as any },
|
|
371
|
+
);
|
|
372
|
+
|
|
373
|
+
if (res.headersSent) {
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
const { current } = routeAPI as any;
|
|
378
|
+
const route = current.generate();
|
|
379
|
+
const params = current.parseURLParams(context.url);
|
|
361
380
|
context.setParams(params);
|
|
362
381
|
|
|
363
382
|
// route is api service
|
|
@@ -379,6 +398,7 @@ export class ModernServer {
|
|
|
379
398
|
return;
|
|
380
399
|
}
|
|
381
400
|
|
|
401
|
+
await this.runner.beforeRender({ context }, { onLast: noop as any });
|
|
382
402
|
const file = await this.routeRenderHandler(context, route);
|
|
383
403
|
if (!file) {
|
|
384
404
|
this.render404(context);
|
package/src/utils.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export const mergeExtension = (users: any[]
|
|
1
|
+
export const mergeExtension = (users: any[]) => {
|
|
2
2
|
const output: any[] = [];
|
|
3
|
-
return { middleware: output.concat(users)
|
|
3
|
+
return { middleware: output.concat(users) };
|
|
4
4
|
};
|
|
5
5
|
|
|
6
6
|
export const toMessage = (dig: string, e: Error | string): string => {
|