@modern-js/server 1.2.1 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/dist/js/modern/dev-tools/mock/index.js +1 -1
- package/dist/js/modern/dev-tools/watcher/index.js +3 -5
- package/dist/js/modern/libs/render/cache/index.js +1 -1
- package/dist/js/modern/libs/render/index.js +1 -1
- package/dist/js/modern/libs/render/modern/index.js +3 -1
- package/dist/js/modern/server/dev-server/dev-server.js +15 -5
- package/dist/js/modern/server/index.js +2 -2
- package/dist/js/modern/server/modern-server.js +3 -2
- package/dist/js/modern/utils.js +23 -0
- package/dist/js/node/dev-tools/mock/index.js +2 -2
- package/dist/js/node/dev-tools/watcher/index.js +3 -5
- package/dist/js/node/libs/render/cache/index.js +2 -2
- package/dist/js/node/libs/render/index.js +2 -2
- package/dist/js/node/libs/render/modern/index.js +3 -3
- package/dist/js/node/server/dev-server/dev-server.js +17 -5
- package/dist/js/node/server/index.js +3 -3
- package/dist/js/node/server/modern-server.js +4 -3
- package/dist/js/node/utils.js +28 -2
- package/dist/types/dev-tools/watcher/index.d.ts +2 -1
- package/dist/types/libs/metrics.d.ts +1 -1
- package/dist/types/libs/render/index.d.ts +1 -2
- package/dist/types/libs/render/ssr.d.ts +1 -2
- package/dist/types/server/dev-server/dev-server-split.d.ts +3 -3
- package/dist/types/server/dev-server/dev-server.d.ts +1 -1
- package/dist/types/server/index.d.ts +1 -1
- package/dist/types/server/modern-server-split.d.ts +4 -4
- package/dist/types/server/modern-server.d.ts +10 -7
- package/dist/types/type.d.ts +1 -1
- package/dist/types/utils.d.ts +10 -1
- package/jest.config.js +9 -0
- package/package.json +21 -15
- package/src/dev-tools/mock/index.ts +1 -1
- package/src/dev-tools/socket-server.ts +1 -1
- package/src/dev-tools/watcher/index.ts +8 -6
- package/src/libs/metrics.ts +1 -1
- package/src/libs/render/cache/index.ts +1 -1
- package/src/libs/render/index.ts +2 -3
- package/src/libs/render/modern/index.ts +2 -1
- package/src/libs/render/ssr.ts +1 -2
- package/src/server/dev-server/dev-server-split.ts +3 -3
- package/src/server/dev-server/dev-server.ts +50 -34
- package/src/server/index.ts +3 -3
- package/src/server/modern-server-split.ts +4 -4
- package/src/server/modern-server.ts +23 -14
- package/src/type.ts +1 -1
- package/src/utils.ts +28 -0
- package/tests/dev.test.ts +44 -0
- package/tests/fixtures/pure/tsconfig.json +0 -1
- package/tests/middleware.test.ts +12 -11
- package/tests/server.test.ts +32 -1
- package/tests/tsconfig.json +1 -3
- package/tests/utils.test.ts +31 -0
- package/tests/watcher.test.ts +98 -0
- package/tsconfig.json +1 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
# @modern-js/server
|
|
2
2
|
|
|
3
|
+
## 1.3.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- e2d3a575: fix extending core config interface
|
|
8
|
+
- 823809c6: fix: hot reload not working on windows
|
|
9
|
+
- e2d3a575: fix extending core config interface
|
|
10
|
+
- Updated dependencies [823809c6]
|
|
11
|
+
- Updated dependencies [4584cc04]
|
|
12
|
+
- Updated dependencies [7c19fd94]
|
|
13
|
+
- @modern-js/bff-utils@1.2.1
|
|
14
|
+
- @modern-js/utils@1.2.1
|
|
15
|
+
- @modern-js/core@1.3.1
|
|
16
|
+
|
|
17
|
+
## 1.3.0
|
|
18
|
+
|
|
19
|
+
### Minor Changes
|
|
20
|
+
|
|
21
|
+
- cfe11628: Make Modern.js self bootstraping
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- 146dcd85: modify server framework plugin hook types and hook context
|
|
26
|
+
- c3d46ee4: fix: test config invalid
|
|
27
|
+
- 146dcd85: modify server framework plugin hook types
|
|
28
|
+
- 146dcd85: fix test case in babel compiler
|
|
29
|
+
- 1ebc7ee2: fix: @babel/core version
|
|
30
|
+
- Updated dependencies [2da09c69]
|
|
31
|
+
- Updated dependencies [fc71e36f]
|
|
32
|
+
- Updated dependencies [146dcd85]
|
|
33
|
+
- Updated dependencies [74ce3bb7]
|
|
34
|
+
- Updated dependencies [c3d46ee4]
|
|
35
|
+
- Updated dependencies [cfe11628]
|
|
36
|
+
- Updated dependencies [146dcd85]
|
|
37
|
+
- Updated dependencies [8e7603ee]
|
|
38
|
+
- Updated dependencies [146dcd85]
|
|
39
|
+
- Updated dependencies [1ebc7ee2]
|
|
40
|
+
- @modern-js/utils@1.2.0
|
|
41
|
+
- @modern-js/core@1.3.0
|
|
42
|
+
- @modern-js/server-utils@1.2.0
|
|
43
|
+
- @modern-js/hmr-client@1.2.0
|
|
44
|
+
- @modern-js/bff-utils@1.2.0
|
|
45
|
+
- @modern-js/server-plugin@1.2.0
|
|
46
|
+
|
|
3
47
|
## 1.2.1
|
|
4
48
|
|
|
5
49
|
### Patch Changes
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import { fs } from '@modern-js/utils';
|
|
3
3
|
import { match } from 'path-to-regexp';
|
|
4
|
-
import getMockData from "./getMockData";
|
|
5
4
|
import { AGGRED_DIR } from "../../constants";
|
|
5
|
+
import getMockData from "./getMockData";
|
|
6
6
|
|
|
7
7
|
const getMatched = (context, mockApiList) => {
|
|
8
8
|
const {
|
|
@@ -19,13 +19,11 @@ export default class Watcher {
|
|
|
19
19
|
this.watcher = void 0;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
listen(files, callback) {
|
|
22
|
+
listen(files, options, callback) {
|
|
23
23
|
const watched = files.filter(Boolean);
|
|
24
|
+
const filenames = watched.map(filename => filename.replace(/\\/g, '/'));
|
|
24
25
|
const cache = new StatsCache();
|
|
25
|
-
const watcher = chokidar.watch(
|
|
26
|
-
// 初始化的时候不触发 add、addDir 事件
|
|
27
|
-
ignoreInitial: true
|
|
28
|
-
});
|
|
26
|
+
const watcher = chokidar.watch(filenames, options);
|
|
29
27
|
watcher.on('ready', () => {
|
|
30
28
|
cache.add(getWatchedFiles(watcher));
|
|
31
29
|
});
|
|
@@ -4,9 +4,9 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
4
4
|
|
|
5
5
|
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; }
|
|
6
6
|
|
|
7
|
+
import { ERROR_DIGEST } from "../../../constants";
|
|
7
8
|
import { createCache } from "./spr";
|
|
8
9
|
import { namespaceHash, withCoalescedInvoke } from "./util";
|
|
9
|
-
import { ERROR_DIGEST } from "../../../constants";
|
|
10
10
|
export default ((renderFn, ctx) => {
|
|
11
11
|
const sprCache = createCache();
|
|
12
12
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import { fs } from '@modern-js/utils';
|
|
3
3
|
import mime from 'mime-types';
|
|
4
|
+
import { ERROR_DIGEST } from "../../constants";
|
|
4
5
|
import { handleDirectory } from "./static";
|
|
5
6
|
import { readFile } from "./reader";
|
|
6
7
|
import * as ssr from "./ssr";
|
|
7
8
|
import { supportModern, getModernEntry } from "./modern";
|
|
8
|
-
import { ERROR_DIGEST } from "../../constants";
|
|
9
9
|
export const createRenderHandler = ({
|
|
10
10
|
distDir,
|
|
11
11
|
staticGenerate
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import Parser from 'ua-parser-js';
|
|
2
|
-
import nativeModules from '@babel/compat-data/native-modules';
|
|
3
2
|
import compareVersions from 'compare-versions';
|
|
4
3
|
import { NativeModuleNameMap } from "./browser-list";
|
|
4
|
+
|
|
5
|
+
const nativeModules = require('@babel/compat-data/native-modules');
|
|
6
|
+
|
|
5
7
|
export const supportModern = context => {
|
|
6
8
|
if (context.query.modern_es6) {
|
|
7
9
|
return true;
|
|
@@ -121,9 +121,13 @@ export class ModernDevServer extends ModernServer {
|
|
|
121
121
|
super.close();
|
|
122
122
|
await this.watcher.close();
|
|
123
123
|
await new Promise(resolve => {
|
|
124
|
-
this.devMiddleware
|
|
124
|
+
if (this.devMiddleware) {
|
|
125
|
+
this.devMiddleware.close(() => {
|
|
126
|
+
resolve();
|
|
127
|
+
});
|
|
128
|
+
} else {
|
|
125
129
|
resolve();
|
|
126
|
-
}
|
|
130
|
+
}
|
|
127
131
|
});
|
|
128
132
|
}
|
|
129
133
|
|
|
@@ -239,16 +243,22 @@ export class ModernDevServer extends ModernServer {
|
|
|
239
243
|
const {
|
|
240
244
|
mock
|
|
241
245
|
} = AGGRED_DIR;
|
|
242
|
-
const defaultWatched = [`${
|
|
246
|
+
const defaultWatched = [`${mock}/**/*`, `${SERVER_DIR}/**/*`, `${API_DIR}/**`, `${SHARED_DIR}/**/*`];
|
|
247
|
+
const defaultWatchedPaths = defaultWatched.map(p => path.normalize(path.join(pwd, p)));
|
|
248
|
+
const mockPath = path.normalize(path.join(pwd, mock));
|
|
243
249
|
const watcher = new Watcher();
|
|
244
250
|
watcher.createDepTree(); // 监听文件变动,如果有变动则给 client,也就是 start 启动的插件发消息
|
|
245
251
|
|
|
246
|
-
watcher.listen(
|
|
252
|
+
watcher.listen(defaultWatchedPaths, {
|
|
253
|
+
// 初始化的时候不触发 add、addDir 事件
|
|
254
|
+
ignoreInitial: true,
|
|
255
|
+
ignored: /api\/typings\/.*/
|
|
256
|
+
}, filepath => {
|
|
247
257
|
watcher.updateDepTree();
|
|
248
258
|
watcher.cleanDepCache(filepath);
|
|
249
259
|
this.runner.reset();
|
|
250
260
|
|
|
251
|
-
if (filepath.startsWith(
|
|
261
|
+
if (filepath.startsWith(mockPath)) {
|
|
252
262
|
this.mockHandler = createMockHandler({
|
|
253
263
|
pwd
|
|
254
264
|
});
|
|
@@ -8,9 +8,9 @@ import path from 'path';
|
|
|
8
8
|
import { serverManager } from '@modern-js/server-plugin';
|
|
9
9
|
import { logger as defaultLogger } from '@modern-js/utils';
|
|
10
10
|
import { AppContext, initAppContext, initAppDir, loadUserConfig, ConfigContext } from '@modern-js/core';
|
|
11
|
+
import { metrics as defaultMetrics } from "../libs/metrics";
|
|
11
12
|
import { ModernServer } from "./modern-server";
|
|
12
13
|
import { ModernAPIServer, ModernSSRServer, ModernWebServer } from "./modern-server-split";
|
|
13
|
-
import { metrics as defaultMetrics } from "../libs/metrics";
|
|
14
14
|
export class Server {
|
|
15
15
|
constructor(options) {
|
|
16
16
|
this.options = void 0;
|
|
@@ -53,7 +53,7 @@ export class Server {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
listen(port = 8080, listener) {
|
|
56
|
-
this.app.listen(port, () => {
|
|
56
|
+
this.app.listen(process.env.PORT || port, () => {
|
|
57
57
|
if (listener) {
|
|
58
58
|
listener();
|
|
59
59
|
}
|
|
@@ -15,13 +15,13 @@ import { createServer } from 'http';
|
|
|
15
15
|
import util from 'util';
|
|
16
16
|
import path from 'path';
|
|
17
17
|
import { fs, ROUTE_SPEC_FILE } from '@modern-js/utils';
|
|
18
|
-
import { createMiddlewareCollecter } from '@modern-js/server-utils';
|
|
19
18
|
import mime from 'mime-types';
|
|
20
19
|
import axios from 'axios';
|
|
20
|
+
import clone from 'lodash.clone';
|
|
21
21
|
import { RouteMatchManager } from "../libs/route";
|
|
22
22
|
import { createRenderHandler } from "../libs/render";
|
|
23
23
|
import { createStaticFileHandler } from "../libs/serve-file";
|
|
24
|
-
import { createErrorDocument, mergeExtension, noop } from "../utils";
|
|
24
|
+
import { createErrorDocument, createMiddlewareCollecter, mergeExtension, noop } from "../utils";
|
|
25
25
|
import * as reader from "../libs/render/reader";
|
|
26
26
|
import { createProxyHandler } from "../libs/proxy";
|
|
27
27
|
import { createContext } from "../libs/context";
|
|
@@ -273,6 +273,7 @@ export class ModernServer {
|
|
|
273
273
|
}
|
|
274
274
|
|
|
275
275
|
async emitRouteHook(eventName, input) {
|
|
276
|
+
input.context = clone(input.context);
|
|
276
277
|
return this.runner[eventName](input, {
|
|
277
278
|
onLast: noop
|
|
278
279
|
});
|
package/dist/js/modern/utils.js
CHANGED
|
@@ -47,4 +47,27 @@ export const createErrorDocument = (status, text) => {
|
|
|
47
47
|
</body>
|
|
48
48
|
</html>
|
|
49
49
|
`;
|
|
50
|
+
};
|
|
51
|
+
export const createMiddlewareCollecter = () => {
|
|
52
|
+
const webMiddlewares = [];
|
|
53
|
+
const apiMiddlewares = [];
|
|
54
|
+
|
|
55
|
+
const addWebMiddleware = input => {
|
|
56
|
+
webMiddlewares.push(input);
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const addAPIMiddleware = input => {
|
|
60
|
+
apiMiddlewares.push(input);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const getMiddlewares = () => ({
|
|
64
|
+
web: webMiddlewares,
|
|
65
|
+
api: apiMiddlewares
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
return {
|
|
69
|
+
getMiddlewares,
|
|
70
|
+
addWebMiddleware,
|
|
71
|
+
addAPIMiddleware
|
|
72
|
+
};
|
|
50
73
|
};
|
|
@@ -11,10 +11,10 @@ var _utils = require("@modern-js/utils");
|
|
|
11
11
|
|
|
12
12
|
var _pathToRegexp = require("path-to-regexp");
|
|
13
13
|
|
|
14
|
-
var _getMockData = _interopRequireDefault(require("./getMockData"));
|
|
15
|
-
|
|
16
14
|
var _constants = require("../../constants");
|
|
17
15
|
|
|
16
|
+
var _getMockData = _interopRequireDefault(require("./getMockData"));
|
|
17
|
+
|
|
18
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
19
|
|
|
20
20
|
const getMatched = (context, mockApiList) => {
|
|
@@ -30,14 +30,12 @@ class Watcher {
|
|
|
30
30
|
this.watcher = void 0;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
listen(files, callback) {
|
|
33
|
+
listen(files, options, callback) {
|
|
34
34
|
const watched = files.filter(Boolean);
|
|
35
|
+
const filenames = watched.map(filename => filename.replace(/\\/g, '/'));
|
|
35
36
|
const cache = new _statsCache.StatsCache();
|
|
36
37
|
|
|
37
|
-
const watcher = _chokidar.default.watch(
|
|
38
|
-
// 初始化的时候不触发 add、addDir 事件
|
|
39
|
-
ignoreInitial: true
|
|
40
|
-
});
|
|
38
|
+
const watcher = _chokidar.default.watch(filenames, options);
|
|
41
39
|
|
|
42
40
|
watcher.on('ready', () => {
|
|
43
41
|
cache.add(getWatchedFiles(watcher));
|
|
@@ -5,12 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
+
var _constants = require("../../../constants");
|
|
9
|
+
|
|
8
10
|
var _spr = require("./spr");
|
|
9
11
|
|
|
10
12
|
var _util = require("./util");
|
|
11
13
|
|
|
12
|
-
var _constants = require("../../../constants");
|
|
13
|
-
|
|
14
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
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; }
|
|
@@ -11,6 +11,8 @@ var _utils = require("@modern-js/utils");
|
|
|
11
11
|
|
|
12
12
|
var _mimeTypes = _interopRequireDefault(require("mime-types"));
|
|
13
13
|
|
|
14
|
+
var _constants = require("../../constants");
|
|
15
|
+
|
|
14
16
|
var _static = require("./static");
|
|
15
17
|
|
|
16
18
|
var _reader = require("./reader");
|
|
@@ -19,8 +21,6 @@ var ssr = _interopRequireWildcard(require("./ssr"));
|
|
|
19
21
|
|
|
20
22
|
var _modern = require("./modern");
|
|
21
23
|
|
|
22
|
-
var _constants = require("../../constants");
|
|
23
|
-
|
|
24
24
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
25
25
|
|
|
26
26
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -7,14 +7,14 @@ exports.supportModern = exports.getModernEntry = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _uaParserJs = _interopRequireDefault(require("ua-parser-js"));
|
|
9
9
|
|
|
10
|
-
var _nativeModules = _interopRequireDefault(require("@babel/compat-data/native-modules"));
|
|
11
|
-
|
|
12
10
|
var _compareVersions = _interopRequireDefault(require("compare-versions"));
|
|
13
11
|
|
|
14
12
|
var _browserList = require("./browser-list");
|
|
15
13
|
|
|
16
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
15
|
|
|
16
|
+
const nativeModules = require('@babel/compat-data/native-modules');
|
|
17
|
+
|
|
18
18
|
const supportModern = context => {
|
|
19
19
|
if (context.query.modern_es6) {
|
|
20
20
|
return true;
|
|
@@ -41,7 +41,7 @@ const supportModern = context => {
|
|
|
41
41
|
return false;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
const version =
|
|
44
|
+
const version = nativeModules['es6.module'][nativeUAName];
|
|
45
45
|
|
|
46
46
|
if (!version) {
|
|
47
47
|
return false;
|
|
@@ -150,9 +150,13 @@ class ModernDevServer extends _modernServer.ModernServer {
|
|
|
150
150
|
super.close();
|
|
151
151
|
await this.watcher.close();
|
|
152
152
|
await new Promise(resolve => {
|
|
153
|
-
this.devMiddleware
|
|
153
|
+
if (this.devMiddleware) {
|
|
154
|
+
this.devMiddleware.close(() => {
|
|
155
|
+
resolve();
|
|
156
|
+
});
|
|
157
|
+
} else {
|
|
154
158
|
resolve();
|
|
155
|
-
}
|
|
159
|
+
}
|
|
156
160
|
});
|
|
157
161
|
}
|
|
158
162
|
|
|
@@ -268,16 +272,24 @@ class ModernDevServer extends _modernServer.ModernServer {
|
|
|
268
272
|
const {
|
|
269
273
|
mock
|
|
270
274
|
} = _constants.AGGRED_DIR;
|
|
271
|
-
const defaultWatched = [`${
|
|
275
|
+
const defaultWatched = [`${mock}/**/*`, `${_utils.SERVER_DIR}/**/*`, `${_utils.API_DIR}/**`, `${_utils.SHARED_DIR}/**/*`];
|
|
276
|
+
const defaultWatchedPaths = defaultWatched.map(p => _path.default.normalize(_path.default.join(pwd, p)));
|
|
277
|
+
|
|
278
|
+
const mockPath = _path.default.normalize(_path.default.join(pwd, mock));
|
|
279
|
+
|
|
272
280
|
const watcher = new _watcher.default();
|
|
273
281
|
watcher.createDepTree(); // 监听文件变动,如果有变动则给 client,也就是 start 启动的插件发消息
|
|
274
282
|
|
|
275
|
-
watcher.listen(
|
|
283
|
+
watcher.listen(defaultWatchedPaths, {
|
|
284
|
+
// 初始化的时候不触发 add、addDir 事件
|
|
285
|
+
ignoreInitial: true,
|
|
286
|
+
ignored: /api\/typings\/.*/
|
|
287
|
+
}, filepath => {
|
|
276
288
|
watcher.updateDepTree();
|
|
277
289
|
watcher.cleanDepCache(filepath);
|
|
278
290
|
this.runner.reset();
|
|
279
291
|
|
|
280
|
-
if (filepath.startsWith(
|
|
292
|
+
if (filepath.startsWith(mockPath)) {
|
|
281
293
|
this.mockHandler = (0, _mock.createMockHandler)({
|
|
282
294
|
pwd
|
|
283
295
|
});
|
|
@@ -13,12 +13,12 @@ var _utils = require("@modern-js/utils");
|
|
|
13
13
|
|
|
14
14
|
var _core = require("@modern-js/core");
|
|
15
15
|
|
|
16
|
+
var _metrics = require("../libs/metrics");
|
|
17
|
+
|
|
16
18
|
var _modernServer = require("./modern-server");
|
|
17
19
|
|
|
18
20
|
var _modernServerSplit = require("./modern-server-split");
|
|
19
21
|
|
|
20
|
-
var _metrics = require("../libs/metrics");
|
|
21
|
-
|
|
22
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
23
|
|
|
24
24
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
@@ -69,7 +69,7 @@ class Server {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
listen(port = 8080, listener) {
|
|
72
|
-
this.app.listen(port, () => {
|
|
72
|
+
this.app.listen(process.env.PORT || port, () => {
|
|
73
73
|
if (listener) {
|
|
74
74
|
listener();
|
|
75
75
|
}
|
|
@@ -13,12 +13,12 @@ var _path = _interopRequireDefault(require("path"));
|
|
|
13
13
|
|
|
14
14
|
var _utils = require("@modern-js/utils");
|
|
15
15
|
|
|
16
|
-
var _serverUtils = require("@modern-js/server-utils");
|
|
17
|
-
|
|
18
16
|
var _mimeTypes = _interopRequireDefault(require("mime-types"));
|
|
19
17
|
|
|
20
18
|
var _axios = _interopRequireDefault(require("axios"));
|
|
21
19
|
|
|
20
|
+
var _lodash = _interopRequireDefault(require("lodash.clone"));
|
|
21
|
+
|
|
22
22
|
var _route = require("../libs/route");
|
|
23
23
|
|
|
24
24
|
var _render = require("../libs/render");
|
|
@@ -232,7 +232,7 @@ class ModernServer {
|
|
|
232
232
|
runner
|
|
233
233
|
} = this; // server hook, gather plugin inject
|
|
234
234
|
|
|
235
|
-
const _createMiddlewareColl = (0,
|
|
235
|
+
const _createMiddlewareColl = (0, _utils2.createMiddlewareCollecter)(),
|
|
236
236
|
{
|
|
237
237
|
getMiddlewares
|
|
238
238
|
} = _createMiddlewareColl,
|
|
@@ -307,6 +307,7 @@ class ModernServer {
|
|
|
307
307
|
}
|
|
308
308
|
|
|
309
309
|
async emitRouteHook(eventName, input) {
|
|
310
|
+
input.context = (0, _lodash.default)(input.context);
|
|
310
311
|
return this.runner[eventName](input, {
|
|
311
312
|
onLast: _utils2.noop
|
|
312
313
|
});
|
package/dist/js/node/utils.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.toMessage = exports.noop = exports.mergeExtension = exports.createErrorDocument = void 0;
|
|
6
|
+
exports.toMessage = exports.noop = exports.mergeExtension = exports.createMiddlewareCollecter = exports.createErrorDocument = void 0;
|
|
7
7
|
|
|
8
8
|
const mergeExtension = users => {
|
|
9
9
|
const output = [];
|
|
@@ -65,4 +65,30 @@ const createErrorDocument = (status, text) => {
|
|
|
65
65
|
`;
|
|
66
66
|
};
|
|
67
67
|
|
|
68
|
-
exports.createErrorDocument = createErrorDocument;
|
|
68
|
+
exports.createErrorDocument = createErrorDocument;
|
|
69
|
+
|
|
70
|
+
const createMiddlewareCollecter = () => {
|
|
71
|
+
const webMiddlewares = [];
|
|
72
|
+
const apiMiddlewares = [];
|
|
73
|
+
|
|
74
|
+
const addWebMiddleware = input => {
|
|
75
|
+
webMiddlewares.push(input);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const addAPIMiddleware = input => {
|
|
79
|
+
apiMiddlewares.push(input);
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const getMiddlewares = () => ({
|
|
83
|
+
web: webMiddlewares,
|
|
84
|
+
api: apiMiddlewares
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
return {
|
|
88
|
+
getMiddlewares,
|
|
89
|
+
addWebMiddleware,
|
|
90
|
+
addAPIMiddleware
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
exports.createMiddlewareCollecter = createMiddlewareCollecter;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { WatchOptions } from 'chokidar';
|
|
1
2
|
export default class Watcher {
|
|
2
3
|
private dependencyTree;
|
|
3
4
|
private watcher;
|
|
4
|
-
listen(files: string[], callback: (changed: string) => void): void;
|
|
5
|
+
listen(files: string[], options: WatchOptions, callback: (changed: string) => void): void;
|
|
5
6
|
createDepTree(): void;
|
|
6
7
|
updateDepTree(): void;
|
|
7
8
|
cleanDepCache(filepath: string): void;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { RenderResult } from '../../type';
|
|
1
|
+
import { RenderResult, ServerHookRunner } from '../../type';
|
|
2
2
|
import { ModernRoute } from '../route';
|
|
3
3
|
import { ModernServerContext } from '../context';
|
|
4
|
-
import { ServerHookRunner } from "../../type.d";
|
|
5
4
|
export declare const createRenderHandler: ({
|
|
6
5
|
distDir,
|
|
7
6
|
staticGenerate
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ModernServerContext } from '../context';
|
|
2
|
-
import { RenderResult } from '../../type';
|
|
3
|
-
import { ServerHookRunner } from "../../type.d";
|
|
2
|
+
import { RenderResult, ServerHookRunner } from '../../type';
|
|
4
3
|
export declare const render: (ctx: ModernServerContext, renderOptions: {
|
|
5
4
|
distDir: string;
|
|
6
5
|
bundle: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { APIServerStartInput } from '@modern-js/server-plugin';
|
|
2
|
+
import { mergeExtension } from '../../utils';
|
|
3
|
+
import { ModernRouteInterface } from '../../libs/route';
|
|
4
|
+
import { ApiServerMode } from '../../constants';
|
|
2
5
|
import { ModernDevServer } from './dev-server';
|
|
3
|
-
import { mergeExtension } from "../../utils.d";
|
|
4
|
-
import { ModernRouteInterface } from "../../libs/route";
|
|
5
|
-
import { ApiServerMode } from "../../constants.d";
|
|
6
6
|
export declare class ModernSSRDevServer extends ModernDevServer {
|
|
7
7
|
protected prepareAPIHandler(_m: ApiServerMode, _: APIServerStartInput['config']): any;
|
|
8
8
|
protected prepareWebHandler(extension: ReturnType<typeof mergeExtension>): Promise<import("@modern-js/server-plugin").Adapter>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import http, { Server, IncomingMessage, ServerResponse } from 'http';
|
|
3
3
|
import { ModernServer } from '../modern-server';
|
|
4
|
-
import { ModernServerOptions, ServerHookRunner, ReadyOptions } from
|
|
4
|
+
import { ModernServerOptions, ServerHookRunner, ReadyOptions } from '../../type';
|
|
5
5
|
export declare class ModernDevServer extends ModernServer {
|
|
6
6
|
private devProxyHandler;
|
|
7
7
|
private mockHandler;
|
|
@@ -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';
|
|
4
4
|
export declare class Server {
|
|
5
5
|
options: ModernServerOptions;
|
|
6
6
|
private server;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { APIServerStartInput } from '@modern-js/server-plugin';
|
|
2
|
+
import { mergeExtension } from '../utils';
|
|
3
|
+
import { ModernRoute, ModernRouteInterface, RouteMatcher } from '../libs/route';
|
|
4
|
+
import { ApiServerMode } from '../constants';
|
|
5
|
+
import { ModernServerContext } from '../libs/context';
|
|
2
6
|
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
7
|
export declare class ModernSSRServer extends ModernServer {
|
|
8
8
|
protected warmupSSRBundle(): Promise<void>;
|
|
9
9
|
protected verifyMatch(context: ModernServerContext, matched: RouteMatcher): void;
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import { IncomingMessage, ServerResponse, Server } from 'http';
|
|
3
3
|
import { Adapter, APIServerStartInput } from '@modern-js/server-plugin';
|
|
4
4
|
import type { NormalizedConfig } from '@modern-js/core';
|
|
5
|
-
import { ModernServerOptions, NextFunction, ServerHookRunner, Metrics, Logger, ReadyOptions } from
|
|
6
|
-
import { RouteMatchManager, ModernRouteInterface, ModernRoute, RouteMatcher } from
|
|
7
|
-
import { mergeExtension } from
|
|
8
|
-
import { ModernServerContext } from
|
|
9
|
-
import { ApiServerMode } from
|
|
5
|
+
import { ModernServerOptions, NextFunction, ServerHookRunner, Metrics, Logger, ReadyOptions } from '../type';
|
|
6
|
+
import { RouteMatchManager, ModernRouteInterface, ModernRoute, RouteMatcher } from '../libs/route';
|
|
7
|
+
import { mergeExtension } from '../utils';
|
|
8
|
+
import { ModernServerContext } from '../libs/context';
|
|
9
|
+
import { ApiServerMode } from '../constants';
|
|
10
10
|
declare type ModernServerHandler = (context: ModernServerContext, next: NextFunction) => Promise<void> | void;
|
|
11
11
|
declare type ModernServerAsyncHandler = (context: ModernServerContext, next: NextFunction) => Promise<void>;
|
|
12
12
|
export declare class ModernServer {
|
|
@@ -53,11 +53,14 @@ export declare class ModernServer {
|
|
|
53
53
|
protected prepareWebHandler(extension: ReturnType<typeof mergeExtension>): Promise<Adapter>;
|
|
54
54
|
protected prepareAPIHandler(mode: ApiServerMode, extension: APIServerStartInput['config']): Promise<Adapter>;
|
|
55
55
|
protected filterRoutes(routes: ModernRouteInterface[]): ModernRouteInterface[];
|
|
56
|
-
protected emitRouteHook(eventName: 'beforeMatch' | 'afterMatch' | 'beforeRender' | 'afterRender', input:
|
|
56
|
+
protected emitRouteHook(eventName: 'beforeMatch' | 'afterMatch' | 'beforeRender' | 'afterRender', input: {
|
|
57
|
+
context: ModernServerContext;
|
|
58
|
+
[propsName: string]: any;
|
|
59
|
+
}): Promise<any>;
|
|
57
60
|
protected warmupSSRBundle(): void;
|
|
58
61
|
protected preServerInit(): Promise<void>;
|
|
59
62
|
protected handleAPI(context: ModernServerContext): Promise<void>;
|
|
60
|
-
protected handleWeb(context: ModernServerContext, route: ModernRoute): Promise<import("
|
|
63
|
+
protected handleWeb(context: ModernServerContext, route: ModernRoute): Promise<import("../type").RenderResult | null>;
|
|
61
64
|
protected verifyMatch(_c: ModernServerContext, _m: RouteMatcher): void;
|
|
62
65
|
private routeHandler;
|
|
63
66
|
private injectMicroFE;
|
package/dist/types/type.d.ts
CHANGED
package/dist/types/utils.d.ts
CHANGED
|
@@ -3,4 +3,13 @@ export declare const mergeExtension: (users: 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 type CollectMiddlewaresResult = {
|
|
8
|
+
web: any[];
|
|
9
|
+
api: any[];
|
|
10
|
+
};
|
|
11
|
+
export declare const createMiddlewareCollecter: () => {
|
|
12
|
+
getMiddlewares: () => CollectMiddlewaresResult;
|
|
13
|
+
addWebMiddleware: (input: any) => void;
|
|
14
|
+
addAPIMiddleware: (input: any) => void;
|
|
15
|
+
};
|
package/jest.config.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const sharedConfig = require('@scripts/jest-config');
|
|
2
|
+
|
|
3
|
+
/** @type {import('@jest/types').Config.InitialOptions} */
|
|
4
|
+
module.exports = {
|
|
5
|
+
// eslint-disable-next-line node/no-unsupported-features/es-syntax
|
|
6
|
+
...sharedConfig,
|
|
7
|
+
testEnvironment: 'node',
|
|
8
|
+
rootDir: __dirname,
|
|
9
|
+
};
|