vite-plugin-mock-dev-server 1.1.15 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -98,7 +98,7 @@ The plugin will also read the `define` configuration, which supports direct use
98
98
 
99
99
  By default, write mock data in the `mock` directory of your project's root directory:
100
100
 
101
- `mock/api.mock.ts` :
101
+ `mock/**/*.mock.ts` :
102
102
  ``` ts
103
103
  import { defineMock } from 'vite-plugin-mock-dev-server'
104
104
 
package/README.zh-CN.md CHANGED
@@ -98,7 +98,7 @@ export default defineConfig({
98
98
 
99
99
  默认配置,在你的项目根目录的 `mock` 目录中编写mock数据:
100
100
 
101
- `mock/api.mock.ts` :
101
+ `mock/**/*.mock.ts` :
102
102
  ```ts
103
103
  import { defineMock } from 'vite-plugin-mock-dev-server'
104
104
 
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
- "use strict";var ct=Object.create;var z=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var pt=Object.getOwnPropertyNames;var lt=Object.getPrototypeOf,ut=Object.prototype.hasOwnProperty;var mt=(e,o)=>{for(var t in o)z(e,t,{get:o[t],enumerable:!0})},Se=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of pt(o))!ut.call(e,n)&&n!==t&&z(e,n,{get:()=>o[n],enumerable:!(r=at(o,n))||r.enumerable});return e};var f=(e,o,t)=>(t=e!=null?ct(lt(e)):{},Se(o||!e||!e.__esModule?z(t,"default",{value:e,enumerable:!0}):t,e)),dt=e=>Se(z({},"__esModule",{value:!0}),e);var Tt={};mt(Tt,{baseMiddleware:()=>ke,createDefineMock:()=>Lt,default:()=>$t,defineMock:()=>It,mockDevServerPlugin:()=>xe,mockWebSocket:()=>Me,transformMockData:()=>ge});module.exports=dt(Tt);var ft=()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,b=ft();var $e=f(require("fs"),1),q=f(require("fs/promises"),1),F=f(require("path"),1),Te=require("esbuild"),Fe=f(require("fast-glob"),1),Ne=f(require("is-core-module"),1),se=require("vite");var Pe="vite-plugin-mock-dev-server",je="1.1.15";var Z=f(require("picocolors"),1);var G=f(require("fs"),1),Q=f(require("path"),1),Re=require("querystring"),V=require("url"),Ce=f(require("debug"),1),We=require("path-to-regexp"),pe=f(require("picocolors"),1),M=e=>Array.isArray(e),C=e=>typeof e=="function",K=e=>Object.prototype.toString.call(e)==="[object Object]",le=e=>K(e)&&Object.keys(e).length===0,kt=e=>e!==null&&typeof e=="object"&&typeof e.pipe=="function",De=e=>kt(e)&&e.readable!==!1&&typeof e._read=="function"&&typeof e._readableState=="object";function _e(e){return new Promise(o=>setTimeout(o,e))}function Ee(e){return Q.default.dirname((0,V.fileURLToPath)(e))}var W=(0,Ce.default)("vite:plugin-mock-dev-server"),S=e=>M(e)?e:e==null?[]:[e],P={info(...e){console.info(pe.default.cyan("mock-dev-server: "),...e)},error(...e){console.error(`
1
+ "use strict";var pt=Object.create;var Q=Object.defineProperty;var lt=Object.getOwnPropertyDescriptor;var ut=Object.getOwnPropertyNames;var mt=Object.getPrototypeOf,dt=Object.prototype.hasOwnProperty;var ft=(e,o)=>{for(var t in o)Q(e,t,{get:o[t],enumerable:!0})},Se=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of ut(o))!dt.call(e,n)&&n!==t&&Q(e,n,{get:()=>o[n],enumerable:!(r=lt(o,n))||r.enumerable});return e};var f=(e,o,t)=>(t=e!=null?pt(mt(e)):{},Se(o||!e||!e.__esModule?Q(t,"default",{value:e,enumerable:!0}):t,e)),kt=e=>Se(Q({},"__esModule",{value:!0}),e);var Ht={};ft(Ht,{baseMiddleware:()=>ke,createDefineMock:()=>Ft,default:()=>Nt,defineMock:()=>Tt,mockDevServerPlugin:()=>xe,mockWebSocket:()=>Me,transformMockData:()=>ge});module.exports=kt(Ht);var gt=()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,b=gt();var $e=f(require("fs"),1),z=f(require("fs/promises"),1),N=f(require("path"),1),Te=require("esbuild"),Fe=f(require("fast-glob"),1),Ne=f(require("is-core-module"),1),se=require("vite");var Ce="vite-plugin-mock-dev-server",je="1.2.0";var Z=f(require("picocolors"),1);var V=f(require("fs"),1),K=f(require("path"),1),Pe=require("querystring"),X=require("url"),Re=f(require("debug"),1),We=require("path-to-regexp"),pe=f(require("picocolors"),1),M=e=>Array.isArray(e),D=e=>typeof e=="function",U=e=>Object.prototype.toString.call(e)==="[object Object]",le=e=>U(e)&&Object.keys(e).length===0,yt=e=>e!==null&&typeof e=="object"&&typeof e.pipe=="function",De=e=>yt(e)&&e.readable!==!1&&typeof e._read=="function"&&typeof e._readableState=="object";function Ee(e){return new Promise(o=>setTimeout(o,e))}function _e(e){return K.default.dirname((0,X.fileURLToPath)(e))}var E=(0,Re.default)("vite:plugin-mock-dev-server"),S=e=>M(e)?e:e==null?[]:[e],j={info(...e){console.info(pe.default.cyan("mock-dev-server: "),...e)},error(...e){console.error(`
2
2
  `,pe.default.cyan("mock-dev-server: "),...e,`
3
- `)}};function A(e,o,t){for(let n of o){let s=Q.default.join(e,n);if(G.default.existsSync(s)&&G.default.statSync(s).isFile()){let i=t!=null&&t.pathOnly?s:G.default.readFileSync(s,"utf-8");if(!(t!=null&&t.predicate)||t.predicate(i))return i}}let r=Q.default.dirname(e);if(r!==e&&(!(t!=null&&t.rootDir)||r.startsWith(t==null?void 0:t.rootDir)))return A(r,o,t)}var X=(e={})=>{let o=[],t=[];return Object.keys(e).forEach(r=>{var s,i;let n=e[r];typeof n=="string"||!n.ws&&!((s=n.target)!=null&&s.toString().startsWith("ws:"))&&!((i=n.target)!=null&&i.toString().startsWith("wss:"))?o.push(r):t.push(r)}),{httpProxies:o,wsProxies:t}};function Y(e,o){return e[0]==="^"&&new RegExp(e).test(o)||o.startsWith(e)}function J(e,o){return((0,We.match)(e,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}function D(e){let o=new V.URL(e,"http://example.com"),t=decodeURIComponent(o.pathname),r=(0,Re.parse)(o.search.replace(/^\?/,""));return{pathname:t,query:r}}var gt=/import\.meta\.env\.(.+)/;function ee(e){let o={},t=process.env.NODE_ENV||e.mode;Object.assign(o,{"process.env.NODE_ENV":JSON.stringify(t),"global.process.env.NODE_ENV":JSON.stringify(t),"globalThis.process.env.NODE_ENV":JSON.stringify(t),__vite_process_env_NODE_ENV:JSON.stringify(t)});let r={},n={},s=[];for(let a in e.define){let u=e.define[a];if(typeof u=="string")try{JSON.parse(u),r[a]=u}catch{s.push(a)}else r[a]=JSON.stringify(u);let v=a.match(gt);v&&r[a]&&(n[v[1]]=`__vite__define__${r[a]}`)}s.length&&P.error(`${Z.default.yellow("[warn]")} The following keys: ${Z.default.yellow(Z.default.underline(s.join(", ")))} declared in 'define' cannot be parsed as regular code snippets.`);let i={},c={};i["import.meta.hot"]="undefined";for(let a in e.env)i[`import.meta.env.${a}`]=JSON.stringify(e.env[a]);return Object.assign(c,{"import.meta.env":JSON.stringify({...e.env,...n}).replace(/"__vite__define__(.+?)"([,}])/g,(a,u,v)=>`${u.replace(/(^\\")|(\\"$)/g,'"')}${v}`)}),{...i,...r,...c,...o}}var ue=f(require("fs/promises"),1),Ie=f(require("path"),1),Le=f(require("json5"),1),te={name:"externalize-deps",setup(e){e.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Ie.default.isAbsolute(o))return{external:!0}})}},oe={name:"json5-loader",setup(e){e.onLoad({filter:/\.json5$/},async({path:o})=>{let t=await ue.default.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Le.default.parse(t))}`,loader:"js"}})}},re={name:"json-loader",setup(e){e.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await ue.default.readFile(o,"utf-8")}`,loader:"js"}))}},ne=e=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:t})=>{let r=e.find(({find:c})=>yt(c,t));if(!r)return null;let{find:n,replacement:s}=r;return{path:(await o.resolve(t.replace(n,s),{kind:"import-statement",resolveDir:s,namespace:"file"})).path,external:!1}})}});function yt(e,o){return e instanceof RegExp?e.test(o):o.length<e.length?!1:o===e?!0:o.startsWith(`${e}/`)}async function He(e,o,t){let r=S(t.include),n=S(t.exclude),s=ee(o),{httpProxies:i}=X(o.server.proxy||{});i.push(...S(t.prefix));let c=S(t.wsPrefix),a={};try{let m=A(o.root,["package.json"]);m&&(a=JSON.parse(m))}catch{}let u=t.build.dist,v=await bt(process.cwd(),r,n),x=F.default.join(o.root,`mock-data-${Date.now()}.js`);await q.default.writeFile(x,v,"utf-8");let{code:H,deps:I}=await xt(x,s,o.resolve.alias),p=ht(I);await q.default.unlink(x);let l=[{filename:F.default.join(u,"mock-data.js"),source:H},{filename:F.default.join(u,"index.js"),source:Mt(i,c,t.cookiesOptions,t.build.serverPort)},{filename:F.default.join(u,"package.json"),source:vt(a,p)}];try{if(F.default.isAbsolute(u)){await q.default.rm(u,{recursive:!0}),$e.default.mkdirSync(u,{recursive:!0});for(let{filename:m,source:d}of l)await q.default.writeFile(m,d,"utf-8")}else for(let{filename:m,source:d}of l)e.emitFile({type:"asset",fileName:m,source:d})}catch{}}function ht(e){let o=new Set,t=[Pe,"connect","cors"];return Object.keys(e).forEach(r=>{e[r].imports.filter(s=>s.external).map(s=>s.path).forEach(s=>{!t.includes(s)&&!(0,Ne.default)(s)&&o.add(s)})}),Array.from(o)}function vt(e,o){let{dependencies:t={},devDependencies:r={}}=e,n={...t,...r},s={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${je}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function Mt(e,o,t={},r=8080){return`import { createServer } from 'node:http';
3
+ `)}};function J(e,o,t){for(let n of o){let s=K.default.join(e,n);if(V.default.existsSync(s)&&V.default.statSync(s).isFile()){let i=t!=null&&t.pathOnly?s:V.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 J(r,o,t)}var Y=(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 A(e,o){return e[0]==="^"&&new RegExp(e).test(o)||o.startsWith(e)}function q(e,o){return((0,We.match)(e,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}function P(e){let o=new X.URL(e,"http://example.com"),t=decodeURIComponent(o.pathname),r=(0,Pe.parse)(o.search.replace(/^\?/,""));return{pathname:t,query:r}}var ht=/import\.meta\.env\.(.+)/;function ee(e){let o={},t=process.env.NODE_ENV||e.mode;Object.assign(o,{"process.env.NODE_ENV":JSON.stringify(t),"global.process.env.NODE_ENV":JSON.stringify(t),"globalThis.process.env.NODE_ENV":JSON.stringify(t),__vite_process_env_NODE_ENV:JSON.stringify(t)});let r={},n={},s=[];for(let a in e.define){let p=e.define[a];if(typeof p=="string")try{JSON.parse(p),r[a]=p}catch{s.push(a)}else r[a]=JSON.stringify(p);let k=a.match(ht);k&&r[a]&&(n[k[1]]=`__vite__define__${r[a]}`)}s.length&&j.error(`${Z.default.yellow("[warn]")} The following keys: ${Z.default.yellow(Z.default.underline(s.join(", ")))} declared in 'define' cannot be parsed as regular code snippets.`);let i={},c={};i["import.meta.hot"]="undefined";for(let a in e.env)i[`import.meta.env.${a}`]=JSON.stringify(e.env[a]);return Object.assign(c,{"import.meta.env":JSON.stringify({...e.env,...n}).replace(/"__vite__define__(.+?)"([,}])/g,(a,p,k)=>`${p.replace(/(^\\")|(\\"$)/g,'"')}${k}`)}),{...i,...r,...c,...o}}var ue=f(require("fs/promises"),1),Le=f(require("path"),1),Ie=f(require("json5"),1),te={name:"externalize-deps",setup(e){e.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Le.default.isAbsolute(o))return{external:!0}})}},oe={name:"json5-loader",setup(e){e.onLoad({filter:/\.json5$/},async({path:o})=>{let t=await ue.default.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Ie.default.parse(t))}`,loader:"js"}})}},re={name:"json-loader",setup(e){e.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await ue.default.readFile(o,"utf-8")}`,loader:"js"}))}},ne=e=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:t})=>{let r=e.find(({find:c})=>vt(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 vt(e,o){return e instanceof RegExp?e.test(o):o.length<e.length?!1:o===e?!0:o.startsWith(`${e}/`)}async function He(e,o,t){let r=S(t.include),n=S(t.exclude),s=ee(o),{httpProxies:i}=Y(o.server.proxy||{});i.push(...S(t.prefix));let c=S(t.wsPrefix),a={};try{let m=J(o.root,["package.json"]);m&&(a=JSON.parse(m))}catch{}let p=t.build.dist,k=await wt(process.cwd(),r,n),x=N.default.join(o.root,`mock-data-${Date.now()}.js`);await z.default.writeFile(x,k,"utf-8");let{code:O,deps:I}=await St(x,s,o.resolve.alias),l=Mt(I);await z.default.unlink(x);let u=[{filename:N.default.join(p,"mock-data.js"),source:O},{filename:N.default.join(p,"index.js"),source:xt(i,c,t.cookiesOptions,t.build.serverPort)},{filename:N.default.join(p,"package.json"),source:bt(a,l)}];try{if(N.default.isAbsolute(p)){await z.default.rm(p,{recursive:!0}),$e.default.mkdirSync(p,{recursive:!0});for(let{filename:m,source:d}of u)await z.default.writeFile(m,d,"utf-8")}else for(let{filename:m,source:d}of u)e.emitFile({type:"asset",fileName:m,source:d})}catch{}}function Mt(e){let o=new Set,t=[Ce,"connect","cors"];return Object.keys(e).forEach(r=>{e[r].imports.filter(s=>s.external&&!s.path.startsWith("<define:")).map(s=>s.path).forEach(s=>{!t.includes(s)&&!(0,Ne.default)(s)&&o.add(s)})}),Array.from(o)}function bt(e,o){let{dependencies:t={},devDependencies:r={}}=e,n={...t,...r},s={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${je}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function xt(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';
@@ -9,10 +9,10 @@ import mockData from './mock-data.js';
9
9
  const app = connect();
10
10
  const server = createServer(app);
11
11
  const httpProxies = ${JSON.stringify(e)};
12
- const wxProxies = ${JSON.stringify(o)}
12
+ const wxProxies = ${JSON.stringify(o)};
13
13
  const cookiesOptions = ${JSON.stringify(t)};
14
14
 
15
- mockWebSocket({ mockData }, server, wxProxies, cookiesOptions)
15
+ mockWebSocket({ mockData }, server, wxProxies, cookiesOptions);
16
16
 
17
17
  app.use(corsMiddleware());
18
18
  app.use(baseMiddleware({ mockData }, {
@@ -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 bt(e,o,t){let r=await(0,Fe.default)(o,{cwd:e}),n=(0,se.createFilter)(o,t,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,u)=>{let v=(0,se.normalizePath)(F.default.join(e,a));i+=`import * as m${u} from '${v}';
28
- `,c+=`m${u}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
27
+ `}async function wt(e,o,t){let r=await(0,Fe.default)(o,{cwd:e}),n=(0,se.createFilter)(o,t,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,p)=>{let k=(0,se.normalizePath)(N.default.join(e,a));i+=`import * as m${p} from '${k}';
28
+ `,c+=`m${p}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
29
29
  ${i}
30
30
  const exporters = [${c}];
31
31
  const mockList = exporters.map((raw) => {
@@ -42,10 +42,10 @@ const mockList = exporters.map((raw) => {
42
42
  }
43
43
  return mockConfig
44
44
  });
45
- export default transformMockData(mockList);`}async function xt(e,o,t){var r;try{let n=await(0,Te.build)({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[ne(t),te,oe,re]});return{code:n.outputFiles[0].text,deps:((r=n.metafile)==null?void 0:r.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}var de=require("buffer"),ze=f(require("cookies"),1),Ge=f(require("http-status"),1),Qe=f(require("lodash.sortby"),1),B=f(require("mime-types"),1),fe=require("path-to-regexp"),j=f(require("picocolors"),1);var ie=f(require("co-body"),1),Ue=f(require("formidable"),1);async function Ae(e,o){var n;let t=e.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(t))return;let r=((n=e.headers["content-type"])==null?void 0:n.toLocaleLowerCase())||"";try{if(r.startsWith("application/json"))return await ie.default.json(e);if(r.startsWith("application/x-www-form-urlencoded"))return await ie.default.form(e);if(r.startsWith("text/plain"))return await ie.default.text(e);if(r.startsWith("multipart/form-data"))return await wt(e,o)}catch(s){console.error(s)}}async function wt(e,o){let t=(0,Ue.default)(o);return new Promise((r,n)=>{t.parse(e,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function Je(e,o){return _(e.headers,o.headers)&&_(e.body,o.body)&&_(e.params,o.params)&&_(e.query,o.query)&&_(e.refererQuery,o.refererQuery)}function _(e,o){if(!o)return!0;for(let t in o)if(!qe(e[t],o[t]))return!1;return!0}function qe(e,o){if(M(e)&&M(o)){let t=new Set;return o.every(r=>e.some((n,s)=>{if(t.has(s))return!1;let i=qe(n,r);return i&&t.add(s),i}))}return K(e)&&K(o)?_(e,o):e===o}var St=/:/g;function ke(e,{formidableOptions:o={},proxies:t,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:a,pathname:u}=D(n.url);if(!u||t.length===0||!t.some(h=>Y(h,n.url)))return i();let v=e.mockData,x=(0,Qe.default)(Object.keys(v),h=>{var U;return((U=h.match(St))==null?void 0:U.length)||0}).find(h=>(0,fe.pathToRegexp)(h).test(u));if(!x)return i();let{query:H}=D(n.headers.referer||""),I=await Ae(n,o),p=new ze.default(n,s,r),l=p.get.bind(p),m=n.method.toUpperCase(),d=Ot(v[x],{pathname:u,method:m,request:{query:a,refererQuery:H,body:I,headers:n.headers,getCookie:l}});if(!d)return i();W("middleware: ",m,n.url);let k=n,g=s;k.body=I,k.query=a,k.refererQuery=H,k.params=J(d.url,u),k.getCookie=l,g.setCookie=p.set.bind(p);let{body:y,delay:O,type:R="json",response:L,status:$=200,statusText:T}=d;if(me(g,$,T),await Pt(k,g,d),await jt(k,g,d),y){try{let h=C(y)?await y(k):y;await Be(c,O),Rt(g,h,R)}catch(h){P.error(`${j.default.red("[body error]")} ${n.url}
46
- `,`file: ${j.default.cyan(d.__filepath__)}`,h),me(g,500),s.end("")}return}if(L){try{await Be(c,O),await L(k,g,i)}catch(h){P.error(`${j.default.red("[response error]")} ${n.url}
47
- `,`file: ${j.default.cyan(d.__filepath__)}`,h),me(g,500),s.end("")}return}s.end("")}}function Ot(e,{pathname:o,method:t,request:r}){return e.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?M(n.method)?n.method:[n.method]:["GET","POST"]).includes(t))return!1;let i=(0,fe.pathToRegexp)(n.url).test(o);if(i&&n.validator){let c=J(n.url,o);if(C(n.validator))return n.validator({params:c,...r});try{return Je({params:c,...r},n.validator)}catch(a){return P.error(`${j.default.red("[validator error]")} ${o}
48
- `,`file: ${j.default.cyan(n.__filepath__)}`,a),!1}}return i})}function me(e,o=200,t){e.statusCode=o,e.statusMessage=t||Ct(o)}async function Pt(e,o,t){let{headers:r,type:n="json"}=t,s=t.__filepath__,i=B.contentType(n)||B.contentType(B.lookup(n)||"");if(i&&o.setHeader("Content-Type",i),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock-Power-By","vite-plugin-mock-dev-server"),o.setHeader("X-File-Path",s),!!r)try{let c=C(r)?await r(e):r;Object.keys(c).forEach(a=>{o.setHeader(a,c[a])})}catch(c){P.error(`${j.default.red("[headers error]")} ${e.url}
49
- `,c)}}async function jt(e,o,{cookies:t}){if(t)try{let r=C(t)?await t(e):t;Object.keys(r).forEach(n=>{let s=r[n];if(M(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){P.error(`${j.default.red("[cookies error]")} ${e.url}
50
- `,r)}}function Rt(e,o,t){if(De(o))o.pipe(e);else if(de.Buffer.isBuffer(o))e.end(t==="text"||t==="json"?o.toString("utf-8"):o);else{let r=typeof o=="string"?o:JSON.stringify(o);e.end(t==="buffer"?de.Buffer.from(r):r)}}async function Be(e,o){if(!o||typeof o=="number"&&o<=0||M(o)&&o.length!==2)return;let t=0;if(M(o)){let[r,n]=o;t=Math.floor(Math.random()*(n-r+1))+r}else t=o-(Date.now()-e);t>0&&await _e(t)}function Ct(e){return Ge.default[e]||"Unknown"}var Ke=f(require("events"),1),ce=f(require("fs"),1),Xe=require("module"),ye=f(require("path"),1),Ye=require("url"),he=f(require("chokidar"),1),Ze=require("esbuild"),et=f(require("fast-glob"),1),E=require("vite");var Ve=f(require("lodash.sortby"),1);function ge(e){let o=[];for(let[,r]of e.entries())r&&(M(r)?o.push(...r):o.push(r));let t={};return o.filter(r=>(r.enabled||typeof r.enabled>"u")&&r.url).forEach(r=>{let{pathname:n,query:s}=D(r.url),i=t[n]??(t[n]=[]),c={...r,url:n};if(c.ws!==!0){let a=c.validator;le(s)||(C(a)?c.validator=function(u){return _(u.query,s)&&a(u)}:a?(c.validator={...a},c.validator.query=c.validator.query?{...s,...c.validator.query}:s):c.validator={query:s})}i.push(c)}),Object.keys(t).forEach(r=>{t[r]=(0,Ve.default)(t[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return!s||le(s)?2:C(s)?0:1/Object.keys(s).reduce((c,a)=>c+Wt(s[a]),0)})}),t}function Wt(e){return e?Object.keys(e).length:0}var Dt=Ee(b),N=(0,Xe.createRequire)(Dt),ae=class extends Ke.default{constructor(t){super();this.options=t;this.moduleCache=new Map;this.moduleDeps=new Map;this.moduleType="cjs";this._mockData={};this.cwd=t.cwd||process.cwd();try{let r=A(this.cwd,["package.json"]);this.moduleType=r&&JSON.parse(r).type==="module"?"esm":"cjs"}catch{}}get mockData(){return this._mockData}load(){let{include:t,exclude:r}=this.options,n=(0,E.createFilter)(t,r,{resolve:!1});(0,et.default)(t,{cwd:this.cwd}).then(i=>Promise.all(i.filter(n).map(c=>this.loadMock(c)))).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let s=null;this.on("mock:update",async i=>{n(i)&&(await this.loadMock(i),s&&clearImmediate(s),s=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),s=null}))}),this.on("mock:unlink",async i=>{n(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:t}=this.options,[r,...n]=t,s=he.default.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=(0,E.normalizePath)(i),this.emit("mock:update",i),W("watcher:add",i)}),s.on("change",async i=>{i=(0,E.normalizePath)(i),this.emit("mock:update",i),W("watcher:change",i)}),s.on("unlink",async i=>{i=(0,E.normalizePath)(i),this.emit("mock:unlink",i),W("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let t=[];this.depsWatcher=he.default.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=(0,E.normalizePath)(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=(0,E.normalizePath)(r),this.moduleDeps.delete(r)}),this.on("update:deps",()=>{let r=[];for(let[s]of this.moduleDeps.entries())r.push(s);let n=r.filter(s=>!t.includes(s));n.length>0&&this.depsWatcher.add(n)})}close(){var t,r;(t=this.mockWatcher)==null||t.close(),(r=this.depsWatcher)==null||r.close()}updateMockList(){this._mockData=ge(this.moduleCache)}updateModuleDeps(t,r){Object.keys(r).forEach(n=>{r[n].imports.map(i=>i.path).forEach(i=>{this.moduleDeps.has(i)||this.moduleDeps.set(i,new Set),this.moduleDeps.get(i).add(t)})}),this.emit("update:deps")}async loadMock(t){if(!t)return;let r=!1;/\.m[jt]s$/.test(t)?r=!0:/\.c[jt]s$/.test(t)?r=!1:r=this.moduleType==="esm";let{code:n,deps:s}=await this.transformWithEsbuild(t,r);try{let i=await this.loadFromCode(t,n,r)||{},c;i.default?c=i.default:(c=[],Object.keys(i).forEach(a=>{M(i[a])?c.push(...i[a]):c.push(i[a])})),M(c)?c.forEach(a=>a.__filepath__=t):c.__filepath__=t,this.moduleCache.set(t,c),this.updateModuleDeps(t,s)}catch(i){console.error(i)}}async loadFromCode(t,r,n){if(n){let s=`${t}.timestamp-${Date.now()}`,i=`${s}.mjs`,c=`${(0,Ye.pathToFileURL)(s)}.mjs`;await ce.default.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{ce.default.unlinkSync(i)}catch{}}}else{t=ye.default.resolve(this.cwd,t);let s=ye.default.extname(t),i=ce.default.realpathSync(t),c=s in N.extensions?s:".js",a=N.extensions[c];N.extensions[c]=(v,x)=>{x===i?v._compile(r,x):a(v,x)},delete N.cache[N.resolve(t)];let u=N(t);return N.extensions[c]=a,u.__esModule?u:{default:u}}}async transformWithEsbuild(t,r){var n;try{let s=await(0,Ze.build)({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:r?"esm":"cjs",define:this.options.define,plugins:[ne(this.options.alias),te,re,oe]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};var ot=f(require("cookies"),1),ve=require("path-to-regexp"),rt=f(require("picocolors"),1),nt=require("ws");function Me(e,o,t,r){var I;let n=new Map,s=new Map,i=new WeakMap,c=p=>{let l=s.get(p);return!l&&s.set(p,l=new Map),l},a=(p,l)=>{let m=p.get(l);return!m&&p.set(l,m=new nt.WebSocketServer({noServer:!0})),m},u=(p,l)=>{let m=n.get(p);!m&&n.set(p,m=new Set),m.add(l)},v=(p,l,m,d,k,g)=>{var y;try{(y=m.setup)==null||y.call(m,l,d),l.on("close",()=>p.delete(k))}catch(O){P.error(`${rt.default.red("[websocket server error]")} ${g}
51
- `,O)}},x=(p,l,m,d)=>{p.emit("connection",l,m),l.on("close",()=>{let k=d.findIndex(g=>g.ws===l);k!==-1&&d.splice(k,1)})},H=(p,l,m,d,k)=>{let{cleanupList:g,connectionList:y,context:O}=i.get(l);tt(g),y.forEach(({ws:R})=>R.removeAllListeners()),l.removeAllListeners(),v(p,l,m,O,d,k),y.forEach(({ws:R,req:L})=>x(l,R,L,y))};(I=e.on)==null||I.call(e,"mock:update-end",p=>{if(!n.has(p))return;let l=n.get(p);if(l)for(let m of l.values())for(let d of e.mockData[m]){if(!d.ws||d.__filepath__!==p)return;let k=c(m);for(let[g,y]of k.entries())H(k,y,d,g,p)}}),o==null||o.on("upgrade",(p,l,m)=>{let{pathname:d,query:k}=D(p.url);if(!d||t.length===0||!t.some(w=>Y(w,p.url)))return;let g=e.mockData,y=Object.keys(g).find(w=>(0,ve.pathToRegexp)(w).test(d));if(!y)return;let O=g[y].find(w=>w.url&&w.ws&&(0,ve.pathToRegexp)(w.url).test(d));if(!O)return;let R=O.__filepath__;u(R,y);let L=c(y),$=a(L,d),T=i.get($);if(!T){let w=[],we={onCleanup:it=>w.push(it)};T={cleanupList:w,context:we,connectionList:[]},i.set($,T),v(L,$,O,we,d,R)}let h=p,U=new ot.default(p,p,r),{query:st}=D(p.headers.referer||"");h.query=k,h.refererQuery=st,h.params=J(y,d),h.getCookie=U.get.bind(U),$.handleUpgrade(h,l,m,w=>{W(`websocket-mock: ${p.url} connected`),T.connectionList.push({req:h,ws:w}),x($,w,h,T.connectionList)})}),o==null||o.on("close",()=>{for(let p of s.values()){for(let l of p.values()){let m=i.get(l);tt(m.cleanupList),l.close()}p.clear()}s.clear(),n.clear()})}function tt(e){let o;for(;o=e.shift();)o==null||o()}async function be(e,o,t,r){let n=new ae({include:S(o.include),exclude:S(o.exclude),define:ee(e),alias:e.resolve.alias});n.load(),n.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),t==null||t.on("close",()=>n.close());let{httpProxies:s}=X(e.server.proxy||{}),i=S(o.prefix);return Me(n,t,S(o.wsPrefix),o.cookiesOptions),ke(n,{formidableOptions:o.formidableOptions,proxies:[...i,...s],cookiesOptions:o.cookiesOptions})}function xe({prefix:e=[],wsPrefix:o=[],include:t=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:r=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:n=!1,formidableOptions:s={},build:i=!1,cookiesOptions:c={}}={}){let a={prefix:e,wsPrefix:o,include:t,exclude:r,reload:n,cookiesOptions:c,formidableOptions:{multiples:!0,...s},build:i?Object.assign({serverPort:8080,dist:"mockServer"},typeof i=="object"?i:{}):!1},u=[Et(a)];return a.build&&u.push(_t(a)),u}function _t(e){let o={};return{name:"vite-plugin-mock-dev-server-generator",enforce:"post",apply:"build",configResolved(t){o=t,t.logger.warn("")},async buildEnd(t){t||o.command==="build"&&await He(this,o,e)}}}function Et(e){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",config(t){var s;let r=S(e.wsPrefix);if(r.length===0||!((s=t.server)!=null&&s.proxy)||Object.keys(t.server.proxy).length===0)return;let n={};Object.keys(t.server.proxy).forEach(i=>{r.includes(i)||(n[i]=t.server.proxy[i])}),t.server.proxy=n},configResolved(t){o=t,t.logger.warn("")},async configureServer({middlewares:t,config:r,httpServer:n,ws:s}){let i=await be(r,e,n,s);t.use(i)},async configurePreviewServer({middlewares:t,httpServer:r}){let n=await be(o,e,r);t.use(n)}}}function It(e){return e}function Lt(e){return t=>(M(t)?t=t.map(r=>e(r)||r):t=e(t)||t,t)}var $t=xe;0&&(module.exports={baseMiddleware,createDefineMock,defineMock,mockDevServerPlugin,mockWebSocket,transformMockData});
45
+ export default transformMockData(mockList);`}async function St(e,o,t){var r;try{let n=await(0,Te.build)({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[ne(t),te,oe,re]});return{code:n.outputFiles[0].text,deps:((r=n.metafile)==null?void 0:r.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}var st=f(require("cors"),1),it=require("path-to-regexp");var de=require("buffer"),ze=f(require("cookies"),1),Ge=f(require("http-status"),1),Qe=f(require("lodash.sortby"),1),G=f(require("mime-types"),1),fe=require("path-to-regexp"),R=f(require("picocolors"),1);var ie=f(require("co-body"),1),Ue=f(require("formidable"),1);async function Ae(e,o){var n;let t=e.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(t))return;let r=((n=e.headers["content-type"])==null?void 0:n.toLocaleLowerCase())||"";try{if(r.startsWith("application/json"))return await ie.default.json(e);if(r.startsWith("application/x-www-form-urlencoded"))return await ie.default.form(e);if(r.startsWith("text/plain"))return await ie.default.text(e);if(r.startsWith("multipart/form-data"))return await Ot(e,o)}catch(s){console.error(s)}}async function Ot(e,o){let t=(0,Ue.default)(o);return new Promise((r,n)=>{t.parse(e,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function Be(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(!Je(e[t],o[t]))return!1;return!0}function Je(e,o){if(M(e)&&M(o)){let t=new Set;return o.every(r=>e.some((n,s)=>{if(t.has(s))return!1;let i=Je(n,r);return i&&t.add(s),i}))}return U(e)&&U(o)?_(e,o):Object.is(e,o)}var Ct=/:/g;function ke(e,{formidableOptions:o={},proxies:t,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:a,pathname:p}=P(n.url);if(!p||t.length===0||!t.some(v=>A(v,n.url)))return i();let k=e.mockData,x=(0,Qe.default)(Object.keys(k),v=>{var B;return((B=v.match(Ct))==null?void 0:B.length)||0}).find(v=>(0,fe.pathToRegexp)(v).test(p));if(!x)return i();let{query:O}=P(n.headers.referer||""),I=await Ae(n,o),l=new ze.default(n,s,r),u=l.get.bind(l),m=n.method.toUpperCase(),d=jt(k[x],{pathname:p,method:m,request:{query:a,refererQuery:O,body:I,headers:n.headers,getCookie:u}});if(!d)return i();E("middleware: ",m,n.url);let g=n,y=s;g.body=I,g.query=a,g.refererQuery=O,g.params=q(d.url,p),g.getCookie=u,y.setCookie=l.set.bind(l);let{body:h,delay:C,type:W="json",response:$,status:T=200,statusText:F}=d;if(me(y,T,F),await Pt(g,y,d),await Rt(g,y,d),h){try{let v=D(h)?await h(g):h;await qe(c,C),Wt(y,v,W)}catch(v){j.error(`${R.default.red("[body error]")} ${n.url}
46
+ `,`file: ${R.default.cyan(d.__filepath__)}`,v),me(y,500),s.end("")}return}if($){try{await qe(c,C),await $(g,y,i)}catch(v){j.error(`${R.default.red("[response error]")} ${n.url}
47
+ `,`file: ${R.default.cyan(d.__filepath__)}`,v),me(y,500),s.end("")}return}s.end("")}}function jt(e,{pathname:o,method:t,request:r}){return e.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?M(n.method)?n.method:[n.method]:["GET","POST"]).includes(t))return!1;let i=(0,fe.pathToRegexp)(n.url).test(o);if(i&&n.validator){let c=q(n.url,o);if(D(n.validator))return n.validator({params:c,...r});try{return Be({params:c,...r},n.validator)}catch(a){return j.error(`${R.default.red("[validator error]")} ${o}
48
+ `,`file: ${R.default.cyan(n.__filepath__)}`,a),!1}}return i})}function me(e,o=200,t){e.statusCode=o,e.statusMessage=t||Dt(o)}async function Pt(e,o,t){let{headers:r,type:n="json"}=t,s=t.__filepath__,i=G.contentType(n)||G.contentType(G.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=D(r)?await r(e):r;Object.keys(c).forEach(a=>{o.setHeader(a,c[a])})}catch(c){j.error(`${R.default.red("[headers error]")} ${e.url}
49
+ `,c)}}async function Rt(e,o,{cookies:t}){if(t)try{let r=D(t)?await t(e):t;Object.keys(r).forEach(n=>{let s=r[n];if(M(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){j.error(`${R.default.red("[cookies error]")} ${e.url}
50
+ `,r)}}function Wt(e,o,t){if(De(o))o.pipe(e);else if(de.Buffer.isBuffer(o))e.end(t==="text"||t==="json"?o.toString("utf-8"):o);else{let r=typeof o=="string"?o:JSON.stringify(o);e.end(t==="buffer"?de.Buffer.from(r):r)}}async function qe(e,o){if(!o||typeof o=="number"&&o<=0||M(o)&&o.length!==2)return;let t=0;if(M(o)){let[r,n]=o;t=Math.floor(Math.random()*(n-r+1))+r}else t=o-(Date.now()-e);t>0&&await Ee(t)}function Dt(e){return Ge.default[e]||"Unknown"}var Ke=f(require("events"),1),ce=f(require("fs"),1),Xe=require("module"),ye=f(require("path"),1),Ye=require("url"),he=f(require("chokidar"),1),Ze=require("esbuild"),et=f(require("fast-glob"),1),L=require("vite");var Ve=f(require("lodash.sortby"),1);function ge(e){let o=[];for(let[,r]of e.entries())r&&(M(r)?o.push(...r):o.push(r));let t={};return o.filter(r=>U(r)&&r.enabled!==!1&&r.url).forEach(r=>{let{pathname:n,query:s}=P(r.url),i=t[n]??=[],c={...r,url:n};if(c.ws!==!0){let a=c.validator;le(s)||(D(a)?c.validator=function(p){return _(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(t).forEach(r=>{t[r]=(0,Ve.default)(t[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return!s||le(s)?2:D(s)?0:1/Object.keys(s).reduce((c,a)=>c+Et(s[a]),0)})}),t}function Et(e){return e?Object.keys(e).length:0}var _t=_e(b),H=(0,Xe.createRequire)(_t),ae=class extends Ke.default{constructor(t){super();this.options=t;this.cwd=t.cwd||process.cwd();try{let r=J(this.cwd,["package.json"]);this.moduleType=r&&JSON.parse(r).type==="module"?"esm":"cjs"}catch{}}moduleCache=new Map;moduleDeps=new Map;cwd;mockWatcher;depsWatcher;moduleType="cjs";_mockData={};get mockData(){return this._mockData}load(){let{include:t,exclude:r}=this.options,n=(0,L.createFilter)(t,r,{resolve:!1});(0,et.default)(t,{cwd:this.cwd}).then(i=>Promise.all(i.filter(n).map(c=>this.loadMock(c)))).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let s=null;this.on("mock:update",async i=>{n(i)&&(await this.loadMock(i),s&&clearImmediate(s),s=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),s=null}))}),this.on("mock:unlink",async i=>{n(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:t}=this.options,[r,...n]=t,s=he.default.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=(0,L.normalizePath)(i),this.emit("mock:update",i),E("watcher:add",i)}),s.on("change",async i=>{i=(0,L.normalizePath)(i),this.emit("mock:update",i),E("watcher:change",i)}),s.on("unlink",async i=>{i=(0,L.normalizePath)(i),this.emit("mock:unlink",i),E("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let t=[];this.depsWatcher=he.default.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=(0,L.normalizePath)(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=(0,L.normalizePath)(r),this.moduleDeps.delete(r)}),this.on("update:deps",()=>{let r=[];for(let[s]of this.moduleDeps.entries())r.push(s);let n=r.filter(s=>!t.includes(s));n.length>0&&this.depsWatcher.add(n)})}close(){var t,r;(t=this.mockWatcher)==null||t.close(),(r=this.depsWatcher)==null||r.close()}updateMockList(){this._mockData=ge(this.moduleCache)}updateModuleDeps(t,r){Object.keys(r).forEach(n=>{r[n].imports.map(i=>i.path).forEach(i=>{this.moduleDeps.has(i)||this.moduleDeps.set(i,new Set),this.moduleDeps.get(i).add(t)})}),this.emit("update:deps")}async loadMock(t){if(!t)return;let r=!1;/\.m[jt]s$/.test(t)?r=!0:/\.c[jt]s$/.test(t)?r=!1:r=this.moduleType==="esm";let{code:n,deps:s}=await this.transformWithEsbuild(t,r);try{let i=await this.loadFromCode(t,n,r)||{},c;i.default?c=i.default:(c=[],Object.keys(i).forEach(a=>{M(i[a])?c.push(...i[a]):c.push(i[a])})),M(c)?c.forEach(a=>a.__filepath__=t):c.__filepath__=t,this.moduleCache.set(t,c),this.updateModuleDeps(t,s)}catch(i){console.error(i)}}async loadFromCode(t,r,n){if(n){let s=`${t}.timestamp-${Date.now()}`,i=`${s}.mjs`,c=`${(0,Ye.pathToFileURL)(s)}.mjs`;await ce.default.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{ce.default.unlinkSync(i)}catch{}}}else{t=ye.default.resolve(this.cwd,t);let s=ye.default.extname(t),i=ce.default.realpathSync(t),c=s in H.extensions?s:".js",a=H.extensions[c];H.extensions[c]=(k,x)=>{x===i?k._compile(r,x):a(k,x)},delete H.cache[H.resolve(t)];let p=H(t);return H.extensions[c]=a,p.__esModule?p:{default:p}}}async transformWithEsbuild(t,r){var n;try{let s=await(0,Ze.build)({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:r?"esm":"cjs",define:this.options.define,plugins:[ne(this.options.alias),te,re,oe]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};var ot=f(require("cookies"),1),ve=require("path-to-regexp"),rt=f(require("picocolors"),1),nt=require("ws");function Me(e,o,t,r){var I;let n=new Map,s=new Map,i=new WeakMap,c=l=>{let u=s.get(l);return!u&&s.set(l,u=new Map),u},a=(l,u)=>{let m=l.get(u);return!m&&l.set(u,m=new nt.WebSocketServer({noServer:!0})),m},p=(l,u)=>{let m=n.get(l);!m&&n.set(l,m=new Set),m.add(u)},k=(l,u,m,d,g,y)=>{var h;try{(h=m.setup)==null||h.call(m,u,d),u.on("close",()=>l.delete(g))}catch(C){j.error(`${rt.default.red("[websocket server error]")} ${y}
51
+ `,C)}},x=(l,u,m,d)=>{l.emit("connection",u,m),u.on("close",()=>{let g=d.findIndex(y=>y.ws===u);g!==-1&&d.splice(g,1)})},O=(l,u,m,d,g)=>{let{cleanupList:y,connectionList:h,context:C}=i.get(u);tt(y),h.forEach(({ws:W})=>W.removeAllListeners()),u.removeAllListeners(),k(l,u,m,C,d,g),h.forEach(({ws:W,req:$})=>x(u,W,$,h))};(I=e.on)==null||I.call(e,"mock:update-end",l=>{if(!n.has(l))return;let u=n.get(l);if(u)for(let m of u.values())for(let d of e.mockData[m]){if(!d.ws||d.__filepath__!==l)return;let g=c(m);for(let[y,h]of g.entries())O(g,h,d,y,l)}}),o==null||o.on("upgrade",(l,u,m)=>{let{pathname:d,query:g}=P(l.url);if(!d||t.length===0||!t.some(w=>A(w,l.url)))return;let y=e.mockData,h=Object.keys(y).find(w=>(0,ve.pathToRegexp)(w).test(d));if(!h)return;let C=y[h].find(w=>w.url&&w.ws&&(0,ve.pathToRegexp)(w.url).test(d));if(!C)return;let W=C.__filepath__;p(W,h);let $=c(h),T=a($,d),F=i.get(T);if(!F){let w=[],we={onCleanup:at=>w.push(at)};F={cleanupList:w,context:we,connectionList:[]},i.set(T,F),k($,T,C,we,d,W)}let v=l,B=new ot.default(l,l,r),{query:ct}=P(l.headers.referer||"");v.query=g,v.refererQuery=ct,v.params=q(h,d),v.getCookie=B.get.bind(B),T.handleUpgrade(v,u,m,w=>{E(`websocket-mock: ${l.url} connected`),F.connectionList.push({req:v,ws:w}),x(T,w,v,F.connectionList)})}),o==null||o.on("close",()=>{for(let l of s.values()){for(let u of l.values()){let m=i.get(u);tt(m.cleanupList),u.close()}l.clear()}s.clear(),n.clear()})}function tt(e){let o;for(;o=e.shift();)o==null||o()}function be(e,o,t,r){let n=new ae({include:S(o.include),exclude:S(o.exclude),define:ee(e),alias:e.resolve.alias});n.load(),n.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),t==null||t.on("close",()=>n.close());let{httpProxies:s}=Y(e.server.proxy||{}),c=[...S(o.prefix),...s];Me(n,t,S(o.wsPrefix),o.cookiesOptions);let a=[];return a.push(Lt(n,c,e,o),ke(n,{formidableOptions:o.formidableOptions,proxies:c,cookiesOptions:o.cookiesOptions})),a.filter(Boolean)}function Lt(e,o,t,r){let n={},s=r.cors!==!1||t.server.cors!==!1;return t.server.cors!==!1&&(n={...n,...typeof t.server.cors=="boolean"?{}:t.server.cors}),r.cors!==!1&&(n={...n,...typeof r.cors=="boolean"?{}:r.cors}),s?function(i,c,a){let{pathname:p}=P(i.url);if(!p||o.length===0||!o.some(O=>A(O,i.url)))return a();let k=e.mockData;if(!Object.keys(k).find(O=>(0,it.pathToRegexp)(O).test(p)))return a();(0,st.default)(n)(i,c,a)}:void 0}function xe({prefix:e=[],wsPrefix:o=[],include:t=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:r=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:n=!1,cors:s=!0,formidableOptions:i={},build:c=!1,cookiesOptions:a={}}={}){let p={prefix:e,wsPrefix:o,include:t,exclude:r,reload:n,cors:s,cookiesOptions:a,formidableOptions:{multiples:!0,...i},build:c?Object.assign({serverPort:8080,dist:"mockServer"},typeof c=="object"?c:{}):!1},k=[$t(p)];return p.build&&k.push(It(p)),k}function It(e){let o={};return{name:"vite-plugin-mock-dev-server-generator",enforce:"post",apply:"build",configResolved(t){o=t,t.logger.warn("")},async buildEnd(t){t||o.command==="build"&&await He(this,o,e)}}}function $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("")},configureServer({middlewares:t,config:r,httpServer:n,ws:s}){be(r,e,n,s).forEach(c=>t.use(c))},configurePreviewServer({middlewares:t,httpServer:r}){be(o,e,r).forEach(s=>t.use(s))}}}function Tt(e){return e}function Ft(e){return t=>(M(t)?t=t.map(r=>e(r)||r):t=e(t)||t,t)}var Nt=xe;0&&(module.exports={baseMiddleware,createDefineMock,defineMock,mockDevServerPlugin,mockWebSocket,transformMockData});
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ import { Buffer } from 'node:buffer';
3
3
  import http from 'node:http';
4
4
  import { Readable } from 'node:stream';
5
5
  import Cookies from 'cookies';
6
+ import { CorsOptions } from 'cors';
6
7
  import formidable from 'formidable';
7
8
  import { WebSocketServer } from 'ws';
8
9
  import EventEmitter from 'node:events';
@@ -64,6 +65,7 @@ interface MockServerPluginOptions {
64
65
  * @default false
65
66
  */
66
67
  reload?: boolean;
68
+ cors?: boolean | CorsOptions;
67
69
  /**
68
70
  * formidable options
69
71
  * @see [formidable](https://github.com/node-formidable/formidable#options)
@@ -421,7 +423,7 @@ interface WebSocketSetupContext {
421
423
  type MockOptions = (MockHttpItem | MockWebsocketItem)[];
422
424
  type FormidableFile = formidable.File | formidable.File[];
423
425
 
424
- declare function mockDevServerPlugin({ prefix, wsPrefix, include, exclude, reload, formidableOptions, build, cookiesOptions, }?: MockServerPluginOptions): Plugin[];
426
+ declare function mockDevServerPlugin({ prefix, wsPrefix, include, exclude, reload, cors, formidableOptions, build, cookiesOptions, }?: MockServerPluginOptions): Plugin[];
425
427
 
426
428
  /**
427
429
  * mock config Type helper
@@ -453,8 +455,8 @@ declare function mockDevServerPlugin({ prefix, wsPrefix, include, exclude, reloa
453
455
  * ```
454
456
  */
455
457
  declare function defineMock(config: MockHttpItem): MockHttpItem;
456
- declare function defineMock(config: MockOptions): MockOptions;
457
458
  declare function defineMock(config: MockWebsocketItem): MockWebsocketItem;
459
+ declare function defineMock(config: MockOptions): MockOptions;
458
460
  /**
459
461
  * Return a custom defineMock function to support preprocessing of mock config.
460
462
  *
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import Be from"fs";import Z from"fs/promises";import N from"path";import{build as ze}from"esbuild";import Ge from"fast-glob";import Qe from"is-core-module";import{createFilter as Ve,normalizePath as Ke}from"vite";var ue="vite-plugin-mock-dev-server",me="1.1.15";import ne from"picocolors";import te from"fs";import oe from"path";import{parse as Le}from"querystring";import{URL as $e,fileURLToPath as Te}from"url";import Fe from"debug";import{match as Ne}from"path-to-regexp";import de from"picocolors";var v=t=>Array.isArray(t),C=t=>typeof t=="function",B=t=>Object.prototype.toString.call(t)==="[object Object]",re=t=>B(t)&&Object.keys(t).length===0,He=t=>t!==null&&typeof t=="object"&&typeof t.pipe=="function",fe=t=>He(t)&&t.readable!==!1&&typeof t._read=="function"&&typeof t._readableState=="object";function ke(t){return new Promise(o=>setTimeout(o,t))}function ge(t){return oe.dirname(Te(t))}var R=Fe("vite:plugin-mock-dev-server"),S=t=>v(t)?t:t==null?[]:[t],P={info(...t){console.info(de.cyan("mock-dev-server: "),...t)},error(...t){console.error(`
1
+ import qe from"node:fs";import Z from"node:fs/promises";import U from"node:path";import{build as ze}from"esbuild";import Ge from"fast-glob";import Qe from"is-core-module";import{createFilter as Ve,normalizePath as Ke}from"vite";var ue="vite-plugin-mock-dev-server",me="1.2.0";import ne from"picocolors";import te from"node:fs";import oe from"node:path";import{parse as Ie}from"node:querystring";import{URL as $e,fileURLToPath as Te}from"node:url";import Fe from"debug";import{match as Ne}from"path-to-regexp";import de from"picocolors";var v=t=>Array.isArray(t),W=t=>typeof t=="function",N=t=>Object.prototype.toString.call(t)==="[object Object]",re=t=>N(t)&&Object.keys(t).length===0,He=t=>t!==null&&typeof t=="object"&&typeof t.pipe=="function",fe=t=>He(t)&&t.readable!==!1&&typeof t._read=="function"&&typeof t._readableState=="object";function ke(t){return new Promise(o=>setTimeout(o,t))}function ge(t){return oe.dirname(Te(t))}var D=Fe("vite:plugin-mock-dev-server"),S=t=>v(t)?t:t==null?[]:[t],P={info(...t){console.info(de.cyan("mock-dev-server: "),...t)},error(...t){console.error(`
2
2
  `,de.cyan("mock-dev-server: "),...t,`
3
- `)}};function A(t,o,e){for(let n of o){let s=oe.join(t,n);if(te.existsSync(s)&&te.statSync(s).isFile()){let i=e!=null&&e.pathOnly?s:te.readFileSync(s,"utf-8");if(!(e!=null&&e.predicate)||e.predicate(i))return i}}let r=oe.dirname(t);if(r!==t&&(!(e!=null&&e.rootDir)||r.startsWith(e==null?void 0:e.rootDir)))return A(r,o,e)}var z=(t={})=>{let o=[],e=[];return Object.keys(t).forEach(r=>{var s,i;let n=t[r];typeof n=="string"||!n.ws&&!((s=n.target)!=null&&s.toString().startsWith("ws:"))&&!((i=n.target)!=null&&i.toString().startsWith("wss:"))?o.push(r):e.push(r)}),{httpProxies:o,wsProxies:e}};function G(t,o){return t[0]==="^"&&new RegExp(t).test(o)||o.startsWith(t)}function U(t,o){return(Ne(t,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}function W(t){let o=new $e(t,"http://example.com"),e=decodeURIComponent(o.pathname),r=Le(o.search.replace(/^\?/,""));return{pathname:e,query:r}}var Ae=/import\.meta\.env\.(.+)/;function Q(t){let o={},e=process.env.NODE_ENV||t.mode;Object.assign(o,{"process.env.NODE_ENV":JSON.stringify(e),"global.process.env.NODE_ENV":JSON.stringify(e),"globalThis.process.env.NODE_ENV":JSON.stringify(e),__vite_process_env_NODE_ENV:JSON.stringify(e)});let r={},n={},s=[];for(let a in t.define){let u=t.define[a];if(typeof u=="string")try{JSON.parse(u),r[a]=u}catch{s.push(a)}else r[a]=JSON.stringify(u);let h=a.match(Ae);h&&r[a]&&(n[h[1]]=`__vite__define__${r[a]}`)}s.length&&P.error(`${ne.yellow("[warn]")} The following keys: ${ne.yellow(ne.underline(s.join(", ")))} declared in 'define' cannot be parsed as regular code snippets.`);let i={},c={};i["import.meta.hot"]="undefined";for(let a in t.env)i[`import.meta.env.${a}`]=JSON.stringify(t.env[a]);return Object.assign(c,{"import.meta.env":JSON.stringify({...t.env,...n}).replace(/"__vite__define__(.+?)"([,}])/g,(a,u,h)=>`${u.replace(/(^\\")|(\\"$)/g,'"')}${h}`)}),{...i,...r,...c,...o}}import ye from"fs/promises";import Ue from"path";import Je from"json5";var V={name:"externalize-deps",setup(t){t.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Ue.isAbsolute(o))return{external:!0}})}},K={name:"json5-loader",setup(t){t.onLoad({filter:/\.json5$/},async({path:o})=>{let e=await ye.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Je.parse(e))}`,loader:"js"}})}},X={name:"json-loader",setup(t){t.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await ye.readFile(o,"utf-8")}`,loader:"js"}))}},Y=t=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:e})=>{let r=t.find(({find:c})=>qe(c,e));if(!r)return null;let{find:n,replacement:s}=r;return{path:(await o.resolve(e.replace(n,s),{kind:"import-statement",resolveDir:s,namespace:"file"})).path,external:!1}})}});function qe(t,o){return t instanceof RegExp?t.test(o):o.length<t.length?!1:o===t?!0:o.startsWith(`${t}/`)}async function he(t,o,e){let r=S(e.include),n=S(e.exclude),s=Q(o),{httpProxies:i}=z(o.server.proxy||{});i.push(...S(e.prefix));let c=S(e.wsPrefix),a={};try{let m=A(o.root,["package.json"]);m&&(a=JSON.parse(m))}catch{}let u=e.build.dist,h=await et(process.cwd(),r,n),M=N.join(o.root,`mock-data-${Date.now()}.js`);await Z.writeFile(M,h,"utf-8");let{code:F,deps:_}=await tt(M,s,o.resolve.alias),p=Xe(_);await Z.unlink(M);let l=[{filename:N.join(u,"mock-data.js"),source:F},{filename:N.join(u,"index.js"),source:Ze(i,c,e.cookiesOptions,e.build.serverPort)},{filename:N.join(u,"package.json"),source:Ye(a,p)}];try{if(N.isAbsolute(u)){await Z.rm(u,{recursive:!0}),Be.mkdirSync(u,{recursive:!0});for(let{filename:m,source:d}of l)await Z.writeFile(m,d,"utf-8")}else for(let{filename:m,source:d}of l)t.emitFile({type:"asset",fileName:m,source:d})}catch{}}function Xe(t){let o=new Set,e=[ue,"connect","cors"];return Object.keys(t).forEach(r=>{t[r].imports.filter(s=>s.external).map(s=>s.path).forEach(s=>{!e.includes(s)&&!Qe(s)&&o.add(s)})}),Array.from(o)}function Ye(t,o){let{dependencies:e={},devDependencies:r={}}=t,n={...e,...r},s={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${me}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function Ze(t,o,e={},r=8080){return`import { createServer } from 'node:http';
3
+ `)}};function B(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 B(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 H(t,o){return t[0]==="^"&&new RegExp(t).test(o)||o.startsWith(t)}function J(t,o){return(Ne(t,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}function j(t){let o=new $e(t,"http://example.com"),e=decodeURIComponent(o.pathname),r=Ie(o.search.replace(/^\?/,""));return{pathname:e,query:r}}var Ue=/import\.meta\.env\.(.+)/;function Q(t){let o={},e=process.env.NODE_ENV||t.mode;Object.assign(o,{"process.env.NODE_ENV":JSON.stringify(e),"global.process.env.NODE_ENV":JSON.stringify(e),"globalThis.process.env.NODE_ENV":JSON.stringify(e),__vite_process_env_NODE_ENV:JSON.stringify(e)});let r={},n={},s=[];for(let a in t.define){let p=t.define[a];if(typeof p=="string")try{JSON.parse(p),r[a]=p}catch{s.push(a)}else r[a]=JSON.stringify(p);let f=a.match(Ue);f&&r[a]&&(n[f[1]]=`__vite__define__${r[a]}`)}s.length&&P.error(`${ne.yellow("[warn]")} The following keys: ${ne.yellow(ne.underline(s.join(", ")))} declared in 'define' cannot be parsed as regular code snippets.`);let i={},c={};i["import.meta.hot"]="undefined";for(let a in t.env)i[`import.meta.env.${a}`]=JSON.stringify(t.env[a]);return Object.assign(c,{"import.meta.env":JSON.stringify({...t.env,...n}).replace(/"__vite__define__(.+?)"([,}])/g,(a,p,f)=>`${p.replace(/(^\\")|(\\"$)/g,'"')}${f}`)}),{...i,...r,...c,...o}}import ye from"node:fs/promises";import Ae from"node:path";import Be from"json5";var V={name:"externalize-deps",setup(t){t.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Ae.isAbsolute(o))return{external:!0}})}},K={name:"json5-loader",setup(t){t.onLoad({filter:/\.json5$/},async({path:o})=>{let e=await ye.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Be.parse(e))}`,loader:"js"}})}},X={name:"json-loader",setup(t){t.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await ye.readFile(o,"utf-8")}`,loader:"js"}))}},Y=t=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:e})=>{let r=t.find(({find:c})=>Je(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 Je(t,o){return t instanceof RegExp?t.test(o):o.length<t.length?!1:o===t?!0:o.startsWith(`${t}/`)}async function he(t,o,e){let r=S(e.include),n=S(e.exclude),s=Q(o),{httpProxies:i}=G(o.server.proxy||{});i.push(...S(e.prefix));let c=S(e.wsPrefix),a={};try{let m=B(o.root,["package.json"]);m&&(a=JSON.parse(m))}catch{}let p=e.build.dist,f=await et(process.cwd(),r,n),M=U.join(o.root,`mock-data-${Date.now()}.js`);await Z.writeFile(M,f,"utf-8");let{code:O,deps:L}=await tt(M,s,o.resolve.alias),l=Xe(L);await Z.unlink(M);let u=[{filename:U.join(p,"mock-data.js"),source:O},{filename:U.join(p,"index.js"),source:Ze(i,c,e.cookiesOptions,e.build.serverPort)},{filename:U.join(p,"package.json"),source:Ye(a,l)}];try{if(U.isAbsolute(p)){await Z.rm(p,{recursive:!0}),qe.mkdirSync(p,{recursive:!0});for(let{filename:m,source:d}of u)await Z.writeFile(m,d,"utf-8")}else for(let{filename:m,source:d}of u)t.emitFile({type:"asset",fileName:m,source:d})}catch{}}function Xe(t){let o=new Set,e=[ue,"connect","cors"];return Object.keys(t).forEach(r=>{t[r].imports.filter(s=>s.external&&!s.path.startsWith("<define:")).map(s=>s.path).forEach(s=>{!e.includes(s)&&!Qe(s)&&o.add(s)})}),Array.from(o)}function Ye(t,o){let{dependencies:e={},devDependencies:r={}}=t,n={...e,...r},s={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${me}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function Ze(t,o,e={},r=8080){return`import { createServer } from 'node:http';
4
4
  import connect from 'connect';
5
5
  import corsMiddleware from 'cors';
6
6
  import { baseMiddleware, mockWebSocket } from 'vite-plugin-mock-dev-server';
@@ -9,10 +9,10 @@ import mockData from './mock-data.js';
9
9
  const app = connect();
10
10
  const server = createServer(app);
11
11
  const httpProxies = ${JSON.stringify(t)};
12
- const wxProxies = ${JSON.stringify(o)}
12
+ const wxProxies = ${JSON.stringify(o)};
13
13
  const cookiesOptions = ${JSON.stringify(e)};
14
14
 
15
- mockWebSocket({ mockData }, server, wxProxies, cookiesOptions)
15
+ mockWebSocket({ mockData }, server, wxProxies, cookiesOptions);
16
16
 
17
17
  app.use(corsMiddleware());
18
18
  app.use(baseMiddleware({ mockData }, {
@@ -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 et(t,o,e){let r=await Ge(o,{cwd:t}),n=Ve(o,e,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,u)=>{let h=Ke(N.join(t,a));i+=`import * as m${u} from '${h}';
28
- `,c+=`m${u}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
27
+ `}async function et(t,o,e){let r=await Ge(o,{cwd:t}),n=Ve(o,e,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,p)=>{let f=Ke(U.join(t,a));i+=`import * as m${p} from '${f}';
28
+ `,c+=`m${p}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
29
29
  ${i}
30
30
  const exporters = [${c}];
31
31
  const mockList = exporters.map((raw) => {
@@ -42,10 +42,10 @@ const mockList = exporters.map((raw) => {
42
42
  }
43
43
  return mockConfig
44
44
  });
45
- export default transformMockData(mockList);`}async function tt(t,o,e){var r;try{let n=await ze({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[Y(e),V,K,X]});return{code:n.outputFiles[0].text,deps:((r=n.metafile)==null?void 0:r.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}import{Buffer as xe}from"buffer";import nt from"cookies";import st from"http-status";import it from"lodash.sortby";import*as J from"mime-types";import{pathToRegexp as Se}from"path-to-regexp";import E from"picocolors";import se from"co-body";import ot from"formidable";async function ve(t,o){var n;let e=t.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(e))return;let r=((n=t.headers["content-type"])==null?void 0:n.toLocaleLowerCase())||"";try{if(r.startsWith("application/json"))return await se.json(t);if(r.startsWith("application/x-www-form-urlencoded"))return await se.form(t);if(r.startsWith("text/plain"))return await se.text(t);if(r.startsWith("multipart/form-data"))return await rt(t,o)}catch(s){console.error(s)}}async function rt(t,o){let e=ot(o);return new Promise((r,n)=>{e.parse(t,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function Me(t,o){return D(t.headers,o.headers)&&D(t.body,o.body)&&D(t.params,o.params)&&D(t.query,o.query)&&D(t.refererQuery,o.refererQuery)}function D(t,o){if(!o)return!0;for(let e in o)if(!be(t[e],o[e]))return!1;return!0}function be(t,o){if(v(t)&&v(o)){let e=new Set;return o.every(r=>t.some((n,s)=>{if(e.has(s))return!1;let i=be(n,r);return i&&e.add(s),i}))}return B(t)&&B(o)?D(t,o):t===o}var ct=/:/g;function Oe(t,{formidableOptions:o={},proxies:e,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:a,pathname:u}=W(n.url);if(!u||e.length===0||!e.some(y=>G(y,n.url)))return i();let h=t.mockData,M=it(Object.keys(h),y=>{var H;return((H=y.match(ct))==null?void 0:H.length)||0}).find(y=>Se(y).test(u));if(!M)return i();let{query:F}=W(n.headers.referer||""),_=await ve(n,o),p=new nt(n,s,r),l=p.get.bind(p),m=n.method.toUpperCase(),d=at(h[M],{pathname:u,method:m,request:{query:a,refererQuery:F,body:_,headers:n.headers,getCookie:l}});if(!d)return i();R("middleware: ",m,n.url);let f=n,k=s;f.body=_,f.query=a,f.refererQuery=F,f.params=U(d.url,u),f.getCookie=l,k.setCookie=p.set.bind(p);let{body:g,delay:O,type:j="json",response:I,status:L=200,statusText:$}=d;if(ie(k,L,$),await pt(f,k,d),await lt(f,k,d),g){try{let y=C(g)?await g(f):g;await we(c,O),ut(k,y,j)}catch(y){P.error(`${E.red("[body error]")} ${n.url}
46
- `,`file: ${E.cyan(d.__filepath__)}`,y),ie(k,500),s.end("")}return}if(I){try{await we(c,O),await I(f,k,i)}catch(y){P.error(`${E.red("[response error]")} ${n.url}
47
- `,`file: ${E.cyan(d.__filepath__)}`,y),ie(k,500),s.end("")}return}s.end("")}}function at(t,{pathname:o,method:e,request:r}){return t.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?v(n.method)?n.method:[n.method]:["GET","POST"]).includes(e))return!1;let i=Se(n.url).test(o);if(i&&n.validator){let c=U(n.url,o);if(C(n.validator))return n.validator({params:c,...r});try{return Me({params:c,...r},n.validator)}catch(a){return P.error(`${E.red("[validator error]")} ${o}
48
- `,`file: ${E.cyan(n.__filepath__)}`,a),!1}}return i})}function ie(t,o=200,e){t.statusCode=o,t.statusMessage=e||mt(o)}async function pt(t,o,e){let{headers:r,type:n="json"}=e,s=e.__filepath__,i=J.contentType(n)||J.contentType(J.lookup(n)||"");if(i&&o.setHeader("Content-Type",i),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock-Power-By","vite-plugin-mock-dev-server"),o.setHeader("X-File-Path",s),!!r)try{let c=C(r)?await r(t):r;Object.keys(c).forEach(a=>{o.setHeader(a,c[a])})}catch(c){P.error(`${E.red("[headers error]")} ${t.url}
49
- `,c)}}async function lt(t,o,{cookies:e}){if(e)try{let r=C(e)?await e(t):e;Object.keys(r).forEach(n=>{let s=r[n];if(v(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){P.error(`${E.red("[cookies error]")} ${t.url}
50
- `,r)}}function ut(t,o,e){if(fe(o))o.pipe(t);else if(xe.isBuffer(o))t.end(e==="text"||e==="json"?o.toString("utf-8"):o);else{let r=typeof o=="string"?o:JSON.stringify(o);t.end(e==="buffer"?xe.from(r):r)}}async function we(t,o){if(!o||typeof o=="number"&&o<=0||v(o)&&o.length!==2)return;let e=0;if(v(o)){let[r,n]=o;e=Math.floor(Math.random()*(n-r+1))+r}else e=o-(Date.now()-t);e>0&&await ke(e)}function mt(t){return st[t]||"Unknown"}import kt from"events";import ce from"fs";import{createRequire as gt}from"module";import je from"path";import{pathToFileURL as yt}from"url";import Ce from"chokidar";import{build as ht}from"esbuild";import vt from"fast-glob";import{createFilter as Mt,normalizePath as q}from"vite";import dt from"lodash.sortby";function Pe(t){let o=[];for(let[,r]of t.entries())r&&(v(r)?o.push(...r):o.push(r));let e={};return o.filter(r=>(r.enabled||typeof r.enabled>"u")&&r.url).forEach(r=>{let{pathname:n,query:s}=W(r.url),i=e[n]??(e[n]=[]),c={...r,url:n};if(c.ws!==!0){let a=c.validator;re(s)||(C(a)?c.validator=function(u){return D(u.query,s)&&a(u)}:a?(c.validator={...a},c.validator.query=c.validator.query?{...s,...c.validator.query}:s):c.validator={query:s})}i.push(c)}),Object.keys(e).forEach(r=>{e[r]=dt(e[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return!s||re(s)?2:C(s)?0:1/Object.keys(s).reduce((c,a)=>c+ft(s[a]),0)})}),e}function ft(t){return t?Object.keys(t).length:0}var bt=ge(import.meta.url),T=gt(bt),ee=class extends kt{constructor(e){super();this.options=e;this.moduleCache=new Map;this.moduleDeps=new Map;this.moduleType="cjs";this._mockData={};this.cwd=e.cwd||process.cwd();try{let r=A(this.cwd,["package.json"]);this.moduleType=r&&JSON.parse(r).type==="module"?"esm":"cjs"}catch{}}get mockData(){return this._mockData}load(){let{include:e,exclude:r}=this.options,n=Mt(e,r,{resolve:!1});vt(e,{cwd:this.cwd}).then(i=>Promise.all(i.filter(n).map(c=>this.loadMock(c)))).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let s=null;this.on("mock:update",async i=>{n(i)&&(await this.loadMock(i),s&&clearImmediate(s),s=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),s=null}))}),this.on("mock:unlink",async i=>{n(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:e}=this.options,[r,...n]=e,s=Ce.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=q(i),this.emit("mock:update",i),R("watcher:add",i)}),s.on("change",async i=>{i=q(i),this.emit("mock:update",i),R("watcher:change",i)}),s.on("unlink",async i=>{i=q(i),this.emit("mock:unlink",i),R("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let e=[];this.depsWatcher=Ce.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=q(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=q(r),this.moduleDeps.delete(r)}),this.on("update:deps",()=>{let r=[];for(let[s]of this.moduleDeps.entries())r.push(s);let n=r.filter(s=>!e.includes(s));n.length>0&&this.depsWatcher.add(n)})}close(){var e,r;(e=this.mockWatcher)==null||e.close(),(r=this.depsWatcher)==null||r.close()}updateMockList(){this._mockData=Pe(this.moduleCache)}updateModuleDeps(e,r){Object.keys(r).forEach(n=>{r[n].imports.map(i=>i.path).forEach(i=>{this.moduleDeps.has(i)||this.moduleDeps.set(i,new Set),this.moduleDeps.get(i).add(e)})}),this.emit("update:deps")}async loadMock(e){if(!e)return;let r=!1;/\.m[jt]s$/.test(e)?r=!0:/\.c[jt]s$/.test(e)?r=!1:r=this.moduleType==="esm";let{code:n,deps:s}=await this.transformWithEsbuild(e,r);try{let i=await this.loadFromCode(e,n,r)||{},c;i.default?c=i.default:(c=[],Object.keys(i).forEach(a=>{v(i[a])?c.push(...i[a]):c.push(i[a])})),v(c)?c.forEach(a=>a.__filepath__=e):c.__filepath__=e,this.moduleCache.set(e,c),this.updateModuleDeps(e,s)}catch(i){console.error(i)}}async loadFromCode(e,r,n){if(n){let s=`${e}.timestamp-${Date.now()}`,i=`${s}.mjs`,c=`${yt(s)}.mjs`;await ce.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{ce.unlinkSync(i)}catch{}}}else{e=je.resolve(this.cwd,e);let s=je.extname(e),i=ce.realpathSync(e),c=s in T.extensions?s:".js",a=T.extensions[c];T.extensions[c]=(h,M)=>{M===i?h._compile(r,M):a(h,M)},delete T.cache[T.resolve(e)];let u=T(e);return T.extensions[c]=a,u.__esModule?u:{default:u}}}async transformWithEsbuild(e,r){var n;try{let s=await ht({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:r?"esm":"cjs",define:this.options.define,plugins:[Y(this.options.alias),V,X,K]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};import xt from"cookies";import{pathToRegexp as Re}from"path-to-regexp";import wt from"picocolors";import{WebSocketServer as St}from"ws";function De(t,o,e,r){var _;let n=new Map,s=new Map,i=new WeakMap,c=p=>{let l=s.get(p);return!l&&s.set(p,l=new Map),l},a=(p,l)=>{let m=p.get(l);return!m&&p.set(l,m=new St({noServer:!0})),m},u=(p,l)=>{let m=n.get(p);!m&&n.set(p,m=new Set),m.add(l)},h=(p,l,m,d,f,k)=>{var g;try{(g=m.setup)==null||g.call(m,l,d),l.on("close",()=>p.delete(f))}catch(O){P.error(`${wt.red("[websocket server error]")} ${k}
51
- `,O)}},M=(p,l,m,d)=>{p.emit("connection",l,m),l.on("close",()=>{let f=d.findIndex(k=>k.ws===l);f!==-1&&d.splice(f,1)})},F=(p,l,m,d,f)=>{let{cleanupList:k,connectionList:g,context:O}=i.get(l);We(k),g.forEach(({ws:j})=>j.removeAllListeners()),l.removeAllListeners(),h(p,l,m,O,d,f),g.forEach(({ws:j,req:I})=>M(l,j,I,g))};(_=t.on)==null||_.call(t,"mock:update-end",p=>{if(!n.has(p))return;let l=n.get(p);if(l)for(let m of l.values())for(let d of t.mockData[m]){if(!d.ws||d.__filepath__!==p)return;let f=c(m);for(let[k,g]of f.entries())F(f,g,d,k,p)}}),o==null||o.on("upgrade",(p,l,m)=>{let{pathname:d,query:f}=W(p.url);if(!d||e.length===0||!e.some(b=>G(b,p.url)))return;let k=t.mockData,g=Object.keys(k).find(b=>Re(b).test(d));if(!g)return;let O=k[g].find(b=>b.url&&b.ws&&Re(b.url).test(d));if(!O)return;let j=O.__filepath__;u(j,g);let I=c(g),L=a(I,d),$=i.get(L);if(!$){let b=[],pe={onCleanup:Ie=>b.push(Ie)};$={cleanupList:b,context:pe,connectionList:[]},i.set(L,$),h(I,L,O,pe,d,j)}let y=p,H=new xt(p,p,r),{query:_e}=W(p.headers.referer||"");y.query=f,y.refererQuery=_e,y.params=U(g,d),y.getCookie=H.get.bind(H),L.handleUpgrade(y,l,m,b=>{R(`websocket-mock: ${p.url} connected`),$.connectionList.push({req:y,ws:b}),M(L,b,y,$.connectionList)})}),o==null||o.on("close",()=>{for(let p of s.values()){for(let l of p.values()){let m=i.get(l);We(m.cleanupList),l.close()}p.clear()}s.clear(),n.clear()})}function We(t){let o;for(;o=t.shift();)o==null||o()}async function ae(t,o,e,r){let n=new ee({include:S(o.include),exclude:S(o.exclude),define:Q(t),alias:t.resolve.alias});n.load(),n.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),e==null||e.on("close",()=>n.close());let{httpProxies:s}=z(t.server.proxy||{}),i=S(o.prefix);return De(n,e,S(o.wsPrefix),o.cookiesOptions),Oe(n,{formidableOptions:o.formidableOptions,proxies:[...i,...s],cookiesOptions:o.cookiesOptions})}function Ee({prefix:t=[],wsPrefix:o=[],include:e=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:r=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:n=!1,formidableOptions:s={},build:i=!1,cookiesOptions:c={}}={}){let a={prefix:t,wsPrefix:o,include:e,exclude:r,reload:n,cookiesOptions:c,formidableOptions:{multiples:!0,...s},build:i?Object.assign({serverPort:8080,dist:"mockServer"},typeof i=="object"?i:{}):!1},u=[Pt(a)];return a.build&&u.push(Ot(a)),u}function Ot(t){let o={};return{name:"vite-plugin-mock-dev-server-generator",enforce:"post",apply:"build",configResolved(e){o=e,e.logger.warn("")},async buildEnd(e){e||o.command==="build"&&await he(this,o,t)}}}function Pt(t){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",config(e){var s;let r=S(t.wsPrefix);if(r.length===0||!((s=e.server)!=null&&s.proxy)||Object.keys(e.server.proxy).length===0)return;let n={};Object.keys(e.server.proxy).forEach(i=>{r.includes(i)||(n[i]=e.server.proxy[i])}),e.server.proxy=n},configResolved(e){o=e,e.logger.warn("")},async configureServer({middlewares:e,config:r,httpServer:n,ws:s}){let i=await ae(r,t,n,s);e.use(i)},async configurePreviewServer({middlewares:e,httpServer:r}){let n=await ae(o,t,r);e.use(n)}}}function pr(t){return t}function lr(t){return e=>(v(e)?e=e.map(r=>t(r)||r):e=t(e)||e,e)}var fr=Ee;export{Oe as baseMiddleware,lr as createDefineMock,fr as default,pr as defineMock,Ee as mockDevServerPlugin,De as mockWebSocket,Pe as transformMockData};
45
+ export default transformMockData(mockList);`}async function tt(t,o,e){var r;try{let n=await ze({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[Y(e),V,K,X]});return{code:n.outputFiles[0].text,deps:((r=n.metafile)==null?void 0:r.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}import Ot from"cors";import{pathToRegexp as Ct}from"path-to-regexp";import{Buffer as xe}from"node:buffer";import nt from"cookies";import st from"http-status";import it from"lodash.sortby";import*as q from"mime-types";import{pathToRegexp as Se}from"path-to-regexp";import _ from"picocolors";import se from"co-body";import ot from"formidable";async function ve(t,o){var n;let e=t.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(e))return;let r=((n=t.headers["content-type"])==null?void 0:n.toLocaleLowerCase())||"";try{if(r.startsWith("application/json"))return await se.json(t);if(r.startsWith("application/x-www-form-urlencoded"))return await se.form(t);if(r.startsWith("text/plain"))return await se.text(t);if(r.startsWith("multipart/form-data"))return await rt(t,o)}catch(s){console.error(s)}}async function rt(t,o){let e=ot(o);return new Promise((r,n)=>{e.parse(t,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function Me(t,o){return E(t.headers,o.headers)&&E(t.body,o.body)&&E(t.params,o.params)&&E(t.query,o.query)&&E(t.refererQuery,o.refererQuery)}function E(t,o){if(!o)return!0;for(let e in o)if(!be(t[e],o[e]))return!1;return!0}function be(t,o){if(v(t)&&v(o)){let e=new Set;return o.every(r=>t.some((n,s)=>{if(e.has(s))return!1;let i=be(n,r);return i&&e.add(s),i}))}return N(t)&&N(o)?E(t,o):Object.is(t,o)}var ct=/:/g;function Oe(t,{formidableOptions:o={},proxies:e,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:a,pathname:p}=j(n.url);if(!p||e.length===0||!e.some(h=>H(h,n.url)))return i();let f=t.mockData,M=it(Object.keys(f),h=>{var A;return((A=h.match(ct))==null?void 0:A.length)||0}).find(h=>Se(h).test(p));if(!M)return i();let{query:O}=j(n.headers.referer||""),L=await ve(n,o),l=new nt(n,s,r),u=l.get.bind(l),m=n.method.toUpperCase(),d=at(f[M],{pathname:p,method:m,request:{query:a,refererQuery:O,body:L,headers:n.headers,getCookie:u}});if(!d)return i();D("middleware: ",m,n.url);let k=n,g=s;k.body=L,k.query=a,k.refererQuery=O,k.params=J(d.url,p),k.getCookie=u,g.setCookie=l.set.bind(l);let{body:y,delay:C,type:R="json",response:I,status:$=200,statusText:T}=d;if(ie(g,$,T),await pt(k,g,d),await lt(k,g,d),y){try{let h=W(y)?await y(k):y;await we(c,C),ut(g,h,R)}catch(h){P.error(`${_.red("[body error]")} ${n.url}
46
+ `,`file: ${_.cyan(d.__filepath__)}`,h),ie(g,500),s.end("")}return}if(I){try{await we(c,C),await I(k,g,i)}catch(h){P.error(`${_.red("[response error]")} ${n.url}
47
+ `,`file: ${_.cyan(d.__filepath__)}`,h),ie(g,500),s.end("")}return}s.end("")}}function at(t,{pathname:o,method:e,request:r}){return t.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?v(n.method)?n.method:[n.method]:["GET","POST"]).includes(e))return!1;let i=Se(n.url).test(o);if(i&&n.validator){let c=J(n.url,o);if(W(n.validator))return n.validator({params:c,...r});try{return Me({params:c,...r},n.validator)}catch(a){return P.error(`${_.red("[validator error]")} ${o}
48
+ `,`file: ${_.cyan(n.__filepath__)}`,a),!1}}return i})}function ie(t,o=200,e){t.statusCode=o,t.statusMessage=e||mt(o)}async function pt(t,o,e){let{headers:r,type:n="json"}=e,s=e.__filepath__,i=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=W(r)?await r(t):r;Object.keys(c).forEach(a=>{o.setHeader(a,c[a])})}catch(c){P.error(`${_.red("[headers error]")} ${t.url}
49
+ `,c)}}async function lt(t,o,{cookies:e}){if(e)try{let r=W(e)?await e(t):e;Object.keys(r).forEach(n=>{let s=r[n];if(v(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){P.error(`${_.red("[cookies error]")} ${t.url}
50
+ `,r)}}function ut(t,o,e){if(fe(o))o.pipe(t);else if(xe.isBuffer(o))t.end(e==="text"||e==="json"?o.toString("utf-8"):o);else{let r=typeof o=="string"?o:JSON.stringify(o);t.end(e==="buffer"?xe.from(r):r)}}async function we(t,o){if(!o||typeof o=="number"&&o<=0||v(o)&&o.length!==2)return;let e=0;if(v(o)){let[r,n]=o;e=Math.floor(Math.random()*(n-r+1))+r}else e=o-(Date.now()-t);e>0&&await ke(e)}function mt(t){return st[t]||"Unknown"}import kt from"node:events";import ce from"node:fs";import{createRequire as gt}from"node:module";import Pe from"node:path";import{pathToFileURL as yt}from"node:url";import je from"chokidar";import{build as ht}from"esbuild";import vt from"fast-glob";import{createFilter as Mt,normalizePath as z}from"vite";import dt from"lodash.sortby";function Ce(t){let o=[];for(let[,r]of t.entries())r&&(v(r)?o.push(...r):o.push(r));let e={};return o.filter(r=>N(r)&&r.enabled!==!1&&r.url).forEach(r=>{let{pathname:n,query:s}=j(r.url),i=e[n]??=[],c={...r,url:n};if(c.ws!==!0){let a=c.validator;re(s)||(W(a)?c.validator=function(p){return E(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]=dt(e[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return!s||re(s)?2:W(s)?0:1/Object.keys(s).reduce((c,a)=>c+ft(s[a]),0)})}),e}function ft(t){return t?Object.keys(t).length:0}var bt=ge(import.meta.url),F=gt(bt),ee=class extends kt{constructor(e){super();this.options=e;this.cwd=e.cwd||process.cwd();try{let r=B(this.cwd,["package.json"]);this.moduleType=r&&JSON.parse(r).type==="module"?"esm":"cjs"}catch{}}moduleCache=new Map;moduleDeps=new Map;cwd;mockWatcher;depsWatcher;moduleType="cjs";_mockData={};get mockData(){return this._mockData}load(){let{include:e,exclude:r}=this.options,n=Mt(e,r,{resolve:!1});vt(e,{cwd:this.cwd}).then(i=>Promise.all(i.filter(n).map(c=>this.loadMock(c)))).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let s=null;this.on("mock:update",async i=>{n(i)&&(await this.loadMock(i),s&&clearImmediate(s),s=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),s=null}))}),this.on("mock:unlink",async i=>{n(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:e}=this.options,[r,...n]=e,s=je.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=z(i),this.emit("mock:update",i),D("watcher:add",i)}),s.on("change",async i=>{i=z(i),this.emit("mock:update",i),D("watcher:change",i)}),s.on("unlink",async i=>{i=z(i),this.emit("mock:unlink",i),D("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let e=[];this.depsWatcher=je.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=z(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=z(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=Ce(this.moduleCache)}updateModuleDeps(e,r){Object.keys(r).forEach(n=>{r[n].imports.map(i=>i.path).forEach(i=>{this.moduleDeps.has(i)||this.moduleDeps.set(i,new Set),this.moduleDeps.get(i).add(e)})}),this.emit("update:deps")}async loadMock(e){if(!e)return;let r=!1;/\.m[jt]s$/.test(e)?r=!0:/\.c[jt]s$/.test(e)?r=!1:r=this.moduleType==="esm";let{code:n,deps:s}=await this.transformWithEsbuild(e,r);try{let i=await this.loadFromCode(e,n,r)||{},c;i.default?c=i.default:(c=[],Object.keys(i).forEach(a=>{v(i[a])?c.push(...i[a]):c.push(i[a])})),v(c)?c.forEach(a=>a.__filepath__=e):c.__filepath__=e,this.moduleCache.set(e,c),this.updateModuleDeps(e,s)}catch(i){console.error(i)}}async loadFromCode(e,r,n){if(n){let s=`${e}.timestamp-${Date.now()}`,i=`${s}.mjs`,c=`${yt(s)}.mjs`;await ce.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{ce.unlinkSync(i)}catch{}}}else{e=Pe.resolve(this.cwd,e);let s=Pe.extname(e),i=ce.realpathSync(e),c=s in F.extensions?s:".js",a=F.extensions[c];F.extensions[c]=(f,M)=>{M===i?f._compile(r,M):a(f,M)},delete F.cache[F.resolve(e)];let p=F(e);return F.extensions[c]=a,p.__esModule?p:{default:p}}}async transformWithEsbuild(e,r){var n;try{let s=await ht({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:r?"esm":"cjs",define:this.options.define,plugins:[Y(this.options.alias),V,X,K]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};import xt from"cookies";import{pathToRegexp as Re}from"path-to-regexp";import wt from"picocolors";import{WebSocketServer as St}from"ws";function De(t,o,e,r){var L;let n=new Map,s=new Map,i=new WeakMap,c=l=>{let u=s.get(l);return!u&&s.set(l,u=new Map),u},a=(l,u)=>{let m=l.get(u);return!m&&l.set(u,m=new St({noServer:!0})),m},p=(l,u)=>{let m=n.get(l);!m&&n.set(l,m=new Set),m.add(u)},f=(l,u,m,d,k,g)=>{var y;try{(y=m.setup)==null||y.call(m,u,d),u.on("close",()=>l.delete(k))}catch(C){P.error(`${wt.red("[websocket server error]")} ${g}
51
+ `,C)}},M=(l,u,m,d)=>{l.emit("connection",u,m),u.on("close",()=>{let k=d.findIndex(g=>g.ws===u);k!==-1&&d.splice(k,1)})},O=(l,u,m,d,k)=>{let{cleanupList:g,connectionList:y,context:C}=i.get(u);We(g),y.forEach(({ws:R})=>R.removeAllListeners()),u.removeAllListeners(),f(l,u,m,C,d,k),y.forEach(({ws:R,req:I})=>M(u,R,I,y))};(L=t.on)==null||L.call(t,"mock:update-end",l=>{if(!n.has(l))return;let u=n.get(l);if(u)for(let m of u.values())for(let d of t.mockData[m]){if(!d.ws||d.__filepath__!==l)return;let k=c(m);for(let[g,y]of k.entries())O(k,y,d,g,l)}}),o==null||o.on("upgrade",(l,u,m)=>{let{pathname:d,query:k}=j(l.url);if(!d||e.length===0||!e.some(b=>H(b,l.url)))return;let g=t.mockData,y=Object.keys(g).find(b=>Re(b).test(d));if(!y)return;let C=g[y].find(b=>b.url&&b.ws&&Re(b.url).test(d));if(!C)return;let R=C.__filepath__;p(R,y);let I=c(y),$=a(I,d),T=i.get($);if(!T){let b=[],pe={onCleanup:Le=>b.push(Le)};T={cleanupList:b,context:pe,connectionList:[]},i.set($,T),f(I,$,C,pe,d,R)}let h=l,A=new xt(l,l,r),{query:_e}=j(l.headers.referer||"");h.query=k,h.refererQuery=_e,h.params=J(y,d),h.getCookie=A.get.bind(A),$.handleUpgrade(h,u,m,b=>{D(`websocket-mock: ${l.url} connected`),T.connectionList.push({req:h,ws:b}),M($,b,h,T.connectionList)})}),o==null||o.on("close",()=>{for(let l of s.values()){for(let u of l.values()){let m=i.get(u);We(m.cleanupList),u.close()}l.clear()}s.clear(),n.clear()})}function We(t){let o;for(;o=t.shift();)o==null||o()}function ae(t,o,e,r){let n=new ee({include:S(o.include),exclude:S(o.exclude),define:Q(t),alias:t.resolve.alias});n.load(),n.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),e==null||e.on("close",()=>n.close());let{httpProxies:s}=G(t.server.proxy||{}),c=[...S(o.prefix),...s];De(n,e,S(o.wsPrefix),o.cookiesOptions);let a=[];return a.push(Pt(n,c,t,o),Oe(n,{formidableOptions:o.formidableOptions,proxies:c,cookiesOptions:o.cookiesOptions})),a.filter(Boolean)}function Pt(t,o,e,r){let n={},s=r.cors!==!1||e.server.cors!==!1;return e.server.cors!==!1&&(n={...n,...typeof e.server.cors=="boolean"?{}:e.server.cors}),r.cors!==!1&&(n={...n,...typeof r.cors=="boolean"?{}:r.cors}),s?function(i,c,a){let{pathname:p}=j(i.url);if(!p||o.length===0||!o.some(O=>H(O,i.url)))return a();let f=t.mockData;if(!Object.keys(f).find(O=>Ct(O).test(p)))return a();Ot(n)(i,c,a)}:void 0}function Ee({prefix:t=[],wsPrefix:o=[],include:e=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:r=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:n=!1,cors:s=!0,formidableOptions:i={},build:c=!1,cookiesOptions:a={}}={}){let p={prefix:t,wsPrefix:o,include:e,exclude:r,reload:n,cors:s,cookiesOptions:a,formidableOptions:{multiples:!0,...i},build:c?Object.assign({serverPort:8080,dist:"mockServer"},typeof c=="object"?c:{}):!1},f=[Rt(p)];return p.build&&f.push(jt(p)),f}function jt(t){let o={};return{name:"vite-plugin-mock-dev-server-generator",enforce:"post",apply:"build",configResolved(e){o=e,e.logger.warn("")},async buildEnd(e){e||o.command==="build"&&await he(this,o,t)}}}function Rt(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("")},configureServer({middlewares:e,config:r,httpServer:n,ws:s}){ae(r,t,n,s).forEach(c=>e.use(c))},configurePreviewServer({middlewares:e,httpServer:r}){ae(o,t,r).forEach(s=>e.use(s))}}}function fr(t){return t}function kr(t){return e=>(v(e)?e=e.map(r=>t(r)||r):e=t(e)||e,e)}var vr=Ee;export{Oe as baseMiddleware,kr as createDefineMock,vr as default,fr as defineMock,Ee as mockDevServerPlugin,De as mockWebSocket,Ce as transformMockData};
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "vite-plugin-mock-dev-server",
3
- "version": "1.1.15",
3
+ "version": "1.2.0",
4
4
  "keywords": [
5
5
  "vite",
6
6
  "plugin",
7
7
  "vite-plugin",
8
8
  "mock",
9
- "mock-server"
9
+ "mock-server",
10
+ "development"
10
11
  ],
11
12
  "homepage": "https://vite-plugin-mock-dev-server.netlify.app",
12
13
  "repository": {
@@ -35,10 +36,11 @@
35
36
  "chokidar": "^3.5.3",
36
37
  "co-body": "^6.1.0",
37
38
  "cookies": "^0.8.0",
39
+ "cors": "^2.8.5",
38
40
  "debug": "^4.3.4",
39
- "esbuild": "^0.17.19",
41
+ "esbuild": "^0.18.4",
40
42
  "fast-glob": "^3.2.12",
41
- "formidable": "^2.1.1",
43
+ "formidable": "^3.4.0",
42
44
  "http-status": "^1.6.2",
43
45
  "is-core-module": "^2.12.1",
44
46
  "json5": "^2.2.3",
@@ -49,31 +51,32 @@
49
51
  "ws": "^8.13.0"
50
52
  },
51
53
  "devDependencies": {
52
- "@pengzhanbo/eslint-config": "^0.3.12",
53
- "@pengzhanbo/prettier-config": "^0.3.12",
54
+ "@pengzhanbo/eslint-config": "^0.3.14",
55
+ "@pengzhanbo/prettier-config": "^0.3.14",
54
56
  "@types/co-body": "^6.1.0",
55
57
  "@types/cookies": "^0.7.7",
56
- "@types/debug": "^4.1.7",
58
+ "@types/cors": "^2.8.13",
59
+ "@types/debug": "^4.1.8",
57
60
  "@types/formidable": "^2.0.6",
58
61
  "@types/is-core-module": "^2.2.0",
59
62
  "@types/lodash.sortby": "^4.7.7",
60
63
  "@types/mime-types": "^2.1.1",
61
- "@types/node": "^18.16.13",
62
- "@types/ws": "^8.5.4",
63
- "bumpp": "^9.1.0",
64
- "conventional-changelog-cli": "^2.2.2",
65
- "eslint": "^8.41.0",
64
+ "@types/node": "^18.16.18",
65
+ "@types/ws": "^8.5.5",
66
+ "bumpp": "^9.1.1",
67
+ "conventional-changelog-cli": "^3.0.0",
68
+ "eslint": "^8.43.0",
66
69
  "mockjs": "^1.1.0",
67
70
  "prettier": "^2.8.8",
68
- "tsup": "^6.7.0",
69
- "typescript": "^5.0.4",
70
- "vite": "^4.3.8",
71
- "vitepress": "1.0.0-alpha.76"
71
+ "tsup": "^7.0.0",
72
+ "typescript": "^5.1.3",
73
+ "vite": "^4.3.9",
74
+ "vitepress": "1.0.0-beta.2"
72
75
  },
73
76
  "peerDependencies": {
74
77
  "vite": ">=3.0.0"
75
78
  },
76
- "packageManager": "pnpm@8.5.0",
79
+ "packageManager": "pnpm@8.6.2",
77
80
  "engines": {
78
81
  "node": "^14.18.0 || >=16"
79
82
  },