@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
package/dist/types/type.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import type Webpack from 'webpack';
|
|
3
3
|
import { serverManager } from '@modern-js/server-plugin';
|
|
4
4
|
import type { NormalizedConfig } from '@modern-js/core';
|
|
5
|
-
import type {
|
|
5
|
+
import type { Metrics, Logger, NextFunction } from '@modern-js/types/server';
|
|
6
6
|
import { ModernRouteInterface } from './libs/route';
|
|
7
7
|
declare module '@modern-js/core' {
|
|
8
8
|
interface UserConfig {
|
|
@@ -41,11 +41,16 @@ export declare type ModernServerOptions = {
|
|
|
41
41
|
staticGenerate?: boolean;
|
|
42
42
|
customServer?: boolean;
|
|
43
43
|
loggerOptions?: Record<string, string>;
|
|
44
|
-
|
|
44
|
+
metricsOptions?: Record<string, string>;
|
|
45
45
|
logger?: Logger;
|
|
46
|
-
|
|
46
|
+
metrics?: Metrics;
|
|
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;
|
|
@@ -63,4 +68,4 @@ export declare type ServerHookRunner = Then<ReturnType<typeof serverManager.init
|
|
|
63
68
|
export declare type ReadyOptions = {
|
|
64
69
|
routes?: ModernRouteInterface[];
|
|
65
70
|
};
|
|
66
|
-
export type {
|
|
71
|
+
export type { Metrics, Logger, NextFunction };
|
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": "0.0.0-
|
|
14
|
+
"version": "0.0.0-runtime-2021112193858",
|
|
15
15
|
"jsnext:source": "./src/index.ts",
|
|
16
16
|
"types": "./dist/types/index.d.ts",
|
|
17
17
|
"main": "./dist/js/node/index.js",
|
|
@@ -26,14 +26,6 @@
|
|
|
26
26
|
"default": "./dist/js/treeshaking/index.js"
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
|
-
"scripts": {
|
|
30
|
-
"prepare": "pnpm build",
|
|
31
|
-
"prepublishOnly": "pnpm build --platform",
|
|
32
|
-
"new": "modern new",
|
|
33
|
-
"build": "modern build",
|
|
34
|
-
"dev": "modern build --watch",
|
|
35
|
-
"test": "modern test --passWithNoTests"
|
|
36
|
-
},
|
|
37
29
|
"dependencies": {
|
|
38
30
|
"@babel/core": "^7.15.0",
|
|
39
31
|
"@babel/compat-data": "^7.15.0",
|
|
@@ -41,12 +33,12 @@
|
|
|
41
33
|
"@babel/preset-typescript": "^7.15.0",
|
|
42
34
|
"@babel/register": "^7.15.3",
|
|
43
35
|
"@babel/runtime": "^7",
|
|
44
|
-
"@modern-js/core": "^
|
|
45
|
-
"@modern-js/hmr-client": "^
|
|
46
|
-
"@modern-js/server-plugin": "^
|
|
47
|
-
"@modern-js/server-utils": "^
|
|
48
|
-
"@modern-js/bff-utils": "^
|
|
49
|
-
"@modern-js/utils": "^
|
|
36
|
+
"@modern-js/core": "^0.0.0-runtime-2021112193858",
|
|
37
|
+
"@modern-js/hmr-client": "^0.0.0-runtime-2021112193858",
|
|
38
|
+
"@modern-js/server-plugin": "^0.0.0-runtime-2021112193858",
|
|
39
|
+
"@modern-js/server-utils": "^0.0.0-runtime-2021112193858",
|
|
40
|
+
"@modern-js/bff-utils": "^0.0.0-runtime-2021112193858",
|
|
41
|
+
"@modern-js/utils": "^0.0.0-runtime-2021112193858",
|
|
50
42
|
"axios": "^0.21.4",
|
|
51
43
|
"babel-plugin-module-resolver": "^4.1.0",
|
|
52
44
|
"chokidar": "^3.5.2",
|
|
@@ -69,9 +61,9 @@
|
|
|
69
61
|
"ws": "^8.2.0"
|
|
70
62
|
},
|
|
71
63
|
"devDependencies": {
|
|
72
|
-
"@modern-js/module-tools": "^
|
|
73
|
-
"@modern-js/plugin-testing": "^
|
|
74
|
-
"@modern-js/types": "^
|
|
64
|
+
"@modern-js/module-tools": "^0.0.0-runtime-2021112193858",
|
|
65
|
+
"@modern-js/plugin-testing": "^0.0.0-runtime-2021112193858",
|
|
66
|
+
"@modern-js/types": "^0.0.0-runtime-2021112193858",
|
|
75
67
|
"@types/jest": "^26",
|
|
76
68
|
"@types/lru-cache": "^5.1.1",
|
|
77
69
|
"@types/mime-types": "^2.1.0",
|
|
@@ -85,7 +77,7 @@
|
|
|
85
77
|
"@types/ua-parser-js": "^0.7.36",
|
|
86
78
|
"@types/webpack-dev-middleware": "^5.0.2",
|
|
87
79
|
"@types/ws": "^7.4.7",
|
|
88
|
-
"typescript": "^4",
|
|
80
|
+
"typescript": "^4.4.4",
|
|
89
81
|
"webpack": "^5.54.0"
|
|
90
82
|
},
|
|
91
83
|
"peerDependencies": {
|
|
@@ -100,5 +92,11 @@
|
|
|
100
92
|
"publishConfig": {
|
|
101
93
|
"registry": "https://registry.npmjs.org/",
|
|
102
94
|
"access": "public"
|
|
95
|
+
},
|
|
96
|
+
"scripts": {
|
|
97
|
+
"new": "modern new",
|
|
98
|
+
"build": "modern build",
|
|
99
|
+
"dev": "modern build --watch",
|
|
100
|
+
"test": "modern test --passWithNoTests"
|
|
103
101
|
}
|
|
104
|
-
}
|
|
102
|
+
}
|
|
@@ -3,7 +3,7 @@ import { URL } from 'url';
|
|
|
3
3
|
import qs from 'querystring';
|
|
4
4
|
import type {
|
|
5
5
|
ModernServerContext as ModernServerContextInterface,
|
|
6
|
-
|
|
6
|
+
Metrics,
|
|
7
7
|
Logger,
|
|
8
8
|
} from '@modern-js/types/server';
|
|
9
9
|
import { toMessage } from '../../utils';
|
|
@@ -26,17 +26,25 @@ export class ModernServerContext implements ModernServerContextInterface {
|
|
|
26
26
|
|
|
27
27
|
public logger: Logger;
|
|
28
28
|
|
|
29
|
-
public
|
|
29
|
+
public metrics?: Metrics;
|
|
30
30
|
|
|
31
31
|
constructor(
|
|
32
32
|
req: IncomingMessage,
|
|
33
33
|
res: ServerResponse,
|
|
34
|
-
{ logger,
|
|
34
|
+
{ logger, metrics }: { logger: Logger; metrics: Metrics },
|
|
35
35
|
) {
|
|
36
36
|
this.req = req;
|
|
37
37
|
this.res = res;
|
|
38
38
|
this.logger = logger;
|
|
39
|
-
this.
|
|
39
|
+
this.metrics = metrics;
|
|
40
|
+
|
|
41
|
+
this.bind();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private bind() {
|
|
45
|
+
const { req, res } = this as any;
|
|
46
|
+
req.get = (key: string) => this.getReqHeader(key);
|
|
47
|
+
res.set = (key: string, value: any) => this.res.setHeader(key, value);
|
|
40
48
|
}
|
|
41
49
|
|
|
42
50
|
public setParams(params: Record<string, string>) {
|
|
@@ -60,10 +68,6 @@ export class ModernServerContext implements ModernServerContextInterface {
|
|
|
60
68
|
return this.req.headers;
|
|
61
69
|
}
|
|
62
70
|
|
|
63
|
-
public set headers(val) {
|
|
64
|
-
this.req.headers = val;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
71
|
public get method(): string {
|
|
68
72
|
return this.req.method!;
|
|
69
73
|
}
|
|
@@ -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
|
|
|
5
5
|
export const createContext = (
|
|
6
6
|
req: IncomingMessage,
|
|
7
7
|
res: ServerResponse,
|
|
8
|
-
{ logger,
|
|
9
|
-
) => new ModernServerContext(req, res, { logger,
|
|
8
|
+
{ logger, metrics }: { logger: Logger; metrics: Metrics },
|
|
9
|
+
) => new ModernServerContext(req, res, { logger, metrics });
|
|
10
10
|
|
|
11
11
|
export { ModernServerContext };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { RouteMatchManager, RouteMatcher } from '../route';
|
|
2
|
+
|
|
3
|
+
class RouteAPI {
|
|
4
|
+
private readonly router: RouteMatchManager;
|
|
5
|
+
|
|
6
|
+
private current: RouteMatcher;
|
|
7
|
+
|
|
8
|
+
constructor(matched: RouteMatcher, router: RouteMatchManager) {
|
|
9
|
+
this.current = matched;
|
|
10
|
+
this.router = router;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public cur() {
|
|
14
|
+
return this.current.generate();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public get(entryName: string) {
|
|
18
|
+
const { router } = this;
|
|
19
|
+
const matched = router.matchEntry(entryName);
|
|
20
|
+
return matched ? matched.generate() : null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public use(entryName: string) {
|
|
24
|
+
const { router } = this;
|
|
25
|
+
const matched = router.matchEntry(entryName);
|
|
26
|
+
if (matched) {
|
|
27
|
+
this.current = matched;
|
|
28
|
+
return true;
|
|
29
|
+
} else {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const createRouteAPI = (
|
|
36
|
+
matched: RouteMatcher,
|
|
37
|
+
router: RouteMatchManager,
|
|
38
|
+
) => new RouteAPI(matched, router);
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Metrics } from '@/type';
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const metrics: Metrics = {
|
|
4
4
|
gauges() {
|
|
5
5
|
// no impl
|
|
6
6
|
},
|
|
@@ -12,4 +12,4 @@ const measure: Measure = {
|
|
|
12
12
|
},
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
-
export {
|
|
15
|
+
export { metrics };
|
package/src/libs/render/ssr.ts
CHANGED
package/src/libs/render/type.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IncomingHttpHeaders } from 'http';
|
|
2
|
-
import {
|
|
2
|
+
import { Metrics, Logger } from '../../type';
|
|
3
3
|
|
|
4
4
|
type MetaKeyMap = {
|
|
5
5
|
header?: string[];
|
|
@@ -39,7 +39,7 @@ export type SSRServerContext = {
|
|
|
39
39
|
template: string;
|
|
40
40
|
entryName: string;
|
|
41
41
|
logger: Logger;
|
|
42
|
-
|
|
42
|
+
metrics?: Metrics;
|
|
43
43
|
loadableManifest?: string;
|
|
44
44
|
cacheConfig?: CacheConfig;
|
|
45
45
|
staticGenerate?: boolean;
|
package/src/libs/route/index.ts
CHANGED
|
@@ -60,6 +60,10 @@ export class RouteMatchManager {
|
|
|
60
60
|
return best;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
public matchEntry(entryname: string) {
|
|
64
|
+
return this.matchers.find(matcher => matcher.matchEntry(entryname));
|
|
65
|
+
}
|
|
66
|
+
|
|
63
67
|
public getBundles() {
|
|
64
68
|
const bundles = this.specs
|
|
65
69
|
.filter(route => route.isSSR)
|
package/src/libs/route/route.ts
CHANGED
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// the url path for request match
|
|
5
|
-
urlPath: string;
|
|
6
|
-
// the default resource file to response to route
|
|
7
|
-
entryPath?: string;
|
|
8
|
-
// if route is spa page
|
|
9
|
-
isSPA?: boolean;
|
|
10
|
-
// if route is ssr page
|
|
11
|
-
isSSR?: boolean;
|
|
12
|
-
// if route is api service
|
|
13
|
-
isApi?: boolean;
|
|
14
|
-
// ssr js bundle for ssr page
|
|
15
|
-
bundle?: string;
|
|
16
|
-
// if route has modern product
|
|
17
|
-
enableModernMode?: boolean;
|
|
18
|
-
// specialHeader?: SpecialHeader[];
|
|
19
|
-
}
|
|
1
|
+
import { ServerRoute as ModernRouteInterface } from '@modern-js/types';
|
|
2
|
+
|
|
3
|
+
export type { ModernRouteInterface };
|
|
20
4
|
|
|
21
5
|
export class ModernRoute implements ModernRouteInterface {
|
|
22
6
|
public entryName: string;
|
|
@@ -36,7 +20,7 @@ export class ModernRoute implements ModernRouteInterface {
|
|
|
36
20
|
public enableModernMode?: boolean;
|
|
37
21
|
|
|
38
22
|
constructor(routeSpec: ModernRouteInterface) {
|
|
39
|
-
this.entryName = routeSpec.entryName;
|
|
23
|
+
this.entryName = routeSpec.entryName || '';
|
|
40
24
|
this.urlPath = routeSpec.urlPath;
|
|
41
25
|
this.entryPath = routeSpec.entryPath || '';
|
|
42
26
|
this.isSSR = routeSpec.isSSR || false;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
+
import type { APIServerStartInput } from '@modern-js/server-plugin';
|
|
1
2
|
import { ModernDevServer } from './dev-server';
|
|
2
|
-
import { ModernServer } from './modern-server';
|
|
3
3
|
import { mergeExtension } from '@/utils';
|
|
4
4
|
import { ModernRouteInterface } from '@/libs/route';
|
|
5
5
|
import { ApiServerMode } from '@/constants';
|
|
6
6
|
|
|
7
|
-
export class
|
|
7
|
+
export class ModernSSRDevServer extends ModernDevServer {
|
|
8
8
|
protected prepareAPIHandler(
|
|
9
9
|
_m: ApiServerMode,
|
|
10
|
-
_:
|
|
10
|
+
_: APIServerStartInput['config'],
|
|
11
11
|
) {
|
|
12
12
|
return null as any;
|
|
13
13
|
}
|
|
@@ -23,21 +23,19 @@ export class WebModernServer extends ModernServer {
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export class
|
|
27
|
-
protected prepareAPIHandler(
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
export class ModernAPIDevServer extends ModernDevServer {
|
|
27
|
+
protected async prepareAPIHandler(
|
|
28
|
+
mode: ApiServerMode,
|
|
29
|
+
extension: APIServerStartInput['config'],
|
|
30
30
|
) {
|
|
31
|
-
return
|
|
31
|
+
return super.prepareAPIHandler(mode, extension);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
protected
|
|
35
|
-
|
|
36
|
-
) {
|
|
37
|
-
return super.prepareWebHandler(extension);
|
|
34
|
+
protected filterRoutes(routes: ModernRouteInterface[]) {
|
|
35
|
+
return routes.filter(route => route.isApi);
|
|
38
36
|
}
|
|
39
37
|
|
|
40
|
-
protected
|
|
41
|
-
|
|
38
|
+
protected async preServerInit() {
|
|
39
|
+
// noop
|
|
42
40
|
}
|
|
43
41
|
}
|
|
@@ -1,27 +1,36 @@
|
|
|
1
|
-
import http, {
|
|
1
|
+
import http, {
|
|
2
|
+
Server,
|
|
3
|
+
createServer,
|
|
4
|
+
IncomingMessage,
|
|
5
|
+
ServerResponse,
|
|
6
|
+
} from 'http';
|
|
2
7
|
import path from 'path';
|
|
3
|
-
import {
|
|
8
|
+
import { createServer as createHttpsServer } from 'https';
|
|
9
|
+
import {
|
|
10
|
+
API_DIR,
|
|
11
|
+
HMR_SOCK_PATH,
|
|
12
|
+
SERVER_DIR,
|
|
13
|
+
SHARED_DIR,
|
|
14
|
+
} from '@modern-js/utils';
|
|
4
15
|
import type { MultiCompiler, Compiler } from 'webpack';
|
|
5
|
-
import webpackDevMiddleware
|
|
6
|
-
|
|
7
|
-
} from '
|
|
8
|
-
import {
|
|
9
|
-
import { createProxyHandler, ProxyOptions } from '../libs/proxy';
|
|
16
|
+
import webpackDevMiddleware from 'webpack-dev-middleware';
|
|
17
|
+
import { ModernServer } from '../modern-server';
|
|
18
|
+
import { createMockHandler } from '@/dev-tools/mock';
|
|
19
|
+
import { createProxyHandler, ProxyOptions } from '@/libs/proxy';
|
|
10
20
|
import {
|
|
11
21
|
DevServerOptions,
|
|
12
22
|
ModernServerOptions,
|
|
13
23
|
NextFunction,
|
|
14
24
|
ServerHookRunner,
|
|
15
25
|
ReadyOptions,
|
|
16
|
-
} from '
|
|
17
|
-
import SocketServer from '
|
|
18
|
-
import DevServerPlugin from '
|
|
19
|
-
import { ModernServerContext } from '
|
|
20
|
-
import { createLaunchEditorHandler } from '
|
|
21
|
-
import { enableRegister } from '
|
|
22
|
-
import * as reader from '
|
|
23
|
-
import Watcher from '
|
|
24
|
-
import { ModernServer } from './modern-server';
|
|
26
|
+
} from '@/type';
|
|
27
|
+
import SocketServer from '@/dev-tools/socket-server';
|
|
28
|
+
import DevServerPlugin from '@/dev-tools/dev-server-plugin';
|
|
29
|
+
import { ModernServerContext } from '@/libs/context';
|
|
30
|
+
import { createLaunchEditorHandler } from '@/dev-tools/launch-editor';
|
|
31
|
+
import { enableRegister } from '@/dev-tools/babel/register';
|
|
32
|
+
import * as reader from '@/libs/render/reader';
|
|
33
|
+
import Watcher from '@/dev-tools/watcher';
|
|
25
34
|
import { AGGRED_DIR } from '@/constants';
|
|
26
35
|
|
|
27
36
|
const DEFAULT_DEV_OPTIONS: DevServerOptions = {
|
|
@@ -50,15 +59,13 @@ export class ModernDevServer extends ModernServer {
|
|
|
50
59
|
|
|
51
60
|
private watcher!: Watcher;
|
|
52
61
|
|
|
53
|
-
private devMiddleware!:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
next: NextFunction,
|
|
58
|
-
) => void);
|
|
62
|
+
private devMiddleware!: webpackDevMiddleware.API<
|
|
63
|
+
http.IncomingMessage,
|
|
64
|
+
http.ServerResponse
|
|
65
|
+
>;
|
|
59
66
|
|
|
60
|
-
constructor(options: ModernServerOptions
|
|
61
|
-
super(options
|
|
67
|
+
constructor(options: ModernServerOptions) {
|
|
68
|
+
super(options);
|
|
62
69
|
|
|
63
70
|
// set webpack compiler
|
|
64
71
|
this.compiler = options.compiler!;
|
|
@@ -66,14 +73,14 @@ export class ModernDevServer extends ModernServer {
|
|
|
66
73
|
// set dev server options, like webpack-dev-server
|
|
67
74
|
this.dev =
|
|
68
75
|
typeof options.dev === 'boolean' ? DEFAULT_DEV_OPTIONS : options.dev!;
|
|
76
|
+
|
|
77
|
+
enableRegister(this.pwd, this.conf);
|
|
69
78
|
}
|
|
70
79
|
|
|
71
80
|
// Complete the preparation of services
|
|
72
|
-
public async init() {
|
|
81
|
+
public async init(runner: ServerHookRunner) {
|
|
73
82
|
const { conf, pwd, compiler } = this;
|
|
74
83
|
|
|
75
|
-
enableRegister(pwd, conf);
|
|
76
|
-
|
|
77
84
|
// mock handler
|
|
78
85
|
this.mockHandler = createMockHandler({ pwd });
|
|
79
86
|
this.addHandler((ctx: ModernServerContext, next: NextFunction) => {
|
|
@@ -110,7 +117,7 @@ export class ModernDevServer extends ModernServer {
|
|
|
110
117
|
this.addHandler(devMiddlewareHandler);
|
|
111
118
|
}
|
|
112
119
|
|
|
113
|
-
await super.init();
|
|
120
|
+
await super.init(runner);
|
|
114
121
|
|
|
115
122
|
// watch mock/ server/ api/ dir file change
|
|
116
123
|
this.startWatcher();
|
|
@@ -125,6 +132,8 @@ export class ModernDevServer extends ModernServer {
|
|
|
125
132
|
|
|
126
133
|
// reset static file
|
|
127
134
|
reader.updateFile();
|
|
135
|
+
|
|
136
|
+
this.runner.reset();
|
|
128
137
|
}
|
|
129
138
|
|
|
130
139
|
public onListening(app: Server) {
|
|
@@ -141,6 +150,24 @@ export class ModernDevServer extends ModernServer {
|
|
|
141
150
|
});
|
|
142
151
|
}
|
|
143
152
|
|
|
153
|
+
public async createHTTPServer(
|
|
154
|
+
handler: (
|
|
155
|
+
req: IncomingMessage,
|
|
156
|
+
res: ServerResponse,
|
|
157
|
+
next?: () => void,
|
|
158
|
+
) => void,
|
|
159
|
+
) {
|
|
160
|
+
const { dev } = this;
|
|
161
|
+
const devHttpsOption = typeof dev === 'object' && dev.https;
|
|
162
|
+
if (devHttpsOption) {
|
|
163
|
+
const { genHttpsOptions } = require('@/dev-tools/https');
|
|
164
|
+
const httpsOptions = await genHttpsOptions(devHttpsOption);
|
|
165
|
+
return createHttpsServer(httpsOptions, handler);
|
|
166
|
+
} else {
|
|
167
|
+
return createServer(handler);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
144
171
|
// set up plugin to each compiler
|
|
145
172
|
// register hooks for each compilation, update socket stats if recompiled
|
|
146
173
|
// start dev middleware
|
|
@@ -208,7 +235,7 @@ export class ModernDevServer extends ModernServer {
|
|
|
208
235
|
const bundles = this.router.getBundles();
|
|
209
236
|
|
|
210
237
|
bundles.forEach(bundle => {
|
|
211
|
-
const filepath = path.join(distDir, bundle
|
|
238
|
+
const filepath = path.join(distDir, bundle as string);
|
|
212
239
|
if (require.cache[filepath]) {
|
|
213
240
|
delete require.cache[filepath];
|
|
214
241
|
}
|
|
@@ -217,12 +244,12 @@ export class ModernDevServer extends ModernServer {
|
|
|
217
244
|
|
|
218
245
|
private startWatcher() {
|
|
219
246
|
const { pwd } = this;
|
|
220
|
-
const { mock
|
|
247
|
+
const { mock } = AGGRED_DIR;
|
|
221
248
|
const defaultWatched = [
|
|
222
249
|
`${pwd}/${mock}/**/*`,
|
|
223
|
-
`${pwd}/${
|
|
224
|
-
`${pwd}/${
|
|
225
|
-
`${pwd}/${
|
|
250
|
+
`${pwd}/${SERVER_DIR}/**/*`,
|
|
251
|
+
`${pwd}/${API_DIR}/!(typings)/**`,
|
|
252
|
+
`${pwd}/${SHARED_DIR}/**/*`,
|
|
226
253
|
];
|
|
227
254
|
|
|
228
255
|
const watcher = new Watcher();
|
|
@@ -233,6 +260,8 @@ export class ModernDevServer extends ModernServer {
|
|
|
233
260
|
watcher.updateDepTree();
|
|
234
261
|
watcher.cleanDepCache(filepath);
|
|
235
262
|
|
|
263
|
+
this.runner.reset();
|
|
264
|
+
|
|
236
265
|
if (filepath.startsWith(`${pwd}/${mock}`)) {
|
|
237
266
|
this.mockHandler = createMockHandler({ pwd });
|
|
238
267
|
} else {
|