vite-plugin-mock-dev-server 1.6.0 → 1.7.0

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.
@@ -0,0 +1,73 @@
1
+ // src/core/defineMock.ts
2
+ import { isArray } from "@pengzhanbo/utils";
3
+ function defineMock(config) {
4
+ return config;
5
+ }
6
+ function createDefineMock(transformer) {
7
+ const define = (config) => {
8
+ if (isArray(config))
9
+ config = config.map((item) => transformer(item) || item);
10
+ else
11
+ config = transformer(config) || config;
12
+ return config;
13
+ };
14
+ return define;
15
+ }
16
+
17
+ // src/core/defineMockData.ts
18
+ import { deepClone, deepEqual, isFunction } from "@pengzhanbo/utils";
19
+ var mockDataCache = /* @__PURE__ */ new Map();
20
+ var responseCache = /* @__PURE__ */ new WeakMap();
21
+ var staleInterval = 70;
22
+ var CacheImpl = class {
23
+ value;
24
+ // 初始化数据的备份,用于 判断 传入的初始化数据是否发生变更
25
+ #initialValue;
26
+ #lastUpdate;
27
+ constructor(value) {
28
+ this.value = value;
29
+ this.#initialValue = deepClone(value);
30
+ this.#lastUpdate = Date.now();
31
+ }
32
+ hotUpdate(value) {
33
+ if (Date.now() - this.#lastUpdate < staleInterval)
34
+ return;
35
+ if (!deepEqual(value, this.#initialValue)) {
36
+ this.value = value;
37
+ this.#initialValue = deepClone(value);
38
+ this.#lastUpdate = Date.now();
39
+ }
40
+ }
41
+ };
42
+ function defineMockData(key, initialData) {
43
+ if (!mockDataCache.has(key))
44
+ mockDataCache.set(key, new CacheImpl(initialData));
45
+ const cache = mockDataCache.get(key);
46
+ cache.hotUpdate(initialData);
47
+ if (responseCache.has(cache))
48
+ return responseCache.get(cache);
49
+ const res = [
50
+ () => cache.value,
51
+ (val) => {
52
+ if (isFunction(val))
53
+ val = val(cache.value) ?? cache.value;
54
+ cache.value = val;
55
+ }
56
+ ];
57
+ Object.defineProperty(res, "value", {
58
+ get() {
59
+ return cache.value;
60
+ },
61
+ set(val) {
62
+ cache.value = val;
63
+ }
64
+ });
65
+ responseCache.set(cache, res);
66
+ return res;
67
+ }
68
+
69
+ export {
70
+ defineMock,
71
+ createDefineMock,
72
+ defineMockData
73
+ };
@@ -0,0 +1,10 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+ var _chunkFND5XIG2cjs = require('./chunk-FND5XIG2.cjs');
6
+
7
+
8
+
9
+
10
+ exports.createDefineMock = _chunkFND5XIG2cjs.createDefineMock; exports.defineMock = _chunkFND5XIG2cjs.defineMock; exports.defineMockData = _chunkFND5XIG2cjs.defineMockData;
@@ -0,0 +1,87 @@
1
+ import { b as MockHttpItem, c as MockWebsocketItem, a as MockOptions } from './types-D50kW_6z.cjs';
2
+ export { d as MockRequest } from './types-D50kW_6z.cjs';
3
+ import 'node:buffer';
4
+ import 'node:http';
5
+ import 'node:stream';
6
+ import 'cookies';
7
+ import 'cors';
8
+ import 'formidable';
9
+ import 'vite';
10
+ import 'ws';
11
+ import 'co-body';
12
+
13
+ /**
14
+ * mock config Type helper
15
+ *
16
+ * mock配置 类型帮助函数
17
+ * @param config see config docs:
18
+ * {@link https://vite-plugin-mock-dev-server.netlify.app/en/guide/mock-config en-US DOC} |
19
+ * {@link https://vite-plugin-mock-dev-server.netlify.app/guide/mock-config zh-CN DOC}
20
+ *
21
+ * @example
22
+ * Mock Http Request
23
+ * ```ts
24
+ * export default defineMock({
25
+ * url: '/api/example',
26
+ * method: ['GET', 'POST'],
27
+ * body: { a: 1 },
28
+ * })
29
+ * ```
30
+ * ```ts
31
+ * export default defineMock({
32
+ * url: '/api/example',
33
+ * method: 'GET',
34
+ * body: ({ query }) => ({ a: 1, b: query.b }),
35
+ * })
36
+ * ```
37
+ * @example
38
+ * Mock WebSocket
39
+ * ```ts
40
+ * export default defineMock({
41
+ * url: '/socket.io',
42
+ * ws: true,
43
+ * setup(wss) {
44
+ * wss.on('connection', (ws) => {
45
+ * ws.on('message', (rawData) => console.log(rawData))
46
+ * ws.send('data')
47
+ * })
48
+ * },
49
+ * })
50
+ * ```
51
+ */
52
+ declare function defineMock(config: MockHttpItem): MockHttpItem;
53
+ declare function defineMock(config: MockWebsocketItem): MockWebsocketItem;
54
+ declare function defineMock(config: MockOptions): MockOptions;
55
+ /**
56
+ * Return a custom defineMock function to support preprocessing of mock config.
57
+ *
58
+ * 返回一个自定义的 defineMock 函数,用于支持对 mock config 的预处理。
59
+ * @param transformer preprocessing function
60
+ * @example
61
+ * ```ts
62
+ * const definePostMock = createDefineMock((mock) => {
63
+ * mock.url = '/api/post/' + mock.url
64
+ * })
65
+ * export default definePostMock({
66
+ * url: 'list',
67
+ * body: [{ title: '1' }, { title: '2' }],
68
+ * })
69
+ * ```
70
+ */
71
+ declare function createDefineMock(transformer: (mock: MockHttpItem | MockWebsocketItem) => MockHttpItem | MockWebsocketItem | void): typeof defineMock;
72
+
73
+ type MockData<T = any> = readonly [
74
+ /**
75
+ * getter
76
+ */
77
+ () => T,
78
+ /**
79
+ * setter
80
+ */
81
+ (val: T | ((val: T) => T | void)) => void
82
+ ] & {
83
+ value: T;
84
+ };
85
+ declare function defineMockData<T = any>(key: string, initialData: T): MockData<T>;
86
+
87
+ export { type MockData, MockHttpItem, MockOptions, MockWebsocketItem, createDefineMock, defineMock, defineMockData };
@@ -0,0 +1,87 @@
1
+ import { b as MockHttpItem, c as MockWebsocketItem, a as MockOptions } from './types-D50kW_6z.js';
2
+ export { d as MockRequest } from './types-D50kW_6z.js';
3
+ import 'node:buffer';
4
+ import 'node:http';
5
+ import 'node:stream';
6
+ import 'cookies';
7
+ import 'cors';
8
+ import 'formidable';
9
+ import 'vite';
10
+ import 'ws';
11
+ import 'co-body';
12
+
13
+ /**
14
+ * mock config Type helper
15
+ *
16
+ * mock配置 类型帮助函数
17
+ * @param config see config docs:
18
+ * {@link https://vite-plugin-mock-dev-server.netlify.app/en/guide/mock-config en-US DOC} |
19
+ * {@link https://vite-plugin-mock-dev-server.netlify.app/guide/mock-config zh-CN DOC}
20
+ *
21
+ * @example
22
+ * Mock Http Request
23
+ * ```ts
24
+ * export default defineMock({
25
+ * url: '/api/example',
26
+ * method: ['GET', 'POST'],
27
+ * body: { a: 1 },
28
+ * })
29
+ * ```
30
+ * ```ts
31
+ * export default defineMock({
32
+ * url: '/api/example',
33
+ * method: 'GET',
34
+ * body: ({ query }) => ({ a: 1, b: query.b }),
35
+ * })
36
+ * ```
37
+ * @example
38
+ * Mock WebSocket
39
+ * ```ts
40
+ * export default defineMock({
41
+ * url: '/socket.io',
42
+ * ws: true,
43
+ * setup(wss) {
44
+ * wss.on('connection', (ws) => {
45
+ * ws.on('message', (rawData) => console.log(rawData))
46
+ * ws.send('data')
47
+ * })
48
+ * },
49
+ * })
50
+ * ```
51
+ */
52
+ declare function defineMock(config: MockHttpItem): MockHttpItem;
53
+ declare function defineMock(config: MockWebsocketItem): MockWebsocketItem;
54
+ declare function defineMock(config: MockOptions): MockOptions;
55
+ /**
56
+ * Return a custom defineMock function to support preprocessing of mock config.
57
+ *
58
+ * 返回一个自定义的 defineMock 函数,用于支持对 mock config 的预处理。
59
+ * @param transformer preprocessing function
60
+ * @example
61
+ * ```ts
62
+ * const definePostMock = createDefineMock((mock) => {
63
+ * mock.url = '/api/post/' + mock.url
64
+ * })
65
+ * export default definePostMock({
66
+ * url: 'list',
67
+ * body: [{ title: '1' }, { title: '2' }],
68
+ * })
69
+ * ```
70
+ */
71
+ declare function createDefineMock(transformer: (mock: MockHttpItem | MockWebsocketItem) => MockHttpItem | MockWebsocketItem | void): typeof defineMock;
72
+
73
+ type MockData<T = any> = readonly [
74
+ /**
75
+ * getter
76
+ */
77
+ () => T,
78
+ /**
79
+ * setter
80
+ */
81
+ (val: T | ((val: T) => T | void)) => void
82
+ ] & {
83
+ value: T;
84
+ };
85
+ declare function defineMockData<T = any>(key: string, initialData: T): MockData<T>;
86
+
87
+ export { type MockData, MockHttpItem, MockOptions, MockWebsocketItem, createDefineMock, defineMock, defineMockData };
package/dist/helper.js ADDED
@@ -0,0 +1,10 @@
1
+ import {
2
+ createDefineMock,
3
+ defineMock,
4
+ defineMockData
5
+ } from "./chunk-VMBOC7DG.js";
6
+ export {
7
+ createDefineMock,
8
+ defineMock,
9
+ defineMockData
10
+ };