vite-plugin-mock-dev-server 1.1.6 → 1.1.8

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
@@ -155,7 +155,7 @@ export default defineConfig({
155
155
 
156
156
  Configure the matching rules for WebSocket service. Any request path starting with the value of `wsPrefix` and using the `ws/wss` protocol will be proxied to the corresponding target.
157
157
 
158
- If the value of `wsPrefix` starts with `^`, it will be recognized as a RegExp.
158
+ If the value of `wsPrefix` starts with `^`, it will be recognized as a RegExp.
159
159
 
160
160
  > Different from using `viteConfig.server.proxy` by default for http mock, `websocket mock` does not use the ws-related configuration in `viteConfig.server.proxy`. Also, rules configured in `wsPrefix` cannot be configured simultaneously in `viteConfig.server.proxy`, as it will cause conflicts when starting the vite server because multiple instances of WebSocketServer cannot be implemented for the same request.
161
161
  > This conflict is neither a problem with Vite nor with the plugin; it belongs to a reasonable error type. When switching between WebSocket Mock and WebSocket Proxy, please pay attention to avoid duplicate configurations that may cause conflicts.
@@ -405,11 +405,20 @@ export default defineMock({
405
405
  /**
406
406
  * Configure the WebSocketServer
407
407
  * @see https://github.com/websockets/ws/blob/master/doc/ws.md#class-websocketserver
408
+ * If there are some additional automatically executed tasks or loop
409
+ * tasks in the setup function,a callback needs to be passed in
410
+ * `onCleanup()` to clear these tasks.
411
+ * This is because when the plugin is hot updated,
412
+ * it needs to re-execute setup and clear previous tasks; otherwise,
413
+ * duplicate tasks may cause conflicts.
414
+ * `onCleanup()` can be called multiple times within setup.
415
+ * @type `(wss: WebSocketServer, context: SetupContext) => void`
408
416
  */
409
- setup(wss) {
417
+ setup(wss, { onCleanup }) {
410
418
  wss.on('connection', (ws, request) => {
411
419
  ws.on('message', (rawData) => {})
412
- ws.send('data')
420
+ const timer = setInterval(() => ws.send('data'), 1000)
421
+ onCleanup(() => clearInterval(timer))
413
422
  })
414
423
  }
415
424
  })
@@ -716,7 +725,7 @@ fetch('/api/graphql', {
716
725
  export default defineMock({
717
726
  url: '/socket.io',
718
727
  ws: true,
719
- setup(wss) {
728
+ setup(wss, { onCleanup }) {
720
729
  const wsMap = new Map()
721
730
  wss.on('connection', (ws, req) => {
722
731
  const token = req.getCookie('token')
@@ -734,9 +743,7 @@ export default defineMock({
734
743
  wss.on('error', (err) => {
735
744
  console.error(err)
736
745
  })
737
- return () => {
738
- wsMap.clear()
739
- }
746
+ onCleanup(() => wsMap.clear())
740
747
  }
741
748
  })
742
749
  ```
@@ -746,7 +753,7 @@ const ws = new WebSocket('ws://localhost:5173/socket.io')
746
753
  ws.addEventListener('open', () => {
747
754
  setInterval(() => {
748
755
  // heartbeat
749
- ws.send({ type: 'ping' })
756
+ ws.send(JSON.stringify({ type: 'ping' }))
750
757
  }, 1000)
751
758
  }, { once: true })
752
759
  ws.addEventListener('message', (raw) => {
package/README.zh-CN.md CHANGED
@@ -399,11 +399,17 @@ export default defineMock({
399
399
  /**
400
400
  * 配置 WebSocketServer
401
401
  * @see https://github.com/websockets/ws/blob/master/doc/ws.md#class-websocketserver
402
+ * 如果在 setup 函数中有一些 额外的 自动执行任务或循环任务,
403
+ * 那么需要在 `onCleanup()` 传入一个回调,用于清除这些任务,
404
+ * 这是由于插件在热更新时,需要重新执行 setup,需要清除之前的任务,否则可能会导致重复任务产生冲突。
405
+ * `onCleanup()`可以在 setup 内部多次调用
406
+ * @type `(wss: WebSocketServer, context: SetupContext) => void`
402
407
  */
403
- setup(wss) {
408
+ setup(wss, { onCleanup }) {
404
409
  wss.on('connection', (ws, request) => {
405
410
  ws.on('message', (rawData) => {})
406
- ws.send('data')
411
+ const timer = setInterval(() => ws.send('data'), 1000)
412
+ onCleanup(() => clearInterval(timer))
407
413
  })
408
414
  }
409
415
  })
@@ -709,7 +715,7 @@ fetch('/api/graphql', {
709
715
  export default defineMock({
710
716
  url: '/socket.io',
711
717
  ws: true,
712
- setup(wss) {
718
+ setup(wss, { onCleanup }) {
713
719
  const wsMap = new Map()
714
720
  wss.on('connection', (ws, req) => {
715
721
  const token = req.getCookie('token')
@@ -727,9 +733,7 @@ export default defineMock({
727
733
  wss.on('error', (err) => {
728
734
  console.error(err)
729
735
  })
730
- return () => {
731
- wsMap.clear()
732
- }
736
+ onCleanup(() => wsMap.clear())
733
737
  }
734
738
  })
735
739
  ```
@@ -739,7 +743,7 @@ const ws = new WebSocket('ws://localhost:5173/socket.io')
739
743
  ws.addEventListener('open', () => {
740
744
  setInterval(() => {
741
745
  // heartbeat
742
- ws.send({ type: 'ping' })
746
+ ws.send(JSON.stringify({ type: 'ping' }))
743
747
  }, 1000)
744
748
  }, { once: true })
745
749
  ws.addEventListener('message', (raw) => {
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
- "use strict";var Ve=Object.create;var q=Object.defineProperty;var Ye=Object.getOwnPropertyDescriptor;var Ze=Object.getOwnPropertyNames;var et=Object.getPrototypeOf,tt=Object.prototype.hasOwnProperty;var ot=(e,o)=>{for(var t in o)q(e,t,{get:o[t],enumerable:!0})},ye=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let s of Ze(o))!tt.call(e,s)&&s!==t&&q(e,s,{get:()=>o[s],enumerable:!(r=Ye(o,s))||r.enumerable});return e};var u=(e,o,t)=>(t=e!=null?Ve(et(e)):{},ye(o||!e||!e.__esModule?q(t,"default",{value:e,enumerable:!0}):t,e)),rt=e=>ye(q({},"__esModule",{value:!0}),e);var jt={};ot(jt,{baseMiddleware:()=>ae,createDefineMock:()=>wt,default:()=>Ot,defineMock:()=>xt,mockDevServerPlugin:()=>ge,mockWebSocket:()=>fe,transformMockData:()=>pe});module.exports=rt(jt);var st=()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,x=st();var Ce=u(require("fs"),1),_=u(require("fs/promises"),1),E=u(require("path"),1),Ee=require("esbuild"),We=u(require("fast-glob"),1),Ie=u(require("is-core-module"),1),V=require("vite");var ve="vite-plugin-mock-dev-server",Me="1.1.6";var oe=u(require("fs/promises"),1),be=u(require("path"),1),xe=u(require("json5"),1),A={name:"externalize-deps",setup(e){e.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!be.default.isAbsolute(o))return{external:!0}})}},B={name:"json5-loader",setup(e){e.onLoad({filter:/\.json5$/},async({path:o})=>{let t=await oe.default.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(xe.default.parse(t))}`,loader:"js"}})}},J={name:"json-loader",setup(e){e.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await oe.default.readFile(o,"utf-8")}`,loader:"js"}))}},z=e=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:t})=>{let r=e.find(({find:c})=>nt(c,t));if(!r)return null;let{find:s,replacement:n}=r;return{path:(await o.resolve(t.replace(s,n),{kind:"import-statement",resolveDir:n,namespace:"file"})).path,external:!1}})}});function nt(e,o){return e instanceof RegExp?e.test(o):o.length<e.length?!1:o===e?!0:o.startsWith(`${e}/`)}var G=u(require("fs"),1),Q=u(require("path"),1),we=require("url"),Oe=u(require("debug"),1),je=require("path-to-regexp"),re=u(require("picocolors"),1),j=e=>Array.isArray(e),R=e=>typeof e=="function",it=e=>Object.prototype.toString.call(e)==="[object Object]",Pe=e=>it(e)&&Object.keys(e).length===0,ct=e=>e!==null&&typeof e=="object"&&typeof e.pipe=="function",Se=e=>ct(e)&&e.readable!==!1&&typeof e._read=="function"&&typeof e._readableState=="object";function Re(e){return new Promise(o=>setTimeout(o,e))}function De(e){return Q.default.dirname((0,we.fileURLToPath)(e))}var D=(0,Oe.default)("vite:plugin-mock-dev-server"),P=e=>j(e)?e:e==null?[]:[e],T={info(...e){console.info(re.default.cyan("mock-dev-server: "),...e)},error(...e){console.error(`
2
- `,re.default.cyan("mock-dev-server: "),...e,`
3
- `)}};function $(e,o,t){for(let s of o){let n=Q.default.join(e,s);if(G.default.existsSync(n)&&G.default.statSync(n).isFile()){let i=t!=null&&t.pathOnly?n:G.default.readFileSync(n,"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 $(r,o,t)}var X=(e={})=>{let o=[],t=[];return Object.keys(e).forEach(r=>{var n,i;let s=e[r];typeof s=="string"||!s.ws&&!((n=s.target)!=null&&n.toString().startsWith("ws:"))&&!((i=s.target)!=null&&i.toString().startsWith("wss:"))?o.push(r):t.push(r)}),{httpProxies:o,wsProxies:t}};function K(e,o){return e[0]==="^"&&new RegExp(e).test(o)||o.startsWith(e)}function H(e,o){return((0,je.match)(e,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}async function Te(e,o,t){let r=P(t.include),s=P(t.exclude),n={};if(o.define)for(let f in o.define){let d=o.define[f];n[f]=typeof d=="string"?d:JSON.stringify(d)}let{httpProxies:i}=X(o.server.proxy||{});i.push(...P(t.prefix));let c=P(t.wsPrefix),a={};try{let f=$(o.root,["package.json"]);f&&(a=JSON.parse(f))}catch{}let p=t.build.dist,m=await ut(process.cwd(),r,s),l=E.default.join(o.root,`mock-data-${Date.now()}.js`);await _.default.writeFile(l,m,"utf-8");let{code:M,deps:b}=await mt(l,n,o.resolve.alias),h=at(b);await _.default.unlink(l);let g=[{filename:E.default.join(p,"mock-data.js"),source:M},{filename:E.default.join(p,"index.js"),source:lt(i,c,t.cookiesOptions,t.build.serverPort)},{filename:E.default.join(p,"package.json"),source:pt(a,h)}];try{if(E.default.isAbsolute(p)){await _.default.rm(p,{recursive:!0}),Ce.default.mkdirSync(p,{recursive:!0});for(let{filename:f,source:d}of g)await _.default.writeFile(f,d,"utf-8")}else for(let{filename:f,source:d}of g)e.emitFile({type:"asset",fileName:f,source:d})}catch{}}function at(e){let o=new Set,t=[ve,"connect","cors"];return Object.keys(e).forEach(r=>{e[r].imports.filter(n=>n.external).map(n=>n.path).forEach(n=>{!t.includes(n)&&!(0,Ie.default)(n)&&o.add(n)})}),Array.from(o)}function pt(e,o){let{dependencies:t={},devDependencies:r={}}=e,s={...t,...r},n={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=>{n.dependencies[i]=s[i]||"latest"}),JSON.stringify(n,null,2)}function lt(e,o,t={},r=8080){return`import { createServer } from 'node:http';
1
+ "use strict";var rt=Object.create;var B=Object.defineProperty;var nt=Object.getOwnPropertyDescriptor;var st=Object.getOwnPropertyNames;var it=Object.getPrototypeOf,ct=Object.prototype.hasOwnProperty;var at=(e,o)=>{for(var t in o)B(e,t,{get:o[t],enumerable:!0})},Me=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of st(o))!ct.call(e,n)&&n!==t&&B(e,n,{get:()=>o[n],enumerable:!(r=nt(o,n))||r.enumerable});return e};var f=(e,o,t)=>(t=e!=null?rt(it(e)):{},Me(o||!e||!e.__esModule?B(t,"default",{value:e,enumerable:!0}):t,e)),pt=e=>Me(B({},"__esModule",{value:!0}),e);var Et={};at(Et,{baseMiddleware:()=>pe,createDefineMock:()=>Wt,default:()=>Dt,defineMock:()=>Ct,mockDevServerPlugin:()=>ye,mockWebSocket:()=>ke,transformMockData:()=>ue});module.exports=pt(Et);var ut=()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,b=ut();var Le=f(require("fs"),1),q=f(require("fs/promises"),1),T=f(require("path"),1),Ie=require("esbuild"),_e=f(require("fast-glob"),1),Te=f(require("is-core-module"),1),Z=require("vite");var xe="vite-plugin-mock-dev-server",we="1.1.8";var re=f(require("fs/promises"),1),Se=f(require("path"),1),Oe=f(require("json5"),1),J={name:"externalize-deps",setup(e){e.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Se.default.isAbsolute(o))return{external:!0}})}},z={name:"json5-loader",setup(e){e.onLoad({filter:/\.json5$/},async({path:o})=>{let t=await re.default.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Oe.default.parse(t))}`,loader:"js"}})}},G={name:"json-loader",setup(e){e.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await re.default.readFile(o,"utf-8")}`,loader:"js"}))}},Q=e=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:t})=>{let r=e.find(({find:c})=>lt(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 lt(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),K=f(require("path"),1),Pe=require("url"),je=f(require("debug"),1),Re=require("path-to-regexp"),ne=f(require("picocolors"),1),S=e=>Array.isArray(e),j=e=>typeof e=="function",dt=e=>Object.prototype.toString.call(e)==="[object Object]",Ce=e=>dt(e)&&Object.keys(e).length===0,mt=e=>e!==null&&typeof e=="object"&&typeof e.pipe=="function",We=e=>mt(e)&&e.readable!==!1&&typeof e._read=="function"&&typeof e._readableState=="object";function De(e){return new Promise(o=>setTimeout(o,e))}function Ee(e){return K.default.dirname((0,Pe.fileURLToPath)(e))}var R=(0,je.default)("vite:plugin-mock-dev-server"),O=e=>S(e)?e:e==null?[]:[e],C={info(...e){console.info(ne.default.cyan("mock-dev-server: "),...e)},error(...e){console.error(`
2
+ `,ne.default.cyan("mock-dev-server: "),...e,`
3
+ `)}};function U(e,o,t){for(let n of o){let s=K.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=K.default.dirname(e);if(r!==e&&(!(t!=null&&t.rootDir)||r.startsWith(t==null?void 0:t.rootDir)))return U(r,o,t)}var V=(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 N(e,o){return((0,Re.match)(e,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}async function $e(e,o,t){let r=O(t.include),n=O(t.exclude),s={};if(o.define)for(let p in o.define){let l=o.define[p];s[p]=typeof l=="string"?l:JSON.stringify(l)}let{httpProxies:i}=V(o.server.proxy||{});i.push(...O(t.prefix));let c=O(t.wsPrefix),d={};try{let p=U(o.root,["package.json"]);p&&(d=JSON.parse(p))}catch{}let m=t.build.dist,M=await yt(process.cwd(),r,n),h=T.default.join(o.root,`mock-data-${Date.now()}.js`);await q.default.writeFile(h,M,"utf-8");let{code:H,deps:D}=await ht(h,s,o.resolve.alias),a=ft(D);await q.default.unlink(h);let u=[{filename:T.default.join(m,"mock-data.js"),source:H},{filename:T.default.join(m,"index.js"),source:gt(i,c,t.cookiesOptions,t.build.serverPort)},{filename:T.default.join(m,"package.json"),source:kt(d,a)}];try{if(T.default.isAbsolute(m)){await q.default.rm(m,{recursive:!0}),Le.default.mkdirSync(m,{recursive:!0});for(let{filename:p,source:l}of u)await q.default.writeFile(p,l,"utf-8")}else for(let{filename:p,source:l}of u)e.emitFile({type:"asset",fileName:p,source:l})}catch{}}function ft(e){let o=new Set,t=[xe,"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,Te.default)(s)&&o.add(s)})}),Array.from(o)}function kt(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":`^${we}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function gt(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 ut(e,o,t){let r=await(0,We.default)(o,{cwd:e}),s=(0,V.createFilter)(o,t,{resolve:!1}),n=r.filter(s),i="",c="";return n.forEach((a,p)=>{let m=(0,V.normalizePath)(E.default.join(e,a));i+=`import * as m${p} from '${m}';
28
- `,c+=`m${p}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
27
+ `}async function yt(e,o,t){let r=await(0,_e.default)(o,{cwd:e}),n=(0,Z.createFilter)(o,t,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((d,m)=>{let M=(0,Z.normalizePath)(T.default.join(e,d));i+=`import * as m${m} from '${M}';
28
+ `,c+=`m${m}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
29
29
  ${i}
30
30
  const exporters = [${c}];
31
31
  const mockList = exporters.map((raw) => raw && raw.default
@@ -33,9 +33,10 @@ const mockList = exporters.map((raw) => raw && raw.default
33
33
  : Object.keys(raw || {}).map((key) => raw[key])
34
34
  )
35
35
  export default transformMockData(mockList);
36
- `}async function mt(e,o,t){var r;try{let s=await(0,Ee.build)({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[z(t),A,B,J]});return{code:s.outputFiles[0].text,deps:((r=s.metafile)==null?void 0:r.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}var ne=require("buffer"),ie=require("url"),_e=u(require("cookies"),1),Ue=u(require("http-status"),1),U=u(require("mime-types"),1),ce=require("path-to-regexp"),F=u(require("picocolors"),1);var Y=u(require("co-body"),1),Fe=u(require("formidable"),1);async function Le(e,o){var s;let t=e.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(t))return;let r=((s=e.headers["content-type"])==null?void 0:s.toLocaleLowerCase())||"";try{if(r.startsWith("application/json"))return await Y.default.json(e);if(r.startsWith("application/x-www-form-urlencoded"))return await Y.default.form(e);if(r.startsWith("text/plain"))return await Y.default.text(e);if(r.startsWith("multipart/form-data"))return await dt(e,o)}catch(n){console.error(n)}}async function dt(e,o){let t=(0,Fe.default)(o);return new Promise((r,s)=>{t.parse(e,(n,i,c)=>{if(n){s(n);return}r({...i,...c})})})}function $e(e,o){return W(e.headers,o.headers)&&W(e.body,o.body)&&W(e.params,o.params)&&W(e.query,o.query)&&W(e.refererQuery,o.refererQuery)}function W(e,o){if(!o)return!0;for(let t in o)if(o[t]!==e[t])return!1;return!0}function ae(e,{formidableOptions:o={},proxies:t,cookiesOptions:r}){return async function(s,n,i){let c=Date.now(),{query:a,pathname:p}=(0,ie.parse)(s.url,!0);if(!p||t.length===0||!t.some(S=>K(S,s.url)))return i();let m=e.mockData,l=Object.keys(m).find(S=>(0,ce.pathToRegexp)(S).test(p));if(!l)return i();let{query:M}=(0,ie.parse)(s.headers.referer||"",!0),b=await Le(s,o),h=new _e.default(s,n,r),g=h.get.bind(h),f=s.method.toUpperCase(),d=ft(m[l],{pathname:p,method:f,request:{query:a,refererQuery:M,body:b,headers:s.headers,getCookie:g}});if(!d)return i();D("middleware: ",f,s.url);let v=s,y=n;v.body=b,v.query=a,v.refererQuery=M,v.params=H(d.url,p),v.getCookie=g,y.setCookie=h.set.bind(h);let{body:w,delay:k,type:O="json",response:L,status:te=200,statusText:Ke}=d;if(se(y,te,Ke),await kt(v,y,d),await gt(v,y,d),w){try{let S=R(w)?await w(v):w;await He(c,k),yt(y,S,O)}catch(S){T.error(`${F.default.red("[body error]")} ${s.url}
37
- `,S),se(y,500),n.end("")}return}if(L){try{await He(c,k),await L(v,y,i)}catch(S){T.error(`${F.default.red("[response error]")} ${s.url}
38
- `,S),se(y,500),n.end("")}return}n.end("")}}function ft(e,{pathname:o,method:t,request:r}){return e.find(s=>{if(!o||!s||!s.url||s.ws===!0||!(s.method?j(s.method)?s.method:[s.method]:["GET","POST"]).includes(t))return!1;let i=(0,ce.pathToRegexp)(s.url).test(o);if(i&&s.validator){let c=H(s.url,o);if(R(s.validator))return s.validator({params:c,...r});try{return $e({params:c,...r},s.validator)}catch(a){return T.error(`${F.default.red("[validator error]")} ${o}
39
- `,a),!1}}return i})}function se(e,o=200,t){e.statusCode=o,e.statusMessage=t||ht(o)}async function kt(e,o,{headers:t,type:r="json"}){let s=U.contentType(r)||U.contentType(U.lookup(r)||"");if(s&&o.setHeader("Content-Type",s),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock","generate by vite:plugin-mock-dev-server"),!!t)try{let n=R(t)?await t(e):t;Object.keys(n).forEach(i=>{o.setHeader(i,n[i])})}catch(n){T.error(`${F.default.red("[headers error]")} ${e.url}
40
- `,n)}}async function gt(e,o,{cookies:t}){if(t)try{let r=R(t)?await t(e):t;Object.keys(r).forEach(s=>{let n=r[s];if(j(n)){let[i,c]=n;o.setCookie(s,i,c)}else o.setCookie(s,n)})}catch(r){T.error(`${F.default.red("[cookies error]")} ${e.url}
41
- `,r)}}function yt(e,o,t){if(Se(o))o.pipe(e);else if(ne.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"?ne.Buffer.from(r):r)}}async function He(e,o){if(!o||o<=0)return;let t=Date.now()-e,r=o-t;r>0&&await Re(r)}function ht(e){return Ue.default[e]||"Unknown"}var Ae=u(require("events"),1),Z=u(require("fs"),1),Be=require("module"),le=u(require("path"),1),Je=require("url"),ue=u(require("chokidar"),1),ze=require("esbuild"),Ge=u(require("fast-glob"),1),C=require("vite");var Ne=require("url"),qe=u(require("lodash.sortby"),1);function pe(e){let o=[];for(let[,r]of e.entries())r&&(j(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:s,query:n}=(0,Ne.parse)(r.url,!0),i=t[s]??(t[s]=[]),c={...r,url:s};if(c.ws!==!0){let a=c.validator;Pe(n)||(R(a)?c.validator=function(p){return W(p.query,n)&&a(p)}:a?(c.validator={...a},c.validator.query=c.validator.query?{...n,...c.validator.query}:n):c.validator={query:n})}i.push(c)}),Object.keys(t).forEach(r=>{t[r]=(0,qe.default)(t[r],s=>{if(s.ws===!0)return 0;let{validator:n}=s;if(!n)return 1;if(R(n))return 0;let{query:i,params:c,headers:a,body:p,refererQuery:m}=n;return 1/(N(i)+N(c)+N(a)+N(p)+N(m))})}),t}function N(e){return e?Object.keys(e).length:0}var vt=De(x),I=(0,Be.createRequire)(vt),ee=class extends Ae.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=$(this.cwd,["package.json"]);this.moduleType=r&&JSON.parse(r).type==="module"?"esm":"cjs"}catch{}}get mockData(){return this._mockData}async load(){let{include:t,exclude:r}=this.options,s=await(0,Ge.default)(t,{cwd:this.cwd}),n=(0,C.createFilter)(t,r,{resolve:!1});this.watchMockEntry(),this.watchDeps();for(let c of s.filter(n))await this.loadMock(c);this.updateMockList();let i=null;this.on("mock:update",async c=>{n(c)&&(await this.loadMock(c),i&&clearTimeout(i),i=setTimeout(()=>{this.updateMockList(),this.emit("mock:update-end",c),i=null},0))}),this.on("mock:unlink",async c=>{n(c)&&(this.moduleCache.delete(c),this.updateMockList(),this.emit("mock:update-end",c))})}watchMockEntry(){let{include:t}=this.options,[r,...s]=t,n=ue.default.watch(r,{ignoreInitial:!0,cwd:this.cwd});s.length>0&&s.forEach(i=>n.add(i)),n.on("add",async i=>{i=(0,C.normalizePath)(i),this.emit("mock:update",i),D("watcher:add",i)}),n.on("change",async i=>{i=(0,C.normalizePath)(i),this.emit("mock:update",i),D("watcher:change",i)}),n.on("unlink",async i=>{i=(0,C.normalizePath)(i),this.emit("mock:unlink",i),D("watcher:unlink",i)}),this.mockWatcher=n}watchDeps(){let t=[];this.depsWatcher=ue.default.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=(0,C.normalizePath)(r);let s=this.moduleDeps.get(r);s&&s.forEach(n=>{this.emit("mock:update",n)})}),this.depsWatcher.on("unlink",r=>{r=(0,C.normalizePath)(r),this.moduleDeps.delete(r)}),this.on("update:deps",()=>{let r=[];for(let[n]of this.moduleDeps.entries())r.push(n);let s=r.filter(n=>!t.includes(n));s.length>0&&this.depsWatcher.add(s)})}close(){var t,r;(t=this.mockWatcher)==null||t.close(),(r=this.depsWatcher)==null||r.close()}updateMockList(){this._mockData=pe(this.moduleCache)}updateModuleDeps(t,r){Object.keys(r).forEach(s=>{r[s].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:s,deps:n}=await this.transformWithEsbuild(t,r);try{let i=await this.loadFromCode(t,s,r),c=i&&i.default?i.default:Object.keys(i||{}).map(a=>i[a]);j(c)?c.forEach(a=>a.__filepath__=t):c.__filepath__=t,this.moduleCache.set(t,c),this.updateModuleDeps(t,n)}catch(i){console.error(i)}}async loadFromCode(t,r,s){if(s){let n=`${t}.timestamp-${Date.now()}`,i=`${n}.mjs`,c=`${(0,Je.pathToFileURL)(n)}.mjs`;await Z.default.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{Z.default.unlinkSync(i)}catch{}}}else{t=le.default.resolve(this.cwd,t);let n=le.default.extname(t),i=Z.default.realpathSync(t),c=n in I.extensions?n:".js",a=I.extensions[c];I.extensions[c]=(m,l)=>{l===i?m._compile(r,l):a(m,l)},delete I.cache[I.resolve(t)];let p=I(t);return I.extensions[c]=a,p.__esModule?p:{default:p}}}async transformWithEsbuild(t,r){var s;try{let n=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:[z(this.options.alias),A,J,B]});return{code:n.outputFiles[0].text,deps:((s=n.metafile)==null?void 0:s.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}};var me=require("url"),Qe=u(require("cookies"),1),de=require("path-to-regexp"),Xe=require("ws");function fe(e,o,t,r){var c;let s=new Set,n=new Map,i=new Map;(c=e.on)==null||c.call(e,"mock:update-end",a=>{if(!s.has(a))return;let p={};for(let[m,l]of i.entries())e.mockData[m].forEach(M=>{M.__filepath__===a&&M.ws&&l.forEach(({pathname:b,req:h,ws:g})=>{p[b]??(p[b]={mock:M,list:[],mockUrl:m}),p[b].list.push({req:h,ws:g}),g.removeAllListeners()})});Object.keys(p).forEach(m=>{var g,f;let l=n.get(m),{mock:M,list:b,mockUrl:h}=p[m];l.wss.removeAllListeners(),(g=l.cancel)==null||g.call(l),l.cancel=(f=M.setup)==null?void 0:f.call(M,l.wss),l.wss.on("close",()=>{n.delete(m)}),b.forEach(({req:d,ws:v})=>{l.wss.emit("connection",v,d),v.on("close",()=>{let y=i.get(h),w=(y==null?void 0:y.findIndex(k=>k.ws===v))||-1;w>=0&&(y==null||y.splice(w,1))})})})}),o==null||o.on("upgrade",(a,p,m)=>{var w;let{pathname:l,query:M}=(0,me.parse)(a.url,!0);if(!l||t.length===0||!t.some(k=>K(k,a.url)))return;let b=e.mockData,h=Object.keys(b).find(k=>(0,de.pathToRegexp)(k).test(l));if(!h)return;let g=b[h].find(k=>k.url&&k.ws&&(0,de.pathToRegexp)(k.url).test(l));if(!g)return;s.add(g.__filepath__);let f=n.get(l);if(!f){let k=new Xe.WebSocketServer({noServer:!0}),O=(w=g.setup)==null?void 0:w.call(g,k);k.on("close",()=>{n.delete(l)}),f={wss:k,cancel:O},n.set(l,f)}let d=a,v=new Qe.default(a,a,r),{query:y}=(0,me.parse)(a.headers.referer||"",!0);d.query=M,d.refererQuery=y,d.params=H(h,l),d.getCookie=v.get.bind(v),f.wss.handleUpgrade(d,p,m,k=>{D(`websocket-mock: ${a.url} connected`),f.wss.emit("connection",k,d);let O=i.get(h);O||(O=[],i.set(h,O)),O.push({req:d,ws:k,pathname:l}),k.on("close",()=>{let L=O.findIndex(te=>te.ws===k);L>=0&&O.splice(L,1)})})}),o==null||o.on("close",()=>{n.forEach(({wss:a,cancel:p})=>{p==null||p(),a.close()}),n.clear(),s.clear(),i.clear()})}async function ke(e,o,t,r){let s=P(o.include),n=P(o.exclude),i={};if(e.define)for(let m in e.define){let l=e.define[m];i[m]=typeof l=="string"?l:JSON.stringify(l)}let c=new ee({include:s,exclude:n,define:i,alias:e.resolve.alias});await c.load(),c.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),t==null||t.on("close",()=>c.close());let{httpProxies:a}=X(e.server.proxy||{}),p=P(o.prefix);return fe(c,t,P(o.wsPrefix),o.cookiesOptions),ae(c,{formidableOptions:o.formidableOptions,proxies:[...p,...a],cookiesOptions:o.cookiesOptions})}function ge({prefix:e=[],wsPrefix:o=[],include:t=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:r=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:s=!1,formidableOptions:n={},build:i=!1,cookiesOptions:c={}}={}){let a={prefix:e,wsPrefix:o,include:t,exclude:r,reload:s,cookiesOptions:c,formidableOptions:{multiples:!0,...n},build:i?Object.assign({serverPort:8080,dist:"mockServer"},typeof i=="object"?i:{}):!1},p=[bt(a)];return a.build&&p.push(Mt(a)),p}function Mt(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 bt(e){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",configResolved(t){o=t,t.logger.warn("")},async configureServer({middlewares:t,config:r,httpServer:s,ws:n}){let i=await ke(r,e,s,n);t.use(i)},async configurePreviewServer({middlewares:t,httpServer:r}){let s=await ke(o,e,r);t.use(s)}}}function xt(e){return e}function wt(e){return t=>(j(t)?t=t.map(r=>e(r)||r):t=e(t)||t,t)}var Ot=ge;0&&(module.exports={baseMiddleware,createDefineMock,defineMock,mockDevServerPlugin,mockWebSocket,transformMockData});
36
+ `}async function ht(e,o,t){var r;try{let n=await(0,Ie.build)({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[Q(t),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:{}}}var ie=require("buffer"),ce=require("url"),qe=f(require("cookies"),1),Ae=f(require("http-status"),1),A=f(require("mime-types"),1),ae=require("path-to-regexp"),P=f(require("picocolors"),1);var ee=f(require("co-body"),1),Fe=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 ee.default.json(e);if(r.startsWith("application/x-www-form-urlencoded"))return await ee.default.form(e);if(r.startsWith("text/plain"))return await ee.default.text(e);if(r.startsWith("multipart/form-data"))return await vt(e,o)}catch(s){console.error(s)}}async function vt(e,o){let t=(0,Fe.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 $(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(o[t]!==e[t])return!1;return!0}function pe(e,{formidableOptions:o={},proxies:t,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:d,pathname:m}=(0,ce.parse)(n.url,!0);if(!m||t.length===0||!t.some(v=>Y(v,n.url)))return i();let M=e.mockData,h=Object.keys(M).find(v=>(0,ae.pathToRegexp)(v).test(m));if(!h)return i();let{query:H}=(0,ce.parse)(n.headers.referer||"",!0),D=await He(n,o),a=new qe.default(n,s,r),u=a.get.bind(a),p=n.method.toUpperCase(),l=Mt(M[h],{pathname:m,method:p,request:{query:d,refererQuery:H,body:D,headers:n.headers,getCookie:u}});if(!l)return i();R("middleware: ",p,n.url);let k=n,g=s;k.body=D,k.query=d,k.refererQuery=H,k.params=N(l.url,m),k.getCookie=u,g.setCookie=a.set.bind(a);let{body:y,delay:w,type:E="json",response:L,status:I=200,statusText:_}=l;if(se(g,I,_),await bt(k,g,l),await xt(k,g,l),y){try{let v=j(y)?await y(k):y;await Ne(c,w),wt(g,v,E)}catch(v){C.error(`${P.default.red("[body error]")} ${n.url}
37
+ `,`file: ${P.default.cyan(l.__filepath__)}`,v),se(g,500),s.end("")}return}if(L){try{await Ne(c,w),await L(k,g,i)}catch(v){C.error(`${P.default.red("[response error]")} ${n.url}
38
+ `,`file: ${P.default.cyan(l.__filepath__)}`,v),se(g,500),s.end("")}return}s.end("")}}function Mt(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,ae.pathToRegexp)(n.url).test(o);if(i&&n.validator){let c=N(n.url,o);if(j(n.validator))return n.validator({params:c,...r});try{return Ue({params:c,...r},n.validator)}catch(d){return C.error(`${P.default.red("[validator error]")} ${o}
39
+ `,`file: ${P.default.cyan(n.__filepath__)}`,d),!1}}return i})}function se(e,o=200,t){e.statusCode=o,e.statusMessage=t||St(o)}async function bt(e,o,{headers:t,type:r="json"}){let n=A.contentType(r)||A.contentType(A.lookup(r)||"");if(n&&o.setHeader("Content-Type",n),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock","generate by vite:plugin-mock-dev-server"),!!t)try{let s=j(t)?await t(e):t;Object.keys(s).forEach(i=>{o.setHeader(i,s[i])})}catch(s){C.error(`${P.default.red("[headers error]")} ${e.url}
40
+ `,s)}}async function xt(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){C.error(`${P.default.red("[cookies error]")} ${e.url}
41
+ `,r)}}function wt(e,o,t){if(We(o))o.pipe(e);else if(ie.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"?ie.Buffer.from(r):r)}}async function Ne(e,o){if(!o||o<=0)return;let t=Date.now()-e,r=o-t;r>0&&await De(r)}function St(e){return Ae.default[e]||"Unknown"}var ze=f(require("events"),1),te=f(require("fs"),1),Ge=require("module"),le=f(require("path"),1),Qe=require("url"),de=f(require("chokidar"),1),Xe=require("esbuild"),Ke=f(require("fast-glob"),1),W=require("vite");var Be=require("url"),Je=f(require("lodash.sortby"),1);function ue(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,Be.parse)(r.url,!0),i=t[n]??(t[n]=[]),c={...r,url:n};if(c.ws!==!0){let d=c.validator;Ce(s)||(j(d)?c.validator=function(m){return $(m.query,s)&&d(m)}:d?(c.validator={...d},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,Je.default)(t[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return s?j(s)?0:1/Object.keys(s).reduce((c,d)=>c+Ot(s[d]),0):1})}),t}function Ot(e){return e?Object.keys(e).length:0}var Pt=Ee(b),F=(0,Ge.createRequire)(Pt),oe=class extends ze.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}async load(){let{include:t,exclude:r}=this.options,n=await(0,Ke.default)(t,{cwd:this.cwd}),s=(0,W.createFilter)(t,r,{resolve:!1});this.watchMockEntry(),this.watchDeps();for(let c of n.filter(s))await this.loadMock(c);this.updateMockList();let i=null;this.on("mock:update",async c=>{s(c)&&(await this.loadMock(c),i&&clearTimeout(i),i=setTimeout(()=>{this.updateMockList(),this.emit("mock:update-end",c),i=null},0))}),this.on("mock:unlink",async c=>{s(c)&&(this.moduleCache.delete(c),this.updateMockList(),this.emit("mock:update-end",c))})}watchMockEntry(){let{include:t}=this.options,[r,...n]=t,s=de.default.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=(0,W.normalizePath)(i),this.emit("mock:update",i),R("watcher:add",i)}),s.on("change",async i=>{i=(0,W.normalizePath)(i),this.emit("mock:update",i),R("watcher:change",i)}),s.on("unlink",async i=>{i=(0,W.normalizePath)(i),this.emit("mock:unlink",i),R("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let t=[];this.depsWatcher=de.default.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=(0,W.normalizePath)(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=(0,W.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=ue(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&&i.default?i.default:Object.keys(i||{}).map(d=>i[d]);S(c)?c.forEach(d=>d.__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,Qe.pathToFileURL)(s)}.mjs`;await te.default.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{te.default.unlinkSync(i)}catch{}}}else{t=le.default.resolve(this.cwd,t);let s=le.default.extname(t),i=te.default.realpathSync(t),c=s in F.extensions?s:".js",d=F.extensions[c];F.extensions[c]=(M,h)=>{h===i?M._compile(r,h):d(M,h)},delete F.cache[F.resolve(t)];let m=F(t);return F.extensions[c]=d,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:[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:{}}}};var me=require("url"),Ye=f(require("cookies"),1),fe=require("path-to-regexp"),Ze=f(require("picocolors"),1),et=require("ws");function ke(e,o,t,r){var D;let n=new Map,s=new Map,i=new WeakMap,c=a=>{let u=s.get(a);return!u&&s.set(a,u=new Map),u},d=(a,u)=>{let p=a.get(u);return!p&&a.set(u,p=new et.WebSocketServer({noServer:!0})),p},m=(a,u)=>{let p=n.get(a);!p&&n.set(a,p=new Set),p.add(u)},M=(a,u,p,l,k,g)=>{var y;try{(y=p.setup)==null||y.call(p,u,l),u.on("close",()=>{a.delete(k)})}catch(w){C.error(`${Ze.default.red("[websocket server error]")} ${g}
42
+ `,w)}},h=(a,u,p,l)=>{a.emit("connection",u,p),u.on("close",()=>{let k=l.findIndex(g=>g.ws===u);k!==-1&&l.splice(k,1)})},H=(a,u,p,l,k)=>{let{cleanupList:g,connectionList:y,context:w}=i.get(u);Ve(g),u.removeAllListeners(),M(a,u,p,w,l,k),y.forEach(({ws:E,req:L})=>{E.removeAllListeners(),h(u,E,L,y)})};(D=e.on)==null||D.call(e,"mock:update-end",a=>{if(!n.has(a))return;let u=n.get(a);for(let p of u.values())for(let l of e.mockData[p]){if(!l.ws||l.__filepath!==a)return;let k=c(p);for(let[g,y]of k.entries())H(k,y,l,g,a)}}),o==null||o.on("upgrade",(a,u,p)=>{let{pathname:l,query:k}=(0,me.parse)(a.url,!0);if(!l||t.length===0||!t.some(x=>Y(x,a.url)))return;let g=e.mockData,y=Object.keys(g).find(x=>(0,fe.pathToRegexp)(x).test(l));if(!y)return;let w=g[y].find(x=>x.url&&x.ws&&(0,fe.pathToRegexp)(x.url).test(l));if(!w)return;let E=w.__filepath__;m(E,y);let L=c(y),I=d(L,l),_=i.get(I);if(!_){let x=[],ve={onCleanup:ot=>x.push(ot)};_={cleanupList:x,context:ve,connectionList:[]},i.set(I,_),M(L,I,w,ve,l,E)}let v=a,he=new Ye.default(a,a,r),{query:tt}=(0,me.parse)(a.headers.referer||"",!0);v.query=k,v.refererQuery=tt,v.params=N(y,l),v.getCookie=he.get.bind(he),I.handleUpgrade(v,u,p,x=>{R(`websocket-mock: ${a.url} connected`),_.connectionList.push({req:v,ws:x}),h(I,x,v,_.connectionList)})}),o==null||o.on("close",()=>{for(let a of s.values()){for(let u of a.values()){let p=i.get(u);Ve(p.cleanupList),u.close()}a.clear()}s.clear(),n.clear()})}function Ve(e){let o;for(;o=e.shift();)o==null||o()}async function ge(e,o,t,r){let n=O(o.include),s=O(o.exclude),i={};if(e.define)for(let M in e.define){let h=e.define[M];i[M]=typeof h=="string"?h:JSON.stringify(h)}let c=new oe({include:n,exclude:s,define:i,alias:e.resolve.alias});await c.load(),c.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),t==null||t.on("close",()=>c.close());let{httpProxies:d}=V(e.server.proxy||{}),m=O(o.prefix);return ke(c,t,O(o.wsPrefix),o.cookiesOptions),pe(c,{formidableOptions:o.formidableOptions,proxies:[...m,...d],cookiesOptions:o.cookiesOptions})}function ye({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 d={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=[Rt(d)];return d.build&&m.push(jt(d)),m}function jt(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 $e(this,o,e)}}}function Rt(e){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",configResolved(t){o=t,t.logger.warn("")},async configureServer({middlewares:t,config:r,httpServer:n,ws:s}){let i=await ge(r,e,n,s);t.use(i)},async configurePreviewServer({middlewares:t,httpServer:r}){let n=await ge(o,e,r);t.use(n)}}}function Ct(e){return e}function Wt(e){return t=>(S(t)?t=t.map(r=>e(r)||r):t=e(t)||t,t)}var Dt=ye;0&&(module.exports={baseMiddleware,createDefineMock,defineMock,mockDevServerPlugin,mockWebSocket,transformMockData});
package/dist/index.d.ts CHANGED
@@ -356,7 +356,6 @@ interface MockHttpItem extends MockBaseItem {
356
356
  validator?: Partial<Omit<ExtraRequest, 'getCookie'>> | ((request: ExtraRequest) => boolean);
357
357
  ws?: false;
358
358
  }
359
- type MockWebsocketServerDestroy = (() => void) | void;
360
359
  interface MockWebsocketItem extends MockBaseItem {
361
360
  ws: true;
362
361
  /**
@@ -367,17 +366,28 @@ interface MockWebsocketItem extends MockBaseItem {
367
366
  * ```ts
368
367
  * export default {
369
368
  * ws: true
370
- * setup: (wss) => {
369
+ * setup: (wss, { onCleanup }) => {
371
370
  * wss.on('connection', (ws,req) => {
372
371
  * ws.on('message', (raw) => console.log(raw))
373
- * ws.send(JSON.stringify({ type: 'connected' }))
372
+ * const timer = setInterval(
373
+ * () => ws.send(JSON.stringify({ type: 'connected' })),
374
+ * 1000,
375
+ * )
376
+ * onCleanup(() => clearInterval(timer))
374
377
  * })
375
378
  * wss.on('error', (error) => console.error(error))
376
379
  * }
377
380
  * }
378
381
  * ```
379
382
  */
380
- setup: (wss: WebSocketServer) => MockWebsocketServerDestroy;
383
+ setup: (wss: WebSocketServer, context: WebSocketSetupContext) => void;
384
+ }
385
+ interface WebSocketSetupContext {
386
+ /**
387
+ * 当你在定义 WSS 时,可能会执行一些自动任务或循环任务,
388
+ * 但是当热更新时,插件内部会重新执行 setup() ,这可能导致出现
389
+ */
390
+ onCleanup: (cleanup: () => void) => void;
381
391
  }
382
392
  type MockOptions = (MockHttpItem | MockWebsocketItem)[];
383
393
  type FormidableFile = formidable.File | formidable.File[];
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import Fe from"fs";import G from"fs/promises";import I from"path";import{build as Le}from"esbuild";import $e from"fast-glob";import He from"is-core-module";import{createFilter as _e,normalizePath as Ue}from"vite";var re="vite-plugin-mock-dev-server",se="1.1.6";import ne from"fs/promises";import Se from"path";import Re from"json5";var N={name:"externalize-deps",setup(t){t.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Se.isAbsolute(o))return{external:!0}})}},q={name:"json5-loader",setup(t){t.onLoad({filter:/\.json5$/},async({path:o})=>{let e=await ne.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Re.parse(e))}`,loader:"js"}})}},A={name:"json-loader",setup(t){t.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await ne.readFile(o,"utf-8")}`,loader:"js"}))}},B=t=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:e})=>{let r=t.find(({find:c})=>De(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 De(t,o){return t instanceof RegExp?t.test(o):o.length<t.length?!1:o===t?!0:o.startsWith(`${t}/`)}import K from"fs";import V from"path";import{fileURLToPath as Ce}from"url";import Ee from"debug";import{match as We}from"path-to-regexp";import ie from"picocolors";var P=t=>Array.isArray(t),R=t=>typeof t=="function",Ie=t=>Object.prototype.toString.call(t)==="[object Object]",ce=t=>Ie(t)&&Object.keys(t).length===0,Te=t=>t!==null&&typeof t=="object"&&typeof t.pipe=="function",ae=t=>Te(t)&&t.readable!==!1&&typeof t._read=="function"&&typeof t._readableState=="object";function pe(t){return new Promise(o=>setTimeout(o,t))}function le(t){return V.dirname(Ce(t))}var D=Ee("vite:plugin-mock-dev-server"),j=t=>P(t)?t:t==null?[]:[t],W={info(...t){console.info(ie.cyan("mock-dev-server: "),...t)},error(...t){console.error(`
2
- `,ie.cyan("mock-dev-server: "),...t,`
3
- `)}};function F(t,o,e){for(let n of o){let s=V.join(t,n);if(K.existsSync(s)&&K.statSync(s).isFile()){let i=e!=null&&e.pathOnly?s:K.readFileSync(s,"utf-8");if(!(e!=null&&e.predicate)||e.predicate(i))return i}}let r=V.dirname(t);if(r!==t&&(!(e!=null&&e.rootDir)||r.startsWith(e==null?void 0:e.rootDir)))return F(r,o,e)}var J=(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 z(t,o){return t[0]==="^"&&new RegExp(t).test(o)||o.startsWith(t)}function L(t,o){return(We(t,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}async function ue(t,o,e){let r=j(e.include),n=j(e.exclude),s={};if(o.define)for(let m in o.define){let d=o.define[m];s[m]=typeof d=="string"?d:JSON.stringify(d)}let{httpProxies:i}=J(o.server.proxy||{});i.push(...j(e.prefix));let c=j(e.wsPrefix),a={};try{let m=F(o.root,["package.json"]);m&&(a=JSON.parse(m))}catch{}let p=e.build.dist,u=await Be(process.cwd(),r,n),l=I.join(o.root,`mock-data-${Date.now()}.js`);await G.writeFile(l,u,"utf-8");let{code:v,deps:M}=await Je(l,s,o.resolve.alias),y=Ne(M);await G.unlink(l);let k=[{filename:I.join(p,"mock-data.js"),source:v},{filename:I.join(p,"index.js"),source:Ae(i,c,e.cookiesOptions,e.build.serverPort)},{filename:I.join(p,"package.json"),source:qe(a,y)}];try{if(I.isAbsolute(p)){await G.rm(p,{recursive:!0}),Fe.mkdirSync(p,{recursive:!0});for(let{filename:m,source:d}of k)await G.writeFile(m,d,"utf-8")}else for(let{filename:m,source:d}of k)t.emitFile({type:"asset",fileName:m,source:d})}catch{}}function Ne(t){let o=new Set,e=[re,"connect","cors"];return Object.keys(t).forEach(r=>{t[r].imports.filter(s=>s.external).map(s=>s.path).forEach(s=>{!e.includes(s)&&!He(s)&&o.add(s)})}),Array.from(o)}function qe(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":`^${se}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function Ae(t,o,e={},r=8080){return`import { createServer } from 'node:http';
1
+ import Ne from"fs";import X from"fs/promises";import F from"path";import{build as qe}from"esbuild";import Ae from"fast-glob";import Ue from"is-core-module";import{createFilter as Be,normalizePath as Je}from"vite";var ie="vite-plugin-mock-dev-server",ce="1.1.8";import ae from"fs/promises";import Ee from"path";import Le from"json5";var U={name:"externalize-deps",setup(t){t.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Ee.isAbsolute(o))return{external:!0}})}},B={name:"json5-loader",setup(t){t.onLoad({filter:/\.json5$/},async({path:o})=>{let e=await ae.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Le.parse(e))}`,loader:"js"}})}},J={name:"json-loader",setup(t){t.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await ae.readFile(o,"utf-8")}`,loader:"js"}))}},z=t=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:e})=>{let r=t.find(({find:c})=>Ie(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 Ie(t,o){return t instanceof RegExp?t.test(o):o.length<t.length?!1:o===t?!0:o.startsWith(`${t}/`)}import V from"fs";import Y from"path";import{fileURLToPath as Te}from"url";import $e from"debug";import{match as _e}from"path-to-regexp";import pe from"picocolors";var S=t=>Array.isArray(t),P=t=>typeof t=="function",Fe=t=>Object.prototype.toString.call(t)==="[object Object]",ue=t=>Fe(t)&&Object.keys(t).length===0,He=t=>t!==null&&typeof t=="object"&&typeof t.pipe=="function",le=t=>He(t)&&t.readable!==!1&&typeof t._read=="function"&&typeof t._readableState=="object";function de(t){return new Promise(o=>setTimeout(o,t))}function me(t){return Y.dirname(Te(t))}var j=$e("vite:plugin-mock-dev-server"),O=t=>S(t)?t:t==null?[]:[t],C={info(...t){console.info(pe.cyan("mock-dev-server: "),...t)},error(...t){console.error(`
2
+ `,pe.cyan("mock-dev-server: "),...t,`
3
+ `)}};function H(t,o,e){for(let n of o){let s=Y.join(t,n);if(V.existsSync(s)&&V.statSync(s).isFile()){let i=e!=null&&e.pathOnly?s:V.readFileSync(s,"utf-8");if(!(e!=null&&e.predicate)||e.predicate(i))return i}}let r=Y.dirname(t);if(r!==t&&(!(e!=null&&e.rootDir)||r.startsWith(e==null?void 0:e.rootDir)))return H(r,o,e)}var G=(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 Q(t,o){return t[0]==="^"&&new RegExp(t).test(o)||o.startsWith(t)}function N(t,o){return(_e(t,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}async function fe(t,o,e){let r=O(e.include),n=O(e.exclude),s={};if(o.define)for(let p in o.define){let l=o.define[p];s[p]=typeof l=="string"?l:JSON.stringify(l)}let{httpProxies:i}=G(o.server.proxy||{});i.push(...O(e.prefix));let c=O(e.wsPrefix),d={};try{let p=H(o.root,["package.json"]);p&&(d=JSON.parse(p))}catch{}let m=e.build.dist,v=await Xe(process.cwd(),r,n),y=F.join(o.root,`mock-data-${Date.now()}.js`);await X.writeFile(y,v,"utf-8");let{code:_,deps:R}=await Ke(y,s,o.resolve.alias),a=ze(R);await X.unlink(y);let u=[{filename:F.join(m,"mock-data.js"),source:_},{filename:F.join(m,"index.js"),source:Qe(i,c,e.cookiesOptions,e.build.serverPort)},{filename:F.join(m,"package.json"),source:Ge(d,a)}];try{if(F.isAbsolute(m)){await X.rm(m,{recursive:!0}),Ne.mkdirSync(m,{recursive:!0});for(let{filename:p,source:l}of u)await X.writeFile(p,l,"utf-8")}else for(let{filename:p,source:l}of u)t.emitFile({type:"asset",fileName:p,source:l})}catch{}}function ze(t){let o=new Set,e=[ie,"connect","cors"];return Object.keys(t).forEach(r=>{t[r].imports.filter(s=>s.external).map(s=>s.path).forEach(s=>{!e.includes(s)&&!Ue(s)&&o.add(s)})}),Array.from(o)}function Ge(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":`^${ce}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function Qe(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 Be(t,o,e){let r=await $e(o,{cwd:t}),n=_e(o,e,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,p)=>{let u=Ue(I.join(t,a));i+=`import * as m${p} from '${u}';
28
- `,c+=`m${p}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
27
+ `}async function Xe(t,o,e){let r=await Ae(o,{cwd:t}),n=Be(o,e,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((d,m)=>{let v=Je(F.join(t,d));i+=`import * as m${m} from '${v}';
28
+ `,c+=`m${m}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
29
29
  ${i}
30
30
  const exporters = [${c}];
31
31
  const mockList = exporters.map((raw) => raw && raw.default
@@ -33,9 +33,10 @@ const mockList = exporters.map((raw) => raw && raw.default
33
33
  : Object.keys(raw || {}).map((key) => raw[key])
34
34
  )
35
35
  export default transformMockData(mockList);
36
- `}async function Je(t,o,e){var r;try{let n=await Le({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[B(e),N,q,A]});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 fe}from"buffer";import{parse as ke}from"url";import Qe from"cookies";import Xe from"http-status";import*as $ from"mime-types";import{pathToRegexp as ye}from"path-to-regexp";import H from"picocolors";import Y from"co-body";import ze from"formidable";async function de(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 Y.json(t);if(r.startsWith("application/x-www-form-urlencoded"))return await Y.form(t);if(r.startsWith("text/plain"))return await Y.text(t);if(r.startsWith("multipart/form-data"))return await Ge(t,o)}catch(s){console.error(s)}}async function Ge(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 me(t,o){return C(t.headers,o.headers)&&C(t.body,o.body)&&C(t.params,o.params)&&C(t.query,o.query)&&C(t.refererQuery,o.refererQuery)}function C(t,o){if(!o)return!0;for(let e in o)if(o[e]!==t[e])return!1;return!0}function he(t,{formidableOptions:o={},proxies:e,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:a,pathname:p}=ke(n.url,!0);if(!p||e.length===0||!e.some(S=>z(S,n.url)))return i();let u=t.mockData,l=Object.keys(u).find(S=>ye(S).test(p));if(!l)return i();let{query:v}=ke(n.headers.referer||"",!0),M=await de(n,o),y=new Qe(n,s,r),k=y.get.bind(y),m=n.method.toUpperCase(),d=Ke(u[l],{pathname:p,method:m,request:{query:a,refererQuery:v,body:M,headers:n.headers,getCookie:k}});if(!d)return i();D("middleware: ",m,n.url);let h=n,g=s;h.body=M,h.query=a,h.refererQuery=v,h.params=L(d.url,p),h.getCookie=k,g.setCookie=y.set.bind(y);let{body:w,delay:f,type:O="json",response:T,status:X=200,statusText:je}=d;if(Z(g,X,je),await Ve(h,g,d),await Ye(h,g,d),w){try{let S=R(w)?await w(h):w;await ge(c,f),Ze(g,S,O)}catch(S){W.error(`${H.red("[body error]")} ${n.url}
37
- `,S),Z(g,500),s.end("")}return}if(T){try{await ge(c,f),await T(h,g,i)}catch(S){W.error(`${H.red("[response error]")} ${n.url}
38
- `,S),Z(g,500),s.end("")}return}s.end("")}}function Ke(t,{pathname:o,method:e,request:r}){return t.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?P(n.method)?n.method:[n.method]:["GET","POST"]).includes(e))return!1;let i=ye(n.url).test(o);if(i&&n.validator){let c=L(n.url,o);if(R(n.validator))return n.validator({params:c,...r});try{return me({params:c,...r},n.validator)}catch(a){return W.error(`${H.red("[validator error]")} ${o}
39
- `,a),!1}}return i})}function Z(t,o=200,e){t.statusCode=o,t.statusMessage=e||et(o)}async function Ve(t,o,{headers:e,type:r="json"}){let n=$.contentType(r)||$.contentType($.lookup(r)||"");if(n&&o.setHeader("Content-Type",n),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock","generate by vite:plugin-mock-dev-server"),!!e)try{let s=R(e)?await e(t):e;Object.keys(s).forEach(i=>{o.setHeader(i,s[i])})}catch(s){W.error(`${H.red("[headers error]")} ${t.url}
40
- `,s)}}async function Ye(t,o,{cookies:e}){if(e)try{let r=R(e)?await e(t):e;Object.keys(r).forEach(n=>{let s=r[n];if(P(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){W.error(`${H.red("[cookies error]")} ${t.url}
41
- `,r)}}function Ze(t,o,e){if(ae(o))o.pipe(t);else if(fe.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"?fe.from(r):r)}}async function ge(t,o){if(!o||o<=0)return;let e=Date.now()-t,r=o-e;r>0&&await pe(r)}function et(t){return Xe[t]||"Unknown"}import rt from"events";import ee from"fs";import{createRequire as st}from"module";import Me from"path";import{pathToFileURL as nt}from"url";import be from"chokidar";import{build as it}from"esbuild";import ct from"fast-glob";import{createFilter as at,normalizePath as U}from"vite";import{parse as tt}from"url";import ot from"lodash.sortby";function ve(t){let o=[];for(let[,r]of t.entries())r&&(P(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}=tt(r.url,!0),i=e[n]??(e[n]=[]),c={...r,url:n};if(c.ws!==!0){let a=c.validator;ce(s)||(R(a)?c.validator=function(p){return C(p.query,s)&&a(p)}: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]=ot(e[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;if(!s)return 1;if(R(s))return 0;let{query:i,params:c,headers:a,body:p,refererQuery:u}=s;return 1/(_(i)+_(c)+_(a)+_(p)+_(u))})}),e}function _(t){return t?Object.keys(t).length:0}var pt=le(import.meta.url),E=st(pt),Q=class extends rt{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=F(this.cwd,["package.json"]);this.moduleType=r&&JSON.parse(r).type==="module"?"esm":"cjs"}catch{}}get mockData(){return this._mockData}async load(){let{include:e,exclude:r}=this.options,n=await ct(e,{cwd:this.cwd}),s=at(e,r,{resolve:!1});this.watchMockEntry(),this.watchDeps();for(let c of n.filter(s))await this.loadMock(c);this.updateMockList();let i=null;this.on("mock:update",async c=>{s(c)&&(await this.loadMock(c),i&&clearTimeout(i),i=setTimeout(()=>{this.updateMockList(),this.emit("mock:update-end",c),i=null},0))}),this.on("mock:unlink",async c=>{s(c)&&(this.moduleCache.delete(c),this.updateMockList(),this.emit("mock:update-end",c))})}watchMockEntry(){let{include:e}=this.options,[r,...n]=e,s=be.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=U(i),this.emit("mock:update",i),D("watcher:add",i)}),s.on("change",async i=>{i=U(i),this.emit("mock:update",i),D("watcher:change",i)}),s.on("unlink",async i=>{i=U(i),this.emit("mock:unlink",i),D("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let e=[];this.depsWatcher=be.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=U(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=U(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=ve(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&&i.default?i.default:Object.keys(i||{}).map(a=>i[a]);P(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=`${nt(s)}.mjs`;await ee.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{ee.unlinkSync(i)}catch{}}}else{e=Me.resolve(this.cwd,e);let s=Me.extname(e),i=ee.realpathSync(e),c=s in E.extensions?s:".js",a=E.extensions[c];E.extensions[c]=(u,l)=>{l===i?u._compile(r,l):a(u,l)},delete E.cache[E.resolve(e)];let p=E(e);return E.extensions[c]=a,p.__esModule?p:{default:p}}}async transformWithEsbuild(e,r){var n;try{let s=await it({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:[B(this.options.alias),N,A,q]});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 xe}from"url";import lt from"cookies";import{pathToRegexp as we}from"path-to-regexp";import{WebSocketServer as ut}from"ws";function Oe(t,o,e,r){var c;let n=new Set,s=new Map,i=new Map;(c=t.on)==null||c.call(t,"mock:update-end",a=>{if(!n.has(a))return;let p={};for(let[u,l]of i.entries())t.mockData[u].forEach(v=>{v.__filepath__===a&&v.ws&&l.forEach(({pathname:M,req:y,ws:k})=>{p[M]??(p[M]={mock:v,list:[],mockUrl:u}),p[M].list.push({req:y,ws:k}),k.removeAllListeners()})});Object.keys(p).forEach(u=>{var k,m;let l=s.get(u),{mock:v,list:M,mockUrl:y}=p[u];l.wss.removeAllListeners(),(k=l.cancel)==null||k.call(l),l.cancel=(m=v.setup)==null?void 0:m.call(v,l.wss),l.wss.on("close",()=>{s.delete(u)}),M.forEach(({req:d,ws:h})=>{l.wss.emit("connection",h,d),h.on("close",()=>{let g=i.get(y),w=(g==null?void 0:g.findIndex(f=>f.ws===h))||-1;w>=0&&(g==null||g.splice(w,1))})})})}),o==null||o.on("upgrade",(a,p,u)=>{var w;let{pathname:l,query:v}=xe(a.url,!0);if(!l||e.length===0||!e.some(f=>z(f,a.url)))return;let M=t.mockData,y=Object.keys(M).find(f=>we(f).test(l));if(!y)return;let k=M[y].find(f=>f.url&&f.ws&&we(f.url).test(l));if(!k)return;n.add(k.__filepath__);let m=s.get(l);if(!m){let f=new ut({noServer:!0}),O=(w=k.setup)==null?void 0:w.call(k,f);f.on("close",()=>{s.delete(l)}),m={wss:f,cancel:O},s.set(l,m)}let d=a,h=new lt(a,a,r),{query:g}=xe(a.headers.referer||"",!0);d.query=v,d.refererQuery=g,d.params=L(y,l),d.getCookie=h.get.bind(h),m.wss.handleUpgrade(d,p,u,f=>{D(`websocket-mock: ${a.url} connected`),m.wss.emit("connection",f,d);let O=i.get(y);O||(O=[],i.set(y,O)),O.push({req:d,ws:f,pathname:l}),f.on("close",()=>{let T=O.findIndex(X=>X.ws===f);T>=0&&O.splice(T,1)})})}),o==null||o.on("close",()=>{s.forEach(({wss:a,cancel:p})=>{p==null||p(),a.close()}),s.clear(),n.clear(),i.clear()})}async function te(t,o,e,r){let n=j(o.include),s=j(o.exclude),i={};if(t.define)for(let u in t.define){let l=t.define[u];i[u]=typeof l=="string"?l:JSON.stringify(l)}let c=new Q({include:n,exclude:s,define:i,alias:t.resolve.alias});await c.load(),c.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),e==null||e.on("close",()=>c.close());let{httpProxies:a}=J(t.server.proxy||{}),p=j(o.prefix);return Oe(c,e,j(o.wsPrefix),o.cookiesOptions),he(c,{formidableOptions:o.formidableOptions,proxies:[...p,...a],cookiesOptions:o.cookiesOptions})}function Pe({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},p=[mt(a)];return a.build&&p.push(dt(a)),p}function dt(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 ue(this,o,t)}}}function mt(t){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",configResolved(e){o=e,e.logger.warn("")},async configureServer({middlewares:e,config:r,httpServer:n,ws:s}){let i=await te(r,t,n,s);e.use(i)},async configurePreviewServer({middlewares:e,httpServer:r}){let n=await te(o,t,r);e.use(n)}}}function qo(t){return t}function Ao(t){return e=>(P(e)?e=e.map(r=>t(r)||r):e=t(e)||e,e)}var Go=Pe;export{he as baseMiddleware,Ao as createDefineMock,Go as default,qo as defineMock,Pe as mockDevServerPlugin,Oe as mockWebSocket,ve as transformMockData};
36
+ `}async function Ke(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:[z(e),U,B,J]});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 ye}from"buffer";import{parse as he}from"url";import Ze from"cookies";import et from"http-status";import*as q from"mime-types";import{pathToRegexp as Me}from"path-to-regexp";import W from"picocolors";import Z from"co-body";import Ve 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 Z.json(t);if(r.startsWith("application/x-www-form-urlencoded"))return await Z.form(t);if(r.startsWith("text/plain"))return await Z.text(t);if(r.startsWith("multipart/form-data"))return await Ye(t,o)}catch(s){console.error(s)}}async function Ye(t,o){let e=Ve(o);return new Promise((r,n)=>{e.parse(t,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function ge(t,o){return T(t.headers,o.headers)&&T(t.body,o.body)&&T(t.params,o.params)&&T(t.query,o.query)&&T(t.refererQuery,o.refererQuery)}function T(t,o){if(!o)return!0;for(let e in o)if(o[e]!==t[e])return!1;return!0}function be(t,{formidableOptions:o={},proxies:e,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:d,pathname:m}=he(n.url,!0);if(!m||e.length===0||!e.some(h=>Q(h,n.url)))return i();let v=t.mockData,y=Object.keys(v).find(h=>Me(h).test(m));if(!y)return i();let{query:_}=he(n.headers.referer||"",!0),R=await ke(n,o),a=new Ze(n,s,r),u=a.get.bind(a),p=n.method.toUpperCase(),l=tt(v[y],{pathname:m,method:p,request:{query:d,refererQuery:_,body:R,headers:n.headers,getCookie:u}});if(!l)return i();j("middleware: ",p,n.url);let f=n,k=s;f.body=R,f.query=d,f.refererQuery=_,f.params=N(l.url,m),f.getCookie=u,k.setCookie=a.set.bind(a);let{body:g,delay:w,type:D="json",response:E,status:L=200,statusText:I}=l;if(ee(k,L,I),await ot(f,k,l),await rt(f,k,l),g){try{let h=P(g)?await g(f):g;await ve(c,w),nt(k,h,D)}catch(h){C.error(`${W.red("[body error]")} ${n.url}
37
+ `,`file: ${W.cyan(l.__filepath__)}`,h),ee(k,500),s.end("")}return}if(E){try{await ve(c,w),await E(f,k,i)}catch(h){C.error(`${W.red("[response error]")} ${n.url}
38
+ `,`file: ${W.cyan(l.__filepath__)}`,h),ee(k,500),s.end("")}return}s.end("")}}function tt(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=Me(n.url).test(o);if(i&&n.validator){let c=N(n.url,o);if(P(n.validator))return n.validator({params:c,...r});try{return ge({params:c,...r},n.validator)}catch(d){return C.error(`${W.red("[validator error]")} ${o}
39
+ `,`file: ${W.cyan(n.__filepath__)}`,d),!1}}return i})}function ee(t,o=200,e){t.statusCode=o,t.statusMessage=e||st(o)}async function ot(t,o,{headers:e,type:r="json"}){let n=q.contentType(r)||q.contentType(q.lookup(r)||"");if(n&&o.setHeader("Content-Type",n),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock","generate by vite:plugin-mock-dev-server"),!!e)try{let s=P(e)?await e(t):e;Object.keys(s).forEach(i=>{o.setHeader(i,s[i])})}catch(s){C.error(`${W.red("[headers error]")} ${t.url}
40
+ `,s)}}async function rt(t,o,{cookies:e}){if(e)try{let r=P(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){C.error(`${W.red("[cookies error]")} ${t.url}
41
+ `,r)}}function nt(t,o,e){if(le(o))o.pipe(t);else if(ye.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"?ye.from(r):r)}}async function ve(t,o){if(!o||o<=0)return;let e=Date.now()-t,r=o-e;r>0&&await de(r)}function st(t){return et[t]||"Unknown"}import pt from"events";import te from"fs";import{createRequire as ut}from"module";import we from"path";import{pathToFileURL as lt}from"url";import Se from"chokidar";import{build as dt}from"esbuild";import mt from"fast-glob";import{createFilter as ft,normalizePath as A}from"vite";import{parse as it}from"url";import ct from"lodash.sortby";function xe(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}=it(r.url,!0),i=e[n]??(e[n]=[]),c={...r,url:n};if(c.ws!==!0){let d=c.validator;ue(s)||(P(d)?c.validator=function(m){return T(m.query,s)&&d(m)}:d?(c.validator={...d},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]=ct(e[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return s?P(s)?0:1/Object.keys(s).reduce((c,d)=>c+at(s[d]),0):1})}),e}function at(t){return t?Object.keys(t).length:0}var kt=me(import.meta.url),$=ut(kt),K=class extends pt{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}async load(){let{include:e,exclude:r}=this.options,n=await mt(e,{cwd:this.cwd}),s=ft(e,r,{resolve:!1});this.watchMockEntry(),this.watchDeps();for(let c of n.filter(s))await this.loadMock(c);this.updateMockList();let i=null;this.on("mock:update",async c=>{s(c)&&(await this.loadMock(c),i&&clearTimeout(i),i=setTimeout(()=>{this.updateMockList(),this.emit("mock:update-end",c),i=null},0))}),this.on("mock:unlink",async c=>{s(c)&&(this.moduleCache.delete(c),this.updateMockList(),this.emit("mock:update-end",c))})}watchMockEntry(){let{include:e}=this.options,[r,...n]=e,s=Se.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=A(i),this.emit("mock:update",i),j("watcher:add",i)}),s.on("change",async i=>{i=A(i),this.emit("mock:update",i),j("watcher:change",i)}),s.on("unlink",async i=>{i=A(i),this.emit("mock:unlink",i),j("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let e=[];this.depsWatcher=Se.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=A(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=A(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=xe(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&&i.default?i.default:Object.keys(i||{}).map(d=>i[d]);S(c)?c.forEach(d=>d.__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=`${lt(s)}.mjs`;await te.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{te.unlinkSync(i)}catch{}}}else{e=we.resolve(this.cwd,e);let s=we.extname(e),i=te.realpathSync(e),c=s in $.extensions?s:".js",d=$.extensions[c];$.extensions[c]=(v,y)=>{y===i?v._compile(r,y):d(v,y)},delete $.cache[$.resolve(e)];let m=$(e);return $.extensions[c]=d,m.__esModule?m:{default:m}}}async transformWithEsbuild(e,r){var n;try{let s=await dt({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:[z(this.options.alias),U,J,B]});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 Oe}from"url";import gt from"cookies";import{pathToRegexp as Pe}from"path-to-regexp";import yt from"picocolors";import{WebSocketServer as ht}from"ws";function Ce(t,o,e,r){var R;let n=new Map,s=new Map,i=new WeakMap,c=a=>{let u=s.get(a);return!u&&s.set(a,u=new Map),u},d=(a,u)=>{let p=a.get(u);return!p&&a.set(u,p=new ht({noServer:!0})),p},m=(a,u)=>{let p=n.get(a);!p&&n.set(a,p=new Set),p.add(u)},v=(a,u,p,l,f,k)=>{var g;try{(g=p.setup)==null||g.call(p,u,l),u.on("close",()=>{a.delete(f)})}catch(w){C.error(`${yt.red("[websocket server error]")} ${k}
42
+ `,w)}},y=(a,u,p,l)=>{a.emit("connection",u,p),u.on("close",()=>{let f=l.findIndex(k=>k.ws===u);f!==-1&&l.splice(f,1)})},_=(a,u,p,l,f)=>{let{cleanupList:k,connectionList:g,context:w}=i.get(u);je(k),u.removeAllListeners(),v(a,u,p,w,l,f),g.forEach(({ws:D,req:E})=>{D.removeAllListeners(),y(u,D,E,g)})};(R=t.on)==null||R.call(t,"mock:update-end",a=>{if(!n.has(a))return;let u=n.get(a);for(let p of u.values())for(let l of t.mockData[p]){if(!l.ws||l.__filepath!==a)return;let f=c(p);for(let[k,g]of f.entries())_(f,g,l,k,a)}}),o==null||o.on("upgrade",(a,u,p)=>{let{pathname:l,query:f}=Oe(a.url,!0);if(!l||e.length===0||!e.some(M=>Q(M,a.url)))return;let k=t.mockData,g=Object.keys(k).find(M=>Pe(M).test(l));if(!g)return;let w=k[g].find(M=>M.url&&M.ws&&Pe(M.url).test(l));if(!w)return;let D=w.__filepath__;m(D,g);let E=c(g),L=d(E,l),I=i.get(L);if(!I){let M=[],ne={onCleanup:De=>M.push(De)};I={cleanupList:M,context:ne,connectionList:[]},i.set(L,I),v(E,L,w,ne,l,D)}let h=a,re=new gt(a,a,r),{query:Re}=Oe(a.headers.referer||"",!0);h.query=f,h.refererQuery=Re,h.params=N(g,l),h.getCookie=re.get.bind(re),L.handleUpgrade(h,u,p,M=>{j(`websocket-mock: ${a.url} connected`),I.connectionList.push({req:h,ws:M}),y(L,M,h,I.connectionList)})}),o==null||o.on("close",()=>{for(let a of s.values()){for(let u of a.values()){let p=i.get(u);je(p.cleanupList),u.close()}a.clear()}s.clear(),n.clear()})}function je(t){let o;for(;o=t.shift();)o==null||o()}async function oe(t,o,e,r){let n=O(o.include),s=O(o.exclude),i={};if(t.define)for(let v in t.define){let y=t.define[v];i[v]=typeof y=="string"?y:JSON.stringify(y)}let c=new K({include:n,exclude:s,define:i,alias:t.resolve.alias});await c.load(),c.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),e==null||e.on("close",()=>c.close());let{httpProxies:d}=G(t.server.proxy||{}),m=O(o.prefix);return Ce(c,e,O(o.wsPrefix),o.cookiesOptions),be(c,{formidableOptions:o.formidableOptions,proxies:[...m,...d],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 d={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=[Mt(d)];return d.build&&m.push(vt(d)),m}function vt(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 fe(this,o,t)}}}function Mt(t){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",configResolved(e){o=e,e.logger.warn("")},async configureServer({middlewares:e,config:r,httpServer:n,ws:s}){let i=await oe(r,t,n,s);e.use(i)},async configurePreviewServer({middlewares:e,httpServer:r}){let n=await oe(o,t,r);e.use(n)}}}function Ko(t){return t}function Vo(t){return e=>(S(e)?e=e.map(r=>t(r)||r):e=t(e)||e,e)}var tr=We;export{be as baseMiddleware,Vo as createDefineMock,tr as default,Ko as defineMock,We as mockDevServerPlugin,Ce as mockWebSocket,xe as transformMockData};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-mock-dev-server",
3
- "version": "1.1.6",
3
+ "version": "1.1.8",
4
4
  "keywords": [
5
5
  "vite",
6
6
  "plugin",