vite-plugin-mock-dev-server 0.2.1 → 0.2.3
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/README.md +20 -2
- package/dist/index.cjs +38 -12
- package/dist/index.js +38 -12
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -8,7 +8,9 @@ vite mock开发服务(mock-dev-server)插件。
|
|
|
8
8
|
|
|
9
9
|
- ⚡️ 轻量,灵活,快速
|
|
10
10
|
- 🧲 非注入式,对客户端代码无侵入
|
|
11
|
+
- 💡 ESModule
|
|
11
12
|
- 🦾 Typescript
|
|
13
|
+
- 🏷 支持 json / json5 编写 mock 数据
|
|
12
14
|
- 📦 自动加载 mock 文件
|
|
13
15
|
- 🎨 可选择你喜欢的任意用于生成mock数据库,如 `mockjs`,或者不是用其他库
|
|
14
16
|
- 📥 路径规则匹配,请求参数匹配
|
|
@@ -101,7 +103,7 @@ export default defineConfig({
|
|
|
101
103
|
|
|
102
104
|
配置读取 mock文件,可以是一个 目录,glob,或者一个数组
|
|
103
105
|
|
|
104
|
-
默认值: `['mock/**/*.mock
|
|
106
|
+
默认值: `['mock/**/*.mock.{js,ts,cjs,mjs,json,json5}']` (相对于根目录)
|
|
105
107
|
|
|
106
108
|
- `options.exclude`
|
|
107
109
|
|
|
@@ -232,7 +234,11 @@ export default defineMock({
|
|
|
232
234
|
|
|
233
235
|
```
|
|
234
236
|
|
|
235
|
-
|
|
237
|
+
> 注意:
|
|
238
|
+
>
|
|
239
|
+
> 如果使用 json/json5 编写 mock文件,则不支持使用 `response` 方法,以及不支持使用其他字段的函数形式。
|
|
240
|
+
|
|
241
|
+
`mock/**/*.mock.{ts,js,mjs,cjs,json,json5}`
|
|
236
242
|
|
|
237
243
|
查看更多示例: [example](/example/)
|
|
238
244
|
|
|
@@ -369,3 +375,15 @@ export default defineMock({
|
|
|
369
375
|
}
|
|
370
376
|
})
|
|
371
377
|
```
|
|
378
|
+
|
|
379
|
+
### 示例10:
|
|
380
|
+
使用 json / json5
|
|
381
|
+
```json
|
|
382
|
+
{
|
|
383
|
+
// 支持 comment
|
|
384
|
+
"url": "/api/test",
|
|
385
|
+
"body": {
|
|
386
|
+
"a": 1
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
```
|
package/dist/index.cjs
CHANGED
|
@@ -44,6 +44,7 @@ var import_pluginutils = require("@rollup/pluginutils");
|
|
|
44
44
|
var import_chokidar = __toESM(require("chokidar"), 1);
|
|
45
45
|
var import_esbuild = require("esbuild");
|
|
46
46
|
var import_fast_glob = __toESM(require("fast-glob"), 1);
|
|
47
|
+
var import_json5 = __toESM(require("json5"), 1);
|
|
47
48
|
|
|
48
49
|
// src/utils.ts
|
|
49
50
|
var import_promises = __toESM(require("fs/promises"), 1);
|
|
@@ -65,7 +66,7 @@ async function getPackageDeps(cwd) {
|
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
// src/MockLoader.ts
|
|
68
|
-
var
|
|
69
|
+
var _MockLoader = class extends import_node_events.default {
|
|
69
70
|
constructor(options) {
|
|
70
71
|
super();
|
|
71
72
|
this.moduleCache = /* @__PURE__ */ new Map();
|
|
@@ -183,21 +184,42 @@ var MockLoader = class extends import_node_events.default {
|
|
|
183
184
|
async loadModule(filepath) {
|
|
184
185
|
if (!filepath)
|
|
185
186
|
return;
|
|
186
|
-
|
|
187
|
+
if (_MockLoader.EXT_JSON.test(filepath)) {
|
|
188
|
+
await this.loadJson(filepath);
|
|
189
|
+
} else {
|
|
190
|
+
await this.loadESModule(filepath);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
async loadJson(filepath) {
|
|
194
|
+
const content = await import_promises2.default.readFile(filepath, "utf-8");
|
|
195
|
+
try {
|
|
196
|
+
const mockConfig = import_json5.default.parse(content);
|
|
197
|
+
this.moduleCache.set(filepath, mockConfig);
|
|
198
|
+
} catch (e) {
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async loadESModule(filepath) {
|
|
202
|
+
if (!filepath)
|
|
203
|
+
return;
|
|
204
|
+
const { code, deps } = await this.transformWithEsbuild(filepath);
|
|
187
205
|
const tempFile = import_node_path2.default.join(
|
|
188
206
|
this.cwd,
|
|
189
207
|
this.tempDir,
|
|
190
|
-
filepath.replace(/\.ts$/, ".mjs")
|
|
208
|
+
filepath.replace(/\.(ts|js|cjs)$/, ".mjs")
|
|
191
209
|
);
|
|
192
|
-
const
|
|
193
|
-
await import_promises2.default.mkdir(
|
|
210
|
+
const tempDirname = import_node_path2.default.dirname(tempFile);
|
|
211
|
+
await import_promises2.default.mkdir(tempDirname, { recursive: true });
|
|
194
212
|
await import_promises2.default.writeFile(tempFile, code, "utf8");
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
213
|
+
try {
|
|
214
|
+
const handle = await import(`${tempFile}?${Date.now()}`);
|
|
215
|
+
const mockConfig = handle && handle.default ? handle.default : Object.keys(handle || {}).map((key) => handle[key]);
|
|
216
|
+
this.moduleCache.set(filepath, mockConfig);
|
|
217
|
+
this.updateModuleDeps(filepath, deps);
|
|
218
|
+
} catch (e) {
|
|
219
|
+
console.error(e);
|
|
220
|
+
}
|
|
199
221
|
}
|
|
200
|
-
async
|
|
222
|
+
async transformWithEsbuild(filepath) {
|
|
201
223
|
var _a;
|
|
202
224
|
try {
|
|
203
225
|
const result = await (0, import_esbuild.build)({
|
|
@@ -217,7 +239,6 @@ var MockLoader = class extends import_node_events.default {
|
|
|
217
239
|
deps: ((_a = result.metafile) == null ? void 0 : _a.inputs) || {}
|
|
218
240
|
};
|
|
219
241
|
} catch (e) {
|
|
220
|
-
console.error(e);
|
|
221
242
|
}
|
|
222
243
|
return {
|
|
223
244
|
code: "",
|
|
@@ -225,6 +246,8 @@ var MockLoader = class extends import_node_events.default {
|
|
|
225
246
|
};
|
|
226
247
|
}
|
|
227
248
|
};
|
|
249
|
+
var MockLoader = _MockLoader;
|
|
250
|
+
MockLoader.EXT_JSON = /\.json5?$/;
|
|
228
251
|
|
|
229
252
|
// src/parseReqBody.ts
|
|
230
253
|
var import_co_body = __toESM(require("co-body"), 1);
|
|
@@ -322,6 +345,7 @@ async function mockServerMiddleware(httpServer, config, options) {
|
|
|
322
345
|
req.query = query;
|
|
323
346
|
req.params = params;
|
|
324
347
|
res.setHeader("Content-Type", "application/json");
|
|
348
|
+
res.setHeader("X-Mock", "generate by vite:mock-dev-server");
|
|
325
349
|
if (currentMock.headers) {
|
|
326
350
|
const headers = isFunction(currentMock.headers) ? await currentMock.headers({
|
|
327
351
|
query,
|
|
@@ -365,7 +389,7 @@ function doesProxyContextMatchUrl(context, url) {
|
|
|
365
389
|
|
|
366
390
|
// src/plugin.ts
|
|
367
391
|
function mockDevServerPlugin({
|
|
368
|
-
include = ["mock/**/*.mock
|
|
392
|
+
include = ["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],
|
|
369
393
|
exclude = [
|
|
370
394
|
"**/node_modules/**",
|
|
371
395
|
"**/test/**",
|
|
@@ -378,6 +402,8 @@ function mockDevServerPlugin({
|
|
|
378
402
|
} = {}) {
|
|
379
403
|
return {
|
|
380
404
|
name: "vite-plugin-mock-dev-server",
|
|
405
|
+
enforce: "pre",
|
|
406
|
+
apply: "serve",
|
|
381
407
|
async configureServer({ middlewares, config, httpServer }) {
|
|
382
408
|
const middleware = await mockServerMiddleware(httpServer, config, {
|
|
383
409
|
include,
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ import { createFilter } from "@rollup/pluginutils";
|
|
|
10
10
|
import chokidar from "chokidar";
|
|
11
11
|
import { build } from "esbuild";
|
|
12
12
|
import fastGlob from "fast-glob";
|
|
13
|
+
import JSON5 from "json5";
|
|
13
14
|
|
|
14
15
|
// src/utils.ts
|
|
15
16
|
import fs from "fs/promises";
|
|
@@ -31,7 +32,7 @@ async function getPackageDeps(cwd) {
|
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
// src/MockLoader.ts
|
|
34
|
-
var
|
|
35
|
+
var _MockLoader = class extends EventEmitter {
|
|
35
36
|
constructor(options) {
|
|
36
37
|
super();
|
|
37
38
|
this.moduleCache = /* @__PURE__ */ new Map();
|
|
@@ -149,21 +150,42 @@ var MockLoader = class extends EventEmitter {
|
|
|
149
150
|
async loadModule(filepath) {
|
|
150
151
|
if (!filepath)
|
|
151
152
|
return;
|
|
152
|
-
|
|
153
|
+
if (_MockLoader.EXT_JSON.test(filepath)) {
|
|
154
|
+
await this.loadJson(filepath);
|
|
155
|
+
} else {
|
|
156
|
+
await this.loadESModule(filepath);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async loadJson(filepath) {
|
|
160
|
+
const content = await fs2.readFile(filepath, "utf-8");
|
|
161
|
+
try {
|
|
162
|
+
const mockConfig = JSON5.parse(content);
|
|
163
|
+
this.moduleCache.set(filepath, mockConfig);
|
|
164
|
+
} catch (e) {
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
async loadESModule(filepath) {
|
|
168
|
+
if (!filepath)
|
|
169
|
+
return;
|
|
170
|
+
const { code, deps } = await this.transformWithEsbuild(filepath);
|
|
153
171
|
const tempFile = path2.join(
|
|
154
172
|
this.cwd,
|
|
155
173
|
this.tempDir,
|
|
156
|
-
filepath.replace(/\.ts$/, ".mjs")
|
|
174
|
+
filepath.replace(/\.(ts|js|cjs)$/, ".mjs")
|
|
157
175
|
);
|
|
158
|
-
const
|
|
159
|
-
await fs2.mkdir(
|
|
176
|
+
const tempDirname = path2.dirname(tempFile);
|
|
177
|
+
await fs2.mkdir(tempDirname, { recursive: true });
|
|
160
178
|
await fs2.writeFile(tempFile, code, "utf8");
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
179
|
+
try {
|
|
180
|
+
const handle = await import(`${tempFile}?${Date.now()}`);
|
|
181
|
+
const mockConfig = handle && handle.default ? handle.default : Object.keys(handle || {}).map((key) => handle[key]);
|
|
182
|
+
this.moduleCache.set(filepath, mockConfig);
|
|
183
|
+
this.updateModuleDeps(filepath, deps);
|
|
184
|
+
} catch (e) {
|
|
185
|
+
console.error(e);
|
|
186
|
+
}
|
|
165
187
|
}
|
|
166
|
-
async
|
|
188
|
+
async transformWithEsbuild(filepath) {
|
|
167
189
|
var _a;
|
|
168
190
|
try {
|
|
169
191
|
const result = await build({
|
|
@@ -183,7 +205,6 @@ var MockLoader = class extends EventEmitter {
|
|
|
183
205
|
deps: ((_a = result.metafile) == null ? void 0 : _a.inputs) || {}
|
|
184
206
|
};
|
|
185
207
|
} catch (e) {
|
|
186
|
-
console.error(e);
|
|
187
208
|
}
|
|
188
209
|
return {
|
|
189
210
|
code: "",
|
|
@@ -191,6 +212,8 @@ var MockLoader = class extends EventEmitter {
|
|
|
191
212
|
};
|
|
192
213
|
}
|
|
193
214
|
};
|
|
215
|
+
var MockLoader = _MockLoader;
|
|
216
|
+
MockLoader.EXT_JSON = /\.json5?$/;
|
|
194
217
|
|
|
195
218
|
// src/parseReqBody.ts
|
|
196
219
|
import bodyParser from "co-body";
|
|
@@ -288,6 +311,7 @@ async function mockServerMiddleware(httpServer, config, options) {
|
|
|
288
311
|
req.query = query;
|
|
289
312
|
req.params = params;
|
|
290
313
|
res.setHeader("Content-Type", "application/json");
|
|
314
|
+
res.setHeader("X-Mock", "generate by vite:mock-dev-server");
|
|
291
315
|
if (currentMock.headers) {
|
|
292
316
|
const headers = isFunction(currentMock.headers) ? await currentMock.headers({
|
|
293
317
|
query,
|
|
@@ -331,7 +355,7 @@ function doesProxyContextMatchUrl(context, url) {
|
|
|
331
355
|
|
|
332
356
|
// src/plugin.ts
|
|
333
357
|
function mockDevServerPlugin({
|
|
334
|
-
include = ["mock/**/*.mock
|
|
358
|
+
include = ["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],
|
|
335
359
|
exclude = [
|
|
336
360
|
"**/node_modules/**",
|
|
337
361
|
"**/test/**",
|
|
@@ -344,6 +368,8 @@ function mockDevServerPlugin({
|
|
|
344
368
|
} = {}) {
|
|
345
369
|
return {
|
|
346
370
|
name: "vite-plugin-mock-dev-server",
|
|
371
|
+
enforce: "pre",
|
|
372
|
+
apply: "serve",
|
|
347
373
|
async configureServer({ middlewares, config, httpServer }) {
|
|
348
374
|
const middleware = await mockServerMiddleware(httpServer, config, {
|
|
349
375
|
include,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vite-plugin-mock-dev-server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"vite",
|
|
6
6
|
"plugin",
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
"debug": "^4.3.4",
|
|
49
49
|
"esbuild": "^0.15.12",
|
|
50
50
|
"fast-glob": "^3.2.12",
|
|
51
|
+
"json5": "^2.2.1",
|
|
51
52
|
"path-to-regexp": "^6.2.1",
|
|
52
53
|
"vite": "^3.2.0"
|
|
53
54
|
},
|