@modern-js/server 2.56.0 → 2.56.2
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/cjs/createDevServer.js +10 -2
- package/dist/cjs/dev.js +44 -11
- package/dist/cjs/helpers/index.js +2 -5
- package/dist/cjs/helpers/mock.js +63 -41
- package/dist/esm/createDevServer.js +15 -6
- package/dist/esm/dev.js +66 -16
- package/dist/esm/helpers/index.js +3 -6
- package/dist/esm/helpers/mock.js +142 -79
- package/dist/esm-node/createDevServer.js +10 -2
- package/dist/esm-node/dev.js +45 -12
- package/dist/esm-node/helpers/index.js +3 -6
- package/dist/esm-node/helpers/mock.js +60 -40
- package/dist/types/createDevServer.d.ts +5 -4
- package/dist/types/helpers/devOptions.d.ts +2 -1
- package/dist/types/helpers/mock.d.ts +17 -5
- package/dist/types/index.d.ts +1 -1
- package/dist/types/types.d.ts +6 -40
- package/package.json +9 -9
|
@@ -36,7 +36,7 @@ var import_server_core = require("@modern-js/server-core");
|
|
|
36
36
|
var import_node = require("@modern-js/server-core/node");
|
|
37
37
|
var import_helpers = require("./helpers");
|
|
38
38
|
var import_dev = require("./dev");
|
|
39
|
-
|
|
39
|
+
async function createDevServer(options, applyPlugins) {
|
|
40
40
|
const { config, pwd, serverConfigFile, serverConfigPath } = options;
|
|
41
41
|
const dev = (0, import_helpers.getDevOptions)(options);
|
|
42
42
|
const distDir = import_node_path.default.resolve(pwd, config.output.path || "dist");
|
|
@@ -63,8 +63,16 @@ const createDevServer = async (options, applyPlugins) => {
|
|
|
63
63
|
]);
|
|
64
64
|
await applyPlugins(server, prodServerOptions, nodeServer);
|
|
65
65
|
await server.init();
|
|
66
|
+
nodeServer.listen({
|
|
67
|
+
host: dev.host || "127.0.0.1",
|
|
68
|
+
port: dev.port || "8080"
|
|
69
|
+
}, (err) => {
|
|
70
|
+
if (err) {
|
|
71
|
+
throw err;
|
|
72
|
+
}
|
|
73
|
+
});
|
|
66
74
|
return nodeServer;
|
|
67
|
-
}
|
|
75
|
+
}
|
|
68
76
|
// Annotate the CommonJS export names for ESM import in node:
|
|
69
77
|
0 && (module.exports = {
|
|
70
78
|
createDevServer
|
package/dist/cjs/dev.js
CHANGED
|
@@ -27,17 +27,21 @@ var import_helpers = require("./helpers");
|
|
|
27
27
|
const devPlugin = (options) => ({
|
|
28
28
|
name: "@modern-js/plugin-dev",
|
|
29
29
|
setup(api) {
|
|
30
|
-
const {
|
|
30
|
+
const { config, pwd, builder } = options;
|
|
31
31
|
const closeCb = [];
|
|
32
|
-
const { middlewares: rsbuildMiddlewares, close, onHTTPUpgrade } = (getMiddlewares === null || getMiddlewares === void 0 ? void 0 : getMiddlewares()) || {};
|
|
33
|
-
close && closeCb.push(close);
|
|
34
32
|
const dev = (0, import_helpers.getDevOptions)(options);
|
|
35
33
|
return {
|
|
36
34
|
async prepare() {
|
|
35
|
+
var _dev_after, _dev_before;
|
|
36
|
+
const builderDevServer = await (builder === null || builder === void 0 ? void 0 : builder.createDevServer({
|
|
37
|
+
runCompile: options.runCompile
|
|
38
|
+
}));
|
|
39
|
+
const { middlewares: builderMiddlewares, close, onHTTPUpgrade } = builderDevServer || {};
|
|
40
|
+
close && closeCb.push(close);
|
|
37
41
|
const { middlewares, distDirectory, nodeServer, apiDirectory, sharedDirectory, serverBase } = api.useAppContext();
|
|
38
42
|
onHTTPUpgrade && (nodeServer === null || nodeServer === void 0 ? void 0 : nodeServer.on("upgrade", onHTTPUpgrade));
|
|
39
43
|
const runner = api.useHookRunners();
|
|
40
|
-
|
|
44
|
+
builder === null || builder === void 0 ? void 0 : builder.onDevCompileDone(({ stats }) => {
|
|
41
45
|
if (stats.toJson({
|
|
42
46
|
all: false
|
|
43
47
|
}).name !== "server") {
|
|
@@ -61,16 +65,45 @@ const devPlugin = (options) => ({
|
|
|
61
65
|
cb();
|
|
62
66
|
});
|
|
63
67
|
}));
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
68
|
+
const before = [];
|
|
69
|
+
const after = [];
|
|
70
|
+
const { setupMiddlewares = [] } = dev;
|
|
71
|
+
if (((_dev_after = dev.after) === null || _dev_after === void 0 ? void 0 : _dev_after.length) || ((_dev_before = dev.before) === null || _dev_before === void 0 ? void 0 : _dev_before.length)) {
|
|
72
|
+
setupMiddlewares.push((middlewares2) => {
|
|
73
|
+
middlewares2.unshift(...dev.before || []);
|
|
74
|
+
middlewares2.push(...dev.after || []);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
setupMiddlewares.forEach((handler) => {
|
|
78
|
+
handler({
|
|
79
|
+
unshift: (...handlers) => before.unshift(...handlers),
|
|
80
|
+
push: (...handlers) => after.push(...handlers)
|
|
81
|
+
}, {
|
|
82
|
+
sockWrite: () => {
|
|
83
|
+
}
|
|
84
|
+
});
|
|
67
85
|
});
|
|
68
|
-
|
|
86
|
+
before.forEach((middleware, index) => {
|
|
69
87
|
middlewares.push({
|
|
70
|
-
name:
|
|
71
|
-
handler: (0, import_node.connectMid2HonoMid)(
|
|
88
|
+
name: `before-dev-server-${index}`,
|
|
89
|
+
handler: (0, import_node.connectMid2HonoMid)(middleware)
|
|
72
90
|
});
|
|
73
|
-
}
|
|
91
|
+
});
|
|
92
|
+
const mockMiddleware = await (0, import_helpers.getMockMiddleware)(pwd);
|
|
93
|
+
middlewares.push({
|
|
94
|
+
name: "mock-dev",
|
|
95
|
+
handler: mockMiddleware
|
|
96
|
+
});
|
|
97
|
+
builderMiddlewares && middlewares.push({
|
|
98
|
+
name: "rsbuild-dev",
|
|
99
|
+
handler: (0, import_node.connectMid2HonoMid)(builderMiddlewares)
|
|
100
|
+
});
|
|
101
|
+
after.forEach((middleware, index) => {
|
|
102
|
+
middlewares.push({
|
|
103
|
+
name: `after-dev-server-${index}`,
|
|
104
|
+
handler: (0, import_node.connectMid2HonoMid)(middleware)
|
|
105
|
+
});
|
|
106
|
+
});
|
|
74
107
|
middlewares.push({
|
|
75
108
|
name: "init-file-reader",
|
|
76
109
|
handler: (0, import_helpers.initFileReader)()
|
|
@@ -47,11 +47,8 @@ async function onServerChange({ pwd, filepath, event, server }) {
|
|
|
47
47
|
const mockPath = import_path.default.normalize(import_path.default.join(pwd, mock));
|
|
48
48
|
const { runner } = server;
|
|
49
49
|
if (filepath.startsWith(mockPath)) {
|
|
50
|
-
await (0, import_mock.
|
|
51
|
-
|
|
52
|
-
server
|
|
53
|
-
});
|
|
54
|
-
import_utils.logger.info("Finish registering the mock handlers");
|
|
50
|
+
await (0, import_mock.initOrUpdateMockMiddlewares)(pwd);
|
|
51
|
+
import_utils.logger.info("Finish update the mock handlers");
|
|
55
52
|
} else {
|
|
56
53
|
try {
|
|
57
54
|
const fileChangeEvent = {
|
package/dist/cjs/helpers/mock.js
CHANGED
|
@@ -28,13 +28,18 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
var mock_exports = {};
|
|
30
30
|
__export(mock_exports, {
|
|
31
|
-
|
|
31
|
+
getMatched: () => getMatched,
|
|
32
|
+
getMockMiddleware: () => getMockMiddleware,
|
|
33
|
+
initOrUpdateMockMiddlewares: () => initOrUpdateMockMiddlewares
|
|
32
34
|
});
|
|
33
35
|
module.exports = __toCommonJS(mock_exports);
|
|
34
36
|
var import_node_path = __toESM(require("node:path"));
|
|
35
37
|
var import_utils = require("@modern-js/utils");
|
|
36
38
|
var import_server_core = require("@modern-js/server-core");
|
|
37
39
|
var import_node = require("@modern-js/server-core/node");
|
|
40
|
+
var import_path_to_regexp = require("path-to-regexp");
|
|
41
|
+
let mockAPIs = [];
|
|
42
|
+
let mockConfig;
|
|
38
43
|
const parseKey = (key) => {
|
|
39
44
|
const _blank = " ";
|
|
40
45
|
const splitted = key.split(_blank).filter(Boolean);
|
|
@@ -50,8 +55,7 @@ const parseKey = (key) => {
|
|
|
50
55
|
path: key
|
|
51
56
|
};
|
|
52
57
|
};
|
|
53
|
-
const
|
|
54
|
-
const registerMockHandlers = async ({ pwd, server }) => {
|
|
58
|
+
const getMockModule = async (pwd) => {
|
|
55
59
|
const exts = [
|
|
56
60
|
".ts",
|
|
57
61
|
".js"
|
|
@@ -65,54 +69,72 @@ const registerMockHandlers = async ({ pwd, server }) => {
|
|
|
65
69
|
}
|
|
66
70
|
}
|
|
67
71
|
if (!mockFilePath) {
|
|
68
|
-
return
|
|
72
|
+
return void 0;
|
|
69
73
|
}
|
|
70
|
-
const { default:
|
|
74
|
+
const { default: mockHandlers, config } = await Promise.resolve().then(() => __toESM(require(mockFilePath)));
|
|
71
75
|
const enable = config === null || config === void 0 ? void 0 : config.enable;
|
|
72
76
|
if (enable === false) {
|
|
73
|
-
return;
|
|
77
|
+
return void 0;
|
|
74
78
|
}
|
|
75
|
-
if (!
|
|
79
|
+
if (!mockHandlers) {
|
|
76
80
|
throw new Error(`Mock file ${mockFilePath} parsed failed!`);
|
|
77
81
|
}
|
|
78
|
-
|
|
82
|
+
return {
|
|
83
|
+
mockHandlers,
|
|
84
|
+
config
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
const getMatched = (request, mockApis) => {
|
|
88
|
+
const { path: targetPathname, method: targetMethod } = request;
|
|
89
|
+
const matched = mockApis.find((mockApi) => {
|
|
90
|
+
const { method, path: pathname } = mockApi;
|
|
91
|
+
if (method.toLowerCase() === targetMethod.toLowerCase()) {
|
|
92
|
+
return (0, import_path_to_regexp.match)(pathname, {
|
|
93
|
+
encode: encodeURI,
|
|
94
|
+
decode: decodeURIComponent
|
|
95
|
+
})(targetPathname);
|
|
96
|
+
}
|
|
97
|
+
return false;
|
|
98
|
+
});
|
|
99
|
+
return matched;
|
|
100
|
+
};
|
|
101
|
+
async function initOrUpdateMockMiddlewares(pwd) {
|
|
102
|
+
const mockModule = await getMockModule(pwd);
|
|
103
|
+
mockConfig = mockModule === null || mockModule === void 0 ? void 0 : mockModule.config;
|
|
104
|
+
mockAPIs = Object.entries((mockModule === null || mockModule === void 0 ? void 0 : mockModule.mockHandlers) || {}).map(([key, handler]) => {
|
|
79
105
|
const { method, path: path2 } = parseKey(key);
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
106
|
+
return {
|
|
107
|
+
method,
|
|
108
|
+
path: path2,
|
|
109
|
+
handler
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
async function getMockMiddleware(pwd) {
|
|
114
|
+
await initOrUpdateMockMiddlewares(pwd);
|
|
115
|
+
const mockMiddleware = async (c, next) => {
|
|
116
|
+
if (typeof (mockConfig === null || mockConfig === void 0 ? void 0 : mockConfig.enable) === "function") {
|
|
117
|
+
const isEnabled = mockConfig.enable(c.env.node.req, c.env.node.res);
|
|
118
|
+
if (!isEnabled) {
|
|
119
|
+
return next();
|
|
120
|
+
}
|
|
90
121
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
const handler2 = (_mockHandlerRegistry_get = mockHandlerRegistry.get(handlerId)) === null || _mockHandlerRegistry_get === void 0 ? void 0 : _mockHandlerRegistry_get.handler;
|
|
101
|
-
if (typeof handler2 === "function") {
|
|
102
|
-
await (0, import_node.connectMid2HonoMid)(handler2)(c, next);
|
|
103
|
-
} else {
|
|
104
|
-
return c.json(handler2);
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
const handlerInfo = mockHandlerRegistry.get(handlerId);
|
|
108
|
-
if (handlerInfo && !(handlerInfo === null || handlerInfo === void 0 ? void 0 : handlerInfo.isRegistered)) {
|
|
109
|
-
server[methodName](path2, mockHandler);
|
|
110
|
-
handlerInfo.isRegistered = true;
|
|
122
|
+
const matchedMockAPI = getMatched(c.req, mockAPIs);
|
|
123
|
+
if (matchedMockAPI) {
|
|
124
|
+
const { handler } = matchedMockAPI;
|
|
125
|
+
if (typeof handler === "function") {
|
|
126
|
+
return await (0, import_node.connectMid2HonoMid)(handler)(c, next);
|
|
127
|
+
} else {
|
|
128
|
+
return c.json(handler);
|
|
111
129
|
}
|
|
112
130
|
}
|
|
113
|
-
|
|
114
|
-
};
|
|
131
|
+
return next();
|
|
132
|
+
};
|
|
133
|
+
return mockMiddleware;
|
|
134
|
+
}
|
|
115
135
|
// Annotate the CommonJS export names for ESM import in node:
|
|
116
136
|
0 && (module.exports = {
|
|
117
|
-
|
|
137
|
+
getMatched,
|
|
138
|
+
getMockMiddleware,
|
|
139
|
+
initOrUpdateMockMiddlewares
|
|
118
140
|
});
|
|
@@ -7,8 +7,11 @@ import { createServerBase } from "@modern-js/server-core";
|
|
|
7
7
|
import { createNodeServer, loadServerRuntimeConfig } from "@modern-js/server-core/node";
|
|
8
8
|
import { getDevOptions } from "./helpers";
|
|
9
9
|
import { devPlugin } from "./dev";
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
function createDevServer(options, applyPlugins) {
|
|
11
|
+
return _createDevServer.apply(this, arguments);
|
|
12
|
+
}
|
|
13
|
+
function _createDevServer() {
|
|
14
|
+
_createDevServer = _async_to_generator(function(options, applyPlugins) {
|
|
12
15
|
var config, pwd, serverConfigFile, serverConfigPath, dev, distDir, serverConfig, prodServerOptions, server, devHttpsOption, nodeServer, genHttpsOptions, httpsOptions;
|
|
13
16
|
return _ts_generator(this, function(_state) {
|
|
14
17
|
switch (_state.label) {
|
|
@@ -76,6 +79,14 @@ var createDevServer = function() {
|
|
|
76
79
|
];
|
|
77
80
|
case 8:
|
|
78
81
|
_state.sent();
|
|
82
|
+
nodeServer.listen({
|
|
83
|
+
host: dev.host || "127.0.0.1",
|
|
84
|
+
port: dev.port || "8080"
|
|
85
|
+
}, function(err) {
|
|
86
|
+
if (err) {
|
|
87
|
+
throw err;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
79
90
|
return [
|
|
80
91
|
2,
|
|
81
92
|
nodeServer
|
|
@@ -83,10 +94,8 @@ var createDevServer = function() {
|
|
|
83
94
|
}
|
|
84
95
|
});
|
|
85
96
|
});
|
|
86
|
-
return
|
|
87
|
-
|
|
88
|
-
};
|
|
89
|
-
}();
|
|
97
|
+
return _createDevServer.apply(this, arguments);
|
|
98
|
+
}
|
|
90
99
|
export {
|
|
91
100
|
createDevServer
|
|
92
101
|
};
|
package/dist/esm/dev.js
CHANGED
|
@@ -1,28 +1,37 @@
|
|
|
1
1
|
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
|
+
import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
|
|
2
3
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
3
4
|
import { connectMid2HonoMid } from "@modern-js/server-core/node";
|
|
4
5
|
import { API_DIR, SHARED_DIR } from "@modern-js/utils";
|
|
5
|
-
import { startWatcher, onRepack, getDevOptions, initFileReader,
|
|
6
|
+
import { startWatcher, onRepack, getDevOptions, initFileReader, getMockMiddleware } from "./helpers";
|
|
6
7
|
var devPlugin = function(options) {
|
|
7
8
|
return {
|
|
8
9
|
name: "@modern-js/plugin-dev",
|
|
9
10
|
setup: function setup(api) {
|
|
10
|
-
var
|
|
11
|
+
var config = options.config, pwd = options.pwd, builder = options.builder;
|
|
11
12
|
var closeCb = [];
|
|
12
|
-
var _ref = (getMiddlewares === null || getMiddlewares === void 0 ? void 0 : getMiddlewares()) || {}, rsbuildMiddlewares = _ref.middlewares, close = _ref.close, onHTTPUpgrade = _ref.onHTTPUpgrade;
|
|
13
|
-
close && closeCb.push(close);
|
|
14
13
|
var dev = getDevOptions(options);
|
|
15
14
|
return {
|
|
16
15
|
prepare: function prepare() {
|
|
17
16
|
return _async_to_generator(function() {
|
|
18
|
-
var _api_useAppContext, middlewares, distDirectory, nodeServer, apiDirectory, sharedDirectory, serverBase, runner, watchOptions, watcher;
|
|
17
|
+
var _dev_after, _dev_before, builderDevServer, _ref, builderMiddlewares, close, onHTTPUpgrade, _api_useAppContext, middlewares, distDirectory, nodeServer, apiDirectory, sharedDirectory, serverBase, runner, watchOptions, watcher, before, after, _dev_setupMiddlewares, setupMiddlewares, mockMiddleware;
|
|
19
18
|
return _ts_generator(this, function(_state) {
|
|
20
19
|
switch (_state.label) {
|
|
21
20
|
case 0:
|
|
21
|
+
return [
|
|
22
|
+
4,
|
|
23
|
+
builder === null || builder === void 0 ? void 0 : builder.createDevServer({
|
|
24
|
+
runCompile: options.runCompile
|
|
25
|
+
})
|
|
26
|
+
];
|
|
27
|
+
case 1:
|
|
28
|
+
builderDevServer = _state.sent();
|
|
29
|
+
_ref = builderDevServer || {}, builderMiddlewares = _ref.middlewares, close = _ref.close, onHTTPUpgrade = _ref.onHTTPUpgrade;
|
|
30
|
+
close && closeCb.push(close);
|
|
22
31
|
_api_useAppContext = api.useAppContext(), middlewares = _api_useAppContext.middlewares, distDirectory = _api_useAppContext.distDirectory, nodeServer = _api_useAppContext.nodeServer, apiDirectory = _api_useAppContext.apiDirectory, sharedDirectory = _api_useAppContext.sharedDirectory, serverBase = _api_useAppContext.serverBase;
|
|
23
32
|
onHTTPUpgrade && (nodeServer === null || nodeServer === void 0 ? void 0 : nodeServer.on("upgrade", onHTTPUpgrade));
|
|
24
33
|
runner = api.useHookRunners();
|
|
25
|
-
|
|
34
|
+
builder === null || builder === void 0 ? void 0 : builder.onDevCompileDone(function(param) {
|
|
26
35
|
var stats = param.stats;
|
|
27
36
|
if (stats.toJson({
|
|
28
37
|
all: false
|
|
@@ -47,21 +56,62 @@ var devPlugin = function(options) {
|
|
|
47
56
|
cb();
|
|
48
57
|
});
|
|
49
58
|
}));
|
|
59
|
+
before = [];
|
|
60
|
+
after = [];
|
|
61
|
+
_dev_setupMiddlewares = dev.setupMiddlewares, setupMiddlewares = _dev_setupMiddlewares === void 0 ? [] : _dev_setupMiddlewares;
|
|
62
|
+
if (((_dev_after = dev.after) === null || _dev_after === void 0 ? void 0 : _dev_after.length) || ((_dev_before = dev.before) === null || _dev_before === void 0 ? void 0 : _dev_before.length)) {
|
|
63
|
+
setupMiddlewares.push(function(middlewares2) {
|
|
64
|
+
var _middlewares, _middlewares1;
|
|
65
|
+
(_middlewares = middlewares2).unshift.apply(_middlewares, _to_consumable_array(dev.before || []));
|
|
66
|
+
(_middlewares1 = middlewares2).push.apply(_middlewares1, _to_consumable_array(dev.after || []));
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
setupMiddlewares.forEach(function(handler) {
|
|
70
|
+
var _before, _after;
|
|
71
|
+
handler({
|
|
72
|
+
unshift: function() {
|
|
73
|
+
for (var _len = arguments.length, handlers = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
74
|
+
handlers[_key] = arguments[_key];
|
|
75
|
+
}
|
|
76
|
+
return (_before = before).unshift.apply(_before, _to_consumable_array(handlers));
|
|
77
|
+
},
|
|
78
|
+
push: function() {
|
|
79
|
+
for (var _len = arguments.length, handlers = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
80
|
+
handlers[_key] = arguments[_key];
|
|
81
|
+
}
|
|
82
|
+
return (_after = after).push.apply(_after, _to_consumable_array(handlers));
|
|
83
|
+
}
|
|
84
|
+
}, {
|
|
85
|
+
sockWrite: function() {
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
before.forEach(function(middleware, index) {
|
|
90
|
+
middlewares.push({
|
|
91
|
+
name: "before-dev-server-".concat(index),
|
|
92
|
+
handler: connectMid2HonoMid(middleware)
|
|
93
|
+
});
|
|
94
|
+
});
|
|
50
95
|
return [
|
|
51
96
|
4,
|
|
52
|
-
|
|
53
|
-
pwd,
|
|
54
|
-
server: serverBase
|
|
55
|
-
})
|
|
97
|
+
getMockMiddleware(pwd)
|
|
56
98
|
];
|
|
57
|
-
case
|
|
58
|
-
_state.sent();
|
|
59
|
-
|
|
99
|
+
case 2:
|
|
100
|
+
mockMiddleware = _state.sent();
|
|
101
|
+
middlewares.push({
|
|
102
|
+
name: "mock-dev",
|
|
103
|
+
handler: mockMiddleware
|
|
104
|
+
});
|
|
105
|
+
builderMiddlewares && middlewares.push({
|
|
106
|
+
name: "rsbuild-dev",
|
|
107
|
+
handler: connectMid2HonoMid(builderMiddlewares)
|
|
108
|
+
});
|
|
109
|
+
after.forEach(function(middleware, index) {
|
|
60
110
|
middlewares.push({
|
|
61
|
-
name: "
|
|
62
|
-
handler: connectMid2HonoMid(
|
|
111
|
+
name: "after-dev-server-".concat(index),
|
|
112
|
+
handler: connectMid2HonoMid(middleware)
|
|
63
113
|
});
|
|
64
|
-
}
|
|
114
|
+
});
|
|
65
115
|
middlewares.push({
|
|
66
116
|
name: "init-file-reader",
|
|
67
117
|
handler: initFileReader()
|
|
@@ -5,7 +5,7 @@ import { SERVER_BUNDLE_DIRECTORY, SERVER_DIR, logger } from "@modern-js/utils";
|
|
|
5
5
|
import { AGGRED_DIR } from "@modern-js/server-core";
|
|
6
6
|
import Watcher, { mergeWatchOptions } from "../dev-tools/watcher";
|
|
7
7
|
import { debug } from "./utils";
|
|
8
|
-
import {
|
|
8
|
+
import { initOrUpdateMockMiddlewares } from "./mock";
|
|
9
9
|
export * from "./repack";
|
|
10
10
|
export * from "./devOptions";
|
|
11
11
|
export * from "./fileReader";
|
|
@@ -30,14 +30,11 @@ function _onServerChange() {
|
|
|
30
30
|
];
|
|
31
31
|
return [
|
|
32
32
|
4,
|
|
33
|
-
|
|
34
|
-
pwd,
|
|
35
|
-
server
|
|
36
|
-
})
|
|
33
|
+
initOrUpdateMockMiddlewares(pwd)
|
|
37
34
|
];
|
|
38
35
|
case 1:
|
|
39
36
|
_state.sent();
|
|
40
|
-
logger.info("Finish
|
|
37
|
+
logger.info("Finish update the mock handlers");
|
|
41
38
|
return [
|
|
42
39
|
3,
|
|
43
40
|
5
|
package/dist/esm/helpers/mock.js
CHANGED
|
@@ -5,6 +5,9 @@ import path from "node:path";
|
|
|
5
5
|
import { fs } from "@modern-js/utils";
|
|
6
6
|
import { AGGRED_DIR } from "@modern-js/server-core";
|
|
7
7
|
import { connectMid2HonoMid } from "@modern-js/server-core/node";
|
|
8
|
+
import { match } from "path-to-regexp";
|
|
9
|
+
var mockAPIs = [];
|
|
10
|
+
var mockConfig;
|
|
8
11
|
var parseKey = function(key) {
|
|
9
12
|
var _blank = " ";
|
|
10
13
|
var splitted = key.split(_blank).filter(Boolean);
|
|
@@ -20,14 +23,12 @@ var parseKey = function(key) {
|
|
|
20
23
|
path: key
|
|
21
24
|
};
|
|
22
25
|
};
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
var pwd, server, exts, mockFilePath, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, ext, maybeMatch, err, _ref2, mockModule, config, enable;
|
|
26
|
+
var getMockModule = function() {
|
|
27
|
+
var _ref = _async_to_generator(function(pwd) {
|
|
28
|
+
var exts, mockFilePath, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, ext, maybeMatch, err, _ref2, mockHandlers, config, enable;
|
|
27
29
|
return _ts_generator(this, function(_state) {
|
|
28
30
|
switch (_state.label) {
|
|
29
31
|
case 0:
|
|
30
|
-
pwd = param.pwd, server = param.server;
|
|
31
32
|
exts = [
|
|
32
33
|
".ts",
|
|
33
34
|
".js"
|
|
@@ -101,7 +102,7 @@ var registerMockHandlers = function() {
|
|
|
101
102
|
if (!mockFilePath) {
|
|
102
103
|
return [
|
|
103
104
|
2,
|
|
104
|
-
|
|
105
|
+
void 0
|
|
105
106
|
];
|
|
106
107
|
}
|
|
107
108
|
return [
|
|
@@ -109,95 +110,157 @@ var registerMockHandlers = function() {
|
|
|
109
110
|
import(mockFilePath)
|
|
110
111
|
];
|
|
111
112
|
case 9:
|
|
112
|
-
_ref2 = _state.sent(),
|
|
113
|
+
_ref2 = _state.sent(), mockHandlers = _ref2.default, config = _ref2.config;
|
|
113
114
|
enable = config === null || config === void 0 ? void 0 : config.enable;
|
|
114
115
|
if (enable === false) {
|
|
115
116
|
return [
|
|
116
|
-
2
|
|
117
|
+
2,
|
|
118
|
+
void 0
|
|
117
119
|
];
|
|
118
120
|
}
|
|
119
|
-
if (!
|
|
121
|
+
if (!mockHandlers) {
|
|
120
122
|
throw new Error("Mock file ".concat(mockFilePath, " parsed failed!"));
|
|
121
123
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
var mockInfo = mockHandlerRegistry.get(handlerId);
|
|
128
|
-
if (mockInfo) {
|
|
129
|
-
mockInfo.handler = handler;
|
|
130
|
-
} else {
|
|
131
|
-
mockHandlerRegistry.set(handlerId, {
|
|
132
|
-
handler,
|
|
133
|
-
isRegistered: false
|
|
134
|
-
});
|
|
124
|
+
return [
|
|
125
|
+
2,
|
|
126
|
+
{
|
|
127
|
+
mockHandlers,
|
|
128
|
+
config
|
|
135
129
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
130
|
+
];
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
return function getMockModule2(pwd) {
|
|
135
|
+
return _ref.apply(this, arguments);
|
|
136
|
+
};
|
|
137
|
+
}();
|
|
138
|
+
var getMatched = function(request, mockApis) {
|
|
139
|
+
var targetPathname = request.path, targetMethod = request.method;
|
|
140
|
+
var matched = mockApis.find(function(mockApi) {
|
|
141
|
+
var method = mockApi.method, pathname = mockApi.path;
|
|
142
|
+
if (method.toLowerCase() === targetMethod.toLowerCase()) {
|
|
143
|
+
return match(pathname, {
|
|
144
|
+
encode: encodeURI,
|
|
145
|
+
decode: decodeURIComponent
|
|
146
|
+
})(targetPathname);
|
|
147
|
+
}
|
|
148
|
+
return false;
|
|
149
|
+
});
|
|
150
|
+
return matched;
|
|
151
|
+
};
|
|
152
|
+
function initOrUpdateMockMiddlewares(pwd) {
|
|
153
|
+
return _initOrUpdateMockMiddlewares.apply(this, arguments);
|
|
154
|
+
}
|
|
155
|
+
function _initOrUpdateMockMiddlewares() {
|
|
156
|
+
_initOrUpdateMockMiddlewares = _async_to_generator(function(pwd) {
|
|
157
|
+
var mockModule;
|
|
158
|
+
return _ts_generator(this, function(_state) {
|
|
159
|
+
switch (_state.label) {
|
|
160
|
+
case 0:
|
|
161
|
+
return [
|
|
162
|
+
4,
|
|
163
|
+
getMockModule(pwd)
|
|
164
|
+
];
|
|
165
|
+
case 1:
|
|
166
|
+
mockModule = _state.sent();
|
|
167
|
+
mockConfig = mockModule === null || mockModule === void 0 ? void 0 : mockModule.config;
|
|
168
|
+
mockAPIs = Object.entries((mockModule === null || mockModule === void 0 ? void 0 : mockModule.mockHandlers) || {}).map(function(param) {
|
|
169
|
+
var _param = _sliced_to_array(param, 2), key = _param[0], handler = _param[1];
|
|
170
|
+
var _parseKey = parseKey(key), method = _parseKey.method, path2 = _parseKey.path;
|
|
171
|
+
return {
|
|
172
|
+
method,
|
|
173
|
+
path: path2,
|
|
174
|
+
handler
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
return [
|
|
178
|
+
2
|
|
179
|
+
];
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
return _initOrUpdateMockMiddlewares.apply(this, arguments);
|
|
184
|
+
}
|
|
185
|
+
function getMockMiddleware(pwd) {
|
|
186
|
+
return _getMockMiddleware.apply(this, arguments);
|
|
187
|
+
}
|
|
188
|
+
function _getMockMiddleware() {
|
|
189
|
+
_getMockMiddleware = _async_to_generator(function(pwd) {
|
|
190
|
+
var mockMiddleware;
|
|
191
|
+
return _ts_generator(this, function(_state) {
|
|
192
|
+
switch (_state.label) {
|
|
193
|
+
case 0:
|
|
194
|
+
return [
|
|
195
|
+
4,
|
|
196
|
+
initOrUpdateMockMiddlewares(pwd)
|
|
197
|
+
];
|
|
198
|
+
case 1:
|
|
199
|
+
_state.sent();
|
|
200
|
+
mockMiddleware = function() {
|
|
201
|
+
var _ref = _async_to_generator(function(c, next) {
|
|
202
|
+
var isEnabled, matchedMockAPI, handler;
|
|
203
|
+
return _ts_generator(this, function(_state2) {
|
|
204
|
+
switch (_state2.label) {
|
|
205
|
+
case 0:
|
|
206
|
+
if (typeof (mockConfig === null || mockConfig === void 0 ? void 0 : mockConfig.enable) === "function") {
|
|
207
|
+
isEnabled = mockConfig.enable(c.env.node.req, c.env.node.res);
|
|
208
|
+
if (!isEnabled) {
|
|
169
209
|
return [
|
|
170
210
|
2,
|
|
171
|
-
|
|
172
|
-
];
|
|
173
|
-
case 3:
|
|
174
|
-
return [
|
|
175
|
-
2
|
|
211
|
+
next()
|
|
176
212
|
];
|
|
213
|
+
}
|
|
177
214
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
215
|
+
matchedMockAPI = getMatched(c.req, mockAPIs);
|
|
216
|
+
if (!matchedMockAPI)
|
|
217
|
+
return [
|
|
218
|
+
3,
|
|
219
|
+
3
|
|
220
|
+
];
|
|
221
|
+
handler = matchedMockAPI.handler;
|
|
222
|
+
if (!(typeof handler === "function"))
|
|
223
|
+
return [
|
|
224
|
+
3,
|
|
225
|
+
2
|
|
226
|
+
];
|
|
227
|
+
return [
|
|
228
|
+
4,
|
|
229
|
+
connectMid2HonoMid(handler)(c, next)
|
|
230
|
+
];
|
|
231
|
+
case 1:
|
|
232
|
+
return [
|
|
233
|
+
2,
|
|
234
|
+
_state2.sent()
|
|
235
|
+
];
|
|
236
|
+
case 2:
|
|
237
|
+
return [
|
|
238
|
+
2,
|
|
239
|
+
c.json(handler)
|
|
240
|
+
];
|
|
241
|
+
case 3:
|
|
242
|
+
return [
|
|
243
|
+
2,
|
|
244
|
+
next()
|
|
245
|
+
];
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
return function mockMiddleware2(c, next) {
|
|
250
|
+
return _ref.apply(this, arguments);
|
|
251
|
+
};
|
|
252
|
+
}();
|
|
191
253
|
return [
|
|
192
|
-
2
|
|
254
|
+
2,
|
|
255
|
+
mockMiddleware
|
|
193
256
|
];
|
|
194
257
|
}
|
|
195
258
|
});
|
|
196
259
|
});
|
|
197
|
-
return
|
|
198
|
-
|
|
199
|
-
};
|
|
200
|
-
}();
|
|
260
|
+
return _getMockMiddleware.apply(this, arguments);
|
|
261
|
+
}
|
|
201
262
|
export {
|
|
202
|
-
|
|
263
|
+
getMatched,
|
|
264
|
+
getMockMiddleware,
|
|
265
|
+
initOrUpdateMockMiddlewares
|
|
203
266
|
};
|
|
@@ -3,7 +3,7 @@ import { createServerBase } from "@modern-js/server-core";
|
|
|
3
3
|
import { createNodeServer, loadServerRuntimeConfig } from "@modern-js/server-core/node";
|
|
4
4
|
import { getDevOptions } from "./helpers";
|
|
5
5
|
import { devPlugin } from "./dev";
|
|
6
|
-
|
|
6
|
+
async function createDevServer(options, applyPlugins) {
|
|
7
7
|
const { config, pwd, serverConfigFile, serverConfigPath } = options;
|
|
8
8
|
const dev = getDevOptions(options);
|
|
9
9
|
const distDir = path.resolve(pwd, config.output.path || "dist");
|
|
@@ -30,8 +30,16 @@ const createDevServer = async (options, applyPlugins) => {
|
|
|
30
30
|
]);
|
|
31
31
|
await applyPlugins(server, prodServerOptions, nodeServer);
|
|
32
32
|
await server.init();
|
|
33
|
+
nodeServer.listen({
|
|
34
|
+
host: dev.host || "127.0.0.1",
|
|
35
|
+
port: dev.port || "8080"
|
|
36
|
+
}, (err) => {
|
|
37
|
+
if (err) {
|
|
38
|
+
throw err;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
33
41
|
return nodeServer;
|
|
34
|
-
}
|
|
42
|
+
}
|
|
35
43
|
export {
|
|
36
44
|
createDevServer
|
|
37
45
|
};
|
package/dist/esm-node/dev.js
CHANGED
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import { connectMid2HonoMid } from "@modern-js/server-core/node";
|
|
2
2
|
import { API_DIR, SHARED_DIR } from "@modern-js/utils";
|
|
3
|
-
import { startWatcher, onRepack, getDevOptions, initFileReader,
|
|
3
|
+
import { startWatcher, onRepack, getDevOptions, initFileReader, getMockMiddleware } from "./helpers";
|
|
4
4
|
const devPlugin = (options) => ({
|
|
5
5
|
name: "@modern-js/plugin-dev",
|
|
6
6
|
setup(api) {
|
|
7
|
-
const {
|
|
7
|
+
const { config, pwd, builder } = options;
|
|
8
8
|
const closeCb = [];
|
|
9
|
-
const { middlewares: rsbuildMiddlewares, close, onHTTPUpgrade } = (getMiddlewares === null || getMiddlewares === void 0 ? void 0 : getMiddlewares()) || {};
|
|
10
|
-
close && closeCb.push(close);
|
|
11
9
|
const dev = getDevOptions(options);
|
|
12
10
|
return {
|
|
13
11
|
async prepare() {
|
|
12
|
+
var _dev_after, _dev_before;
|
|
13
|
+
const builderDevServer = await (builder === null || builder === void 0 ? void 0 : builder.createDevServer({
|
|
14
|
+
runCompile: options.runCompile
|
|
15
|
+
}));
|
|
16
|
+
const { middlewares: builderMiddlewares, close, onHTTPUpgrade } = builderDevServer || {};
|
|
17
|
+
close && closeCb.push(close);
|
|
14
18
|
const { middlewares, distDirectory, nodeServer, apiDirectory, sharedDirectory, serverBase } = api.useAppContext();
|
|
15
19
|
onHTTPUpgrade && (nodeServer === null || nodeServer === void 0 ? void 0 : nodeServer.on("upgrade", onHTTPUpgrade));
|
|
16
20
|
const runner = api.useHookRunners();
|
|
17
|
-
|
|
21
|
+
builder === null || builder === void 0 ? void 0 : builder.onDevCompileDone(({ stats }) => {
|
|
18
22
|
if (stats.toJson({
|
|
19
23
|
all: false
|
|
20
24
|
}).name !== "server") {
|
|
@@ -38,16 +42,45 @@ const devPlugin = (options) => ({
|
|
|
38
42
|
cb();
|
|
39
43
|
});
|
|
40
44
|
}));
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
const before = [];
|
|
46
|
+
const after = [];
|
|
47
|
+
const { setupMiddlewares = [] } = dev;
|
|
48
|
+
if (((_dev_after = dev.after) === null || _dev_after === void 0 ? void 0 : _dev_after.length) || ((_dev_before = dev.before) === null || _dev_before === void 0 ? void 0 : _dev_before.length)) {
|
|
49
|
+
setupMiddlewares.push((middlewares2) => {
|
|
50
|
+
middlewares2.unshift(...dev.before || []);
|
|
51
|
+
middlewares2.push(...dev.after || []);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
setupMiddlewares.forEach((handler) => {
|
|
55
|
+
handler({
|
|
56
|
+
unshift: (...handlers) => before.unshift(...handlers),
|
|
57
|
+
push: (...handlers) => after.push(...handlers)
|
|
58
|
+
}, {
|
|
59
|
+
sockWrite: () => {
|
|
60
|
+
}
|
|
61
|
+
});
|
|
44
62
|
});
|
|
45
|
-
|
|
63
|
+
before.forEach((middleware, index) => {
|
|
46
64
|
middlewares.push({
|
|
47
|
-
name:
|
|
48
|
-
handler: connectMid2HonoMid(
|
|
65
|
+
name: `before-dev-server-${index}`,
|
|
66
|
+
handler: connectMid2HonoMid(middleware)
|
|
49
67
|
});
|
|
50
|
-
}
|
|
68
|
+
});
|
|
69
|
+
const mockMiddleware = await getMockMiddleware(pwd);
|
|
70
|
+
middlewares.push({
|
|
71
|
+
name: "mock-dev",
|
|
72
|
+
handler: mockMiddleware
|
|
73
|
+
});
|
|
74
|
+
builderMiddlewares && middlewares.push({
|
|
75
|
+
name: "rsbuild-dev",
|
|
76
|
+
handler: connectMid2HonoMid(builderMiddlewares)
|
|
77
|
+
});
|
|
78
|
+
after.forEach((middleware, index) => {
|
|
79
|
+
middlewares.push({
|
|
80
|
+
name: `after-dev-server-${index}`,
|
|
81
|
+
handler: connectMid2HonoMid(middleware)
|
|
82
|
+
});
|
|
83
|
+
});
|
|
51
84
|
middlewares.push({
|
|
52
85
|
name: "init-file-reader",
|
|
53
86
|
handler: initFileReader()
|
|
@@ -3,7 +3,7 @@ import { SERVER_BUNDLE_DIRECTORY, SERVER_DIR, logger } from "@modern-js/utils";
|
|
|
3
3
|
import { AGGRED_DIR } from "@modern-js/server-core";
|
|
4
4
|
import Watcher, { mergeWatchOptions } from "../dev-tools/watcher";
|
|
5
5
|
import { debug } from "./utils";
|
|
6
|
-
import {
|
|
6
|
+
import { initOrUpdateMockMiddlewares } from "./mock";
|
|
7
7
|
export * from "./repack";
|
|
8
8
|
export * from "./devOptions";
|
|
9
9
|
export * from "./fileReader";
|
|
@@ -13,11 +13,8 @@ async function onServerChange({ pwd, filepath, event, server }) {
|
|
|
13
13
|
const mockPath = path.normalize(path.join(pwd, mock));
|
|
14
14
|
const { runner } = server;
|
|
15
15
|
if (filepath.startsWith(mockPath)) {
|
|
16
|
-
await
|
|
17
|
-
|
|
18
|
-
server
|
|
19
|
-
});
|
|
20
|
-
logger.info("Finish registering the mock handlers");
|
|
16
|
+
await initOrUpdateMockMiddlewares(pwd);
|
|
17
|
+
logger.info("Finish update the mock handlers");
|
|
21
18
|
} else {
|
|
22
19
|
try {
|
|
23
20
|
const fileChangeEvent = {
|
|
@@ -2,6 +2,9 @@ import path from "node:path";
|
|
|
2
2
|
import { fs } from "@modern-js/utils";
|
|
3
3
|
import { AGGRED_DIR } from "@modern-js/server-core";
|
|
4
4
|
import { connectMid2HonoMid } from "@modern-js/server-core/node";
|
|
5
|
+
import { match } from "path-to-regexp";
|
|
6
|
+
let mockAPIs = [];
|
|
7
|
+
let mockConfig;
|
|
5
8
|
const parseKey = (key) => {
|
|
6
9
|
const _blank = " ";
|
|
7
10
|
const splitted = key.split(_blank).filter(Boolean);
|
|
@@ -17,8 +20,7 @@ const parseKey = (key) => {
|
|
|
17
20
|
path: key
|
|
18
21
|
};
|
|
19
22
|
};
|
|
20
|
-
const
|
|
21
|
-
const registerMockHandlers = async ({ pwd, server }) => {
|
|
23
|
+
const getMockModule = async (pwd) => {
|
|
22
24
|
const exts = [
|
|
23
25
|
".ts",
|
|
24
26
|
".js"
|
|
@@ -32,53 +34,71 @@ const registerMockHandlers = async ({ pwd, server }) => {
|
|
|
32
34
|
}
|
|
33
35
|
}
|
|
34
36
|
if (!mockFilePath) {
|
|
35
|
-
return
|
|
37
|
+
return void 0;
|
|
36
38
|
}
|
|
37
|
-
const { default:
|
|
39
|
+
const { default: mockHandlers, config } = await import(mockFilePath);
|
|
38
40
|
const enable = config === null || config === void 0 ? void 0 : config.enable;
|
|
39
41
|
if (enable === false) {
|
|
40
|
-
return;
|
|
42
|
+
return void 0;
|
|
41
43
|
}
|
|
42
|
-
if (!
|
|
44
|
+
if (!mockHandlers) {
|
|
43
45
|
throw new Error(`Mock file ${mockFilePath} parsed failed!`);
|
|
44
46
|
}
|
|
45
|
-
|
|
47
|
+
return {
|
|
48
|
+
mockHandlers,
|
|
49
|
+
config
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
const getMatched = (request, mockApis) => {
|
|
53
|
+
const { path: targetPathname, method: targetMethod } = request;
|
|
54
|
+
const matched = mockApis.find((mockApi) => {
|
|
55
|
+
const { method, path: pathname } = mockApi;
|
|
56
|
+
if (method.toLowerCase() === targetMethod.toLowerCase()) {
|
|
57
|
+
return match(pathname, {
|
|
58
|
+
encode: encodeURI,
|
|
59
|
+
decode: decodeURIComponent
|
|
60
|
+
})(targetPathname);
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
});
|
|
64
|
+
return matched;
|
|
65
|
+
};
|
|
66
|
+
async function initOrUpdateMockMiddlewares(pwd) {
|
|
67
|
+
const mockModule = await getMockModule(pwd);
|
|
68
|
+
mockConfig = mockModule === null || mockModule === void 0 ? void 0 : mockModule.config;
|
|
69
|
+
mockAPIs = Object.entries((mockModule === null || mockModule === void 0 ? void 0 : mockModule.mockHandlers) || {}).map(([key, handler]) => {
|
|
46
70
|
const { method, path: path2 } = parseKey(key);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
71
|
+
return {
|
|
72
|
+
method,
|
|
73
|
+
path: path2,
|
|
74
|
+
handler
|
|
75
|
+
};
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async function getMockMiddleware(pwd) {
|
|
79
|
+
await initOrUpdateMockMiddlewares(pwd);
|
|
80
|
+
const mockMiddleware = async (c, next) => {
|
|
81
|
+
if (typeof (mockConfig === null || mockConfig === void 0 ? void 0 : mockConfig.enable) === "function") {
|
|
82
|
+
const isEnabled = mockConfig.enable(c.env.node.req, c.env.node.res);
|
|
83
|
+
if (!isEnabled) {
|
|
84
|
+
return next();
|
|
85
|
+
}
|
|
57
86
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
const handler2 = (_mockHandlerRegistry_get = mockHandlerRegistry.get(handlerId)) === null || _mockHandlerRegistry_get === void 0 ? void 0 : _mockHandlerRegistry_get.handler;
|
|
68
|
-
if (typeof handler2 === "function") {
|
|
69
|
-
await connectMid2HonoMid(handler2)(c, next);
|
|
70
|
-
} else {
|
|
71
|
-
return c.json(handler2);
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
const handlerInfo = mockHandlerRegistry.get(handlerId);
|
|
75
|
-
if (handlerInfo && !(handlerInfo === null || handlerInfo === void 0 ? void 0 : handlerInfo.isRegistered)) {
|
|
76
|
-
server[methodName](path2, mockHandler);
|
|
77
|
-
handlerInfo.isRegistered = true;
|
|
87
|
+
const matchedMockAPI = getMatched(c.req, mockAPIs);
|
|
88
|
+
if (matchedMockAPI) {
|
|
89
|
+
const { handler } = matchedMockAPI;
|
|
90
|
+
if (typeof handler === "function") {
|
|
91
|
+
return await connectMid2HonoMid(handler)(c, next);
|
|
92
|
+
} else {
|
|
93
|
+
return c.json(handler);
|
|
78
94
|
}
|
|
79
95
|
}
|
|
80
|
-
|
|
81
|
-
};
|
|
96
|
+
return next();
|
|
97
|
+
};
|
|
98
|
+
return mockMiddleware;
|
|
99
|
+
}
|
|
82
100
|
export {
|
|
83
|
-
|
|
101
|
+
getMatched,
|
|
102
|
+
getMockMiddleware,
|
|
103
|
+
initOrUpdateMockMiddlewares
|
|
84
104
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
|
|
3
|
-
import { ServerBaseOptions } from '@modern-js/server-core';
|
|
2
|
+
/// <reference types="node" />
|
|
4
3
|
import { ApplyPlugins, ModernDevServerOptions } from './types';
|
|
5
|
-
export
|
|
6
|
-
|
|
4
|
+
export declare function createDevServer(options: ModernDevServerOptions, applyPlugins: ApplyPlugins): Promise<(import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse> | import("https").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>) & {
|
|
5
|
+
getRequestListener: () => (req: import("http").IncomingMessage, res: import("http").ServerResponse) => Promise<void>;
|
|
6
|
+
getRequestHandler: () => import("@modern-js/server-core/dist/types/types").RequestHandler;
|
|
7
|
+
}>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ModernDevServerOptions } from '../types';
|
|
2
2
|
export declare const getDevOptions: (options: ModernDevServerOptions) => import("@modern-js/types/server/devServer").DevServerOptions & Pick<import("@modern-js/types/server/devServer").DevServerOptions, "watch" | "https"> & {
|
|
3
|
-
|
|
3
|
+
port?: number | undefined;
|
|
4
|
+
host?: string | undefined;
|
|
4
5
|
};
|
|
@@ -1,5 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
3
|
+
import { NextFunction } from '@modern-js/types';
|
|
4
|
+
import { type Middleware, InternalRequest } from '@modern-js/server-core';
|
|
5
|
+
/** Types: Mock */
|
|
6
|
+
type MockHandler = {
|
|
7
|
+
data: any;
|
|
8
|
+
} | ((req: IncomingMessage, res: ServerResponse, next: NextFunction) => Promise<void> | void);
|
|
9
|
+
type MockAPI = {
|
|
10
|
+
method: string;
|
|
11
|
+
path: string;
|
|
12
|
+
handler: MockHandler;
|
|
13
|
+
};
|
|
14
|
+
export declare const getMatched: (request: InternalRequest, mockApis: MockAPI[]) => MockAPI | undefined;
|
|
15
|
+
export declare function initOrUpdateMockMiddlewares(pwd: string): Promise<void>;
|
|
16
|
+
export declare function getMockMiddleware(pwd: string): Promise<Middleware>;
|
|
17
|
+
export {};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { createDevServer } from './createDevServer';
|
|
2
|
-
export type { ModernDevServerOptions } from './
|
|
2
|
+
export type { ModernDevServerOptions } from './types';
|
package/dist/types/types.d.ts
CHANGED
|
@@ -1,52 +1,18 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
|
|
3
|
-
import type {
|
|
4
|
-
import type { Socket } from 'net';
|
|
5
|
-
import type { DevServerOptions, DevServerHttpsOptions, NextFunction } from '@modern-js/types';
|
|
6
|
-
import type { RsbuildInstance } from '@rsbuild/core';
|
|
2
|
+
import type { UniBuilderInstance } from '@modern-js/uni-builder';
|
|
3
|
+
import type { DevServerOptions, DevServerHttpsOptions } from '@modern-js/types';
|
|
7
4
|
import { NodeServer, ServerBase, ServerBaseOptions } from '@modern-js/server-core';
|
|
8
5
|
export type { DevServerOptions, DevServerHttpsOptions };
|
|
9
|
-
type Middleware = (req: IncomingMessage, res: ServerResponse, next: NextFunction) => Promise<void>;
|
|
10
|
-
export type DevMiddlewareAPI = Middleware & {
|
|
11
|
-
close: (callback: (err: Error | null | undefined) => void) => any;
|
|
12
|
-
};
|
|
13
|
-
export type MiddlewareCallbacks = {
|
|
14
|
-
onInvalid: () => void;
|
|
15
|
-
onDone: (stats: any) => void;
|
|
16
|
-
};
|
|
17
|
-
export type DevMiddlewareOptions = {
|
|
18
|
-
/** To ensure HMR works, the devMiddleware need inject the hmr client path into page when HMR enable. */
|
|
19
|
-
hmrClientPath?: string;
|
|
20
|
-
/** The options need by compiler middleware (like webpackMiddleware) */
|
|
21
|
-
headers?: Record<string, string | string[]>;
|
|
22
|
-
writeToDisk?: boolean | ((filename: string) => boolean);
|
|
23
|
-
stats?: boolean;
|
|
24
|
-
/** should trigger when compiler hook called */
|
|
25
|
-
callbacks: MiddlewareCallbacks;
|
|
26
|
-
/** whether use Server Side Render */
|
|
27
|
-
serverSideRender?: boolean;
|
|
28
|
-
};
|
|
29
|
-
/**
|
|
30
|
-
* The modern/server do nothing about compiler, the devMiddleware need do such things to ensure dev works well:
|
|
31
|
-
* - Call compiler.watch (normally did by webpack-dev-middleware).
|
|
32
|
-
* - Inject the hmr client path into page (the hmr client modern/server already provide).
|
|
33
|
-
* - Notify server when compiler hooks are triggered.
|
|
34
|
-
*/
|
|
35
|
-
export type DevMiddleware = (options: DevMiddlewareOptions) => DevMiddlewareAPI;
|
|
36
6
|
export type ExtraOptions = {
|
|
37
7
|
dev: Pick<DevServerOptions, 'watch' | 'https'> & {
|
|
38
|
-
|
|
8
|
+
port?: number;
|
|
9
|
+
host?: string;
|
|
39
10
|
};
|
|
11
|
+
runCompile?: boolean;
|
|
40
12
|
/** compat, the default value is modern.server-runtime.config.ts */
|
|
41
13
|
serverConfigFile?: string;
|
|
42
14
|
serverConfigPath?: string;
|
|
43
|
-
|
|
44
|
-
rsbuild: RsbuildInstance;
|
|
45
|
-
getMiddlewares?: () => {
|
|
46
|
-
middlewares: (req: IncomingMessage, res: ServerResponse, next: NextFunction) => void;
|
|
47
|
-
onHTTPUpgrade: (req: IncomingMessage, socket: Socket, head: any) => void;
|
|
48
|
-
close: () => Promise<void>;
|
|
49
|
-
};
|
|
15
|
+
builder?: UniBuilderInstance;
|
|
50
16
|
};
|
|
51
17
|
export type ModernDevServerOptions<O extends ServerBaseOptions = ServerBaseOptions> = O & ExtraOptions;
|
|
52
18
|
export type ApplyPlugins<O extends ServerBaseOptions = ServerBaseOptions> = (server: ServerBase, options: O, nodeServer?: NodeServer) => Promise<void>;
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "2.56.
|
|
18
|
+
"version": "2.56.2",
|
|
19
19
|
"jsnext:source": "./src/index.ts",
|
|
20
20
|
"types": "./dist/types/index.d.ts",
|
|
21
21
|
"main": "./dist/cjs/index.js",
|
|
@@ -48,14 +48,13 @@
|
|
|
48
48
|
"minimatch": "^3.0.4",
|
|
49
49
|
"path-to-regexp": "^6.2.0",
|
|
50
50
|
"ws": "^8.13.0",
|
|
51
|
-
"@modern-js/runtime-utils": "2.56.
|
|
52
|
-
"@modern-js/server-utils": "2.56.
|
|
53
|
-
"@modern-js/types": "2.56.
|
|
54
|
-
"@modern-js/utils": "2.56.
|
|
55
|
-
"@modern-js/server-core": "2.56.
|
|
51
|
+
"@modern-js/runtime-utils": "2.56.2",
|
|
52
|
+
"@modern-js/server-utils": "2.56.2",
|
|
53
|
+
"@modern-js/types": "2.56.2",
|
|
54
|
+
"@modern-js/utils": "2.56.2",
|
|
55
|
+
"@modern-js/server-core": "2.56.2"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@rsbuild/core": "1.0.1-beta.3",
|
|
59
58
|
"@types/connect-history-api-fallback": "^1.3.5",
|
|
60
59
|
"@types/jest": "^29",
|
|
61
60
|
"@types/minimatch": "^3.0.5",
|
|
@@ -68,8 +67,9 @@
|
|
|
68
67
|
"typescript": "^5",
|
|
69
68
|
"webpack": "^5.93.0",
|
|
70
69
|
"websocket": "^1",
|
|
71
|
-
"@
|
|
72
|
-
"@scripts/jest-config": "2.56.
|
|
70
|
+
"@modern-js/uni-builder": "2.56.2",
|
|
71
|
+
"@scripts/jest-config": "2.56.2",
|
|
72
|
+
"@scripts/build": "2.56.2"
|
|
73
73
|
},
|
|
74
74
|
"peerDependencies": {
|
|
75
75
|
"devcert": "^1.2.2",
|