vite-plugin-mock-dev-server 1.1.13 → 1.1.15
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 +45 -42
- package/README.zh-CN.md +38 -38
- package/dist/index.cjs +12 -12
- package/dist/index.d.ts +18 -4
- package/dist/index.js +12 -12
- package/package.json +14 -27
package/README.md
CHANGED
|
@@ -81,9 +81,7 @@ export default defineConfig({
|
|
|
81
81
|
define: {},
|
|
82
82
|
server: {
|
|
83
83
|
proxy: {
|
|
84
|
-
'^/api': {
|
|
85
|
-
target: 'http://example.com'
|
|
86
|
-
}
|
|
84
|
+
'^/api': { target: 'http://example.com' }
|
|
87
85
|
}
|
|
88
86
|
}
|
|
89
87
|
})
|
|
@@ -106,10 +104,7 @@ import { defineMock } from 'vite-plugin-mock-dev-server'
|
|
|
106
104
|
|
|
107
105
|
export default defineMock({
|
|
108
106
|
url: '/api/test',
|
|
109
|
-
body: {
|
|
110
|
-
a: 1,
|
|
111
|
-
b: 2,
|
|
112
|
-
}
|
|
107
|
+
body: { a: 1, b: 2 }
|
|
113
108
|
})
|
|
114
109
|
```
|
|
115
110
|
|
|
@@ -220,7 +215,7 @@ export default defineConfig({
|
|
|
220
215
|
serverPort?: number
|
|
221
216
|
/**
|
|
222
217
|
* build output dir
|
|
223
|
-
@default 'mockServer'
|
|
218
|
+
* @default 'mockServer'
|
|
224
219
|
*/
|
|
225
220
|
dist?: string
|
|
226
221
|
}
|
|
@@ -286,7 +281,9 @@ export default defineMock({
|
|
|
286
281
|
*/
|
|
287
282
|
enabled: true,
|
|
288
283
|
/**
|
|
289
|
-
* Set interface response delay,
|
|
284
|
+
* Set interface response delay, if an array is passed in,
|
|
285
|
+
* it represents the range of delay time.
|
|
286
|
+
* unit: ms.
|
|
290
287
|
* @default 0
|
|
291
288
|
*/
|
|
292
289
|
delay: 1000,
|
|
@@ -299,38 +296,6 @@ export default defineMock({
|
|
|
299
296
|
* response status text
|
|
300
297
|
*/
|
|
301
298
|
statusText: 'OK',
|
|
302
|
-
/**
|
|
303
|
-
* Request validator, return mock data if validated, otherwise do not use current mock.
|
|
304
|
-
* This is useful in scenarios where an interface needs to return different data based
|
|
305
|
-
* on different input parameters.
|
|
306
|
-
* Validators can solve this type of problem well by dividing the same URL into multiple
|
|
307
|
-
* mock configurations and determining which one is effective based on the validator.
|
|
308
|
-
*
|
|
309
|
-
* @type { headers?: object; body?: object; query?: object; params?: object; refererQuery?: object }
|
|
310
|
-
*
|
|
311
|
-
* If the validator passes in an object,
|
|
312
|
-
* then the validation method is to strictly compare whether the `value`
|
|
313
|
-
* of each `key` in headers/body/query/params in the request interface is exactly equal.
|
|
314
|
-
* If they are all equal, then the validation passes.
|
|
315
|
-
* @type ({ headers: object; body: object; query: object; params: object; refererQuery: object }) => boolean
|
|
316
|
-
*
|
|
317
|
-
* If the validator passed in is a function,
|
|
318
|
-
* then the data related to the requested interface will be provided as input parameters
|
|
319
|
-
* for users to perform custom validation and return a boolean.
|
|
320
|
-
*
|
|
321
|
-
*/
|
|
322
|
-
validator: {
|
|
323
|
-
headers: {},
|
|
324
|
-
body: {},
|
|
325
|
-
query: {},
|
|
326
|
-
params: {},
|
|
327
|
-
/**
|
|
328
|
-
* refererQuery validates the query parameters in the URL of the request source page,
|
|
329
|
-
* which allows for direct modification of parameters in the browser address bar
|
|
330
|
-
* to obtain different simulated data.
|
|
331
|
-
*/
|
|
332
|
-
refererQuery: {}
|
|
333
|
-
},
|
|
334
299
|
/**
|
|
335
300
|
* response headers
|
|
336
301
|
* @type Record<string, any>
|
|
@@ -381,7 +346,38 @@ export default defineMock({
|
|
|
381
346
|
*/
|
|
382
347
|
response(req, res, next) {
|
|
383
348
|
res.end()
|
|
384
|
-
}
|
|
349
|
+
},
|
|
350
|
+
/**
|
|
351
|
+
* Request validator, return mock data if validated, otherwise do not use current mock.
|
|
352
|
+
* This is useful in scenarios where an interface needs to return different data based
|
|
353
|
+
* on different input parameters.
|
|
354
|
+
* Validators can solve this type of problem well by dividing the same URL into multiple
|
|
355
|
+
* mock configurations and determining which one is effective based on the validator.
|
|
356
|
+
*
|
|
357
|
+
* @type { headers, body, query, params, refererQuery }
|
|
358
|
+
* If the validator passed in is an object,
|
|
359
|
+
* then the validation method is to deeply compare whether
|
|
360
|
+
* `headers/body/query/params/refererQuery` of the requested interface contain
|
|
361
|
+
* the `key-value` of the validator.
|
|
362
|
+
*
|
|
363
|
+
* @type (request) => boolean
|
|
364
|
+
* If the validator passed in is a function,
|
|
365
|
+
* then the data related to the requested interface will be provided as input parameters
|
|
366
|
+
* for users to perform custom validation and return a boolean.
|
|
367
|
+
*
|
|
368
|
+
*/
|
|
369
|
+
validator: {
|
|
370
|
+
headers: {},
|
|
371
|
+
body: {},
|
|
372
|
+
query: {},
|
|
373
|
+
params: {},
|
|
374
|
+
/**
|
|
375
|
+
* refererQuery validates the query parameters in the URL of the request source page,
|
|
376
|
+
* which allows for direct modification of parameters in the browser address bar
|
|
377
|
+
* to obtain different simulated data.
|
|
378
|
+
*/
|
|
379
|
+
refererQuery: {}
|
|
380
|
+
},
|
|
385
381
|
})
|
|
386
382
|
```
|
|
387
383
|
``` ts
|
|
@@ -533,6 +529,13 @@ export default defineMock([
|
|
|
533
529
|
// `?a=3` will resolve to `validator.query`
|
|
534
530
|
url: '/api/test?a=3',
|
|
535
531
|
body: { message: 'query.a == 3' }
|
|
532
|
+
},
|
|
533
|
+
// Hitting the POST /api/test request, and in the request body,
|
|
534
|
+
// field a is an array that contains items with values of 1 and 2.
|
|
535
|
+
{
|
|
536
|
+
url: '/api/test',
|
|
537
|
+
method: ['POST'],
|
|
538
|
+
validator: { body: { a: [1, 2] } }
|
|
536
539
|
}
|
|
537
540
|
])
|
|
538
541
|
```
|
package/README.zh-CN.md
CHANGED
|
@@ -82,9 +82,7 @@ export default defineConfig({
|
|
|
82
82
|
define: {},
|
|
83
83
|
server: {
|
|
84
84
|
proxy: {
|
|
85
|
-
'^/api': {
|
|
86
|
-
target: 'http://example.com'
|
|
87
|
-
}
|
|
85
|
+
'^/api': { target: 'http://example.com' }
|
|
88
86
|
}
|
|
89
87
|
}
|
|
90
88
|
})
|
|
@@ -106,10 +104,7 @@ import { defineMock } from 'vite-plugin-mock-dev-server'
|
|
|
106
104
|
|
|
107
105
|
export default defineMock({
|
|
108
106
|
url: '/api/test',
|
|
109
|
-
body: {
|
|
110
|
-
a: 1,
|
|
111
|
-
b: 2,
|
|
112
|
-
}
|
|
107
|
+
body: { a: 1, b: 2 }
|
|
113
108
|
})
|
|
114
109
|
```
|
|
115
110
|
|
|
@@ -215,7 +210,7 @@ export default defineConfig({
|
|
|
215
210
|
serverPort?: number
|
|
216
211
|
/**
|
|
217
212
|
* 构建输出目录
|
|
218
|
-
@default 'mockServer'
|
|
213
|
+
* @default 'mockServer'
|
|
219
214
|
*/
|
|
220
215
|
dist?: string
|
|
221
216
|
}
|
|
@@ -279,7 +274,8 @@ export default defineMock({
|
|
|
279
274
|
*/
|
|
280
275
|
enabled: true,
|
|
281
276
|
/**
|
|
282
|
-
*
|
|
277
|
+
* 设置接口响应延迟,如果传入的是一个数组,则代表延迟时间的范围
|
|
278
|
+
* 单位:ms
|
|
283
279
|
* @default 0
|
|
284
280
|
*/
|
|
285
281
|
delay: 1000,
|
|
@@ -292,33 +288,6 @@ export default defineMock({
|
|
|
292
288
|
* 响应状态文本
|
|
293
289
|
*/
|
|
294
290
|
statusText: 'OK',
|
|
295
|
-
/**
|
|
296
|
-
* 请求验证器,通过验证器则返回 mock数据,否则不使用当前mock。
|
|
297
|
-
* 这对于一些场景中,某个接口需要通过不同的入参来返回不同的数据,
|
|
298
|
-
* 验证器可以很好的解决这一类问题,将同个 url 分为多个 mock配置,
|
|
299
|
-
* 根据 验证器来判断哪个mock配置生效。
|
|
300
|
-
*
|
|
301
|
-
* @type { headers?: object; body?: object; query?: object; params?: object; refererQuery?: object }
|
|
302
|
-
*
|
|
303
|
-
* 如果 validator 传入的是一个对象,那么验证方式是严格比较 请求的接口
|
|
304
|
-
* 中,headers/body/query/params 的各个`key`的`value`是否全等,
|
|
305
|
-
* 全等则校验通过
|
|
306
|
-
*
|
|
307
|
-
* @type ({ headers: object; body: object; query: object; params: object; refererQuery: object }) => boolean
|
|
308
|
-
* 如果 validator 传入的是一个函数,那么会讲 请求的接口相关数据作为入参,提供给使用者进行自定义校验,并返回一个 boolean
|
|
309
|
-
*
|
|
310
|
-
*/
|
|
311
|
-
validator: {
|
|
312
|
-
headers: {},
|
|
313
|
-
body: {},
|
|
314
|
-
query: {},
|
|
315
|
-
params: {},
|
|
316
|
-
/**
|
|
317
|
-
* refererQuery 验证了请求来源页面 URL 中的查询参数,
|
|
318
|
-
* 这使得可以直接在浏览器地址栏中修改参数以获取不同的模拟数据。
|
|
319
|
-
*/
|
|
320
|
-
refererQuery: {}
|
|
321
|
-
},
|
|
322
291
|
/**
|
|
323
292
|
* 响应状态 headers
|
|
324
293
|
* @type Record<string, any>
|
|
@@ -363,7 +332,7 @@ export default defineMock({
|
|
|
363
332
|
* @type (request: { headers, query, body, params }) => any | Promise<any>
|
|
364
333
|
* 如果传入一个函数,那么可以更加灵活的定义返回响应体数据
|
|
365
334
|
*/
|
|
366
|
-
body:
|
|
335
|
+
body: '',
|
|
367
336
|
|
|
368
337
|
/**
|
|
369
338
|
* 如果通过 body 配置不能解决mock需求,
|
|
@@ -376,7 +345,32 @@ export default defineMock({
|
|
|
376
345
|
*/
|
|
377
346
|
response(req, res, next) {
|
|
378
347
|
res.end()
|
|
379
|
-
}
|
|
348
|
+
},
|
|
349
|
+
/**
|
|
350
|
+
* 请求验证器,通过验证器则返回 mock数据,否则不使用当前mock。
|
|
351
|
+
* 这对于一些场景中,某个接口需要通过不同的入参来返回不同的数据,验证器可以很好的解决这一类问题,
|
|
352
|
+
* 将同个 url 分为多个 mock配置,根据 验证器来判断哪个mock配置生效。
|
|
353
|
+
*
|
|
354
|
+
* @type { headers, body, query, params, refererQuery }
|
|
355
|
+
* 如果 validator 传入的是一个对象,那么验证方式是 深度比较 请求的接口
|
|
356
|
+
* 中 headers/body/query/params/refererQuery 是否包含 validator 的 key-value。
|
|
357
|
+
*
|
|
358
|
+
* @type (request) => boolean
|
|
359
|
+
* 如果 validator 传入的是一个函数,那么会将 请求的接口相关数据作为入参,
|
|
360
|
+
* 提供给使用者进行自定义校验,并返回一个 boolean
|
|
361
|
+
*
|
|
362
|
+
*/
|
|
363
|
+
validator: {
|
|
364
|
+
headers: {},
|
|
365
|
+
body: {},
|
|
366
|
+
query: {},
|
|
367
|
+
params: {},
|
|
368
|
+
/**
|
|
369
|
+
* refererQuery 验证了请求来源页面 URL 中的查询参数,
|
|
370
|
+
* 这使得可以直接在浏览器地址栏中修改参数以获取不同的模拟数据。
|
|
371
|
+
*/
|
|
372
|
+
refererQuery: {}
|
|
373
|
+
},
|
|
380
374
|
})
|
|
381
375
|
```
|
|
382
376
|
```ts
|
|
@@ -528,6 +522,12 @@ export default defineMock([
|
|
|
528
522
|
// `?a=3` 将会解析到 `validator.query`
|
|
529
523
|
url: '/api/test?a=3',
|
|
530
524
|
body: { message: 'query.a == 3' },
|
|
525
|
+
},
|
|
526
|
+
// 命中 POST /api/test 请求,且 请求体中,字段 a 为数组,且数组包含值为 1, 2 的项
|
|
527
|
+
{
|
|
528
|
+
url: '/api/test',
|
|
529
|
+
method: ['POST'],
|
|
530
|
+
validator: { body: { a: [1, 2] } }
|
|
531
531
|
}
|
|
532
532
|
])
|
|
533
533
|
```
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`,
|
|
3
|
-
`)}};function
|
|
1
|
+
"use strict";var ct=Object.create;var z=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var pt=Object.getOwnPropertyNames;var lt=Object.getPrototypeOf,ut=Object.prototype.hasOwnProperty;var mt=(e,o)=>{for(var t in o)z(e,t,{get:o[t],enumerable:!0})},Se=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of pt(o))!ut.call(e,n)&&n!==t&&z(e,n,{get:()=>o[n],enumerable:!(r=at(o,n))||r.enumerable});return e};var f=(e,o,t)=>(t=e!=null?ct(lt(e)):{},Se(o||!e||!e.__esModule?z(t,"default",{value:e,enumerable:!0}):t,e)),dt=e=>Se(z({},"__esModule",{value:!0}),e);var Tt={};mt(Tt,{baseMiddleware:()=>ke,createDefineMock:()=>Lt,default:()=>$t,defineMock:()=>It,mockDevServerPlugin:()=>xe,mockWebSocket:()=>Me,transformMockData:()=>ge});module.exports=dt(Tt);var ft=()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,b=ft();var $e=f(require("fs"),1),q=f(require("fs/promises"),1),F=f(require("path"),1),Te=require("esbuild"),Fe=f(require("fast-glob"),1),Ne=f(require("is-core-module"),1),se=require("vite");var Pe="vite-plugin-mock-dev-server",je="1.1.15";var Z=f(require("picocolors"),1);var G=f(require("fs"),1),Q=f(require("path"),1),Re=require("querystring"),V=require("url"),Ce=f(require("debug"),1),We=require("path-to-regexp"),pe=f(require("picocolors"),1),M=e=>Array.isArray(e),C=e=>typeof e=="function",K=e=>Object.prototype.toString.call(e)==="[object Object]",le=e=>K(e)&&Object.keys(e).length===0,kt=e=>e!==null&&typeof e=="object"&&typeof e.pipe=="function",De=e=>kt(e)&&e.readable!==!1&&typeof e._read=="function"&&typeof e._readableState=="object";function _e(e){return new Promise(o=>setTimeout(o,e))}function Ee(e){return Q.default.dirname((0,V.fileURLToPath)(e))}var W=(0,Ce.default)("vite:plugin-mock-dev-server"),S=e=>M(e)?e:e==null?[]:[e],P={info(...e){console.info(pe.default.cyan("mock-dev-server: "),...e)},error(...e){console.error(`
|
|
2
|
+
`,pe.default.cyan("mock-dev-server: "),...e,`
|
|
3
|
+
`)}};function A(e,o,t){for(let n of o){let s=Q.default.join(e,n);if(G.default.existsSync(s)&&G.default.statSync(s).isFile()){let i=t!=null&&t.pathOnly?s:G.default.readFileSync(s,"utf-8");if(!(t!=null&&t.predicate)||t.predicate(i))return i}}let r=Q.default.dirname(e);if(r!==e&&(!(t!=null&&t.rootDir)||r.startsWith(t==null?void 0:t.rootDir)))return A(r,o,t)}var X=(e={})=>{let o=[],t=[];return Object.keys(e).forEach(r=>{var s,i;let n=e[r];typeof n=="string"||!n.ws&&!((s=n.target)!=null&&s.toString().startsWith("ws:"))&&!((i=n.target)!=null&&i.toString().startsWith("wss:"))?o.push(r):t.push(r)}),{httpProxies:o,wsProxies:t}};function Y(e,o){return e[0]==="^"&&new RegExp(e).test(o)||o.startsWith(e)}function J(e,o){return((0,We.match)(e,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}function D(e){let o=new V.URL(e,"http://example.com"),t=decodeURIComponent(o.pathname),r=(0,Re.parse)(o.search.replace(/^\?/,""));return{pathname:t,query:r}}var gt=/import\.meta\.env\.(.+)/;function ee(e){let o={},t=process.env.NODE_ENV||e.mode;Object.assign(o,{"process.env.NODE_ENV":JSON.stringify(t),"global.process.env.NODE_ENV":JSON.stringify(t),"globalThis.process.env.NODE_ENV":JSON.stringify(t),__vite_process_env_NODE_ENV:JSON.stringify(t)});let r={},n={},s=[];for(let a in e.define){let u=e.define[a];if(typeof u=="string")try{JSON.parse(u),r[a]=u}catch{s.push(a)}else r[a]=JSON.stringify(u);let v=a.match(gt);v&&r[a]&&(n[v[1]]=`__vite__define__${r[a]}`)}s.length&&P.error(`${Z.default.yellow("[warn]")} The following keys: ${Z.default.yellow(Z.default.underline(s.join(", ")))} declared in 'define' cannot be parsed as regular code snippets.`);let i={},c={};i["import.meta.hot"]="undefined";for(let a in e.env)i[`import.meta.env.${a}`]=JSON.stringify(e.env[a]);return Object.assign(c,{"import.meta.env":JSON.stringify({...e.env,...n}).replace(/"__vite__define__(.+?)"([,}])/g,(a,u,v)=>`${u.replace(/(^\\")|(\\"$)/g,'"')}${v}`)}),{...i,...r,...c,...o}}var ue=f(require("fs/promises"),1),Ie=f(require("path"),1),Le=f(require("json5"),1),te={name:"externalize-deps",setup(e){e.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Ie.default.isAbsolute(o))return{external:!0}})}},oe={name:"json5-loader",setup(e){e.onLoad({filter:/\.json5$/},async({path:o})=>{let t=await ue.default.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Le.default.parse(t))}`,loader:"js"}})}},re={name:"json-loader",setup(e){e.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await ue.default.readFile(o,"utf-8")}`,loader:"js"}))}},ne=e=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:t})=>{let r=e.find(({find:c})=>yt(c,t));if(!r)return null;let{find:n,replacement:s}=r;return{path:(await o.resolve(t.replace(n,s),{kind:"import-statement",resolveDir:s,namespace:"file"})).path,external:!1}})}});function yt(e,o){return e instanceof RegExp?e.test(o):o.length<e.length?!1:o===e?!0:o.startsWith(`${e}/`)}async function He(e,o,t){let r=S(t.include),n=S(t.exclude),s=ee(o),{httpProxies:i}=X(o.server.proxy||{});i.push(...S(t.prefix));let c=S(t.wsPrefix),a={};try{let m=A(o.root,["package.json"]);m&&(a=JSON.parse(m))}catch{}let u=t.build.dist,v=await bt(process.cwd(),r,n),x=F.default.join(o.root,`mock-data-${Date.now()}.js`);await q.default.writeFile(x,v,"utf-8");let{code:H,deps:I}=await xt(x,s,o.resolve.alias),p=ht(I);await q.default.unlink(x);let l=[{filename:F.default.join(u,"mock-data.js"),source:H},{filename:F.default.join(u,"index.js"),source:Mt(i,c,t.cookiesOptions,t.build.serverPort)},{filename:F.default.join(u,"package.json"),source:vt(a,p)}];try{if(F.default.isAbsolute(u)){await q.default.rm(u,{recursive:!0}),$e.default.mkdirSync(u,{recursive:!0});for(let{filename:m,source:d}of l)await q.default.writeFile(m,d,"utf-8")}else for(let{filename:m,source:d}of l)e.emitFile({type:"asset",fileName:m,source:d})}catch{}}function ht(e){let o=new Set,t=[Pe,"connect","cors"];return Object.keys(e).forEach(r=>{e[r].imports.filter(s=>s.external).map(s=>s.path).forEach(s=>{!t.includes(s)&&!(0,Ne.default)(s)&&o.add(s)})}),Array.from(o)}function vt(e,o){let{dependencies:t={},devDependencies:r={}}=e,n={...t,...r},s={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${je}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function Mt(e,o,t={},r=8080){return`import { createServer } from 'node:http';
|
|
4
4
|
import connect from 'connect';
|
|
5
5
|
import corsMiddleware from 'cors';
|
|
6
6
|
import { baseMiddleware, mockWebSocket } from 'vite-plugin-mock-dev-server';
|
|
@@ -24,8 +24,8 @@ app.use(baseMiddleware({ mockData }, {
|
|
|
24
24
|
server.listen(${r});
|
|
25
25
|
|
|
26
26
|
console.log('listen: http://localhost:${r}');
|
|
27
|
-
`}async function
|
|
28
|
-
`,c+=`m${
|
|
27
|
+
`}async function bt(e,o,t){let r=await(0,Fe.default)(o,{cwd:e}),n=(0,se.createFilter)(o,t,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,u)=>{let v=(0,se.normalizePath)(F.default.join(e,a));i+=`import * as m${u} from '${v}';
|
|
28
|
+
`,c+=`m${u}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
|
|
29
29
|
${i}
|
|
30
30
|
const exporters = [${c}];
|
|
31
31
|
const mockList = exporters.map((raw) => {
|
|
@@ -42,10 +42,10 @@ const mockList = exporters.map((raw) => {
|
|
|
42
42
|
}
|
|
43
43
|
return mockConfig
|
|
44
44
|
});
|
|
45
|
-
export default transformMockData(mockList);`}async function
|
|
46
|
-
`,`file: ${
|
|
47
|
-
`,`file: ${
|
|
48
|
-
`,`file: ${
|
|
49
|
-
`,c)}}async function
|
|
50
|
-
`,r)}}function Rt(e,o,t){if(De(o))o.pipe(e);else if(
|
|
51
|
-
`,O)}},
|
|
45
|
+
export default transformMockData(mockList);`}async function xt(e,o,t){var r;try{let n=await(0,Te.build)({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[ne(t),te,oe,re]});return{code:n.outputFiles[0].text,deps:((r=n.metafile)==null?void 0:r.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}var de=require("buffer"),ze=f(require("cookies"),1),Ge=f(require("http-status"),1),Qe=f(require("lodash.sortby"),1),B=f(require("mime-types"),1),fe=require("path-to-regexp"),j=f(require("picocolors"),1);var ie=f(require("co-body"),1),Ue=f(require("formidable"),1);async function Ae(e,o){var n;let t=e.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(t))return;let r=((n=e.headers["content-type"])==null?void 0:n.toLocaleLowerCase())||"";try{if(r.startsWith("application/json"))return await ie.default.json(e);if(r.startsWith("application/x-www-form-urlencoded"))return await ie.default.form(e);if(r.startsWith("text/plain"))return await ie.default.text(e);if(r.startsWith("multipart/form-data"))return await wt(e,o)}catch(s){console.error(s)}}async function wt(e,o){let t=(0,Ue.default)(o);return new Promise((r,n)=>{t.parse(e,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function Je(e,o){return _(e.headers,o.headers)&&_(e.body,o.body)&&_(e.params,o.params)&&_(e.query,o.query)&&_(e.refererQuery,o.refererQuery)}function _(e,o){if(!o)return!0;for(let t in o)if(!qe(e[t],o[t]))return!1;return!0}function qe(e,o){if(M(e)&&M(o)){let t=new Set;return o.every(r=>e.some((n,s)=>{if(t.has(s))return!1;let i=qe(n,r);return i&&t.add(s),i}))}return K(e)&&K(o)?_(e,o):e===o}var St=/:/g;function ke(e,{formidableOptions:o={},proxies:t,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:a,pathname:u}=D(n.url);if(!u||t.length===0||!t.some(h=>Y(h,n.url)))return i();let v=e.mockData,x=(0,Qe.default)(Object.keys(v),h=>{var U;return((U=h.match(St))==null?void 0:U.length)||0}).find(h=>(0,fe.pathToRegexp)(h).test(u));if(!x)return i();let{query:H}=D(n.headers.referer||""),I=await Ae(n,o),p=new ze.default(n,s,r),l=p.get.bind(p),m=n.method.toUpperCase(),d=Ot(v[x],{pathname:u,method:m,request:{query:a,refererQuery:H,body:I,headers:n.headers,getCookie:l}});if(!d)return i();W("middleware: ",m,n.url);let k=n,g=s;k.body=I,k.query=a,k.refererQuery=H,k.params=J(d.url,u),k.getCookie=l,g.setCookie=p.set.bind(p);let{body:y,delay:O,type:R="json",response:L,status:$=200,statusText:T}=d;if(me(g,$,T),await Pt(k,g,d),await jt(k,g,d),y){try{let h=C(y)?await y(k):y;await Be(c,O),Rt(g,h,R)}catch(h){P.error(`${j.default.red("[body error]")} ${n.url}
|
|
46
|
+
`,`file: ${j.default.cyan(d.__filepath__)}`,h),me(g,500),s.end("")}return}if(L){try{await Be(c,O),await L(k,g,i)}catch(h){P.error(`${j.default.red("[response error]")} ${n.url}
|
|
47
|
+
`,`file: ${j.default.cyan(d.__filepath__)}`,h),me(g,500),s.end("")}return}s.end("")}}function Ot(e,{pathname:o,method:t,request:r}){return e.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?M(n.method)?n.method:[n.method]:["GET","POST"]).includes(t))return!1;let i=(0,fe.pathToRegexp)(n.url).test(o);if(i&&n.validator){let c=J(n.url,o);if(C(n.validator))return n.validator({params:c,...r});try{return Je({params:c,...r},n.validator)}catch(a){return P.error(`${j.default.red("[validator error]")} ${o}
|
|
48
|
+
`,`file: ${j.default.cyan(n.__filepath__)}`,a),!1}}return i})}function me(e,o=200,t){e.statusCode=o,e.statusMessage=t||Ct(o)}async function Pt(e,o,t){let{headers:r,type:n="json"}=t,s=t.__filepath__,i=B.contentType(n)||B.contentType(B.lookup(n)||"");if(i&&o.setHeader("Content-Type",i),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock-Power-By","vite-plugin-mock-dev-server"),o.setHeader("X-File-Path",s),!!r)try{let c=C(r)?await r(e):r;Object.keys(c).forEach(a=>{o.setHeader(a,c[a])})}catch(c){P.error(`${j.default.red("[headers error]")} ${e.url}
|
|
49
|
+
`,c)}}async function jt(e,o,{cookies:t}){if(t)try{let r=C(t)?await t(e):t;Object.keys(r).forEach(n=>{let s=r[n];if(M(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){P.error(`${j.default.red("[cookies error]")} ${e.url}
|
|
50
|
+
`,r)}}function Rt(e,o,t){if(De(o))o.pipe(e);else if(de.Buffer.isBuffer(o))e.end(t==="text"||t==="json"?o.toString("utf-8"):o);else{let r=typeof o=="string"?o:JSON.stringify(o);e.end(t==="buffer"?de.Buffer.from(r):r)}}async function Be(e,o){if(!o||typeof o=="number"&&o<=0||M(o)&&o.length!==2)return;let t=0;if(M(o)){let[r,n]=o;t=Math.floor(Math.random()*(n-r+1))+r}else t=o-(Date.now()-e);t>0&&await _e(t)}function Ct(e){return Ge.default[e]||"Unknown"}var Ke=f(require("events"),1),ce=f(require("fs"),1),Xe=require("module"),ye=f(require("path"),1),Ye=require("url"),he=f(require("chokidar"),1),Ze=require("esbuild"),et=f(require("fast-glob"),1),E=require("vite");var Ve=f(require("lodash.sortby"),1);function ge(e){let o=[];for(let[,r]of e.entries())r&&(M(r)?o.push(...r):o.push(r));let t={};return o.filter(r=>(r.enabled||typeof r.enabled>"u")&&r.url).forEach(r=>{let{pathname:n,query:s}=D(r.url),i=t[n]??(t[n]=[]),c={...r,url:n};if(c.ws!==!0){let a=c.validator;le(s)||(C(a)?c.validator=function(u){return _(u.query,s)&&a(u)}:a?(c.validator={...a},c.validator.query=c.validator.query?{...s,...c.validator.query}:s):c.validator={query:s})}i.push(c)}),Object.keys(t).forEach(r=>{t[r]=(0,Ve.default)(t[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return!s||le(s)?2:C(s)?0:1/Object.keys(s).reduce((c,a)=>c+Wt(s[a]),0)})}),t}function Wt(e){return e?Object.keys(e).length:0}var Dt=Ee(b),N=(0,Xe.createRequire)(Dt),ae=class extends Ke.default{constructor(t){super();this.options=t;this.moduleCache=new Map;this.moduleDeps=new Map;this.moduleType="cjs";this._mockData={};this.cwd=t.cwd||process.cwd();try{let r=A(this.cwd,["package.json"]);this.moduleType=r&&JSON.parse(r).type==="module"?"esm":"cjs"}catch{}}get mockData(){return this._mockData}load(){let{include:t,exclude:r}=this.options,n=(0,E.createFilter)(t,r,{resolve:!1});(0,et.default)(t,{cwd:this.cwd}).then(i=>Promise.all(i.filter(n).map(c=>this.loadMock(c)))).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let s=null;this.on("mock:update",async i=>{n(i)&&(await this.loadMock(i),s&&clearImmediate(s),s=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),s=null}))}),this.on("mock:unlink",async i=>{n(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:t}=this.options,[r,...n]=t,s=he.default.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=(0,E.normalizePath)(i),this.emit("mock:update",i),W("watcher:add",i)}),s.on("change",async i=>{i=(0,E.normalizePath)(i),this.emit("mock:update",i),W("watcher:change",i)}),s.on("unlink",async i=>{i=(0,E.normalizePath)(i),this.emit("mock:unlink",i),W("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let t=[];this.depsWatcher=he.default.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=(0,E.normalizePath)(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=(0,E.normalizePath)(r),this.moduleDeps.delete(r)}),this.on("update:deps",()=>{let r=[];for(let[s]of this.moduleDeps.entries())r.push(s);let n=r.filter(s=>!t.includes(s));n.length>0&&this.depsWatcher.add(n)})}close(){var t,r;(t=this.mockWatcher)==null||t.close(),(r=this.depsWatcher)==null||r.close()}updateMockList(){this._mockData=ge(this.moduleCache)}updateModuleDeps(t,r){Object.keys(r).forEach(n=>{r[n].imports.map(i=>i.path).forEach(i=>{this.moduleDeps.has(i)||this.moduleDeps.set(i,new Set),this.moduleDeps.get(i).add(t)})}),this.emit("update:deps")}async loadMock(t){if(!t)return;let r=!1;/\.m[jt]s$/.test(t)?r=!0:/\.c[jt]s$/.test(t)?r=!1:r=this.moduleType==="esm";let{code:n,deps:s}=await this.transformWithEsbuild(t,r);try{let i=await this.loadFromCode(t,n,r)||{},c;i.default?c=i.default:(c=[],Object.keys(i).forEach(a=>{M(i[a])?c.push(...i[a]):c.push(i[a])})),M(c)?c.forEach(a=>a.__filepath__=t):c.__filepath__=t,this.moduleCache.set(t,c),this.updateModuleDeps(t,s)}catch(i){console.error(i)}}async loadFromCode(t,r,n){if(n){let s=`${t}.timestamp-${Date.now()}`,i=`${s}.mjs`,c=`${(0,Ye.pathToFileURL)(s)}.mjs`;await ce.default.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{ce.default.unlinkSync(i)}catch{}}}else{t=ye.default.resolve(this.cwd,t);let s=ye.default.extname(t),i=ce.default.realpathSync(t),c=s in N.extensions?s:".js",a=N.extensions[c];N.extensions[c]=(v,x)=>{x===i?v._compile(r,x):a(v,x)},delete N.cache[N.resolve(t)];let u=N(t);return N.extensions[c]=a,u.__esModule?u:{default:u}}}async transformWithEsbuild(t,r){var n;try{let s=await(0,Ze.build)({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:r?"esm":"cjs",define:this.options.define,plugins:[ne(this.options.alias),te,re,oe]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};var ot=f(require("cookies"),1),ve=require("path-to-regexp"),rt=f(require("picocolors"),1),nt=require("ws");function Me(e,o,t,r){var I;let n=new Map,s=new Map,i=new WeakMap,c=p=>{let l=s.get(p);return!l&&s.set(p,l=new Map),l},a=(p,l)=>{let m=p.get(l);return!m&&p.set(l,m=new nt.WebSocketServer({noServer:!0})),m},u=(p,l)=>{let m=n.get(p);!m&&n.set(p,m=new Set),m.add(l)},v=(p,l,m,d,k,g)=>{var y;try{(y=m.setup)==null||y.call(m,l,d),l.on("close",()=>p.delete(k))}catch(O){P.error(`${rt.default.red("[websocket server error]")} ${g}
|
|
51
|
+
`,O)}},x=(p,l,m,d)=>{p.emit("connection",l,m),l.on("close",()=>{let k=d.findIndex(g=>g.ws===l);k!==-1&&d.splice(k,1)})},H=(p,l,m,d,k)=>{let{cleanupList:g,connectionList:y,context:O}=i.get(l);tt(g),y.forEach(({ws:R})=>R.removeAllListeners()),l.removeAllListeners(),v(p,l,m,O,d,k),y.forEach(({ws:R,req:L})=>x(l,R,L,y))};(I=e.on)==null||I.call(e,"mock:update-end",p=>{if(!n.has(p))return;let l=n.get(p);if(l)for(let m of l.values())for(let d of e.mockData[m]){if(!d.ws||d.__filepath__!==p)return;let k=c(m);for(let[g,y]of k.entries())H(k,y,d,g,p)}}),o==null||o.on("upgrade",(p,l,m)=>{let{pathname:d,query:k}=D(p.url);if(!d||t.length===0||!t.some(w=>Y(w,p.url)))return;let g=e.mockData,y=Object.keys(g).find(w=>(0,ve.pathToRegexp)(w).test(d));if(!y)return;let O=g[y].find(w=>w.url&&w.ws&&(0,ve.pathToRegexp)(w.url).test(d));if(!O)return;let R=O.__filepath__;u(R,y);let L=c(y),$=a(L,d),T=i.get($);if(!T){let w=[],we={onCleanup:it=>w.push(it)};T={cleanupList:w,context:we,connectionList:[]},i.set($,T),v(L,$,O,we,d,R)}let h=p,U=new ot.default(p,p,r),{query:st}=D(p.headers.referer||"");h.query=k,h.refererQuery=st,h.params=J(y,d),h.getCookie=U.get.bind(U),$.handleUpgrade(h,l,m,w=>{W(`websocket-mock: ${p.url} connected`),T.connectionList.push({req:h,ws:w}),x($,w,h,T.connectionList)})}),o==null||o.on("close",()=>{for(let p of s.values()){for(let l of p.values()){let m=i.get(l);tt(m.cleanupList),l.close()}p.clear()}s.clear(),n.clear()})}function tt(e){let o;for(;o=e.shift();)o==null||o()}async function be(e,o,t,r){let n=new ae({include:S(o.include),exclude:S(o.exclude),define:ee(e),alias:e.resolve.alias});n.load(),n.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),t==null||t.on("close",()=>n.close());let{httpProxies:s}=X(e.server.proxy||{}),i=S(o.prefix);return Me(n,t,S(o.wsPrefix),o.cookiesOptions),ke(n,{formidableOptions:o.formidableOptions,proxies:[...i,...s],cookiesOptions:o.cookiesOptions})}function xe({prefix:e=[],wsPrefix:o=[],include:t=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:r=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:n=!1,formidableOptions:s={},build:i=!1,cookiesOptions:c={}}={}){let a={prefix:e,wsPrefix:o,include:t,exclude:r,reload:n,cookiesOptions:c,formidableOptions:{multiples:!0,...s},build:i?Object.assign({serverPort:8080,dist:"mockServer"},typeof i=="object"?i:{}):!1},u=[Et(a)];return a.build&&u.push(_t(a)),u}function _t(e){let o={};return{name:"vite-plugin-mock-dev-server-generator",enforce:"post",apply:"build",configResolved(t){o=t,t.logger.warn("")},async buildEnd(t){t||o.command==="build"&&await He(this,o,e)}}}function Et(e){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",config(t){var s;let r=S(e.wsPrefix);if(r.length===0||!((s=t.server)!=null&&s.proxy)||Object.keys(t.server.proxy).length===0)return;let n={};Object.keys(t.server.proxy).forEach(i=>{r.includes(i)||(n[i]=t.server.proxy[i])}),t.server.proxy=n},configResolved(t){o=t,t.logger.warn("")},async configureServer({middlewares:t,config:r,httpServer:n,ws:s}){let i=await be(r,e,n,s);t.use(i)},async configurePreviewServer({middlewares:t,httpServer:r}){let n=await be(o,e,r);t.use(n)}}}function It(e){return e}function Lt(e){return t=>(M(t)?t=t.map(r=>e(r)||r):t=e(t)||t,t)}var $t=xe;0&&(module.exports={baseMiddleware,createDefineMock,defineMock,mockDevServerPlugin,mockWebSocket,transformMockData});
|
package/dist/index.d.ts
CHANGED
|
@@ -225,12 +225,15 @@ interface MockHttpItem extends MockBaseItem {
|
|
|
225
225
|
*/
|
|
226
226
|
statusText?: string;
|
|
227
227
|
/**
|
|
228
|
-
* Configure response delay time,
|
|
228
|
+
* Configure response delay time,
|
|
229
|
+
* If an array is passed in, it represents the range of delay time.
|
|
230
|
+
* unit: `ms`
|
|
229
231
|
*
|
|
230
|
-
* 配置响应延迟时间,
|
|
232
|
+
* 配置响应延迟时间, 如果传入的是一个数组,则代表延迟时间的范围
|
|
233
|
+
* 单位: `ms`
|
|
231
234
|
* @default 0
|
|
232
235
|
*/
|
|
233
|
-
delay?: number;
|
|
236
|
+
delay?: number | [number, number];
|
|
234
237
|
/**
|
|
235
238
|
* Configure response body cookies
|
|
236
239
|
*
|
|
@@ -399,8 +402,19 @@ interface MockWebsocketItem extends MockBaseItem {
|
|
|
399
402
|
}
|
|
400
403
|
interface WebSocketSetupContext {
|
|
401
404
|
/**
|
|
405
|
+
* When defining WSS, you may perform some automatic or looping tasks.
|
|
406
|
+
* However, when hot updating, the plugin will re-execute `setup()`,
|
|
407
|
+
* which may result in duplicate registration of listening events and looping tasks
|
|
408
|
+
* such as setTimeout. You can use `onCleanup()` to clear these automatic or looping tasks.
|
|
409
|
+
*
|
|
402
410
|
* 当你在定义 WSS 时,可能会执行一些自动任务或循环任务,
|
|
403
|
-
* 但是当热更新时,插件内部会重新执行 setup()
|
|
411
|
+
* 但是当热更新时,插件内部会重新执行 setup() ,
|
|
412
|
+
* 这可能导致出现 重复注册监听事件 和 循环任务如 `setTimeout` 等。
|
|
413
|
+
* 通过 `onCleanup()` 可以来清除这些自动任务或循环任务。
|
|
414
|
+
* @example
|
|
415
|
+
* ``` ts
|
|
416
|
+
* onCleanup(() => clearTimeout(timeId))
|
|
417
|
+
* ```
|
|
404
418
|
*/
|
|
405
419
|
onCleanup: (cleanup: () => void) => void;
|
|
406
420
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
`,
|
|
3
|
-
`)}};function
|
|
1
|
+
import Be from"fs";import Z from"fs/promises";import N from"path";import{build as ze}from"esbuild";import Ge from"fast-glob";import Qe from"is-core-module";import{createFilter as Ve,normalizePath as Ke}from"vite";var ue="vite-plugin-mock-dev-server",me="1.1.15";import ne from"picocolors";import te from"fs";import oe from"path";import{parse as Le}from"querystring";import{URL as $e,fileURLToPath as Te}from"url";import Fe from"debug";import{match as Ne}from"path-to-regexp";import de from"picocolors";var v=t=>Array.isArray(t),C=t=>typeof t=="function",B=t=>Object.prototype.toString.call(t)==="[object Object]",re=t=>B(t)&&Object.keys(t).length===0,He=t=>t!==null&&typeof t=="object"&&typeof t.pipe=="function",fe=t=>He(t)&&t.readable!==!1&&typeof t._read=="function"&&typeof t._readableState=="object";function ke(t){return new Promise(o=>setTimeout(o,t))}function ge(t){return oe.dirname(Te(t))}var R=Fe("vite:plugin-mock-dev-server"),S=t=>v(t)?t:t==null?[]:[t],P={info(...t){console.info(de.cyan("mock-dev-server: "),...t)},error(...t){console.error(`
|
|
2
|
+
`,de.cyan("mock-dev-server: "),...t,`
|
|
3
|
+
`)}};function A(t,o,e){for(let n of o){let s=oe.join(t,n);if(te.existsSync(s)&&te.statSync(s).isFile()){let i=e!=null&&e.pathOnly?s:te.readFileSync(s,"utf-8");if(!(e!=null&&e.predicate)||e.predicate(i))return i}}let r=oe.dirname(t);if(r!==t&&(!(e!=null&&e.rootDir)||r.startsWith(e==null?void 0:e.rootDir)))return A(r,o,e)}var z=(t={})=>{let o=[],e=[];return Object.keys(t).forEach(r=>{var s,i;let n=t[r];typeof n=="string"||!n.ws&&!((s=n.target)!=null&&s.toString().startsWith("ws:"))&&!((i=n.target)!=null&&i.toString().startsWith("wss:"))?o.push(r):e.push(r)}),{httpProxies:o,wsProxies:e}};function G(t,o){return t[0]==="^"&&new RegExp(t).test(o)||o.startsWith(t)}function U(t,o){return(Ne(t,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}function W(t){let o=new $e(t,"http://example.com"),e=decodeURIComponent(o.pathname),r=Le(o.search.replace(/^\?/,""));return{pathname:e,query:r}}var Ae=/import\.meta\.env\.(.+)/;function Q(t){let o={},e=process.env.NODE_ENV||t.mode;Object.assign(o,{"process.env.NODE_ENV":JSON.stringify(e),"global.process.env.NODE_ENV":JSON.stringify(e),"globalThis.process.env.NODE_ENV":JSON.stringify(e),__vite_process_env_NODE_ENV:JSON.stringify(e)});let r={},n={},s=[];for(let a in t.define){let u=t.define[a];if(typeof u=="string")try{JSON.parse(u),r[a]=u}catch{s.push(a)}else r[a]=JSON.stringify(u);let h=a.match(Ae);h&&r[a]&&(n[h[1]]=`__vite__define__${r[a]}`)}s.length&&P.error(`${ne.yellow("[warn]")} The following keys: ${ne.yellow(ne.underline(s.join(", ")))} declared in 'define' cannot be parsed as regular code snippets.`);let i={},c={};i["import.meta.hot"]="undefined";for(let a in t.env)i[`import.meta.env.${a}`]=JSON.stringify(t.env[a]);return Object.assign(c,{"import.meta.env":JSON.stringify({...t.env,...n}).replace(/"__vite__define__(.+?)"([,}])/g,(a,u,h)=>`${u.replace(/(^\\")|(\\"$)/g,'"')}${h}`)}),{...i,...r,...c,...o}}import ye from"fs/promises";import Ue from"path";import Je from"json5";var V={name:"externalize-deps",setup(t){t.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Ue.isAbsolute(o))return{external:!0}})}},K={name:"json5-loader",setup(t){t.onLoad({filter:/\.json5$/},async({path:o})=>{let e=await ye.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Je.parse(e))}`,loader:"js"}})}},X={name:"json-loader",setup(t){t.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await ye.readFile(o,"utf-8")}`,loader:"js"}))}},Y=t=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:e})=>{let r=t.find(({find:c})=>qe(c,e));if(!r)return null;let{find:n,replacement:s}=r;return{path:(await o.resolve(e.replace(n,s),{kind:"import-statement",resolveDir:s,namespace:"file"})).path,external:!1}})}});function qe(t,o){return t instanceof RegExp?t.test(o):o.length<t.length?!1:o===t?!0:o.startsWith(`${t}/`)}async function he(t,o,e){let r=S(e.include),n=S(e.exclude),s=Q(o),{httpProxies:i}=z(o.server.proxy||{});i.push(...S(e.prefix));let c=S(e.wsPrefix),a={};try{let m=A(o.root,["package.json"]);m&&(a=JSON.parse(m))}catch{}let u=e.build.dist,h=await et(process.cwd(),r,n),M=N.join(o.root,`mock-data-${Date.now()}.js`);await Z.writeFile(M,h,"utf-8");let{code:F,deps:_}=await tt(M,s,o.resolve.alias),p=Xe(_);await Z.unlink(M);let l=[{filename:N.join(u,"mock-data.js"),source:F},{filename:N.join(u,"index.js"),source:Ze(i,c,e.cookiesOptions,e.build.serverPort)},{filename:N.join(u,"package.json"),source:Ye(a,p)}];try{if(N.isAbsolute(u)){await Z.rm(u,{recursive:!0}),Be.mkdirSync(u,{recursive:!0});for(let{filename:m,source:d}of l)await Z.writeFile(m,d,"utf-8")}else for(let{filename:m,source:d}of l)t.emitFile({type:"asset",fileName:m,source:d})}catch{}}function Xe(t){let o=new Set,e=[ue,"connect","cors"];return Object.keys(t).forEach(r=>{t[r].imports.filter(s=>s.external).map(s=>s.path).forEach(s=>{!e.includes(s)&&!Qe(s)&&o.add(s)})}),Array.from(o)}function Ye(t,o){let{dependencies:e={},devDependencies:r={}}=t,n={...e,...r},s={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${me}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function Ze(t,o,e={},r=8080){return`import { createServer } from 'node:http';
|
|
4
4
|
import connect from 'connect';
|
|
5
5
|
import corsMiddleware from 'cors';
|
|
6
6
|
import { baseMiddleware, mockWebSocket } from 'vite-plugin-mock-dev-server';
|
|
@@ -24,8 +24,8 @@ app.use(baseMiddleware({ mockData }, {
|
|
|
24
24
|
server.listen(${r});
|
|
25
25
|
|
|
26
26
|
console.log('listen: http://localhost:${r}');
|
|
27
|
-
`}async function
|
|
28
|
-
`,c+=`m${
|
|
27
|
+
`}async function et(t,o,e){let r=await Ge(o,{cwd:t}),n=Ve(o,e,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,u)=>{let h=Ke(N.join(t,a));i+=`import * as m${u} from '${h}';
|
|
28
|
+
`,c+=`m${u}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
|
|
29
29
|
${i}
|
|
30
30
|
const exporters = [${c}];
|
|
31
31
|
const mockList = exporters.map((raw) => {
|
|
@@ -42,10 +42,10 @@ const mockList = exporters.map((raw) => {
|
|
|
42
42
|
}
|
|
43
43
|
return mockConfig
|
|
44
44
|
});
|
|
45
|
-
export default transformMockData(mockList);`}async function
|
|
46
|
-
`,`file: ${
|
|
47
|
-
`,`file: ${
|
|
48
|
-
`,`file: ${
|
|
49
|
-
`,c)}}async function
|
|
50
|
-
`,r)}}function
|
|
51
|
-
`,O)}},
|
|
45
|
+
export default transformMockData(mockList);`}async function tt(t,o,e){var r;try{let n=await ze({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[Y(e),V,K,X]});return{code:n.outputFiles[0].text,deps:((r=n.metafile)==null?void 0:r.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}import{Buffer as xe}from"buffer";import nt from"cookies";import st from"http-status";import it from"lodash.sortby";import*as J from"mime-types";import{pathToRegexp as Se}from"path-to-regexp";import E from"picocolors";import se from"co-body";import ot from"formidable";async function ve(t,o){var n;let e=t.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(e))return;let r=((n=t.headers["content-type"])==null?void 0:n.toLocaleLowerCase())||"";try{if(r.startsWith("application/json"))return await se.json(t);if(r.startsWith("application/x-www-form-urlencoded"))return await se.form(t);if(r.startsWith("text/plain"))return await se.text(t);if(r.startsWith("multipart/form-data"))return await rt(t,o)}catch(s){console.error(s)}}async function rt(t,o){let e=ot(o);return new Promise((r,n)=>{e.parse(t,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function Me(t,o){return D(t.headers,o.headers)&&D(t.body,o.body)&&D(t.params,o.params)&&D(t.query,o.query)&&D(t.refererQuery,o.refererQuery)}function D(t,o){if(!o)return!0;for(let e in o)if(!be(t[e],o[e]))return!1;return!0}function be(t,o){if(v(t)&&v(o)){let e=new Set;return o.every(r=>t.some((n,s)=>{if(e.has(s))return!1;let i=be(n,r);return i&&e.add(s),i}))}return B(t)&&B(o)?D(t,o):t===o}var ct=/:/g;function Oe(t,{formidableOptions:o={},proxies:e,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:a,pathname:u}=W(n.url);if(!u||e.length===0||!e.some(y=>G(y,n.url)))return i();let h=t.mockData,M=it(Object.keys(h),y=>{var H;return((H=y.match(ct))==null?void 0:H.length)||0}).find(y=>Se(y).test(u));if(!M)return i();let{query:F}=W(n.headers.referer||""),_=await ve(n,o),p=new nt(n,s,r),l=p.get.bind(p),m=n.method.toUpperCase(),d=at(h[M],{pathname:u,method:m,request:{query:a,refererQuery:F,body:_,headers:n.headers,getCookie:l}});if(!d)return i();R("middleware: ",m,n.url);let f=n,k=s;f.body=_,f.query=a,f.refererQuery=F,f.params=U(d.url,u),f.getCookie=l,k.setCookie=p.set.bind(p);let{body:g,delay:O,type:j="json",response:I,status:L=200,statusText:$}=d;if(ie(k,L,$),await pt(f,k,d),await lt(f,k,d),g){try{let y=C(g)?await g(f):g;await we(c,O),ut(k,y,j)}catch(y){P.error(`${E.red("[body error]")} ${n.url}
|
|
46
|
+
`,`file: ${E.cyan(d.__filepath__)}`,y),ie(k,500),s.end("")}return}if(I){try{await we(c,O),await I(f,k,i)}catch(y){P.error(`${E.red("[response error]")} ${n.url}
|
|
47
|
+
`,`file: ${E.cyan(d.__filepath__)}`,y),ie(k,500),s.end("")}return}s.end("")}}function at(t,{pathname:o,method:e,request:r}){return t.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?v(n.method)?n.method:[n.method]:["GET","POST"]).includes(e))return!1;let i=Se(n.url).test(o);if(i&&n.validator){let c=U(n.url,o);if(C(n.validator))return n.validator({params:c,...r});try{return Me({params:c,...r},n.validator)}catch(a){return P.error(`${E.red("[validator error]")} ${o}
|
|
48
|
+
`,`file: ${E.cyan(n.__filepath__)}`,a),!1}}return i})}function ie(t,o=200,e){t.statusCode=o,t.statusMessage=e||mt(o)}async function pt(t,o,e){let{headers:r,type:n="json"}=e,s=e.__filepath__,i=J.contentType(n)||J.contentType(J.lookup(n)||"");if(i&&o.setHeader("Content-Type",i),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock-Power-By","vite-plugin-mock-dev-server"),o.setHeader("X-File-Path",s),!!r)try{let c=C(r)?await r(t):r;Object.keys(c).forEach(a=>{o.setHeader(a,c[a])})}catch(c){P.error(`${E.red("[headers error]")} ${t.url}
|
|
49
|
+
`,c)}}async function lt(t,o,{cookies:e}){if(e)try{let r=C(e)?await e(t):e;Object.keys(r).forEach(n=>{let s=r[n];if(v(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){P.error(`${E.red("[cookies error]")} ${t.url}
|
|
50
|
+
`,r)}}function ut(t,o,e){if(fe(o))o.pipe(t);else if(xe.isBuffer(o))t.end(e==="text"||e==="json"?o.toString("utf-8"):o);else{let r=typeof o=="string"?o:JSON.stringify(o);t.end(e==="buffer"?xe.from(r):r)}}async function we(t,o){if(!o||typeof o=="number"&&o<=0||v(o)&&o.length!==2)return;let e=0;if(v(o)){let[r,n]=o;e=Math.floor(Math.random()*(n-r+1))+r}else e=o-(Date.now()-t);e>0&&await ke(e)}function mt(t){return st[t]||"Unknown"}import kt from"events";import ce from"fs";import{createRequire as gt}from"module";import je from"path";import{pathToFileURL as yt}from"url";import Ce from"chokidar";import{build as ht}from"esbuild";import vt from"fast-glob";import{createFilter as Mt,normalizePath as q}from"vite";import dt from"lodash.sortby";function Pe(t){let o=[];for(let[,r]of t.entries())r&&(v(r)?o.push(...r):o.push(r));let e={};return o.filter(r=>(r.enabled||typeof r.enabled>"u")&&r.url).forEach(r=>{let{pathname:n,query:s}=W(r.url),i=e[n]??(e[n]=[]),c={...r,url:n};if(c.ws!==!0){let a=c.validator;re(s)||(C(a)?c.validator=function(u){return D(u.query,s)&&a(u)}:a?(c.validator={...a},c.validator.query=c.validator.query?{...s,...c.validator.query}:s):c.validator={query:s})}i.push(c)}),Object.keys(e).forEach(r=>{e[r]=dt(e[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return!s||re(s)?2:C(s)?0:1/Object.keys(s).reduce((c,a)=>c+ft(s[a]),0)})}),e}function ft(t){return t?Object.keys(t).length:0}var bt=ge(import.meta.url),T=gt(bt),ee=class extends kt{constructor(e){super();this.options=e;this.moduleCache=new Map;this.moduleDeps=new Map;this.moduleType="cjs";this._mockData={};this.cwd=e.cwd||process.cwd();try{let r=A(this.cwd,["package.json"]);this.moduleType=r&&JSON.parse(r).type==="module"?"esm":"cjs"}catch{}}get mockData(){return this._mockData}load(){let{include:e,exclude:r}=this.options,n=Mt(e,r,{resolve:!1});vt(e,{cwd:this.cwd}).then(i=>Promise.all(i.filter(n).map(c=>this.loadMock(c)))).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let s=null;this.on("mock:update",async i=>{n(i)&&(await this.loadMock(i),s&&clearImmediate(s),s=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),s=null}))}),this.on("mock:unlink",async i=>{n(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:e}=this.options,[r,...n]=e,s=Ce.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=q(i),this.emit("mock:update",i),R("watcher:add",i)}),s.on("change",async i=>{i=q(i),this.emit("mock:update",i),R("watcher:change",i)}),s.on("unlink",async i=>{i=q(i),this.emit("mock:unlink",i),R("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let e=[];this.depsWatcher=Ce.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=q(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=q(r),this.moduleDeps.delete(r)}),this.on("update:deps",()=>{let r=[];for(let[s]of this.moduleDeps.entries())r.push(s);let n=r.filter(s=>!e.includes(s));n.length>0&&this.depsWatcher.add(n)})}close(){var e,r;(e=this.mockWatcher)==null||e.close(),(r=this.depsWatcher)==null||r.close()}updateMockList(){this._mockData=Pe(this.moduleCache)}updateModuleDeps(e,r){Object.keys(r).forEach(n=>{r[n].imports.map(i=>i.path).forEach(i=>{this.moduleDeps.has(i)||this.moduleDeps.set(i,new Set),this.moduleDeps.get(i).add(e)})}),this.emit("update:deps")}async loadMock(e){if(!e)return;let r=!1;/\.m[jt]s$/.test(e)?r=!0:/\.c[jt]s$/.test(e)?r=!1:r=this.moduleType==="esm";let{code:n,deps:s}=await this.transformWithEsbuild(e,r);try{let i=await this.loadFromCode(e,n,r)||{},c;i.default?c=i.default:(c=[],Object.keys(i).forEach(a=>{v(i[a])?c.push(...i[a]):c.push(i[a])})),v(c)?c.forEach(a=>a.__filepath__=e):c.__filepath__=e,this.moduleCache.set(e,c),this.updateModuleDeps(e,s)}catch(i){console.error(i)}}async loadFromCode(e,r,n){if(n){let s=`${e}.timestamp-${Date.now()}`,i=`${s}.mjs`,c=`${yt(s)}.mjs`;await ce.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{ce.unlinkSync(i)}catch{}}}else{e=je.resolve(this.cwd,e);let s=je.extname(e),i=ce.realpathSync(e),c=s in T.extensions?s:".js",a=T.extensions[c];T.extensions[c]=(h,M)=>{M===i?h._compile(r,M):a(h,M)},delete T.cache[T.resolve(e)];let u=T(e);return T.extensions[c]=a,u.__esModule?u:{default:u}}}async transformWithEsbuild(e,r){var n;try{let s=await ht({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:r?"esm":"cjs",define:this.options.define,plugins:[Y(this.options.alias),V,X,K]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};import xt from"cookies";import{pathToRegexp as Re}from"path-to-regexp";import wt from"picocolors";import{WebSocketServer as St}from"ws";function De(t,o,e,r){var _;let n=new Map,s=new Map,i=new WeakMap,c=p=>{let l=s.get(p);return!l&&s.set(p,l=new Map),l},a=(p,l)=>{let m=p.get(l);return!m&&p.set(l,m=new St({noServer:!0})),m},u=(p,l)=>{let m=n.get(p);!m&&n.set(p,m=new Set),m.add(l)},h=(p,l,m,d,f,k)=>{var g;try{(g=m.setup)==null||g.call(m,l,d),l.on("close",()=>p.delete(f))}catch(O){P.error(`${wt.red("[websocket server error]")} ${k}
|
|
51
|
+
`,O)}},M=(p,l,m,d)=>{p.emit("connection",l,m),l.on("close",()=>{let f=d.findIndex(k=>k.ws===l);f!==-1&&d.splice(f,1)})},F=(p,l,m,d,f)=>{let{cleanupList:k,connectionList:g,context:O}=i.get(l);We(k),g.forEach(({ws:j})=>j.removeAllListeners()),l.removeAllListeners(),h(p,l,m,O,d,f),g.forEach(({ws:j,req:I})=>M(l,j,I,g))};(_=t.on)==null||_.call(t,"mock:update-end",p=>{if(!n.has(p))return;let l=n.get(p);if(l)for(let m of l.values())for(let d of t.mockData[m]){if(!d.ws||d.__filepath__!==p)return;let f=c(m);for(let[k,g]of f.entries())F(f,g,d,k,p)}}),o==null||o.on("upgrade",(p,l,m)=>{let{pathname:d,query:f}=W(p.url);if(!d||e.length===0||!e.some(b=>G(b,p.url)))return;let k=t.mockData,g=Object.keys(k).find(b=>Re(b).test(d));if(!g)return;let O=k[g].find(b=>b.url&&b.ws&&Re(b.url).test(d));if(!O)return;let j=O.__filepath__;u(j,g);let I=c(g),L=a(I,d),$=i.get(L);if(!$){let b=[],pe={onCleanup:Ie=>b.push(Ie)};$={cleanupList:b,context:pe,connectionList:[]},i.set(L,$),h(I,L,O,pe,d,j)}let y=p,H=new xt(p,p,r),{query:_e}=W(p.headers.referer||"");y.query=f,y.refererQuery=_e,y.params=U(g,d),y.getCookie=H.get.bind(H),L.handleUpgrade(y,l,m,b=>{R(`websocket-mock: ${p.url} connected`),$.connectionList.push({req:y,ws:b}),M(L,b,y,$.connectionList)})}),o==null||o.on("close",()=>{for(let p of s.values()){for(let l of p.values()){let m=i.get(l);We(m.cleanupList),l.close()}p.clear()}s.clear(),n.clear()})}function We(t){let o;for(;o=t.shift();)o==null||o()}async function ae(t,o,e,r){let n=new ee({include:S(o.include),exclude:S(o.exclude),define:Q(t),alias:t.resolve.alias});n.load(),n.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),e==null||e.on("close",()=>n.close());let{httpProxies:s}=z(t.server.proxy||{}),i=S(o.prefix);return De(n,e,S(o.wsPrefix),o.cookiesOptions),Oe(n,{formidableOptions:o.formidableOptions,proxies:[...i,...s],cookiesOptions:o.cookiesOptions})}function Ee({prefix:t=[],wsPrefix:o=[],include:e=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:r=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:n=!1,formidableOptions:s={},build:i=!1,cookiesOptions:c={}}={}){let a={prefix:t,wsPrefix:o,include:e,exclude:r,reload:n,cookiesOptions:c,formidableOptions:{multiples:!0,...s},build:i?Object.assign({serverPort:8080,dist:"mockServer"},typeof i=="object"?i:{}):!1},u=[Pt(a)];return a.build&&u.push(Ot(a)),u}function Ot(t){let o={};return{name:"vite-plugin-mock-dev-server-generator",enforce:"post",apply:"build",configResolved(e){o=e,e.logger.warn("")},async buildEnd(e){e||o.command==="build"&&await he(this,o,t)}}}function Pt(t){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",config(e){var s;let r=S(t.wsPrefix);if(r.length===0||!((s=e.server)!=null&&s.proxy)||Object.keys(e.server.proxy).length===0)return;let n={};Object.keys(e.server.proxy).forEach(i=>{r.includes(i)||(n[i]=e.server.proxy[i])}),e.server.proxy=n},configResolved(e){o=e,e.logger.warn("")},async configureServer({middlewares:e,config:r,httpServer:n,ws:s}){let i=await ae(r,t,n,s);e.use(i)},async configurePreviewServer({middlewares:e,httpServer:r}){let n=await ae(o,t,r);e.use(n)}}}function pr(t){return t}function lr(t){return e=>(v(e)?e=e.map(r=>t(r)||r):e=t(e)||e,e)}var fr=Ee;export{Oe as baseMiddleware,lr as createDefineMock,fr as default,pr as defineMock,Ee as mockDevServerPlugin,De as mockWebSocket,Pe as transformMockData};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vite-plugin-mock-dev-server",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.15",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"vite",
|
|
6
6
|
"plugin",
|
|
@@ -18,9 +18,11 @@
|
|
|
18
18
|
"type": "module",
|
|
19
19
|
"exports": {
|
|
20
20
|
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
21
22
|
"require": "./dist/index.cjs",
|
|
22
23
|
"import": "./dist/index.js"
|
|
23
|
-
}
|
|
24
|
+
},
|
|
25
|
+
"./package.json": "./package.json"
|
|
24
26
|
},
|
|
25
27
|
"main": "dist/index.cjs",
|
|
26
28
|
"module": "dist/index.js",
|
|
@@ -34,11 +36,11 @@
|
|
|
34
36
|
"co-body": "^6.1.0",
|
|
35
37
|
"cookies": "^0.8.0",
|
|
36
38
|
"debug": "^4.3.4",
|
|
37
|
-
"esbuild": "^0.17.
|
|
39
|
+
"esbuild": "^0.17.19",
|
|
38
40
|
"fast-glob": "^3.2.12",
|
|
39
41
|
"formidable": "^2.1.1",
|
|
40
42
|
"http-status": "^1.6.2",
|
|
41
|
-
"is-core-module": "^2.12.
|
|
43
|
+
"is-core-module": "^2.12.1",
|
|
42
44
|
"json5": "^2.2.3",
|
|
43
45
|
"lodash.sortby": "^4.7.0",
|
|
44
46
|
"mime-types": "^2.1.35",
|
|
@@ -47,49 +49,34 @@
|
|
|
47
49
|
"ws": "^8.13.0"
|
|
48
50
|
},
|
|
49
51
|
"devDependencies": {
|
|
50
|
-
"@pengzhanbo/eslint-config": "^0.3.
|
|
51
|
-
"@pengzhanbo/prettier-config": "^0.3.
|
|
52
|
+
"@pengzhanbo/eslint-config": "^0.3.12",
|
|
53
|
+
"@pengzhanbo/prettier-config": "^0.3.12",
|
|
52
54
|
"@types/co-body": "^6.1.0",
|
|
53
55
|
"@types/cookies": "^0.7.7",
|
|
54
56
|
"@types/debug": "^4.1.7",
|
|
55
|
-
"@types/formidable": "^2.0.
|
|
57
|
+
"@types/formidable": "^2.0.6",
|
|
56
58
|
"@types/is-core-module": "^2.2.0",
|
|
57
59
|
"@types/lodash.sortby": "^4.7.7",
|
|
58
60
|
"@types/mime-types": "^2.1.1",
|
|
59
|
-
"@types/node": "^18.16.
|
|
61
|
+
"@types/node": "^18.16.13",
|
|
60
62
|
"@types/ws": "^8.5.4",
|
|
61
63
|
"bumpp": "^9.1.0",
|
|
62
64
|
"conventional-changelog-cli": "^2.2.2",
|
|
63
|
-
"eslint": "^8.
|
|
65
|
+
"eslint": "^8.41.0",
|
|
64
66
|
"mockjs": "^1.1.0",
|
|
65
67
|
"prettier": "^2.8.8",
|
|
66
68
|
"tsup": "^6.7.0",
|
|
67
69
|
"typescript": "^5.0.4",
|
|
68
|
-
"vite": "^4.3.
|
|
69
|
-
"vitepress": "1.0.0-alpha.
|
|
70
|
+
"vite": "^4.3.8",
|
|
71
|
+
"vitepress": "1.0.0-alpha.76"
|
|
70
72
|
},
|
|
71
73
|
"peerDependencies": {
|
|
72
74
|
"vite": ">=3.0.0"
|
|
73
75
|
},
|
|
74
|
-
"packageManager": "pnpm@8.
|
|
76
|
+
"packageManager": "pnpm@8.5.0",
|
|
75
77
|
"engines": {
|
|
76
78
|
"node": "^14.18.0 || >=16"
|
|
77
79
|
},
|
|
78
|
-
"tsup": {
|
|
79
|
-
"entry": [
|
|
80
|
-
"src/index.ts"
|
|
81
|
-
],
|
|
82
|
-
"shims": true,
|
|
83
|
-
"sourcemap": false,
|
|
84
|
-
"dts": true,
|
|
85
|
-
"splitting": false,
|
|
86
|
-
"clean": true,
|
|
87
|
-
"minify": true,
|
|
88
|
-
"format": [
|
|
89
|
-
"esm",
|
|
90
|
-
"cjs"
|
|
91
|
-
]
|
|
92
|
-
},
|
|
93
80
|
"scripts": {
|
|
94
81
|
"build": "tsup",
|
|
95
82
|
"dev": "DEBUG=vite:plugin-mock-dev-server vite example --config ./example/vite.config.ts",
|