vite-plugin-mock-dev-server 1.1.12 → 1.1.14

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 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, unit: ms.
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
- * 设置接口响应延迟, 单位:ms
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 st=Object.create;var J=Object.defineProperty;var it=Object.getOwnPropertyDescriptor;var ct=Object.getOwnPropertyNames;var at=Object.getPrototypeOf,pt=Object.prototype.hasOwnProperty;var lt=(e,o)=>{for(var t in o)J(e,t,{get:o[t],enumerable:!0})},xe=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of ct(o))!pt.call(e,n)&&n!==t&&J(e,n,{get:()=>o[n],enumerable:!(r=it(o,n))||r.enumerable});return e};var f=(e,o,t)=>(t=e!=null?st(at(e)):{},xe(o||!e||!e.__esModule?J(t,"default",{value:e,enumerable:!0}):t,e)),ut=e=>xe(J({},"__esModule",{value:!0}),e);var $t={};lt($t,{baseMiddleware:()=>me,createDefineMock:()=>It,default:()=>Lt,defineMock:()=>Et,mockDevServerPlugin:()=>Me,mockWebSocket:()=>ve,transformMockData:()=>de});module.exports=ut($t);var mt=()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,h=mt();var Ie=f(require("fs"),1),q=f(require("fs/promises"),1),$=f(require("path"),1),Le=require("esbuild"),$e=f(require("fast-glob"),1),Fe=f(require("is-core-module"),1),te=require("vite");var Se="vite-plugin-mock-dev-server",Oe="1.1.12";var dt=/import\.meta\.env\.(.+)/;function z(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={};for(let c in e.define){let a=e.define[c];r[c]=typeof a=="string"?a:JSON.stringify(a);let m=c.match(dt);m&&(n[m[1]]=`__vite__define__${r[c]}`)}let s={},i={};s["import.meta.hot"]="undefined";for(let c in e.env)s[`import.meta.env.${c}`]=JSON.stringify(e.env[c]);return Object.assign(i,{"import.meta.env":JSON.stringify({...e.env,...n}).replace(/"__vite__define__(.+?)"([,}])/g,(c,a,m)=>`${a.replace(/(^\\")|(\\"$)/g,'"')}${m}`)}),{...s,...i,...o}}var se=f(require("fs/promises"),1),Pe=f(require("path"),1),Re=f(require("json5"),1),G={name:"externalize-deps",setup(e){e.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Pe.default.isAbsolute(o))return{external:!0}})}},Q={name:"json5-loader",setup(e){e.onLoad({filter:/\.json5$/},async({path:o})=>{let t=await se.default.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Re.default.parse(t))}`,loader:"js"}})}},V={name:"json-loader",setup(e){e.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await se.default.readFile(o,"utf-8")}`,loader:"js"}))}},K=e=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:t})=>{let r=e.find(({find:c})=>ft(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 ft(e,o){return e instanceof RegExp?e.test(o):o.length<e.length?!1:o===e?!0:o.startsWith(`${e}/`)}var X=f(require("fs"),1),Y=f(require("path"),1),je=require("url"),Ce=f(require("debug"),1),We=require("path-to-regexp"),ie=f(require("picocolors"),1),S=e=>Array.isArray(e),j=e=>typeof e=="function",gt=e=>Object.prototype.toString.call(e)==="[object Object]",ce=e=>gt(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 Y.default.dirname((0,je.fileURLToPath)(e))}var C=(0,Ce.default)("vite:plugin-mock-dev-server"),w=e=>S(e)?e:e==null?[]:[e],W={info(...e){console.info(ie.default.cyan("mock-dev-server: "),...e)},error(...e){console.error(`
2
- `,ie.default.cyan("mock-dev-server: "),...e,`
3
- `)}};function U(e,o,t){for(let n of o){let s=Y.default.join(e,n);if(X.default.existsSync(s)&&X.default.statSync(s).isFile()){let i=t!=null&&t.pathOnly?s:X.default.readFileSync(s,"utf-8");if(!(t!=null&&t.predicate)||t.predicate(i))return i}}let r=Y.default.dirname(e);if(r!==e&&(!(t!=null&&t.rootDir)||r.startsWith(t==null?void 0:t.rootDir)))return U(r,o,t)}var Z=(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 ee(e,o){return e[0]==="^"&&new RegExp(e).test(o)||o.startsWith(e)}function A(e,o){return((0,We.match)(e,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}async function Te(e,o,t){let r=w(t.include),n=w(t.exclude),s=z(o),{httpProxies:i}=Z(o.server.proxy||{});i.push(...w(t.prefix));let c=w(t.wsPrefix),a={};try{let u=U(o.root,["package.json"]);u&&(a=JSON.parse(u))}catch{}let m=t.build.dist,x=await Mt(process.cwd(),r,n),M=$.default.join(o.root,`mock-data-${Date.now()}.js`);await q.default.writeFile(M,x,"utf-8");let{code:N,deps:_}=await bt(M,s,o.resolve.alias),p=yt(_);await q.default.unlink(M);let l=[{filename:$.default.join(m,"mock-data.js"),source:N},{filename:$.default.join(m,"index.js"),source:ht(i,c,t.cookiesOptions,t.build.serverPort)},{filename:$.default.join(m,"package.json"),source:vt(a,p)}];try{if($.default.isAbsolute(m)){await q.default.rm(m,{recursive:!0}),Ie.default.mkdirSync(m,{recursive:!0});for(let{filename:u,source:d}of l)await q.default.writeFile(u,d,"utf-8")}else for(let{filename:u,source:d}of l)e.emitFile({type:"asset",fileName:u,source:d})}catch{}}function yt(e){let o=new Set,t=[Se,"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,Fe.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":`^${Oe}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function ht(e,o,t={},r=8080){return`import { createServer } from 'node:http';
1
+ "use strict";var it=Object.create;var z=Object.defineProperty;var ct=Object.getOwnPropertyDescriptor;var at=Object.getOwnPropertyNames;var pt=Object.getPrototypeOf,lt=Object.prototype.hasOwnProperty;var ut=(e,o)=>{for(var t in o)z(e,t,{get:o[t],enumerable:!0})},we=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of at(o))!lt.call(e,n)&&n!==t&&z(e,n,{get:()=>o[n],enumerable:!(r=ct(o,n))||r.enumerable});return e};var f=(e,o,t)=>(t=e!=null?it(pt(e)):{},we(o||!e||!e.__esModule?z(t,"default",{value:e,enumerable:!0}):t,e)),mt=e=>we(z({},"__esModule",{value:!0}),e);var $t={};ut($t,{baseMiddleware:()=>fe,createDefineMock:()=>It,default:()=>Lt,defineMock:()=>Et,mockDevServerPlugin:()=>be,mockWebSocket:()=>ve,transformMockData:()=>ke});module.exports=mt($t);var dt=()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,M=dt();var Le=f(require("fs"),1),B=f(require("fs/promises"),1),F=f(require("path"),1),$e=require("esbuild"),Te=f(require("fast-glob"),1),Fe=f(require("is-core-module"),1),ne=require("vite");var Oe="vite-plugin-mock-dev-server",Pe="1.1.14";var ft=/import\.meta\.env\.(.+)/;function G(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={};for(let c in e.define){let a=e.define[c];r[c]=typeof a=="string"?a:JSON.stringify(a);let m=c.match(ft);m&&(n[m[1]]=`__vite__define__${r[c]}`)}let s={},i={};s["import.meta.hot"]="undefined";for(let c in e.env)s[`import.meta.env.${c}`]=JSON.stringify(e.env[c]);return Object.assign(i,{"import.meta.env":JSON.stringify({...e.env,...n}).replace(/"__vite__define__(.+?)"([,}])/g,(c,a,m)=>`${a.replace(/(^\\")|(\\"$)/g,'"')}${m}`)}),{...s,...r,...i,...o}}var ae=f(require("fs/promises"),1),je=f(require("path"),1),Re=f(require("json5"),1),Q={name:"externalize-deps",setup(e){e.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!je.default.isAbsolute(o))return{external:!0}})}},V={name:"json5-loader",setup(e){e.onLoad({filter:/\.json5$/},async({path:o})=>{let t=await ae.default.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Re.default.parse(t))}`,loader:"js"}})}},K={name:"json-loader",setup(e){e.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await ae.default.readFile(o,"utf-8")}`,loader:"js"}))}},X=e=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:t})=>{let r=e.find(({find:c})=>kt(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 kt(e,o){return e instanceof RegExp?e.test(o):o.length<e.length?!1:o===e?!0:o.startsWith(`${e}/`)}var Y=f(require("fs"),1),Z=f(require("path"),1),Ce=require("querystring"),ee=require("url"),We=f(require("debug"),1),De=require("path-to-regexp"),pe=f(require("picocolors"),1),v=e=>Array.isArray(e),R=e=>typeof e=="function",te=e=>Object.prototype.toString.call(e)==="[object Object]",le=e=>te(e)&&Object.keys(e).length===0,gt=e=>e!==null&&typeof e=="object"&&typeof e.pipe=="function",_e=e=>gt(e)&&e.readable!==!1&&typeof e._read=="function"&&typeof e._readableState=="object";function Ee(e){return new Promise(o=>setTimeout(o,e))}function Ie(e){return Z.default.dirname((0,ee.fileURLToPath)(e))}var C=(0,We.default)("vite:plugin-mock-dev-server"),S=e=>v(e)?e:e==null?[]:[e],W={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=Z.default.join(e,n);if(Y.default.existsSync(s)&&Y.default.statSync(s).isFile()){let i=t!=null&&t.pathOnly?s:Y.default.readFileSync(s,"utf-8");if(!(t!=null&&t.predicate)||t.predicate(i))return i}}let r=Z.default.dirname(e);if(r!==e&&(!(t!=null&&t.rootDir)||r.startsWith(t==null?void 0:t.rootDir)))return A(r,o,t)}var oe=(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 re(e,o){return e[0]==="^"&&new RegExp(e).test(o)||o.startsWith(e)}function q(e,o){return((0,De.match)(e,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}function D(e){let o=new ee.URL(e,"http://example.com"),t=decodeURIComponent(o.pathname),r=(0,Ce.parse)(o.search.replace(/^\?/,""));return{pathname:t,query:r}}async function Ne(e,o,t){let r=S(t.include),n=S(t.exclude),s=G(o),{httpProxies:i}=oe(o.server.proxy||{});i.push(...S(t.prefix));let c=S(t.wsPrefix),a={};try{let u=A(o.root,["package.json"]);u&&(a=JSON.parse(u))}catch{}let m=t.build.dist,w=await Mt(process.cwd(),r,n),b=F.default.join(o.root,`mock-data-${Date.now()}.js`);await B.default.writeFile(b,w,"utf-8");let{code:H,deps:I}=await bt(b,s,o.resolve.alias),p=yt(I);await B.default.unlink(b);let l=[{filename:F.default.join(m,"mock-data.js"),source:H},{filename:F.default.join(m,"index.js"),source:vt(i,c,t.cookiesOptions,t.build.serverPort)},{filename:F.default.join(m,"package.json"),source:ht(a,p)}];try{if(F.default.isAbsolute(m)){await B.default.rm(m,{recursive:!0}),Le.default.mkdirSync(m,{recursive:!0});for(let{filename:u,source:d}of l)await B.default.writeFile(u,d,"utf-8")}else for(let{filename:u,source:d}of l)e.emitFile({type:"asset",fileName:u,source:d})}catch{}}function yt(e){let o=new Set,t=[Oe,"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,Fe.default)(s)&&o.add(s)})}),Array.from(o)}function ht(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":`^${Pe}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function vt(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,7 +24,7 @@ app.use(baseMiddleware({ mockData }, {
24
24
  server.listen(${r});
25
25
 
26
26
  console.log('listen: http://localhost:${r}');
27
- `}async function Mt(e,o,t){let r=await(0,$e.default)(o,{cwd:e}),n=(0,te.createFilter)(o,t,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,m)=>{let x=(0,te.normalizePath)($.default.join(e,a));i+=`import * as m${m} from '${x}';
27
+ `}async function Mt(e,o,t){let r=await(0,Te.default)(o,{cwd:e}),n=(0,ne.createFilter)(o,t,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,m)=>{let w=(0,ne.normalizePath)(F.default.join(e,a));i+=`import * as m${m} from '${w}';
28
28
  `,c+=`m${m}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
29
29
  ${i}
30
30
  const exporters = [${c}];
@@ -42,10 +42,10 @@ const mockList = exporters.map((raw) => {
42
42
  }
43
43
  return mockConfig
44
44
  });
45
- export default transformMockData(mockList);`}async function bt(e,o,t){var r;try{let n=await(0,Le.build)({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[K(t),G,Q,V]});return{code:n.outputFiles[0].text,deps:((r=n.metafile)==null?void 0:r.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}var pe=require("buffer"),le=require("url"),qe=f(require("cookies"),1),Be=f(require("http-status"),1),Je=f(require("lodash.sortby"),1),B=f(require("mime-types"),1),ue=require("path-to-regexp"),P=f(require("picocolors"),1);var oe=f(require("co-body"),1),Ne=f(require("formidable"),1);async function He(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 oe.default.json(e);if(r.startsWith("application/x-www-form-urlencoded"))return await oe.default.form(e);if(r.startsWith("text/plain"))return await oe.default.text(e);if(r.startsWith("multipart/form-data"))return await xt(e,o)}catch(s){console.error(s)}}async function xt(e,o){let t=(0,Ne.default)(o);return new Promise((r,n)=>{t.parse(e,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function Ue(e,o){return F(e.headers,o.headers)&&F(e.body,o.body)&&F(e.params,o.params)&&F(e.query,o.query)&&F(e.refererQuery,o.refererQuery)}function F(e,o){if(!o)return!0;for(let t in o)if(o[t]!==e[t])return!1;return!0}var wt=/:/g;function me(e,{formidableOptions:o={},proxies:t,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:a,pathname:m}=(0,le.parse)(n.url,!0);if(!m||t.length===0||!t.some(v=>ee(v,n.url)))return i();let x=e.mockData,M=(0,Je.default)(Object.keys(x),v=>{var H;return((H=v.match(wt))==null?void 0:H.length)||0}).find(v=>(0,ue.pathToRegexp)(v).test(m));if(!M)return i();let{query:N}=(0,le.parse)(n.headers.referer||"",!0),_=await He(n,o),p=new qe.default(n,s,r),l=p.get.bind(p),u=n.method.toUpperCase(),d=St(x[M],{pathname:m,method:u,request:{query:a,refererQuery:N,body:_,headers:n.headers,getCookie:l}});if(!d)return i();C("middleware: ",u,n.url);let g=n,k=s;g.body=_,g.query=a,g.refererQuery=N,g.params=A(d.url,m),g.getCookie=l,k.setCookie=p.set.bind(p);let{body:y,delay:O,type:R="json",response:E,status:I=200,statusText:L}=d;if(ae(k,I,L),await Ot(g,k,d),await Pt(g,k,d),y){try{let v=j(y)?await y(g):y;await Ae(c,O),Rt(k,v,R)}catch(v){W.error(`${P.default.red("[body error]")} ${n.url}
46
- `,`file: ${P.default.cyan(d.__filepath__)}`,v),ae(k,500),s.end("")}return}if(E){try{await Ae(c,O),await E(g,k,i)}catch(v){W.error(`${P.default.red("[response error]")} ${n.url}
47
- `,`file: ${P.default.cyan(d.__filepath__)}`,v),ae(k,500),s.end("")}return}s.end("")}}function St(e,{pathname:o,method:t,request:r}){return e.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?S(n.method)?n.method:[n.method]:["GET","POST"]).includes(t))return!1;let i=(0,ue.pathToRegexp)(n.url).test(o);if(i&&n.validator){let c=A(n.url,o);if(j(n.validator))return n.validator({params:c,...r});try{return Ue({params:c,...r},n.validator)}catch(a){return W.error(`${P.default.red("[validator error]")} ${o}
48
- `,`file: ${P.default.cyan(n.__filepath__)}`,a),!1}}return i})}function ae(e,o=200,t){e.statusCode=o,e.statusMessage=t||jt(o)}async function Ot(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=j(r)?await r(e):r;Object.keys(c).forEach(a=>{o.setHeader(a,c[a])})}catch(c){W.error(`${P.default.red("[headers error]")} ${e.url}
49
- `,c)}}async function Pt(e,o,{cookies:t}){if(t)try{let r=j(t)?await t(e):t;Object.keys(r).forEach(n=>{let s=r[n];if(S(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){W.error(`${P.default.red("[cookies error]")} ${e.url}
50
- `,r)}}function Rt(e,o,t){if(De(o))o.pipe(e);else if(pe.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"?pe.Buffer.from(r):r)}}async function Ae(e,o){if(!o||o<=0)return;let t=Date.now()-e,r=o-t;r>0&&await _e(r)}function jt(e){return Be.default[e]||"Unknown"}var Qe=f(require("events"),1),re=f(require("fs"),1),Ve=require("module"),fe=f(require("path"),1),Ke=require("url"),ge=f(require("chokidar"),1),Xe=require("esbuild"),Ye=f(require("fast-glob"),1),D=require("vite");var ze=require("url"),Ge=f(require("lodash.sortby"),1);function de(e){let o=[];for(let[,r]of e.entries())r&&(S(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}=(0,ze.parse)(r.url,!0),i=t[n]??(t[n]=[]),c={...r,url:n};if(c.ws!==!0){let a=c.validator;ce(s)||(j(a)?c.validator=function(m){return F(m.query,s)&&a(m)}: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,Ge.default)(t[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return!s||ce(s)?2:j(s)?0:1/Object.keys(s).reduce((c,a)=>c+Ct(s[a]),0)})}),t}function Ct(e){return e?Object.keys(e).length:0}var Wt=Ee(h),T=(0,Ve.createRequire)(Wt),ne=class extends Qe.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=U(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,D.createFilter)(t,r,{resolve:!1});(0,Ye.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=ge.default.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:update",i),C("watcher:add",i)}),s.on("change",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:update",i),C("watcher:change",i)}),s.on("unlink",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:unlink",i),C("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let t=[];this.depsWatcher=ge.default.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=(0,D.normalizePath)(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=(0,D.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=de(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=>{S(i[a])?c.push(...i[a]):c.push(i[a])})),S(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,Ke.pathToFileURL)(s)}.mjs`;await re.default.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{re.default.unlinkSync(i)}catch{}}}else{t=fe.default.resolve(this.cwd,t);let s=fe.default.extname(t),i=re.default.realpathSync(t),c=s in T.extensions?s:".js",a=T.extensions[c];T.extensions[c]=(x,M)=>{M===i?x._compile(r,M):a(x,M)},delete T.cache[T.resolve(t)];let m=T(t);return T.extensions[c]=a,m.__esModule?m:{default:m}}}async transformWithEsbuild(t,r){var n;try{let s=await(0,Xe.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:[K(this.options.alias),G,V,Q]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};var ke=require("url"),et=f(require("cookies"),1),ye=require("path-to-regexp"),tt=f(require("picocolors"),1),ot=require("ws");function ve(e,o,t,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 u=p.get(l);return!u&&p.set(l,u=new ot.WebSocketServer({noServer:!0})),u},m=(p,l)=>{let u=n.get(p);!u&&n.set(p,u=new Set),u.add(l)},x=(p,l,u,d,g,k)=>{var y;try{(y=u.setup)==null||y.call(u,l,d),l.on("close",()=>p.delete(g))}catch(O){W.error(`${tt.default.red("[websocket server error]")} ${k}
51
- `,O)}},M=(p,l,u,d)=>{p.emit("connection",l,u),l.on("close",()=>{let g=d.findIndex(k=>k.ws===l);g!==-1&&d.splice(g,1)})},N=(p,l,u,d,g)=>{let{cleanupList:k,connectionList:y,context:O}=i.get(l);Ze(k),y.forEach(({ws:R})=>R.removeAllListeners()),l.removeAllListeners(),x(p,l,u,O,d,g),y.forEach(({ws:R,req:E})=>M(l,R,E,y))};(_=e.on)==null||_.call(e,"mock:update-end",p=>{if(!n.has(p))return;let l=n.get(p);if(l)for(let u of l.values())for(let d of e.mockData[u]){if(!d.ws||d.__filepath__!==p)return;let g=c(u);for(let[k,y]of g.entries())N(g,y,d,k,p)}}),o==null||o.on("upgrade",(p,l,u)=>{let{pathname:d,query:g}=(0,ke.parse)(p.url,!0);if(!d||t.length===0||!t.some(b=>ee(b,p.url)))return;let k=e.mockData,y=Object.keys(k).find(b=>(0,ye.pathToRegexp)(b).test(d));if(!y)return;let O=k[y].find(b=>b.url&&b.ws&&(0,ye.pathToRegexp)(b.url).test(d));if(!O)return;let R=O.__filepath__;m(R,y);let E=c(y),I=a(E,d),L=i.get(I);if(!L){let b=[],be={onCleanup:nt=>b.push(nt)};L={cleanupList:b,context:be,connectionList:[]},i.set(I,L),x(E,I,O,be,d,R)}let v=p,H=new et.default(p,p,r),{query:rt}=(0,ke.parse)(p.headers.referer||"",!0);v.query=g,v.refererQuery=rt,v.params=A(y,d),v.getCookie=H.get.bind(H),I.handleUpgrade(v,l,u,b=>{C(`websocket-mock: ${p.url} connected`),L.connectionList.push({req:v,ws:b}),M(I,b,v,L.connectionList)})}),o==null||o.on("close",()=>{for(let p of s.values()){for(let l of p.values()){let u=i.get(l);Ze(u.cleanupList),l.close()}p.clear()}s.clear(),n.clear()})}function Ze(e){let o;for(;o=e.shift();)o==null||o()}async function he(e,o,t,r){let n=new ne({include:w(o.include),exclude:w(o.exclude),define:z(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}=Z(e.server.proxy||{}),i=w(o.prefix);return ve(n,t,w(o.wsPrefix),o.cookiesOptions),me(n,{formidableOptions:o.formidableOptions,proxies:[...i,...s],cookiesOptions:o.cookiesOptions})}function Me({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},m=[_t(a)];return a.build&&m.push(Dt(a)),m}function Dt(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 Te(this,o,e)}}}function _t(e){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",config(t){var s;let r=w(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 he(r,e,n,s);t.use(i)},async configurePreviewServer({middlewares:t,httpServer:r}){let n=await he(o,e,r);t.use(n)}}}function Et(e){return e}function It(e){return t=>(S(t)?t=t.map(r=>e(r)||r):t=e(t)||t,t)}var Lt=Me;0&&(module.exports={baseMiddleware,createDefineMock,defineMock,mockDevServerPlugin,mockWebSocket,transformMockData});
45
+ export default transformMockData(mockList);`}async function bt(e,o,t){var r;try{let n=await(0,$e.build)({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[X(t),Q,V,K]});return{code:n.outputFiles[0].text,deps:((r=n.metafile)==null?void 0:r.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}var me=require("buffer"),Je=f(require("cookies"),1),ze=f(require("http-status"),1),Ge=f(require("lodash.sortby"),1),J=f(require("mime-types"),1),de=require("path-to-regexp"),P=f(require("picocolors"),1);var se=f(require("co-body"),1),He=f(require("formidable"),1);async function Ue(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 se.default.json(e);if(r.startsWith("application/x-www-form-urlencoded"))return await se.default.form(e);if(r.startsWith("text/plain"))return await se.default.text(e);if(r.startsWith("multipart/form-data"))return await xt(e,o)}catch(s){console.error(s)}}async function xt(e,o){let t=(0,He.default)(o);return new Promise((r,n)=>{t.parse(e,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function Ae(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(v(e)&&v(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 te(e)&&te(o)?_(e,o):e===o}var wt=/:/g;function fe(e,{formidableOptions:o={},proxies:t,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:a,pathname:m}=D(n.url);if(!m||t.length===0||!t.some(h=>re(h,n.url)))return i();let w=e.mockData,b=(0,Ge.default)(Object.keys(w),h=>{var U;return((U=h.match(wt))==null?void 0:U.length)||0}).find(h=>(0,de.pathToRegexp)(h).test(m));if(!b)return i();let{query:H}=D(n.headers.referer||""),I=await Ue(n,o),p=new Je.default(n,s,r),l=p.get.bind(p),u=n.method.toUpperCase(),d=St(w[b],{pathname:m,method:u,request:{query:a,refererQuery:H,body:I,headers:n.headers,getCookie:l}});if(!d)return i();C("middleware: ",u,n.url);let k=n,g=s;k.body=I,k.query=a,k.refererQuery=H,k.params=q(d.url,m),k.getCookie=l,g.setCookie=p.set.bind(p);let{body:y,delay:O,type:j="json",response:L,status:$=200,statusText:T}=d;if(ue(g,$,T),await Ot(k,g,d),await Pt(k,g,d),y){try{let h=R(y)?await y(k):y;await Be(c,O),jt(g,h,j)}catch(h){W.error(`${P.default.red("[body error]")} ${n.url}
46
+ `,`file: ${P.default.cyan(d.__filepath__)}`,h),ue(g,500),s.end("")}return}if(L){try{await Be(c,O),await L(k,g,i)}catch(h){W.error(`${P.default.red("[response error]")} ${n.url}
47
+ `,`file: ${P.default.cyan(d.__filepath__)}`,h),ue(g,500),s.end("")}return}s.end("")}}function St(e,{pathname:o,method:t,request:r}){return e.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?v(n.method)?n.method:[n.method]:["GET","POST"]).includes(t))return!1;let i=(0,de.pathToRegexp)(n.url).test(o);if(i&&n.validator){let c=q(n.url,o);if(R(n.validator))return n.validator({params:c,...r});try{return Ae({params:c,...r},n.validator)}catch(a){return W.error(`${P.default.red("[validator error]")} ${o}
48
+ `,`file: ${P.default.cyan(n.__filepath__)}`,a),!1}}return i})}function ue(e,o=200,t){e.statusCode=o,e.statusMessage=t||Rt(o)}async function Ot(e,o,t){let{headers:r,type:n="json"}=t,s=t.__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=R(r)?await r(e):r;Object.keys(c).forEach(a=>{o.setHeader(a,c[a])})}catch(c){W.error(`${P.default.red("[headers error]")} ${e.url}
49
+ `,c)}}async function Pt(e,o,{cookies:t}){if(t)try{let r=R(t)?await t(e):t;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){W.error(`${P.default.red("[cookies error]")} ${e.url}
50
+ `,r)}}function jt(e,o,t){if(_e(o))o.pipe(e);else if(me.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"?me.Buffer.from(r):r)}}async function Be(e,o){if(!o||typeof o=="number"&&o<=0||v(o)&&o.length!==2)return;let t=0;if(v(o)){let[r,n]=o;t=Math.floor(Math.random()*(n-r+1))+r}else t=o-(Date.now()-e);t>0&&await Ee(t)}function Rt(e){return ze.default[e]||"Unknown"}var Ve=f(require("events"),1),ie=f(require("fs"),1),Ke=require("module"),ge=f(require("path"),1),Xe=require("url"),ye=f(require("chokidar"),1),Ye=require("esbuild"),Ze=f(require("fast-glob"),1),E=require("vite");var Qe=f(require("lodash.sortby"),1);function ke(e){let o=[];for(let[,r]of e.entries())r&&(v(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)||(R(a)?c.validator=function(m){return _(m.query,s)&&a(m)}: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,Qe.default)(t[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return!s||le(s)?2:R(s)?0:1/Object.keys(s).reduce((c,a)=>c+Ct(s[a]),0)})}),t}function Ct(e){return e?Object.keys(e).length:0}var Wt=Ie(M),N=(0,Ke.createRequire)(Wt),ce=class extends Ve.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,Ze.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=ye.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),C("watcher:add",i)}),s.on("change",async i=>{i=(0,E.normalizePath)(i),this.emit("mock:update",i),C("watcher:change",i)}),s.on("unlink",async i=>{i=(0,E.normalizePath)(i),this.emit("mock:unlink",i),C("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let t=[];this.depsWatcher=ye.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=ke(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=>{v(i[a])?c.push(...i[a]):c.push(i[a])})),v(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,Xe.pathToFileURL)(s)}.mjs`;await ie.default.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{ie.default.unlinkSync(i)}catch{}}}else{t=ge.default.resolve(this.cwd,t);let s=ge.default.extname(t),i=ie.default.realpathSync(t),c=s in N.extensions?s:".js",a=N.extensions[c];N.extensions[c]=(w,b)=>{b===i?w._compile(r,b):a(w,b)},delete N.cache[N.resolve(t)];let m=N(t);return N.extensions[c]=a,m.__esModule?m:{default:m}}}async transformWithEsbuild(t,r){var n;try{let s=await(0,Ye.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:[X(this.options.alias),Q,K,V]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};var tt=f(require("cookies"),1),he=require("path-to-regexp"),ot=f(require("picocolors"),1),rt=require("ws");function ve(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 u=p.get(l);return!u&&p.set(l,u=new rt.WebSocketServer({noServer:!0})),u},m=(p,l)=>{let u=n.get(p);!u&&n.set(p,u=new Set),u.add(l)},w=(p,l,u,d,k,g)=>{var y;try{(y=u.setup)==null||y.call(u,l,d),l.on("close",()=>p.delete(k))}catch(O){W.error(`${ot.default.red("[websocket server error]")} ${g}
51
+ `,O)}},b=(p,l,u,d)=>{p.emit("connection",l,u),l.on("close",()=>{let k=d.findIndex(g=>g.ws===l);k!==-1&&d.splice(k,1)})},H=(p,l,u,d,k)=>{let{cleanupList:g,connectionList:y,context:O}=i.get(l);et(g),y.forEach(({ws:j})=>j.removeAllListeners()),l.removeAllListeners(),w(p,l,u,O,d,k),y.forEach(({ws:j,req:L})=>b(l,j,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 u of l.values())for(let d of e.mockData[u]){if(!d.ws||d.__filepath__!==p)return;let k=c(u);for(let[g,y]of k.entries())H(k,y,d,g,p)}}),o==null||o.on("upgrade",(p,l,u)=>{let{pathname:d,query:k}=D(p.url);if(!d||t.length===0||!t.some(x=>re(x,p.url)))return;let g=e.mockData,y=Object.keys(g).find(x=>(0,he.pathToRegexp)(x).test(d));if(!y)return;let O=g[y].find(x=>x.url&&x.ws&&(0,he.pathToRegexp)(x.url).test(d));if(!O)return;let j=O.__filepath__;m(j,y);let L=c(y),$=a(L,d),T=i.get($);if(!T){let x=[],xe={onCleanup:st=>x.push(st)};T={cleanupList:x,context:xe,connectionList:[]},i.set($,T),w(L,$,O,xe,d,j)}let h=p,U=new tt.default(p,p,r),{query:nt}=D(p.headers.referer||"");h.query=k,h.refererQuery=nt,h.params=q(y,d),h.getCookie=U.get.bind(U),$.handleUpgrade(h,l,u,x=>{C(`websocket-mock: ${p.url} connected`),T.connectionList.push({req:h,ws:x}),b($,x,h,T.connectionList)})}),o==null||o.on("close",()=>{for(let p of s.values()){for(let l of p.values()){let u=i.get(l);et(u.cleanupList),l.close()}p.clear()}s.clear(),n.clear()})}function et(e){let o;for(;o=e.shift();)o==null||o()}async function Me(e,o,t,r){let n=new ce({include:S(o.include),exclude:S(o.exclude),define:G(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}=oe(e.server.proxy||{}),i=S(o.prefix);return ve(n,t,S(o.wsPrefix),o.cookiesOptions),fe(n,{formidableOptions:o.formidableOptions,proxies:[...i,...s],cookiesOptions:o.cookiesOptions})}function be({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},m=[_t(a)];return a.build&&m.push(Dt(a)),m}function Dt(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 Ne(this,o,e)}}}function _t(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 Me(r,e,n,s);t.use(i)},async configurePreviewServer({middlewares:t,httpServer:r}){let n=await Me(o,e,r);t.use(n)}}}function Et(e){return e}function It(e){return t=>(v(t)?t=t.map(r=>e(r)||r):t=e(t)||t,t)}var Lt=be;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, unit: `ms`
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
- * 配置响应延迟时间, 单位: `ms`
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
  *
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import Ue from"fs";import X from"fs/promises";import T from"path";import{build as qe}from"esbuild";import Be from"fast-glob";import Je from"is-core-module";import{createFilter as ze,normalizePath as Ge}from"vite";var ae="vite-plugin-mock-dev-server",pe="1.1.12";var Ee=/import\.meta\.env\.(.+)/;function B(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={};for(let c in t.define){let a=t.define[c];r[c]=typeof a=="string"?a:JSON.stringify(a);let m=c.match(Ee);m&&(n[m[1]]=`__vite__define__${r[c]}`)}let s={},i={};s["import.meta.hot"]="undefined";for(let c in t.env)s[`import.meta.env.${c}`]=JSON.stringify(t.env[c]);return Object.assign(i,{"import.meta.env":JSON.stringify({...t.env,...n}).replace(/"__vite__define__(.+?)"([,}])/g,(c,a,m)=>`${a.replace(/(^\\")|(\\"$)/g,'"')}${m}`)}),{...s,...i,...o}}import le from"fs/promises";import Ie from"path";import Le from"json5";var J={name:"externalize-deps",setup(t){t.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Ie.isAbsolute(o))return{external:!0}})}},z={name:"json5-loader",setup(t){t.onLoad({filter:/\.json5$/},async({path:o})=>{let e=await le.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Le.parse(e))}`,loader:"js"}})}},G={name:"json-loader",setup(t){t.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await le.readFile(o,"utf-8")}`,loader:"js"}))}},Q=t=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:e})=>{let r=t.find(({find:c})=>$e(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 $e(t,o){return t instanceof RegExp?t.test(o):o.length<t.length?!1:o===t?!0:o.startsWith(`${t}/`)}import Z from"fs";import ee from"path";import{fileURLToPath as Fe}from"url";import Te from"debug";import{match as Ne}from"path-to-regexp";import ue from"picocolors";var S=t=>Array.isArray(t),j=t=>typeof t=="function",He=t=>Object.prototype.toString.call(t)==="[object Object]",te=t=>He(t)&&Object.keys(t).length===0,Ae=t=>t!==null&&typeof t=="object"&&typeof t.pipe=="function",me=t=>Ae(t)&&t.readable!==!1&&typeof t._read=="function"&&typeof t._readableState=="object";function de(t){return new Promise(o=>setTimeout(o,t))}function fe(t){return ee.dirname(Fe(t))}var C=Te("vite:plugin-mock-dev-server"),w=t=>S(t)?t:t==null?[]:[t],R={info(...t){console.info(ue.cyan("mock-dev-server: "),...t)},error(...t){console.error(`
2
- `,ue.cyan("mock-dev-server: "),...t,`
3
- `)}};function H(t,o,e){for(let n of o){let s=ee.join(t,n);if(Z.existsSync(s)&&Z.statSync(s).isFile()){let i=e!=null&&e.pathOnly?s:Z.readFileSync(s,"utf-8");if(!(e!=null&&e.predicate)||e.predicate(i))return i}}let r=ee.dirname(t);if(r!==t&&(!(e!=null&&e.rootDir)||r.startsWith(e==null?void 0:e.rootDir)))return H(r,o,e)}var V=(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 K(t,o){return t[0]==="^"&&new RegExp(t).test(o)||o.startsWith(t)}function A(t,o){return(Ne(t,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}async function ge(t,o,e){let r=w(e.include),n=w(e.exclude),s=B(o),{httpProxies:i}=V(o.server.proxy||{});i.push(...w(e.prefix));let c=w(e.wsPrefix),a={};try{let u=H(o.root,["package.json"]);u&&(a=JSON.parse(u))}catch{}let m=e.build.dist,x=await Xe(process.cwd(),r,n),v=T.join(o.root,`mock-data-${Date.now()}.js`);await X.writeFile(v,x,"utf-8");let{code:F,deps:D}=await Ye(v,s,o.resolve.alias),p=Qe(D);await X.unlink(v);let l=[{filename:T.join(m,"mock-data.js"),source:F},{filename:T.join(m,"index.js"),source:Ke(i,c,e.cookiesOptions,e.build.serverPort)},{filename:T.join(m,"package.json"),source:Ve(a,p)}];try{if(T.isAbsolute(m)){await X.rm(m,{recursive:!0}),Ue.mkdirSync(m,{recursive:!0});for(let{filename:u,source:d}of l)await X.writeFile(u,d,"utf-8")}else for(let{filename:u,source:d}of l)t.emitFile({type:"asset",fileName:u,source:d})}catch{}}function Qe(t){let o=new Set,e=[ae,"connect","cors"];return Object.keys(t).forEach(r=>{t[r].imports.filter(s=>s.external).map(s=>s.path).forEach(s=>{!e.includes(s)&&!Je(s)&&o.add(s)})}),Array.from(o)}function Ve(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":`^${pe}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function Ke(t,o,e={},r=8080){return`import { createServer } from 'node:http';
1
+ import Be from"fs";import Z from"fs/promises";import N from"path";import{build as Je}from"esbuild";import ze from"fast-glob";import Ge from"is-core-module";import{createFilter as Qe,normalizePath as Ve}from"vite";var le="vite-plugin-mock-dev-server",ue="1.1.14";var Ie=/import\.meta\.env\.(.+)/;function J(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={};for(let c in t.define){let a=t.define[c];r[c]=typeof a=="string"?a:JSON.stringify(a);let m=c.match(Ie);m&&(n[m[1]]=`__vite__define__${r[c]}`)}let s={},i={};s["import.meta.hot"]="undefined";for(let c in t.env)s[`import.meta.env.${c}`]=JSON.stringify(t.env[c]);return Object.assign(i,{"import.meta.env":JSON.stringify({...t.env,...n}).replace(/"__vite__define__(.+?)"([,}])/g,(c,a,m)=>`${a.replace(/(^\\")|(\\"$)/g,'"')}${m}`)}),{...s,...r,...i,...o}}import me from"fs/promises";import Le from"path";import $e from"json5";var z={name:"externalize-deps",setup(t){t.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Le.isAbsolute(o))return{external:!0}})}},G={name:"json5-loader",setup(t){t.onLoad({filter:/\.json5$/},async({path:o})=>{let e=await me.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify($e.parse(e))}`,loader:"js"}})}},Q={name:"json-loader",setup(t){t.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await me.readFile(o,"utf-8")}`,loader:"js"}))}},V=t=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:e})=>{let r=t.find(({find:c})=>Te(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 Te(t,o){return t instanceof RegExp?t.test(o):o.length<t.length?!1:o===t?!0:o.startsWith(`${t}/`)}import te from"fs";import oe from"path";import{parse as Fe}from"querystring";import{URL as Ne,fileURLToPath as He}from"url";import Ae from"debug";import{match as Ue}from"path-to-regexp";import de from"picocolors";var h=t=>Array.isArray(t),j=t=>typeof t=="function",K=t=>Object.prototype.toString.call(t)==="[object Object]",re=t=>K(t)&&Object.keys(t).length===0,qe=t=>t!==null&&typeof t=="object"&&typeof t.pipe=="function",fe=t=>qe(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(He(t))}var C=Ae("vite:plugin-mock-dev-server"),S=t=>h(t)?t:t==null?[]:[t],R={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 X=(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 Y(t,o){return t[0]==="^"&&new RegExp(t).test(o)||o.startsWith(t)}function U(t,o){return(Ue(t,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}function W(t){let o=new Ne(t,"http://example.com"),e=decodeURIComponent(o.pathname),r=Fe(o.search.replace(/^\?/,""));return{pathname:e,query:r}}async function ye(t,o,e){let r=S(e.include),n=S(e.exclude),s=J(o),{httpProxies:i}=X(o.server.proxy||{});i.push(...S(e.prefix));let c=S(e.wsPrefix),a={};try{let u=A(o.root,["package.json"]);u&&(a=JSON.parse(u))}catch{}let m=e.build.dist,w=await Ze(process.cwd(),r,n),v=N.join(o.root,`mock-data-${Date.now()}.js`);await Z.writeFile(v,w,"utf-8");let{code:F,deps:E}=await et(v,s,o.resolve.alias),p=Ke(E);await Z.unlink(v);let l=[{filename:N.join(m,"mock-data.js"),source:F},{filename:N.join(m,"index.js"),source:Ye(i,c,e.cookiesOptions,e.build.serverPort)},{filename:N.join(m,"package.json"),source:Xe(a,p)}];try{if(N.isAbsolute(m)){await Z.rm(m,{recursive:!0}),Be.mkdirSync(m,{recursive:!0});for(let{filename:u,source:d}of l)await Z.writeFile(u,d,"utf-8")}else for(let{filename:u,source:d}of l)t.emitFile({type:"asset",fileName:u,source:d})}catch{}}function Ke(t){let o=new Set,e=[le,"connect","cors"];return Object.keys(t).forEach(r=>{t[r].imports.filter(s=>s.external).map(s=>s.path).forEach(s=>{!e.includes(s)&&!Ge(s)&&o.add(s)})}),Array.from(o)}function Xe(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":`^${ue}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function Ye(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,7 +24,7 @@ app.use(baseMiddleware({ mockData }, {
24
24
  server.listen(${r});
25
25
 
26
26
  console.log('listen: http://localhost:${r}');
27
- `}async function Xe(t,o,e){let r=await Be(o,{cwd:t}),n=ze(o,e,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,m)=>{let x=Ge(T.join(t,a));i+=`import * as m${m} from '${x}';
27
+ `}async function Ze(t,o,e){let r=await ze(o,{cwd:t}),n=Qe(o,e,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,m)=>{let w=Ve(N.join(t,a));i+=`import * as m${m} from '${w}';
28
28
  `,c+=`m${m}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
29
29
  ${i}
30
30
  const exporters = [${c}];
@@ -42,10 +42,10 @@ const mockList = exporters.map((raw) => {
42
42
  }
43
43
  return mockConfig
44
44
  });
45
- export default transformMockData(mockList);`}async function Ye(t,o,e){var r;try{let n=await qe({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[Q(e),J,z,G]});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 ve}from"buffer";import{parse as he}from"url";import tt from"cookies";import ot from"http-status";import rt from"lodash.sortby";import*as U from"mime-types";import{pathToRegexp as be}from"path-to-regexp";import W from"picocolors";import oe from"co-body";import Ze from"formidable";async function ke(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 oe.json(t);if(r.startsWith("application/x-www-form-urlencoded"))return await oe.form(t);if(r.startsWith("text/plain"))return await oe.text(t);if(r.startsWith("multipart/form-data"))return await et(t,o)}catch(s){console.error(s)}}async function et(t,o){let e=Ze(o);return new Promise((r,n)=>{e.parse(t,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function ye(t,o){return L(t.headers,o.headers)&&L(t.body,o.body)&&L(t.params,o.params)&&L(t.query,o.query)&&L(t.refererQuery,o.refererQuery)}function L(t,o){if(!o)return!0;for(let e in o)if(o[e]!==t[e])return!1;return!0}var nt=/:/g;function xe(t,{formidableOptions:o={},proxies:e,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:a,pathname:m}=he(n.url,!0);if(!m||e.length===0||!e.some(y=>K(y,n.url)))return i();let x=t.mockData,v=rt(Object.keys(x),y=>{var N;return((N=y.match(nt))==null?void 0:N.length)||0}).find(y=>be(y).test(m));if(!v)return i();let{query:F}=he(n.headers.referer||"",!0),D=await ke(n,o),p=new tt(n,s,r),l=p.get.bind(p),u=n.method.toUpperCase(),d=st(x[v],{pathname:m,method:u,request:{query:a,refererQuery:F,body:D,headers:n.headers,getCookie:l}});if(!d)return i();C("middleware: ",u,n.url);let f=n,g=s;f.body=D,f.query=a,f.refererQuery=F,f.params=A(d.url,m),f.getCookie=l,g.setCookie=p.set.bind(p);let{body:k,delay:O,type:P="json",response:_,status:E=200,statusText:I}=d;if(re(g,E,I),await it(f,g,d),await ct(f,g,d),k){try{let y=j(k)?await k(f):k;await Me(c,O),at(g,y,P)}catch(y){R.error(`${W.red("[body error]")} ${n.url}
46
- `,`file: ${W.cyan(d.__filepath__)}`,y),re(g,500),s.end("")}return}if(_){try{await Me(c,O),await _(f,g,i)}catch(y){R.error(`${W.red("[response error]")} ${n.url}
47
- `,`file: ${W.cyan(d.__filepath__)}`,y),re(g,500),s.end("")}return}s.end("")}}function st(t,{pathname:o,method:e,request:r}){return t.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?S(n.method)?n.method:[n.method]:["GET","POST"]).includes(e))return!1;let i=be(n.url).test(o);if(i&&n.validator){let c=A(n.url,o);if(j(n.validator))return n.validator({params:c,...r});try{return ye({params:c,...r},n.validator)}catch(a){return R.error(`${W.red("[validator error]")} ${o}
48
- `,`file: ${W.cyan(n.__filepath__)}`,a),!1}}return i})}function re(t,o=200,e){t.statusCode=o,t.statusMessage=e||pt(o)}async function it(t,o,e){let{headers:r,type:n="json"}=e,s=e.__filepath__,i=U.contentType(n)||U.contentType(U.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=j(r)?await r(t):r;Object.keys(c).forEach(a=>{o.setHeader(a,c[a])})}catch(c){R.error(`${W.red("[headers error]")} ${t.url}
49
- `,c)}}async function ct(t,o,{cookies:e}){if(e)try{let r=j(e)?await e(t):e;Object.keys(r).forEach(n=>{let s=r[n];if(S(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){R.error(`${W.red("[cookies error]")} ${t.url}
50
- `,r)}}function at(t,o,e){if(me(o))o.pipe(t);else if(ve.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"?ve.from(r):r)}}async function Me(t,o){if(!o||o<=0)return;let e=Date.now()-t,r=o-e;r>0&&await de(r)}function pt(t){return ot[t]||"Unknown"}import dt from"events";import ne from"fs";import{createRequire as ft}from"module";import Se from"path";import{pathToFileURL as gt}from"url";import Oe from"chokidar";import{build as kt}from"esbuild";import yt from"fast-glob";import{createFilter as vt,normalizePath as q}from"vite";import{parse as lt}from"url";import ut from"lodash.sortby";function we(t){let o=[];for(let[,r]of t.entries())r&&(S(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}=lt(r.url,!0),i=e[n]??(e[n]=[]),c={...r,url:n};if(c.ws!==!0){let a=c.validator;te(s)||(j(a)?c.validator=function(m){return L(m.query,s)&&a(m)}: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]=ut(e[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return!s||te(s)?2:j(s)?0:1/Object.keys(s).reduce((c,a)=>c+mt(s[a]),0)})}),e}function mt(t){return t?Object.keys(t).length:0}var ht=fe(import.meta.url),$=ft(ht),Y=class extends dt{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=H(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=vt(e,r,{resolve:!1});yt(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=Oe.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),C("watcher:add",i)}),s.on("change",async i=>{i=q(i),this.emit("mock:update",i),C("watcher:change",i)}),s.on("unlink",async i=>{i=q(i),this.emit("mock:unlink",i),C("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let e=[];this.depsWatcher=Oe.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=we(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=>{S(i[a])?c.push(...i[a]):c.push(i[a])})),S(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=`${gt(s)}.mjs`;await ne.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{ne.unlinkSync(i)}catch{}}}else{e=Se.resolve(this.cwd,e);let s=Se.extname(e),i=ne.realpathSync(e),c=s in $.extensions?s:".js",a=$.extensions[c];$.extensions[c]=(x,v)=>{v===i?x._compile(r,v):a(x,v)},delete $.cache[$.resolve(e)];let m=$(e);return $.extensions[c]=a,m.__esModule?m:{default:m}}}async transformWithEsbuild(e,r){var n;try{let s=await kt({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:[Q(this.options.alias),J,G,z]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};import{parse as Pe}from"url";import Mt from"cookies";import{pathToRegexp as je}from"path-to-regexp";import bt from"picocolors";import{WebSocketServer as xt}from"ws";function Re(t,o,e,r){var D;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 u=p.get(l);return!u&&p.set(l,u=new xt({noServer:!0})),u},m=(p,l)=>{let u=n.get(p);!u&&n.set(p,u=new Set),u.add(l)},x=(p,l,u,d,f,g)=>{var k;try{(k=u.setup)==null||k.call(u,l,d),l.on("close",()=>p.delete(f))}catch(O){R.error(`${bt.red("[websocket server error]")} ${g}
51
- `,O)}},v=(p,l,u,d)=>{p.emit("connection",l,u),l.on("close",()=>{let f=d.findIndex(g=>g.ws===l);f!==-1&&d.splice(f,1)})},F=(p,l,u,d,f)=>{let{cleanupList:g,connectionList:k,context:O}=i.get(l);Ce(g),k.forEach(({ws:P})=>P.removeAllListeners()),l.removeAllListeners(),x(p,l,u,O,d,f),k.forEach(({ws:P,req:_})=>v(l,P,_,k))};(D=t.on)==null||D.call(t,"mock:update-end",p=>{if(!n.has(p))return;let l=n.get(p);if(l)for(let u of l.values())for(let d of t.mockData[u]){if(!d.ws||d.__filepath__!==p)return;let f=c(u);for(let[g,k]of f.entries())F(f,k,d,g,p)}}),o==null||o.on("upgrade",(p,l,u)=>{let{pathname:d,query:f}=Pe(p.url,!0);if(!d||e.length===0||!e.some(h=>K(h,p.url)))return;let g=t.mockData,k=Object.keys(g).find(h=>je(h).test(d));if(!k)return;let O=g[k].find(h=>h.url&&h.ws&&je(h.url).test(d));if(!O)return;let P=O.__filepath__;m(P,k);let _=c(k),E=a(_,d),I=i.get(E);if(!I){let h=[],ie={onCleanup:_e=>h.push(_e)};I={cleanupList:h,context:ie,connectionList:[]},i.set(E,I),x(_,E,O,ie,d,P)}let y=p,N=new Mt(p,p,r),{query:De}=Pe(p.headers.referer||"",!0);y.query=f,y.refererQuery=De,y.params=A(k,d),y.getCookie=N.get.bind(N),E.handleUpgrade(y,l,u,h=>{C(`websocket-mock: ${p.url} connected`),I.connectionList.push({req:y,ws:h}),v(E,h,y,I.connectionList)})}),o==null||o.on("close",()=>{for(let p of s.values()){for(let l of p.values()){let u=i.get(l);Ce(u.cleanupList),l.close()}p.clear()}s.clear(),n.clear()})}function Ce(t){let o;for(;o=t.shift();)o==null||o()}async function se(t,o,e,r){let n=new Y({include:w(o.include),exclude:w(o.exclude),define:B(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}=V(t.server.proxy||{}),i=w(o.prefix);return Re(n,e,w(o.wsPrefix),o.cookiesOptions),xe(n,{formidableOptions:o.formidableOptions,proxies:[...i,...s],cookiesOptions:o.cookiesOptions})}function We({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},m=[St(a)];return a.build&&m.push(wt(a)),m}function wt(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 ge(this,o,t)}}}function St(t){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",config(e){var s;let r=w(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 se(r,t,n,s);e.use(i)},async configurePreviewServer({middlewares:e,httpServer:r}){let n=await se(o,t,r);e.use(n)}}}function ir(t){return t}function cr(t){return e=>(S(e)?e=e.map(r=>t(r)||r):e=t(e)||e,e)}var ur=We;export{xe as baseMiddleware,cr as createDefineMock,ur as default,ir as defineMock,We as mockDevServerPlugin,Re as mockWebSocket,we as transformMockData};
45
+ export default transformMockData(mockList);`}async function et(t,o,e){var r;try{let n=await Je({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[V(e),z,G,Q]});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 be}from"buffer";import rt from"cookies";import nt from"http-status";import st from"lodash.sortby";import*as q from"mime-types";import{pathToRegexp as we}from"path-to-regexp";import _ from"picocolors";import ne from"co-body";import tt from"formidable";async function he(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 ne.json(t);if(r.startsWith("application/x-www-form-urlencoded"))return await ne.form(t);if(r.startsWith("text/plain"))return await ne.text(t);if(r.startsWith("multipart/form-data"))return await ot(t,o)}catch(s){console.error(s)}}async function ot(t,o){let e=tt(o);return new Promise((r,n)=>{e.parse(t,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function ve(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(!Me(t[e],o[e]))return!1;return!0}function Me(t,o){if(h(t)&&h(o)){let e=new Set;return o.every(r=>t.some((n,s)=>{if(e.has(s))return!1;let i=Me(n,r);return i&&e.add(s),i}))}return K(t)&&K(o)?D(t,o):t===o}var it=/:/g;function Se(t,{formidableOptions:o={},proxies:e,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:a,pathname:m}=W(n.url);if(!m||e.length===0||!e.some(y=>Y(y,n.url)))return i();let w=t.mockData,v=st(Object.keys(w),y=>{var H;return((H=y.match(it))==null?void 0:H.length)||0}).find(y=>we(y).test(m));if(!v)return i();let{query:F}=W(n.headers.referer||""),E=await he(n,o),p=new rt(n,s,r),l=p.get.bind(p),u=n.method.toUpperCase(),d=ct(w[v],{pathname:m,method:u,request:{query:a,refererQuery:F,body:E,headers:n.headers,getCookie:l}});if(!d)return i();C("middleware: ",u,n.url);let f=n,k=s;f.body=E,f.query=a,f.refererQuery=F,f.params=U(d.url,m),f.getCookie=l,k.setCookie=p.set.bind(p);let{body:g,delay:O,type:P="json",response:I,status:L=200,statusText:$}=d;if(se(k,L,$),await at(f,k,d),await pt(f,k,d),g){try{let y=j(g)?await g(f):g;await xe(c,O),lt(k,y,P)}catch(y){R.error(`${_.red("[body error]")} ${n.url}
46
+ `,`file: ${_.cyan(d.__filepath__)}`,y),se(k,500),s.end("")}return}if(I){try{await xe(c,O),await I(f,k,i)}catch(y){R.error(`${_.red("[response error]")} ${n.url}
47
+ `,`file: ${_.cyan(d.__filepath__)}`,y),se(k,500),s.end("")}return}s.end("")}}function ct(t,{pathname:o,method:e,request:r}){return t.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?h(n.method)?n.method:[n.method]:["GET","POST"]).includes(e))return!1;let i=we(n.url).test(o);if(i&&n.validator){let c=U(n.url,o);if(j(n.validator))return n.validator({params:c,...r});try{return ve({params:c,...r},n.validator)}catch(a){return R.error(`${_.red("[validator error]")} ${o}
48
+ `,`file: ${_.cyan(n.__filepath__)}`,a),!1}}return i})}function se(t,o=200,e){t.statusCode=o,t.statusMessage=e||ut(o)}async function at(t,o,e){let{headers:r,type:n="json"}=e,s=e.__filepath__,i=q.contentType(n)||q.contentType(q.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=j(r)?await r(t):r;Object.keys(c).forEach(a=>{o.setHeader(a,c[a])})}catch(c){R.error(`${_.red("[headers error]")} ${t.url}
49
+ `,c)}}async function pt(t,o,{cookies:e}){if(e)try{let r=j(e)?await e(t):e;Object.keys(r).forEach(n=>{let s=r[n];if(h(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){R.error(`${_.red("[cookies error]")} ${t.url}
50
+ `,r)}}function lt(t,o,e){if(fe(o))o.pipe(t);else if(be.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"?be.from(r):r)}}async function xe(t,o){if(!o||typeof o=="number"&&o<=0||h(o)&&o.length!==2)return;let e=0;if(h(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 ut(t){return nt[t]||"Unknown"}import ft from"events";import ie from"fs";import{createRequire as kt}from"module";import Pe from"path";import{pathToFileURL as gt}from"url";import je from"chokidar";import{build as yt}from"esbuild";import ht from"fast-glob";import{createFilter as vt,normalizePath as B}from"vite";import mt from"lodash.sortby";function Oe(t){let o=[];for(let[,r]of t.entries())r&&(h(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)||(j(a)?c.validator=function(m){return D(m.query,s)&&a(m)}: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]=mt(e[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return!s||re(s)?2:j(s)?0:1/Object.keys(s).reduce((c,a)=>c+dt(s[a]),0)})}),e}function dt(t){return t?Object.keys(t).length:0}var Mt=ge(import.meta.url),T=kt(Mt),ee=class extends ft{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=vt(e,r,{resolve:!1});ht(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=je.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=B(i),this.emit("mock:update",i),C("watcher:add",i)}),s.on("change",async i=>{i=B(i),this.emit("mock:update",i),C("watcher:change",i)}),s.on("unlink",async i=>{i=B(i),this.emit("mock:unlink",i),C("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let e=[];this.depsWatcher=je.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=B(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=B(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=Oe(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=>{h(i[a])?c.push(...i[a]):c.push(i[a])})),h(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=`${gt(s)}.mjs`;await ie.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{ie.unlinkSync(i)}catch{}}}else{e=Pe.resolve(this.cwd,e);let s=Pe.extname(e),i=ie.realpathSync(e),c=s in T.extensions?s:".js",a=T.extensions[c];T.extensions[c]=(w,v)=>{v===i?w._compile(r,v):a(w,v)},delete T.cache[T.resolve(e)];let m=T(e);return T.extensions[c]=a,m.__esModule?m:{default:m}}}async transformWithEsbuild(e,r){var n;try{let s=await yt({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:[V(this.options.alias),z,Q,G]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};import bt from"cookies";import{pathToRegexp as Ce}from"path-to-regexp";import xt from"picocolors";import{WebSocketServer as wt}from"ws";function We(t,o,e,r){var E;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 u=p.get(l);return!u&&p.set(l,u=new wt({noServer:!0})),u},m=(p,l)=>{let u=n.get(p);!u&&n.set(p,u=new Set),u.add(l)},w=(p,l,u,d,f,k)=>{var g;try{(g=u.setup)==null||g.call(u,l,d),l.on("close",()=>p.delete(f))}catch(O){R.error(`${xt.red("[websocket server error]")} ${k}
51
+ `,O)}},v=(p,l,u,d)=>{p.emit("connection",l,u),l.on("close",()=>{let f=d.findIndex(k=>k.ws===l);f!==-1&&d.splice(f,1)})},F=(p,l,u,d,f)=>{let{cleanupList:k,connectionList:g,context:O}=i.get(l);Re(k),g.forEach(({ws:P})=>P.removeAllListeners()),l.removeAllListeners(),w(p,l,u,O,d,f),g.forEach(({ws:P,req:I})=>v(l,P,I,g))};(E=t.on)==null||E.call(t,"mock:update-end",p=>{if(!n.has(p))return;let l=n.get(p);if(l)for(let u of l.values())for(let d of t.mockData[u]){if(!d.ws||d.__filepath__!==p)return;let f=c(u);for(let[k,g]of f.entries())F(f,g,d,k,p)}}),o==null||o.on("upgrade",(p,l,u)=>{let{pathname:d,query:f}=W(p.url);if(!d||e.length===0||!e.some(M=>Y(M,p.url)))return;let k=t.mockData,g=Object.keys(k).find(M=>Ce(M).test(d));if(!g)return;let O=k[g].find(M=>M.url&&M.ws&&Ce(M.url).test(d));if(!O)return;let P=O.__filepath__;m(P,g);let I=c(g),L=a(I,d),$=i.get(L);if(!$){let M=[],ae={onCleanup:Ee=>M.push(Ee)};$={cleanupList:M,context:ae,connectionList:[]},i.set(L,$),w(I,L,O,ae,d,P)}let y=p,H=new bt(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,u,M=>{C(`websocket-mock: ${p.url} connected`),$.connectionList.push({req:y,ws:M}),v(L,M,y,$.connectionList)})}),o==null||o.on("close",()=>{for(let p of s.values()){for(let l of p.values()){let u=i.get(l);Re(u.cleanupList),l.close()}p.clear()}s.clear(),n.clear()})}function Re(t){let o;for(;o=t.shift();)o==null||o()}async function ce(t,o,e,r){let n=new ee({include:S(o.include),exclude:S(o.exclude),define:J(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}=X(t.server.proxy||{}),i=S(o.prefix);return We(n,e,S(o.wsPrefix),o.cookiesOptions),Se(n,{formidableOptions:o.formidableOptions,proxies:[...i,...s],cookiesOptions:o.cookiesOptions})}function De({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},m=[Ot(a)];return a.build&&m.push(St(a)),m}function St(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 ye(this,o,t)}}}function Ot(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 ce(r,t,n,s);e.use(i)},async configurePreviewServer({middlewares:e,httpServer:r}){let n=await ce(o,t,r);e.use(n)}}}function ir(t){return t}function cr(t){return e=>(h(e)?e=e.map(r=>t(r)||r):e=t(e)||e,e)}var ur=De;export{Se as baseMiddleware,cr as createDefineMock,ur as default,ir as defineMock,De as mockDevServerPlugin,We as mockWebSocket,Oe as transformMockData};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-mock-dev-server",
3
- "version": "1.1.12",
3
+ "version": "1.1.14",
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.18",
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.0",
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.11",
51
- "@pengzhanbo/prettier-config": "^0.3.11",
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.5",
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.5",
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.40.0",
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.5",
69
- "vitepress": "1.0.0-alpha.75"
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.3.1",
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",