@modern-js/server 2.0.0-beta.2 → 2.0.0-beta.4
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 +148 -0
- package/dist/js/modern/constants.js +10 -9
- package/dist/js/modern/dev-tools/dev-middleware/dev-server-plugin.js +14 -20
- package/dist/js/modern/dev-tools/dev-middleware/hmr-client/createSocketUrl.js +14 -19
- package/dist/js/modern/dev-tools/dev-middleware/hmr-client/index.js +134 -184
- package/dist/js/modern/dev-tools/dev-middleware/hmr-client/types.d.js +0 -0
- package/dist/js/modern/dev-tools/dev-middleware/index.js +65 -60
- package/dist/js/modern/dev-tools/dev-middleware/socket-server.js +33 -59
- package/dist/js/modern/dev-tools/https/global.d.js +0 -0
- package/dist/js/modern/dev-tools/https/index.js +28 -5
- package/dist/js/modern/dev-tools/mock/getMockData.js +71 -45
- package/dist/js/modern/dev-tools/mock/index.js +34 -15
- package/dist/js/modern/dev-tools/register/index.js +71 -55
- package/dist/js/modern/dev-tools/watcher/dependency-tree.js +25 -34
- package/dist/js/modern/dev-tools/watcher/index.js +51 -33
- package/dist/js/modern/dev-tools/watcher/stats-cache.js +13 -20
- package/dist/js/modern/index.js +7 -4
- package/dist/js/modern/server/dev-server.js +194 -216
- package/dist/js/modern/server/index.js +7 -4
- package/dist/js/node/constants.js +27 -14
- package/dist/js/node/dev-tools/dev-middleware/dev-server-plugin.js +36 -24
- package/dist/js/node/dev-tools/dev-middleware/hmr-client/createSocketUrl.js +31 -24
- package/dist/js/node/dev-tools/dev-middleware/hmr-client/index.js +56 -98
- package/dist/js/node/dev-tools/dev-middleware/hmr-client/types.d.js +0 -0
- package/dist/js/node/dev-tools/dev-middleware/index.js +94 -72
- package/dist/js/node/dev-tools/dev-middleware/socket-server.js +57 -66
- package/dist/js/node/dev-tools/https/global.d.js +0 -0
- package/dist/js/node/dev-tools/https/index.js +52 -13
- package/dist/js/node/dev-tools/mock/getMockData.js +88 -51
- package/dist/js/node/dev-tools/mock/index.js +62 -28
- package/dist/js/node/dev-tools/register/index.js +98 -65
- package/dist/js/node/dev-tools/watcher/dependency-tree.js +50 -43
- package/dist/js/node/dev-tools/watcher/index.js +79 -47
- package/dist/js/node/dev-tools/watcher/stats-cache.js +40 -30
- package/dist/js/node/index.js +25 -15
- package/dist/js/node/server/dev-server.js +235 -236
- package/dist/js/node/server/index.js +26 -11
- package/dist/js/treeshaking/constants.js +21 -0
- package/dist/js/treeshaking/dev-tools/dev-middleware/dev-server-plugin.js +74 -0
- package/dist/js/treeshaking/dev-tools/dev-middleware/hmr-client/createSocketUrl.js +51 -0
- package/dist/js/treeshaking/dev-tools/dev-middleware/hmr-client/index.js +157 -0
- package/dist/js/treeshaking/dev-tools/dev-middleware/hmr-client/types.d.js +1 -0
- package/dist/js/treeshaking/dev-tools/dev-middleware/index.js +363 -0
- package/dist/js/treeshaking/dev-tools/dev-middleware/socket-server.js +209 -0
- package/dist/js/treeshaking/dev-tools/https/global.d.js +1 -0
- package/dist/js/treeshaking/dev-tools/https/index.js +161 -0
- package/dist/js/treeshaking/dev-tools/mock/getMockData.js +327 -0
- package/dist/js/treeshaking/dev-tools/mock/index.js +191 -0
- package/dist/js/treeshaking/dev-tools/register/index.js +153 -0
- package/dist/js/treeshaking/dev-tools/watcher/dependency-tree.js +150 -0
- package/dist/js/treeshaking/dev-tools/watcher/index.js +200 -0
- package/dist/js/treeshaking/dev-tools/watcher/stats-cache.js +128 -0
- package/dist/js/treeshaking/index.js +9 -0
- package/dist/js/treeshaking/server/dev-server.js +800 -0
- package/dist/js/treeshaking/server/index.js +92 -0
- package/dist/js/treeshaking/types.js +1 -0
- package/dist/types/dev-tools/mock/getMockData.d.ts +2 -0
- package/dist/types/dev-tools/watcher/dependency-tree.d.ts +2 -0
- package/dist/types/dev-tools/watcher/index.d.ts +1 -17
- package/dist/types/index.d.ts +2 -0
- package/package.json +19 -16
- package/temp-fix-hmr.js +483 -0
|
@@ -1,59 +1,71 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
var __async = (__this, __arguments, generator) => {
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
var fulfilled = (value) => {
|
|
20
|
+
try {
|
|
21
|
+
step(generator.next(value));
|
|
22
|
+
} catch (e) {
|
|
23
|
+
reject(e);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
var rejected = (value) => {
|
|
27
|
+
try {
|
|
28
|
+
step(generator.throw(value));
|
|
29
|
+
} catch (e) {
|
|
30
|
+
reject(e);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
34
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
import { EventEmitter } from "events";
|
|
38
|
+
import webpackDevMiddleware from "@modern-js/utils/webpack-dev-middleware";
|
|
6
39
|
import DevServerPlugin from "./dev-server-plugin";
|
|
7
40
|
import SocketServer from "./socket-server";
|
|
8
41
|
const noop = () => {
|
|
9
|
-
// noop
|
|
10
42
|
};
|
|
11
|
-
|
|
12
|
-
constructor({
|
|
13
|
-
compiler,
|
|
14
|
-
dev,
|
|
15
|
-
devMiddleware
|
|
16
|
-
}) {
|
|
43
|
+
class DevMiddleware extends EventEmitter {
|
|
44
|
+
constructor({ compiler, dev, devMiddleware }) {
|
|
17
45
|
super();
|
|
18
|
-
_defineProperty(this, "middleware", void 0);
|
|
19
|
-
_defineProperty(this, "compiler", void 0);
|
|
20
|
-
_defineProperty(this, "devOptions", void 0);
|
|
21
|
-
_defineProperty(this, "socketServer", void 0);
|
|
22
46
|
this.compiler = compiler;
|
|
23
47
|
this.devOptions = dev;
|
|
24
|
-
|
|
25
|
-
// init socket server
|
|
26
48
|
this.socketServer = new SocketServer(dev);
|
|
27
|
-
|
|
28
|
-
// Todo: should remove after abstract dev middleware
|
|
29
49
|
if (this.compiler) {
|
|
30
|
-
// setup compiler in server, also add dev-middleware to handler static file in memory
|
|
31
|
-
// set up plugin to each compiler
|
|
32
50
|
this.setupDevServerPlugin();
|
|
33
|
-
// register hooks for each compilation, update socket stats if recompiled
|
|
34
51
|
this.setupHooks();
|
|
35
|
-
// start dev middleware
|
|
36
52
|
this.middleware = this.setupDevMiddleware(devMiddleware);
|
|
37
53
|
}
|
|
38
54
|
}
|
|
39
55
|
init(app) {
|
|
40
|
-
app.on(
|
|
56
|
+
app.on("listening", () => {
|
|
41
57
|
this.socketServer.prepare(app);
|
|
42
58
|
});
|
|
43
|
-
app.on(
|
|
44
|
-
var
|
|
45
|
-
(
|
|
59
|
+
app.on("close", () => __async(this, null, function* () {
|
|
60
|
+
var _a;
|
|
61
|
+
(_a = this.middleware) == null ? void 0 : _a.close(noop);
|
|
46
62
|
this.socketServer.close();
|
|
47
|
-
});
|
|
63
|
+
}));
|
|
48
64
|
}
|
|
49
65
|
setupDevServerPlugin() {
|
|
50
|
-
const {
|
|
51
|
-
devOptions
|
|
52
|
-
} = this;
|
|
53
|
-
|
|
54
|
-
// apply dev server to client compiler, add hmr client to entry.
|
|
66
|
+
const { devOptions } = this;
|
|
55
67
|
if (this.compiler.compilers) {
|
|
56
|
-
this.compiler.compilers.forEach(target => {
|
|
68
|
+
this.compiler.compilers.forEach((target) => {
|
|
57
69
|
if (this.isClientCompiler(target)) {
|
|
58
70
|
new DevServerPlugin(devOptions).apply(target);
|
|
59
71
|
}
|
|
@@ -67,22 +79,18 @@ export default class DevMiddleware extends EventEmitter {
|
|
|
67
79
|
}
|
|
68
80
|
setupHooks() {
|
|
69
81
|
const invalidPlugin = () => {
|
|
70
|
-
this.socketServer.sockWrite(
|
|
82
|
+
this.socketServer.sockWrite("invalid");
|
|
71
83
|
};
|
|
72
|
-
const addHooks = compiler => {
|
|
73
|
-
if (compiler.name ===
|
|
84
|
+
const addHooks = (compiler) => {
|
|
85
|
+
if (compiler.name === "server") {
|
|
74
86
|
return;
|
|
75
87
|
}
|
|
76
|
-
const {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
} = compiler.hooks;
|
|
81
|
-
compile.tap('modern-dev-server', invalidPlugin);
|
|
82
|
-
invalid.tap('modern-dev-server', invalidPlugin);
|
|
83
|
-
done.tap('modern-dev-server', stats => {
|
|
88
|
+
const { compile, invalid, done } = compiler.hooks;
|
|
89
|
+
compile.tap("modern-dev-server", invalidPlugin);
|
|
90
|
+
invalid.tap("modern-dev-server", invalidPlugin);
|
|
91
|
+
done.tap("modern-dev-server", (stats) => {
|
|
84
92
|
this.socketServer.updateStats(stats);
|
|
85
|
-
this.emit(
|
|
93
|
+
this.emit("change", stats);
|
|
86
94
|
});
|
|
87
95
|
};
|
|
88
96
|
if (this.compiler.compilers) {
|
|
@@ -92,27 +100,24 @@ export default class DevMiddleware extends EventEmitter {
|
|
|
92
100
|
}
|
|
93
101
|
}
|
|
94
102
|
setupDevMiddleware(devMiddleware = webpackDevMiddleware) {
|
|
95
|
-
const {
|
|
96
|
-
|
|
97
|
-
} = this;
|
|
98
|
-
const middleware = devMiddleware(this.compiler, _objectSpread({
|
|
103
|
+
const { devOptions } = this;
|
|
104
|
+
const middleware = devMiddleware(this.compiler, __spreadValues({
|
|
99
105
|
headers: devOptions.headers,
|
|
100
106
|
stats: false
|
|
101
107
|
}, devOptions.devMiddleware));
|
|
102
108
|
return middleware;
|
|
103
109
|
}
|
|
104
110
|
isClientCompiler(compiler) {
|
|
105
|
-
const {
|
|
106
|
-
target
|
|
107
|
-
} = compiler.options;
|
|
108
|
-
|
|
109
|
-
// if target not contains `node`, it's a client compiler
|
|
111
|
+
const { target } = compiler.options;
|
|
110
112
|
if (target) {
|
|
111
113
|
if (Array.isArray(target)) {
|
|
112
|
-
return !target.includes(
|
|
114
|
+
return !target.includes("node");
|
|
113
115
|
}
|
|
114
|
-
return target !==
|
|
116
|
+
return target !== "node";
|
|
115
117
|
}
|
|
116
|
-
return compiler.name ===
|
|
118
|
+
return compiler.name === "client";
|
|
117
119
|
}
|
|
118
|
-
}
|
|
120
|
+
}
|
|
121
|
+
export {
|
|
122
|
+
DevMiddleware as default
|
|
123
|
+
};
|
|
@@ -1,53 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
export default class SocketServer {
|
|
1
|
+
import ws from "ws";
|
|
2
|
+
import { logger } from "@modern-js/utils";
|
|
3
|
+
class SocketServer {
|
|
5
4
|
constructor(options) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
_defineProperty(this, "options", void 0);
|
|
9
|
-
_defineProperty(this, "app", void 0);
|
|
10
|
-
_defineProperty(this, "stats", void 0);
|
|
11
|
-
_defineProperty(this, "timer", null);
|
|
5
|
+
this.sockets = [];
|
|
6
|
+
this.timer = null;
|
|
12
7
|
this.options = options;
|
|
13
8
|
}
|
|
14
|
-
|
|
15
|
-
// create socket, install socket handler, bind socket event
|
|
16
9
|
prepare(app) {
|
|
17
|
-
var
|
|
10
|
+
var _a;
|
|
18
11
|
this.app = app;
|
|
19
12
|
this.wsServer = new ws.Server({
|
|
20
13
|
noServer: true,
|
|
21
|
-
path: (
|
|
14
|
+
path: (_a = this.options.client) == null ? void 0 : _a.path
|
|
22
15
|
});
|
|
23
|
-
|
|
24
|
-
// listen upgrade event to handle socket
|
|
25
|
-
this.app.on('upgrade', (req, sock, head) => {
|
|
16
|
+
this.app.on("upgrade", (req, sock, head) => {
|
|
26
17
|
if (!this.wsServer.shouldHandle(req)) {
|
|
27
18
|
return;
|
|
28
19
|
}
|
|
29
|
-
this.wsServer.handleUpgrade(req, sock, head, connection => {
|
|
30
|
-
this.wsServer.emit(
|
|
20
|
+
this.wsServer.handleUpgrade(req, sock, head, (connection) => {
|
|
21
|
+
this.wsServer.emit("connection", connection, req);
|
|
31
22
|
});
|
|
32
23
|
});
|
|
33
|
-
this.wsServer.on(
|
|
34
|
-
// only dev server, use default logger
|
|
24
|
+
this.wsServer.on("error", (err) => {
|
|
35
25
|
logger.error(err);
|
|
36
26
|
});
|
|
37
27
|
this.timer = setInterval(() => {
|
|
38
|
-
this.wsServer.clients.forEach(socket => {
|
|
28
|
+
this.wsServer.clients.forEach((socket) => {
|
|
39
29
|
const extWs = socket;
|
|
40
30
|
if (!extWs.isAlive) {
|
|
41
31
|
extWs.terminate();
|
|
42
32
|
} else {
|
|
43
33
|
extWs.isAlive = false;
|
|
44
34
|
extWs.ping(() => {
|
|
45
|
-
// empty
|
|
46
35
|
});
|
|
47
36
|
}
|
|
48
37
|
});
|
|
49
|
-
},
|
|
50
|
-
this.wsServer.on(
|
|
38
|
+
}, 3e4);
|
|
39
|
+
this.wsServer.on("connection", (socket) => {
|
|
51
40
|
this.onConnect(socket);
|
|
52
41
|
});
|
|
53
42
|
}
|
|
@@ -55,24 +44,16 @@ export default class SocketServer {
|
|
|
55
44
|
this.stats = stats;
|
|
56
45
|
this.sendStats();
|
|
57
46
|
}
|
|
58
|
-
|
|
59
|
-
// write message to each socket
|
|
60
47
|
sockWrite(type, data) {
|
|
61
|
-
this.sockets.forEach(socket => {
|
|
62
|
-
this.send(socket, JSON.stringify({
|
|
63
|
-
type,
|
|
64
|
-
data
|
|
65
|
-
}));
|
|
48
|
+
this.sockets.forEach((socket) => {
|
|
49
|
+
this.send(socket, JSON.stringify({ type, data }));
|
|
66
50
|
});
|
|
67
51
|
}
|
|
68
52
|
singleWrite(socket, type, data) {
|
|
69
|
-
this.send(socket, JSON.stringify({
|
|
70
|
-
type,
|
|
71
|
-
data
|
|
72
|
-
}));
|
|
53
|
+
this.send(socket, JSON.stringify({ type, data }));
|
|
73
54
|
}
|
|
74
55
|
close() {
|
|
75
|
-
this.sockets.forEach(socket => {
|
|
56
|
+
this.sockets.forEach((socket) => {
|
|
76
57
|
socket.close();
|
|
77
58
|
});
|
|
78
59
|
if (this.timer) {
|
|
@@ -83,33 +64,29 @@ export default class SocketServer {
|
|
|
83
64
|
onConnect(socket) {
|
|
84
65
|
const connection = socket;
|
|
85
66
|
connection.isAlive = true;
|
|
86
|
-
connection.on(
|
|
67
|
+
connection.on("pong", () => {
|
|
87
68
|
connection.isAlive = true;
|
|
88
69
|
});
|
|
89
70
|
if (!connection) {
|
|
90
71
|
return;
|
|
91
72
|
}
|
|
92
73
|
this.sockets.push(connection);
|
|
93
|
-
connection.on(
|
|
74
|
+
connection.on("close", () => {
|
|
94
75
|
const idx = this.sockets.indexOf(connection);
|
|
95
76
|
if (idx >= 0) {
|
|
96
77
|
this.sockets.splice(idx, 1);
|
|
97
78
|
}
|
|
98
79
|
});
|
|
99
|
-
if (this.options.hot || this.options.hot ===
|
|
100
|
-
this.singleWrite(connection,
|
|
80
|
+
if (this.options.hot || this.options.hot === "only") {
|
|
81
|
+
this.singleWrite(connection, "hot");
|
|
101
82
|
}
|
|
102
83
|
if (this.options.liveReload) {
|
|
103
|
-
this.singleWrite(connection,
|
|
84
|
+
this.singleWrite(connection, "liveReload");
|
|
104
85
|
}
|
|
105
|
-
|
|
106
|
-
// send first stats to active client sock if stats exist
|
|
107
86
|
if (this.stats) {
|
|
108
87
|
this.sendStats(true);
|
|
109
88
|
}
|
|
110
89
|
}
|
|
111
|
-
|
|
112
|
-
// get standard stats
|
|
113
90
|
getStats() {
|
|
114
91
|
const curStats = this.stats;
|
|
115
92
|
if (!curStats) {
|
|
@@ -125,34 +102,31 @@ export default class SocketServer {
|
|
|
125
102
|
};
|
|
126
103
|
return curStats.toJson(defaultStats);
|
|
127
104
|
}
|
|
128
|
-
|
|
129
|
-
// determine what message should send by stats
|
|
130
105
|
sendStats(force = false) {
|
|
131
106
|
const stats = this.getStats();
|
|
132
|
-
|
|
133
|
-
// this should never happened
|
|
134
107
|
if (!stats) {
|
|
135
108
|
return null;
|
|
136
109
|
}
|
|
137
|
-
const shouldEmit = !force && stats && (!stats.errors || stats.errors.length === 0) && stats.assets && stats.assets.every(asset => !asset.emitted);
|
|
110
|
+
const shouldEmit = !force && stats && (!stats.errors || stats.errors.length === 0) && stats.assets && stats.assets.every((asset) => !asset.emitted);
|
|
138
111
|
if (shouldEmit) {
|
|
139
|
-
return this.sockWrite(
|
|
112
|
+
return this.sockWrite("still-ok");
|
|
140
113
|
}
|
|
141
|
-
this.sockWrite(
|
|
114
|
+
this.sockWrite("hash", stats.hash);
|
|
142
115
|
if (stats.errors && stats.errors.length > 0) {
|
|
143
|
-
return this.sockWrite(
|
|
116
|
+
return this.sockWrite("errors", stats.errors);
|
|
144
117
|
} else if (stats.warnings && stats.warnings.length > 0) {
|
|
145
|
-
return this.sockWrite(
|
|
118
|
+
return this.sockWrite("warnings", stats.warnings);
|
|
146
119
|
} else {
|
|
147
|
-
return this.sockWrite(
|
|
120
|
+
return this.sockWrite("ok");
|
|
148
121
|
}
|
|
149
122
|
}
|
|
150
|
-
|
|
151
|
-
// send message to connecting socket
|
|
152
123
|
send(connection, message) {
|
|
153
124
|
if (connection.readyState !== 1) {
|
|
154
125
|
return;
|
|
155
126
|
}
|
|
156
127
|
connection.send(message);
|
|
157
128
|
}
|
|
158
|
-
}
|
|
129
|
+
}
|
|
130
|
+
export {
|
|
131
|
+
SocketServer as default
|
|
132
|
+
};
|
|
File without changes
|
|
@@ -1,9 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
var __async = (__this, __arguments, generator) => {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
var fulfilled = (value) => {
|
|
4
|
+
try {
|
|
5
|
+
step(generator.next(value));
|
|
6
|
+
} catch (e) {
|
|
7
|
+
reject(e);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var rejected = (value) => {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.throw(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
import * as devcert from "devcert";
|
|
22
|
+
const genHttpsOptions = (userOptions) => __async(void 0, null, function* () {
|
|
23
|
+
const httpsOptions = typeof userOptions === "boolean" ? {} : userOptions;
|
|
4
24
|
if (!httpsOptions.key || !httpsOptions.cert) {
|
|
5
|
-
const selfsign =
|
|
25
|
+
const selfsign = yield devcert.certificateFor(["localhost"]);
|
|
6
26
|
return selfsign;
|
|
7
27
|
}
|
|
8
28
|
return httpsOptions;
|
|
9
|
-
};
|
|
29
|
+
});
|
|
30
|
+
export {
|
|
31
|
+
genHttpsOptions
|
|
32
|
+
};
|
|
@@ -1,48 +1,78 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
16
18
|
};
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
var __async = (__this, __arguments, generator) => {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
var fulfilled = (value) => {
|
|
23
|
+
try {
|
|
24
|
+
step(generator.next(value));
|
|
25
|
+
} catch (e) {
|
|
26
|
+
reject(e);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
var rejected = (value) => {
|
|
30
|
+
try {
|
|
31
|
+
step(generator.throw(value));
|
|
32
|
+
} catch (e) {
|
|
33
|
+
reject(e);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
37
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
import { compatRequire } from "@modern-js/utils";
|
|
41
|
+
import { match } from "path-to-regexp";
|
|
42
|
+
const VALID_METHODS = ["get", "post", "put", "delete", "patch"];
|
|
43
|
+
const BODY_PARSED_METHODS = ["post", "put", "delete", "patch"];
|
|
44
|
+
const createFunctionDataHandler = (method, handler) => (context, next) => __async(void 0, null, function* () {
|
|
45
|
+
const { req, res } = context;
|
|
46
|
+
return handler(req, res, next);
|
|
47
|
+
});
|
|
48
|
+
const createStaticDataHandler = (method, handler) => (context) => {
|
|
49
|
+
const { res } = context;
|
|
50
|
+
res.setHeader("Content-Type", "application/json");
|
|
22
51
|
res.end(JSON.stringify(handler));
|
|
23
52
|
};
|
|
24
|
-
const allowTypes = [
|
|
25
|
-
const normalizeConfig = mockConfig => Object.keys(mockConfig).reduce((acc, key) => {
|
|
53
|
+
const allowTypes = ["object", "function"];
|
|
54
|
+
const normalizeConfig = (mockConfig) => Object.keys(mockConfig).reduce((acc, key) => {
|
|
26
55
|
const handler = mockConfig[key];
|
|
27
56
|
const type = typeof handler;
|
|
28
57
|
if (!allowTypes.includes(type)) {
|
|
29
|
-
throw new Error(
|
|
58
|
+
throw new Error(
|
|
59
|
+
`mock value of ${key} should be object or function, but got ${type}`
|
|
60
|
+
);
|
|
30
61
|
}
|
|
31
62
|
const meta = parseKey(key);
|
|
32
|
-
if (type ===
|
|
33
|
-
acc.push(
|
|
63
|
+
if (type === "object") {
|
|
64
|
+
acc.push(__spreadProps(__spreadValues({}, meta), {
|
|
34
65
|
handler: createStaticDataHandler(meta.method, handler)
|
|
35
66
|
}));
|
|
36
67
|
} else {
|
|
37
|
-
acc.push(
|
|
68
|
+
acc.push(__spreadProps(__spreadValues({}, meta), {
|
|
38
69
|
handler: createFunctionDataHandler(meta.method, handler)
|
|
39
70
|
}));
|
|
40
71
|
}
|
|
41
72
|
return acc;
|
|
42
73
|
}, []);
|
|
43
|
-
const _blank =
|
|
44
|
-
const parseKey = key => {
|
|
45
|
-
// 'Method /pathname' | '/pathname'
|
|
74
|
+
const _blank = " ";
|
|
75
|
+
const parseKey = (key) => {
|
|
46
76
|
const splitted = key.split(_blank).filter(Boolean);
|
|
47
77
|
if (splitted.length > 1) {
|
|
48
78
|
const [method, pathname] = splitted;
|
|
@@ -51,31 +81,23 @@ const parseKey = key => {
|
|
|
51
81
|
path: pathname
|
|
52
82
|
};
|
|
53
83
|
}
|
|
54
|
-
|
|
55
|
-
// default return get method
|
|
56
84
|
return {
|
|
57
|
-
method:
|
|
85
|
+
method: "get",
|
|
58
86
|
path: key
|
|
59
87
|
};
|
|
60
88
|
};
|
|
61
|
-
|
|
89
|
+
var getMockData_default = (filepath) => {
|
|
62
90
|
const mockModule = compatRequire(filepath);
|
|
63
91
|
if (!mockModule) {
|
|
64
92
|
throw new Error(`Mock file ${filepath} parsed failed!`);
|
|
65
93
|
}
|
|
66
94
|
const data = normalizeConfig(mockModule);
|
|
67
95
|
return data;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const {
|
|
71
|
-
|
|
72
|
-
method:
|
|
73
|
-
} = context;
|
|
74
|
-
const matched = mockApiList.find(mockApi => {
|
|
75
|
-
const {
|
|
76
|
-
method,
|
|
77
|
-
path: pathname
|
|
78
|
-
} = mockApi;
|
|
96
|
+
};
|
|
97
|
+
const getMatched = (context, mockApiList) => {
|
|
98
|
+
const { path: targetPathname, method: targetMethod } = context;
|
|
99
|
+
const matched = mockApiList.find((mockApi) => {
|
|
100
|
+
const { method, path: pathname } = mockApi;
|
|
79
101
|
if (method.toLowerCase() === targetMethod.toLowerCase()) {
|
|
80
102
|
return match(pathname, {
|
|
81
103
|
encode: encodeURI,
|
|
@@ -85,4 +107,8 @@ export const getMatched = (context, mockApiList) => {
|
|
|
85
107
|
return false;
|
|
86
108
|
});
|
|
87
109
|
return matched;
|
|
88
|
-
};
|
|
110
|
+
};
|
|
111
|
+
export {
|
|
112
|
+
getMockData_default as default,
|
|
113
|
+
getMatched
|
|
114
|
+
};
|
|
@@ -1,12 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
var __async = (__this, __arguments, generator) => {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
var fulfilled = (value) => {
|
|
4
|
+
try {
|
|
5
|
+
step(generator.next(value));
|
|
6
|
+
} catch (e) {
|
|
7
|
+
reject(e);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var rejected = (value) => {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.throw(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
import path from "path";
|
|
22
|
+
import { fs } from "@modern-js/utils";
|
|
23
|
+
import { AGGRED_DIR } from "@modern-js/prod-server";
|
|
4
24
|
import getMockData, { getMatched } from "./getMockData";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const exts = ['.ts', '.js'];
|
|
9
|
-
let filepath = '';
|
|
25
|
+
const createMockHandler = ({ pwd }) => {
|
|
26
|
+
const exts = [".ts", ".js"];
|
|
27
|
+
let filepath = "";
|
|
10
28
|
for (const ext of exts) {
|
|
11
29
|
const maybeMatch = path.join(pwd, `${AGGRED_DIR.mock}/index${ext}`);
|
|
12
30
|
if (fs.existsSync(maybeMatch)) {
|
|
@@ -21,15 +39,16 @@ export const createMockHandler = ({
|
|
|
21
39
|
if (!apiList || apiList.length === 0) {
|
|
22
40
|
return null;
|
|
23
41
|
}
|
|
24
|
-
return
|
|
25
|
-
const {
|
|
26
|
-
res
|
|
27
|
-
} = context;
|
|
42
|
+
return (context, next) => __async(void 0, null, function* () {
|
|
43
|
+
const { res } = context;
|
|
28
44
|
const matched = getMatched(context, apiList);
|
|
29
45
|
if (!matched) {
|
|
30
46
|
return next();
|
|
31
47
|
}
|
|
32
|
-
res.setHeader(
|
|
48
|
+
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
33
49
|
return matched.handler(context, next);
|
|
34
|
-
};
|
|
35
|
-
};
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
export {
|
|
53
|
+
createMockHandler
|
|
54
|
+
};
|